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

Leer Más

Prompt para desarrolladores multi-scm (upgraded)

Encontre este post: http://gepatino.blogspot.com.ar/2013/01/prompt-para-desarrolladores-multi-scm.html (GRACIAS GABRIEL)

Y agregue el soporte para banchs de mercurial. UPDATE: separe svn y bazar para que funcione mejor

PS1='${debian_chroot:+($debian_chroot)}[\033[01;32m]u@h[\033[01;34m] w[\033[01;33m]$(get_repo_info) [\033[01;34m]$ [\033[00m]'

function get_repo_info {
    INFO=""
    DIRTY=""

    if [ "$INFO" == "" ] && [ `svn info 2> /dev/null | wc -l` -gt 0 ]
    then
        [ `svn status 2> /dev/null | grep -v '?' | wc -l` -gt 0 ] && DIRTY='*'
        INFO="⚡svn$DIRTY"
    fi

    if [ "$INFO" == "" ] && [ `bzr info 2> /dev/null | wc -l` -gt 0 ]
    then
        [ `bzr status -S 2> /dev/null | grep -v '?' | wc -l` -gt 0 ] && DIRTY='*'
        INFO="⚡bzr$DIRTY"
    fi

    if [ "$INFO" == "" ] && [ `hg branch 2> /dev/null | wc -l` -gt 0 ]
    then
        BRANCH=`hg branch 2> /dev/null`
        [ `hg status 2> /dev/null | grep -v '?' | wc -l` -gt 0 ] && DIRTY='*'
        INFO="⚡hg:$BRANCH$DIRTY"
    fi

    if [ "$INFO" == "" ] && [ `git branch 2> /dev/null | wc -l` -gt 0 ]
    then
        BRANCH=`git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* (.*)/1/"`
        [ `git status --porcelain 2> /dev/null | wc -l` -gt 0 ] && DIRTY='*'
        INFO="⚡git:$BRANCH$DIRTY"
    fi

    echo $INFO
}

Agregan eso a su ~.bashrc y van a ver algo como esto:

2013-01-12-000458_660x177_scrot

PD: si alguien se anima a seguir por branch de bazar aca hay un codebase
http://blog.grahampoulter.com/2011/09/show-current-git-bazaar-or-mercurial.html

Leer Más

PyCon Argentina 2012 – Track Científico

Pueden ver aquí todo el track científico de PyConAr 2012 en orden.
Hay que recalcar que lamentablemente la charla de Matías Herranz y Joaquín Tita sobre “Imágenes Satelitales” tuvo un problema y el video esta medio irrecuperable y no esta disponible aun.
Por otro lado agregue una charla que originalmente pertenecía a este track y termino quedando en paralelo (por puros problemas logísticos):
Poniéndole Lógica Peirceana a la Programación” de Javyer Der Derian

Que es de las pocas charlas que existen sobre ing. de software y psicología.

[youtube http://www.youtube.com/watch?v=videoseries?list=PLFQMOORsd0x4QcvwUwZVEh8BJCQlEhhKn]

Leer Más

Yatel – Exploración de perfiles para Minería de datos – PyConAr2012

Presentamos con Alejandro Garcia el proyecto Yatel en PyConAr2012

Yatel permite crear redes basadas en distancias entre perfiles de individuos y analizarlas multidimensionalmente mediante un proceso de exploración.

Yatel se desarrolló para el análisis de variabilidad genética del Mal de Río Cuarto virus (MRCV), una de las enfermedades más importantes del maíz. El análisis de la red de haplotipos (genotipos haploides) o perfiles del MRCV resultó muy exitosa y permitió detectar que la variabilidad del virus disminuyó con el tiempo. La hipótesis de se planteó después de la exploración de la red, inspirada en la visualización de la existencia de haplotipos por ambiente.

Leer Más

Snippet para usar un unittest bottle.py con un proceso separado

Necsitaba probar un api rest y se me ocurrio levantar bottle en un proceso separado dentro de un testcase; y necesite hacer todos este chicle.

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

# "THE WISKEY-WARE LICENSE":
# <jbc.develop@gmail.com> wrote this file. As long as you retain this notice you
# can do whatever you want with this stuff. If we meet some day, and you think
# this stuff is worth it, you can buy me a WISKEY in return Juan BC

import multiprocessing
import urllib2
import unittest

import bottle

class BottleTest(unittest.TestCase):

    def setUp(self):
        self.process = multiprocessing.Process(
            target=bottle.run,
            kwargs={"port": "8081"}
        )
        self.process.start()

        # wait until bottle process full started
        # si no ponen esto el testcase se va a ejecutar antes
        # que bottle este listo para recibir peticiones
        started = False
        while not started:
            try:
                urllib2.urlopen("http://127.0.0.1:8081/")
            except urllib2.HTTPError:
                started = True
            except urllib2.URLError as err:
                if err.reason.args[0] == 111:
                    pass
                else:
                    raise err
            else:
                started = True

    def tearDown(self):
        self.process.terminate()

    def test_something(self):
        pass

Leer Más

OUT: PET #5


Después de n meses de laburo, tengo el agrado de presentar la pet #5

http://revista.python.org.ar/ <<< aca ta

Hay notas variopintas en nuestra querida revista.

Existen algunos errores de imágenes en la versión PDF pero ya lo corregiremos a medida que avance la semana

Como todo release sale acompañado de las fuentes publicadas acá: https://bitbucket.org/leliel12/pet-published

Ahora voy a comenzar una migración masiva a sphinx y luego de eso voy a empezar con la PET #6

Leer Más

dPaste.com “API”

“API” for http://dpaste.com/

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

#
# THE WISKEY-WARE LICENSE
# -----------------------
#
# &quot;THE WISKEY-WARE LICENSE&quot;:
# &lt;jbc.develop@gmail.com&gt; wrote this file. As long as you retain this notice you
# can do whatever you want with this stuff. If we meet some day, and you think
# this stuff is worth it, you can buy me a wiskey in return JuanBC
#

# ==============================================================================
# DOC
# ==============================================================================

&quot;&quot;&quot;A Simple Client for http://dpaste.com/

&quot;&quot;&quot;

# ==============================================================================
#
# ==============================================================================

__author__ = &quot;JuanBC&quot;
__mail__ = &quot;jbc.develop@gmail.com&quot;
__version__ = &quot;0.1.1&quot;
__license__ = &quot;WISKEY_WARE&quot;
__date__ = &quot;2011/11/14&quot;


# ==============================================================================
# IMPORTS
# ==============================================================================

import os
import urllib
import urllib2


# ==============================================================================
# CONSTANTS
# ==============================================================================

DPASTE_URL = &quot;http://dpaste.com/&quot;

FORMAT_2_EXT = {
    &quot;Python&quot;: [&quot;py&quot;, &quot;pyw&quot;],
    &quot;PythonConsole&quot;: [],
    &quot;Sql&quot;: [&quot;sql&quot;],
    &quot;DjangoTemplate&quot;: [],
    &quot;JScript&quot;: [&quot;js&quot;],
    &quot;Css&quot;: [&quot;css&quot;],
    &quot;Xml&quot;: [&quot;xml&quot;],
    &quot;Diff&quot;: [&quot;diff&quot;],
    &quot;Ruby&quot;: [&quot;rb&quot;],
    &quot;Rhtml&quot;: [&quot;rhtml&quot;],
    &quot;Haskell&quot;: [&quot;hs&quot;],
    &quot;Apache&quot;: [],
    &quot;Bash&quot;: [&quot;sh&quot;],
    &quot;Plain&quot;: [&quot;txt&quot;]
}

EXT_2_FORMAT = {}
for k, vs in FORMAT_2_EXT.items():
    for v in vs:
        EXT_2_FORMAT[v] = k

# ==============================================================================
# FUNCTIONS
# ==============================================================================

def filename2format(filename):
    &quot;&quot;&quot;Retrieves the format of a given filename

    &quot;&quot;&quot;
    basename = os.path.basename(filename)
    if &quot;.&quot; in basename:
        ext = basename.rsplit(&quot;.&quot;, 1)[1].lower()
        return EXT_2_FORMAT.get(ext, &quot;Plain&quot;)
    return &quot;Plain&quot;


def paste(source, file_format=&quot;Plain&quot;, title=&quot;&quot;, poster=&quot;&quot;):
    &quot;&quot;&quot;Paste a given source code into dpaste.com with a given format

    &quot;&quot;&quot;
    file_format = &quot;&quot; if file_format == &quot;Plain&quot; else file_format
    data = urllib.urlencode({&quot;content&quot;: source,
                             &quot;language&quot;: file_format,
                             &quot;title&quot;: title,
                             &quot;poster&quot;: poster})
    conn = urllib2.urlopen(DPASTE_URL, data)
    return conn.geturl()


def copy(dpaste_id):
    &quot;&quot;&quot;Retrieve a code from a given dpaste id

    &quot;&quot;&quot;
    return urllib2.urlopen(DPASTE_URL + str(dpaste_id) + &quot;/plain&quot;).read()


# ==============================================================================
# MAIN
# ==============================================================================

if __name__ == &quot;__main__&quot;:
    print(__doc__)

Leer Más