This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
malete_-_primeros_pasos [24/03/2008 16:31] 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 | ||
- | |||
- | 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 una de las bases de datos dentro de ''test'' está compuesta por tres archivos: | ||
- | |||
- | * ''<db_name>.m0d'': malete options (record 0) file (collation y qué más?) | ||
- | * ''<db_name>.mqt'': malete query terms | ||
- | * ''<db_name>.mrd'': malete record data | ||
- | |||
- | 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'' ...? | ||
- | |||
- | <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'', y de allí nos interesa especialmente el archivo ''malete'', que es el ejecutable (279.052 bytes en la versión 1.0.3). Dentro del directorio ''test'' han aparecido 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 de ''cds.m0d'' y ''cds.mrd'', respectivamente, mientras que | ||
- | |||
- | * ''test.mqd'' se genera a partir de ''cds.mqt'' | ||
- | * ''test.mrx'' se genera a partir de ''test.mrd'' | ||
- | * ''test.mqx'' se genera a partir de ''test.mqd'' y ''test.m0d'' | ||
- | |||
- | ===== La base de pruebas ===== | ||
- | |||
- | 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: | ||
- | |||
- | $ rm -rf bin/ | ||
- | $ CDSUNIX=1 | ||
- | $ export CDSUNIX | ||
- | $ make -C mlt server | ||
- | |||
- | 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 | ||
- | .. | ||
- | |||
- | ¿La base tiene 151 registros? No, solamente 150, pero hay un error en la base creada por Malete: | ||
- | |||
- | $ 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 | ||
- | |||
- | ===== 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. Empecemos con **test.Q**, seguido por un doble Enter: | ||
- | |||
- | test.Q | ||
- | |||
- | 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 | ||
- | |||
- | indica ... | ||
- | |||
- | 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. | ||
- | |||
- | |||
- | Al usar una //consulta vacía//, estamos recuperando todos los registros de la base (véase [[http://malete.org/Doc/Protocol|Protocol]]). | ||
- | |||
- | Cuando repetimos el mensaje ''test.Q'' (seguido, como en todos los casos, por doble Enter), obtenemos los siguientes 20 registros de la base ''test'': | ||
- | |||
- | 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 hasta el registro 40] | ||
- | |||
- | Pasemos ahora a una consulta no vacía: "test.Q water" (atención: luego de la Q hay un TAB): | ||
- | |||
- | 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). | ||
- | |||
- | Pasemos a la siguiente consulta: | ||
- | |||
- | test.Q plant water? | ||
- | | ||
- | # 2 2 0 | ||
- | -9 5@1372 | ||
- | 44 Methodology of plant eco-physiology: proceedings of the Montpellier Symposium | ||
- | 50 Incl. bibl. | ||
- | 69 <plant physiology><soil moisture><plant transpiration><evapotranspiration><measurement and instruments> | ||
- | 24 Anti-transpirants as a research tool for the study of the effects of water stress on plant behaviour | ||
- | 26 c1965 | ||
- | 30 ap. 269-274 billus. | ||
- | 70 Gale, J. | ||
- | 70 Poljakoff-Mayber, A. | ||
- | -8 25@7420 | ||
- | 24 <The> Heat, water and carbon dioxide budget of plant cover: methods and measurements | ||
- | 26 c1965 | ||
- | 30 ap. 495-512 billus. | ||
- | 44 Methodology of plant eco-physiology: proceedings of the Montpellier Symposium | ||
- | 50 Incl. bibl. | ||
- | 69 Paper on: <energy balance><water balance><carbon dioxide><plant physiology><heat transfer><measurement and instruments> | ||
- | 70 Baumgartner, Albert | ||
- | |||
- | |||
- | Hemos realizado la consulta **plant water?**, y hemos recuperado los registros 5 y 25. Esta consulta consta de dos partes: una **búsqueda** (plant water) y un **filtro** (lo que aparece a la derecha del signo **?**; en este caso, el filtro es vacío). | ||
- | |||
- | Obtuvimos los registros, y no solamente los identificadores. Véase Protocol.txt: | ||
- | |||
- | //If no filter is specified (i.e. no '?'), only record ids are returned.// | ||
- | |||
- | El uso del signo '?' hace que el servidor envíe los registros. | ||
- | |||
- | |||
- | Siguiente consulta, de acuerdo con la sugerencia del archivo ''README'': | ||
- | |||
- | 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 | ||
- | |||
- | Como hay 26 registros y sólo recibimos los identificadores de los primeros 20, | ||
- | enviamos un nuevo mensaje "test.Q": | ||
- | |||
- | test.Q | ||
- | | ||
- | # 6 3 0 | ||
- | 0 133 | ||
- | 0 134 | ||
- | 0 141 | ||
- | 0 147 | ||
- | 0 149 | ||
- | 0 150 | ||
- | |||
- | |||
- | 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]]). | ||
- | |||
- | La fila de números que encabeza la respuesta a un mensaje Q tiene el significado | ||
- | siguiente (véase [[http://malete.org/Doc/Protocol|Protocol]]): | ||
- | |||
- | * número estimado de registros restantes, incluyendo los que acaban de ser leídos | ||
- | * número de la consulta, por el cual se la puede referenciar | ||
- | * truncation record id |