Drew Struzan y su flexibilidad a los cambios

Drew Struzan es el más famoso de los artistas de posters de películas. Su carrera se inició prácticamente con un poster para Star Wars y desde entonces ha hecho incontables posters para todo tipo de películas.

Cuando salió el Episodio I de Star Wars me compré el score de John Williams que tenía el mismo arte del poster que había creado Struzan. Años después cuando salió Harry Potter, vi el poster en el cine y reconocí la semejanza con el arte del Episodio I. Me dije: «Se han copiado el mismo estilo.» No cruzó por mi cabeza pensar que se trataba del mismo artista hasta que después, haciendo tarea por internet, conocí finalmente a Drew Struzan, autor, obviamente, de sendos posters.

Hay bastante información acerca de su persona en internet, así que no pienso repetir el trabajo de otros. Lo que quisiera resaltar es lo que he aprendido acerca de su carrera en Hollywood (refiriéndome a todo ese sistema que produce películas).
Hace tiempo estuve leyendo sobre cómo se escriben guiones para Hollywood y lo gracioso es que no existe ningún standard. Todos lo hacen a su manera y a su forma. Le encuentro mucho parecido al desarrollo de software: todos obtienen sus resultados a su manera. Hay ciertas tendencias o procedimientos comunes, pero el resto cada uno se las arregla a su manera.

Pues para hacer posters, tampoco hay standard. Drew Struzan tuvo que lidiar con el estilo de cada cliente para satisfacerlo. Por ejemplo, para el poster de «Thunder and Lightning» llamaron a Drew a las cinco de la tarde y le pidieron hacer un poster. Para el día siguiente. En la mañana. No tenían ni concepto ni letras ni nada. Drew entregó el trabajo al día siguiente a las nueve de la mañana.

«La Cosa» fue, eh, otra cosa. No solamente fue una película de terror sino también un proyecto de terror. Llamaron a Drew con lo mismo: poster para mañana en la mañana. Pero esta vez no hay material de referencia, ni concepto ni nada en qué basarse. Era un remake de «La Cosa» de 1951. ¿Cómo puedes dibujar un poster de algo que ni siquiera has visto?
Al día siguiente temprano recogieron el poster y de frente se lo llevaron a la imprenta. La pintura estaba tan fresca que se quedó pegada en el vidrio de la máquina separadora.

Ese es Hollywood.

Lo cual me lleva a pensar que muchas veces es así también el desarrollo de software donde los clientes te vienen con unas exigencias que son URGENTE y que, en ocasiones, se queda «pegado» en el servidor. Y luego viene la queja, por supuesto.

Así como los artistas dieron gracias al cielo por la invención de los acrílicos, hoy le invitaría miles de ceviches a los autores de Rails y Django por tener el equivalente a la pintura acrílica: un medio para pintar tan flexible y que se seca rápidamente. Cuando empiezas a trabajar con toda esta presión se hace crítico automatizar, innovar, ser más eficiente, ser más rápido. Escribo macros en mi editor que jamás volveré a usar, programo scripts que programen por mí y, horror de horrores, pavor de pavores y peguen todos un grito en el cielo y acribíllenme con balas de plata, estoy empezando a programar «defensivamente» sacrificando velocidad del programa por velocidad de programación.

Drew Struzan tuvo que hacerse de trucos para poder trabajar al caprichoso e impredecible ritmo de Hollywood: primero pintaba una base de gesso a la superficie para poder hacer todos los cambios que se le ocurriesen a los clientes. Luego trabajaba con acrílicos y los detalles los hacía con lápices de colores. Este procedimiento fue evolucionando poco a poco. Los clientes eran tan impredecibles con sus cambios y requerimientos que no debería sorprendernos también sus abandonos, robos y traiciones (se llevaban los preliminares que les presentaba Drew y hacían que los terminaran otros artistas).

La verdad es que me siento cansado y frustrado de este ritmo. Creo que estoy pasando por cierta etapa de transición o algo, no lo sé. Lo único que sé es que no me siento como antes con lo que hago. I think I’ve burnout.

Creo que necesito descansar.

No perdamos el enfoque

Este es un extracto modificado y extendido de un, eh, desquite escrito en otro lado que no viene al caso mencionar. Es una lección que he estado aprendiendo últimamente y que estoy viendo repetirse a menudo y me encuentro a mí mismo diciendo la misma frase: «No hay que perder el enfoque.»

Muchas personas dicen entonces que eso no es «el standard de la industria,» o parte de las «mejores prácticas.» Y en repetidas veces esas cosas nos llevan erradamente a perseguir procedimientos o caminos en lugar de concentrarnos en resolver el problema.

«Hay que usar la mejor herramienta para el trabajo,» dice la sugerencia. Pero si tengo un apuro en abrir el case de mi computadora en una emergencia y lo único que tengo a la mano es un cuchillo y no un destornillador estrella, ¿adivinen qué es lo que voy a usar?

No, tonto. Tienes que conseguirte el destornillador estrella. Es el standard. Nos regimos y seguimos reglas sin entender el verdadero significado de por qué han sido definidas y la razón de su existencia.

Un extremo claro son los hospitales donde no te pueden atender a menos que llenes antes un formulario, porque «ese es el procedimiento.» Procedimientos, primero — el ser humano después. Se pierde el enfoque y la claridez de lo que se está haciendo, el objetivo que se quiere lograr; en el caso de un hospital, brindar atención médica a las personas.

Por supuesto, es otro gigantesco error irnos al otro extremo y decir que las reglas y procedimientos no sirven para nada e ignorarlos olímpicamente. Se llaman «mejores prácticas» por un motivo válido. Se establecen procedimientos por ciertas razones. Lo importante es entender y discernir el propósito de cada procedimiento y hacer lo correcto en cada caso.

Cuando perdemos el enfoque todo se viene abajo. Pensamos que el numerito obtenido de un examen determina la proficiencia de una persona en dicho curso y no es así. Pensamos equivocadamente que se puede representar la aptitud o inteligencia de una persona con un solo número y es una tontería.
Alabamos una buena nota y castigamos una mala nota sin discernir que es una mera figura, una representación pálida. Alguien con una plagia o una memoria fotográfica puede transcribir, palabra por palabra, lo que tiene y obtener una buena nota. Alguien que ha estudiado duro, pero que al final se llenó de nervios por la importancia que tiene pasar este curso obtiene al final una mala nota. No rindió al 100% de sus habilidades, no por su conocimiento, sino por un factor externo. Y no podemos decir «No sabe, no estudió, la nota baja lo demuestra,» porque es un estúpido escalar que no representa nada.

Y entonces aparecen los que se van al otro extremo y puntillean, ¿Significa eso que debemos de eliminar todas las notas? ¿Que el sistema no sirve y que no debemos basarnos en ello? Que no, carambas. Es necesario tener un punto de referencia, una manera de medir el aprendizaje — pero tomémoslo como tal, como una referencia.
«Veo que sus notas de colegio, estimado entrevistado, son deficientes. Es usted, pues, un bruto y no lo necesitamos en nuestra empresa.»
Ajá. El divorcio de mis padres durante esa época no tuvo nada que ver. ¿Qué tal si me hace un par de preguntas o me toma un examen de aptitud y vemos si, en la práctica, soy realmente útil para su empresa? ¿O si mira los proyectos que he estado haciendo?

Oh no, papelito manda.

El año pasado cuando entrevisté a personas buscando un programador me importó un comino o dos si venían vestidos en terno o en chancletas, si habían estudiado en La Católica o con su primo Juancito. A todos les hice las mismas preguntas y ninguno, NINGUNO, pudo completarme una tarea de programación. Mi elección se hizo en base a la forma cómo intentaron razonar para salir del apuro, porque lo que buscaba es alguien que sepa razonar, no que tenga las siglas «Ing.» delante de su nombre, sino alguien con aptitud, alguien con potencial y capacidad. No alguien que sepa «Java» y «PHP» porque nuestra industria se mueve tan rápido que «Java» y «PHP» van a ser obsoletos o desplazados de todas maneras.

Debemos de detenernos un momento a pensar y observar si estamos siguiendo reglas ciegamente o estamos usando la razón. Hace años atrás renuncié a un buen trabajo en Lima por la sencilla razón que ese trabajo se convirtió en todo y llegué al límite de querer abandonar por completo a mi Señor.
La incomprensión de personas no creyentes no me sorprendió — lo que me sorprendió fue la incomprensión de creyentes que consideraron «tonta» y absurda mi decisión. «¿Por qué un creyente no puede ser rico?» preguntó una creyente y es como si no hubiese entendido nada en toda su vida.
Su patrón de éxito estaba marcado por lo que el mundo dice y no por lo que Dios dice. Nuestra mira y nuestra meta es otra. Es tan desorientado como decir que lo más importante en el colegio es haber llenado la mayor cantidad de álbumes de figuritas que todos los demás en la historia del colegio. «¿Y por qué un alumno no puede tener la mayor cantidad posible de álbumes?»

Mi conclusión es: no debemos perder el enfoque del por qué de las cosas, del motivo y razón detrás de cada standard, cada regla, costumbre o procedimiento. No obedezcamos ciegamente las cosas porque «así son,» «siempre han sido así» y «los demás también lo hacen» sino usemos el razonamiento y la sabiduría para hacer siempre lo Correcto.

(Y lo Correcto en reiteradas ocasiones rompe las reglas.)

Another World

Another World fue uno de esos juegos que marcaron historia. Recuerdo jugarlo arduamente con mi primo y terminarlo gracias a la intervención de Oliver.

Buscando un poco acerca del paradero de Eric Chahi, el autor del juego, descubrí esta noticia fabulosa: hay una nueva versión para Windows XP de Another World, en alta resolución. Esta es la página oficial de este proyecto y hay una demo del primer nivel para descargar.

La «alta resolución» se refiere no solamente al hecho que la resolución es ahora superior al 320×200 original, sino también que los fondos han sido redibujados con mucho más detalle, lo cual le da una frescura.

Lo más interesante de la página es Eric Chahi describiendo detalles de la realización del juego. Hay screenshots del editor de vectores, dibujos conceptuales de los personajes y niveles, el lenguaje de scripts que usó para crear el juego y muchas anécdotas bastante interesantes (filmó a su hermanito haciendo los movimientos de Lester). Recuerdo en el colegio leer en una revista de juegos un artículo sobre el juego y allí había una foto de la mano de Eric filmada haciendo la secuencia cuando Lester abre la lata.

Eric hizo de hombre orquesta creando la historia, dibujando, animando y programando todo — lo único en lo que no participó fue en la música, compuesta por Jean-Francois Freitas (la música de cierre final es genial).
Algo que desconocía fue que Eric también hizo una pintura para la caja del juego. Y para cerrar con broche de oro, hizo la música del menú de esta nueva edición de Alta Resolución. Un artista completo.

ActiveRecord hasta en la sopa

PROBLEMA:
Estás aburrido por terminar y te piden hacer algo aburrido con la base de datos, que sería un paseo en el parque si el proyecto fuese Rails y pudieses manejar las tablas con un modelo de ActiveRecord.

SOLUCION:
Leer la historia de Tchaikovski en la Wikipedia.

Pasando a otro tema, si quisieran usar ActiveRecord fuera de Rails, lo más básico es:


require 'rubygems'
require_gem 'activerecord'

ActiveRecord::Base.establish_connection(
  :adapter => 'mysql',
  :host => 'localhost',
  :database => 'chifa',
  :username => 'chifa',
  :password => 'wantan_quemado'
)

y simplemente agregas y usas tus tablas:


class Platos < ActiveRecord::Base end Platos.find :all

Si la pluralización es un problema, entonces simplemente fuerza el nombre de la tabla:


class ColorRojo < ActiveRecord::Base   set_table_name :en_extremo_ff000000 end

Un website cristiano hecho en Django

Tabo me envió por mail (¡gracias!) este post de Luke Plant sobre sus apreciaciones de tiempo y velocidad de desarrollo ilustradas con un proyecto suyo hecho en Django, que es un website para campamentos cristianos.
Es realmente interesante y me he descargado el código fuente para leerlo, ya que siempre se puede aprender muchas cosas de otra persona.

Aparte de Retrazos, otro conejillo de indias para mi aprendizaje de Ruby on Rails es Via7, un website que hice hace tiempo para jóvenes creyentes. Originalmente en PHP, Via7 era un gran hack a un phpBB que quedó en el descuido al expirar el dominio.

Espero que sea muy pronto poder tener el mismo gusto de Luke de anunciarles la finalización del proyecto. Aunque todos sabemos que la web de una comunidad nunca termina. ;)

Retrazos: un pequeño proyecto

No hace mucho publiqué este dibujo hecho con ciertas limitaciones: 5 minutos de tiempo máximo, un canvas de 300×300 pixels y un solo color para acompañar los trazos.
He venido haciendo otros varios más, y como mi cerebro olvida selectivamente lo que prometimos acerca de las amanecidas programando, empecé a armar este pequeño proyecto en esas «horas extras.»

La idea inspiradora de esto provino de las mini-sagas y, más que nada, de este artículo de Kathy Sierra, sobre la «creatividad a velocidad.»

El proyecto se llama «Retrazos» y la dirección es retrazos.jgwong.org.

Es, en esencia, una galería de los dibujos que he venido haciendo todo este tiempo, y que pienso seguir produciendo de manera regular. Poco a poco he ido dejando de lado las limitaciones originales. Los hago a 400×400 pixels, a veces los hago en menos de 5 minutos, a veces no. Ya estoy queriendo dejar la limitante de un solo color también. Y creo que eso es bueno, pues estoy logrando hacer algo que me hincaba a menudo: dibujar más.

Nada reemplaza al trabajo duro y a la práctica constante, así que con esto mato dos pájaros de un tiro: dibujar más y poner en práctica lo que voy aprendiendo de Ruby on Rails. El sistema lo hice en menos de lo que canta un gallo — es sencillo, tiene su backend de administración y hasta su feed RSS. ;)
Suscríbanse y avísenme si no funciona, ya que mi lector de feeds es sólo texto y no he hecho pruebas extensivas.

Espero que les guste. Ahora me toca tener la suficiente disciplina y tiempo para mantenerlo actualizado.

Ultimamente estoy percibiendo que la única forma de obtener más tiempo es reduciéndolo…

Mejorando mi carrera

Una de las metas más relevantes que me he trazado para este año 2006 es «He mejorado en mi carrera, soy más veloz, más eficiente.» A principios de año me sentí estancado, como si hubiese llegado a cierto punto donde mis conocimientos me son suficientes para mi trabajo y todos los proyectos que veía eran más de lo mismo y nada nuevo, ningún reto, a menos que yo mismo me imponga uno para mejorar procesos. Eso es algo que me ha venido preocupando.
He estado intentando aprender cosas nuevas (PEAR DataObjects, AJAX), pero sentía, como le contaba a mis padres, que todos alrededor mío siguen avanzando y yo me estoy quedando atrás.

He tenido muchas sorpresas con lo que el Señor me ha estado enseñando con esta meta trazada, todo por diversos factores como, por ejemplo, mis ideas prehistóricas de cómo debo hacer las cosas o la falta de interactuar más con otras personas, colegas, amis linuxeros.
Voy a darles una vista general de las cosas que me han venido aconteciendo últimamente. Todo esto ha venido sucedido desde Enero y entre punto y punto hay a veces varias semanas o meses de separación. Algunas se solapan entre sí. Bueno, empecemos:

– Primeramente como mencioné ambiguamente en un post atrás, Tabo me habló de Python y Django y ese solo consejo me abrió muchas posibilidades. Ya entendí que PHP no es el futuro, a menos que reescriban todo el lenguaje desde cero y reinventen Python o Ruby.

– Luego encontré este fabuloso blog de Kathy Sierra junto con este todavía más fabuloso post acerca de la neurogénesis y una interesante conclusión: «Aprender cura el cerebro.»

– Me puse a aprender Python y Django simultáneamente.

– Hablando con Antonio acerca de PHP5, Ruby y un poco de Python, llegué a una conclusión importante que me dio mucha confianza: que puedo aprender cualquier cosa. Al descubrir esto me dí cuenta que una parte de mí dejó de creer que tengo la capacidad de aprender, un tipo de «ya estoy muy viejo para aprender tantas cosas,» lo cual me parece absurdo. ¿Desde cuándo he empezado a pensar así y por qué?

– Cuando regresé de Lima volví a visitar el blog de Kathy (tengo mi lector RSS desactivado por motivos productivescos) y me encontré con este post acerca de cómo volverse un experto en cualquier rama. Menciona la diferencia entre expertos, novatos y mediocres, pero lo más interesante es este párrafo que se los traduzco:
«Oh si, acerca de esa cosa de que nunca es tarde… la mayoría de nosotros puede despedirse de la medalla Olímpica de patinaje sobre hielo. Y a mis 5′ 4», mi carrera de basketball no tiene probablemente esperanzas. Pero piensa en esto… la actriz Geena Davis casi calificó para el equipo Olímpico de tiro con arco de Estados Unidos en un deporte que ella tomó a la edad de 40, menos de tres años antes de las calificaciones Olímpicas.«

– Luego Droper compartió este post que me gustó mucho sobre Matemáticas para Programadores.

– De ese post salté a este otro enlace que me pareció todavía más fascinante y, a mitad del artículo pensé «¿Desde cuándo las matemáticas me parecen fascinantes?» Siempre le he tenido miedo a las matemáticas y he tenido muchas dificultades toda mi vida.

– Recordé entonces a mi hermano que nunca fue bueno en matemáticas en el colegio. Cuando ingresó a Ingeniería Civil no se rindió ante la idea de tener que masticar matemáticas. Hoy le gustan las matemáticas y daba clases a los hijos de algunos creyentes en Covida. Creo que una de las cosas que lo inspiró fue Johnny Rico, el protagonista de Starship Troopers (el libro, la película no existe).
Al principio a Johnny le hacen un examen del cual los resultados son: «insuficiente entendimiento intuitivo de relaciones espaciales… insuficiente talento matemático… preparación matemática deficiente… tiempo de reacción adecuado… buena vista.» Como algo paralelo a toda la historia, uno ve a Johnny estudiando duro matemáticas, recibiendo tutoría de diversas personas y preocupándose por haber dejado sus libros en otra nave espacial.
Johnny dice «Matemáticas es trabajo duro y ocupa tu mente — y no duele aprender todo lo que puedas de ello, no importa en qué rango estés; todo lo que sea de importancia está fundado en matemáticas.»
He aprendido que esa última frase es muy cierta. Von Neumann se levantaría de su tumba y te comería el cerebro personalmente si te atreves siquiera a cuestionar eso.

– Mirando en el mismo website de Math a Day, llegué a este artículo y mientras lo leía pensaba, «Esta persona ha trabajado en Amazon, haciendo cosas realmente interesantes — ¿por qué yo no hago esas cosas?» y llegué a muchas conclusiones que todavía quiero terminar de meditar. Mas una de ellas es firme: Amazon usa mucha matemática brillante para funcionar.
El artículo trata acerca de practicar programación, como cuando uno practica pesas. No es algo que haces en tu trabajo diario, sino algo que debes hacer de manera separada, dedicada, aparte.
Si aprecias tu carrera, por favor lee ese artículo. La parte que más me llamó la atención es la siguiente:
De todas tus habilidades como programador, ¿cuáles de ellas podrían ser consideradas «intemporales»? Encáralo: la mayoría de tu conocimiento técnico tiene un tiempo de vida, una fecha de expiración.
[…]
Lo que yo creo que encontrarás es que matemáticas, ciencias de la computación, escritura, y habilidades sociales son en su mayor parte intemporales, habilidades universales. Las tecnologías más específicas, lenguajes y protocolos eventualmente expiran, para ser reemplazadas por mejores alternativas.»

– En un momento dado me dí cuenta que, sin querer, estaba logrando cumplir esta meta que me había trazado. A diferencia de otras metas donde le pongo bastante empeño conciente, esta meta cayó por sí sola y las cosas se movieron «sin esfuerzo» de parte mía. Me dí cuenta que es el Señor quien estaba moviendo las circunstancias.

– Pasaron varias semanas y una noche decidí mirar Ruby y Rails y cambié mi rumbo. Quedé fascinado con el lenguaje Ruby y sigo aprendiendo desde entonces más de Ruby y Rails.

– De un momento a otro me dí cuenta que había crecido. Fue progresivo, y en un tiempo relativamente corto, pero mi vida ha dado muchos giros comparado a lo que «tenía» a principio de año.

– Una vez que estuve en Peruserver cogí por segunda vez un libro de matemáticas que hay en la biblioteca y Antonio me dijo, «Ya que tanto quieres aprender, ¿por qué no te metes a la universidad?»

– Sigo aprendiendo Ruby y Rails. He meditado seriamente la idea de meterme a la universidad, mas por ahora no siento la Voluntad del Señor por esa ruta; otras puertas se han estado abriendo por otra ruta que espero comentar en otro post. Eso no descarta que siga aprendiendo y creciendo por mi cuenta.
Gracias a Savre, voy a hacer averiguaciones para tomar cursos y llenar esas lagunas que tengo.

Y la vida continúa… :) No hay conclusión, no hay punch line. Esta es mi vida y siguen apareciendo oportunidades y puertas que se abren, puertas que se cierran, todo siempre interesante.

Ruby on Rails, o por qué lo elegí en lugar de Django

Sí, el título es una mención directa al post de Tabo, «Django, Or why I chose it over turbogears and ruby on rails.»

¿Por qué elegí Rails en lugar de Django? Una sola palabra: Ruby.

Podría mencionar muchas cosas acerca de la convención sobre configuración, Active Record, erb y el magnífico soporte de AJAX, pero lo cierto es que, tal como dijo David Heinemeier Hansson (el autor de Rails), «Rails no sería Rails si no es por Ruby.»

La belleza de Rails proviene de Ruby, ese lenguaje de programación todavía nuevo, donde es posible hacer cosas de manera tan expresiva y divertidas (uno no escucha esa palabra muy a menudo últimamente) que simplemente tu productividad aumenta considerablemente. Ya no te detienes a pensar cuál era la sintaxis de str_pad(), ni tampoco memorizar «from django.shortcuts import render_to_response, get_object_or_404», sino simplemente hacer tu aplicación.

Antes de aprender Rails, me puse a aprender Python y Django. Ya había visto un poquito de Python y era un lenguaje que me llamaba la atención. Ruby para mí era exactamente como el japonés — algo desconocido y foráneo. De modo que mi primera elección fue la ruta de la culebra.
Cuando me senté a aprender Django encontré algunas trabas que no me gustaron, pero que alegremente estuve dispuesto a aceptar hasta quizás acostumbrarme. Como por ejemplo, tener que teclear «from django.shortcuts import render_to_response» para mostrar una plantilla, algo que el tutorial mismo dice, es tarea común — y si es común, ¿por qué no viene por defecto? No hay problema, mi editor puede escribir todo eso por mí.
Luego me encontré con esta parte de Generic Views, donde el encabezado de la documentación dice: «Generic Views: Menos código es mejor» y luego proceden a mostrarte unas líneas monstruosas como «django.views.generic.list_detail.object_detail» y «django.views.generic.list_detail.object_detail».
Me pareció una contradicción, pero no me hice líos. Puedo memorizar todo eso y en su momento lo hice.
No sé si el Magic Removal branch ahorra todo esto, pero veo el mismo código en el tutorial.

Estuve un par de semanas con un par de horas por las noches aprendiendo poco a poco y construyendo una aplicación web sencilla («chifa,» el website exclusivo para mezclar wantan, palta y chijaukai y ver qué evoluciona del resultado). Django trae un servidor web propio para desarrollar tu aplicación sin trabas, pero extrañamente cuando grababa cambios a un script en Python y éste tenía un error de sintaxis, el servidor web se colgaba con una excepción. Tenía que pulsar CTRL+C y reiniciarlo. Como tengo la costumbre de grabar constantemente esto me fue irritando.
Continué así un tiempo, aprendiendo en silencio hasta que viajé a Lima y Antonio me animó a aprender Ruby (y Rails). En otro post trataré de ahondar en este tema, pues tiene mucho que ver con un montón de sucesos que el Señor me ha ido mostrando en esta primera mitad del año que me parece increíble — um, pero eso es tema de otro post.

Versión resumida: regresé a Ica con el interés en Ruby on Rails y, después de un par de días de resumir mis clases de colegio con Python, me dije «Bueno, vamos a probar ver Ruby por una noche.» No me haría daño, ¿verdad?

El hecho es que probé Ruby y jamás dí la vuelta atrás.

No recuerdo la última vez que me he sentido tan fascinado por un lenguaje. Ahora que lo pienso, creo que nunca me he sentido fascinado por un lenguaje… ni siquiera por PHP, que, tras haber visto Ruby, me parece… prehistórico.

Pero bueno, estamos hablando de Rails y no de Ruby — pero es que la verdad no se puede hablar de Rails sin tropezar con la belleza de Ruby. No entiendo a qué se refiere Tabo cuando dice que el lenguaje no es «limpio» — lo que sé es que es expresivo y legible. Bello. Y uno se siente raro usando esa clase de adjetivos para describir un programa, pero tarde o temprano se vuelve inevitable. Eres feliz.

Basta de sentimientos cursis, vamos a lo técnico.

Convención sobre configuración
Este es un concepto importante de Rails, y quiere decir que, a menos que se especifique lo contrario, existe una convención o forma standard de comportamiento o nombramiento para cosas comunes. Esto nos ahorra bastante tiempo.
Por ejemplo, para una tabla «alumnos» de la base de datos se espera que la clase que va a manejarla se llamará «alumno» (singular). Rails tiene todo un sistema de pluralización que es fácilmente extensible para el caso del español. Pero el concepto va más allá. Y eso nos lleva a…

Rails es menos código
En Django tienes que especificar siempre qué plantilla vas a mostrar retornando un objeto HttpResponse. ¡Para la práctica totalidad de páginas tienes que hacer «from django.shortcuts import render_to_response»!
En Rails, gracias a la convención sobre configuración, se asume que a la acción «lista» le corresponde una vista «lista.rhtml». No hay nada extra qué especificar. Si quisiéramos que la acción use una vista de distinto nombre, lo decimos de manera simple y expresiva:

render :action => «lista_filtrada»

Oh, la convención es que la extensión de la vista puede ser «.rhtml», así que tampoco es necesario especificar eso. En Django viene a ser algo así como:

return render_to_response(‘alumnos/lista_filtrada.html’, {‘lista_alumnos’: lista_alumnos})

Igualmente, para usar las bondades el ORM de Django tenemos que especificar el modelo que queremos usar:

from itskool.alumnos.models import Alumno

En Rails no hay necesidad de especificar nada.

RailsRuby es más expresivo
Estoy enamorado de poder decir:

  • if expiracion > 30.seconds.ago
  • limite_maximo = 4.megabytes
  • create_table :alumnos do |t|
      t.column nombre, :string
      t.column apellidos, :string
      t.column fecha_nacimiento, :date
    end

Aparte Ruby nos permite hacer cosas fabulosas que lastimosamente no caben aquí y es materia de otro post.

Rails no tiene URLs flexibles
A diferencia de Django, el routing de Rails no es tan flexible. Esto se debe a que Django usa expresiones regulares, mientras que Rails está basado en elementos separados por slashes («/»).
La pregunta es, ¿cuántas veces vamos a usar esa flexibilidad? Ok, puede servir para mantener la estructura de URLs de un proyecto que estamos portando a Django, ¿mas cuántas veces sucede eso? Si la idea es tener URLs bonitos, creo que «/noticias/2005/05» es suficientemente bonito y limpio para la gran mayoría de casos.

El problema de la flexibilidad de las URLs Django es que tiene un precio muy alto: los desarrolladores se ven forzados a crear un método en el modelo para generar la URL correcta para la vista (el afamado get_absolute_url()), una clara violación del DRY y del MVC. El mismísimo Adrian Holovaty acepta que esto es feo, pero que no hay mejor solución por el momento.
Esta complicación no me parece que justifique una flexibilidad que en el 80% de los casos no se va a aprovechar.

Rails no sufre de este problema.

Active Record rulez!
En Rails lo normal es crear las tablas en la misma base de datos y Rails automáticamente adopta los campos de cada tabla. Si alteramos una tabla y agregamos un campo lo podemos usar inmediatamente en Rails.
En Django, la estructura de la tabla se define en el mismo modelo de Django, lo cual es genial porque sirve de abstracción a la base de datos — no importa si es MySQL o PostgreSQL, sólo tienes que correr el mismo script. Rails puede hacer lo mismo. Se llama migraciones y es más cool, pero sigamos con Django.
En Django, si altero una tabla para agregar un campo tengo dos opciones:

  • Hacer la modificación en mi modelo y volver a crear la tabla — perdiendo así los datos que tengo en ella. Esto es incómodo en muchos casos.
  • La otra opción es alterar la tabla en la base de datos con un ALTER TABLE y luego agregar el campo en el modelo. Dos veces lo mismo. Y al hacer un ALTER TABLE se pierde la magia de la abstracción que Django pretendía evitar.
  • Si nos interesa tener un esquema de la base de datos así abstraído lindo como Django,existen las migraciones. Lo genial de las migraciones es que se definen en un script donde puedo hacer y deshacer los cambios. Por ejemplo, esta es una migración para renombrar un campo:

    class RenombrarNickAApodo < ActiveRecord::Migration   def self.up     rename_column :alumno, :nick, :apodo   end   def self.down     rename_column :alumno, :apodo, :nick   end end Con este esquema puedo subir estos ficheros de migración a mi servidor de producción y hacer todos los cambios que ya probé localmente. Y si rompí algo, puedo deshacerlo en el instante. Lindo, ¿verdad? Algunas cosas que quería mencionar más en profundidad, pero bueno, me he quedado sin tiempo: Django es una excelente pieza de código, probado y desarrollado "en el campo." Se nota bastante su origen orientado a websites de periodismo, el módulo out-of-the-box de administración es un gran plus, y espero que pronto hagan algo similar en Rails -- una buena idea para un proyecto personal. Mirando debajo del capó de Rails, te das cuenta que su naturaleza es diferente, tanto en su funcionamiento como en su filosofía. Rails tiene un fabuloso soporte de Ajax y la comunidad es mucho más grande que la de Django y crece a un ritmo vertiginoso. Las personas que encabezan esta comunidad son programadores brillantes. Django es bastante capaz, pero Rails lleva, por el momento, la delantera por un gran margen.