martes, diciembre 29, 2009

Creación de ejecutables de Python

Cree un pequeño tutorial sobre como crear ejecutables con PyInstaller.
Está focalizado en PyQt4, pero aplica a lo que quieran generar.



Espero que les sea útil :)

Disculpen si pasé las pantallas demaciado rápido :S

miércoles, diciembre 16, 2009

Protopy: Liberada la tesis, y recibidos!!!

Finalmente terminamos la tesis de Aplicaciones Web Desconetadas. Trabajamos sobre Django, Gears y Firefox y logramos desconectar las aplicaciones con poca reescritura de código :)

En breve mandaremos a Ajaxian, los blogs de Django y a la lista de Python argentina, a ver si alguien se prende :)

Twisted, una pequeña introducción

Esta es una paqueña introducción a Twisted. Un framework de redes en Python, orientado a eventos.


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
from twisted.internet import reactor
from twisted.internet import protocol
from twisted.python import log

class MiProtocolo(protocol.Protocol):

def connectionMade(self):
print "Conexion establecida con" % self.transport

def dataReceived(self, data):
self.transport.write("Me dijiste: %s" % data)

def connectionLost(self, reason):
print "Conexion Cerrada %s" % reason


class MyFactory(protocol.ClientFactory):
protocol = MiProtocolo

def main(argv = sys.argv):
log.startLogging(sys.stdout, setStdout = False)
reactor.listenTCP(8080, MyFactory())
reactor.run()


if __name__ == "__main__":
sys.exit(main())

Para probar esto podemos crear un socket con netcat, la navaja suzia de las redes:

nc localhost 8080

y al escribir algunos caracteres y presionar Control-D veremos como trabaja esto de lo orientado a eventos :)

domingo, diciembre 13, 2009

LaTeX y lenguajes intermedios

El martes que viene (15 de diciembre) presentamos la tesis. Se trata de una extensión de Django para desconectar aplicaciones, aprovechando Gears y Firefox. El proyecto lleva ya más de 1000 commits, y tiene varios componentes:
- offline, una aplicación genérica autocontenida que sirve para desconectar
- Doff, una implementación de Django sobre una libería propia, llamda Protopy
- Protopy, una librería de JavaScript (1.7) que provee un sistema de módulos Pythonicos en JS, orientación a objetos Pythonica, DOM, Eventos y varios buitlins (similares a la API de Python).


Pero, más allá de un proyecto para la comunidad, es una tesis. Así que necesitamos hacer un documento. Comenzamos usando LaTeX, puro y duro, como suele decir uno de los profes.
Luego decantamos en Sphinx, que nos dio bastantes buenos resultados, aunque hubo que realizar varios hacks. Tuvimos que hacer varios arreglos de bajo nivel, la impresión que nos llevamos es queno existe aún un mecanismo simple de generación de documentos de tesis, lo que se puede traducir en que somos vagos para aprender latex... o que nos falta googlear más :S

Un proyecto que promete mucho es rst2pdf, de Roberto Alsina, un argentino desarrollador de KDE :). Quizás hubiese servido para generar la doc, sospecho que Lau lo puede estar usando.

Ahora estoy encarando las presentación del martes con Beamer. Veremos que sale :)


lunes, diciembre 07, 2009

Palmó la batería

Ya lleva un año y 7 meses la pobre y quedó agotada.
Una lástima.

defo:~$ cat /proc/acpi/battery/BAT0/*

alarm: unsupported
present: yes
design capacity: 5200 mAh
last full capacity: 1576 mAh
battery technology: rechargeable
design voltage: 11100 mV
design capacity warning: 520 mAh
design capacity low: 157 mAh
capacity granularity 1: 52 mAh
capacity granularity 2: 52 mAh
model number: DELL RN8878
serial number: 37502
battery type: LION
OEM info:
present: yes
capacity state: ok
charging state: charged
present rate: 1 mA
remaining capacity: 509 mAh
present voltage: 11852 mV

1576mAh = 30% de la capacidad inicial :'(

sábado, diciembre 05, 2009

Utilizando el servicio de Mercurial de Google

Hace mucho que no blogueaba, lo se... pero bueno, hoy es sábado por la mañana, vamos a ver que sale...

Finalmente migré de BitBucket mis repositorios por la limitación de espacio. BitBucket ofrece 150MB para los usuarios gratuitos mientras que Google Code ofrece 1GB.

Los proyectos que migré fueron el editor de texto aplazado aún (CrossMates), el proyecto de investigación sobre la red de microcontroladores e Internet (RestScada)y la tesis (Protopy), ya falta poquito para la entrega! SIiii! :)

Todavía quedan algunos proyectos en el BitBucket, como los trabajos prácticos del curso de postgrado de Tiempo Real.

Google Code nos permite no solo usar mercurial con una cuota enorme, sino que nos deja manejar la Wiki como un repo. Eso es bastante interesante, lo que anda haciendo falta es algo para previsualizar offline como va quedando la wiki. El markup que usan no es muy complejo, quizás se podría constituir un plugin para el editor de texto.

Me gustó mucho el servicio, cortito y al pie.

Bitbucket está hecho en Django y usa Pistón para realizar las APIs. El proyecto está interesante, pero el tema de la capacidad me estaba trayendo problemas, por más que parezca basura, nunca es buena deshacerse de la historia de tu repo, por lo menos sirve para la nostalgia y ver como evolucionan las cosas.

miércoles, junio 03, 2009

google code anuncia soporte para hg

En el sitio oficial de mercurial acabo de leer que en google code están comenzando a probar el soporte para hg. Todavía no está disponible para el público general, pero lo estará en breve :)
Actualmente utilizo bitbucket, que tiene una inyerfase web bastante bonita, pero el conjunto de repositorios de un usuario no puede superar los 150MB. No se si abandone bitbucket, pero está sedición de google sin duda contribuira a la popularidad de mi sistema de versiones preferido :)

lunes, mayo 25, 2009

Recuperar iphone cuando se rompe iTunes

Gracias a la aplicación ifuse pude montar el iphone a través del cable USB, y ver las carpetas "importantes" de mi usuario (mobile). La existencia del directorio iTunes_control me hizo sospechar de que se podría llegar a sincronizar el aparato a través de libgpod en linux. GtkPod pareció detectarlo, pero... rompio todo. Al punto que itunes (vía vmware) solo ofrecía reparar el teléfono reinstalando el SO. Aclato que en el teléfono lo único que no funcionaba era la aplicación de iPod. Googleando un poco vi que había alternarivas de sincronización en winblow$, así que me di a la tarea de ver si alguna reconstruia la db. Con la vetsión gratuita de media monkey se solucionó el problema. Agregué algunos temas el incluso me asistió en la recuperación de tapitas. Espero que amarok2 pronto pueda tener la funcionalidad que tenía con mi iPod nano. Por lo demás estoy conforme con el teléfono, ahora que soy iTunes independiente :)

jueves, mayo 21, 2009

iPhone

Luego de haberme bicicleteado bastante en movistar y habiendo recorrido varias de las casas de celulares de mi pueblo natal (forzado a cambiar por AMX), felizmente soy poseedor de un hermoso iphone blanco, donde llevó el correo, los feeds, agenda y desde el cual estoy escribiendo esta entrada.
Luego del jailbreak pude instalar nuevas apps, entre las cuales se encuentra una terminal y un servidor de ssh.
Quizás lo que mas llama la atención, cuando uno comienza a urgar por sftp, es la forma en la que se ha dispuesto el filesystem. Recuerdo un post donde Linus bardeaba la gerarquia estandard del FS de MacOS, creo que ahora entiendo por que. Aunque a pesar de todo parece que apple decidió almacenar todo en archivos propety list (xml) y en bases sqlite (mensajes de texto, agenda, libreta de contactos, etc), de manera de que habría forma de sincronizar el teléfono con mi SO predilecto.
Algo que aún queda por explorar es el tema del desarrollo para el aparato, donde quizás mi principal obstáculo es mi desconocimiento de ObjectiveC.

sábado, febrero 28, 2009

CSS orientado a Objetos

Una muy buena presentación que vi en Ajaxian.
En YUI muchos de los conceptos que se ven en estra presentación se aplican.
Es bueno tener estos conceptos presentes a la hora de crear CSS.


jueves, febrero 26, 2009

Una materia menos y LaTeX

Ayer rendí la anteúltima materia de mi carrera y aprobé :) La materia me gusta muy poco (algebra lineal) pero, saqué algo positivo: La profe que nos dió clase de consulta estaba interesada en aprender LaTeX (y yo también), así que aprendimos LaTeX. Algo sabía al respecto, que era un lenguaje para hacer PDFs hermosos, que tenía un buen soporte para fórmulas matemáticas y también podía producir presentaciones muy buenas con prosper o beamer (que conocí gracias a Santiago).
En #latex de irc.freenode.net me recomendaron texclipse, un plugin para mi IDE acutal, Eclipse. Pero muchos editores de latex dando vueltas (vi, emacs, lyx, kile, etc.)
LaTeX es un leguaje de marcas, en realidad, un conjunto de macros para un lenguaje de bajo nivel, llamado TeX.
Así como distros de linux, existen varias vairadades de LaTeX. Tetex es una no mantenida, MikTex una rama para windows, MacTex para Mac, y en GNU tenemos LiveTex, que es multiplataforma.
Estoy tratando de hacer correr LiveTex sobre la máquina virtual donde tengo instalado winblows, pero ya van 1.2GB!

Pero refelxionando un poco, la funcionalidad que da TeXclipse es básicamente esto:
while inotifywait -r -e modify mi_archivo.tex; do
    pdflatex mi_archivo.tex mi_archivo.pdf
done




jueves, febrero 19, 2009

Desarmando una MacBook Pro

En ifixit.com desarman una MacBook Pró, con un buen detalle de imágenes. Un detalle que no conocía, es que la batería no se puede reemplazar facilmente como en una laptop PC.


lunes, febrero 09, 2009

A shell to rule them all


Bash es una herramienta muy poderosa y el autocompletado que incluye en Ubuntu (creo desde 7.04) lo hace aún más fácil de aprender. Sin embargo, cuando comencé el proceso "pimp my bash", empecé a notar que la performance comienza a disminuir, algo que se vuelve notorio al arranque.
Muchas aplicaciones degradan su rendimiento con el toqueteo, es algo casi natural, pero muchas veces imperceptible o tolerable... pero en una herramienta tan fundamental para un usuario Linux, no va. Esperar 0.5 a 1 segundo por un shell en un procesador Core 2 Duo no va. Por lo menos para mi no.
Así que decidí dar un paseo por los otros shells. Probé ksh, csh y no no me convencieron. Tan solo ver que un golpe de tabulador desplaza ocho espacios a la derecha me dio mucha tristesa, aunque la velocidad de spawneo (perdonen el spanglish) era muy buena. Pocas horas más tarde, tcsh mejoró el panorama (si mal no recuerdo viene de BSD).
Finalmente di con zsh, que pregonaba un poderoso sistema de compleción (o se dice completado?).
Tras instalarlo, la compleción no estaba disponible pero entre la doc de gentoo y la wiki de arch, logré configurarlo. Velocidad de spawn muy buena, configuración bastante etendible, compatible con sh y hasta ahora con todos los scripts de bash que he probado... y con un autocompletado para sacarse el sombrero:
En vez de ir alternando entre las posibles opciones, las lista en las lineas inferiores al prompt, de manera de tener un pantallazo general de las opciones, pero no conforme con esto, muchos comandos tienen ayuda detallada:


Una sintaxis de for simplificada, no neceista do accion1; accion2; done:
for x in *; echo $x en vez de for x in *; do echo $x; done
Editor de historial mejorado cuando tipeamos comandos multilinea, corrige comandos cuando le pifeamos al orden de los caracteres, las instancias de zsh pueden colaborar un historial global y buscar en cada terminal (cosa que no pasaba en bash y realmente nunca comprendí muy bien cual era su filosofía con respecto a varias sesiones y un solo history) entre otras features que pueden leer en su FAQ.
Lo que les puedo recomendar es que lo prueben ustedes mismos.

sábado, febrero 07, 2009

Editor compatible con TextMate

Hace un mes comencé a crear un editor de texto (no una IDE) con PyQt4.
¿Por qué?
  • Me di cuenta que la parte jugosa de TextMate es Open Source, es decir, todo el conjunto de bundles que provee (sintaxis, snippets, comandos, templates, etc.) están en un repositorio SVN bajo licencia GPL.
  • Kate es genial, pero no es fácil de extender. Sobre todo cuando tu cerebro se olvida de los vericuetos de C++.
  • El concepto de proyecto de TextMate es muy bueno.
  • TextMate adolece de una consola integrada.
  • Falta un textmate para linux, más allá de los numerosos posts en varios blogs sobre pimp my gedit.
Los bundles de TextMate están hechos mayoritariamente en Ruby, aunque los hay en Perl, php y Python.
Todos estos bundles están guradados en un dialecto de XML llamado Property List (plist) y se ve más o menos así:

<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>content</key>
        <string>|yesno:"${1:arg}"</string>
        <key>keyEquivalent</key>
        <string>@|</string>
        <key>name</key>
        <string>yesno</string>
        <key>scope</key>
        <string>text.html.django</string>
        <key>uuid</key>
        <string>20F0FE5C-BF8C-4258-8F93-3D6F62447068</string>
</dict>
</plist
Que parecido a una serialización de un diccionario en XML, no? Ya hay módulos para decodificar plist.


La API entre el editor y estos scripts es muy similar a un CGI, lo cual me pareció genial. Para quien le interese, lo mejor es ver los screencasts en la pagina del creador de TextMate. Son varias vueltas de tuerca sobre la tradicional llamada a comandos desde un editor (como a Make, o correr un script sobre bash, etc.).

Comencé utilizando el componente QSciScinitilla, pero la creación de sintaxis se hace en un dialecto que desconozco.
Así que decidí usar el editor de texto nativo de PyQt4, con su subrayador de sintaxis.

Lamentablemente por otros proyectos he tenido que dejar el desarollo temporalmente, pero acá van unos screen-shots, de una alfa muy alfa:








Regex

Hace unos días le explicaba a un amigo sobre regex. En los días posteriores me puse a pensar que las expresiones regulares fueron algo que no comprendí o utilizé cabalmente hasta que llegué a Python, además de poder meter comentarios.
Creo que los grupos nombrados, que proximamente estarán en la implementación de referencia (PRCE) fueron la kiler feature.
Hoy estaba limpiando unos TODOs de una aplicación que integra SqlAlchemy, PyQt y Twisted (todavía no es una WIP pero va tomando forma) y encontré la siguiente linea:

(?P<type>\w*)://
(?P<user>[\w]+):
(?P<pass>[\w\d]+)@
(?P<host>[\w]*):
(?P<port>[\w]+)\/
(?P<db>[\w]+)
Que básicamente paresea cosas TIPO_DB://USER:PASS@HOST/BASE
Que se convirtió en esta, mejorada:

(?P<type>\w{2,15})://    # Tipo de la base de datos

(?:

   (?:

       (?P<user>[\w\d]{1,50})

       (?::(?P<pass>[\w\d]{1,50}))?

       @

   )?

   (?P<host>[\w]*)

   (?::(?P<port>[\d]{3,5}))?

)?\/   # Puso user:pass@host

(?P<db>[\w]+) # Nombre de la base, siempre es obligatorio

(?:\?(?P<params>[\w]*(?:\=[\w\d]+)))? # Parametros extra





Si bien todavía le falta un poco, creo que quedó modificable e incluso se puede modificar más.
Intenté codificar lo mismo en ruby y php, pero no es trivial lograr la misma funcionalidad.
Que bueno es haber encontrado Python, lo único que lamento es no haberlo descubrido antes :)


Nota: Todo fue debugueado con Kodos, que es otra killer app, que en algún momento pienso pasar a PyQt4, ya que su layuot no es muy widescreen friendly.