Ir al contenido

Blog

Historias

¿Qué hay en un nombre?

Acabo de leer un artículo titulado “What is in a name” en el autor introduce sobre las dificultades de globalizar algo tan común como es el nombre propio de una persona. El artículo sintetiza varios de los problemas que se pueden encontrar al plantear cómo globalizar un sistema, lo que es mucho más complejo que traducir algunas cadenas de texto (para lo que gettext es una excelente solución).

I can’t imagine what people do when they have to enter their name in an online form that insists on a name that is made of a single word first name, possibly a middle initial, and a single word last name — none containing any punctuation.

Partiendo de cómo muchos formularios toman el nombre (nombre propio, inicial, apellido) el autor pasa a describir ejemplos de varios nombres que demuestran que no hay ningún formato común ya que puede haber nombres con varios apellidos, nombres compuestos. También hay que tener en cuenta que la capitalización de los nombres y apellidos puede ser mixta (pone como ejemplo el apellido DeGraw) además de que se incluyan signos en los apellidos, como en los apellidos compuestos españoles (comunes en nobleza y familias de postín). Y todo ello sin salir de las familiares normas occidentales, ya que en el caso japonés es muy sabido que suele tener la forma apellido nombre.

No existen soluciones para este tema, en los comentarios se menciona la posibilidad de ofrecer 2 textos: uno para refererirse a la persona informalmente y otro campo más formal (si vais a venderle un billete de avión a un Sir británico puede que no permita que se le llame Mr. y haya que utilizar Sir). Esta solución a priori puede parecer suficiente pero cuando se piensa un poco podemos darnos cuenta de que nos imposibilita una ordenación práctica (por lo general se hace por apellido), y todo esto sin entrar a pensar en juegos de carácteres y escrituras bidireccionales.

Conocer todos estos problemas nos puede hacer afrontar con humildad la tarea de internacionalizar una aplicación para que realmente sea global, y saber valorar todos los esfuerzos que muchas personas y equipos realizan para intentar poder llegar a todo el mundo.

Etiquetado

Iterando por enumerables en Ruby

Hoy estaba haciendo unas cosas con una serie de listas de listas que contienen listas y me estaba encontrando con algún pequeño follón y he descubierto algo que no será para tirar cohetes pero me ha venido bien.


[ ['Triangulos', 1], ['Circulos', 2],['Cuadrados', 3] ].each { |fig,count| p “#{fig} aparece #{count} veces@}

No es gran cosa, pero el poder usar algo como |fig, count| en vez de |a| y tener que recurrir a a[0] y a[1], y aunque en este ridículo ejemplo quizás podría usarse un Hash en lugar del los Array como tuplas en mi caso sí que me ha ayudado a hacer un poquito más legible en código. No es gran cosa, pero algo ayuda.

Etiquetado ,

Pruebas en Ruby/Rails

Seguimos peleando intentando dar con la mejor manera para hacer pruebas, pero por ahora parece que el ganador está siendo la combinación de RSpec con rcov que te permite medir el depender de los fixtures en Rails estamos utilizando FixtureReplacement2, aunque por ahora no tengo claro cuál sería la mejor opción pero es un buen principio y no sería demasiado complicado cambiar las pruebas a otra librería u otra metodología.

Cuando tenga más rodado todo espero poder hablar más extensamente sobre ello, pero si alguien quiere decir algo puede animarse y contar sus experiencias

Etiquetado , ,

Datos para testing en Rails

Cualquiera que haya tenido que mantener tests de aplicaciones en Rails habrá llegado a soltar algún improperio al tener que mantener Fixtures (y eso que en Rails 2.0 facilitaron algo la gestión) ya que en cuanto el proyecto tiene algo de envergadura y movimiento ese sistema se vuelve inmanejable, se emplea demasiado tiempo en gestionar unos datos en unos ficheros de texto para solucionar problemas en los tests.

Sin embargo no parece que haya una alternativa ideal para los tests, hay muchas posibilidades y parece que no está clara cual es la forma más adecuada al sistema integrado en Rails. Personalmente me gusta Fixtures Replace 2 y tengo planeado echarle un vistazo a Fixture Scenarios (un interesante artículo: “Fixin’ fixtures“) pero no tengo muy claro cuál sería el mejor método. También tengo pendiente probar RSpec, pero cambiar toda la metodología de tests puede llegar a ser costoso así que me gustaría preguntar aquí ¿qué es lo que más apropiado habéis visto para usar con Rails?

Etiquetado ,

Tres cosas que estoy leyendo: Gnome, fuentes en Firefox y REST

Ahora mismo estoy leyendo 3 cosas que voy a describir aquí. La primera es sobre la gestión de las tipografías en Firefox 3 sobre el hinting, kerning y las ligaduras, resulta prometedor.

También estoy leyendo algo sobre la posición de Gnome en un artículo titulado Gnome in the age of decadence” (llegué a él a través de Reddit) en el que se debate sobre si Gnome ha llegado a un punto de estancamiento y decadencia. La llegada de KDE4, el estado de Gnome y la omnipresencia de la web 2.0 creo que pueden estar relacionados de alguna forma, y éste es un buen artículo (y los comentarios también en reddit) para reflexionar algo sobre ello.

Por último una reflexión sobre algunos errores al implementar REST que podemos aprender de Newsgator.

Etiquetado , , ,

DataMapper en Ruby

De un tiempo para acá estoy teniendo en cuenta DataMapper, un ORM para Ruby que tiene similitudes con Active Record pero se nota que es una librería posterior por muchos detalles. De las cosas interesantes que puede hacer hay algunas muy dignas de tener en cuenta.

  • Las actualizaciones parciales, que ya se encuentran disponibles en la nueva versión de Active Record en Rails 2.1
  • Actúa contra la base de datos con inteligencia, minimizando en lo posible el número de accesos a las tablas.
  • Las búsquedas son totalmente en Ruby, con lo que no hay que hacer extraños inventos para búsquedas complejas (en ActiveRecord hay que tocar el SQL para unir varias condiciones).
  • Es explícito. Al definir la clase también definimos los campos y el tipado de éstos. En ActiveRecord a veces me siento un poco desorientado ya que las propiedades de la clase se definen al conectar con la base de datos, en DataMapper se definen explícitamente en la clase.
  • Acceso directo. Si tenemos el modelo Post podemos hacer Post[3] en lugar de Post.find(3) y otras muchas más formas de encontrar lo que buscamos.
  • Paranoia. DataMapper incluye de serie el borrado lógico al definir una propiedad como property :deleted_at, ParanoidDateTime. La realidad es que casi siempre que borramos sólo queremos marcar como borrados, y que el ORM de serie incluya esta funcionalidad nos facilita mucho el trabajo. Con ActiveRecord puede conseguirse, pero no es lo mismo

No es oro todo lo que reluce y DataMapper todavía no está completo del todo (siguen trabajando en las relaciones entre objetos y algunas cosas más) pero la verdad es que para proyectos Ruby que no sean Rails puede ser una interesante opción, sobre todo si estamos probando algo como Merb con DataMapper.

Etiquetado , ,

ionice: controlando la E/S

No hace demasiado tiempo descubrí ionice, un comando que actualmente se ha vuelto imprescindible para mi día a día porque consigo tener un sistema más ligero.

ionice nos permite controlar con que prioridad tienen acceso los recursos de entrada y salida y el uso que le doy es poder poner en un segundo plano transferencias largas de disco a disco. Si ojeamos la página man del comando podremos ver su sencillo funcionamiento, ya que sólo hay que especificarle un tipo de prioridad al proceso. No voy a entrar en detalle del funcionamiento, ya que es muy sencillo, y me limitaré a poner un ejemplo de uso.


$ cp -fr /media/dvd/* . &
$ sudo ionice -c 3 -p $!

Con estas 2 líneas inicio el proceso de copia del contenido del DVD y después uso ionice para especificar que el proceso especificado en $! (bash lo expande al último comando ejecutado) pase a tener prioridad 3, que es IDLE, de forma que sólo se procesará la entrada y salida cuando el sistema esté libre y no tendremos ninguna penalización en el resto del funcionamiento del sistema. El proceso de copia si llevará más tiempo pero en los casos en los que ese tiempo no nos afecte merece la pena por la suavidad con la que queda el sistema.


$ sudo ionice -c 3 cp -fr /media/dvd/* .

El anterior ejemplo es prácticamente lo mismo sólo que mostrando como se ejecuta un comando directamente en vez de aplicar el cambio de prioridad a un proceso ya corriendo.

Creo que todos deberíamos tener este nice de entrada y salida en nuestro arsenal para el día a día del trabajo con los sistemas Linux ya que, sobre todo en los sistemas de escritorio, puede ayudarnos a hacer mucho más agradable el trabajo mientras estamos moviendo grandes cantidades de datos.

Etiquetado ,

vim

Iba a hablar sobre el artículo “Task management usign vim” sobre gestión de tareas con VIM pero me he dado cuenta de que en la portada de programming.reddit.com hay varios artículos sobre vim además del mencionado anterior, como por ejemplo uno sobre usar VIM como IDE para Python y una pregunta sobre porqué usar VIM: Can someone explain the advantages of emacs/vim/nano over more GUI-intenvie editors like GEdit/Notepad++/Programmer’s Notepad?.

Debo confesar que a pesar de los años en los que llevo utilizando VIM no me considero un usuario experto, a pesar de que lo tengo configurado, hice algún script y procuro sacarle el máximo provecho. ¿Con qué tipo de editor soléis trabajar? ¿por alguna razón en particular?

Etiquetado

Imponiendo limitaciones para organizar el tiempo

En Creating constraints el autor nos cuenta su experiencia con el proceso que lleva para realizar el trabajo. De los 5 días laborables el autor dedica 2 a trabajos “interrumptivos”: contacto con clientes, pequeñas tareas, reuniones y demás trabajos, mientras que los otros 3 días los dedica a realizar aquellos trabajos que requieren de más atención. No explica qué hace para llevar el control de qué hacer o cómo priorizar, pero la idea subyacente es aislar las interrupciones del trabajo intensivo, evitando así que nos coma el día a día. Evidentemente no en todos los trabajos hacer algo así es posible, pero debo admitir que me ha parecido interesante.

Tarde o temprano nos encontramos con problemas de organización del tiempo, lo que nos dificultan ser productivos y conseguir aprovechar el tiempo. Por ello han surgido numerosas formas de organizar las tareas y el tiempo que sugieren métodos de trabajo o de vida personal, posiblemente la que más ‘buzz’ tenga sea GTD (”Tener las cosas hechas”) que cuenta con varias implementaciones, además de que podemos ver la enorme cantidad de listas TODO, calendarios y gestores de tareas que han ido apareciendo.

Realmente la gestión del tiempo propio es tarea difícil, en muchos casos la realidad puede inmiscuirse en lo que tengamos planeado y por ello necesitaremos algún proceso flexible y que se pueda ajustar a la vida real, no sólo que quede bien sobre el papel. Personalmente utilizo una aproximación a GTD pero alguna vez he llegado a probar algo parecido a lo que se cuenta en el artículo (con las limitaciones impuestas por el día a día del trabajo), y creo que podría ser una forma muy hábil de trabajar en los casos en los que pueda ser así.

Etiquetado

Otra extensión para Firefox: Taboo

Cada cierto tiempo me gusta mencionar algunas extensiones que hacen mejor mi experiencia de navegador y esta vez le toca a una que acabo de instalar estos días: Taboo.

Se trata de una especie de gestor de marcadores pero que muestra unas pequeñas capturas y permite navegar por las fechas. La diferencia con los marcadores es que está pensado para usar y tirar, ya que agregar un enlace es cuestión de hacer click en el icono adecuado y el borrado está a un click también Ya ha empezado a utilizarlo para guardar enlaces para leer en el futuro.

Así es Taboo

Personalmente incluiría a Taboo en la misma categoría que Scrapbook, un gestor ‘offline’ de favoritos que permite capturar, editar y ordenar páginas y sitios web.

Etiquetado