<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkUAQXg9eip7ImA9WhRVF00.&quot;"><id>tag:blogger.com,1999:blog-9839491</id><updated>2012-01-16T02:04:00.662-08:00</updated><category term="Mongodb" /><category term="Codecamp" /><category term="Microsoft" /><category term="Selenuim" /><category term="MVC" /><category term="SQL" /><category term="DevLab" /><category term="Pinta" /><category term="WebKit" /><category term="Apple" /><category term="ITT" /><category term="MAC" /><category term="ASP.NET" /><category term="Resumen" /><category term="Desarrollo de software" /><category term="TDD" /><category term="Altnet" /><category term="hispano" /><category term="Git" /><category term="General" /><category term="Opensource" /><category term="tijuanarb" /><category term="BDD" /><category term="espaciosabiertos" /><category term="UnitTesting" /><category term="Mono" /><category term="CoffeCamp" /><category term="TJNET" /><category term="XBox" /><category term="Shdh" /><category term="Arquitectura" /><category term="Rails" /><category term="Voto" /><category term="Mexico First" /><category term="Ironruby" /><category term="Web 2.0" /><category term="OSX" /><category term="Webcast" /><category term="empleosti" /><category term="C#" /><category term="Camp" /><category term="Proyecto" /><category term="Agile" /><category term="decisionesinteligentes" /><category term="Ruby" /><category term="Tijuana" /><category term="Linux" /><category term="VideoCast" /><category term="Ubuntu" /><category term="Politica" /><category term="Blog" /><category term=".NET" /><title>Desarrollo en NET</title><subtitle type="html">Blog sobre desarrollo de software</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>277</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/DesarrolloEnNet" /><feedburner:info uri="desarrolloennet" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><entry gd:etag="W/&quot;CkINRnw8eyp7ImA9Wx9UEE8.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-1108081989818781910</id><published>2011-02-06T11:28:00.002-08:00</published><updated>2011-02-06T11:29:57.273-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-06T11:29:57.273-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Blog" /><title>Resumen de blog Enero2</title><content type="html">&lt;p style="clear: both"&gt;Posts recientes en el blog &lt;a href="http://blog.decisionesinteligentes.com/" target="_blank"&gt;http://blog.decisionesinteligentes.com&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;a href="http://blog.decisionesinteligentes.com/post/2915242132/revisitando-pdfkit" target="_blank"&gt;Revisitando PDFKit&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.decisionesinteligentes.com/post/3058601680/railscamp-de-enero" target="_blank"&gt;RailsCamp Enero&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.decisionesinteligentes.com/post/3088543537/trabajando-con-arel" target="_blank"&gt;Trabajando con ARel&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.decisionesinteligentes.com/post/3140438595/servir-aplicaciones-rack-desde-iis-en-windows" target="_blank"&gt;Servir aplicaciones Rack en Windows con IIS&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Por cierto los invito al Webinar sobre Ruby on Rails organizado por &lt;a href="http://twitter.com/#!/JoeDayz" target="_blank"&gt;@JoeDayz&lt;/a&gt;, este próximo 8 de febrero del 4pm a 6pm PST. Se pueden registrar en la pagina de &lt;a href="http://www.joedayz.org/web/2011/02/webinars-gratuitos-por-joedayz" target="_blank"&gt;JoeDayz&lt;/a&gt;.&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-1108081989818781910?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/1108081989818781910/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=1108081989818781910" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/1108081989818781910?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/1108081989818781910?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2011/02/resumen-de-blog-enero2.html" title="Resumen de blog Enero2" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;AkYCRnc_fCp7ImA9Wx9WGE0.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-5141424987549741911</id><published>2011-01-23T10:42:00.002-08:00</published><updated>2011-01-23T10:42:47.944-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-23T10:42:47.944-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Blog" /><title>Resumen de blog Enero</title><content type="html">&lt;p style="clear: both"&gt;Posts recientes en el blog de &lt;a href="http://blog.decisionesinteligentes.com/"&gt;http://blog.decisionesinteligentes.com&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;a href="http://blog.decisionesinteligentes.com/post/2577609647/libro-crafting-rails-applications"&gt;Libro Crafting Rails Applications&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.decisionesinteligentes.com/post/2626692799/cursos-cursos-cursos"&gt;Cursos, cursos, cursos …&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.decisionesinteligentes.com/post/2685956259/vim-para-rails"&gt;Vim para Rails&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.decisionesinteligentes.com/post/2894897503/instalando-rails-en-windows-y-linux"&gt;Instalando Rails en Windows y Linux&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-5141424987549741911?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/5141424987549741911/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=5141424987549741911" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/5141424987549741911?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/5141424987549741911?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2011/01/resumen-de-blog-enero.html" title="Resumen de blog Enero" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Ak4BRnkyfyp7ImA9Wx9QF04.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-1473182950120852307</id><published>2010-12-30T11:50:00.003-08:00</published><updated>2010-12-30T11:55:57.797-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-30T11:55:57.797-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><title>Resumen de blog</title><content type="html">Posts recientes en el blog de &lt;a href="http://blog.decisionesinteligentes.com"&gt;http://blog.decisionesinteligentes.com&lt;/a&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.decisionesinteligentes.com/post/2501409842/crear-archivo-de-seed-para-rails-a-partir-de-una-base"&gt;Crear archivo de seed para Rails a partir de una Base de datos&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.decisionesinteligentes.com/post/2433188081/libro-de-rails3-in-action"&gt;Libro de Rails3 in Action&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.decisionesinteligentes.com/post/2155450046/razones-para-despedir-a-un-cliente"&gt;Razones para “despedir” a un cliente&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.decisionesinteligentes.com/post/2147326559/nuevo-curso-de-rails"&gt;Nuevo curso de Rails&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-1473182950120852307?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/1473182950120852307/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=1473182950120852307" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/1473182950120852307?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/1473182950120852307?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/12/resumen-de-blog.html" title="Resumen de blog" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUAGRXc-eyp7ImA9Wx9SGE4.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-957853623695704284</id><published>2010-12-08T11:18:00.002-08:00</published><updated>2010-12-08T11:48:44.953-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-08T11:48:44.953-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="empleosti" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="decisionesinteligentes" /><title>EmpleosTI</title><content type="html">&lt;p style="text-align: center;"&gt;&lt;img width="222" height="39" src="http://27.media.tumblr.com/tumblr_ld4chev23C1qcvilfo1_250.png" /&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 style="text-align: center;"&gt;&lt;img width="380" height="295" src="http://26.media.tumblr.com/tumblr_ld4chgKEii1qcvilfo1_400.png" /&gt;&lt;/p&gt;&lt;br /&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;span&gt;&lt;object width="400" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0" height="345"&gt;&lt;br /&gt;&lt;param value="http://screenr.com/Content/assets/screenr_1116090935.swf" name="movie"&gt;&lt;br /&gt;&lt;param value="i=141173" name="flashvars"&gt;&lt;br /&gt;&lt;param value="true" name="allowFullScreen"&gt;&lt;embed width="400" height="345" flashvars="i=141173" src="http://screenr.com/Content/assets/screenr_1116090935.swf" allowfullscreen="true" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;/object&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Actualmente el sitio aún esta en fase beta, es "usable" 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"&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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-957853623695704284?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/957853623695704284/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=957853623695704284" title="2 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/957853623695704284?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/957853623695704284?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/12/empleosti.html" title="EmpleosTI" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;CU8AR3w9eyp7ImA9Wx9SFU0.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-621103105506610933</id><published>2010-12-04T15:03:00.003-08:00</published><updated>2010-12-04T15:04:06.263-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-04T15:04:06.263-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Resumen" /><title>Resumen de posts</title><content type="html">&lt;p style="clear: both"&gt;Posts recientes en el blog de &lt;a href="http://blog.decisionesinteligentes.com/" target="_blank"&gt;http://blog.decisionesinteligentes.com&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://bit.ly/hOd7GU" target="_blank"&gt;Nancy, un framework inspirado en Sinatra&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://bit.ly/iiVtEh" target="_blank"&gt;Generar PDFs en Ruby: PDF Kit irreverencia y monkey patches&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://bit.ly/htuUxU" target="_blank"&gt;Resumen de Tijuana.rb en el 2010&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://bit.ly/hrOQ71" target="_blank"&gt;SHDH Tijuana 6, ED "The return of the walking death"&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-621103105506610933?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/621103105506610933/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=621103105506610933" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/621103105506610933?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/621103105506610933?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/12/resumen-de-posts.html" title="Resumen de posts" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DkUAQXw_fyp7ImA9Wx9SEEg.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-4976023955629328268</id><published>2010-11-29T10:10:00.002-08:00</published><updated>2010-11-29T10:10:40.247-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-29T10:10:40.247-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>Separación del blog</title><content type="html">&lt;p style="clear: both"&gt;Durante este pasado fin de semana ha habido una separación del blog, esto a implicado la creación de un nuevo blog en &lt;a href="http://blog.decisionesinteligentes.com/" target="_blank"&gt;http://blog.decisionesinteligentes.com&lt;/a&gt;, donde ya he copiado todos los posts referentes a Ruby y Ruby On Rails, el blog original &lt;a href="http://mario-chavez.blogspot.com/" target="_blank"&gt;http://mario-chavez.blogspot.com&lt;/a&gt; seguira pero con contenido, quizas, un poco mas personal.&lt;/p&gt;&lt;p style="clear: both"&gt;El feed RSS del nuevo blog es &lt;a href="http://feeds.feedburner.com/DecisionesInteligentes" target="_blank"&gt;http://feeds.feedburner.com/DecisionesInteligentes&lt;/a&gt; y la cuenta de twitter queda como @&lt;a href="http://twitter.com/decisionesin" target="_blank"&gt;decisionesin&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-4976023955629328268?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/4976023955629328268/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=4976023955629328268" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/4976023955629328268?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/4976023955629328268?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/11/separacion-del-blog.html" title="Separación del blog" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;AkQMRn48eip7ImA9Wx9TEU8.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-3455309873818546693</id><published>2010-11-18T16:59:00.003-08:00</published><updated>2010-11-18T16:59:47.072-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-18T16:59:47.072-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tijuanarb" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Wash, DRY and fold</title><content type="html">&lt;p style="clear: both"&gt;DRY es una de las recomendaciones mas mencionadas en el desarrollo de software, DRY es el acronimo de "&lt;a href="http://es.wikipedia.org/wiki/No_te_repitas" target="_blank"&gt;Don't Repeat Yourself&lt;/a&gt;" o "No te repitas" en español.&lt;/p&gt;&lt;p style="clear: both"&gt;DRY lo que promueve es la no duplicidad de código fuente en nuestro software, ya que la duplicidad acarrea una serie de problemas de mantenimiento, inconsistencia en la funcionalidad, falta de claridad, etc.&lt;/p&gt;&lt;p style="clear: both"&gt;Es por eso que en nuestros desarrollos debemos de buscar patrones de código que se repiten una y otra vez para tratar de extraerlos, abstraerlos y reutilizarlos.&lt;/p&gt;&lt;p style="clear: both"&gt;El origen de este post es precisamente, que en un desarrollo en Ruby On Rails que estoy haciendo, encontre estos patrones repetitivos en mis controladores. La mayoría de ellos trabajan haciendo CRUD de manera muy tradicional, por lo tanto las acciones de: Index, Show, Edit, New, Create, Update y Destroy tienen código muy similar a excepción de las referencias al modelo sobre el cual actúan.&lt;/p&gt;&lt;p style="clear: both"&gt;Buscando una solución para eliminar esto, me encontré con el proyecto de José Valim (&lt;a href="http://twitter.com/josevalim" target="_blank"&gt;@josevalim&lt;/a&gt;) &lt;a href="https://github.com/josevalim/inherited_resources" target="_blank"&gt;Inherited Resources&lt;/a&gt;, el cual trata precisamente sobre como mantenerse DRY.&lt;br /&gt;Algo importante es que Inherited Resources no cambia nuestra forma de trabajar al nombrar variables con nombres genéricos para que puedan ser usadas en nuestros controladores, el se encarga de nombrar las variables de acuerdo a la convención de Rails por lo tanto su uso es bastante transparente.&lt;/p&gt;&lt;p style="clear: both"&gt;El post no se trata sobre Inherited Resources, por lo que aqui les dejo ligas a material de referencia para quien guste conocer mas:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;a href="http://railscasts.com/episodes/230-inherited-resources" target="_blank"&gt;Railscasts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://akitaonrails.com/2009/09/01/screencast-real-thin-restful-controllers-with-inherited-resources" target="_blank"&gt;Video de AkitaOnRails&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/josevalim/inherited_resources" target="_blank"&gt;InheritedResources&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;¿Bueno entonces de que se trata el post? Es sobre DRY, pero mi implementación de DRY para un problema particular.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;En el proyecto que estoy trabajando, tuve la necesidad de que la aplicación de Rails consumiera datos de un API de otra aplicación, la aplicación, de hecho son varias aplicaciones, que contiene lo datos no tiene API, por lo que con una aplicación de Sinatra, le cree un &lt;a href="http://es.wikipedia.org/wiki/Representational_State_Transfer" target="_blank"&gt;API Rest&lt;/a&gt; para que pueda ser consumida con la aplicación Rails - la aplicación de Rails y las aplicaciones sin API están en diferentes servidores/redes -. Esta API Rest puede ser consumida desde Rails a través del uso de &lt;a href="http://api.rubyonrails.org/classes/ActiveResource/Base.html" target="_blank"&gt;ActiveResources&lt;/a&gt;, que aparentan ser modelos normales de Rails, pero que en realidad hacen llamados remotos a través de http para obtener sus datos.&lt;/p&gt;&lt;p style="clear: both"&gt;En mi problema, tengo un controlador con diversas acciones, donde cada acción hace una llamada Rest a diferentes modelos y muestra los datos obtenidos, hay llamadas que traen una colección de objetos y otras que solamente traen un objeto en particular.&lt;/p&gt;&lt;p style="clear: both"&gt;El patron que comencé a ver en las diversas llamadas para traer colecciones de datos fue:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;span style="  display: inline; float: left; margin: 0 10px 10px 0;"&gt;&lt;script src="https://gist.github.com/705954.js?file=Colecciones1.rb"&gt;&lt;/script&gt;&lt;/span&gt;&lt;br style="clear: both" /&gt;así como la variación siguiente, también para traer colecciones de objetos:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;span style="  display: inline; float: left; margin: 0 10px 10px 0;"&gt;&lt;script src="https://gist.github.com/705954.js?file=Colecciones2.rb"&gt;&lt;/script&gt;&lt;/span&gt;&lt;br style="clear: both" /&gt; La diferencia entre ellos es que en ocasiones se pasa el ID y en otras no, fuera de eso son muy similares.&lt;/p&gt;&lt;p style="clear: both"&gt;Por otro lado, al traer un solo elemento el patrón era el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;span style="  display: inline; float: left; margin: 0 10px 10px 0;"&gt;&lt;script src="https://gist.github.com/705954.js?file=Modelo.rb"&gt;&lt;/script&gt;&lt;/span&gt;&lt;br style="clear: both" /&gt;Donde se pasa el ID en otro orden como parametro y la llamada ya no es al metodo &lt;strong&gt;all&lt;/strong&gt;, es a &lt;strong&gt;find&lt;/strong&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Este código se repetia una y otra ves en mi controlador donde solo cambiaba el nombre del Modelo, así como las variables @modelos y @modelo que es a donde se asignan los datos una vez que se obtienen. &lt;/p&gt;&lt;p style="clear: both"&gt;Mi intención aquí es hacer que esto funcione DRY, y con la ayuda de un poco de metaprogramacion es fácil el lograrlo.&lt;/p&gt;&lt;p style="clear: both"&gt;La idea es que pudiese hacer algo como:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;fetch_resources! :modelo&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;o&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;fetch_resource! :modelo&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Para obtener mis datos a través de Rest para el modelo adecuado y que se cargara la variable correspondiente con los datos correctos.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;span style="  display: inline; float: left; margin: 0 10px 10px 0;"&gt;&lt;script src="https://gist.github.com/705954.js?file=dry.rb"&gt;&lt;/script&gt;&lt;/span&gt;&lt;br style="clear: both" /&gt;&lt;br style="clear: both" /&gt; Así es como llegue al código que se muestra arriba. El método en singular trae un solo modelo a través de Rest y el metodo en plural trae una colección de modelos, opcionalmente ambos pueden aceptar un filtro en forma de &lt;a href="http://ruby-doc.org/core/classes/Hash.html" target="_blank"&gt;Hash&lt;/a&gt;, y el modelo se indica a través de un &lt;a href="http://ruby-doc.org/core/classes/Symbol.html" target="_blank"&gt;símbolo&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;El metodo fetch! es el que hace toda la &lt;em&gt;magia&lt;/em&gt;, primero crea un Hash con el filtro default para todas las llamadas Rest, luego evalúa si a traves de fetch_resource! o fetch_resources! le estamos pasando filtros adicionales, si es así, los integra al Hash de filtro default.&lt;/p&gt;&lt;p style="clear: both"&gt;En este punto es donde esta lo mas interesante, usamos en simbolo que se almacena en la variable resource para obtener la referencia a la clase del modelo sobre el cual nos interesa hacer la consulta, por ejemplo si nuestro símbolo es :cliente, asume que tenemos un modelo Cliente y sobre el queremos enviar nuestra solicitud Rest.&lt;/p&gt;&lt;p style="clear: both"&gt;Acto seguido identificamos si tenemos un ID a traves del Hash params en el controlador, si es así, identificamos si debemos de llamar al metodo &lt;strong&gt;find&lt;/strong&gt; o &lt;strong&gt;all&lt;/strong&gt; y colocamos los parámetros de la forma correcta, mediante &lt;strong&gt;send&lt;/strong&gt; hacemos el llamado de forma dinamica y el resultado lo guardamos en la variable values.&lt;/p&gt;&lt;p style="clear: both"&gt;Finalmente fetch! asume que si tenemos una colección y nuestro símbolo es :cliente, esperamos tener una variable @clientes con los datos, en cambio si tenemos un solo modelo como respuesta y nuestro símbolo sigue siendo :cliente, asume que esperamos una variable @cliente con el dato.&lt;/p&gt;&lt;p style="clear: both"&gt;De esta forma en nuestras vistas podemos hacer uso de @clientes o @cliente según corresponda.&lt;/p&gt;&lt;p style="clear: both"&gt;Si bien no hubo un &lt;em&gt;ahorro&lt;/em&gt; significativo en lineas de código, si hubo la eliminación de lineas de código repetidas y susceptibles a errores o cambios, las cuales fueron reemplazadas por otras instrucciones mas simples que manejan el mismo escenario para cualquiera de mis modelos.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-3455309873818546693?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/3455309873818546693/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=3455309873818546693" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/3455309873818546693?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/3455309873818546693?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/11/wash-dry-and-fold_18.html" title="Wash, DRY and fold" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DE4DSXw9fyp7ImA9Wx9TE00.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-4274262280053958680</id><published>2010-11-17T12:52:00.001-08:00</published><updated>2010-11-20T18:36:18.267-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-20T18:36:18.267-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tijuanarb" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Tercera reunión de Tijuana.rb</title><content type="html">&lt;p style="clear: both"&gt;&lt;img src="http://lh5.ggpht.com/_COcsfdYwI20/TNbcdjU4CNI/AAAAAAAAFiY/YkGuj_w1178/s800/tijuanarb-1-thumb.png" height="206" width="184" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;Tentativamente el miércoles 1 de Diciembre sera la tercera reunión de &lt;a href="http://tijuanarb.org/" target="_blank"&gt;Tijuana.rb&lt;/a&gt;, una vez mas será en la oficinas de &lt;a href="http://ingeniacreative.com/" target="_blank"&gt;Ingenia Creative&lt;/a&gt;, ubicadas en:&lt;/p&gt;&lt;p style="clear: both"&gt;Blvd. de las Americas&lt;br /&gt;5636 Interior D. &lt;br /&gt;Lomas de Agua Caliente&lt;br /&gt;Tijuana, Baja California 22040 México&lt;/p&gt;&lt;p style="clear: both"&gt;Para ver el mapa de lugar, lo pueden consultar &lt;a href="http://ingeniacreative.com/ubicacion" target="_blank"&gt;aquí&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;La reunion sera de 7pm a 9pm, aun no hay temas ni presentadores definidos, así que si te interesa participar no dudes en comentarlo, cualquier tema de Ruby/Rails/Sinatra, principiante o avanzado es bueno.&lt;/p&gt;&lt;p style="clear: both"&gt;Te puedes apuntar aquí en los comentarios del post o en el google group de &lt;a href="http://groups.google.com/group/tijuanarb/browse_thread/thread/75435a89a185fdad" target="_blank"&gt;Tijuana.rb&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Actualización!&lt;/strong&gt;&lt;br /&gt;Ya hay presentaciones para esta reunión&lt;br /&gt;@&lt;a href="http://twitter.com/obelich" target="_blank"&gt;obelich&lt;/a&gt; hablara de su experiencia con Rails desde el punto de vista de un PHPero.&lt;br /&gt;@&lt;a href="http://twitter.com/stanmx" target="_blank"&gt;stanmx&lt;/a&gt; nos platicara como usar el polimorfismo en Rails para ser mas &lt;a href="http://es.wikipedia.org/wiki/No_te_repitas" target="_blank"&gt;DRY&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Nos vemos en la reunión.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-4274262280053958680?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/4274262280053958680/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=4274262280053958680" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/4274262280053958680?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/4274262280053958680?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/11/tercera-reunion-de-tijuanarb.html" title="Tercera reunión de Tijuana.rb" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_COcsfdYwI20/TNbcdjU4CNI/AAAAAAAAFiY/YkGuj_w1178/s72-c/tijuanarb-1-thumb.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0QCQHs_cSp7ImA9Wx5aFE8.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-6249005878069146889</id><published>2010-11-07T09:06:00.001-08:00</published><updated>2010-11-10T12:36:01.549-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-10T12:36:01.549-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tijuanarb" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Segunda Reunion de Tijuana.rb</title><content type="html">&lt;p style="clear: both"&gt;&lt;img src="http://lh5.ggpht.com/_COcsfdYwI20/TNbcdjU4CNI/AAAAAAAAFiY/YkGuj_w1178/s800/tijuanarb-1-thumb.png" height="206" width="184" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;Este proximo miércoles 10 de Noviembre sera la segunda reunión de &lt;a href="http://tijuanarb.org/" target="_blank"&gt;Tijuana.rb&lt;/a&gt;, edición llamada "mas vale tarde que nunca", en esta ocasión será en la oficinas de &lt;a href="http://ingeniacreative.com/" target="_blank"&gt;Ingenia Creative&lt;/a&gt;, ubicadas en:&lt;/p&gt;&lt;p style="clear: both"&gt;Blvd. de las Americas&lt;br /&gt;5636 Interior D. &lt;br /&gt;Lomas de Agua Caliente&lt;br /&gt;Tijuana, Baja California 22040 Mexico&lt;/p&gt;&lt;p style="clear: both"&gt;Para ver el mapa de lugar, lo pueden consultar &lt;a href="http://ingeniacreative.com/ubicacion" target="_blank"&gt;aquí&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;La reunion sera de 7pm a 9pm, los temas a presentar se actualizaran en las próximas horas.&lt;br /&gt;Temas para hoy en la reunion:&lt;br /&gt;- Antonio Antillon: "Boy meets Rails"&lt;br /&gt;La experiencia personal de un programador novato, durante la creación de una app en Rails para solucionar el registro de asistentes a la Expo Industrial BajaMak.&lt;/p&gt;&lt;p style="clear: both"&gt;- Fernando Castellanos: "Google Maps V3 con Rails3"&lt;br /&gt;Como usar los mapas de Google API V3 de manera facil y sencilla con Rails3.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-6249005878069146889?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/6249005878069146889/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=6249005878069146889" title="2 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/6249005878069146889?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/6249005878069146889?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/11/segunda-reunion-de-tijuanarb.html" title="Segunda Reunion de Tijuana.rb" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_COcsfdYwI20/TNbcdjU4CNI/AAAAAAAAFiY/YkGuj_w1178/s72-c/tijuanarb-1-thumb.png" height="72" width="72" /><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;CUcESH47eyp7ImA9Wx5bGEQ.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-6467593752278201796</id><published>2010-11-04T10:50:00.001-07:00</published><updated>2010-11-04T10:50:09.003-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-04T10:50:09.003-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Ruby on Rails este mes de Noviembre</title><content type="html">&lt;p style="clear: both"&gt;&lt;img src="http://lh5.ggpht.com/_COcsfdYwI20/TNLySOr2h3I/AAAAAAAAFiQ/ZdMwoUNJ8JY/s800/logo-thumb.gif" height="119" width="331" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;Al parecer un mes mas activo en cuanto a mis actividades en Ruby y Rails este mes de Noviembre.&lt;/p&gt;&lt;p style="clear: both"&gt;Primeramente &lt;a href="http://altnethispano.org/Inicio.aspx" target="_blank"&gt;Alt.NET Hispano&lt;/a&gt; me ha invitado este sábado 6 de Noviembre a dar una VAN sobre Rails, la dirección para conectarse aparecera ese mismo dia en el sitio o traves de la cuenta de twitter @&lt;a href="http://twitter.com/AltNetHispano" target="_blank"&gt;altnethispano&lt;/a&gt;, la VAN sera a las 18:00 UTC/GMT.&lt;/p&gt;&lt;p style="clear: both"&gt;El domingo 7 participare en el evento "&lt;a href="http://tv.rails.mx/platforms/rails-mx/event/latam-on-rails" target="_blank"&gt;Latam en Rails&lt;/a&gt;" de &lt;a href="http://rails.mx/" target="_blank"&gt;Rails.mx&lt;/a&gt;, con la platica "&lt;a href="http://tv.rails.mx/platforms/rails-mx/presentation/uso-de-steakrb-para-bdd" target="_blank"&gt;Uso de Steakrb para BDD&lt;/a&gt;", la platica en es linea y sera a las 5:30pm hora del centro de Mexico.&lt;/p&gt;&lt;p style="clear: both"&gt;Finalmente el proximo sábado 13 de noviembre estaré en el evento "&lt;a href="http://gultij.org/node/213" target="_blank"&gt;Software Freedom Day 2010&lt;/a&gt;" del &lt;a href="http://gultij.org" target="_blank"&gt;grupo de usuarios linux de Tijuana&lt;/a&gt;, este evento sera en el &lt;a href="http://www.eltrompo.org/" target="_blank"&gt;Museo del Trompo&lt;/a&gt; y estaré a las 10:00am hora del pacifico platicando sobre Rails.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-6467593752278201796?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/6467593752278201796/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=6467593752278201796" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/6467593752278201796?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/6467593752278201796?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/11/ruby-on-rails-este-mes-de-noviembre.html" title="Ruby on Rails este mes de Noviembre" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_COcsfdYwI20/TNLySOr2h3I/AAAAAAAAFiQ/ZdMwoUNJ8JY/s72-c/logo-thumb.gif" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CU4ESX47fSp7ImA9Wx5UEkQ.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-7320621387287754568</id><published>2010-10-16T22:38:00.001-07:00</published><updated>2010-10-16T22:38:28.005-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-16T22:38:28.005-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Ayuda fuera de linea para Rails 3.0 en OSX</title><content type="html">&lt;p style="clear: both"&gt;Existe en linea una buena cantidad de recursos de ayuda para trabajar en Rails, uno de los primeros sitios a consultar es &lt;a href="http://guides.rubyonrails.org/" target="_blank"&gt;RailsGuide&lt;/a&gt;, otro sitio en linea importante es el que contiene la documentación del &lt;a href="http://api.rubyonrails.org/" target="_blank"&gt;API de Rails&lt;/a&gt; o el sitio &lt;a href="http://railsapi.com/" target="_blank"&gt;Rails API&lt;/a&gt;; finalmente la fuente de ayuda mas importante es el mismo &lt;a href="http://github.com/rails/rails" target="_blank"&gt;código fuente&lt;/a&gt; de Rails.&lt;/p&gt;&lt;p style="clear: both"&gt;Todas estas opciones son muy buenas para resolver dudas sobre el API, el detalle viene cuando por algún motivo no estamos en linea. Si al momento de instalar nuestra gemas instalamos también la ayuda en formato &lt;em&gt;rdoc&lt;/em&gt;, entonces podemos consultar el API desde la linea de comando con &lt;em&gt;ri&lt;/em&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Por ejemplo si buscamos ayuda sobre content_for, en la linea de comando podemos ejecutar:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;$ ri content_for&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Después de un momento ri nos indica que hay mas de un resultado, entonces elijo el que están dentro del namespace de Ruby que nos interesa y volvemos a ejecutar ri:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;$ri ActionView::Helpers::CaptureHelper#content_for&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;En este caso el resultado que nos muestra ri es la ayuda sobre ese especifico método de Rails. Esta opción funciona en todas las plataformas donde podamos instalar Rails, pero si estamos en OSX, pues tenemos una opción gráfica para la ayuda en linea.&lt;/p&gt;&lt;p style="clear: both"&gt;Esta opción consiste en usar la aplicación de diccionario de OSX, donde instalamos el diccionario con la ayuda de Rails, este lo podemos descargar de el vinculo publicado en este &lt;a href="http://priithaamer.com/blog/rails-3-dictionary-update" target="_blank"&gt;post&lt;/a&gt;, y para instalarlo solamente copiamos el diccionario a la carpeta &lt;em&gt;~/Library/Dictionaries&lt;/em&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Abrimos la aplicación de diccionario y ya podemos consultar el API de Rails fuera de linea.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://lh4.ggpht.com/_COcsfdYwI20/TLqHsA0NDrI/AAAAAAAAFh8/4OxdpcrVXPs/s800/Ruby_on_Rails_3-thumb.0.jpg" height="341" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;Inclusive mejor aun, desde nuestro editor - en mi caso &lt;a href="http://code.google.com/p/macvim/" target="_blank"&gt;MacVIM&lt;/a&gt;, me posiciono sobre la instrucción de la que quiero consultar el API y presiono las teclas Command + Ctrl + D y me aparece una "burbuja" con la ayuda proveniente del API.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://lh6.ggpht.com/_COcsfdYwI20/TLqLVfZm3zI/AAAAAAAAFiE/aZMY3E2cCf4/s800/MacVim-thumb.jpg" height="257" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;br /&gt;Ya sea en linea o fuera de linea, hay opciones muy convenientes para siempre poder consultar el API de Rails.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-7320621387287754568?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/7320621387287754568/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=7320621387287754568" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/7320621387287754568?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/7320621387287754568?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/10/ayuda-fuera-de-linea-para-rails-30-en.html" title="Ayuda fuera de linea para Rails 3.0 en OSX" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_COcsfdYwI20/TLqHsA0NDrI/AAAAAAAAFh8/4OxdpcrVXPs/s72-c/Ruby_on_Rails_3-thumb.0.jpg" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUIMRH49eCp7ImA9Wx5VFks.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-7537857409324422271</id><published>2010-10-09T16:39:00.001-07:00</published><updated>2010-10-09T16:39:45.060-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-09T16:39:45.060-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>iWeekend Tijuana 2010</title><content type="html">&lt;p style="clear: both"&gt;&lt;img src="http://lh3.ggpht.com/_COcsfdYwI20/TLD9O2IjKvI/AAAAAAAAFh0/pRQIVLHUwiE/s800/iWeekend_Tijuana___iWeekend-thumb.jpg" height="276" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;Así es, leyeron bien, el evento de iWeekend viene a Tijuana este próximo 26, 27 y 28 de Noviembre.&lt;/p&gt;&lt;p style="clear: both"&gt;iWeekend es un evento cuyo objetivo es ayudar a la creación de dos &lt;em&gt;starups&lt;/em&gt; con base tecnológica de la ciudad de Tijuana, así que si tienes una idea para una &lt;em&gt;startup&lt;/em&gt;, no lo pienses mas y participa.&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;El objetivo es inspirar a los desarrolladores locales, emprendedores, gente de marketing, diseñadores, encargados de ventas y gerentes de cualquier actividad (tecnológica, salud, moda, textil, manufactura, investigación, etc) se reúnan para dar a conocer sus interés y conocimientos; con el fin de ayudar a poner en marcha las ideas de emprendedores de su región.&lt;/p&gt;&lt;p style="clear: both"&gt;iWeekend les dará la oportunidad de crear conexiones sin precedentes para las Startups que surjan de los 4 eventos, donde los lideres de cada idea podrán interactuar con mas de 50 emprendedores y captar el talento humano suficiente para crear un equipo robusto alrededor del proyecto, el cual se creara durante un fin de semana.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;La fecha limite de inscripción es el 21 de Noviembre y la sede será la Universidad Iberoamericana Campus Norte - Playas de Tijuana -.&lt;/p&gt;&lt;p style="clear: both"&gt;Para mas información visita&lt;br /&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;a href="http://iweekend.org/iweekend/iweekend-mexico-2010?lang=es" target="_blank"&gt;iWeekend en México&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://iweekend.org/2010/tijuana/" target="_blank"&gt;iWeekend Tijuana&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-7537857409324422271?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/7537857409324422271/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=7537857409324422271" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/7537857409324422271?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/7537857409324422271?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/10/iweekend-tijuana-2010.html" title="iWeekend Tijuana 2010" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_COcsfdYwI20/TLD9O2IjKvI/AAAAAAAAFh0/pRQIVLHUwiE/s72-c/iWeekend_Tijuana___iWeekend-thumb.jpg" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkEBQXsyfyp7ImA9Wx5UE0k.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-2455314629697858760</id><published>2010-10-09T16:24:00.001-07:00</published><updated>2010-10-17T11:37:30.597-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-17T11:37:30.597-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TJNET" /><category scheme="http://www.blogger.com/atom/ns#" term="tijuanarb" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Web 2.0" /><title>Plática, vistiendo un sitio con CSS</title><content type="html">&lt;p style="clear: both"&gt;&lt;strong&gt;Actualización: Aqui esta el video grabado de esta platica. &lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;span style=" text-align: center; display: block; margin: 0 auto 10px;"&gt;&lt;iframe src="http://player.vimeo.com/video/15876547?portrait=0" frameborder="0" height="300" width="400"&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;a href="http://vimeo.com/15876547"&gt;Sesión CSS&lt;/a&gt; from &lt;a href="http://vimeo.com/user3144349"&gt;Gabriel Flores&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;Como en otras ocasiones todo inicio con un "&lt;strong&gt;tweet&lt;/strong&gt;" ¿y que tal si?, en esta ocasión el que tal si fue para tener una plática sobre el uso de HTML y CSS en el desarrollo web, desde la experiencia de un desarrollador/diseñador @&lt;a href="http://twitter.com/stanmx" target="_blank"&gt;stanmx&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;@&lt;a href="http://twitter.com/stanmx" target="_blank"&gt;stanmx&lt;/a&gt; planea llevar un proyecto base en HTML y en base a técnicas y experiencias personales mostrar como "vestir" este sitio web.&lt;/p&gt;&lt;p style="clear: both"&gt;  &lt;/p&gt;&lt;p style="clear: both"&gt;La plática se llevará a cabo el día &lt;strong&gt;14 de Octubre 2010 de 6pm a 8pm&lt;/strong&gt; en Grupo Expotarlia:&lt;br /&gt;Calle Ricardo Castro No. 355,&lt;br /&gt;Fracc. Nueva Tijuana&lt;/p&gt;&lt;p style="clear: both"&gt;  &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;span style=" text-align: center; display: block; margin: 0 auto 10px;"&gt;&lt;iframe src="http://maps.google.es/maps/ms?ie=UTF8&amp;hl=es&amp;t=h&amp;msa=0&amp;msid=117388685923947743628.000484acc30b906011332&amp;ll=32.544475,-116.934979&amp;spn=0.001583,0.00228&amp;z=18&amp;output=embed" height="350" width="425" scrolling="no"&gt;&lt;/iframe&gt;&lt;/span&gt;La entrada es gratis y algo importante es que este evento esta organizado por:&lt;br /&gt;&lt;br /&gt;  &lt;/p&gt;&lt;p style="clear: both"&gt;  &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://tjnet.org" class="image-link"&gt;&lt;img src="http://tjnet.org/images/tjnet_n.jpg" height="95" align="left" width="200" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://gultij.org" class="image-link"&gt;&lt;img src="http://tjnet.org/images/gultj.png" height="90" align="left" width="119" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://tijuanarb.org" class="image-link"&gt;&lt;img src="http://tjnet.org/images/tijuanarb.png" height="76" align="left" width="67" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-2455314629697858760?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/2455314629697858760/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=2455314629697858760" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/2455314629697858760?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/2455314629697858760?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/10/platica-vistiendo-un-sitio-con-css.html" title="Plática, vistiendo un sitio con CSS" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0EFSXg_fip7ImA9Wx5VE0o.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-2544928696668149873</id><published>2010-10-05T17:38:00.001-07:00</published><updated>2010-10-06T08:40:18.646-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-06T08:40:18.646-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tijuanarb" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Como iniciarse en Ruby/Rails</title><content type="html">&lt;p style="clear: both"&gt;En varias ocasiones me han hecho esta pregunta y generalmente no tengo una respuesta sencilla, ya que no creo que exista una receta para lograr esto.&lt;/p&gt;&lt;p style="clear: both"&gt;Creo que lo primero es obviamente tener interes por Ruby y/o Rails, un buen lugar para comenzar con Ruby es el sitio de &lt;a href="http://www.ruby-lang.org/es/" target="_blank"&gt;Ruby Lang&lt;/a&gt;. Un libro muy bueno es &lt;a href="http://bit.ly/ag0exh" target="_blank"&gt;Programming Ruby&lt;/a&gt;. Realmente no conozco muchos recursos en español sobre Ruby en particular. Otro libro interesante es &lt;a href="http://bit.ly/bBlUz1" target="_blank"&gt;Learn to Program&lt;/a&gt; donde enseña como programar desde el punto de vista de Ruby.&lt;/p&gt;&lt;p style="clear: both"&gt;Una buena recomendación, antes de moverse a programar en Rails es aprender a programar con &lt;a href="http://www.sinatrarb.com/" target="_blank"&gt;Sinatrarb&lt;/a&gt;, ya que que Sinatrarb a diferencia de Rails, no agrega tanta "magia" y hay que conocer mejor el lenguaje para hacer una aplicación con este DSL.&lt;/p&gt;&lt;p style="clear: both"&gt;Sobre Rails igualmente no conozco mucho contenido en español sin embargo puedo recomendar seguir y estar pendiente de las siguientes comunidades y eventos:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;a href="http://rails.mx" target="_blank"&gt;Rails.mx&lt;/a&gt;, comunidad de Rails en México&lt;/li&gt;&lt;li&gt;&lt;a href="http://onrails.com.ar/" target="_blank"&gt;OnRails&lt;/a&gt;, comunidad de Rails en Argentina&lt;/li&gt;&lt;li&gt;&lt;a href="http://railshispano.es/" target="_blank"&gt;Rails Hispano&lt;/a&gt;, podcast en español sobre Rails&lt;/li&gt;&lt;li&gt;&lt;a href="http://conferenciarails.org/" target="_blank"&gt;Conferencia Rails&lt;/a&gt;, conferencias de Rails en España, hay videos de conferencias pasadas.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Tambien porque no seguir a @&lt;a href="http://twitter.com/tijuanarb" target="_blank"&gt;tijuanarb&lt;/a&gt; en lo que esta el sitio listo en &lt;a href="http://tijuanarb.org" target="_blank"&gt;tijuanarb.org&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitter.com/mhcornejo" target="_blank"&gt;Mario Cornejo&lt;/a&gt; tiene algunos &lt;a href="http://www.developeando.com/search/label/RubyOnRails" target="_blank"&gt;videos introductorios&lt;/a&gt; en español sobre Rails&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;Una buena opción también es buscar si seguir a los tweeteros sobre temas de Ruby/Rails es español.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;En cuestión de libros el único que puedo recomendar es &lt;a href="http://bit.ly/c1vPWg" target="_blank"&gt;Agile Web Development with Rails&lt;/a&gt;, aunque hay muchos otros.&lt;/p&gt;&lt;p style="clear: both"&gt;De los recursos de podcasts y video, gratuitos y de paga puedo recomendar:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;a href="http://peepcode.com/" target="_blank"&gt;Peepcode&lt;/a&gt; $$, tiene por ahí varios vídeos básicos para aprender Rails&lt;/li&gt;&lt;li&gt;&lt;a href="http://tekpub.com/" target="_blank"&gt;Tekpub&lt;/a&gt; $$, hay 2 series de videos una sobre Rails y otra sobre Sinatra y Rack&lt;/li&gt;&lt;li&gt;&lt;a href="http://rubyonrails.org/screencasts/rails3" target="_blank"&gt;Rails3 de Gregg Pollack&lt;/a&gt;, videos con lo nuevo sobre Rails3&lt;/li&gt;&lt;li&gt;&lt;a href="http://railscasts.com/" target="_blank"&gt;Railscasts&lt;/a&gt;, los videos por excelencia sobre Rails&lt;/li&gt;&lt;li&gt;&lt;a href="http://sdruby.org/podcast" target="_blank"&gt;SDRuby&lt;/a&gt;, videos de las sesiones de la comunidad de Ruby en San Diego CA&lt;/li&gt;&lt;li&gt;&lt;a href="http://ruby5.envylabs.com/" target="_blank"&gt;Ruby5&lt;/a&gt;, el mejor podcast sobre Ruby&lt;/li&gt;&lt;li&gt;&lt;a href="http://confreaks.net/events" target="_blank"&gt;Confreaks&lt;/a&gt;, videos de diversas conferencias de Ruby y Rails&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;Por ultimo y porque aun hay tiempo, bueno no mucho, &lt;a href="http://magmarails.com/" target="_blank"&gt;Magma Rails&lt;/a&gt; es la primera - creo - conferencia de Rails en México y al parecer van a tener varias sesiones interesantes.&lt;/p&gt;&lt;p style="clear: both"&gt;Como dije al principio no hay una receta especifica, pero si hay muchos recursos en Internet sobre Ruby y Rails, aunque la mayoría en ingles.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;NOTA: En los comentarios me han pasado algunas referencias en español para comenzar en Rails.&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Antonio me hace referencia &lt;/strong&gt;&lt;a href="http://railstutorial.org/book" target="_blank"&gt;&lt;strong&gt;RailsTutorial&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, el cual es un buen libro en linea&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Obelich recomienda "&lt;/strong&gt;&lt;a href="http://yottabi.com/mld.pdf" target="_blank"&gt;&lt;strong&gt;El maldito libro de los descarrilados&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;" ademas de recomendar la comunidad &lt;/strong&gt;&lt;a href="http://guateonrails.com/" target="_blank"&gt;&lt;strong&gt;GuateOnRails&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; de Guatemala y su curso de &lt;/strong&gt;&lt;a href="http://guateonrails.com/2010/02/screncast-curso-ruby-dia-1-cursorubygt/" target="_blank"&gt;&lt;strong&gt;Rails&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;. Tambien recomienda &lt;/strong&gt;&lt;a href="http://es.asciicasts.com/" target="_blank"&gt;&lt;strong&gt;ASCII Casts en Español&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; y un &lt;/strong&gt;&lt;a href="http://rubytutorial.wikidot.com/" target="_blank"&gt;&lt;strong&gt;tutorial de Ruby&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Por otro lado desde algunas semanas me ha estado rondando la inquietud de hacer un taller de Ruby y Rails de unas 3 o 4 sesiones donde podamos aprender y construir aplicaciones, pero de momento no se que tanto interés habría aquí en la ciudad.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-2544928696668149873?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/2544928696668149873/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=2544928696668149873" title="4 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/2544928696668149873?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/2544928696668149873?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/10/como-iniciarse-en-rubyrails.html" title="Como iniciarse en Ruby/Rails" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>4</thr:total></entry><entry gd:etag="W/&quot;DUAAR3s9eip7ImA9Wx5WF08.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-7724595050073731596</id><published>2010-09-28T10:47:00.001-07:00</published><updated>2010-09-28T19:35:46.562-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-28T19:35:46.562-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tijuanarb" /><category scheme="http://www.blogger.com/atom/ns#" term="Mongodb" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Heroku y MongoHQ con Mongoid en Rails3</title><content type="html">&lt;p style="clear: both"&gt;He tenido la necesidad de mostrarle en linea a un cliente un prototipo de una aplicación Rails3 que usa MongoDB como base de datos, para mi la opción por excelencia para estos prototipos es usar &lt;a href="http://heroku.com/" target="_blank"&gt;Heroku&lt;/a&gt;, un hosting de aplicaciones en la nube para Rails muy fácil de usar. &lt;/p&gt;&lt;p style="clear: both"&gt;Lo interesante de Heroku es que tiene cuentas gratuitas - aunque con ciertas limitaciones -, que son perfectas para mi propósito. (En la primera reunión de @&lt;a href="http://twitter.com/tijuanarb" target="_blank"&gt;tijuanarb&lt;/a&gt;, @&lt;a href="http://twitter.com/bitfon" target="_blank"&gt;bitfon&lt;/a&gt; platico sobre Heroku).&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://lh3.ggpht.com/_COcsfdYwI20/TKIqADNEeZI/AAAAAAAAFfo/vFbG9p4B0H4/s800/Heroku___Ruby_Cloud_Platform_as_a_Service-thumb.png" height="163" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;Pero Heroku no tiene soporte directo para bases de datos MongoDB, aunque si ofrece un addon para integrarse con &lt;a href="https://mongohq.com/home" target="_blank"&gt;MongoHQ&lt;/a&gt;, servicio también en la nube para este tipo de base de datos, y al igual que Heroku, también tiene cuentas gratuitas, excelente también para prototipos. (También en la primera reunión de @&lt;a href="http://twitter.com/tijuanarb" target="_blank"&gt;tijuanarb&lt;/a&gt;, @&lt;a href="http://twitter.com/fcastellanos" target="_blank"&gt;fcastellanos&lt;/a&gt; hablo sobre MongoDB)&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://lh6.ggpht.com/_COcsfdYwI20/TKIqEpppZJI/AAAAAAAAFfw/8oXz1Yd10HA/s800/MongoHQ_-_The_cloud-based_hosted_database_solution_for_MongoDB-thumb..png" height="211" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;Hasta aqui todo bien, mi detalle vino al revisar la documentación de Heroku de como configurar la conexión a MongoHQ, ya que se requiere de una variable ambiente MONGOHQ_URL donde se coloca una URL que MongoHQ proporciona para cada base de datos, la forma de agregar esta variable en nuestra aplicación de Heroku es la siguiente:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;$ heroku config:add MONGOHQ_URL="mongodb://mi-url-de-la-db-que-me-dio-mongohq"&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Nota: a comentario de @&lt;/strong&gt;&lt;a href="http://twitter.com/fcastellanos" target="_blank"&gt;&lt;strong&gt;fcastellanos&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, a la url de MongoHQ ha que agregarle el usuario y clave que tiene acceso a la base de datos, ejemplo:&lt;/strong&gt;&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;$ heroku config:add MONGOHQ_URL="&lt;a href="mongodb://[usuario]:[password]@[url_mongohq]"&gt;mongodb://[usuario]:[password]@[url_mongohq]&lt;/a&gt;"&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Mi detalle viene a partir de que la documentación de Heroku no indica ningún paso adicional para configurar MongoID, la libreria de Ruby que mi aplicación usa para comunicarse con una base de datos MongoDB, sin embargo si hay pasos adicionales para otras librerías similares.&lt;/p&gt;&lt;p style="clear: both"&gt;Así que asumí que todo estaba bien, me conecto a la aplicación y me indica un error, al revisar el log veo que no encuentra la base de datos, por lo tanto al parecer MongoID no estaba haciendo uso de la variable de ambiente MONGOHQ_URL.&lt;/p&gt;&lt;p style="clear: both"&gt;Revisando el archivo config/mongoid.yml donde se configura la base de datos veo que espera obtener los valores de varias variables de ambiente:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt; host: &lt;/p&gt;&lt;p style="clear: both"&gt; port: &lt;/p&gt;&lt;p style="clear: both"&gt; username: &lt;/p&gt;&lt;p style="clear: both"&gt; password: &lt;/p&gt;&lt;p style="clear: both"&gt; database: &lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Así que lo que procedí a hacer es cargar esas variables al momento de iniciar mi aplicación para esto modifique el archivo config/applicacion.rb y justo a partir de la segunda linea y antes de los "require" agregue el siguiente código:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;# MongoHQ Setup&lt;/p&gt;&lt;p style="clear: both"&gt;require 'uri'&lt;/p&gt;&lt;p style="clear: both"&gt;if ENV["MONGOHQ_URL"]&lt;/p&gt;&lt;p style="clear: both"&gt; mongo_uri = URI.parse(ENV["MONGOHQ_URL"])&lt;/p&gt;&lt;p style="clear: both"&gt; ENV["MONGOID_HOST"] = mongo_uri.host&lt;/p&gt;&lt;p style="clear: both"&gt; ENV["MONGOID_PORT"] = mongo_uri.port.to_s&lt;/p&gt;&lt;p style="clear: both"&gt; ENV["MONGOID_USERNAME"] = mongo_uri.user&lt;/p&gt;&lt;p style="clear: both"&gt; ENV["MONGOID_PASSWORD"] = mongo_uri.password&lt;/p&gt;&lt;p style="clear: both"&gt; ENV["MONGOID_DATABASE"] = mongo_uri.path.gsub("/", "")&lt;/p&gt;&lt;p style="clear: both"&gt;end&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Después de esto, volví a lanzar mi aplicación y ahí estaba finalmente funcionando, por fin Heroku y MongoHQ estaban trabajando juntos.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-7724595050073731596?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/7724595050073731596/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=7724595050073731596" title="2 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/7724595050073731596?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/7724595050073731596?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/09/heroku-y-mongohq-con-mongoid-en-rails3.html" title="Heroku y MongoHQ con Mongoid en Rails3" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_COcsfdYwI20/TKIqADNEeZI/AAAAAAAAFfo/vFbG9p4B0H4/s72-c/Heroku___Ruby_Cloud_Platform_as_a_Service-thumb.png" height="72" width="72" /><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;A0UHRXc_fip7ImA9Wx5WFU8.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-2748884372818009535</id><published>2010-09-26T12:27:00.001-07:00</published><updated>2010-09-26T12:27:14.946-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-26T12:27:14.946-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Web 2.0" /><category scheme="http://www.blogger.com/atom/ns#" term="Mono" /><title>Manos, un framework ligero para aplicaciones web en .NET/Mono</title><content type="html">&lt;p style="clear: both"&gt;Hace unos días platicando con @&lt;a href="http://www.twitter.com/fcastellanos" target="_blank"&gt;fcastellanos&lt;/a&gt;, me hizo notar un nuevo framework para el desarrollo de aplicaciones web para .NET/Mono, el framework es &lt;a href="http://github.com/jacksonh/manos" target="_blank"&gt;Manos&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Manos esta siendo desarrollado por el hacker de Mono &lt;a href="http://twitter.com/jacksonh" target="_blank"&gt;Jackson Harper&lt;/a&gt;, quien comenta en su &lt;a href="http://jacksonh.tumblr.com/post/1159500924/manos-de-mono-the-manifesto" target="_blank"&gt;manifesto&lt;/a&gt; que le gusta desarrollar aplicaciones web y le gusta el lenguaje C#, pero no le gusta ASP.NET, cree que ASP.NET en general hace que las cosas sencillas sean muy complicadas y por eso decidió crear Manos y dejar a ASP.NET fuera de la ecuación.&lt;/p&gt;&lt;p style="clear: both"&gt;Los objetivos de Manos es ser un framework:&lt;br /&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Escalable y de alto rendimiento&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Con un sistema "pipes" que permita conectarse y extender cualquier punto de la solicitud HTTP&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Un sistema de rutas facil y simple, por medio de concordancia de texto y expresiones regulares&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Auto conversion de parámetros en la ruta o post&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Que funcione con HTML5 por omisión&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Un sistema de plantillas basado en HTML&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Linea de comando simple para la creación de aplicaciones, construcción y "hosteo" de aplicaciones, sin necesidad de IDEs&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Basado en la reutilizacion de componentes, modular y facil de probar.&lt;/li&gt;&lt;/ul&gt;Si estuviese leyendo estos puntos y no sabría que se esta hablando de C# y .NET, pensaría que me están describiendo &lt;a href="http://rack.rubyforge.org/" target="_blank"&gt;Rack&lt;/a&gt; y muy probablemente la combinación con &lt;a href="http://www.sinatrarb.com/" target="_blank"&gt;Sinatra&lt;/a&gt;, pero no es así.&lt;/p&gt;&lt;p style="clear: both"&gt;Estuve viendo los ejemplos y no puedo evitar pensar en términos de Rack/Sinatra, por ejemplo:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;$ manos -init myapp # Crea un directorio con mi aplicación con jquery, algunos css y el modulo .cs&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;En nuestro modulo podremos escribir nuestra aplicación "Hola mundo" tan fácil como:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;Get ("/", ctx =&amp;gt; ctx.Response.Write("Hola mundo!"));&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Lo compilamos, por ejemplo con Mono:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;$ gmcs -target:library -out:myapp.dll myapp.cc StaticContectModule.cs&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Y finalmente dentro del directorio ejecutamos&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;$ manos -server&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Navegamos a localhost:8080 y nuestra aplicación debe de responder.&lt;/p&gt;&lt;p style="clear: both"&gt;Increíblemente sencillo y facil, en el sitio de &lt;a href="http://github.com/jacksonh/manos" target="_blank"&gt;Github&lt;/a&gt; hay un ejemplo mas elaborado, junto con 2 tutoriales sobre Manos, &lt;a href="http://github.com/jacksonh/manos/blob/master/docs/tutorial/page-1.md" target="_blank"&gt;tutorial1&lt;/a&gt; y &lt;a href="http://github.com/jacksonh/manos/blob/master/docs/tutorial/page-2.md" target="_blank"&gt;tutorial2&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Por cierto Manos es Open Source con licencia MIT X11, bastante permisiva.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-2748884372818009535?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/2748884372818009535/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=2748884372818009535" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/2748884372818009535?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/2748884372818009535?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/09/manos-un-framework-ligero-para.html" title="Manos, un framework ligero para aplicaciones web en .NET/Mono" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DkcERnw7fSp7ImA9Wx5WEkg.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-1219493947103806781</id><published>2010-09-23T08:00:00.001-07:00</published><updated>2010-09-23T08:00:07.205-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-23T08:00:07.205-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tijuanarb" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Reunion del grupo tijuana.rb</title><content type="html">&lt;p style="clear: both"&gt;El dia de ayer miércoles, se llevo a cabo la 1ra reunion de grupo de usuario de ruby/rails tijuana.rb, en la cual Sergio Lopez (@&lt;a href="http://twitter.com/bitfon" target="_blank"&gt;bitfon&lt;/a&gt;) habló sobre Heroku y el flujo de trabajo para publicar aplicaciones en ruby en la nube y Fernando Castellanos (@&lt;a href="http://twitter.com/fcastellanos" target="_blank"&gt;fcastellanos&lt;/a&gt;) sobre mongodb y como usarla en Rails.&lt;/p&gt;&lt;p style="clear: both"&gt;El lugar fue la parte exterior del Starbucks Lucerna en zona rio, y tengo que admitirlo llego mucha mas gente de la esperada, en un punto éramos alrededor de 15 o poco mas, y aunque las condiciones del lugar no fueron las optimas - no nos alcanzo el espacio donde estábamos -, creo que estuvo bastante bien para la primera reunión. Así que para la siguiente reunión vamos a tratar de tener un lugar adecuado.&lt;/p&gt;&lt;p style="clear: both"&gt;Ambas platicas interesantes y con muchas preguntas por parte de los asistentes.&lt;/p&gt;&lt;p style="clear: both"&gt;En la reunion tambien nos acompañaron Jed Sundwall (@&lt;a href="http://twitter.com/jedsundwall" target="_blank"&gt;jedsundwall&lt;/a&gt;), Edward O'Connor (@&lt;a href="http://twitter.com/hober" target="_blank"&gt;hober&lt;/a&gt;) y Patrick Crowley (@&lt;a href="http://twitter.com/mokolabs" target="_blank"&gt;mokolabs&lt;/a&gt;) del grupo de @&lt;a href="http://twitter.com/SDRuby" target="_blank"&gt;SDRuby&lt;/a&gt; y SANDPYT - San Diego Phyton -. Y aunque solo uno de ellos hablaba español participaron de manera activa; y trajeron algunos regalos para rifar con los asistentes.&lt;/p&gt;&lt;p style="clear: both"&gt;De lo interesante de que ellos nos acompañaran, es que tuve la oportunidad de platicar con Patrick, y salió la posibilidad de realizar eventos en conjunto, ya sea aqui en Tijuana o San Diego, lo cual es de lo mas interesante. De entrada ya veremos la posibilidad de realizar un "carpool" para asistir a la próxima reunión de @&lt;a href="http://twitter.com/SDRuby" target="_blank"&gt;SDRuby&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Gracias a los que asistieron y esperamos verlos el siguiente mes, con mejores condiciones de espacio y gracias a @&lt;a href="http://www.twitter.com/bitfon" target="_blank"&gt;bitfon&lt;/a&gt; y @&lt;a href="http://www.twitter.com/fcastellanos" target="_blank"&gt;fcastellanos&lt;/a&gt; por su participación.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://lh5.ggpht.com/_COcsfdYwI20/TJtrQuoTpKI/AAAAAAAAFew/iBnilxUUo78/s800/6het-thumb.jpg" height="283" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://lh4.ggpht.com/_COcsfdYwI20/TJtrSogWTWI/AAAAAAAAFe4/jdpcWwU2tE8/s800/166346306-thumb.jpg" height="283" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://lh4.ggpht.com/_COcsfdYwI20/TJtrVK7UzEI/AAAAAAAAFfA/jfemp-x7CK4/s800/1-thumb.jpg" height="283" align="left" width="379" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://lh5.ggpht.com/_COcsfdYwI20/TJtrXSIw_SI/AAAAAAAAFfI/fCNWj-uRyJA/s800/166361369-thumb.jpg" height="285" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://lh6.ggpht.com/_COcsfdYwI20/TJtrYmN43TI/AAAAAAAAFfQ/dXcw23wkRoE/s800/166436362-thumb.jpg" height="285" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://lh4.ggpht.com/_COcsfdYwI20/TJtrahpKvHI/AAAAAAAAFfY/nuIxEhlS9Ug/s800/ikkl-thumb.jpg" height="283" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://lh3.ggpht.com/_COcsfdYwI20/TJtrcD_fm-I/AAAAAAAAFfg/YjZ-vJPuYh4/s800/ip4h-thumb.jpg" height="285" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-1219493947103806781?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/1219493947103806781/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=1219493947103806781" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/1219493947103806781?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/1219493947103806781?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/09/reunion-del-grupo-tijuanarb.html" title="Reunion del grupo tijuana.rb" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_COcsfdYwI20/TJtrQuoTpKI/AAAAAAAAFew/iBnilxUUo78/s72-c/6het-thumb.jpg" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEMEQXs_eCp7ImA9Wx5WEUQ.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-8225940498092709648</id><published>2010-09-22T16:00:00.001-07:00</published><updated>2010-09-22T16:00:00.540-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-22T16:00:00.540-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Calcular fechas laborables con Ruby</title><content type="html">&lt;p style="clear: both"&gt;Hoy me encontré con este post llamado "&lt;a href="http://weblogs.asp.net/hajan/archive/2010/09/22/calculate-business-days-using-linq.aspx" target="_blank"&gt;Calculate Business Days using LINQ&lt;/a&gt;" donde explican como usar C# y LINQ para de un rango de fechas obtener solo las fechas que son laborables, es decir excluir las fechas que caigan en sábado y domingo.&lt;/p&gt;&lt;p style="clear: both"&gt;El código se muestra a continuación donde se haca primero una llamada al método &lt;strong&gt;GetAllDates&lt;/strong&gt; y se le pasa una fecha inicial y otra final, después con &lt;strong&gt;Where&lt;/strong&gt; de LINQ se evalúa cada fecha un método que regresa falso o verdadero si la fecha cae en fin de semana o no, obteniendo al fina un arreglo con las fechas laborables.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;span style="  display: inline; float: left; margin: 0 10px 10px 0;"&gt;&lt;script src="http://gist.github.com/592731.js?file=BusinessDays.cs"&gt;&lt;/script&gt;&lt;/span&gt;&lt;br style="clear: both" /&gt;Después de revisarlo, me pregunte, que tan complicado es hacer lo mismo en Ruby. Después de unos minutos me di cuenta que es ridículamente simple hacer lo mismo que LINQ y C# en solo 1 linea de código.&lt;/p&gt;&lt;p style="clear: both"&gt;A mi metodo &lt;strong&gt;wroking_days&lt;/strong&gt; se le pasa una fecha inicial y una fecha final y como resultado tenemos una arreglo de fechas excluyendo las que caen en fin de semana.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;span style="  display: inline; float: left; margin: 0 10px 10px 0;"&gt;&lt;script src="http://gist.github.com/592731.js?file=business_days.rb"&gt;&lt;/script&gt;&lt;/span&gt;&lt;br style="clear: both" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-8225940498092709648?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/8225940498092709648/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=8225940498092709648" title="3 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/8225940498092709648?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/8225940498092709648?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/09/calcular-fechas-laborables-con-ruby.html" title="Calcular fechas laborables con Ruby" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;DUYHRHs4fCp7ImA9Wx5WEE0.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-684803955018052023</id><published>2010-09-20T11:25:00.001-07:00</published><updated>2010-09-20T11:25:35.534-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-20T11:25:35.534-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>La complejidad de Ruby On Rails</title><content type="html">&lt;p style="clear: both"&gt;A raíz de mi &lt;a href="http://mario-chavez.blogspot.com/2010/09/aplicacion-de-rails-3-con-mongodb.html" target="_blank"&gt;post anterior&lt;/a&gt; y algunos comentarios expresados en él acerca de la complejidad para tener una aplicación de Ruby On Rails funcionando con MongoDB, he decidido escribir este post, el cual lo voy a tratar desde la vista de un ex(o casi)-desarrollador de .NET y aunque quizás algunos de mis comentarios parezcan un ataque a un .NET, no es esa mi intención, así que por favor tomenlos relajados. Ni tampoco es mi intención decir cual es mejor o cual es peor, ese es un ejercicio que cada quien forma personal debe de realizar&lt;/p&gt;&lt;p style="clear: both"&gt;Comencé a desarrollar en .NET desde las versiones beta del mismo, ya hace mas de 10 años, e inclusive desarrolle para Web desde antes, ya sea con código escrito en C a modo de cgi-bin o Perl, al igual me toco desarrollar para Web en Visual Basic 4 - 6. En esos tiempos era realmente algo complejo hacer paginas dinámicas y era muy sencillo tomar decisiones incorrectas y hacer que el desarrollo se complicara enormemente.&lt;/p&gt;&lt;p style="clear: both"&gt;Con la llegada de .NET Microsoft proponía otro paradigma un tanto diferente de como desarrollar a Web, proponía hacerlo tal y como se escribían aplicaciones de escritorio, solo haciendo "drag and drop", "right click", configurar aqui y alla y listo, tener aplicaciones sin - o casi sin - escribir una linea de código, digo cuantas veces no hemos visto a empleados de Microsoft haciendo este tipo de demos en eventos de la empresa.&lt;/p&gt;&lt;p style="clear: both"&gt;Desde mi punto de vista - si desde mi punto de vista y experiencia - esto funcionada super bien para aplicaciones muy simples y predecibles, mi problema siempre venia cuando se quería hacer "algo mas" con la aplicación, la complejidad de desarrollo iba en aumento y en ocasiones se convertía en algo nada trivial. Durante ese tiempo también me toco hacer desarrollo con Java, varios frameworks para Web y Tomcat, y la experiencia no fue mejor.&lt;/p&gt;&lt;p style="clear: both"&gt;Llego un punto en el cual casi casi decidí dejar de escribir aplicaciones para Web y únicamente escribir aplicaciones para escritorio, pero los clientes seguían solicitando aplicaciones Web, así que busque alternativas en .NET - PHP realmente nunca me gusto ni me gusta, quizás no tengo argumentos técnicos para decir porque, simplemente no me gusta -.&lt;/p&gt;&lt;p style="clear: both"&gt;La alternativa que encontre fue &lt;a href="http://www.castleproject.org/MonoRail/" target="_blank"&gt;MonoRail&lt;/a&gt;, comencé a ver los ejemplos y a entender sus dependencias, MonoRail es un framework para ASP.NET que trabaja con los patrones de &lt;a href="http://mario-chavez.blogspot.com/2008/09/programacin-web-patrn-mvc.html" target="_blank"&gt;MVC y ActiveRecord&lt;/a&gt;, inspirado por Action Pack. Al investigar que es Action Pack, descubrí &lt;a href="http://rubyonrails.org/" target="_blank"&gt;Ruby On Rails&lt;/a&gt;, pero en ese momento le encontre un problema, tenia que aprender otro lenguaje de programación y tenia algunas semanas para entregar una aplicación Web para un cliente.&lt;/p&gt;&lt;p style="clear: both"&gt;Así que me decidi por MonoRail, pero había algunos "detalles", tenia muchas dependencias, no tenia "Wizards" ni componentes o controles como se les llama en ASP.NET WebForms, en lo personal no lo vi como problema ya que en lo personal es raro que use los "Wizards" o que utilice controles de 3ros, así que para mi no había perdida ahí, aunque si me ha tocado conocer y dar cursos a desarrolladores de .NET que si no tiene un "Wizard" o no pueden poner su "Grid" súper "fancy" no son capaces de desarrollar una aplicación.&lt;/p&gt;&lt;p style="clear: both"&gt;Por otro lado, si bien la configuración de un ambiente de trabajo con MonoRail requeria de un poco de trabajo y entendimiento por arriba de "Drag and Drop" y "Right click", no me pareció gran cosa y mas cuando es algo que solo haces una sola vez. MonoRail me permitió entregar varias aplicaciones de manera muy rápida, quede impresionado y eso me llevo a investigar sobre Ruby On Rails. Por cierto hace algunos días anunciaron, parte de "&lt;a href="http://hammett.castleproject.org/" target="_blank"&gt;Roadmap&lt;/a&gt;" de MonoRail.&lt;/p&gt;&lt;p style="clear: both"&gt;El motivo por el cual MonoRail me permitió entregar aplicaciones muy rápido fue porque no tuve que tomar decisiones, MonoRail lo hizo por mi, por ejemplo no tuve que decidir como organizar mi aplicación, no tuve que decidir como conectarme a la base de datos, todo lo decidió MonoRail, así solo tuve que enfocarme en la funcionalidad que era importante para mis clientes y ya. MonoRail al igual que Ruby on Rails es &lt;a href="http://stackoverflow.com/questions/802050/what-is-opinionated-software" target="_blank"&gt;opinioted software&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Al llegar a Ruby on Rails, obviamente la primera barrera fue el lenguaje Ruby, pero es muy facil acostumbrarse a el, aunque todavia escribo código a la C#, pero creo que voy mejorando.&lt;/p&gt;&lt;p style="clear: both"&gt;Para la gente acostumbrada a los IDEs hay una gran variedad de &lt;a href="http://mario-chavez.blogspot.com/2010/03/curso-de-ruby-on-rails-en-tijuana.html" target="_blank"&gt;opciones&lt;/a&gt; a elegir, en lo personal no soy fan de las IDEs, prefiero ambientes mas ligeros y que me hagan usar la consola de comandos, por lo tanto en Windows se puede seguir esta &lt;a href="http://mario-chavez.blogspot.com/2008/11/instalando-ruby-on-rails-la-mac-en.html" target="_blank"&gt;guia&lt;/a&gt; y en Linux estas &lt;a href="http://www.pablasso.com/2009/01/12/¿como-instalar-ruby-on-rails-en-ubuntu" target="_blank"&gt;dos&lt;/a&gt; &lt;a href="http://grigio.org/pimp_my_gedit_was_textmate_linux" target="_blank"&gt;guias&lt;/a&gt;, puede parecer complicado, pero es algo que solo se tiene que hacer una vez, si se usa un IDE en cuestión de minutos se tiene un ambiente complete y configurado.&lt;/p&gt;&lt;p style="clear: both"&gt;Es muy sencillo crear una nueva aplicación con Ruby On Rails (RoR) haciendo uso de las decisiones que el framework hace por nosotros, por ejemplo:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;$ rails new mi_super_app&lt;/p&gt;&lt;p style="clear: both"&gt;$ cd mi_super_app&lt;/p&gt;&lt;p style="clear: both"&gt;$ rails generate scaffold client name:string, address:string&lt;/p&gt;&lt;p style="clear: both"&gt;$ rails server&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Dirigimos nuestro navegador a http://localhost:3000/clients y listo ya podemos comenzar a dar de alta y modificar clientes, simple, fácil y rápido.&lt;/p&gt;&lt;p style="clear: both"&gt;Si bien esto funcionara tal y como esta en un gran numero de casos, la gente en RoR pensamos en la regla 80/20, hay momentos en que se tiene que hacer algo un poco diferente para configurar nuestra aplicación, donde podemos cambiar las decisiones que RoR hace por nosotros y adaptarlas al 100% de nuestras necesidades, como las modificaciones propuestas en mi &lt;a href="http://mario-chavez.blogspot.com/2010/09/aplicacion-de-rails-3-con-mongodb.html" target="_blank"&gt;post&lt;/a&gt; para usar MongoDB en lugar de una base de datos relacional.&lt;/p&gt;&lt;p style="clear: both"&gt;Si bien la intención de mi post es servir como una guia o receta, paso a paso de como hacerlo, también podemos hacerlo sencillo con el uso de &lt;a href="http://m.onkey.org/2008/12/4/rails-templates" target="_blank"&gt;Templates&lt;/a&gt; - así como existen también templates en Visual Studio para crear aplicaciones con ciertas características y defaults -, en e siguiente &lt;a href="http://railscasts.com/episodes/148-app-templates-in-rails-2-3" target="_blank"&gt;video&lt;/a&gt; de &lt;a href="http://railscasts.com" target="_blank"&gt;Railscasts&lt;/a&gt; se explica el concepto. De hecho existe ya un &lt;a href="http://github.com/mariochavez/rails-templater" target="_blank"&gt;template&lt;/a&gt; para pre-configurar una aplicación de RoR para usar MongoDB y Rspec, con el cual se puede omitir mi post y solo ejecutar:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;$ rails new mi_super_app -JOT -m ~/path_a/mongodb_template/templater.rb&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Ya viendolo así, ¿ya no se ve que sean muchos pasos no?&lt;/p&gt;&lt;p style="clear: both"&gt;Sobre el tema de las dependencias, al igual que en cualquier otro framework o lenguaje podemos tener dependencias a librerías de terceros o podemos elegir no hacerlo. En el caso de Ruby y sus diferentes frameworks, hay librerías para casi todo lo que nos podamos imaginar, &lt;a href="http://rubygems.org/" target="_blank"&gt;RubyGems&lt;/a&gt; es un buen lugar para descubrirlas y &lt;a href="http://gembundler.com/" target="_blank"&gt;Bundler&lt;/a&gt; nos permite manejar esas dependencias de forma sencilla y a nivel aplicaciones, es decir podemos tener la misma dependencia pero hacia diferentes versiones de la librería sin conflictos, no hay "&lt;a href="http://en.wikipedia.org/wiki/DLL_hell" target="_blank"&gt;DLL Hell&lt;/a&gt;".&lt;/p&gt;&lt;p style="clear: both"&gt;Para determinar como elegir que dependencias tener en nuestra aplicación, va en relación directa de nuestras necesidades, pero creo que puedo sumarizar algunos criterios:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Librerías que fueron extraídas del framework de RoR&lt;/li&gt;&lt;li&gt;Librerías mantenidas por miembros del equipo de desarrollo de RoR&lt;/li&gt;&lt;li&gt;Librerías que son tan viejas como el mismo framework de RoR y que evolucionan paralelamente&lt;/li&gt;&lt;li&gt;Librerías mantenidas por empresas de desarrollo en RoR&lt;/li&gt;&lt;li&gt;Librerías populares y que tengan pruebas&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;Con respecto al soporte de los librerías disponibles en Ruby, este varia, pero el común denominador es que son OSS y el código de casi todas esta disponible en &lt;a href="http://www.github.com" target="_blank"&gt;Github&lt;/a&gt;. En experiencia personal no he tenido problemas con esto, ya que a través de los grupos, IRC, reportando bugs o correo directo he tenido solución cuando se me ha presentado algún problema, inclusive, he enviado parches que han sido aceptados y generalmente la corrección a mi problema puede llevar algunas horas en lugar de tener que esperar días si fuese un bug en una librería comercial.&lt;/p&gt;&lt;p style="clear: both"&gt;De las librerías que he utilizado realmente no me ha tocado alguna que pierda el soporte, cuando el desarrollador principal se retira generalmente sale alguien a continuar trabajando en ella, lo que si me ha tocado experimentar es el reemplazo de librerías por otras mejores, por ejemplo, cuando entre a RoR &lt;a href="http://github.com/technoweenie/restful-authentication/wiki" target="_blank"&gt;restful_authentication&lt;/a&gt; era "la librería" para el manejo y autentificacion de usuarios, posteriormente &lt;a href="http://github.com/binarylogic/authlogic" target="_blank"&gt;authlogic&lt;/a&gt; la reemplazo y actualmente &lt;a href="http://github.com/plataformatec/devise" target="_blank"&gt;devise&lt;/a&gt; es la librería popular, no es que las otras tengan algo malo o funcionen mejor o peor, es solo la manera en como evolucionan las cosas.&lt;/p&gt;&lt;p style="clear: both"&gt;Creo que personalmente lo que encontre en RoR es que no me tengo que pelear contra el framework para poder entregarle aplicaciones a mis clientes, todo lo contrario, me puedo olvidar un poco del framework y dedicarme a implementar la funcionalidad que le da valor a mi trabajo.&lt;/p&gt;&lt;p style="clear: both"&gt;Y afortunadamente puedo decir que aquí en Tijuana no he sido el único que ha encontrado este valor, ya que desde que comencé a platicar sobre RoR varios amigos implementaron soluciones para sus empresas y clientes de estas que están en linea y en tiempo record, y traen todavía mas proyectos nuevos que están siendo desarrollados en RoR, de mi parte igualmente tengo un par de proyectos en RoR que pronto verán "la luz", proyectos para mis clientes. Al mismo tiempo se de empresas que están tomando cursos y evaluando RoR para el desarrollo de nuevas versiones de sus productos, todo esto solo en Tijuana.&lt;/p&gt;&lt;p style="clear: both"&gt;Creo que después de esta explicación algunos estarán de acuerdo conmigo y otros no, a final de cuentas debemos de ser apasionados con el lenguaje/framework que elijamos para trabajar, porque para bien o para mal a estos le vamos a dedicar nuestro tiempo laboral; pero el ser apasionados también implica el ser críticos de lo que usamos y si es posible conocer y probar otras herramientas, aunque si trabajamos para una empresa "casada" con una compañía/tecnología va a ser un poco difícil cambiar su visión, ya que generalmente se usan x tecnología por cuestión política o de mercadotecnia o gusto personal de la persona que toma las decisiones.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-684803955018052023?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/684803955018052023/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=684803955018052023" title="3 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/684803955018052023?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/684803955018052023?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/09/la-complejidad-de-ruby-on-rails.html" title="La complejidad de Ruby On Rails" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;CUEBRH89fip7ImA9Wx5XF0Q.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-2860448152490868961</id><published>2010-09-18T00:06:00.001-07:00</published><updated>2010-09-18T00:07:35.166-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-18T00:07:35.166-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mongodb" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Aplicación de Rails 3 con MongoDB</title><content type="html">&lt;p style="clear: both"&gt;En los últimos días he tenido que iniciar un par de proyectos en Ruby On Rails, donde la base de datos que se ha requerido es una base de datos no relacional, en este caso &lt;a href="http://www.mongodb.org/" target="_blank"&gt;MongoDB&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;La idea de este post es documentar la configuración de una nueva aplicación en Rails 3 para usar con MongoDB, donde vamos a desactivar ActiveRecord e instalar las siguientes herramientas:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Generadores Rails para Mongo&lt;/li&gt;&lt;li&gt;Rspec para pruebas&lt;/li&gt;&lt;li&gt;Factory Girl para fixtures&lt;/li&gt;&lt;li&gt;Haml como plantilla de vistas y jQuery.&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;Como paso inicial es necesario crear una nueva aplicación de Rails 3 - Se asume que ya se tiene instalado Rails 3 y MongoDB -, pero vamos a pasar las opciones -O para que no se creen archivos de ActiveRecord, -J para que no se instale la librería de javascript Prototype y -T para que no cree el fólder para Test::Unit&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;$ rails new mi_app -O -J -T&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;em&gt;&lt;strong&gt;Después de creada la aplicación, seria buena idea inicializar un repositorio de Git.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Una vez creada nuestra aplicación hay que realizarle algunas adiciones nuestro archivo Gemfile para agregar las dependencias de nuestra aplicación:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;mongoid y bson_ext =&amp;gt; Mongoid es la librería que usaremos para conectarnos a la base de datos de MongoDB y bson_ext es una extensión en C para acelerar la serializacion de BSON&lt;/li&gt;&lt;li&gt;haml =&amp;gt; Lenguaje de plantilla alternativa para vistas en Rails, desde mi punto de vista menos verbal y mas "developer friendly" que html y erb.&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;Dentro de un grupo llamado :development agregamos las siguientes gemas:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;rails3-generators =&amp;gt; varios generadores para Rails 3, lo que nos permite ejecutar rails generate &lt;generador&gt;&lt;/generador&gt;&lt;/li&gt;&lt;li&gt;haml-rails =&amp;gt; generadores de haml para Rails 3&lt;/li&gt;&lt;li&gt;jquery-rails =&amp;gt; generadores de jquery para Rails 3&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;En el grupo :test agregamos:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;rspec =&amp;gt; framework para pruebas en Ruby&lt;/li&gt;&lt;li&gt;rspec-rails =&amp;gt; utilerias para pruebas en RSpec para Rails&lt;/li&gt;&lt;li&gt;factory_girl_rails =&amp;gt; utileria para la creación de modelos para pruebas&lt;/li&gt;&lt;li&gt;remarkable_mongoid =&amp;gt; librería para pruebas de modelos de mongoid con RSpec&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;El archivo Gemfile debe de quedar como se muestra a continuación.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;span style="  display: inline; float: left; margin: 0 10px 10px 0;"&gt;&lt;script src="http://gist.github.com/585431.js?file=Gemfile"&gt;&lt;/script&gt;&lt;/span&gt;&lt;br style="clear: both" /&gt;&lt;br /&gt;Para instalar las gemas solo ejecutamos&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;$ bundle install&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Para conocer mas de las gemas instaladas aquí les dejo los vínculos a sus referencias&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;a href="http://mongoid.org/" target="_blank"&gt;mongoid&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://haml-lang.com/" target="_blank"&gt;haml&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/indirect/rails3-generators" target="_blank"&gt;rails3-generators&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/indirect/haml-rails" target="_blank"&gt;haml-rails&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/indirect/jquery-rails" target="_blank"&gt;jquery-rails&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.github.com/rspec/rspec/" target="_blank"&gt;rspec&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.github.com/rspec/rspec-rails/" target="_blank"&gt;rspec-rails&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/thoughtbot/factory_girl_rails" target="_blank"&gt;factory_girl_rails&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/bcardarella/remarkable_mongoid" target="_blank"&gt;remarkable_mongoid&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;Una vez instaladas las gemas hay que realizar algunas configuraciones, lo primero es configurar mongoid para trabajar con Rails y desactivar ActiveRecord, para eso ejecutamos el comando:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;$ rails generate mongoid:config&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Este comando va crear el archivo config/mongoid.yml donde vamos a configurar el acceso a la base de datos de MongoDB, también va a modificar el archivo config/application.rb y va a eliminar la dependencia de ActiveRecord, la parte superior de config/application.rb deberá quedar algo similar a:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;# require "active_record/railtie"&lt;/p&gt;&lt;p style="clear: both"&gt;require "action_controller/railtie"&lt;/p&gt;&lt;p style="clear: both"&gt;require "action_mailer/railtie"&lt;/p&gt;&lt;p style="clear: both"&gt;require "active_resource/railtie"&lt;/p&gt;&lt;p style="clear: both"&gt;#require "rails/test_unit/railtie"&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Ya que estamos en el archivo config/application.rb vamos indicandole a Rails que en nuestra aplicación deseamos usar haml, rspec y factory_girl por omisión, para esto dentro de la declaración de la clase Application &amp;lt; Rails::Application, pero al final agregamos el siguiente código&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;span style="  display: inline; float: left; margin: 0 10px 10px 0;"&gt;&lt;script src="http://gist.github.com/585431.js?file=application.rb"&gt;&lt;/script&gt;&lt;/span&gt;&lt;br style="clear: both" /&gt;&lt;br /&gt;A partir de este punto instalamos el soporte para jQuery y Rspec en nuestra aplicación de la siguiente forma:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;$ rails generate jquery:install #--ui para activar jQuery UI&lt;/p&gt;&lt;p style="clear: both"&gt;$ rails generate rspec:install &lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Como ultimo paso vamos configurar RSpec para que trabaje con factory_girl y remarkable, ademas de eliminar el soporte a ActiveRecord y hacer que RSpec elimine las colecciones creadas en MongoDB por nuestras pruebas antes de la ejecución de cada prueba, esto es necesario para asegurarnos que al correr cada prueba la base de datos este "limpia" y así no crear conflictos y/o dependencias en las pruebas.&lt;/p&gt;&lt;p style="clear: both"&gt;Al inicio del archivo spec/spec_helper.rb hay que requerir:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;require 'factory_girl'&lt;/p&gt;&lt;p style="clear: both"&gt;require 'remarkable/mongoid'&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Un poco mas abajo indicamos que cargue los archivos Factory de factory_girl&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;Dir[Rails.root.join("spec/factories/**/*.rb")].each {|f| require f}&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Después eliminamos el soporte a ActiveRecord comentando las siguientes lineas:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;config.fixture_path = "#{::Rails.root}/spec/fixtures"&lt;/p&gt;&lt;p style="clear: both"&gt;config.use_transactional_fixtures = false&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Y finalmente dentro y al final del bloque de configuración de RSpec indicamos que antes de cada prueba elimine las colecciones de MongoDB&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt; config.before :each do&lt;/p&gt;&lt;p style="clear: both"&gt; Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&amp;amp;:drop)&lt;/p&gt;&lt;p style="clear: both"&gt; end&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;El archivo spec/spec_helper.rb deberá quedar muy parecido a&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;span style="  display: inline; float: left; margin: 0 10px 10px 0;"&gt;&lt;script src="http://gist.github.com/585431.js?file=spec_helper.rb"&gt;&lt;/script&gt;&lt;/span&gt;&lt;br style="clear: both" /&gt;&lt;br /&gt;Una vez en este punto ya podemos proceder a crear nuestra súper aplicación usando MongoDB como base de datos, si ejecutamos el generador para model, o controller o scaffold, Rails 3 generara modelos para MongoDB o vistas en haml y creara los archivos necesarios en spec para realizar pruebas con RSpec.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-2860448152490868961?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/2860448152490868961/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=2860448152490868961" title="4 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/2860448152490868961?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/2860448152490868961?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/09/aplicacion-de-rails-3-con-mongodb.html" title="Aplicación de Rails 3 con MongoDB" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>4</thr:total></entry><entry gd:etag="W/&quot;Ak8EQHY_cSp7ImA9Wx5XFU0.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-2565564660292470088</id><published>2010-09-13T08:38:00.001-07:00</published><updated>2010-09-14T17:00:01.849-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-14T17:00:01.849-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tijuanarb" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Primera Reunion de tijuana.rb</title><content type="html">&lt;p style="clear: both"&gt;&lt;img src="http://lh6.ggpht.com/_COcsfdYwI20/TI5FYhp1RjI/AAAAAAAAFeY/N3Un6cFhAG0/s800/tijuanarb-1-thumb.png" height="206" width="184" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;Ven y asiste a la primera reunion del grupo de usuario Ruby/Rails de Tijuana, &lt;strong&gt;tijuana.rb&lt;/strong&gt;, este proximo miércoles 22 de Septiembre en el Starbucks Lucerna de la Zona Río, a partir de las 7pm. &lt;/p&gt;&lt;p style="clear: both"&gt;En esta primera reunión, Sergio Lopez (@&lt;a href="http://twitter.com/bitfon" target="_blank"&gt;bitfon&lt;/a&gt;) nos platicará sobre @&lt;a href="http://twitter.com/heroku" target="_blank"&gt;heroku&lt;/a&gt;, un hosting para Ruby/Rails con cuentas gratuitas. &lt;s&gt;Estamos a la espera de la confirmación de una plática más&lt;/s&gt;. Fernando Castellanos(@&lt;a href="http://twitter.com/fcastellanos" target="_blank"&gt;fcastellanos&lt;/a&gt;) ya se apuntó con una platica sobre como usar MongoDB con Rails.&lt;/p&gt;&lt;p style="clear: both"&gt;Para los que me han preguntado sobre como iniciar con Ruby, le dejo esta &lt;a href="http://bit.ly/bsIIBJ" target="_blank"&gt;liga&lt;/a&gt; a un post "larguísimo" que escribí con ejemplos y aunque es sobre IronRuby funciona igual con Ruby. Si alguien lo quiere ver en video &lt;a href="http://bit.ly/9S304S" target="_blank"&gt;aquí&lt;/a&gt; esta la sesión grabada en ALT.NET Hispano.&lt;br /&gt;&lt;br /&gt;Para estar al pendiente de lo que sucede con tijuana.rb únete al &lt;a href="http://bit.ly/ajuFZD" target="_blank"&gt;Google Group&lt;/a&gt; o sigue a @&lt;a href="http://twitter.com/tijuanarb" target="_blank"&gt;tijuanarb&lt;/a&gt; en twitter.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-2565564660292470088?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/2565564660292470088/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=2565564660292470088" title="5 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/2565564660292470088?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/2565564660292470088?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/09/primera-reunion-de-tijuanarb.html" title="Primera Reunion de tijuana.rb" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_COcsfdYwI20/TI5FYhp1RjI/AAAAAAAAFeY/N3Un6cFhAG0/s72-c/tijuanarb-1-thumb.png" height="72" width="72" /><thr:total>5</thr:total></entry><entry gd:etag="W/&quot;Ck4CQXw4cCp7ImA9Wx5QE0Q.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-9197541470537794929</id><published>2010-09-01T18:29:00.001-07:00</published><updated>2010-09-01T18:29:20.238-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-01T18:29:20.238-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Localización de fechas en Rails</title><content type="html">&lt;p style="clear: both"&gt;Al estar trabajando en un sitio/aplicación para un cliente bajo el CMS &lt;a href="http://refinerycms.com/" target="_blank"&gt;RefineryCMS&lt;/a&gt;, cambie el idioma de CMS a español, pero las fecha seguían apareciendo en formato en Inglés, ej: September 01, en lugar de 01 de Septiembre.&lt;/p&gt;&lt;p style="clear: both"&gt;Aun y cuando ya tenia instalado el archivo &lt;a href="http://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/es-MX.yml" target="_blank"&gt;es-MX.yml&lt;/a&gt; en el directorio locale y Rails estaba localizando otros textos pero no las fechas. En el archivo yml encontramos la siguiente estructura:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt; date:&lt;/p&gt;&lt;p style="clear: both"&gt; order: [:day, :month, :year]&lt;/p&gt;&lt;p style="clear: both"&gt; abbr_day_names: [Dom, Lun, Mar, Mie, Jue, Vie, Sab]&lt;/p&gt;&lt;p style="clear: both"&gt; abbr_month_names: [~, Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Sep, Oct, Nov, Dic]&lt;/p&gt;&lt;p style="clear: both"&gt; day_names: [Domingo, Lunes, Martes, Miércoles, Jueves, Viernes, Sábado]&lt;/p&gt;&lt;p style="clear: both"&gt; month_names: [~, Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Noviembre, Diciembre]&lt;/p&gt;&lt;p style="clear: both"&gt; formats:&lt;/p&gt;&lt;p style="clear: both"&gt; short: "%d de %b"&lt;/p&gt;&lt;p style="clear: both"&gt; default: "%d/%m/%Y"&lt;/p&gt;&lt;p style="clear: both"&gt; long: "%A, %d de %B de %Y"&lt;/p&gt;&lt;p style="clear: both"&gt; formal: "%d de %B"&lt;/p&gt;&lt;p style="clear: both"&gt; time:&lt;/p&gt;&lt;p style="clear: both"&gt; formats:&lt;/p&gt;&lt;p style="clear: both"&gt; short: "%d de %b a las %H:%M hrs"&lt;/p&gt;&lt;p style="clear: both"&gt; default: "%a, %d de %b de %Y a las %H:%M:%S %Z"&lt;/p&gt;&lt;p style="clear: both"&gt; long: "%A, %d de %B de %Y a las %I:%M %p"&lt;/p&gt;&lt;p style="clear: both"&gt; am: "am"&lt;/p&gt;&lt;p style="clear: both"&gt; pm: "pm"&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;En donde en Date:Formats:Formal encontramos "%d de %B, con lo que esperaria formatos de fecha 01 de Septiembre.&lt;/p&gt;&lt;p style="clear: both"&gt;Resulta que con:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;t (:formal, :scope =&amp;gt; [:date, :formats])&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;podemos leer el formato "%d de %B del archivo de localización, pero ahora el problema es ¿como le indicamos a la fecha que formato usar?, bueno para eso usamos I18n, donde pasamos la fecha a formatear y el formato de acuerdo al idioma de la aplicación:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;I18n::localize(date, :format =&amp;gt; t (:formal, :scope =&amp;gt; [:date, :formats]))&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Ahora el único problema es que este código es bastante largo para colocarlo dentro de una vista, por lo que podemos mandarlo a un método helper de la siguiente forma: &lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt; def localize_short_date(date)&lt;/p&gt;&lt;p style="clear: both"&gt; I18n::localize(date, :format =&amp;gt; t (:formal, :scope =&amp;gt; [:date, :formats]))&lt;/p&gt;&lt;p style="clear: both"&gt; end&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Con esto en nuestra vista solo llamamos:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;&amp;lt;%= localize_short_date Date.now %&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Y nos aseguramos que la fecha es desplegada en el formato definido y localizada al idioma de la aplicación Rails.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-9197541470537794929?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/9197541470537794929/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=9197541470537794929" title="2 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/9197541470537794929?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/9197541470537794929?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/09/localizacion-de-fechas-en-rails.html" title="Localización de fechas en Rails" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;Ck4CQn49eSp7ImA9Wx5RFkw.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-8129623922183725090</id><published>2010-08-23T17:49:00.001-07:00</published><updated>2010-08-23T17:49:23.061-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-23T17:49:23.061-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Presentaciones de Ruby on Rails</title><content type="html">&lt;p style="clear: both"&gt;&lt;img src="http://lh5.ggpht.com/_COcsfdYwI20/THMXBXHIPLI/AAAAAAAAFd4/LIDQNog1_jw/s800/Desarrollando_en_Ruby_on_Rails_-_Rails-thumb.mx.png" height="127" width="206" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;Este próximo sábado 28 de Agosto estaré participando en el evento en línea "&lt;a href="http://tv.rails.mx/platforms/rails-mx/event/desarrollando-en-ruby-on-rails" target="_blank"&gt;Desarrollando en Ruby On Rails&lt;/a&gt;", durante todo el sábado habrán una serie de charlas que cubren diversos aspectos del desarrollo de Ruby On Rails. &lt;/p&gt;&lt;p style="clear: both"&gt;En mi caso estaré participando con la plática "&lt;a href="http://tv.rails.mx/platforms/rails-mx/presentation/vistas-con-haml-y-less" target="_blank"&gt;Vistas en Rails&lt;/a&gt;" en la cual platicaré sobre facilidades que nos proporcionar Ruby On Rails al desarrollar nuestras UI.&lt;/p&gt;&lt;p style="clear: both"&gt;Para ver las platicas solo es necesario ingresar el sábado a &lt;a href="http://tv.rails.mx" target="_blank"&gt;tv.rails.mx&lt;/a&gt;, recuerden que el horario de las platicas es del centro de México (CDT -05).&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://lh4.ggpht.com/_COcsfdYwI20/THMXCrc-sSI/AAAAAAAAFeA/-5F0L2G5RcQ/s800/Software_Freedom_Day_2010___Grupo_de_usuarios_GNU___Linux_Tijuana__Baja_California_Me_xico-thumb..png" height="78" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;Ademas, los chicos del &lt;a href="http://gultij.org" target="_blank"&gt;Grupo de Usuarios Linux de Tijuana&lt;/a&gt; están organizando el "&lt;a href="http://gultij.org/node/213" target="_blank"&gt;Día Mundial del Software Libre&lt;/a&gt;" para este 18 de Septiembre, donde tambien ya me invitaron a dar la plática de "Desarrollo Web a la Rails" - un no tengo el horario -.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://lh4.ggpht.com/_COcsfdYwI20/THMXD1PxfzI/AAAAAAAAFeI/0cdQJjuqZlc/s800/tijuanarb-2-thumb.png" height="206" align="left" width="184" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;Así que si les interesa Ruby On Rails, no lo piensen y acompañenme en ambos o alguno de los eventos. Adicionalmente y de manera no-oficial, los invito a la Comunidad Tijuana.rb, comunidad sobre Ruby y Ruby On Rails de Tijuana, aunque aun no tenemos sitio web, ni reuniones, ya hay actividad en el &lt;a href="http://groups.google.com/group/tijuanarb" target="_blank"&gt;grupo de la comunidad&lt;/a&gt; en Google Groups, asi como en la cuenta de twitter &lt;a href="http://twitter.com/tijuanarb" target="_blank"&gt;@tijuanarb&lt;/a&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-8129623922183725090?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/8129623922183725090/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=8129623922183725090" title="1 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/8129623922183725090?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/8129623922183725090?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/08/presentaciones-de-ruby-on-rails.html" title="Presentaciones de Ruby on Rails" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_COcsfdYwI20/THMXBXHIPLI/AAAAAAAAFd4/LIDQNog1_jw/s72-c/Desarrollando_en_Ruby_on_Rails_-_Rails-thumb.mx.png" height="72" width="72" /><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;AkEHRX8_cSp7ImA9Wx5REUg.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-5232429375202469771</id><published>2010-08-18T12:06:00.002-07:00</published><updated>2010-08-18T12:10:34.149-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-18T12:10:34.149-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Opensource" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>El Gobierno y el Opensource</title><content type="html">&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span style="letter-spacing: 0.0px"&gt;Hace algunos días, ya a punto de terminar el cuatrimestre en una de las materias que impartí en el &lt;a href="http://www.cesun.edu.mx"&gt;Cesun&lt;/a&gt;, les preguntaba a los alumnos su opinión sobre si el gobierno debería de usar o no el Opensource.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span style="letter-spacing: 0.0px"&gt;La respuesta fue unánime, todos estuvieron de acuerdo en que si, de que el gobierno antes de decidir comprar algún software, debería primero ver si existe su contraparte libre y usarla si es factible; las razones que me dieron fueron varias:&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Un ahorro considerable de dinero por cuestión de licencias de software&lt;/li&gt;&lt;li&gt;Mas transparencia en las compras de software o no compras&lt;/li&gt;&lt;li&gt;Desarrollar un mercado diferente de TI&lt;/li&gt;&lt;li&gt;Respuesta mas rápida a fallos de seguridad&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;    &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span style="letter-spacing: 0.0px"&gt;Después vino la pregunta, ¿y si el gobierno necesita desarrollar algún sistema, este desarrollo debe liberarse como Opensource o no?; al principio se vieron unos a otros, tratando de valorar la idea; les aclare que generalmente cuando el gobierno necesita de una aplicación especifica para llevar a cabo su labor tiene dos opciones, desarrollarla internamente o licitar el proyecto a un tercero, en ambos casos el gobierno paga por ese desarrollo.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span style="letter-spacing: 0.0px"&gt;Al escuchar esta explicación, discutieron un poco, pero al final también llegaron a la misma conclusión, que el desarrollo debería ser liberado como Opensource, los motivos fueron los siguientes:&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Ser mas transparentes con los costos de desarrollo y poder evaluar si lo que cobro una empresa externa realmente lo vale o no&lt;/li&gt;&lt;li&gt;Asegurarse que el gobierno recibe el código fuente de la aplicación y así ya no depender de la empresa externa, si es que ya no se desea depender&lt;/li&gt;&lt;li&gt;Darle la oportunidad a otros gobiernos de hacer uso de la aplicación si es que le es útil&lt;/li&gt;&lt;li&gt;Evitar que empresas hagan un desarrollo pagado y luego lo vendan a otros gobiernos&lt;/li&gt;&lt;li&gt;Crear ecosistemas de servicios alrededor de estas aplicaciones&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;     &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span style="letter-spacing: 0.0px"&gt;Si bien este ejercicio no tiene un sustento solido, creo que si podríamos estar de acuerdo con algunos puntos, si no es que todos; y tal es así que en el pasado han habido iniciativas para tratar de usar Opensource en el gobierno, aunque no han cristalizado del todo.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span style="letter-spacing: 0.0px"&gt;En &lt;a href="http://alt1040.com"&gt;alt1040&lt;/a&gt; hay un post llamado "&lt;a href="http://alt1040.com/2010/08/cuando-el-gobierno-mexicano-se-decidio-por-el-software-libre"&gt;Cuando el gobierno mexicano se decidió por el software libre&lt;/a&gt;" y narra como el gobierno de Vicente Fox tuvo que apostar por el Opensource, e inclusive se hicieron &lt;a href="http://softwarelibre.fox.presidencia.gob.mx/"&gt;análisis sobre factibilidad del Opensource en el gobierno&lt;/a&gt;; pero después los "Amigos de Fox" se convirtieron en los "&lt;a href="http://www.jornada.unam.mx/2004/05/17/016n1pol.php"&gt;Amigos de Microsoft&lt;/a&gt;" y con la llegada de Calderón el panorama del Opensource no mejoro.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span style="letter-spacing: 0.0px"&gt;Aun así, hace unos días salió a la luz que la CFE esta haciendo un &lt;a href="http://vivirmexico.com/2010/08/campus-party-software-libre-en-el-gobierno-cfe"&gt;esfuerzo por migrar su plataforma tecnológica a Opensource&lt;/a&gt;, buscando lograr un ahorro en licencias y ser una empresa un poco mas abierta.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span style="letter-spacing: 0.0px"&gt;Se le aplaude el esfuerzo y ojalá otras paraestales y gobiernos sigan el mismo ejemplo.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span style="letter-spacing: 0.0px"&gt;¿Y ustedes que opinan, debe el gobierno acercase seriamente al Opensource o no?, ¿se debería de abrir un foro en el gobierno local, por ejemplo de Tijuana, para discutir con el nuevo Presidente electo - el de verdad, no el otro - Bustamante la factibilidad?, ¿será necesario la creación de comité de informática, donde estén escuelas y organismos TI para regular el desarrollo TI del gobierno local?&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-5232429375202469771?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/5232429375202469771/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=5232429375202469771" title="10 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/5232429375202469771?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/5232429375202469771?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/08/el-gobierno-y-el-opensource.html" title="El Gobierno y el Opensource" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>10</thr:total></entry><entry gd:etag="W/&quot;Dk8CSXY6eyp7ImA9Wx5TFU4.&quot;"><id>tag:blogger.com,1999:blog-9839491.post-7983265080052366574</id><published>2010-07-30T16:59:00.002-07:00</published><updated>2010-07-30T17:07:48.813-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-30T17:07:48.813-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>Recursos de ASP.NET MVC</title><content type="html">Debido a un posible próximo proyecto con un cliente, me solicito le pasara una lista de recursos para conocer ASP.NET MVC, ya que su idea original era realizar el proyecto con ASP.NET Webforms, pero después de hablarle un poco de MVC y realizarle algunos demos, su interés por el mismo crecio.&lt;br /&gt;&lt;br /&gt;De algunas de las platicas que tuve con él, al principio no estaba muy convencido, debido a que como él me lo comento "parece que en MVC tienes que hacer las cosas a mano", ya que no haríamos uso del "drag and drop" ni de la suite de controles web de Infragistics como él deseaba. Mis puntos para que se interesara en MVC fueron los siguientes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El patrón de MVC es una "receta" probada por varias décadas&lt;/li&gt;&lt;li&gt;El usar MVC generalmente implica el uso de otra serie de patrones adicionales para resolver otros problemas en la aplicación&lt;/li&gt;&lt;li&gt;Aplicando estas "recetas" ayuda a que el desarrollo de la aplicacion sea mas uniforme si se siguen ciertos lineamientos, los cuales creo que son mucho mas claros si los comparamos con una aplicacion de Webforms&lt;/li&gt;&lt;li&gt;El usar MVC crea una linea de complejidad de la aplicacion mas estable, la cual puede ser un poco alta para pequeños proyectos, mas no asi para medianos y grandes, donde esta complejidad es mas uniforme, en cambio con Webforms la complejidad si es muy baja en proyectos pequeños, pero esta se va incrementando casi exponencial con proyectos mas grandes.&lt;/li&gt;&lt;li&gt;Otro punto importante es que en MVC se puede desarrollar y probar funcionalidad de la aplicación de manera aislada, mediante el uso de tecnicas y herramientas como: mocks, stubs, TDD o BDD, lo que permite ir creando bloques estables de la aplicacion e irla creciendo organicamente.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;div&gt;A final de cuentas, no se cual sea la decision del cliente con respecto al proyecto, espero me sea favorable, pero mientras tanto aqui les dejo el listado de recursos que le hice llegar sobre ASP.NET MVC esperando que les sirva de algo.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Libros interesantes&lt;/div&gt;&lt;div&gt;- ASP.NET MVC in Action 1 y 2 &lt;a href="http://www.manning.com/palermo/"&gt;http://www.manning.com/palermo/&lt;/a&gt; y &lt;a href="http://www.manning.com/palermo2/"&gt;http://www.manning.com/palermo2/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- Brownfield Application Development in .NET &lt;a href="http://www.manning.com/baley/"&gt;http://www.manning.com/baley/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Herramientas y arquitectura&lt;/div&gt;&lt;div&gt;- SharpArchitecture, framework para MVC &lt;a href="http://sharparchitecture.net/"&gt;http://sharparchitecture.net/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- NHibernate, ORM para .NET &lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/Default.aspx"&gt;http://blogs.hibernatingrhinos.com/nhibernate/Default.aspx&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- Arquitectura de Cebolla, parte 1 y 2 &lt;a href="http://mario-chavez.blogspot.com/2008/07/la-arquitectura-de-cebolla-parte-1.html"&gt;http://mario-chavez.blogspot.com/2008/07/la-arquitectura-de-cebolla-parte-1.html&lt;/a&gt; y &lt;a href="http://mario-chavez.blogspot.com/2008/08/la-arquitectura-de-cebolla-parte-2.html"&gt;http://mario-chavez.blogspot.com/2008/08/la-arquitectura-de-cebolla-parte-2.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- El patrón MVC &lt;a href="http://mario-chavez.blogspot.com/2008/09/programacin-web-patrn-mvc.html"&gt;http://mario-chavez.blogspot.com/2008/09/programacin-web-patrn-mvc.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Videos&lt;/div&gt;&lt;div&gt;- ASP.NET MVC &lt;a href="http://www.asp.net/mvc"&gt;http://www.asp.net/mvc&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- Comunidad ALT.NET Hispano &lt;a href="http://altnet-hispano.pbworks.com/Historial-de-reuniones"&gt;http://altnet-hispano.pbworks.com/Historial-de-reuniones&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- Videos de MVCConf &lt;a href="http://www.viddler.com/explore/mvcconf/videos"&gt;http://www.viddler.com/explore/mvcconf/videos&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- Comunidad C4MVC.NET &lt;a href="http://www.c4mvc.net/Home/Events"&gt;http://www.c4mvc.net/Home/Events&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- Tekpub, videos de paga &lt;a href="http://tekpub.com/production/aspmvc"&gt;http://tekpub.com/production/aspmvc&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Recursos de sitios y páginas interesantes&lt;/div&gt;&lt;div&gt;- Blog de HeadSpring &lt;a href="http://www.headspringsystems.com/community/blogs/"&gt;http://www.headspringsystems.com/community/blogs/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- Blog de Mario Cornejo &lt;a href="http://twitter.com/mhcornejo"&gt;@mhcornejo&lt;/a&gt;&lt;a href="http://www.developeando.com/search/label/ASP.NET%20MVC"&gt; http://www.developeando.com/search/label/ASP.NET%20MVC&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- Links de Gabriel Flores &lt;a href="http://twitter.com/gabo"&gt;@gabo&lt;/a&gt; &lt;a href="http://delicious.com/gabofr/mvc"&gt;http://delicious.com/gabofr/mvc&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- Links de Mario Cornejo &lt;a href="http://twitter.com/mhcornejo"&gt;@mhcornejo&lt;/a&gt; &lt;a href="http://delicious.com/mhcornejo/mvc"&gt;http://delicious.com/mhcornejo/mvc&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- Links de Eber Irigoyen &lt;a href="http://twitter.com/ebersys"&gt;@ebersys&lt;/a&gt;&lt;a href="http://www.google.com/reader/shared/user/00321597721557820145/label/aspnetmvc"&gt; http://www.google.com/reader/shared/user/00321597721557820145/label/aspnetmvc&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- Anuncio de ASP.NET MVC 3 &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx &lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9839491-7983265080052366574?l=mario-chavez.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://mario-chavez.blogspot.com/feeds/7983265080052366574/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9839491&amp;postID=7983265080052366574" title="2 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/7983265080052366574?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9839491/posts/default/7983265080052366574?v=2" /><link rel="alternate" type="text/html" href="http://mario-chavez.blogspot.com/2010/07/recursos-de-aspnet-mvc.html" title="Recursos de ASP.NET MVC" /><author><name>Mario Alberto Chavez</name><uri>http://www.blogger.com/profile/04570765777367735469</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_COcsfdYwI20/S3hrFKrVjLI/AAAAAAAAFYk/wkC7_tMLqmc/S220/photo.jpg" /></author><thr:total>2</thr:total></entry></feed>

