viernes, julio 08, 2011

Un gran amigo que también es un grande

Me acaba de llegar este mail:

   Fecha: Tue, 28 Jun 2011 18:06:41 -0300
      De: Gustavo Rossi 
Asunto: Lifiano premiado
    Para: gustavo

La semana pasada, Sergio Firmenich obtuvo el best paper award en la 
International Conference on Web Engineering que se realizo en Chipre 
por el trabajo:
A framework for concern sensitive client side adaptation
(S. Firmenich, M . Winckler, G. Rossi y S. Gordillo)

Grande Sergio!!!!!

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.



----- Terminar mensaje reenviado -----



Sergio, o para los amigos Keco, fue un compañero de la UNPSJB, de trabajo y es un gran amigo, y hoy está haciendo su doctorado en La Plata.
Me pone muy contento su logro en el campo de la investigación.
Estoy leyendo el paper, que encontré publicado en: http://www.springerlink.com/content/n3167p807121r318/

¡¡¡Felicitaciones Keco!!!

miércoles, julio 06, 2011

Custom Delegates en Prymatex

MVC es un patrón de diseño muy conocido, que ha sufrido algunas bastardizaciones, como es el caso de MTV en Django y MVD en Qt.
Hoy quería comentarles como estamos usando esta última en Prymatex.
Como muchos de ustedes sabrán, Prymatex está escrito sobre PyQt4 y recientemente comenzamos a utilizar modelos para almacenar tanto la información de los Bundles, como los temas y variables de entorno (un elemento muy utilizado a la hora de ejecutar los diferentes Bundle Items). Estos modelos responden al concepto Modelo/Vista/Delegado de Qt.
Tods saben a que se refiere modelo y a que vista, pero que es un delegado? Un delegado sirve para permitir a la vista modificar el modelo y además permite hacer widgets especiales (un ejemplo popular para quienes utilcen KDE es el estrellómetro de Amarok).

Utilizamos delegates para hacer clonar la interfase de configuración de temas de TextMate:

Salvando las distancias, mediante delegates pudimos emular en cierta forma el listado:


El código utilizado está en github.

miércoles, marzo 09, 2011

Errores en la compilación

Este finde largo estuvimos haciendo algunos avances y reingenierías sobre Prymatex y definiendo un posible calendario tentativos de releases.
Yo aporté gran parte de los archivos UI (XML con definición de interfases de Qt). Como todos habían migrado a KDE 4.6.1, para no quedarme atrás usé los repositorios experimentales propuestos por kubunut. Durante un code sprint con Org, me di cuenta que mi pyuic4 había dejando de funcionar!!

El error se reporta como el siguiente:


Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.6/PyQt4/uic/port_v2/invoke.py", line 15, in invoke
    exit_status = driver.invoke()
  File "/usr/lib/pymodules/python2.6/PyQt4/uic/driver.py", line 40, in invoke
    self._generate()
  File "/usr/lib/pymodules/python2.6/PyQt4/uic/driver.py", line 68, in _generate
    self._opts.pyqt3_wrapper, self._opts.from_imports)
  File "/usr/lib/pymodules/python2.6/PyQt4/uic/__init__.py", line 134, in compileUi
    winfo = compiler.UICompiler().compileUi(uifile, pyfile, from_imports)
  File "/usr/lib/pymodules/python2.6/PyQt4/uic/Compiler/compiler.py", line 19, in __init__
    CompilerCreatorPolicy())
  File "/usr/lib/pymodules/python2.6/PyQt4/uic/uiparser.py", line 91, in __init__
    self.factory = QObjectCreator(creatorPolicy)
  File "/usr/lib/pymodules/python2.6/PyQt4/uic/objcreator.py", line 61, in __init__
    self._cwFilters.append(plugin_locals["getFilter"]())
  File "", line 22, in getFilter
ImportError: /usr/lib/pymodules/python2.6/PyKDE4/kdeui.so: undefined symbol: _ZTI13KRatingWidget


Esto no era bueno, simplemente agregamos un return en la carga de plugins, quedando de esta manera.
Un hack feo, pero solucionó el problema :)

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