Anotaciones de diversos temas relacionados con código abierto, metodologías de desarrollo y programación con Ruby on Rails
jueves, febrero 06, 2014
Reseña del libro "Learning Mongoid"
Sin embargo, después de leer varias reseñas en sitios como Amazon y similares no quise seguir el mismo formato: leer de inicio a fin el libro y publicar mis comentarios.
En lugar de eso quiero hacerlo como un reporte de avance, cada capítulo leído compartir mis opiniones sobre el tema, como presentó la idea el autor, qué me parecieron los ejemplos del texto.
Así que a partir de hoy inicio la lectura de “Learning Mongoid” de Gautam Rege.
Espero me acompañen en esta lectura.
Finito.
Book Review: Learning Mongoid
But after reading many book reviews in sites like Amazon I don't want to use the same format: read the book from beginning to end and then publish my comments.
What I want to do is to publish an advance report for each chapter I read and share my opinions about the subject, the way the author presented the idea, how much I liked the explanations or the code.
So, I’m beginning to read “Learning Mongoid” by Guatam Rege.
Hope you join me in this reading.
Finito.
martes, diciembre 28, 2010
Poor's Man Ruby Performance
- Rubinius 1.2 via RVM
- Ruby MRI 1.8.7-head via RVM
- Ruby MRI 1.9.2-head via RVM
- Ruby 1.9.2p136 via Brew
martes, octubre 20, 2009
WorkshopCamp Cd. de México
WorkshopCamp será un evento con talleres con una duración de 3 horas impartidos por quien tenga algo que compartir y enseñar en un salón con temas orientados al diseño y desarrollo web.
Habrá dos turnos de talleres, el primero de 10 a 13 hrs y el segundo de 14 a 7 hrs.
El evento se llevará a cabo el próximo Domingo 25 de octubre 2009 en las instalaciones de Ked México, ubicadas en Av. Revolución No. 374, Col. San Pedro de los Pinos a una cuadra del metro San Pedro de los Pinos en la línea 7 del metro.
En lo particular me registré para participar exponiendo sobre el tema de "Behaviour Driven Development" dentro del track de ponencias de "México On Rails". Esta vertiente de desarrollo viene a completar mucho de lo expuesto en las metodologías ágiles en las cuales la interacción con el patrocinador del proyecto es indispensable. En el caso de BDD (por sus siglas en inglés) se tiene que resumir los requerimientos a aquellos que:
- Protejan las ganancias
- Incrementen las ganancias
- Reduzcan los costos
En el mundo Ruby y Ruby On Rails, se han desarrollado varias herramientas para apoyar las metodologías ágiles y BDD no es la excepción. El producto estrella en este caso es Cucumber, un framework para el soporte de los elementos del BDD. Se apoya en otro producto muy reconocido, RSpec, que permite el desarrollo de pruebas de una manera más natural y coloquial que por ejemplo Test::Unit, el framework estándar de Ruby y RoR.
Como sabemos que no todo mundo está familiarizado con Ruby y su medio ambiente, se incluirán charlas y talleres introductorios a Ruby, JRuby y una sesión de mejores prácticas.
El registro lo pueden realizar en WorkshopCamp Cd. de México.
¡Los esperamos!
Finito.
sábado, junio 06, 2009
Un día después
Alex Juárez y su equipo de trabajo se encargaron del 99% del trabajo de organización del evento el cual incluyo una extensa lista de ponentes (/me incluido) que trataron una variedad de temas pero que nos dejaron con el ansía de seguir realizando eventos de este tipo donde escuchar experiencias e ideas de gente que usa estas herramientas para ganarse el pan y no solo bluffing mercadológico para vendernos algo.
Me parece que es necesario seguir ampliando los espacios para compartir experiencias y traer más material del tema en español. Comentaba en una oportunidad que si bien existen toneladas de información en inglés, es necesario crear nuestra base de conocimientos y compartirla, intercambiar dudas, preguntas, inquietudes sin temor a no obtener respuesta ni a una competencia desleal.
Me sigue inquietando el hecho de que seguimos protegiendo nuestros 'productitos' o 'sistemitas' más que a un niño pequeño e indefenso y por otra parte, en la edición de mayo-julio de la revista Software Guru viene una entrevista a Jorge Zavala que si bien no reconozco en algún ámbito dice algunas frases que me parecen bien ciertas,
- "fail fast", si tienes una idea, enfréntala a la realidad, si es buena y funciona, invierte en ella sino continua con la siguiente.
- Necesitas gente con mentes frescas antes que grandes recursos financieros.
- Los negocios son para venderse, no quedarse toda la vida con ellos.
También hace referencia a los 'Super Happy Dev House' que se han venido realizando y en lo particular lo asocio con algunos de los eventos 'BarCamp' que han pasado. Hay gente que buscamos compartir lo que creemos bueno, nuestras experiencias y nuestras ambiciones y encontrar algunos otros con las mismas inquietudes, buscar una o más relaciones 'ganar-ganar' donde los beneficios se repartan entre los participantes.
Me quedé con un costal de ideas y un delicioso sabor de boca después de esta experiencia y sin lugar a dudas creo que este ha sido el mejor evento en lo que va del año. Realmente espero el siguiente para participar de nuevo y encontrar más personas participando, intercambiando experiencias y conocimiento.
Finito.
viernes, mayo 29, 2009
RubyCamp
miércoles, octubre 22, 2008
Podcast con invitado especial: Yo :D
Mi gran sorpresa fue recibir una invitación de parte de ellos para platicar sobre Ruby On Rails, herramienta con la que he venido trabajando durante el último año y que en el podcast comparto mi experiencia y opiniones sobre el tema y algunos comentarios adicionales.
Si no les gusta el tema, pueden buscar otros episodios en los que seguramente encontrarán algún tema de su interés y quien sabe.. a lo mejor también ingresan a las filas de los retrosexuales :P
Un agradecimiento enorme al crew de Monólogos de la Cantina @omendoza, @_kuro y por supuesto, @arturogarrido.
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-dependenciesdomingo, 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
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.
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.
viernes, agosto 24, 2007
La verda' no se puede ocultar
Me encanta la última escena.
Finito.
martes, agosto 14, 2007
Misterio sin resolver
Independientemente de esta situación, me parece el clásico ejemplo PHP: ininteligible, aburrido y extremadamente "verbal".
Mi punto de vista sobre un lenguaje siempre nace la capacidad de 1) representar un modelo de dominio y 2) el esfuerzo para representar éste. A lo largo de ya algunos años he conocido y trabajado con dos modelos para construir software, con n lenguajes y en n plataformas. En cualquier caso he ido saltando de lenguaje conforme apareció otro que me representara una ventaja sobre el actual tomando como referencia los numerales anteriores.
En concreto, con PHP no se obtiene ventaja de uno u otro aspecto. Y cuando volteo y me encuentro con RoR, simplemente se afirma mi punto de vista y aumenta mi duda ¿cómo es que PHP llegó a tener la difusión que goza actualmente?
Finito.
lunes, julio 23, 2007
IronRuby para todos
Soporta la integración con las bibliotecas estándar de .NET, para usarlas se debe incluir lo siguiente:
require 'mscorlib'
require 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Tomar nota en que se está especificando el nombre calificado del assembly.
También se pueden usar clases aún sin haberlas incluido, como sigue:
Window = System::Windows::Forms::Window
Han hecho comparaciones contra Ruby 1.8.6 y reportan al menos un desempeño equiparable en relación a las bibliotecas, en las llamadas a métodos dicen ser más rápidos. Sin embargo, parece ser que hay algunos problemas de desempeño cuando se levantan excepciones.Considero este anuncio importante desde el momento en que mostraron Silverlight lo acompañaron de un demo de IronRuby. Hace unos meses, Scott Hanselman comentaba acerca del distanciamiento de Microsoft y los Alpha Geeks. No sé si esta liberación es bluffing para recuperar Alpha Geeks o realmente Microsoft tiene interés en Ruby.
Finito.
domingo, julio 22, 2007
Compilando paquetes en Ubuntu
Algo que me irritaba de pequeña pero constante manera era ver en la terminal el siguiente mensaje:
$ ruby -v
ruby [i486-linux]
Así que para probar esto de la compilada de paquetes de código fuente, mi primera víctima fue Ruby.
¿Cómo hacerle?
De inicio hice un directorio para guardar ahí todo lo relacionado:
~/src/ruby
a continuación descargué los paquetes de código fuente. Si bien aparecen decenas de paquetes lib*-ruby, realmente solo me fuí por el núcleo.
apt-get source ruby1.8 irb1.8 rdoc1.8
luego, en el directorio donde se encuentra el código, iniciar la venerable secuencia de configurar..
configure --prefix={your prefix} --enable-pthread --enable-install-doc --enable-shared
... construir ...
make
...y probar
make check
et voilà, c'est fini!
sudo make install
ahora al probar de nuevo
$ ruby -v
ruby 1.8.5 (2006-08-25) [i686-linux]
¡Correcto! Ahora ¿qué sigue? ¿será la próxima víctima el kernel?
Finito.
viernes, julio 20, 2007
Otro script con Ruby
Ahora la tarea encomendada fue convertir un archivo CSV a un simple archivo XML.
Esto es de aquí:
20117252110,11.103.2.14
020126252110,11.102.2.24
020201052151,172.16.47.14
020301022151,11.44.2.14
020401052151,11.43.2.14
...hasta acá:
<ruteo>
<ruta>
<clave_presupuestal>20117252110</clave_presupuestal>
<direccion_ip>11.103.2.14</direccion_ip>
</ruta>
</ruteo>
Entonces ¿qué hice? Lo primero fue recurrir a un par de libros. La biblia de Ruby: Programming Ruby y Enterprise Integration with Ruby. Además de encontrar en línea la documentación de la biblioteca estándar en ruby-doc.org. Así encontré felizmente que como todo lenguaje que se precie de ser moderno, la biblioteca estándar viene con clases para manejar XML. Dado... ¡a tirar código!
# traemos el conjunto de clases para el manejo de XML
require 'rexml/document'
# vamos a crea rutas
class Ruta
# esto es increible, con este método se crean las propiedades de lectura/escritura
attr_accessor :direccion_ip, :clave_presupuestal
# el constructor
def initialize(clave_presupuestal, direccion_ip)
@clave_presupuestal = clave_presupuestal
@direccion_ip = direccion_ip
end
# el método que hace la chamba
def to_xml
ruta = REXML::Element.new('ruta')
# creamos los elementos y les asignamos valor
# las @variables tienen alcance únicamente en esta clase
ruta.add_element('clave_presupuestal').add_text(@clave_presupuestal)
ruta.add_element('direccion_ip').add_text(@direccion_ip)
# regresamos el elemento XML que acabamos de crear
ruta
end
# solo para probar
def to_s
@direccion_ip + " " + @clave_presupuestal
end
end
class Ruteador
def initialize
# creamos el documento y el nodo raíz
@doc = REXML::Document.new
@ruteo = REXML::Element.new("ruteo")
end
def lee_informacion(nombre_archivo)
f = File.open(nombre_archivo, "r+")
# leemos el archivo línea x línea y lo guardamos
# en el array @lista cool!
@lista = f.readlines()
f.close
end
# este método hace la chamba
def convierte
# el arreglo con los datos convertidos desde CSV
@convertido = Array.new
# iterators! un regalo del cielo
# y code blocks!
@lista.each do |line|
# recortamos cada línea y la separamos entre cada coma ','
clave_presupuestal, direccion_ip = line.chomp.split(',')
# esto es simplemente hermoso
# agregamos al arreglo @convertido un nuevo objeto Ruta
# pero chequen: no 'add' method, use '<<' instead
@convertido << Ruta.new(clave_presupuestal, direccion_ip)
end
end
# ahora, a escupirlo....
def escribe_xml(nombre_archivo)
# otra vez iterators & code blocks <- this rulz!
@convertido.each do |entry|
# ¿recuerdadn Ruta.to_xml?
@ruteo.add_element(entry.to_xml)
end
# agregamos el nuevo objeto al documento
@doc.add_element(@ruteo)
# y a ponerlo por escrito
f = File.open(nombre_archivo, 'w+')
# esto también es chulo de bonito, chingao!
@doc.write(f, 0)
f.close
end
end
# a poner todo a trabajar
ruteo = Ruteador.new
ruteo.lee_informacion("rutas.csv")
ruteo.convierte
ruteo.escribe_xml("demo")
Finito.
miércoles, julio 04, 2007
Scripteando con Ruby
Seguramente en las herramientas de todos los días (shell) lo hubiera conseguido en algunos minutos. Habrá quien lo resuelva en unas cuantas líneas de Perl, tal vez Python o whatever.
Sin embargo tuve la linda ocurrencia de hacerlo con Ruby. ¡¿Ruby?! ¿No solamente es para hacer aplicaciones web y frameworks? Pues no, creo que no.
Por alguna referencia encontré Everyday scripting with Ruby. No he comprado el libro pero el título me motivó para hacer esta prueba. ¿Puede ser Ruby un lenguaje que compita contra Perl? Muchos de los scripts de administración se construyen religiosamente con Perl o en mi caso mayormente con shell. Pero quisé probar Ruby en algo que no fuera el hype de Rails.
Realmente el problema es sencillito. Pero la experiencia es harto interesante. De inicio conseguir ayuda.
ri es terriblemente práctico. Respuestas concisas, precisas y macizas. Luego la experiencia iterativa e interactiva. Vas ejecutando, encontrando errores y corrigiendo (al menos a este nivel de experiencia) lo cual es altamente ¿didáctico?. Aparece un error y corres a ri para confirmar si lo que quisiste hacer se puede. Te das cuenta del error, corriges y va de nuez.Si bien existen pruebas unitarias, es un punto que lo veo más asociado a desarrollo de aplicaciones. En este momento no veo que tanta utilidad pudieran tener para los scripts de administración.
Fue padre. Si, lo acepto. Me tardé más tiempo de lo que requiere la tarea pero valió la pena. Voy a buscar la manera de hacerlo más seguido. De hecho, voy a solicitar que instalen Ruby en los Solaris. A ver si no se me paniquean. :D
Finito.
domingo, mayo 20, 2007
Ruby on Rails vs. PHP
Finito.
martes, mayo 15, 2007
Ruby vs. PHP: Sigue la mata dando
Finito.
lunes, mayo 14, 2007
Ruby vs. Java Parte II
Finito.