Category: Programación

Damn, now that's crazy

by jci Email

Sabian que QT ya posee un modelo multiple de licencias?

Hasta hace unos dias, QT se distribuia con dos licencias, GPL para aplicaciones no comerciales, y comercial (duh). Ahora, agreguenle LGPL. O sea, aplicaciones comerciales pueden ahora enlazar con QT sin tener que comprar una licencia.

A elegir su veneno! Esto se esta poniendo interesante :-D

When you realized you needed this more than me, it's a little too early

by jci Email

Odie Python hasta hace unos 20 minutos atras.

Siempre he tirado las mejores focas contra Python. No quise asumirlo como lenguaje, ni tampoco lo aprendi lo suficiente para hacer un "hola mundo". De hecho, durante una charla en Valparaiso, si no fuera por Eduardo, no habria podido mostrar un ejemplo en vivo de un script para una ventanita con un ... "hola mundo".

De ahi que he mirado con mejores ojos al lenguaje ese.

Penguined!

Bueh, en tema relacionado, por fin pude salir del limbo de la programacion abierta y contratar cable. Asi que ahora debo anotar las horas en que mis series favoritas o peliculas del mes van a salir.

Diablos, no tengo la revista del cable. Asi que tendre que empezar a buscar la programacion en la pagina de VTR. Y ahi es donde la cosa se torna excesivamente incomoda.

Por ejemplo, si quiero ver que estan dando en Cinemax, debo seleccionar la señal, la region, la comuna (!) y el canal. Y de ahi, recien el boton "Buscar". Se torna mas color de hormiga cuando hago mas de una busqueda, o equivocadamente apreto el boton "Volver". Despues de unos 20 minutos, ya estaba podrido. Asi que pense en usar el musculo cerebral para hacer algo rapido, sencillo, y que un bipedo como yo entendiera.

Manos a la obra.

River Raid

La pagina de programacion de VTR contiene Ajax. Cuando seleccionas el tipo de señal, automaticamente carga un selector de regiones. De ahi el selector de comunas. Y el selector de canales. Para peor, no hay cosa que mas odie en este mundo que Ajax. Puedes escudriñar muy poco dentro de el, a no ser que ya te sepas Javascript o manejar XmlHTTPRequests o similares. No, no se una pizca de Ajax. Y no quiero andar aprendiendo a estas alturas.

Afortunadamente, una extension de Firefox me ayudo en la tarea : GreaseMonkey. Pero hay que instalar ademas XMLHTTPRequest Debugging.

Una vez instalado y funcionando con el dominio, pude ver como se pasaban las variables entre las paginas que cargaba. Mejor aun, el request completo. Una pagina de prueba y funciona. Excelente.

Botella de Coca Cola

Empece programando un pequeño script en PHP para mandar las peticiones via POST. Pero el muy cochino no tenia ninguna facilidad para poder inyectar de forma "facil" (digamos, a prueba de humanos) las variables a pasar al script del otro lado del cable.

Aparecio Perl pero dije "y por que no Python?".

Encontre un pequeño ejemplo de una rutina en POST. Asi que un par de modificaciones, bastante cafe de por medio y una tarde lavando ropa nos da como resultado...

...Un lindo script que guarda una pagina completa con la programacion del dia.

Pedro y Ricardo

Necesitan ademas este archivo : MultipartPostHandler.py que hay que colocar en el mismo directorio del script grab1.py.

Se genera un archivo programacion.html.

Nota : solo funciona para Santiago. Aun no he decifrado como es la disponibilidad de las regiones. Tampoco para la señal premium.


Update: Tengo un ejemplo del posible RSS que se puede generar. No voy a tirar el script aun en linea, por que tengo que arreglarlo. Esta charchamente hecho el rss, pero que va.

Aqui los feeds de VTR Cable Full, actualizados diariamente :)

Insomnio es la palabra del dia.

The date there is a little funny...

by jci Email

jci@marvin:~/fotos$ find | grep g$ -i | wc -l
10116

Todo empezo por ahi. Como diablos se mantiene una coleccion de al menos unas 10000 fotos? O quizas mas? Y con las fechas correctas?

Siempre he tenido pesima memoria. Sobre todo para acordarme en que he eventos he estado, como asistente o expositor. Aparte de tambien algunos carretes con amigos, photoshoots y otras. Asi que como dicen por ahi, "la foto es la mejor maquina del tiempo que existe"

Bueh, creo que conocen F-spot. Asi que empece la titanica tarea de agregar toda esa cantidad de imagenes ahi. Aunque digamos que no se porta tan mal como crei (excepto por unos errores bien raros de Xlib).

Claudio Saavedra
Showing the tools of the trade

Hace ya un par de años, compre una Sony Cybershot P72. Pero olvide un pequeño detalle al momento de comprarla : colocarle la fecha correcta a la camara. Asi que estuve mas menos unos 5 meses sacando fotos con 1 año y 12 horas de diferencia. Y esos se ven en F-spot, ya que las ordena de acuerdo a algunos parametros que pueden o no estar en el archivo:

  • Fecha de creacion del archivo
  • Exif metadata : Date and Time (0x0132)

El primero siempre va a existir, pero el segundo no.

Codec?!
Damn LoopholeDamn LoopholeDamn LoopholeDamn Loophole...

Antes de la Cybershot, tenia una camara bastante humilde, marca Benq (que aun debe funcionar). No tiene tan buena resolucion como la Cybershot (debe ser de 1.3 Megapixeles), pero era lo mas portatil posible (se podia echar hasta en el bolsillo interior de una chaqueta). El unico inconveniente de la camara es que no guardaba metadatos en el archivo de imagen. Bueh, la camara con suerte tenia un display indicando la cantidad de fotos restantes, y si ibas a sacar con flash, asi que ni modo que guardara esa info.

Exif (Exchangeable Image Format) contiene una coleccion de metadatos bastante interesante. Por ejemplo, la velocidad de obturacion, exposicion, foco, etc. Si han usado Flickr alguna vez, se daran cuenta que al ver la imagen, contiene la descripcion de la imagen, junto con la camara y otros datos que son mas importantes para alguien que sabe que significan.

Un ejemplo es esta imagen (obtenida sin permiso del autor). La imagen dice que fue tomada el "2007:04:07 23:29:53".

Ahora, como diablos corrijo el famoso problema de fotos tomadas con la Cybershot, con la famosa diferencia horaria, para que f-spot pudiera ordenarlas bien?

Tuve varias opciones.

La primera fue usar exif para detectar el problema de la fecha:

jci@marvin:/tmp/f$ exif -m -i dsc00001.jpg | grep 0x0132
0x0132 2003:07:23 00:00:30

Llegue de casualidad a jhead para alterar el valor:

jci@marvin:/tmp/f$ jhead -ts2004:07:23-12:00:30 dsc00001.jpg
Modified: dsc00001.jpg

Ahora veamos como quedo..

jci@marvin:/tmp/f$ exif -m -i dsc00001.jpg | grep 0x0132
0x0132 2004:07:23 12:00:30

Olvide si un detalle antes : hay mas tags de Exif que indican la fecha y hora.

jci@marvin:/tmp/f$ exiftran -d dsc00001.jpg | grep Date
0x0132 Date and Time 2004:07:23 12:00:30
0x9003 Date and Time (original) 2004:07:23 12:00:30
0x9004 Date and Time (digitized) 2004:07:23 12:00:30

Hasta el momento se ve correcto.

La unica lata : debia parsear el valor de la imagen, ver si estaba en el 2003 y corregir la fecha. Para 10 imagenes, manualmente, no era problema. Pero me tope con casi 500 imagenes. E intentar hacer un script en Perl o en Bash habria sido una real lata.

Tomas (y juguete)
Photogenic Dog

Pero la empece.

Antes de terminar, me tope con esta interesante pieza de joyeria : Exiftool. Permite hacer transformaciones bastante buenas sobre los metadatos. La que mas me gusto? Y de acuerdo a la documentacion:

Have you ever forgotten to set the date/time on your digital camera before taking a bunch of pictures?

Bingo! No debia por que reinventar la rueda. Asi que a bajar, ni siquiera se instala, y funciona de maravilla.

Asi que mi problema se pudo resolver con este sencillo comando:

jci@marvin:~/code/Image-ExifTool-6.85$ ./exiftool "-AllDates+=1:0:0 12:00:00" directorio


Life can be peaceful again

Eso fue solo con las imagenes que tenian metadatos. Las que no, simplemente leer detenidamente el man de touch...

jci@marvin:~/fptos/2003/$ touch -d "18 Oct 2003 00:00:00" file.jpg

Claro, la lata va tambien en pillar la fecha correcta. Pero solo eran 4 imagenes que estaban datadas de 1999 (!), del Encuentro Linux 2003.

De que sirve tener todas las fotos en un solo lugar? Aparte de borrar las que realmente son innecesarias, permite encontrar joyas de la fotografia.

Como esta (no la saque yo, pero fue durante unas charlas en La Serena)

Disfraz
That hand was not supposed to be there.

Quick hack

by jci Email

Cuando tenga tiempo, lo afino. Implementable a futuro en foros.tux.cl.


Eh!

Y aunque no lo crean, make sex existe. Don't ask.

Gstreamer &0Threads

by jci Email

Si, como siempre, un par de miradas al manual (RTFM), ver algunos ejemplos de Gstreamer y finalmente logre crear un thread de Gstreamer que pudiera tocar un mp3.

El codigo? Aqui.
Si, el codigo es charcha, hay que hacer miles de cambios (como cambiar de variables globales/locales).

Y una reflexion : Despues de sacar casi 3000 programas/spywares/data-miner/malware y otras basuras, me convenzo que Firefox es LA alternativa. IE esta aun a años luz por detras, se descubrio otro ranazo en ActiveX...en fin.

Ah, y por favor, jamas hagan free help support. En Windows.
(nota : tuve que corregir esto para no herir susceptibilidades. Los foros de ayuda son otro cuento. Es por que a veces te encuentras con gente ingrata, sobre todo las personas en las cuales esta humirde pagina esta alojada). :-(

Threads en Glib/GTK+?

by jci Email

Alguien tiene un ejemplito de esto? Estaba por hacer el mp3 player pero cai en eso, ya que necesito estar constantemente preguntando el estado del pipeline de Gstreamer.

Era medianamente trivial, Pedro...

1 2 >>