Implementación de un sistema de cómputo Map-Reduce sobre AMQP

Para el cierre de la materia de de “Aprendizaje automático sobre grandes volúmenes de datos“, se me ocurrio que seria interesante la creación de una infraestructura “a la hadoop” en puro Python y sobre AMQP. Bueno hice eso y el resultado lo pueden ver acá: http://poopy.jbcabral.org

Además del código presente un informe de como encare el proyecto que esta disponible acá: https://bytebucket.org/leliel12/bigdata_famaf/raw/tip/poopy/build/latex/poopy.pdf

Creo que el informe es bastante ideal para el que quiera entender AMQP o los conceptos muy básicos de Hadoop desde AMQP

Anuncios

usar la versión 2 o la 3?

existió en un pasado un proyecto de software que en su version 2.x fue muy utilizado. Cuando los developers lanzaron la versión 3, la cual defendian que era mejor (y probablemente lo era), nadie nunca la quiso usar. pasado el tiempo los developers decidieron escuchar la realidad de sus usuarios y crearon una nueva versión, que combinaba las características de 2.x y 3.x; se llamó: winamp 5.0

python 5 is comming?

PEP 8 – Un capricho

Hoy me dijeron que la guía de estilos de Python es solo “estilo” y no es importante para enseñar a programar a estudiantes

bueno… NO. (por que: es un lenguaje de programación dinámico, anteriormente había caos en el mundo pythonico, hay mucha convención en el código python, y leer código es parte importante de aprender a programar)

Los invito a los jr en Python que piensen eso que copien el siguiente código y lo hagan andar 🙂

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

class Cls(object):

    def __init__(self):
        a = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed" \
            "diam nonumyeirmod tempor invidunt ut la"
        self.attr_0 = 0
        self._attr_1 = 1
        self.__attr_2 = 3

    def __m0__(self):
        a = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed" \ 
            "diam nonumyeirmod tempor invidunt ut la"
        return "ok"

    def _m1(self):
        return "ok"

    def __m2(self):
        return ok

inst = Cls()
print inst.attr_0
print inst._attr_1
print inst._Cls__attr_2
print inst.__m0__()
print inst._m1()
print inst.__m2()


Global Game Jam 2013

El ultimo fin de semana participe con un grupo de amigos en el Cordoba Game Jam 2013. Desarrollamos “Malondon”, un survivor en el cual tu objetivo es ser un viejo Mala Onda que debe disolver parejas estereotípicas plantando evidencias falsas.

Lo se desarrollamos con Pilas (rama develop) y el código preliminar esta disponible aquí.

En unas 2 semanas publicare la versión mas pulida con su respectivo exe, dmg y demases.

Caipyrinha 0.2

Y tan rapido como esto hice una version 0.2 (por necesidades laborales)

 

Diferencias fundamentales: ahora los exclude group se instancian con el parametro exclusive y no con group (ya implementare los grupos propiamente dichos)
Aca tienen como instalarlo: http://caipyrinha.readthedocs.org

si lo instalan con este código:

# ex.py

import caipyrinha

parser = caipyrinha.Caipyrinha(prog="Your Program")
parser.add_argument("--version", action='version', version="%(prog)s 0.1")

@parser.callback(exit=0, exclusive="group1")
def first(flags, returns):
    '''Execute this option and exit'''
    print "bye bye"

@parser.callback(action="store")
def second(flags, returns):
    '''set his own return value with his parameter'''
    return flags.second

@parser.callback("--third", exclusive="group1")
def no_used_name(flags, returns):
    '''you cant use this argument with first'''
    print returns.second

import sys
parser(sys.argv[1:])

Tienen este resultado

2013-01-23-030740_1056x346_scrot

Aca tienen un link donde lo estoy usando:  http://bitbucket.org/leliel12/yatel/src/tip/bin/yatel

Caipyrinha 0.1

Si hay algo desordenado que me queda siempre son los parsers de linea de comando. Así que se me ocurrió caipyrinha

Que hace caipyrinha? te da un decorador para hacer argumentos de linea de comando a mi criterio… mas facilmente

Aca tienen como instalarlo: http://caipyrinha.readthedocs.org

si lo instalan con este código:

# ex.py

import caipyrinha

parser = caipyrinha.Caipyrinha(prog="Your Program")
parser.add_argument("--version", action='version', version="%(prog)s 0.1")

@parser.callback(exit=0, group="group1")
def first(flags, returns):
    '''Execute this option and exit'''
    print "bye bye"

@parser.callback(action="store")
def second(flags, returns):
    '''set his own return value with his parameter'''
    return flags.second

@parser.callback("--third", group="group1")
def no_used_name(flags, returns):
    '''you cant use this argument with first'''
    print returns.second

import sys
parser(sys.argv[1:])

Tienen este resultado

2013-01-23-030740_1056x346_scrot

Aca tienen un link donde lo estoy usando:  http://bitbucket.org/leliel12/yatel/src/tip/bin/yatel

Hermoseando Ipython

Me gusta mucho Bash. Si bien no soy usuario de ohmyzsh, me parece un proyecto super interesante. Y pensando en mi ultimo post me dije “debería haber un OhMyIpython”.

Así que me puse unas hora de laburo y lectura de documentación sobre plugins de Ipython, adapte el script de multiple scm como extensión, arme un repo y… voilà.

Acá esta el repo:  https://bitbucket.org/leliel12/ohmyipython

si lo instalan tienen este resultado:

2013-01-16-015651_653x650_scrot

En definitiva:

  • Informa que tipo de versionador tienen (git, mercurial, bzr y svn)
  • Si están en git y mercurial les dice en que branch están.
  • Si modifican un archivo versionado les agrega un * al final.
  • Mapea todos los comandos git, hg, svn y bzr a ipython.

El que quiera colaborar sera bienvenido