miércoles, diciembre 29, 2010

Primer Merge con Git

Tengo que admitir que me está costando adquirir la práctica en git que tenía en mercurial, en parte mucho me ayuda  oh my zsh.

Hoy ocurrió lo intevitable, diego y yo tuvimos que mergear lo que veníamos haciendo. Como git pull hace un merge por defecto, intenté ver que pasaba si lo hacia de manera verborrágica:

defo:prymatex$ git pull -v origin master
From github.com:D3f0/prymatex
 * branch            master     -> FETCH_HEAD
Renaming src/prymatex/app.py => src/prymatex/core/app.py
Auto-merging src/prymatex/core/app.py
CONFLICT (rename/modify): Merge conflict in src/prymatex/core/app.py
Automatic merge failed; fix conflicts and then commit the result.

Acá tenemos un renombrado y a su vez un conflicto entre las versiones. Git me invitó a relizar los arreglos, para esto necesitaba algo visual, como kdiff3. Esta heramienta se llama git mergetool.

defo:prymatex$ git mergetool 
merge tool candidates: opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse ecmerge p4merge araxis emerge vimdiff
Merging the files: core/app.py

Normal merge conflict for 'core/app.py':
  {local}: modified
  {remote}: modified
Hit return to start merge resolution tool (kdiff3): 


Finalmente cuando completé de parchar, hice un commit, que quedó mostró lo siguiente:

defo:prymatex$ git commit -m "merge"
[master b67d4b6] merge

Ahí pude hacer push del merge sin problemas:

defo:prymatex$ git push origin master 
Counting objects: 89, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (60/60), done.
Writing objects: 100% (61/61), 11.41 KiB, done.
Total 61 (delta 42), reused 0 (delta 0)
To git@github.com:D3f0/prymatex.git
   c4e1ac2..b67d4b6  master -> master

Y gitk me muestra lo siguiente:

Algo que también se puede apreciar en el navegador de versiones de github hecho con canvas :)

jueves, diciembre 16, 2010

Ponyguruma

Hoy jugueteando con Cython, después del último post... encoré que el binding de oniguruma ya existía!

$ hg clone http://dev.pocoo.org/hg/sandbox/ pocoo
$ cd poco/ponyguruma
$ sudo python setup.py install

y después en ipython:


In [1]: import ponyguruma


In [2]: r = ponyguruma.Regexp('(?[\d\w]+)\s(?\d{1,3})')


In [3]: m = r.match('jose23 21')


In [4]: m.groupdict
Out[4]: {'age': '21', 'name': 'jose23'}

Emula re y está mantenido por la gente de pocoo que tiene muchos proyectos conocidos, así que voy a etiquetar este post con reinventar la rueda :'(

Cython: Librería de Python para extensiones interactuando con C

Hace unos días estoy probando Cython, una librería que permite generar extensiones para Python escritas en un lenguaje muy parecido a Python, pero con la posibilidad de utilizar funciones de C.

Para instalarlo podemos usar pip o easy_install:

$ easy_install cython # o pip install cython

Un ejemplo muy sencillo, que envuelve a dos funciones de stdlib, que acabamos de hacer con v4n.


# b.pyx


cdef extern from "stdlib.h":
        int strlen(char *s)
        char *strdup(char *)




def longitud(s):
        return strlen(s)


def duplicar(s):
        cdef char *n = strdup(s)
        return unicode(n)



Es un ejemplo muy sencillo y que trata de demostrar que sencillo es envolver las funciones, ahora veamos como compilarlo. Para esto creamos un archivo setup.py con lo siguiente, suponeindo que nombramos a lo anterior b.pyx:


from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext


ext_modules = [Extension("b", ["b.pyx"])]


setup(
  name = 'b',
  cmdclass = {'build_ext': build_ext},
  ext_modules = ext_modules
)

Finalmente, para compilar, 

$ python setup.py  build_ext --inplace

Listo, ahora podemos hacer:

$ python
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import b
>>> dir(b)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__test__', 'duplicar', 'longitud']
>>> b.longitud('alfa')
4
>>> u = b.duplicar('una cadena')
>>> print u
una cadena
>>> u
u'una cadena'


Muy sencillo, hay una inferencia de tipos muy interesante para cuestiones básicas. En prymatex estoy intentando wrapear oniguruma en una forma similar a re, porque como ya mencioné en algún momento, las definiciones de sintaxis están hechas en este formato. Si les interesa chusmear, está por acá (hasta que aprenda a usar git submodule).

sábado, diciembre 11, 2010

Rendí el Certificate in Advanced English (CAE)

El pasado 8 de diciembre rendí el CAE de la universidad de Cambridge! Después de prepararme un año finalmente tuve el examen en el instituto Leif en Puerto Madryn.

Desde las 8:30 hasta las 15:45 con una hora y cuarto para comer.

Un nuevo título para el Blog

Ya hace mucho tiempo cierta gente se confundía el título con la propaganda de sprite, así que decidí cambiarlo a algo más adecuado y menos elaborado.


Sprite - Las cosas como son
Cargado por mazcue. - Mira más vídeos divertidos.

Ahora con un título más simple, espero darle un poco más de bola. Aunque esta es una promesa difícil de mantener. También agregué disqus que encontré en el blog de Roberto Alisna y que despues me di cuenta que estaba por todos lados, como en la documentación de jQuery

domingo, diciembre 05, 2010

Lector de Tarjetas Encore lee SIMs


Hace un tiempo, en la GoogleDevFest '10 me compré un lector de tarjetas de memoria, por que lamentablemente mi lector interno de la notebook solo funciona para memorias SD.
El artefacto en cuestión es el siguiente:


Lo que no me había dado cuenta es que podía leer las tarjetas SIM. Una forma práctica de tener un backup de los contactos sin recurrir a los servicios del operador de celular (que tienen costo).

La aplicación para linux que encontré es MonoSIM, que instalé desde getdeb. La plicación primero te pregunta que lector tenes, en mi caso no había mucha opicón:
Finalmente pude acceder a los contactos: