javisantana.com

hg-wiki

Hace un tiempo he empezado a usar mercurial para mis proyectos personales. Mercurial es un sistema de control de versiones, al igual que subversion, pero distribuído, esto es, no necesitamos un servidor central donde subir nuestro código. Esto tiene muchas ventajas, no me voy a poner a enumerarlas, para ello podeis ir a la respectiva página en la wikipedia.

No hace mucho mercurial se ha empezado a usar en el desarrollo de python y google code ha dado soporte para este lenguaje, lo cual me dice que pronto empezaremos a ver más y más proyectos usándolo. Veremos si hay guerra git-mercurial (git es otro sistema de control de versiones usado en el desarrollo del kernel de linux, entre otros), viven en paz o alguno de ellos muere. Git ha tomado mucha fuerza, sobretodo por el empuje en el desarrollo web y gracias a webs como gihub, pero eso es tema para otro post.

Es muy habitual que junto al código de tu proyecto tengas otras cosas igualmente importantes como scripts de compilación, deploys, documentación, notas, etc, que normalmente están también bajo control de versiones. Además, se suele tener un sistema de tracking de proyectos acompañado (o integrado) un wiki -que siempre termina manga por hombro-.

Pensé que estaría bien tener un wiki integrado en el repositorio, al igual que con el comando hgserve tienes un servidor web integrado que te permite ver la información de forma mucho más gráfica del repositorio, por qué no un wiki?. Haciendo una búsqueda no he encontrado nada para mercurial, sí para git.

Como hace pocos días me encontré juno, un mini-framework web muy coqueto y me puse manos a la obra para probarlo, así que he creado hg-wiki, una herramienta que permite tener un wiki integrado en tu repositorio mercurial. Es un wiki muy simple, pero tiene lo justo para tener la información ordenada y vistosa.

El proyecto está alojado en bitbucket, un servicio de alojamiento de proyectos mercurial. Si quieres echarlo un ojo y probarlo: hg-wiki

Un ejemplo de como queda la cosa, primer el texto, después la imagen del resultado:

= hg-wiki =
== introducción ==
//hg-wiki// es una pequeña aplicación web que implementa un wiki especialmente creado para sistemas distribuídos. Todas las páginas son almacenadas usando mercurial, de forma que se puede aprovechar todas las ventajas que aporta este sistema:
* permite trabajar //offline//
* se pueden mezclar, tagear las páginas de la wiki

== instalación ==
La instalación es simple, primero hay que instalar las siguientes dependencias:
* [[http://www.mercurial.org/|mercurial]]
* [[http://www.python.org/|python]]
* setup-tools, necesario para poder usar easy_install, la herramienta que permite instalar librerías de forma simple, igual que apt-get.

Lo siguiente es instalar las dependencias python:
* [[http://github.com/breily/juno/|juno]], un pequeño framework web, merece la pena echarle un vistazo
* creoleparser, permite convertir de wiki a html
Para instalar cualquiera de estos basta con ejecutar

}

== funcionamiento ==

Si quieres empezar rápido ejecuta
}

Esto creará una carpeta llamada mywiki que no será otra cosa que un repositorio mercurial, por tanto se podrán ejecutar sobre él todos los comandos mercurial.

== créditos ==

autor: javi santana http://javisantana.com

gracias a los creadores de creoleparser, juno y github, de donde he ripeado miserablemente el css :)

El resultado:


(si encontrais familiar el estilo de la web, no es casualidad, el css lo he tomado del wiki de github, mis conocimientos web no llegan a tanto)

La sostenibilidad y otras cosas

No, no voy a ponerme a escribir que tenemos que cuidar el medio ambiente y hacer que nuestro ciclo sea sostenible, eso ya lo sabemos gracias a los anuncios de vehículos, material informático, alimentos, etc. No digo que no sea importante, pero hoy voy a hablar a nivel empresarial.

El otro día me comentaba una persona, en la típica conversación de bar, donde todo es sencillo, que era un pelín tonto, que debería estar moviendo nuestro pequeño negocio por todos lados, creciendo todo lo que pudiese y vendiendo lo que no está escrito. Era una persona que se dedicaba a la venta, así que es lógico que me tratara de dar unos buenos consejos.

Sin embargo, en estos momentos en los que me recomiendan crecer y moverme pienso en uno de mis objetivos, la sostenibilidad. Sería fácil aprovechar el “boom” y tratar de vender, quizás contratar gente, tratar de buscar inversión privada y crecer como la espuma, pero no sería sostenible y habría que empezar a despedir personas, tal y como están haciendo todas las empresas que no lo pensaron durante las vacas gordas. Creo que lo explican muy muy bien la gente de LinkingPaths en esta entrevista. Merece escuchar la entrevista completa, la primera parte sobre su filosofía y la segunda un poco más técnica (java vs ruby sin mojarse :P, git y sus proyectos).

Por otro lado, también le comentaba, que a mi no me interesaba ahora meterme en fregaos que no me gustan, yo estoy feliz con mi software, desarrollando cosas que tienen utilidad y haciendo lo que me da la real gana en el tiempo que me sobra (o que robo). La fábula del pescador y el empresario lo explican muy bien. Mi felicidad en este momento es hacer lo que quiera dentro de unos límites y no quiero la felicidad para dentro de unos años. Creo que no soy el único: de consultor a director de TI, Ángel Medinilla (punto 2) son dos buenos ejemplos.

Ya que estamos puestos, me marcho a trabajar a Pamplona el mes que viene :)

Como plancha un programador

Una persona normal, que no es del gremio metalúrgico-programador, para el noble arte del planchado de la ropa no piensa más que en coger la plancha, la tabla de planchar, la ropa y liarse a planchar y doblar.

Hoy he dicho a mi novia que planchaba yo en un intento de que no parezca que ella lo hace todo y hacerme creer por un instante que yo también participo en las labores domésticas (lo más lejos de la realidad). No tengo demasiada experiencia, así que me he planteado el problema como tantos otros:

Primer paso, preparación de herramientas y documentación
- preparación de tabla, la he tenido que nivelar para que no se moviese, es importante tener las herramientas a punto.
- enchufar plancha y comprobar los diferentes controles (temperatura y demás). He delegado (para que luego digan que los programadores no delegamos) en mi novia la tarea de llenarla con agua.
- He mirado en internet como doblar una camiseta de forma rápida para ahorrar tiempo. He encontrado como doblar camisetas de forma rápida con el estilo japonés.

Segundo paso, organizar el trabajo
- He analizado primero los riegos y he escogido lo más bloqueantes por orden de importancia: quemar una prenda y cansarme de planchar. Es fundamental no quemar una prenda, pero también lo es que me canse y deje las cosas sin planchar.
- Ordenar por prioridad las prendas que voy a planchar: primero he puesto una camiseta blanca sin mucho valor, por si quemo algo que no se pierda mucho. Después he ordenado la ropa dos criterios: el de “importancia que esté planchado” y por “interés necesario para plancharlo (aka dificultad)”, por tanto lo primero camisas, segundo polos, tercero pantalones y después camisetas blancas (a excepción de la prueba con la primera).
- Planchar, pero marcando una deadline de tiempo de forma que cada prenda quedara lo mejor posible dentro de ese tiempo.
- Tiempo de I+D: Ya que tengo varias camisetas iguales he intentado alinearlas y plancharlas a la vez. Fracaso total, pero de eso se trata el I+D ¿no?

Último paso, preparación para producción
- Doblado de ropa, las camisas directamente a perchas y luego he apilado la ropa poniendo encima lo que más me interesa que se mantenga sin arrugas.
- Armario, esperar que la plancha se enfrie y recoger instrumental.

Es triste, pero así es como he pensado cada uno de los pasos para planchar.

Opinión HTC Touch 3G

Hace un mes o así que tengo la HTC touch 3G. La compré con el objetivo de portar agroguía a HTC ya que he visto que muchas personas están interesadas en tener un sistema de guiado gps en su Smartphone.

El móvil es más pequeño de lo que pensaba, pero sigue siendo un buen tochardo para llevar en el bolso, lo cual es un punto muy negativo, casi bloqueante dependiendo de gustos. Por suerte es “fino” y se lleva dentro del pantalón fácil. Es lento como el solo, no llega al nivel de un Nokia N80, pero lo es. Es poco usable a la hora de hacer fotos y para la mayoría de las cosas, la pantalla es bastante pequeña para navegar y el navegador opera que trae es un verdadero truñazo, el GPS es malísimo… sin embargo tiene cosas que son una gozada.

Tiene una gestión de las llamadas buenísima, almacena TODAS las llamadas que has recibido, fechas, tiempos, contactos, puedes guardar notas sobre los contactos, sobre las llamadas, etc. Esto resulta especialmente útil cuando tienes muchos contactos, sobretodo de clientes. Ahora tengo un pequeño CRM dentro del móvil, donde anoto que he hablado con cada cliente, si les he prometido el oro y el moro, si he negociado un precio, si se ha quejado y lo más importante, sé cuando me ha llamado y le he llamado. Esto además se eleva a la n-esima si usas el teléfono como algo asíncrono, siempre tengo el teléfono en silencio y miro las llamadas cuando me apetece. Además la batería dura mucho si solo lo usas como teléfono y la conexión para usarlo como módem 3G es bastante rápida (te da como opción cuando conectas el USB).

En resumen, si estás pensando en comprartelo y estás interesado en tener los contactos bien ordenados, cómpralo, de otra forma tirarás tu dinero.

Filtro paso bajo con python

Es muy común tener un señal con mucho ruido, si es de un GPS más aún y normalmente interesa que los movimientos sean suaves. Bien sabido es que con un filtro paso bajo podemos atenuar el ruido y hacer que todo sea suave y maravilloso.

Si además no tenemos que filtrar al vuelo, esto es, tenemos ya toda la señal bien guardadita en un array, es posible usar el truco de teleco viejo, utilizar la fft. ¿Cómo? pues símplemente haciendo la transformada discreta de la señal, quitando los armónicos más altos y haciendo la transformada inversa.

Aquí el código, todo gracias a numpy :)

from numpy import fft

def low_pass_filter(x, samples = 20):
  ””” fft based brute force low pass filter “””
   a = fft.rfft(x)
   tot = len(a)
   for x in xrange(tot-samples):
   a[samples + x] = 0.0
   return fft.irfft(a)

El código seguro que es mejorable, numpy tiene métodos para trabajar con arrays de forma eficiente, etc, pero funciona a las mil maravillas y permite un control bastante lógico, cuantos más samples de la fft no sean 0, mayor será la variación de la señal. Para que luego digan que lo que se aprende en la carrera no sirve de nada…