Canonical Voices

What Bitácora de Vuelo talks about

Posts tagged with 'software'

facundo


En este post detallé todo lo que querría tener en el testrunner ideal, con la idea de trabajar un poco sobre eso en el último PyCamp.

Así fue. Nos sentamos un rato largo con Martín Gaitán y empezamos a ver si con nosetest podíamos lograr parte o todo de lo que queremos.

Algo en lo que no nos metimos mucho es la integración de nosetests con frameworks que proveen un reactor (o main loop). Buscando un poco ví que hay algo para integrarlo con Twisted, bastante sencillo, pero no encontré nada para GTK o Qt... no sé si porque no se puede, o es automático :p

Entonces, vayamos a los bifes... ¿qué necesitamos para tener el testrunner ideal?

Keep testing


Los componentes

El primer paso, obvio, es instalar el nosetests base. Con esto tenemos el primer par de puntos de lo que queríamos en mi post original: que soporte recibir un directorio y que busque de ahí para abajo, y que al recibir un archivo que corra los tests de ese archivo.

El primer plugin que necesitamos para ir a donde queremos es "nose-progressive". Este es un plugin que nos cambia bastante la forma de ver los resultados de los tests. Por ejemplo, no hace falta que muestre cada linea de cada test ejecutado, en jerarquía, porque ante un error nos va a dar un pequeño resumen donde podemos ver la info del test que falló.

También nos va a dar un lindo OK en verde si todo salió bien... y si hubieron problemas vamos a ver esos resúmenes, coloridos, con un montón de info copada.

De la info que nos da en ese resumen también podemos extraer el path para correr el test sólo, o toda la clase, todo el archivo etc. Pero también tenemos otro plugin, el "nosecomplete" que hace que podamos ir escribiendo el path para un test, autocompletando de una forma muy piola, descubriendo lo que hay para correr.

Para correr más de un test, un subconjunto que matchee con una regex, tenemos el "nose-selecttests", que nos permite pasarle un --select-tests= que hace que le podamos pasar luego aquello que queremos que coincida.

Finalmente, tenemos varios detalles. Le podemos decir que corte en el primer test que falla, y que no siga, con -x. También podemos pedirle que no esconda ni los prints que hagamos ni lo que logueamos, con --nocapture y --nologcapture. Y le podemos pedir que nos tire un buen resumen de cuales tests tardan más con --with-timer (necesitamos el plugin "nose-timer").


Armando el entorno

Lo primero, obviamente en el virtualenv de tu proyecto, es instalar nose y todos sus plugins:

    pip install nose nose-progressive nose-selecttests nose-timer nosecomplete

Para el plugin de autocomplete, como autocompletamos desde el shell, realmente, tenemos que hookear al mismo con el plugin de nose. Es copiar y pegar algo, nada más, las instrucciones acá.

Finalmente, hay que decirle a nose, cuando lo ejecutamos, que use tal o cual plugin, y de qué forma. Acá viene mezclada la mano... algunas configs la podemos poner en el el $HOME/.noserc...

    [nosetests]
    with-progressive=1
    nologcapture=1
    verbose=1

..., pero otras las tenemos que especificar al ejecutarlo:

    nosetests --progressive-bar-filled=2 --progressive-function-color=1 --progressive-dim-color=5

Esto último se podría meter como un alias del bash, o simplemente encapsularlo en un script 'test' en el proyecto (junto con algún pyflakes o pylint, etc).

En fin. Lo importante es: Keep Testing :)

Read more
facundo

Encuentro 2.0


Como varias veces ya les conté, Encuentro es un simple programa que permite buscar, descargar y ver contenido del Canal Encuentro, Paka Paka, BACUA, Educ.ar y otros.

Hoy estoy liberando la versión 2.0, una versión importante ya que hace que todo vuelva a funcionar correctamente, luego que Encuentro y Conectate reconfiguraran sus portales. En otras palabras... actualizá, sí o sí.

Encuentro

La versión 2.0 trae los siguientes cambios con respecto a la versión anterior:

  • Vuelve a funcionar luego de los cambios de backend de Encuentro y Conectate
  • Maneja las temporadas de los programas; no se repiten nombres y graba agrupado a disco
  • Sólo anota (y no requiere aprobación del usuario) al tener errores en la descarga
  • Mejor manejo de las imágenes de los episodios, con lo cual ahora se ven las de Bacua
  • Actualiza automáticamente la metadata si se la encuentra demasiado desactualizada
  • El proyecto tiene menos dependencias, es más simple hacerlo funcionar en más sistemas
  • Soporta ser ejecutado en un virtualenv
  • Varias correcciones y detalles para hacerlo más usable y robusto

Hay muchas formas de instalarlo, todo bien explicadito en la página oficial. ¡Que lo disfruten!

Read more
facundo

Algunas herramientas piolas


Hace rato que vengo con ganas de hablar acerca de una serie de herramientas interesantes que he encontrado.

Son de lo más variadas. Lo único que tienen en común es que solucionan un problema específico que tuve o tengo. Y que me parece que son piolas :)

Limitando el ancho de banda: ¿Tienen una aplicación que les usa mucho la red? Aunque la misma no esté preparada para autolimitarse, siempre se puede hacer desde afuera, y para ello nos viene a ayudar trickle, un utilitario que hace justamente lo que queremos: ejecutar otro programa limitándo su ancho de banda usable para download, para upload, o ambos.

Midiendo uso de recursos: Muy relacionado con lo anterior, a veces vemos que la red se está usando, pero no sabemos por qué proceso. Para contestarnos esto tenemos dos herramientas, IPTraf y NetHogs,  que nos muestran la info pertinente de forma bastante distinta, por lo cual está bueno tener ambas a mano, para probar cual nos va mejor en cada momento. También nos pasa parecido con el uso del disco. en este caso nos salva las papas el iotop. Para recursos como memoria y CPU tenemos el clásico top, obviamente, pero muchas veces uso htop que es más interactivo y me facilita la exploración.

Fijate si cambió:¿Alguna vez les pasó que tiran un comando en la terminal cada algunos segundos para monitorear algo, tratando de ver si algún dato cambia o viendo cómo cambia? En estos casos lo mejor es usar watch, que nos ejecuta el programa que queremos, cada los segundos que le especificamos, y encima nos resalta los lugares donde hubo cambios con respecto a la ejecución anterior. Más útil de lo que parece.

Mandando muchos mails:Me pasa seguido, para organizar jodas en casa, o eventos en PyAr, o cursos, etc, que tengo que mandar el mismo mail a mucha gente. Mandar uno por uno es mucho trabajo; mandar todos en "copia oculta" es muy impersonal; y ponerlos a todos en "copia visible" es una mala práctica. Por suerte está Mail Merge, un plug-in para Thunderbird que hace todo sencillo: uno pone todos los destinatarios en el campo de "Para:", pero luego en lugar de hacer click en "Enviar", se elige la opción de MailMerge, y en vez de salir uno para todos, el plug-in manda un mail a cada uno. Limpio, y útil. Y tiene opciones para lograr cosas más complejas, pero no lo exploré demasiado, con esta funcionalidad básica por ahora me alcanza.

Seguridad, seguridad: Por último, la herramienta que más me tiene fascinado estos últimos tiempos. Se llama KeePassX, y marcó un antes y un después en mi administración de contraseñas. En el pasado, yo tenía tres o cuatro claves... una genérica, una para lugares de "alta seguridad" como el banco, etc, y las repetía en varios sitios. Así y todo, las claves no eran demasiado complejas (usaba mayúsculas, minúsculas y números, pero no caracteres extraños, y nunca superaba los 10-12 caracteres). ¿Por qué? ¡Por que me las tenía que acordar! Con KeePassX, sin embargo, ya no me las tengo que acordar: se guardan en un archivo (cifrado con una clave que sí tengo que acordarme, y la hice complicada y larga, pero es una sola). El programa no es mucho más que eso, pero también te permite relacionar campos con la clave (en qué sitio va, el nombre de usuario,etc), y también tiene campos genéricos donde uno puede escribir cualquier cosa. Ah, y también te autogenera claves... entonces, la realidad es que ni siquiera veo las alguna vez! Todo esto, sumado a la facilidad de uso (por ejemplo, ctrl-B sobre una entrada te copia el nombre del usuario, y ctrl-C te copia la clave) y que tiene clientes para muchas plataformas (incluida Android), hace que sea una herramienta maravillosa.

Read more
facundo

Un largo camino al .exe


Algunas versiones de Encuentro (si no recuerdo mal la 0.5 y 0.6) estaban empaquetadas para Windows (con instalador y todo).

Pero hacer ese trabajo era un perno. En este caso lo hacía un muchacho que se llama Javier Andalia, pero después no lo continuó. El drama es básicamente que GTK, la biblioteca que se usaba para la interfaz gráfica es muy poco amigable para hacerla andar en Windows. Siempre fue un dolor de muelas, lo sigue siendo, y no creo que cambie.

Todo empeoró cuando del lado del server cambiaron todo obligándome a cambiar un montón de cosas de mi lado. Ahí salió la versión 0.7, que funcionaba correctamente con el estado actual de situación, pero dejaba a los usuarios de Windows sin tener algo que les funcione.

Y la verdad es que el contenido de Encuentro, Conectate, BACUA, etc, está buenísimo y da para que lo disfruten todos, aunque el usuario tenga un sistema operativo de mierda.

Entonces, encaré el laburo de migrar de GTK a Qt. Y una vez estuvo eso, empaqueté nuevamente para Windows y armé el instalador.

Luego de un par de semanas de "beta", tengo el orgullo de presentarles Encuentro 1.0, :D

Es una release rara porque a nivel funcionalidad real no hay mucho impacto, pero internamente cambió todo.  Igual, lo importante acá es el nuevo público al que puede llegar.

Ah, y mañana jueves con Diego Mascialino (el otro gran desarrollador de Encuentro) hacemos la release party de esta versión... o sea, nos juntamos a tomar algo y jugar unos pooles en Wrangler's... el que quiere venir que venga, están todos invitados! (pero cada uno se paga lo suyo :p).

Read more
facundo


Con el gran Nico César hace tiempo definimos lo que serían los términos de un servicio que queríamos ofrecer. Por cuestiones varias de la vida, al final nunca terminamos armando algo que cumpla con todos estos requisitos, aunque arrancamos con el proyecto. Pero lo arrancamos en un repo privado.

Muchos meses después, viendo que jamás vamos a seguir eso, le pedí permiso para liberar el código y las especificaciones que armamos. Entonces, subí el código del proyecto a GitHub, y tengo reservado el dominio kilink.com.ar para ofrecer el servicio ahí.

Este proyecto, entonces, lo declaro abierto a la comunidad, para el que quiera participar, participe. Yo lo voy a empujar en el PyCamp de este año!


Descripción general

La idea es ofrecer un "espacio de colaboración de corta vida".  Algo así como un pastebin dinámico, pero que al mismo tiempo sea fácil de usar. En definitiva, algo útil.

Los kilinks van a poder ser editables, y cada nueva edición será hija del kilink editado (cada "submit" es un commit en un virtual versionado de código). Aclaración importante de terminología: el kilink es *uno solo*, que tiene distintas versiones; este kilink único tiene siempre la misma URL, el mismo "kilink id".

Habrá tener coloreado de código, como todos los pastebines, pero con dos grandes diferencias: detección y coloreado automático de tipo de texto, y edición coloreada.

La autenticación será lo más sencilla posible para que un visitante pueda decir "soy Fulano" en la menor cantidad de clicks posibles. La idea es ofrecer de esas autenticaciones que son tan automágicas ahora: openid, via twitter, o facebook, etc, o de última un "usuario/clave" por si la persona no tiene ninguno de los otros mecanismos fáciles.

No hay mecanismos de "compartición" de los kilinks: cualquiera puede acceder a cualquier kilink (en general por la URL que se comparte, pero también buscando, ver abajo).

La autoría del kilink y la responsabilidad sobre ese texto es del usuario que lo pegó ahí. Hay que declinar explícitamente responsabilidad.  El texto incluido en el mismo es de "dominio público" y puede ser mostrado/usado indiscriminadamente.

¿Por qué usar kilink?

  • Se puede usar anonimamente...
  • ...pero recuerda quien sos
  • Permite compartir un texto en pocos clicks
  • Se da cuenta del lenguaje
  • Es amigable a nivel de interfaz
  • Copia el texto directamente a tu clipboard
  • Se puede integrar el texto en donde quieras, por versión o siempre actualizado!


Facilidad de uso / primera impresión

El diseño tiene que ser simple y efectivo, orientado a bajar la barrera de entrada del visitante, el "costo" que el usuario tiene que pagar desde que llega a la página hasta que tiene el kilink en su portapapeles para pegarlo en otro lado. Esto se ve en varios detalles, por ejemplo:

  • que el cursor por default esté en el textarea destino
  • que el textarea, en lugar de estar 100% vacío, tenga adentro un "pegar acá" o algo similar en gris, suavecito, que desaparezca al pegarle algo.
  • que entre el textarea y el botón de submit no haya nada que distraiga
  • que el botón de submit se llame "crear kilink" o lo que corresponda
  • que pueda llevar la url del kilink creado sin tener que seleccionar un texto
  • que se pueda crear un kilink sin registrarse ni loguearse
  • botones para copiar automaticamente al clipboard: URL y texto del kilink
  • download as file
  • botón de imprimir, y CSS especial para que quede linda la impresión
  • etc

Visualmente, la página tiene que ser lo menos intrusiva posible, hay que minimizar la "polución visual", pero sin dejar de ofrecer la información necesaria (al hacer hover con el mouse, o en colores que no llamen demasiado la atención).

Otras características:

  • una URL o kilink ID que casi funciona como  URL corta, ej: kilink.com.ar/4g3jxd
  • el contenido del kilink debería ser indexado por google y otros buscadores


Contribución anónima

Se va a poder crear o editar un kilink sin tener que registrarse ni loguearse, pero va a aparecer "Anonymous" como autor (o algo más divertido).

Dicho esto, al usuario le conviene autenticarse, ya que de esta manera puede tener distintas ventajas:

  • Es autor de los tuits que cree (figura su nombre, digamos)
  • Como es autor, puede borrar sus tuits
  • Tiene en su perfil preferencias para adaptar mejor kilink a sus necesidades (habría que ver cuales :p )


Edición, versionado, diffs

Un gran detalle con respecto a la edición es que va a ser "in place". En otras palabras, en lugar de ofrecer un texto estático y un área nueva (como la mayoría de los pastebines), queremos mostrar el texto del kilink, y que el usuario lo pueda editar ahí mismo.

Obviamente, poder editar nos va a generar una estructura de árbol para las versiones. Este árbol será mostrado de forma explícita en la interfaz web, pudiendo el usuario hacer click en cualquiera de los nodos, viendo las distintas versiones del mismo kilink. Al mostrar las distintas versiones como nodos de un árbol se evita confundir al usuario con cosas como versiones "hermanas", "padres" o "hijas". El usuario ve la versión que tiene elegida, y si la edita aparecerá un nuevo nodo hijo del que estaba viendo.

También, se podrá elegir dos versiones, y pedir un "diff" entre las mismas.


Coloreado del texto y tipo del mismo

¿Qué es la autodetección? En lugar del funcionamiento "pastebin clásico" (de pegar un texto y elegir qué tipo de texto es), cuando el usuario pegue el texto se debe autodetectar qué tipo de texto y colorearlo en el momento según el tipo detectado. Obviamente, va a haber un combobox con todos los tipos, que cambia automáticamente al tipo autodetectado, pero que el usuario puede modificar para rectificar una autodetección erronea (obviamente, si el usuario cambia a mano el tipo de texto, el coloreado cambiará correspondientemente).

La "edición coloreada" es la habilidad de poder editar el kilink y que se vaya coloreando mientras se edita (recordemos que vamos a mostrar un sólo texto y el usuario podrá editar directamente allí).

Ambos comportamientos no son fáciles de lograr, pero facilitaría mucho la interacción del usuario, y quizás con herramientas como google-code-prettify no sea tan complicado.


Caducidad de los kilinks

Los kilinks serán permanentes, nunca vencen y siempre estarán online, a menos que el autor del mismo los borre explícitamente. Esta no-caducidad hay que comunicarla explícitamente, pero aclarando que no nos hacemos cargo si un kilink desaparece por problemas ajenos o propios, o por la baja del servicio.

Con respecto a que los usuarios puedan borrar kilinks, sólo será posible si el usuario es el autor del mismo.

Como esta es una acción poco probable (nadie borra un paste, a menos que se de cuenta que metió info muy sensible o demasiado privada), la idea es que sólo se pueda hacer desde la página de perfil del usuario, para no ensuciar la interfaz de uso "normal".


Herramientas

Hay que tener una colección de herramientas, entre ellas:

  • plugin para editores (seleccioná el texto → kilink, salta a la pag web con el kilink ya creado)
  • plugin para navegador (seleccioná el texto → kilink, idem)
  • linea de comando ("grep ERROR *.log | kilink" y este escupe la url de un kilink nuevo)
  • applet que permita meter una "ventanita para rápidamente crear kilinks" en cualquier lado
  • applet que permita meter un "visualizador de un kilink particular" en cualquier lado
  • applet que permita meter "mis últimos kilinks" en cualquier lado


Tags

Los kilinks tendrán tags asociados, los cuales se crearán de forma semimanual, y servirán como filtros.

Habrá un área cerca del texto donde haya una colección de tags. Al crear un kilink, al momento de pegar el texto, en esa zona aparecerán N tags sugeridos por el sistema (luego de analizar el texto), el usuario puede borrar alguno de esos tags, o agregar más.

Mecanismos para autosugerir tags:

  • lenguaje de programación usado (if any)
  • bibliotecas específicas usadas en el código


API

Se debe implementar una API HTTP sobre la cual se podrá hacer todo lo que se pueda hacer, al punto que la interfaz web usará esa misma API para trabajar contra el backend.

La API tendrá dos modos: autenticado y público. Para el modo público no se necesita nada en particular, pero no se puede hacer todo desde ahí (por ejemplo, borrar kilinks).

Idea: Debemos revisar las APIs de pastebin, snip y tinypaste, que son las más piolas que vimos, para diseñar de entrada algo que tenga sentido. También hay que ver cómo autenticar.

Idea: Ofrecer en el sitio bindings para distintos lenguajes de programación.

Read more
facundo

LocoLander


En el último sprint internacional que fui en el laburo se me ocurrió una idea a la que le fui dando forma. Se la he contado a varias personas, y la encontraron interesante.

Es un proyecto donde la idea es dar un servicio gratis a la comunidad de software libre. Esto va más allá que Python, pero si lo podemos hacer desde PyAr para toda la comunidad, no estaría nada mal.

Estoy contando acá entonces de qué va el proyecto, y también voy a poner algo de esto en la página del PyCamp, a ver si genera tracción para ser laburado este Junio.


Contexto

La idea surge de una necesidad en particular. Una gran idea dentro de un proyecto de software es "la revisión por pares" (peer review). En ese contexto, cuando uno escribe el código de un cambio, ese código no va directamente al trunk (main, o head, o lo que sea) del proyecto, sino que uno termina el branch, y lo propone a revisión.

Entonces vienen los "pares" y revisan el código, a veces sugieren mejoras (a veces desaprueban totalmente los cambios, puede pasar) y uno tiene que hacer cambios posteriores, a veces lo aprueban sin más trámite, etc. El punto es que en determinado momento el cambio está listo para ser integrado a trunk (main, head, etc.). La acción de "meter el cambio en trunk" se la denomina muchas veces como landear (el código aterriza en el branch principal del proyecto).

¿Cómo se landea un branch? Bueno, hay formas y formas. Pero la más correcta, o completa, o la que está realmente buena hacer es....

  1. agarrar el trunk más reciente, y mergear los cambios del branch en cuestión
  2. si no hubo conflicto, correr los tests de integración del proyecto, y cualquier serie de pruebas (por ejemplo, verificadores de código como lint o pychecker).
  3. si todo estuvo bien, landear el código (esto es, commitear los cambios al trunk)


¿Cual es el problema de esta secuencia? Uno solo: es mucho trabajo. Entonces, o nadie lo hace, o el que lo hace termina tardando mucho en hacerlo. Y ambas situaciones son malas.

¿Por qué malas? En el primer caso, donde no se hace toda la secuencia, se corre el riesgo de meter en trunk código que rompe el mismo, o que no cumple con los estándares de calidad del proyecto. En el segundo caso, el tardar es malo para la colaboración: (me ha pasado que) a veces alguien externo al proyecto sugiere un cambio y escribe el código, y los desarrolladores del proyecto ven que está todo bien, pero demoran todos estos pasos, y finalmente el resultado es que los cambios propuestos tardan semanas en entrar a trunk, lo cual sólo sirve como desmoralizador de la gente que quiere ayudar.

Ahora, imagínense que uno, como desarrollador del proyecto, pudiera decir "este branch está aprobado, está listo para entrar en trunk", y viniera un bot al ratito, y ejecutase todos esos pasos que indiqué yo antes.

LocoLander


El proyecto

En detalle, lo que LocoLander haría es armar un entorno donde uno luego registraría su proyecto, el cual sería revisado de tanto en tanto, y si hay un branch para landear, se realizarían todos estos pasos automáticamente.

Para lograrlo, se levantaría una máquina virtual con un determinado sistema operativo instalado, se instalarían las dependencias que el proyecto necesite (y declare), se copiaría trunk y se le incorporaría los cambios del branch a probar, se correrían luego todos los tests y verificaciones, y finalmente si todo está como corresponde, se meterían esos cambios en trunk.

Algunas consideraciones:

- Configuración para el uso: Cuando se quiera usar LocoLander, se deberá dar de alta el proyecto en la página de LocoLander, autenticando de alguna manera para luego poder ver los resultados de cada intento de merge, etc., indicando qué otras personas pueden ver esa información, e ingresando algunos datos del proyecto en sí.

- Entorno para el proyecto: La idea es que el proyecto lo declare y que el entorno se arme solo en función de las necesidades de cada proyecto. Por ejemplo, que instale un Ubuntu Precise, más estos cuatro paquetes con apt-get, más estos dos con easy_install. Esta información viviría en un archivo especial del proyecto, que LocoLander leería en el momento del armado del entorno. Toda la salida a stdout/stderr de esta etapa quedaría logueada para poder revisarse.

- Ejecución de las pruebas: LocoLander, una vez armado el entorno y con el código brancheado, ejecutaría un archivo puntual (que también está indicado en el archivo de configuración antedicho). Ese archivo puede correr las pruebas unitarias y cualquier control sobre el proyecto, pero la idea es que termina con el resultado en ok o en error, y esto determina si el branch está listo para mergearse a trunk o no. Como en el caso anterior, toda la salida de stdout/stderr estaría disponible para el usuario.

- Repositorios: Aunque tenemos mucha variabilidad en el cómo usarlos, la intención es que LocoLander sea multi-repositorio. O sea que trabaje con Launchpad, GitHub, BitBucket, etc. El trabajo de soportar varios varía más que nada en función de las determinades capacidades que tiene cada repositorio y qué API presenta para no tener que andar scrapeando HTML o haciendo cosas locas para laburar autenticado.

- Autenticación de LocoLander: Esto depende del repositorio en sí, pero en general sería así: LocoLander tendría un usuario en cada repositorio, y si uno quiere usarlo todo lo que tiene que hacer a nivel autenticación es "incorporarlo como colaborador", o "darle permisos de commit en el proyecto", o lo que corresponda en cada repositorio. Lo que no se haría de ninguna manera es poner en el sitio de LocoLander tokens de autenticación de los distintos repositorios. De esta forma, los riesgos de seguridad son mínimos: LocoLander no posee datos críticos de nadie, y el dueño de cualquier proyecto puede en cualquier momento sacarle los permisos de commit a LocoLander.

- Elección de qué branch está listo para intentar mergear: Este punto también depende de cada repositorio. Por ejemplo, en Launchpad, cuando se hace un "merge proposal", el mismo tiene un "estado" que cualquiera con derecho de commit puede poner como "Aprobado", entonces LocoLander revisaría eso. Hay otros repositorios que no son tan completos, pero siempre se puede solucionar con algún texto especial en los comentarios que se dejan. Creo que este es el punto de más variabilidad.

- Previniendo abusos del código que se ejecuta: Un detalle importante en el funcionamiento de LocoLander es que hace muchas cosas él mismo (levantar una VM en particular, instalarle paquetes, etc), pero en algún momento ejecuta código que está en el branch. O sea, le está dando el control a alguien más. ¿Qué podemos hacer para evitar abusos (que la máquina no se ponga a mandar spam, o que no sea un nodo de seti@home...) Creo que el punto crítico acá es que en el momento de tomar el control el proceso potencialmente maligno no pueda acceder a internet para nada, ni a ningún recurso fuera de la máquina virtual en sí. Después se pueden poner condiciones de uso, cortar los procesos que están corriendo más de N minutos, o revisar periódicamente lo que parezca raro, pero creo que ya cortando la posibilidad de conectarse a cualquier lado se está restringiendo bastante la posibilidad de mal uso.

- Recursos necesarios: ¿Qué máquina se necesita para que esto corra? Mi idea es que no mucha. Quizás el más crítico es la memoria: hay que levantar una VM y ejecutar un proceso adentro que debería disponer de al menos unos centenares de megas para correr. Y también se necesita bastante disco (para guardar snapshots de muchas VMs, principalmente), pero cualquier VPS medio pelo da mucho disco. A nivel de velocidad de la máquina en sí, no me jode mucho: si los tests tardan en correr, alpiste.

Creo que cubrí todos los puntos importantes a la hora de definir el proyecto, pero si alguien tiene una duda, es bienvenido a preguntar.

Read more
facundo

Launcherposta 0.9


Una nueva versión de este programa que es básicamente un ayudante para lanzar aplicaciones que uno lanza seguido (como poner launchers en el panel, pero como eso no existe más en Unity...).

La principal novedad es que ahora hay una manera muy fácil de buscar las aplicaciones instaladas en el sistema para agregarlas en el menú (en el diálogo de agregar una entrada, hay un botón que muestra todas las aplicaciones con sus iconos).

También muestra un mensaje de error (no sólo el código) cuando hay un error al ejecutar algo, ahora tiene una man page, y algún que otro detalle.

Supongo que esta es la última versión del programa, ya que tiene toda la funcionalidad que buscaba y no hay ningún bug abierto.

Más info, cómo descargarlo, etc., en la página del proyecto. Enjoy.

Read more
facundo

Un lanzador, posta


Una de las primeras cosas que extrañé fuertemente cuando empecé a laburar 100% en unity2d (con Precise) fue la posibilidad de poner iconitos con lanzadores en la misma barra que estaba el systray, el reloj, calendario, etc.

Yo ahí tenía un lanzador para editar el .txt con anotaciones de Canonical, otro con anotaciones para mi blog, para abrir con openoffice mi planilla de gastos, para ejecutar el mumble o el controlador de pulseaudio, etc, etc.

Claro, en unity2d el "launcher" es la barra vertical de la izquierda, pero por diseño tiene funcionalidades opuestas a lo que necesito. La más evidente es que abre "programas"... y si yo quiero abrir mi archivo de anotaciones del blog, para el launcher es abrir un gvim, y como tengo otros gvim abiertos para otras cosas, se confunde.

También se pueden abrir o lanzar cosas desde el "dash" (eso que aparece cuando uno hace click en la tecla que está entre el el control y el alt). Pero no funciona del todo bien si uno quiere abrir archivos (antes me los mostraba, ahora no... e incluso cuando me los mostraba, si tenía dos con el mismo nombre me mostraba ambos, y no sabía cual era cual). En el mejor de los casos, hay que apretar una tecla, escribir parte de lo que queremos ejecutar, esperar a que se refresque, ubicar visualmente lo que uno quiere, hacer click... lentísimo.

En fin. Había perdido la posibilidad de "facilmente lanzar programas o abrir archivos", y decidí hacer algo yo para reemplazarlo. Lo tomé también como excusa para jugar con Gtk3 (obviamente desde Python), ya que cambia mucho con respecto a Gtk2 y todavía no lo había usado para nada.  El resultado: LauncherPosta.

LauncherPosta es un lanzador. Realmente un lanzador. Uno que te deja ejecutar programas, o abrir archivos facilmente, :D.

LauncherPosta

Al ejecutar el programa lo que sucede es que aparece un iconito en el systray, el cual es la principal interfaz con el programa. Allí estarán las opciones que carguemos para ejecutar aplicaciones o abrir archivos.

También tenemos las opciones de Edit (para editar justamente el menu), para ver datos del programa, y para salir.

El detalle es (para la versión que acabo de liberar, ya con la funcionalidad básica):

  • Pone un ícono en el systray, para ser usado como interfaz principal
  • Automáticamente corrige la configuración de unity para hacer que permita poner el ícono en el systray
  • Haciendo click en el ícono te muestra Editar, Acerca de, y Salir
  • "Editar" permite agregar, borrar, o cambiar las opciones del menú, e incluso reordenarlas
  • Las opciones se componene por un ícono (opcional), una descripción, y el comando a ejecutarse
  • Haciendo click en esas opciones del menú ejecutará el comando configurado

En fin, más info y cómo instalarlo, en la página oficial. ¡Que lo disfruten!

Read more
facundo

Conferencias por dos


El sábado pasado fuí a la UbuConLA, la conferencia de Ubuntu organizada conjuntamente por Argentina y Uruguay.

La conferencia era dos días, el viernes más orientado a empresas, el sábado a usuarios finales. Yo fuí solamente el sábado, y di la charla "El futuro de Python en Ubuntu", una presentación que preparé puntualmente para ese evento.

Estuvo todo muy bien, aunque yo creí que iba a ir más gente. Hubieron un par de charlas bien interesantes... me gustó la de Anthony Lenton hablando del Ubuntu Software Center, la de Diego Sarmentero sobre Unity Lens, y la de Martín Eschoyez, sobre animaciones hechas con Blender (en particular, no dejen de ver la animación de apertura del evento, hecha por este muchacho).

Luego de que terminaron las charlas, y de las palabras y sorteos de rigor, nos fuimos todos a por pizza y cerveza al Orsai bar (ya a esta altura confirmo: lo único bueno del lugar es que tienen cerveza decente, y la onda... las pizzas son medio pelo).

Por otro lado, mañana miércoles participo del panel "¿Por qué programar libre?" (junto a Juan Manuel Schillaci y Álvaro Soliverez) en el 3er. Evento de Software Libre y Economía Social, en el Centro Cultural de la Cooperación. Va a estar bueno.

Read more
facundo

Cacheando DNS


(para los que no están al tanto qué es el DNS, una explicación rápida es que es un servicio que transforma los nombres que usamos los humanos para direcciones de servers (www.google.com, taringa.net, etc), a direcciones IP que la computadora necesita para acceder a dichos servers (173.194.42.17, 108.59.9.83, etc))

Dependiendo de los servidores DNS que utilicen, un query a los mismos puede tardar entre algunos milisegundos, hasta decenas o centenares de milisegundos.

Como un query DNS se ejecuta cada vez que algún programa tiene que convertir un nombre a una IP, esto puede hacer bastante lenta la navegación u otros programas que accedan a la red. Acelerar esto al máximo es siempre una buena idea. Y una forma fácil de acelerarlo es instalar localmente un "caché de DNS"... entonces si hay que resolver una dirección por primera vez, se tardará lo que se tarde en traer la IP desde el mundo exterior, pero las sucesivas veces el tiempo será virtualmente cero).

Lástima que en Ubuntu Precise, NetworkManager levanta el dnsmasq (que cachea DNS y hace otras cosas copadas) con la opción --cache-size=0, que efctivamente le dice que no cachee nada. Un estúpido. Encima, tiene esa opción hardcodeada en código (una mierda, ver bug #903854).

Los siguientes son los pasos para solucionar esto....

Editen el archivo de config de NetworkManager y borren la linea que dice dnsmasq.

    sudo gedit /etc/NetworkManager/NetworkManager.conf

Instalen dnsmasq (les va a dar error al tratar de arrancar porque hay otro proceso tomando el puerto, no se preocupen):

    sudo apt-get install dnsmasq

Maten todas las instancias de dnsmasq que encuentren

    ps -eaf | grep dnsmasq
    sudo kill ...

Editen el archivo de configuración:

    sudo gedit /etc/dnsmasq.conf

Descomenten las lineas de no-resolv y no-poll, y agreguen servers externos a mano, esas lineas quedarían...

    no-resolv
    no-poll
    server=8.8.8.8
    server=8.8.4.4

No las pongan en cualquier lado, funciona, pero les queda desordenado. Fíjense que el archivo de config las tiene por ahí. Finalmente, reinicien dnsmasq:

    sudo service dnsmasq restart

Para verificar que funciona lindo, pueden usar el comando dig, que resuelve nombres, y les dice cuanto tardó. Entonces hagan dig unadireccionquenohayanusado.com dos veces, y vean la diferencia entre ambos tiempos (pista: el segundo tiempo debería ser cero o casi cero).

Read more
facundo


Ya lo dije varias veces, pero siempre hay algún despistado... Encuentro es un simple programa que permite buscar, descargar y ver contenido del Canal Encuentro.

La versión 0.5 trae los siguientes cambios con respecto a la versión anterior:

  • Se puede autorefrescar la lista de episodios al inicio (si lo dice la config)
  • El filtro ahora funciona también sobre la columna de Sección
  • Soporta mejor los episodios que fueron borrados del disco
  • También hay algunas pequeñas mejoras y otros detalles corregidos

Más info (cómo instalarlo, etc), en la página oficial. ¡Que lo disfruten!

Read more
facundo

Star Trek, el juego


El otro día estaban charlando sobre jueguitos viejos en el canal de IRC de PyAr, y me acordé de uno que yo jugaba cuando iba al laburo de mi viejo, hace mucho mucho tiempo.

Tal juego es el Star Trek, donde uno maneja la USS Enterprise con la misión de cazar y destruir una flota de naves de guerra Klingon.

Como verán en la imagen siguiente, el juego es basado en texto, y se le van indicando comandos con determinadas teclas. El juego se desarrolla en una grilla de 8 por 8 (cuadrantes), cada uno divido en una grilla de 8 por 8 (sectores). Hay que ir paseando la Enterprise por el tablero, cazando Klingones (hay distintas formas de disparar, y hay que evitar que te maten), ahorrando energía o recargando cada tanto, etc. Acá hay mucha más data del juego.

Star Trek

¿Dónde jugaba este juego? En la NCR 8250 que programaba mi papá en el Buenos Aires Herald. Una máquina viejita... tenía casetera, lugar para dos discos rígidos removibles (de 10 MB cada uno, como 40 cm de diámetro), y corría un sistema operativo llamado IMOS III.

Para que se den una idea, esta es la terminal con la que mi viejo laburaba, mientras yo lo miraba (programaba COBOL!) o jugaba en otra terminal igual (obvio, era multiusuario!).

Terminal

Voy a ver si me bajo el juego para algún emulador que corra en Linux, y le dedico un rato :)

Read more
facundo

Encuentro 0.3


Encuentro es un simple programa que permite buscar, descargar y ver contenido del Canal Encuentro.

Notar que este programa no distribuye contenido de Canal Encuentro, sino que permite un mejor uso personal de esos contenidos. Por favor, referirse al sitio web de Canal Encuentro (www.encuentro.gov.ar) para saber qué se puede y qué no se puede hacer con los contenidos de ese sitio.

Encuentro

La versión 0.3 (todavía pre-alfa) trae los siguientes cambios con respecto a la versión anterior:

- Ahora podés poner al mismo tiempo a bajar muchos episodios (se encolan).

- ¡Soportamos botón derecho! Hacé click en cualquier episodio y fijate las opciones.

- Las descargas ahora pueden cancelarse.

- Menos dependencias: no más zope, y uso json de la biblioteca estándar.

- También corregí algunos problemillas, y limpié un poco el código.

La forma más fácil de instalarlo, si tienen un Debian o Ubuntu, es usando este instalador. Si quieren obtener automaticamente las nuevas actualizaciones, pueden suscribirse al PPA; en una linea de comandos hagan:

    sudo add-apt-repository ppa:facundo/encuentro

En cualquier otro caso, pueden usar el tarball para instalarlo. Recuerden revisar el archivo AYUDA.txt si tienen alguna duda de cómo usar el programa.

¡Que lo disfruten!

Read more
facundo

Primer versión de Encuentro


Encuentro es un simple programa que permite buscar, descargar y ver contenido del Canal Encuentro.

Notar que este programa no distribuye contenido de Canal Encuentro, sino que permite un mejor uso personal de esos contenidos. Por favor, referirse al sitio web de Canal Encuentro para saber qué se puede y qué no se puede hacer con los contenidos de ese sitio.

Logo

La versión 0.2 (que es la primera que anuncio) es una versión pre-alfa... se puede usar, descargar y ver videos, y debería funcionar todo correctamente, pero le falta mucha funcionalidad (por ejemplo, buscar).

- Se pueden encolar descargas de episodios, que luego irán bajando uno por uno.

- Permite una visualización directa de los episodios desde el programa.

- Se mantiene y muestra el estado de cada episodio.

- La lista e información de los episodios se descarga automáticamente del server, para un mejor arranque.

- Tenemos un sitio web 3.0! Pasen y vean: http://encuentro.taniquetil.com.ar/ (con botón de Donaciones y todo)

- Configuración de parámetros, con un wizard para realizar más fácilmente la configuración necesaria.

- Descargable como tarball (multiplataforma), con un instalador para Debian/Ubuntu, e incluso con un PPA para suscribirse.


La forma más fácil de instalarlo, si tienen un Debian o Ubuntu, es usando este instalador:

    http://launchpad.net/encuentro/trunk/0.2/+download/encuentro-0.2.deb

Si quieren obtener automaticamente las nuevas actualizaciones, pueden suscribirse al PPA; en una linea de comandos hagan:
en
    sudo add-apt-repository ppa:facundo/encuentro

En cualquier otro caso, pueden usar el tarball para instalarlo:

    http://edge.launchpad.net/encuentro/trunk/0.2/+download/encuentro-0.2.tar.gz


Recuerden revisar el archivo AYUDA.txt si tienen alguna duda de cómo usar el programa.

¡Que lo disfruten!

Read more
facundo

Enjuewemela 0.4.1


Enjuewemela es aún otro juego similar a los populares "Bejeweled" o "Diamond Mine". El juego se basa en alinear 3 o más gemas, tanto verticalmente como horizontalmente, intercambiando gemas adyacentes. Está (por supuesto) escrito en Python, usando el framework para juegos cocos2d.

Logo

La versión 0.4.1 trae un montón de nuevas características, y muchos bugs corregidos. Lo más relevante es:

- Hay un nuevo estilo de juego! Se llama Maluco! No dejen de probarlo.

- Tenemos un sitio web 3.0! Pasen y vean (con botón de Dnoaciones y todo)

- Rehice la parte de audio del juego, ahora es más portable, rápida, y debería funcionar sin que tengan que saber nada sobre eso.

- Ahora se instala de forma que pueden ejecutar el juego desde el menu de Aplicaciones.

- Puse un botón de Donaciones en la página web.

La forma más fácil de instalarlo, si tienen un Debian o Ubuntu, es usando este instalador. Si quieren obtener automaticamente las nuevas actualizaciones, pueden suscribirse al PPA; en una linea de comandos hagan:

    sudo add-apt-repository ppa:facundo/enjuewemela

En cualquier otro caso, pueden usar el tarball para instalarlo.

¡Que lo disfruten!

Read more
facundo


Cuando se hizo público el proyecto Ubuntu One, el único servicio que se presentó fue el de sincronización de archivos.

La comparación con Dropbox fue obvia... Dropbox era (y sigue siendo) el servicio de sincronización de archivos con más usuarios.

Si uno leía blogs y reviews del producto, una pregunta se repetía muchísimo: ¿cual era el punto de sacar otro servicio de sincronización de archivos? La respuesta era sencilla, eso era sólo el primer servicio de Ubuntu One, muchos más vendrían luego.

Hoy, Ubuntu One sigue teniendo sincronización de archivos en Linux y tiene un cliente en beta para Windows, y otro para Android (salido de beta hace unos días!), tiene servicio de venta de música, y la posibilidad de escuchar tu música en tu teléfono (la hayas comprado por Ubuntu One o no) sin tener que descargarla previamente (por streaming, digamos), sincronización de contactos, una base de datos en tu escritorio de Ubuntu que se sincroniza automáticamente y que se puede usar para lo que quieras, etc...

Pero lo que quiero resaltar es una característica pequeña pero que me fue muy útil hace un rato... resulta que hicimos los posavasos de PyAr, y como del último PyCamp sobraron unas monedas, decidimos regalarles un par a cada asistente a dicho evento.

La cámara de fotos estaba abajo, así que agarré el teléfono y le saqué una fotito a un posavasos que tenía a mano. Al toque, el cliente de sincronización de archivos de Ubuntu One empezó a subir la foto "a la nube" y bajó en la compu de escritorio, ví la notificación que había descargado un nuevo archivo, fuí a la carpeta, botón derecho sobre el archivo, "Publicar", lo cual me entregó esta dirección pública. Usé esa URL para mandar por mail a los asistentes del PyCamp (y de pasó la tuité). Ya que estamos, el posavasos es:

Posavasos PyAr

Esta suma de pequeñas características es lo que le terminan dando un valor interesante a un servicio, lo que hace que valga la pena y marque una diferencia a nivel de productividad cuando estás acostumbrado a usarlos.

Read more
facundo

CDPedia 0.7


Python Argentina (PyAr) se enorgullece de anunciar la versión 0.7 de la CDPedia.  Esta versión fue entregada a Educ.ar para ser distribuida en escuelas del todo el país, y ya está disponible para la descarga pública.

La CDPedia es un proyecto del grupo de usuarios de Python Argentina que permite acceder a la información de la Wikipedia en castellano sin necesidad de una conexión a Internet.  Se puede descargar libremente de la red y grabar a CDs o DVDs para repartirlos sin restricciones.  La CDPedia funciona en cualquier computadora, ya sea que tenga Linux, MacOS o Windows como sistema operativo.

CDPedia

La versión 0.7 de CDPedia en DVD fue recientemente entregada para su evaluación a Educ.ar quien, por medio de un acuerdo con Wikimedia Argentina y PyAr, está por distribuir esta enciclopedia libre en todas las escuelas de Argentina.

Esta misma versión, con contenido de Wikipedia a Febrero de 2011, ya está publicada para descargas libremente en versiones CD y DVD, se puede bajar directamente o usando un torrente. Y planeamos hacer una tirada de mil DVDs para tratar de iniciar algo viral y que llegue a toda la gente posible... te recomiendo (y te agradezco) que copies estos discos y los regales a tus amigos, familia y conocidos. La información debe ser libre, así mejoramos la calidad de nuestra educación. 

Para mayor información e instrucciones para la descarga, visitar la página de CDPedia.

Read more