Python Argentina •  Sólo Python

viernes, 03 septiembre

00:25

Mariano Reingart: Se viene el PyDay 2010 Buenos Aires

Este sábado 4 de septiembre es la jornada sobre el lenguaje de programación Python "PyDay Buenos Aires 2010" organizado por PyAr:

http://www.pyday.com.ar/

Entre varias charlas agendadas estaré presentando web2py (una herramienta para desarrollo web simple y poderosa) y seguramente en los espacios abiertos y/o charlas relámpago hablaremos sobre los proyectos PyAfipWs (factura electrónica libre), PySimpleSOAP (webservices), PyFPDF, Gestión Libre, y demás temas generados desde nuestro emprendimiento "Sistemas Ágiles", sin olvidarnos de PostgreSQL y su nueva versión 9.0!

jueves, 02 septiembre

11:51

Diego Sarmentero: Asimov: Trilogia del Imperio

POR FIN!!
Me llego el libro "Trilogía del Imperio", que reune las historias de:

  • "Polvo de Estrellas" (también conocido como "En la arena estelar")
  • "Las Corrientes del Espacio"
  • "Un Guijarro en el Cielo"
 
Con esta adquisición solo me están faltando 4 libros para completar toda la SAGA DE LA FUNDACIÓN!!

Libros de la Saga:
  • El Fin de la Eternidad (algunas referencias lo sitúan al principio de la Saga)
  • Yo, Robot
  • Bóvedas de Acero
  • El Sol Desnudo
  • Los Robots del Amanecer
  • Robots e Imperio
  • Polvo de Estrellas (En la Arena Estelar)
  • Las Corrientes del Espacio
  • Un Guijarro en el Cielo
  • Preludio a la Fundación
  • Hacia la Fundación
  • Fundación
  • Fundación e Imperio
  • Segunda Fundación
  • Los Límites de la Fundación
  • Fundación y Tierra

- Tengo
- No Tengo

11:29

Andrés Gattinoni: Backups con tar + rsync + rotación

En estos días tuve que configurar unos backups para un cliente. Algo bastante sencillo. Tenía dos servidores y necesitaba hacer backups de distintas cosas en cada equipo y copiarlos al otro. Por supuesto, la herramienta clave para esto es rsync. Googleando un poco vi que existe esta página donde se puede ver cómo generar snapshots incrementales automáticos usando hard links y rsync. Realmente es una solución muy interesante, pero a mí no me terminaba de convencer porque yo quería tener archivos comprimidos que fueran rotando.

Por lo tanto lo que hice fue, seguramente, reinventar la rueda una vez más. Hice una pequeña librería en BASH que luego reutilicé en los distintos scripts de backup que hice. La clave aquí es la función “create_archive” que toma un path, un nombre de archivo base y una lista de archivos, y se ocupa de ir al path, ver todos los archivos que haya con ese patrón de nombre básico, rotarlos y generar un nuevo tar.gz. Después agregué un par de funciones más que me venían bien, “log” para registrar todo lo que pasaba en un archivo, “mail_notification” para mandarme mails y “sync_backup_servers” para ejecutar rsync.

El código:

#!/bin/bash
CONF_FILE="/home/sysbackup/scripts/backup.conf"
if [ -f $CONF_FILE ]; then
    . $CONF_FILE
else
    echo "Configuration file $CONF_FILE not found"
    exit 1
fi

RM_BIN="/bin/rm"
TAR_BIN="/bin/tar"
MAIL_BIN="/bin/mail"
RSYNC_BIN="/usr/bin/rsync"

function log
{
    echo "`date`: $*" >> $LOG_FILE
}

function mail_notification
{
    subject="$1"
    message="$2"

    if [ -z "$subject" ]; then
        subject="Backup Notification"
    fi

    if [ -z "$NOTIFICATIONS_MAILS" ]; then
        log "mail_notification: empty recipients list"
        return 1
    fi

    if [ -z "$message" ]; then
        log "mail_notification: empty message"
        return 1
    fi

    sysdata="Date: `date`\nHost: `hostname`"

    echo -e "$message\n\n$sysdata" | $MAIL_BIN -s "$subject" "$NOTIFICATIONS_MAILS"
}

function sync_backup_servers
{
    log "Running rsync from $LOCAL_DIR to $REMOTE_DIR as $RSYNC_USER"
    su -c "$RSYNC_BIN -aq –delete -e ssh $LOCAL_DIR/ $REMOTE_DIR/ 2>> $LOG_FILE" $RSYNC_USER
    if [ $? -eq 0 ]; then
        log "Syncronization complete successfuly"
    else
        log "Syncronization finished with errors"
    fi
}

function create_archive
{
    file_path="$1"
    file_name="$2"
    files="${*:3}"

    if [ -z $file_path ]; then
        echo "Missing file path"
        return 1
    fi

    if [ -z $file_name ]; then
        echo "Missing file name"
        return 1
    fi

    if [ -z $files ]; then
        echo "Missing file list"
        return 1
    fi

    if [ -z $MAX_BKP_FILES ]; then
        MAX_BKP_FILES=4
    fi

    archive_name="${file_name}_`date +%Y%m%d`.tar.gz"
    log "Preparing to create $archive_name archive"

    # Begin to Rotate files
    # Sort files by date and keep the latest ones
    # MAX_BKP_FILES will determine how many to store
    dir=`ls -t $file_path/${file_name}_*.tar.gz 2> /dev/null`
    if [ $? -eq 0 ]; then
        N=0
        for file in $dir; do
            if [ $N -lt $MAX_BKP_FILES ]; then
                let N++
            else
                log "Removing old file $file"
                $RM_BIN -f $file
            fi
        done
    else
        log "No other archive found on $file_path"
    fi

    log "Creating tar archive $file_path/$archive_name"
    $TAR_BIN zcf "$file_path/$archive_name" $files 2>> $LOG_FILE
}
 

Algunas consideraciones importantes.

Configuración

Al principio del script lo que hago es incluir un archivo de configuración con algunas variables básicas que voy a utilizar. Este archivo debería ser algo similar a esto:

#!/bin/bash
LOCAL_DIR="/home/sysbackup/backup/server1.domain.com"
REMOTE_DIR="sysbackup@server1.domain.com:/home/sysbackup/backup/server1.domain.com"
LOG_FILE="/var/log/sysbackup.log"
MAX_BKP_FILES=4
NOTIFICATIONS_MAILS="admin@email.com"
RSYNC_USER="sysbackup"
 

LOCAL_DIR es el directorio local base donde van a estar mis backups. REMOTE_DIR es el directorio equivalente en el otro servidor. Lo que hice fue crear un usuario “sysbackup” (un poco menos obvio que “backup”, pero también self-explanatory) en los dos servidores y generar llaves para que se puedan conectar por SSH entre los dos servidores. Luego en la /home de cada usuario creé una carpeta “backup” y adentro de ella una carpeta para cada host que iba a ser backupeado “server1.domain.com” y “server2.domain.com”.

LOG_FILE indica el archivo donde se van a guardar los logs del backup y MAX_BKP_FILES determina la cantidad máxima de archivos de backup que va a haber por cada elemento.

Rotación

Como dije, la función más importante es create_archive. La pensé para logs que se crean una vez por día (o cada más tiempo), por lo que si la quieren usar para rotar logs generados en intervalos de tiempo más cortos van a tener que modificarla. Lo que hace es generar un nombre de archivo con una raiz elegida por nosotros (digamos “db”) y la fecha actual (la función pone la fecha, pero si necesitan intervalos más cortos van a tener que poner fecha y hora). Luego hace un `ls -t` del directorio donde hay que generar el backup para ver si hay otros archivos que coincidan con el patrón del nombre correspondiente (por ejemplo, ‘db_*.tar.gz’). Si hay archivos, va a conservar los últimos 4 (en realidad la cantidad la determina MAX_BKP_FILES) y va a borrar los más viejos. Por último, va a generar el tar.gz con la lista de archivos que le hayamos pasado.

Ejemplo:

create_archive "$LOCAL_DIR/web" "web" "/var/www/html"
 

Va a generar con un archivo de nombre como “web_20100902.tar.gz” en la carpeta $LOCAL_DIR/web con todos los contenidos de /var/www/html.

Rsync

La función sync_backup_servers hace la sincronización entre los dos servidores usando rsync por SSH. Una cosa a tener en cuenta es que en mi caso, yo necesitaba que el script de backup corriera como root (para poder acceder a todos los archivos que había que backupear) pero quería que el rsync se ejecutara con el usuario sysbackup (para mayor seguridad). Por lo tanto la función usa “su -c sysbackup”. Si a uds. este enfoque no les sirve pueden poner en la función directamente:

$RSYNC_BIN -aq –delete -e ssh $LOCAL_DIR/ $REMOTE_DIR/ 2>> $LOG_FILE
 

Notificaciones por mail

Es muy útil poder tener notificaciones por mail, sobre todo cuando las cosas andan mal. El comando “mail” de Linux/Unix es muy útil para esto. La funcion mail_notification usa ese comando para mandar un mail con el mensaje que queramos y le agrega dos datos útiles: la fecha y el hostname desde el que se manda. En realidad son datos que siempre viajan en los headers del mail, pero a mí me parecía útil que estuvieran en el body.

Espero que les sirvan estos recursos. No son una solución completa y cerrada, sino herramientas que quizás les sirvan para implementar o al menos pensar cómo hacer sus propios sistemas de backup. Les recomiendo enfáticamente que lean este artículo sobre cómo generar backups con rsync porque explica muchas cosas fundamentales.

08:34

Santiago Peresón (Yaco): perro viejo, trucos nuevos

capacitores, op-amps, resistencias… bienvenido al nuevo mundo.

cansado de simular analógicas, desde hace un par de semanas empecé a explorar electrónica. circuitos analógicos. caminos donde el sonido continuo es siempre transformado, pero nunca diseccionado, cortado en láminas para hacer estadística.

un lugar interesante…

miércoles, 01 septiembre

13:08

Manuel Kaufmann (Humitos): Empecé circo

Culiado, ¡Me duele hasta el cu…!

Hace aproximadamente dos semanas que estoy yendo a circo los Lunes y Jueves. Sí, y ya falté a una clase, cualquiera lo mío. Pero lo interesante es que es realmente divertido y estoy muy enganchado.

Estoy contento porque es una actividad que desconocía por completo que se realizaba en Paraná, depende de la Municipalidad, es gratis, libre, con gente muy buena onda y muchas otras características que lo hacen que sea muy piola asistir.

En lo personal, empecé esta actividad para salir un poco de la computadora, trabajar el cuerpo y distraer la mente. Sobre todo esta última ya que ir a un lugar dónde te vas a encontrar con gente que no tiene nada que ver con lo que vos te dedicás, que no esté relacionado con estudiar algo (como ir a inglés, por ejemplo) y que la actividad principal es divertirse me resultó muy apropiado.

En la escuela está ubicada en el Centro Cultural Gloria Montoya (Rivadavia al final). Esto antes era un boliche bailable, así que se pueden imaginar la onda del lugar. De hecho, la mayoría de las actividades se realizan sobre la pista del boliche que es de parquet. Es muy lindo el lugar, lamentablemente, como muchos de estos lugares en Paraná, está un poco abandonado, tiene muchas manchas de humedad, las canillas pierden agua y cosas similares.

El primer día que tuve clases, fue medio raro porque la mayoría venían hacer una presentación hacía un par de días atrás, así que fue medio liberal y cada uno hacía lo que quería, practicaba cosas que estuvieron flojos en la presentación o bien charlaban mucho sobre esta. Yo como no tenía idea de qué estaban hablando me dieron para hacer algunos ejercicios:

  • rola: no estoy seguro si este es el nombre exacto, en el link se puede ver una foto de como sería, aunque si bien ese está haciendo con varias tablas, a mí para empezar me dieron sólo una. La idea era que nos agarremos con las manos de algún lugar e intentemos ir dejando de lado esto y mantener el equilibrio con el cuerpo y “la mente”. Posta, influye mucho si estás concentrado o si no lo estás; aunque parezca raro cuanto menos estás pensando y mirando tus pies más fácil es controlarlo.
  • malabares: nos dieron tres pelotitas de tenis a cada uno y nos dijeron que empecemos a practicar con una al principio, pasándola de mano en mano y midiendo la fuerza con la que la tirábamos para que siempre salga más o menos igual. Como yo ya sabía hacer con tres pelotitas, me dijeron que practique nomás y me enseñaron algunos trucos que ya sabía también. Así que dediqué ese tiempo a probar boludeces y tratar de mantener la técnica (que no la sabía). Después agarré la rola y traté de hacer malabares arriba de esta, no salió muy bien :S
  • tela: muy groso. Hay que tener mucha fuerza para esto, pero sobre todo hay que saber controlarla y aplicarla en los lugares relevantes. Por ejemplo, uno hace mucha fuerza con la mandíbula cuando está concentrado en el ejercicio… Entonces, hay que saber aplicar la fuerza sobre los puños para no caerse, en la espalda, abdomen y piernas para hacer alguna figura. Es muy divertido. Me quedaron doliendo mucho las articulaciones de los dedos de las manos, parece que tuviera artritis.

Después de esto elongamos lo suficiente como para que podamos salir caminando de ahí. Claro, yo hace años que no hago nada, ninguna actividad física más que caminar mucho. Así que estaba molido. Mejor ni cuento como estaba a los dos días (el peor de todos).

A la siguiente clase vimos un video del Cirque Du Solei y después de esto vimos la presentación del curso completo que hicieron en el Teatro 3 de Febrero de Paraná. Estuvo muy bien por cierto, me emocioné un poco :) . Después de eso terminó la clase, no hicimos actividad ese día :(

La última clase que fui estuvo buenísima. Hicimos una entrada en calor que fue con un poco de actuación también. En la pista hicimos un cuadrado con las colchonetas y nos pusimos todos adentro de éste. Éramos 11 más o menos. Empezamos a caminar, sin sentido alguno dentro del cuadrado, pero no se podía caminar en círculos y siempre manteniendo la mirada en el horizonte. No se podía mirar hacia abajo.

Nos fueron dando diferentes indicaciones, que recorramos todo el espacio, que caminemos de diferentes formas, que usemos las manos, que nos arrastremos, sin chocarse, sin caminar en círculo y sin bajar la mirada. Después había que hacer todo esto y agregarle un sonido cada tanto, no sé, cualquier cosa, lo primero que se te venía a la mente (ya para este momento nos estábamos cagando todos de risa… y eso no se podía tampoco :) ).

Manteniendo todo lo anterior había que hacer de estatua de algo. El profesor iba a decir alguna estatua y nosotros teníamos que hacer lo primero que se nos venía a la cabeza y cuando decía basta seguíamos con lo que estábamos haciendo (nunca dejar de caminar). Entonces el vago tiraba cosas como estatua de chancho con hambre… Lo primero fue cagarse de la risa y después intentar hacerlo. Realmente era muy chistoso. Otra que tiró era estatua de cartuchera pobre, seee cualquiera, pero re divertido. Nos hizo perder la timidez y entrar más en confianza. Estuvo bueno eso. A esto se le sumó la interacción con los compañeros, tratar de armar estatuas de a dos y cosas así (siempre sin pensar mucho).

El siguiente ejercicio fue copiar la forma de caminar y sonar del otro, entonces decía: “bueno ahora copien a Manuel” (sí, me dicen Manuel, cualquiera eso :P ); entonces por un rato quedás como un pelotudo haciendo el ridículo y todos se te cagan de risa y te da un poco de vergüenza todavía, pero mucho menos que si no nos hubiera hecho hacer los otros ejercicios.

Luego nos hicieron caminar pegados de alguna forma en grupos, no sé, de la frente, de la nuca, pegados de la cadera, de las manos, del codo y cosas así. Sin hablar e intentando llegar a un acuerdo sin mirarse, sólo expresándose con el cuerpo.

El último ejercicio de esta entrada en calor fue de a grupos de a cuatro. Nos poníamos en una ronda con los ojos cerrados, el resto de los chicos nos miraban a nosotros, y el profesor te tocaba una vez. En este momento tenías que empezar a hacer un loop con algún sonido que se te acababa de ocurrir hasta que te volvía a tocar y parabas. Cuando estabas callado y te volvía a tocar tenías que inventar otro sonido y nuevamente hacer un loop, entonces el loco iba mezclando los sonidos que tirábamos los cuatro. Salieron cosas interesantes, casi una banda de beatbox :P

Por último hicimos tela nuevamente, nos enseñaron a escalar y a hacer algunas figuras más. Por suerte cuando terminamos no me dolían tanto las manos y aprendí a controlar mucho más la fuerza en los lugares que la necesitaba.

Antes de irnos elongamos, me despedí de todos y me fui re contento pensando: “¿Qué es una computadora?”. Realmente estaba en otra cosa y lo que menos se me pasó por la cabeza en todo ese tiempo fue algo que tenga que ver con programación, ya no sabía ni lo que era casi. Como ejercicio de relajación mental es fabuloso.

Referencia:


10:16

Marcos Vanetta: Agregar resaltado de código a gedit

En un post anterior les comente sobre gedit, un excelente editor y potencialmente un gran IDE. Hace unos días atrás volví a usarlo para unos experimentos en Ruby on Rails. Pero había archivos en los que no funcionaba bien el resaltado de código (hight light code). Principalmente en los archivos de vistas ERB. Buscando encontré [...]

martes, 31 agosto

13:43

Facundo Batista: Foto interesante: Chicago luz


Como dice el título, Chicago. Marzo del 2008, un frio de cagarrrrrrrrse, esperando el tren en la plataforma elevada para volver al hotel. El viaje que contextualiza la foto: PyCon USA 2008. La foto no fue demasiado complicada, una larga exposición buscando algún juego de contrastes entre lo oscuro de las vias y el cielo atrás (las primeras parecen apuntar a lo segundo), lo muy brillante de las luces, y el punto medio en los edificios.

Chicag luz

Las otras fotos interesantes hasta ahora, acá.

00:54

Diego Sarmentero: Persons Unknown

Acabo de terminar de ver la Primer Temporada de "Persons Unknown"... los primeros capítulos me acuerdo que estaba en duda de si seguir mirando o no, por momentos me re enganchaba, y en otros momentos medio le faltaba emoción, pero poco a poco la serie se va poniendo cada vez más buena, y los últimos 2 capítulos de la temporada están realmente MUY GROSOS!!
La primer temporada tiene solo 13 capítulos... y ahora ya tengo ganas de que empiece la segunda temporada, que no se cuando sera eso...


lunes, 30 agosto

23:05

Diego Sarmentero: Through The Wormhole

Me demore en ver los últimos 2 capítulos, pero ya termine con "Through The Wormhole" una serie/documental de Science Channel conducida por Morgan Freeman. La verdad muy muy buena serie, son solo 8 capítulos, pero tratan temas muy copados, donde para la mayoría de los temas en realidad no hay ninguna respuesta definitiva sino que se muestran las distintas teorías actuales que tratan de explicar esos temas.

En fin, una serie/documental que realmente vale la pena ver para escuchar distintas teorias sobre temas que seguramente conocemos y abrir la mente a otras posibles explicaciones.


20:55

Diego Sarmentero: Sherlock

Ayer empecé a ver "Sherlock", una adaptación de los libros de Arthur Conan Doyle en una serie de televisión, pero modernizando la historia y haciendo que sea en la actualidad. Se hicieron solo 3 capítulos para la primer temporada de la Serie como para ver si lograba generar interés, y por la buena respuesta que tuvo, se esta preparando una segunda temporada para el 2011.
La serie aunque la primer temporada consta solo de 3 capítulos, cada capítulo dura una hora y 30 minutos, así que hay para un buen rato (a no ser que veas los 3 capítulos juntos :P).
La historia y la personalidad de los personajes esta muy buena, y según mi hermano (por el lado de los seguidores de las novelas) que él si leyó los libros de Sherlock Holmes, dice que es una buena adaptación, que respetan muchas cosas de la historia original a la vez que le agregan ese toque moderno.

En fin, Serie Recomendada!!


10:24

Marcos Vanetta: ActiveRecord, a brief introduction – Part 1

Active record es un patrón de diseño. Es un enfoque al problema de acceder a los datos de una base de datos. Donde cada tabla es una clase por lo que cada fila es asociada con objetos del lenguaje de programación usado. Cuando se crea uno de estos objetos, se añade una fila a la [...]

domingo, 29 agosto

23:11

Juanjo Conti: Fotos en el campo

Hoy a la tarde fuimos con Padre al campo a buscar verdura para la semana. Aproveché para sacar algunas fotos y probar los “efectos” que vienen con la cámara del celular desde que le actualicé el sistema operativo.

2010-08-29_17-02-11_28 2010-08-29_17-04-32_950 2010-08-29_17-04-45_817 2010-08-29_17-05-01_912 2010-08-29_17-06-01_607 2010-08-29_17-06-40_896 2010-08-29_17-07-05_130 2010-08-29_17-07-24_552 2010-08-29_17-07-48_60 2010-08-29_17-08-19_564 2010-08-29_17-10-40_238 2010-08-29_17-11-54_476 2010-08-29_17-14-12_1 2010-08-29_17-16-55_283 2010-08-29_17-18-33_791 2010-08-29_17-18-46_863 2010-08-29_17-19-36_465 2010-08-29_17-19-44_949

Se dieron cuenta que poniendo la cámara en modo sepia, fotos normales se convierte en casi artísticas? Nice.

15:56

Manuel Kaufmann (Humitos): Uso práctico de VNC

Actualmente tengo una computadora de escritorio, que dejo siempre prendida y uso como server: para descargar cosas de internet, para guardar la música, como backup, servidor web y demás.

Como todas las cosas que bajo de internet están en ese equipo, necesito organizar las cosas que bajo y no siempre uso un programa en modo texto (consola) para hacer esto. Por ejemplo, si es un disco con mp3 me gusta ponerle los ID3 correctos con easytag, o si bajo un DVD9 lo tengo que convertir a DVD5 para poder grabarlo y lo hago con k9copy.

Para estos programas necesito tener una interfaz gráfica, entonces uso VNC para ello. De hecho, normalmente tengo corriendo el JDownloader en un VNC porque lo quiero tener siempre abierto, pero no quiero que me moleste en la barra de tareas y además también me interesa controlarlo remotamente, si bien para esto uso el servidor web que trae, éste no cubre toda la funcionalidades que se pueden hacer mediante la interfaz gráfica. Por ejemplo, ingresar los códigos que piden algunos File Hosting.

Entonces, la idea de esto es, levantar un servidor VNC y ejecutar programas dentro de éste (sin que alteren el escritorio actual) y luego poder comandar estos programas que lanzamos en el VNC desde cualquier otro equipo. Mi idea fue así:

vncserver :4
export DISPLAY=michifus:4
java -Xmx512m -jar ~/.jd/JDownloader/JDownloader.jar &

Con esto estoy levantando un servidor en el display 4 de localhost (que se llama michifus en la red). Entonces, después exporto ese display para ser usado por los programas y ejecuto el JDownloader.

Luego, desde otra PC me conecto usando el xtightvncviewer:

xtightvncviewer michifus:4

Y ahora puedo administrar el JDownloader mediante VNC como si estuviera sentado en la PC que lo está ejecutando realmente. Esto es normalmente lo que tengo ejecutando en el VNC siempre. Además, cuando bajo algo como antes comentaba, quiero levantar otro programa; para eso me conecto por ssh al servidor y hago:

export DISPLAY=michifus:4
k9copy &

Luego me conecto nuevamente por VNC a michifus y veo que se cargó el k9copy en el escritorio que estoy sirviendo por VNC.


13:58

Roberto Alsina: PET: English Translation Issue 1 tiene fecha

Porque funcionó una vez, hagámoslo de nuevo. Acabo de ponerle una fecha completamente arbitraria y probablemente muy cercana para la salida del primer número en inglés de la revista "PET: Python Entre Todos".

La versión en inglés se llama PET, que significa "Python Entre Todos: English Translation".

Va a tener los mismos contenidos que el primer número en castellano... y va a ser la última que hagamos así.

De ahí en más, las dos versiones van a salir al mismo tiempo, si podemos.

Por lo tanto, va a haber un lapso muy corto entre el primer número en inglés y el segundo (ojalá que menos de un mes).

Así que , no cambien de canal

12:20

Juanjo Conti: Dejar de revisionar un archivo sin borrarlo en svn

A veces me pasa que en un proyecto tengo un archivo X que empezó siendo un archivo común, pero en un momento dado, cada desarrollador necesita taner su propia copia y no revisionarlo más.

Cómo dejar de revisionarlo sin borrarlo?

La primer vez que me topé con el problema hice:

cp X Y
svn rm X
svn ci -m "chau X"
mv Y X

Ugly.

La forma correcta de hacerlo es:

svn rm --keep-local X

11:45

Juanjo Conti: Cómo unir videos en GNU/Linux

Ayer en Carlos Pellegrini fue el Día del Pueblo. Una de las actividades que hubo fue una carrera de autos con obstáculos. Aproveché para filmar un poco y probar mi nuevo celular, por lo que terminé con varios archivos mp4. Para subirlos a Internet quería unirlos: ¿cómo hacerlo de forma fácil? Si tenés varios archivos de texto y querés unirlos, o expresándome de forma más correcta, contactenarlos, usás el comando cat. ¿Se puede hacer lo mismo con videos? Suena algo loco cuando se escucha por primera vez, pero hay algunos formatos que SI lo soportan, como mpeg 1 y 2.

Usando ffmpeg podemos convertir los archivos mp4 a mpeg. Parados en el directorio donde estén los videos:

for i in `ls *.mp4`; do ffmpeg -i $i -sameq $i.mpeg; done

Ahora simplemente los concatenamos y redirigimos la salida de cat a un nuevo archivo:

cat *.mpeg > video.mpeg

Notemos que el orden lexicográfico de los videos coincide con el orden en que fueron tomados; por eso puedo usar el * y obtener un resultado ordenado en el tiempo.

Listo, subí el resultado a YouTube.

Me hubiese gustado una transición más suave entre video y video, pero investigarlo y hacerlo excedía la ecuación costo beneficio. Se escuchan ideas!

sábado, 28 agosto

14:17

Manuel Kaufmann (Humitos): Algunos comandos útiles

Hace un tiempo, por lo menos 2 años, que tengo un Trac instalado en casa para uso personal. La idea surgió para organizar mis cosas personales, como repositorio de código para los scripts que vaya haciendo y además para anotar documentación sobre las cosas que voy investigando: links, paquetes, configuraciones, instalaciones de programas, comandos y demás.

En este post voy a poner algunos comandos (surtidos) que no tienen nada que ver uno con el otro, pero que son realmente útiles y que normalmente los busco en internet cada vez que necesito hacer algo similiar, a partir de que los anoté en el wiki del trac que uso me pasa que probablemente me lo acuerdo o sinó, al menos, ya sé dónde buscar.

Seleccionar el programa a usar por defecto

En Linux podemos tener instalados varios programas para hacer lo mismo en pocas palabras, como ser el Java o bien el Navegador Web. Existen otros programas que en algún momento por ejemplo quieren abrir una página web y se fijan cual es el navegador que tenemos configurado por defecto, y lo lanzan con el link en cuestión. Puede ser que el navegador configurado en nuestro Linux por defecto no sea el que realmente usamos comunmente. Para cambiar esto existe el comando update-alternatives

humitos@teresa: ~$ update-alternatives –config x-www-browser
There are 5 choices for the alternative x-www-browser (providing /usr/bin/x-www-browser).

Selection    Path                    Priority   Status
————————————————————
0            /usr/bin/google-chrome   120       auto mode
1            /usr/bin/google-chrome   120       manual mode
* 2            /usr/bin/iceweasel       70        manual mode
3            /usr/bin/konqueror       100       manual mode
4            /usr/bin/opera           90        manual mode
5            /usr/bin/xlinks2         69        manual mode

Press enter to keep the current choice[*], or type selection number: 2
humitos@teresa: ~$

Como cualquier comando de Linux, hay un montón de opciones y de variables para configurar, recomiendo mirar el man update-alternatives

Sincronizar directorios

Una cosa que hago mucho es copiar información de una máquina a otra por la red en mi casa, o cuando voy a la casa de un amigo y me quiero llevar varias cosas de las que tiene en su máquina. Entonces, ¿seguimos utilizando el método antiguo de Windows que cuando se corta la transferencia por algo tenemos que hacer todo de nuevo o empezar a ver qué era lo que ya pasó y qué lo que no? Al menos yo, nunca supe qué hacer en esos casos y copiaba todo de nuevo: ¿se me había pasado algo?

Bueno, en Linux estoy usando rsync para esto y para algunas cosas más (por ejemplo para hacer backups). Lo bueno de rsync es que compara los dos directorios y copia sólo lo que falta, digamos, continúa con la copia anterior. Además se puede hacer que sincronice los directorios, borrando lo que corresponda de cada lado luego de hacer la transferencia. En pocas palabras: se puede hacer mucho con rsync y no lo sé usar para todo lo que se puede.

rsync –recursive –human-readable –verbose –checksum –delete-after \
–exclude winxp.img /media/sdb1/trabajo trabajo

El comando anterior es el que usaba cuando no tenía notebook y trabajaba en mi casa y además en la oficina, entonces lo que hacía era sincronizar todo lo que tenía en el pen drive con la carpeta local borrando las cosas que estaban de más en la carpeta de destino (en este caso la de la máquina, no la del pen drive). Las otras opciones más o menos se caen de maduras :)

Levantar un trac de forma simple

Durante mucho tiempo (antes de tener el trac que tengo ahora en casa) lo tenía en el pen drive y me resultaba extremadamente útil, porque iba a dónde iba podía levantarlo con toda la documentación que hacía un tiempo venía escribiendo, buscar cualquier cosa y actualizarlo. De hecho, lo podía levantar en Windows también si hiciera falta, aunque era un poquito más complicado.

tracd -p 8080 –basic-auth=trac,/media/humitos/trac/htpasswd,trac /media/humitos/trac

De esta forma estoy levantando el trac en el puerto 8000 y diciéndole que utilice el archivo htpasswd para obtener los usuarios y las claves desde ahí. El último argumento es la ruta a dónde se encuentra el trac.

Nota: la idea de meter un trac en el pen drive fue de un compañero de trabajo en el Ministerio de Innovación y Cultura: Cristian, se merece sus créditos :)

Ordenar los mp3 en el reproductor de mp3

Muchas veces me ha pasado con algunos reproductores de mp3 que no reproducen los archivos siguiendo el orden alfabético de los mismos sino que siguen el orden que tienen en la tabla FAT. No estoy seguro si esto pasa únicamente cuando copiamos los archivos con Linux o también pasa con Windows. Nunca escuché a un usuario de Windows que tenga este problema, pero sí lo he escuchado de algunos usuarios de Linux.

El programa que utilizo para ordenar los mp3 de la forma que quiero que se reproduzcan se llama fatsort y se usa así:

fatsort /dev/sdc

Nota: esta forma de ordenar los mp3′s se la debo a Nicolás, un groso

Utilizar ssh en el puerto 443 y mediante https

Existen muchos lugares en los que limitan el acceso a internet a sólo conexión https y http entonces no podemos acceder a nuestra máquina linux en la que tenemos corriendo un ssh en el puerto 22 (que es el puerto por default). Para estos casos, yo tengo configurado el ssh corriendo en el puerto 443 y utilizo un programa llamado corkscrew para que meta el ssh dentro de una conexión https :)

Los único que hay que hacer es editar el archivo de configuración de ssh en la máquina desde la cuál nos vamos a conectar a la que tiene el ssh corriendo en el puerto 443. El archivo es este ~/.ssh/config

Host=humitos.homelinux.net
ProxyCommand /usr/bin/corkscrew 10.2.6.219 3128 %h %p
Port 443

En el ejemplo anterior el ip 10.2.6.219 es el ip del proxy al cuál nos vamos a conectar para salir a internet y el 3128 es el puerto de este.


jueves, 26 agosto

20:22

Evita: Tenemos nuestra primera bicicleta - Nos vamos !

Este blog se cierra, se va. En realidad se muda, se va de su alojamiento en blogspot a su nueva casa. Su dominio propio. La Fundación Eva Perón, por la que obtuvimos nuestra primera bicicleta, hoy nos da nuestro primer hosting. Sí compañero, sí compañera, para visitarnos, simplemente hacé clic en:



Con un nuevo diseño, con las cosas de siempre y con las que agregaré día a día, dejamos a blogspot y nos vamos a Wordpress, un verdadero blog libre, con el dominio propio pagado de mi bolsillo con el cheque que Anibal Fernandez nos pasa semana a semana según las palabras de los medios gorilas y los gorilas de los medios.

Me voy en mi bicicleta, los espero en el nuevo sitio.



Viva Perón! Viva Evita! Viva la compañera Presidenta Cristina!

17:52

Patricio Molina: ¿Por qué tener auto es estúpido?

A continuación voy a escribir por qué creo que tener auto es estúpido, aun cuando el sistema de transporte público de la Ciudad de Buenos Aires tiene muchas falencias.

Supongamos que vivo en Caballito y trabajo en Palermo. Por comodidad, sólo utilizo taxi. La tarifa actual del taxi es la siguiente:

  • Bajada: AR$ 4.60
  • Ficha cada 200 metros: AR$ 0.46

Para simplificar el cálculo voy a obviar el tiempo de espera (una ficha cada 60 segundos cuando el auto se encuentra detenido o circulando a menos de los 12 km/h) y la velocidad de cruce.

Según Google Maps, sé que el camino más rápido es por Av. Juan B. Justo, y que mi taxi deberá recorrer 6.4 km de distancia (32 fichas), con un costo aproximado de AR$ 20.

La vuelta es un trayecto similar, recorriendo 5.7 km (29 fichas) a cambio de AR$ 18.

Resumiendo, sé que voy a gastar AR$ 38 por día en taxi. Si quisiera podría agregar algunos pesos más por “eventualidades” (cambio de ruta por corte, embotellamiento, etcétera), pero como dije antes, prefiero mantener un escenario simple para que se entienda bien a lo que apunto.

Suponiendo que tengo un trabajo estándar (de lunes a viernes), gasto AR$ 190 por semana, o sea, AR$ 760 por mes.

Ahora bien, el 0 km más económico en el mercado es el Fiat Uno, con un valor aproximado de AR$ 40.000

¿Cuántos meses viajo en taxi si lo comparo con el costo de un auto económico? AR$ 40.000 / AR$ 760 me da 52 meses (4 años y 4 meses)

Lo primero que uno piensa es “bueno, pero después de 4 años y 4 meses el auto sigue estando ahí, para mí”, y aquí es donde creo que hay un gran error: el taxi es un gasto, pero el auto es un gasto que genera más gastos.

Además de los AR$ 40.000 (gasto inicial por el auto), tenemos la siguiente lista de gastos:

  • Cochera nocturna: entre AR$ 300 y AR$ 800 por mes.
  • Estacionamiento: entre AR$ 3 a AR$ 10 la hora. En algunas zonas son inevitables.
  • Combustible
  • Seguro mensual
  • Patente
  • Mantenimiento: no se nota mucho si es un 0 km, pero pasado un tiempo todos los autos necesitan mantenimiento.

Dejo de lado los “impuestazos” (obleas) que cada tanto aparecen, el lavadero (manguereo el coche en la puerta de vez en cuando) y extras como cambiar el aceite, ponerle Bardahl y Glade Auto Sport (?)

¿Qué quiero decir con todo esto? Uno paga enormes cantidades de dinero para comprar algo que le reportará comparativamente igual o mayor gasto. Llevado al ejemplo, uno gasta AR$ 40.000 en un auto que genera gastos de mantenimiento, como mínimo, de AR$ 1000 al mes, lo que equivale a gastar AR$ 50 en taxi diarios.

En mi ejemplo usé el taxi como el escenario financiero más desfavorable, pero existen alternativas mucho más económicas y eficientes, como el subte y el tren (aunque estén colapsadas en su capacidad)

Obviamente esta es una visión muy citadina del asunto, y es poco aplicable si vivís en lugares donde el transporte público es prácticamente inexistente (pueblos o pequeñas ciudades).

Para terminar, aquí enumero algunos beneficios de no tener auto:

No me preocupo por el auto: si llueve, si graniza, si me lo roban, si me sacan el stereo, si me lo raya el “trapito”, si me lo lleva la grúa, si me lo “toca” la boluda que no sabe estacionar, etcétera. Una vez que me bajo del subte, taxi o colectivo, me despreocupé.

Indemne a los accidentes menores: si el vehículo en el que viajo tiene un accidente menor, cambio de vehículo y sigo camino en pocos minutos.

Menos autos: menos contaminación (ambiental y sonora) y menos tráfico en la ciudad.

No necesito concentrarme en manejar: mientras viajo puedo hacer otras cosas como escribir, escuchar música, leer, relajarme, etcétera. Tampoco me hago mala sangre porque la gente es boluda y no sabe manejar.

Choferes profesionales: esto, para mí, es fundamental, especialmente en la ruta. Le tengo muchísima más confianza al chofer de un ómnibus de larga distancia que a un conductor común. Los choferes de ómnibus de empresas serias son profesionales y tienen que relevarse cada N horas (por eso siempre son dos en la cabina). Comparativamente, sufren un porcentaje bajísimo de accidentes en ruta.

Dormir: muy relacionado con los dos puntos anteriores. Como algunos de ustedes saben, viajo mucho a la ciudad de Rosario con ómnibus de coche cama, suite o ejecutivo, con un costo aproximado de AR$ 80. En resumen: voy cómodo, veo una peli, duermo una siesta, me atienden y voy seguro.

Como dijo Martín Fierro, “estas cosas y otras muchas medité en mis soledades, sepan que no hay falsedades ni error en estos consejos, es de la boca del subte de ande salen las verdades” (?)

Update 1: los precios de bajada y ficha en Wikipedia estaban desactualizados, ya hice los cambios correspondientes para que reflejen los valores actuales.

Update 2: como bien me señaló Ale por Facebook, es importante aclarar que este post es un análisis estrictamente “de ciudad”. Si sos una persona con varios hijos, vivís en un lugar de difícil acceso o viajás mucho al interior, indefectiblemente el auto propio tiene un valor agregado que no lo podés conseguir con otros medios de transporte.

Update 3: breve conversación con Marian

Mariano: vos te mojás cuando llueve?
Patricio: no
Patricio: uso taxi
Patricio: y vos?
Mariano: si, porque tengo el auto a 3 cuadras de casa.
Mariano: TOMA!
Patricio: ah, a mí me pasa a buscar por la puerta de mi casa
Patricio: TOMAAA
Mariano: vos le podés gritar a una mujer “Andá, yegua, andá a lavar los platos y dejá de cornear a tu marido con cada negro que pasa!” y gozar de impunidad? sin que nadie te juzge?
Patricio: sí, en bici
Mariano: me cagaste.
Mariano: igual no me vas a comparar.
Patricio: no sólo puedo huir, sino que puedo hacerlo de forma cinemática, saltando rampas y cruzando el medio de plaza francia
Patricio: a vos te agarró un semáforo y te cagaron a taconazos
Mariano: volvemos al punto aterior. Yo puedo mandarme por plaza francia también, pero llevandome gente por delante. Es más, puedo hacer la cómica de llevarme un puesto de sanguches y comerme uno.
Patricio: plaza francia está lleno de cámaras de Macri, te agarran la patente y se te acabó la impunidad
Patricio: yo me pongo un pasamontañas, me afano un sanguche y no me identifican ni a palos, la bici no tiene patente
Mariano: los dos podemos hablar por celular mientras manejamos, pero vos te ponés en peligro y yo pongo en peligro al resto.
Mariano: pura ganancia.
Patricio: en taxi puedo hablar por celular sin poner en peligro a nadie, y el tachero, además, me sugiere cosas
Patricio: win win
Mariano: jajaja
Patricio: voy a poner esta conversación en mi blog
Mariano: si, pero en tacho tenés contacto con la derecha más jodida.
Mariano: la derecha tachera.

17:19

Martín Gaitán: Modelos de negocio FLOSS, la universidad, el sector privado y el Estado

Distintos laboratorios de investigación y vinculación de mi facultad del área química y del área computación, junto a algunas empresas de software locales (VATES y otra) y del sector petroquímico (Petroquímica Rio Tercero) están conformando un "Consorcio Asociativo Público Privado (CAPP)" en el marco del programa FSTICS del Ministerio de Ciencia y Tecnología de la Nación, con el fin de desarrollar una plataforma de desarrollo I+D de software para la industria. Para que contextualicemos de que hablamos: el programa estipula un aporte estatal de hasta el 60% para un proyecto de hasta 38 millones de pesos.

Mi participación es minúscula y aledaña: el impulsor de este proyecto es el Dr. Martín Cismondi, director de mi proyecto integrador que se trata de un prototipo del (tipo de) software que se desarrollaría desde esta plataforma.

Cismondi es Phd en ingenieria quimica y sus investigaciones en el campo del equilibrio de fases tienen mucha aplicación en la industria. En particular en el petróleo, donde el impacto que puede tener mejorar el rendimiento de un proceso (por ejemplo de destilación) se mide en millones de morlacos.

Ayer tuve oportunidad de participar de una reunión, sirviendo de una especie de "traductor" entre los quimicos y los informáticos.

Si bien, repito, no tengo voz (mucho menos voto) en nada de lo que allí se resuelva, tengo interés en investigar y transmitir de la manera más clara posible otros modelos de negocio que, por lo que presencié ayer, están lejos de ser tenidos en cuenta. Me refiero, claro, a que, sobre todo (no muy increíblemente) desde la facultad, no se ve más allá de un modelo de negocio de software cerrado de venta por licencia.

Apunto algunas cuestiones sin orden:

- El nicho de mercado es bastante acotado: industrias de gran escala mayormente transnacionales. Separadamente tiene mucha utilidad y aceptación en centros de investigación académicos.

- Desde el grupo conformado, no existe conocimiento cabal de las soluciones de software específicas que ese mercado, el industrial, demanda. Sí se sabe que el -*expertise-* y el -*know how-* que el grupo de investigación de Cismondi tiene son el valor diferencial.

- No existe hoy peso específico suficiente, desde el punto de vista del producto existente, para competir con las empresas de software proveedoras de este nicho, sobre todo en los mercados de USA y Europa. Por ejemplo Aspen Tech.

- Es difícil, a priori inimaginable, desarrollar un producto genérico que satisfaga necesidades de diversos clientes potenciales. La especifidad de los problemas de cada industria se supone grande.

- Preguntas para hacerse ¿cuantos clientes reales existen en el mercado? ¿qué "llegada" se tiene con ellos? ¿que posibilidades reales de venderle un software cerrado existen, teniendo en cuenta que no se sabe cabalmente cuales son sus demandas? Supongiendo que se conoce un problema específico ¿cuanto sale desarrollar una solución ? ¿se puede correr el riesgo de desarrollarla sin tener asegurada su comercialización?

Soy un novato en el área negocios con FLOSS (y en negocios, a secas, también) pero lo que se me ocurre viene más o menos por este lado:

1. Generar una estrategia para una fuerte inserción en el ámbito académico internacional

  • Para esto es indispensable la libre disponibilidad del código fuente de manera que los métodos numérico-científicos sean transparentes, reproducibles y verificables. Ver este post en OpenScience Project.
  • Para evitar practicas predatorias sobre este trabajo, que alguien cierre y comercialice, hay que orientar a una licencia FLOSS vírica, donde los trabajos derivados mantengan la condicion libre.
  • De esta manera se apunta a constituir una comunidad tecnologico-científica donde el nucleo de desarrollo se mantendrá en los autores originales pero permitiendo y aprovechando código y feedback de los usuarios.
  • En esta etapa el beneficio no es a priori monetario y en cambio sí en cuanto a calidad del software, inserción y difusión del/los producto/s, fidelización de usuarios y prestigio del equipo de desarrollo.

2. La repercusión de la masa crítica generada abre la puerta al mercado por las siguientes razones:

  • Muchos de los académicos que utilicen y formen parte de un "comunidad" alrededor del sofware FLOSS desde las universidades o llevaran su conocimiento a la industria.
  • Tambien los investigadores dentro de la industria tienen vínculos fluidos con la comunidad científica, sobre todo en estas áreas de investigación de vanguardia de directa aplicabilidad.
  • El mercado a priori imposible de acceder se puede hacer más permeable: los responsables de investigación demandan la utilización del software en los procesos de la industria o sus labores particulares.
  • Si el costo para la industria es nulo o bajo y de calidad, hay muchas probabilidades de que sea aceptado.
  • La ventaja diferencial del cliente es evitar el vendor lock-in. Sin embargo, la ventaja competitiva del equipo de desarrollo original, por su -*know how-* adquirido es insuperable para cualquier potencial competidor.

3. Insertado en el mercado se generan posibilidades de lucro en dos áreas

  • Customización y extensión del software bajo requerimientos específicos. Entra en el marco de SaaS
  • Capacitación y entrenamiento a equipos técnicos de la industria y la academia, tanto en el área de aplicación (quimicos) como de desarrollodo de software.

Muchísimo material para leer sobre el tópico hay en este sitio. Yo empezaré en cuanto tenga tiempo. Invito también, de manera enfática, a leer la justificación de que el software desarrollado en el marco de mi proyecto integrador lo libero como Software Libre

Más allá del negocio

Además de lo expuesto se me cruzan cuestionamientos sobre el rol de la universidad y el estado en este escenario.

Como ciudadano y futuro profesional festejo la inversión que en los últimos años el Estado ha realizado para ciencia y tecnología. Apostar a generar valor en áreas tan estrategicas como el software es necesario, y plantearlo desde el punto de vista de fortalecer la industria nacional (pymes) es entonces doblemente valioso.

Pero...

¿son los laboratorios de investigación de las universidades actores que deben generar recursos por sí mismos? ¿A quien pertenece el conocimiento que se produce en la universidad? ¿A quién debe pertenecer? ¿La universidad actual responde a un proyecto de país ? ¿Existe tal cosa? ¿No debiera el Estado, formar parte societaria en los consorcios para los cuales está aportando grandes recursos, además de ser agente regulador? ¿quién y cómo regula la relación e intereses existentes entre los grupos de investigación y el sector privado? ¿no se puede prestar a malversaciones y abuso del sello de la universidad?

Me desperté preguntón (como nací).

15:37

Diego Sarmentero: Nuevo Blog de Uni-Code


Nace el Blog del Grupo Uni-Code: http://uni-code.tumblr.com/
Grupo destinado a la divulgación de tecnología, compartiendo experiencias y conocimientos en un ámbito totalmente informal.
Próximamente en cuanto se terminen de cerrar algunos detalles y se determine la fecha de arranque, estaremos iniciando un Ciclo de Charlas Informáticas!

martes, 24 agosto

23:15

22:56

Mariano Draghi (cHagHi): Quien dijo quien dijo...

Arrancando hojas viejas de una libreta que suelo llevar a los viajes, me encontré dos perlitas. Creo que son de este verano, de Cholila/Puelo... lo cual acota bastante los/las posible/s autores/as ;-)

Note to self: tenemos que empezar a grabar los diálogos, o por lo menos, a escribir más de estas cosas y no dejar que caigan en el olvido.

Frase #1:

Me caí con todos los pies... y me quedó la cabeza y las manos

Frase #2:

Tenía sed de agua y comí una manzana, y fue bárbaro

Sí, ya se que son dos tremendas giladas que fuera de contexto no dicen nada, pero en su momento nos recagamos de la risa.

 


22:00

Juanjo Conti: Un servidor web con pocas líneas de Python

Hoy un amigo necesitaba un servidor web para engañar a un programa. Cada vez que el programa iniciaba, se conectaba con un servidor web para verificar si había actualizaciones disponibles.

El nombre del host a dónde se hacía la petición era leído de un archivo de configuración, por lo que lo podíamos cambiar. El resto solo era levantar un servidor web que responda con la información apropiada.

En la librería estándar de Python tenemos todos los elementos necesarios para realizar la tarea. Luego de probar un poco, el resultado final fue algo como esto:

PORT = 8090
 
from BaseHTTPServer import BaseHTTPRequestHandler
import SocketServer
import cgi
 
class MyHandler(BaseHTTPRequestHandler):
 
	def do_GET(self):
		self.send_response(200)
		self.end_headers()
        	self.wfile.write('1.9.1')
 
	def do_POST(self):
		form = cgi.FieldStorage(
			fp=self.rfile, 
			headers=self.headers,
			environ={'REQUEST_METHOD':'POST',
			'CONTENT_TYPE':self.headers['Content-Type'],
			})
		print form
		self.send_response(200)
		self.end_headers()
		self.wfile.write('1.9.1')
 
httpd = SocketServer.TCPServer(("", PORT), MyHandler)
 
print "serving at port", PORT
httpd.serve_forever()

Levanta en localhost y responde la cadena ’1.9.1′ al ser consultado tanto por GET como por POST y en el caso de POST, también imprime los valores recibidos.

21:16

Manuel Kaufmann (Humitos): Click en el touchpad de la notebook

Hace un tiempo que venía con problemas en el touchpad de la notebook, y cada vez que un amigo venía a casa me decía: “Po! ¿todavía no arreglaste esto?”, así que hoy le dediqué un par de minutos a buscar la solución para no volver a escuchar su queja :)

En la consola, ejecutar:

synclient TapButton1=1

Listo, nada más. El artículo de dónde saqué esto es éste.


17:05

Matías E. Gieco: Crear un ejecutable con Python, Gui2Exe e InnoSetup

Luego de una larga pelea conmigo mismo, logré hacer andar gui2exe, o sea logré compilar los .py y que éstos anden bien.

Voy a usar un ejemplo de un script que es simple no tiene módulos raros, salvo win32com, pero no es necesario declararlo en los campos de gui2exe.
La imagen de como queda la pantalla:

(Se ve poco, pero haciendo click se agranda)
Essssplico :p
My Projects -> email2outlook (es el nombre que le puse al proyecto)

En Target Classes:
Exe Kind es console, ya que sólo es para consola
Python Main Script es justamente el path al script

En Common Options:
Optimize: 2. Es el tipo de optimización que ya venía poniendo en los que hacía con py2exe a mano. Es para que sea lo mas mas re cool.
Compressed: 2. Para que usando 7zip haga una compresión lo mas grande posible de los archivos.
Bundle Files: Acá me golpié un rato, pero lo entendí. En 1 y 2, mete las librerías dentro del archivo.exe, quedando un solo exe. Si le ponés 3, genera el .exe con el código python y mete la librería standard y/u otros módulos en un archivo externo.
Zipfile: justamente acá mete todo eso.
¿Para qué sirve hacer eso? Porque si tengo 3 archivos para compilar: uno.py, dos.py y tres.py, si pongo 1 ó 2, me genera 3 archivos de 5 Megas cada uno (¡mas de 15 MB en total en el directorio!). Si pongo el Bundle Files en 3, me genera 3 archivos de 10kb y una zipfile de 5 MB.
Y bue... nada mas, compile y listo...!

Frutilla del postre. ¿Y si achicamos mas el programa a distribuir?
El programa compilado lo deja bajo en subdirectorio \dist, entonz si yo estoy parado sobre el directorio padre de éste, que sería v.2.0.1, tengo un codiguito tomado de la ayuda de py2exe y que con medio gramo de materia gris acomodé para que tomara el subdirectorio \dist y lo comprima.

if "%Compress%"=="1" call:CompressFiles
echo.
echo.
::echo Done: "%~dpn0_EXE\"
echo Compresion realizada con exito
echo.
::pause
goto:eof

:CompressFiles
        %SevenZipEXE% -aoa x "dist\library.zip" -o"dist\library\"
        del "dist\library.zip"

        cd dist\library\
        %SevenZipEXE% a -tzip -mx9 "..\library.zip" -r
        cd..
        rd "library" /s /q

        REM cd dist\
        %UpxEXE% --best *.*
        cd..
goto:eof

¿Qué sucede al ejecutar este compresor.cmd? El cuchifrulo agarra todo lo que tiene \dist y lo comprime ¿cuánto? Y... aproximadamente el directorio queda un 30% mas pequeño, ¡pero anda exactamente igual!
¿Qué gano con ésto? Simple, paso de 5MB a 3Mb y chirolines.

Hagamos un instaladorrrr...
Inno Setup Compiler es el programita, con cariño lo digo, para mi entender hace magia, dos o tres cosillas y sale andando.
Arrancamos el programa, Crear proyecto con el Wizard y pasamos a la primer pantalla de configuración:

Simple y conciso, nombre de la app y versión.
¡Se va la segundita!

El gancho que tiene esa elección es que puedo dejarlo en Program Files Folder (que puede ser Archivos de Programas o Program Files, según el Windows) y también poder darle a elegir cambiar el directorio. Para otra aplicación, no le daba esta opción y directamente instala en un directorio del sistema.
En la tercer pantallita se pone lindo.

Como la aplicación es un ejecutable que se invoca desde otro lado, no es main. Por lo que tildo esa opción y le digo que tome todo el directorio dist para armar la app.
La pantalla siguiente no voy a poner una captura, ya que es para configurar el Menú Inicio, cosa que no tiene mi aplicación y por lo que destildo esa opción.
La otra que sigue es de licencias y texto a mostrar antes/después de instalar, está bueno como para dar avisos.
Y vamos con otra pantalla mas... ¿lenguajes para el instalador? inglés o español, para este caso pongo inglés nomás porque es una instalación rápida.
¡Seguimos! Pantalla para configurar dónde poner el resultado:

Acá sí que configuré :P A donde crear el setup.exe y el ícono (ícono de Tango elegí) y Next...

Y sí, por fín ¡terminado! Crea el archivo de configuración y compilamos el script.
¡Ups, saltó un error! El formato .png del ícono no es aceptado.
Miro el código de configuración y cambio en SetupIconFile por D:\desarrollos\email_outlook\v.2.0.1\internet-mail.ico (Estaba todo friamente calculado :D )
Compilar... y ahora sí. ¡Un hermoso instalador con iconito y todo!

Ufff... verborragia hice hoy. Palomita voló, el que no se escondió ¡se jodió!


14:27

Mariano Guerra: repiola 0.6: jump a direcciones, call, ret y compilacion

para darle un cierre a esta idea que tuve alguna vez, implemente lo que faltaba para considerar el proyecto "terminado", lo unico que puede llegar a faltar es UIs mas copadas (como guardar programas etc.)

en esta release agregue soporte para saltar a una direccion almacenada en un registro:

set r2 2
jmp r2

salta a la direccion 2

call y ret permiten simular rutinas, call empuja el instruction pointer al stack y salta al label especificado, ret saca la direccion del stack y salta a ella:

jmp begin

: donothing
ret

: begin
call donothing

con estas features ya no hay muchas cosas que no se puedan hacer.

y para cerrar ahora cuando ejecutas un programa lo compila a bytecode y despues la maquina virtual ejecuta el bytecode directamente, hasta ahora las instrucciones eran compiladas a bytecode pero el manejo de los saltos era manejado por la clase Interpreter.

esto da una mejora de velocidad considerable para mi pobre celular (el mas barato con j2me :D)

en la pagina http://code.google.com/p/repiola/ se encuentran los jars y documentacion de todas las instrucciones.

12:48

Juanjo Conti: Twitter updates desde Twisted

Tenés un servidor escrito en Twisted? Tenés eventos críticos o importantes que mandás por mail o a celulares? Qué tal publicarlos en Twitter?

Usando Twitty Twister podemos implementar este feature de forma muy sencilla.

Dentro de tu servidor Twisted:

from twittytwister import twitter
twitclient = twitter.Twitter(username, password)

y donde se produzca un evento:

twitclient.update(mensaje)

Cual es la diferencia con hacerlo a mano o usar una de las tantas librerías que vienen para Twitter/Python? Postear una actualización en Twitter o cualquier otra petición a un servidor externo tiene una naturaleza bloqueante y en un framework de concurrencia colaborativa, como es Twisted, no podemos darnos ese lujo. Las llamadas a update y otros métodos de este objeto retornan un objeto Deferred al cual se le pueden añadir callbacks o errbacks.

Muy cheto.

12:48

Evita: Época de cambios

Compañeros, ustedes bien saben que esta humilde servidora ha estado siempre a vuestro lado, en las buenas y en las malas, codo a codo con ustedes, mis queridos descamisados. Entregando junto a los jirones de mi vida, las enseñanzas del General Perón y la doctrina del software libre. Hoy como aquel 22 de agosto de 1951, les pido que me den tiempo para anunciar al país una decisión muy importante que he tomado.



Yo aprovecho esta oportunidad para pedir a Dios que ilumine a los mediocres para
que puedan ver a Perón y para que puedan comprenderlo, y para que las futuras
generaciones no nos tengan que marcar con el dedo de la desesperación si llegaran
a comprobar que hubo argentinos tan mal nacidos que a un hombre como el
general Perón, que ha quemado su vida para lograr el camino de la grandeza y la
felicidad de la Patria, lo combatieron aliándose con intereses foráneos.

Compañeros, por el cariño que nos une, les pido por favor que no me hagan hacer lo que no quiero hacer. Se los pido a ustedes como amiga, como compañera. Les pido que se desconcentren. Compañeros...¿Cuándo Evita los ha defraudado? ¿Cuándo Evita no ha hecho lo que ustedes desean? Yo les pido una cosa, esperen unos días...

lunes, 23 agosto

15:50

Roberto Alsina: Soy un nerd, pero mi teléfono es barato

Tengo un celular nuevo porque el viejo desapareció. Me compré el Samsung Star, que no es un smartphone, sino lo que llaman un featurephone, que parece significar "tiene mucha cosas pero es barato, sólo se programa en Java y no tiene Android".

Es más o menos así:

  • Pantalla táctil, 400x240
  • Falso GPS (te da tu ubicación a unos 400 metros a la redonda, en la ciudad me alcanza).
  • Browser basado en Webkit que anda sorprendentemente bien (viene con un documento que es la LGPL y no se puede borrar :-)
  • Acelerómetro
  • Radio FM
  • Una tarjeta micro-SD de 2GB
  • Cámara de 3.2MP (video a 320x240).

La cámara toma fotos más o menos decentes con buena luz:

Foto0005.jpg

Y tiene algunos features "avanzados" (que quiere decir: mi camarita no los tiene), como detección de sonrisas y foto panorámica:

Foto0018.jpg

Aparte de eso... y, es un teléfono, que se puede decir. Es "barato", lo que quiere decir "sale caro, pero menos que los otros".

Entonces, vamos a aprovecharlo...

Primero: no tengo mi fiel lector de libros electrónicos desde que se murió mi última Clie. Así que busqué software para eso.

Resulta que el mundo de los Midlets, como se llaman las aplicaciones para feature phones, es algo raro, donde las cosas son difíciles de encontrar para los que recién llegan.

Hay una especie de "tienda de apps" en http://getjar.com pero no es exactamente completa, y es difícil encontrar algo.

Después de buscar mucho, encontré un buen (casi digo muy buen) programa llamado Foliant. Esta es la home page, en ruso ... es raro, mi lector de ebooks favorito para palm (Palm Fiction) también tiene un sitio sólo en ruso!

Por supuesto las tipografías son horribles, pero resulta que se pueden convertir TTF usando esto así que ya tengo mi Droid Sans como a mí me gusta.

Otra cosa interesante sobre este celular es que puede reproducir cosas (sí el anterior era tan baja gama que no tenía ni mp3). Pero... no cualquier cosa. Para audio, usás mp3 y listo. Para video... es un poco más complicado.

Acá está la versión corta:

  1. Convertí usando Handbrake, video MP4 ffmpeg, audio AAC.
  2. Usá la extensión .mp4, no se aviva que .m4v es video.
  3. El video tiene que ser como máximo 320x240.

El punto 3 es un problema. Por ejemplo, que hacemos con un video pantalla ancha, ponele 640x272, una relación 2.35:1?

Lo obvio es limitar el ancho a 320, y te da un video de 320x136.

Bueno, no. Lo que hay que hacer es encontrar el alto correcto, respetando la relación ancho/alto para un ancho de 400 pixels. En este caso, es 400x170.

Pero no podés usar un video de 400x170! Por eso usás 320x170, y al reproducir le decís al teléfono que "llene la pantalla" ignorando el aspect ratio. Listo: 400x170 y la forma correcta.

La diferencia? 320x130 tiene sólo 41600 pixels, 320x170 tiene 54400. O sea, 30% mejor imagen.

Sí, es diminuta (3 pulgadas) pero se ve bastante bien, y dependiendo del tipo de video, funciona.

NOTA: Foliant es mucho mejor de lo que parecía, una vez que bajé la versión para Samsung de la página. Es pantalla completa (sin soft buttons) y la pantalla rota automáticamente con el acelerómetro. Es muy cómodo de usar y la interfaz es muy bonita.

11:00

Marcos Vanetta: Preparando mi entorno Python en Ubuntu 10.04

Ubuntu trae instalado python por defecto: malev@dell:~$ python -V Python 2.6.5 Primero instalamos pip, pero para esto necesitamos python-setuptools: sudo apt-get install python-setuptools Bajamos pip de aquí [1], descomprimimos y hacemos: sudo python setup.py sudo ln -s /usr/local/bin/pip-2.6 /usr/bin/pip Algunos intérpretes “bonitos”: sudo apt-get install ipython bpython Bazaar Ya he hablado de este fantástico CVS [...]

domingo, 22 agosto

16:07

Mariano Guerra: un poco de dylan



Come gather 'round people
Wherever you roam
And admit that the waters
Around you have grown
And accept it that soon
You'll be drenched to the bone.
If your time to you
Is worth savin'
Then you better start swimmin'
Or you'll sink like a stone
For the times they are a-changin'.

Come writers and critics
Who prophesize with your pen
And keep your eyes wide
The chance won't come again
And don't speak too soon
For the wheel's still in spin
And there's no tellin' who
That it's namin'.
For the loser now
Will be later to win
For the times they are a-changin'.

Come senators, congressmen
Please heed the call
Don't stand in the doorway
Don't block up the hall
For he that gets hurt
Will be he who has stalled
There's a battle outside ragin'.
It'll soon shake your windows
And rattle your walls
For the times they are a-changin'.

Come mothers and fathers
Throughout the land
And don't criticize
What you can't understand
Your sons and your daughters
Are beyond your command
Your old road is
Rapidly agin'.
Please get out of the new one
If you can't lend your hand
For the times they are a-changin'.

The line it is drawn
The curse it is cast
The slow one now
Will later be fast
As the present now
Will later be past
The order is
Rapidly fadin'.
And the first one now
Will later be last
For the times they are a-changin'.

de yapa

15:05

Diego Sarmentero: Videos Graciosos de Java




11:41

Andrés Gattinoni: PET: Python Entre Todos, primera revista de Python

A esta altura ya es una noticia vieja, pero quizás alguno no se haya enterado de que la semana pasada salió publicada la revista PET: Python Entre Todos.

La revista es una producción colaborativa de la Comunidad PyAr, con artículos de muy alto nivel de distintos participantes de la lista y el esfuerzo especial de sus dos editores, Roberto Alsina y Emiliano Dalla Verde Marcozzi.

PET: Python Entre Todos Num. 1

PET: Python Entre Todos Num. 1

Los artículos incluidos en la revista son:

  • PET First Shot
  • Cómo contribuir a PET
  • PyAr, la historia
  • from gc import commonsense – Finish Him!
  • Concurrencia Indolora: el módulo processing
  • Introducción a Unit Testing con Python
  • Taint Mode en Python
  • Dinamismo Aplicado
  • Decorando Código (Parte 1)
  • Web2Py Para Todos
  • ¿Cómo Está Hecha Esta Revista?
  • Desafío PET
  • Un poco de xkcd

La publicación fue todo un éxito porque se dinfundió rápidamente por Internet con la ayuda de diversos medios: blogs, twitter, barrapunto, etc. En mi opinión esta buena recepción se debió dos factores clave: la calidad del contenido que es realmente muy alta y que gracias a las tecnologías de software libre utilizadas para la edición de la revista, la misma pudo ser publicada en múltiples formatos: HTML online, PDF en distintos layouts y para e-book readers en ePub y Mobi. A todos ellos se puede acceder en la página del primer número de la revista.

Además, al poco tiempo de publicada la revista, Roberto descubrió que PET es la primera revista de Python… en el mundo!. Esto animó a la comunidad a crear una versión en inglés para poder difundirla a un mayor público. Personalmente tuve la opotunidad de colaborar traduciendo dos artículos, “PyAr, la historia” de Facundo Batista y “¿Cómo Está Hecha Esta Revista?” de Roberto Alsina. De esta manera, si no puedo aportar con un artículo interesante, por lo menos puedo colaborar para que las cosas interesantes que escriben otros puedan llegar a un público más amplio.

Así que seguramente pronto estemos anunciando la versión en inglés del número 1 de PET. Y en el futuro, según entiendo, la idea es poder incorporar artículos de colaboradores internacionales en ambas versiones de la revista.

sábado, 21 agosto

22:13

Mariano Guerra: clear screen y stack en repiola (+ 400 posts)

a pedido de j0hn, el único usuario de repiola agregue soporte para limpiar la pantalla y stack en repiola.

para limpiar la pantalla se usa la instrucción clr con el color a usar para limpiar la pantalla, ya sea como un literal o con el nombre del registro donde esta el color:

# limpiar la pantalla con rojo
clr 0b111110000000000

# limpiar la pantalla con el color en r2 (verde)
set r2, 0b000001111100000
clr r2

el stack es como uno se esperaria

push 4
set r1, 8
push r1
pop r2
# r2 == 8

pop r2
# r2 == 4


a esta altura se están preguntando que demonios es repiola?

es un programita que interpreta un lenguaje muy parecido a assembly 80x86 que permite dibujar cosas en algo similar a un canvas, tiene implementación desktop (swing), mobile (j2me) y web (cortesia de j0hn y frutillita).

como nota adicional, este es el post numero 400 de este log personal, vino Ian Curtis y trajo pepsi.

19:48

Martín Cerdeira: VbAutodoc: Auto documentando VB

Qué lindo sería contar con una herramienta que, lea el código fuente (en este caso en VB) y me arme un archivo de documentación sobre las funciones y sub rutinas (preferentemente en html).
Cómo soy programador y me gusta python =) decidí hacerla. La bautizé vbautodoc (muy original) y está disponible una muy precoz temprana versión.

Próximamente, voy a mejorar aspectos en cómo se construyó, por ejemplo, el pedazo de html que uso como base, lo metí dentro del código, y sólo funciona para documentar VB, cuando, si se parametriza podría servir para cualquie lenguaje.

Web del proyecto
Descargas

15:21

Andrés Gattinoni: Una vueltita por las Charlas Abiertas de Python en La Tribu

Charlas Abiertas de Python en La Tribu

Hoy pude darme una vuelta, por primera vez, por las Charlas Abiertas de Python en La Tribu. Le robé un tiempo al estudio y me dirigí a Lambaré 873 junto a un amigo, a ver qué tal estaban esas charlas.

No esperaba encontrar grandes revelaciones porque la charla a la que iba era la de Introducción al Desarrollo Web I, a cargo de Alejandro Cura, y yo ya trabajo en el rubro hace algunos años. Sin embargo me interesaba verle las caras a algunos miembros de la comunidad por quienes tengo un gran respeto.

Me encontré con un ámbito muy amigable, lleno de gente deseosa de aprender. Me alegró mucho encontrar algunas personas “mayores” (por lo menos mayores al tipo de gente que uno suele conocer en este acotado segmento del mercado laboral), muy interesadas y participativas. La charla estuvo muy bien, era una introducción para quienes no tienen idea de en qué consiste hacer un sitio web (y preparatoria para la próxima charla que dará algunos conceptos básicos de Web2Py). Me pareció muy copado que se le diera un poco de bola al protocolo HTTP y cómo funciona, porque en mi experiencia laboral me he encontrado con desarrolladores que pueden manejar muy bien algunos lenguajes como PHP, Javascript o HTML pero no tienen idea de cómo llegan esas cosas “a la mesa” del browser.

Incluso me encontré aprendiendo una cosita de CSS que no sabía y era la posibilidad de incluir tipografías externas (que quisiera ver qué tan compatible es con la bosta de IE, pero que me resultó muy útil).

Me hubiera gustado quedarme a la charla siguiente del eminente Roberto Alsina, pero lamentablemente tenía que volver a la cueva a estudiar.

Felicito desde este humilde lugar el enorme trabajo que está realizando la comunidad PyAr organizando estas charlas que permiten acercar herramientas a la sociedad para conocer y apropiarse de las nuevas tecnologías asociadas a la informática e Internet.

14:53

Diego Sarmentero: Post Morten CNEISI 2010

Bueno acá estamos devuelta en Córdoba después de un par de días muy buenos en Santa Fe en la CNEISI 2010 (en la UTN-FRSF) del 18 al 20 de Agosto.



La verdad el viaje estuvo genial, la pase re bien, simple y llanamente me cague de risa, y volvimos con varias anécdotas y desventuras graciosas para contar :P
Y el viaje además tuvo su retorno de inversión, el primer día me gane una remera de Fedora en una charla, a la noche una remera de la UTN en el boliche, después con la botella de coca que nos dieron en el almuerzo me gane otra coca con la tapita y además por el Paper de QuickDB nos regalaron un pen drive de 4 gb :D

Ahora comienza...
EL FOTO-RELATO DE LA CNEISI 2010

Llegando a la CNEISI...
(Emilio Ramirez y Yo... El Grupo QuickDB, con Póster en mano)

(En orden... Yo y Santiago esperando para la acreditación al congreso)

Conociendo el Hotel





Almuerzo en la CNEISI
(recibiendo el almuerzo de la CNEISI)

(desilusionados por el almuerzo)

(nos fuimos a comer a la costanera)

Laboratorio de Mecánica de la UTN-FRSF

Cenando en la Peatonal la Primera Noche

Segundo Día de la CNEISI

(evangelizando al mundo con QuickDB :P)

Charlas de la Empresa RootLinux
(muy buenas charlas, en el sentido técnico y la calidad de los tipos para dar las charlas, metían chistes, de todo)


Noche de Fiesta del Jueves (con Cena de Gala)
(No se por qué... pero salimos con "Caripela x 5000")



Foto Panorámica Psicodélica
(Fantasmas y Clones)
(esta foto panorámica no fue tan fácil como quizás se puedan imaginar... terminamos cansados y otorgándole a la cámara más inteligencia de la que debíamos)

Una Noche de Paseo en Santa Fe no le hace mal a nadie, ya lo sé
(El Jueves nos pintó volver de la CNEISI caminando al Hotel, no quedaba para nada cerca, pero estuvo bueno para volver paseando por la costanera)










Posters de QuickDB y Syriox


Presentación de QuickDB
(haciéndome el Steve Jobs)


Y según Emilio acá estoy Rapeando durante la presentación de QuickDB:


Acto de Cierre
(Emilio y Yo recibiendo un certificado y los pen drive de regalo por haber sido QuickDB uno de los 6 mejores trabajos entre los 36 papers aceptados)

(Protchosky volviendo después del amague que se comió con la entrega de certificados :P)

Durante el viaje de vuelta me dijeron que hice una "reflexión profunda"... si, yo tampoco lo podía creer... así que cierro el Post con eso:
"Nosotros siendo de Córdoba, tuvimos que hacer un viaje hasta Santa Fe para conocer gente copada de Córdoba, que hasta estudia en la misma Universidad que nosotros."

Como siempre los momentos fotográficos fueron auspiciados por Emilio
El resto de las fotos se encuentran en: Picasa-CNEISI2010

14:38

Diego Sarmentero: Presentacion QuickDB

Esta es la presentación de QuickDB que se mostró en la CNEISI-2010

Presentación QuickDB:

[DESCARGAR]

Descargar: "Ejemplo de la Presentación"


Paper de QuickDB

[DESCARGAR]

Administración y hosting cortesía de Net Managers SRL

Tema por Andrés Antista

Banner por Joaquín Sorianello

OPML - FOAF - RSS - Log
Seguinos en twitter / identi.ca

Blogs

Anthony Lenton
Leito Monk
Gustavo Carmona
Manuel Muradás
Gonzalo Sainz Trápaga
Marcos Vanetta
Nicolás César
Alberto Paparelli
Santiago Peresón (Yaco)
Margarita Manterola
Javier Castrillo
Santiago Bruno
Paul M. Dorr
Esteban Ordano
Evita
Alejandro Santos
Manuel Kaufmann (Humitos)
Joaquin Sorianello
Angel Freire (cuerty)
Mariano Draghi (cHagHi)
Marcelo Fernández
Roberto Alsina
Pablo Benjamín Arroyo
Juan Pedro Fisanotti
Gabriel Patiño
Guillermo Heizenreder
Marcos Dione
John Lenton
José C. Massón
Ezequiel Gutesman
Mauro Lizaur
Mariano Guerra
Matías E. Gieco
Nicolás Miyasato
Martín Gaitán
Pablo Alejandro Costesich
Mario Zorz
PyAr en la OLPC
Carlos Joel Delgado Pizarro
Mariano Reingart
Ramiro Morales
Roberto Allende
San Cayetano
Alejandro Alvarez
Martín Cerdeira
Diego Sarmentero
Walter Alini
Sebastian Bassi
César Portela
Nicolás Echániz
Juanjo Conti
Héctor Sánchez (Karucha)
Patricio Molina
Andrés Gattinoni
Facundo Batista
Francisco Malbrán