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.

viernes, octubre 26, 2007

Rompiendo el silencio (Trabajo)

Tres semanas en el nuevo trabajo. Es el tiempo que me ha tomado adecuarme al nuevo ritmo, al menos al grado de regresar a mi actividad en twitter y ahora a postear de nuevo. Fuera de los tristes sucesos, me siento a gusto, me siento féliz. Ya ha habido quién me ha recordado la desatención que he tenido con los compañeros y amigos del antiguo trabajo y esto me ha dado pie a reflexionar un poco sobre el tema.

Hasta ahorita me he definido como un "hombre de equipo", esto es, mis amigos son en primer lugar las personas con los que trabajo todos los días. Así, cuando cambio de equipo de trabajo, cambio de amigos. Cambio hábitos de comida, de trabajo y me esfuerzo por no cambiar de trato pero como algunos reclaman, no siempre lo consigo. Una cosa curiosa es mi nuevo equipo: Yo. Actualmente en el proyecto que trabajo soy el único recurso de tiempo completo por parte de mi empresa, así que el equipo soy Yo. Ja.

Dentro de la empresa, veo muchas áreas de oportunidad: metodología, capacitación, proyectos. Ahora necesito conseguir tiempo y concentrarme en mis tiempos "muertos" a ir armando los bloques que traigo en la cabeza.

Me voy re-encontrando con herramientas y tecnologías. Una de las cosas que quiero hacer es buscar espacios para Rails, sin embargo, éste mi primer proyecto está amarrado a .NET al cual le estoy tomando sabor de nuevo. Fueron casi tres años sin tirar código para una UI y ahora al re-aprender ASP.NET influenciado por la visión Rails le encuentro un sabor distinto. Ahora me veo usando componentes que hace un par de años (o meses) veía como objetos de pecaminosa pereza pero desde un enfoque pragmático tienen su valor (y razón) de ser.

Cuando desarrollamos con Rails hacemos usos de una cantidad inmensa de clases y componentes de los cuales aprovechamos toda la funcionalidad sin preocuparnos del detalle de la implementación. De repente nos encontramos usando ActiveRecord a diestra y siniestra confiando ciegamente en que la implementación del patrón de diseño cumple con todos los cánones habidos y por haber. No hay duda ni cuestionamiento, ActiveRecord es un componente que nos permite ser más productivos ¿para qué entrar al detalle de su funcionamiento? Funciona y listo.

En mi regreso a ASP.NET estuve a punto de retomar la complejidad de implementar patrones, armar bosques de clases y aplicar todos los principios de arquitectura existentes; la realidad es que los tiempos comprometidos me están obligando a encontrar alternativas que nos permitan avanzar más rápido y tener elementos visibles, tangibles, que hagan sentido al usuario final del sistema. Se generó en mi un gran conflicto. Siempre peleé por "hacer las cosas bien, más que rápido" y ahora tengo que "hacer las cosas rápido más que bien". Al final, encontré un punto medio. La experiencia con Rails me enseño que no tengo que recrear la complejidad (usar las clases existentes de ActiveRecord en lugar de construir de cero mi implementación del patrón de diseño) sino a usar lo ya existente y confiar en que en su momento lo puedo mejorar (esto último es más "agile oriented").

Tome los componentes ASP.NET que más me latieron y conseguí avanzar un buen tramo en la construcción del sistema sin caer en un "arrastra-controles" ni re-construyendo todo por ser víctima del síndrome "No-Inventado-Aquí". Estoy cierto que de ser estrictamente necesario más adelante puedo cambiar esos componentes así que se redujo parte de mi conflicto interno.

Esta situación también me dejo entrever otra cosa: de manera natural seguimos ciclos (o espirales dirían los dialécticos). En las artes marciales se inicia con el aprendizaje portando un cinturón blanco, signo de ignorancia, conforme se avanza el cinturón se va tornando oscuro hasta llegar al negro representando la "maestría" alcanzada. Al paso del tiempo el cinturón negro se desgasta mostrando la fibras blancas originales. Simple, complejo, simple.

En el contexto del desarrollo nos adentramos con "asistentes" y construimos aplicaciones arrastrando componentes en nuestro ambiente de desarrollo. Luego vamos conociendo nuevas tecnologías que aumentan los beneficios de nuestras aplicaciones a expensas de la erudición necesaria para su uso. Patrones, técnicas, innovación amarrada a la complejidad pero esto tiene que ser así ¿cierto? Entre más fácil para el usuario, más complicado para nosotros.

En ese momento aparece Rails y entiendo el porqué de la migración. Nos olvidamos de las complicaciones. Sabemos que los componentes de Rails son implementación de patrones y conceptos que veneramos y con eso nos basta. No los ponemos en tela de juicio ni criticamos, simplemente los usamos.

Así me paso con ASP.NET, ya no cuestiono ni critico los componentes que ofrece. Aqui y ahora me hace sentido. Sé que de requerirse puedo incluir toda la complejidad que se requiera pero de momento solo necesito una cosa: que funcione y lo estoy consiguiendo.

Finito.

domingo, septiembre 16, 2007

He decidido quererte

Por tu hermosa sonrisa, tus piernas largas y tu piel morena.

Me encanta el tiempo que pasó contigo. Caminar juntos por la calle. Escucharte hablar de tus cosas y contarte las mías.

Cada suspiro que nace en mi pecho, ahora lleno de amor, tiene tu nombre. Y mi amor dura tanto como ese suspiro, y el que sigue, y el que sigue, y el que sigue... y si dejo de suspirar, entra al relevo un latido, y el que sigue, y el que sigue, y el que sigue....

Te quiero por que querer es libre
Te quiero por que querer es gratis
Te quiero por que no hay una razón para no hacerlo.
Te quiero por que soy feliz haciéndolo.

Solo sería más feliz si el sentimiento fuera recíproco.

Te quiero Karacas.

Finito.

miércoles, septiembre 05, 2007

De las tardes

Hace ya algunas semanas
que me llevan las mañanas
descifrarte en tu mirada y en tu voz
que nunca he sabido cuanto me has contado y cuanto no
cuanto solamente lo imagino yo
.

Cuanto tiene de ser cierto el paso a tus parques abiertos
y a las frescas sombras de tu pabellón
luego todo lo respondería esa tarde que me des
aun que solamente sea por una vez.

Entre amores y distancias
de entre sueños sin sustancias
y entre todo lo que no ha llegado a ser.

Si me dieras una tarde para conversar mejor
desdibujando las ropas con que vistes tu rumor
podría mirarme en tus ojos si te asomas hasta a mi
si te dieras una tarde, una tarde por aquí.

Si te tuviera una tarde
para abrevarme en la voz murmurante de tus fuentes
una tarde para dos, una tarde para siempre
por las tardes que no estás, por las tardes que no han sido
y por las que ya no te vas.

Una tarde solamente de tu vida
tan solo un instante de tu juventud
unas horas de tus horas y salidas
al quizás de un mutuo encuentro
que logremos ver adentro uno del otro
un quizás que tu volvieras realidad.

Una tarde que me dieras
cualquier tarde de este mes
para tardarme intentando
llevarte una y otra vez
aplicando con mis labios
en tus labios de canción
la balada del encuentro
del verano con la flor.

Quien te tuviera una tarde
para andarte, recorrer
las veredas, los atajos
en los campos de tu piel
recorriendo amante, valles, lomas
cauces de agua y flor
conquistando tus llanuras
toda una puesta de sol

Solo dame algún tarde
y yo me vuelvo una canción en tus labios.

Procurando y sorprendiendo
por todo el atardecer
tu sonrisa más bonita
si te dejas conocer.

Fernando Delgadillo

Nuevo anuncio de colaboración entre Novell y Microsoft

Miguel de Icaza anunció en su blog que se ha formalizado un acuerdo de desarrollo entre Novell y Microsoft para desarrollar versiones de código abierto de Silverlight que en el mundo Mono se conoce como MoonLight :P

De hecho, desde mucho antes se había iniciado la implementación de esta tecnología y en un memorable hack-a-ton el equipo Mono consiguió hacer realidad la idea.

Antes de que empiecen las críticas y malas ondas, es una realidad que Microsoft esta reconociendo que el trabajo en el proyecto Mono le está abriendo más puertas y ampliando los horizontes de muchos usuarios de las tecnologias .NET, obviamente este acuerdo busca conseguir más usuarios considerando el poco apoyo que Adobe brinda para Flash en plataformas de código abierto.

Solo como dato curioso, la imagen que usa Miguel en su post para indicar colaboración es la misma del header de La Cofradia.

Finito.

Nuevo número de Revista SL

Después de mucho trabajo por parte de un grupo de entusiastas promotores sale a la luz el número ocho de la Revista SL - Software Libre Hecho Revista, una publicación electrónica bimestral (bueno, casi) para difundir y promover el software libre.

Conocí la revista el año pasado y durante el FONASOL tuve el gusto de conocer a Zodman (aka Andrés Vargas) y a k001 (aka Ivan Zenteno) con quienes platique largo y tendido. Posteriormente me llegó la invitación para participar en el proyecto y en esta ocasión me di a la tarea de encontrar y corregir (o más bien: desmejorar) los artículos a publicar.

Pues bien, invito a todos a leerla, comentarla, distribuirla y sobre todo a participar.

Finito.

lunes, septiembre 03, 2007

201

El post anterior fue el número 200 en este blog. ¡Wow! Cien posts más desde septiembre del año pasado.

Casi un año y como ha cambiado mi vida no así mis ganas de seguir compartiendo mis ideas tecnológicas en este espacio. Para mis telarañas existenciales estoy por abrir un espacio adicional que en breve estaré anunciando por este canal.

Gracias a todos los lectores, ocasionales y regulares por llegar a este espacio. Espero que en algún momento un post les haya sido de utilidad. Con eso me doy por servido y contar con su visita de vuelta es un enorme placer.

Finito.

Bitácoras, Trazas, Logs, Logging

Una consabida forma de ver que sucede con tus programas es "pintar" los valores de tus variables. Esta rústica forma de depurar también tiene otra acepción: loggear :S

¿Quién dijo que poner System.out.println (javeros) o Console.WriteLine (.net) por cada línea es manejar una bitácora? No lo sé, pero en los ambientes java (que es lo que tengo más cercano) tenemos mega-archivos log de cientos de megabytes generados con poderosos System.out.println statements. Logging is cool!

Pero, eso no es logging. En casi cada aplicación "grande" o "empresarial" (lo que sea que significa esto) se incluye algún mecanismo de bitácoras. Agregar sentencias de rastreo es un mecanismo de "bajo nivel" para depurar código. Puede ser que sea la única opción por no existir un depurador para la plataforma o por que ya se trata de un ambiente multitarea/multihilos.

En el caso de una aplicación ejecutándose en un ambiente de producción, tampoco se puede hacer uso de herramientas de desarrollo o depuración. Casos así requieren que se le otorgue a los administradores u operadores herramientas que les permitan monitorear el comportamiento de los sistemas.

Para hablar de logging se requiere cumplir una serie de requisitos. Uno de ellos son los "contextos", entidades que contienen la información precisa de la ejecución de la aplicación. También se requiere distinguir diferentes niveles de severidad, desde el error fatal hasta mensajes de depuración; estas características deben poder configurarse fuera del código de la aplicación, es decir, en los programas incluimos todas las llamadas de rastreo que consideremos pero dependiendo de la configuración se van ir grabando las seleccionadas.

También tiene sus desventajas. El registro de entradas en archivos o bases de datos consume tiempo de procesador, llamadas a dispositivos que finalmente se ve como un cierto grado de lentitud en la aplicación. Si se registran demasiadas entradas, el log se torna ilegible. Si se filtran demasiados niveles de severidad, puede ser que se pierdan elementos que podrían auxiliar a resolver problemas.

Como ya es costumbre, el mundo java ha pasado por esto antes y gracias a la colaboración de muchas personas se construyó un framework para este tipo de necesidades. Ha sido tal el éxito de esta iniciativa que se desarrollaron componentes similares para otras plataformas y lenguajes (C++/PHP/Ruby) e incluso se incluye en algunos productos comerciales, BEA WebLogic Server por ejemplo (aunque ninguno de los programadores que conozco lo usan, siguen con sus pinchis println's) y obvio, también se construyo para .NET.

En este caso, log4net respeta todos los principios de su ancestro log4j y tenemos archivos de configuración, contextos, jerarquía de loggers e implementaciones de "appenders" que nos permiten tener diferentes destinos para nuestros logs. Ahora si, "logs".

El primer ejercicio de muestra del uso de log4net lo pueden encontrar en mi repositorio de ideas Google Code. Mediante subversion pueden obtener una copia de trabajo y trastear un rato con él.

Finito.

viernes, agosto 31, 2007

3108 - Día del Blog

El año pasado me uní a la celebración internacional del día del blog, y finalmente la fecha nos ha alcanzado de nuevo.

Parte de la celebración es referir cinco blogs que leo frecuentemente.

Los nominados son:

Tecnológicos

Gente
Finito.

jueves, agosto 30, 2007

Casi por sorpresa

Sin mayor preámbulo, apareció en la página de descargas la versión 1.2.5 de Mono. Se encuentra disponible para casi todas las plataformas (de hecho, creo que la única que falta es Solaris).

Finito.

viernes, agosto 24, 2007

La verda' no se puede ocultar

Hace rato posteé sobre el video de Rails vs. .NET, me pareció bueno pero lo que viene a continuación es simplemente..... ¡¡¡GENIAL!!!

Me encanta la última escena.




Finito.

Rails vs. .NET

Estos weyes de Rails Envy 'tan K's. Pa'que no se sientan desamparados los pehacheperos también le dedican uno de sus video parodias a .NET. Enjoy it!



Finito.

jueves, agosto 23, 2007

La construcción de los Helpers

Derivado del desarrollo de Operación PyME y un poco de sentido común aparece la tarea de construir un framework para construir más rápidamente y fácilmente la aplicación.

Se ha vuelto un concepto casi obligado el utilizar un framework de objetos de negocio pero ¿qué entendemos por esto? Un conjunto de clases que permiten modelar los objetos de un dominio y nos permitan olvidarnos de las tareas mundanas. La idea de fondo es utilizar la mayor parte de nuestra energía solucionando problemas de negocio y la menos posible en los problemas de tecnología.

Así han aparecido en el medio infinidad de frameworks con este objetivo, en todos los lenguajes y en todas las plataformas. Hasta parece que ya se ha llegado a un punto de saturación para estos proyectos. Sin embargo siguen apareciendo.

No existe el framework perfecto, como tampoco el lenguaje perfecto ni la plataforma perfecta. Y siguiendo nuestro inevitable anhelo de perfección vamos creando más proyectos tratando de solventar los errores que encontramos en otros.

No existe una metodología perfecta para construir un framework, generalmente la construcción es influenciada por el tema de moda: aspectos, programación orientada a objetos, inyección de dependencias, objetos auto-suficientes. Algunas empresas han publicado documentos para describir como han concebido y construido los frameworks que ofrecen. Entre estas últimas aparece notoriamente Microsoft.

Después de lanzar al mercado la tecnología .NET, Microsoft ha batallado duramente para posicionarla como una tecnología empresarial (cualquiera que sea su significado). Parte de esos esfuerzos ha sido el desarrollo de bibliotecas de componentes que faciliten el desarrollo de aplicaciones. El esfuerzo inicial dio como resultados los elementos que se conocieron como Application Blocks.

Estos eran conjuntos de clases con un objetivo delimitado. Lo más interesante fue que las construyeron a partir de un análisis que compartieron en forma de guías. En estos documentos exponen los elementos que se consideraron durante el diseño describiendo detalladamente los escenarios y la manera de aplicar la tecnología .NET para construir estas bibliotecas.

Estas bibliotecas fueron rápidamente adoptadas por la comunidad de desarrolladores quienes además fueron enriqueciendo con sus experiencias propias la funcionalidad de las clases incluidas e incluso se combinaron en un nuevo producto que se conoce como Enterprise Library. Sin embargo, tras la aparición del proyecto Mono, que permite la ejecución de programas desarrollados con .NET en plataformas no Windows, se incluyó en la licencia una cláusula que impide la ejecución de los Application Blocks en sistemas operativos distintos a los construidos por Microsoft.

Así que ahora, a pesar de ser elementos tan útiles, los Application Blocks no pueden ser utilizados en Linux o Mac OSX. Existen en el mundo del código abierto cada vez más proyectos basados en .NET y algunos de ellos pudieran resolver los mismos escenarios que se presentan en el diseño de las bibliotecas de Microsoft el ejemplo de inicio es log4net, una biblioteca de clases para registrar entradas en diferentes destinos que forma parte del proyecto Logging Services de la Fundación Apache.

Y también existen otros proyectos que ofrecen alternativas para los otros Application Blocks existentes sin embargo la principal ventaja de la oferta de Microsoft es la unificación que han conseguido y que en los proyectos de software libre se encuentran dispersos e inmersos en otros proyectos y una implementación sencilla, directa y única simplemente no existe.

Así que esta iniciativa (si, una más) es la de tener en un solo conjunto esta funcionalidad partiendo en primer lugar de proyectos ya existentes, como log4net, mostrando como es que se cumplen los escenarios descritos en la documentación de Microsoft y construyendo los elementos necesarios retomando código o creando nuevo para satisfacer las necesidades planteadas por las guías de referencia.

Y si no fuera suficiente... habrá más sobre el tema.

Finito.

miércoles, agosto 22, 2007

Uno de muchas

En este post tengo que agregar varias, varias notas.

Para la gente con la que tengo contacto más directo, principalmente por twitter esto ya no es noticia: ahora soy el flamante propietario de una Apple Macbook :P ¡Lo hice!

Ha sido una experiencia bastante rica, un ambiente agradable, un desempeño excelente y un ambiente familiar, después de todo en el fondo se trata de una variante de *nix. El único problema ha sido AirPort. Nomás no puedo configurarlo con los pinchis modems 2wire. Sucks.

Lo primero fue configurar un ambiente de desarrollo para lo cual me apoyé en los MacPorts, sin ahondar en detalles es un tipo de emerge: get code, compile, install. Easy, easy. Aún así me costó trabajo generar un ambiente para compilar Mono, cosa que conseguí hasta hoy.

Otra cosa agradable fue que resolvieron un bug que levanté en Mono, más detalles en mi blog hermano PartnerApi.

En la parte de las malas nuevas, mi ponencia fue rechazada en el EnLi ¡buaaa! ni modos :( (Sí quería ir).

Otra mala noticia es que pasó menos tiempo en línea gracias a los errores de Hellmex. Me suspendieron el servicio de banda ancha y teléfono por el desmadre que traen con el contrato desde que cambiamos de domicilio. Nomás pa'que le midan: el recibo con el nuevo número sigue llegando al domicilio anterior :S

Y pus bueno, sigo en el underground con Operación PyME. Ahora se me ha clavado la loca idea de desarrollar (bueno, seguir desarrollando) un framework que usé hace un par de años derivado de CSLA.NET y además una serie de Helpers muy similares a los famosos ApplicationBlocks; ya estaré posteando más detalles.

Finito.