Powered By Blogger

domingo, 3 de diciembre de 2017

Instalación de Apache Derby 10.14.1.0 en Ubuntu Server 16.04 Parte II

En esta segunda entrega sobre Apache Derby, veremos cómo interactuar directamente con esta base.

Este post ha sido siguiendo la guía inicial de Apache Derby, de la cuál por acá dejo el link respectivo:

Empezando con Apache Derby

En la guía destaco que hay varias maneras de interactuar con Derby, según sea la necesidad:
  • Network Server.
  • Derby embebida en la aplicación.
  • Por medio de derbyrun.jar
Para efectos prácticos trabajaremos con la última opción: derbyrun.jar

Por medio de derbyrun.jar podremos interactuar desde modo consola con Apache Derby, les recuerdo que si es la primera vez que me leen, pueden referirse a la primera parte de esta entrega en un blog anterior:

Instalación de Apache Derby 10.14.1.0 en Ubuntu Server 16.04 Parte I

Por tanto, nuestro ejercicio se desarrolla en el entorno de Ubuntu 16.04 (GNU/Linux). Aclaro esto ya que la semántica de comandos, está totalmente aplicada en el sistema operativo antes mencionado.
Entremos ya en esencia...


1. Colocando las variables de ambiente respectivas.
La guía inicial de Derby recomienda establecer una variable de ambiente llamada DERBY_HOME, esta referenciando el directorio donde encontraremos los binarios de Derby. Para ello recomiendo hacer un bash/script en el cuál podamos definir estas variables al momento de operar dentro del sistema operativo con Derby.

Por acá les dejo cómo me quedó mi script:

 
* Quiero aclarar que si hemos realizado una instalación desde PPA del JDK de Java, la variable DERBY_HOME, estará originalmente apuntada hacia el directorio de instalación del JDK y no hacia Derby. Es por ello que recomiendo hacerlo de esta manera.

Ejecutaremos el script por medio del comando source, para que en la sesión activa las variables tomen el valor correspondiente:



Ojo:
Recomiendo que dentro del directorio de su afinidad creen una carpeta en la cual puedan realizar las operaciones con Derby, ya que Derby realizará los cambios, sobre el directorio que se encuentren.
* En el caso de este tutorial, el directorio de prácticas es /home/derby/derbytutor.

2. Probando nuestra instalación.
Podemos validar que la instalación previa de Derby se haya hecho correctamente, para ello comenzaremos a interactuar con derbyrun.jar:

Ejecutemos el comando sysinfo, el cuál nos mostrará la información de nuestro sistema operativo:



En la imagen anterior podemos ver qué importante se vuelve el seteo de la variable de ambiente DERBY_HOME. Puesto que al usar la interacción con derbyrun.jar estaremos recurrentemente interactuando con este programa.


3. Creando nuestra base de datos, tablas, proyecciones, inserciones, eliminaciones, actualizaciones...

Para estas operaciones, utilizaremos otra utilidad de Derby: ij (nos recuerda a sqlplus de Oracle XD)
ij nos permitirá ya ver materializado el objetivo de un motor RDBMS: Llenar de datos una base.


Creemos la base:

derby@vps158271:~/derbytutor$ java -jar $DERBY_HOME/lib/derbyrun.jar ij
ij version 10.14
ij> CONNECT 'jdbc:derby:mundialito;create=true';

ij> EXIT;


Por medio de este comando, ya dentro de ij creamos una base. Para salir de la interfaz usamos "exit;" 

Salí de la interfaz de ij para que validemos qué se crea a nivel de archivos físicos al momento de crear un base en Derby:

Carpeta con el nombre de la base y este es su contenido. Advierto que la modificación directa sobre estos archivos físicos puede generar inconsistencias posteriores, asi que procuremos no tocarlos directamente:

derby@vps158271:~/derbytutor$ ls -thor
total 148K
-rw-r--r-- 1 derby  26K Nov 25 15:41 loadFLIGHTS1.sql
-rw-r--r-- 1 derby  17K Nov 25 15:41 loadFLIGHTAVAILABILITY2.sql
-rw-r--r-- 1 derby  22K Nov 25 15:41 loadFLIGHTAVAILABILITY1.sql
-rw-r--r-- 1 derby 7.6K Nov 25 15:41 loadCOUNTRIES.sql
-rw-r--r-- 1 derby 7.3K Nov 25 15:41 loadCITIES.sql
-rw-r--r-- 1 derby  984 Nov 25 15:41 loadAIRLINES.sql
-rw-r--r-- 1 derby 1019 Nov 25 15:41 loadTables.sql
-rw-r--r-- 1 derby  29K Nov 25 15:41 loadFLIGHTS2.sql
-rw-r--r-- 1 derby 5.1K Nov 25 15:41 ToursDB_schema.sql
drwxrwxr-x 4 derby 4.0K Nov 25 16:10 firstdb
-rw-rw-r-- 1 derby  661 Dec  2 23:26 derby.log
drwxrwxr-x 5 derby 4.0K Dec  2 23:26 mundialito


derby@vps158271:~/derbytutor$ pwd
/home/derby/derbytutor
derby@vps158271:~/derbytutor$ tree mundialito/
mundialito/
├── dbex.lck
├── db.lck
├── log
│   ├── log1.dat
│   ├── log.ctrl
│   ├── logmirror.ctrl
│   └── README_DO_NOT_TOUCH_FILES.txt
├── README_DO_NOT_TOUCH_FILES.txt
├── seg0
│   ├── c101.dat
│   ├── c10.dat
│   ├── c111.dat
│   ├── c121.dat
 ...
│   ├── cd1.dat
│   ├── ce1.dat
│   ├── cf0.dat
│   └── README_DO_NOT_TOUCH_FILES.txt
├── service.properties
└── tmp


Ahora interactuemos con DDL y sentencias SQL en la base mundialito:

Creemos las tabla SELECCION, que contendrá las 32 selecciones clasificadas al mundial:


derby@vps158271:~/derbytutor$ java -jar $DERBY_HOME/lib/derbyrun.jar ij
ij version 10.14
ij> CONNECT 'jdbc:derby:mundialito';
ij> CREATE TABLE SELECCION
> (ID INT PRIMARY KEY,
> NAME VARCHAR(50));
0 rows inserted/updated/deleted
ij> SELECT * FROM SELECCION;
ID |NAME
--------------------------------------------------------------

0 rows selected


Procedamos a insertar registros y proyectemos el registro recién insertado:

ij> INSERT INTO SELECCION (ID, NAME)
> VALUES
> (1,'ALEMANIA');
1 row inserted/updated/deleted
ij> SELECT * FROM SELECCION;
ID |NAME
--------------------------------------------------------------
1 |ALEMANIA

1 row selected 


Ahora, eliminemos el registro recién insertado:

ij> DELETE FROM SELECCION
> WHERE ID = 1;
1 row inserted/updated/deleted


En Derby, también podemos hacer ejecuciones de archivos scripts .sql. Basta con que el archivo se encuentre dentro del directorio de ejecución. En el siguiente ejemplo insertaremos todas las selecciones clasificadas:

Mi archivo sigue la siguiente estructura:

 

Ejecución:

ij> run 'selecciones2018.sql';
ij> INSERT INTO SELECCION (ID, NAME) VALUES (1, 'ALEMANIA');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (2,'EGIPTO');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (3,'MARRUECOS');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (4,'NIGERIA');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (5,'SENEGAL');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (6,'TUNEZ');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (7,'ARABIA SAUDITA');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (8,'AUSTRALIA');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (9,'IRAN');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (10,'JAPON');
1 row inserted/updated/deleted

...


Proyectemos los datos recién ingresados:

ij> SELECT * FROM SELECCION; 
ID         |NAME                                              
--------------------------------------------------------------
1          |ALEMANIA                                          
2          |EGIPTO                                            
3          |MARRUECOS                                         
4          |NIGERIA                                           
5          |SENEGAL                                           
6          |TUNEZ                                             
7          |ARABIA SAUDITA                                    
8          |AUSTRALIA                                         
9          |IRAN                                              
10         |JAPON                                             
 ...


 Y concluiremos esta segunda entrega, con la actualización de un registro:

ij> UPDATE SELECCION
> SET NAME = 'ESPANA'
> WHERE ID = 15;
1 row inserted/updated/deleted
ij> SELECT * FROM SELECCION WHERE ID = 15;
ID         |NAME                                              
--------------------------------------------------------------
15         |ESPANA                                            

1 row selected
ij> 

sábado, 25 de noviembre de 2017

Instalación de Apache Derby 10.14.1.0 en Ubuntu Server 16.04 Parte I

Como siempre por acá haciendo cosas fuera de lo común con miras en algún día ser alguién también fuera de lo común.
De hecho ser un usuario Linux te hace un poco especial, pero aún más cuando soy un usuario Linux que no está en contra del software privativo.
Al final, si tienes dinero y puedes pagar licenciamiento de un producto, y estás de acuerdo con todas las letras pequeñas del contrato, adquiérelo de manera legal.

Pues el desafío es el siguiente:

De hace un tiempo, Henry desea hacerse de un VPS (Virtual Private Server) para usarlo doquiera donde vaya como laboratorio. Sobre todo porque en algún momento hasta las máquinas virtuales le han hecho pasar grandes angustias.
En vista de ellos desea encontrar una solución económica para sus problemas de infraestructura (que no supere los $35.00). Por estos días la palabra Black Friday ha sonado mucho y como es de esperarlo, aguardó a encontrar una buena oferta la cuál se materializó en un VPS con las siguientes características:
  • OS: Ubuntu 16.04.
  • RAM: 2G.
  • HDD: 10G
  • CORE: 1
Todo conocedor de la optimización sabe que contra tales disposiciones debe buscar herramientas que se acoplen  a las limitantes y al bolsillo. Henry desea tener un RDBMS dentro de este pequeño servidor y se da a la tarea de investigar qué opciones hay...
Por descarte, ya sabe qué no va, y qué pudiera ir...
En el qué pudiera ir se ocurre SQLite pero tampoco desea algo tan ligero... Y como entusiasta de todas las herramientas de la Apache Foundation, decide investigar qué RDBMS tienen a disposición.

Nos topamos con Apache Derby (pequeño (22Mb), java... parece que encaja).

Y nos diponemos a instalar...

Prerrequisitos:

Primero (Deberás ya tener instalado JAVA)...


  • Lo recomendado a la hora de instalar aplicaciones en un servidor y con miras de exponerlas como servicio, es crear un usuario exclusivo en el sistema operativo, crearemos el usuario (* con root o sudo): derby
$ useradd derby
 
  • Luego le asignaremo un espacio en home:
$ mkhomedir_helper derby


  • Asignamos contraseña al nuevo usuario creado:
$ passwd derby
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully 



  • Aprovechando que tenemos root, procederemos a crear un directorio dedicado para la instalación de Derby. Me gusta el /opt y recomendaría que fuera ahí. Crearemos un directorio donde dejaremos el zip original (yo sé qué es reinstalar de cero). Ubicados en el /opt procedemos, a medio camino comenzaremos a utilizar ya el usuario derby:
$ mkdir apache-derby
$ chown -R derby:derby apache-derby
$ cd apache-derby
$ su derby
$ cd /opt/apache-derby
$ mkdir media
$ mv /home/derby/ db-derby-10.14.1.0-bin.zip  media/


  • Ya en media, procederemos a descomprimir la carpeta y ubicarla en el directorio anterior:
$ cd media/
$ unzip  db-derby-10.14.1.0-bin.zip
...

...   
inflating: db-derby-10.14.1.0-bin/lib/derbynet.jar 
 inflating: db-derby-10.14.1.0-bin/lib/derbyoptionaltools.jar 
 inflating: db-derby-10.14.1.0-bin/lib/derbyrun.jar 
 inflating: db-derby-10.14.1.0-bin/lib/derbytools.jar 
 creating: db-derby-10.14.1.0-bin/test/
 inflating: db-derby-10.14.1.0-bin/test/derbyTesting.jar 
 inflating: db-derby-10.14.1.0-bin/test/README.htm  

$ mv db-derby-10.14.1.0-bin ..
$ cd ..

$ pwd
/opt/apache-derby

Este es el fin de la primera fase de instalación. 
Crearé una segunda entrada para no cargar el contenido.


sábado, 28 de octubre de 2017

Zsnes no funciona en Ubuntu 16.04 - Snes9x una buena opción.

Varios días atrás empecé a planear la instalación de Zsnes de nueva cuenta en mi computadora (temporadas de nostalgia).

Como nos suele suceder, en ciertas ocasiones nos acomodamos a que los repositorios de Linux instalen todo lo necesario para hechar a andar las aplicaciones que deseamos usar.

Para sorpresa mía, apareció lo realmente indeseable: "Una dependencia no satisfecha"




Está demás decir que me puse a la ardua tarea de querer instalar las dependencias subyacentes a la que ven an la imagen anterior. :P

Ví que sería muy complicado lograr la instalación, sin correr con el riesgo de alterar una o que otra librería común con otros recursos previamente instalados en mi Ubuntu.
Investigando un poco, encontré mi redención hacia los tiempos hermosos de nostalgia infantil: snes9x 

Descargando snes9x.
Podrán descargar snes9x del siguiente sitio, de forma totalmente gratuita y legal:
http://www.s9x-w32.de/dl/

Luego yo descargué el siguiente archivo:

 

Instalación y ejecución de snes9x.
Una vez descargado el archivo, procedí a ubicarlo en mi directorio /opt habiendo previamente creado una carpeta con un nombre intuitivo a snes9x.
El directorio podrá variar al de tu gusto, sólamente asegúrate de contar con los permisos adecuados para lograr la ejecución del programa.


Les dejo la secuencia de pasos a seguir para correr el emulador:



Acá la secuencia de comandos:



$ cd snes9x/
/snes9x$ ls
snes9x-1.52-gtk-79-x86-64.tar.bz2
/snes9x$ sudo tar -xjvf snes9x-1.52-gtk-79-x86-64.tar.bz2
snes9x-1.52/
snes9x-1.52/snes9x-gtk
snes9x-1.52/data/
snes9x-1.52/data/snes9x_32x32.png
snes9x-1.52/data/snes9x.desktop
snes9x-1.52/data/snes9x_16x16.png
snes9x-1.52/data/snes9x_24x24.png
snes9x-1.52/data/snes9x.svg
snes9x-1.52/docs/
snes9x-1.52/docs/gpl-2.0.txt
snes9x-1.52/docs/gtk/
snes9x-1.52/docs/gtk/README
snes9x-1.52/docs/gtk/lgpl.txt
snes9x-1.52/docs/gtk/LICENSE
snes9x-1.52/docs/control-inputs.txt
snes9x-1.52/docs/snapshots.txt
snes9x-1.52/docs/porting.html
snes9x-1.52/docs/lgpl-2.1.txt
snes9x-1.52/docs/snes9x-license.txt
snes9x-1.52/docs/snes9x.conf.default
snes9x-1.52/docs/controls.txt
snes9x-1.52/docs/changes.txt
/snes9x$ ls
snes9x-1.52  snes9x-1.52-gtk-79-x86-64.tar.bz2
/snes9x$ cd snes9x-1.52/
/snes9x/snes9x-1.52$ ls
data  docs  snes9x-gtk
/snes9x/snes9x-1.52$ ./snes9x-gtk
Sound buffer size: 8192 (2048 samples)
OSS sound driver initializing...
    --> (Device: /dev/dsp)...OK
    --> (Format: 16-bit)...OK
    --> (Stereo)...OK
    --> (Frequency: 32000)...OK
    --> (Buffer size: 8192 bytes, 64ms latency)...OK


Me encantó que el emulador trae opciones para cambio del tamaño de la imagen, configuración de joystick, etc. Lo suficiente para jugar bien:

 


 
Listo, acá comienza la diversión:

 

miércoles, 3 de diciembre de 2014

Cementerios


A lo largo de la historia comprobamos que el poder de la palabra es poderoso, habitualmente es una semilla que tiene la probabilidad de morir o crecer, llegar a ser un gran árbol o ser una parásita trepadora, incluso puede dar vida o matar. Cualquiera que sea el efecto de la misma, para algunos es un escape, un desahogo, una forma de expresión, en la cual creamos, describimos o moldeamos belleza; o todo lo contrario, podemos usarla para destruir, deshacer y aniquilar.

Muchas veces el hastío, el límite, el enojo y la frustración son aquel elemento inflamabe que desencadena grandes e impetuosos fuegos. Pues hoy, hoy escribo con un tanto de fuego.
No quiero que el presente texto se tome como una reflexión filosófica de la dignidad del trabajador, consciente estoy que no tengo el nivel para elevarlo a ese nivel. El presente escrito se enfoca a algunas realidades cercanas a mi vida y que ya por cierto tiempo he estado intentando que estas preguntas no se transformen en resentimientos... es casi inevitable.

Por tanto en las siguientes líneas daré rienda suelta a mi queja, y llego al punto de la queja cuando considero tengo más argumentos para defender lo que es justo desde mi perspectiva defender.

Haré uso de la sátira en contra de ellos, y perdonen usar el árticulo ellos, pero cuando la gran mayoría es, lástimosamente todos son tragados en el universo señalado.
Iniciaré comparándolos con cementerios, usualmente los cementerios son aquellos lugares tétricos para los más desafortunados, y lujosos en el caso de los afortunados, pero el fin es el mismo: muerte.
Un cementerio es el lugar perfecto para describir el donde todo acaba, pues acá estamos llenísimos de ellos, pues día a día acaban y asesinan sueños, aspiraciones, metas personales. Nos matan apuñalándonos con los objetivos de ellos, nos ametrallan con lo que el cliente demanda, y nos decapitan con amenazas de dejarnos de emplear.
Jejejejejeje ¿fábrica de empleos?¿progreso?¿avance?... ¡Patrañas!
Parece cobarde e ignorante resumir una contradicción ante tal sistema, y aclaro que no es una ataque al capitalismo, es una efusiva expresión del hastío en el cuál mi mente se encuentra y por lo cual la palabra encerrada en esos signos de admiración la pretendo defender con los argumentos que leerán en las próximas líneas.

Una chica de diez y ocho años de edad, llena de sueños y aspiraciones, y en busca de ganar un poco de dinero para aportar a la manutención del hogar disfuncional en la cuál únicamente su madre y su hermano buscan salir adelante. Donde no se busca vivir, sino sobrevivir. Se ve llevada a iniciar la búsqueda de un empleo.
Entusiasmada y con un ímpetu por dar lo mejor, inicia la odisea de encontrar aquel empleo digno que la lleve a poner su granito de arena en la sacada adelante de su hogar.
Luego de incontables maromas solicitadas por el exclusivo y racista sistema de selección, ella finalmente es aceptada, de esperar era el sueldo de hambre al cuál estos jóvenes saben estarán expuestos, pero como dicen por acá: derecho de piso.
¡Qué verdad tan absurda! ¡No! Es simplemente una mofa a la dignidad que alguien pueda tener. Las personas se ven forzadas a firmar estos contratos, que más que contratos son sentencias de muerte en los cementerios, pues aparte que vendemos la vida a un costo tan bajo porque no hay de otra y hay que luchar contracorriente, les vendemos vida extra, que mucha veces no es vendida sino regalada. Mi pregunta es ¿serán merecedores que entreguemos nuestras vidas? No lo sé.
Ya una vez dentro, empiezan los sepultureros a enterrar a los frescos y potenciales oprimidos, lo más irónico de todo esto es que los sepultureros fueron en algún momento oprimidos, la diferencia es que vendieron su alma al demonio por un poco más de salario, y sentir la satisfacción de oprimir igual o más a como ellos lo fueron.
Haré una pausa en esta historia de terror y me indignaré ante ciertas frases comunes de estos sujetos:

Debes pagar el derecho de piso.
Sos el nuevo.
No sabes, sos inexperto.
Sos tonto.
Ganate tu sueldo.
Debes de pasar por esto para llegar lejos.
Etc.

¡Dios mío! ¿Es esta la bienvenida al sistema laboral de nuestro país?
Siento naúseas de todo esto, es horroroso, desagradable, vil y denigrante. Señores empresarios es esto para lo cuál nuestro sistema educativo está diseñado. Para que soportemos los maltratos e improperios que se les antojen. Respondan ¿es a esto? Es este el concepto que tiene de un trabajador salvadoreño, de una persona, de una mujer, de una hija, de una estudiante, de una hermana, de una soñadora. ¿A esto denigran a una persona?

El colmo de los males... Y esto si lo aborrezco con todo mi ser... Cuando como empleado mendigas tu salario... Cuando te bajan tus comisiones... Cuando violan tus vacaciones... Cuando tus horas extras quedaron en el aire... Cuando se te niega un permiso...

Y lo aborrezco porque pienso, ¿qué tan de mala es la calidad de mi mano de obra como para que mis derechos según la ley me sean violados?
¿Acaso no te cumplo mis metas de ventas? ¿Acaso no está feliz el cliente conmigo? ¿Acaso no estoy haciendo lo que quieres y más? ¿No te estoy practicamente alimentando?
¿No te estoy haciendo crecer?¿No estoy aportando con mi trabajo a la felicidad y estabilidad de los tuyos y tuya?¿No has meditado que mientras trabajo te estoy dando lo más valioso que tengo que es mi vida?

Tengo tantas preguntas, muchas preguntas, abundantes preguntas... Ya desbordan... 

Llevo cercanos a cumplir diez años en el sistema laboral de El Salvador, y no puedo expresarme complacido, puesto que yo sigo tomándome en serio a los clientes, pero mis derechos me serán ejecutados cuando haya tiempo, no cuando corresponde, seguiré aún poniendo de mis recursos para sacar adelante mi trabajo, y digo mi trabajo porque me siento bien de adueñarme de lo que si refleja la dignidad del trabajador: el trabajo, y no la dignidad de las empresas. Estoy cansado de tomarme en serio todo, pero que lo que yo deseo sea risible para los que no comparten mi visión.
Hoy comprendo porqué esta chica está defraudada, porque todos los días la mutilan, la desmembran y la hacen añicos. Me entristesco con ella por todo esto. Y a ella dedico estas líneas, porque creo en el poder de escribir, creo en el poder de una canción, creo en el poder de cambiar lo que está mal.
Pero si, cambiar la realidad ¿Qué es?
Creo que es morir intentándolo, pero morir con los ojos abiertos...
Morir honorablemente, y que los sueños y las ideas nunca mueran sino que perduren y hagan eco en los que quieren seguir igual.
Porque espero que algún día comprendan que progreso no es tener más...
Progreso es compartir, y no necesariamente partes iguales, es compartir lo que cada quien según el sudor de su frente le corresponde...

Lo último...
Ya no nos sigan quitando la dignidad...
Dignifiquen a sus empleados y tengan por seguro que ustedes serán dignificados por ellos...

jueves, 8 de mayo de 2014

No lo voy a dejar solo...

Con amor a mi país...


De esos días que por algo decides cambiar la rutina...
Estoy percibiendo que la exposición al arte da al ser humano un espacio para meditar en cómo expresar la abstracción única de sus sentimientos. Tomando de referencia la afirmación anterior la exposición al arte es mi búsqueda personal de elementos que me permitan lograr esa expresión de una manera única.

Enterándome que el día de hoy en “El Santuario” arrancaba el festival de documentales: “Ambulante 2014”; decidí cancelar mi asistencia a la rutinaria clase del jueves en la “U”. La determinación anterior fue movida en base a los buenos resultados obtenidos en las últimas evaluaciones.
La película...“Dayani Cristal”, Tema: La migración a la USA.

Entrando en materia, me encontraba en la Gran Sala como siempre admirando su enorme telón, las gárgolas, los ángeles y esa enorme cúpula peculiar. Dentro de aquel recinto gente de todo tipo, desde chicos y chicas delgados de rostro aguileño, cuerpos delgados y pies grandes, pies que probablemente nunca pisarán una frontera, pues seguramente siempre la pasarán en avión o en un crucero; gente tatuada que parecía estar involucrada en cosas de arte, o al menos que parecían valorar la expresión artística, gente “normal”, cámaras... Ancianos, parejas... Gente de saco, conocidos y desconocidos... mexicanos, españoles... salvadoreños...

Aquellos cercanos 90 minutos de filme me transportaron a un pasado que por largos días había dejado olvidado en lo profundo de disipados recuerdos de algo tan trascendental en mi vida. Admirado, no creía que yo había cruzado Mexico buscando llegar al norte. El largometraje toca fibras muy delicadas de esta odisea que miles de personas se arriesgan a tomar año con año.
¡Wow! Tecún Umán, lo recordé al ver a Gael cruzarlo en una improvisada balsa ¡yo estuve ahí! Mencionábase en el video, que “El Norte”, es el camino en el cual muchos terminan, paradoja: a mis cuatro escasos años estaba cruzando ese camino, iniciando mi vida, sin saber si sería tan corta o tendría la fortuna de cruzar pa el otro lado. Al finalizar la puesta solo dí gracias al cielo que un ocho de mayo de dos mil catorce, estaba sentado en aquella butaca, vivo y con sueños... Que veintitrés años después memoraba mi odisea, en la cual según aquella proyección, me convertí en un pequeño héroe invisible, estuviera vivo o muerto.

Sin embargo, dentro de aquel teatro como que pareciese algo totalmente fuera de contexto, escuché los quejidos de un viejito... que desde su rancho me llamaba y me decía: mijo quiero verlo...
Enseguida fuí donde aquella quejumbrosa y discreta voz llamaba a “mijito”... El pobre emisor de aquel moribundo requiem de clamores era un ancianito, chiquito, delgado, de piel café dorada y pegada a aquellos secos huesos... relegado a una vieja cama de pita, sobre su cabeza no más una ventanita que se cerraba con una puertecita de madera en la que pegaba un sol del demonio porque ya hacía tiempos le volaron un palito de café que medio le daba sombra...
Le vi los piesitos que salían de una hedionda sábana chapina que siempre había estado ahí, y que nadie nunca se la lavó... estaban más duras que melcocha vieja las plantas de los pies y sanjadas de andar chuña... pareciera que de ratos hasta de sus chanclas lo despojaron para que se quedara quieto y ya no caminara.
En aquella tétrica habitación me contó su historia...

Me dijo: mijo, siéntese... Viera que alegrilla me da que se haya asomado a verme... Estando tan jodido ya nadie me presta atención... Viera que en esta condición hasta que una cuca asome se agradece...
Mijo, usted es mijo... Lo quiero mucho y sí, en algún momento se me fué lejos...
Su mirada cambió al verme a los ojos y empezaron a rodar lágrimas de aquellos casi enllavados párpados...
Prosiguió: papa... no se vaya otra vez, se lo pido... Sé que estoy mal, y muy mal pero lo quiero, si me levanto de esta, lo quiero hacer feliz...
Sin comprender a plenitud la escena, simplemente movido a compasión decidí permanecer más tiempo con aquel hombre (no conozco gente centenaria, pero juraría que este este tiene más de 4 siglos)

Me contó que sus tatas fueron unos inditos, que dentro de todo lo amaron mucho, humildemente a pura aguita de arroz lo hicieron crecer... Crecía dea poquito y cuando le salieron un par de dientes a pura tortilla y frijol, café y a las quinientas una gallinita, salía adelante...
En esa niñez de juegos y en que los cipotes solo piensan en qué quieren ser cuando sean grandes me contó que unos maitros cheles, bigotudos y barbudos acabaron con su familia, se adueñaron del pueblo y a el lo agarraron de cholero.
Dura servidumbre le tocó desde morro hasta la condición pal tigre que estaba, sin lástima le sampaban garrotazos en el lomo, primero para que sacara añil, algodón y por último café...
Por ratos no le daban de comer, me cuenta que de último a puro RedBull importado lo querían tener (disque para que despertara) y él qué deseaba una horchatita heladita hecha en casa.
De comer, a pura Maruchan instantánea cuando San Juan para el dedo se dignaban en darle... Nooooooooooombre si al niño lo que le gustaba era la sopita de frijoles con huezo, masitas, platano verde, yuca y cuanta verdura hubiera dado la siembra.
Al pobre bichito, luego muchacho, luego hombre, luego maitro y hoy casi cadáver no le dieron buena vida...
Me contaba aquellas atrocidades el maitrito y se me escapaban las lágrimas... Me dijo que si por favor lo acobijaba bien porque ya no tenía fuerza en las manos, porque después de hechar penca por años, venía un huracán y se las mojaba... De ahí que todas tembeleques y débiles le habían quedado.
Levanté con sumo cuidado la colcha y vi una escena incomparable e inentendible, las patillas sequitas llenas de hierro, el pechito de paloma que tenía se lo habían cambiado casi que ha plancha de puro fierro...
Soltó la irónica carcajada... No se asuste, dicen los viejos cherches que si no fuera por todo este fierro ya me hubiera petateado... Lo que me parece raro es que casi siempre les veo una cajita en las manos con palancas y por ratos hasta hacen que me pare sólo. Susurré: un control remoto...
Vi que los deditos de los pies le quedaban todavía de carne y huezo, pero me dijo que se los iban a cortar de emergencia para ponerle unos de fierro también disque para que pudiera caminar.
No papito lindo dijo... Ya no aguanto más, si me hubiera conocido de cipotillo, ni la sombra...
Me arrodillé y conmovido ante la abrumable situación del anciano, le sobe la cabecita blanca... lo abracé... lo besé... le unté agua florida en la frente, en el pecho y en los pies... le peiné el pelito, medio lo asié.. le curé las llagas de estar acostado convaleciente... le sobé los golpes, lo arropé por la tembladera que tenía ya en la noche por el frío... y me rebusqué por sacar los tufos del cuarto...
Estaba reventado mi viejo... pero al escucharlo respirar quedito, lo amé profundamente... Me dijo, mijito, no se olvide de mi, yo sé que no soy el mejor, mire, si soy chiquito, no soy muy inteligente, pero lo quiero, yo lo quiero dea deveras, no me deje solo cuídeme y seguro me levanto de esta cama y nos vamos a sembrar café en las lomas pa depués cortarlo, o frijol, o maíz...

Por más cubierto de metal y moribundo que estuviera... Su corazón aún latía...
Lo abracé con ternura a aquel pequeño viejo, y le dije lo amo papa Chamba, yo no lo voy a dejar perder, papito lindo yo lo voy a sacar adelante...

miércoles, 9 de abril de 2014

De repente

De repente llegaste...
Sin anunciarte, sin hacer ruido
Como suave rocío tus pequeñas gotas refrescaron mis secos despertares.

De repente te espero
Sin pensar en mi pasado
Como fuerte marea me alejas de la costa de temores y miedos.

De repente amaste
Sin pedir permiso, sin ley y sin demanda
Como impetuosa tormenta limpias mis aguas turbias pasadas.

De repente pienso
Sin haber lugar donde no te encuentre
Como fresca y suave brisa en campo abierto

De repente entraste
Sin motivos, sin razones
Como cálida luz me das claridad, y me das calor.

De repente te escucho
Sin pronunciar palabra
Como haz de luz que en mis sueños penetras.

By MapH.


Esta de más decir a quién lo escribo... Sigue luchando contra mis demonios por favor.

sábado, 2 de noviembre de 2013

Carta a mi enemigo...

Inmortalizo cómo te subestimo por medio de estas líneas...

Qué bueno es no conocerte lo suficiente, pues de lo contrario un poco de lástima te tendría.

Qué bueno es no oirte hablar, pues con tan pobre escritura, en el intento de agradar... la respuesta sería hipocresía.

Qué bueno es no compartir espacio ni tiempo contigo, seguro e inherente mi tiempo y espacio perdería.

Qué bueno es no amar como tu amas, pues si tus versos reflejaran tu amor, aún el odio de tu madre ganarías.

Qué bueno es no escuchar tu voz, pues seguro tras un par de mediocres alagos a la dama, seguro de homicida te culparían.

Qué bueno es no verte escribir, pues con tan pésima ortografía, papel y lápiz contra ti atentarían.

Qué bueno es tenerte de enemigo, tan bajo, común, mediocre, miserable, pésimo pobre, ruin, simple, vil...
dejo de escribir pues se que en un momento al verte tan pequeño... piedad te tendría.

By MapH