patocarr.com logo

Projects

Proyectos

No es demasiado a menudo que me embarco en proyectos de programación. La mayoría de las veces surge de tener que solucionar algun asunto, (de rascar adonde pica) que me lleva a investigar como se puede hacer. Nada nuevo, siempre hay alguien que lo hizo antes de algun otro modo, sin embargo la investigación de como fue hecho, ya es un aprendizaje importantisimo. Y si finalmente surge codigo propio... un avance personal.

Picasa -> xml -> ruby => Generador de páginas web

Google Picasa exporta a paginas web y a formato xml, y hace unos dias lo portó a Linux usando las bibliotecas de Wine. Excelente programa para edicion[light] y administracion de colecciones de imagenes.
El archivo xml contiene la coleccion de archivos, thumbnails, tamaños, captions, etc.
El generador que me propuse escribir parses el xml y genera paginas basadas en templates. El primer template contiene el indice del album, con todos los thumbnails. El segundo template contiene el formato de cada thumbnail y el tercero la pagina individual de cada imagen. Por ejemplo, el template de los thumbnails sería algo asi:

  <div class="thumbnail"> <a href='__target__'>
  <img src='__itemThumbnailImage__' style='border:0' alt;='' width='__itemThumbnailWidth__' height='__itemThumbnailHeight__' /> </a>
    <div class="name">__itemName__</div>
  </div>
El script ruby entonces reemplaza los tokens con el contenido del archivo xml. Cabe señalar que despues de probar mi versión proof-of-concept, decidí basarla en partes de la class PicasaAlbumHelper de Hackerdude que tiene una Creative Commons Atribution license.
Para ver un ejemplo del album generado, visite mi album de la Southern California Linux Expo 2005
Sources

Estado del tiempo, Awk & Bash

Estoy haciendo un programita basado en awk para embellecer código vhdl. Es la primera vez que me pongo a estudiar awk, y realmente no es dificil y es bastante poderoso para ser usado como filtro.
Cuidado, cuando uno anda con un martillo en la mano, de repente todo parece clavo.
Encontré una página que dándole tu zip code, te devuelve información sobre el tiempo y un mini pronóstico. Con un poco de awk se puede convertir en algo útil.
Webcam es el programa que captura las imagenes del webcam y las pone en un archivo .jpeg, en el directorio del web server. Webcam puede leer un archivo de texto y agregárselo como subtítulo a la imagen. Este archivo va a tener mi localidad, la fecha y hora y la temperatura actual.

#!/bin/bash
TMPFILE=/tmp/temp.xml
TMPCAPTION=/tmp/tmpcaption
CAPTION=/tmp/caption
I=0
while (true) do
    if [ "1800" -eq $I ]; then
        wget -O $TMPFILE http://weather.unisys.com/forexml.cgi?91367
        I=0
    fi
    I=$(($I + 1))

    # separate 'city="Woodland Hills, CA"' by ", and take 2nd
    awk 'BEGIN {FS="\""}/city/{print $2}' $TMPFILE > $TMPCAPTION

    # handpick 'Tue Jan 17 23:42:48 PST 2006'
    date|awk '{print $2 " " $3 " " $4 " " $5}'>>$TMPCAPTION

    # now the temp
    awk 'BEGIN {FS="\""}/temp.string/{print $2}' $TMPFILE >> $TMPCAPTION

    # join all three lines
    cat $TMPCAPTION|awk 'BEGIN{RS="";FS="\n"}{print $1 " " $2 " " $3}'>$TMPCAPTION

    cp $TMPCAPTION $CAPTION
    sleep 1
done
La imagen con subtítulo se puede ver tambien en la página principal

Jugando con pygtk

Hace un tiempo ya que tengo una webcam mirando hacia afuera de mi depto y junto con un web server corriendo en mi maquina, puedo generar imagenes cada segundo y ponerlas online. Lo que necesitaba era una ventanita que me mostrara la imagen actual del webcam, que se actualice cada segundo y que me diga si alguien está viendo el website desde afuera. Asi es que con un par de horas de hacking con pygtk logré lo siguiente: images.py


webcam windowshot
Shot del script en acción

Enderezador de fotos digitales

Encontré un viejo script perl que usé para enderezar fotos digitales basado en la información EXIF que le agrega la cámara digital. Esta info tiene entre otras cosas, shutter speed, apertura y orientación. Este script necesita algunas tools de ImageMagick como mogrify e identify.
El código esta protegido por la Licencia General GNU y disponible para download: standup.pl

Nuevo Theme para el album

Una nueva actualización al viejo SlideCSS, que ahora se llama FrameCSS. Cuenta con una sola imagen .gif transparente, y el thumbnail se centra con codigo CSS (padding).
El theme fue aceptado por el autor del album y lo incluyó en su listado de themes! con el viejo nombre.
Lo puedes bajar en un tgz: FrameCSS
Este software se encuentra protegido por la Licencia General GNU

RedHat/Fedora Samba configuration tool

Navegando por Bugzilla, encontre un programa de RedHat/Fedora, que sirve para configurar un servidor Samba, que tenía algunos problemitas. Me puse a investigar al respecto, y descubrí que el script python daba unos warnings debido a unos métodos que fueron mejorados en pygtk, pero no en el script. El mensaje de warning era algo asi:

/usr/share/system-config-samba/mainWindow.py:116: DeprecationWarning: use gtk.UIManager
  item_fac = gtk.ItemFactory(gtk.MenuBar, "<main>", accel_group)
/usr/share/system-config-samba/mainWindow.py:141: DeprecationWarning:
  button = self.toolbar.insert_stock('gtk-add', _("Add a samba share"), None, self.onNewButtonClicked, None, 0)
snip

Al cabo de un par de horas de hacking con pygtk, arreglé el problema y ahora no tira mas warnings! El patch fue enviado al mantenedor del paquete (Nils Philippsen) para su incorporación. [Update] El patch ya esta en CVS!

Picblog

Al descubrir la potencia de un lenguaje orientado a objetos relativamente nuevo llamado Ruby, me propuse hacer un proyecto para poder mandar las fotos desde mi celular, directamente a mi homepage.
Desde el celular, mando una foto a mi direccion de email. Este script se ejecuta en mi maquina y cada unos 10 minutos chequea mi email y extrae los que fueron enviados por mi celular. Luego se conecta a mi website y sube las fotos recogidas.

Screenshot ;-)

Trying pop.1and1.com...
Connected
Downloading 5 mails...
Pat Carr
818*****48@tmomail.net
Got one pic-email! Tue, 6 Jul 2004 00:32:13 -0700 (PDT)
Got pic!: Footer text
Marcelo Ramos
quake-all-owner@eqinfo.wr.usgs.gov
818*****48@tmomail.net
Got one pic-email! Sun, 11 Jul 2004 02:38:47 -0700 (PDT)
Got pic!: Grocery shopping
5 mails popped.
Trying to ftp to patocarr.com
Logging in...
Logged in
Uploading inbox/Tue,_6_Jul_2004_00:32:13_-0700__PDT_.jpg
Uploading inbox/Sun,_11_Jul_2004_02:38:47_-0700__PDT_.jpg
Done.
Sun Jul 11 13:24:46 PDT 2004: Sleeping 10 minutes...

PicBlog.rb esta disponible para download, y esta protegido por la Licencia General GNU

Theme para el album

Album es un script escrito en perl para generar galerias de imagenes para poner online. Con la ayuda de album es que hice las galerias que se ven en este website. Al principio, el 'theme' de las galerias no tenia mucho que ver con el diseno general de la pagina, asi que quise modificar los colores y el layout general para que concuerde mejor. Me gusto la idea que tome del gThumb que los thumbnails sean enmarcados como si fuese una diapositiva, pero no pude encontrar un theme para el album que hiciera eso, aunque hay varios temas disponibles. Asi que me dispuse a disenar el mio. Basado en un theme ya escrito por Helmar Wieland llamado Floating, que usa CSS en lugar de tablas para el layout, es que base el SlideCSS.

Para instalar este theme y generar un album con las imagenes contenidas en el directorio gallery_dir

[user@host]$ mkdir Themes
[user@host]$ cd Themes
[user@host]$ tar xvfz SlideCSS.tgz
[user@host]$ cd ..
[user@host]$ album -theme Themes/SlideCSS gallery_dir

SlideCSS esta disponible para download, y esta protegido por la Licencia General GNU

Pwiki

Mi implementacion de un Wiki escrito en Perl. Que es un Wiki? es una herramienta que permite trabajar concurrentemente sobre uno o varios documentos. El Wiki original fue escrito por Ward Cunningham y la version original esta todavia en linea. Existen cientos de implementaciones de Wiki, escritas en C, php, C++, java y varios lenguajes mas. Elegi escribirlo en Perl por ser uno de los lenguajes mas populares para escribir programas CGI y por ser uno de los que mas uso habitualmente.

Y para que escribir *otro* Wiki mas? primero que todo, para aprender! una de las razones principales fue que queria tener la posibilidad de agregar imagenes y los Wikis que lo hacen son muy grandes. En fin, queria aprender, que sea algo chico y portable, que permita agregar imagenes y que sea 'seguro' para el servidor adonde reside.

Pwiki esta protegido por la Licencia Publica de GNU: GPL. Esto te permite modificar el codigo original libremente, y me libra de toda responsibilidad debido a su uso.

Caracteristicas:

El codigo fuente esta disponible "inline", lo que significa que el propio programa entrega su codigo al pasarle el parametro 'self'.

Para verlo en funcionamiento, visita la PrimerPagina, adonde se explica otro poco sobre como usarlo. Marcelo (xanthus) Ramos preparo un HowIdidIt de la instalacion paso por paso. Gracias xanthus!

IPsaver

Martín es un usuario más de un servicio de internet de broadband o banda ancha, mas comunmente llamado ADSL (Asymmetric Digital Subscriber Line o subscripcion de linea digital asimetrica). Normalmente, estos servicios le otorgan al usuario de un IP dinamico (una direccion digital unica en el internet), una direccion que cambia en cada nueva conexion.
Su necesidad se basa en que él esta ejecutando algun tipo de servidor en su computador (ssh, http, ftp) y necesita accederlo desde otra computadora en otro lugar, por ejemplo desde la casa de su amigo. Como el IP de su conexion cambia, es imposible saber que direccion tendra. La solucion es un pequeño script que desde su maquina le dice a un servidor conocido de su IP. El servidor almacena el IP y ahora esa direccion se encuentra accesible al internet.
Este script podria reemplazar a dyndns, pero no actualiza dns, solamente devuelve el IP guardado previamente

wget http://mi-servidor-estatico.com/cgi-bin/ipsaver.pl?username=192.168.0.2

De esta manera, el IP se almacena en el servidor y esta disponible para accederse desde cualquier otro lugar, y desde cualquier browser, como:

http://mi-servidor-estatico.com/cgi-bin/ipsaver.pl?username

Retornara el IP almacenado previamente: 192.168.0.2

Para instalarlo, es necesario tener, como minimo, acceso ftp al server http. En la instalacion se debe poner el script en un directorio ejecutable (p.ej. /cgi-bin) y setear sus permisos de ejecucion.
Muy importante es modificar el script para que apunte al directorio de datos del servidor (linea 22), adonde es necesario crear un archivo, con el nombre ipfile. Debe tener permiso de escritura (chmod 666 ipfile).

Vea su código fuente

Este script esta protegido por la Licencia Publica General de GNU.

Proyecto CDROM de Software Libre

"En Argentina, particularmente en las universidades, aún no se ha tomado conciencia de la implicación que conlleva el uso de software propietario dentro de las mismas, tanto en materia económica como en materia de independencia tecnológica. La aparición del software libre nos abrió un nuevo horizonte en lo que respecta a lo que se venía pensando hasta el momento, por razones coyunturales, de lo que significaba el software en una computadora. Es la idea de este trabajo dar una breve introducción sobre las ventajas y desventajas del software libre dentro de la universidad. Se trató de ser lo mas coloquial posible como así también dar ejemplos concretos de lo que aquí se enuncia. No nos adentraremos a explicar la definición de lo que es y no es software libre. Eso queda fuera de este trabajo y se pueden encontrar articulos interesantes en la web que hablan al respecto. En compañía de este articulo viene un cdrom con una amplia gama de productos bajo esta nueva filosofía para la plataforma Windows, invitando inmediatamente a quien lo desee a probarlos."

Acceso en linea del proyecto

Minibox: Minidistro en diskette - Por Marcelo Ramos

El tema de la creación de minidistribuciones en diskette es fascinante para mi y siempre quise empezar a investigar el tema. Minibox 0.1 es el resultado de mi primer intento :)

Está creado con Busybox y Tinylogin los cuales usan la biblioteca uClibc

Minibox 0.1 no es realmente útil, es sólo un experimento. Con el tiempo tal vez se me ocurran ideas para crear a partir de Minibox algo realmente útil

vnc
La imágen muestra a Minibox corriendo dentro de Bochs en una de mis consolas (Debian Sid).

Sugerencias e ideas bienvenidas: mramos(a)montevideo.com.uy (borrar el 'SACAR' antes de enviar!)

Camserv

En mi caso, el único hasta el momento, encontré un programa que captura imagenes en tiempo real desde la webcam y crea un servidor de imagenes (mjpeg) adonde cualquiera puede conectarse y 'ver' lo que mi cámara esta viendo. Todo muy lindo, excepto que mi cámara no respondía como yo quería. Me mostraba una imagen cortada al medio, blanco y negro y la parte superior era tres mini-imagenes de la camara. Una cagada.
Despues de un par de dias de probar configuraciones y leer interminables threads de mailing lists, decidi inspeccionar y ver que era lo que estaba *tan* mal con mi equipo. Me puse a mirar el source code, el programita propiamente dicho en C.
Unos dias mas y muchas horas de lectura y experimentos, me llevaron a la conclusion que mi programa estaba poniendo las imagenes en linea exactamente como salian de la camara, en formato YUV, cuando el programa las esperaba en RGB. Por eso la distorsion. En fin, encontre en otro programa del mismo estilo una subrutina para cambiar de YUV a RGB y la implemente (desde C++) en el source code. Y algunas horas mas tarde estaba funcionando! Mi propio hack a un programa en C bajo Linux!
Con esto no quiero decir que cada uno que algo no le funcione se pase las horas que yo me pase para arreglarlo! Solo que es posible hacerlo.
El programita del que hablo es el Camserv V.0.5.0, escrito por Jon Travis, un video stream server a traves del web. Una herramienta muy util que solía usar frecuentemente en la seccion Realtime from home. El programa, como todo servidor, no es gráfico y solo tiene un archivo de configuracion, en su mayoria facil de entender. Tiempo despues de modificar el programa, encontre otra version con la correccion que yo le hice, y la ultima version ya lo incluye.