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.

    Belleza de código

    La primera vez que leí acerca de «belleza» en programación fue en un escrito de Paul Graham. La segunda vez fue a Tabo haciendo referencia al evangelismo de belleza de David Heinemeier Hansson sobre Ruby y programación en general en el video de Snakes and Rubies.
    Tengo otra idea muy familiar que, personalmente, conozco bajo el nombre de «elegancia.» Código que es «elegante» y soluciones «elegantes» a problemas complejos. En mi cerebro he catalogado «elegancia» y «belleza» como dos ideas no intercambiables. Ojo que esta es mi categorización personal, nada canónico:

    «Belleza» de código es la diferencia motivacional que existe entre:

    inicio = Time.now.beginning_of_day

    y

    $inicio = mktime (0, 0, 0, date («m»), date («d»), date («Y»));

    El primer código, en Ruby, es a todas luces guapísimo. :)

    «Elegancia» es, en mi diccionario, algo que no tiene que ver mucho con cómo se ve el lenguaje, sino pasos ingeniosamente elaborados para la resolución de un problema de la mejor forma posible. El código no será necesariamente bello, pero la solución puede ser elegante.

    PHP es, definitivamente, no bello — por decirlo de una manera agradable. Sin embargo, eso no le quita que podamos escribir código elegante en él.

    Vamos con un ejemplo real.

    Estoy actualmente trabajando en un proyecto sujeto a bastantes cambios estructurales. Escribí una función de búsqueda para cada uno de los tipos de registros que manejamos en base a ciertos criterios. Estas funciones devuelven un array con los resultados. Por ejemplo:

    function actividades_buscar ($db, $vista, $localidad, $linea, $mes, $anyo, $pagina)

    Esta función se llamaba desde un solo lugar inicialmente, luego conforme vinieron los cambios empecé a usarla en algo de cuatro lugares distintos del sistema. En el lugar original no había mucho problema en entender el código, ya que le alimentaba con variables recibidas por GET.
    Sin embargo, en los otros lugares donde hacía búsquedas predefinidas (hardcoded) como que ya no era tan legible:

    $resultados = actividades_buscar ($db, «general», «0000000000», -1, -1, -1, $pagina);

    (Ough!)

    Pero lo peor fue cuando el cliente decidió añadir más criterios de búsqueda… así que añadí un par de parámetros más a mi función y actualizar en todos los lados, pero oops! se me escapó en una parte y el cliente detectó el bug. Ok, a corregir.

    Luego el cliente decidió añadir otro criterio más de búsqueda y ya me estaba doliendo (podría decir físicamente) cambiar en N-lados lo mismo y tener un código que era horrible. La gota que derramó el vaso fue cuando el cliente pidió que también se pudiesen ordenar los resultados por columnas y tenía que pasar un parámetro de ordenamiento a mi función de búsqueda quedandome con una definición de:

    function actividades_buscar ($db, $vista, $localidad, $linea, $acciones, $mes, $anyo, $criteria, $mes_inicio, $anyo_inicio, $mes_fin, $anyo_fin,$sort, $pagina)

    (Oh, la humanidad.)

    Obviamente no iba a entender ni papa de qué cosa es qué aquí:

    function actividades_buscar ($db, «regional», «0000000000», -1, -1, -1, -1, », -1, -1, -1, -1, », $pagina)

    Este código era tan horrible que me dije «Es un asco. No puedo creer que esto exista.» No tenía tiempo para corregir eso, pero era tan horrible y tenía tanto miedo que me pidiesen otro cambio en esa parte que decidí dejar de lado todo y sentarme a reescribir todo eso.

    La solución final fue pasar cada uno de los criterios de búsqueda en un array, y si no mencionamos un criterio, éste obtiene un valor por defecto sensible. Eso significó reducir la declaración de mi función a:

    function actividades_buscar ($db, $params)

    y llamar la función con solamente los parámetros necesarios de la siguiente manera mucho más legible y elegante:

    $resultados = actividades_buscar ($db, array (
            ‘vista’ => ‘general’,
            ‘pagina’ => $pagina_actual,
       )
    );

    Ahora sí tengo paz. :)

    La Llave: Cómo aprender Inglés


    Hannah y Eric observaron, por un corto instante, el interior de la biblioteca del Abuelo. El cuarto parecía interminable, lleno de estantes y libros por doquier. Hannah abrió los ojos de perplejidad y sintió grandes deseos de entrar allí y recorrer con sus dedos cada uno de esos libros coloridos. Eric intentó en vano contarlos, habían docenas de docenas de libros que alcanzaba a ver a través de la abertura de la puerta.
    El Abuelo apareció repentinamente ante ellos, un tanto incómodo que estuviesen «espiando» su biblioteca. «Estos descuidados niños arruinarán mis libros y desordenarán todo si les dejo entrar,» le decía el Abuelo a la Abuela.
    Hizo una sonrisa y desempolvó los dos libros que acababa de escoger de la biblioteca. Ninguno de ellos era tan grueso como los que Hannah había visto adentro.

    – «Peces,» dijo el Abuelo, y le alcanzó el libro de peces a Hannah. Ella lo miró e hizo un gesto de agradecimiento con la cabeza.
    – «Alejandro Magno,» pronunció nuevamente mientras le entregaba el segundo libro a Eric. «Gracias,» respondió inmediatamente.
    El abuelo sonrió quedamente. «Cuiden esos libros… y ahora váyanse de aquí.»

    Hannah y Eric dieron media vuelta y caminaron a su cuarto. Eric se detuvo al doblar la esquina y miró a escondidas al Abuelo, quien metía su mano en el bolsillo de su chaqueta para sacar…

    …la llave.

    El Abuelo cerró la la puerta de la biblioteca y antes que pudiese ver a Eric, el muchachito corrió a su cuarto, saltó a su cama y se tapó con las frazadas.

    Al día siguiente, el Abuelo había salido temprano con sus caballos a la ciudad y los chicos estaban solos con la Abuela. Estaban comiendo huevos revueltos y jamón en el desayuno cuando Hannah no pudo aguantar las ganas y tuvo que preguntar:
    – «Abuela, ¿podemos entrar a la biblioteca?»
    La Abuela miró a la pequeña y le dió una de esas dulces sonrisas que la hacen ser la Abuela.
    – «Oh, ¿y por qué querrías entrar a la biblioteca? ¿El abuelo no te dió anoche un libro de peces?»
    – «Oh sí, sí, pero ya terminé de leerlo y no tiene muchas figuras.»
    – «Yo también terminé mi libro,» dijo Eric soñoliento, «y no era un buen libro.»
    – «El Abuelo tiene muchos libros en la biblioteca,» dijo Hannah. «Seguramente debe tener libros con más peces, de los de colores.»
    – «Bah,» dijo Johan, quien no estuvo presente en la noche anterior. «No sé qué tanto interés tienen en la biblioteca si el Abuelo ya les ha prestado docenas de ellos.»
    – «Pero el Abuelo siempre saca los delgaditos, nunca presta los gruesos… ¡los de colores!» contestó Hannah.
    – «¿Y qué? Los libros gruesos tienen sólo letras y a tí solamente te gustan ver las figuras.»
    – «Eso no es cierto,» dijo Hannah indignada. «Yo puedo leer tan bien como tú.»
    Eric terminó de morder su pan y dijo:
    – «Pues yo también quiero los libros gruesos. Quiero leer más acerca de los grandes hombres.»
    – «Bah, grandes hombres.»
    – «Te pierdes de mucho, Johan. El Abuelo nos saca los libros más cortos, pero dentro de la biblioteca… adentro hay un tesoro.»
    – «¿De verdad?» preguntó Hannah, abriendo los ojos.
    – «Se refiere a los libros, tonta.»
    – «Oh Johan, ¡tú eres el tonto!»
    – «Chicos, chicos, no peleen,» interrumpió la Abuela. «¿Realmente quieren entrar a la biblioteca del Abuelo?»
    Los ojos de los chicos brillaron.
    – «Sí.»
    – «Oh, sí, sí.»
    – «Um, no.»

    La Abuela ignoró a Johan y sonrió a Eric y Hannah mientras sacaba una llave gastada de su bolsillo…


    Hello and welcome
    Hay una biblioteca llena de libros, artículos, enseñanzas, personas y oportunidades que están encerrados bajo llave. Todos esos recursos valiosos podrían estar a nuestra disposición de no ser porque hay una barrera que nos impide llegar a ellos. Esa llave, esa barrera es el Inglés. Las traducciones en español que llegan a nuestras manos son atrasadas o incompletas, muy raras veces podemos obtener la totalidad del conocimiento que está expresado en inglés. El español es un Abuelo muy selectivo. Solamente tenemos los libros delgados, los que se venden bien, los que tienen más pegada, mientras que los gruesos, los especializados, los que nos interesan, ¡los de colores! están cerrados con esa llave llamada inglés.

    Querrámoslo o no, el inglés es la lingua franca actual. Gran parte de las películas, música, libros y productos que recibimos están en inglés, pues provienen del extranjero, principalmente Estados Unidos. Que esta tendencia nos guste o no es ortogonal a lo que estamos perdiendo: recursos de conocimiento valiosos.

    Los documentos más recientes, los descubrimientos importantes, las noticias urgentes aparecen en inglés. Si no sabes inglés, te estás perdiendo de todo eso. Hoy en día la tecnología y el conocimiento avanza a un ritmo veloz, hay que estar constantemente actualizándose y manteniéndose al día — y la vanguardia está escrita en inglés.
    Si realmente te interesa mejorar en tu carrera y crecer como persona (más de esto en otro post), aprender inglés te será una habilidad increíblemente útil. Trata de imaginarte por un instante cómo sería tu vida si no supieras leer ni escribir. ¡Tendrías una enorme desventaja frente al resto del mundo! Y no es muy diferente a no saber hablar ni escribir en inglés.

    But do I really need English in my life?
    Obviamente, puedes vivir el resto de tu vida sin saber inglés. Lo cierto es que vas a vivir con una seria desventaja contra aquellos que sí conocen ese idioma, lo dominen o no. Puedes perder oportunidades, aprender conocimientos clave, contactos, traslados y un largo etcétera. Les digo en serio y honestamente, no se qué sería de mi vida hoy si no supiese inglés. La práctica totalidad de cosas que leo cada día están en inglés, toda mi carrera se mueve en inglés, el 90% del conocimiento que tengo acumulado lo he obtenido de fuentes en inglés. No tengo restricciones ni barreras para aprender algo nuevo que está escrito en inglés — y todo esto se lo agradezco enormemente a mis padres.

    No, no necesitas Inglés para vivir, no es un requisito indispensable. Todo se reduce a qué tan alto aspiras, qué tan lejos quieres llegar, qué tanto quieres crecer y desarrollarte como persona… y qué barreras estás dispuesto a superar para lograrlo.

    El conocimiento es poder.

    Is it difficult?
    Depende mucho de cada persona la dificultad que tenga para aprender un nuevo idioma. A algunos se les hace ciertamente fácil (y esto tiene mucho que ver con la costumbre de aprender, los patrones de aprendizaje que ha obtenido y el nivel de actividad al que sujeta su cerebro — materia de otro post), mientras que a otros se les hace verdaderamente difícil.

    Mucho tiene que ver también la actitud. Ya perdí la cuenta de cuántas veces he intentado enseñarle a mi Mamá a usar el microondas, pero es como si ella hubiese decidido subconcientemente que es difícil y que no lo puede aprender. [1]

    Si te has convencido a tí mismo que es difícil, pues es difícil.

    En cambio, si decides probar y ver con una actitud abierta y deseosa, descubrirás sin prejuicio alguno si realmente es difícil o no. Si te resulta difícil, al menos podrás decir que lo intentaste.

    Como todo en la vida, para aprender Inglés tienes que quererlo. Si realmente quieres aprender inglés, sumérjete en ese lenguaje, empápate, llena tu vida de inglés. Canta en inglés, habla en inglés, repite lo que escuchas en inglés, lee en inglés, piensa en inglés.
    Busca amigos que conozcan inglés. Si no tienes amigos, métete a un chat donde hablen todos inglés (qué fácil lo tienen los chicos de hoy, de verdad). Mira tus películas en inglés. Tapa los subtítulos o configura tu DVD para ver la película enteramente en inglés.

    No seas ignorante.

    No, no vas a entender nada al principio, y no te desanimes por ello. Todo viene con la práctica constante. Es cuestión de persistir y ser disciplinado.

    Oh, una observación: no intentes educar tu oído escuchando canciones en inglés. Varios artistas pronuncian horriblemente (y cantan horriblemente también), y su interés es, en varios casos, melódico. A menos que sea Frank Sinatra o Paul Buchanan, olvídalo. Si es Axl Rose, huye como la plaga. :)
    Si quieres educar tu oído, en internet hay bastante de los llamados podcasts. Hay de todo, comedias, noticias, conferencias, libros, entrevistas, etc. De verdad que hoy la tienen tan fácil…

    Do I have to master it?
    Depende mucho de qué es lo que aspires. Si lo que quieres es tener oportunidades en el extranjero, obviamente es obligatorio que domines lo mejor posible el lenguaje.
    Si lo que quieres es poder leer y mantenerte informado sobre los avances recientes en tu carrera, podrías sacrificar el oído y darle duro a la escritura y lectura (que es lo que yo he hecho).
    En cualquier caso, un poco de inglés es mejor que nada de inglés. Prefiero mil veces decir: «Me parece que es algo sobre un perro heroico» a decir «No tengo ni la más remota idea de qué rayos dice ahí. Dog?»

    Ok, I’m sold! How can I learn?
    La primera opción: institutos. En nuestro país hay bastantes institutos de inglés. El mejor termómetro de la calidad de cada instituto son sus alumnos. Escoge a tres diferentes (mejor si son de diferentes niveles) y pídeles su opinión del instituto y que te traduzcan algo — por ejemplo, la letra de una canción. Tres es un mínimo, recuerda que hay alumnos que aprenden inglés porque quieren hacer vida social o porque Papi y Mami wants them to.

    Si el dinero no es problema, ve por el más caro.

    Si el dinero es una limitante, entonces ve por el que más se acomode a tu presupuesto.

    La segunda opción: clases particulares. A veces suelen ser más caros que un instituto, a veces no — y el nivel de enseñanza varía demasiado. No lo recomiendo mucho, sinceramente. Si quieres ir por esta ruta tienes que asegurarte que la persona que te va a enseñar realmente sabe.

    La tercera opción: con un libro, autodidacta. Si no queda otra, adelante con ello.

    ¿Casado y con hijos?
    Oh, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor, por favor…

    …dales la llave.

    Notas
    [1] En realidad, mi Mamá no tiene interés en usar el microondas porque excitar partículas con microondas no es una idea, um, excitante de calentar la comida. Hay un je ne se quai que comparto con ella; yo tampoco soy muy fan de usarlo. Ultimamente tiendo a calentar/hervir las cosas con la cocina.

    Kentaro Haneda – Macross: Ai Oboete Imasuka


    Macross: Ai Oboete Imasuka es un clásico de animación japonesa. Su producción es magistral, no solamente en el área visual sino también musical. La banda sonora fue compuesta por Kentaro Haneda.
    No he encontrado mucha información relevante de este compositor. En la página de IMDB se listan las películas y series de televisión en las cuales ha participado. Su último trabajo data de 1987.
    ¿Qué será de él?

    La música que ha compuesto para Ai Oboete Imasuka es uno de los tesoros musicales más preciados que tengo. Durante mi estadía en Lima el año pasado estuve escuchándolo casi todos los días en mi discman durante los viajes de ida y regreso al trabajo. Aprendí un par de cosas interesantes sobre composición orquestral y contrapunto, y sobre cómo dibujar un firmamento estrellado con la orquesta.

    Hace poco tuve la oportunidad de volver a ver Ai Oboete y salí un tanto decepcionado al ver que la música no fue sincronizada tal como la recordaba. De todos modos cada una de las composiciones son magníficas y aportan el ambiente y emoción adecuados para los combates (la música para las dos primeras apariciones de los Valkyries son absolutamente geniales), las escenas románticas y, por supuesto, la canción final por la cual gira la historia: Ai Oboete Imasuka (debería ir un signo de interrogación, ya que es una pregunta («¿Recuerdas el amor?»)) — compuesta por el mismo Kentaro y cantada por la popular Mary Ijima.

    Aquí mis pequeñas observaciones de algunas de las pistas más resaltantes:

    Eternal Love (Prologue)
    Con una entrada cinemática y magistral, Kentaro Haneda abre paso a una variación de la conocida tonada de la serie Macross, pero con otra forma y contexto. La primera parte está dominada por los instrumentos de viento y es oscura, misteriosa, gigantesca.
    La parte que más me gusta es la aparición de las cuerdas, que en la película sincroniza con la aparición de los Valkyries. Este es el «tema» principal del amor que es el protagonista de todo el soundtrack. Es una melodía bastante romántica, muy preciosa e inspiradora, y contrasta bastante bien al ver a los famosos Valkyries elevarse y surcar el espacio.

    Fate’s Arrow
    La segunda aparición de los Valkyries para enfrentarse a los battle pods. La melodía empieza de golpe y es de corte heroica. Aquí tiene bastante protagonismo el corno francés (que de francés no tiene nada), así como también la aparición de una guitarra eléctrica ochentera. En la película usan solamente la primera parte de esta composición para luego dar paso a…

    Dogfighter
    Mucho más movida y con más acción para el combate mismo contra los battle pods. Esta vez el protagonismo lo tiene la guitarra eléctrica y la orquesta simplemente lo acompaña acentuando de cuando en cuando con los bronces. Del mismo modo que Fate’s Arrow, tampoco se usa la totalidad de esta composición.


    Trembling Heart
    Empieza con el tema del amor, reproducido por el piano solo, para luego ser acompañado de un seductor saxofón. La parte más preciosa de esta composición es cuando entran las cuerdas, hasta arriba, y culmina majestuosamente. Esta pista es una de mis favoritas.

    Battle of 500,000 years
    Música de fondo cuando Roy, Hikaru y Misa intentan escapar de la nave Zentraedi. La composición es tensa, con un ritmo peculiar. Todos los instrumentos se lucen juntos y la melodía empieza a tener sentido después de escucharla varias veces.
    El título se refiere al combate entre Zentraedis y Meltrandis, una lucha que ha durado 500,000 años.

    Ruined Planet
    Al principio esta pista la salteaba cada vez que sonaban las primeras notas. Empieza con el tema del amor nuevamente, pero luego hace un crescendo a una estridencia cuando en la película Misa y Hikaru descubren que han sido teletransportados a la Tierra, destruída. La primera vez que la escuché me asustó bastante — el efecto de terror es muy bueno. Después de tiempo decidí escucharla completa y ahora sí la escucho del todo, aunque a veces la salteo si no estoy de humor para aterrar a mi familia. :)

    Teenage Dream
    El tema recurrente del amor otra vez, que acompaña a la primera cita de Hikaru y Minmay. La primera parte me gusta mucho, es juvenil y da la sensación de paseo, movimiento, alegría y desinterés. Mi parte favorita es cuando la música cambia el ritmo al vestirse Minmay con traje de novia. Las siempre emotivas cuerdas acompañan a esta parte y es para soñar. Hay una parte donde el ritmo se acelera y un violín hace un movimiento veloz — esta pequeña parte es reemplazada en el anime con otros instrumentos y otra composición.

    Ai Oboete Imasuka
    El tema final de Minmay fue compuesto también por Kentaro Haneda e incluye instrumentos sintetizados. La orquesta apoya muy poco, a excepción del trombón que protagoniza un interludio — me parece que el piano que suena también es sintetizado. De todos modos la composición es muy buena. Lo más resaltante es su longitud, de seis minutos y veinticuatro segundos (!!!).

    Estas son solamente algunas de las composiciones presentes en el soundtrack. Por darle prioridad a otras cosas he elegido descansar mi teclado MIDI, mas me gustaría algún día terminar una valiosa composición tan majestuosamente como Kentaro Haneda. Su aportación para este anime ha sido una de las piezas clave para su éxito, pues la música es uno de los elementos fundamentales de la saga de Macross (y bastante descuidada en Macross Zero, en mi opinión).

    Cómo postear más seguido en tu blog

    Me alegra ver que Nestor está escribiendo más seguido. Tengo un par de escritos pendientes para publicar, y mientras trato de refinarlos todos he dejado de actualizar mi página.

    Leyendo los escritos de Nestor y viendo la corta longitud de varios de ellos (lo cual no tiene nada de malo), me hizo recordar al concepto de «Mini-Sagas,» un ejercicio de lenguaje.
    Una Mini-Saga es un texto de exactamente 50 palabras, ni una más, ni una menos. No es tan fácil escribir algo con 50 palabras, pues te fuerza a ser más conciso y sin decoraciones. Es jugar con las limitaciones.

    Muchas veces descuidamos nuestro weblog y rompemos esa promesa secreta «Tengo que actualizar mi blog» constantemente. Si estás en el mismo barco, entonces escribe un post corto a manera de Mini-Saga. No importa si rompes la regla de 50 palabras, solo escribe algo corto y conciso. Intenta escribir tu pensamiento o idea con la menor cantidad posible de texto. No debe tomarte mucho tiempo y es divertido.

    Notas
    Los Linuxeros pueden usar el comando wc («wordcount») para contar las palabras.

    «Viejo para las planchas»

    Edwin: señor… reportandome
    Edwin: presente!!
    jgwong: 10 planchas!
    jgwong: Contando!
    Edwin: 1
    Edwin: 2
    Edwin: 4
    Edwin: 10
    jgwong: !
    Edwin: ya toi viejo pa las planchas

    Resumen ejecutivo

  • Al parecer mi vista está empeorando. Aún con las gafas puestas siento cansancio y tengo que hacer esfuerzo cuando estoy frente a la PC.
  • Quiero dejar de tomar gaseosas, pero hago exactamente lo contrario.
  • Ya se viene Junio, mitad de año. Tal como lo aprendí el año pasado y tal como lo planeé en Enero, voy a darle una revisada a todas mis metas. Me alegro de ver que he hecho progresos importantes.
  • ¿Cómo le dices a tu alumno que ame más a su Mami?
  • Siempre vi aburrido picar y pelar; me gusta más la idea de coger ingredientes y experimentar como chef, pero he descubierto que no soy malo picando. Ni tampoco es aburrido si tienes la compañía adecuada.
  • Las cosas apuradas nunca salen bien.
  • De una vez por todas: ¿cuál es la diferencia exacta entre anillo, aro y sortija?
  • Afanando a Fionna

    Aclaraciones:
    – Fionna es mi librería de validación de formularios.
    – Edwin trabaja en un proyecto importante con nosotros en Peruserver.

    Ahora sí, el chiste:
    jgwong: Hola Edwin, qué tal, cómo vas?
    Edwin: aca ps… afanando a fiona
    jgwong: Jajaja
    Edwin: chica dificil
    Edwin: pero ta que cae
    jgwong: Jajaja
    jgwong: Cuidadito que es mi hija
    Edwin: uy
    Edwin: ohh.. no castigo chino.. nooo
    jgwong: Si te comportas como un caballero, no hay problema, todos felices

    Comentario obligatorio:
    Quiero una hija. :(