Friday, June 15, 2012

Restoring a lost crontab

I recently issued a command like this on a production server:

$ crontab -r

I really meant to issue this command instead:

$ crontab -e

(I was trying to add an entry to a very important crontab).

Needless to say, after the command I mistakenly executed, my crontab was gone. 

From crontab's man page:
       -r     The current crontab will be removed.
I went to google to search for some answers and here's what I had to do in order to restore my removed crontab file (I am using CentOS 5):

First, there is directory in /var/spool/cron which holds all crontab files for all users. Mine was gone. So you can't get it from there unless you have a backup (which I didn't). So I couldn't t use it to restore my crontab.

But, there is a log file which turned out to be pretty useful. They are located in /var/logs. The file names are 'cron*'.

So I copied them to a folder to avoid working directly on them:

# cp /var/logs/cron* /home/myuser/cron_restore/
# chown -R myuser:myuser /home/myuser/cron_restore/

Then I extracted all different commands that had been running by crond:

$ cd /home/myuser/cron_restore/
$ cat cron* | grep crond | awk '{ split($0, a, "CMD "); print a[2]; }' | sort | uniq

After running the command, I got a list of all different command run and logged by the cron daemon. Of course, this will only bring you the commands that were still present on the log files. But it happened that I got to recover all I needed. Don't know if it will be the same for someone logging some stuff on a yearly or even monthly basis.

Hope you find this entry useful.

Wednesday, April 25, 2012

SQLite como cache de Oracle


No hace mucho, trabajando en un proyecto para una empresa, tuvimos un problema de performance con el tiempo de respuesta al momento de realizar queries sobre la base de datos Oracle. Luego de varias mediciones del tiempo de respuesta y estadísticas sobre queries que mayor tiempo de respuesta consumían y no consiguiendo mejorar ostensiblemente con la optimización de los queries, decidimos, a sugerencia del gurú Pablo “Calé” Santa Cruz, investigar y llevar a la práctica la utilización de SQLite como cache de datos. De aquí en adelante hablaremos de que se hizo y como se hizo para lograr la optimización, especialmente cuando se trata con volúmenes interesantes de datos.

Para la implementación de esta mejora recurrimos a un driver jdbc nativo de java para SQLite y la versión que utilizamos es sqlitejdbc-v056.jar.

Antes del inicio del proceso, primeramente realizamos un volcado completo de los datos de la tabla en donde los queries arrojaban tiempos moderadamente altos, a nuestra base de datos SQLite que actuará de cache, y que al tratarse de consultas iterativas, representaban un tiempo total considerablemente costoso en todo el proceso. Es importante destacar en este punto que la replicación de los datos se realizó en un tiempo bastante menor del que esperábamos para sorpresa nuestra, primera buena impresión.

Ya con los datos enteramente replicados en una tabla temporal de nuestra base de datos SQLite nos detuvimos a medir los tiempos de respuesta de los queries sobre nuestro cache y arrojaron resultados sorprendentes, por cada proceso iterativo, hemos ahorrado aprox. 86% del tiempo de respuesta o lo que equivale a 1/6 del tiempo de procesamiento cuando la consulta se realizaba puramente sobre la base de datos Oracle.

En conclusión, cuando se trata de manejar volúmenes grandes de datos y el tiempo de respuesta de la base de datos es crítico en procesos iterativos y por sobre todo elevado, es conveniente recurrir a este tipo de implementación que nos permita mejorar ostensiblemente el tiempo de procesamiento.

Thursday, April 12, 2012

Sobre chipas y la nube de Google


Mi nombre es Lucas y soy parte del equipo de desarrolladores de Roshka.
A modo de fortalecer los vínculos sociales, una costumbre convertida en tradición dentro del círculo de programadores de la empresa, es hacer pedidos de chipa los días viernes.
Papel y lápiz en mano, la persona encargada de organizar las ordenes de chipa del día recorría todas las oficinas recolectando pedidos. Concluida esa primera fase del proceso, el organizador del pedido se dirigía a la chiperia para hacer las compras.
El sistema, si bien altamente efectivo, carecía del “factor ornamental” que idealmente debiera regir todo orden de eventos dentro una empresa informática: la sistematización del procedimiento.
Concernido por este hecho, poco más de cinco meses atrás me propuse el objetivo de desarrollar una aplicación web para automatizar el antaño procedimiento de pedidos de chipa como pretexto para iniciarme en el aprendizaje de Python y la incursión en una tecnología que viene acrecentando su peso en el presente de la futura vanguardia informática: el cloud computing.
Chipas-inthecloud (chipas-inthecloud.appspot.com) es el resultado de la combinación de ambos factores. Hosteado en la nube de servidores de Google, el sistema fue desarrollado íntegramente en Python mediante el servicio PaaS Google App Engine.
Una resumida referencia a las características, ventajas y restricciones del servicio puede encontrarse en el siguiente recurso:
A mi criterio, lo más rescatable del App Engine es el alto nivel de abstracción ofrecido respecto a factores no siempre ágilmente implementables como ser la interacción con las cuestiones relacionados a la infraestructura y el manejo de los servicios y tecnologías propias de la plataforma de hospedaje, permitiendo al programador enfocarse puramente en la lógica de negocios y el subsecuente desarrollo del sistema.
El manejo de persistencia de la aplicación se concretó a través del API de almacenamiento de datos NoSQL provisto por el entorno de desarrollo del App Engine. Los reportes fueron construidos mediante una librería Python para la generación programática de documentos PDF, llamada Reportlab. Chipas-inthecloud hace uso de los servicios de autenticación, envío de mails y mensajes XMPP nativos del AppEngine. Una actividad cron que se ejecuta cada minuto controla el tiempo de expiración de los pedidos, para enviar automáticamente las notificaciones correspondientes a los usuarios que participaron del mismo.
Captura de chipas-inthecloud corriendo en el localhost y no en la nube



Lejos aún de dominar Python y sin poder apreciarme el merito de haber escrito un sistema libre de potenciales fallas, puedo concluir que la experiencia de desarrollo fue muy gratificante. La documentación existente del AppEngine facilita un proceso de formación muy ágil. La puesta en producción de una aplicación escrita desde cero admite estándares de relación tiempo/esfuerzo imponderables. GAE es una de las mejores ofertas existentes en el mercado para todos aquellos con deseos de incursionar en el desarrollo de aplicaciones web en la nube.

Monday, December 19, 2011

Programación de Dispositivos móviles por Mangocast Radio en Ñandutí AM

Ayer me invitaron Gunter Krone y Lucho Benítez a su programa de radio Mangocast que va por Ñanduti AM los domingos de 22:00 hasta la media noche. A no confundir Mangocast Radio y Mangocast Internet (el podcast que pueden oir de este feed).

El tema era hablar un poco sobre Programación de Dispositivos móviles, sobre todo aplicada a nuestro mercado paraguayo. Así como también, despejar algunas dudas al respecto.

Estuvo muy bueno el programa, hubo preguntas muy interesantes, tanto de Gunter y Lucho, así como también de los oyentes. Aprovecho la oportunidad para agradecerles la invitación. Grabar en un estudio profesional es otra historia, la calidad del audio final es sencillamente muy superior a lo que estamos acostumbrados en nuestro podcast de tecnología.

En fin, lastimosamente no se pudo grabar todo el programa completo por un problema técnico, pero les dejo los primeros 30 minutos por si quieran escuchar. También pueden escucharlo directamente desde la misma página de Ñandutí.




Wednesday, November 30, 2011

wall@roshka

Este mes inauguramos el wall@roshka.
El wall nos servirá para "postear" cualquier tipo de información interna, "levantar" fotos y "taguear" a personas.
Arrancamos compartiendo con todos la lista de cumpleanhos, el mayor, entre otros chistes internos. Seguido de un update
de las propagandas de los trabajos realizados por Roshka.
Gracias al wall, volveremos a elegir al "empalado" y al "chongo" de cada semana!
El evento se realizó compartiendo chipas con cocido ya tadicionales en la Roshka.








Tuesday, October 18, 2011

Charla sobre Programación de Dispositivos Móviles en STI 2011

Me invitaron a dar una charla sobre programación de dispositivos móviles en la Universidad Católica de Itapua. Es un congreso anual organizado por los alumnos que se llama STI: Seminario de Tecnología de la Información.

Primero que nada quiero decir que la organización fue muy buena. A los charlistas y penalistas nos trataron muy bien, y la cantidad de gente que asistió fue importante. Calculo que casi 200 participantes de la zona: San Ignacio, San Juan, Posadas y, por supuesto, Encarnación.



Hablé fundamentalmente de dos cosas:

  1. Programación de dispositivos móviles como concepto general
  2. Programación de plataformas modernas móviles: iOS, Android, BlackBerry, Windows Phone 7
A pesar de que no hubo demasiadas preguntas al final como me hubiese gustado y esperado, creo que el mensaje se entendió y la charla gustó. No fue muy técnica porque solo debería haber durado una hora. Cada vez estoy más convencido que a los paraguayos no nos gusta preguntar, porque el tema realmente daba para algo de debate.

Acá hay un link para bajar la presentación en PDF. Como se trató de una charla de programación de dispositivos móviles, usé por primera vez un iPad con KeyNote para la presentación, y quedé muy contento con el resultado. Funciona realmente muy bien, y no tuve necesidad de hacer ninguna conexión aparatosa o transporte de ninguna laptop.

Acá hay un video de un extracto de la misma.




También me invitaron a dar la misma charla en San Ignacio, Misiones el 19 de Noviembre. Donde tengo muchísimos buenos amigos. Tengo que gestionar mi permiso en casa. Si lo obtengo, con mucho gusto me doy una vuelta por ahí.

Me tocó también conocer a un fellow programador paraguayo que también fue a dar una charla muy buena sobre MongoDB: César Rodas (crodas en Twitter). Muy interesante todo lo que pude hablar con él (compartimos el viaje de vuelta) y tiene muchísimas cosas que contar que estoy seguro le van a ser muy útiles a todos los programadores paraguayos (y de otras partes también). Le voy a invitar en dos semanas a grabar Mangocast con nosotros, y quiero hacerle una extensa entrevista.

También di una charla sobre PostgreSQL. La misma que di en Free Software Asunción 2011 hace unas semanas.


Finalmente, quiero mencionar que hacía como 8 años que no iba al sur y Encarnación está irreconocible. Muy, muy, muy linda sinceramente. La próxima vez voy con más tiempo.

* Foto de novaparaguay.com

Thursday, October 13, 2011

Dennis M. Ritchie 1941 – 2011. El mundo de la tecnología continua en luto.


En menos de una semana dos genios extremadamente influyentes en el área tecnologica han dicho adiós.

Ayer se conoció la triste noticia que el fin de semana pasado falleció Dennis MacAlistair Ritchie, a la edad de 70 años.

Algunos de sus aportes mas significativos:

1. El desarrollo del lenguaje de programación C, junto con Brian Kernigan. También fue autor del célebre y clásico libro (probablemente todos los informáticos lo habremos leído) "The C Programming Language", conocido a veces como K&R.

Este libro sigue siendo la referencia fundamental del Lenguaje, y se continua utilizando en muchas universidades en los cursos de C.

2. Colaboro en el diseño y en el desarrollo de los sistemas operativos Multics y Unix.

La genialidad de D.M.R radica en la gran influencia que tuvieron estos proyectos en el mundo de la tecnología.

Hoy el Lenguaje C continua siendo uno de los mas utilizados del mundo, particularmente en el desarrollo de aplicaciones que requieren alta performance como los sistemas operativos, la maquina virtual de Java, embedded system's, etc. Ademas, se puede notar claramente la influencia del Lenguaje C en la mayoría de los lenguajes modernos.

Así también, Unix sentó las bases de los sistemas operativos modernos, estableciendo principios y conceptos que hasta hoy son ampliamente adoptados.

Su legado es realmente inmenso, cuesta muchísimo imaginarse qué hubiese sido del mundo tecnológico hoy sin él.

Descansa en paz Dennis.