format internet:

…please wait (42% completed)…

Posts Tagged ‘development’

Rails Hot Or Not. The Movie

Posted by javier ramirez on December 24, 2008

Una vez pasada la resaca de la conferencia Rails, y a punto de entrar en la resaca navideña, ya están subidos los videos de la conferencia rails 2008

Aunque pierde mucho enlatada, os dejo por aquí el video de la sesión Rails Hot Or Not

Y para que no se diga, también dejo la presentación que utilicé, convenientemente editada para que se vea en cada uno de los casos cuál fue el ganador elegido por la audiencia


Este material tiene una licencia Creative Commons Atribución-NoComercial-LicenciarIgual 2.5

Por supuesto, agradecer la participación y el buen rollo de los asistentes a la charla, que contribuyeron a que fuera un éxito.. aunque nunca llueva a gusto de todos ;)

searchwords: hot or not, conferencias, rails

Posted in conferences, conferenciarails, conferenciarails2008, development, javier ramirez, madrid, ruby on rails | Tagged: , , , , , , | Leave a Comment »

Actualizando rubygems a la versión 1.3.1

Posted by javier ramirez on December 2, 2008

Hace un rato iba a instalar la última versión de merb, pero para instalar necesitaba tener al menos la versión 1.3.0 de rubygems, así que le he hecho el clásico

>gem update --system

con el siguiente resultado:

Updating RubyGems
Updating rubygems-update
Successfully installed rubygems-update-1.3.1
ERROR: While executing gem ... (NameError)
undefined local variable or method `remote_gemspecs' for #

Sin embargo un segundo intento me decía esto

>gem update --system
Updating RubyGems
Nothing to update

(principio de la mínima sorpresa, ahem… )

Bien.. en teoría tengo la gema gem-update 1.3.1, de hecho un “gem list” parece que me dice que la tengo instalada, pero si hago un “gem –version” me dice que sigo en la 1.2.0

Por si acaso intento un “gem check” y un “gem pristine” sin éxito.. Y ahora qué? Ahora toca buscar en google, claramente.. tres enlaces después, parece que la solución comúnmente utilizada es la siguiente

>gem install rubygems-update
>update_rubygems

un minuto y tropecientas líneas de log después, ya puedes hacer un

>gem --version
1.3.1

oeeeeeeeeeee

p.s. en serio.. era necesario complicarlo *tanto* ?

searchwords: gem update rubygems-update update_rubygems merb

Posted in development, javier ramirez, ruby | Tagged: , , , | 3 Comments »

Rails HOT or NOT

Posted by javier ramirez on October 16, 2008

Este año en la Conferencia Rails voy a presentar la sesión “Rails Hot or Not”

La idea es sacar partido de que vamos a estar juntos más de 200 personas que trabajamos todos los días con Rails, para poder extraer algo de conocimiento colectivo de la comunidad. Lo que pretendo hacer con esta charla es obtener una lista actualizada de los plugins/gemas/librerías varias que a día de hoy preferimos los desarrolladores Rails a la hora de empezar un proyecto y porqué.

Por ejemplo, una de las comparativas podría ser: Attachment_fu vs. PaperClip

Para que la sesión sea lo más interesante posible, no quiero hacer yo la lista de librerías a evaluar, ni quiero sacarla de sitios algo desactualizados como la toolbox de working with rails, sino que prefiero que sea un reflejo de lo que realmente usamos a día de hoy para desarrollar.

Supongamos que os toca hacer una aplicación compleja con Rails (os pongo debajo una lista de funcionalidades como ejemplo). Me gustaría saber qué gemas,plugins o librerías (en el sentido más amplio, javascript/css también me valen) son los que usaríais para abordar este proyecto. Si vosotros me mandáis esa lista, lo que voy a hacer es categorizar los elementos que me mandéis para poder hacer la presentación con ellos y que así quede la comparativa interesante.

Lista de posibles funcionalidades: un buscador, generación de pdfs, caché, integración con APIs de terceros, generación/lectura de feeds, multi-idioma, carga significativa de Ajax, procesos de fondo de larga duración, volumen de envío de mails razonable, autenticación con roles, un backend, foros, chat, edición de texto con formato (al estilo redcloth o wysiwig), popups estilo lightbox, notificación de excepciones, captcha, control de spam, upload de ficheros, creación de thumbnails, creación de gráficas/informes, notificación de excepciones, mapas y geolocalización… además de la funcionalidad que se ve, está la que no se ve: tests, profiler para el código, framework css, framework js…

Para facilitar en lo posible la recopilación de librerías, enviadme vuestras listas a jramirez+hotornot@aspgems.com. No seáis vaguetes y enviadme algo… así la charla será más interesante… y, ya puestos, como la conferencia empieza el 13 de noviembre, intentad enviarme la lista antes de que acabe octubre para que me dé tiempo a prepararla.

Publicaré el resultado de las votaciones en este mismo blog unos días después de la conferencia. Así podemos sacar todos partido.

searchwords: conferenciarails, conferenciarails2008, hotornot

Posted in conferences, conferenciarails2008, development, javier ramirez, ruby on rails | Tagged: , , , , , , | 2 Comments »

Bienvenida Ms libxml

Posted by javier ramirez on July 17, 2008

Charlie Savage necesitaba hacer uso intensivo de xml para su proyecto mapbuzz y, como ninguna de las soluciones que había en Ruby era realmente buena (falta de funcionalidades, lentitud…) decidió retomar libxml-ruby para ponerlo al día y dejarlo funcionando.

El resultado no puede ser más prometedor según lo que anuncia en su blog

Al fin vamos a tener un parser XML con validaciones, XSLT, XML Schema, DTD, XPath y rendimiento razonable… y funciona en windows, que no está nada mal “for the rest of us”.

searchwords: xml, libxml, parser, DOM, SAX, ruby xml validating parser

Posted in development, javier ramirez, ruby | Tagged: , , , | Leave a Comment »

Instalando Rails 2.1

Posted by javier ramirez on July 9, 2008

Rails 2.1 mola.. la verdad es que trae un buen puñado de funcionalidades interesantes… yo le estoy sacando ya partido, por ejemplo, a los dirty objects (molarían aunque sólo fuera por el nombre) que son especialmente interesantes en callbacks y observers.

Si te interesa saber qué trae de nuevo la 2.1, un punto de partida interesante —aunque pelín básico en algunas partes— es el libro gratuíto “ruby on Rails 2.1: what’s new” . Por cierto, el primer cambio que aparece en la página 22 fue un patch mío… como se puede ver, el cambio fue humilde, pero el autor no :p

..a lo que iba… que Rails 2.1 mola… si consigues instalarlo. En muchos casos, es suficiente con un simple

gem install rails

Si es tu caso, puedes dejar de leer… pero lo que viene a continuación te interesará si al ejecutar ese comando te has encontrado con este error

ERROR: Error installing activesupport:
invalid gem format

La primera reacción es imitar a enjuto mojamuto y gritar “noooooo.. interneeeeeeeeé”

Una vez pasado el shock inicial, intentas volver a instalar… y cuando ya ves que no, buscas en el plugin google a ver si hay suerte y por lo menos esto le pasa a alguien más… y, efectivamente, hay más gente a la que le pasa.

Después de intentar diferentes cosas, la que me ha funcionado a mí ha sido irme a la página de active support en rubyforge descargar el fichero de la gema, y hacer la instalación local con el comando

gem install activesupport –local activesupport-2.1.0.gem

..y ya con esta gema instalada, podemos proceder a

gem install rails

El resto de gemas se bajan y se instalan correctamente desde el repositorio remoto

searchwords: rails 2.1, ruby on rails, gem install, github source

Posted in development, javier ramirez, ruby on rails, ruby on rails | Tagged: , , , , | Leave a Comment »

[Q&A] Diferencia entre nil y empty

Posted by javier ramirez on July 5, 2008

Inauguro una nueva serie en el blog. Como sabéis, me gusta participar en las listas de correo para aprender de los gurús, y para echar una mano cuando puedo a la gente que tiene dudas.

De vez en cuando respondo a mensajes en las listas de correo que me parecen dudas genéricas. Otras veces contesto a problemas con los que me he encontrado antes y que no eran fáciles de encontrar en la documentación. Creo que puede ser interesante referenciar estos mensajes en el blog para darles un poco más de visibilidad.

Podrás encontrar todos esos posts marcados con el tag y la categoría format_internet_q&a

En este primer caso de la serie, alguien planteaba cuál es la diferencia entre nil y empty. En concreto, quería entender porqué pasaba esto

x = ""
=> ""
x.nil?
=> false
x.empty?
=> true

Puedes encontrar debajo mi contestación a esta pregunta

> soy nuevo en ruby y me esta gustando mucho el lenguaje me gustaria que me dijeran que diferencia hay entre nil y empty

bueno.. aquí sería interesante si eres nuevo en ruby o si eres nuevo en cualquier lenguaje orientado a objetos. Te lo digo porque el equivalente a nil en muchos otros lenguajes (javascript, java, c++, c#…) es null.

voy a intentar hacer esto rápido.

ruby es un lenguaje muy orientado a objetos, hasta el punto de que todo es un objeto (a diferencia de otros lenguajes, que tienen tipos básicos a los que normalmente se llaman primitivas y luego objetos).

la forma normal de crear un objeto, es utilizar el método new de la clase correspondiente, por ejemplo

Array.new

Cuando llamas a new, se asigna espacio en memoria para alojar un objeto de esa clase, se le asigna internamente un id, y se guarda la referencia a ese objeto en una tabla que ruby lleva internamente. En la línea anterior, verás que hemos creado un Array, pero ni guardamos en ningún sitio una referencia a ese array, no podremos hacer nada con él. Aquí es donde entran en juego las variables. Si haces

a=Array.new

Estás creando un objeto, que se guarda internamente en la memoria, y además estás creando una variable llamada a, que apunta a la referencia de ese objeto en la memoria. De esta forma, cada vez que tu haces algo como

a.size

realmente lo que estás haciendo es invocar al método size del objeto al que apunta a. Ahora si haces

a=Array.new
b=a

Tienes dos variables, pero las dos apuntan al mismo objeto, de forma que si modificas tanto a como b, estás modificando el mismo objeto.

Con esto lo que quiero que veas es que por un lado van los objetos, que es donde realmente se guardan tus valores y se ejecutan tus métodos, y por otro lado las variables, que simplemente valen para apuntar a esos objetos. Si creas un objeto y ninguna variable está apuntándole, ruby lo eliminará de memoria tan pronto como pueda, ya que es inaccesible y nadie lo va a usar.

Teniendo medio claro lo que es un objeto y lo que es una variable, es posible tener una variable que no apunte a ningún sitio. Esto a veces se llama una variable no inicializada (aunque en realidad no es el único caso en el que pasa). Cuando una variable no apunta a ningún sitio, apunta a nil.

a=nil

Eso en muchos lenguajes es una variable que no apunta a ninguna parte. En Ruby es una variable que apunta al objeto nil (porque nil es también un objeto), pero la explicación te vale igual. nil se utiliza para indicar una variable que no apunta a ningún sitio, bien porque no se ha inicializado, bien porque se le ha asignado nil expresamente.

Si tú haces lo que decías en tu mail

x=""

x es una variable que está apuntando a un objeto que es la cadena “”. Al apuntar a ese objeto, puedes utilizar todos los métodos que da la clase String. Por ejemplo,puedes hacer

x.upcase

eso te va a devolver “”, porque la cadena “” en mayúsculas es “”, pero como ves, tienes un objeto String, que puedes usar como quieras. Por lo tanto, si haces

x.nil?

te va a decir “false”, ya que x no apunta a nil, sino a un objeto String vacío. Al estar vacío, si le pides

x.empty?

te va a decir que,efectivamente, la cadena está vacía. Sin embargo, no es nil, porque apunta a un objeto de tipo String que está referenciado en memoria.

Espero que te haya quedado medio claro.. si venías de un lenguaje orientado a objetos, seguro que ya sabes cómo va esto. Si no venías de un lenguaje orientado a objetos, quizás te valga la pena leerte algo de teoría de orientación a objetos para entender cómo funciona ruby. Te será especialmente útil para entender cosas como las variables de instancia, de clase, herencia, constructores, etc. Puedes programar sin conocer todo eso, pero vas a desaprovechar muchas de las funcionalidades disponibles.

puedes encontrar el hilo de este post en

https://listas.escomposlinux.org/pipermail/rubies/2008-July/000721.html

searchwords: nil, empty, ruby programming language, garbage collector, object oriented programming

Posted in development, format_internet_q&a, javier ramirez, ruby | Tagged: , , , , , | 1 Comment »

masochism: plugin para replicación master-slave en MySQL

Posted by javier ramirez on May 18, 2008

Recientemente me he encontrado con la necesidad de trabajar desde Rails contra una base de datos MySQL replicando en modo master-slave.

Replicación Master-Slave In a Nutshell:

La idea de montar un master-slave es tener la base de datos maestra para realizar las modificaciones a la base de datos, y usar la/las bases de datos esclavas para realizar las lecturas. De esta forma, las operaciones de lectura, que son las más habituales, se pueden balancear entre diferentes instancias de una base de datos.

Por otro lado, cada vez que se hace una modificación en la maestra, esta modificación se replica en las esclavas, de forma que los datos siempre están sincronizados.

Esta imagen del manual online de MySQL es muy explicativa

mysql master slave

Claramente este esquema nos puede ayudar mucho de cara a la escalabilidad de una aplicación, ya que la base de datos es uno de los cuellos de botella típicos.

Lo que necesitamos en este caso, es asegurarnos de que todas las operaciones de escritura van contra la conexión de la maestra, mientras que las lecturas van por una conexión esclava.

Una de las ventajas de usar un framework- en este caso Rails, pero podría haber sido cualquier otro- es que tu aplicación tiene una arquitectura bien definida. O al menos debería. Esto significa que al usar Rails tenemos bajo control las operaciones que se hacen contra la base de datos, con lo que identificar las de lectura y las de escritura debería ser simple. Si seguimos las reglas del framework, las operaciones contra la base de datos pasarán siempre por el modelo y por los métodos que AR nos proporciona.

Al final, el número de métodos que realmente acaban accediendo a la base de datos son más bien pocos, con lo que podríamos jugar un poco con el framework, establecer dos conexiones con la base de datos (una con la maestra, y otra con la esclava) y decidir qué conexión va a usar cada método. Así todos los métodos “find” y similares irían por la esclava, y los “delete”, “insert”, etc.. irían por la maestra.

Esto mismo es lo que el plugin masochism hace automáticamente por nosotros. El plugin viene de la mano del hiperproductivo Rick Olson.

Uno de estos días tendré que contar en más detalle cómo va, pero el resumen ejecutivo es que lo instalas, le añades una conexión master_connection en tu fichero database.yml, llamas a un método en uno de tus initializers… y te olvidas. A partir de ahí todo funciona de forma transparente (siempre que hayas configurado tu master/slave de MySQL previamente, claro).

De momento le he encontrado una única pega. Entre los métodos que se envían a la base de datos maestra no está el método “execute”, que es el típico método que sólo utilizas cuando quieres modificar algo en la base de datos. Sin ir más lejos, el (imprescindible) plugin Foreign Key Migrations usa ese método para crear las FK, por lo que si no nos aseguramos de que se usa la base de datos maestra, podemos tener problemas.

Le he mandado un parche (en realidad es añadir una palabra y una coma) a Rick , a ver si le parece apropiado incuírlo como parte del plugin.

update: y el patch ya ha sido incluído :)

Y a escalar!!

searchwords: scalability, mysql replication, master-slave, javier ramírez

Posted in development, javier ramirez, ruby, ruby on rails, ruby on rails | Tagged: , , , , , , , | 4 Comments »

desde la conferencia rails

Posted by javier ramirez on November 22, 2007

La conferencia rails 2007 ya ha empezado. Este año el panel de conferencias tiene muy buena pinta.

Posted in conferences, conferenciarails2007, javier ramirez | Tagged: , , , , , | Leave a Comment »

yellow pages hecho en rails

Posted by javier ramirez on November 17, 2007

Gracias a happycodr acabo de enterarme de que AT&T ha lanzado su web yellowpages.com en Rails.

Me parece muy relevante porque yellowpages lleva un montón de tiempo online (no sé si era con la misma empresa detrás, pero yo la usaba sobre el 2001 bajo el mismo dominio) y porque AT&T no es precisamente ‘Cooperativa de Almacenes Ruipérez’. Otro caso de negocio para tener en la recámara cuando hable de sitios relevantes usando Rails.

update: investigando un poco más, me he ido a su web y he visto que entre las actuales ofertas de empleo tienen dos en las que entre varios otros lenguajes ponen Ruby como deseable (junto a Java, PHP y Python), y como cualidades deseables del candidato indican

  • Contributions to open source community
  • Experience working in AGILE environment

A ver si cunde el ejemplo y este tipo de requisitos se empieza a hacer genérico no sólo en empresas pequeñas sino en entornos corporativos.

searchwords: relevant sites using rails

Posted in javier ramirez, ruby on rails, sites | Tagged: , , , , | Leave a Comment »