Anotaciones de diversos temas relacionados con código abierto, metodologías de desarrollo y programación con Ruby on Rails
jueves, julio 31, 2008
Pero no me voy a doblar
martes, junio 24, 2008
Google Developer Day 2008
Único desde el proceso de inscripción en el cual tenías que proporcionar mucho de tu perfil e incluso url's de aplicaciones desarrolladas.
Finalmente llegó la confirmación y empezó la cuenta atrás para la fecha del evento y la travesía de media ciudad (o ciudad y media) para arribar al Centro Banamex.
El registro simple y directo. Cero complicaciones. Se perfilaba el look de la gente de Google, todos con unas curiosas batas tipo laboratorio.
En ese momento fue cuando empecé a encontrar conocidos y a conocer a muchas personas. Varios amigos nos fuimos encontrando y se fue armando la banda antes de entrar al salón de las conferencias plenarias.
Estas conferencias estuvieron interesantes, si tuviera que reducir al máximo lo que me dejaron quedan solamente dos palabras: comunidad y compartir. Realmente creó que la gente de Google se preparó para dar un mensaje positivo, incluyente e incluso comercial pero en un marco de una relación "ganar-ganar".
Al termino de las plenarias se organizó un brunch y me impactó de sobre manera la diferencia de cultura, actitudes y gente contra la conferencia gubernamental que se llevaba a cabo paralelamente. El área de los visitantes del GDD era un bonche de puffs para desparramarte a tu gusto. Lamentablemente no fueron suficientes y algunos tuvimos que buscar espacios alternativos.
Las conferencias por separado (breakout) dieron inicio y me apunté a la que trataba el tema de Google App Engine (GAE). Lo primero que me decepcionó fue ver que ponente utilizaba Windows... al menos era XP. Lo noté nervioso y algunas veces novatón. Esperaba más de la presentación.
A continuación vino el tema de GWT, que ya lo conocía y que me pareció interesante escucharlo de alguien que lo conoce muy, muy, muy a fondo. Excelente ponente.
El penúltimo tema fue Gears, la herramienta de Google para desarrollar aplicaciones web que pueden funcionar fuera de línea (offline). El ponente estuvo de miedo: ¡excelente! Y pues el tema da harto para hablar.
La última presentación a la que asistí fue la de OpenSocial + GAE. El ponente ya estaba muy cansado y la veda' fue como que de medio hueva.... pero bueno...
Como casi siempre lo mejor de todo fue la gente. Harto twittero, harto geek, harto conocido. Creo que a la fecha ha sido el mejor evento del año.
Finito.
sábado, junio 21, 2008
Adios Dulcinea, felicidades Ara...
He decidido escribirte
después de tanto llorar
Mis lágrimas son hoy estos versos
que tu ausencia nunca podrá borrar
Me voy como vine a tu vida
sin hacer ruido me despido, me voy
pero me cuesta tanto olvidarte mi amor
me cuesta tanto decirte adiós
Hoy he vuelto a entender
que jamás volverán aquellos paseos
de vuelta al hotel
en que tu me empujabas para no perder
ni un solo instante en hacer el amor
Dejaré de verte crecer
me marcho a vivir donde habita el olvido
intentaré buscar otro camino, otro amor
Cada vez que intento perder el miedo a caer
me tropiezo en mí mismo
y dejo escapar a quien me ha querido
y me quedo sin luz
El suelo de mi vida se viste
se abriga con hojas de un adiós
Mi destino es amar y despedirme
pedir permiso para vivir
Te dejaste olvidados
en cada rincón de mi alma
trocitos de tu corazón
Te dejaste olvidado en mi alma tu olor,
dormía abrazado a una flor
Dejaré de verte crecer
me marcho a vivir donde habita el olvido
intentaré buscar otro camino, otro amor
y no sé si me perderé o me encontraré
me siento tan solo...
pero venciendo iré
en busca de todo lo que no te di
Hoy he vuelto a entender que jamás volverás
a acariciarme antes de dormir
y pegada a mi pecho me pidas
que te abrace y no te deje ir
Dejaré de verte crecer
me tengo que ir y encontrar mi camino
y nunca olvidaré lo que me has querido, amor
cada vez que intento perder el miedo a caer
me tropiezo en mí mismo
y dejo escapar a quien me ha querido
y me quedo sin luz
Adiós mi vida, me voy
te dejo marchar
viviré en tus recuerdos
jamás te olvidaré
Adiós Dulcinea, mi amor
y si nos volvemos a ver, sólo abrázame
sigo siendo aquél niño con miedo a madurar
duermo pegado a tu foto, mi amor
adiós Dulcinea, mi amor
Por fin te acepto como un recuerdo, hoy que cumples un año más.
Felicidades Ara, adiós mi primer Dulcinea.
Finito.
jueves, junio 12, 2008
jueves, abril 10, 2008
extraño
extraño las tardes contigo. perderme en tu sonrisa. que me duela el alma por no tenerte y ser inmensamente feliz por que eres.
extraño mirarte sin que te des cuenta. mirarte detrás del cristal y embelesarme con tus gestos.
extraño tanto de ti. más de lo que te imaginas.
y te sigo extrañando....
Finito.
jueves, febrero 21, 2008
CONSOL 2008
Como el año anterior envié mi propuesta para exponer y con mucha alegría leí el correo donde me notificaron que fue aceptada. Eso me puso en un real aprieto, a partir del cambio laboral me ha quedado muy poco tiempo para dedicar a estas actividades. Pues aún así no di marcha atrás y estuve pendiente de de la fecha del evento.
El tema para la presentación fue "Rails: Desarrollo Ágil para Web" dado el amorío que traigo con este framework. Estuve leyendo varias referencias para ir organizando la presentación pero la verdad es que casi ninguna me dejo con algo que compartir así que realmente me basé en lo que he aprendido en los últimos meses.
Llegar a la sede fue menos complicado de lo que esperé y después de investigar donde se encontraba la oficina de registro, me dirigí apreciando los edificios de la uni. La verdad es que me parecieron excelentes instalaciones. A punto de llegar a mi destino me encontré con Alejandro Juárez, un excelente desarrollador y conocedor de metodologías ágiles a quien conocí en uno de esos viernes de Cova.
Resulta que Alex también envió su propuesta y fue aceptada. Y además, su presentación era a continuación de la mía. Después de saludar y conversar un poco, finalmente llegué al registro y me dieron mi gafete. Acompañado de Alex buscamos el auditorio y en lo que terminaba el ponente anterior charlamos un rato.
Finalmente llegó la hora, acomodé mi equipo y con un auditorio al 75% de ocupación inicié la presentación. Al principio, como es costumbre, me sentí bastante tenso pero al paso del tiempo me fui relajando y empecé a disfrutar el estar al frente. De hecho, mi temor inicial era que me fuera corriendo en las diapositivas y me acabara la presentación en 15 mins. Cuando me senté junto a la lap para hacer los demos casi llevaba 50 mins. :O
En el tiempo que me quedó hice una breve demo en línea de comandos y reservé cinco minutos para preguntas. No fueron muchas pero bueno, la próxima vez le voy hacer como Sandino, voy a llevar mi lista de preguntas.
Terminando la presentación se me acercó una persona que resultó ser nada menos que Carlos Ortega, otro "railero" que incluso contacté para ofrecerle chamba :D.
Cuando me despedí del auditorio, un voluntario me entregó una bolsa con "souvenirs" y un boleto para ir al comedor así que sin más nos fuimos a la gorra. :D
En una carpa, se encontraba instalado el comedor y ahí me encontré con un buen de caras conocidas: Zodman, Compermisos, Bea y otros ponentes.
Ahi conocí en vivo y en directo a Vendetta. ¡shio!. Y pues a lo que fuimos: comer, charlar y comentar sobre varios temas.
La exposición de Alex empezó con algunos problemillas proyectando la imagen... pero al final lo resolvieron. Realmente me sentí bien novato al ver todo el trabajo de Alex y su equipo.
Otro tema importante de este CONSOL es el 3er aniversario de la Revista SL en la cual he tenido la oportunidad de colaborar echando a perder los artículos :P
Finito.
jueves, febrero 14, 2008
Amo, entonces vivo
Te amaré aunque tenga final
Te amaré, te amaré en lo profundo
Te amaré como tengo que amar.
Te amaré, te amaré como pueda
Te amaré aunque no sea la paz
Te amaré, te amaré lo que queda
Te amaré cuando acabe de amar
Te amaré, te amaré si estoy muerto
Te amaré al día siguiente además
Te amaré, Te amaré como siento
Te amaré con adiós, con jamás.
Te amaré, Te amaré junto al viento
Te amaré como único sé
Te amaré hasta el fin de los tiempos
Te amaré y después te amaré.
Amo a la mujer y a una mujer. Amo por que estoy vivo y vivo por que estoy amando... aunque sea encerrado entre estas cuatro paredes blancas y esta pantalla. No siempre será así. Persistid es la orden.
Finito.
martes, enero 08, 2008
Vivo
Pero hoy le he dado batalla. Y aún perdiendo me siento más vivo que antes.
Finito.
lunes, diciembre 31, 2007
Terminando el 2007
Fue un año particular, no fue un año más. Lo único constante fue el cambio.
Ahora vamos a lo que sigue. El 2008 se presenta en un rato y debemos recibirlo con toda la esperanza en las manos y en el corazón.
Ahora tengo que agradecer a todos los lectores de este blog y desear que se enfrenten exitosamente a todos los retos que se presenten el próximo año.
A mis amigos y seres queridos, el anhelo de seguir contando con su cariño y aprecio por éste y muchos años más, de igual manera mi afecto y amistad incondicional para ustedes.
Por este año, es todo en este blog.
Finito.
lunes, diciembre 24, 2007
Instalando Ruby on Rails en Mac OS X
$ sudo port install ruby$ sudo port install rb-rubygems$ sudo gem update --system$ sudo gem install sqlite3-ruby$ sudo gem install rails --include-dependencies$ sudo gem install rails --version "= 1.2.6" --include-dependenciesviernes, diciembre 21, 2007
A mis amigos
Este año ha sido un cúmulo de cambios en muchos aspectos: en mí, en mi vida, mis relaciones, mi trabajo. Todo esto ha hecho que me repliegue de una manera que a varios les ha parecido incluso agresiva. No hay tal agresión. Simplemente decidí hacer estos cambios de esta manera.
El último gran cambio, el trabajo, se presentó como un reto: cumplir con el compromiso en la segunda semana de diciembre. El compromiso en si mismo fue un reto y la transición laboral fue adicional. Incluso el cambio de herramientas se convirtió en un duelo de voluntades, la ignorancia e inexperiencia contra mi deseo de ganar. Fue difícil. Tampoco fue un drama pero tuve, al igual que las decisiones anteriores, que enfrentarme contra muchos de mis defectos. No pude vencer más que los necesariamente indispensables.
Gran parte de la fortaleza surgió del amor a mis hijos y a mí mismo. Otra parte de la necesidad que tengo de compartir, pero primero tengo que construir algo que compartir. Y hasta el último, mi propio orgullo.
Quiero construir un algo que pueda compartir y eso es lo que busco de aquí en adelante. Y para tenerlo he de trabajar mucho y de manera inteligente. Habrá un momento en que me detenga y estire las manos para ofrecer ese algo y entre todas las personas del mundo se los ofreceré a ustedes mis amigos.
No los he olvidado, no los quiero dejar atrás. Simplemente quiero tener algo que compartir.
Felices fiestas a todos.
Finito.
sábado, diciembre 08, 2007
Rails 2.0: El NexGen del desarrollo web
Para actualizar tu sistema recuerda que lo único que se requiere es ejecutar la siguiente instrucción desde una ventana de línea de comando:
C:\> gem update rails -y
Esta instrucción descargará e instalará todos los componentes necesarios. Un punto importante para tener en cuenta es que pueden existir diferentes versiones de gem instaladas al mismo tiempo, por ejemplo en mi equipo al ejecutar
C:\> gem list --local
presenta todos las gem's instaladas con el número de versión, para el caso de Rails aparece
rails (2.0.1, 1.2.6, 1.2.5)
Web-application framework with template engine, control-flow layer,
and ORM.
Cada vez que se genera un nuevo proyecto Rails, en el archivo config/environment.rb se puede encontrar la versión específica de Rails y cambiarla.
Ahora, a probar las nuevas características de esta versión.
Finito.
Revista SL 9
Finito.
domingo, diciembre 02, 2007
Instalando Rails + sqlite3 en Windows XP
Pues bien, este equipo con todo y sus limitaciones alguna vez me sirvió para trabajar y ahora se me ocurrió actualizarlo al ambiente de desarrollo que utilizo. Pero para tal efecto se me ocurrió utilizar sqlite3 en lugar de cualquier otro RDBMS. Los pasos fueron los siguientes:
- Descargar e instalar Ruby.
- Descargar, extraer e instalar RubyGems.
C:\ruby-gem-0.95> ruby setup.rb- Actualizar las gem's instaladas.
C:\> gem update- Descargar sqlite3, extraerlo en un directorio y agregar ese directorio al PATH.
- Instalar la gem sqlite3-ruby
C:\> gem install sqlite3-ruby- Instalar Rails
C:\> gem install rails --include-dependencies- Presto!
C:\> rails --database=sqlite3 demo
miércoles, noviembre 28, 2007
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
lunes, noviembre 19, 2007
Configuración de Rails y SQL Server
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"
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
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.
