<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description>En Decisiones Inteligentes desarrollamos soluciones para su empresa.

Contamos con experiencia en el desarrollo de aplicaciones de escritorio, web y móbiles.

Nuestros desarrollos agregan un valor de negocio a su empresa, ya que se enfocan a la solución de sus problemas.

Este blog trata diferentes temas de desarrollo, principalmente enfocados al lenguaje de programación Ruby, así como al DSL Sinatrarb y el framework Rails.</description><title>Decisiones Inteligentes</title><generator>Tumblr (3.0; @decisionesinteligentes-blog)</generator><link>https://blog.decisionesinteligentes.com/</link><item><title>Hacer el despliegue -deployment -de una aplicación Rails a la Heroku</title><description>&lt;p&gt;Ya en varias ocasiones, durante platicas o reuniones relacionadas con Ruby y con Rails, me han preguntado como hacer el despliegue de una aplicación Web hacia un servidor Linux. Generalmente mi respuesta rapida es &amp;ldquo;no te metas en problema, usa &lt;a href="http://heroku.com/" target="_blank"&gt;Heroku&lt;/a&gt;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;La recomendación de Heroku es porque no nos tenemos que preocupar de instalar ni configurar nada, solo hacemos un push de nuestro repositorio Git y el proceso de Heroku se encarga de configurar todo para tener nuestra aplicación funcionando desde Internet en cuestión de minutos.&lt;/p&gt;
&lt;p&gt;El &amp;ldquo;detalle&amp;rdquo; con Heroku, como me han comentado, es que cuesta, me dicen, &amp;ldquo;yo lo que quiero es configurar mi propio servidor linux y ejecutar la aplicación desde ahi&amp;rdquo;. Bueno en este caso, hay muchas &amp;ldquo;recetas&amp;rdquo; de como hacerle.&lt;/p&gt;
&lt;p&gt;Generalmente todas estas &amp;ldquo;recetas&amp;rdquo; requieren de pasos de instalación de programas y librerías como servidor web, motor de base de datos, herramientas adicionales, etc. para dejar nuestro ambiente preparado para poder desplegar nuestra aplicación web.&lt;/p&gt;
&lt;p&gt;Cuando finalmente tenemos nuestro entorno listo, el siguiente paso es configurar &lt;a href="https://github.com/capistrano/capistrano/wiki" target="_blank"&gt;Capistrano&lt;/a&gt;, el cual requiere de una &amp;ldquo;receta&amp;rdquo; con los pasos a realizar para desplegar la aplicación a un servidor remoto. Estos pasos incluyen instrucciones por ejemplo de a que repositorio git conectarse para tener el código fuente, realizar migraciones de base de datos, ejecutar pasos adicionales de configuración etc.&lt;/p&gt;
&lt;p&gt;Es algo feasible, pero requiere de un poco de esfuerzo y quizas un poco de frustraciones de vez en cuando, hasta que tenemos una solución que nos agrada para el despliegue de la aplicaciones la primera vez y los cambios subsecuentes.&lt;/p&gt;
&lt;p&gt;Hace un par de dias, y por casi casualidad me tope con &lt;a href="http://gitpusshuten.com/" target="_blank"&gt;Gitpusshuten&lt;/a&gt;, el cual es una herramienta para hacer el despliegue de aplicaciones Ruby/Rails.&lt;/p&gt;
&lt;p&gt;&lt;figure class="tmblr-full" data-orig-height="327" data-orig-width="500"&gt;&lt;img src="https://64.media.tumblr.com/451dbceb961ccc2596dfb17f208d9b92/f5c0f30d0364ef32-b4/s540x810/145973a95e5b685628f0410188872d2c1023c0c9.png" data-orig-height="327" data-orig-width="500"/&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;Lo interesante de Gitpusshuten es que hace que el proceso de despliegue a servidores Linux sea casi tan simple como lo hace Heroku.&lt;/p&gt;
&lt;p&gt;Gitpusshuten inclusive puede instalar y configurar todo el software y herramientas necesarias para que nuestro servidor Linux funcione como Webserver, aun si nuestro servidor es una nueva instalación.&lt;/p&gt;
&lt;p&gt;Definitivamente si están buscan opciones para montar sus propios servidores Linux y desplegar desde ahi las aplicaciones Ruby/Rails deben de darle una revisada a Gitpusshuten, ya que en cuestión de minutos les ayudara a tener su aplicación en linea funcionado.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/3732014926</link><guid>https://blog.decisionesinteligentes.com/post/3732014926</guid><pubDate>Tue, 08 Mar 2011 16:37:44 -0800</pubDate><category>ruby</category><category>rubyonrails</category><category>rails</category><category>git</category><category>deployment</category></item><item><title>Video de Webinar para JoeDayz sobre Ruby On Rails</title><description>&lt;p&gt;El pasado 8 de febrero a invitación de &lt;a target="_blank" href="http://www.joedayz.org/"&gt;JoeDayz&lt;/a&gt; presente un &lt;a target="_blank" href="http://bit.ly/fWtu15"&gt;Webinar sobre Ruby On Rails&lt;/a&gt;. La presentación fue grabada y el video se puede descargar desde la pagina de JoeDayz.&lt;/p&gt;
&lt;p&gt;El unico detalle con la grabación, es que esta codificada en Windows Media con el codec exclusivo de GoToMeeting - a traves de su servicio se llevo a cabo el Webinar -, lo que impide que usuarios de Linux y OSX puedan ver el video.&lt;/p&gt;
&lt;p&gt;Descargue el video, lo codifique de manera diferente y lo subi al sitio de Vimeo. Para los interesados aqui esta:&lt;/p&gt;
&lt;p&gt;
&lt;object width="400" height="250"&gt;
&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=19810069&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00adef&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=19810069&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00adef&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="250"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/19810069" target="_blank"&gt;Desarrollando con Ruby on Rails&lt;/a&gt; from &lt;a href="http://vimeo.com/mariochavez" target="_blank"&gt;Mario A Chavez&lt;/a&gt; on &lt;a href="http://vimeo.com" target="_blank"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Para quienes están interesados en aprender Ruby On Rails, ya anuncie un segundo &lt;a target="_blank" href="http://bit.ly/hihoAO"&gt;RailsCamp&lt;/a&gt;.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/3236706315</link><guid>https://blog.decisionesinteligentes.com/post/3236706315</guid><pubDate>Fri, 11 Feb 2011 10:49:00 -0800</pubDate><category>ruby</category><category>rubyonrails</category><category>rails</category><category>video</category></item><item><title>RailsCamp - Nivel 1</title><description>&lt;p&gt;&lt;img width="380" height="172" src="https://64.media.tumblr.com/tumblr_lgguaftmW41qcvilfo1_400.png"/&gt;&lt;/p&gt;
&lt;p&gt;Después del &lt;a target="_blank" href="http://blog.decisionesinteligentes.com/post/3058601680/railscamp-de-enero"&gt;RailsCamp de Enero&lt;/a&gt;, algunas personas me han preguntado si es posible realizar un curso para nivel 1, es decir enfocado a personas que apenas están entrando a conocer este entorno de desarrollo.&lt;/p&gt;
&lt;p&gt;Pues bien, por este medio lanzo la convocatoria para los interesados al proximo RailsCamp, este sera de 15 horas -casi- continuas de entrenamiento en 3 dias:&lt;br/&gt;Dia 1 -Viernes- de 6pm a 10pm&lt;br/&gt;Dia 2 -Sábado- de 9am a 4pm&lt;br/&gt;Dia 3 -Sábado- de 9am a 4pm&lt;/p&gt;
&lt;p&gt;La fecha y el lugar aun están por definirse, ya que aun estoy buscando un espacio disponible para llevar a cabo el RailsCamp, donde puedan participar 10 personas.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Los objetivos del RailsCamp son:&lt;/li&gt;
&lt;li&gt;Entender la arquitectura MVC&lt;/li&gt;
&lt;li&gt;Manejo de dependencias con Bundler&lt;/li&gt;
&lt;li&gt;Migraciones y modelos&lt;/li&gt;
&lt;li&gt;Relaciones de datos a través de los modelos&lt;/li&gt;
&lt;li&gt;Vistas, Helpers y Layouts&lt;/li&gt;
&lt;li&gt;El controlador, CRUD y REST&lt;/li&gt;
&lt;li&gt;El uso de Mailers&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;El proceso consiste en ir explicando estos conceptos al mismo tiempo de ir construyendo una aplicación en Ruby on Rails.&lt;/p&gt;
&lt;p&gt;El costo tentativo del RailsCamp es de 1,500.00 pesos - este puede aun variar dependiendo del costo del lugar -, e incluye ademas del entrenamiento, cafeteria y comida. &lt;br/&gt;&lt;strong&gt;NOTA&lt;/strong&gt;: Si alguien necesita factura por el RailsCamp, el costo es diferente, por favor contactenme directamente a mario.chavez en decisionesinteligentes&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Patrocinio para estudiantes&lt;/strong&gt;: Al juntar a 10 personas para el RailsCamp, se le otorgara un patrocinio del 100% a un estudiante, asi que si eres estudiante dejame saber en los comentarios porque quieres aprender Ruby On Rails y al llenar el curso eligire al comentario mas convincente.&lt;/p&gt;
&lt;p&gt;A los interesados, por favor les pido si pueden hacermelo saber en los comentarios del post.&lt;/p&gt;
&lt;p&gt;Y ya para finalizar este post, también estoy preparando un MovilCamp, ya una vez que tenga los detalles los estaré publicando.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/3236563428</link><guid>https://blog.decisionesinteligentes.com/post/3236563428</guid><pubDate>Fri, 11 Feb 2011 10:37:09 -0800</pubDate><category>railscamp</category><category>rails</category><category>ruby</category><category>rubyonrails</category></item><item><title>Servir aplicaciones Rack desde IIS en Windows</title><description>&lt;p&gt;Por cuestiones de un proyecto en el que estoy trabajando, tuve la necesidad de crear una aplicación de Sinatra que se conectara a las bases de datos de un par de sistemas diferentes, a manera que la aplicación de Sinatra sea un API que exponga información que manejan esos sistemas de una manera unificada para ser consumida por otras aplicaciones/servicios.&lt;/p&gt;
&lt;p&gt;Ambos sistemas tienen como base de datos a MSSQL Server, aunque uno esta escrito en ColdFusion y el otro en ASP.NET. Como unico requisito es que la aplicación de Sinatra sea servida por el Internet Information Server - IIS -; este requisito fue el inicio de una búsqueda de la mejor opción para hacerlo.&lt;/p&gt;
&lt;p&gt;El motivo de usar &lt;a target="_blank" href="http://www.sinatrarb.com/"&gt;Sinatra&lt;/a&gt; es simple, es muy sencillo hacer API para aplicaciones web con el DSL de Sinatra. Inicialmente trate de usar &lt;a target="_blank" href="http://datamapper.org/"&gt;DataMapper&lt;/a&gt; para la conexión a MSSQL server, pero resulta que el conector tiene como dependencia una libreria en Java, motivo por el cual decidí usar &lt;a target="_blank" href="http://api.rubyonrails.org/classes/ActiveRecord/Base.html"&gt;ActiveRecord&lt;/a&gt; de Rails, ya que el &lt;a target="_blank" href="https://github.com/rails-sqlserver/activerecord-sqlserver-adapter"&gt;driver para MSSQL&lt;/a&gt; esta implementado completamente en Ruby.&lt;/p&gt;
&lt;p&gt;Mi primera opción para configurar IIS para servir solicitudes de Sinatra, fue usar &lt;a target="_blank" href="http://rubyinstaller.org/"&gt;Ruby&lt;/a&gt; y Fastcgi para IIS. Para esto me encontre con un post llamado &amp;ldquo;&lt;a target="_blank" href="http://mvolo.com/blogs/serverside/archive/2007/02/18/10-steps-to-get-Ruby-on-Rails-running-on-Windows-with-IIS-FastCGI.aspx"&gt;10 pasos para hacer que Ruby on Rails sea servidor con IIS y FastCGI&lt;/a&gt;&amp;rdquo;, el titulo se mostraba muy prometedor y el post bastante sencillo de seguir.&lt;/p&gt;
&lt;p&gt;Pero, al final de cuentas no fue tan sencillo como seguir los 10 pasos, y al igual que muchos de los que publicaron comentarios en el post solo llegue hasta el mensaje de error:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;FastCGI Handler Extension&lt;/p&gt;
&lt;p&gt;Error 0x80004005 occurred processing request.&lt;/p&gt;
&lt;p&gt;The FastCGI process exited unexpectedly&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Y al igual que las otras personas, este error fue como toparse con pared, ya que no es descriptivo de lo que realmente causa el problema y al parecer nadie encontró una solución viable.&lt;/p&gt;
&lt;p&gt;Después de darle vueltas e inclusive contemplar la posibilidad de reemplazar la aplicación de Sinatra por una aplicación de ASP.NET MVC - me negaba a hacerlo, ya que perderia la simplicidad y elegancia de Sinatra -, recordé que &lt;a target="_blank" href="http://ironruby.com/"&gt;IronRuby&lt;/a&gt; tenia &lt;a target="_blank" href="http://blog.jimmy.schementi.com/2009/05/ironruby-at-railsconf-2009.html#iis"&gt;soporte&lt;/a&gt; para aplicaciones &lt;a target="_blank" href="http://rack.rubyforge.org/"&gt;Rack&lt;/a&gt; en IIS.&lt;/p&gt;
&lt;p&gt;Así que procedi a descargar a instalar IronRuby, así como el .NET 4.0, el cual es dependencia. Obviamente, y aunque con IronRuby logre mi cometido, el camino no fue simple.&lt;/p&gt;
&lt;p&gt;Mi primer problema fue actualizar &lt;a href="http://rubygems.org/" target="_blank"&gt;RubyGems&lt;/a&gt; con IronRuby, al tratar de ejecutar:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;igem update &amp;ndash;system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fallaba con el error &lt;strong&gt;&lt;em&gt;invalid exec_format “ir”, no %s&lt;/em&gt;&lt;/strong&gt;&lt;br/&gt;Aparentemente un bug que solo sucede con IronRuby, la manera de darle la vuelta es prevenir que el bug &amp;ldquo;truene&amp;rdquo; el proceso, atrapandolo y mostrando un mensaje del problema, pero permitiendo la continuación del proceso. La solución consiste en agregar un archivo con esta logica al código de RubyGems incluido en IronRuby, este &lt;a target="_blank" href="http://hotgazpacho.org/2010/05/ironruby-gem-update-system/"&gt;post contiene los detalles de la solución&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mi siguiente problema fue que ActiveRecord 3.0.3 no funciona con IronRuby 1.0.x, por lo que baje mi dependencia a ActiveRecord 2.3.10 y el problema se soluciono. Además de ActiveRecord, agregue como dependencia el &lt;a target="_blank" href="https://github.com/rails-sqlserver/activerecord-sqlserver-adapter"&gt;ActiveRecord SqlServer Adapter&lt;/a&gt;, el cual configure para que se conecte a través de ADO.NET.&lt;/p&gt;
&lt;p&gt;El siguiente paso fue hacerme del IronRuby.Rack.dll, el cual lo encontré en una &lt;a target="_blank" href="http://jimmy.schementi.com/downloads/ironruby-rack-0.0.9-universal-dotnet.gem"&gt;gema&lt;/a&gt; del mismo nombre, la cual ademas contiene una serie de utilerias interesantes.&lt;/p&gt;
&lt;p&gt;Por ejemplo en el folder de la aplicación de Sinatra ejecute:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;rack2aspnet . sinatra&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Esto creo un directorio bin, con las librerías necesarias de IronRuby y IronRuby.Rack, ademas de instalar Cassini, un servidor de Web basico para probar aplicaciones que son servidas a traves de ASP.NET. Tambien creo el archivo config.ru y web.config.&lt;/p&gt;
&lt;p&gt;En este punto podemos probar nuestra aplicación con Cassini:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;bin\cassini c:\wwwroot\miapp 9292 /&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pero al intentar conectarme a la URL http://localhost:9292, esta solo me muestra el siguiente error&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;C:/dev/ruby/lib/ruby/gems/1.8/gems/rack-1.2.1/lib/rack/utils.rb:138:in `union&amp;rsquo;: can&amp;rsquo;t convert Array into String (TypeError)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;El problema es que IronRuby no funciona correctamente con rack-1.2.1, la solución es simple y esta descrita en este &lt;a target="_blank" href="https://github.com/rack/rack/issues/issue/32"&gt;reporte de problema en Rack&lt;/a&gt;, hay que modificar la linea 138 de &lt;strong&gt;utils.rb&lt;/strong&gt;, para que el lugar de ser:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Regexp.union(ESCAPE_HTML.keys)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;sea&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Regexp.union(ESCAPE_HTML.keys.join(&amp;rsquo;,&amp;rsquo;))&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Listo, mi aplicación de Sinatra es servida por Cassini.&lt;/p&gt;
&lt;p&gt;La gema de IronRuby-Rack, provee de la herramienta &lt;strong&gt;deploy2iis&lt;/strong&gt;, que permite crear y configurar una aplicación en IIS, desafortunadamente solo funciona con IIS7, en mi caso el servidor usa IIS6, por lo que procedi a crear la aplicación en el IIS de manera manual.&lt;/p&gt;
&lt;p&gt;Hay algunas recomendaciones que debemos de tener en cuenta al crear y configurar nuestra aplicación en IIS6. Primero, si ya tenemos aplicaciones que estén corriendo en el IIS y que dependan del .NET &amp;lt; 4.x, hay que crear un nuevo pool, para permitir el tener aplicaciones con diferentes versiones de .NET, en el caso de IronRuby el framework 4.x es requerido. Una vez creado el nuevo pool, en la configuración de nuestra aplicación en IIS, le indicamos que use ese nuevo pool y también le indicamos que use .NET 4.x.&lt;/p&gt;
&lt;p&gt;El siguiente punto es que necesitamos configurar la aplicación para que sea servida a través del filtro &lt;strong&gt;aspnet_isapi.dll&lt;/strong&gt; e indicarle que no espere que los archivos a servir existam fisicamente en el sistema de archivos.&lt;/p&gt;
&lt;p&gt;Esto es importante ya que nuestra aplicación, puede responder a diversas URLs, que generalmente no tienen extensión. Por ejemplo mi aplicación en Sinatra puede responder a las siguientes URLs&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;http://localhost/administration/models.xml&lt;/p&gt;
&lt;p&gt;o&lt;/p&gt;
&lt;p&gt;http://localhost/administration/models/88234.xml&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Siendo que esos archivos no existen físicamente, son generados al momento de que se solicitan.&lt;/p&gt;
&lt;p&gt;Adicionalmente tenemos que hacer un ajuste - si estamos en IIS6 -, en web.config, ya que este archivo hay que recordar que fue generado automáticamente por &lt;strong&gt;rack2aspnet&lt;/strong&gt;. Por lo tanto este archivo esta generado para IIS7, el ajuste en sencillo, y solo consiste en corregir la manera en como se registra el &amp;ldquo;http handler&amp;rdquo; para IronRuby, en las siguientes lineas se muestra donde se tiene que hacer el registro para cada versión de IIS:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;IIS7: configuration&amp;gt;system.webServer&amp;gt;handlers&amp;gt;add&lt;/p&gt;
&lt;p&gt;IIS6: configuration&amp;gt;system.web&amp;gt;httpHandlers&amp;gt;add&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Listo, en este punto ya podemos acceder a la dirección publica de nuestra aplicación de Sinatra, la cual será servida por IIS.&lt;/p&gt;
&lt;p&gt;Definitivamente es una gran ventaja el poder usar IronRuby para ejecutar aplicaciones de Ruby en ambientes Windows, lado a lado con aplicaciones .NET. El único punto de desventaja es el tener que poner pequeños parches para permitir de la aplicaciones de Ruby funcionen correctamente en IronRuby, y el otro detalle es que no permita ejecutar librerías de Ruby más nuevas como en el caso de ActiveRecord.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/3140438595</link><guid>https://blog.decisionesinteligentes.com/post/3140438595</guid><pubDate>Sat, 05 Feb 2011 23:53:51 -0800</pubDate><category>ruby</category><category>sinatra</category><category>ironruby</category><category>rack</category><category>windows</category></item><item><title>Trabajando con Arel</title><description>&lt;p&gt;&lt;a target="_blank" href="http://guides.rubyonrails.org/active_record_querying.html"&gt;ActiveRecord&lt;/a&gt; en Rails 3.0 sufrió un cambio significativo al cambiar la forma en como se generan las consultas de SQL. Y es que a partir de esta versión, ActiveRecord hace uso de &lt;a target="_blank" href="https://github.com/nkallen/arel"&gt;ARel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;ARel es su &lt;a target="_blank" href="http://magicscalingsprinkles.wordpress.com/2010/01/28/why-i-wrote-arel/"&gt;definición oficial&lt;/a&gt; es la &amp;ldquo;Interpretación Orientada a Objetos de Algebra Relacional&amp;rdquo;, siendo la Algebra Relacional un modelo matemático para la representación de &amp;ldquo;queries&amp;rdquo; sobre datos.&lt;/p&gt;
&lt;p&gt;Y si llegaron a este punto y leyeron palabras como &amp;ldquo;álgebra&amp;rdquo;, &amp;ldquo;matemático&amp;rdquo;; no, no paren de leer.&lt;/p&gt;
&lt;p&gt;Algebra Relacional, suena como a algo &amp;ldquo;muy matemático&amp;rdquo;, ¿pero en términos de ActiveRecord que beneficios tenemos o en que se traduce?&lt;/p&gt;
&lt;p&gt;Bueno hay 2 beneficios muy visibles del uso de ARel.&lt;/p&gt;
&lt;p&gt;Primeramente ActiveRecord nos permite encadenar &amp;ldquo;queries&amp;rdquo;, lo que se traduce que programaticamente podemos crear consultas mas complejas, pero también nos ayuda a realizar una refactorizacion mas simple para eliminar duplicidad.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;gt;&amp;gt; Company.where(:code =&amp;gt; &amp;lsquo;TST&amp;rsquo;).to_sql&lt;/p&gt;
&lt;p&gt;=&amp;gt; &amp;ldquo;SELECT `companies`.* FROM `companies` WHERE (`companies`.`code` = 'TST&amp;rsquo;) ORDER BY code desc&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;gt;&amp;gt; Company.where(:code =&amp;gt; 'TST&amp;rsquo;).where(:name =&amp;gt; 'Company&amp;rsquo;).to_sql&lt;/p&gt;
&lt;p&gt;=&amp;gt; &amp;ldquo;SELECT `companies`.* FROM `companies` WHERE (`companies`.`code` = 'TST&amp;rsquo;) AND (`companies`.`name` = 'Company&amp;rsquo;) ORDER BY code desc&amp;rdquo;&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; Company.where(:code =&amp;gt; 'TST&amp;rsquo;).order(:active).limit(20).to_sql&lt;br/&gt;&lt;br/&gt;=&amp;gt; &amp;ldquo;SELECT `companies`.* FROM `companies` WHERE (`companies`.`code` = 'TST&amp;rsquo;) ORDER BY code desc, active LIMIT 20&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ActiveRecord hace un buen trabajo creando una abstracción sobre ARel, con una interface simple para hacer consultas.&lt;/p&gt;
&lt;p&gt;El segundo punto importante es que al momento de formar una consulta programaticamente ARel nos proporciona un objeto Query, el cual un no se ejecuta y que nos permite agregar mas &amp;ldquo;queries&amp;rdquo; a nuestra consulta en base a la información que nos proporciona el usuario.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;gt;&amp;gt; query = Company.where(:code =&amp;gt; 'TST&amp;rsquo;)&lt;/p&gt;
&lt;p&gt;&amp;gt;&amp;gt; query = query.order(:active)&lt;/p&gt;
&lt;p&gt;&amp;gt;&amp;gt; query = query.limit(20)&lt;/p&gt;
&lt;p&gt;&amp;gt;&amp;gt; query.to_sql&lt;/p&gt;
&lt;p&gt;=&amp;gt; &amp;ldquo;SELECT `companies`.* FROM `companies` WHERE (`companies`.`code` = 'TST&amp;rsquo;) ORDER BY code desc, active LIMIT 20&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Es decir podemos modificar nuestra consulta programaticamente antes de que sea enviada al servidor de base de datos para su ejecución.&lt;/p&gt;
&lt;p&gt;A través del API de ActiveRecord podemos crear consultas de cierta complejidad, pero llega un momento en que la única forma de escribir nuestra consulta es usar código de SQL parcialmente, por ejemplo: No podemos escribir una consulta con &lt;em&gt;OR&lt;/em&gt; únicamente usando el API de ActiveRecord.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;gt;&amp;gt; Company.where('code = ? or name = ?&amp;rsquo;, 'TST&amp;rsquo;, 'Company&amp;rsquo;).to_sql&lt;/p&gt;
&lt;p&gt;=&amp;gt; &amp;ldquo;SELECT `companies`.* FROM `companies` WHERE (code = 'TST&amp;rsquo; or name = 'Company&amp;rsquo;) ORDER BY code desc&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Podemos notar el &lt;em&gt;'code = ? or name = ?&amp;rsquo;, 'TST&amp;rsquo;, 'Company&amp;rsquo;&lt;/em&gt; que no se ve muy orientado a objetos. En las consultas mostradas previamente en este post hemos usado ARel de manera indirecta, ahora llega el momento de usarlo directamente para que nuestra consulta nuevamente se &amp;ldquo;sienta&amp;rdquo; mas orientada a objetos.&lt;/p&gt;
&lt;p&gt;Lo primero que tenemos que hacer para utilizar ARel directamente es contar con la referencia de la tabla sobre la que vamos a ejecutar nuestra consulta, esto lo hacemos a través de nuestro modelo:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;gt;&amp;gt; company_table = Company.arel_table&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ahora podemos crear una consulta de la siguiente manera:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;gt;&amp;gt; company_table[:code].eq('TST&amp;rsquo;).to_sql&lt;/p&gt;
&lt;p&gt;=&amp;gt; &amp;ldquo;`companies`.`code` = 'TST&amp;rsquo;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;gt;&amp;gt; Company.where(company_table[:code].eq('TST&amp;rsquo;)).order('code desc&amp;rsquo;).to_sql&lt;/p&gt;
&lt;p&gt;=&amp;gt; &amp;ldquo;SELECT `companies`.* FROM `companies` WHERE (`companies`.`code` = 'TST&amp;rsquo;) ORDER BY code desc&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Para lograr nuestra consulta con &lt;em&gt;OR&lt;/em&gt; usando ARel en conjunto con ActiveRecord, simplemente tenemos que construir la parte del &lt;em&gt;OR&lt;/em&gt; con ARel y dejar el resto a ActiveRecord.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;gt;&amp;gt; Company.where(company_table[:code].eq('TST&amp;rsquo;).or(company_table[:name].eq('Company&amp;rsquo;))).to_sql&lt;/p&gt;
&lt;p&gt;=&amp;gt; &amp;ldquo;SELECT `companies`.* FROM `companies` WHERE ((`companies`.`code` = 'TST&amp;rsquo; OR `companies`.`name` = 'Company&amp;rsquo;)) ORDER BY code desc&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Como podemos ver ARel es una buen avance sobre ActiveRecord en Rails para la realización de consultas, algo positivo es que aunque ActiveRecord nos presenta su API para consultas, no es posible acceder a ARel directamente.&lt;/p&gt;
&lt;p&gt;Actualmente ARel es solo utilizado en ActiveRecord, por lo que tiene una conexión a este, pero en e sitio de ARel mencionan que dentro de los planes a futuro esta el romper esta relación, haciendo posible que ARel pueda utilizarse fuera de Rails y que el motor generador de las consultas trabaje con otros repositorios fuera de RBDMS, como puede ser XML o IMAP.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/3088543537</link><guid>https://blog.decisionesinteligentes.com/post/3088543537</guid><pubDate>Thu, 03 Feb 2011 09:18:50 -0800</pubDate><category>ruby</category><category>rails</category><category>activerecord</category></item><item><title>RailsCamp de Enero</title><description>&lt;p&gt;&lt;figure class="tmblr-full" data-orig-height="304" data-orig-width="500"&gt;&lt;img src="https://64.media.tumblr.com/8ac36d72e99395996df75721e104b2ad/0cd0b2a1d49972ff-7f/s540x810/cf448e6696ba22c0dafcbca1b6371e7b4fc65024.png" data-orig-height="304" data-orig-width="500"/&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;Este post estaba en el &amp;ldquo;tintero&amp;rdquo; desde ya hace algunas semanas, pero por muchas cuestiones no lo habia podido terminar de escribir.&lt;/p&gt;
&lt;p&gt;Mi intención es darle las gracias a las personas - 10 - que asistieron al RailsCamp a principios de Enero, esperando que hayan pasado un buen momento en los 3 dias que estuvimos trabajando en Rails y sobre todo que se hayan quedado con algún conocimiento nuevo.&lt;/p&gt;
&lt;p&gt;Entre los asistentes habíadesarrolladores que ya habian tenido contacto previo con Rails y otros que era su primera vez. Los temas que se vieron sobre Rails estuvieron en el entorno de como hacer BDD/TDD con Rails, y quizas resultaron un poco difíciles para quienes no habían tenido alguna experiencia previa.&lt;/p&gt;
&lt;p&gt;Quiero agradecerle tambien a &lt;a target="_blank" href="http://twitter.com/suprgoogie"&gt;Mario Torres&lt;/a&gt; y &lt;a target="_blank" href="http://www.aprovi.com.mx/"&gt;Aprovi Software&lt;/a&gt; por prestarnos un espacio durante ese fin de semana para llevar a cabo el curso.&lt;/p&gt;
&lt;p&gt;Como este curso tuvo cupo limite, quedaron algunas personas interesadas en un segundo curso, aunque en esta ocasión este segundo curso seria mas basico e introductorio sobre Ruby On Rails y seria tambien tipo RailsCamp, 3 dias a partir de un viernes por la tarde/noche y sábado y domingo, aun no hay fecha ni lugar pero tambien tendría cupo limite y costo.&lt;/p&gt;
&lt;p&gt;Ademas del RailsCamp, tambien estoy preparando un MobileCamp para desarrollar para dispositivos móviles con HTML5, CSS3 y JavaScript.&lt;/p&gt;
&lt;p&gt;Si están interesados en alguno de los Camps me ayudaria mucho si pueden comentar en el post para tener una mejor idea del interes de ambos.&lt;/p&gt;
&lt;p&gt;Y ya por ultimo, quiero invitarlos a un Webinar sobre Ruby on Rails que voy a dar en conjunto con &lt;a target="_blank" href="http://twitter.com/#!/JoeDayz"&gt;@JoeDayz&lt;/a&gt;, este proximo 8 de Febrero de 4m a 6pm PST, es un Webinar gratuito y se pueden registrar en la pagina de &lt;a target="_blank" href="http://www.joedayz.org/web/2011/02/webinars-gratuitos-por-joedayz"&gt;JoeDayz&lt;/a&gt;.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/3058601680</link><guid>https://blog.decisionesinteligentes.com/post/3058601680</guid><pubDate>Tue, 01 Feb 2011 17:28:22 -0800</pubDate><category>rails</category><category>ruby</category><category>railscamp</category></item><item><title>Revisitando PDFKit</title><description>&lt;p style="clear: both"&gt;Hace un par de meses comente en el post &amp;ldquo;&lt;a href="http://blog.decisionesinteligentes.com/post/2050917975/pdfkit-irreverencia-y-los-monkey-patches" target="_blank"&gt;PDFKit irreverencia y monkey patches&lt;/a&gt;&amp;rdquo; que estaba haciendo uso de PDFKit para generar formatos llenos a partir de la información que un usuario captura en una forma web.&lt;br/&gt;&lt;br/&gt;En esa ocasión también mencione que PDFKit no estaba funcionando de manera correcta para mi y por mis búsquedas en Google, al parecer había mas persona que sufrían del mismo problema. Mencione también que había encontrado al solución a mi problema modificando el método to_pdf de la clase PDFKit, donde modifique la forma en como desde Ruby se estaba ejecutando un subproceso, el cual recibía a través de un pipe la entrada de datos y a través de otro pipe, este subproceso nos generaba un resultado.&lt;/p&gt; &lt;p style="clear: both"&gt;&lt;script src="https://gist.github.com/722215.js?file=pdfkit_new.rb"&gt;&lt;/script&gt;&lt;br style="clear: both"/&gt;Este subproceso es la llamada a &lt;a href="http://code.google.com/p/wkhtmltopdf/" target="_blank"&gt;wkhtmltopdf&lt;/a&gt;, el cual es una herramienta de linea de comando, que puede recibir a través de un pipe de entrada código de HTML, para posteriormente convertir ese código a un archivo PDF, la solución fue modificar el código de la función to_pdf para hacer uso de &lt;a href="http://ruby-doc.org/core/classes/IO.html#M000880" target="_blank"&gt;IO.popen&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;En ese momento que hice mi cambio no envie parche a PDFKit lo deje en la lista de espera, y de momento hice un &amp;ldquo;Monkey Patch&amp;rdquo; de la libreria en mi aplicación de Rails. Has hace unos dias me acorde del parche y me dispuse a enviarlo, pero revisando los commits en PDFKit me di cuenta que alguien mas ya había &lt;a href="https://github.com/jdpace/PDFKit/commit/acfc7546dc2637374e53de528829381fd6ebe56c" target="_blank"&gt;enviado el parche&lt;/a&gt; con mi misma solución. Así que solo procedi a quitar mi &amp;ldquo;Monkey Patch&amp;rdquo; y actualizar la libreria a la version v0.5.0.&lt;/p&gt;&lt;p style="clear: both"&gt;Finalmente ya a punto de hacer el deploy de la aplicación a &lt;a href="http://heroku.com" target="_blank"&gt;Heroku&lt;/a&gt;, surgió la situación de como instalar la libreria wkhtmltopdf en el slug de Heroku. La solución es facil y la encontre en este &lt;a href="http://blog.mattgornick.com/using-pdfkit-on-heroku" target="_blank"&gt;post&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Basicamente lo que tenemos que hacer es descargar &lt;a href="http://code.google.com/p/wkhtmltopdf/downloads/list" target="_blank"&gt;wkhtmltopdf compilado de forma estática&lt;/a&gt; para la plataforma Linux AMD64, ponemos el ejecutable en un directorio bin dentro de nuestro RAILS_ROOT y creamos un archivo de inicialización donde le indiquemos a PDFKit que el wkhtmltopdf esta en nuestro directorio bin, el archivo de inicialización puede ser config/initializers/pdftokit.rb:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;PDFKit.configure do |config|&lt;/p&gt;&lt;p style="clear: both"&gt; config.wkhtmltopdf = Rails.root.join(&amp;lsquo;bin&amp;rsquo;, 'wkhtmltopdf-amd64&amp;rsquo;).to_s if Rails.env.production?&lt;/p&gt;&lt;p style="clear: both"&gt;end&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Listo con esto podemos usar PDFKit en Heroku.&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;&lt;br class="final-break" style="clear: both"/&gt;</description><link>https://blog.decisionesinteligentes.com/post/2915242132</link><guid>https://blog.decisionesinteligentes.com/post/2915242132</guid><pubDate>Mon, 24 Jan 2011 15:43:03 -0800</pubDate><category>ruby</category><category>rails</category><category>pdfkit</category><category>heroku</category></item><item><title>Instalando Rails en Windows y Linux</title><description>&lt;p&gt;Instalar un ambiente de desarrollo de Rails, siempre se ha visto como una tarea nada fácil en Windows, debido a que Windows se ve como un &amp;ldquo;&lt;em&gt;ciudadano de segunda clase&amp;rdquo;&lt;/em&gt; para los desarrolladores de Rails que generalmente trabajan en OSX o Linux.&lt;/p&gt;
&lt;p&gt;Esta situación preocupa a algunas personas y empresas, ya que la desatención de Windows inhibe la participación de desarrolladores del sistema operativo de la &amp;ldquo;&lt;em&gt;Ventanas&lt;/em&gt;&amp;rdquo;, imponiendoles una barrera mas alta, al tener que hacer instalaciones de Linux o tener una mal experiencia en Windows.&lt;/p&gt;
&lt;p&gt;Una de estas empresas preocupadas por los desarrolladores de Windows es &lt;a target="_blank" href="http://www.engineyard.com/"&gt;Engine Yard&lt;/a&gt;, quien la semana pasada &lt;a target="_blank" href="http://www.engineyard.com/blog/2011/introducing-railsinstaller/"&gt;anunció&lt;/a&gt; la disponibilidad de &lt;a target="_blank" href="http://railsinstaller.org/"&gt;RailsInstaller&lt;/a&gt;, una solución simple y facil de configurar un ambiente completo para el desarrollo de Rails en Windows, son solo un par de clicks.&lt;/p&gt;
&lt;p&gt;El instalador configura: Ruby 1.8.7-p330, Rails 3.0.3, Git 1.7.3.1, Sqlite 3.7.3 y DevKit; este ultimo permite el uso facil de Gemas que compilan extensiones nativas en C.&lt;/p&gt;
&lt;p&gt;&lt;img width="380" height="265" src="https://64.media.tumblr.com/tumblr_lfhn8y93xC1qcvilfo1_400.png"/&gt;El Rails installer está basado en el &lt;a target="_blank" href="http://rubyinstaller.org/"&gt;RubyInstaller&lt;/a&gt; que permite una configuración facil de Ruby en ambientes Windows.&lt;/p&gt;
&lt;p&gt;Después del anuncio de RailsInstaller para Windows, también hubo un anuncio del lado de Linux, y es que en esa plataforma recientemente ha habido un poco de fricción para instalar un ambiente de Rails, ya que la recomendación últimamente es no instalarlo a partir del sistema de distribución de paquetes de la distro. Esta recomendación se basa a que en muchas ocasiones esos paquetes están algo atrasados a las versiones actuales, dejando como ultima opción la compilación e instalación a mano.&lt;/p&gt;
&lt;p&gt;El anuncio de &lt;a target="_blank" href="http://thechangelog.com/post/2857400260/railsready-setup-script-to-get-ruby-and-rails-running"&gt;RailsReady&lt;/a&gt; para ambientes linux viene a hacer fácil la vida también para los desarrolladores de Rails en Linux, ya que con solo ejecutar una instrucción - bueno, varias en una sola línea - les permitirá tener un ambiente de desarrollo Rails de una manera fácil y rápida.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;sudo apt-get -y install curl &amp;amp;&amp;amp; curl &lt;a href="https://github.com/joshfng/railsready/raw/master/railsready.sh" target="_blank"&gt;https://github.com/joshfng/railsready/raw/master/railsready.sh&lt;/a&gt; &amp;gt;&amp;gt; railsready.sh &amp;amp;&amp;amp; chmod a x railsready.sh &amp;amp;&amp;amp; ./railsready.sh&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Así que si eres desarrollador de Windows o Linux y no te habías atrevido a instalar Rails, para que de que se trata, ya no hay pretexto, ya que en ambas plataformas es muy sencillo.&lt;/p&gt;
&lt;p&gt;Para iniciarse en Rails les comparto los siguientes recursos:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.decisionesinteligentes.com/guides"&gt;Guías y tutoriales&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://blog.decisionesinteligentes.com/post/1689598447/como-iniciarse-en-ruby-rails"&gt;¿Como iniciarse en Rails?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Para herramientas de desarrollo para los que gusten de las IDEs &lt;a target="_blank" href="http://netbeans.org/features/ruby/index.html"&gt;Netbeans&lt;/a&gt; es una opción, para quienes busquen un editor ligero, &lt;a target="_blank" href="http://redcareditor.com/"&gt;Redcar Editor&lt;/a&gt; o &lt;a target="_blank" href="http://intype.info/home/index.php"&gt;Intype&lt;/a&gt; pueden ser la opción.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/2894897503</link><guid>https://blog.decisionesinteligentes.com/post/2894897503</guid><pubDate>Sun, 23 Jan 2011 10:27:00 -0800</pubDate><category>rails</category><category>ruby</category><category>windows</category><category>linux</category></item><item><title>Rails3 in Action - Review -</title><description>&lt;p&gt;&lt;img src="https://64.media.tumblr.com/tumblr_ldw6sz0DzQ1qcvilfo1_400.png" width="380" height="477"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;A few days ago, @&lt;a target="_blank" href="http://www.twitter.com/altnethispano"&gt;altnethispano&lt;/a&gt; invited to participate in a VAN about Ruby on Rails, as a result from that VAN, they awarded me with a copy of &lt;a target="_blank" href="http://www.manning.com/katz/"&gt;Rails3 in Action&lt;/a&gt; from Manning, currently being written -given it&amp;rsquo;s part of their MEAP program- by &lt;a target="_blank" href="http://yehudakatz.com/"&gt;Yehuda Katz&lt;/a&gt; and &lt;a target="_blank" href="http://ryanbigg.com/"&gt;Ryan A. Bigg&lt;/a&gt;.&lt;/p&gt;
&lt;p class="p1"&gt;The following is a review of the first 10 chapters out of a total of 23, because the book has not been completed yet.&lt;/p&gt;
&lt;p class="p1"&gt;The book&amp;rsquo;s goal is to demonstrate how to develop an app in Ruby on Rails 3, as the book authors put it, &amp;ldquo;a real-world application and not your typical blog application&amp;rdquo;, and for the first 10 chapters they provide the basics of going through this process.&lt;/p&gt;
&lt;p class="p1"&gt;First, the authors provide us with their vision as to why use Ruby on Rails for application development and the overall benefits to employ tested patterns and recipes in a development team.&lt;/p&gt;
&lt;p class="p1"&gt;Next, in order to introduce the reader to Ruby on Rails the authors demonstrate how to create a simple app in merely minutes, but special care is given to explain what Ruby on Rails generators have done in order to get an app prototype in such short time.&lt;/p&gt;
&lt;p class="p1"&gt;A cornerstone in Ruby on Rails world is the use of TDD - Test Driven Development - or BDD - Behavior Driven Development - to achieve proper application development and the authors dedicate a whole chapter to explain why this is the correct path to follow when developing real applications in Rails, also to explain the inner-workings of TestUnit, RSpec and Cucumber, being the last two, the tools of choice to develop the tutorial application for this book.&lt;/p&gt;
&lt;p class="p1"&gt;The tutorial application is called &amp;ldquo;Ticketee&amp;rdquo;, which has the purpose to manage support tickets for different projects, one of its objectives is to become a SaaS application - Software as a Service -.&lt;/p&gt;
&lt;p class="p1"&gt;Development is carried through BDD, showing in every step how to integrate key features of Rails 3 and how to provide standard functionalities from most modern web apps.&lt;/p&gt;
&lt;p class="p1"&gt;The process guides us through:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Proper useof RSpec and Cucumber to design and test our application&lt;/li&gt;
&lt;li&gt;Implement authentification and authorization&lt;/li&gt;
&lt;li&gt;Attach files&lt;/li&gt;
&lt;li&gt;Tracking process state through finite automats&lt;/li&gt;
&lt;li&gt;Implement tagging&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p2"&gt;The rest of the book specifies the addition of features like:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Automatic email sending&lt;/li&gt;
&lt;li&gt;Configure our application as SaaS&lt;/li&gt;
&lt;li&gt;Provide an API in order to allow third-party developers to interact with our application&lt;/li&gt;
&lt;li&gt;Effectively deploy our final application&lt;/li&gt;
&lt;li&gt;Authentification alternatives - this may involve signing in through providers like common social networks -&lt;/li&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Cache settings to achieve better performance&lt;/li&gt;
&lt;li&gt;How to delay jobs&lt;/li&gt;
&lt;li&gt;Implement i18n in our application&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p1"&gt;As a bonus, the books promises a series of advanced topics that will allow us to write tools for Ruby on Rails.&lt;/p&gt;
&lt;p class="p1"&gt;The book is full of examples and guide us completely, never assuming that we already know how to do or implement the required actions or steps, also, on every action provides a full description of what it does the first time it is introduced in the text.&lt;/p&gt;
&lt;p class="p1"&gt;Book language is natural and relaxed, and as commented above, takes us as real as possible through the process of developing an application. In doing so, it references and shows us how to use specific non-base Rails gems that will help us in achieving the goal.&lt;/p&gt;
&lt;p class="p1"&gt;The main difference between this and other Rails programming books I&amp;rsquo;ve read, is the approach to correctly develop an application enforcing the use of BDD and TDD over the typical scaffold generation.&lt;/p&gt;
&lt;p class="p1"&gt;I do not consider this to be an overly technical book to learn about the inner workings of Rails, neither is a fundamentalist book about BDD and/or TDD, but definitively is a book to those beginning or with basic knowledge about Ruby on Rails.&lt;/p&gt;
&lt;p class="p1"&gt;This review was done originally in &lt;a href="http://blog.decisionesinteligentes.com/post/2433188081/libro-de-rails3-in-action" target="_blank"&gt;spanish&lt;/a&gt;. Antonio Antillon (@&lt;a target="_blank" href="http://www.twitter.com/antillas21"&gt;antillas21&lt;/a&gt;) participated in the english translation.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/2834205869</link><guid>https://blog.decisionesinteligentes.com/post/2834205869</guid><pubDate>Wed, 19 Jan 2011 16:49:00 -0800</pubDate><category>rails</category><category>review</category></item><item><title>Arquitectura CoffeeCamp</title><description>&lt;p&gt;Al estilo de otros mini &lt;a target="_blank" href="http://mario-chavez.blogspot.com/2009/02/web-20-coffecamp-tj.html"&gt;Camps&lt;/a&gt; &lt;a target="_blank" href="http://mario-chavez.blogspot.com/2009/06/agile-coffecamp-tijuana.html"&gt;pasados&lt;/a&gt;, este sábado 22 de Enero, los invitamos al &amp;ldquo;&lt;strong&gt;Arquitectura CoffeeCamp&lt;/strong&gt;&amp;rdquo;, donde platicaremos sobre las distintas técnicas y formas que empleamos al momento de definir la arquitectura de una aplicación.&lt;/p&gt;
&lt;p&gt;Ven y platica con nosotros que te funciona y que no.&lt;/p&gt;
&lt;p&gt;El lugar: D´Volada de Plaza Dorada en Otay, Tijuana; a partir de las 9 a.m&lt;br/&gt;El dia: Sábado 22 de Enero&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;msa=0&amp;amp;ll=32.53558,-116.932903&amp;amp;spn=0.002655,0.004157&amp;amp;t=h&amp;amp;msid=106945892167115992172.0004634e5dfbc8f8675cb&amp;amp;source=embed"&gt;&lt;img height="350" width="427" src="https://img.skitch.com/20110117-t1jdsgx5x236gi4t1qnqt9cpty.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Por cierto, todo se originó a partir de una pregunta de &lt;a target="_blank" href="#http:www/twitter.com/visor7"&gt;Gustavo Rubio&lt;/a&gt; en su &lt;a target="_blank" href="http://www.google.com/buzz/gustavo.rubio/4vm5fHm7JUS/Amigos-programadores-pregunta-Cuando-desarrollan"&gt;buzz&lt;/a&gt;.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/2797964992</link><guid>https://blog.decisionesinteligentes.com/post/2797964992</guid><pubDate>Mon, 17 Jan 2011 11:01:00 -0800</pubDate><category>Coffe</category><category>Camp</category><category>Tijuana</category></item><item><title>Vim para Rails</title><description>&lt;p&gt;Durante el curso de Ruby On Rails del fin de semana pasado, me preguntaron sobre que plugins uso para &lt;a target="_blank" href="http://www.vim.org/"&gt;Vim&lt;/a&gt; y Rails, no es la primera vez que me lo preguntan, así que decidi mejor publicarlo en un post, bueno no exactamente, en lugar de eso publicar el link a un post llamado &amp;ldquo;&lt;a target="_blank" href="http://stevelosh.com/blog/2010/09/coming-home-to-vim/"&gt;Coming Home to Vim&lt;/a&gt;&amp;rdquo;, donde se explica de forma detallada que plugins y modificaciones hacer en Vim para trabajar de forma adecuada con Rails.&lt;/p&gt;&#13;
&lt;p&gt;&lt;img src="http://cl.ly/2H0X3U1k320c2n232N2o/Coming_Home_to_Vim___Steve_Losh.png"/&gt;&lt;/p&gt;&#13;
&lt;p&gt;Adicionalmente les recomiendo visitar &lt;a target="_blank" href="http://vimcasts.org/"&gt;VimCasts&lt;/a&gt; donde hay videos cortos que muestran alguna funcionalidad/configuración interesante para Vim.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/2685956259</link><guid>https://blog.decisionesinteligentes.com/post/2685956259</guid><pubDate>Mon, 10 Jan 2011 10:03:27 -0800</pubDate><category>vim</category></item><item><title>Cursos, cursos, cursos ...</title><description>&lt;p&gt;En este mes hay un par de cursos. El primero es el curso de &lt;a href="http://blog.decisionesinteligentes.com/post/2602592755/curso-de-ruby-on-rails" target="_blank"&gt;Ruby On Rails&lt;/a&gt; aquí en Tijuana y que es a manera de Camp, este ya próximo fin de semana.&lt;/p&gt;
&lt;p&gt;Ademas hay que empezar a preparar el material para un curso de Java -privado- y esperar a que me confirmen la fecha, este es para una empresa de desarrollo local y el temario seria algo así:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fundamentos de programación&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Sistema de tipos de datos&lt;/li&gt;
&lt;li&gt;Variables&lt;/li&gt;
&lt;li&gt;Constantes&lt;/li&gt;
&lt;li&gt;Operadores&lt;/li&gt;
&lt;li&gt;Estructuras de selección&lt;/li&gt;
&lt;li&gt;Estructuras de condición múltiple&lt;/li&gt;
&lt;li&gt;Ciclo for&lt;/li&gt;
&lt;li&gt;Ciclo do&lt;/li&gt;
&lt;li&gt;Ciclo While&lt;/li&gt;
&lt;li&gt;Métodos&lt;/li&gt;
&lt;li&gt;Funciones&lt;/li&gt;
&lt;li&gt;Arreglos&lt;/li&gt;
&lt;li&gt;Algoritmos&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p2"&gt;&lt;strong&gt;Programación orientada a objetos&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Que es POO&lt;/li&gt;
&lt;li&gt;La clase&lt;/li&gt;
&lt;li&gt;Control de accesos&lt;/li&gt;
&lt;li&gt;Propiedades&lt;/li&gt;
&lt;li&gt;Constructores&lt;/li&gt;
&lt;li&gt;Herencia&lt;/li&gt;
&lt;li&gt;Poliformismo&lt;/li&gt;
&lt;li&gt;Las clases abstractas&lt;/li&gt;
&lt;li&gt;Interfaces&lt;/li&gt;
&lt;li&gt;Arreglos y colecciones de objetos&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Principios SOLID y patrones&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Responsabilidad Unica&lt;/li&gt;
&lt;li&gt;Abierto cerrado&lt;/li&gt;
&lt;li&gt;Sustitución Liskov&lt;/li&gt;
&lt;li&gt;Segregación de interfaces&lt;/li&gt;
&lt;li&gt;Inversión de dependencias&lt;/li&gt;
&lt;li&gt;Patrón de arquitectura multi-capa&lt;/li&gt;
&lt;li&gt;Patrones ActiveRecord y DataMapper&lt;/li&gt;
&lt;li&gt;Modelo de dominio&lt;/li&gt;
&lt;li&gt;Capa de servicios&lt;/li&gt;
&lt;li&gt;Patrón MVC&lt;/li&gt;
&lt;/ul&gt;</description><link>https://blog.decisionesinteligentes.com/post/2626692799</link><guid>https://blog.decisionesinteligentes.com/post/2626692799</guid><pubDate>Thu, 06 Jan 2011 12:53:00 -0800</pubDate><category>curso</category></item><item><title>Curso de Ruby On Rails</title><description>&lt;p&gt;El curso de &lt;a target="_blank" href="http://blog.decisionesinteligentes.com/post/2147326559/nuevo-curso-de-rails"&gt;Ruby On Rails&lt;/a&gt; ya esta listo para llevarse a acabo. Las personas que se registraron y confirmaron su asistencia, ya recibieron un email con las información detallada.&lt;/p&gt;
&lt;p&gt;En curso sera en modalidad de &amp;ldquo;Camp&amp;rdquo; durante tres dias, 7, 8 y 9 de Enero en las instalaciones de &lt;a target="_blank" href="http://www.aproviweb.gotdns.com/Aprovi/default.aspx"&gt;Aprovi Software&lt;/a&gt;, ubicadas en:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://maps.google.com/maps?f=q&amp;amp;q=32.519608,-117.015747%20(Aprovi)"&gt;Río Colorado #834&lt;/a&gt;&lt;br/&gt;Colonia Revolución&lt;br/&gt;Atras de la agencia Seat en Zona Rio.&lt;/p&gt;
&lt;p&gt;El costo del curso incluye cafeteria y comidas, solo es necesario llevar su equipo de computo con el ambiente de Ruby On Rails ya configurado. Si aun no lo han hecho, pueden utilizar estas &lt;a target="_blank" href="http://www.decisionesinteligentes.com/guides"&gt;Guias&lt;/a&gt; para hacerlo.&lt;/p&gt;
&lt;p&gt;El curso se limito a 10 personas unicamente, por cuestiones de espacio y de poder llevarlo  buen cabo con un numero reducido. Le agradezco a Mario Torres de Aprovi Software por permitir el uso de sus instalaciones. Y tambien les agradezco a quienes ofrecieron un espacio mas grande, pero una vez mas, el tener solo 10 personas hace que sea u poco mas sencillo.&lt;/p&gt;
&lt;p&gt;Si aun hay interes y se pueden juntar otras 10 personas con gusto programamos un segundo curso para finales de Enero o principios de Febrero.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/2602592755</link><guid>https://blog.decisionesinteligentes.com/post/2602592755</guid><pubDate>Tue, 04 Jan 2011 17:13:53 -0800</pubDate><category>ruby</category><category>rails</category><category>curso</category></item><item><title>Libro Crafting Rails Applications</title><description>&lt;p&gt;&lt;img height="493" width="412" src="http://cl.ly/3K3c1H3S3n202h3r0G0x/crafting-rails-applications_b2_0.pdf_page_1_of_172_.png"/&gt;&lt;/p&gt;
&lt;p&gt;En los días pasados compre el libro &amp;ldquo;&lt;a target="_blank" href="http://pragprog.com/titles/jvrails/crafting-rails-applications"&gt;Crafting Rails Applications&lt;/a&gt;&amp;rdquo; de la editorial &amp;ldquo;&lt;a target="_blank" href="http://pragprog.com/"&gt;The Pragmatic Programmers&lt;/a&gt;&amp;rdquo;, escrito por &lt;a target="_blank" href="http://twitter.com/josevalim"&gt;José Valim&lt;/a&gt;, uno de los miembros del equipo &amp;ldquo;Core&amp;rdquo; de Ruby On Rails. El libro aun esta en Beta2, pero el contenido parece estar completo en todos los capítulos.&lt;/p&gt;
&lt;p&gt;El contenido del libro es para nivel experto de Ruby On Rails, definitivamente no para novatos. El enfoque, mas allá de mostrar como desarrollar aplicaciones, es el conocer a fondo el framework y de que manera lo podemos extender para el beneficio de nuestros desarrollos.&lt;/p&gt;
&lt;p&gt;Si bien el lenguaje del libro es bastante accesible, el contenido no lo es, debido a su nivel técnico. El autor en cada capitulo desarrolla una librería para Rails, donde muestra características y API disponibles en Rails 3. El autor se toma el tiempo para explicar a detalle como podemos hacer uso de determinada API y de que manera nuestras aplicaciones se pueden beneficiar de ésta, pero también se toma el tiempo para comentar cuales fueron las mejoras con respecto a la versión 2 de Rails y en algunos casos cual es el razonamiento que llevo al diseño del API.&lt;/p&gt;
&lt;p&gt;Algo importante es que en todos los ejemplos se inicia con pruebas de Integración/Unitarias escritas con el Framework TestUnit en combinación con Capybara. Por lo tanto ademas de conocer el funcionamiento interno de Rails 3, también nos muestra como usar TestUnit de la misma forma en como lo usa el equipo &amp;ldquo;Core&amp;rdquo; de desarrollo de Rails,e incluso como aprovechar pruebas ya escritas para Rails, en nuestros propios desarrollos.&lt;/p&gt;
&lt;p&gt;Durante el desarrollo del libro también se introducen de manera explícita y en algunas otras ocasiones de forma velada, herramientas y librerías que el autor ha desarrollado entorno al API que esta describiendo.&lt;/p&gt;
&lt;p&gt;Definitivamente, después de leer este libro, cambia la visión de como desarrollamos aplicaciones en Ruby On Rails, ya que al tener un conocimiento mayor de como funciona el framework, abre nuevas posibilidades de como adecuarlo/extenderlo a las necesidades de nuestra aplicación.&lt;/p&gt;
&lt;p&gt;La grata sorpresa con este libro es que a diferencia de muchos otros sobre Rails, no habla de como crear aplicaciones, si no de conocer sobre el funcionamiento de Ruby On Rails, quitando el velo &amp;ldquo;mágico&amp;rdquo; que parece tener en algunas de sus características más atractivas. Por eso si tienes conocimiento sobre el desarrollo con Rails y te interesa saber como es que funciona internamente, este libro es imperdible en la colección.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/2577609647</link><guid>https://blog.decisionesinteligentes.com/post/2577609647</guid><pubDate>Sun, 02 Jan 2011 21:30:41 -0800</pubDate><category>ruby</category><category>rails</category></item><item><title>Crear archivo de seed para Rails a partir de una Base de datos </title><description>&lt;p&gt;En un proyecto en el que estoy trabajando - que aun esta &amp;ldquo;ya casi&amp;rdquo; de irse a producción - tuve la necesidad de pasar datos ya cargados en la base de datos de desarrollo en mi Mac a la base de datos de producción en el server. Esta información se fue capturando &amp;ldquo;ad-hoc&amp;rdquo; en desarrollo, por lo tanto hay archivos de texto ni nada de eso para cargar la información a producción.&lt;/p&gt;
&lt;p&gt;Una opción pudo haber sido hacer un respaldo y cargarlo a producción, pero por restricciones en el server no puedo hacer eso. Y volver a capturar esa información a mano no es una opción para mi.&lt;/p&gt;
&lt;p&gt;Así que me di una &amp;ldquo;vuelta&amp;rdquo; por &lt;a href="http://www.rubygems.org" target="_blank"&gt;RubyGems&lt;/a&gt; para que podia encontrar que me sirviera. Me encontre con &lt;a href="https://github.com/rhalff/seed_dump" target="_blank"&gt;seed_dump&lt;/a&gt;, que descarga la información de la Base de datos a un archivo de seed de Rails, que posteriormente puedo insertar en la Base de datos con un comando de rake.&lt;/p&gt;
&lt;p&gt;Mi primer problema con seed_dump es que solo tiene soporte para Rails3, y no esta mal, pero mi aplicación es Rails 2.3.8. Después de inspeccionar el código unos minutos, no vi alguna dependencia real a Rails3, así que tome el archivo &lt;a href="https://github.com/rhalff/seed_dump/blob/master/lib/tasks/seed_dump.rake" target="_blank"&gt;seed_dump.rake &lt;/a&gt;y lo copie a lib/tasks en mi aplicación de Rails. Ejecute el comando rake -T y ahi apareció la opción rake db:seed:dump, al parecer todo estaba bien.&lt;/p&gt;
&lt;p&gt;Ejecute el comando para hacer el dump a seed y el archivo siempre me regresaba vacío. Volvi al código de seed_dump.rake y vi el problema, para descargar la información a partir de los modelos obtiene un listado de los modelos en el directorio models de la aplicación y luego con metaprogramacion crea una instancia del modelo y extrae la información en una consulta.&lt;/p&gt;
&lt;p&gt;&lt;span class="no"&gt;Dir&lt;/span&gt;[&amp;lsquo;app/models/*.rb&amp;rsquo;].sort.each do |f|&lt;/p&gt;
&lt;p&gt;Esto no funciona en mi aplicación, ya que los modelos están, en el directorio de cada uno de los plugins que la componen, y el comando de arriba solo busca en app/models de la aplicación.&lt;/p&gt;
&lt;p&gt;Modificar la búsqueda para que revise en los directorios de los plugins no es una opción, en lugar de eso, con metaprogramacion debo tener un listado de las clases de mi aplicación y ver si estas clases tiene como super clase a Activerecord::Base, para entonces si proceder a crear una instancia y extraer los datos.&lt;/p&gt;
&lt;p&gt;Después de unos minutos el archivo seed_dump.rake quedo como sigue y ahora si extrae los datos de la Base de datos a partir de mis modelos para crear un archivo seed.&lt;/p&gt;
&lt;p&gt;
&lt;script src="https://gist.github.com/756805.js?file=seed_dump.rake"&gt;&lt;/script&gt;&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/2501409842</link><guid>https://blog.decisionesinteligentes.com/post/2501409842</guid><pubDate>Tue, 28 Dec 2010 12:20:05 -0800</pubDate><category>ruby</category><category>rails</category></item><item><title>Libro de Rails3 in Action</title><description>&lt;p&gt;&lt;img src="https://64.media.tumblr.com/tumblr_ldw6sz0DzQ1qcvilfo1_400.png" height="477" width="380"/&gt;&lt;/p&gt;
&lt;p&gt;Hace unos días @&lt;a target="_blank" href="http://www.twitter.com/altnethispano"&gt;altnethispano&lt;/a&gt; me invito a realizar una &lt;a target="_blank" href="http://bit.ly/dJ88hh"&gt;VAN sobre Ruby On Rails&lt;/a&gt;, como resultado de esa VAN, me obsequiaron el libro &lt;a target="_blank" href="http://www.manning.com/katz/"&gt;Rails3 in Action&lt;/a&gt; de la editorial &lt;a target="_blank" href="http://www.manning.com"&gt;Manning&lt;/a&gt;, escrito - bueno aun en proceso, ya que esta en MEAP - por &lt;a target="_blank" href="http://yehudakatz.com/"&gt;Yehuda Katz&lt;/a&gt; y &lt;a target="_blank" href="http://ryanbigg.com/"&gt;Ryan A. Bigg&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si bien el libro aun no esta completo - solo 10 capítulos de 23 -, aquí les presento una revisión del mismo hasta este punto.&lt;/p&gt;
&lt;p&gt;El objetivo del libro es mostrar como escribir una aplicación en Ruby on Rails 3, como lo mencionan los autores &amp;ldquo;escribir una aplicación real&amp;rdquo; y no el típico &amp;ldquo;blog&amp;rdquo;, a través de los primero 10 capítulos muestran el fundamento básico de este proceso.&lt;/p&gt;
&lt;p&gt;Primeramente nos dan su visión del porque usar Ruby on Rails para el desarrollo de aplicaciones y cual es el beneficio que trae que como equipo de desarrollo obtenemos de utilizar patrones y recetas ya probadas una y otra vez.&lt;/p&gt;
&lt;p&gt;Posteriormente y a manera de introducir al lector a Ruby on Rails muestran como crear una aplicación muy simple en tan solo unos minutos, pero se toman la molestia de explicar que es lo que los generadores de Ruby on Rails han hecho para poder tener un prototipo en tan corto tiempo.&lt;/p&gt;
&lt;p&gt;Algo fundamental en el mundo de Ruby on Rails, es el uso de pruebas TDD - Test Driven Development - o BDD - Behaviour Driven Development - para el desarrollo adecuado de aplicaciones y que de alguna manera se entiende que esta es la manera correcta de llevar a cabo un desarrollo real en Ruby on Rails, por este motivo dedican un capitulo a explicar el funcionamiento de TestUnit, RSpec y Cucumber; estos dos últimos serán la herramientas utilizadas para desarrollo de la aplicación en el resto del libro.&lt;/p&gt;
&lt;p&gt;La aplicación que se desarrolla se llama &amp;ldquo;Ticketee&amp;rdquo; y es una aplicación para el registro de &amp;ldquo;ticket&amp;rdquo; de soporte y tiene el objetivo de ser una aplicación SaaS - Software como Servicio -.&lt;/p&gt;
&lt;p&gt;El desarrollo se lleva a cabo usando BDD, mostrando en cada paso como usar las características importantes de Ruby on Rails 3, así de como agregar funcionalidad casi-estandar de la mayoría de las aplicaciones web modernas.&lt;/p&gt;
&lt;p&gt;En el proceso nos llevan de la mano para:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Usar adecuadamente RSpec y Cucumber para diseñar y probar nuestra aplicación&lt;/li&gt;
&lt;li&gt;Implementar autentificacion y autorización&lt;/li&gt;
&lt;li&gt;Adjuntar archivos&lt;/li&gt;
&lt;li&gt;Manejo de estado en procesos con autómatas finitos&lt;/li&gt;
&lt;li&gt;Implementar etiquetas - tags -&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;El resto del libro promete la adición de mas características como:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Envío automático de email&lt;/li&gt;
&lt;li&gt;Configurar nuestra aplicación como Saas - Software como Servicio -&lt;/li&gt;
&lt;li&gt;Presentar un API para permitir a terceros el usar nuestro servicio&lt;/li&gt;
&lt;li&gt;Realizar de forma efectiva el despliegue de nuestra aplicación&lt;/li&gt;
&lt;li&gt;Alternativas de autentificacion - posiblemente a redes sociales -&lt;/li&gt;
&lt;li&gt;Paginación&lt;/li&gt;
&lt;li&gt;Hacer uso de cache para tener un mejor rendimiento&lt;/li&gt;
&lt;li&gt;Trabajar con procesos de larga duración&lt;/li&gt;
&lt;li&gt;Traducir nuestra aplicación a otros idiomas&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Como extra promete una serie de tópicos avanzados que nos permitirán escribir herramientas para Ruby on Rails.&lt;/p&gt;
&lt;p&gt;El libro esta plagado de ejemplos que nos llevan de la mano y nunca asume que nosotros ya sabemos como realizar las acciones descritas, ademas de que si es la primera vez que se toca esa acción en el libro, se ofrece una descripción de que es lo que estamos haciendo.&lt;/p&gt;
&lt;p&gt;El lenguaje del libro es muy natural y relajado; y como se comento anteriormente, trata de llevarnos en el proceso de construcción de una aplicación lo mas real posible, or lo tanto también hace referencia y uso de ciertas gemas no base de Ruby on Rails que nos ayudaran en lograr este objetivo.&lt;/p&gt;
&lt;p&gt;La gran diferencia de este libro con otros que me han tocado leer, es que pone mucho énfasis en desarrollar la aplicación de la manera correcta, anteponiendo el uso de BDD y TDD sobre el ejecutar algunos scaffolds y tener la aplicación en minutos.&lt;/p&gt;
&lt;p&gt;No considero que sea un libro muy técnico en cuanto a conocer el funcionamiento interno de Ruby on Rails, y tampoco es un libro fundamentalista en el uso de BDD y TDD. Definitivamente es un libro para aquellas personas que se están iniciando o tienen conocimientos básicos sobre Ruby on Rails, ya que puntos fuertes puedo mencionar que es un libro muy practico y directo en los temas.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/2433188081</link><guid>https://blog.decisionesinteligentes.com/post/2433188081</guid><pubDate>Thu, 23 Dec 2010 09:50:00 -0800</pubDate><category>ruby</category><category>rails</category><category>review</category></item><item><title>Razones para "despedir" a un cliente</title><description>&lt;p&gt;En el libro de &lt;a target="_blank" href="http://37signals.com/rework/"&gt;Rework&lt;/a&gt; de &lt;a target="_blank" href="http://37signals.com/"&gt;37Signals&lt;/a&gt; fue la primera vez que escuche el concepto &amp;ldquo;Fire a client&amp;rdquo; o &amp;ldquo;Despedir a un cliente&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Ahora me encuentro con estas 10 razones para hacerlo - si aunque no me gustan esos post de 10 motivo para _________ &amp;lt;= inserte su motivo aquí -.&lt;/p&gt;
&lt;p&gt;Originalmente están &lt;a target="_blank" href="http://freelancember.com/top-10-signs-its-time-to-fire-a-client/"&gt;publicados&lt;/a&gt; en inglés en &lt;a target="_blank" href="http://freelancember.com/"&gt;Freelancember&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Le gustan las tipografias que giran y se mueve, ¿es necesario agregar más?&lt;/li&gt;
&lt;li&gt;Piensa que todo no debe de tardar mas de 10 minutos, al fin y al cabo la computadora es la que hace el trabajo, ¿no?&lt;/li&gt;
&lt;li&gt;Su gusto por el diseño y lo estético fue desarrollado después de muchos años de análisis de &amp;hellip; infomerciales de media noche sobre ensaladeras y maquinas limpiadoras mágicas.&lt;/li&gt;
&lt;li&gt;El trabajo que hacemos para ellos, totalmente raro, no realmente lo que nos gustaría hacer. No cae dentro de la descripción de nuestros servicios, solamente &amp;hellip; pasó&lt;/li&gt;
&lt;li&gt;Nos da vergüenza publicar sus proyectos en nuestro portafolio&lt;/li&gt;
&lt;li&gt;Podemos encontrar que en directamente proporcional la riqueza de nuestro terapista con nuestra relación con ese cliente.&lt;/li&gt;
&lt;li&gt;Nos dice que el hermanito del sobrino de un amigo sabe sobre computadoras&lt;/li&gt;
&lt;li&gt;Hemos creado una co-dependencia, nosotros tratamos de salvarlos a como de lugar, y ellos se empeñan en &amp;ldquo;echarse la soga al cuello&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Hay ocasiones que sientes que debe de cobrarles &amp;ldquo;El impuesto a cliente molesto&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Siempre te dice: &amp;ldquo;Si haces un buen trabajo, hay más trabajo para tí&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Debo de admitir que después de leerlas, me dio mucho en que pensar.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/2155450046</link><guid>https://blog.decisionesinteligentes.com/post/2155450046</guid><pubDate>Thu, 09 Dec 2010 08:49:03 -0800</pubDate><category>general</category></item><item><title>Nuevo curso de Rails</title><description>&lt;p&gt;El día de hoy anuncié la puesta en marcha del servicio &lt;a target="_blank" href="http://blog.decisionesinteligentes.com/post/2144415744/empleosti"&gt;EmpleosTI&lt;/a&gt;, el cual pretende ser una opción fácil y sencilla para publicar ofertas de empleo relacionadas a TI, si no has visitado el &lt;a target="_blank" href="http://empleosti.decisionesinteligentes.com/"&gt;sitio&lt;/a&gt; aún, estas a tiempo.&lt;/p&gt;
&lt;br/&gt;En un post previo mencioné que la idea vino de una &lt;a target="_blank" href="http://blog.decisionesinteligentes.com/post/2141859211/presentacion-de-ruby-on-rails-en-altnethispano"&gt;aplicación&lt;/a&gt; de ejemplo que cree para una VAN de @&lt;a target="_blank" href="http://www.twitter.com/altnethispano"&gt;altnethispano&lt;/a&gt; sobre Ruby on Rails. Después de la VAN le dedique algo de tiempo hasta que llego a esta etapa de beta.&lt;br/&gt;&lt;br/&gt;La idea de la aplicación va más allá de el servicio en línea, la idea es usar esta aplicación como una herramienta para enseñar Ruby on Rails.&lt;br/&gt;&lt;br/&gt;La aplicación fue desarrollada siguiente el modelo &lt;a target="_blank" href="http://rubylearning.com/blog/2010/10/05/outside-in-development/"&gt;Outside-in-development&lt;/a&gt;, en donde comenzamos a realizar una serie de iteraciones de desarrollo a partir de las características deseadas de la aplicación, tomando estas como pruebas de aceptación, posteriormente y de manera incremental realizamos las pruebas de unidad correspondientes.&lt;br/&gt;&lt;br/&gt;La aplicación en si muestra el desarrollo de una aplicación de Rails para producción y no únicamente el &amp;ldquo;pet project&amp;rdquo; generado con &amp;ldquo;scaffolds&amp;rdquo;, hay una serie de decisiones en cuanto a herramientas que ayudan a hacerla mas &lt;a target="_blank" href="http://es.wikipedia.org/wiki/No_te_repitas"&gt;DRY&lt;/a&gt;, ademas de sobrepasar los &amp;ldquo;defaults&amp;rdquo; de Rails.&lt;br/&gt;&lt;br/&gt;Dentro de las características de la aplicación, en esta version beta, puedo listar:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;Interface limpia y sencilla&lt;/li&gt;
&lt;li&gt;Envio de correos electrónicos con formato&lt;/li&gt;
&lt;li&gt;Envio de tweets automáticos&lt;/li&gt;
&lt;li&gt;No hay sistema de autenticación&lt;/li&gt;
&lt;/ul&gt;
Tecnicamente la aplicación hace uso de:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;Steak y Rspec para las pruebas de aceptación y de unidad&lt;/li&gt;
&lt;li&gt;FactoryGirl para fixtures&lt;/li&gt;
&lt;li&gt;Remarkable para probar modelos&lt;/li&gt;
&lt;li&gt;I18n para globalización&lt;/li&gt;
&lt;li&gt;HAML como motor de vistas&lt;/li&gt;
&lt;li&gt;Uso del nuevo API de Activerecord&lt;/li&gt;
&lt;li&gt;Mailer para enviar correos con formato&lt;/li&gt;
&lt;li&gt;SimpleForm para simplificar el html de las formas&lt;/li&gt;
&lt;li&gt;InheritedResources para hacer los controladores mas DRY.&lt;/li&gt;
&lt;li&gt;Uso del API de Twitter y OAuth&lt;/li&gt;
&lt;li&gt;Uso de Less para el manejo de CSS&lt;/li&gt;
&lt;li&gt;API de Rails3 en general&lt;/li&gt;
&lt;li&gt;Publicación de la aplicación a Heroku&lt;/li&gt;
&lt;/ul&gt;
El detalle viene en ¿Como enseñar Rails?, un curso presencial, tendría que ser un curso de al menos 4 sesiones entre unas 4 y 6 horas, el curso tendría que tener un costo y haber al menos 10 personas interesadas.&lt;br/&gt;&lt;br/&gt;Creación de series de videos de como y porque construir la aplicación de esta forma, implica también un esfuerzo, donde los vídeos tendrían un costo, el cual puede ser fijo o variable mediante paypal, esto por el tiempo de post producción que requieres pata tener videos de buena calidad.&lt;br/&gt;&lt;br/&gt;O quizás algo en línea al tipo de &lt;a target="_blank" href="http://www.engineyard.com/services/university"&gt;Zero to Rails3&lt;/a&gt; de &lt;a target="_blank" href="http://www.engineyard.com/"&gt;Engine Yard&lt;/a&gt;.&lt;br/&gt;Así que les pido ayuda a mis 3 followers - y a @&lt;a target="_blank" href="http://www.twitter.com/stanmx"&gt;stanmx&lt;/a&gt; - para ver que rumbo tomar y conocer si hay interes en conocer como se desarrolla una aplicación a la &amp;ldquo;Rails Way&amp;rdquo;, por favor dejen sus comentarios.</description><link>https://blog.decisionesinteligentes.com/post/2147326559</link><guid>https://blog.decisionesinteligentes.com/post/2147326559</guid><pubDate>Wed, 08 Dec 2010 15:13:30 -0800</pubDate><category>empleosti</category><category>decisionesinteligentes</category><category>ruby</category><category>rails</category></item><item><title>EmpleosTI</title><description>&lt;p&gt;&lt;img src="https://64.media.tumblr.com/tumblr_ld4chev23C1qcvilfo1_250.png" height="39" width="222"/&gt;&lt;/p&gt;
&lt;p&gt;El día de hoy anuncio un sitio para publicar ofertas de trabajo relacionadas con Tecnologías de Información, el sitio es &lt;a target="_blank" href="http://empleosTI.decisionesinteligentes.com"&gt;empleosTI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://64.media.tumblr.com/tumblr_ld4chgKEii1qcvilfo1_400.png" height="295" width="380"/&gt;&lt;/p&gt;
&lt;p&gt;El sitio es muy sencillo de utilizar, no requiere de registro ni para publicar ofertas ni para consultarlas, las ofertan publicadas son enviadas automáticamente a Twitter a través de la cuenta @&lt;a target="_blank" href="http://www.twitter.com/empleosti_dein"&gt;empleosti_dein&lt;/a&gt;, además de tener la posibilidad desde la vista de una oferta de enviarla por email, a Twitter o a Facebook.&lt;/p&gt;
&lt;p&gt;Para ver el funcionamiento del sitio les dejo el siguiente video:&lt;/p&gt;
&lt;p&gt; 
&lt;object height="345" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400"&gt;
&lt;param name="movie" value="http://screenr.com/Content/assets/screenr_1116090935.swf"&gt;&lt;param name="flashvars" value="i=141173"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" allowfullscreen="true" src="http://screenr.com/Content/assets/screenr_1116090935.swf" flashvars="i=141173" height="345" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;br/&gt;Actualmente el sitio aún esta en fase beta, es &amp;ldquo;usable&amp;rdquo; y funcional, y no tiene costo para publicar ofertas, así que si están buscando personal de TI.&lt;br/&gt;&lt;br/&gt;El sitio salió como idea después de la VAN que di a @&lt;a target="_blank" href="http://www.twitter.com/altnethispano"&gt;altnethispano&lt;/a&gt; sobre &lt;a href="http://blog.decisionesinteligentes.com/post/2141859211/presentacion-de-ruby-on-rails-en-altnethispano" target="_blank"&gt;Ruby on Rails&lt;/a&gt;, inicialmente como una aplicación de concepto, después de verlo funcionar decidí hacerlo público como un servicio.&lt;/p&gt;</description><link>https://blog.decisionesinteligentes.com/post/2144415744</link><guid>https://blog.decisionesinteligentes.com/post/2144415744</guid><pubDate>Wed, 08 Dec 2010 08:59:00 -0800</pubDate><category>empleosti</category><category>decisionesinteligentes</category></item><item><title>Presentación de Ruby on Rails en AltnetHispano</title><description>&lt;p&gt;Hace un par de dias @&lt;a target="_blank" href="http://twitter.com/altnethispano"&gt;altnethispano&lt;/a&gt; publicó el video de la VAN que dí sobre Ruby On Rails, el video lo pueden ver desde el sitio de &lt;a target="_blank" href="http://altnet-hispano.pbworks.com/w/page/33453169/van-2010-11-20-ruby-on-rails"&gt;AltNetHispano&lt;/a&gt; en este mismo post.&lt;/p&gt;
&lt;p&gt; 
&lt;object class="embeddedObject" type="application/x-shockwave-flash" id="scPlayer" height="300" data="http://content.screencast.com/users/AltNetHispano/folders/VAN/media/36921a79-6765-437b-8b1a-2a319fa6a28d/flvplayer.swf" width="400"&gt;
&lt;param name="movie" value="http://content.screencast.com/users/AltNetHispano/folders/VAN/media/36921a79-6765-437b-8b1a-2a319fa6a28d/flvplayer.swf"&gt;&lt;param name="quality" value="high"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="flashVars" value="thumb=http://content.screencast.com/users/AltNetHispano/folders/VAN/media/36921a79-6765-437b-8b1a-2a319fa6a28d/FirstFrame.jpg&amp;amp;containerwidth=400&amp;amp;containerheight=300&amp;amp;content=http://content.screencast.com/users/AltNetHispano/folders/VAN/media/36921a79-6765-437b-8b1a-2a319fa6a28d/van-2010-11-20.flv&amp;amp;blurover=false"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="scale" value="showall"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;param name="base" value="http://content.screencast.com/users/AltNetHispano/folders/VAN/media/36921a79-6765-437b-8b1a-2a319fa6a28d/"&gt; Unable to display content. Adobe Flash is required.
&lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;A continuación les dejo los siguientes recursos que espero les sirva para iniciarse en Ruby on Rails:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.decisionesinteligentes.com/guides"&gt;Guía de como configurar un ambiente de desarrollo para Mac OSX, Linux y Windows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://blog.decisionesinteligentes.com/post/1689598447/como-iniciarse-en-ruby-rails"&gt;Listado de recursos en inglés y español sobre Ruby on Rails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Ademas de los recursos anteriores, les dejo estos adicionales que hablan sobre temas un poco más complejos y fuera del alcance del Activerecord, el patrón de acceso a datos por omisión de Rails:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="https://github.com/datamapper/dm-rails"&gt;Datamapper para Rails, Datamapper es un ORM escrito en Ruby &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://iain.nl/2010/07/domain-driven-design-building-blocks-in-ruby/"&gt;DDD con Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://iain.nl/2010/08/building-blocks-of-ddd-services/"&gt;Patrón de Service con Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://globalplaza.org/spaces/conferencia-rails/videos/1128"&gt;La dieta CQRS, presentación de Luismi Cavallé en Conferencia ROR 2010&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>https://blog.decisionesinteligentes.com/post/2141859211</link><guid>https://blog.decisionesinteligentes.com/post/2141859211</guid><pubDate>Wed, 08 Dec 2010 01:16:00 -0800</pubDate><category>ruby</category><category>rails</category></item></channel></rss>
