miércoles, noviembre 28, 2007

Primer Twitteo

La diva Noesh desde hace varios días me compartió este meme: publicar cual fue mi primer twitteo.

Me costó un buen de trabajo encontrarlo pero aquí está:


Ahora, le envió este meme a: @xhindi, @arturogarrido, @sonny_taz, @atzimba y @ebarrera y obviamente a todo aquel que quiera tomarlo.

Finito.

martes, noviembre 27, 2007

El Changuito cumple diez años

Dinámico como un torbellino, transparente como una gota de agua, sensible como un colibrí, féliz como el solo.

Féliz cumpleaños Changuito. Te quiero un chingo.

Finito.

lunes, noviembre 19, 2007

Configuración de Rails y SQL Server

La naturaleza multiplataforma de Ruby On Rails nos demanda adecuarnos a todos los ambientes de ejecución disponibles aún y cuando estos no sigan la filosofía del software libre.

Un ambiente que se va a presentar muy comunmente es Windows y SQL Server.

Entonces he aquí la receta sencilla y probada para soportar SQL Server dentro de Rails.

Primero, habrá que descargarse la gem ruby-dbi desde http://rubyforge.org/projects/ruby-dbi . ruby-dbi es un mecanismo de acceso a datos inspirado en Perl::DBI. En la gem viene incluido el soporte a varias bases de datos y durante el proceso de instalación se selecciona cuales se van a soportar.

La descarga es un archivo .tar el cual se expande en un directorio desde el cual ejecutamos las siguientes instrucciones:


# primero configuramos el ambiente para usar ActiveX Data Objects (depende de win32ole)
c:\>ruby setup.rb config --with=dbi,dbd_ado

# la llamada de siempre
c:\>ruby setup.rb setup

# finalmente la instalación
c:\>ruby setup.rb install


Con esto ya tenemos la capacidad de acceder a SQL Server desde Ruby. Ahora falta configurar SQL Server para que permita conexiones mediante usuario/contraseña. Para esto configuramos el modo de autenticación "mixed" dentro de las propiedades de seguridad del servidor.

A continuación se crean el login de SQL Server y la base de datos asociando el login como dbo de la base recién creada y se crea el proyecto rails como de costumbre.


c:\>rails proyecto


Después se actualizan los datos del archivo config/database.yml


development:
  adapter: sqlserver
  database: database_development
  username: user
  password: password
  host: .\SQLEXPRESS


Esta configuración funciona con las versiones 2000 y 2005 de SQL Server. La diferencia que he encontrado es el manejo de valores nulos en columnas de tipo integer. En SQL Server 2005 sustituye los valores nulos con ceros mientras que en la versión 2000 funciona correctamente.

Finito.

MVC significa "Más-Visto-que-Conocido"

Ultimamente se le ha dado una extensa difusión al hecho de que Microsoft está preparando una implementación del patrón de diseño MVC.

Una vez más Microsoft llega tarde y para evitar poner su cara de perdedor monta la fanfarria para compartir su última gran innovación.

MVC, el patrón, es una de las cosas más antiguas en la ingeniería de software. Fue desarrollado circa 1980 en los (realmente innovadores) laboratorios Xerox buscando una manera de separar los diferentes "concerns" al momento de construir una aplicación. Hasta ahí lo dejaron entonces.

Posteriormente, Sun Microsystems al lanzar su parafernalia conocida como J2EE buscó algo en que apoyarse para facilitar el desarrollo de aplicaciones web (el infame modelo 2), cosa que encontró en MVC dejando atrás incluso tecnologías que ellos mismos habían desarrollado.

Fue tan buena la aceptación del uso de este concepto que en el mundo del código libre aparecieron varias implementaciones del patrón MVC más puristas o independientes a Sun. Así encontramos Struts, Spring, Tapestry, WebWork y muchos otros más que por diversas cuestiones pasaron a la posteridad.

Al ser un patrón de diseño, no depende de un lenguaje o artefacto específico, sino que representa una solución genérica para aplicarse en las más diversas situaciones.

El corazón de MVC es la división de una aplicación delimitando específicamente sus responsabilidades, así tenemos:
  • Modelo - Se encarga de la representación específica de la información perteneciente al dominio del problema. En una implementación específica se responsabiliza del acceso y recuperación de datos.
  • Controlador - Es el cerebro maestro. El que se las sabe todas, todas. Los procesos de la aplicación se encuentran concentrados en un conjunto de controladores que son el corazón y el cerebro de la aplicación.
  • Vista - La parte coqueta. La parte visual. La interface de usuario que se encarga únicamente de presentar la información que le entrega el controlador. Nunca se entera (al menos no al detalle) de la existencia de los modelos.

El beneficio final de usar este patrón es la simplificación en la distribución de responsabilidades, al aislar las acciones que corresponden a cada clase participante del sistema. En pocas palabras en una excelente idea.

Es por eso que desde hace más de veinte años que alguien tuvo la ocurrencia de inventarlo (no sé realmente si valga la expresión "inventar") se utiliza obligadamente en la construcción de aplicaciones web, excepto claro, en aquellos casos en los que la premisa es No-inventado-aquí.

Hace cerca de ocho años cuando Microsoft lanzó al mercado la tecnología .NET presentó su alternativa para el desarrollo web: los formularios Web. Una idea interesante, complicada de aprender de inicio que trajo a las herramientas de Microsoft algo del dinamismo indispensable para seguir en la contienda.

Aunque algunas personas han cuestionado la cuota de mercado que ha ganado .NET, un excelente indicador son las comunidades de software libre que se basan en los componentes de .NET para arrancar, construir y compartir alternativas a los productos propietarios de Microsoft. Esta corriente hasta hace un par de años no tenía un nombre aunque si varios protagonistas. Actualmente se le conoce como ALT.NET.

Dentro de estos esfuerzos de código libre se incluyó la implementación del patrón MVC para el desarrollo de aplicaciones web, en contraposición a la línea "oficial" de Redmond que se basó principalmente en otro patrón conocido como Front Page Controller (Pa'más detalles léanse "Enterprise Solution Patterns" del equipo de Patterns & Practices). Simplemente MVC no les pareció lo suficientemente bueno, no les llenó el ojo.

Siete años después y con una estela de productos open source muertos, Microsoft anuncia que la gran solución para el desarrollo web es MVC.

Microsoft llegas tarde. Como siempre.

Finito.

sábado, noviembre 17, 2007

Desarrollo multiplataforma

Actualmente estoy desarrollando una aplicación web con Rails. Lo curioso del caso son los ambientes que manejo: desarrollo, pruebas locales y servidor de prueba.

El equipo de desarrollo como imaginarán es mi laptop, el ambiente de pruebas locales es mi laptop con otro sistema operativo y el servidor de prueba está más cercano a lo que será el ambiente de producción. En la tabla a continuación muestro los detalles































Ambiente Características OS DB Server Ruby/Rails versions
Desarrollo MacBook Core 2 Duo/2GB RAM Mac OS X 10.4 (Tiger) sqlite3 1.8.6/1.2.5
Pruebas Locales MacBook Core 2 Duo/2GB RAM Microsoft Windows XP Professional SP2 SQL Server 2005 Express 1.8.6/1.2.5
Servidor Pruebas HP Xeon 2.0 GHZ x 4 Windows 2000 Advanced Server SQL Server 2000 Enterprise Edition 1.8.6/1.2.5


El soporte a SQL Server en Windows es algo laborioso de configurar (prometo detallarlo en otro post) y algo que llama mucho la atención es el diferente comportamiento de SQL Server entre sus dos versiones, 2000 y 2005. En SQL Server 2005, todos los campos enteros aún y cuando se defina el valor por defecto como null siempre aparecen con un valor '0'. En SQL Server 2000, si dices null aparace null. Tal cual.

Fuera de eso y de las obvias configuraciones el código de la aplicación es el mismo.

Por cuestiones desconocidas para mí (y creo que para el admin del servidor también) el desempeño del servidor es terriblemente malo. En los logs de Rails se registra un cálculo aproximado de peticiones que se pueden atender según el equipo en el que estamos ejecutando. En mi laptop este número varia entre 13 y 15 peticiones por segundo. En el servidor de prueba hay valores tan bajos como 4 peticiones por segundo. Espero que el ambiente de producción esté mejor operado.

Finito.

jueves, noviembre 15, 2007

El Camino del Código

El estar trabajando con Rails ha despertado en mí muchas cosas que tenía dormidas.

Reencontrarme con el desarrollo ha sido estupendo, las problemas que por momentos parecen no tener sentido, se resuelven de manera transparente y relajada como el correr del agua en un riachuelo. No hay que poner demasiado esfuerzo, como caballo desbocado sino más bien permanecer quieto y alerta para en el momento justo tirar una sola línea de código como trazo de pincel... ni más, ni menos.

También cuando vas escribiendo código y piensas: "si éste método existiera de este otro modo..." y el método ya existe o cuando integras por primera vez un nuevo concepto y empiezas a complicar todo cuando la respuesta es tan simple.

No es que Rails sea mejor que X o Y. Es simplemente nadar con la corriente en lugar de nadar contra la corriente.

Finito.

sábado, noviembre 03, 2007

Todos los Santos

Se confabularon para realizar un milagro que me parecía casi imposible: escuchar de nuevo (en vivo) a Luis Eduardo Aute pero el jueves anterior me fue concedido.

La plancha dividida y enorme del Zócalo de la Cd. de México alberga una exposición sobre el Día de Muertos auspiciada por el Gobierno del Distrito Federal y dentro del programa de actividades se anunció la presentación del Maestro Aute, cosa que me hizo replantear completamente mi agenda del día en cuestión y que gracias al interne' y sus ondas me permitió además conocer (en persona) a una chica líndisima y reencontrar a un nuevo amigo.

La cita fue, obviamente, en alguna salida de la estación "Zócalo" y después una caminata para encontrar el, a mí gusto, pequeño escenario de la presentación. Entre comentarios y plática de "hay que hacer tiempo", revisamos un programa y nos dimos cuenta que también estaría presente Oscar Chávez. Wow! Dos grandes por el mismo boleto.

Boleto que empezó costando escuchar, o más bien, aguantar los berridos de Lupita Infante. Que mal plan que se cuelgue del apellido de su 'apá pa'cer los desfiguros que vimos. Montaron una escena de la clásica peli "Los Tres Huastecos" y algo que me cayó mucho de variedad fue ver que muchos, sino todos, nos sabemos las canciones y los diálogos. Estoy seguro de que otra forma de demostrar la nacionalidad mexicana es preguntar canciones y diálogos de películas de Pedro Infante. Neta.

La presentanción de Lupita Infante llegó a su fin no sin antes apabullarla en su última canción con gritos de "Aute! Aute!" y se inició una pausa para el setup del sonido para la presentación del Maestro.

Desde que lo oí por mero accidente en pasado mes de mayo en Coatzacoalcos, simplemente quedé enmarañado, enredado en la letra de sus canciones que han pasado a ser parte esencial de mis mecanismos para vivir, recrear, recordar muchas de mis emociones y mis recuerdos. Frases que sin ser mías me permiten expresar de una manera precisa lo que siento y que me cuesta trabajo decir de una manera inteligible. Y la catarsis postergada que sabía que había de reventar en medio de un colectivo, el cuál al integrarte regala momentos de anonimato que permite que te explayes sin que nadie te cuestione en lo más mínimo.

Al igual que en Coatza, el concierto giró principalmente sobre su último disco e hizo la introducción para casi todas las canciones con su característico humor. Así, en medio de la cubierta éterea y el calor humano, estuvimos coreando y cantando aquellas canciones que nos gustan, nos mueven o mayormente nos duelen...

Aunque todo ya es nada
no sé por que te escondes y huyes de mi encuentro
por saber de tu vida
no creo que vulnere ningún mandamiento





Aquella fue la primera vez
tus labios parecían de papel
y a la salida en la puerta
nos pidió un triste inspector nuestros carnés

Luego volví a la Academia
para no faltar a clase de francés,
tu me esperaste hora y media
en esta misma mesa, yo me retrasé.





O momentos más amenos

Por más que nos pille el estúpido de tu marido,
Quiero bailar un "slow" with you tonight.
Y aunque enamorarme de tí me lo tengas prohibido
quiero bailar un "Slow" with you tonight, my love.





Lo que sucede es que me he enamorado,
como el perfecto estúpido que soy,
de la mujer que tienes a tu lado...
encájame el directo que te doy.






El final de su presentación lo marca despidiendo a sus músicos y montandose él , el escenario, su voz y nada más...

De alguna manera tendré que olvidarte
por mucho que quiera no es fácil, ya sabes
me faltan las fuerzas
ha sido muy tarde
y nada más.. y nada más
apenas nada más





Después, entró al escenario un trío de ruquitos (con todo respeto) y anunciaron al gran Oscar Chávez. Al ir escuchando las notas que brotaron de los instrumentos de los músicos, quedó grabado en mi su nombre: Los Morales. Ruquitos pero K's. Son terriblmente buenos y ahora entiendo por que son sus acompañantes oficiales.

Boleros, huastecas, norteña y canciones clásicas que nos hicieron cantar, el Zócalo se encendió con canciones como "La Mariana", "La marijuana", "Flores Negras", "Sin un amor", "Hasta siempre comandante", "Por tí" y mi particular favorita: "Macondo".


Los cien años de Macondo suenan, suenan en el aire
Y los años de Gabriel trompetan, trompeteando anuncian
Y encadenado Macondo sueña con José Arcadio
Y aunque la vida pasa siendo remolino de recuerdos

Las tristezas de Aureliano, son cuatro
Las bellezas de Remedios, violines
Las pasiones de Amaranta, guitarra
Y el embrujo de Melquiades, es oboe
Úrsula cien años, soledad Macondo
Úrsula cien años, soledad Macondo

Eres epopeya de un pueblo olvidado
Forjado en cien años de amor y de historia

Me imagino y vuelvo a vivir
En mi memoria quemada al sol

Mariposas amarillas Mauricio Babilonia
Mariposas amarillas que vuelan liberadas



Lo único malo fue la resaca al día siguiente, tanta emoción causa cierto tipo de embriaguez cuando no hay ese alguien especial para compartirla.

Finito.