User Tools

Site Tools


malete_-_primeros_pasos

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
malete_-_primeros_pasos [05/05/2009 00:00]
malete_-_primeros_pasos [05/05/2009 18:27]
fernando
Line 1: Line 1:
 +====== Malete - Primeros pasos ======
  
 +<note important>​
 +ATENCION: estas son unas notas informales tomadas en 2005, mientras aprendía a usar Malete. Aún falta transcribir una parte de ellas. Esto no está organizado como un HOWTO paso a paso para el recién llegado; es más bien una especie de bitácora donde registré los pasos que fui dando. Para generar un documento más útil habrá que reorganizarlo. ---Fernando
 +</​note>​
 +
 +
 +Vamos a intentar describir paso a paso un primer encuentro con Malete.
 +
 +
 +===== Setup =====
 +
 +Malete puede descargarse desde [[http://​malete.org/​Doc/​DownLoad|http://​malete.org/​Doc/​DownLoad]],​ y la versión más reciente (en marzo de 2008) es la 1.0.3. Obtenemos el archivo ''​malete.1.0.3.tgz'',​ y lo descomprimimos:​
 +
 +  tar xzf malete.1.0.3.tgz
 +
 +**SUGERENCIA**:​ al descomprimir debería crearse un directorio '​malete-version'​.
 +
 +Vemos que se crean cuatro directorios:​
 +
 +  * ''​doc'':​ aquí se encuentra la documentación;​ se trata de archivos de texto con una sintaxis al estilo wiki, a partir de los cuales se genera la versión HTML que está en el [[http://​malete.org/​|sitio web de Malete]].
 +
 +  * ''​mlt'':​ contiene el código fuente de Malete (archivos ''​*.c''​ y ''​*.h''​),​ y el archivo ''​Makefile''​.
 +
 +  * ''​php'':​ aquí encontramos un par de demos y una biblioteca PHP que implementa funciones de lectura, escritura, consulta (query) e indización.
 +
 +  * ''​test'':​ contiene dos bases de datos: ''​cds''​ (la tradicional base distribuida por Unesco), y ''​unicode''​ (una pequeña base para probar el uso de Unicode en Malete).
 +
 +Cada base de datos dentro del directorio ''​test''​ está compuesta por tres archivos:
 +
 +  * ''<​db_name>​.m0d'':​ malete options (record 0) file (collation y qué más?)
 +  * ''<​db_name>​.mqt'':​ **m**alete **q**uery **t**erms
 +  * ''<​db_name>​.mrd'':​ **m**alete **r**ecord **d**ata
 +
 +Es importante notar que se trata de **archivos de texto**.
 +
 +En el directorio principal está el archivo ''​README'',​ que contiene unas indicaciones para que podamos comenzar a interactuar con Malete:
 +
 +  make -C mlt server
 +  ​
 +  then check out php/​demo.php
 +  or telnet localhost 2042
 +  and type (be careful to use a tab after the Q with queries!):
 +  test.Q
 +  ​
 +  test.Q
 +  ​
 +  test.Q water
 +  ​
 +  test.Q plant water?
 +  ​
 +  test.Q plant + dev$
 +  ​
 +  test.Q
 +
 +Se trata solamente de una sugerencia inicial, como para comenzar a familiarizarnos con el protocolo de comunicación usado por Malete. Seguiremos esas indicaciones,​ y veremos qué sucede.
 +
 +
 +===== Compilación =====
 +
 +Comenzamos entonces con el comando
 +
 +  make -C mlt server
 +
 +Esto invoca al programa ''​make'',​ y le pasa dos argumentos: la opción ''​-C mlt''​ le indica que debe leer el Makefile del directorio ''​mlt'',​ y el target ''​server''​ ...? **TODO**: ver los otros targets en el Makefile.
 +
 +<​note>​
 +Para que esto funcione, el sistema debe contar con las herramientas necesarias para llevar a cabo la compilación. Por ejemplo, en una instalación fresca de Ubuntu Dapper tuve que instalar dos paquetes:
 +
 +  sudo apt-get install gcc
 +  sudo apt-get install build-essential
 +</​note>​
 +
 +Una vez concluida la compilación,​ el mensaje final es
 +
 +  listening on '​*:​2042'​
 +
 +El servidor Malete utiliza por defecto el puerto 2042.
 +
 +Como resultado de la ejecución de ''​make'',​ se han creado varios archivos. Hay un nuevo directorio ''​bin'',​ del cual nos interesa especialmente el archivo ejecutable ''​malete''​ (273 KB).
 +
 +Dentro del directorio ''​test''​ fueron creados estos 5 archivos:
 +
 +  * ''​test.m0d''​
 +  * ''​test.mrd''​
 +  * ''​test.mrx''​
 +  * ''​test.mqd''​
 +  * ''​test.mqx''​
 +
 +Esta nueva base de datos, llamada ''​test'',​ es una copia de la base ''​cds''​ que vino con Malete. Más precisamente,​ los archivos ''​test.m0d''​ y ''​test.mrd''​ son copia respectivamente de ''​cds.m0d''​ y ''​cds.mrd'',​ mientras que
 +
 +  * ''​test.mrx''​ se genera a partir de ''​test.mrd''​
 +  * ''​test.mqd''​ se genera a partir de ''​cds.mqt''​
 +  * ''​test.mqx''​ se genera a partir de ''​test.mqd''​ y ''​test.m0d''​
 +
 +===== La base de pruebas =====
 +
 +<​note>​
 +Comparar con la base CDS de MicroIsis o WinIsis.
 +</​note>​
 +
 +Podemos examinar la base ''​cds''​ con una herramienta conocida, el utilitario ''​mx''​. Para ello, podemos crear una base Isis a partir de la base Malete. Previamente necesitamos recompilar ''​malete''​ para que trabaje con bases Isis en "​formato Unix", en lugar del "​formato DOS" que usa por defecto:
 +
 +  $ export CDSUNIX=1
 +  $ make -B -C mlt server ​ # -B fuerza una recompilación
 +
 +Ahora exportamos la base ''​cds'',​ de Malete a Isis:
 +
 +  $ bin/malete cdsexp cds -ftest/
 +  $ mx test/cds +control
 +  *test/cds
 +   ​nxtmfn nxtmfb nxtmfp ​ t  reccnt mfcxx1 mfcxx2 mfcxx3 ​   RC
 +     ​152 ​   122    320   ​0 ​   150      0      0      0      0
 +  ..
 +
 +''​mx''​ nos indica que hay 151 registros en la base, aunque el 151 no puede ser leído:
 +
 +  $ mx test/cds "​pft=mfn,​x2,​v24(8,​8)"/​ from=148 now
 +  000148 ​ Personal statement
 +  000149 ​ For a training project based on programmed learning in the developing
 +          countries: objectives, means and resources, organization and
 +          management, development
 +  000150 ​ Micropolitan development:​ theory and practice of greater-rural
 +          economic development
 +  ​
 +  fatal: recread/​read
 +
 +También hay problemas para leer el diccionario usando ''​mx'':​
 +
 +  $ mx test/cds water
 +  ​
 +  fatal: noderead/​ock
 +
 +  $ mx dict=test/​cds
 +  ​
 +  fatal: noderead/​ock
 +
 +
 +Examinemos la versión DOS de la misma base (desde wine).
 +
 +  $ export CDSUNIX= ​  # volvemos al default
 +  $ make -B -C mlt server
 +
 +  $ bin/malete cdsexp cds -ftest/
 +
 +  $ wine /​media/​win1/​cisis/​5.2/​1030/​mx test/cds +control
 +  *test/cds
 +   ​nxtmfn nxtmfb nxtmfp ​ t  reccnt mfcxx1 mfcxx2 mfcxx3 ​   RC
 +     ​152 ​   122     ​12 ​  ​0 ​   150      0      0      0      0
 +  ..
 +  $ wine /​media/​win1/​cisis/​5.2/​1030/​mx test/cds "​pft=mfn,​x2,​v24(8,​8)/"​ now from=148
 +  000148 ​ Personal statement
 +  000149 ​ For a training project based on programmed learning in the developing
 +          countries: objectives, means and resources, organization and
 +          management, development
 +  000150 ​ Micropolitan development:​ theory and practice of greater-rural
 +          economic development
 +  000151 ​ Manuel pratique des assurances sociales
 +
 +Notamos que en este caso ''​mx''​ nos muestra un registro 151, pero se trata de una copia (fantasma) del registro 101:
 +
 +   $ wine /​media/​win1/​cisis/​5.2/​1030/​mx test/cds from=101
 +   ​mfn= ​  101
 +    24  «Manuel pratique des assurances sociales»
 +    26  «^aParis^bDOCIS^c1968»
 +    30  «^a1 v. (loose-leaf)»
 +    50  «Kept up-to-date»
 +    69  «<​social security><​legislation><​France><​guides>​»
 +    71  «Documentation des institutions»
 +   ..x
 +   $ wine /​media/​win1/​cisis/​5.2/​1030/​mx test/cds from=151
 +   ​mfn= ​  151
 +    24  «Manuel pratique des assurances sociales»
 +    26  «^aParis^bDOCIS^c1968»
 +    30  «^a1 v. (loose-leaf)»
 +    50  «Kept up-to-date»
 +    69  «<​social security><​legislation><​France><​guides>​»
 +    71  «Documentation des institutions»
 +   ..x
 +
 +
 +El error en el diccionario es el mismo.
 +
 +
 +===== La primera sesión =====
 +
 +Tenemos pues nuestro servidor Malete escuchando en el puerto 2042. Vamos a ver qué sucede al establecer una conexión vía telnet. Para esto abrimos otra consola, y en ella:
 +
 +  $ telnet localhost 2042
 +  Trying 127.0.0.1...
 +  Connected to localhost.
 +  Escape character is '​^]'​.
 +
 +El servidor Malete está listo para escuchar nuestros mensajes.
 +
 +==== Consulta vacía ====
 +
 +Empecemos con **test.Q**, seguido por un doble Enter:
 +
 +  test.Q
 +
 +La **Q** indica que estamos haciendo una **consulta** (//​query//​),​ y la ausencia de parámetros hace que se trate de un caso especial de consulta, la //consulta vacía//. Con esta consulta recuperamos todos los registros de la base (véase [[http://​malete.org/​Doc/​Protocol|Protocol]]).
 +
 +Malete nos responde de esta manera:
 +  ​
 +  #       ​151 ​    ​0 ​      0
 +  -9      1@0
 +  44      Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +  50      Incl. bibl.
 +  69      Paper on: <plant physiology><​plant transpiration><​measurement and instruments>​
 +  24      Techniques for the measurement of transpiration of individual plants
 +  26              aParis ​ bUnesco c-1965
 +  30              ap. 211-224 ​    ​billus.
 +  70      Magalhaes, A.C.
 +  70      Franco, C.M.
 +  -8      2@336
 +  44      Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +  50      Incl. bibl.
 +  69      Paper on: <plant evapotranspiration>​
 +  24      <The> Controlled climate in the plant chamber and its influence upon assimilation and transpiration
 +  26              c1965
 +  30              ap. 225-232 ​    ​billus.
 +  70      Bosian, G.
 +  ​
 +  [Esos son los primeros 2 registros; siguen 18 más.]
 +
 +La línea inicial de la respuesta,
 +
 +  #       ​151 ​    ​0 ​      0
 +
 +es un **comentario** (lo sabemos pues comienza con '#'​),​ que nos proporciona información acerca de la consulta realizada:
 +
 +  * '​151'​ es la **cantidad estimada de registros** restantes para la presente consulta, incluyendo los recién leídos.
 +  * '​0'​ es el **número de la consulta**, que puede ser usado para referirse a ella desde futuras consultas; veremos que en sucesivas consultas este número va aumentando.
 +  * **record id de truncamiento**:​ si no es '​0',​ es el record id donde la búsqueda fue truncada debido al límite de tamaño para el conjunto de resultados.
 +
 +A continuación aparece el primer registro de la base ''​test'':​
 +
 +<​code>​
 +  -9      1@0
 +  44      Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +  50      Incl. bibl.
 +  69      Paper on: <plant physiology><​plant transpiration><​measurement and instruments>​
 +  24      Techniques for the measurement of transpiration of individual plants
 +  26              aParis ​ bUnesco c-1965
 +  30              ap. 211-224 ​    ​billus.
 +  70      Magalhaes, A.C.
 +  70      Franco, C.M.
 +</​code>​
 +
 +Luego el segundo registro:
 +
 +<​code>​
 +  -8      2@336
 +  44      Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +  50      Incl. bibl.
 +  69      Paper on: <plant evapotranspiration>​
 +  24      <The> Controlled climate in the plant chamber and its influence upon assimilation and transpiration
 +  26              c1965
 +  30              ap. 225-232 ​    ​billus.
 +  70      Bosian, G.
 +</​code>​
 +
 +y así sucesivamente,​ hasta llegar al número 20.
 +
 +Vemos que cada registro se inicia con una línea que comienza con un número negativo de la forma **-n**, donde **n** es la cantidad de campos del registro. Debe notarse que esa línea inicial es también un campo.
 +
 +Cuando repetimos el mensaje ''​test.Q''​ (seguido, como en todos los casos, por doble Enter), obtenemos los siguientes 20 registros de la base ''​test'',​ comenzando por el 21:
 +
 +  test.Q
 +  ​
 +  #       ​131 ​    ​0 ​      0
 +  -8      21@6320
 +  24      <The> Determination of the evaporation from the plant cover and the surface of the soil by relating lysimeter and soil moisture measurements to potential evaporation
 +  26              c1965
 +  30              ap. 461-465 ​    ​billus.
 +  44      Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +  50      Incl. bibl.
 +  69      Paper on: <​evaporation><​soil moisture><​plant physiology><​plant ecology><​measurement and instruments>​
 +  70      Klausing, O.
 +  -9      22@6741
 +  44      Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +  50      Incl. bibl.
 +  69      Paper on: <water balance><​water yield><​forests><​plant ecology><​rain><​run-off><​Israel>​
 +  24      Water yields of forest, Maquis and grass covers in semi-arid regions: a literature review
 +  26              c1965
 +  30              ap. 467-477 ​    ​billus.
 +  70      Shachori, A.Y.
 +  70      Michaeli, A.
 +  ​
 +  [Siguen los registros hasta el 40.]
 +
 +Vemos que la línea inicial de la respuesta, el comentario:
 +
 +  #       ​131 ​    ​0 ​      0
 +
 +ahora nos indica que restan 131 registros (los primeros 20 ya los habíamos recibido), y el identificador de la consulta sigue siendo '​0',​ pues seguimos solicitando resultados de la consulta anterior.
 +
 +==== Consultas no vacías ====
 +
 +Hagamos ahora una consulta no vacía, con el término **water**:
 +
 +  test.Q water
 +  ​
 +  #       ​14 ​     1       0
 +  0       4
 +  0       5
 +  0       10
 +  0       11
 +  0       12
 +  0       13
 +  0       14
 +  0       16
 +  0       22
 +  0       24
 +  0       25
 +  0       43
 +  0       52
 +  0       57
 +
 +Lo que hemos hecho es una búsqueda por el término "​water",​ y lo que vemos es una
 +lista de los 14 record-id encontrados (record-id es equivalente al MFN de cds/isis). A diferencia del ejemplo previo, donde directamente recibíamos los registros completos, aquí solamente tenemos acceso a la lista de MFNs. Pero también podemos recuperar los registros:
 +
 +   ​test.Q ​ water?
 +   
 +   # ​      ​14 ​     2       0
 +   ​-9 ​     4@1043
 +   ​44 ​     Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +   ​50 ​     Incl. bibl.
 +   ​69 ​     Paper on: <​hygrometers><​plant transpiration><​moisture><​water balance>
 +   ​24 ​     <An> Electric hygrometer apparatus for measuring water-vapour loss from plants in the field
 +   ​26 ​             c1965
 +   ​30 ​             ap. 247-257 ​    ​billus.
 +   ​70 ​     Grieve, B.J.
 +   ​70 ​     Went, F.W.
 +  ​
 +  [... siguen 13 registros más.]
 +
 +
 +El signo de interrogación **?** divide la consulta en dos partes: a la izquierda la **expresión de búsqueda**,​ a la derecha un **filtro**. En este caso el filtro es vacío, pero la sola presencia del signo ? hace que el servidor Malete nos envíe los registros.
 +
 +  If no filter is specified (i.e. no '?'​),​ only record ids are returned.
 +
 +
 +La siguiente consulta, de acuerdo con la sugerencia del archivo ''​README'',​ es:
 +
 +  test.Q ​ plant + dev$
 +  ​
 +  #       ​26 ​     3       0
 +  0       2
 +  0       3
 +  0       5
 +  0       6
 +  0       8
 +  0       21
 +  0       25
 +  0       27
 +  0       86
 +  0       87
 +  0       100
 +  0       111
 +  0       114
 +  0       118
 +  0       124
 +  0       127
 +  0       128
 +  0       130
 +  0       131
 +  0       132
 +
 +De acuerdo con el comentario que encabeza la respuesta, hay 26 registros en el conjunto de resultados de nuestra consulta; como sólo recibimos los identificadores de los primeros 20 registros, enviamos un nuevo mensaje **test.Q**, sin indicar parámetros:​
 +
 +  test.Q
 +  ​
 +  #       ​6 ​      ​3 ​      0
 +  0       133
 +  0       134
 +  0       141
 +  0       147
 +  0       149
 +  0       150
 +
 +Tal como habíamos visto más arriba al usar una consulta vacía, el mensaje test.Q no crea una nueva consulta (de ahí que el número de identificación siga siendo '​3'​),​ sino que continúa solicitando más resultados para la consulta actual, si los hay.
 +
 +Si reiteramos el mensaje **test.Q**, ahora que ya hemos agotado los resultados para la última consulta, obtenemos:
 +
 +  test.Q
 +  ​
 +  #       ​0 ​      ​3 ​      0
 +
 +
 +Repetimos la consulta **plant water**, esta vez sin el signo de interrogación final:
 +
 +  test.Q ​ plant water
 +  ​
 +  #       ​2 ​      ​4 ​      0
 +  0       5
 +  0       25
 +
 +(en lugar de obtener los 2 registros, como antes, ahora sólo vemos la lista de
 +identificadores).
 +
 +
 +Hemos estado usando un único tipo de mensaje: Q (query message, mensaje de consulta). La forma de este mensaje (para nuestra base ''​test''​) es:
 +
 +  test.Q[*TAB*query]
 +
 +donde //query// es una expresión en el lenguaje de consulta de Malete (véase [[http://​malete.org/​Doc/​Query|Query]]).
 +
 +
 +==== Lectura de registros ====
 +
 +Además de recuperar registros a través de una consulta, podemos también solicitar al servidor Malete registros específicos en base a su id o MFN. Usamos para esto el mensaje **R** (//read//).
 +
 +En este ejemplo, solicitamos el registro 4:
 +
 +  test.R*TAB*4
 +   
 +   W
 +   ​-9 ​     4@1043
 +   ​44 ​     Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +   ​50 ​     Incl. bibl.
 +   ​69 ​     Paper on: <​hygrometers><​plant transpiration><​moisture><​water balance>
 +   ​24 ​     <An> Electric hygrometer apparatus for measuring water-vapour loss from plants in the field
 +   ​26 ​             c1965
 +   ​30 ​             ap. 247-257 ​    ​billus.
 +   ​70 ​     Grieve, B.J.
 +   ​70 ​     Went, F.W.
 +
 +
 +Y en este otro ejemplo, solicitamos 2 registros comenzando por el 10:
 +
 +   ​test.R*TAB*10*TAB*2
 +   
 +   W
 +   ​-12 ​    ​10@2950
 +   ​24 ​     Modifications to the relative turgidity technique with notes on its significance as an index of the internal water status of leaves
 +   ​25 ​     20
 +   ​25 ​     30
 +   ​25 ​     40
 +   ​26 ​             c1965
 +   ​30 ​             ap. 331-342 ​    ​billus.
 +   ​70 ​     Slatyer, R.O.
 +   ​70 ​     Barrs, H.D.
 +   ​44 ​     Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +   ​50 ​     Incl. bibl.
 +   ​69 ​     <plant physiology><​moisture><​leaves>​
 +   ​-9 ​     11@3306
 +   ​44 ​     Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +   ​50 ​     Incl. bibl.
 +   ​69 ​     Paper on: <plant physiology><​water balance><​pressure><​hygrometers>​
 +   ​24 ​     Measurement of water stress in plants
 +   ​26 ​             c1965
 +   ​30 ​             ap. 343-351 ​    ​billus.
 +   ​70 ​     Kramer, P.J.
 +   ​70 ​     Brix, H.
 +
 +
 +También podemos leer una secuencia arbitraria de registros, donde los MFN no necesitan ser consecutivos. Por ejemplo, aquí leemos los registros 3, 7 y 9:
 +
 +   ​test.R
 +   ​0*TAB*3
 +   ​0*TAB*7
 +   ​0*TAB*9
 +   
 +   W
 +   ​-8 ​     3@624
 +   ​24 ​     Control of conditions in the plant chamber: fully automatic regulation of wind velocity, temperature and relative humidity to conform to microclimatic field conditions
 +   ​26 ​             c1965
 +   ​30 ​             ap. 233-238 ​    ​billus.
 +   ​70 ​     Bosian, G.
 +   ​44 ​     Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +   ​50 ​     Incl. bibl.
 +   ​69 ​     Paper on: <plant physiology><​moisture><​temperature><​wind><​measurement and instruments><​ecosystems>​
 +   ​-9 ​     7@2075
 +   ​44 ​     Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +   ​50 ​     Incl. bibl.
 +   ​69 ​     Paper on: <plant physiology><​carbon dioxide><​chemical analysis><​photosynthesis>​
 +   ​24 ​     Colorimetric determination of CO2 exchange in field and laboratory
 +   ​26 ​             c1965
 +   ​30 ​             ap. 291-298 ​    ​billus.
 +   ​70 ​     SlavÝk, B.
 +   ​70 ​     Catsky, J.
 +   ​-7 ​     9@2687
 +   ​44 ​     Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +   ​50 ​     Incl. bibl.
 +   ​69 ​     Paper on: <plant physiology><​soil>​
 +   ​24 ​     <A> New type of porometer for measuring stomatal opening and its use in irrigation studies
 +   ​26 ​             c1965
 +   ​30 ​             ap. 325-329 ​    ​billus.
 +
 +
 +
 +===== Más recursos =====
 +
 +http://​solsoft.co.cr/​foros/​list.php?​2
 +
 +http://​sourceforge.net/​project/​showfiles.php?​group_id=11257
 +
 +
 +{{tag>​malete}}
malete_-_primeros_pasos.txt · Last modified: 05/05/2009 00:00 (external edit)