Citas 011

2010 abril 3
by rafadc

An infinite number of monkeys typing into GNU emacs would never make a good program.

- Linus Torvalds

La importancia de los proyectos personales

2010 abril 1
by rafadc

Una cosa de la que me voy dando cuenta cada vez mas es de la importancia de tener proyectos personales de cosas relacionadas con tu trabajo pero no exactamente iguales. Cada vez que paso un tiempo metido en una historia nueva me voy dando cuenta. Se me ocurren un montón de motivos.

  • Practicar: Preguntadle a un músico su rutina diaria. Seguro que no se pasa el dia escribiendo canciones sino que muchas veces se dedica a hacer ejercicios para pulir su técnica. Lo mismo nos pasa a los desarrolladores. Necesitas haber escrito primero el test antes del código para acostumbrarte, necesitas aplicar patrones de diseño una buena cantidad de veces para darte cuenta cuando hacen falta y cuando no.
  • Experimentar: La práctica también sirve para experimentar y probar maneras mas eficaces de hacer las cosas o comprobar de primera mano que era una mala idea.
  • Saltar sin red: Otra de las cosas muy interesantes que se nos ofrecen es la posibilidad de realizar tareas que normalmente en nuestra empresa no nos tocan. Cuando llevas un proyecto sólo tienes que conocer infinidad de detalles. Trabajando en grupo puedes abstraerte y ser sólo una pieza del engranaje.
  • Cambiar de perspectiva: Muchas veces en nuestros pequeños proyectos resolvemos los mismos problemas que en nuestro trabajo de otras maneras. Esto nos ayuda a cambiar de perspectiva.
  • Empatizar con otras labores: Cuando tenemos un proyecto propio llevamos todas las labores del mismo haciéndonos cargo de otros roles que no son el nuestro lo que nos ayuda a comprender mejor los problemas que pueden tener nuestros compañeros en la misma situación y hacerles la vida más sencilla.

Es curioso pero creo que el mejor I+D de una empresa de IT es dar cierta libertad a los empleados. Si hay buena base es fácil que surjan buenas ideas.

El curioso comportamiento de class en Ruby y el monkey patching

2010 marzo 30
by rafadc

Una de las características que hacen a Ruby más útil es la capacidad para dinamizar el lenguaje. Una de ellas son las Open Classes y es, creo, lo más chocante cuando te enfrentas por primera vez a código Ruby. Vamos a explicar lo que signifca el concepto de Open Classes con un ejemplo sencillísimo.


class String

def myMethod

printf "Hi!"

end

end

"A string".myMethod

Como podeis ver es fácil extender clases existentes añadiéndoles nuevos métodos. Seguro que si habéis utilizado alguna gem vereis que se añaden métodos a clases ya existentes como por ejemplo algún comparador. Pues bien, así es como se hace.

Seguro que muchos según habéis leído esto os habéis llevado las manos a la cabeza pensando: “¡Recristo! ¡La que se puede armar con esto!”. Pues tenéis razón. Con esto se pueden armar unos circos importantes. Si no se utiliza con control puedes acabar con una clase cuyo código está expandido entre cientos de ficheros y cuyo comportamiento nunca está claro ya que la misma función ha sido sobrecargada en ciertos de sitios. A la práctica de abusar del dinamismo de lenguajes como ruby o scala se le suele llamar monkey patching.

Well, I was just totally sold by Adam, the idea being that if it walks like a duck and talks like a duck, it’s a duck, right? So if this duck is not giving you the noise that you want, you’ve got to just punch that duck until it returns what you expect.

- Patrick Ewing (no es el jugador de baloncesto)

Hay que pensar en las open classes como “peligrosas” al menos pero sin ellas no sería ni mucho menos fácil crear maravillas como el Active Record de rails.

Citas 010

2010 marzo 27
by rafadc

Como todo programador de juegos sabe, los tres tipos de alimentos son: Fritos, Cheetos y Doritos

- Satoru Iwata

La técnica del Pomodoro. El tomate siempre en su punto.

2010 marzo 25
by rafadc

Para la gente que tenemos una importante tendencia a la procrastinación es importante una serie de técnicas que nos ayudan a mantenernos concentrados en lo que estamos haciendo en ese momento. Un buen ejemplo de ello es la técnica del pomodoro.

En resumen podemos decir que esta técnica consiste en que al principio del día hacemos una lista de tareas que tenemos que hacer para ese día. Después elegimos una y le asignamos los siguientes 25 minutos. Eso si, lo hacemos sin ninguna distracción. Apagamos la mensajería instantanea, los mensajes de correo electrónico, etc… y nos mantenemos al 100% en acabar esa tarea. Una vez terminado el periodo de tiempo descansamos unos 5 min. y aprovechamos para chequear el mail o los mensajes de IM. Una vez terminado esto volvemos a empezar.

Yo de tanto en cuando lo aplico, especialmente cuando tengo problemas de concentración. Seguro que a mucha gente le viene bien. Incluso hay una web que tiene diversas plantillas en PDF para listas de tareas, más información sobre como aplicarla, etc…

Hay muchas webs con timers y tal para esto pero yo me he hecho un pequeño timer para google wave para ir centralizando mi organización personal en Wave. A ver que tal.

De momento ni wave de pomodoro se ve así.

Solo son unas pocas lineas de Javascript que cualquiera puede tirar. De todos modos si alguien quiere usarlo puede añadir el gadget de la url: http://www.micubiculo.com/wave/timer/timer.xml

Referencias:

Pomodoro technique: http://www.pomodorotechnique.com/

Unicode

2010 marzo 23
by rafadc

Hay muchas maravillas tecnológicas que nos olvidamos que están ahí. Es en ese momento en el que sabemos que han alcanzado la maduez. Y como están allí pues nunca te preocupas por ellas. Hasta que te preocupas. Entonces normalmente estás jodido… En la empresa nos hemos encontrado con que determinados ficheros perdían el encoding y tuvimos que estandarizar el UTF-8 porque se armaban unos pollos bastante ricos. En ese momento me di cuenta que no tengo ni puta idea de esos temas. Como eso hay que solucionarlo… ¡al turrón! En el principio de los tiempos fue EBCDIC. Ya que todo el mundo tecnológico era angloparlante, reducir la codificación a 8 bits de caracteres anglosajones no parecía una mala idea. ¿Hay vida más allá de USA? No lo creo… Con ese encoding podemos utilizar un juego de caracteres ASCII para representar todos los caracteres. De hecho nos vale con 7 de los 8 bits para representar todos e incluso nos reservamos los 32 inferiores para caracteres de control.

Incluso nos podemos encontrar con macarradas como Wordstar que utilizaba el bit sobrante de ASCII para indicar si una letra era la última de la palabra. ¡Señor, que gitanada! Eso si, era lo que había así que…

Todo el mundo era feliz y podían usar su ordenador. Incluso en Espa… en Espa……. ¡Joder! ¿donde está la ñ? Seguro que ahora todos sois muy listos y estais pensando en que es tan fácil como utilizar el bit sobrante para ampliar el espectro de caracteres de 127 a 254… ¡pues pensais igual que la gente que tuvo esos problemas! ¿Que hacemos entonces con el árabe con sus montones de caracteres? ¿Y que hacemos con el ruso? Entonces surgen los codepages que gestionan esos 128 caracteres que tenemos por encima del 128. Hay un codepage para ruso y así mete sus caracteres, otro para griego y meterán sus caracteres, otro para hebreo, etc… Entonces logramos que se puedan mostrar caracteres de distintos idiomas. Eso si, uno de cada vez. Si estamos con la máquina en hebreo no podremos mostrar los caracteres rusos y viceversa. Bonito, ¿verdad? El caso es que justo cuando el mundo se volvía loco se inventó unicode y terminó de completar la locura. Unicode se creó para soportar todos los posible idiomas del mundo mundial. Eso es pedir mucho. Y para ello tienen que hacer bastantes filigranas. En unicode cada letra está representada por un code point. La A mayúscula tiene el suyo, la a minúscula el suyo… así que si quieres escribir la letra que sea solo tienes que referenciar a su code point.

El libro con el standard de unicode. No está mal pero el final es predecible.

Aquí es donde todo empieza a ponerse más pantanoso así que voy a hacer un resumen muy por encima. Cada diferente encoding de unicode (ya que hay un huevo de encodings diferentes: UTF-7, UTF-8, UTF-16…) tiene un número arbitrario de planos que contienen los codepoints, eso si, tiene que ser múltiplo de 16. Cada plano contiene 65536 (256×256) code points. El primero de esos planos se llama Basic Multilingual Plane (BMP) y es común a todos los posibles encondings de unicode.

Entonces referenciaremos cada code point con un U+<posición del code point>. Hay una bonita referencia del Basic Multilingual Plane en el sitio web de unicode. Así, si queremos referencia el caracter a minúscula latina utilizaremos U+0251. Si consultais la referencia vereis que ya en el BMP hay caracteres bastante extraños como U+2615 (HOT BEVERAGE= tea or coffee, depending on locale) o U+26FF (WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE = Japanese self-defence force site).

Como esto era poco lioso, cuando se decidió el standard de unicode se permitió que la codificación de los bytes pudiese ser big endian o little endian. Para indicar el endian que estamos utilizando se hace una marca llamada BOM al principio del fichero. BOM es un acrónimo de byte order marker.

Antes he hablado de los diferentes encodings de unicode. ¿Que es un encoding? Pues es una manera de representar los diferentes caracteres de los planos de unicode. El más común que seguro habréis oído por alguna parte es UTF-8. En UTF-8 cada carácter entre los primeros 128 se codifica usando solo un byte. El resto utilizan entres 2 y 6 dependiendo de la posición. Además los caracteres de esas 128 posiciones coinciden con los ASCII así que un texto en inglés se codificará igual en ASCII y en UNICODE.

Tenemos muchos más posibles encodings como UCS-2 que siempre utiliza 2 bytes, UTF-7 que incluso deja el famoso bit del ASCII libre para que se pueda jugar con él como antaño…

En definitiva. Hay miles de maneras de representar una cadena y nunca llueve a gusto de todos. ¡Que lío es el tema de los idiomas! Con lo bien que estaría el mundo hablando un idioma bello y sencillo como el castellano.

Referencias: http://www.joelonsoftware.com/articles/Unicode.html

http://en.wikipedia.org/wiki/Unicode

Al rico gadget de Wave

2010 marzo 21
tags: ,
by rafadc

Wave mola. Es complicado pero mola. Supongo que ahora mismo es demasiado complejo para ser mainstream pero si siguen su desarrollo seguro que a la larga tenemos una estupenda herramienta de trabajo. Yo me estoy acostumbrando a usarla en el día a día y le veo muchísimo potencial.

Si wave tiene una ventaja con respecto a otras plataformas es su versatilidad. Y parte de esta versatilidad se encuentra en forma de Gadgets o de Robots. En este caso haremos un sencillo gadget.


<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Hola mundo">
<Require feature="wave" />
</ModulePrefs>
<UserPref name="myname" display_name="Name" required="false" />
<Content type="html">
<![CDATA[
Nuestro primer wave
]]>
</Content>
</Module>

Si no quereis subirlo a ninguna parte ya lo he hecho yo. Se puede probar desde http://www.micubiculo.com/wave/samples/helloworld.xml

Así que si lo añadimos

Obtenemos una espectacular salida de la que nos sentiremos plenamente orgullosos.

Con esto ya empezamos a ver como va a funcionar el modelo de desarrollo. La idea es crear un XML con marcado para representar nuestra aplicación.

Podemos ver que está dividido en tres partes:

  • En ModulePrefs definiremos las opciones del módulo tales como el tamaño, el autor, etc… es decir, propiedades comunes a todos los usuarios que se conecten a tu gadget.
  • En UserPrefs definiremos las opciones particulares de cada usuario
  • En Content pondremos propiamente el codigo del gadget.

Vayamos por partes. Primero iremos al turrón. A donde se corta el bacalao. Al content. Para mostrar el contenido tenemos dos maneras: mediante html o mediante una url. Elegimos una de las dos modiante el atributo type de la etiqueta content. El ejemplo anterior nos sirve como ejemplo más sencillo de html así que vamos a hacer otro sencillo ejemplo pero esta vez de url. Vamos a ello:


<Module>
<ModulePrefs title="MiCubiculo"
title = "Micubiculo browser"
title_url="http://www.micubiculo.com"
author="Rafa de Castro"
author_email="rafael@micubiculo.com"/>
<Content type="url" href="http://www.micubiculo.com" />
</Module>

El gadget está subido en http://www.micubiculo.com/wave/samples/micubiculo.xml

Con esto sencillamente mostramos la salida de la dirección de la página en la sección del wave que hayamos determinado. Así que la salida de eso será más o menos:

Con esto vemos una de las ventajas que nos puede ofrecer wave. Podemos hacer todo lo que se pueda hacer en una página web. Con esto quiero decir que si queremos añadir un nuevo gadget podemos programarlo con el framework que prefiramos e incluso se queremos guardar datos podemos hacerlo en nuestros servidores.

Wave es como una enorme hoja en banco en la que podemos añadir todo lo que queramos para hacer nuestro entorno de trabajo. Esa es su virtud y su defecto. En mi opinión ahora sufre del bloqueo de la hoja en banco aún… veremos si sigue así.

Citas 009

2010 marzo 19
by rafadc

Software is hard.

- Don Knuth

Switch to our mobile site