Mostrando las entradas con la etiqueta crossposting. Mostrar todas las entradas
Mostrando las entradas con la etiqueta crossposting. Mostrar todas las entradas

lunes, diciembre 24, 2007

Instalando Ruby on Rails en Mac OS X

Con la llegada de la nueva laptop, tuve que reinstalar mucho del ambiente que ya tenía configurado en el otro equipo y que para ser honestos, hasta se me había olvidado el "como"; así que esta vez lo voy a poner en blanco y negro.

Brevemente comenté acerca de MacPorts, una iniciativa que provee de un ambiente fácil de usar para compilar, instalar y actualizar paquetes de software desde la línea de comandos. Es como varios de los ambientes Linux (apt-get, emerge), se descarga el código fuente y mediante una serie de scripts se compila, instala y ¡listo, a usarse!. El sitio web de MacPorts se puede encontrar en http://www.macports.org y ahí existe una guía detallada para su instalación. Algo que no se debe omitir es la instalación de la paquetería adicional de XCode ya que entre los programas instalados se encuentra gcc, el compilador C que es indispensable para el correcto funcionamiento de MacPorts.

Mac OS X 10.4 (Tiger) viene de fábrica con Ruby 1.8.2 pero como es obvio no es la versión más reciente del lenguaje. En cambio con MacPorts estoy instalando la versión 1.8.6-p110 y además compilada específicamente para mi máquina. Ya teniendo instalado MacPorts solo se teclea la siguiente línea de comandos:

$ sudo port install ruby

Y MacPorts se encarga de descargar, configurar e instalar Ruby.

Lo siguiente es tener RubyGem, el administrador de paquetes o "gemas"; para  su instalación hacemos lo siguiente:

$ sudo port install rb-rubygems

Y esperamos pacientemente durante la descarga, configuración, compilación e instalación del software. 

La versión de rubygems que trae MacPorts no es la más reciente así que también actualizamos este paquete, pero ahora por medio del mismo rubygem, para esto usamos la siguiente línea de comandos:

$ sudo gem update --system

Si vamos a utilizar sqlite3 como base de datos, es necesario instalar las bibliotecas para conectarnos directamente, esto lo hacemos de la siguiente manera:

$ sudo gem install sqlite3-ruby

Finalmente, podemos instalar Rails usando el siguiente comando:

$ sudo gem install rails --include-dependencies

Podemos especificar la versión a instalar mediante el switch --version, el caso específico para instalar la versión 1.2.6 es como en la siguiente línea:

$ sudo gem install rails --version "= 1.2.6"  --include-dependencies

¡Y con esto tenemos un ambiente Rails listo para desarrollar! 

Finito.

sábado, diciembre 08, 2007

Rails 2.0: El NexGen del desarrollo web

Ayer (hoy) se liberó la tan esperada versión 2.0 de Rails, el framework para desarrollo ágil en web. Una actualización muy esperada que se había venido anunciando desde ya hacia varios meses, pues bien, ya está aquí.

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

Ya está disponible el número 9 de la Revista SL, ahora con un nuevo diseño y logo pero con el mismo contenido especializado en software libre. Los temas son muy interesantes pero pa'que les platico, corran y descárguenla.

Finito.

domingo, diciembre 02, 2007

Instalando Rails + sqlite3 en Windows XP

Ayer en la mañana tuve la ocurrencia de revisar la PC de la casa. No es un equipo reciente, baste decir que lo armé circa 2003 sin embargo es el equipo de batalla de mis hijos. Navegan, escuchan música y ocasionalmente juegan, obviamente el hacer tareas es su tarea más socorrida.

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
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.

miércoles, septiembre 05, 2007

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

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 24, 2007

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.