Quien les escribe:

Mi nombre es César Ballardini y soy un programador con alma inquieta..

Mira el perfil de César Ballardini en LinkedIn
del.icio.us del.icio.us
twitter twitter

Donaciones

Haga su donación:

USD $

Búsquedas



Blogroll

Sitios de interés:

DRAE buscón en texto: la Real Academia en un script

By cesar | Diciembre 22, 2009

Gran parte de mi tiempo en la computadora pasa en la interfaz de mandatos (CUI) del shell.

Cuando tengo dudas sobre si cierta palabra existe en castellano o simplemente es una de las tantas que estamos en el proceso de inventar, consulto el DRAE, el Diccionario de la Real Academia Española en http://buscon.rae.es/draeI/.

La interfaz del buscador es limpia pero me obliga a usar un navegador web, embocar una caja de diálogo con mi consulta, y luego decodificar la salida.

Bienvenido al mundo de los scripts de bash y sus amigos.

#!/bin/bash
URL_BUSCON="http://buscon.rae.es/draeI/SrvltObtenerHtml?origen=RAE&LEMA=$1&SUPIND=0&CAREXT=10000&NEDIC=No#0_1"
 
curl ${URL_BUSCON} 2>/dev/null \
| html2text -nobs \
| sed "s/ñ/ñ/g"

Si guardas ese script con el nombre /usr/local/bin/drae vas a poder consultar una palabra de la siguiente manera:

  drae término

y tendrás en la salida estándar el significado oficial.

curl baja la respuesta de buscón, html2text analiza el HTML (sólo entiende la versión 3.2, pero en mis pruebas ha salido exitoso) y por último sed cambia la entidad que corresponde a la «eñe» de «Española» que de otro modo afearía el resultado final.

¡Gracias DRAE!

Temas: programación | 5 comentarios »

Un abrazo para tu sysadmin

By cesar | Julio 31, 2009

Como todo último viernes de julio, hoy es el día del administrador de sistemas (Sysadmin). Felicitaciones a esas almas esforzadas que instalan, configuran, y automatizan tu infraestructura de sistemas de tecnología de la información. Piensa en el correo electrónico, tus accesos a internet, la navegación, el filtrado de virus, de spam y todas las veces que transferiste archivos, imprimiste o escaneaste en un equipo de red. Acuérdate de las veces que te fuiste de la oficina porque había un problema y tu Sysadmin se quedó hasta resolverlo.

En estos tiempos de computadoras, redes y equipo altamente tecnológico, tu Sysadmin es un ángel de la guarda a tu lado.

Vamos… Dale ese abrazo que está mereciendo. Regalale algo de comer. Aumentale el sueldo. Eh… Bueno, lo que esté a tu alcance. :-)

Referencia: http://www.sysadminday.com/

Temas: programación | No hay comentarios »

Conversión de AVI a FLV (cómo ilustrar con vídeo)

By cesar | Junio 16, 2009

Ayer ví la película «El vidente», titulada Next en inglés, y me gustó unas de las escenas en la cual el protagonista Cris Johnson un mago de Las Vegas con verdaderos poderes de precognición debe buscar a su amada, secuestrada por terroristas rusos.  La escena transcurre en una instalación a oscuras, con múltiples caminos para recorrer y muy poco tiempo.  Cris tiene la habilidad de ver su propio futuro dentro de los siguientes dos minutos.  Lo que hace entonces es investigar múltiples caminos de futuros alternativos, lo que se ve gráficamente en la pantalla como un desdoblamiento de Cris en múltiples personalidades, todas trabajando en la búsqueda a la vez.

Además de disfrutar un rato de una linda pelicula de acción, no pude evitar acordarme de mis alumnos en programación lógica y en inteligencia artificial cuando debo explicarles lo que significa la programación no determinista.  Las dos ideas que uso para ilustrar el concepto son justamente: a) imaginen que el programa procede en forma paralela generando copias de sí mismo para estudiar cada alternativa; y b) imaginen que el programa es omnisciente y por lo tanto sabe de entrada cuál es el camino a tomar para llegar a la solución, y sólo hace las elecciones que lo conducen directamente a la meta.

Ambas ideas se conjugan en la trama de esta película. ¡Genial!, pensé, ahora solamente necesito cómo pasar el vídeo a FLV y subirlo a la página adecuada para que los alumnos lo puedan ver.

Veamos.  Esto tiene varias cuestiones, una de las cuales es conseguir los permisos para utilizar estas imágenes con fines académicos.  Bueno, eso no parece de mi área de especialidad, así que lo consultaré con algún especialista.

Otro tema es conseguir el vídeo de la película, lo cual en estos tiempos no parece un escollo técnico insalvable.

Una vez en posesión del vídeo, digamos que está en formato AVI, voy a necesitar editar y recortar la parte que me interesa; para ello utilizo el programa avidemux y grabo un AVI con el segmento en cuestión.

Supongamos que ese segmento mide unos 12 megabytes, para que sea visible al estilo youtube lo debería pasar a formato FLV y cambiarle la resolución a 320×240 pixels.  Eso se puede hacer con los mandatos:

ffmpeg -i next-non-deterministic-search.avi -ar 22050 -ab 32 -f flv -s 320x240 next-non-deterministic-search0.flv
 
cat next-non-deterministic-search0.flv | flvtool2 -U stdin next-non-deterministic-search.flv

Eso nos dejaría una archivo de unos 3 megabytes, mucho más apto para la tarea de verlo por Internet.

Los programas usados serían:

Temas: programación | 1 comentario »

Java de Sun con problemas y cómo instalar la última versión en Debian

By cesar | Marzo 29, 2009

Acaba de aparecer un aviso de vulnerabilidades críticas en el JRE y JDK de Sun. Están informadas en el caso de Debian GNU/Linux como Bug#521517.

Si usas Facebook, vas a necesitar Java en tu navegador para trabajar con las imágenes.

La última versión en el sitio de Sun para descargar tiene arreglado el problema, pero la última de los depósitos Debian, no. Ni la de 32 bits ni la de 64.

¿Qué hacemos? O nos quedamos sin parte de Facebook (una alternativa difícil en mi caso, pues mi esposa es fan :D ) o instalamos la última versión de Sun salteando el sistema de paquetes. Cualquier casado sabe que es más fácil lidiar con las cuestiones técnicas.

Ahí vamos.

1. Descargar la última versión desde Sun; debe ser el Update 18 de la versión 5.0 ó el Update 13 de la versión 6.0 desde http://java.sun.com/javase/downloads/index.jsp

2. Cámbiate a /usr/local y ejecuta el script que descargaste. Eso va a crear un directorio /usr/local/jre1.6.0_13/

3. Mira las alternativas para java con: update-alternatives --display java

4. Crea la alternativa que vamos a usar:

/usr/sbin/update-alternatives --install /usr/bin/java  java  /usr/local/jre1.6.0_13/bin/java 1

5. Ahora hay que elegir la alternativa que deseamos, o sea, la que acabamos de instalar, y para eso usamos:

update-alternatives --config java

6. Puedes ver que es la correcta con: java -version que te devolverá:

java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)

7. Configurar el plugin para el Iceweasel:

ln -s /usr/local/jre1.6.0_13/lib/i386/libnpjp2.so /usr/lib/iceweasel/plugins/libnpjp2.so

8. Comprobar que el applet del reloj funciona en: http://java.sun.com/applets/jdk/1.4/demo/applets/Clock/example1.html No olvides reiniciar antes el navegador.

Hecho. Mi matrimonio esta a salvo una vez más gracias a Debian.

Temas: sysadmin | No hay comentarios »

rock paper scissors lizard spock

By cesar | Marzo 10, 2009

Florencia Milenka es mi hija de 7 años a la cual es realmente difícil ganarle a «piedra, papel y tijera».  Mis reflejos están en buen estado, pero ocurre que nos estancamos en algunas secuencias o subsecuencias de movimientos.

Buscando en Google alguna alternativa, me encontré con esta: «rock paper scissors lizard spock», que se describe en http://www.samkass.com/theories/RPSSL.html pero que claramente es más divertido ver en The Big Bang Theory.  Les cuento cómo funciona y luego el videito para disfrutar.

Los agregados de Lizard y Spock nos dejan con un sistema de ganadores de la siguiente manera:

piedra papel tijera lizard spock

O sea: Tijera corta Papel cubre Piedra pisa Lagarto envenena Spock aplasta Tijera decapita Lagarto come Papel contradice Spock vaporiza Piedra aplasta Tijera.

Fácil, ¿no?

Espero jugar hasta los 8 al menos, jeje

¡Ah! El video:

Temas: programación | 1 comentario »

¿Qué es eso?

By cesar | Marzo 4, 2009

¿Cuánta paciencia hace falta para aprender un lenguaje de programación?

¿Cuánta paciencia para enseñarlo?

¿Cuánta paciencia necesitas vos?

¿Cuánta paciencia necesitan los que te tienen cerca?

Un video griego para hacerte pensar en estas cosas: Τι είναι αυτό? de Constantin Pilavios

Temas: programación | No hay comentarios »

Citas para disfrutar

By cesar | Febrero 23, 2009

Acabo de agregar una página para compartir un conjunto (desordenado como todo conjunto que se precie matemáticamente) de citas que he ido recolectando a lo largo de los años. Las citas están en orden cronológico inverso, y así pienso seguir agregándolas en el futuro inmediato.

Sólo para esta primer entrega y pensando en tí, que no vas a leerlas hasta el final, he hecho flotar hacia los primeros lugares un docena de citas que me resultaron particularmente interesantes.

Así que ahora podrás leer algunas de las cosas que me llamaron la atención, me divirtieron y me hicieron pensar a lo largo de estos catorce años de acceso a Internet.

Bienvenido a Citas para disfrutar.

Temas: programación | No hay comentarios »

Nova-Linux: la distro cubana

By cesar | Febrero 17, 2009

El lunes 9 de febrero de 2009 se lanzó oficialmente NOVA, la Distribución Cubana de GNU/Linux.  Hace cuatro años que se desarrolla desde las aulas de la Universidad de las Ciencias Informáticas de La Habana (http://www.uci.cu/).

Mediante un plan de aportar 50 horas de trabajo voluntario, muchos estudiantes aportaron a diversas necesidades de la comunidad  y entre ellas el desarrollo de Nova-Linux.  La distro está basada en Gentoo Linux.

Si quieres descargar la versión actual para probarlo, puedes descargar el DVD desde: http://www.nova.uci.cu/versiones/1.1.2/BAIRE-1.1.2-30012009-V1.iso

En palabras del Ministro de Informática, Ramiro Valdés: «Es un tema muy importante para lograr un mayor control sobre el proceso informático» (citado de canal-arse puede encontrar una necesidad cada vez más importante y que hace que tanto Estados como empresas nacionales y multinacionales coincidan con sus apreciaciones.

El sitio actual del proyecto es http://www.nova.uci.cu/ estará disponible la información sobre este proyecto. A partir del 1 de marzo del presente año, el sitio oficial de la distribución será http://www.nova.cu/

Si quieres ver el video demostrativo, te lo paso a continuación:

Temas: programación | No hay comentarios »

¿Qué vas a estar haciendo en el segundo 1.234.567.890 de nuestra era?

By cesar | Febrero 4, 2009

¿Cuál es nuestra era?

Como unix guy, mido el tiempo en Unix time http://en.wikipedia.org/wiki/Unix_time muchas veces en mi vida laboral.

El viernes 13 de febrero de 2009 a las 23:31:30 hs (tiempo universal) vamos a pasar por el segundo número 1.234.567.890 de la era Unix. Es un evento único, casi diría como cada segundo, sin temor de plagiar a Heráclito http://es.wikipedia.org/wiki/Heráclito. ;-)

¿Dónde vas a estar?

¿Hay profecías acerca del ocaso de los sistemas que deban cumplirse? ;-)

Por mi parte, vivo en la República Argentina, lo cual pone ese momento en la hora local 21:31:30 hs y por lo tanto lo incluye dentro del sábado o descanso semanal (sábado proviene de una palabra hebrea que significa reposo).  Voy a estar disfrutando del comienzo de un espléndido día de reposo, sabiendo que todo lo que tengo para hacer no cabe en una semana y dejando las cargas de trabajo, de estrés, de preocupaciones durante todo un día.  A la mañana siguiente, estaré en familia, visitaré a personas que no tengo la oportunidad de ver durante la semana, y compartiré un momento de paz con ellos.  El sábado es uno de los regalos más antiguos que tiene la humanidad, y ya te imaginas quién es el Dador de ese presente…

¿Vos tenés algo mejor que hacer?

Temas: programación | No hay comentarios »

overflow on /tmp type tmpfs

By cesar | Febrero 3, 2009

¿Te ha sucedido eso?

En lugar de tu filesystem de siempre montado al galope corto sobre /tmp/, te encuentras con esa cosa de overflow.

Y no viene solo.

Cualquier cosa que intentaste descargar desde Internet te da errores de que no tienes espacio en disco. Sin embargo, tu /home/ o donde sea que guardas las cosas que descargas está perfecto en cuanto a espacio disponible.

Hay algo raro en el /tmp/. Si eres como la mayoría de los mortales, tu /tmp está en el mismo filesystem que /, así que revisas con df y ves que se te ha ido a mano en esa partición pues está llena o casi. La solución es simple, haces espacio: eliminas logs si el /var/log/ está en /, usas apt-get clean para borrar archivos de la última instalación o actualización de paquetes (si eres un Debianita o perteneces a algunas de sus cismáticas hermanas), y tratas de eliminar por cierto cualquier cosa que haya en /tmp/, lo cual es interesante porque no hay mucho allí.

El problema continúa.

El problema es que no sabes que ha pasado en tu máquina. Un poco de aprendizaje cura todo el asunto. Veamos.

¿Cómo están las cosas al momento del problema?

mount

muestra: (sólo muestro la línea relevante a este caso)

overflow on /tmp type tmpfs (rw,size=1048576,mode=1777)

¿Quién montó ese overflow en /tmp/ ?

/etc/init.d/mountoverflowtmp es el encargado de revisar la cantidad de espacio de /tmp al momento de arrancar el sistema. Si el espacio libre es menor a un cierto umbral (1024 Kbytes en mi caso de manera predeterminada), entonces el script monta /tmp/ en un filesystem de RAM con:

      mount -t tmpfs -o size=1048576,mode=1777 overflow /tmp

Para revisar el espacio libre utiliza el siguiente mandato:

  df="`df -kP /tmp |grep -v Filesystem`"

el cual en mi humilde opinión tiene un problema de locale: la palabra Filesystem no aparece si tienes configurado el sistema en castellano.

El código completo de mi versión actual del script es el siguiente:

#!/bin/sh
### BEGIN INIT INFO
# Provides:                 mountoverflowtmp
# Required-Start:      mountall-bootclean
# Required-Stop:       umountfs
# Default-Start:         S
# Default-Stop:          0 6
# Short-Description: mount emergency /tmp.
# Description:            Mount a tmpfs on /tmp if there would
#                                  otherwise be too little space to log in.
### END INIT INFO
 
. /lib/init/vars.sh
. /lib/lsb/init-functions
 
set -e
 
defs=/etc/default/mountoverflowtmp
test ! -f "$defs" || . "$defs"
 
: ${MINTMPKB:=1024}
if test "$MINTMPKB" = "0"; then exit 0; fi
 
case "$1" in
  start)
             [ "$VERBOSE" != no ] && log_action_begin_msg "Checking minimum space in /tmp"
             df="`df -kP /tmp |grep -v Filesystem`"
             set -- $df
             avail="$4"
             [ "$VERBOSE" != no ] && log_action_end_msg 0
            if test $avail -lt "$MINTMPKB"; then
                        log_action_begin_msg "Mounting emergency tmpfs on /tmp"
                        mount -t tmpfs -o size=1048576,mode=1777 overflow /tmp
                        log_action_end_msg 0
            fi
            ;;
  restart|reload|force-reload)
           echo "Error: argument '$1' not supported" >&2
           exit 3
           ;;
  stop)
           if LANG=C LC_ALL=C mount | \
                          grep '^overflow on /tmp type tmpfs' >/dev/null; then
                          log_action_begin_msg "Unmounting any overflow tmpfs from /tmp"
                          umount overflow
                          log_action_end_msg 0
           fi
           ;;
  *)
           echo "Usage: mountoverflowtmp [start|stop]" >&2
           exit 3
           ;;
esac
 
:

¿Cómo soluciono el problema?

El problema fue que la partición que debiera alojar a /tmp/ se quedó sin espacio libre durante el arranque del sistema. Para paliar ese problema, se montó una partición especial para darle algo de espacio al /tmp/, sin el cual no es posible el arranque.

La solución es simple, hacer espacio libre en la partición que aloja /tmp/ y rearrancar el sistema. En este arranque habrá espacio libre y por lo tanto no se usa overflow.

Si no puedo rearrancar el sistema, una solución que funciona casi siempre es religar el directorio con un directorio donde sí hay suficiente espacio. En mi caso lo que hice fue:

mount -o bind /var/tmp /tmp

Solucionado.

Temas: programación | No hay comentarios »

« Entradas anteriores