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
Next revision
Previous revision
malete_-_primeros_pasos [25/03/2008 11:29]
fernando
malete_-_primeros_pasos [05/05/2009 00:00]
Line 1: Line 1:
-====== Malete - Primeros pasos ====== 
  
-**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** 
- 
- 
-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 
malete_-_primeros_pasos.txt · Last modified: 05/05/2009 00:00 (external edit)