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:


sábado, octubre 09, 2010

Amarok y la mega


Usando Amarok para escuchar el stream de la mega. Lo curioso es que el pugin de wikipieda me tiró la programación de la radio.
Cuesta acostumbrarse la versión 2 de este reproductor, pero pequeños detalles como estos están buenos :)

miércoles, agosto 18, 2010

PyQt4 y sus definiciones de interfase en XML

PyQt4 trae dentro de sus herramientas de dearrollo un diseñador de interfases muy cómodo para hacer layouts complejos y facilita su mantenimiento. Este diseñador genera unos archivos XML de extensión UI.

En PyQt4 existen básicamente 2 formas de utilizarlos, cargarlos dinámicamente o compilarlos con la utilidad pyuic. La primera variante es muy interesante para empezar, ya que con solo guardar y volver a lanzar nuestro script, veremos los cambios reflejados.

La segunda variante es la compilación. Generalmente utilizo un Makefile para automatizar esta tarea, y voy a postearlo para poder tenerlo a mano al volver al blog. Quizás a más de uno le sirva:

# Generar los uic de los ui

UI_DIR = "ui_files"
UI_FILES = $(shell find ${UI_DIR} -iname "*.ui")
PY_FILES = $(foreach file,${UI_FILES},ui_$(patsubst %.ui,%.py,$(notdir ${file})))

all: ${PY_FILES}


ui_%.py: ui_files/%.ui
pyuic4 $^ -x -o $@

domingo, junio 27, 2010

Velocidades de los medios de almacenamiento

Hoy se me dio por comparar las velocidades del disco de la notebook, mi pendrive Flash Voyager de Corssair y una memoria SD Kingston de 2GB.

La salida del hdparm fue la siguiente:
defo:~$ sudo hdparm -tT /dev/sda /dev/mmcblk0 /dev/sdb

/dev/sda:
Timing cached reads: 2164 MB in 2.00 seconds = 1082.96 MB/sec
Timing buffered disk reads: 186 MB in 3.02 seconds = 61.49 MB/sec

/dev/mmcblk0:
Timing cached reads: 1988 MB in 2.00 seconds = 994.66 MB/sec
Timing buffered disk reads: 36 MB in 3.09 seconds = 11.65 MB/sec

/dev/sdb:
Timing cached reads: 2128 MB in 2.00 seconds = 1064.50 MB/sec
Timing buffered disk reads: 76 MB in 3.07 seconds = 24.79 MB/sec

Con un poco de ayuda de shellscript y googledocs armé una comparación, creo que es útil para las personas que creen que el SD es la solución para transportar información. Son muy lentos. Tan lentos que a veces he visto a Windows hacer cosas extrañas (tampoco se necesita tanto para eso).


domingo, junio 13, 2010

Grabando desde Microfono Interno y Externo en XPS1530



Hace unos días necesité utilizar el micrófono interno de la notebook, pero nunca parecía funcionar desde KMix. Desde Gnome funcionaba perfectamente, pero no le iba dar el gusto a Org. Buscando en los foros de Ubuntu, encontré una respuesta interesante: Los microfonos siempre funcionan, pero el problema es el nivel de ganancia. Y era cierto, con un control de volumen de PulseAudio pude ver que estaban saturando. Y al saturar se enmudecen. Así que fue solo cuestión de ajustar a un nivel que no sature.
Les dejo unas capturas. El paquete en ubuntu/kubuntu se llama pavucontrol.
Para quien le interese, el micrófono interno es el 1 y el de la entrada de 3.5mm es el 3.

viernes, mayo 21, 2010

Buen Soporte de HP en Linux



Hace ya más de dos años adquirí con Keko una impresora HP P1005. Hace poco me la traje a mi nuevo hogar y si bien Ubuntu Lucid había detectado la impresora como unas tantas HP más en el trabajo, me pidió que baje los drivers desde HP.

En sourceforge conseguí una versión acutal de HLIP, que reemplazó la que viene con Ubuntu. La instalación fue la ejecución de un script, que quitó gran parte de los paquetes relacionados con hplip en ubuntu. Finalmente la impresora quedó funcionando.
Fue grata la sorpresa de encontrar que el forntend estaba hecho en Python y Qt4, acá les dejo una captura:
Update: El Scanner tambén funciona en las multifunción!, pero para quienes tengan una impresora de red, pueden hacer,
$ hpmakeuri direccion_ip #Esto genera una dirección hp:// de para XSane
$ xsane

Gracias Lalo por el tip

sábado, mayo 08, 2010

La ficha del docente corre en Wine


Dentro de poco comienza la acreditación por parte de la CONEAU de la UNPSJB (Universidad Nacional de la Patagonia, San Juan Bosco).
Uno de los requisitos es rellenar una ficha en un software llamado "ficha del docente". Como soy ayudante de Sistemas Operativos, tengo la obligación de completarla. Al descargarla y probar su ejecución en Wine, el emulador de windows, funcionó muy bien :).
El software pare estar hecho en Delphi con una base de datos propietaria llamada NexusDB, que parece ser un simil SQLite propietario con IDE.


jueves, abril 15, 2010

La UNPSJB en el Google Earth :o





Hoy buscando unas direcciones en el Google Earth, encontré que existía el edificio en 3D de el edificio de "aulas" de la UNPSJB Trelew.
Les dejo unas capturas.

domingo, abril 04, 2010

Django en el Wizard de PyDev


Hace poco actualicé PyDev sobre un Eclipse Galielo, creo que es la version 3.5.2. Al iniciar el asistente de proyectos, me encuentro con la grata sorpresa de que Django estaba incluido. Aquí algunas capturas:
Tan solo hizo falta agregar a la configuración de ejecución el parámetro runserver.
Y al parecer funcionó:

jueves, febrero 04, 2010

Python y GPUs??



Googleando por comentarios sobre el bidning de Nokia de Qt (PySide), encontré un hilo en StackOverflow. Uno de los post me llamó la anteción y encontré Arno Pähler y su sitio http://www.graviscom.com/. Al parecer desarrolla las interfases de alto nivel de un software que trabaja con CUDA/Havok? utilizando PyQt. Otra aplicación interesante :)

Crossplatform TextMate (CrossMates) ahora es Prymatex



Luego de un año desde el momento donde comenzaba con la idea de implementar TextMate sobre Python/PyQt4, retomo el proyecto. Esta vez no estoy solo, diegomvh, compañero de tesis y locurask me acompañan. Esta vez fue rebautizado: Comenzando con PyMate, se deformó en Prymate, para luego dar lugar a un X por UniX, con lo que tenemos PryMateX (del cual sale una linda sigla PMX).
El proyecto está hosteado en Google Code en un repositorio Mercurial. Quienes quieran comenzar a probar, pueden hacer lo siguiente:

hg clone http://code.google.com/hg/prymatex
cd src/prymatex
python main.py

Necesitan Python 2.6 debido a la plistlib y PyQt 4.5 debido a alguna funcionalidad extra con el manejo de QTabWidgets.

Hoy está en un estado alfa, porque aún no se completa la envoltura/wrapping de una librería de expresiones regulares con la cual están definidos los Bundles de TextMate, llamada Oniguruma.

Cualquier voluntario está invitado a participar, posteen comentarios o envien un mail a alguno de los miembros del proyecto!

martes, enero 05, 2010

Plist en Python

El formato para guardar archivos de muchas apps de Mac, como iTunes o TextMate es Plist, o Property List. Puede venir como XML o como binario.

En el proyecto CrossMates, la lecutura y escritura de este tipo de archivos es escencial. Revisando por ahí, como sincoronizar el iPhone en linux, encontré que existe una tal libplist, pero googleando un poco, en Python 2.6, es soporte ya es nativo! Si, si, se llama plistlib.

Cada día quedan menos excusas para continuar el proyecto, jaja.