Metiendo la uña del pulgar

"Uña del pulgar", o thumbnail es una versión reducida de una imagen, usada para ayudar a su organización y reconocimiento. En la era de las imágenes digitales, los motores de búsqueda visuales y los programas para organizar imágenes normalmente hacen uso de los thumbnails, así como los sistemas operativos y entornos de escritorio recientes [-]

Hace unos meses mandé a digitalizar unas diapositivas que tenía mi familia. Un par de días atrás empecé a procesarlas, usando el JBrout para agregarle los tags indicando metadata de la imagen (lugar, año, gente que aparece, etc.).

El problema que tuve es que cuando abría con el JBrout fotos que había sacado yo, las veía perfectamente, pero cuando abría las diapositivas, veía una "X" fea que no me decía nada. No tardé demasiado en darme cuenta que el problema era que el JPEG no tenía adentro el correspondiente thumbnail.

Entonces, ¿cómo les metí el thumbnail a cada una?

Luego de buscar un rato por la web (pensé que tenía que haber algún programa que lo hiciera solo y masivo), encontré esta forma (lo más probable es que hayan mil más...).

::
convert foto_original.jpg -thumbnail '200x200>' -unsharp 0x.5 thumbnail.jpg

convert es uno de los utilitarios de la fantástica ImageMagick, toma mi foto_original.jpg y me deja thumbnail.jpg. El -thumbnail le dice que voy a generar justamente un thumbnail, lo cual aparte de cambiar el tamaño hace otras cosas (por ejemplo, le saca toda la metadata interna, para que ocupe menos). El '200x200>' es una notación de ImageMagick que indica que la imagen resultante tiene que caber en una zona de 200 por 200 (o sea, me la reduce manteniendo el factor de forma hasta que el alto o el ancho ocupen como mucho 200 pixeles). El -unsharp 0x.5 lo recomiendan para mejorar la visualización de la imagen pequeñita. En esta página tienen otros detalles y temas a considerar al generar thumbnails (que no se aplican en mi caso).

Luego, para poner esa nueva y pequeña imagen dentro de la original, utilicé otro utilitario:

exiftool '-ThumbnailImage<=thumbnail.jpg' foto_original.jpg

No hay demasiado que explicar en este caso.

Luego de verificar que todo funcionó correctamente, pasé a trabajar todas las diapositivas en masa. Los archivos tenían esta estructura: tres directorios CajaA, CajaB y CajaC (correspondientes a las tres cajas de diapositivas que mandé a digitalizar), con archivos adentro tipo a001.jpg, b033.jpg, etc.

Obviamente no iba a ejecutar esos dos comandos uno por uno para cada imagen, así que pasé a hacer uso del poder de bash, y escribí en la terminal:

for foto in `find -name "????.jpg"`; do
   echo $foto;
   convert $foto -thumbnail '200x200>' -unsharp 0x.5 $foto.thumb;
   exiftool '-ThumbnailImage<='$foto.thumb $foto;
done;

Basicamente, un loop sobre todas los archivos, haciendo un echo para ver qué procesaba, más los dos comandos anteriores.

Esto me dejó todo procesado, pero medio sucio, ya que por cada imagen tenía un .thumb, y además un _original que deja el exiftool. Así que procedí a borrar todo eso:

find -name '*.thumb' -or -name '*_original' | xargs rm

O sea, le dije a find que encuentre todos los archivos que quería borrar, pero en lugar de mostrarlos por pantalla, se los pasé a xargs que los fue tomando y aplicando el rm para borrarlos.

Resultado final: tengo todas mis diapositivas con un thumbnail adentro. Y de paso aprendí un par de utilitarios nuevos, y algunas otras cositas.

Comentarios Imprimir

Charlas Abiertas de Python en La Tribu

Python Argentina y Colectivo La Tribu se enorgullecen en presentar el Ciclo 2010 de Charlas Abiertas de Python.

Distribuidas a lo largo de varios sábados del segundo semestre del año, cubren temas desde lo más principiante a temas muy avanzados, cerrando incluso con un taller.

http://www.taniquetil.com.ar/facundo/imgs/charlasabiertaspytribu.png

Las charlas serán dadas en La Tribu, Lambaré 873.

La entrada es libre y gratuita. Se pasará una gorra voluntaria durante los cursos para hacer frente a viáticos y gastos generales.

No hace falta registrarse, pero vengan temprano para asegurarse un lugar porque los cupos son limitados.

Para más información y actualizaciones, pueden consultar la página oficial de las charlas.

Por favor ayuden con la difusión! Si quieren pueden imprimir este folleto y pegarlo en vuestros lugares de trabajo y/o estudio. Muchas gracias!

Comentarios Imprimir

Grabando conferencias

Es recurrente en todos los eventos nuestros y de amigos el tema de la filmación.

En mi personalísima opinión, el peor pecado en este tema es que se filmen todas las charlas y que luego no se procesen los videos y eso se muera, o se entregue un año después. También es malo que se filme pero que luego no se escuche lo que dice el disertante, o que no se vea, etc.

Creo que la mejor (y casi única) manera de que "filmar las charlas de un evento" sea algo exitoso (obviamente sin gastar cantidades obscenas de dinero como podría/puede hacer la PSF o cualquier evento que maneje presupuestos de cientos de miles de dólares), es lo siguiente:

  • Una cámara, manejada por un humano (de acá en más, el "Operador"), en cada aula/lugar donde se dé la charla.
  • Un micrófono, ya que sino el audio es feo. Puede ser normal o corbatero, pero tiene que haber alguno.
  • Un feed con la imagen que está mostrando la presentación.

La imagen de la cámara, el audio (o la imagen con el audio desde la cámara, no sé), más el feed con la presentación van a un "Elemento Mezclador" (más sobre esto luego), que es controlado por el mismo humano que maneja la cámara (sí, el Operador). Este elemento mezclador básicamente tiene cuatro posiciones:

  • Pantalla completa "cámara".
  • Pantalla completa "cámara", con cuadrito más pequeño (tipo "picture in picture") del "proyector".
  • Pantalla completa "proyector", con cuadrito más pequeño (tipo "picture in picture") de la "cámara".
  • Pantalla completa "proyector".

Ir pasando entre los cuatros es sencillo, y el Operador va prestando atención a la charla y decide al vuelo qué es más interesante mostrar. El Elemento Mezclador graba directamente el video final teniendo en cuenta esto.

De esta manera, el único trabajo que hay que hacerle al video luego de la conferencia es:

  • Ponerle una pantalla inicial con el nombre de la persona, título de la charla, etc. (trabajo humano, pero trivial).
  • Reencodear el video a un formato piola para distribuir (lleva tiempo, pero es todo CPU).
  • Subir los videos a algún lado (para esto se necesita upload)

Entonces... ¿para qué toda esta explicación? Bueno, la clave de todo esto es el "Elemento Mezclador".

Preguntando en PyAr me recomendaron dvswitch. Me contaron que la gente de Debian hace exactamente lo que cuento todos los años en la DebConf. Para ello desarrollaron DVSwitch hecho en C/C++. Tiene sus limitaciones ya que sólo trabaja con formato DV; pero es lo que necesito.

Habiendo elegido la herramienta, aparecen otros frentes algo complejos.

Como dije, necesitamos un stream de audio, y dos de video. Y dvswitch necesita que los dos stream de video sean en formato DV. El de la cámara que enfoca al disertante es sencillo: la enchufamos por el puerto FireWire (IEEE 1394) y ya está. ¿Y el otro?

Veo tres alternativas:

  • Tomamos la salida de video del proyector. Esta es la más piola porque todo lo que haya que cablear o configurar se hace antes. El problema es que se necesita alguna especie de conversor para meterlo en la computadora (o que la misma tenga entrada de video).

  • Filmamos la pantalla proyectada con otra cámara. Esta tampoco necesita configuración previa, pero la calidad seguramente será menor. Obviamente se necesita una segunda cámara de video, pero el principal problema que encuentro acá es que se necesitan dos entradas FireWire en la computadora.

  • Levantamos lo proyectado directamente de la computadora del disertante. No es trivial pero tampoco nada del otro mundo... levantamos un VNC server en la máquina del que da la charla, y en nuestra computadora de control hacemos:

    vncrec -depth 16 <maquinadisertante> -record /dev/stdout | transcode -x vnc -i /dev/stdin -y xvid | ffmpeg -i - - target ntsc-dv salida.dv
    

En el ejemplo, puse salida.dv, que es un archivo; en la vida real habría que mandar eso a dvswitch. El problema de esta solución es que hay que configurar la computadora del disertante, y eso lleva tiempo. Además, depende de la calidad de la red entre ambas computadoras, lo cual es algo a tomar en cuenta si ambas están conectadas a un switch lento, o por wifi.

En fin... como mi laptop no tiene entrada de video y tiene una sola entrada firewire, voy a seguir experimentando con la tercer solución.

Cualquier idea es bienvenida.

Comentarios Imprimir

Sprint en Londres, segunda parte

El jueves fue un día distinto, porque en lugar de ir a la sala de conferencia del hotel como hasta ahora, pasamos el día trabajando en las oficinas de Canonical de Londres.

Canonical tiene todo el piso 27 en la torre Millbank, lo que hace que la vista sea interesante....

Vista desde la oficina

Durante el día nos dividimos en tres grupos, y la actividad fue más de aprovechar la oportunidad de que estábamos todos cara a cara para atacar algunas situaciones y decidir qué íbamos a hacer con determinados temas. Laburar distribuidos está bueno, pero estar en la misma habitación y poder utilizar un pizarrón facilita muchísimo algunas charlas.

Mi grupo en particular terminamos de ajustar algunos detalles en un cambio importante que se viene para el cliente de Ubuntu One (Generations), y a la tarde estuvimos entendiendo Cassandra y tratando de ver si nos sirve, y cómo nos sirve.

A la noche el plan era ir a comer pizza a un lugar que estaba al ladito del hotel, pero nos dijeron que la calidad no era la mejor, y nos recomendaron una pizzería estilo italiana que estaba (como ya era costumbre), a más de media hora de paseo. Como a esta altura ya no nos importaba si caminábamos mucho o poco, decidimos ir igual, y la decisión fue acertada, la pizza estaba rica, y el lugar era interesante, con mozas italianas, y un estilo sencillo y sin pretensiones.

Pasear por el soho de Londres un jueves a la tarde no era sencillo: había mucha gente. Especialmente en los bares, y no precisamente adentro de los mismos, porque es costumbre que la gente compre la cerveza y salga a la calle a tomarla. Incluso esto es favorecido porque los bares arman pequeñas barritas donde la gente puede apoyar los vasos, así que cada vez que uno pasaba por un pub (¡y no es que haya pocos!), había una marea de personas tomando y charlando en toda la calle.

Vida nocturna

Incluso después de cenar, cuando volvimos caminando al hotel (con un par de vueltas incluidas porque algunos querían tomar un helado), siendo alrededor de las once de la noche, las calles estaban bastante llenas y activas. Esto fue una grata sorpresa, especialmente luego de pasear en Bélgica y ver que te cierran todo tempranísimo.

El viernes era el último día, y ya se notaba demasiado el cansancio general. La mañana fue de charlas normales, así como parte de la tarde. Completamos el día con un ejercicio de qué nos había gustado (y qué no) durante la semana, como para mejorar la organización a futuro, y volvimos al hotel ya que seis y media partíamos para una cena grupal de todo el equipo. Esto era en un lugar también estilo italiano, pero de comidas varias, las cuales estaban muy bien (pedí un vitello tonello de entrada, y unos spaghettis con almejas de primer plato, sin segundo plato, y sólo un limoncello de postre), aunque realmente el lugar en sí no era piola: no estaba preparado para que vayamos alrededor de treinta personas, estábamos todos demasiado amontonados, y el nivel de ruido era muy alto.

Así que aunque no puedo decir que no lo disfruté, cuando el primer grupo decidió arrancar de vuelta, me sumé al mismo. Volvimos en taxi Lucio, Rodrigo, Naty y yo. Muy locos los taxis ingleses, porque tienen mucho espacio atrás, con el asiento mirando para adelante puesto sobre el espacio del baúl, y asientos mirando para atrás contra el conductor, con lo cual van cinco personas cómodas sentadas unas frente a otras.

Cena grupal

Lucio se tenía que ir a lo de su hermana, porque a la madrugada partían de vacaciones, así que estuvimos charlando en nuestra habitación mientras él preparaba las cosas. Luego me fui a la habitación de Naty, que se sentía súper mal del estómago y le hice el aguante porque estaba viniendo una amiga de ella desde Madrid, la cual debía llegar tipo once de la noche, pero le fueron retrasando el vuelo y terminó llegando a Londres pasadas las tres de la mañana. Así que mientras Naty trataba de dormir y aguantar los retorcijones, yo me quedé atento a su celular para ver cuando llegaba la amiga y programando algo que había empezado esa misma tarde y quería terminar pronto: recorrí el directorio de Canonical (en donde están listadas las personas con datos como nombre, foto, equipo, posición, etc.), y armé un organigrama gráfico. Para esto me tuve que autenticar por OpenID al sitio interno de Canonical, ir bajando todas las páginas HTML, extraerles la data, armar un archivo DOT a mano el que luego se usa para generar el organigrama en sí en formato SVG, y al que luego abro y le meto las fotos de las personas sobre la cajita con nombre y posición. Todo hecho desde Python, por supuesto, :)

Finalmente esta chica llegó, así que cerca de las cuatro de la mañana nos tomamos un taxi con Naty para irla a buscar a la estación de tren. La esperamos un par de minutos y volvimos al hotel, en donde me encontré con Guillo fumando afuera del hotel. Las chicas subieron a acostarse, y yo me quedé contándole a Guillermo lo del organigrama (ya le había comentado algo a la tarde porque le había pedido ayuda con lo de OpenID). A los cinco minutos subimos, y al sobre.

Pensé que el sábado me iba a costar horrores levantarme, pero no. Puse la alarma a las diez, pero a las nueve ya estaba despierto. Acomodé algunas cosas, bajé a desayunar, volví a la habitación y terminé de armar las valijas y me pegué un baño. Llevé las cosas a la habitación de beuno (después verán por qué) y bajé a hacer el checkout.

Enseguidita partí hacia el London Eye al que Naty y amiga habían ido más temprano, y de ahí nos fuimos a pasear por la zona del Tower Bridge, uno de los puentes más famosos del río Támesis. Naty se seguía sintiendo mal pero pudimos pasear sin drama, hasta que volvimos al hotel que era la hora del partido.

Puente de la Torre

Nos juntamos un grupito de cinco o seis en la habitación de beuno, donde comimos algo, tomamos unos mates, y vimos el partido (perdimos, bú). También seguí laburando con eso del organigrama, hasta que se hizo la hora de partir. Alecu y yo dejamos a los chicos convenciendo a Naty que tenía que llamar a un médico, y arrancamos hacia el subte, luego hicimos combinación con el tren, y llegamos bien cómodos en tiempo al aeropuerto.

Esperas habituales, controles de seguridad, vuelo muy largo (¡qué bien que se come en British Airways!), pero dormí bastante, y llegué a casita con la familia, a la que extrañé un montón.

Las fotos de todo el sprint, acá.

Comentarios Imprimir

Sprint en Londres, primera parte

Con motivo de una reunión de equipo (¡toda la gente de Online Services de Canonical!) arranqué para Londres el sábado a la mañana.

El avión salía al mediodía, así que preparé todo la noche anterior, de manera de levantarnos y salir, ya que Mónica y Felipe me llevaban al aeropuerto. Parte de la preparación de la valija fue más complicada... quise llevarme a Felu, pero al final me hicieron desistir...

Felipe en la valija

El vuelo estuvo muy bien, viajé con Martín y Alecu. Fue largo (16 horas en total), pero Martín (beuno) se cambió de asiento y nos charlamos todo hasta que el avión hizo la escala en San Pablo, donde se acercó Alecu y seguimos charlando. El segundo tramo, considerablemente más largo, lo distribuí entre charla, ver una peli, programar algo, y dormir algunas horas.

Aterrizamos el domingo tempranito, y mediante tren y subte llegamos al hotel un rato antes de las diez de la mañana. Hicimos el check-in, pero no teníamos habitación disponible todavía, así que nos fuimos a la habitación de Naty (que había llegado la noche anterior) y nos bañamos ahí.

Enseguida arrancamos con Naty y Alecu para Camden, una zona de Londres que es un mercado callejero grande, y estuvimos paseando como cuatro horas, viendo cosas, comprando algunos souvenirs, almorzando, etc.

Camden

A media tarde nos tomamos un bondi y nos acercamos a la zona de Picadilly Circus, donde nos encontramos con más gente. Entramos a un negocio de ropa deportiva porque Naty y Alecu querían comprar un par de cosas, pero me terminé comprando unas medias y un pantalón largo para jugar al tenis. Luego fuimos a una librería, y finalmente a una juguetería inmensa, de tres pisos, donde tenían absolutamente de todo.

Volvimos al hotel con el tiempo exacto como para organizarnos para ver el partido de Argentina con México. La idea era cenar mientras mirábamos el partido, pero al final se juntó tanta gente en la habitación que sólo nos tomamos unas cervezas, y comimos después.

El lunes arrancamos bien temprano, y a las nueve estábamos en el piso -4 de otro hotel cercano, donde teníamos las salas para trabajar. Era un día sin laptops, con presentaciones y charlas toda la mañana. Después del almuerzo participamos en un juego en el que varios equipos recorrían la ciudad tratando de encontrar respuestas a unos acertijos. Mi equipo (y otro más) fallamos totalmente, porque leímos mal las instrucciones y arrancamos en otro punto y no donde debíamos, lo que hacía que la primer adivinanza fuese imposible de resolver. Igual nos divertimos, y caminamos como tres horas.

El juego terminaba en un bar, donde tomamos algo, y volvimos al hotel a eso de las siete de la tarde. Laburamos un rato en distintas cosas, mientras tomábamos unos mates, y luego partimos (¡caminando!) a un restaurant chino que quedaba como a 30 cuadras, pero lo valía: comí cosas raras y ricas. Volvimos caminando (sí, de nuevo) al hotel, pero en el medio paramos para tomar un helado, :)

Cenando chino

Al otro día también fuimos al otro hotel a trabajar, pero en esta oportunidad llevamos las laptops, y laburamos en distintos proyectitos de dos horas de duración cada una. La idea era meterle mano a distintas tecnologías para que todos las conozcamos más allá de la teoría (aunque no todos vayamos a laburar en ellas todo el tiempo). Lo que más me gustó fue usar CouchDB desde Python, y también trabajar con AMQP.

Luego de las seis volvimos al hotel pero en seguida partimos hacia un picnic donde iba a estar mucha gente de la empresa. Paramos en el medio a comprar algo de morfi en un supermercado, y llegamos luego de caminar como una hora (sí, seguimos caminando...). El picnic estuvo bien, y hasta jugamos un rato al fútbol en algo súper caótico que incluía a más o menos veinte varones y cuatro mujeres de los cuales un 4% sabía algo de fútbol, en una canchita provisoria armada entre los árboles...

Luego volvimos (nuevamente caminando) al hotel, me pegué un baño y me fui a la habitación de Naty, donde nos pusimos a armar una presentación que teníamos que dar al otro día. Pensamos que iba a ser sencillo y rápido, pero terminamos trabajando hasta las dos y media de la mañana :(, así que al otro día no podía despertarme para nada.

Encima el miércoles también era día sin laptops, así que eran todas presentaciones y charlas, y aunque había algunas interesantes, en otras no podía evitar cabecear del sueño. Con Naty dimos la lightning talk de Magicicada que habíamos armado, y también yo dí una cortita de Logs.

El día no ofreció mucho más, laburamos hasta tarde, cenamos, y a dormir!

Comentarios Imprimir