<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">

	<channel>
		<title>Magazine - ruby-on-rails</title>
		<link>http://www.genbetadev.com</link>
		<description>
Información sobre el sector de los desarrolladores, el desarrollo de aplicaciones, para móviles, desarrollo web, bases de datos, frameworks y lenguajes de programación		</description>
		<pubDate>2013-06-19 00:59:40</pubDate>

		<generator>http://www.genbetadev.com</generator>
                    <item>
      <title><![CDATA[Se busca financiación para crear un rails.app para OS X ]]></title>
      <link>http://www.genbetadev.com/actualidad/se-busca-financiacion-para-crear-un-rails-app-para-os-x</link>
      <guid>http://www.genbetadev.com/actualidad/se-busca-financiacion-para-crear-un-rails-app-para-os-x</guid>
      <pubDate>Fri, 30 Mar 2012 05:51:06 +0000</pubDate>

      <author>Fernando Siles</author>
      <description><![CDATA[
      <p><img alt="rails" src="http://img.genbetadev.com/2012/03/rails.jpg" class="centro_sinmarco" /></p>

	<p>Tengo que reconocer que soy bastante ignorante en todo lo relacionado tanto con <strong>Ruby</strong> como con el popular framework <strong>Ruby on Rails</strong> (RoR para los amigos y los fans de los acrónimos). Por lo tanto no tenía ni idea que instalar y utilizar Rails en ordenadores Mac fuera una tarea poco menos que homérica. Pero parece que es así ya que uno de los miembros del equipo del core de Rails ha iniciado <strong>una petición en Kickstarter</strong> para recaudar dinero para poder <strong>desarrollar una app de fácil instalación en máquinas con OS X</strong>&#8230; si, de esas que arrastras a la carpeta /applications y <em>et voilà</em>, todo listo.<!--more--></p>

	<p>El desarrollador en cuestión se llama <strong>Yehuda Katz</strong> y la suma de dinero que pide para poder meterse en faena es de <strong>25000 dólares</strong>. El plazo para conseguir el parné es hasta el <strong>12 de Mayo</strong> pero lo cierto es que le va a sobrar tiempo (y seguramente recaude mucho más) ya que a día de hoy ya van más de <strong>20000 dólares recaudados</strong>. Por lo tanto parece que dentro de poco la vida para los <em>railseros maqueros</em> va a ser un poco más sencilla.</p>

	<p>Como siempre en <strong>Kickstarter</strong> las donaciones tienen su correspondiente contraprestación, que en este caso van desde una carta de agradecimiento y una pegatina para las aportaciones más pequeñas hasta un logo bien grande de sponsor para aquellos que aporten <em>10 de los grandes</em> (siempre he querido utilizar esta expresión) o más.</p>

	<p>Amigos, el <strong>crowdfunding es el futúro</strong>, hacedme caso, almas cándidas&#8230;</p>

	<p>Vía | <a href="http://www.kickstarter.com/projects/1397300529/railsapp">Kickstarter</a><br />
En Genbeta Dev | <a href="http://www.genbetadev.com/desarrolladores/si-el-crowfunding-le-sirve-a-tim-schafer-lo-mismo-te-puede-servir-a-ti">Si el crowdfunding le sirve a Tim Schafer, lo mismo te puede servir a tí</a></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Conferencia Rails en Madrid, mucho nivel a priori]]></title>
      <link>http://www.genbetadev.com/desarrolladores/conferencia-rails-en-madrid-mucho-nivel-a-priori</link>
      <guid>http://www.genbetadev.com/desarrolladores/conferencia-rails-en-madrid-mucho-nivel-a-priori</guid>
      <pubDate>Thu, 07 Jul 2011 14:24:51 +0000</pubDate>

      <author>Fernando Siles</author>
      <description><![CDATA[
      <p><img id="image77046" src="http://img.genbetadev.com/2011/07/conferencia_rails.PNG" class="centro_sinmarco" alt="Conferencia Rails" /></p>

	<p>El verano en Madrid es para la piscina, las terrazas y, si eres desarrollador rails, para la <strong>Conferencia Rails</strong>. Del <strong>13 al 15 de Julio</strong> (es decir, la semana que viene) se celebrará en el <strong>Florida Park</strong> del Parque del Retiro (un sitio muy flamenco) la susodicha Conferencia Rails, una cita ineludible para los desarrolladores rails y en el que habrá gran número de charlas y talleres a cargo de <strong>ponentes nacionales e internacionales</strong>, auténticas estrellas del medio, desde la gente de The Cocktail o Aentos hasta figuras como Sven Fuchs o Julian Fischer.</p>

	<p>Programación funcional con ruby,<strong> Node.js</strong>, aplicaciones móviles, migraciones a ruby, Ruby in Rails,<strong> MongoDB</strong> o <a href="http://jashkenas.github.com/coffee-script/">Coffeescript</a> son solamente algunos de los temas que se tocarán durante estos tres días y lo mejor de todo es que <a href="https://autofiscal.com/aprodeweb/campaigns/conf2011/sales/new">todavía puedes registrarte</a> y asistir&#8230; aunque si de verdad te interesara, deberías estar inscrito desde hace semanas, claro.</p>

	<p>Un evento desde luego muy interesante y que <strong>viene a potenciar la escasa oferta para desarrolladores</strong> que propone la capital española cuando el solano empieza a pegar con justicia en los meses estivales.</p>

	<p>Fuente |<a href="http://conferenciarails.org/"> Conferencia Rails</a></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Novedades en la próxima versión de Ruby on Rails: 3.1 (II)]]></title>
      <link>http://www.genbetadev.com/ruby/novedades-en-la-proxima-version-de-ruby-on-rails-31-ii</link>
      <guid>http://www.genbetadev.com/ruby/novedades-en-la-proxima-version-de-ruby-on-rails-31-ii</guid>
      <pubDate>Mon, 06 Jun 2011 16:17:46 +0000</pubDate>

      <author>Carlos Paramio</author>
      <description><![CDATA[
      <p><img id="image76551" src="http://img.genbetadev.com/2011/05/rails31.jpg" class="centro_sinmarco" alt="Rails 3.1" /></p>

<p>Ahora que <strong>Rails 3.1</strong> ha alcanzado ya la <strong>Release Candidate</strong>, y que la publicación de la versión final es inminente, qué mejor momento para retomar aquella lista de nuevas características que nos trae esta nueva edición del famoso framework para desarrollar aplicaciones web en Ruby.</p>

<p>No te pierdas tampoco <a href="http://www.genbetadev.com/ruby/novedades-en-la-proxima-version-de-ruby-on-rails-31-i">la primera parte de este especial</a>.</p>

	<p><!--more--></p>

<h2>Migraciones reversibles más sencillas</h2>

<p>Siguiendo la metodología <strong>DRY</strong> (&#8220;Don&#8217;t Repeat Yourself&#8221;), la definición de ciertas migraciones para cambiar el esquema de nuestra base de datos pasa a ser más sencilla, de modo que <strong>no sea necesario repetir instrucciones</strong> en los dos bloques de la migración (el de ejecución de la misma y el de deshacer los cambios) cuando éstas puedan ser fácilmente deducidas.</p>

<p>Esto significa que podremos especificar los cambios deseados en una tabla en un nuevo método <code>change</code>, y Rails se encargará de crear los métodos <code>up</code> y <code>down</code> por nosotros. Por cierto, estos últimos pasan a ser métodos de instancia, en lugar de métodos de clase. Si Rails encuentra ciertos comandos en el método <code>change</code> que no puede deshacer (por ejemplo, si se ejecuta un <code>remove_column</code> que elimina una columna de la tabla, y añadirla al deshacer no sería suficiente dado que se habría perdido la información que ésta contenía al ejecutar la migración), entonces se lanza una excepción <strong>ActiveRecord::IrreversibleMigration</strong>.</p>

<p>Por ejemplo, donde antes escribíamos algo como:</p>

	<p><pre class="prettyprint lang-ruby">
  class CreateTasks < ActiveRecord::Migration
    def self.up
      create_table :tasks do |t|
        t.string :title
        t.boolean :completed
        t.text :description
        t.timestamps
      end
    end</p>

    def self.down
      drop_table :tasks
    end
</pre>

<p>Ahora escribiríamos simplemente:</p>

	<p></pre><pre class="prettyprint lang-ruby">
  class CreateTasks < ActiveRecord::Migration
    def change
      create_table :tasks do |t|
        t.string :title
        t.boolean :completed
        t.text :description
        t.timestamps
      end
    end<br />
</pre></p>

<h2>Identity Map en ActiveRecord</h2>

<p>Una de las características que más me gusta de <strong>DataMapper</strong> (un <span class="caps">ORM</span> bastante chulo y, hasta la introducción de Arel en Rails, con mejor sintaxis que ActiveRecord a mi parecer) es precisamente <strong>Identity Map</strong>. Esta característica sencillamente mantiene un hash con todas las instancias que se han hecho de una determinada clase que hereda de ActiveRecord, de modo que <strong>sólo exista en memoria una representación en forma de objeto</strong> en Ruby de un registro de la tabla en particular.</p>

<p>¿Por qué esto es importante? Porque hasta ahora, si instancias un objeto ActiveRecord, y llamas por ejemplo a un método que nuevamente instancia otro objeto el cual representa al mismo registro de la base de datos, y este último realiza un cambio en alguno de sus atributos, dicho cambio <strong>no se ve reflejado en el primero</strong>, porque ocupan espacios en memoria diferentes (a todos los efectos, son dos instancias distintas que representan a un mismo registro).</p>

<p>Para verlo más claro con código. En ActiveRecord sin Identity Map, se cumple que:</p>

	<p></pre><pre class="prettyprint lang-ruby">
  post1_instance_1 = Post.find(1) # => #&lt;Post id: 1, title: &#8220;Rails 3.1&#8221;&gt;
  post1_instance_2 = Post.find(1) # => #&lt;Post id: 1, title: &#8220;Rails 3.1&#8221;&gt;</p>

  # Parece que son la misma instancia, porque ActiveRecord redefine el método de comparación
  # y lo que hace es comprobar que los valores de los atributos sean iguales.
  post1_instance_1 == post1_instance_2 # => true

  # Pero verdaderamente, son instancias diferentes
  post1_instance_1.object_id == post1_instance_2.object_id # => false
</pre>

<p>Esto tiene una segunda consecuencia, y es que aunque dos consultas devuelvan instancias de registros repetidos para los que ya teníamos objetos en memoria, <strong>éstos se volvían a instanciar</strong> ocupando su propio espacio, devorando de forma aún mayor los recursos de memoria de la máquina, y obligando a la aplicación a consultar siempre los valores de la base de datos cuando se quiere instanciar un objeto.</p>

<p>Gracias a Identity Map, ActiveRecord <strong>consume menos memoria</strong>, es <strong>más rápido</strong>, y cada registro tiene una <strong>representación única</strong> en forma de objeto Ruby, de modo que cualquier cambio en el mismo sea consistente. No obstante, esta característica no estará habilitada por defecto debido a algunos <a href="https://github.com/rails/rails/blob/master/activerecord/lib/active_record/identity_map.rb">problemas aún existentes con la instanciación de objetos a través de asociaciones</a>.</p>

<h2>Engines que pueden ser montados en una ruta determinada</h2>

<p>Rails::Engine ha sido mejorado aún más, y ahora es posible <strong>montar una aplicación</strong> organizada en forma de engine en una ruta de una aplicación Rails. Estoy seguro de que esto mejorará aún más las posibilidades de reutilización de código y funcionalidades entre aplicaciones.</p>

<p>Por ejemplo, ahora podemos tener un engine que proporciona la funcionalidad de un blog, y montarlo en nuestra aplicación bajo la ruta &#8220;/blog&#8221; añadiendo en nuestro fichero routes.rb:</p>

<pre class="prettyprint lang-ruby">
  Rails.application.routes.draw do
    mount Blog::Engine => &#8220;/blog&#8221;
  end
</pre>

<h2>Mejoras en la utilización de las cabeceras <span class="caps">HTTP</span> para caché</h2>

<p>A partir de esta release, <strong>Rack::Cache</strong> será parte del core del framework, y se espera que sustituya a la caché de páginas en un futuro (la cual podría quedar relegada a un plugin). Las ventajas de Rack::Cache para la obtención condicional del contenido de una página son evidentes: Con la utilización de las cabeceras <span class="caps">HTTP</span> <code>Expires</code>, <code>Cache-Control</code>, <code>Last-Modified</code> y <code>ETag</code>, es posible indicar de diferentes formas la validez de un determinado contenido, y <strong>evitar tener que enviar de nuevo toda la página</strong> cuando ésta es la misma que el navegador tiene en su caché, incluso aunque la misma se encuentre cacheada en forma de <span class="caps">HTML</span> y sólo haya que enviar su contenido sin tener que regenerarlo.</p>

<p>Evidentemente, esto permite ahorrar un mayor ancho de banda, y atender así más peticiones por segundo desde nuestra instancia de la aplicación.</p>

<h2>Serializers personalizados</h2>

<p>Si antes querías convertir un Hash, un Array, o cualquier otra instancia de un objeto Ruby en un objeto <span class="caps">YAML</span>, para poder serializarlo y guardarlo en un atributo de tipo <code>text</code> en la base de datos, sólo tenías que usar el método <code>serialize</code> de ActiveRecord::Base. Pero, ¿y si preferías guardar el valor en algún otro formato, uno que te permitiese guardar su valor en una forma que te facilitase futuras consultas en la base de datos, o que sencillamente ofusque un poco los datos? Tenías que construir una serie de métodos en tu modelo para asignar y leer los valores cada vez.</p>

<p>Ahora puedes dejar la mayor parte del trabajo a ActiveRecord, utilizando el mismo método <code>serialize</code>, pero especificando como parámetro un objeto que responda a los métodos <code>load</code> y <code>dump</code>, donde definir el algoritmo a utilizar para convertir el objeto en cuestión a texto y para generarlo de nuevo a partir del valor serializado. Por ejemplo:</p>

	<p><pre class="prettyprint lang-ruby">
  class Post < ActiveRecord::Base
    class CommaSeparatedList
      def load(text)
        return unless text
        text.split(&#8221;,&#8221;)
      end</p>

      def dump(text)
        text.join(&#8221;,&#8221;)
      end
    end

    serialize :tags, CommaSeparatedList.new
  end

  post = Post.create(:tags => [&#8220;rails&#8221;, &#8220;ruby&#8221;])
  # <span class="caps">INSERT</span> <span class="caps">INTO</span> &#8220;posts&#8221; (&#8220;tags&#8221;, &#8220;created_at&#8221;) <span class="caps">VALUES</span> (&#8216;rails,ruby&#8217;)
</pre>

<p>Más información | <a href="http://weblog.rubyonrails.org/2011/5/22/rails-3-1-release-candidate">Rails 3.1 Release Candidate</a></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Refinery CMS alcanza la release 1.0]]></title>
      <link>http://www.genbetadev.com/gestores-de-contenido/refinery-cms-alcanza-la-release-10</link>
      <guid>http://www.genbetadev.com/gestores-de-contenido/refinery-cms-alcanza-la-release-10</guid>
      <pubDate>Tue, 31 May 2011 16:00:18 +0000</pubDate>

      <author>Carlos Paramio</author>
      <description><![CDATA[
      <p><img id="image76647" src="http://img.genbetadev.com/2011/05/refinery1banner.jpg" class="centro_sinmarco" alt="Refinery CMS" /></p>

<p>El gestor de contenidos <strong>Refinery CMS</strong> ha alcanzado hace poco la release <strong>1.0</strong>. Este gestor de contenidos escrito en <strong>Ruby on Rails</strong> era inicialmente un proyecto de software propietario, pero liberó su código hace ya dos años, y desde entonces ha sido mantenido bastante al día, aprovechando las características de las <strong>últimas versiones de Rails</strong>. Es por ello que se ha convertido en uno de los <span class="caps">CMS</span> más populares de entre los escritos con este framework de desarrollo web.</p>

<p>El proyecto goza de estupenda salud, gracias a los <strong>138 colaboradores</strong> que durante su vida han ayudado a perfeccionarlo. Hoy soporta ya <strong>25 idiomas</strong> de serie, y existen <a href="https://github.com/search?langOverride=&language=&q=refinerycms&repo=&start_value=1&type=Repositories&x=0&y=0">numerosos módulos</a> para extender aún más su funcionalidad. Los numerosos sitios web que corren gracias a él avalan el reconocimiento obtenido.</p>

<p>Más información | <a href="http://refinerycms.com/blog/refinery-cms-10-released">Anuncio de la release 1.0 de Refinery CMS</a><br />

Código fuente | <a href="https://github.com/resolve/refinerycms">GitHub</a><br />
</p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Herramientas imprescindibles para un desarrollador de Ruby on Rails]]></title>
      <link>http://www.genbetadev.com/ruby/herramientas-imprescindibles-para-un-desarrollador-de-ruby-on-rails</link>
      <guid>http://www.genbetadev.com/ruby/herramientas-imprescindibles-para-un-desarrollador-de-ruby-on-rails</guid>
      <pubDate>Tue, 24 May 2011 08:00:54 +0000</pubDate>

      <author>Carlos Paramio</author>
      <description><![CDATA[
      <p><img id="image76573" src="http://img.genbetadev.com/2011/05/herramientas-rails.jpg" class="centro_sinmarco" alt="Herramientas Rails" /></p>

<p>Seguimos con los especiales acerca de cuáles son las <strong>herramientas imprescindibles</strong> a la hora de embarcarte en un proyecto con tu lenguaje y/o framework preferido. En esta ocasión, os voy a describir las que yo considero más importantes para desarrollar aplicaciones en <strong>Ruby on Rails</strong>. Aunque estoy seguro que hay muchas otras que se os ocurren, así que os invito a que comentéis vuestras preferencias.</p>

	<p><!--more--></p>

<h2>El editor o IDE</h2>

<p>¿Usar un <strong>editor ligero</strong>, o un <strong>IDE</strong> que lo abarque todo? El eterno dilema. Yo la verdad es que soy de los que prefieren un editor más o menos sencillo, pero que sea fácilmente extensible a través de plugins. Mi elección ha sido desde hace mucho tiempo <strong>TextMate</strong>, un editor del que <a href="http://www.genbetadev.com/herramientas/editores-de-codigo-textmate-para-mac">ya os hablé en su día</a>.</p>

<p>No obstante, existen un buen número de IDEs para programar con Ruby on Rails que funcionan realmente bien, y que se pueden convertir fácilmente en tu centro de mando de todo el proyecto, gracias a su integración con sistemas de control de versiones, visor de base de datos, etc.</p>

<p>Uno de los IDEs más conocidos es <a href="http://www.jetbrains.com/ruby/">RubyMine</a>. Si bien no es gratuito (salvo que sea usado para proyectos de software libre), su precio no es descomunal, partiendo de <strong>58 euros</strong> la versión para un desarrollador individual. A cambio de este dinero, se nos ofrece un entorno con un editor que permite el autocompletado de código, herramientas de ayuda para la refactorización, análisis de código al vuelo, visor del esquema de los modelos, soporte para Bundler o <span class="caps">RVM</span>, depurador, soporte para diversos sistemas de control de versiones&#8230; En definitiva, toda una navaja suiza. Está disponible para Windows, Mac OS X y Linux.</p>

<p>El otro <span class="caps">IDE</span> popular para programar en Ruby es <a href="http://netbeans.org/features/ruby/index.html">NetBeans</a>, que aunque es más conocido como un entorno para Java, existen unos módulos oficiales que permiten utilizarlo para este otro lenguaje. De nuevo, nos ofrece herramientas de ayuda a la refactorización, inferencia de tipos, navegación rápida entre ficheros relacionados, parseo de código mientras se escribe para detectar errores de sintaxis, y un largo etcétera.</p>

<h2>El intérprete</h2>

<p>Lógicamente, necesitamos una versión del <strong>intérprete de Ruby</strong> para poder trabajar. En los proyectos nuevos, ya no tiene tanto sentido utilizar la versión 1.8.x del intérprete oficial, y lo recomendable suele ser trabajar directamente con la versión <strong>1.9.2</strong> del mismo. No obstante, además de los intérpretes oficiales, existen muchos otros igualmente válidos, algunos de los cuales bastante potentes, y siempre que las librerías y gems que vayamos a utilizar en nuestro proyecto sean compatibles con estos, no existe ninguna traba para usarlos.</p>

<p>El intérprete oficial (también llamado <strong>CRuby</strong>) se puede descargar en sus diferentes versiones desde <a href="http://www.ruby-lang.org/es/">la página oficial del lenguaje</a>, aunque si utilizas Linux seguramente te sea más fácil utilizar los paquetes que te proporcione tu distribución. Algunos de estos intérpretes alternativos a CRuby son: <a href="http://www.jruby.org/">JRuby</a>, <a href="http://rubini.us/">Rubinius</a>, <a href="http://www.rubyenterpriseedition.com/">Ruby Enterprise Edition</a>, y otros muchos que aún tienen algunos problemas de compatibilidad con librerías habituales.</p>

<p>Si tuviera que mencionar un favorito de entre los alternativos, ese sería <strong>JRuby</strong>, ya que no sólo su rendimiento es espectacular, sino que además permite la ejecución de aplicaciones Rails en entornos donde sólo tienen cabida servidores de aplicaciones en entornos Java como pudiera ser GlassFish. Esto permite que puedas colocar tu aplicación Rails en servidores de empresas que ya están siendo usados para servir otras aplicaciones escritas en Java sin tener que cambiar mucho el entorno del servidor.</p>

<p>Si además deseas poder trabajar con <strong>varios intérpretes simultáneamente</strong> desde tu máquina, te aconsejo que le eches un buen vistazo a <a href="https://rvm.beginrescueend.com/">Ruby Version Manager (<span class="caps">RVM</span>)</a>. Aunque tengo intención de dedicarle un artículo por separado en breve.</p>

<h2>Software de virtualización</h2>

<p>Aunque a menudo Rails se utiliza como backend web de ciertas aplicaciones, es más habitual que sea usado para programar una aplicación web completa, incluido el frontend. Y claro, cualquier aplicación web que se precie ha de <strong>probarse bien en diversos navegadores</strong>, no sólo el que tengas en tu máquina. Es por ello que el uso de un software de virtualización se vuelve imprescindible.</p>

<p>Yo trabajo con Mac, pero dado que he de probar el renderizado de las vistas en Internet Explorer, he de instalarme una <strong>máquina virtual</strong> para poder tener Windows en ella con este navegador, que no existe para otras plataformas. Es más, lo normal es tener más de una máquina virtual, cada una con una versión diferente del navegador, para realizar las pruebas con un entorno lo más fiel posible a aquel que utilizará el usuario. Si trabajas en Windows, necesitarás poder probarlo en Safari. Si trabajas en Linux, puede que necesites probar tu aplicación en los dos navegadores anteriormente mencionados. En definitiva, seguramente necesites un <strong>software de virtualización</strong>.</p>

<p>De entre los más famosos, se encuentra <a href="http://www.virtualbox.org/">VirtualBox</a> (que ahora pertenece a Oracle), el cual corre en todas las plataformas y es gratuito. Aunque también puedes usar <a href="http://www.parallels.com/es/">Parallels</a>, una de las opciones preferidas si trabajas con Mac, o <a href="http://www.vmware.com/es/">VMWare</a>, un clásico del mundo de la virtualización que no defrauda.</p>

<h2>ImageMagick</h2>

<p>Es muy habitual que tu aplicación web necesite poder <strong>manipular imágenes</strong> subidas por los usuarios. Y aquí la navaja suiza suele ser <a href="http://www.imagemagick.org/script/index.php">ImageMagick</a>, un software que permite hacer recortes, giros, redimensionados, adiciones de texto superpuesto, y decenas de otros efectos, a imágenes que estén en casi cualquier formato. Si bien lo normal es utilizar una gema de Ruby que facilite estas operaciones utilizando un <span class="caps">DSL</span> sencillo, estas gemas suelen luego traducir las especificaciones de tamaños y cambios de proporción que hayamos escrito en comandos que utilizan las herramientas <strong>ImageMagick</strong>. Así que es casi obligatorio tenerlas instaladas.</p>

<h2>Firebug</h2>

<p>Aunque he de decir que últimamente utilizo más las herramientas para desarrolladores de Chrome, la herramienta favorita para obtener resultados similares es sin duda <a href="http://getfirebug.com/">Firebug</a>. Gracias a esta <strong>extensión para Firefox</strong>, podrás inspeccionar el <span class="caps">DOM</span>, realizar cambios en el mismo, echar un vistazo a las peticiones <span class="caps">HTTP</span> realizadas, depurar código Javascript, analizar el rendimiento de tu aplicación, y otras muchas actividades realmente útiles durante el desarrollo. Imprescindible.</p>

<h2>Cliente de base de datos</h2>

<p>Si bien podemos operar con la base de datos desde línea de comandos, probablemente existan muchas operaciones (especialmente de consulta) que sería más cómodo realizarlas desde una interfaz gráfica más amigable. Si trabajas con <strong>MySQL</strong> y estás en Mac, te recomiendo que descargues <a href="http://www.sequelpro.com/">Sequel Pro</a>. Es una aplicación muy cuidada, y con la que podrás manipular a tu antojo cualquier aspecto de tu <strong>base de datos</strong>. Si prefieres tener una solución web, que corre en todas las plataformas, entonces te recomiendo <a href="http://www.phpmyadmin.net/home_page/index.php">phpMyAdmin</a>, desde el cual podrás igualmente hacer la mayoría de las operaciones entrando con cualquier navegador.</p>

<h2>Servidor de integración continua</h2>

<p>Es realmente sano hacer que los <strong>tests</strong> escritos para tu aplicación se <strong>corran de forma automática</strong> cada vez que subes algo al repositorio de control de versiones. Para este propósito, mi preferido es <a href="http://integrityapp.com/">Integrity</a>, un servidor muy ligero pero no por ello menos potente escrito en Sinatra.</p>

<h2>Organizador de tareas</h2>

<p>Es necesario que llevemos un <strong>control de las tareas</strong> que hemos realizado, estamos realizando o pensamos realizar, así como que marquemos unos objetivos a corto plazo y registremos cualquier tipo de notas relacionadas con las tareas o bugs que nos sirvan de base de conocimiento. Para todo esto, y para <strong>organizar el trabajo en equipo</strong>, lo mejor es utilizar un servicio online que encaje con vuestra forma de trabajar. En este caso, mis preferencias se decantan por <a href="http://pivotaltracker.com/">Pivotal Tracker</a>, un servicio web de gestión de tareas online que encaja perfectamente con la filosofía de trabajo <span class="caps">SCRUM</span>. Pero si prefieres un entorno más clásico de tickets, milestones y cosas así, o si sencillamente prefieres poder instalar la herramienta de gestión en tu servidor, <a href="http://www.redmine.org/">Redmine</a> es probablemente tu mejor opción. Y como está escrita en Ruby on Rails, siempre puedes extenderla fácilmente para ir adaptándola a tus necesidades.</p>

<h2>Conclusión</h2>

<p>Estas son algunas de las herramientas que utilizo a diario, y que se han convertido en parte imprescindible de mi trabajo. Espero que te resulten útiles para empezar. Y si ya trabajas con Ruby on Rails, esperamos que nos cuentes <strong>cuáles son tus preferidas</strong>.</p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Novedades en la próxima versión de Ruby on Rails: 3.1 (I)]]></title>
      <link>http://www.genbetadev.com/ruby/novedades-en-la-proxima-version-de-ruby-on-rails-31-i</link>
      <guid>http://www.genbetadev.com/ruby/novedades-en-la-proxima-version-de-ruby-on-rails-31-i</guid>
      <pubDate>Thu, 19 May 2011 04:00:23 +0000</pubDate>

      <author>Carlos Paramio</author>
      <description><![CDATA[
      <p><img id="image76551" src="http://img.genbetadev.com/2011/05/rails31.jpg" class="centro_sinmarco" alt="Rails 3.1" /></p>

<p>La <strong>nueva versión de Ruby on Rails</strong> está cada vez más cerca, y son <strong>muchas las novedades</strong> que nos trae. Así que me he decidido a recopilarlas y a enumerar algunas de las que considero más interesantes para que os vayáis haciendo una idea.</p>

<p>Debido a que estas novedades son muy numerosas, y para no escribir un artículo excesivamente largo, trataré de recoger las que más han llamado mi atención en al menos un par de posts.</p>

	<p><!--more--></p>

<p>Si quieres ir disfrutando ya de la primera beta, así como probar algunos de los cambios que paso a comentaros a continuación, podéis instalarla utilizando Rubygems mediante el comando:</p>

<pre class="prettyprint lang-bash">
  $ gem install rails &#8212;pre
</pre>

<p>Os aconsejo utilizar <a href="https://rvm.beginrescueend.com/">Ruby Version Manager (rvm)</a> para poder tener instaladas varios entornos, y así no comprometer vuestro trabajo diario con Rails. Al igual que las versiones anteriores más recientes de Rails, el framework es <strong>perfectamente compatible con la versión 1.9.2 de Ruby</strong>, con lo que recomiendo encarecidamente su uso (¿todavía no usas Ruby 1.9.2 en tu entorno de producción?):</p>

<pre class="prettyprint lang-bash">
  $ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
  $ rvm install 1.9.2
  $ rvm 1.9.2@rails31 &#8212;create
  $ gem install rails &#8212;pre
</pre>

<h2>jQuery pasa a ser la librería oficial</h2>

<p>Pues sí, <strong>jQuery</strong> pasa a desbancar a Prototype y scriptaculous como las librerías de Javascript por defecto. He de decir que no me sorprende, pues la mayoría de los desarrolladores Rails que conozco usan ya esta librería para casi todos sus proyectos. Por supuesto, es muy sencillo usar otra si no te convence, pero ya sabemos que Rails se caracteriza por ser &#8220;opinionated software&#8221;, así que es normal que haya siempre una favorita.</p>

<p>Para mayor comodidad, la comunidad ha preparado un par de gemas que podemos añadir a nuestro fichero Gemfile, proveyendo así a nuestro proyecto de los ficheros necesarios correspondientes a estas librerías. En concreto, jquery-rails y prototype-rails. Es de esperar que aparezcan otras con el tiempo. Si quieres indicar la librería deseada desde el mismo momento en que creas el esqueleto de tu aplicación, puedes hacerlo utilizando el parámetro &#8220;-j&#8221;, seguido del nombre de la librería (&#8220;jquery&#8221; o &#8220;prototype&#8221;).</p>

<h2><span class="caps">SASS</span> incluido en Gemfile por defecto</h2>

<p><strong>SASS</strong>, o &#8220;Syntactically Awesome Stylesheets&#8221;, es una herramienta que merece ser nombrada en un artículo por separado. No obstante, resumiré que nos sirve para <strong>facilitar la escritura de nuestras hojas de estilo</strong>, permitiendo incluir en ellas reglas anidadas, variables, módulos que definen funciones que a su vez definen un conjunto de estilos, condiciones, bucles&#8230; En definitiva, nos permite eliminar código redundante en las <span class="caps">CSS</span>, simplificándolo bastante, de modo que sean más sencillas de mantener. <span class="caps">SASS</span> se encargará luego de convertir esos ficheros en hojas de estilo convencionales, que son las únicas que entiende el navegador.</p>

<p>Pues bien, en Rails 3.1 la gem para la integración de esta herramienta con nuestro proyecto viene incluida por defecto en el fichero Gemfile de dependencias.</p>

<h2>Coffeescript de serie</h2>

<p>Poco he de añadir a este hecho que <a href="http://www.genbetadev.com/actualidad/ruby-on-rails-incluira-coffeescript">ya fue comentado por mi compañero Toni</a> el mes pasado. Pero consideré necesario incluirlo de nuevo en este artículo, para recordarlo. Si aún no has probado <strong>Coffeescript</strong>, te recomiendo enormemente que lo hagas, pues hará que tu código Javascript se reduzca a unas pocas líneas al mismo tiempo que disfrutarás de una sintaxis más parecida a Ruby para escribir código del frontend de tu aplicación.</p>

<h2>Hojas de estilo y ficheros javascript fuera de public</h2>

<p>Pues sí, a partir de ahora el lugar preferido para almacenar estos ficheros es en app/assets/stylesheets y app/assets/javascripts, respectivamente. Además, se utilizan nombres de fichero parecidos a las vistas, donde una primera extensión del fichero indica el formato de éste (ej: &#8220;js&#8221; o &#8220;css&#8221;), y una segunda extensión sirve para indicar el motor que se utilizará para generar este formato a partir del fichero original (por ejemplo, &#8220;coffee&#8221; para convertir un fichero escrito con Coffeescript en Javascript). En el directorio public sólo se almacenarían los ficheros ya procesados, los cuales además serían unidos para formar <strong>un único fichero Javascript y un único fichero CSS</strong> para toda la aplicación, gracias a <a href="http://www.getsprockets.com/">Sprockets</a>.</p>

<h2>Preferencia por la sintaxis de Ruby 1.9</h2>

<p>Los generadores de código de Rails 3.1 van a comenzar a usar <strong>sintaxis de Ruby 1.9</strong> cuando estés usando esta versión del intérprete del lenguaje. Esto significa que los hashes por ejemplo van a empezar a escribirse de forma similar a los hashes escritos en <span class="caps">JSON</span>, que es la forma preferida de escribir un hash con Ruby 1.9:</p>

	<p></pre><pre class="prettyprint lang-ruby">
  redirect_to posts_path, notice: &#8220;El post ha sido creado correctamente.&#8221;<br />
</pre></p>

<h2>Mejor salida para la ejecución de tests</h2>

<p>Los resultados de la ejecución de los tests son ahora más claros con la inclusión de la gema <a href="https://github.com/TwP/turn">turn</a>, la cual utiliza un formato de salida a <strong>color</strong> para destacar mejor los tests que pasan y los tests fallidos, y en lugar de marcar simplemente los tests válidos como puntos y los tests erróneos o fallidos con los caracteres E y F, los describe cada uno en una línea utilizando el nombre del método definido en el fichero de tests (sustituyendo símbolos de subrayado por espacios), e incluyendo por cada uno de ellos el tiempo de ejecución.</p>

<h2>Nuevos Rack en la pila de aplicaciones middleware por defecto</h2>

<p>La utilización de aplicaciones <strong>Rack</strong> para tratar diferentes funcionalidades en cada petición se generaliza, con la inclusión de las siguientes al stack por defecto: Rack::Etag, Rack::ConditionalGet, Rack::Cache.</p>

<h2>Soporte para streaming</h2>

<p>Gracias a la inclusión de <strong>ActionController::Streaming</strong>, ahora se pueden responder a determinadas acciones mediante <strong><span class="caps">HTTP</span> Streaming</strong>, si el servidor web lo soporta. Para activarlo en ciertas acciones de tus controladores, puedes incluir una llamada al método de clase &#8220;stream&#8221; con unos parámetros cuya sintaxis recuerda a la de los filtros de controladores. Por ejemplo:</p>

<pre class="prettyprint lang-ruby">
  class PostsController < ActionController::Base
    stream :only => :index
  end
</pre>

<h2>Definición de atributos accesibles según ciertas condiciones</h2>

<p>¿Cansado de especificar tus propios métodos de actualización de atributos en tus modelos porque update_attributes no te basta, al querer diferentes comportamientos según el rol del usuario que esté realizando el cambio, o según se den ciertas condiciones? Con Rails 3.1, puedes <strong>proteger la actualización de diferentes atributos según el rol</strong> que se utilice durante dicha operación. Por ejemplo:</p>

	<p><pre class="prettyprint lang-ruby">
  class Post < ActiveRecord::Base
    attr_accessible :title, :published_at, :as => :admin
  end</p>

  Post.new(params[:post], :as => :admin)
</pre>

<p>Más información | <a href="https://gist.github.com/958283">The Changelogs for Rails 3.1 Beta 1</a></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Cinco gemas indispensables para programar aplicaciones con Ruby on Rails]]></title>
      <link>http://www.genbetadev.com/ruby/cinco-gemas-indispensables-para-programar-aplicaciones-con-ruby-on-rails</link>
      <guid>http://www.genbetadev.com/ruby/cinco-gemas-indispensables-para-programar-aplicaciones-con-ruby-on-rails</guid>
      <pubDate>Fri, 13 May 2011 09:37:10 +0000</pubDate>

      <author>Carlos Paramio</author>
      <description><![CDATA[
      <p><img id="image76510" src="http://img.genbetadev.com/2011/05/gems_ruby.jpg" class="centro_sinmarco" alt="Especial Gemas Ruby" /></p>

<p>A día de hoy, existen numerosas <strong>gemas de Ruby</strong> para realizar tareas realmente dispares. Y es que el número de éstas ha aumentado considerablemente en los últimos años, proveyendo a los desarrolladores de todo un pequeño universo de librerías útiles con las que facilitarles el trabajo. En este breve especial, voy a tratar de describir algunas de las gemas que considero imprescindible conocer, pues cubren algunas de las <strong>funcionalidades más habituales</strong> que solemos encontrar en forma de requisitos en muchas aplicaciones, de modo que podamos integrarlas en nuestra aplicación escrita en Ruby on Rails para cumplir sobradamente estas necesidades.</p>

	<p><!--more--></p>

<h2>Carrierwave</h2>

<p>Esta gema escrita por Jonas Nicklas nos sirve para añadir a nuestra aplicación la posibilidad de <strong>almacenar y procesar ficheros</strong> subidos por nuestros usuarios. Si bien han existido numerosos plugins para realizar esta misma función anteriormente (attachment_fu, paperclip, y otros), esta gema utiliza una separación de código bastante limpia, guardando cada uploader como una clase propia donde podemos especificar reglas concretas para manipular esos ficheros que nos adjuntan.</p>

<p>Se integra con cualquier aplicación <strong>Rack</strong>, de modo que podemos utilizarla tanto con Ruby on Rails, como con cualquier otro framework basado en este adaptador (Sinatra, Merb, Camping&#8230;). Además, es capaz de utilizar <strong>proveedores de almacenamiento</strong> como Amazon S3, Google Storage, Rackspace Cloud Files, y otros, de modo que los ficheros entrantes, una vez procesados, puedan ser guardados utilizando alguno de estos servicios. Al tratarse de módulos separados, es fácil extender la gema para agregar cualquier otro servicio de almacenamiento.</p>

<p>También permite utilizar RMagick, ImageScience o MiniMagick cuando los ficheros a tratar sean imágenes, de modo que podamos hacer recortes, escalados, y cualquier otro <strong>efecto sobre la imagen</strong> que soporte la librería que hayamos elegido. Nuevamente, esta funcionalidad se agrega en forma de módulo, de modo que podemos crearnos el nuestro propio para realizar cualquier otro tipo de manipulación deseada y que no esté soportada (ej: extracción de texto de un <span class="caps">PDF</span>, parseo de un archivo separado por comas, etc).</p>

<p>Su código se puede encontrar en <a href="https://github.com/jnicklas/carrierwave">Github</a>.</p>

<h2>Kaminari</h2>

<p>Gracias a esta gema de Akira Matsuda, la <strong>paginación</strong> de objetos se torna sencilla y elegante. Nuevamente, existen muchas otras opciones perfectamente válidas, siendo la más conocida will_paginate. Pero esta gema aprovecha la posibilidad de definir scopes en ORMs como ActiveRecord, Mongoid o Mongomapper, de modo que su código se torna más sencillo, y la personalización del aspecto del paginador es bastante más elegante. De hecho, esta <strong>personalización visual es extensible</strong> en forma de <em>themes</em>, de modo que ya empiezan a aparecer <a href="https://github.com/amatsuda/kaminari_themes">algunas gemas con dichos themes</a> para adoptar el aspecto de paginadores como los de GitHub, Google, etc.</p>

<p>La paginación no se limita a instancias devueltas por nuestro <span class="caps">ORM</span> favorito, sino que podemos paginar también arrays utilizando un wrapper:</p>

<pre class="prettyprint lang-ruby">
  Kaminari.paginate_array(my_array_object).page(params[:page]).per(10)
</pre>

<p>Su código se puede encontrar en <a href="https://github.com/amatsuda/kaminari">Github</a>.</p>

<h2>OmniAuth</h2>

<p>Gemas para tratar el problema de la <strong>autentificación de usuarios</strong> hay muchas, aunque yo sigo más la costumbre de crear mi propio sistema de registro y autentificación de usuarios, ya que es una tarea relativamente sencilla y que permite luego un mayor grado de personalización (tratar de adaptar el comportamiento de gemas como Devise se puede tornar complicado).</p>

<p>Pero empieza a ser muy habitual que necesitemos permitir la autentificación mediante <strong>cuentas de otras plataformas</strong> como Facebook, Twitter, Google Apps, y otros. Y aquí es donde viene a ayudarnos OmniAuth.</p>

<p>Con esta gema elaborada por los chicos de Intridea, y habitualmente agregando tan sólo un nuevo controlador por cada servicio para crear la sesión, así como la carga de un middleware, podemos habilitar la posibilidad de que el usuario se autentifique usando su cuenta en ese servicio, así como obtener toda clase de información relativa al usuario que se ha logueado (nombre y apellidos, nick, email, etc; los datos proporcionados dependen del servicio utilizado).</p>

<p>Así que ya no hay excusa para añadir esta posibilidad a tu aplicación Rails. El código de la gema se puede encontrar en <a href="https://github.com/intridea/omniauth">GitHub</a>.</p>

<h2>Ancestry</h2>

<p>¿Necesitas añadir una <strong>jerarquía</strong> a tus modelos? Esta gema viene a tu rescate. Los resultados son similares a otros plugins como acts_as_tree, pero gracias a la gema de Stefan Kroes, el almacenamiento de la jerarquía es bastante <strong>eficiente</strong>, puesto que se guarda en cada instancia en forma de ruta de ids desde el objeto padre hasta la propia instancia (por ejemplo, &#8220;12/83&#8221; indica que el objeto actual tiene como padre al objeto con id 83, que a su vez tiene como padre al objeto con id 12), de modo que utilizando búsquedas de texto en este path se pueden obtener fácilmente elementos como los objetos raíz (aquellos cuyo path no contiene nada), los hijos de un objeto (aquellos que tienen en el path la subcadena con el id del padre seguida de una barra), etc.</p>

<p>La cantidad de métodos para moverse a través del árbol, así como comprobadores de condiciones (si el nodo tiene hijos, si es el único hijo, etc) es verdaderamente amplia. La forma en que los objetos que quedan huérfanos son tratados es personalizable. En general, una gema muy sencilla de usar, y que proporciona la funcionalidad de organización de las instancias de tu modelo en forma de árbol con una solución elegante y eficiente.</p>

<p>Su código en <a href="https://github.com/stefankroes/ancestry">GitHub</a>.</p>

<h2>aasm</h2>

<p>Por último, no quisiera dejarme a una gema de Scott Barron que nos permitirá construir una <strong>máquina de estados</strong> en nuestro modelo, de modo que podamos definir en ellos un conjunto de estados y de transiciones permisibles entre los mismos. Así, podemos separar nuestras instancias en dichos estados, y asegurarnos de que cuando cambien de un estado a otro, se ejecuten determinadas acciones definidas en nuestro modelo. También nos permite impedir que un modelo cambie de un estado a otro si no le está permitido. Es ideal para controlar cosas como el workflow de un objeto que representa un documento, tarea, etc.</p>

<p>Su código en <a href="https://github.com/rubyist/aasm">GitHub</a>.</p>

<h2>Conclusiones</h2>

<p>En posteriores posts, os hablaré de algunas de mis gemas favoritas en otras tareas como el testeo unitario. Mientras tanto, os pregunto: ¿Cuáles son vuestras otras gemas favoritas?</p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Contra la mala memoria, ricas chuletas para desarrolladores]]></title>
      <link>http://www.genbetadev.com/herramientas/contra-la-mala-memoria-ricas-chuletas-para-desarrolladores</link>
      <guid>http://www.genbetadev.com/herramientas/contra-la-mala-memoria-ricas-chuletas-para-desarrolladores</guid>
      <pubDate>Wed, 20 Apr 2011 12:04:31 +0000</pubDate>

      <author>Fernando Siles</author>
      <description><![CDATA[
      <p><img id="image76321" src="http://img.genbetadev.com/2011/04/chuletas_universidad.jpg" class="centro" alt="Chuletacas" /></p>

	<p>Como ya hemos comentado en alguna que otra ocasión, los <strong>programadores, maquetadores y desarrolladores en general</strong> no somos máquinas sino seres humanos que, en algún momento, <strong>podemos tener lapsus de memoria</strong> o no estar del todo seguros de la sintaxis de nuestro código. Es por ello que cada vez proliferan más las <strong>chuletas de lenguajes de programación</strong> (cheat sheets en el idioma de Shakespeare por si eres un <em>hipster</em> y tal). Si, como las que nos hacíamos en la carrera (negaré ante mis profesores haber escrito esto) pero en plan fino. Aquí os enlazamos unas cuantas, la mayoría <strong>en pdf o en formato de imagen</strong> para que las puedas descargar e imprimir fácilmente:<!--more--></p>

	<p><ul>
	<li><a href="http://geeksroom.com/2011/03/hoja-de-trucos-de-html5-en-una-infografia/46482"><span class="caps">HTML</span> 5</a></li></p>

	<p>	<li><a href="http://woork.blogspot.com/2009/09/jquery-visual-cheat-sheet.html">jQuery 1.3</a></li></p>

	<p>	<li><a href="http://www.emezeta.com/articulos/emezeta-card-php-cheat-sheet#axzz1K3csUMtt">PHP</a></li></p>

	<p>	<li><a href="http://maniacdev.com/objectiveccheatsheet.pdf">Objective-C</a></li></p>

	<p>	<li><a href="http://downloads.sencha.com/extras/css3-cheat-sheet.pdf"><span class="caps">CSS</span> 3</a></li></p>

	<p>	<li><a href="http://www.addedbytes.com/cheat-sheets/python-cheat-sheet/">Python</a></li></p>

	<p>	<li><a href="http://www.addedbytes.com/cheat-sheets/ruby-on-rails-cheat-sheet/">Ruby on Rails</a></li></p>

	<p>	<li><a href="http://refcardz.dzone.com/refcardz/struts2">Struts 2</a></li><br />
</ul><br />
Y, aunque no sea programación, algo que siempre nos puede venir bien a aquellos que tenemos que manejar servidores y no controlamos mucho de <a href="http://files.fosswire.com/2007/08/fwunixref.pdf">la consola de Linux</a>.</p>

	<p>Si la cosa gusta, pues <strong>habrá más entregas</strong> de estas proteínicas chuletas. Ricas, ricas y con fundamento.</p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Ruby on Rails incluirá CoffeeScript]]></title>
      <link>http://www.genbetadev.com/actualidad/ruby-on-rails-incluira-coffeescript</link>
      <guid>http://www.genbetadev.com/actualidad/ruby-on-rails-incluira-coffeescript</guid>
      <pubDate>Fri, 15 Apr 2011 14:54:03 +0000</pubDate>

      <author>Toni Cárdenas</author>
      <description><![CDATA[
      <p><img id="image76265" src="http://img.genbetadev.com/2011/04/coffeescript.png" class="centro" alt="coffeescript.png" /></p>

	<p><strong>JavaScript</strong>, ese lenguaje que hasta hace poco parecía de juguete para hacer el chorras en nuestras webs (poner nieve cayendo en Navidad, poner el cursor en <em>crosshair</em> al pasar por un enlace, esas cosas), tras pasar por la adolescencia de <span class="caps">AJAX</span> hoy en día pretende llegar a la adultez y ponerse el traje de lenguaje serio. <strong>Cada vez surgen más herramientas por y para JavaScript</strong>, para extenderlo y llevarlo a otros ámbitos. Sobre todo desde la aparición de <a href="http://nodejs.org/">Node.js</a>, <strong>se discute cada vez más entre círculos desarrolladoriles</strong> si JavaScript es una basura de lenguaje o simplemente un incomprendido que bien usado tiene mucho potencial.</p>

	<p>En los 90 y principios de los 00 la sintaxis «basada» (marcando las distancias) en Java de JavaScript lo mismo era lo más, pero hoy en día con sintaxis minimalistas llenas de <em>syntactic sugar</em> en pleno apogeo, como las de Python y Ruby, tanto paréntesis y tanto corchete tiene un aspecto bastante farragoso. Ahí es donde entra <strong>CoffeeScript, una sintaxis alternativa muy limpia</strong> que compila directamente a JavaScript.</p>

	<p><!--more--></p>

	<p>Es una delicia ver <a href="http://jashkenas.github.com/coffee-script/">el código de ejemplo en la página oficial</a>, convirtiendo por ejemplo lo que en JavaScript sería esto:</p>

<pre class="code">
var countdown, num;
countdown = (function() {
  var _results;
  _results = [];
  for (num = 10; num >= 1; num&#8212;) {
    _results.push(num);
  }
  return _results;
})();
</pre>

	<p>En esto:</p>

<pre class="code">
countdown = (num for num in [10..1])
</pre>

	<p>Pues bien, <strong>la próxima versión de Ruby on Rails, la 3.1, parece que incluirá CoffeeScript por defecto</strong>. Esto supone un importante empujón para el proyecto, ya que antes había que compilar cada uno de los archivos en CoffeeScript que usáramos para poder incluirlos como JavaScript en nuestro proyecto, algo más engorroso que sencillamente escribir código y ponerlo a funcionar como en JavaScript nativo. Ahora, al estar integrado en Rails, y siempre, claro está, que hagamos uso de este <em>framework</em>, <strong>escribir en CoffeeScript será tan directo como en JavaScript nativo</strong>, y definitivamente mucho más cómodo.</p>

	<p>De momento todo esto se sabe por un commit en el repositorio GitHub de Rails, donde por cierto <strong>en los comentarios se ha armado una buena</strong> por alguna razón. Por lo visto ha sentado mal que se incluya Coffee por defecto, aun cuando si no se quiere usar siempre se tendrá el JavaScript puro y duro (bueno, si se le puede llamar «puro y duro» a JavaScript).</p>

	<p>En definitiva, <strong>una buena oportunidad</strong> para adoptar este nuevo lenguaje que pinta tan interesante.</p>

	<p>Vía | <a href="https://github.com/rails/rails/compare/9333ca7...23aa7da">Commit en GitHub de Rails</a><br />
Más información | <a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Ruby on Rails, desarrollando sobre raíles ]]></title>
      <link>http://www.genbetadev.com/frameworks/ruby-on-rails-desarrollando-sobre-railes</link>
      <guid>http://www.genbetadev.com/frameworks/ruby-on-rails-desarrollando-sobre-railes</guid>
      <pubDate>Mon, 11 Apr 2011 13:45:12 +0000</pubDate>

      <author>Pablo Formoso</author>
      <description><![CDATA[
      <p><img id="image76199" src="http://img.genbetadev.com/2011/04/ruby1.png" class="centro_sinmarco" alt="Ruby on rails" /></p>

	<p>Dentro del amplio mundo del desarrollo de aplicaciones web hoy en día nos encontramos con un <strong>gran número de lenguajes con sus respectivos frameworks</strong>. Lejos ya de los años en los que Java, <span class="caps">PHP</span> o <span class="caps">ASP</span> se posicionaban como únicas opciones con monstruos como Struts, Zend o .Net, lenguajes como Perl, Python o <strong>Ruby</strong> se han ganado un espacio entre estos gigantes.</p>

	<p>Gracias al inconmensurable trabajo de Yukihiro Matsumoto “Matz”, creador de Ruby, podemos disfrutar de un lenguaje muy natural, flexible y por que no, agradable para el desarrollador (personalmente fue una de las cosas que me hizo dar el salto de Java y <span class="caps">PHP</span> a Ruby, disfrutar programando). Matz liberó la primera versión de Ruby en 1995 pero no fue hasta 2006 cuando alcanzo su punto de esplendor, ayudado por la publicación en 2005 de la primera versión de Ruby on Rails.</p>

<blockquote>Ruby es simple en apariencia, pero complejo por dentro, como el cuerpo humano. (Matz)</blockquote> 

	<p><!--more--></p>

<h2>Nacimiento de un framework de futuro</h2>

	<p>Creado por  David Heinemeier Hansson, como parte de su trabajo en 37signals.com en el proyecto <strong>Basecamp</strong> (gestor de proyectos SaaS que nosotros mismos usamos en el día a día). Gracias a Rails fue como tope con Ruby y con la ferviente comunidad que lo arropa. En aquella época mediados del 2006 fue cuando probé por primera vez Rails (versión 1.1.2) tras haber leído parte de una tesis de Michel Barbosa, un estudiante de la Universidad Erasmus de Rotterdam, que acaba de publicarla y que lleva como título: &#8220;Delivery of the Key Adoption Factors and Key Characteristics of Companies Using Ruby on Rails&#8221;.</p>

	<p>En ella se encuentra el dato de que el 92% de la empresas que cambiaron sus framework de desarrollo web a Rails fue por que <strong>¡disfrutaban desarrollando!</strong> No me le creí y decidí probarlo, sólo me hicieron falta dos comandos para darme cuenta de las maravillas que me esperaban:</p>

	<ul>
		<li><span class="caps">MCV</span> aun que discutible en algunos casos, cada vez mejor definido.</li>
		<li>Scaffolding para crear modelos, vistas y controladores de una tacada.</li>
		<li>Convención de nombre muy cómoda y sencilla</li>
		<li>Fuera <span class="caps">XML</span> hola <span class="caps">YAML</span></li>
		<li><span class="caps">DRY</span>, <span class="caps">REST</span> y <span class="caps">CRUD</span> se incorporan al vocabulario del framework como una filosofía.</li>
		<li>Toda la potencia de Ruby (sencillez, clases abiertas, metaprogramación &#8230;) </li>
		<li>Una comunidad increíble creando gemas y plugins para casi todo.</li>
		<li>Testing integrado con el proyecto desde un inicio</li>
		<li>Flexibilidad para configurar y extender la gran mayoría de los objetos al vuelo</li>
	</ul>
	<ul>
		<li>... no podía parar</li>
	</ul>

<h2>Un poco de requisitos</h2>

	<p>Cualquier aplicación desarrollada en Rails corre en varios servidores web y es compatible con la mayoría de sistemas gestores de bases de datos (aun que el wrapper para Oracle es un poco infernal, funciona también :P). Apache y NGiNX son las principales opciones como servidores usando Phusion Passenger (aka mod_rails) como conector. A partir de ahí podemos darle mil vueltas, Mongrel, un cluster de estos, Lighttpd con FastCGI, Mongrels + Nginx&#8230;</p>

<h2>Por dónde empiezo</h2>

	<p>Uno de los primeros pasas es empezar por al propia página de Ruby y visitar <a href="http://tryruby.org/">Tryruby</a> donde podréis probar la sintaxis de Ruby ver como funciona para comprender los primeros pasos con Rails. The Ruby Way es una buena referencia para dar los siguientes pasos. Antes de que os deis cuentas estaréis programando de forma muy natural y espero que disfrutéis tanto que lo hacemos muchos ya.</p>

	<p>Una vez que conocemos la sintaxis básica de Ruby es el momento de atacar a Rails. Una de las formas (y para mi la más divertida) de dar los primeros pasos es con <a href="http://railsforzombies.org/">Rails for zombies</a> un site que os guiará a través de una serie de tutoriales donde explican las diferentes partes del framework y como trabajar con ellos (gratis claro).</p>

	<p><img id="image76200" src="http://img.genbetadev.com/2011/04/ruby2.png" class="centro" alt="Rails for zombies" /> </p>

	<p>Si ya te has enganchado después de un breve paso por The Walking Dead del mundo Rails es el momento de empezar a cacharrear. Ryan Bates (@rbates) es el creador de RailsCasts.org, en el momento que escribo este artículo va por el número #260&#8230; #260 motivos para probar y romper cosas, screencast desde un nivel básico hasta el uso de herramientas de benchmarking para sacar el mayor partido a os desarrollos.</p>

	<p>Para arrancar ya con el código en nuestra máquina lo mejor es acudir a <a href="http://rubyonrails.org/download">http://rubyonrails.org/download</a> </p>

<h2>Cómo no, IDEs</h2>

	<p>Como todo lenguaje Ruby tiene sus entornos de desarrollo, y tenemos bastante donde elegir. Los que más se usan actualmente es TextMate, Vim, Emacs, RadRails (basado en Eclipse, Netbeans o RubyMine.</p>

	<p>Ahora mismo existe una corriente que está con Vim y otros que nos mantenemos fieles a TextMate (fuera de Mac, en entornos Linux su primo hermano es GMate, una adaptación de GEdit con extensiones que hacen que se parezca mucho a TextMate). Fuera de <span class="caps">OSX</span> o Linux, las principales opciones son RadRails y Netbeans.</p>

	<p>Tanto en TextMate como en Vim después de llevar trabajando un tiempo con cada uno de ellos ya habréis ajustado Snippets, macros y acciones a vuestro gusto. Mi consejo es probar cada uno de ellos y desarrollar con el que os encontréis más cómodos.</p>

<h2>El clásico blog en 15 minutos</h2>

	<p>Creo que todos a la hora de empezar con Rails hemos hecho este proyecto. A día de hoy hay cientos de blogs que tienen el artículo listo para su lectura, yo os dejo un enlace al <a href="http://video.google.com/videoplay?docid=-4055082910432396596">vídeo paso a paso</a># para que lo probéis por vosotros mismos.</p>

<h2>Los mitos sobre Rails</h2>

	<p>Para hablar de los mitos que existen sobre Rails necesitaría otro post aparte, pero lo resumiré de forma rápida, *Rails sí escala, como cualquier otra aplicación en cualquier otro lenguaje, eso dependerá de factores como el diseño de la aplicación, arquitectura escogida etc&#8230;</p>

	<p>El otro y bastante sonado es que es duro de desplegar a producción. Como todos si eres fan de usar FTPs y volcados&#8230; Capistrano + Git (por ejemplo Github) y tras un setup no muy largo (no más de una hora la primera vez que montas uno) podrás hacer despliegues a golpe de un comando y pocos segundos.</p>

	<p>Algunos mitos más son:</p>

	<ul>
		<li>Rails falla con frecuencia </li>
		<li>Rails es difícil por culpa de Ruby (obvio si no aprendes el lenguaje)</li>
		<li>Rails solo funciona con Prototype (con la 3.1 jQuery será la librería JS por defecto)</li>
		<li>Rails es poco maduro</li>
	</ul>
	<ul>
		<li>Rails no está <del>echo</del> hecho para el mundo Enterprise (más bien creo que es al revés)</li>
	</ul>

	<p><h2>Comunidad hispana</h2><br />
El principal canal de distribución es la lista de <a href="http://lists.simplelogica.net/mailman/listinfo/ror-es">simplelogica</a> donde la cantidad de mensajes diarios es considerable.</p>

	<p>Dentro de los podcast podemos destacar el podcast de <a href="http://railshispano.es/">RailsHispano</a>.</p>

	<p>Podría seguir escribiendo bondades sobre Rails y Ruby pero lo mejor es que probéis por vosotros mismos. Espero poder tener la oportunidad de volver a escribir algo más técnico sobre Rails en este gran proyecto como es Genbeta Dev ya que junto con Rails las metodologías ágiles como <span class="caps">SCRUM</span>, Kanban, XP van muy ligadas a Rails y sería bueno hablar sobre ello.</p>

	<p><div class="nota"> <br />
<img alt="Pablo Formoso" src="http://img.genbetadev.com/2011/04/pabloformoso.jpg" class="derecha"/><p>Pablo Formoso Estrada socio fundador de <a href="http://www.softwhisper.es/">SoftwhipserSL</a>, empresa dedica al desarrollo RoR y dispositivos móviles (iOS y Android), lleva en el mundo de las programación desde los 14 años. Ponente en la Euruko 2009 y colaborador con El Correo Gallego en algunas entrevistas tecnológicas. Ahora a sus 27 se define como amante de las metodologías ágiles y movilidad. A finales de año espera junto con su socio en Softwhisper poder sacar producto propio.</p>

	<p>Twitter: @<a href="http://twitter.com/pabloformoso">pabloformoso</a></p> <br />
</div> </p>      ]]></description>
      </item>
        	  <atom:link href="http://www.genbetadev.com/tag/ruby-on-rails/rss2.xml" rel="self" type="application/rss+xml" />
	</channel>

</rss>


