Nov 042012
 

Estoy algo liado montando una api para un pequeño proyecto mio, buscando que sea lo más cercano a RESTFUL por motivos laborales y por aprender cosas nuevas (entremedias estoy probando Emacs, que me esta costando un rato el cambio desde Vim).

Como framework estoy usando bottle, ya que siempre estoy usando Flask y quería probar otro distinto a ver qué tal. Y más adelante intentaré montarlo de manera asíncrona, pero eso para más adelante.
Continue reading »

Aug 012012
 

Algo que no se me habia ocurrido hasta que mi compañero me lo comentó es la activación automática del entorno virtualenv nada más entrar en el propio directorio, de esta manera ahorramos tiempo y problemas de no estar en el virtualenv apropiado.
Buscando un poco por la red, encontré este gist donde hacía parte de lo que queria, ya que no terminaba el virtualenv al abandonar el directorio, por lo que podria dar problemas al seguir en la misma linea de comandos y ejecutar otras cosas. De ahí que modificara el script para que al abandonar el directorio desactivara el entorno.

Para poder utilizarlo se puede poner el entorno en .venv en el directorio o crear un enlace simbolico (llamado igualmente .venv) si queremos tenerlo en otro lado. El script debe incluirse en .bashrc y ya solo falta cerrar e iniciar sesión.

El script en cuestión está en un fork del enlazado anteriormente.

Jun 152012
 

Al final no me ha servido ya que hay varias propiedades que no son legibles en el codigo legacy que estoy mirando, pero por si a alguien le sirviera copio una receta vista en SO para ver los contenidos de un objeto:


"""Visit http://diveintopython.net/"""
author = "Mark Pilgrim (mark@diveintopython.org)"

def info(object, spacing=10, collapse=1):
"""Print methods and doc strings.
Takes module, class, list, dictionary, or string."""

methodList = [e for e in dir(object) if callable(getattr(object, e))]
processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
print "\n".join(["%s %s" %
(method.ljust(spacing),
processFunc(str(getattr(object, method).__doc__)))
for method in methodList])

if name == "main":
print help.doc

En parte no lo uso por como está estructurado el codigo este que tenemos, de hecho finalmente una variación más sencilla y peor formateada me sirvió para lo que queria:

lista_negra = ['atributos problematicos aqui']
logWARN("%s" % ["%s: %s" % (val, getattr(self, val, "No legible")) for val in dir(self) if val not in lista_negra])

la lista negra es porque en este trozo de codigo concreto hay muchos ‘alias’ de funcion y al solicitar su valor ejecuta la funcion la cual ni siquiera esta en el contexto apropiado. Supongo que es lo que tiene que el objeto contenga unos 600 valores entre atributos, métodos y alias T_T

May 282012
 

Despues del “subidon” con ludum dare, me atreví a meterme en pyweek.
No ha sido tan excitante en algunos aspectos, ya que tenia mucho más tiempo y eso provocó el “luego lo hago”. La mayor parte del tiempo se me fue en pequeños errores (alguno de los cuales aun siguen existiendo) en el tema de colisiones. En general los consejos y criticas son los que yo mismo pensaba cuando subí la versión final.

Quizás me planteo para más adelante recuperar la idea y hacerlo de nuevo con otro engine… pero eso es hablar del futuro.

Mi participación en el pyweek

Apr 232012
 

Este fin de semana me he dado un homenaje tremendamente geek: he participado en un gamejam (explicacion en castellano) de 48 horas, en concreto el ludum dare en su 23ª edición. Las reglas son sencillas: dado un tema tienes 48 horas para hacer un juego completo tú solo (incluye código, animaciones, sonido, etc.)

No he podido entregar al final del concurso, aunque ciertamente no esperaba hacerlo. Este fin de semana he tenido varios compromisos que no me iban a permitir sacar el máximo de horas para el evento, pero estoy contento de tener algo jugable

Continue reading »

Apr 102012
 

En estos días, he intentado sacar algo de tiempo para un mini-proyecto que tenía en mente desde hace mucho y que recordé hace poco gracias a un artículo: “Como crear un bot de Twitter en Python” (titulo traducido libremente).

La idea es la de un bot de twitter al que mandarle torrents y que este se encargue de gestionarlos. Por ahora solo descarga el torrent y lo coloca en una carpeta, la cual está vigilada por utorrent que al detectar el nuevo archivo lo pone a la cola. Como efecto extra, también descarga archivos que no sean torrent, pero en este caso no se añaden a la lista y se quedan ahí.

El proyecto está alojado en github bajo una licencia BSD de 3 clausulas (que podeis trastear con él todo lo que queráis mientras sigáis diciendo de donde salio ;) ). Esto me recuerda que tambien tengo que añadir la licencia al proyecto :P
Continue reading »

Mar 142012
 

Actualmente estoy mirando implementaciones de las curvas de Peano y Hilbert y me he encontrado en la lista de python-argentina con una curiosa implementación de una curva de Hilbert en un tweet (es decir en 140 caracteres o menos):

    from turtle import *
    l=left
    f=forward
    def h(n,a):
        if n:n-=1;l(a*3);h(n,-a);f(4);l(a);h(n,a);f(4);h(n,a);l(a);f(4);h(n,-a);l(a*3)
    h(6,90)

Además no conocía el módulo de la tortuga

Mar 012012
 

Para poder generar automaticamente etiquetas para nodos (aunque valdria para cualquier otra cosa) he hecho un generador automatico sencillo que va dando strings de texto:

    def generador_etiquetas(self):
        '''genera etiquetas,primero minusculas, luego mayusculas y finalmente
        digitos'''
        for a in string.lowercase:
            yield a
        for A in string.uppercase: #cuando termina con las minusculas, pasa a las
                                 #   mayusculas
            yield A
        n = 0
        while 1:
            n += 1
            yield str(n)

El while 1 en vez de while True, es porque al parecer es ligeramente más rapido (imagino que por alguna optimización del compilador del interprete)

Jan 272012
 

Hoy, dia ocupado como pocos en el trabajo (pero de eso igual hago otra entrada), me sorprendian un monton de tuits hablando de censura, cosa que no entendia y me comenzaba a temer una nueva vuelta de tuerca (a mucho peor) de la conocida “Ley de Sinde”. Pero no, era el anuncio por parte de Twitter acerca de su nueva politica. En resumidas cuentas viene a decir que en base a legislación y bajo peticion expresa de una entidad competente (entiendo que es alguien designado por el gobierno) no serán visibles los tuits que incumplan algun tipo de ley (y en ocasiones cuestiones morales/culturales).
Esto, me ha hecho pensar y mucho en lo que estaba poniendo la gente, sobre como se acababa el mundo, que si a mi no me censura nadie, que menuda mierda de red, etc. Y cada vez lo entendía menos. Quizás lo que mas me ha hecho pensar es la opinion generalizada de que twitter se habia acabado como herramienta de coordinación de movimientos activistas, especialmente explicada en los medios más tradicionales (periodicos y webs de noticias que necesitan tiempo antes de dar una noticia… hum, competencia de twitter, diria)

Pero lo cierto es que yo lo estoy viendo de otra manera, como una herramienta más potente de cara al hacktivismo: ahora un chino podría escribir tranquilamente en formato de 140 caracteres sin el temor a que sus vecinos o amigos le denuncien a un regimen, porque su tuit será borrado de su alrededor y sin embargo será accesible al resto del mundo, poniendo de relieve situaciones que se conocen vagamente por el miedo a las consecuencias. Y donde digo un chino, digo un cubano o tantos otros bajo politicas donde la libertad de expresión no es un derecho.
Y sigo pensando que seguirá siendo una herramienta magnifica de organización, porque para bloquear un “trending topic” primero habrá tenido que serlo (me acojonaré si empezamos con los precons de minority report, pero mientras tanto…) y una vez ha sido TT las formas de organización ya no pasan por tuits sino por multiples medios (IM, noticias, webs, foros, de palabra, etc.)

Mientras no haya un chivatazo por parte de Twitter a las autoridades de turno, creo que aplaudiré este paso y su conversión a una mejor herramienta de hacktivismo.

Y de paso mencionar otro post interesante de Ricardo Galli (creador de meneame) que ademas me ha puesto en marcha para escribir este.