<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Jaime Iniesta</title>
 <updated>2010-01-20T20:19:53-08:00</updated>
 <id>http://jaimeiniesta.com/</id>
 <author>
   <name>Jaime Iniesta</name>
   <email>jaimeiniesta@gmail.com</email>
 </author>
 
 
 <entry>
   <title>Planetoid 0.1.6 released</title>
   <link href="http://jaimeiniesta.com/2010/01/20/planetoid-0.1.6-released.html"/>
   <updated>2010-01-20T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2010/01/20/planetoid-0.1.6-released</id>
   <content type="html">&lt;p&gt;I've released a new version of &lt;a href=&quot;http://github.com/jaimeiniesta/planetoid&quot;&gt;Planetoid&lt;/a&gt;, a lightweight planet for small teams that can be used as a feed aggregator and projects portfolio.&lt;/p&gt;


&lt;p&gt;This new version includes has been tested under Ruby on Rails 2.3.6 and provides integration with &lt;a href=&quot;http://slideshare.net&quot;&gt;Slideshare&lt;/a&gt; accounts (even &lt;a href=&quot;http://planeta.aspgems.com/javier-ramirez&quot;&gt;showing the slides directly&lt;/a&gt; on the planet), as well as &lt;a href=&quot;http://del.icio.us&quot;&gt;Del.icio.us&lt;/a&gt; accounts. Thanks for &lt;a href=&quot;http://github.com/javier&quot;&gt;Javier Ramírez&lt;/a&gt; and &lt;a href=&quot;http://github.com/ceritium&quot;&gt;José Galisteo&lt;/a&gt; for their respective forks, which introduced these new features.&lt;/p&gt;


&lt;p&gt;Planetoid is currently being used by several teams / companies out there, including:&lt;/p&gt;


&lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://spainrb.org&quot;&gt;spainrb.org&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://planeta.aspgems.com&quot;&gt;planeta.aspgems.com&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://planet.flowersinspace.com&quot;&gt;planet.flowersinspace.com&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://planet.beecoder.com&quot;&gt;planet.beecoder.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I'm planning new releases including support for Liquid templates and i18n, if there's any feature you'd like to see added (or removed!) just drop me a line. Thanks!&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Lessons Learned Playing With SSL</title>
   <link href="http://jaimeiniesta.com/2010/01/11/lessons-learned-playing-with-ssl.html"/>
   <updated>2010-01-11T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2010/01/11/lessons-learned-playing-with-ssl</id>
   <content type="html">&lt;p&gt;I've been lately configurig SSL encryption for logins on Rails applications, and I've learned some interesting tips that I'd like to share with you. This is not meant, however, to be a complete tutorial -there's a lot of good stuff already published about this- but just some quick tips that I hope can be helpful.&lt;/p&gt;


&lt;h3&gt;Sniff your own passwords&lt;/h3&gt;


&lt;p&gt;Surely you've heard about password sniffers but never used one. Believe me, sniffing user passwords is as easy as using one of those little password sniffing programs on a public network, maybe the wifi on your favorite café or while you're getting bored attending a tech talk. Just launch it and wait for something to come.&lt;/p&gt;


&lt;p&gt;Take &lt;a href=&quot;http://ettercap.sourceforge.net/&quot;&gt;ettercap&lt;/a&gt;, for instance. You can install it on Mac OS X with a simple &lt;strong&gt;&quot;sudo port install ettercap-ng&quot;&lt;/strong&gt; and then launch it on text mode with &lt;strong&gt;&quot;sudo ettercap -T&quot;&lt;/strong&gt;. This will catch a lot of packets on your network so you want to filter out the ones containing a given string, like this &lt;strong&gt;&quot;sudo ettercap -T | grep password&quot;&lt;/strong&gt;. Try it on your non-encrypted app and you'll soon be convinced of the need of encrypting your login and signup forms.&lt;/p&gt;


&lt;h3&gt;SSL Requirement plugin is your friend&lt;/h3&gt;


&lt;p&gt;I guess you already knew about this great plugin but in case not, here it goes: &lt;a href=&quot;http://github.com/rails/ssl_requirement&quot;&gt;SSL Requirement&lt;/a&gt;. As it's explained on its README, &lt;em&gt;SSL requirement adds a declarative way of specifying that certain actions should only be allowed to run under SSL, and if they're accessed without it, they should be redirected.&lt;/em&gt;. Easy as pie, you just tell what actions you want to require SSL, and the plugin will redirect the user as needed.&lt;/p&gt;


&lt;h3&gt;You don't need HTTPS everywhere&lt;/h3&gt;


&lt;p&gt;It's up to you to decide what parts of your application should be covered by SSL. You can encrypt the whole application if you want but in most cases this is unnecessary, and will make your application slower. For most cases, you only want to encrypt the communications where private data is involved, and that probably means you're happy covering only the login and signup forms. So, you could just tell SSL Requirement to require SSL on those parts of the app, right?&lt;/p&gt;


&lt;p&gt;Well, more or less, you've got to be careful with that. What will happen for example if you have a public site with a lot of different sections, and a login form on the header? Does this mean you've got to require SSL on all pages showing a login form? The answer is, it depends. It depends on how you specify your action URL on the login form:&lt;/p&gt;


&lt;p&gt;
    &lt;ol&gt;
        &lt;li&gt;form action=&quot;/session&quot;&lt;/li&gt;
        &lt;li&gt;form action=&quot;https://example.com/session&quot;&lt;/li&gt;
    &lt;/ol&gt;
&lt;/p&gt;


&lt;p&gt;If you specify the form action on the first way, you're not telling the server or protocol you want to send the form to, so the browsers will assume it's meant for the same server and protocol. What this means is that this kind of forms should be accessed through HTTPS, because if you do it through normal HTTP, they will not be sent encrypted.&lt;/p&gt;


&lt;p&gt;The second option is better, as it is explicitly telling the browsers that you want to send this login form through HTTPS, so it will encrypt your data when sending it.&lt;/p&gt;


&lt;p&gt;In my case, I'm using the restful_authentication plugin, and the action on the login form is generated by the form_tag helper like this:&lt;/p&gt;


&lt;pre&gt;form_tag session_url&lt;/pre&gt;


&lt;p&gt;Remember to use &lt;strong&gt;session_url&lt;/strong&gt; (and not session_path) so that the URL includes the full path including the protocol and the server.&lt;/p&gt;


&lt;p&gt;Next, you can tell your rails application you want to use HTTPS on session_url with the &lt;strong&gt;:requirements&lt;/strong&gt; option on your routes.rb, like this:&lt;/p&gt;


&lt;pre&gt;map.resource  :session, :requirements =&gt; { :protocol =&gt; 'https' }&lt;/pre&gt;


&lt;h3&gt;Avoid mixed content warnings&lt;/h3&gt;


&lt;p&gt;Some browsers, like Internet Explorer, will complain about &quot;mixed content&quot; if you load HTTP assets on a page requested through HTTPS. This is kinda stupid and paranoid, but it's the way they behave, and we have to live with it.&lt;/p&gt;


&lt;p&gt;This &quot;mixed content warning&quot; can be a problem when we're using asset hosts to speed up the loading our application. Let's say you've configured your rails app so assets will be loaded from your asset hosts, like as0.example.com, as1.example.com, etc. The trouble here is that if you visit https://example.com to get an encrypted page, it will contain assets from non-encrypted URLS like http://as0.example.com, and these paranoid browsers will complain about that.&lt;/p&gt;


&lt;p&gt;There's a nice solution to this problem, which involves using procs to decide if you can safely use asset hosts or not, based on the protocol of the request. You can read about this on &lt;a href=&quot;http://www.commonmediainc.com/2008/07/15/rails-asset-hosts-and-ssl/&quot;&gt;Rails asset hosts and SSL&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;Any more tips?&lt;/h3&gt;


&lt;p&gt;That's all I wanted to talk about for today. If you've got additional tips to share please participate!&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Blogging from TextMate</title>
   <link href="http://jaimeiniesta.com/2010/01/10/blogging-from-textmate.html"/>
   <updated>2010-01-10T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2010/01/10/blogging-from-textmate</id>
   <content type="html">&lt;p&gt;So, I've finally made the move from Wordpress to &lt;a href=&quot;http://jekyllrb.com&quot;&gt;Jekyll&lt;/a&gt; that I was thinking about. Guess I was in need for a change: although Wordpress is a great blogging tool, perhaps the most complete of them all, I just needed something smaller. What about just using the same tools I use everyday as a coder? TextMate, git, and Ruby. Yeah, Jekyll seemed the perfect choice.&lt;/p&gt;


&lt;p&gt;Happily, my friend Bálint Érdi &lt;a href=&quot;http://codigoergosum.com/2010/01/04/new-year-new-blog.html&quot;&gt;posted recently&lt;/a&gt; on his new blog &lt;a href=&quot;http://codigoergosum.com&quot;&gt;Codigo Ergo Sum&lt;/a&gt; some links to the tools and documentation needed for Jekyll configuration, and also for the migration of contents from Wordpress, including both posts and comments, which are now hosted on &lt;a href=&quot;http://disqus.com&quot;&gt;Disqus&lt;/a&gt;. Thanks to Bálint, it's been super-easy and really fun to do this migration.&lt;/p&gt;


&lt;p&gt;So, no more WYSIWYG forms to post on the blog, let's publish like real coders do: &lt;em&gt;git pushing&lt;/em&gt;.&lt;/p&gt;


&lt;p&gt;Once again, thanks to Bálint for his post and sorry for such a shameless copy of his stylesheets: they'll soon be changed to my own styles. Thanks!&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Conferencia Rails 2009 - Call for papers</title>
   <link href="http://jaimeiniesta.com/2009/09/09/conferencia-rails-2009-call-for-papers.html"/>
   <updated>2009-09-09T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2009/09/09/conferencia-rails-2009-call-for-papers</id>
   <content type="html">&lt;p&gt;&lt;img title=&quot;logo&quot; src=&quot;/uploads/2009/09/logo.png&quot; alt=&quot;logo&quot; width=&quot;270&quot; height=&quot;80&quot; align=&quot;right&quot; /&gt;So, summer is almost gone and it's time to start again with the organization of &lt;strong&gt;Conferencia Rails&lt;/strong&gt; - the biggest rails conf held in Spain.&lt;/p&gt;

&lt;p&gt;We've been organizing this event every year since 2006, and it's growing and just getting better year after year. This time we want to open our invitations to the English-speaking communities, so we encourage you, English-speaking rails developers, come and join us giving a talk or workshop.&lt;/p&gt;

&lt;p&gt;If you want to give a talk, you can send your proposals &lt;a href=&quot;http://app.conferenciarails.org/talks/new&quot;&gt;here&lt;/a&gt;. This year we want to encourage English people who wanna come with us and give talks (but notice that the most of the talks will be in Spanish).&lt;/p&gt;

&lt;p&gt;For more information, visit the &lt;a href=&quot;http://www.conferenciarails.org/&quot;&gt;oficial web&lt;/a&gt; or watch the recorded videos on &lt;a href=&quot;http://conferenciarails.blip.tv/&quot;&gt;our blip.tv channel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Conferencia Rails is a non-profit event organized by a group of volunteers, some of which were also on the organization of the successful &lt;a href=&quot;http://euruko2009.org/&quot;&gt;EuRuKo 2009&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>More planetoids!</title>
   <link href="http://jaimeiniesta.com/2009/06/26/more-planetoids.html"/>
   <updated>2009-06-26T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2009/06/26/more-planetoids</id>
   <content type="html">&lt;p style=&quot;text-align: left;&quot;&gt;I'm proud to see that more people are &lt;a href=&quot;http://github.com/jaimeiniesta/planetoid/network&quot;&gt;forking&lt;/a&gt; and using my little &lt;a href=&quot;http://github.com/jaimeiniesta/planetoid/tree/master&quot;&gt;planetoid&lt;/a&gt;, a rails application for building small communities online, with feed aggregation. I started building this feed aggregator as we needed a planet for our &lt;a href=&quot;http://spainrb.org&quot;&gt;Spain.rb&lt;/a&gt; association of Spanish rubyists, but I wanted to keep in mind that if this was helpful to a group like us, it could help other groups with similar needs.&lt;/p&gt;


&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://planeta.aspgems.com&quot;&gt;&lt;img title=&quot;ASPGems&quot; src=&quot;/uploads/2009/06/Imagen-21-150x150.png&quot; border=&quot;1&quot; alt=&quot;ASPGems&quot; hspace=&quot;5&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://planet.flowersinspace.com&quot;&gt;&lt;img title=&quot;Flowers In Space&quot; src=&quot;/uploads/2009/06/Imagen-32-150x150.png&quot; border=&quot;1&quot; alt=&quot;Flowers In Space&quot; hspace=&quot;5&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;What does planetoid allow you to do?&lt;/strong&gt;&lt;/p&gt;


&lt;ul style=&quot;text-align: left;&quot;&gt;
    &lt;li&gt;Show a summary of the people in a group, with their names, avatars, links to their blogs, twitters and github accounts.&lt;/li&gt;
    &lt;li&gt;Aggregate their feeds in one place&lt;/li&gt;
    &lt;li&gt;Show the projects that the members are working on, with title, a brief description, and a link&lt;/li&gt;
&lt;/ul&gt;


&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Who is using planetoid?&lt;/strong&gt;&lt;/p&gt;


&lt;p style=&quot;text-align: left;&quot;&gt;I keep a list of the sites that are using planetoid. As of today, these are some of the people using planetoid:&lt;/p&gt;


&lt;ul style=&quot;text-align: left;&quot;&gt;
    &lt;li&gt;&lt;a href=&quot;http://spainrb.org&quot;&gt;&lt;strong&gt;Spain.rb&lt;/strong&gt;&lt;/a&gt;. The Spanish rubyists community devoted to promote our work on the Ruby community, worldwide.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://planeta.aspgems.com&quot;&gt;&lt;strong&gt;ASPGems&lt;/strong&gt;&lt;/a&gt;. A Spanish Ruby on Rails company, based on Madrid.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://planet.flowersinspace.com&quot;&gt;&lt;strong&gt;Flowers In Space&lt;/strong&gt;&lt;/a&gt;. A Spanish Ruby on Rails company, from Seville.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://planetgirona.net&quot;&gt;&lt;strong&gt;Planet Girona&lt;/strong&gt;&lt;/a&gt;. Aggregating feeds from Girona blogs.&lt;/li&gt;
&lt;/ul&gt;


&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Want to join?&lt;/strong&gt;&lt;/p&gt;


&lt;p style=&quot;text-align: left;&quot;&gt;Just try it, it's easy to install as a rails application... I'm open for comments and suggestions so if you find it useful but you need a new feature just tell me. And if you use it, send me a note to add your site to the list!&lt;/p&gt;


&lt;p style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;&lt;a href=&quot;http://github.com/jaimeiniesta/planetoid&quot;&gt;github.com/jaimeiniesta/planetoid&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Configurar internet móvil Simyo en el macbook</title>
   <link href="http://jaimeiniesta.com/2009/06/25/configurar-internet-movil-simyo-en-el-macbook.html"/>
   <updated>2009-06-25T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2009/06/25/configurar-internet-movil-simyo-en-el-macbook</id>
   <content type="html">&lt;p&gt;Hace un par de días contraté el &lt;a href=&quot;https://www.simyo.es/simyo/portal/store/select-data-priceplan&quot;&gt;servicio de internet móvil por modem 3G (GPRS) de &lt;strong&gt;Simyo&lt;/strong&gt;&lt;/a&gt;, la tarifa de 5G al mes que viene con un &lt;strong&gt;módem Alcatel HSPA&lt;/strong&gt;, para poder trabajar este verano desde la playa. En principio se supone que es un módem USB plug-and-play, pero en la práctica tuve algún problemilla para hacerlo funcionar en el macbook. Finalmente, googleando un poco y fijándome en los parámetros de configuración al instalarlo en un ordenador con windows, pude ver qué le faltaba a la instalación en el macbook.&lt;/p&gt;

&lt;p&gt;La instalación es sencilla: enchufas el modem USB, y aparece una unidad de disco. Dentro hay un instalador (.PKG), doble clic, instalar y reiniciar la máquina. A partir de ahí basta con lanzar el programa &lt;strong&gt;HSPA USB MODEM&lt;/strong&gt;, te pide el PIN de la tarjeta del módem, lo introduces y en principio pulsarías Conectar y ya está. Pero esto es en Windows, en el macbook está mal hecha la instalación y falta configurar un perfil de conexión.&lt;/p&gt;

&lt;p&gt;Para ello clica en el último icono de abajo de abajo a la izquierda y selecciona &quot;Perfil de conexión&quot; en el menú desplegado:&lt;/p&gt;

&lt;p&gt;&lt;img title=&quot;simyo alcatel hspa&quot; src=&quot;/uploads/2009/06/Imagen-3.png&quot; alt=&quot;simyo alcatel hspa&quot; width=&quot;514&quot; height=&quot;544&quot; /&gt;&lt;/p&gt;

&lt;p&gt;en la siguiente pantalla debes añadir un nuevo perfil de conexión, y después activarlo:&lt;/p&gt;

&lt;p&gt;&lt;img title=&quot;simyo alcatel&quot; src=&quot;/uploads/2009/06/Imagen-4.png&quot; alt=&quot;simyo alcatel&quot; width=&quot;328&quot; height=&quot;192&quot; /&gt;&lt;/p&gt;

&lt;p&gt;estos son los parámetros de configuración necesarios:&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;size-full wp-image-387 alignnone&quot; title=&quot;Imagen 6&quot; src=&quot;/uploads/2009/06/Imagen-6.png&quot; alt=&quot;Imagen 6&quot; width=&quot;339&quot; height=&quot;203&quot; /&gt;
&lt;ul&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Cuenta&amp;lt;/strong&amp;gt;: simyo (o cualquier otro nombre, supongo)&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Número&amp;lt;/strong&amp;gt;: *99***1#&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;APN&amp;lt;/strong&amp;gt;: gprs-service.com&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/ul&gt;
Y ya está. Lo salvas, recuerda darle al botón &quot;Activar&quot;, y a partir de ahí ya puedes conectar a internet.&lt;/p&gt;

&lt;p&gt;A mi me va bastante bien, me llega a 2 Mb, que no está mal para estar en Girona.&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;text-decoration: line-through;&quot;&gt;Ahora me falta conseguir compartir mi conexión con el macbook de mi chica... se desconecta a los pocos segundos de hacerlo. Si alguien me puede echar una mano con esto, se lo agradezco de antemano!&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ACTUALIZACIÓN&lt;/strong&gt;: sí que se puede compartir la conexión entre macbooks! Debía ser cosa de mi firewall o así. El caso es que ya funciona, 2 macbooks conectándose a la vez con un mismo simyo.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Planetoid, a lightweight planet</title>
   <link href="http://jaimeiniesta.com/2009/05/21/planetoid-a-lightweight-planet.html"/>
   <updated>2009-05-21T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2009/05/21/planetoid-a-lightweight-planet</id>
   <content type="html">&lt;p&gt;I've released today &lt;strong&gt;&lt;a href=&quot;http://github.com/jaimeiniesta/planetoid&quot;&gt;planetoid&lt;/a&gt;&lt;/strong&gt;, a really simple and lightweight planet (feed aggregator) for small communities online.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;planetoid&lt;/strong&gt; will let you create users and feeds from their blogs, which will be parsed automatically and shown on the front page. You can set up a cron job to do this task automatically. planetoid is intentionally simple: I didn't want to create another multi-user blog engine, I just wanted to put together some blogs and show basic info about the authors, so you won't find here thinks like user registration or posts publication. You just provide info about the authors and their feeds, that's all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;planetoid&lt;/strong&gt; is inspired by &lt;a href=&quot;http://aintablog.com/&quot;&gt;Aintablog&lt;/a&gt;, which is a great piece of software but didn't give me what I was exactly needed at the moment.&lt;/p&gt;

&lt;p&gt;Code is available through &lt;a href=&quot;http://github.com/jaimeiniesta&quot;&gt;my github repository&lt;/a&gt;. Please keep in mind that this is an initial draft, fully working, but on a very initial state (I started writing it yesterday), so use it at your own risk :)&lt;/p&gt;

&lt;p&gt;Feedback will be greatly appreciated so please try it and comment what you like / dislike about it!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;planetoid&lt;/strong&gt; can be found here:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://github.com/jaimeiniesta/planetoid/tree/master&quot;&gt;http://github.com/jaimeiniesta/planetoid/tree/master&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Listen Hotmail, I'm no spammer!</title>
   <link href="http://jaimeiniesta.com/2009/05/20/listen-hotmail-im-no-spammer.html"/>
   <updated>2009-05-20T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2009/05/20/listen-hotmail-im-no-spammer</id>
   <content type="html">&lt;p&gt;Sometimes it looks like Microsoft's mission in this world is making web developers life miserable. Yes, I'm sure the World will be a better place when this company finally disappears, but it looks like we'll have to wait for a while for this to happen. For now, we'll have to follow their absurd rules and adapt our standards-compliant web applications to their own de facto standards.&lt;/p&gt;

&lt;p&gt;But this time I'm not talking about Internet Explorer, &lt;a href=&quot;http://www.google.es/search?q=hate+internet+explorer&quot;&gt;that stupid and paranoid browser we all hate&lt;/a&gt;. I'm talking about &lt;strong&gt;Hotmail&lt;/strong&gt;, &lt;a href=&quot;http://www.google.es/search?q=hate+hotmail&quot;&gt;that stupid and paranoid mail service we also hate&lt;/a&gt;. I really hate it because it makes me lose my time trying to convince them that I'm not a bloody spammer. Look, we've only sent a few testing emails from our production server and we've already been marked as spammers. This has to be corrected right now, what could happen when we launch the site for good and thousands of mails come out of it and get lost on the spam folders of those Hotmail users? And that if you're lucky enough to reach the spam folder :)&lt;/p&gt;

&lt;p&gt;OK, I've complained enough, I've got to live with it. Let's see some things that you can try to improve your mail sending, how to avoid being marked as spammer by Hotmail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stop sharing - if you can&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Basically, the problem with mails is that we tend to use shared mail servers for sending e-mail. We might be good guys, but we're on a shared server, so many other e-mails are being constantly sent from it by the other users and we just can't control it. Maybe your neighbour is selling viagra, who knows? The thing is, Hotmail will mark the whole mail server as a source of spam, even if you're not a spammer.&lt;/p&gt;

&lt;p&gt;The first tip would be using a dedicated server for sending email. Having a unique IP would help avoid those situations, but this might be overkill and expensive. In our case, we're hosted on EngineYard, and they provide these &lt;a href=&quot;http://forum.engineyard.com/forums/6/topics/82&quot;&gt;tips to improve e-mail deliverability&lt;/a&gt;. As they say, they have a solution that lets treat shared servers as trusty dedicated servers:
&lt;blockquote&gt;We’ve crafted a rather neat solution that allows you to utilize our shared mail systems while retaining your own dedicated sending IP. This insulates you (and your sending reputation) from being adversely (or positively) impacted by other clients.&lt;/blockquote&gt;
To do this, you need to configure a SPF record on your DNS:
&lt;blockquote&gt;&lt;span class=&quot;caps&quot;&gt;SPF&lt;/span&gt; stands for sender policy framework. It’s basically a &lt;span class=&quot;caps&quot;&gt;DNS&lt;/span&gt; record that MTAs can use to verify that a given host is allowed to send mail for your domain.&lt;/blockquote&gt;
It will depend on your domain control panel how to do this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Sender ID&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once this SPF record is set up on your DNS, you need to tell Hotmail this has been set up. You've got information about the &lt;a href=&quot;http://www.microsoft.com/mscorp/safety/technologies/senderid/default.mspx&quot;&gt;Sender ID framework&lt;/a&gt;, but basically you need to &lt;a href=&quot;http://support.msn.com/eform.aspx?productKey=senderid&amp;amp;amp;page=support_senderid_options_form_byemail&amp;amp;amp;ct=eformts&quot;&gt;submit your SPF record&lt;/a&gt; to them.&lt;/p&gt;

&lt;p&gt;That's a first step in order to clean your reputation in front of Hotmail. In one or two days you should receive response on your e-mail. In my case, they told me that they had added this SPF record to their systems, and that in 48 hours or so the changes would be propagated and I'd no longer be treated as a criminal.&lt;/p&gt;

&lt;p&gt;2 days later, things were much better. Most emails sent from our server to Hotmail reached the inboxes! We were happy for a few days, but after that, some Hotmail users told us they still were getting our emails on their spam folders or, even they just didn't get any message at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ask Microsoft directly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, I contacted directly Microsoft by replying to the email they sent me telling everything was OK. I showed them some of the Hotmail addresses that were still thinking we were spammers. One day later, they replied back. Quick! Basically they were saying:
&lt;blockquote&gt;&lt;span lang=&quot;EN-US&quot;&gt;Your IP&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt; was blocked by Windows Live Hotmail because the majority of all the email that you send to Hotmail has been judged to be spam by Windows Live Hotmail's internal filtering system. We have conducted an investigation into the emails originating from your IP space and we have implemented a fix for your deliverability problem. This fix may take up to 48 hours to replicate completely throughout our system&lt;/span&gt;&lt;/blockquote&gt;
So well, it looks like the SPF submission wasn't enough. And they say they've applied a &quot;fix&quot;, I guess they'll be filtering out our domain or something. Anyway, they also provided links with &lt;a href=&quot;http://postmaster.msn.com/&quot;&gt;more info and burocracy&lt;/a&gt; I could try to convince them of our innocence. After reading this I went to their &lt;a href=&quot;http://postmaster.msn.com/Services.aspx#SenderSolutions&quot;&gt;Sender solutions&lt;/a&gt; section. There, I was interested on the &lt;a href=&quot;http://www.microsoft.com/senderid&quot;&gt;Sender ID&lt;/a&gt; program (that I tried before), the &lt;a href=&quot;http://www.senderscorecertified.com/&quot;&gt;Sender Score Certified Email&lt;/a&gt;, that looked very promising but you cannot apply to if you haven't got a dedicated IP, the &lt;a href=&quot;http://postmaster.msn.com/snds/&quot;&gt;Smart Network Data Services&lt;/a&gt;, which you can't control if you're not the owner of the server (I'll tell EngineYard to do this for me), and the &lt;a href=&quot;https://support.msn.com/eform.aspx?productKey=edfsjmrpp&amp;amp;amp;ct=eformts&quot;&gt;Junk Mail Reporting Partner Program&lt;/a&gt;, which I joined. And finally I even found &lt;a href=&quot;https://support.msn.com/eform.aspx?productKey=edfsmsbl&amp;amp;amp;ct=eformts&quot;&gt;another form you could submit&lt;/a&gt;, but also needed data from the owner of the server so I'll contact EngineYard for this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Final Solution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, that's all for now. No, there is no final solution. I'm still waiting to see if all these things help us improve our situation with Hotmail. If I learn something new, I'll tell you here - if you have suggestions, they're all welcome!&lt;/p&gt;

&lt;p&gt;&lt;span lang=&quot;EN-US&quot;&gt;
&lt;/span&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>EuRuKo 2009: That's all, folks!</title>
   <link href="http://jaimeiniesta.com/2009/05/10/euruko-2009-thats-all-folks.html"/>
   <updated>2009-05-10T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2009/05/10/euruko-2009-thats-all-folks</id>
   <content type="html">&lt;p&gt;&lt;img title=&quot;matz_jaime_small1&quot; src=&quot;/uploads/2009/05/matz_jaime_small1-300x199.jpg&quot; alt=&quot;matz_jaime_small1&quot; hspace=&quot;5&quot; width=&quot;300&quot; height=&quot;199&quot; align=&quot;right&quot; /&gt;So, there it is, we've done it, &lt;a href=&quot;http://euruko2009.org&quot;&gt;EuRuKo 2009&lt;/a&gt; is over!&lt;/p&gt;

&lt;p&gt;It has been a really pleasing experience for all of us on the organization team, we've had a really, really good time sharing ideas and code to organize the main european Ruby conference. I have to admit it, we were really surprised to see Spain was proposed as the candidate country last year in Prague. &lt;a href=&quot;http://www.jaimeiniesta.com/2008/03/30/euruko-2009-en-madrid/&quot;&gt;The czech team proposed Madrid&lt;/a&gt; as the candidate city to the group of spaniards that were there, and we were excited to hear it. We eventually &lt;a href=&quot;http://www.jaimeiniesta.com/2008/05/14/euruko-2009-en-barcelona/&quot;&gt;changed it to Barcelona instead&lt;/a&gt;, as Madrid was already quite full holding the &lt;a href=&quot;http://conferenciarails.org&quot;&gt;Conferencia Rails&lt;/a&gt; (that's the Spanish Rails Conference that is held every November and organized by ourselves by the way: it's amazing as well :D )&lt;/p&gt;

&lt;p&gt;So to set this up many things were made during this year: a new association was born, the &lt;a href=&quot;http://srug.org&quot;&gt;SRUG (Spanish Ruby Users Group)&lt;/a&gt;, which has been the organization in charge of the conference. We built a rails app to handle the registration process, talks listing and calendar, paypal payments and more - it was built over a simple app I did for the Conferencia Rails and made much bigger by &lt;a href=&quot;http://fernandoguillen.info&quot;&gt;Fernando Guillén&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/xuanxu&quot;&gt;Juanjo Bazán&lt;/a&gt; and &lt;a href=&quot;http://twitter.com/happywebcoder&quot;&gt;Raúl Murciano&lt;/a&gt;. The &lt;a href=&quot;http://github.com/fguillen/euruko_app/tree/master&quot;&gt;code of this app&lt;/a&gt; is freely available on github for use in other conferences, please fork us! We also received the help of the Scotland on Rails team, who sent us a pair of ruby scripts to build the &lt;a href=&quot;http://twitter.com/euruko_bot&quot;&gt;EuRuKo twitter bot&lt;/a&gt; and the &lt;a href=&quot;http://gist.github.com/92798&quot;&gt;raffle&lt;/a&gt;. Thanks guys!&lt;/p&gt;

&lt;p&gt;We even bought a &lt;a href=&quot;http://euruko2009.org/archives/2009/5/6/format_of_lightning_talks/&quot;&gt;gong for the lightning talks&lt;/a&gt; that will be passed from team to team during the next years conferences and will be a symbol for our descendants on the next centuries. :)&lt;/p&gt;

&lt;p&gt;Now it's time to pass the gong to the next country and start it over again for EuRuKo 2010. I hope they find as much fun as we did during 2009! See you next spring in Krakow!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Se acerca la EuRuKo 2009 Barcelona</title>
   <link href="http://jaimeiniesta.com/2009/02/26/se-acerca-la-euruko-2009-barcelona.html"/>
   <updated>2009-02-26T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2009/02/26/se-acerca-la-euruko-2009-barcelona</id>
   <content type="html">&lt;p&gt;Atención todo el mundo! La Conferencia de Ruby Europea por antonomasia, EuRuKo, abrirá sus puertas en breve.&lt;/p&gt;

&lt;p&gt;Desde el equipo de organización del evento ya tenemos casi lista la aplicación de registro, y está previsto abrirla en estos días, en cuanto ultimemos unos detallitos.&lt;/p&gt;

&lt;p&gt;Hemos ido recibiendo un buen montón de propuestas de charlas interesantes, pero aún queremos más! Si sabes de Ruby y te gustaría participar, aún estás a tiempo de enviar tu propuesta de charla a talks@euruko2009.org&lt;/p&gt;

&lt;p&gt;Y si eres diseñador, ¿te animas a participar en el concurso de camisetas?&lt;/p&gt;

&lt;p&gt;Más información en &lt;a href=&quot;http://euruko2009.org&quot;&gt;http://euruko2009.org&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>acts_like_a_forest</title>
   <link href="http://jaimeiniesta.com/2009/01/16/acts_like_a_forest.html"/>
   <updated>2009-01-16T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2009/01/16/acts_like_a_forest</id>
   <content type="html">&lt;p&gt;Take a look at this screencast about the &lt;strong&gt;acts_like_a_forest&lt;/strong&gt; plugin that will make you much happier and productive, with a clear and relaxed mind :P&lt;/p&gt;

&lt;p&gt;&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/U-zdrB3zCPw&amp;amp;hl=es&amp;amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/U-zdrB3zCPw&amp;amp;hl=es&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;Sometimes what your code needs is a relaxed approach into the problem you're trying to solve. If you're stuck, leave it for a while and go for a walk in the woods. Your subconscious will find the solution for you.&lt;/p&gt;

&lt;p&gt;This can also be combined with the &lt;a href=&quot;http://www.jaimeiniesta.com/2008/02/08/siesta-driven-development-sdd/&quot;&gt;Siesta-Driven Development&lt;/a&gt; methodology, too!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Abrimos el Call for Papers para la Euruko 2009</title>
   <link href="http://jaimeiniesta.com/2009/01/14/abrimos-el-call-for-papers-para-la-euruko-2009.html"/>
   <updated>2009-01-14T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2009/01/14/abrimos-el-call-for-papers-para-la-euruko-2009</id>
   <content type="html">&lt;p&gt;La Euruko 2009 va tomando forma! Acabamos de abrir el plazo de call for papers, así que si controlas Ruby y te gustaría dar una charla (en inglés), envíanos tu propuesta!&lt;/p&gt;

&lt;p&gt;Más información en &lt;a href=&quot;http://euruko2009.org/archives/2009/1/14/call_for_papers_euruko2009/&quot;&gt;el blog de Euruko 2009&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nos vemos en Barcelona!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Mi resumen del 2008</title>
   <link href="http://jaimeiniesta.com/2009/01/07/mi-resumen-del-2008.html"/>
   <updated>2009-01-07T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2009/01/07/mi-resumen-del-2008</id>
   <content type="html">&lt;p&gt;OK, ya estamos en 2009, y es un buen momento para pensar qué he hecho durante el 2008 antes de comenzar los nuevos proyectos de este año.
&lt;h3&gt;Proyectos para clientes&lt;/h3&gt;
2008 ha sido un año interesante, lleno de proyectos:
&lt;h4&gt;IKEA: El Hogar De...&lt;/h4&gt;
&lt;a href=&quot;http://elhogar.de/&quot;&gt;elhogar.de&lt;/a&gt;
En 2008 formé parte del equipo de desarrollo de Profesionalia para la nueva red social de IKEA &quot;El Hogar De&quot;, en la que los usuarios suben las fotos de sus casas, cuentan sus aventuras, charlan en foros y mucho más...&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://elhogar.de&quot;&gt;&lt;img class=&quot;aligncenter size-medium wp-image-306&quot; title=&quot;IKEA: el hogar de&quot; src=&quot;/uploads/2009/01/imagen-2-300x192.png&quot; alt=&quot;IKEA: el hogar de&quot; width=&quot;300&quot; height=&quot;192&quot; /&gt;&lt;/a&gt;
&lt;h4&gt;Arturo Álvarez&lt;/h4&gt;
&lt;a title=&quot;Arturo Álvarez&quot; href=&quot;http://www.arturo-alvarez.com&quot;&gt;www.arturo-alvarez.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El estudio del diseñador de lámparas gallego Arturo Álvarez crea algunas de las lámparas más raras y bellas que he visto en mi vida. Este proyecto comenzó como un gestor de contenidos que tenía en mente todos los detalles, hasta el tipo de bombilla utilizada por cada modelo de lámpara, pero el proyecto fué cambiando sobre la marcha y se convirtió en algo mucho más sencillo, una especie de gestor de contenidos orientado a subir imágenes. Y es que una imagen vale más que 1000 palabras.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.arturo-alvarez.es&quot;&gt;&lt;img class=&quot;aligncenter size-medium wp-image-303&quot; title=&quot;Arturo Alvarez&quot; src=&quot;/uploads/2009/01/imagen-1-300x175.png&quot; alt=&quot;Arturo Alvarez&quot; width=&quot;300&quot; height=&quot;175&quot; /&gt;&lt;/a&gt;
&lt;h4&gt;Ameets&lt;/h4&gt;
&lt;a href=&quot;http://ameets.com&quot;&gt;ameets.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¿Eres creativo? ¿Tienes un portfolio interesante? Entonces únete a la red de Ameets, una red social orientada a creativos que está creciendo a pasos agigantados.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;aligncenter size-medium wp-image-308&quot; title=&quot;ameets&quot; src=&quot;/uploads/2009/01/imagen-4-300x205.png&quot; alt=&quot;ameets&quot; width=&quot;300&quot; height=&quot;205&quot; /&gt;
&lt;h4&gt;Herzio&lt;/h4&gt;
&lt;a href=&quot;http://herzio.com&quot;&gt;herzio.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Este invierno no ha podido ser más interesante para mi carrera! Me encanta la música, y me gusta tocar temas de rock con la guitarra, así que estoy super contento de haberme unido a este nuevo proyecto desde el comienzo. Por el momento no os puedo contar más detalles, pero dentro de poco podrás probar la beta pública!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://herzio.com&quot;&gt;&lt;img class=&quot;aligncenter size-medium wp-image-309&quot; title=&quot;herzio&quot; src=&quot;/uploads/2009/01/imagen-5-300x194.png&quot; alt=&quot;herzio&quot; width=&quot;300&quot; height=&quot;194&quot; /&gt;&lt;/a&gt;
&lt;h3&gt;Proyectos personales&lt;/h3&gt;
Hey, aún me queda tiempo para hacer un poco de programación nocturna!&lt;/p&gt;

&lt;h4&gt;PageRankAlert&lt;/h4&gt;


&lt;p&gt;&lt;a href=&quot;http://pagerankalert.com&quot;&gt;pagerankalert.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mi proyecto mascota desde que comencé con Ruby on Rails allá por el 2006, es un servicio gratuito que te permite rastrear los cambios de Google PageRank en tus webs.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;aligncenter size-medium wp-image-311&quot; title=&quot;pagerankalert.com&quot; src=&quot;/uploads/2009/01/imagen-7-300x215.png&quot; alt=&quot;pagerankalert.com&quot; width=&quot;300&quot; height=&quot;215&quot; /&gt;
&lt;h3&gt;Flora Gavarres&lt;/h3&gt;
&lt;a href=&quot;http://floragavarres.net&quot;&gt;floragavarres.net&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El lugar donde vivo está rodeado de naturaleza. Me encanta dar largos paseos por los bosques y hacer fotos de la flora local, al igual que a mis compañeros de proyecto. Hemos construído este sitio para almacenar y clasificar fotos de plantas.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;aligncenter size-medium wp-image-312&quot; title=&quot;flora gavarres&quot; src=&quot;/uploads/2009/01/imagen-6-300x245.png&quot; alt=&quot;flora gavarres&quot; width=&quot;300&quot; height=&quot;245&quot; /&gt;&lt;/p&gt;

&lt;h3&gt;Reuniones y conferencias de Ruby on Rails&lt;/h3&gt;


&lt;p&gt;Me encanta pertenecer a las comunidades ruby / rails, entre otras cosas porque mola viajar a otras ciudades y conocer gente interesante. En 2008 estuve en dos grandes eventos relacionados con Ruby:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;* &lt;a href=&quot;http://www.euruko2008.org&quot;&gt;Euruko 2008&lt;/a&gt;&lt;/strong&gt; en Praga (Marzo). Allí, se propuso a España como el país anfitrión para Euruko 2009, así que tomamos el relevo, montamos la asociación &lt;a href=&quot;http://www.srug.org&quot;&gt;SRUG&lt;/a&gt;, y ahora estoy en el equipo organizador de la próxima Euruko! Nos vemos en Barcelona!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;* &lt;a href=&quot;http://www.conferenciarails.org&quot;&gt;Conferencia Rails&lt;/a&gt;&lt;/strong&gt; en Madrid (Noviembre).
Este año fué la tercera edición de la conferencia rails hispana, y por tercer año consecutivo formé parte del equipo organizador.&lt;/p&gt;

&lt;h3&gt;Vida personal&lt;/h3&gt;


&lt;p&gt;Durante 2008 también he disfrutado de mi vida offline un montón. He consolidado mi nueva vida en Cataluña. He hecho nuevas amistades, aprendido un nuevo idioma y hasta aprendido &lt;a href=&quot;http://en.wikipedia.org/wiki/Alioli&quot;&gt;nuevas recetas&lt;/a&gt;!&lt;/p&gt;

&lt;h3&gt;(algunos de) Mis objetivos para 2009&lt;/h3&gt;


&lt;p&gt;&lt;strong&gt;&lt;em&gt; Comer menos, y mejor! &lt;/strong&gt;Comida de verdad, de cultivo biológico, sin pesticidas!
&lt;strong&gt;&lt;/em&gt; Dormir más, y mejor!&lt;/strong&gt; Más Siesta-Driven Development!
&lt;strong&gt;&lt;em&gt; Trabajar menos!&lt;/strong&gt; Menos horas, y automatizar las tareas aburridas.
&lt;strong&gt;&lt;/em&gt; Estudiar más!&lt;/strong&gt; Al menos, la 1/3 parte de mi tiempo de trabajo debería estar dedicado a estudiar nuevas técnicas y mejorar mis habilidades.
&lt;strong&gt;&lt;em&gt; Ganar más dinero! &lt;/strong&gt;Sí!
&lt;strong&gt;&lt;/em&gt; Divertirme más!&lt;/strong&gt; Reirme un montón, descubrir cosas nuevas, pasear por el bosque&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Dabne busca socia/o</title>
   <link href="http://jaimeiniesta.com/2008/12/19/dabne-busca-sociao.html"/>
   <updated>2008-12-19T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/12/19/dabne-busca-sociao</id>
   <content type="html">&lt;blockquote&gt;&lt;a href=&quot;http://dabne.net&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Dabne-Tecnologías de la Información&lt;/strong&gt;&lt;/a&gt; es una empresa especializada en consultoría e implementación de proyectos con &lt;strong class=&quot;spip&quot;&gt;software libre&lt;/strong&gt;, tales como el diseño y la implementación de bibliotecas y archivos digitales, la de integración de tecnologías en ámbitos educativos o el desarrollo de aplicaciones web.&lt;/blockquote&gt;


&lt;p&gt;...pero además, Dabne son mis amigas &lt;a href=&quot;http://twitter.com/carolina&quot;&gt;Carolina&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/amaiac&quot;&gt;Amaia&lt;/a&gt; y &lt;a href=&quot;http://twitter.com/cien_margaritas&quot;&gt;Marga&lt;/a&gt;, con las que he tenido el gusto de trabajar ya en un par de proyectos grandotes.&lt;/p&gt;

&lt;p&gt;Ahora, Dabne quiere crecer y buscan una persona que se quiera incoporar a la cooperativa. Así que si te interesa el software libre y el desarrollo web, pásate a verlas.&lt;/p&gt;

&lt;p&gt;Más info en su blog: &lt;a href=&quot;http://blog.dabne.net/2008/12/18/dabne-busca-potencial-sociao/&quot;&gt;Dabne busca potencial socia/o&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ruby, Rails, y estrellas del Rock</title>
   <link href="http://jaimeiniesta.com/2008/12/18/ruby-rails-y-estrellas-del-rock.html"/>
   <updated>2008-12-18T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/12/18/ruby-rails-y-estrellas-del-rock</id>
   <content type="html">&lt;p&gt;Soy un tipo con suerte. No sólo me dedico a trabajar con &lt;a href=&quot;http://www.rubyonrails.org&quot;&gt;el mejor framework de desarrollo web&lt;/a&gt;, sino que además puedo hacerlo desarrollando proyectos tan chulos como &lt;a title=&quot;Herzio&quot; href=&quot;http://herzio.com&quot;&gt;Herzio&lt;/a&gt;. Y no sólo eso, sino que además puedo usar las fotos de los conciertos de mi ya desaparecida banda &lt;a title=&quot;The Draw&quot; href=&quot;http://flickr.com/photos/jaimeiniesta/tags/thedraw/&quot;&gt;The Draw&lt;/a&gt; como fixtures!
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://herzio.com&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-277&quot; style=&quot;border: 0pt none;&quot; title=&quot;herzio&quot; src=&quot;/uploads/2008/12/herzio.png&quot; alt=&quot;herzio&quot; width=&quot;400&quot; height=&quot;254&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Girona on Rails</title>
   <link href="http://jaimeiniesta.com/2008/12/18/girona-on-rails.html"/>
   <updated>2008-12-18T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/12/18/girona-on-rails</id>
   <content type="html">&lt;p&gt;Bueno gente, pues esta mañana tomando un café con &lt;a title=&quot;Emili Parrreño&quot; href=&quot;http://www.eparreno.com&quot;&gt;Emili Parreño&lt;/a&gt; surgió la idea de comenzar un grupo de raileros en Girona y alrededores... dicho y hecho, aquí estamos!&lt;/p&gt;

&lt;p&gt;La idea por ahora es hacer reuniones esporádicas para charlar de ruby, rails y demás. Cualquier tema medianamente on-topic será bienvenido (merb, shoes, git, ya sabes...)&lt;/p&gt;

&lt;p&gt;Sin compromisos, sin fechas concretas en las que quedar, todo irá surgiendo... por ahora vamos haciendo grupo y a ver si nos tomamos un algo pronto!&lt;/p&gt;

&lt;p&gt;Si estás en Girona o alrededores y estás metido (o estás comenzando) en el mundillo rails, te esperamos en:&lt;/p&gt;

&lt;p&gt;&lt;a title=&quot;Girona on Rails&quot; href=&quot;http://groups.google.com/group/gironaonrails&quot;&gt;http://groups.google.com/group/gironaonrails&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Conferencia Rails 2008</title>
   <link href="http://jaimeiniesta.com/2008/12/18/conferencia-rails-2008.html"/>
   <updated>2008-12-18T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/12/18/conferencia-rails-2008</id>
   <content type="html">&lt;p&gt;Joder, cómo pasa el tiempo. Pues si ya hace más de un mes que se acabó la &lt;a href=&quot;http://conferenciarails.org&quot;&gt;Conferencia Rails&lt;/a&gt; 2008! Y yo sin publicar esta foto:
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/xuanxu/3036060770/&quot;&gt;&lt;img class=&quot;size-medium wp-image-285 aligncenter&quot; title=&quot;Conferencia Rails 2008&quot; src=&quot;/uploads/2008/12/3036060770_364455975c_b-300x225.jpg&quot; alt=&quot;Conferencia Rails 2008&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Tendremos que ir pensando en preparar la del 2009... bueno, espera, que antes toca la &lt;a href=&quot;http://euruko2009.org&quot;&gt;Euruko&lt;/a&gt; :)&lt;/p&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Si eres legal, comparte</title>
   <link href="http://jaimeiniesta.com/2008/12/16/si-eres-legal-comparte.html"/>
   <updated>2008-12-16T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/12/16/si-eres-legal-comparte</id>
   <content type="html">&lt;p&gt;Me sumo a esta &lt;a href=&quot;http://wiki.hacktivistas.net/index.php/Accion/siereslegal&quot;&gt;campaña de contrainformación para defender la cultura libre&lt;/a&gt; y hacer frente a la sarta de mentiras que nos intenta meter en la cabeza el gobierno.&lt;/p&gt;

&lt;p&gt;Ya sabes, &lt;a href=&quot;http://siereslegalcomparte.com&quot;&gt;si eres legal&lt;/a&gt;, comparte.
&lt;blockquote&gt;[llamada a la participación por una cultura libre]&lt;/p&gt;

&lt;p&gt;Hola a todas,&lt;/p&gt;

&lt;p&gt;Un grupo de trabajo de &lt;a href=&quot;http://hacktivistas.net/&quot; target=&quot;_blank&quot;&gt;hacktivistas.net&lt;/a&gt; ha desarrollado una web
calcada a la de la campaña del ministerio:
&lt;a href=&quot;http://www.siereslegalereslegal.com/&quot; target=&quot;_blank&quot;&gt;http://www.siereslegalereslegal.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La web de la contracompaña ha sido diseñada colectivamente a través de
las aportaciones al wiki:
&lt;a href=&quot;http://wiki.hacktivistas.net/index.php/Accion/siereslegal&quot; target=&quot;_blank&quot;&gt;http://wiki.hacktivistas.net/index.php/Accion/siereslegal&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y ya está disponible en:
&lt;a href=&quot;http://siereslegalcomparte.com/&quot; target=&quot;_blank&quot;&gt;http://siereslegalcomparte.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A todas aquellos que quieran contribuir a luchar por un futuro libre,
es el momento en el que podéis aportar vuestro granito de arena
difundiendo al máximo la nueva web. Todo tipo de acciones de promoción
de la contracampaña son válidas. Pero lo ideal sería promover de forma
distribuida de google-bombing, animar a la gente a que difunda la
contracampaña poniendo un enalce que diga &quot;si eres legal&quot; apuntando a
la web de la contracampaña &lt;a href=&quot;http://siereslegalcomparte.com/&quot; target=&quot;_blank&quot;&gt;http://siereslegalcomparte.com&lt;/a&gt; y desbancar
así el posicionamiento de la campaña original en google. Hacer además
un llamamiento a que entre todas podamos hacer llegar la contracampaña
a lo más alto de google usando su sistema de promoción de web.
Tardamos un minuto en meter un enlace más en nuestras webs, blogs, y
portales, y enviando un par de mails. Si nos coordinamos, entre todas
vamos a conseguir sepultar digitalmente la campaña oficial del
gobierno.&lt;/p&gt;

&lt;p&gt;Tenemos que darnos prisa, el sábado los medios de comunicación
centrarán su atención en la acción de descarga pública de la que ya se
han hecho eco los grandes medios de comunicación:
&lt;a href=&quot;http://wiki.hacktivistas.net/index.php/Accion/Descarga_publica/Medios_contactos&quot; target=&quot;_blank&quot;&gt;http://wiki.hacktivistas.net/index.php/Accion/Descarga_publica/Medios_contactos&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para entonces nuestra campaña (la de los internautas) debería haberse
extendido por todo el ciberespacio. Está en nuestras manos.&lt;/p&gt;

&lt;p&gt;La cultura quiere ser libre! Aporta tu enlace, difunde... ahora la red actúa!&lt;/p&gt;

&lt;p&gt;salud! y que Root os tenga en sudoers!&lt;/p&gt;

&lt;p&gt;Isaac&lt;/blockquote&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Floragavarres.net, atlas fotográfico de las plantas de les Gavarres</title>
   <link href="http://jaimeiniesta.com/2008/12/12/floragavarresnet-atlas-fotografico-de-las-plantas-de-les-gavarres.html"/>
   <updated>2008-12-12T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/12/12/floragavarresnet-atlas-fotografico-de-las-plantas-de-les-gavarres</id>
   <content type="html">&lt;p&gt;&lt;img class=&quot;alignright size-thumbnail wp-image-258&quot; title=&quot;más de 1.500 fotos de plantas&quot; src=&quot;/uploads/2008/12/imagen-5-150x150.png&quot; alt=&quot;más de 1.500 fotos de plantas&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;Llevaba tiempo queriendo escribir acerca de &lt;a title=&quot;Flora de les Gavarres&quot; href=&quot;http://floragavarres.net&quot;&gt;Floragavarres.net&lt;/a&gt;, un proyecto que hemos montado un grupo de amigos para catalogar y dar a conocer la flora de la zona del macizo de &lt;a href=&quot;http://es.wikipedia.org/wiki/Gavarres&quot;&gt;les Gavarres&lt;/a&gt;, en Girona.&lt;/p&gt;

&lt;p&gt;Básicamente, lo que encontraréis en esta web es información sobre las plantas típicas de este entorno natural, clasificado en más de &lt;strong&gt;1.200 fichas de plantas&lt;/strong&gt; con sus datos principales (nombre científico, catalán, castellano, inglés, medidas, época de floración)... y todo ello acompañado de numerosas fotos... ya llevamos más de &lt;strong&gt;1.500 fotos&lt;/strong&gt; subidas y catalogadas!&lt;/p&gt;

&lt;p&gt;En el proyecto participamos cerca de &lt;strong&gt;30 personas&lt;/strong&gt;, con diversos roles. La mayoría participamos como fotógrafos, que en las salidas al campo buscamos las plantas a documentar y subimos las fotos al servidor. Por otro lado está el grupo de botánicos, que se encargan de clasificar las fotos asignándolas a la planta que les corresponda. Los editores se encargan de introducir noticias, enlaces y artículos de interés. Yo, además, me encargo de la programación del sitio usando, claro está, &lt;a title=&quot;Ruby on Rails mola&quot; href=&quot;http://www.rubyonrails.org&quot;&gt;Ruby on Rails&lt;/a&gt;. Y mi chica, Almu, se ha encargado del diseño del sitio y la interfaz de usuario. Pero sin duda este proyecto no habría tomado forma sin la iniciativa de &lt;a href=&quot;http://as2.floragavarres.net/photos/0000/7265/nurilanga_quercussuber_romanya01.jpg&quot;&gt;Albert Mallol&lt;/a&gt;, coordinador del proyecto y organizador de las salidas de campo.&lt;/p&gt;

&lt;p&gt;Todo el material generado por este proyecto está bajo una licencia libre &lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.5/es/deed.es&quot;&gt;Creative Commons&lt;/a&gt; que os permite copiar y redistribuir todos los contenidos.&lt;/p&gt;

&lt;p&gt;&lt;a title=&quot;Flora de les Gavarres&quot; href=&quot;http://floragavarres.net&quot;&gt;&lt;img class=&quot;aligncenter size-medium wp-image-261&quot; title=&quot;floragavarres.net&quot; src=&quot;/uploads/2008/12/imagen-2-300x202.png&quot; alt=&quot;floragavarres.net&quot; width=&quot;300&quot; height=&quot;202&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ya tenemos fecha para Euruko 2009</title>
   <link href="http://jaimeiniesta.com/2008/12/10/ya-tenemos-fecha-para-euruko-2009.html"/>
   <updated>2008-12-10T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/12/10/ya-tenemos-fecha-para-euruko-2009</id>
   <content type="html">&lt;p&gt;Noticias calentitas desde la SRUG: ya tenemos fecha y lugar confirmados para &lt;a href=&quot;http://euruko2009.org/archives/2008/12/10/dates_for_euruko_2009/&quot;&gt;la Euruko 2009, será el 9 y 10 de mayo en el Citilab de Barcelona&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Y ahora para los despistados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://srug.org/&quot;&gt;SRUG&lt;/a&gt;. Spanish Ruby Users Group. O sea, la asociación hispana de usuarios de ruby. O sea, los que entre otras cosas estamos organizando la...&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://euruko2009.org&quot;&gt;EURUKO&lt;/a&gt;. European Ruby Konference. O sea, la conferencia europea de ruby. O sea, una conferencia de 2 días sobre ruby, que tiene lugar cada año en una ciudad distinta de Europa.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://bcn.cat/&quot;&gt;BARCELONA&lt;/a&gt;. El año pasado la Euruko fué en Praga, y allí se propuso como candidata a Madrid pero lo cambiamos por Barcelona ya que en Madrid ya hacemos la Conferencia Rails y así variar un poco. Pero ahora resulta que se propone hacer la RailsConf también en Barcelona, casualidades de la vida... y más cerquita de casa que me toca :)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</content>
 </entry>
 
 <entry>
   <title>Mac</title>
   <link href="http://jaimeiniesta.com/2008/12/01/mac.html"/>
   <updated>2008-12-01T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/12/01/mac</id>
   <content type="html">&lt;p&gt;Pues si amiguitos, finalmente y después de mucho dar la coña por el twitter, me compré un macbook. Tras años de ubuntismo y thinkpadismo, quería comprobar por qué tantos de &lt;a href=&quot;http://www.fernandoguillen.info/es/blog/2008/05/23/dios-mio-que-he-hecho/&quot;&gt;mis&lt;/a&gt; &lt;a href=&quot;http://bucionrails.com/2008/05/22/confession-of-a-conversion/&quot;&gt;amigos&lt;/a&gt; &lt;a href=&quot;http://www.eparreno.com&quot;&gt;me&lt;/a&gt; &lt;a href=&quot;http://twitter.com/xuanxu&quot;&gt;recomendaban&lt;/a&gt; &lt;a href=&quot;http://spejman.blogspot.com/&quot;&gt;probar&lt;/a&gt; el mac.&lt;/p&gt;

&lt;p&gt;(aquí es donde iría toda esa cháchara donde uno se ha de justificar por haber cambiado de plataforma, pero os la ahorraré)&lt;/p&gt;

&lt;p&gt;Sólo deciros que estoy super contento con la máquina nueva (macbook alu 2.4). Y no sólo era cuestión de hardware, sino también de software.&lt;/p&gt;

&lt;p&gt;Y la verdadera razón, la suma de todas esas pequeñas razones. :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ocupado!</title>
   <link href="http://jaimeiniesta.com/2008/11/10/ocupado.html"/>
   <updated>2008-11-10T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/11/10/ocupado</id>
   <content type="html">&lt;p&gt;Corren buenos tiempos para los desarrolladores Ruby on Rails y nos llueven ofertas de proyectos por doquier.&lt;/p&gt;

&lt;p&gt;Como lo mejor es hacer menos cosas pero hacerlas bien, no voy a aceptar nuevos proyectos hasta acabar lo que tengo entre manos ahora mismo... y parece que va para largo... :)&lt;/p&gt;

&lt;p&gt;Si de todos modos quieres contactar conmigo para futuros proyectos o cursos y no te importa esperar unos meses, puedes escribirme y vamos hablando...&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Cuidado con Ubuntu 8.10, viene con Ruby 1.8.7</title>
   <link href="http://jaimeiniesta.com/2008/11/01/cuidado-con-ubuntu-810-viene-con-ruby-187.html"/>
   <updated>2008-11-01T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/11/01/cuidado-con-ubuntu-810-viene-con-ruby-187</id>
   <content type="html">&lt;p&gt;Ayer cometí una imprudencia, aventurándome a actualizar mi Ubuntu a la versión 8.10 Intrepid Ibex. Como resultado directo de esto me he quedado sin mi entorno de desarrollo en ruby on rails, así que aquí va una advertencia a los programadores ruby que uséis, como yo, Ubuntu: ¡no te actualices todavía!&lt;/p&gt;

&lt;p&gt;Para empezar, el proceso de instalación fué larguísimo (el programa de actualización falló, lo maté tras 15 horas colgado y después hice la instalación a pata desde consola con &lt;strong&gt;sudo aptitude update &amp;amp;&amp;amp; sudo aptitude safe-upgrade &amp;amp;&amp;amp; sudo aptitude full-upgrade&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Cuando finalmente acabó la instalación, reinicié la máquina y aparentemente todo estaba bien. Ubuntu 8.10 no presenta grandes cambios a simple vista... algunas mejoras de interfaz, las fuentes son más legibles, detalles así (supongo que tiene bastantes mejoras a nivel interno, la verdad es que parece algo más rápido).&lt;/p&gt;

&lt;p&gt;Pero... tras un rato programando con ruby on rails, comenzaron a pasar cosas raras. Era como si hiciera cache de los partials... los modificaba pero no se reflejaban los cambios al refrescar el navegador... Algunos partials se pintaban mal, con el código cortado... Cosas bastante raras.&lt;/p&gt;

&lt;p&gt;Tras un rato probando, me dí cuenta de que lo que no le gustaba eran las líneas tipo:&lt;/p&gt;

&lt;p&gt;&amp;lt;% #TODO: ... %&amp;gt;&lt;/p&gt;

&lt;p&gt;...no me preguntéis por qué, pero si quitaba ese tipo de comentarios del código, volvía a funcionar. Era como si a partir de ese comentario, ignorara el código siguiente, o algo así.&lt;/p&gt;

&lt;p&gt;Investigando un poco más, descubrí que al actualizar Ubuntu a 8.10 me habían metido la versión 1.8.7 de Ruby. Y como dicen en la página de Ruby on Rails, &quot;&lt;a href=&quot;http://www.rubyonrails.org/down&quot;&gt;Ruby 1.8.7 still has some bugs to straighten out. &lt;/a&gt;&quot;. En la página de Ruby también indican que &lt;a href=&quot;http://www.ruby-lang.org/es/downloads/&quot;&gt;la última versión estable de Ruby es la 1.8.6&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;En resumidas cuentas: que la gente de Ubuntu ha metido una versión inestable de Ruby en su última versión. Algo similar ocurrió en la Ubuntu 8.04, donde metieron Firefox 3 cuando aún estaba en beta... y se colgaba cada dos por tres.&lt;/p&gt;

&lt;p&gt;No me gusta esta política de Ubuntu. Digo yo que meten estas versiones beta porque esperan que al poco tiempo del lanzamiento el paquete se actualice y salga de beta, pero mientras tanto eso que has incluído en tu release estable... es defectuoso. Da muy mala imagen de GNU/Linux, donde se supone que uno de sus puntos fuertes es la estabilidad.&lt;/p&gt;

&lt;p&gt;Bueno, y ahora qué? Desde luego, no continuar desarrollando con ruby 1.8.7, por si me oculta más bugs sorpresa. Así que &lt;strong&gt;sudo aptitude remove ruby&lt;/strong&gt;, descargar y compilar ruby 1.8.6, reinstalar rubygems, y encontrarme con que de todos modos, no arranca mi aplicación rails: &quot;no such file to load -- openssl&quot;... ajá! claro, también tendría que reinstalar las librerías de ruby para la 1.8.6, ya que en mi sistema siguen las de la 1.8.7... por si fuera poco, me han desaparecido todas las gemas que tenía instaladas, y no eran pocas...&lt;/p&gt;

&lt;p&gt;Desde este punto, tengo varias opciones:
&lt;ol&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Quedarme con ruby 1.8.7&amp;lt;/strong&amp;gt;. Lo más sencillo, pero también me puede esconder muchos bugs y darme quebraderos de cabeza durante el desarrollo.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Seguirme pegando para instalar ruby 1.8.6&amp;lt;/strong&amp;gt; y todas sus librerías, reinstalar las gemas necesarias, etc. Con el nivel de quemazón que tengo, me parece que se ha agotado mi paciencia.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Desinstalar Ubuntu 8.10 y volverme a Ubuntu 8.04&amp;lt;/strong&amp;gt;. Quién me mandaría a mí actualizarme ahora. Tendría que formatear el disco y volver a copiar mis datos del backup, e instalar todos los programas que necesito. Pasando.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Hacer un downgrade a la 8.04&amp;lt;/strong&amp;gt;. En principio igual que haces un dist-upgrade se puede hacer el proceso inverso para volver a una versión anterior. Pero es un proceso poco documentado y directamente te advierten que puede dar bastantes problemas: &quot;&amp;lt;a href=&quot;https://help.ubuntu.com/community/DowngradeHowto&quot;&amp;gt;The last step probably will end up a catastrophic mess of incompletely installed packages&amp;lt;/a&amp;gt;&quot;. Además es sábado y me quiero ir de paseo.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Comprarme el macbook de una puta vez&amp;lt;/strong&amp;gt;. Tenía pensado hacer el pedido el día 5 a través de la web para tenerlo a final de mes, pero ya que tengo que reinstalar mi entorno de desarrollo, estoy por pasarme el lunes por la frutería más cercana y comprarme una manzana.&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/ol&gt;
Así que ya sabéis amiguitos, cuidado con actualizar a Ubuntu 8.10 hasta que dejen de incluir una beta de Ruby... Sobre todo los que lo estemos usando también en servidores, que eso sí que puede ser una risa, actualizarte el servidor y que empiecen a petar las aplicaciones!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ACTUALIZACIÓN / PUNTUALIZACIÓN&lt;/strong&gt;: ruby 1.8.7 es estable, es rails quien tiene problemas de incompatibilidad con algunas versiones. Más información en los comentarios de este post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ACTUALIZACIÓN&lt;/strong&gt;: finalmente, lo que hice fué reinstalar Ubuntu 8.04, ha sido una solución mucho más rápida que pasar por el macbook (por el momento dejo aparcada esta idea... Ubuntu 8.04 mooola!)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Cierre del plazo de inscripción en la Conferencia Rails 2008</title>
   <link href="http://jaimeiniesta.com/2008/10/30/cierre-del-plazo-de-inscripcion-en-la-conferencia-rails-2008.html"/>
   <updated>2008-10-30T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/10/30/cierre-del-plazo-de-inscripcion-en-la-conferencia-rails-2008</id>
   <content type="html">&lt;p&gt;Como la mayoría ya sabréis la &lt;a href=&quot;http://www.conferenciarails.org/&quot; target=&quot;_blank&quot;&gt;Conferencia Rails 2008&lt;/a&gt; será los próximos días 13 y 14 de noviembre en Madrid, en la Escuela de Teleco.&lt;/p&gt;

&lt;p&gt;Para cerrar temas de catering, sobre todo para la cena del jueves, desde el equipo de organización necesitamos cerrar las inscripciones y los pagos el próximo día 5 de noviembre (el &lt;a href=&quot;http://www.conferenciarails.org/2008/10/fecha-limite-de-pago-para-la-conferencia-2008/&quot; target=&quot;_blank&quot;&gt;día 5&lt;/a&gt; tendría que estar ya el pago en nuestra cuenta), para que de tiempo a organizarlo todo.&lt;/p&gt;

&lt;p&gt;Así que si vas a venir y todavía no te has &lt;a href=&quot;http://app.conferenciarails.org/registro&quot; target=&quot;_blank&quot;&gt;apuntado&lt;/a&gt;, ¿a qué esperas? Ya sabemos que estas cosas se suelen dejar para el final, pero necesitamos tener cerrado el número de asistentes cuanto antes.&lt;/p&gt;

&lt;p&gt;Si lo que pasa es que no lo tienes claro puedes mirar el &lt;a href=&quot;http://app.conferenciarails.org/charlas/calendario&quot; target=&quot;_blank&quot;&gt;calendario de charlas&lt;/a&gt; y terminar de convencerte de que no te lo puedes perder ;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>¿Crisis? ¿Qué crisis?</title>
   <link href="http://jaimeiniesta.com/2008/10/18/%25c2%25bfcrisis-%25c2%25bfque-crisis.html"/>
   <updated>2008-10-18T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/10/18/%c2%bfcrisis-%c2%bfque-crisis</id>
   <content type="html">&lt;p&gt;Leyendo el post de Agustín Cuenca &quot;&lt;a href=&quot;http://blog.loscuenca.com/2008/10/%C2%BFcrisis-no-gracias-2/&quot;&gt;¿Crisis? No, gracias&lt;/a&gt;&quot; no puedo estar más de acuerdo. Habrá crisis inmobiliaria, habrá crisis en la bolsa, pero en mi caso, no veo la crisis por ningún lado.&lt;/p&gt;

&lt;p&gt;De hecho ahora mismo estoy a tope de proyectos, hasta tal punto que he tenido que poner el cartel de &quot;cerrado&quot; en &lt;a href=&quot;http://railes.net&quot;&gt;Railes.net&lt;/a&gt; porque no me paran de llegar presupuestos.&lt;/p&gt;

&lt;p&gt;El sector Internet, o al menos el sector Ruby on Rails, está en alza. Hay muchísima demanda y los profesionales no damos abasto.&lt;/p&gt;

&lt;p&gt;Y como dice Agustín, si evitamos el efecto psicológico de la crisis, y nos fijamos en los datos positivos que nos rodean, publicando buenas noticias, conseguiremos cambiar el &quot;sentimiento del mercado&quot;. Allá vamos!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Simplificando, que es gerundio</title>
   <link href="http://jaimeiniesta.com/2008/10/17/simplificando-que-es-gerundio.html"/>
   <updated>2008-10-17T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/10/17/simplificando-que-es-gerundio</id>
   <content type="html">&lt;p&gt;La vida ya se complica por sí sola, así que yo me he propuesto dedicar un ratito cada semana a simplificar lo que pueda:
&lt;ul&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;Darme de baja de esas listas de correo que al final nunca leo para centrarme en las que sí leo&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Eliminar todos esos feeds de blogs que no sigo para seguir los que verdaderamente aportan algo&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Borrar todos esos dominios y proyectos web que llevaban abandonados meses... o años!&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Convertir &amp;lt;a href=&quot;http://railes.net&quot;&amp;gt;mi sitio web corporativo&amp;lt;/a&amp;gt; en un portfolio de una única página&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/ul&gt;
...y hecho todo esto, ya me puedo ir a dormir mucho más tranquilo! :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Diez mil páginas</title>
   <link href="http://jaimeiniesta.com/2008/10/08/diez-mil-paginas.html"/>
   <updated>2008-10-08T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/10/08/diez-mil-paginas</id>
   <content type="html">&lt;div class=&quot;post_body&quot;&gt;

Quién me iba a decir a mi &lt;a href=&quot;http://blog.railes.net/2006/03/30/pagerankalertcom-mi-primera-aplicacion-ror/&quot;&gt;en aquel marzo de 2006 en que lanzaba mi primera aplicación rails&lt;/a&gt; para probar cómo iba todo esto que estaba aprendiendo, que dos años y medio más tarde se habría convertido en el pequeño monstruíto que es hoy día: más de &lt;strong&gt;10.000 páginas monitorizadas diariamente&lt;/strong&gt;, que han registrado más de &lt;strong&gt;45.000 cambios de pagerank&lt;/strong&gt; y de las que se han recogido más de &lt;strong&gt;56.000 keywords&lt;/strong&gt;!

PageRankAlert continúa su crecimiento poco a poco. Si quieres unirte, puedes crear tu lista de páginas monitorizadas en un pis-pas. Apúntate, envía tus URLs y comienza a recibir alertas cuando cambie su pagerank.

&lt;a href=&quot;http://pagerankalert.com&quot;&gt;http://pagerankalert.com&lt;/a&gt;&lt;/div&gt;

</content>
 </entry>
 
 <entry>
   <title>Comparativa de hosting Ruby on Rails</title>
   <link href="http://jaimeiniesta.com/2008/10/02/comparativa-de-hosting-ruby-on-rails.html"/>
   <updated>2008-10-02T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/10/02/comparativa-de-hosting-ruby-on-rails</id>
   <content type="html">&lt;p&gt;Durante el tiempo que llevo desarrollando aplicaciones Ruby on Rails he tenido ocasión de probar distintos hostings, compartidos y dedicados, y encontrarme de todo. Os dejo aquí mis impresiones personales, basadas en mi experiencia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# DREAMHOST (compartido)&lt;/strong&gt;
&lt;a href=&quot;http://dreamhost.com/&quot; target=&quot;_blank&quot;&gt;http://dreamhost.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sólo aconsejable para probar con proyectos personales o de poca envergadura. Funciona bien pero con fastcgi (ahora también mod_rails, dicen que va bien). No respeta la Safe Harbor. Te matan procesos que tomen demasiado rato ejecutándose con lo que es difícil meter allí una cola, demonio o similar... a veces incluso instalar gemas puede ser complicado por esto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# JOYENT / TEXTDRIVE (compartido)&lt;/strong&gt;
&lt;a href=&quot;http://www.joyent.com/&quot; target=&quot;_blank&quot;&gt;http://www.joyent.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Un poquillo mejor pero ponen una limitación bastante férrea a la memoria que consumes, y en cuanto un proceso chupa mucho te lo cortan. Lo que es normal siendo compartido, pero podían dar un pequeño margen de unos minutillos más para cortar (esto nos pasaba en un proceso que generaba un Excel y chupaba RAM... imposible allí). Todo se soluciona contratando más RAM.&lt;/p&gt;

&lt;p&gt;Tengo entendido que cumplen con la Safe Harbor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# SITE5 (compartido)&lt;/strong&gt;
&lt;a href=&quot;http://www.site5.com/&quot; target=&quot;_blank&quot;&gt;http://www.site5.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Muy bien. Para ser compartido lo tienen montado bastante bien, con sus recetas capistrano indicadas en el wiki y todo. Por ahora con fastcgi, no se si ya tienen mod_rails. No tengo ninguna queja con ellos por el momento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# GUEBS.com (compartido)&lt;/strong&gt;
&lt;a href=&quot;http://www.guebs.com/&quot; target=&quot;_blank&quot;&gt;http://www.guebs.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Genial, estupendo, sólo tengo buenas palabras para este hosting compartido de rails en España. Cumplen con la LOPD, el servicio técnico es estupendo y responden muy rápido a las consultas de soporte, instalando lo que haga falta o aconsejando. Por el momento usan fastcgi, supongo que pasarán a mod_rails en breve. Muy majos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# DINAHOSTING (compartido)&lt;/strong&gt;
&lt;a href=&quot;http://www.dinahosting.com/&quot; target=&quot;_blank&quot;&gt;http://www.dinahosting.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;&lt;em&gt;peor&lt;/em&gt;&lt;/strong&gt; hosting que he visto en mi vida. En serio. Anuncian que dan soporte a Rails pero no tienen ni idea. Me costó semanas de emails conseguir que me dieran acceso SSH además del FTP. Me fué imposible conseguir que instalaran un cliente de Subversion así que al final tuve que hacer el deploy por FTP. Cuando accedes por SSH te encuentras todo capadísimo: no puedes hacer ps, ni top, no tienes rsync, no puedes consultar ficheros de configuración fuera de tu carpeta de usuario...&lt;/p&gt;

&lt;p&gt;El soporte es penoso y se limitan a marearte echando balones fuera. Al preguntarles cómo tienen montado Rails, si es con fastcgi, mod_rails o qué, tras mails y mails preguntando tardaban días en responder y cuando lo hacían era para decirme que mirara en la web de Apache. Semanas más tarde descubrí que usan mongrel... y te redirigían el dominio al puerto 3000 de manera visible en la URL...&lt;/p&gt;

&lt;p&gt;Aprovechan cualquier petición de que te den un entorno un poquito menos capado para intentar venderte un servidor dedicado. No tienen ni idea y encima van de chulos por el soporte, intentando dejarte mal de cara a tu cliente. Cuidadín con ellos!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# SLICEHOST (dedicado virtual, slices)&lt;/strong&gt;
&lt;a href=&quot;http://www.slicehost.com/&quot; target=&quot;_blank&quot;&gt;http://www.slicehost.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Muy bien, estupendo todo. Te montas tú tu propio servidor dedicado a partir de una instalación base (por ejemplo, Debian). Yo no soy administrador de sistemas pero me pareció muy sencillo montarme todo el entorno (ruby, rails, nginx, mongrel, monit, securizar el servidor...) siguiendo las guías paso a paso de su wiki. Muy barato, desde 20$/mes, y por 5$/mes puedes tener backups completos, diarios o semanales del slice.&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;text-decoration: line-through;&quot;&gt;Lo malo es que no contempla la Safe Harbor&lt;/span&gt;. Me han informado desde Slicehost que ahora les ha comprado Rackspace, que sí están en la Safe Harbor: &quot;&lt;span class=&quot;entry-content&quot;&gt;I wanted to let you know that Slicehost was recently acquired by Rackspace, which is listed on Safe Harbor List&quot;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# ENGINEYARD (dedicado virtual, slices)&lt;/strong&gt;
&lt;a href=&quot;http://www.engineyard.com/&quot; target=&quot;_blank&quot;&gt;http://www.engineyard.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sin duda lo mejor que he probado. Puedes tener varios slices, uno para staging y varios para producción. El servicio técnico es estupendo y te lo solucionan todo super rápido a través de la web ya que tienen técnicos repartidos por todo el mundo y con eso cubren todas las franjas horarias.&lt;/p&gt;

&lt;p&gt;Muy bien de rendimiento, te lo montan todo con nginx, mongrel, sus recetitas de capistrano, monitorizan tu web, te ofrecen servicio de backup en S3, te dan una cuenta de NewRelic RPM Bronze gratis...&lt;/p&gt;

&lt;p&gt;Eso si, esto es para proyectos que tengan un presupuesto serio... lo mínimo (1 slice de producción) es 399$ al mes; la configuración estándar (1 slice de staging y 2 de producción) ya se pone en 1.047 $/mes, pero para un proyecto serio es lo que necesitas: un entorno de staging donde poder probar todo bien antes de las actualizaciones, y un par de servidores balanceados en producción para dar la mejor respuesta, ser resistente a fallos, poder reiniciar el servidor sin parar la web cuando haya que actualizar (primero se reinicia un slice y luego el otro), etc...&lt;/p&gt;

&lt;h2&gt;#&lt;/h2&gt;

&lt;p&gt;Y eso es toda mi experiencia en hosting rails por el momento... Me quedo con ganas de probar Brightbox y EC2 pero todo se andará... :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Monitorización externa de servidores</title>
   <link href="http://jaimeiniesta.com/2008/09/24/monitorizacion-externa-de-servidores.html"/>
   <updated>2008-09-24T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/09/24/monitorizacion-externa-de-servidores</id>
   <content type="html">&lt;p&gt;Hace poco os hablaba de la importancia de &lt;a href=&quot;http://www.jaimeiniesta.com/2008/06/09/controlar-los-mongrels-con-monit-en-slicehost/&quot;&gt;monitorizar los servicios de vuestros servidores con monit&lt;/a&gt;, para asegurarnos de que están en perfectas condiciones, pero... ¿quien monitoriza al monitor?&lt;/p&gt;

&lt;p&gt;Como siempre está bien una segunda opinión, un buen complemento es un sistema de monitorización externa que mire la respuesta del servidor desde fuera. Os indico tres servicios que os permitirán chequear periódicamente el estado del servidor y los tiempos de respuesta (HTTP, POP3, SMTP, FTP, etc...)
&lt;ul&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.externaltest.com&quot;&amp;gt;&amp;lt;strong&amp;gt;www.externaltest.com&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt; ... en su cuenta gratuíta ofrece hasta 3 tests diferentes simultáneos&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.siteuptime.com&quot;&amp;gt;&amp;lt;strong&amp;gt;www.siteuptime.com&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt; ... en su cuenta gratuíta ofrece 1 solo test, pero es el que usa EngineYard para monitorizar el hosting que tengo con ellos así que creo que es una buena referencia&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.pingdom.com&quot;&amp;gt;&amp;lt;strong&amp;gt;www.pingdom.com&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt; ... que me lo han recomendado por twitter pero todavía no lo he probado&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/ul&gt;
Tengo pendiente montarme un pequeño script con ruby para hacerme mi propio servicio de monitorización... debe ser fácil, simplemente usar open-uri para visitar las URLs de mis webs, y en caso de que se devuelva un código de error o haya un timeout, enviarme un email de alerta. De esta manera podría tener funcionando el script en mi máquina local siempre en background.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PageRankAlert.com contrata a Boris, la araña</title>
   <link href="http://jaimeiniesta.com/2008/09/22/pagerankalertcom-contrata-a-boris-la-arana.html"/>
   <updated>2008-09-22T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/09/22/pagerankalertcom-contrata-a-boris-la-arana</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.jaimeiniesta.com/?s=boris&quot;&gt;Boris, la araña&lt;/a&gt;, ha sido uno de mis proyectos-juguete-experimento en los últimos tiempos. Un bot encargado de rastrear sitios web y extraer información sobre ellos: etiquetas meta, enlaces a otras webs, etc.&lt;/p&gt;

&lt;p&gt;En tiempos llegó a tener su propio dominio y contar con cientos de miles de sitios indexados, pero la situación no era sostenible y como no quería hacerle la competencia a Google, decidí dar por finalizado el experimento.&lt;/p&gt;

&lt;p&gt;Ahora Boris vuelve al ataque, trabajando en un grupo de URLs más modesto, unas 9.200 URLs en la actualidad, las enviadas manualmente a &lt;a href=&quot;http://pagerankalert.com&quot;&gt;&lt;strong&gt;http://pagerankalert.com&lt;/strong&gt;&lt;/a&gt; por los usuarios. Se encargará de apuntar su título, descripción y meta keywords, usadas como tags para catalogar las páginas.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Cómo generar contenido ficticio para tus aplicaciones</title>
   <link href="http://jaimeiniesta.com/2008/09/13/como-generar-contenido-ficticio-para-tus-aplicaciones.html"/>
   <updated>2008-09-13T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/09/13/como-generar-contenido-ficticio-para-tus-aplicaciones</id>
   <content type="html">&lt;p&gt;&lt;a title=&quot;volcan de babel&quot; href=&quot;http://www.flickr.com/photos/59198719@N00/2595589183/&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;alignright&quot; style=&quot;border: 0pt none; margin: 5px; float: right;&quot; src=&quot;http://farm3.static.flickr.com/2290/2595589183_19a20a98be_m.jpg&quot; border=&quot;0&quot; alt=&quot;volcan de babel&quot; /&gt;&lt;/a&gt;Pongamos por caso que estás creando una nueva aplicación de esas que tiene un poco de todo: un blog multiusuario, por ejemplo. El layout está quedando chulo con sus listados de posts, nubes de tags y todo eso. La aplicación responde bastante rápido y todo va estupendamente.&lt;/p&gt;

&lt;p&gt;Pero claro, en desarrollo tienes tus dos o tres usuarios de prueba y eso no se puede comparar con el gentío que tendrás funcionando el día que salgas a producción. Porque tu aplicación va a ser un exitazo, ¿verdad?&lt;/p&gt;

&lt;p&gt;Lo mejor es que te anticipes a ese momento y compruebes qué tal responde tu aplicación una vez que tu base de datos esté bien atiborrada de contenidos. ¿Qué tal poder generarte miles de usuarios y simular que escriben cada uno unos cuantos posts, dejan comentarios, taguean contenidos, etc.?&lt;/p&gt;

&lt;p&gt;Una idea podría ser emplear una gema que genere contenidos aleatorios. Sí, el estándar de &quot;Lorem ipsum&quot; mola pero resulta un poco repetitivo. Yo prefiero usar la gema Babel, que te devuelve textos de diferentes tipos: nombres de chico o de chica, apellidos, nombres de usuario, textos cortos (para líneas tipo &quot;subject&quot; por ejemplo), textos largos (para el cuerpo de los posts, p. ej.)...&lt;/p&gt;

&lt;p&gt;En su día se instalaba con un simple &quot;sudo gem install babel&quot;, pero ahora esta gema está un tanto desaparecida y ha tomado su lugar otra dedicada a la traducción de textos con Google. Buscando un poco he encontrado a la antigua Babel aquí, pero de todos modos puedes encontrar otras muchas gemas de propósito similar:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://rubyfurnace.com/gems/babel&quot;&gt;http://rubyfurnace.com/gems/babel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bien, una vez tenemos instalada la gema con la que generamos cadenas aleatorias, nos bastará una tarea rake que se encargue de generar los contenidos. Por ejemplo, para generar usuarios aleatorios si empleamos restful_authentication podemos hacer algo así:
&lt;pre&gt;require 'babel'&lt;/p&gt;

&lt;p&gt;task :populateusers =&amp;gt; :environment do
  # Crea usuarios de prueba&lt;/p&gt;

&lt;p&gt;  num_users = 100
  for i in 1..num_users&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Generamos datos del usuario aleatorio
if (rand &amp;amp;lt; 0.5)
  name = &quot;#{Babel::random_female_name}&quot;
else
  name = &quot;#{Babel::random_male_name}&quot;
end

surname1 = &quot;#{Babel::random_surname}&quot;
surname2 = &quot;#{Babel::random_surname}&quot;
login = &quot;#{name}.#{surname1}.#{surname2}&quot;.downcase
email = &quot;#{login}@midominiodeconya.com&quot;

# Creamos el usuario
user = User.new(:name =&amp;amp;gt; name,
            :surname1 =&amp;amp;gt; surname1,
            :surname2 =&amp;amp;gt; surname2,
            :login =&amp;amp;gt; login,
            :password =&amp;amp;gt; 'unaclave',
            :password_confirmation =&amp;amp;gt; 'unaclave',
            :email =&amp;amp;gt; email)
if user.save
  puts &quot;Creado usuario #{login}&quot;

  # Activamos el usuario
  user.activate
else
  puts &quot;No he podido crear el usuario #{login}&quot;
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;  end
end&lt;/pre&gt;
Al ejecutar esta tarea con &quot;rake populateusers&quot;, se crearán y activarán 100 usuarios con datos aleatorios. Ten en cuenta que si generas muchos pero muchos, comenzarán a repetirse las combinaciones de nombre y apellidos y como el login debe ser único, no se podrán salvar. Puedes añadir más aleatoriedad introduciendo números en el login, como &lt;a href=&quot;http://pastie.org/pastes/231518&quot;&gt;en este ejemplo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Un par de tareas más de ejemplo, la primera crea un post para los últimos 100 usuarios, y la segunda crea 10 comentarios para los últimos 100 posts. Fíjate que en los posts usamos también tags aleatorias usando Babel... una idea para conseguir mayor aleatoriedad es usar tags de dos o tres palabras aleatorias cada una.
&lt;pre&gt;task :populateposts =&amp;gt; :environment do
  # Crea posts de prueba para varios usuarios&lt;/p&gt;

&lt;p&gt;  User.find(:all, :limit =&amp;gt; '100', :order =&amp;gt; 'id DESC').each do |u|&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;u.posts.create( :title =&amp;amp;gt; &quot;#{Babel::random_single}&quot;,
                :body =&amp;amp;gt; Babel::random_long,
                :tag_list =&amp;amp;gt; &quot;#{Babel::random_single}, #{Babel::random_single}, #{Babel::random_single}&quot;.downcase
              )
puts &quot;#{u.nombre} escribe en su blog&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;  end
end&lt;/p&gt;

&lt;p&gt;task :populatepostcomments =&amp;gt; :environment do
  # Crea comentarios de prueba para varios posts
  Post.find(:all, :limit =&amp;gt; '100', :order =&amp;gt; 'id DESC').each do |p|&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Escogemos varios usuarios
User.find(:all, :limit =&amp;amp;gt; '10', :order =&amp;amp;gt; 'id DESC').each do |u|
  texto = coge_hasta_el_punto(Babel::random_long)
  p.post_comments.create(:body =&amp;amp;gt; texto, :user_id =&amp;amp;gt; u.id)
  puts &quot;#{u.nombre} comenta en el blog de #{p.user.nombre}&quot;
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;  end
end&lt;/pre&gt;
Ahora... ponlo a funcionar unas cuantas veces, crea usuarios, posts y comentarios y verás cómo cambia tu percepción de la aplicación. Prueba a crear muchos contenidos, al menos el doble de lo que esperas soportar en tu aplicación, para asegurarte de que la aplicación responde como es debido... seguramente encontrarás algún cuello de botella que podrás solucionar con calma. :)&lt;/p&gt;

&lt;p&gt;&lt;small&gt;&lt;a title=&quot;Attribution License&quot; href=&quot;http://creativecommons.org/licenses/by/2.0/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.jaimeiniesta.com/wp-content/plugins/photo_dropper/images/cc.png&quot; border=&quot;0&quot; alt=&quot;Creative Commons License&quot; width=&quot;16&quot; height=&quot;16&quot; align=&quot;absmiddle&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.photodropper.com/photos/&quot; target=&quot;_blank&quot;&gt;photo&lt;/a&gt; credit: &lt;a title=&quot;shellorz&quot; href=&quot;http://www.flickr.com/photos/59198719@N00/2595589183/&quot; target=&quot;_blank&quot;&gt;shellorz&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>El blog de PageRankAlert.com</title>
   <link href="http://jaimeiniesta.com/2008/09/12/el-blog-de-pagerankalertcom.html"/>
   <updated>2008-09-12T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/09/12/el-blog-de-pagerankalertcom</id>
   <content type="html">&lt;p&gt;Toda aplicación debe tener un blog donde informar de las novedades y desde donde recibir feedback de los usuarios.&lt;/p&gt;

&lt;p&gt;He tardado, pero ya está aquí &lt;a href=&quot;http://pagerankalert.com/blog&quot;&gt;el blog de PageRankAlert.com&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Consejos para montar un proyecto propio, algunas conclusiones</title>
   <link href="http://jaimeiniesta.com/2008/09/12/consejos-para-montar-un-proyecto-propio-algunas-conclusiones.html"/>
   <updated>2008-09-12T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/09/12/consejos-para-montar-un-proyecto-propio-algunas-conclusiones</id>
   <content type="html">&lt;p&gt;El pasado martes celebramos el &lt;a href=&quot;http://www.jaimeiniesta.com/2008/09/09/tech-coffee-consejos-para-montar-un-proyecto-propio/&quot;&gt;primer Tech Coffe&lt;/a&gt; del grupo &lt;a href=&quot;http://freelancegirona.com&quot;&gt;Freelance Girona&lt;/a&gt;, para hablar sobre nuestras experiencias montando proyectos propios, y ver si podíamos reunir una serie de consejos a tener en cuenta.&lt;/p&gt;

&lt;p&gt;El evento tuvo tanta asistencia (creo haber contado 12 personas) para el formato elegido que tuvimos que movernos a un sitio más grande, a la cafetería 1/2 Kmí. Allí, sentados en la terraza y bien provistos de cafeína, estuvimos debatiendo sobre el tema.&lt;/p&gt;

&lt;p&gt;Aquí están mis anotaciones, os animo a que las ampliéis dejando comentarios y publicando memes en vuestros blogs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# 1 - las ideas son un multiplicador de la ejecución.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Desterremos el mito de que lo más importante es tener una idea genial. Como apunta Derek Shivers en su post &lt;a href=&quot;http://www.oreillynet.com/onlamp/blog/2005/08/ideas_are_just_a_multiplier_of.html&quot;&gt;ideas are just a multiplier of execution&lt;/a&gt;, lo que verdaderamente importa es como ejecutes, cómo lleves a la práctica una idea. Una idea muy buena que se queda sin llevar a la práctica no vale nada. Una idea muy buena que se lleva muy bien a la práctica, vale muchísimo. Una idea muy mala que se lleva muy bien a la práctica, es un desastre total.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# 2 - tampoco necesitas una idea original.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Otro mito que a mucha gente le impide comenzar un proyecto es el evitar repetirse. Si ven que otro ya ha tenido la misma idea, no se atreverán a hacer ellos una nueva aplicación para lo mismo. Esto no siempre es así, puedes coger la idea de otro proyecto y sencillamente, hacerlo mejor que ellos.&lt;/p&gt;

&lt;p&gt;¡Ojo! Mejor no significa hacer más cosas que tu competencia, la mayoría de las veces, significará hacer menos y mejor. O también puedes especializarte en un aspecto en concreto, o dirigirte a un público más restringido...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# 3 - tómate tan en serio como te tomas a tus clientes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un error muy frecuente es dar menos prioridad a los proyectos propios, dejándolos para cuando no tengamos nada mejor que hacer. Normalmente esto se traduce en que trabajaremos en proyectos para clientes, y dedicaremos ratos sueltos a avanzar en nuestro proyecto.&lt;/p&gt;

&lt;p&gt;Pero lo que acaba pasando es que &lt;em&gt;nunca&lt;/em&gt; tenemos tiempo libre. No se si es tu caso, pero en todos mis años de freelance nunca me he quedado sin proyectos. Siempre tengo algo que hacer para clientes, así que yo también he caído en este error de dejar los proyectos propios para mis ratos libres.&lt;/p&gt;

&lt;p&gt;Lo mejor es que apuestes decididamente por tu proyecto. Si te lo puedes permitir, resérvate un par de meses para trabajar de seguido en tu proyecto y publícalo cuanto antes. Si no puedes permitirte estar un par de meses sin facturar, considera dedicar media jornada, dos horas, una hora al menos cada día para avanzar en tu proyecto. Incluso ponlo en tu agenda, y mejor si es dentro de un horario fijo que te fuerce todos los días a avanzar en tu proyecto, aunque sea despacio, pero día a día.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# 4 - ¿qué es para tí el éxito?
&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Suele ser frecuente en las reuniones de freelances fantasear con que nuestra aplicación acabe siendo comprada por Google, o con forrarse de la noche a la mañana con otra nueva página del millón de dólares. Bueno, ¿por qué no?, pero... uno puede tener éxito con mucho menos!&lt;/p&gt;

&lt;p&gt;Para mí, sería suficiente con sacar 300 € al mes en adsense. Eso sería un buen incentivo para seguir manteniendo un proyecto propio. Si saco más, pues eso que gano :) Y aunque no saques dinero directamente, si tu proyecto es conocido te puede servir para tu curriculum. No es necesario megaforrarse directamente, no te obsesiones y disfruta con tus horas de programación.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# 5 - apuesta fuerte&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No des por sentado que en cuanto publiques tu aplicación, comenzarás a recibir visitas automáticamente... un empujoncito inicial puede venirte muy bien. ¿Puedes permitirte gastar unos cuantos cientos de euros en adwords o similar? Considéralo, recibirás muchas visitas que son la base para que tu aplicación comience fuerte... los usuarios... después ya se irá corriendo la voz.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# 6 - ingresos: publicidad, o cobrar a usuarios&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para conseguir dinero con tu aplicación tendrás que pensartelo bien... esta es la parte difícil. La manera más inmediata es mediante publicidad en tu web, tipo adsense o similar... la realidad es que hace falta mucho tráfico para conseguir un dinero decente con esto... así que nada, te tocará conseguir mucho tráfico. :)&lt;/p&gt;

&lt;p&gt;La otra manera obvia es cobrando a los usuarios. Aconsejan dar siempre cuentas gratuitas, y cobrar por servicios avanzados, tipo premium, etc. O cobrar a un tipo de usuarios y a otros no (por ejemplo en las webs de anuncios de pisos, a los que buscan vivienda no se les cobra, pero sí a las inmobiliarias para salir mejor posicionadas en los listados). Esto ya es tu modelo de negocio, tendrás que pensarlo a fondo...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# 7 - ¿nacional o internacional?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El tema de dirigir tu aplicación a un solo país o a todo el mundo también dió que hablar. Por un lado, yo soy de la opinión de que, ya puestos, mejor dirigirla a todo el mundo haciendo que el idioma principal sea el inglés. Por otro lado, si deseas especializarte en una cultura determinada, mejor centrarte en un solo idioma / zona.&lt;/p&gt;

&lt;p&gt;Un tema que hay que tener en cuenta es que, si se va a cobrar a los usuarios, habrá que enterarse bien de cómo hay que hacer con el IVA e IRPF para poder facturar fuera de nuestro país. Nadie supo dar una respuesta concreta, así que si sabes algo de este tema, se agradece!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# 8 - términos legales&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Es importante también que tengas un apartado de &quot;términos y condiciones&quot; en tu web, explicando hasta donde te responsabilizas. La mayoría de la gente suele hacer un max-mix de los términos y condiciones de otras webs. Sin ir más lejos, los &lt;a href=&quot;http://twitter.com/tos&quot;&gt;términos y condiciones de Twitter&lt;/a&gt; se inspiraron en los de Flickr.&lt;/p&gt;

&lt;p&gt;Infórmate también, si estás en España, sobre la LOPD.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# 9 - desarrollo guiado por tests
&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Al igual que en los proyectos que hagas para clientes, no dejes de cubrir todo tu desarrollo por un buen conjunto de tests que te den confianza sobre tu aplicación y te ayuden a dormir más tranquilo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# 10 - automatiza el mantenimiento del servidor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;También al igual que en los proyectos para clientes, no olvides automatizar al máximo las tareas de mantenimiento del servidor como los backups periódicos, y la &lt;a href=&quot;http://www.jaimeiniesta.com/2008/06/09/controlar-los-mongrels-con-monit-en-slicehost/&quot;&gt;monitorización de servicios&lt;/a&gt;. También con esto, vivirás más tranquilo.&lt;/p&gt;

&lt;p&gt;...y hasta aquí los puntos principales que recuerdo. Si se te ocurre algo más por favor añádelo como comentario aquí mismo. Echa también un vistazo al &lt;a href=&quot;http://www.freelancegirona.com/?p=14&quot;&gt;blog de Freelance Girona&lt;/a&gt; para saber si otros asistentes a la charla han publicado sus conclusiones en sus blogs.&lt;/p&gt;

&lt;p&gt;Para finalizar, la foto del evento cogida del &lt;a href=&quot;http://jordicata.com&quot;&gt;blog de Jordi Catà&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/uploads/2008/09/techcoffe-0041.jpg&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-207&quot; title=&quot;techcoffe-0041&quot; src=&quot;/uploads/2008/09/techcoffe-0041.jpg&quot; alt=&quot;&quot; width=&quot;450&quot; height=&quot;338&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Tech Coffee: Consejos para montar un proyecto propio</title>
   <link href="http://jaimeiniesta.com/2008/09/09/tech-coffee-consejos-para-montar-un-proyecto-propio.html"/>
   <updated>2008-09-09T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/09/09/tech-coffee-consejos-para-montar-un-proyecto-propio</id>
   <content type="html">&lt;div class=&quot;post&quot;&gt;

Tras el verano, volvemos a juntarnos el grupo de freelances de Girona. Ahora con formato de café-tertulia :P
&lt;blockquote&gt;&lt;strong&gt; “&lt;a href=&quot;http://www.freelancegirona.com/?p=14&quot;&gt;Consejos para montar un proyecto propio&lt;/a&gt;”&lt;/strong&gt;

&lt;strong&gt; &lt;/strong&gt;Todos los desarrolladores hablamos mucho sobre montar proyectos propios, y vivir de ellos, además o en lugar de trabajar para clientes. Conocemos las herramientas, conocemos -o creeemos que conocemos- el mercado, y tenemos ganas de desarrollar la aplicación ideal sin ataduras a los deseos de terceras personas. Pero hay algunos puntos que plantean dudas:

* ¿De dónde vendrán los ingresos? ¿Publicidad únicamente, o cobrarás a los usuarios? ¿Un solo pago, mensualmente, anualmente? Tendrás que emitir facturas, ¿cómo harás si tienes 5.000 usuarios?

* Términos y condiciones. ¿Qué cláusulas consideras importante indicar en los términos y condiciones?

* Soporte. ¿Tu aplicación necesitará un equipo de gente dispuesta a resolver problemas técnicas o de los clientes? ¿O lo plantearás lo más automatizable posible? ¿Te atreves con una aplicación crítica, que no puede estar offline nunca, o irás a algo más relajado, una web informativa que si falla durante unas horas no provocará grandes problemas a nadie? ¿Podrás seguir cogiendo vacaciones o tu vida se convertirá en una esclavitud el resto de tus días?

* Internacional.  ¿Tu público será local o internacional? ¿Tendrás soporte para varios idiomas?

&lt;strong&gt;# CUÁNDO:&lt;/strong&gt;

Miércoles, 10 de septiembre de 2008, 11:00

&lt;strong&gt;# DÓNDE:&lt;/strong&gt;

Cafetería TAT
&lt;span&gt;&lt;span&gt;Avinguda Lluís Pericot&lt;/span&gt; &lt;span&gt;56&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;17003&lt;/span&gt; &lt;span&gt;Girona&lt;/span&gt;&lt;/span&gt;
&lt;a href=&quot;http://tinyurl.com/65785v&quot; target=&quot;_blank&quot;&gt;http://tinyurl.com/65785v&lt;/a&gt;&lt;/blockquote&gt;
&lt;/div&gt;

</content>
 </entry>
 
 <entry>
   <title>Cerrado por vacaciones</title>
   <link href="http://jaimeiniesta.com/2008/08/21/cerrado-por-vacaciones.html"/>
   <updated>2008-08-21T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/08/21/cerrado-por-vacaciones</id>
   <content type="html">&lt;p&gt;Tras largos meses de intensa actividad haciendo malabarismos entre varios proyectos, llegó al fin el momento de la pausa veraniega. ¡Me marcho de vacaciones hasta el &lt;strong&gt;8 de septiembre&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;Aprovecharé para descansar, montar en bici, dar largos paseos, descubrir alguna ciudad nueva si me lo permite Ryanair y, por qué no, estudiar alguno de esos libros de Ruby que compré en su día y tan buena pinta tienen.&lt;/p&gt;

&lt;p&gt;Nos vemos a la vuelta! Que descanséis también vosotros! :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Web Spidering con Ruby on Rails, el vídeo de Volcanica</title>
   <link href="http://jaimeiniesta.com/2008/08/20/web-spidering-con-ruby-on-rails-el-video-de-volcanica.html"/>
   <updated>2008-08-20T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/08/20/web-spidering-con-ruby-on-rails-el-video-de-volcanica</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;Boris, la araña volcánica, la película:&lt;/strong&gt; :)
&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; width=&quot;500&quot; height=&quot;420&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0&quot;&gt;&lt;param name=&quot;src&quot; value=&quot;http://blip.tv/play/qjnI8WiKqH0&quot; /&gt;&lt;embed type=&quot;application/x-shockwave-flash&quot; width=&quot;500&quot; height=&quot;420&quot; src=&quot;http://blip.tv/play/qjnI8WiKqH0&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;...este es el vídeo de la charla sobre web spidering que dirigí el año pasado en &lt;a href=&quot;http://volcanica.cat&quot;&gt;Volcanica&lt;/a&gt;. El sonido no es muy bueno porque había ruido de fondo de la sala de al lado pero se agradece de todos modos!&lt;/p&gt;

&lt;p&gt;También están disponibles las presentaciones para su descarga: &lt;a href=&quot;http://www.volcanica.cat/wp-content/uploads/2008/08/introduccion_ruby_on_rails.pdf&quot;&gt;introduccion_ruby_on_rails&lt;/a&gt; y &lt;a href=&quot;http://www.volcanica.cat/wp-content/uploads/2008/08/ruby-web_spidering.odp&quot;&gt;ruby-web_spidering&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Puedes ver los &lt;a href=&quot;http://www.volcanica.cat/?p=42&quot;&gt;vídeos de todo Volcanica 2007 en su web&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Este año cambiaré de tema y hablaré &lt;a href=&quot;http://www.jaimeiniesta.com/2008/08/12/charlas-sobre-ruby-y-shoes-en-volcanica/&quot;&gt;sólo de Ruby&lt;/a&gt;. :P&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Cómo evitar la regeneración de thumbnails con attachment_fu</title>
   <link href="http://jaimeiniesta.com/2008/08/20/como-evitar-la-regeneracion-de-thumbnails-con-attachment_fu.html"/>
   <updated>2008-08-20T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/08/20/como-evitar-la-regeneracion-de-thumbnails-con-attachment_fu</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://svn.techno-weenie.net/projects/plugins/attachment_fu/&quot;&gt;attachment_fu&lt;/a&gt; es seguramente el plugin de subida de adjuntos más usado actualmente en el mundillo Rails, aunque seguido bastante de cerca por el nuevo y también recomendable &lt;a href=&quot;http://www.thoughtbot.com/projects/paperclip&quot;&gt;paperclip&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Un comportamiento que no me gusta de attachment_fu es que tras cada actualización del modelo, regenera el conjunto de thumbnails. Está bien que tras la creación de la foto procese la imagen para generar todos sus thumbnails, pero no me parece buena idea que si simplemente quieres actualizar cualquier otro dato del modelo, se vuelva a regenerar el conjunto de thumbnails.&lt;/p&gt;

&lt;p&gt;Por ejemplo, si tienes un modelo Foto con todos los campos de attachment_fu pero además un campo título... cada vez que actualices la foto aunque sólo sea para cambiarle el título, se volverá a procesar la imagen para generar los thumbnails, dándole carga innecesaria al servidor.&lt;/p&gt;

&lt;p&gt;Afortunadamente esto es código libre y fácil de entender así que mirando el fichero &lt;a href=&quot;http://svn.techno-weenie.net/projects/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb&quot;&gt;attachment_fu.rb&lt;/a&gt;, podemos encontrar esta línea que es la que hace que tras cada .save del modelo se procese el adjunto:
&lt;pre lang=&quot;rails&quot;&gt;base.after_save :after_process_attachment&lt;/pre&gt;
basta con cambiarla a esto:
&lt;pre lang=&quot;rails&quot;&gt;base.after_create :after_process_attachment&lt;/pre&gt;
para que sólo lo haga tras la creación del adjunto, y no en sucesivas actualizaciones.&lt;/p&gt;

&lt;p&gt;Sería interesante mirarlo más en profundidad para que sí lo haga en caso de que le estemos pasando un nuevo fichero de imagen, pero por el momento me vale para mis propósitos... y de todos modos quizá es hora de irse cambiando a paperclip, que por lo que tengo entendido, no tiene este comportamiento... aunque tampoco es del todo cómodo porque he leído que &lt;a href=&quot;http://codetocustomer.com/blog/2008/07/regenerate-paperclip-thumbnails&quot;&gt;para regenerar los thumbnails en paperclip es necesario lanzar una tarea rake&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Charlas sobre Ruby y Shoes en Volcanica</title>
   <link href="http://jaimeiniesta.com/2008/08/12/charlas-sobre-ruby-y-shoes-en-volcanica.html"/>
   <updated>2008-08-12T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/08/12/charlas-sobre-ruby-y-shoes-en-volcanica</id>
   <content type="html">&lt;p&gt;&lt;img style=&quot;margin: 5px; align:right;&quot; title=&quot;shoes-logo&quot; src=&quot;/uploads/2008/08/shoes-logo.png&quot; alt=&quot;&quot; width=&quot;190&quot; height=&quot;122&quot; align=&quot;right&quot; /&gt;&lt;a href=&quot;http://www.jaimeiniesta.com/2007/09/24/dos-talleres-de-ruby-on-rails-en-olot-para-el-20-de-octubre/&quot;&gt;El año pasado dí un par de charlas sobre Rails en el evento Volcanica&lt;/a&gt;, y para la edición de este año (19, 20 y 21 de septiembre) me apetece centrarme más en Ruby...&lt;/p&gt;

&lt;p&gt;Estas son mis propuestas para este año, una sobre introducción a Ruby y otra sobre Shoes, el toolkit para aplicaciones de escritorio con Ruby que me está divirtiendo tantísimo últimamente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;####################
&lt;/strong&gt; &lt;strong&gt;1.- Programación en Ruby&lt;/p&gt;

&lt;h20&gt;&lt;/strong&gt;&lt;/h20&gt;

&lt;p&gt;Ruby es un lenguaje de programación dinámico y de código abierto enfocado en la simplicidad y productividad, entre cuyos principios de diseño está el maximizar la felicidad del programador haciéndole la vida más fácil.&lt;/p&gt;

&lt;p&gt;En este taller daremos un repaso a la sintaxis de Ruby, con ejemplos prácticos de programación y de uso de algunas de las librerías más interesantes de que dispone el lenguaje.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.ruby-lang.org/es/about/&quot;&gt;http://www.ruby-lang.org/es/about/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;###############################
&lt;/strong&gt; &lt;strong&gt;2.- Shoes, programación gráfica con Ruby&lt;/p&gt;

&lt;h31&gt;&lt;/strong&gt;&lt;/h31&gt;

&lt;p&gt;El lenguaje de programación Ruby no está limitado al desarrollo web y scripts de mantenimiento, sino que puede ser empleado también para la programación de aplicaciones de escritorio con interfaz gráfica basada en ventanas.&lt;/p&gt;

&lt;p&gt;Shoes es un toolkit que nos permite programar aplicaciones de ventanas multiplataforma con muy pocas líneas de código, empleando Ruby. Además sus capacidades para gráficos, animaciones, y audio nos permiten programar juegos y demos.&lt;/p&gt;

&lt;p&gt;Las posibilidades de Shoes y la sencillez de su sintaxis lo hace muy apropiado para enseñar a programar a niños, así como a los adultos que echamos de menos los años dorados del ZX Spectrum :)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://code.whytheluckystiff.net/shoes&quot;&gt;http://code.whytheluckystiff.net/shoes&lt;/a&gt;
&lt;a href=&quot;http://www.the-shoebox.org/&quot;&gt; http://www.the-shoebox.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Más información sobre el evento Volcanica en:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.volcanica.cat&quot;&gt;http://www.volcanica.cat&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Conversión de moneda con Google y Ruby</title>
   <link href="http://jaimeiniesta.com/2008/08/07/conversion-de-moneda-con-google-y-ruby.html"/>
   <updated>2008-08-07T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/08/07/conversion-de-moneda-con-google-y-ruby</id>
   <content type="html">&lt;p&gt;Tras leer esta idea de Albert Coronado para &lt;a href=&quot;http://blog.lostsys.com/?p=229&quot;&gt;convertir moneda con Google y PHP&lt;/a&gt;, se me ha ocurrido probar a hacer lo mismo con Ruby, y este es el resultado:
&lt;pre lang='ruby' line='1'&gt;require 'open-uri'&lt;/p&gt;

&lt;p&gt;class ConversorMonedaGoogle&lt;/p&gt;

&lt;p&gt;  def self.euro_a_dolar&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;google = open(&quot;http://google.es/search?q=1+Euro+to+%24&quot;).read
pos_euro = google.index(&quot;1 Euro = &quot;)
pos_dolar = google.index(&quot;US$&quot;)

google[pos_euro+9 .. pos_dolar-2]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;  end&lt;/p&gt;

&lt;p&gt;end&lt;/p&gt;

&lt;h1&gt;Llamada de prueba...&lt;/h1&gt;

&lt;p&gt;puts &quot;El euro está hoy a #{ConversorMonedaGoogle.euro_a_dolar} dólares según Google&quot;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Básicamente, usamos la librería estándar open-uri para leer los resultados de buscar en Google &quot;1 Euro to $&quot;, y después buscamos el resultado mirando en el HTML devuelto como si fuera lo que es, simplemente una cadena de texto.&lt;/p&gt;

&lt;p&gt;Como apunta Albert, hay que tener en cuenta que para usar esto en serio tendríamos que hacer cache del resultado, apuntarlo en base de datos, lo que sea, pero no estar consultando continuamente a Google porque sería muy lento.&lt;/p&gt;

&lt;p&gt;Pero como idea, es divertido y además lo podemos extender a otras &lt;a href=&quot;http://www.google.com/help/features.html#currency&quot;&gt;conversiones que nos proporciona Google&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Analiza los cuellos de botella de MySQL con Query-Reviewer</title>
   <link href="http://jaimeiniesta.com/2008/08/05/analiza-los-cuellos-de-botella-de-mysql-con-query-reviewer.html"/>
   <updated>2008-08-05T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/08/05/analiza-los-cuellos-de-botella-de-mysql-con-query-reviewer</id>
   <content type="html">&lt;p&gt;A raíz del artículo &quot;&lt;a href=&quot;http://blog.scoutapp.com/articles/2008/07/29/4-simple-steps-to-detect-and-fix-slow-rails-requests&quot;&gt;4 simple steps to detect &amp;amp; fix slow rails requests&lt;/a&gt;&quot; he descubierto un plugin muy interesante para detectar cuellos de botella en las consultas a MySQL desde nuestras aplicaciones Rails.&lt;/p&gt;

&lt;p&gt;Se trata de &lt;a href=&quot;http://code.google.com/p/query-reviewer/&quot;&gt;query-reviewer&lt;/a&gt;, que se encarga de mostrarnos avisos directamente con una capa flotante en el navegador, cuando estamos en modo de desarrollo. El plugin analiza las consultas realizadas y nos indica si todo va bien, o muestra los avisos de que hay cosas que se podrían mejorar, por qué y cómo.&lt;/p&gt;

&lt;p&gt;Tras un rato examinando los avisos generados y siguiendo sus consejos para añadir índices a las tablas y contadores a algunas asociaciones en los modelos, he incrementado por 3 la velocidad de respuesta de algunas de las partes de mis aplicaciones.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/uploads/2008/08/picture_4.png&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-171&quot; title=&quot;query-reviewer en acción&quot; src=&quot;/uploads/2008/08/picture_4.png&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;343&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Conferencia Rails 2008... here we go again!</title>
   <link href="http://jaimeiniesta.com/2008/08/04/conferencia-rails-2008-here-we-go-again.html"/>
   <updated>2008-08-04T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/08/04/conferencia-rails-2008-here-we-go-again</id>
   <content type="html">&lt;p&gt;Aunque este año hemos tardado un poco en arrancar, el equipo de organización de la Conferencia Rails estamos de nuevo a la carga organizando el evento.&lt;/p&gt;

&lt;p&gt;Ya nos puedes enviar tus propuestas de charlas, tanto si son ponencias técnicas como casos de éxito (qué mejor ocasión para promocionar tu nueva app)...&lt;/p&gt;

&lt;p&gt;Toda la información actualizada en el blog oficial, &lt;a href=&quot;http://www.conferenciarails.org&quot;&gt;www.conferenciarails.org&lt;/a&gt; y en nuestro canal de twitter, &lt;a href=&quot;http://twitter.com/conferenciaror&quot;&gt;twitter.com/conferenciaror&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PageRankAlert, reescrito y en nuevo servidor</title>
   <link href="http://jaimeiniesta.com/2008/07/22/pagerankalert-reescrito-y-en-nuevo-servidor.html"/>
   <updated>2008-07-22T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/07/22/pagerankalert-reescrito-y-en-nuevo-servidor</id>
   <content type="html">&lt;p&gt;La semana pasada completé la reescritura de &lt;a href=&quot;http://pagerankalert.com&quot;&gt;PageRankAlert.com&lt;/a&gt; y tras unos días funcionando en el nuevo servidor (slicehost, antes estaba en dreamhost), y unas pocas pruebas, la doy por inaugurada :)&lt;/p&gt;

&lt;p&gt;Se trata de una limpieza de códigos y reescritura para sentar la base a las nuevas funcionalidades que tengo en mente y comenzaréis a ver en los próximos días.&lt;/p&gt;

&lt;p&gt;Por el momento poca cosa nueva aparte de que ahora el PageRank se calcula en tiempo real (te devuelve el valor en el instante), y que además el bot notifica a través de Twitter, y un par de veces por día va contando las novedades:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://twitter.com/pagerankalert&quot;&gt;http://twitter.com/pagerankalert&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y tú, ¿ya tienes tu lista de monitorización de PageRank para tus webs?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Compatibilizar ar_mailer con exception_notifier</title>
   <link href="http://jaimeiniesta.com/2008/07/22/compatibilizar-ar_mailer-con-exception_notifier.html"/>
   <updated>2008-07-22T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/07/22/compatibilizar-ar_mailer-con-exception_notifier</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://agilewebdevelopment.com/plugins/exception_notifier&quot;&gt;Exception Notifier&lt;/a&gt; es un plugin muy recomendable para recibir notificaciones por email de los errores de tus aplicaciones rails en producción, con todo detalle de lo que ocurrió. Lo considero imprescindible en todas mis aplicaciones. Amaia tiene un excelente &lt;a href=&quot;http://apuntesderails.amaiac.net/archives/2007/5/23/exception_notifier_plugin/&quot;&gt;tutorial sobre Exception Notifier&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Por otro lado, si tu aplicación maneja mucho envío de emails, es recomendable usar algún sistema de colas para el envío de correos. &lt;a href=&quot;http://seattlerb.rubyforge.org/ar_mailer/&quot;&gt;Ar_mailer&lt;/a&gt; es una gema genial para esto, que permite delegar el envío de correos a un demonio de manera que los mails se apuntan en una tabla y el demonio los va leyendo de ésta para enviarlos en background.&lt;/p&gt;

&lt;p&gt;Peeeeerooo... resulta que tras instalar ar_mailer, dejé de recibir las notificaciones de exception_notifier. Out-of-the-box ambos sistemas son incompatibles, con lo que en caso de ocurrir una excepción en la aplicación, cuando exception_notifier intenta enviar un email, no se entiende bien con ar_mailer y no se llega a producir el envío, dando un error 500.&lt;/p&gt;

&lt;p&gt;Afortunadamente, &lt;a href=&quot;http://www.zenspider.com/pipermail/ruby/2007-September/003749.html&quot;&gt;googleando un poco encontré la solución&lt;/a&gt;. Basta con añadir esta línea al fichero &lt;strong&gt;config/initializers/exception_notifier.rb&lt;/strong&gt; para que no no se use ARMailer para el envío de notificaciones sino que lo haga directamente (en lugar de a través de activerecord como se hace con ARMailer). En mi caso uso SMTP, pero también podría valer :sendmail.
&lt;pre&gt;ExceptionNotifier.delivery_method = :smtp&lt;/pre&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Envío de correos a través de Gmail con Rails</title>
   <link href="http://jaimeiniesta.com/2008/07/16/envio-de-correos-a-traves-de-gmail-con-rails.html"/>
   <updated>2008-07-16T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/07/16/envio-de-correos-a-traves-de-gmail-con-rails</id>
   <content type="html">&lt;p&gt;&lt;img class=&quot;size-medium wp-image-160 alignright&quot; title=&quot;logo_gmail&quot; src=&quot;/uploads/2008/07/logo_gmail.png&quot; alt=&quot;&quot; width=&quot;143&quot; height=&quot;59&quot; /&gt;Gmail, al igual que Google Apps for Domains, se puede usar como servidor de correo saliente (SMTP) para nuestras aplicaciones Rails. Lo único es que como requiere autenticación TLS, no vale con usar simplemente &quot;smtp.gmail.com&quot; como servidor de correo saliente.&lt;/p&gt;

&lt;p&gt;El plugin &lt;a href=&quot;http://code.openrain.com/rails/action_mailer_tls/&quot;&gt;action_mailer_tls&lt;/a&gt; resuelve el problema rápidamente:
&lt;pre&gt;script/plugin install http://code.openrain.com/rails/action_mailer_tls/&lt;/pre&gt;
Una vez instalado, en la carpeta /vendor/plugins/action_mailer_tls/sample encontrarás dos ficheros. Copia &lt;strong&gt;smtp_gmail.rb&lt;/strong&gt; dentro de tu carpeta /config/initializers, y copia &lt;strong&gt;mailer.yml.sample&lt;/strong&gt; a tu carpeta /config, renombrándolo a &lt;strong&gt;mailer.yml&lt;/strong&gt;. Finalmente, edita este fichero para usar el user_name y password de la cuenta de correo de Gmail que quieras usar... reinicia el servidor y... ya puedes enviar correos a través de Gmail desde tu aplicación!&lt;/p&gt;

&lt;p&gt;Más información en el blog de &lt;a href=&quot;http://www.danielfischer.com/2008/01/09/how-to-use-gmail-as-your-mail-server-for-rails/&quot;&gt;Daniel Fischer&lt;/a&gt; y en el &lt;a href=&quot;http://code.openrain.com/rails/action_mailer_tls/README&quot;&gt;README&lt;/a&gt; del plugin.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Reescribiendo PageRankAlert.com</title>
   <link href="http://jaimeiniesta.com/2008/07/15/reescribiendo-pagerankalertcom.html"/>
   <updated>2008-07-15T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/07/15/reescribiendo-pagerankalertcom</id>
   <content type="html">&lt;p&gt;&lt;img class=&quot;alignright&quot; style=&quot;margin: 5px; float: right;&quot; src=&quot;/uploads/2007/03/pagerankalert-banner-01.png&quot; alt=&quot;&quot; width=&quot;151&quot; height=&quot;43&quot; /&gt;Ya hace dos años y medio que comencé con &lt;a href=&quot;http://pagerankalert.com&quot;&gt;PageRankAlert.com&lt;/a&gt;, una aplicación web que rastrea la evolución en el valor de PageRank para las webs que envían los usuarios.&lt;/p&gt;

&lt;p&gt;Dos años y medio! En ese tiempo han pasado muchas cosas en el mundillo Rails y he aprendido muchas cosas nuevas sobre programación con Ruby on Rails...&lt;/p&gt;

&lt;p&gt;Es hora de lanzar una nueva versión. Aunque todo sigue funcionando como el primer día (la aplicación tiene almacenados 37.000+ cambios de PageRank para 8.000+ URLs), he decidido reescribir los códigos por completo, aprovechando la tranquilidad del verano.&lt;/p&gt;

&lt;p&gt;Nuevos códigos, nueva funcionalidad y nuevo diseño. Próximamente en tu navegador favorito.&lt;/p&gt;

&lt;p&gt;Si tienes alguna idea, sugerencia, consejillo, algo que te gustaría ver incluido en la siguiente versión... te agradeceré que me dejes un comentario.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>MetaInspector en GitHub</title>
   <link href="http://jaimeiniesta.com/2008/06/27/metainspector-en-github.html"/>
   <updated>2008-06-27T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/06/27/metainspector-en-github</id>
   <content type="html">&lt;p&gt;Mi gema MetaInspector ahora se encuentra alojada en GitHub en lugar de RubyForge.&lt;/p&gt;

&lt;p&gt;MetaInspector es una gema ruby a la que le das una URL, la visita y te devuelve un hash con su título, description, keywords y enlaces. Muy sencillita y básica, y con códigos por pulir y mejorar... se trataba sólo de probar a hacer una gema.&lt;/p&gt;

&lt;p&gt;Ahora he descubierto GitHub y me encanta el concepto de &quot;Social Code Hosting&quot;. Espero recibir colaboraciones al código pronto!&lt;/p&gt;

&lt;p&gt;Más info en &lt;a href=&quot;http://code.jaimeiniesta.com/metainspector&quot;&gt;code.jaimeiniesta.com/metainspector&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Controlar los mongrels con monit en Slicehost</title>
   <link href="http://jaimeiniesta.com/2008/06/09/controlar-los-mongrels-con-monit-en-slicehost.html"/>
   <updated>2008-06-09T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/06/09/controlar-los-mongrels-con-monit-en-slicehost</id>
   <content type="html">&lt;p&gt;Recientemente me he estado pegando con mi mongrel cluster en un una de mis aplicaciones en Slicehost... Los mongrel comenzaban ocupando menos de 50 Mb de memoria pero conforme pasaban los días iban ganando peso y llegaban a chupar cerca de 200 Mb, acabando con la memoria disponible...&lt;/p&gt;

&lt;p&gt;Parece que esta facilitar para ganar peso de los mongrels es en parte natural (van creciendo conforme van cargando códigos de la aplicación) y en parte debido a bugs en el propio código de mongrel, plugins de rails, etc. Sea como sea, es necesario mantenerlos a raya.&lt;/p&gt;

&lt;p&gt;Para ello, qué mejor que &lt;a href=&quot;http://www.tildeslash.com/monit/&quot;&gt;monit&lt;/a&gt;. Esta aplicación se emplea para controlar los procesos de un servidor, de manera que podemos medir continuamente el tamaño de ram que emplean (y otras medidas como uso de cpu, carga...) y reiniciarlos en caso necesario. También puede encargarse de comprobar que los procesos están corriendo y lanzarlos en caso de que se hubieran caído. Lo podemos usar para todos los procesos del servidor, no sólo los mongrels: nginx, apache, mysqld, sendmail, etc.&lt;/p&gt;

&lt;p&gt;Os cuento cómo lo monté en mi servidor debian en slicehost:&lt;/p&gt;

&lt;p&gt;1.- En primer lugar, instalamos monit:&lt;/p&gt;

&lt;pre&gt;sudo apt-get install monit&lt;/pre&gt;


&lt;p&gt;2.- Una vez instalado, tenemos un fichero de configuración de monit. Está bien guardarlo como ejemplo pues vienen muchos casos útiles, pero para simplemente controlar mongrels, podéis hacer como en este ejemplo:&lt;/p&gt;

&lt;pre&gt;set daemon 60
set mailserver localhost
set mail-format { from: monit@tuaplicacion.com }
set alert tu@email.com
 
set logfile /var/log/monit.log
 
##### mongrel 12000 #####
check process mongrel-12000 with pidfile /home/usuario/apps/aplicacion/tmp/pids/mongrel.12000.pid
    start program = &quot;/usr/bin/mongrel_rails cluster::start -C /home/usuario/apps/aplicacion/config/mongrel_cluster.yml --clean --only 12000&quot;
    stop program  = &quot;/usr/bin/mongrel_rails cluster::stop -C /home/usuario/apps/aplicacion/config/mongrel_cluster.yml --clean --only 12000&quot;
 
    if totalmem is greater than 75.0 MB for 5 cycles then restart       # eating up memory?
    if cpu is greater than 50% for 2 cycles then alert                  # send an email to admin
    if cpu is greater than 80% for 3 cycles then restart                # hung process?
    if loadavg(5min) greater than 10 for 8 cycles then restart          # bad, bad, bad
    if 3 restarts within 5 cycles then timeout                          # something is wrong, call the sys-admin
 
    if failed port 12000 protocol http                   # check for response
        with timeout 10 seconds
        then restart
    group mongrel&lt;/pre&gt;


&lt;p&gt;El código es muy fácil de entender:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La primera línea establece cada cuántos segundos se despertará monit para hacer sus comprobaciones&lt;/li&gt;
&lt;li&gt;El siguiente bloque establece la configuración para los envíos de email de alerta&lt;/li&gt;
&lt;li&gt;La línea de logfile indica en qué ficheros guardar los logs&lt;/li&gt;
&lt;li&gt;Y después, un bloque para cada proceso que se quiera vigilar. Para cada proceso hay que indicar el nombre que le daremos a este, dónde puede encontrar el PID del proceso, y cuál es el comando para arrancarlo y para pararlo. A continuación, se pueden poner varias directivas para las comprobaciones. En este ejemplo, si el mongrel consume más de 75 Mb de RAM durante 5 comprobaciones (cycles) seguidas, se reiniciará el proceso (vamos, se le hará un stop y un start con los comandos arriba indicados). Hay otras comprobaciones adicionales debajo. También se comprueba que el mongrel esté accesible en su puerto, y si no se reinicia, etc.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;En mi caso tengo 3 mongrels... para controlar los otros dos se copia ese ultimo parrafo exactamente igual para cada uno, pero cada uno en su puerto, claro... 12001 y 12002 en mi caso.&lt;/p&gt;

&lt;p&gt;3.- Ya casi estamos... para indicar que monit se arranque al iniciar el servidor, editaremos el fichero &lt;b&gt;/etc/default/monit&lt;/b&gt; y lo indicaremos mediante la línea &lt;b&gt;startup=1&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;4.- Y finalmente, para lanzar monit ahora sin tener que reiniciar el servidor...&lt;/p&gt;

&lt;pre&gt;sudo /etc/init.d/monit start&lt;/pre&gt;


&lt;p&gt;5.- Como nota final, un tema que me encontré es que cuando monit entraba en acción y reiniciaba algún mongrel, me los lanzaba como usuario root en lugar de como el usuario no-root con el que normalmente lanzo el mongrel cluster. Esto era porque me faltaba indicar en el fichero &lt;b&gt;config/mongrel_cluster.yml&lt;/b&gt; de mi aplicación el usuario y grupo con el que se deben ejecutar los mongrels:&lt;/p&gt;

&lt;pre&gt;--- 
user: usuario
group: grupo
(...)
&lt;/pre&gt;


&lt;p&gt;Eso es todo amigos... espero que os venga bien y os facilite la vida al tener que estar menos pendientes del servidor...&lt;/p&gt;

&lt;p&gt;Gracias a &lt;a href=&quot;http://twitter.com/marze&quot;&gt;Marze&lt;/a&gt; y &lt;a href=&quot;http://twitter.com/therobot&quot;&gt;The Robot&lt;/a&gt; por sugerirme usar monit, y a &lt;a href=&quot;http://cientifico.net&quot;&gt;Guillermo&lt;/a&gt; por darme la pista sobre el tema del usuario no-root en la lista &lt;a href=&quot;http://lists.simplelogica.net/pipermail/hacking-es/&quot;&gt;hacking-es&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Aplicación Rails que se autodestruye</title>
   <link href="http://jaimeiniesta.com/2008/06/05/aplicacion-rails-que-se-autodestruye.html"/>
   <updated>2008-06-05T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/06/05/aplicacion-rails-que-se-autodestruye</id>
   <content type="html">&lt;p&gt;&lt;a title=&quot;Suicidio de amor / Love suicide&quot; href=&quot;http://www.flickr.com/photos/54115106@N00/2531613039/&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;alignright&quot; style=&quot;float: right; border: 0 none #000000;&quot; src=&quot;http://farm3.static.flickr.com/2267/2531613039_7ca8bf2d12_t.jpg&quot; border=&quot;0&quot; alt=&quot;Suicidio de amor / Love suicide&quot; /&gt;&lt;/a&gt;Tras leer el interesante artículo &lt;a href=&quot;http://www.rubyinside.com/21-ruby-tricks-902.html&quot;&gt;21 Ruby Tricks You Should Be Using In Your Own Code&lt;/a&gt; sobre la posibilidad de borrar un árbol de directorios con FileUtils.rm_r 'nombre_directorio' no pude resistir la tentación de probar esto:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;rails autodestroy
cd autodestroy
script/generate controller Suicide now&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Y en app/controllers/suicide_controller.rb:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;def now
&lt;/code&gt;&lt;code&gt;FileUtils.rm_r &quot;#{RAILS_ROOT}&quot;
end&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Listos para la autodestrucción...&lt;/p&gt;

&lt;p&gt;script/server
Al visitar http://localhost:3000/suicide/now, la aplicación se borrará a si misma del disco duro.&lt;/p&gt;

&lt;p&gt;Manejar con cuidado! :P&lt;/p&gt;

&lt;p&gt;&lt;small&gt;&lt;a title=&quot;Attribution-NoDerivs License&quot; href=&quot;http://creativecommons.org/licenses/by-nd/2.0/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.jaimeiniesta.com/wp-content/plugins/photo_dropper/images/cc.png&quot; border=&quot;0&quot; alt=&quot;Creative Commons License&quot; width=&quot;16&quot; height=&quot;16&quot; align=&quot;middle&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.photodropper.com/photos/&quot; target=&quot;_blank&quot;&gt;photo&lt;/a&gt; credit: &lt;a title=&quot;Vagamundos&quot; href=&quot;http://www.flickr.com/photos/54115106@N00/2531613039/&quot; target=&quot;_blank&quot;&gt;Vagamundos&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Euruko 2009, en Barcelona</title>
   <link href="http://jaimeiniesta.com/2008/05/14/euruko-2009-en-barcelona.html"/>
   <updated>2008-05-14T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/05/14/euruko-2009-en-barcelona</id>
   <content type="html">&lt;p&gt;&lt;a title=&quot;My entry to the ruby logo contest&quot; href=&quot;http://www.flickr.com/photos/51035660441@N01/1366387651/&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;alignright&quot; style=&quot;border: 0pt none; float: right;&quot; src=&quot;http://farm2.static.flickr.com/1387/1366387651_060c1c9d50_t.jpg&quot; border=&quot;0&quot; alt=&quot;My entry to the ruby logo contest&quot; /&gt;&lt;/a&gt;
Ya es oficial!&lt;/p&gt;

&lt;p&gt;La candidatura que hemos presentado desde el &lt;a href=&quot;http://www.srug.org&quot;&gt;Spanish Ruby Users Group&lt;/a&gt; para organizar la&lt;a href=&quot;http://www.euruko2009.org&quot;&gt; Euruko 2009&lt;/a&gt; en Barcelona ha sido aceptada.&lt;/p&gt;

&lt;p&gt;Comienza un largo trabajo de organización para traernos la mejor conferencia de Ruby a casa... Seguiremos informando!&lt;/p&gt;

&lt;p&gt;&lt;small&gt;&lt;a title=&quot;Attribution-ShareAlike License&quot; href=&quot;http://creativecommons.org/licenses/by-sa/2.0/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.jaimeiniesta.com/wp-content/plugins/photo_dropper/images/cc.png&quot; border=&quot;0&quot; alt=&quot;Creative Commons License&quot; width=&quot;16&quot; height=&quot;16&quot; align=&quot;absmiddle&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.photodropper.com/photos/&quot; target=&quot;_blank&quot;&gt;photo&lt;/a&gt; credit: &lt;a title=&quot;dandiemer&quot; href=&quot;http://www.flickr.com/photos/51035660441@N01/1366387651/&quot; target=&quot;_blank&quot;&gt;dandiemer&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Charla sobre programación Java en la UdG</title>
   <link href="http://jaimeiniesta.com/2008/04/15/charla-sobre-programacion-java-en-la-udg.html"/>
   <updated>2008-04-15T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/04/15/charla-sobre-programacion-java-en-la-udg</id>
   <content type="html">&lt;p&gt;El grupo Freelance Girona seguimos en activo organizando charlas... Este miércoles contaremos con una charla sobre Java y ejemplos prácticos de una aplicación que corra sobre distintos entornos (PC, PDA y Web).&lt;/p&gt;

&lt;p&gt;Más datos aquí:
&lt;h3 class=&quot;posttitle&quot; id=&quot;post-11&quot;&gt;&lt;a href=&quot;http://www.freelancegirona.com/?p=11&quot; rel=&quot;bookmark&quot;&gt;Pròxima Xerrada del Grup 16 d’abril a les 20:00 Sala d’actes del P4&lt;/a&gt;&lt;/h3&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Euruko 2009 en Madrid?</title>
   <link href="http://jaimeiniesta.com/2008/03/30/euruko-2009-en-madrid.html"/>
   <updated>2008-03-30T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/03/30/euruko-2009-en-madrid</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;/uploads/2008/03/euruko_2009_madrid_or_what.jpg&quot; title=&quot;Euruko 2009&quot;&gt;&lt;img src=&quot;/uploads/2008/03/euruko_2009_madrid_or_what.thumbnail.jpg&quot; alt=&quot;Euruko 2009&quot; align=&quot;right&quot; hspace=&quot;5&quot; /&gt;&lt;/a&gt;Euruko 2008 acaba de finalizar. Ahora toca decidir en qué ciudad se celebrará Euruko 2009. La cosa está entre Madrid y Cracovia.&lt;/p&gt;

&lt;p&gt;Ayuda a decidir apuntandote al grupo de Euruko en Facebook.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Guebs.com, hosting Ruby on Rails compartido y de calidad en España</title>
   <link href="http://jaimeiniesta.com/2008/03/13/guebscom-hosting-ruby-on-rails-compartido-y-de-calidad-en-espana.html"/>
   <updated>2008-03-13T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2008/03/13/guebscom-hosting-ruby-on-rails-compartido-y-de-calidad-en-espana</id>
   <content type="html">&lt;p&gt;Hace tiempo que quería escribir en mi blog sobre lo contento que estoy con el hosting Ruby on Rails compartido que ofrece &lt;a href=&quot;http://www.guebs.com/&quot;&gt;guebs.com&lt;/a&gt;, pero nunca me acuerdo... ¿Por qué cuando estamos contentos no escribimos más sobre ello?&lt;/p&gt;

&lt;p&gt;El caso es que desde noviembre de 2007 estoy alojando uno de los proyectos Ruby on Rails que mantengo, &lt;a href=&quot;http://www.nurbijou.com&quot;&gt;NURbijou.com&lt;/a&gt;, y por recomendación de &lt;a href=&quot;http://amaiac.net&quot;&gt;Amaia&lt;/a&gt;, elegí a Guebs.com para el alojamiento rails. Han pasado ya casi 5 meses y todo sigue funcionando igual de bien que el primer día.&lt;/p&gt;

&lt;p&gt;Esta empresa de hosting ofrece todo lo que necesitas para subir tu aplicación rails: acceso ssh, subversion, gemas (puedes instalarlas como usuario), y además un magnífico soporte. En mi caso, se encargaron de instalar algunas gemas que necesitaba y lo hicieron de un día para otro.&lt;/p&gt;

&lt;p&gt;Y no, no tengo acciones en la empresa :) Simplemente soy un usuario contento con un servicio que da exactamente lo que ofrece: hosting sencillo.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Cómo recortar imágenes con attachment_fu y mini_magick</title>
   <link href="http://jaimeiniesta.com/2008/02/29/como-recortar-imagenes-con-attachment_fu-y-mini_magick.html"/>
   <updated>2008-02-29T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/02/29/como-recortar-imagenes-con-attachment_fu-y-mini_magick</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2008/02/avatar_max_headroom.thumbnail.jpg&quot; alt=&quot;avatar_max_headroom.jpg&quot; align=&quot;right&quot; height=&quot;100&quot; width=&quot;100&quot; /&gt;&lt;a href=&quot;http://clarkware.com/cgi/blosxom/2007/02/24&quot;&gt;Attachment_fu&lt;/a&gt; es genial para subir y redimensionar imágenes en el servidor, pero de serie viene sin soporte para recortar (crop) las fotos.&lt;/p&gt;

&lt;p&gt;El cropping o recorte de imágenes es algo muy interesante para generar sitios de mejor aspecto: sobre todo, por ejemplo, para que los thumbnails tengan unas dimensiones fijas (digamos, 100x100px) independientemente de las dimensiones de la foto original, o de si esta era apaisada o vertical.&lt;/p&gt;

&lt;p&gt;También viene bien en aquellos proyectos dirigidos por el diseñador, que, sobre todo si viene del mundo Flash, te impondrá su criterio estético en el que es super-importante que las imágenes vayan recortadas a las dimensiones específicas que te indique (esto me pasó en el proyecto &lt;a href=&quot;http://www.nurbijou.com/&quot;&gt;Nurbijou&lt;/a&gt;, donde las imágenes de portada van a 295x240px, que es casi 320x240, pero no lo es... así que toca recortar.&lt;/p&gt;

&lt;p&gt;Si necesitas recortar las fotos, echa un vistazo a &lt;a href=&quot;http://blog.iandrysdale.com/2007/05/22/cropped-thumbnails-in-attachment_fu-using-mini_magick/&quot;&gt;este tutorial de Ian Drysdale&lt;/a&gt; para saber cómo has de parchear el attachment_fu. Para tu comodidad, adjunto los dos ficheros modificados.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/uploads/2008/02/mini_magick_processor.rb&quot; title=&quot;mini_magick_processor.rb&quot;&gt;mini_magick_processor.rb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/uploads/2008/02/mini_magick_processor.rb&quot; title=&quot;mini_magick_processor.rb&quot;&gt;&lt;/a&gt;&lt;a href=&quot;/uploads/2008/02/geometry.rb&quot; title=&quot;geometry.rb&quot;&gt;geometry.rb&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Cómo procesar hojas de cálculo con Ruby</title>
   <link href="http://jaimeiniesta.com/2008/02/23/como-procesar-hojas-de-calculo-con-ruby.html"/>
   <updated>2008-02-23T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/02/23/como-procesar-hojas-de-calculo-con-ruby</id>
   <content type="html">&lt;p&gt;Ya hace un tiempo escribí unos pequeños ejemplos de &lt;a href=&quot;http://www.jaimeiniesta.com/index.php?s=excel&quot;&gt;tratamiento de hojas de cálculo Excel desde Ruby&lt;/a&gt;, que nos permitía importar y exportar datos.&lt;/p&gt;

&lt;p&gt;Ahora acabo de probar &lt;a href=&quot;http://roo.rubyforge.org/&quot;&gt;roo&lt;/a&gt;, una gema para leer hojas de cálculo en formato ODS (OpenOffice), XLS (Excel) e incluso Google Spreadsheet. Para ODS y XLS sólo tiene soporte de lectura, pero para Google Spreadsheet también de escritura.&lt;/p&gt;

&lt;p&gt;Aquí os dejo un ejemplo de cómo leer una hoja de cálculo de OpenOffice, sacar datos de ella y mostrarlo en formato YAML, que después podremos importar fácilmente desde Rails. Aunque la propia gema roo dispone de un método .to_yaml, no conseguí hacerlo funcionar así que lo pinté a pata.&lt;/p&gt;

&lt;pre&gt;# ods.rb
require 'rubygems'
require 'roo'
 
oo = Openoffice.new(&quot;plantas.ods&quot;)
oo.default_sheet = oo.sheets.first
2.upto(oo.last_row) do |line|
  nombre = oo.cell(line, 'A')
  familia = oo.cell(line, 'S')

  puts &quot;planta#{line}:\n  nombre: #{nombre}\n  familia: #{familia}\n\n&quot; 
end&lt;/pre&gt;


&lt;p&gt;Para ejecutarlo y salvar el fichero YAML, directamente desde consola:&lt;/p&gt;

&lt;pre&gt;$ ruby ods.rb &gt; plantas.yml&lt;/pre&gt;

</content>
 </entry>
 
 <entry>
   <title>In The Ghetto</title>
   <link href="http://jaimeiniesta.com/2008/02/22/in-the-ghetto.html"/>
   <updated>2008-02-22T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/02/22/in-the-ghetto</id>
   <content type="html">&lt;p&gt;Ya hemos llegado al viernes! Para terminar esta semana dedicada a canciones relacionadas con Ruby, nos despedimos con este temazo dedicado a &lt;a href=&quot;http://www.zedshaw.com/rants/rails_is_a_ghetto.html&quot;&gt;Zed Shaw&lt;/a&gt;...&lt;/p&gt;

&lt;p&gt;&lt;object width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/zmVFnhO3A98&amp;amp;rel=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/zmVFnhO3A98&amp;amp;rel=1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In the ghetto, de Elvis Presley&lt;/strong&gt;
As the snow flies
On a cold and gray chicago mornin
A poor little baby child is born
&lt;strong&gt;In the ghetto&lt;/strong&gt;
And his mama cries
cause if theres one thing that she dont need
Its another hungry mouth to feed
In the ghetto&lt;/p&gt;

&lt;p&gt;People, dont you understand
The child needs a helping hand
Or hell grow to be an angry young man some day
Take a look at you and me,
Are we too blind to see,
Do we simply turn our heads
And look the other way&lt;/p&gt;

&lt;p&gt;Well the world turns
And a hungry little boy with a runny nose
Plays in the street as the cold wind blows
&lt;strong&gt;In the ghetto&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And his hunger burns
So he starts to roam the streets at night
And he learns how to steal
And he learns how to fight
&lt;strong&gt;In the ghetto&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then one night in desperation
A young man breaks away
He buys a gun, steals a car,
Tries to run, but he dont get far
And his mama cries&lt;/p&gt;

&lt;p&gt;As a crowd gathers round an angry young man
Face down on the street with a gun in his hand
&lt;strong&gt;In the ghetto&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As her young man dies,
On a cold and gray chicago mornin,
Another little baby child is born
&lt;strong&gt;In the ghetto&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Y con esto nos despedimos de este especial... Es una pena no haber encontrado el vídeo de la canción que me dió la idea de hacer este especial, &quot;&lt;a href=&quot;http://www.amazon.com/Ruby-Dear-Remastered-Album-Version/dp/B00122RTRC/ref=sr_1_1?ie=UTF8&amp;amp;amp;s=dmusic&amp;amp;amp;qid=1203095861&amp;amp;amp;sr=8-1&quot;&gt;Ruby Dear&lt;/a&gt;&quot;, de &lt;a href=&quot;http://www.thismustbetheplace.net&quot;&gt;Talking Heads&lt;/a&gt;, pero no se puede tener todo en la vida!&lt;/p&gt;

&lt;p&gt;Quedan muchas canciones relacionadas con Ruby, os reto a buscar canciones para Rails... y ya puestos, para Merb! Eso si que tendrá mérito...&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Automatiza las tareas tediosas con Firewatir</title>
   <link href="http://jaimeiniesta.com/2008/02/22/automatiza-las-tareas-tediosas-con-firewatir.html"/>
   <updated>2008-02-22T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/02/22/automatiza-las-tareas-tediosas-con-firewatir</id>
   <content type="html">&lt;p&gt;Como parte de un proyecto que estoy acabando ahora, tenía que cambiar la configuración de 248 dominios en &lt;a href=&quot;http://godaddy.com&quot;&gt;Godaddy.com&lt;/a&gt; para que apuntaran a la IP del servidor...&lt;/p&gt;

&lt;p&gt;En Godaddy.com no tienen una herramienta automatizada para cambiar el valor que necesitaba en muchos dominios a la vez... parecía que tocaba hacer el cambio a pata... Afortunadamente, &lt;a href=&quot;http://twitter.com/ernesto_jimenez&quot;&gt;Ernesto Jimenez en su twitter&lt;/a&gt; me sugirió que lo automatizara con &lt;a href=&quot;http://mechanize.rubyforge.org/mechanize/&quot;&gt;mechanize&lt;/a&gt;...&lt;/p&gt;

&lt;p&gt;Finalmente no fué mechanize, sino &lt;a href=&quot;http://code.google.com/p/firewatir/&quot;&gt;FireWatir&lt;/a&gt; lo que empleé... en un rato tenía montado este script que hizo el cambio para cada uno de los 248 dominios él solito en cosa de 50 minutos, mientras yo me dedicaba a hacer cosas más interesantes...&lt;/p&gt;

&lt;p&gt;Firewatir puede visitar webs, pulsar enlaces, rellenar formularios y mucho más de manera automatizada... seguro que te puede evitar mucho trabajo tedioso, échale un vistazo porque es muy sencillo de usar.
&lt;pre&gt;require &quot;rubygems&quot;
require &quot;firewatir&quot;&lt;/p&gt;

&lt;h1&gt;Array con todos los dominios...&lt;/h1&gt;

&lt;p&gt;dominios = [&quot;primerdominio.com&quot;, &quot;segundodominio.com&quot;, &quot;tercerdominio.com&quot;]&lt;/p&gt;

&lt;h1&gt;Abrimos el Firefox&lt;/h1&gt;

&lt;p&gt;$ff = FireWatir::Firefox.new&lt;/p&gt;

&lt;h1&gt;Vamos a Godaddy y nos identificamos&lt;/h1&gt;

&lt;p&gt;$ff.goto(&quot;https://www.godaddy.com/gdshop/default.asp&quot;)
$ff.text_field(:name, &quot;loginname&quot;).value= &quot;usuario&quot;
$ff.text_field(:name, &quot;password&quot;).value= &quot;clavesecreta&quot;
$ff.button(:id, &quot;Login&quot;).click&lt;/p&gt;

&lt;h1&gt;Vamos a My domains&lt;/h1&gt;

&lt;p&gt;$ff.goto(&quot;https://dcc.godaddy.com/default.aspx?&quot;)&lt;/p&gt;

&lt;h1&gt;Primer dominio, probamos a pata&lt;/h1&gt;

&lt;p&gt;$ff.link(:text, &quot;PRIMERDOMINIO.COM&quot;).click
$ff.link(:text, &quot;Total DNS Control and MX Records&quot;).click
$ff.image(:src, &quot;img/editicon.gif&quot;).click
$ff.text_field(:id, &quot;adata&quot;).value=&quot;255.255.255.255&quot;
$ff.form(:id, &quot;arecordedit&quot;).submit&lt;/p&gt;

&lt;h1&gt;Vamos a a la lista completa&lt;/h1&gt;

&lt;p&gt;$ff.image(:src, &quot;img/button_return_to_list.gif&quot;).click&lt;/p&gt;

&lt;h1&gt;Bucle para todos los dominios&lt;/h1&gt;

&lt;p&gt;dominios.each do |d|
  puts d
  $ff.goto(&quot;http://tdns.secureserver.net/index.php?domain=#{d.downcase}&quot;)
  $ff.image(:src, &quot;img/editicon.gif&quot;).click
  $ff.text_field(:id, &quot;adata&quot;).value=&quot;255.255.255.255&quot;
  $ff.button(:id, &quot;aok&quot;).click
end&lt;/pre&gt;
&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ruby Baby</title>
   <link href="http://jaimeiniesta.com/2008/02/21/ruby-baby.html"/>
   <updated>2008-02-21T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/02/21/ruby-baby</id>
   <content type="html">&lt;p&gt;En la cuarta entrega de esta semana especial dedicada a Ruby, vamos con un tema sesentero... Ruby Baby, de Dion and The Belmonts.&lt;/p&gt;

&lt;p&gt;&lt;object width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/zXYTt41Ke8s&amp;amp;rel=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/zXYTt41Ke8s&amp;amp;rel=1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;de este temazo hay una versión sudamericana que no tiene desperdicio:&lt;/p&gt;

&lt;p&gt;&lt;object width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/-poF5la2iuk&amp;amp;rel=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/-poF5la2iuk&amp;amp;rel=1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby Baby, de Dion and The Belmonts&lt;/strong&gt;
Ah now said I love a girl and-a &lt;strong&gt;Ruby&lt;/strong&gt; is her name&lt;/p&gt;

&lt;p&gt;This girl don't love me but I love 'er just the same&lt;/p&gt;

&lt;p&gt;(Whoa, oh, oh, oh, oh), &lt;strong&gt;Ruby, Ruby&lt;/strong&gt;, I'm-a want ya
Like a ghost I'm-a gonna haunt ya
&lt;strong&gt;Ruby, Ruby, Ruby&lt;/strong&gt; will you be mine?, sometime&lt;/p&gt;

&lt;p&gt;Ah each time I see you, baby my heart cries&lt;/p&gt;

&lt;p&gt;I tell ya I'm gonna steal you away from all those guys&lt;/p&gt;

&lt;p&gt;Whoa, oh, oh, oh, oh, from the happy day I met ya
Now I made a bet that I was goin' to get ya
Ruby, Ruby, Ruby will you be mine?&lt;/p&gt;

&lt;p&gt;&quot;Hey-hey &quot; overlaid with (&lt;strong&gt;Ruby, Ruby, Ruby&lt;/strong&gt;, baby)
&quot;Hey-hey &quot; overlaid with (&lt;strong&gt;Ruby, Ruby, Ruby&lt;/strong&gt;, baby)
&quot;Hey-hey &quot; overlaid with (&lt;strong&gt;Ruby, Ruby, Ruby&lt;/strong&gt;, baby)
&quot;Hey-hey &quot; overlaid with (&lt;strong&gt;Ruby, Ruby, Ruby&lt;/strong&gt;, baby)&lt;/p&gt;

&lt;p&gt;{&quot;Hey-hey &quot; interspersed with &quot;Oh, oh, oh, oh&quot;}&lt;/p&gt;

&lt;p&gt;&quot;Hey-hey &quot; overlaid with (&lt;strong&gt;Ruby, Ruby, Ruby&lt;/strong&gt;, baby)}
Well, I tell ya&lt;/p&gt;

&lt;p&gt;Now I love this girl I said-a Ruby is her name&lt;/p&gt;

&lt;p&gt;When this girl looks at me she just sets my soul aflame&lt;/p&gt;

&lt;p&gt;Whoa, oh, oh, oh, oh, I got some hugs and-a kisses, too
Yeah and now I'm gonna give-a them all to you
Now, listen, now &lt;strong&gt;Ruby, Ruby&lt;/strong&gt;, when will you be mine?&lt;/p&gt;

&lt;p&gt;&quot;Hey-hey &quot; overlaid with (&lt;strong&gt;Ruby, Ruby, Ruby&lt;/strong&gt;, baby)
&quot;Hey-hey &quot; overlaid with (&lt;strong&gt;Ruby, Ruby, Ruby&lt;/strong&gt;, baby)
&quot;Hey-hey &quot; overlaid with (&lt;strong&gt;Ruby, Ruby, Ruby&lt;/strong&gt;, baby)
&quot;Hey-hey &quot; overlaid with (&lt;strong&gt;Ruby, Ruby, Ruby&lt;/strong&gt;, baby)
&quot;Hey-hey &quot; overlaid with (Oh, oh, oh, oh)&lt;/p&gt;

&lt;p&gt;Ah listen, listen, listen, now
&lt;strong&gt;Ruby, Ruby, Ruby, Ruby&lt;/strong&gt; will you be mine?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ruby Red</title>
   <link href="http://jaimeiniesta.com/2008/02/20/ruby-red.html"/>
   <updated>2008-02-20T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/02/20/ruby-red</id>
   <content type="html">&lt;p&gt;Hoy es miércoles y estoy ochentero... enter Marc Almond...&lt;/p&gt;

&lt;p&gt;&lt;object width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/AQP_eqbgo4Q&amp;amp;rel=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/AQP_eqbgo4Q&amp;amp;rel=1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby Red, de Marc Almond&lt;/strong&gt;
Well it seems you have a heart
I saw it once so I know it's true
You let it out on Sundays when
You let it beat me black and blue
When you went and stole my heart
I saw it go so I know it's true
It was a &lt;strong&gt;ruby, ruby, ruby&lt;/strong&gt; red
It was the most precious gift
I could give to you&lt;/p&gt;

&lt;p&gt;It was as red as the sun in the evening sky
It was as red as the fire in a panther's eye
It was as red as the rose under the summer sun
Like a fire from a killer's gun&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby, ruby&lt;/strong&gt; red
Shine a light onto this boy's bed
There's a street lamp glowing in my head
Oh, &lt;strong&gt;Ruby, ruby, ruby&lt;/strong&gt; red&lt;/p&gt;

&lt;p&gt;Well it seems you have a soul
You let it go so I know it's true
It was a &lt;strong&gt;ruby, ruby, ruby&lt;/strong&gt; red
It keeps me warm when I'm feeling sad and blue
Well you went and stole my heart
I saw it go so I know it's true
I wrapped it up in a bouquet of barbed wire
It was the wickedest gift I could give to you&lt;/p&gt;

&lt;p&gt;It was as red as the sun in the evening sky
It was as red as the fire in a panther's eye
It was as red as the rose under the summer sun
Like a fire from a killer's gun&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby, ruby&lt;/strong&gt; red
Shine a light onto this boy's bed
There's a street lamp glowing in my head
Oh, &lt;strong&gt;Ruby, ruby, ruby&lt;/strong&gt; red&lt;/p&gt;

&lt;p&gt;Oh just like Johnny Rio baby
I need to be desired
I give up looking for my past
For the ones I left behind
&lt;strong&gt;Ruby&lt;/strong&gt; red, ruby red, hey, hey, hey&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby, ruby&lt;/strong&gt; red
Shine a light onto this boy's bed
There's a street lamp glowing in my head
Oh, &lt;strong&gt;Ruby, ruby, ruby&lt;/strong&gt; red&lt;/p&gt;

&lt;p&gt;It was the most precious jewel
I could give to you
Colour me red when I'm feeling blue
The colour of a kiss
In a young girl's dream
The mark of a guillotine
A drop of blood from a single thorn
Red wet sheets in the afternoon
A red light leading to my tomb
&lt;strong&gt;Ruby&lt;/strong&gt; red all around my room&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby, ruby&lt;/strong&gt; red
Oh shine a light onto this boy's bed
Oh, &lt;strong&gt;ruby, ruby, ruby&lt;/strong&gt; red&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ruby Tuesday</title>
   <link href="http://jaimeiniesta.com/2008/02/19/ruby-tuesday.html"/>
   <updated>2008-02-19T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/02/19/ruby-tuesday</id>
   <content type="html">&lt;p&gt;Si hoy es martes, en nuestra semana musical toca... Ruby Tuesday...&lt;/p&gt;

&lt;p&gt;&lt;object width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/9y_pMbEDlbM&amp;amp;rel=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/9y_pMbEDlbM&amp;amp;rel=1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby Tuesday, de los Rolling Stones&lt;/strong&gt;
She would never say where she came from
Yesterday dont matter if its gone
While the sun is bright
Or in the darkest night
No one knows
She comes and goes&lt;/p&gt;

&lt;p&gt;Goodbye, &lt;strong&gt;ruby&lt;/strong&gt; tuesday
Who could hang a name on you?
When you change with every new day
Still Im gonna miss you...&lt;/p&gt;

&lt;p&gt;Dont question why she needs to be so free
Shell tell you its the only way to be
She just cant be chained
To a life where nothings gained
And nothings lost
At such a cost&lt;/p&gt;

&lt;p&gt;Theres no time to lose, I heard her say
Catch your dreams before they slip away
Dying all the time
Lose your dreams
And you will lose your mind.
Aint life unkind?&lt;/p&gt;

&lt;p&gt;Goodbye, &lt;strong&gt;ruby&lt;/strong&gt; tuesday
Who could hang a name on you?
When you change with every new day
Still Im gonna miss you...&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ruby Ruby Ruby Ruby!!!</title>
   <link href="http://jaimeiniesta.com/2008/02/18/ruby-ruby-ruby-ruby.html"/>
   <updated>2008-02-18T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/02/18/ruby-ruby-ruby-ruby</id>
   <content type="html">&lt;p&gt;Comenzamos la semana con un poco de música... Escucha esto y seguro que te animas a venir a la &lt;a href=&quot;http://www.euruko2008.org/&quot;&gt;Euruko&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;object width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/JMDcOViViNY&amp;amp;rel=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/JMDcOViViNY&amp;amp;rel=1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby, de Kaiser Chiefs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let it never be said, the romance is dead
Cos there’s so little else occupying my head
There is nothing I need except the function to breathe
But I’m not really fussed, doesn’t matter to me&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby, Ruby, Ruby, Ruby&lt;/strong&gt;
Ahaa-ahaa-ahaa
Do ya, do ya, do ya, do ya
Ahaa-ahaa-ahaa
Know what ya doing, doing to me?
Ahaa-ahaa-ahaa
&lt;strong&gt;Ruby, Ruby, Ruby, Ruby&lt;/strong&gt;
Ahaa-ahaa-ahaa&lt;/p&gt;

&lt;p&gt;Due to lack of interest tomorrow is cancelled
Let the clocks be reset and the pendulums held
Cos there’s nothing at all except the space in between
Finding out what you’re called and repeating your name&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby, Ruby, Ruby, Ruby&lt;/strong&gt;
Ahaa-ahaa-ahaa
Do ya, do ya, do ya, do ya&lt;/p&gt;

&lt;p&gt;Ahaa-ahaa-ahaa
Know what ya doing, doing to me?
Ahaa-ahaa-ahaa
&lt;strong&gt;Ruby, Ruby, Ruby, Ruby&lt;/strong&gt;
Ahaa-ahaa-ahaa, aaaa&lt;/p&gt;

&lt;p&gt;Could it be, could it be that you’re joking with me
And you don’t really see you with me
Could it be, could it be that you’re joking with me
And you don’t really see you with me&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby, Ruby, Ruby, Ruby&lt;/strong&gt;
Ahaa-ahaa-ahaa
Do ya, do ya, do ya, do ya
Ahaa-ahaa-ahaa
Know what ya doing, doing to me?
Ahaa-ahaa-ahaa
&lt;strong&gt;Ruby, Ruby, Ruby, Ruby&lt;/strong&gt;
Ahaa-ahaa-ahaa
Do ya, do ya, do ya, do ya
Ahaa-ahaa-ahaa (Da da da, da da da)
Know what ya doing, doing to me?
Ahaa-ahaa-ahaa, aaaa&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Hoy, la segunda charla del grupo Freelance Girona</title>
   <link href="http://jaimeiniesta.com/2008/02/13/hoy-la-segunda-charla-del-grupo-freelance-girona.html"/>
   <updated>2008-02-13T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/02/13/hoy-la-segunda-charla-del-grupo-freelance-girona</id>
   <content type="html">&lt;p&gt;Hoy miércoles 13, a las ocho de la tarde, presentaremos en sociedad el grupo &lt;a href=&quot;http://groups.google.com/group/freelance-girona&quot; title=&quot;lista de correo del grupo Freelance Girona&quot;&gt;Freelance Girona&lt;/a&gt;, explicaremos nuestro objetivo de crear una red de contactos de freelances y pequeñas empresas en Girona donde compartamos conocimiento en forma de talleres y charlas, e intercambio de experiencias.&lt;/p&gt;

&lt;p&gt;Pásate esta tarde a conocernos y apúntate a la charla que hará Jordi Catà sobre su framework PHP propio...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Cas d’us de Framework web desenvolupat amb llibreries Lliures”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;El desenvolupament d’aplicacions web està sofrint una evolució constant, actualment apareixen multitut de frameworks de desenvolupament àgil. En aquesta &lt;span id=&quot;st&quot; name=&quot;st&quot; class=&quot;st&quot;&gt;xerrada&lt;/span&gt; esposarem el funcionament d’un framework web desenvolupat amb llibreries i components lliures, orientat a arquitectura Model Vista Controlador. El desenvolupament s’ha realitzat utilitzant les llibreries Pear::Dataobject (abstracció de la base de dades), Smarty (aïllament de PHP i HTML).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Data: Dimecres dia 13, a les 20:00
Lloc: Sala d’actes de l’edifici P4 (Escola Politècnica Superior)
&lt;span id=&quot;st&quot; name=&quot;st&quot; class=&quot;st&quot;&gt;Xerrada&lt;/span&gt; a càrrec d’en Jordi Catà, freelance web i director de D-Unlock
Enginyeria Informàtica&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Siesta Driven Development (SDD)</title>
   <link href="http://jaimeiniesta.com/2008/02/08/siesta-driven-development-sdd.html"/>
   <updated>2008-02-08T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/02/08/siesta-driven-development-sdd</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2008/02/gustave_courbet_la_hamaca.jpg&quot; alt=&quot;gustave_courbet_la_hamaca.jpg&quot; align=&quot;right&quot; /&gt;Ya se ha escrito y hablado mucho sobre los beneficios sobre la salud de la &lt;a href=&quot;http://en.wikipedia.org/wiki/Siesta&quot;&gt;siesta&lt;/a&gt;, pero poco sobre sus beneficios en el desarrollo de software.&lt;/p&gt;

&lt;p&gt;Tengo comprobado en mis propias carnes y almohadas que dormir una siesta de 20 o 30 minutos me ayuda a encontrar la solución a muchos problemas de programación... El típico atasco de antes de comer que, tras la debida pausa y siesta, parece resolverse solo cuando vuelves al teclado, y todo resulta tan obvio que no sabes cómo no se te había ocurrido antes!&lt;/p&gt;

&lt;p&gt;Y es que ya lo dice la Wikipedia:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Está demostrado científicamente que una siesta de no más de ochenta minutos (más tiempo puede trastocar el reloj biológico natural y causar &lt;a href=&quot;http://es.wikipedia.org/wiki/Insomnio&quot; title=&quot;Insomnio&quot;&gt;insomnio&lt;/a&gt; por la noche) mejora la salud en general y la circulación sanguínea y previene el agobio, la presión o el &lt;a href=&quot;http://es.wikipedia.org/wiki/Estr%C3%A9s&quot; title=&quot;Estrés&quot;&gt;estrés&lt;/a&gt;. Además, favorece la &lt;a href=&quot;http://es.wikipedia.org/wiki/Memoria_humana&quot; title=&quot;Memoria humana&quot;&gt;memoria&lt;/a&gt; y los mecanismos de &lt;a href=&quot;http://es.wikipedia.org/wiki/Aprendizaje&quot; title=&quot;Aprendizaje&quot;&gt;aprendizaje&lt;/a&gt; y proporciona la facultad de prolongar la jornada de trabajo al poderse resistir sin sueño hasta altas horas de la noche con poca &lt;a href=&quot;http://es.wikipedia.org/wiki/Fatiga&quot; title=&quot;Fatiga&quot;&gt;fatiga&lt;/a&gt; acumulada.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;¿Agobio, presión, estrés? Todo tiene solución con tres en uno. Échate una siesta, y deja trabajar a tu subconsciente, que para eso le pagas. A la vuelta lo verás todo más claro.&lt;/p&gt;

&lt;p&gt;Si aún así no lo llegas a ver claro después de la siesta, puedes probar a consultar en la lista de correo pertinente antes de irte a dormir. Con suerte cuando vuelvas, alguien te habrá respondido. :)&lt;/p&gt;

&lt;p&gt;¿Te pasas al &lt;a href=&quot;http://en.wikipedia.org/wiki/Siesta_Driven_Development&quot;&gt;Siesta Driven Development&lt;/a&gt;?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Cambio de la charla del grupo Freelance Girona</title>
   <link href="http://jaimeiniesta.com/2008/02/08/cambio-de-la-charla-del-grupo-freelance-girona.html"/>
   <updated>2008-02-08T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/02/08/cambio-de-la-charla-del-grupo-freelance-girona</id>
   <content type="html">&lt;p&gt;La charla del próximo día 13 de febrero en la Universidad de Girona que anunciamos hace unas semanas ha tenido una cancelación de última hora... será sustituida por esta otra a cargo de Jordi Catà:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&quot;Cas d'us de Framework web desenvolupat amb llibreries Lliures&quot;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;El desenvolupament d'aplicacions web està sofrint una evolució constant, actualment apareixen multitut de frameworks de desenvolupament àgil. En aquesta &lt;span id=&quot;st&quot; name=&quot;st&quot; class=&quot;st&quot;&gt;xerrada&lt;/span&gt; esposarem el funcionament d'un framework web desenvolupat amb llibreries i components lliures, orientat a arquitectura Model Vista Controlador. El desenvolupament s'ha
realitzat utilitzant les llibreries Pear::Dataobject (abstracció de la
base de dades), Smarty (aïllament de PHP i HTML).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Data: Dimecres dia 13, a les 20:00
Lloc: Sala d'actes de l'edifici P4 (Escola Politècnica Superior)
&lt;span id=&quot;st&quot; name=&quot;st&quot; class=&quot;st&quot;&gt;Xerrada&lt;/span&gt; a càrrec d'en Jordi Catà, freelance web i director de D-Unlock
Enginyeria Informàtica&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Pásate al desarrollo guiado por tests</title>
   <link href="http://jaimeiniesta.com/2008/02/06/pasate-al-desarrollo-guiado-por-tests.html"/>
   <updated>2008-02-06T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/02/06/pasate-al-desarrollo-guiado-por-tests</id>
   <content type="html">&lt;p&gt;Cada vez que voy a una reunión de programadores Rails suelo preguntar para ver cuántos están empleando testing automatizado en sus aplicaciones, y aunque cada vez lo va usando más gente, en la actualidad no llega a 1/3 del total el número de programadores que los ha incorporado como práctica habitual en sus desarrollos.&lt;/p&gt;

&lt;p&gt;El desarrollo guiado por tests (&lt;a href=&quot;http://en.wikipedia.org/wiki/Test-driven_development&quot;&gt;TDD, Test Driven Development&lt;/a&gt;) es una técnica de desarrollo de software mediante la cual trabajamos en iteraciones cortas cubiertas por tests automáticos que cubren la nueva funcionalidad que queremos en nuestra aplicación. Lo interesante del tema es que &lt;strong&gt;primero&lt;/strong&gt; escribimos el test y después programamos la funcionalidad, hasta que el test pase con éxito. Cuando no se nos ocurren más casos en los que los tests fallen, hemos acabado con la programación.&lt;/p&gt;

&lt;p&gt;Un ejemplo muy sencillo: supongamos que estamos programando un comercio electrónico y queremos que el modelo Producto tenga un método precio_con_iva que nos devuelva... el precio con IVA. Lo podemos comprobar con un test unitario como el siguiente:&lt;/p&gt;

&lt;pre&gt;
def test_precio_con_iva
  @producto = Producto.new(:precio_base =&gt; 100)
  assert_equal 116, @producto.precio_con_iva
end
&lt;/pre&gt;


&lt;p&gt;Los tests consisten básicamente en eso... líneas tipo &quot;assert...&quot; que comprueban cosas. En este caso, que el precio con iva del producto recién creado cuyo precio base es 100, es igual (equal) a 116.&lt;/p&gt;

&lt;p&gt;Creado el test, si lo pasamos fallará porque no existe ese método... lo siguiente sería definirlo en el modelo, y si lo hacemos bien (y devuelve 116 en este caso), pasará el test. Ya tendremos entonces la nueva funcionalidad programada, y un test más en nuestro saco que nos alertará en caso de que más adelante esa funcionalidad no funcione como esperamos.&lt;/p&gt;

&lt;p&gt;Evidentemente, deberíamos escribir más casos de prueba, con distintos escenarios: productos sin precio, productos con otro tipo de IVA, etc., etc. Recordemos: cuando no se nos ocurren más casos de prueba que fallen, hemos terminado de programar.&lt;/p&gt;

&lt;p&gt;Mediante los tests podemos comprobar muchos tipos de condiciones: comparar valores de campos, contar el total de registros de un modelo para ver si hay diferencia (antes / después) de una acción, verificar si es nil... pero incluso podemos testear los controladores para ver el tipo de respuesta (ok, redirect, etc.) e incluso el HTML generado por las vistas para verificar que existe determinada tag, etc., etc.&lt;/p&gt;

&lt;p&gt;Otro aspecto interesante es intentar seguir la ley del mínimo esfuerzo, que es una de las cosas que nos enseña nuestra madre Naturaleza (las rocas ruedan cuesta abajo, no cuesta arriba) y una vez se rompen los tests, programar lo mínimo que necesitemos para que todo vuelva a funcionar. Primero, haz que vuelva a funcionar. Después, si quieres ya te podrás entretener en refactorizar tu código para que esté más optimizado. Si se te ocurren nuevos casos, recuerda primero escribir el test y después programar.&lt;/p&gt;

&lt;p&gt;Entre las muchas ventajas de Ruby on Rails hay que destacar que viene muy bien preparado para crear los tests: conforme vamos creando modelos y controladores, se van creando los tests correspondientes dentro de la carpeta test... Echa un vistazo ahí dentro y verás algunas cosas:
&lt;ul&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Fixtures&amp;lt;/strong&amp;gt;. Para tus datos de prueba. Ahí definirás unos pocos datos de prueba para realizar los tests.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Unit&amp;lt;/strong&amp;gt;. Los tests unitarios, que prueban la funcionalidad de los modelos.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Functional&amp;lt;/strong&amp;gt;. Los tests funcionales, para testear controladores.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Integration&amp;lt;/strong&amp;gt;. Para los tests de integración, con lo que puedes simular una sesión de usuario que se pasea por varios controladores y cómo se relacionan unos con otros.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Mocks&amp;lt;/strong&amp;gt;. Nos permite simular el funcionamiento de otras partes de la aplicación, normalmente para conseguir una respuesta más rápida y controlada. Por ejemplo en mi aplicación &amp;lt;a href=&quot;http://www.pagerankalert.com&quot;&amp;gt;Pagerankalert.com&amp;lt;/a&amp;gt; la uso para comprobar el PageRank que me devuelve Google... en lugar de consultar directamente a Google, en algunos de mis tests establezco el PR esperado. Así puedo testear incluso si no tengo conexión a Internet pq estoy trabajando en modo offline.&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/ul&gt;
Desde nuestra aplicación Rails podemos ejecutar tests puntuales, o toda la batería de tests... y mediante la utilidad autotest que proporciona la gema &lt;a href=&quot;http://www.zenspider.com&quot;&gt;ZenTest&lt;/a&gt;, podemos tener un demonio que estará vigilando constantemente nuestra aplicación en desarrollo. Cada vez que modifiquemos un archivo, ejecutará los tests asociados a él para comprobar si nuestros cambios han hecho que deje de funcionar algún test. En ese caso nos informará del error, y una vez que lo corrijamos volverá a pasar toda la batería de tests completa y seguirá vigilando nuestros pasos.&lt;/p&gt;

&lt;p&gt;Por último, mencionar otras herramientas de test externas a Rails pero también muy interesantes y necesarias:
&lt;ul&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;a href=&quot;http://wtr.rubyforge.org/&quot;&amp;gt;Watir&amp;lt;/a&amp;gt; / &amp;lt;a href=&quot;http://code.google.com/p/firewatir/&quot;&amp;gt;Firewatir&amp;lt;/a&amp;gt;&amp;lt;/strong&amp;gt;. Permite testear desde dentro del navegador, esto es, lanzar una instancia del navegador mediante un script, rellenar campos, pulsar botones, enviar formularios y comprobar los textos de la página. Interesante para poder probar eventos Javascript, AJAX...&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://mechanize.rubyforge.org/mechanize/&quot;&amp;gt;&amp;lt;strong&amp;gt;Mechanize&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt;. Simula navegación por páginas desde consola, mediante scripts de Ruby podemos indicar que visite tal página, rellene formularios, los envíe, pulse enlaces, compruebe textos... Es interesante pq una de las limitaciones de Watir es que sólo puede abrir un navegador a la vez; mientras que con mechanize puedes lanzar el mismo script en paralelo y por ejemplo simular 50 usuarios subiendo fotos a una aplicación...&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/ul&gt;
En resumen, para mí la diferencia fundamental entre seguir el desarrollo guiado por tests y no hacerlo es la paz mental que consigues, la confianza en la calidad de tu programación. Cuando ves que se han ejecutado 500, 1000... tests y todos han ido bien, sientes que lo tienes todo bajo control.&lt;/p&gt;

&lt;p&gt;Cuando algo falla, si antes de corregirlo lo cubres con un test, ya sabes que para la siguiente ocasión eso no fallará. Y cuando tocas un código en un sitio y eso hace que falle en otro que no recordabas que estaba relacionado, das las gracias al TDD por haberte avisado de algo que no se te había ocurrido que podía fallar.&lt;/p&gt;

&lt;p&gt;¡Animate y pásate al TDD!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Cómo programar una araña web con Rails, el vídeo</title>
   <link href="http://jaimeiniesta.com/2008/01/30/como-programar-una-arana-web-con-rails.html"/>
   <updated>2008-01-30T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/01/30/como-programar-una-arana-web-con-rails</id>
   <content type="html">&lt;p&gt;Gracias a &lt;a href=&quot;http://2007.conferenciarails.org/autores/lista.html#37&quot;&gt;Fernando Padrón&lt;/a&gt;, que vino desde México para participar como ponente en la &lt;a href=&quot;http://2007.conferenciarails.org&quot;&gt;Conferencia Rails 2007&lt;/a&gt; y usó su videocámara para grabar mi taller, ahora está &lt;a href=&quot;http://video.google.com/videoplay?docid=-3968915486587842122&amp;amp;amp;hl=en&quot;&gt;disponible en Google Video mi taller sobre arañas web con Ruby on Rails&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;embed src=&quot;http://video.google.com/googleplayer.swf?docId=-3968915486587842122&amp;amp;amp;hl=en&quot; style=&quot;width: 400px; height: 326px&quot; id=&quot;VideoPlayback&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/embed&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Curso gratuito sobre Google AdWords en Madrid</title>
   <link href="http://jaimeiniesta.com/2008/01/16/curso-gratuito-sobre-google-adwords-en-madrid.html"/>
   <updated>2008-01-16T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/01/16/curso-gratuito-sobre-google-adwords-en-madrid</id>
   <content type="html">&lt;p&gt;Mis amigas de Dabne organizan un curso gratuito de publicidad con Google AdWords dirigido a asociaciones, cooperativas, fundaciones u ONG, de 20 horas de duración.&lt;/p&gt;

&lt;p&gt;Te puedes apuntar desde la &lt;a href=&quot;http://dabne.net/inscripcion&quot;&gt;página de inscripción&lt;/a&gt; y saber más en &lt;a href=&quot;http://blog.dabne.net/2008/01/15/curso-gratuito-sobr-adwords/&quot;&gt;su blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Curso gratuito sobre Google AdWords&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt; ¿Me va a funcionar una campaña de marketing en Google? ¿Cómo elijo las palabras clave para anunciarme? ¿Podré ver de dónde recibo los ingresos?&lt;/p&gt;

&lt;p&gt;Curso gratuito de veinte horas de duración dirigido a trabajadores/as de asociaciones, cooperativas, fundaciones o ONG, impartido por Dabne con la colaboración de la Unión Madrileña de Cooperativas de Trabajo Asociado.&lt;/p&gt;

&lt;p&gt;El curso de impartirá viernes por la tarde y sábados por la mañana, y es de próximo inicio.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://dabne.net/inscripcion&quot;&gt;http://dabne.net/inscripcion&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Grupo Freelance Girona, y taller sobre Pylons</title>
   <link href="http://jaimeiniesta.com/2008/01/09/grupo-freelance-girona-y-taller-sobre-pylons.html"/>
   <updated>2008-01-09T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2008/01/09/grupo-freelance-girona-y-taller-sobre-pylons</id>
   <content type="html">&lt;p&gt;Este año comienza con la materialización de un proyecto que venía pensando con  Jordi Catà,  de  &lt;a href=&quot;http://www.dunlock.com&quot;&gt;D-Unlock&lt;/a&gt;:  la consolidación de una red de freelances / cooperativas / pequeñas empresas dedicadas al desarrollo web con software libre en la provincia de Girona.&lt;/p&gt;

&lt;p&gt;Nuestro objetivo es formar una red de profesionales dedicados al desarrollo web con software libre en Girona, y difundir el conocimiento de estas herramientas mediante charlas y talleres públicos.&lt;/p&gt;

&lt;p&gt;Por el momento tenemos una &lt;a href=&quot;http://groups.google.com/group/freelance-girona&quot;&gt;lista de correo&lt;/a&gt; y un &lt;a href=&quot;http://www.google.com/calendar/embed?src=n6p67t9ane91tneeunh3sjglag%40group.calendar.google.com&amp;amp;amp;ctz=Europe/Madrid&quot;&gt;calendario de eventos&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;En el 2007 yo &lt;a href=&quot;http://www.jaimeiniesta.com/2007/11/10/taller-de-web-spidering-con-rails-en-girona/&quot;&gt;dirigí un taller sobre arañas web con Ruby on Rails&lt;/a&gt;; para el 2008 tenemos por el momento un taller dedicado a un framework para Python:&lt;/p&gt;

&lt;p&gt;&lt;strike&gt;&lt;strong&gt;Python Web Development: &lt;a href=&quot;http://pylonshq.com/&quot;&gt;Pylons&lt;/a&gt;&lt;/strong&gt;&lt;/strike&gt;&lt;/p&gt;

&lt;p&gt;&lt;strike&gt;Descripció: El llenguatge Python, no es conegut de forma massiva, no
obstant se està consolidant com un llenguatge molt flexible i potent per
el desenvolupament d'aplicacions web. En els últims anys han sorgit
diferents web frameworks basats en aquest tipus de llenguatge que permet
un desenvolupament àgil i robust d'aplicacions web. Es farà un especial
enfasis en Pylons, el primer framework que està desenvolupat seguint
estrictament el protocol WSGI.&lt;/strike&gt;&lt;/p&gt;

&lt;p&gt;&lt;strike&gt;A càrrec d'&lt;a href=&quot;http://ima.udg.edu/~imartin/&quot;&gt;Ignasi Martín&lt;/a&gt;, Freelance web.&lt;/strike&gt;&lt;/p&gt;

&lt;p&gt;&lt;strike&gt;Dia &lt;/strike&gt;&lt;strike&gt;14 &lt;strong&gt;13 de febrer a las 20:00&lt;/strong&gt; en la Sala d'actes P4 (Escola Politécnica
superior, campus de Montilivi, Girona)&lt;/strike&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ACTUALIZACIÓN&lt;/strong&gt;: la charla sobre Pylons ha sido cancelada, &lt;a href=&quot;http://www.jaimeiniesta.com/2008/02/08/cambio-de-la-charla-del-grupo-freelance-girona/&quot;&gt;tenemos una nueva charla&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Tutorial: recursos anidados con REST y Rails 2</title>
   <link href="http://jaimeiniesta.com/2007/12/22/tutorial-recursos-anidados-con-rest-y-rails-2.html"/>
   <updated>2007-12-22T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2007/12/22/tutorial-recursos-anidados-con-rest-y-rails-2</id>
   <content type="html">&lt;p&gt;Aunque el tema de REST y ActiveResource está disponible en Rails 1.2, hasta ahora ha sido un tema que he ido posponiendo en mi lista de cosas por aprender.&lt;/p&gt;

&lt;p&gt;La introducción de REST por defecto en la generación de scaffolds de Rails 2 ha cambiado las cosas, y me ha hecho ver que no puedo dejar para más adelante el actualizarme a la filosofía REST.&lt;/p&gt;

&lt;p&gt;He estado haciendo algunas pruebas para aclarar las ideas, así que aquí os dejo los códigos para que podáis echarle un vistazo, aprender conmigo y dejarme comentarios... seguro que he pasado por alto algunas cosas.&lt;/p&gt;

&lt;p&gt;El objetivo de este tutorial es practicar los &lt;strong&gt;recursos anidados&lt;/strong&gt;. Queremos construir una aplicación típica, un blog, pero en este caso, multiusuario. Tendremos N usuarios, cada uno de los cuales tiene M posts, y cada post tiene Z comentarios. Lo que buscamos es poder definir rutas REST anidadas, de manera que cada recurso (usuario, post, comentario) sólo tenga sentido dentro del contexto de su padre. En concreto, queremos rutas como estas:
&lt;pre&gt;# Listado de usuarios
/users&lt;/p&gt;

&lt;h1&gt;Un usuario determinado&lt;/h1&gt;

&lt;p&gt;/users/:user_id&lt;/p&gt;

&lt;h1&gt;Posts de un usuario determinado&lt;/h1&gt;

&lt;p&gt;/users/:user_id/posts&lt;/p&gt;

&lt;h1&gt;Un post determinado de un usuario determinado&lt;/h1&gt;

&lt;p&gt;/users/:user_id/posts/:post_id&lt;/p&gt;

&lt;h1&gt;Comentarios de un post y usuario determinados&lt;/h1&gt;

&lt;p&gt;/users/:user_id/posts/:post_id/comments&lt;/p&gt;

&lt;h1&gt;Comentario determinado de un post y usuario determinados&lt;/h1&gt;

&lt;p&gt;/users/:user_id/posts/:post_id/comments/:comment_id&lt;/pre&gt;
Como se ve, son rutas muy limpias y autoexplicativas.&lt;/p&gt;

&lt;p&gt;Os explico en rasgos generales lo que hay que hacer para conseguir esto. Tras crear nuestra aplicación y la base de datos, generaremos los 3 scaffolds para controlar nuestros 3 recursos (users, posts y comments):
&lt;pre&gt;rails blog
cd blog
rake db:create
script/generate scaffold User name:string
script/generate scaffold Post title:string body:text user_id:integer
script/generate scaffold Comment body:text post_id:integer
rake db:migrate&lt;/pre&gt;
Los scaffolds generarán los modelos y migraciones, controladores y vistas, etc. Además, introducirán rutas REST por defecto para cada modelo, pero las tenemos que cambiar porque no queremos que sean independientes, sino anidadas. Esto es, no queremos gestionar un post fuera del contexto de su usuario, ni un comentario fuera del contexto de su post y del usuario de este post.&lt;/p&gt;

&lt;p&gt;Para ello, edita config/routes.rb, y elimina estas 3 líneas:
&lt;pre&gt;map.resources :comments
map.resources :posts
map.resources :users&lt;/pre&gt;
Y pon en su lugar esta ruta anidada:
&lt;pre&gt;map.resources :users do |user|
   user.resources :posts do |post|&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; post.resources :comments
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;   end
 end&lt;/pre&gt;
Ahora, edita los modelos e introduce la relación entre ellos como de costumbre en Rails:
&lt;pre&gt;class User &amp;lt; ActiveRecord::Base
   has_many :posts, :dependent =&amp;gt; :destroy
 end&lt;/p&gt;

&lt;p&gt;class Post &amp;lt; ActiveRecord::Base
   belongs_to :user
   has_many :comments, :dependent =&amp;gt; :destroy
 end&lt;/p&gt;

&lt;p&gt;class Comment &amp;lt; ActiveRecord::Base
   belongs_to :post
end&lt;/pre&gt;
Ahora, tendremos que modificar los controladores y vistas, porque fueron generados sin tener en cuenta que estarían anidados, así que hemos de actualizarlos. El controlador de usuarios (user_controller.rb) no necesita cambios porque es independiente de los de posts y comentarios.&lt;/p&gt;

&lt;p&gt;Donde sí necesitamos cambios es en el controlador de posts. En primer lugar, necesitamos asegurar que un post sólo tiene sentido dentro del contexto de un usuario determinado, que se habrá pasado en la URL. Así que usaremos un filtro before_filter para que, antes de realizar cualquier acción, coja este usuario:
&lt;pre&gt;  before_filter(:get_user)&lt;/pre&gt;
El método get_user lo definiremos así, dentro del apartado de métodos privados ya que no se usa más que desde dentro de este controlador:
&lt;pre&gt;private&lt;/p&gt;

&lt;p&gt;def get_user
   @user = User.find(params[:user_id])
end&lt;/pre&gt;
Ahora, modificaremos el resto de los métodos para que no se busquen los posts en general, sino dentro del contexto del usuario. Por ejemplo, en el método index, que lista los posts, en lugar de mostrarlos todos con:
&lt;pre&gt;@posts = Post.find(:all)&lt;/pre&gt;
Mostraremos sólo los de ese usuario:
&lt;pre&gt;@posts = @user.posts.find(:all)&lt;/pre&gt;
Modificaremos de manera similar el resto de acciones, para buscar el post a mostrar, crear, modificar o eliminar dentro de la colección de posts del usuario. En lugar de:
&lt;pre&gt;@post = Post.find(params[:id])&lt;/pre&gt;
Usaremos:
&lt;pre&gt;@post = @user.posts.find(params[:id])&lt;/pre&gt;
Esto nos añade seguridad ya que por ejemplo para editar un post, hay que indicar no sólo su id sino también su user_id, y si no son válidos, no lo encontrará.&lt;/p&gt;

&lt;p&gt;Dentro del controlador también hay que cambiar las redirecciones, ya que por ejemplo tras crear un post, para redirigir al &quot;show&quot; de este post venía así recién creado el scaffold:
&lt;pre&gt;redirect_to(@post)&lt;/pre&gt;
Ahora, como se trata de un recurso anidado dentro del usuario, hay que indicarle la ruta completa así:
&lt;pre&gt;redirect_to(user_post_url(@user, @post))&lt;/pre&gt;
Echa un vistazo a los códigos de ejemplo que adjunto en este tutorial para ver el resto de modificaciones en este controlador.&lt;/p&gt;

&lt;p&gt;El controlador de comentarios (comment_controller.rb) necesitará modificaciones similares, pero esta vez además del usuario hemos de recuperar el post, para tener el contexto completo. Es muy similar al ejemplo anterior, primero usamos los siguientes before_filter:
&lt;pre&gt;before_filter(:get_user)
before_filter(:get_post)&lt;/pre&gt;
Y los definimos así:
&lt;pre&gt;private&lt;/p&gt;

&lt;p&gt;def get_user
   @user = User.find(params[:user_id])
end&lt;/p&gt;

&lt;p&gt;def get_post
   @post = User.find(params[:user_id]).posts.find(params[:post_id])
end&lt;/pre&gt;
Fíjate en que podría haber cogido el post directamente pero para mayor seguridad lo estoy cogiendo a través del usuario.&lt;/p&gt;

&lt;p&gt;Las redirecciones también serán similares. Por ejemplo, tras crear un comentario y redirigir al comentario, sería así:
&lt;pre&gt;redirect_to(user_post_comment_url(@user, @post, @comment))&lt;/pre&gt;
Como ves, es similar pero indicando el usuario y post y comentario a que quieres redirigir.&lt;/p&gt;

&lt;p&gt;También será necesario que edites todas las vistas de posts y comments, ya que los helpers generados por el scaffold no te valen, y has de indicar el contexto en todos. Por ejemplo, el enlace para crear un nuevo comentario será así ahora:
&lt;pre&gt;link_to 'New comment', new_user_post_comment_path(@user, @post)&lt;/pre&gt;
Eso es todo por mi parte... Os dejo a continuación los códigos de este ejemplo para que podáis ver cómo he construido el resto de rutas con la ayuda de los helpers de Rails 2.0.2.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/uploads/2007/12/restblog_jaimeiniesta.zip&quot; title=&quot;Códigos del blog rest con rutas anidadas&quot;&gt;Códigos del blog rest con rutas anidadas&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seguro que he cometido unas cuantas correcciones, por lo que os agradecería que me lo indicarais con vuestros comentarios.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Boris en Slicehost</title>
   <link href="http://jaimeiniesta.com/2007/12/20/boris-en-slicehost.html"/>
   <updated>2007-12-20T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2007/12/20/boris-en-slicehost</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.borispider.com&quot;&gt;Boris, la araña&lt;/a&gt;, tiene ahora una nueva casa. Dreamhost se le ha quedado pequeño y se ha mudado a Slicehost:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.borispider.com&quot;&gt;http://www.borispider.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y es que, tras un mes de funcionamiento desde el último reseteo, ya manejaba más de 280.000 páginas y 132.000 keywords.&lt;/p&gt;

&lt;p&gt;Su nuevo hogar es un servidor dedicado virtualizado, con Debian Etch, 256 Mb de Ram, o sea, el más pequeñito. En lugar de Apache + FastCGI como tenía en Dreamhost, ahora usa &lt;strong&gt;nginx + mongrel&lt;/strong&gt; (un cluster de 2 mongrels). En vez de usar script/runner cada minuto para explorar las páginas, uso una rake task en bucle infinito.&lt;/p&gt;

&lt;p&gt;Los tiempos de respuesta han mejorado muchísimo. Probé a cargar todos los datos y a comparar el rendimiento con siege, y este es el resultado con 5 conexiones concurrentes que repiten cada llamada 10 veces:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;En http://boris.railes.net (Dreamhost)...
&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Transactions:                     50 hits
Availability:                 100.00 %
Elapsed time:                 137.10 secs
Data transferred:               0.29 MB
Response time:                 13.14 secs
Transaction rate:               0.36 trans/sec
Throughput:                     0.00 MB/sec
Concurrency:                    4.79
Successful transactions:          50
Failed transactions:               0
Longest transaction:           20.67
Shortest transaction:           9.14&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;En http://borispider.com (Slicehost)...&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Transactions:                     50 hits
Availability:                 100.00 %
Elapsed time:                   7.14 secs
Data transferred:               0.30 MB
Response time:                  0.70 secs
Transaction rate:               7.00 trans/sec
Throughput:                     0.04 MB/sec
Concurrency:                    4.92
Successful transactions:          50
Failed transactions:               0
Longest transaction:            0.80
Shortest transaction:           0.66&lt;/p&gt;

&lt;p&gt;En resumen, tanto Boris como yo estamos muy contentos. Hasta se le ve menos agobiado, y ya estima que no necesitará 273 años para terminar de indexar la web. Ahora sólo necesitará 16 años. :D&lt;/p&gt;

&lt;p&gt;Ánimo, Boris!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Taller de Ruby on Rails en Sevilla</title>
   <link href="http://jaimeiniesta.com/2007/12/18/taller-de-ruby-on-rails-en-sevilla.html"/>
   <updated>2007-12-18T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2007/12/18/taller-de-ruby-on-rails-en-sevilla</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/12/factoriaweb20.jpg&quot; alt=&quot;Factoria Web 2.0&quot; align=&quot;right&quot; /&gt;Mañana cogeré un avión para acercarme a Sevilla, donde he sido invitado por mis amigos de &lt;a href=&quot;http://www.flowersinspace.com&quot;&gt;Flowers in Space&lt;/a&gt; para dar una clase sobre &lt;strong&gt;Programación con Ruby on Rails&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Esta clase que impartiré forma parte del proyecto &lt;strong&gt;Factoría Web 2.0&lt;/strong&gt;, que pretende crear un vivero de proyectos web:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Este proyecto contempla la creación de un centro de nuevos proyectos
empresariales de Internet, especializado en la Web 2.0., el cual se denominará “Factoría Web 2.0” cuya ubicación será en el CADE de Sevilla.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;La idea nace bajo la filosofía de funcionamiento de los viveros de empresa con el empleo de la metodología de “Simulación empresarial” aplicada en un entorno real.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Para ello se crearán grupos de tres personas (entre los universitarios participantes en el programa) que representarán los miembros de cada negocio virtual, cuya misión será la de programar cada Web 2.0. y realizar un plan de negocios atractivo para cualquier agente inversor (venture capital, business angel, seed capital, empresas del sector, etc.).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;En este proyecto participarán otros ponentes como &lt;a href=&quot;http://hashref.com/&quot;&gt;Xavier Noria&lt;/a&gt;, &lt;a href=&quot;http://www.grancomo.com/&quot;&gt;Luis Villa&lt;/a&gt; o &lt;a href=&quot;http://blog.aspgems.com/&quot;&gt;Agustín Cuenca&lt;/a&gt;, entre muchos otros.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ACTUALIZACIÓN: Aquí están la presentación y los códigos de ejemplo:&lt;/strong&gt; &lt;a href=&quot;/uploads/2007/12/introduccion_a_ror.zip&quot; title=&quot;Introducción a Ruby on Rails&quot;&gt;Introducción a Ruby on Rails&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>NURbijou, tienda online con Ruby on Rails</title>
   <link href="http://jaimeiniesta.com/2007/12/13/nurbijou-tienda-online-con-ruby-on-rails.html"/>
   <updated>2007-12-13T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2007/12/13/nurbijou-tienda-online-con-ruby-on-rails</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/12/dscf0096_peq.jpg&quot; alt=&quot;Un anillo para que lo compren todos…&quot; align=&quot;right&quot; hspace=&quot;5&quot; /&gt;Esta semana estamos promocionando la nueva web de &lt;a href=&quot;http://www.nurbijou.com&quot; title=&quot;Tienda online de joyas de la India&quot;&gt;NURbijou&lt;/a&gt;, una tienda online dedicada a la venta en Internet de joyas traídas directamente desde la India.&lt;/p&gt;

&lt;p&gt;Es un proyecto que nos ha ilusionado desde el principio, porque se trataba de la primera tienda que programábamos íntegramente con &lt;strong&gt;Ruby on Rails&lt;/strong&gt;, dejando en el pasado las tiendas demasiado complejas y engorrosas que se consiguen con software basado en OSCommerce.&lt;/p&gt;

&lt;p&gt;NURbijou es una tienda programada desde cero, con las características que necesitabamos y nada de lo que no nos hacía falta. Un catálogo de productos con fotos asociadas, y organizado por tags, una cesta de la compra, una gestión de usuarios minimalista y un gestor de contenidos para las páginas de información general.&lt;/p&gt;

&lt;p&gt;En este proyecto hemos trabajado dos personas: por un lado Mar M. Núñez, de &lt;a href=&quot;http://noez.org&quot;&gt;N/Ez&lt;/a&gt;, en el diseño gráfico, y por otro yo a la programación Ruby on Rails.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.nurbijou.com&quot;&gt;http://www.nurbijou.com&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>MetaInspector, mi primera gema ruby</title>
   <link href="http://jaimeiniesta.com/2007/12/06/metainspector-mi-primera-gema-ruby.html"/>
   <updated>2007-12-06T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2007/12/06/metainspector-mi-primera-gema-ruby</id>
   <content type="html">&lt;p&gt;Tras leer &lt;a href=&quot;http://nubyonrails.com/articles/tutorial-publishing-rubygems-with-hoe&quot;&gt;este magnífico tutorial sobre cómo publicar gemas con Hoe&lt;/a&gt;, he probado a crear mi primera gema en RubyForge.Se trata de MetaInspector, el corazón de Boris, la araña. MetaInspector facilita la extracción de datos de páginas web, encargándose de visitarla, descargar su HTML, y devolverte los datos de esa web: título, meta description y keywords, y enlaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cómo instalar&lt;/strong&gt;
sudo gem install metainspector&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo de uso&lt;/strong&gt;
&lt;pre&gt;require 'metainspector'
datos = MetaInspector.scrape('http://www.google.com')
puts datos['title']
puts datos['description']
puts datos['keywords']
puts datos['links'].size&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;La web oficial de MetaInspector es:&lt;a href=&quot;http://rubyforge.org/projects/metainspector/&quot;&gt;http://rubyforge.org/projects/metainspector/&lt;/a&gt;Se agradecerán vuestras pruebas y comentarios!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Códigos del taller de arañas web</title>
   <link href="http://jaimeiniesta.com/2007/11/26/codigos-del-taller-de-aranas-web.html"/>
   <updated>2007-11-26T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2007/11/26/codigos-del-taller-de-aranas-web</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;/uploads/2007/11/2061499039_88e695f36f_o.jpg&quot; title=&quot;2061499039_88e695f36f_o.jpg&quot;&gt;&lt;img src=&quot;/uploads/2007/11/2061499039_88e695f36f_o.jpg&quot; alt=&quot;2061499039_88e695f36f_o.jpg&quot; align=&quot;right&quot; border=&quot;1&quot; height=&quot;240&quot; hspace=&quot;3&quot; vspace=&quot;3&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;En la edición de este año 2007 de la &lt;a href=&quot;http://www.conferenciarails.org&quot;&gt;Conferencia Rails&lt;/a&gt; presenté un taller dedicado a la creación de una araña web con Ruby on Rails, usando open-uri, expresiones regulares, la gema Hpricot, el plugin acts_as_taggable_on_steroids, y tareas en background con script/runner y rake tasks.&lt;/p&gt;

&lt;p&gt;Aquí está la presentación y los códigos completos de la aplicación de ejemplo, todo disponible con licencias libres:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/uploads/2007/11/taller_arana_web_jaime_iniesta.zip&quot; title=&quot;Taller arañas web&quot;&gt;Taller arañas web&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;small&gt;(Foto cedida por &lt;a href=&quot;http://flickr.com/photos/xuanxu/2061499039/&quot;&gt;Juanjo Bazán&lt;/a&gt;)&lt;/small&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ponencia sobre Web spidering, este viernes</title>
   <link href="http://jaimeiniesta.com/2007/11/20/ponencia-sobre-web-spidering-este-viernes.html"/>
   <updated>2007-11-20T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2007/11/20/ponencia-sobre-web-spidering-este-viernes</id>
   <content type="html">&lt;p&gt;Finalmente llegó! Tras meses de preparación, toca la segunda &lt;a href=&quot;http://www.conferenciarails.org&quot;&gt;Conferencia Rails&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Este año, además de participar como organizador, lo haré también como ponente, presentando un taller práctico donde veremos &lt;a href=&quot;http://ponencias.conferenciarails.org/charlas/ver/1&quot;&gt;cómo programar desde cero una pequeña araña web&lt;/a&gt;, como &lt;a href=&quot;http://boris.railes.net&quot;&gt;Boris, la araña&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nos vemos!
&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;/uploads/2007/11/ponente200.png&quot; alt=&quot;Ponente Conferencia Rails&quot; /&gt;&lt;/p&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Taller de Web Spidering con Rails en Girona</title>
   <link href="http://jaimeiniesta.com/2007/11/10/taller-de-web-spidering-con-rails-en-girona.html"/>
   <updated>2007-11-10T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2007/11/10/taller-de-web-spidering-con-rails-en-girona</id>
   <content type="html">&lt;p&gt;El próximo miércoles &lt;strong&gt;14 de noviembre&lt;/strong&gt; dirigiré un taller sobre &lt;strong&gt;web spidering con Ruby on Rails&lt;/strong&gt; en &lt;strong&gt;Girona&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;La idea es explicar cómo podemos, mediante Ruby, descargar una página y extraer de ella sus datos (por ejemplo título, descripción, keywords...), usando expresiones regulares y la gema Hpricot; y mediante Rails, facilitarnos la tarea de almacenar estos datos en una base de datos con interfaz web, organizando las keywords usando un plugin como acts_as_taggable_on_steroids.&lt;/p&gt;

&lt;p&gt;Veremos también cómo automatizar tareas en background (script/runner, rake tasks, cron) para que nuestra araña esté dia y noche extrayendo datos de la Web como lo hace, por ejemplo, &lt;a href=&quot;http://boris.railes.net&quot;&gt;Boris, la araña&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Me gustaría que este fuera el primero de una serie de talleres abiertos a todos los programadores interesados en estos temas, y no orientarlo a una charla de una sola persona sino como un grupo de trabajo donde compartamos ideas y experiencias. Tanto si quieres aprender como si tienes algo que aportar, vente!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El taller será el miércoles 14 de noviembre a las 18:30 en el local de &lt;a href=&quot;http://www.dunlock.com&quot;&gt;D-Unlock&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt; C/ Riera Bugantó num 1, baixos 3, Girona&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El taller es libre y gratuito, no hace falta reservar pero como sólo cabremos como mucho 10 personas, estaría bien que nos avisaras si vas a venir, para hacernos una idea...&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Boris reloaded</title>
   <link href="http://jaimeiniesta.com/2007/11/05/boris-reloaded.html"/>
   <updated>2007-11-05T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2007/11/05/boris-reloaded</id>
   <content type="html">&lt;p&gt;Acabo de subir la nueva versión de &lt;a href=&quot;http://boris.railes.net&quot;&gt;Boris, la araña&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Aunque la pinta externa sea la misma, la he reconstruido por dentro. Ahora uso el plugin &lt;a href=&quot;http://agilewebdevelopment.com/plugins/acts_as_taggable_on_steroids&quot;&gt;acts_as_taggable_on_steroids&lt;/a&gt; para asociar Keywords a Paginas, en lugar de hacerlo con un modelo estándar. Me encanta este plugin para etiquetar, es justo lo que necesitaba.&lt;/p&gt;

&lt;p&gt;Mi pequeña librería de scraping, MetaInspector, usa ahora exclusivamente &lt;a href=&quot;http://code.whytheluckystiff.net/hpricot/&quot;&gt;Hpricot&lt;/a&gt; para extraer los datos de las páginas visitadas (title, meta description, meta keywords y enlaces externos).&lt;/p&gt;

&lt;p&gt;Por la parte de background, he probado &lt;a href=&quot;http://apuntesderails.amaiac.net/archives/2007/10/16/descubriendo_las_rake_tasks/&quot;&gt;rake tasks&lt;/a&gt;, pero a la hora de meterlo en cron no parece gustarle mucho a &lt;a href=&quot;http://www.railes.net/web/alojamiento&quot;&gt;Dreamhost&lt;/a&gt; (te mata los procesos en cuanto duran un ratito), así que seguiré tirando de script/runner, a razón de 1 página por minuto. Total, no hay prisa ninguna, como se pueden ver en las estadísticas de portada:
&lt;blockquote&gt;&quot;Quedan 304 años para terminar de indexar la Web, aunque para dentro de 49 años ya tendremos todos los dominios en cola. :)&quot;&lt;/blockquote&gt;
Finalmente me hubiera gustado usar &lt;a href=&quot;http://projects.jkraemer.net/acts_as_ferret/&quot;&gt;acts_as_ferret&lt;/a&gt; como motor de búsqueda, pero no he conseguido hacerlo funcionar en Dreamhost, así que he deshabilitado las búsquedas hasta que lo consiga, o me haga una búsqueda estándar sin ese plugin.&lt;/p&gt;

&lt;p&gt;Y para acabar y hacer las cosas bien desde el principio, he borrado todos los datos recopilados en estos 5 meses (231.255 páginas y 114.236 keywords) y vuelto a empezar.&lt;/p&gt;

&lt;p&gt;A ver cuántos sitios web es capaz de visitar Boris de aquí al día de &lt;a href=&quot;http://ponencias.conferenciarails.org/charlas/ver/1&quot;&gt;su presentación en la Conferencia Rails&lt;/a&gt;... :D&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Reprogramando a Boris, la araña</title>
   <link href="http://jaimeiniesta.com/2007/11/03/reprogramando-a-boris-la-arana.html"/>
   <updated>2007-11-03T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/11/03/reprogramando-a-boris-la-arana</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://boris.railes.net&quot;&gt;Boris, la araña&lt;/a&gt;, es mi monstruíto de Frankenstein. Ya ha cumplido unos 5 meses y en este tiempo ha conseguido enterarse de más de 230.000 páginas. Eso si, poquito a poco, porque vive en un servidor compartido y no es cuestión de saturar a los demás usuarios de la máquina.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.volcanica.cat/wordpress/?p=31#ruby2&quot;&gt;El pasado 20 de octubre&lt;/a&gt; estuve dirigiendo en Olot un taller de introducción a RoR en el que explicaba cómo construirse una araña web como Boris, la araña. O parecida, porque en una hora no da tiempo para mucho si has de partir de cero.&lt;/p&gt;

&lt;p&gt;Por eso, para el taller que daré en la Conferencia Rails &lt;a href=&quot;http://ponencias.conferenciarails.org/charlas/ver/1&quot;&gt;el próximo 23 de noviembre&lt;/a&gt; en Madrid, he pensado partir de una aplicación base ya montada (casi que un simple scaffold de Paginas tageadas con acts_as_taggable_on_steroids), y detenerme un poco más en ejemplos de cómo se descarga una página con open-uri, cómo se parsean sus datos con expresiones regulares y &lt;a href=&quot;http://code.whytheluckystiff.net/hpricot/&quot;&gt;Hpricot&lt;/a&gt;, y cómo dejar tareas programadas en background (script/runner, rake tasks...).&lt;/p&gt;

&lt;p&gt;Mientras tanto, según preparo la presentación (45 minutos no dan para mucho!), voy refactorizando código de Boris, la araña. Boris, reloaded. :P&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Calendario de la Conferencia Rails 2007</title>
   <link href="http://jaimeiniesta.com/2007/10/26/calendario-de-la-conferencia-rails-2007.html"/>
   <updated>2007-10-26T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/10/26/calendario-de-la-conferencia-rails-2007</id>
   <content type="html">&lt;p&gt;Acabamos de publicar el calendario de ponencias para la Conferencia Rails 2007.  Este año contamos con casi 40 ponencias, divididas en dos días y tres salas simultáneas.&lt;/p&gt;

&lt;p&gt;Más información en &lt;a href=&quot;http://ponencias.conferenciarails.org/charlas/calendario&quot;&gt;ponencias.conferenciarails.org/charlas/calendario&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>BuscaBoe, el robot buscador de ayudas y subvenciones</title>
   <link href="http://jaimeiniesta.com/2007/10/25/buscaboe-el-robot-buscador-de-ayudas-y-subvenciones.html"/>
   <updated>2007-10-25T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/10/25/buscaboe-el-robot-buscador-de-ayudas-y-subvenciones</id>
   <content type="html">&lt;p&gt;Mis amigas de &lt;a href=&quot;http://dabne.net&quot; title=&quot;Dabne&quot;&gt;Dabne&lt;/a&gt;, con las que colaboro en &lt;a href=&quot;http://www.railes.net/web/proyectos/detalle/12&quot;&gt;varios&lt;/a&gt; &lt;a href=&quot;http://www.railes.net/web/proyectos/detalle/1&quot;&gt;proyectos&lt;/a&gt;, acaban de publicar &lt;a href=&quot;http://buscaboe.dabne.net&quot; title=&quot;BuscaBoe&quot;&gt;BuscaBoe&lt;/a&gt;, un pequeño robot que cada mañana busca ayudas y subvenciones publicadas en el &lt;a href=&quot;http://www.boe.es&quot;&gt;BOE&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Una interesante aplicación de scraping para escarbar un poquito en la web profunda. Y, además, muy útil.
&lt;blockquote&gt;En Dabne hemos desarrollado un nuevo servicio que queremos poner a vuestra disposición. Se trata de BuscaBoe, un &quot;robot&quot; web que todas las mañanas se lee el sumario del BOE, busca las entradas en las que ponga 'ayuda' o 'subvención' y actualiza la web con esta información.&lt;/p&gt;

&lt;p&gt;Además de poder ver esta información en la web, se puede recibir por correo electrónico diariamente o leerla en un lector de feeds rss.&lt;/p&gt;

&lt;p&gt;Esperamos que os sea de utilidad y ya sabéis que agradecemos cualquier comentario, crítica o sugerencia al respecto.
Si os parece útil, por favor reenviad este mensaje a quien creáis que pueda estar interesad@.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://buscaboe.dabne.net&quot;&gt;http://buscaboe.dabne.net&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Saludos y gracias por vuestra atención
El equipo de Dabne
&lt;a href=&quot;http://www.dabne.net&quot;&gt;www.dabne.net&lt;/a&gt;&lt;/blockquote&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Aptana RadRails en Ubuntu Gutsy</title>
   <link href="http://jaimeiniesta.com/2007/10/25/aptana-radrails-en-ubuntu-gutsy.html"/>
   <updated>2007-10-25T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/10/25/aptana-radrails-en-ubuntu-gutsy</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.aptana.com/download_rails_rdt.php&quot; title=&quot;Aptana RadRails&quot;&gt;Aptana RadRails&lt;/a&gt; &lt;/strong&gt;&lt;strong&gt;es, en mi opinión, el mejor entorno de desarrollo integrado para Ruby on Rails&lt;/strong&gt;. Este IDE te permite manejar tus proyectos RoR desde un solo interfaz donde tienes todo lo que necesitas: editor con coloreado y autocompletado, scripts de rails (generate, server, console, rake, etc.), tests integrados (pulsar un botón basta para ejecutar todos los tests), integración con subversion (marca los cambios y puedes ejecutar ordenes de SVN con el botón secundario del ratón), navegador web integrado, y mucho más...&lt;/p&gt;

&lt;p&gt;Antes usaba la versión anterior (&lt;a href=&quot;http://www.radrails.org&quot;&gt;RadRails&lt;/a&gt;, a secas), que fué abandonada como desarrollo independiente para ser incorporado como plugin de &lt;a href=&quot;http://www.aptana.com&quot;&gt;Aptana&lt;/a&gt;. Al pasarme a &lt;a href=&quot;http://www.ubuntu.com&quot;&gt;Ubuntu Gutsy Gibbon (7.10)&lt;/a&gt; hace un par de días (con éxito, desde el actualizador en red de Ubuntu), aproveché para también pasarme a Aptana.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evitar los cuelgues de Aptana RadRails en Ubuntu Gutsy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Era una frustración ver cómo a este genial IDE para RoR le daba a menudo por empezar a chupar memoria, ponerse lento y lento, y al final acabar por colgarse. Al principio pensaba que sería cuestión de desactivar alguna de sus características, pero en realidad se trataba de otra cosa: se estaba pegando con un demonio. Claro, así también me peto yo... :D&lt;/p&gt;

&lt;p&gt;Googleando un poco encontré este &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/tracker/+bug/148202&quot;&gt;informe de bug&lt;/a&gt; en el que otro programador indicaba los mismos síntomas. El caso es que hay un demonio en Ubuntu llamado trackerd encargado de indexar el disco duro para acelerar las búsquedas... Efectivamente, lanzando top lo podía ver ahí consumiendo la tercera parte de mi RAM (y eso con 1,5 Gb de RAM total no es poca cosa). Como no uso las búsquedas de archivos desde GNOME, simplemente he matado al demonio. Vamos, matado y exorcizado de mi máquina: he desinstalado a trackerd.&lt;/p&gt;

&lt;p&gt;Tras este cambio, Aptana RadRails funciona como la seda. En otros foros también se quejan de que &lt;a href=&quot;http://ubuntuforums.org/showthread.php?t=591867&quot;&gt;trackerd les ralentiza la máquina&lt;/a&gt;, chupando mucha CPU. Hay quien aconseja paciencia, indicando que trackerd dejará de ralentizarla si se le permite un primer barrido para indexar el disco duro, pero a mi se me acabó la paciencia.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>RailRoad, generador de diagramas</title>
   <link href="http://jaimeiniesta.com/2007/10/24/railroad-generador-de-diagramas.html"/>
   <updated>2007-10-24T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/10/24/railroad-generador-de-diagramas</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/10/railroad_logo.png&quot; title=&quot;RailRoad&quot; alt=&quot;RailRoad&quot; align=&quot;right&quot; /&gt;A través del &lt;a href=&quot;http://twitter.com/amaiac&quot;&gt;twitter de Amaia&lt;/a&gt; me entero de la existencia de &lt;a href=&quot;http://railroad.rubyforge.org/index.es.html&quot;&gt;RailRoad&lt;/a&gt;, un generador de diagramas de clases que muestra la relación y herencia (entre otras cosas) de los modelos y controladores de una aplicación Rails.&lt;/p&gt;

&lt;p&gt;Instalarlo es muy sencillo (al menos desde mi Ubuntu Gutsy). Basta con instalarlo como gema de ruby, e instalar además la herramienta &lt;a href=&quot;http://www.graphviz.org/&quot;&gt;Graphviz&lt;/a&gt; que se emplea como soporte para convertir los diagramas a PNG o SVG.
&lt;blockquote&gt;&lt;em&gt;sudo gem install railroad&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;sudo aptitude install graphviz&lt;/em&gt;&lt;/blockquote&gt;
Después, para ejecutarlo, por ejemplo podemos probar desde el directorio de una aplicación Rails:
&lt;blockquote&gt;&lt;em&gt;railroad -Mi | dot -Tsvg &amp;gt; modelos.svg&lt;/em&gt;&lt;/blockquote&gt;
Que nos generará el diagrama de modelos como SVG, o:
&lt;blockquote&gt;&lt;em&gt;railroad -Ci | neato -Tpng &amp;gt; controladores.png&lt;/em&gt;&lt;/blockquote&gt;
Que generará el diagrama de controladores como PNG.&lt;/p&gt;

&lt;p&gt;Aquí tenéis un ejemplo de diagrama generado con RailRoad:
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;/uploads/2007/10/railroad1.png&quot; title=&quot;railroad1.png&quot;&gt;&lt;img src=&quot;/uploads/2007/10/railroad1.thumbnail.png&quot; alt=&quot;railroad1.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
La única pega con que me encontré es que no tiene una opción para indicar el environment deseado, en plan RAILS_ENV=development, etc. Pero bueno, basta con cambiarlo un momentillo en environment.rb... A ver si lo incluyen en las próximas versiones.&lt;/p&gt;

&lt;p&gt;En la página oficial tenéis toda la información y consejos para integrarlo como tarea rake, entre otros.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://railroad.rubyforge.org/index.es.html&quot;&gt;http://railroad.rubyforge.org/index.es.html&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Conferencia Rails 2007: lista de ponencias aceptadas</title>
   <link href="http://jaimeiniesta.com/2007/10/19/conferencia-rails-2007-lista-de-ponencias-aceptadas.html"/>
   <updated>2007-10-19T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/10/19/conferencia-rails-2007-lista-de-ponencias-aceptadas</id>
   <content type="html">&lt;p&gt;Ya está aquí! La lista definitiva del contenido de la Conferencia Rails 2007:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.conferenciarails.org/&quot;&gt;www.conferenciarails.org&lt;/a&gt;
&lt;a href=&quot;http://ponencias.conferenciarails.org&quot;&gt; ponencias.conferenciarails.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Muchas gracias a todos los que habéis enviado propuestas. Nos vemos por allí...&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>¿Tienen envidia las arañas?</title>
   <link href="http://jaimeiniesta.com/2007/10/18/%25c2%25bftienen-envidia-las-aranas.html"/>
   <updated>2007-10-18T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/10/18/%c2%bftienen-envidia-las-aranas</id>
   <content type="html">&lt;p&gt;Acabo de comprobar en las google analytics de &lt;a href=&quot;http://boris.railes.net&quot; title=&quot;Boris, la araña&quot;&gt;Boris, la araña&lt;/a&gt;, que el número de visitas ha descendido drásticamente en los últimos 2 días. De una media de 100 visitas diarias con 3 páginas vistas cada una, ha pasado a sólo 3 visitas diarias. Prácticamente, se ha quedado sin visitas.&lt;/p&gt;

&lt;p&gt;No es algo que me preocupe porque Boris, la araña, siempre ha sido un pequeño experimento en mi aprendizaje de programación de spiders y robots. Pero no deja de ser curioso.&lt;/p&gt;

&lt;p&gt;En los 4 meses que lleva viviendo la pequeña araña Boris, ha rastreado cerca de 230.000 sitios web simplemente siguiendo enlace tras enlace. Google, a su vez, ha ido indexando las páginas de Boris. En mi última búsqueda, Google había indexado unas 37.000 URLs distintas dentro del sitio web de Boris, lo que es una verdadera barbaridad... por ejemplo, La Coctelera tiene en estos momentos 304.000 URLs indexadas por Google, así que era un honor para la pequeña Boris poder compararse con la décima parte de &lt;a href=&quot;http://www.lacoctelera.com&quot; title=&quot;La Coctelera&quot;&gt;La Coctelera&lt;/a&gt; :)&lt;/p&gt;

&lt;p&gt;Ahora, al buscar el número de páginas indexadas en Google, ha decrecido un poquito: 10. Diez, sí.&lt;/p&gt;

&lt;p&gt;¿Será un caso de envidia entre arañas?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Comienzo una nueva serie de tutoriales de RoR</title>
   <link href="http://jaimeiniesta.com/2007/10/17/comienzo-una-nueva-serie-de-tutoriales-de-ror.html"/>
   <updated>2007-10-17T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/10/17/comienzo-una-nueva-serie-de-tutoriales-de-ror</id>
   <content type="html">&lt;p&gt;Este fin de semana estaré dando &lt;a href=&quot;http://www.jaimeiniesta.com/2007/09/24/dos-talleres-de-ruby-on-rails-en-olot-para-el-20-de-octubre/&quot; title=&quot;Dos charlas en Volcanica&quot;&gt;un par de charlas&lt;/a&gt; sobre programación con Ruby on Rails en el evento Volcanica.cat, y para ir calentando motores, he estado escribiendo algunos tutoriales sobre RoR.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.railes.net/tutoriales/introduccion-a-ruby-on-rails&quot; title=&quot;Tutorial de introducción a Ruby on Rails&quot;&gt;El primero de la serie&lt;/a&gt; cubre los aspectos más básicos, de introducción al entorno y creación de un blog. En posteriores entregas cubriré más aspectos como tests, validaciones, layouts, ajax, plugins, etc...&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Se abre el registro para la Conferencia Rails 2007</title>
   <link href="http://jaimeiniesta.com/2007/09/28/se-abre-el-registro-para-la-conferencia-rails-2007.html"/>
   <updated>2007-09-28T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/09/28/se-abre-el-registro-para-la-conferencia-rails-2007</id>
   <content type="html">&lt;p&gt;¡Hemos abierto ya el registro para la &lt;a href=&quot;http://www.conferenciarails.org&quot;&gt;&lt;strong&gt;Conferencia Rails 2007&lt;/strong&gt;&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Ayer mismo inaguramos la nueva web de la conferencia, donde encontrarás un &lt;a href=&quot;http://www.conferenciarails.org&quot;&gt;blog&lt;/a&gt; con toda la información actualizada, una lista de las propuestas de &lt;a href=&quot;http://ponencias.conferenciarails.org&quot;&gt;ponencias&lt;/a&gt; recibidas y la sección de &lt;a href=&quot;http://registro.conferenciarails.org&quot;&gt;registro&lt;/a&gt; desde donde puedes ir reservando tu plaza.&lt;/p&gt;

&lt;p&gt;Hasta la fecha, hemos recibido 36 propuestas de charlas. Está abierto un nuevo plazo de recepción de propuestas, que finaliza el 7 de octubre. Pasada esta fecha, decidiremos las que consideramos más interesantes y publicaremos el listado definitivo el 15 de octubre.&lt;/p&gt;

&lt;p&gt;La conferencia tendrá lugar este año el 22 y 23 de noviembre, en el &lt;a href=&quot;http://dit.upm.es&quot;&gt;DIT&lt;/a&gt; de la UPM de Madrid. El precio de la entrada es de 75 € para todo el mundo.&lt;/p&gt;

&lt;p&gt;Nos vemos en la conferencia!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PageRankAlert.com supera las 5.000 URLs</title>
   <link href="http://jaimeiniesta.com/2007/09/28/pagerankalertcom-supera-las-5000-urls.html"/>
   <updated>2007-09-28T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/09/28/pagerankalertcom-supera-las-5000-urls</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/09/pagerankalert.png&quot; title=&quot;pagerankalert&quot; alt=&quot;pagerankalert&quot; align=&quot;right&quot; /&gt;Acabo de echar un vistazo a las estadísticas de uso de PageRankAlert.com y veo que ha superado ya las 5.000 URLs rastreadas, en concreto actualmente almacena &lt;strong&gt;5.037 URLs&lt;/strong&gt; para &lt;strong&gt;127 usuarios&lt;/strong&gt;, con un total de &lt;strong&gt;31.109&lt;/strong&gt; cambios de pagerank.&lt;/p&gt;

&lt;p&gt;Esta aplicación Ruby on Rails es un experimento personal que se ha convertido en una herramienta interesante para los interesados en el posicionamiento en buscadores. Constantemente está vigilando los cambios, minuto a minuto y día tras día, comprobando los cambios de PR en un bucle infinito.&lt;/p&gt;

&lt;p&gt;¿Has probado ya &lt;a href=&quot;http://pagerankalert.com&quot; title=&quot;pagerankalert&quot;&gt;PageRankAlert.com&lt;/a&gt;?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Dos talleres de Ruby on Rails en Olot, para el 20 de octubre</title>
   <link href="http://jaimeiniesta.com/2007/09/24/dos-talleres-de-ruby-on-rails-en-olot-para-el-20-de-octubre.html"/>
   <updated>2007-09-24T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/09/24/dos-talleres-de-ruby-on-rails-en-olot-para-el-20-de-octubre</id>
   <content type="html">&lt;p&gt;Ya se han publicado los &lt;a href=&quot;http://www.volcanica.cat/wordpress/?p=31&quot;&gt;horarios de los talleres y charlas de Volcanica.cat&lt;/a&gt;, el evento de difusión del Software Libre que tiene lugar cada año en &lt;a href=&quot;http://ww2.olot.org/&quot; title=&quot;Olot&quot;&gt;Olot&lt;/a&gt;, este año del &lt;strong&gt;19 al 21 de octubre&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;El sábado 20, seré el encargado de conducir &lt;strong&gt;dos talleres&lt;/strong&gt; dedicados a &lt;a href=&quot;http://www.rubyonrails.org.es&quot; title=&quot;Ruby on Rails&quot;&gt;Ruby on Rails&lt;/a&gt;. Por la mañana, de 12 a 14, una introducción general, con instalación y ejemplos prácticos. Por la tarde, de 16 a 18, un ejemplo más concreto sobre web spidering, o sea, cómo construirse una araña web como &lt;a href=&quot;http://boris.railes.net&quot;&gt;Boris, la araña&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nos vemos por allí!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Remodelación de www.railes.net ... ahora, en RoR</title>
   <link href="http://jaimeiniesta.com/2007/08/29/remodelacion-de-wwwrailesnet-ahora-en-ror.html"/>
   <updated>2007-08-29T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/08/29/remodelacion-de-wwwrailesnet-ahora-en-ror</id>
   <content type="html">&lt;p&gt;Bueno, tras todos estos meses, se acabó esto del cuchillo de palo ¿o era una cuchara? en casa el herrero...&lt;/p&gt;

&lt;p&gt;Acabo de subir la nueva versión de mi web corporativa, &lt;a href=&quot;http://www.railes.net&quot;&gt;www.railes.net&lt;/a&gt;, realizada ahora con Ruby on Rails, con un pequeño gestor de contenidos a medida de mis necesidades.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Propuestas de ponencias para la Conferencia Rails 2007</title>
   <link href="http://jaimeiniesta.com/2007/08/21/propuestas-de-ponencias-para-la-conferencia-rails-2007.html"/>
   <updated>2007-08-21T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/08/21/propuestas-de-ponencias-para-la-conferencia-rails-2007</id>
   <content type="html">&lt;p&gt;Acabamos de publicar la lista de propuestas de ponencias para la Conferencia Rails 2007. La podeis ver en la web:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.conferenciarails.org/&quot; title=&quot;http://www.conferenciarails.org/&quot;&gt;www.conferenciarails.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esta lista es orientativa y no implica que se hayan aceptado, son sólo las propuestas.  La lista definitiva se hará pública más adelante, seguramente a finales de septiembre.&lt;/p&gt;

&lt;p&gt;Nos interesa recibir vuestros comentarios sobre las ponencias propuestas. ¿Echáis a faltar algún tema interesante?&lt;/p&gt;

&lt;p&gt;Estamos también pensando en realizar un segundo call for papers para contar con más ponencias. Si aún estabas pensando en enviar la tuya, vete preparando un resumen...&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Nuevo libro: Deploying Rails Applications</title>
   <link href="http://jaimeiniesta.com/2007/08/17/nuevo-libro-deploying-rails-applications.html"/>
   <updated>2007-08-17T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/08/17/nuevo-libro-deploying-rails-applications</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/08/fr_deploy_medium.jpg&quot; title=&quot;Deploying Rails Applications&quot; alt=&quot;Deploying Rails Applications&quot; align=&quot;right&quot; height=&quot;174&quot; width=&quot;146&quot; /&gt;Este libro tiene buena pinta. Cubre los diferente aspectos de la puesta en marcha de una aplicación Rails en un servidor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.pragmaticprogrammer.com/titles/fr_deploy/&quot;&gt;Deploying Rails Applications&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Until now, the information you needed to deploy a Ruby on Rails application in a production environment has been fragmented and contradictory. This book changes all of that by providing a consistent, level-headed book containing advice you can trust. You'll get the inside angle from those that have built, deployed, and maintained some of the largest Rails apps in production, anywhere. &lt;hr /&gt;
&lt;h4&gt;About This Book&lt;/h4&gt;
This book will start by showing you how to build out your shared, virtual, or dedicated host. Then, you'll see how to build your applications for production and deploy them with one step, every time. &lt;em&gt;Deploying Rails Applications&lt;/em&gt; will take you from a simple shared host through a highly scalable clustered and balanced setup with Ngnix.&lt;/p&gt;

&lt;p&gt;See how to tell whether you've bought enough firepower, and learn how to optimize your Rails projects applications in a systemic, rational way. Take advantage of advanced caching techniques, and become and expert with the latest servers in Ngnix and Mongrel. Don't worry. You'll get a dose of Apache too.&lt;/p&gt;

&lt;p&gt;Not only will you learn how to configure your production environment, you'll also see how to monitor it with free, automated tools that can restart your servers when the memory use gets too high for comfort. You'll see how to take a performance baseline, profile for bottlenecks, and solve the most common performance problems you're likely to see.&lt;/p&gt;

&lt;p&gt;You'll learn:
&lt;ul&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;Everything from source control and migrations to Capistrano, rake tasks and beyond.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Directly from authors who run EngineYard, one of the best Rails hosts in the business.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;How to deploy your applications to multiple production servers with a single command using Capistrano.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;How to setup a Rails/Ngnix/Mongrel cluster for applications with high scalabilty needs.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;...and more!&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/ul&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Apuntes sobre Hpricot y web spidering</title>
   <link href="http://jaimeiniesta.com/2007/08/14/apuntes-sobre-hpricot-y-web-spidering.html"/>
   <updated>2007-08-14T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/08/14/apuntes-sobre-hpricot-y-web-spidering</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://code.whytheluckystiff.net/hpricot/&quot;&gt;&lt;img src=&quot;/uploads/2007/08/hpricot-small.png&quot; title=&quot;Hpricot&quot; alt=&quot;Hpricot&quot; align=&quot;right&quot; border=&quot;0&quot; /&gt;&lt;strong&gt;Hpricot&lt;/strong&gt;&lt;/a&gt; es un parser de HTML sencillo de usar y a la vez muy potente, escrito por &lt;a href=&quot;http://whytheluckystiff.net/&quot;&gt;_why the lucky stiff&lt;/a&gt;, un tío ¿o es una tía? que además de estar de la olla, controla muchísimo de Ruby y hace cosas muy interesantes, como por ejemplo esta gema.&lt;/p&gt;

&lt;p&gt;He usado &lt;strong&gt;Hpricot&lt;/strong&gt; para mejorar a &lt;a href=&quot;http://boris.railes.net/&quot;&gt;Boris, la araña&lt;/a&gt;, en su tarea de extraer información de páginas HTML. Boris tiene la misión de visitar páginas web y almacenar su título, meta keywords y meta description, y además ver con qué páginas externas enlaza para visitarlas también. Así, un día la lancé a la Wild Wild Web para que rastreara a partir de &lt;a href=&quot;http://www.railes.net&quot;&gt;www.railes.net&lt;/a&gt;, y a día de hoy lleva más de 200.000 URLs distintas, categorizadas por keywords.&lt;/p&gt;

&lt;p&gt;La extracción de datos la hacía descargando las páginas con &lt;strong&gt;open-uri&lt;/strong&gt; y después buscando la información con expresiones regulares, digamos, &quot;a pelo&quot;. Esto es complicado, no es fácil encontrar una expresión regular que cubra todos los casos que necesitas. Tenía fallos y a veces sacaba datos incorrectos.&lt;/p&gt;

&lt;p&gt;El caso es que me decidí a probar &lt;strong&gt;Hpricot&lt;/strong&gt;. La instalé como gema en mi Ubuntu:&lt;/p&gt;

&lt;hr /&gt;


&lt;pre&gt;jaime@zimpa:~$ sudo gem install hpricot
Password:
 (...)
Building native extensions.  This could take a while...
Successfully installed hpricot-0.6
Installing ri documentation for hpricot-0.6...
Installing RDoc documentation for hpricot-0.6...&lt;/pre&gt;


&lt;hr /&gt;Y después probé algún ejemplo (&lt;a href=&quot;/uploads/2007/08/ejemplo01rb.gz&quot; title=&quot;ejemplo01.rb.gz&quot;&gt;ejemplo01.rb.gz&lt;/a&gt;): &lt;hr /&gt;


&lt;pre lang=&quot;ruby&quot;&gt;require 'rubygems'
require 'open-uri'
require 'hpricot'

doc = Hpricot(open('http://www.railes.net'))

puts doc.at('title').inner_html
puts doc.at(&quot;meta[@name='description']&quot;)['content']
puts doc.at(&quot;meta[@name='keywords']&quot;)['content']&lt;/pre&gt;


&lt;hr /&gt;Los códigos son fáciles de entender. Las tres primeras líneas son los tres &quot;require&quot; necesarios para incluir las gemas. Obviamente necesitamos &lt;strong&gt;Hpricot&lt;/strong&gt;, pero también necesitamos &lt;strong&gt;open-uri&lt;/strong&gt;, que es la encargada de bajarse la página que le digamos (el churro HTML que después parsearemos con &lt;strong&gt;Hpricot&lt;/strong&gt;). El primer require, rubygems, es necesario para poder cargar &lt;strong&gt;Hpricot&lt;/strong&gt;.La siguiente línea asigna al objeto doc un objeto &lt;strong&gt;Hpricot&lt;/strong&gt; resultante de parsear la página descargada con &lt;strong&gt;open-uri&lt;/strong&gt;. Viendo desde dentro del paréntesis, primero hacemos open('http://www.railes.net'), y eso lo pasamos como parámetro a Hpricot(), con lo que conseguimos un árbol con toda la jerarquía del documento HTML. Si haces esto desde irb, podrás ver esto mejor. También puedes hacer un &quot;pp doc&quot;.Las tres siguientes líneas muestran por pantalla el resultado de tres búsquedas en este objeto &lt;strong&gt;Hpricot&lt;/strong&gt;. Básicamente, para buscar algo en el documento emplearemos doc.search(), que devolverá una colección con todo lo encontrado si hay varias coincidencias, o doc.at(), que devolverá sólo la primera coincidencia.


&lt;p&gt;Para este primer ejemplo, usaremos doc.at(). Le pasamos un patrón de lo buscado, en el primer caso 'title', y nos localiza el título. Finalmente le aplicamos inner_html para que nos devuelva sólo lo que hay entre las etiquetas HTML de definición de título. Otra opción sería to_html para que las incluya.&lt;/p&gt;

&lt;p&gt;Veamos las diferencias en este ejemplo:&lt;/p&gt;

&lt;hr /&gt;


&lt;pre lang=&quot;ruby&quot;&gt;irb(main):009:0&amp;gt;doc.at('title')
=&amp;gt; {elem }
irb(main):010:0&amp;gt; doc.at('title').inner_html
=&amp;gt; &quot;Railes.net - Desarrollo web ágil - Inicio&quot;
irb(main):011:0&amp;gt; doc.at('title').to_html
=&amp;gt; &quot;&amp;lt;title&amp;gt;Railes.net - Desarrollo web ágil - Inicio&amp;lt;/title&amp;gt;&quot;&lt;/pre&gt;


&lt;hr /&gt;La búsqueda de meta tags es un pelín diferente. Aquí empleamos la opción de especificar valores de atributos, con la @. En el primer caso, buscamos la etiqueta meta cuyo atributo name sea &quot;description&quot;. Y del resultado, nos quedamos con el contenido del atributo &quot;content&quot;.Suficiente teoría! Lo ejecuto y... tachán! Funciona a la primera. Ahí tenía mi título, description y keywords para la página: &lt;hr /&gt;


&lt;pre&gt;jaime@zimpa:~/hpricot$ ruby ejemplo01.rb
Railes.net - Desarrollo web ágil - Inicio
Desarrollo de aplicaciones web a medida. Formación y consultoría en Software Libre. Comunidades virtuales, gestores de contenidos. Ruby on Rails, PHP, MySQL...
desarrollo web, desarrollo ágil, ruby on rails, php, mysql, software libre, free software, open source, código abierto&lt;/pre&gt;


&lt;hr /&gt;La integración con Rails no tuvo más complicación que el hacerlo funcionar en Dreamhost. Explicaré esto en la siguiente entrega de esta serie de posts sobre Hpricot.Hasta la próxima!

</content>
 </entry>
 
 <entry>
   <title>¿Quieres hablar de Rails en la conferencia?</title>
   <link href="http://jaimeiniesta.com/2007/07/11/%25c2%25bfquieres-hablar-de-rails-en-la-conferencia.html"/>
   <updated>2007-07-11T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/07/11/%c2%bfquieres-hablar-de-rails-en-la-conferencia</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;http://www.conferenciarails.org/images/badge.png&quot; align=&quot;right&quot; height=&quot;94&quot; width=&quot;178&quot; /&gt;El próximo &lt;strong&gt;15 de julio&lt;/strong&gt; se acaba el plazo de presentación de ponencias para la &lt;strong&gt;Conferencia Rails 2007&lt;/strong&gt;. Si quieres hablar de tu proyecto Rails, tu empresa Rails, o tu loquesea Rails, date prisa y envía tu propuesta ya!&lt;/p&gt;

&lt;p&gt;Yo ya he presentado la mía, me estoy preparando para contar cómo hacer una araña web (como &lt;a href=&quot;http://boris.railes.net&quot;&gt;Boris, la araña&lt;/a&gt;), hablaré sobre hpricot, open-uri, trabajos en background...&lt;/p&gt;

&lt;p&gt;Más información en &lt;a href=&quot;http://www.conferenciarails.org&quot;&gt;http://www.conferenciarails.org&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Dile NO al formato de Microsoft Office como estándar ISO</title>
   <link href="http://jaimeiniesta.com/2007/07/03/dile-no-al-formato-de-microsoft-office-como-estandar-iso.html"/>
   <updated>2007-07-03T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/07/03/dile-no-al-formato-de-microsoft-office-como-estandar-iso</id>
   <content type="html">&lt;p&gt;Porque ya existe un estándar (ODF), porque no existe ni una sóla aplicación que lo use (ni siquiera de Microsoft), porque no es abierto (no se podría aplicar el estándar sin usar patentes de Microsoft), porque no respeta otros estándares (formato de fecha y códigos de país), porque hace referencia a especificaciones propietarias no estándar y porque no es XML (aunque en el nombre lo parezca).
&lt;br clear=&quot;all&quot; /&gt;&lt;a href=&quot;http://www.noooxml.org/petition-es&quot;&gt;http://www.noooxml.org/petition-es&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Sabueso, un buscador de dominios libres en Rails</title>
   <link href="http://jaimeiniesta.com/2007/07/02/sabueso-un-buscador-de-dominios-libres-en-rails.html"/>
   <updated>2007-07-02T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/07/02/sabueso-un-buscador-de-dominios-libres-en-rails</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/07/sabuesothumbnail.jpg&quot; title=&quot;sabuesothumbnail.jpg&quot; alt=&quot;sabuesothumbnail.jpg&quot; align=&quot;right&quot; /&gt;A través de &lt;a href=&quot;http://www.carpetecniem.com/&quot;&gt;CarpeTecniem&lt;/a&gt;, el blog personal de Dani Sevilla (Danisev), me encuentro con su aplicación-experimento &quot;&lt;a href=&quot;http://www.sabueso.carpetecniem.com&quot;&gt;Sabueso&lt;/a&gt;&quot;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&quot;El experimento ha consistido en coger todas las palabras de los &lt;strong&gt;diccionarios &lt;a href=&quot;http://www.sourcentral.org/man/debian-stable/5+spanish&quot; onclick=&quot;javascript:urchinTracker ('/outgoing/www.sourcentral.org/man/debian-stable/5+spanish');&quot; target=&quot;_blank&quot;&gt;español&lt;/a&gt; e &lt;a href=&quot;http://www.sourcentral.org/man/debian-unstable/5+british-english&quot; onclick=&quot;javascript:urchinTracker ('/outgoing/www.sourcentral.org/man/debian-unstable/5+british-english');&quot; target=&quot;_blank&quot;&gt;inglés&lt;/a&gt;&lt;/strong&gt; y mandar al sabueso a &lt;a href=&quot;http://es.wikipedia.org/wiki/Whois&quot; onclick=&quot;javascript:urchinTracker ('/outgoing/es.wikipedia.org/wiki/Whois');&quot; target=&quot;_blank&quot;&gt;investigar&lt;/a&gt; si estaban registradas en las extensiones &lt;strong&gt;.com, .net y .es&lt;/strong&gt;.&quot;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Un experimento curioso, poniendo parte de una palabra te salen las posibles variaciones que quedan libres. Por ejemplo, tecleando &quot;zapat&quot; comprobarás que, obviamente, tanto &quot;zapatos.com&quot; como &quot;zapatero.com&quot; están ya registrados, pero están libres muchos otros como &quot;zapatuda.net&quot;... :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Jornadas de Software Libre en Girona</title>
   <link href="http://jaimeiniesta.com/2007/06/29/jornadas-de-software-libre-en-girona.html"/>
   <updated>2007-06-29T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/06/29/jornadas-de-software-libre-en-girona</id>
   <content type="html">&lt;p&gt;La semana que viene, del 4 al 7 de julio de 2007, en la Universidad de Girona, tendrán lugar las &lt;a href=&quot;http://www.jornadespl.org&quot;&gt;VI Jornades de Programari Lliure&lt;/a&gt;, 5 días de charlas y tutoriales sobre software libre, incluyendo Facturalux, Bulmagés, Plone, FreeNX, GNU/Debian y Linkat.&lt;/p&gt;

&lt;p&gt;Nos vemos allí!&lt;/p&gt;

&lt;h1&gt;Les VI-JPL ja estan a punt&lt;/h1&gt;

&lt;p&gt;Aquesta VI edició que, com ja deveu saber, serà hostatjada per la
Universitat de Girona, es presenta curulla d'actes que ens sembla que
seran del vostre màxim interès. Ens visiten alguns dels desenvolupadors
de Facturalux &amp;lt;&lt;a href=&quot;http://www.infosial.com/&quot; onclick=&quot;return top.js.OpenExtLink(window,event,this)&quot; target=&quot;_blank&quot;&gt;http://www.infosial.com/&lt;/a&gt;&amp;gt; i de Bulmagés
&amp;lt;&lt;a href=&quot;http://bulmages.bulma.net/01index.php&quot; onclick=&quot;return top.js.OpenExtLink(window,event,this)&quot; target=&quot;_blank&quot;&gt;http://bulmages.bulma.net&lt;wbr&gt;&lt;/wbr&gt;/01index.php&lt;/a&gt;&amp;gt;, ambdues aplicacions lliures que
podríem classificar-les com ERP. També, com a convidat estrella serà
entre nosaltres Alexander Limi &amp;lt;&lt;a href=&quot;http://limi.net/&quot; onclick=&quot;return top.js.OpenExtLink(window,event,this)&quot; target=&quot;_blank&quot;&gt;http://limi.net/&lt;/a&gt;&amp;gt;, creador de Plone
&amp;lt;&lt;a href=&quot;http://plone.org/&quot; onclick=&quot;return top.js.OpenExtLink(window,event,this)&quot; target=&quot;_blank&quot;&gt;http://plone.org&lt;/a&gt;&amp;gt;, expert en usabilitat i actualment treballador a
Google. Fabian Franz, líder del projecte FreeNX
&amp;lt;&lt;a href=&quot;http://freenx.berlios.de/&quot; onclick=&quot;return top.js.OpenExtLink(window,event,this)&quot; target=&quot;_blank&quot;&gt;http://freenx.berlios.de/&lt;/a&gt;&amp;gt;, també estarà entre nosaltres. Martin
Michlmayr &amp;lt;&lt;a href=&quot;http://www.cyrius.com/&quot; onclick=&quot;return top.js.OpenExtLink(window,event,this)&quot; target=&quot;_blank&quot;&gt;http://www.cyrius.com/&lt;/a&gt;&amp;gt;, ex-líder de GNU/Debian i actualment
dedicat a la investigació, ens vindrà a explicar els darrers resultats
sobre al problemàtica del release management en projectes de programari
lliure. També, com és tradició a les JPL, us hem preparat diversos
tutorials entre els que en destaca un dedicat a la veu sobre IP. Altres
actes farceixen les JPL: la presentació pública de la nova versió de
LinKat &amp;lt;&lt;a href=&quot;http://linkat.xtec.cat/&quot; onclick=&quot;return top.js.OpenExtLink(window,event,this)&quot; target=&quot;_blank&quot;&gt;http://linkat.xtec.cat&lt;/a&gt;&lt;script&gt;&lt;!-- D([&quot;mb&quot;,&quot;&amp;amp;gt;, una taula rodona d\'alta tensió que\u003cbr /\&gt;debatrà sobre els impediments que hi ha a l'administració per adoptar\u003cbr /&gt;programari lliure, les jornades KDE i Ubuntu i molt especialment les 15\u003cbr /&gt;comunicacions que any darrera any augmenten la qualitat. Durant aquestes\u003cbr /&gt;Jornades també ens acompanyarà un sprint de Plone: alguns dels\u003cbr /&gt;desenvolupadors més importants del projecte seran a Girona treballant\u003cbr /&gt;per millorar les capacitats multilíngües del producte. És una ocasió\u003cbr /&gt;magnífica per contactar amb ells.\u003cbr /&gt;\u003cbr /&gt;\u003cbr /&gt;Programa disponible\u003cbr /&gt;\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003cbr /&gt;\u003cbr /&gt;Ja està disponible el programa provisional\u003cbr /&gt;&amp;lt;\u003ca onclick\u003d&quot;return top.js.OpenExtLink(window,event,this)&quot; href\u003d&quot;http://www.jornadespl.org/biblioteca/vi-jornades/papereria/programa-a4.pdf&quot; target\u003d_blank&gt;http://www.jornadespl.org\u003cwbr /&gt;/biblioteca/vi-jornades\u003cwbr /&gt;/papereria/programa-a4.pdf\u003c/a&gt;&amp;gt;\u003cbr /&gt;\u003cbr /&gt;de les VI-JPL &amp;lt;\u003ca onclick\u003d&quot;return top.js.OpenExtLink(window,event,this)&quot; href\u003d&quot;http://www.jornadespl.org&quot; target\u003d_blank&gt;http://www.jornadespl.org\u003c/a&gt;&amp;gt;\u003cbr /&gt;\u003cbr /&gt;Inscripció oberta\u003cbr /&gt;\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003cbr /&gt;\u003cbr /&gt;Ja està oberta la inscripció a les VI-JPL. Recordeu que:\u003cbr /&gt;\u003cbr /&gt; &amp;nbsp; &amp;nbsp;&lt;em&gt; La inscripció és &lt;/em&gt;obligatòria&lt;em&gt;\u003cbr /&gt; &amp;nbsp; &amp;nbsp;&lt;/em&gt; La inscripció és &lt;em&gt;gratuïta&lt;/em&gt;\u003cbr /&gt; &amp;nbsp; &amp;nbsp;&lt;em&gt; En arribar a les JPL &lt;/em&gt;heu de passar pel taulell de recepció per\u003cbr /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;acreditar-vos*.\u003cbr /&gt;\u003cbr /&gt;Per inscriure-us només cal que us enregistreu en aquest formulari\u003cbr /&gt;&amp;lt;\u003ca onclick\u003d&quot;return top.js.OpenExtLink(window,event,this)&quot; href\u003d&quot;http://www.jornadespl.org/join_form&quot; target\u003d_blank&gt;http://www.jornadespl.org/join\u003cwbr /&gt;&lt;em&gt;form\u003c/a&gt;&amp;gt;.\u003cbr /&gt;\u003cbr /&gt;\u003cbr /&gt;Més informació\u003cbr /&gt;\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003cbr /&gt;\u003cbr /&gt;Com sempre, a la pàgina &amp;nbsp;&amp;lt;\u003ca onclick\u003d&quot;return top.js.OpenExtLink(window,event,this)&quot; href\u003d&quot;http://www.jornadespl.org&quot; target\u003d_blank&gt;http://www.jornadespl.org\u003c/a&gt;&amp;gt; &amp;nbsp;hi ha més\u003cbr /&gt;informació.\u003cbr /&gt;\u003cbr /&gt;\u003cbr /&gt;Ens trobem a Girona!\u003cbr /&gt;\u003cbr /&gt;\u003cbr /&gt;\u003cbr /&gt;\u003cbr /&gt;\u003cbr /&gt;&lt;/em&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;em&gt;____________\u003cwbr /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;\u003cbr /&gt;jpl-info mailing list\u003cbr /&gt;\u003ca onclick\u003d&quot;return top.js.OpenExtLink(window,event,this)&quot; href\u003d&quot;mailto:jpl-info@cpl.upc.edu&quot;&gt;jpl-info@cpl.upc.edu\u003c/a&gt;\u003cbr /&gt;\u003ca onclick\u003d&quot;return top.js.OpenExtLink(window,event,this)&quot; href\u003d&quot;https://lists.lafarga.cpl.upc.edu/mailman/listinfo/jpl-info&quot; target\u003d_blank&gt;https://lists.lafarga.cpl.upc\u003cwbr /&gt;.edu/mailman/listinfo/jpl-info\u003c/a&gt;\u003cbr /&gt;\u003c/div&gt;&quot;,0] );  //--&gt;&lt;/script&gt;&amp;gt;, una taula rodona d'alta tensió que
debatrà sobre els impediments que hi ha a l'administració per adoptar
programari lliure, les jornades KDE i Ubuntu i molt especialment les 15
comunicacions que any darrera any augmenten la qualitat. Durant aquestes
Jornades també ens acompanyarà un sprint de Plone: alguns dels
desenvolupadors més importants del projecte seran a Girona treballant
per millorar les capacitats multilíngües del producte. És una ocasió
magnífica per contactar amb ells.&lt;/p&gt;

&lt;h1&gt;Programa disponible&lt;/h1&gt;

&lt;p&gt;Ja està disponible el programa provisional
&amp;lt;&lt;a href=&quot;http://www.jornadespl.org/biblioteca/vi-jornades/papereria/programa-a4.pdf&quot; onclick=&quot;return top.js.OpenExtLink(window,event,this)&quot; target=&quot;_blank&quot;&gt;http://www.jornadespl.org&lt;wbr&gt;&lt;/wbr&gt;/biblioteca/vi-jornades&lt;wbr&gt;&lt;/wbr&gt;/papereria/programa-a4.pdf&lt;/a&gt;&amp;gt;&lt;/p&gt;

&lt;p&gt;de les VI-JPL &amp;lt;&lt;a href=&quot;http://www.jornadespl.org/&quot; onclick=&quot;return top.js.OpenExtLink(window,event,this)&quot; target=&quot;_blank&quot;&gt;http://www.jornadespl.org&lt;/a&gt;&amp;gt;&lt;/p&gt;

&lt;h1&gt;Inscripció oberta&lt;/h1&gt;

&lt;p&gt;Ja està oberta la inscripció a les VI-JPL. Recordeu que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La inscripció és &lt;em&gt;obligatòria&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;La inscripció és &lt;em&gt;gratuïta&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;En arribar a les JPL &lt;em&gt;heu de passar pel taulell de recepció per
acreditar-vos&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Per inscriure-us només cal que us enregistreu en aquest formulari
&amp;lt;&lt;a href=&quot;http://www.jornadespl.org/join_form&quot; onclick=&quot;return top.js.OpenExtLink(window,event,this)&quot; target=&quot;_blank&quot;&gt;http://www.jornadespl.org/join&lt;wbr&gt;&lt;/wbr&gt;_form&lt;/a&gt;&amp;gt;.&lt;/p&gt;

&lt;h1&gt;Més informació&lt;/h1&gt;

&lt;p&gt;Com sempre, a la pàgina  &amp;lt;&lt;a href=&quot;http://www.jornadespl.org/&quot; onclick=&quot;return top.js.OpenExtLink(window,event,this)&quot; target=&quot;_blank&quot;&gt;http://www.jornadespl.org&lt;/a&gt;&amp;gt;  hi ha més
informació.&lt;/p&gt;

&lt;p&gt;Ens trobem a Girona!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Boris, la araña, cumple un mes</title>
   <link href="http://jaimeiniesta.com/2007/06/24/boris-la-arana-cumple-un-mes.html"/>
   <updated>2007-06-24T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/06/24/boris-la-arana-cumple-un-mes</id>
   <content type="html">&lt;p&gt;Parece que fué ayer cuando nació &lt;a href=&quot;http://boris.railes.net&quot;&gt;Boris, la araña&lt;/a&gt;, pero el caso es que ya lleva un mes dando vueltas constantemente por la WWW. Los resultados, tras un mes de actividad, son 122.185 &lt;a href=&quot;http://boris.railes.net/paginas&quot;&gt;páginas&lt;/a&gt; rastreadas y 65.771 &lt;a href=&quot;http://boris.railes.net/keywords&quot;&gt;keywords&lt;/a&gt; diferentes almacenadas. Las keywords más populares son linux, design, open source, software y web.
&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;/uploads/2007/06/gruff.png&quot; alt=&quot;Historial de Boris&quot; /&gt;&lt;/p&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Software Libre en Girona</title>
   <link href="http://jaimeiniesta.com/2007/06/18/software-libre-en-girona.html"/>
   <updated>2007-06-18T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/06/18/software-libre-en-girona</id>
   <content type="html">&lt;p&gt;Hoy comienzo una nueva etapa de mi vida en Girona... y compruebo que por aquí hay también mucho movimiento de Software Libre...
&lt;ul&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;Del 19 al 21 de octubre de 2007 (cambio de fecha), la &amp;lt;a href=&quot;http://volcanica.cat/&quot;&amp;gt;Volcanica Lan Party&amp;lt;/a&amp;gt; en Olot.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Del 3 al 5 de marzo de 2008, las &amp;lt;a href=&quot;http://www.sigte.udg.es/jornadassiglibre/&quot;&amp;gt;II Jornadas de Software Libre de Girona&amp;lt;/a&amp;gt;.&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/ul&gt;
En Volcanica impartiré un par de talleres sobre Ruby on Rails, y creo que repetiré en marzo. Esto se mueve!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ruby cookbook en castellano</title>
   <link href="http://jaimeiniesta.com/2007/06/10/ruby-cookbook-en-castellano.html"/>
   <updated>2007-06-10T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/06/10/ruby-cookbook-en-castellano</id>
   <content type="html">&lt;p&gt;Hace unas semanas pasé por una librería en Girona y descubrí la &lt;a href=&quot;http://www.jaimeiniesta.com/2007/05/08/libros-de-ruby-on-rails-en-castellano/&quot;&gt;traducción al castellano de un libro de Rails&lt;/a&gt;... Ayer volví a pasar por la misma librería de Girona y descubrí un nuevo libro traducido al castellano, esta vez el &lt;a href=&quot;http://www.oreilly.com/catalog/rubyckbk/&quot;&gt;Ruby cookbook&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;¿Soy el catalizador de la traducción de libros de Ruby y Rails al castellano? En ese caso, prometo seguir pasándome periódicamente por esa librería para que vayan traduciendo más libros. ¿Cuál te gustaría ver traducido? Se aceptan peticiones. :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ruby on Rails como tesis (2)</title>
   <link href="http://jaimeiniesta.com/2007/06/06/ruby-on-rails-como-tesis-y-2.html"/>
   <updated>2007-06-06T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/06/06/ruby-on-rails-como-tesis-y-2</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.jaimeiniesta.com/2007/05/21/ruby-on-rails-como-tesis/&quot;&gt;Hace unos días&lt;/a&gt; recibí un e-mail de un estudiante que está preparando una tésis sobre el fenómeno Rails y su adopción en las empresas.&lt;/p&gt;

&lt;p&gt;Ayer recibí otro anunciando que la encuesta ya está preparada, y ahora acabo de contestar a las preguntas. Os recomiendo a todos los que hagáis uso comercial de Ruby on Rails que participéis en la encuesta, así os conoceréis más a vosotros mismos y analizaremos entre todos el por qué de esta rápida aceptación de una nueva tecnología. Los resultados se harán públicos a finales de julio.&lt;/p&gt;

&lt;p&gt;La fecha límite es este domingo, el próximo 10 de junio.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://survey.cicaboo.com/&quot; title=&quot;Encuesta Rails&quot;&gt;http://survey.cicaboo.com/&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Volcanica 2007 - evento de software libre en Olot</title>
   <link href="http://jaimeiniesta.com/2007/06/05/volcanica-2007-evento-de-software-libre-en-olot.html"/>
   <updated>2007-06-05T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/06/05/volcanica-2007-evento-de-software-libre-en-olot</id>
   <content type="html">&lt;p&gt;Me he enterado a través de la lista del &lt;a href=&quot;http://gilug.org/&quot;&gt;Gilug&lt;/a&gt; que del 12 al 14 de octubre de este año tendrá lugar &lt;a href=&quot;http://volcanica.cat/&quot;&gt;Volcanica 2007&lt;/a&gt;, un evento de difusión del software libre en &lt;a href=&quot;http://ww2.olot.org/&quot;&gt;Olot&lt;/a&gt; (provincia de Girona).&lt;/p&gt;

&lt;p&gt;El año pasado se habló sobre cómo hacer música con software libre, gráficos 3D con Blender, talleres de wifi y sistemas operativos como nexenta, reactos, bsd, install parties de Ubuntu, formación online con Moodle...  el cartel de este año está todavía por definir pero ya se ha confirmado que se hablará de wifi, Ubuntu y robótica.&lt;/p&gt;

&lt;p&gt;El nombre del evento, &quot;Volcanica&quot;, es debido a que Olot, la ciudad donde tiene lugar este evento, está situada en la zona de la &lt;a href=&quot;http://www.turismegarrotxa.com/&quot;&gt;Garrotxa&lt;/a&gt;, un parque natural volcánico.&lt;/p&gt;

&lt;p&gt;Yo ya me he reservado esos días en mi agenda, que además este año me pilla cerca de &lt;a href=&quot;http://www.jaimeiniesta.com/2007/06/01/me-voy-a-vivir-a-girona/&quot;&gt;mi nueva casa en Girona&lt;/a&gt;. :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Me voy a vivir a Girona</title>
   <link href="http://jaimeiniesta.com/2007/06/01/me-voy-a-vivir-a-girona.html"/>
   <updated>2007-06-01T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/06/01/me-voy-a-vivir-a-girona</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/06/girona.jpg&quot; title=&quot;Girona&quot; alt=&quot;Girona&quot; align=&quot;right&quot; height=&quot;213&quot; width=&quot;160&quot; /&gt;Bueno, pues parece que tras varios meses preparándolo, finalmente se va a materializar mi viejo proyecto de marcharme a vivir a otra ciudad!&lt;/p&gt;

&lt;p&gt;Aprovechando que al ser &lt;strong&gt;freelance&lt;/strong&gt; y trabajar desde casa no estoy atado a ninguna ciudad, Almu y yo hemos estado mirando otras ciudades donde la vida sea más habitable que en Madrid... finalmente la elegida ha sido Girona, que nos encantó en &lt;a href=&quot;http://flickr.com/photos/jaimeiniesta/sets/72157600195694152/&quot; title=&quot;Fotos de Girona&quot;&gt;una reciente visita&lt;/a&gt; hará cosa de un mes.&lt;/p&gt;

&lt;p&gt;Ya estamos ultimando las gestiones: buscar piso, teléfono y ADSL, organizar &lt;a href=&quot;http://www.google.com/maps?f=d&amp;amp;amp;hl=es&amp;amp;amp;saddr=Calle+de+Serrano+3,+28001+Madrid,+Spain&amp;amp;amp;daddr=Girona,+Spain&amp;amp;amp;sll=37.0625,-95.677068&amp;amp;amp;sspn=31.784549,58.886719&amp;amp;amp;ie=UTF8&amp;amp;amp;z=7&amp;amp;amp;om=1&quot;&gt;una mudanza de 700 Km&lt;/a&gt;...  Muchas cosas que preparar, así que mucha calma... porque además mientras tanto hay que seguir &lt;a href=&quot;http://www.railes.net&quot;&gt;trabajando&lt;/a&gt; y nos estamos terminando de sacar el carnet de conducir al mismo tiempo. Multitarea!&lt;/p&gt;

&lt;p&gt;Vamos con mucha ilusión y con ganas de integrarnos rápido en Girona. Por lo pronto ya tenemos a un conocido allí, &lt;a href=&quot;http://www.eparreno.com/&quot;&gt;Emili Parreño&lt;/a&gt;, de la lista de Ruby on Rails, y a otros un poquito más alejados pero más cerca que ahora, como &lt;a href=&quot;http://www.hashref.com/&quot;&gt;Xavier Noria&lt;/a&gt; en Barcelona. Ya hemos mirado academias donde nos &lt;a href=&quot;http://www.cpnl.cat/&quot;&gt;normalicen lingüisticamente&lt;/a&gt;, o sea, donde nos enseñen a hablar en catalán, y  un par de &lt;a href=&quot;http://www.mailxmail.com/curso/idiomas/catalan/capitulo1.htm&quot;&gt;cursos&lt;/a&gt; &lt;a href=&quot;http://es.wikibooks.org/wiki/Catal%C3%A1n_para_castellanoparlantes&quot;&gt;online&lt;/a&gt; para aprenderlo.&lt;/p&gt;

&lt;p&gt;Como en la Web es más rápido mudarse, por lo pronto ya me he ido posicionando con &lt;a href=&quot;http://www.freelancegirona.com&quot;&gt;Freelance Girona&lt;/a&gt;, y voy apuntando mis sitios favoritos en &lt;a href=&quot;http://www.google.com/maps/ms?ie=UTF8&amp;amp;amp;hl=es&amp;amp;amp;msa=0&amp;amp;amp;msid=104670109646725252586.00000112a166818111f49&amp;amp;amp;ll=41.975891,2.830954&amp;amp;amp;spn=0.029097,0.057507&amp;amp;amp;z=14&amp;amp;amp;om=1&quot;&gt;mi Google Map de Girona&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A los madrileños: ¡no os libraréis tan fácil de nosotros! Seguiremos viniendo por aquí periódicamente, que mantenemos clientes y amigos. Por lo pronto tengo que venir en septiembre a examinar a mis alumnos de Comercio Electrónico en la &lt;a href=&quot;http://www.ufv.es/&quot;&gt;universidad&lt;/a&gt;, y en noviembre para la &lt;a href=&quot;http://www.conferenciarails.org&quot;&gt;Conferencia Rails&lt;/a&gt;, que este año vuelve a ser en Madrid... ¡centralistas! :P&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Trabajos en background con script/runner</title>
   <link href="http://jaimeiniesta.com/2007/05/31/trabajos-en-background-con-scriptrunner.html"/>
   <updated>2007-05-31T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/31/trabajos-en-background-con-scriptrunner</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://boris.railes.net&quot; title=&quot;Boris, un directorio web Ruby on Rails&quot;&gt;Boris, la araña&lt;/a&gt;, lleva ya una semana rastreando la web en busca de páginas, saltando de unas a otras a través de los hiperenlaces que encuentra... A estas alturas está cerca de las 30.000 URLs almacenadas, de las que unas 6.000 han sido exploradas en busca de meta keywords, lo que ha resultado en unas 21.400 palabras clave diferentes por el momento.&lt;/p&gt;

&lt;p&gt;Para hacer este trabajo en background contínuo desde el servidor empleé una solución cutre-y-rápida consistente en un controlador/vista que al ser visitado, buscaba la siguiente página en cola y la exploraba. Para simular una visita a esa vista cada minuto, usaba &lt;a href=&quot;http://es.wikipedia.org/wiki/Wget&quot; title=&quot;wget&quot;&gt;wget&lt;/a&gt; desde &lt;a href=&quot;http://es.wikipedia.org/wiki/Cron_(unix)&quot; title=&quot;cron&quot;&gt;cron&lt;/a&gt;, como expliqué &lt;a href=&quot;http://www.jaimeiniesta.com/2007/05/24/el-historial-de-boris-y-el-top-keywords/#comments&quot; title=&quot;usar wget y cron para ejecutar tareas en background desde rails&quot;&gt;en los comentarios de este post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Esta técnica funciona, pero tiene sus pegas. Lo primero, no es muy elegante el usar una vista si no necesitas ver nada. Por otro lado, las llamadas a las vistas pasan a través del servidor web, así que estaba haciendo trabajar a Apache sin ser necesario. Sobre todo, lo malo es que como la operación de actualización tomaba mucho tiempo, en visitar la URL externa y procesarla, al final se podía traducir en que la parte pública de la web no estaba disponible porque tenía a todos mis apaches encargados en labores de background.&lt;/p&gt;

&lt;p&gt;Ahora estoy probando la técnica de &lt;a href=&quot;http://wiki.rubyonrails.org/rails/pages/RunnerScript&quot;&gt;script/runner&lt;/a&gt;. Es muy sencillo, básicamente te permite ejecutar un método de un modelo, de la siguiente manera:&lt;/p&gt;

&lt;p&gt;./script/runner -e production &quot;Model.do_something&quot;&lt;/p&gt;

&lt;p&gt;El parámetro -e es para indicarle el environment, el de producción en este caso. Y entre comillas, lo que quieras ejecutar. Ahora esto lo puedes meter como trabajo cron y a correr. Por el momento va funcionando bien y se nota un aumento en la capacidad de respuesta de la web, ya que todos los apaches/fastcgi están disponibles para atender la parte pública, mientras script/runner hace su trabajo en la trastienda.&lt;/p&gt;

&lt;p&gt;Por otro lado, he añadido un &lt;a href=&quot;http://ruby-doc.org/stdlib/libdoc/timeout/rdoc/classes/Timeout.html&quot;&gt;Timeout&lt;/a&gt; en las operaciones de red para que si una actualización dura más de 55 segundos, se aborte antes de la siguiente llamada de cron para no ir acumulando tareas y consumir recursos.&lt;/p&gt;

&lt;p&gt;Sigo pensando en probar el plugin &lt;a href=&quot;http://svn.kylemaxwell.com/rails_plugins/daemon_generator/tags/rel-0.5.1/&quot;&gt;daemon_generator&lt;/a&gt; porque creo que dará mejor rendimiento que script/runner. El principal inconveniente de script/runner es que arranca toda la lógica de la aplicación Rails en cada llamada, lo cual es muy ineficiente, mientras que con daemon_generator se arranca al comienzo del demonio y éste se dedica a despertarse cada cierto tiempo para hacer sus tareas y se vuelve a dormir, pero cada vez que despierta ya tiene la lógica cargada. A ver si lo miro bien porque por lo que probé, daba problemas con mi versión de Rails.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>El historial de Boris y el top keywords</title>
   <link href="http://jaimeiniesta.com/2007/05/24/el-historial-de-boris-y-el-top-keywords.html"/>
   <updated>2007-05-24T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/24/el-historial-de-boris-y-el-top-keywords</id>
   <content type="html">&lt;p&gt;Todo experimento que se precie ha de tener una serie de medidas y resultados que poder contar después. Así que le he dicho a &lt;a href=&quot;http://boris.railes.net&quot;&gt;Boris, la araña&lt;/a&gt;, que de vez en cuando vaya apuntando cuántas páginas lleva rastreadas, cuántas keywords y cuáles son las más populares. Y así lo está haciendo en su &lt;a href=&quot;http://boris.railes.net/stats&quot;&gt;cuaderno de bitácora&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Por ahora, tras unas 20 horas, lleva unas 7.000 páginas (unas 1.100 exploradas para sacar sus meta keywords, description y título, y el resto en cola, encontradas a través de enlaces o envíos manuales). De esas 1.100 páginas, las keywords más populares son:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;linux&lt;/strong&gt; usada en 81 páginas.&lt;strong&gt;
open source&lt;/strong&gt; usada en 64 páginas.&lt;strong&gt;
software&lt;/strong&gt; usada en 44 páginas.&lt;strong&gt;
php&lt;/strong&gt; usada en 40 páginas.&lt;strong&gt;
suse&lt;/strong&gt; usada en 30 páginas.&lt;/p&gt;

&lt;p&gt;Las estadísticas se actualizan cada día. A ver cómo crece la cosa... :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Boris, una araña web con Ruby on Rails</title>
   <link href="http://jaimeiniesta.com/2007/05/23/boris-una-arana-web-con-ruby-on-rails.html"/>
   <updated>2007-05-23T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/23/boris-una-arana-web-con-ruby-on-rails</id>
   <content type="html">&lt;p&gt;Acabo de soltar en la &lt;em&gt;wild wild web&lt;/em&gt; a &lt;a href=&quot;http://boris.railes.net&quot; title=&quot;Boris, una araña web&quot;&gt;Boris, la araña&lt;/a&gt;, un buscador web programado con Ruby on Rails a modo de experimento personal...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Boris&lt;/strong&gt; es una araña web que cataloga las páginas de acuerdo a las keywords que tienen declaradas.&lt;/p&gt;

&lt;p&gt;Está constantemente rastreando páginas en la Web, y para cada una se apunta su título, descripción y keywords (palabras clave). Además, es capaz de leer los enlaces a otros sitios web, para añadirlos a su cola de páginas por visitar, y así &lt;em&gt;ad nauseam&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;En media hora lleva ya rastreadas más de 250 sitios web, está en plan salvaje... Aún no he conseguido amaestrarla para que reconozca el charset de algunas webs, pero espero que con la ayuda de &lt;a href=&quot;http://amaiac.net&quot;&gt;Amaia Castro&lt;/a&gt;, de &lt;a href=&quot;http://dabne.net&quot;&gt;Dabne&lt;/a&gt;, y un poco de paciencia, logremos hacer de Boris una araña más lista. :)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://boris.railes.net&quot;&gt;http://boris.railes.net&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Pagerankalert.com, beta 7</title>
   <link href="http://jaimeiniesta.com/2007/05/22/pagerankalertcom-beta-7.html"/>
   <updated>2007-05-22T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/22/pagerankalertcom-beta-7</id>
   <content type="html">&lt;p&gt;Tras unas semanas con el proyecto parado por falta de tiempo y el incidente con el presunto baneo (que luego no fue tal), acabo de subir la beta 7 de PageRankAlert.com.&lt;/p&gt;

&lt;p&gt;La principal novedad, aparte de que se retoma la actualización del historial de Pagerank para todas las páginas, es que ahora contamos con un bot que visita cada página y se trae su título, keywords y descripción para mostrarla en los listados. Ahora mismo está el Pagerankalert Bot recorriendo la web, en un rato visitará tu web... :)&lt;/p&gt;

&lt;p&gt;Las keywords se pueden ver ahora en una nube que muestra las más populares y permite navegar por ellas, viendo qué páginas usan una keyword dada y qué keywords tiene una página:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://pagerankalert.com/keywords&quot;&gt;http://pagerankalert.com/keywords&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ruby on Rails como tesis</title>
   <link href="http://jaimeiniesta.com/2007/05/21/ruby-on-rails-como-tesis.html"/>
   <updated>2007-05-21T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/21/ruby-on-rails-como-tesis</id>
   <content type="html">&lt;p&gt;Me ha llegado esto por e-mail, de un estudiante universitario holandés que está haciendo una tesis donde pretende analizar el fenómeno de la rápida adopción de Rails en las empresas, a través de una encuesta online. Los resultados de la encuesta se publicarán posteriormente en la web.&lt;/p&gt;

&lt;p&gt;Tengo curiosidad por ver qué preguntas nos hacen, aunque nunca había pensado en autoanalizarme para saber por qué me he pasado a Rails... es tan obvio que no me lo pregunto, pero supongo que desde fuera es necesario encontrar los motivos racionales que nos impulsan a cambiar a una plataforma minoritaria.
&lt;blockquote&gt;&lt;em&gt;&lt;font size=&quot;2&quot;&gt;Dear Sir/Madam,&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;font size=&quot;2&quot;&gt;my name is Michel Barbosa and I'm a bachelor student at the Erasmus Universiteit Rotterdam in the Netherlands. In order to graduate for the study 'Informatics &amp;amp; Economics' I have to write a bachelor thesis and my subject is &lt;/font&gt;&lt;strong&gt;&lt;font size=&quot;2&quot;&gt;ruby on rails&lt;/font&gt;&lt;/strong&gt;&lt;font size=&quot;2&quot;&gt;. My research object is as follows:&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;font size=&quot;2&quot;&gt;The research object of this study is the development of a new theory concerning the adoption of rails within (commercial) companies by providing a checklist companies can use to evaluate/consider using rails. The checklist will be be based on an analysis of the most important adoption factors/motivations and characteristics of companies that are already using rails. For the first time ever, the research will enable companies to consider rails by following this checklist and provides a starting point to the research of the adoption of rails by companies.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;font size=&quot;2&quot;&gt;My question to you is if you're willing to participate in an online survey within the following 2 weeks, in order to analyze your (company's) motivations as well. The survey will be ready within the next week and afterwards I will be launching a website for the survey. I have already contacted a lot of companies, but I'm hoping that the Spannish companies are willing to participate as well. If you're indeed willing to participate or are having doubts, please let me know. The thesis will be published on a public website as soon as it's finished.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;font size=&quot;2&quot;&gt;Sincerely yours,&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;font size=&quot;2&quot;&gt;Michel Barbosa&lt;/font&gt;
&lt;font size=&quot;2&quot;&gt;3e jaars student Informatica &amp;amp; Economie&lt;/font&gt;
&lt;font size=&quot;2&quot;&gt;Erasmus Universiteit Rotterdam&lt;/font&gt;
&lt;font size=&quot;2&quot;&gt;289573mb&lt;/font&gt; &lt;/em&gt;&lt;/blockquote&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Conferencia Rails 2007: Call for papers</title>
   <link href="http://jaimeiniesta.com/2007/05/19/conferencia-rails-2007-call-for-papers.html"/>
   <updated>2007-05-19T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/19/conferencia-rails-2007-call-for-papers</id>
   <content type="html">&lt;p&gt;¡Hemos abierto el plazo para la presentación de ponencias!&lt;/p&gt;

&lt;p&gt;A todos los interesados en acudir como ponentes a la &lt;a href=&quot;http://conferenciarails.org&quot;&gt;Conferencia Rails 2007&lt;/a&gt;, escribid a &lt;a href=&quot;mailto:ponencias@conferenciarails.org&quot;&gt;ponencias@conferenciarails.org&lt;/a&gt; con la propuesta de charla, que debe incluir:
&lt;ul&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;Tu nombre&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Tu e-mail&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Un extracto del contenido de no mas de 200 palabras.&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/ul&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Learning Ruby, nuevo libro de O'Reilly</title>
   <link href="http://jaimeiniesta.com/2007/05/18/learning-ruby-nuevo-libro-de-oreilly.html"/>
   <updated>2007-05-18T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/18/learning-ruby-nuevo-libro-de-oreilly</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/05/learningruby.jpg&quot; title=&quot;Learning Ruby&quot; alt=&quot;Learning Ruby&quot; align=&quot;right&quot; /&gt;&lt;a href=&quot;http://www.oreilly.com&quot;&gt;O'Reilly&lt;/a&gt; ha anunciado un nuevo libro para aprender Ruby, &quot;&lt;a href=&quot;http://www.oreilly.com/catalog/9780596529864/#top&quot;&gt;Learning Ruby&lt;/a&gt;&quot;, que por la pinta que tiene parece bastante parecido en planteamiento al &quot;&lt;a href=&quot;http://www.jaimeiniesta.com/2007/05/08/libros-de-ruby-on-rails-en-castellano/&quot;&gt;Ruby on Rails Up and Running&lt;/a&gt;&quot;: orientado a principiantes, a modo de tutorial, más sencillo que meterse entre pecho y espalda el &lt;a href=&quot;http://www.rubycentral.com/book/&quot;&gt;Pickaxe&lt;/a&gt;. ;)&lt;/p&gt;

&lt;p&gt;Merece mucho la pena aprender Ruby, como ya nos demostró &lt;a href=&quot;http://2006.conferenciarails.org/conferenciantes.php#sergiogil&quot;&gt;Sergio Gil&lt;/a&gt; en su ponencia &quot;&lt;a href=&quot;http://2006.conferenciarails.org/ponencias.php#sergiogil&quot;&gt;Ruby mola (y por qué)&lt;/a&gt;&quot;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;tt&gt;&quot;You don't have to know everything about a car to drive one, &lt;/tt&gt;&lt;tt&gt;and you don't need to know everything about Ruby to start &lt;/tt&gt;&lt;tt&gt;programming with it. Written for both experienced and new &lt;/tt&gt;&lt;/em&gt;&lt;em&gt;&lt;tt&gt;programmers alike, Learning Ruby is a just-get-in-and-drive &lt;/tt&gt;&lt;tt&gt;book -- a hands-on tutorial that offers lots of Ruby programs &lt;/tt&gt;&lt;tt&gt;and lets you know how and why they work, just enough to get &lt;/tt&gt;&lt;tt&gt;you rolling down the road.&quot;&lt;/tt&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;&lt;/tt&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Probando un chat Rails...</title>
   <link href="http://jaimeiniesta.com/2007/05/14/probando-un-chat-rails.html"/>
   <updated>2007-05-14T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/14/probando-un-chat-rails</id>
   <content type="html">&lt;p&gt;Ayer hice un chat con Rails en un ratito... No pasa de ser un formulario para crear frases y un poquito de ajax para refrescar los últimos mensajes, pero no va nada mal...&lt;/p&gt;

&lt;p&gt;Iré mejorándolo, que se puede optimizar mucho (ahora se trae todo el listado de últimos mensajes cada vez en lugar de sólo los nuevos, por ejemplo)... pero por ahora me gustaría testearlo... ¿te animas?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://chat.electroduendes.net&quot;&gt;http://chat.electroduendes.net&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Nuevo libro sobre Prototype y Script.aculo.us</title>
   <link href="http://jaimeiniesta.com/2007/05/14/nuevo-libro-sobre-prototype-y-scriptaculous.html"/>
   <updated>2007-05-14T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/14/nuevo-libro-sobre-prototype-y-scriptaculous</id>
   <content type="html">&lt;p&gt;Pragmatic Programmers ha anunciado &lt;a href=&quot;http://pragmaticprogrammer.com/titles/cppsu/&quot;&gt;un libro&lt;/a&gt; sobre las librerías &lt;a href=&quot;http://www.prototypejs.org/&quot;&gt;Prototype&lt;/a&gt; y &lt;a href=&quot;http://script.aculo.us/&quot;&gt;Script.aculo.us&lt;/a&gt;, que tanto nos simplifican la vida al tratar con el DOM.&lt;/p&gt;

&lt;p&gt;La fecha de lanzamiento es octubre 2007, mientras tanto se puede comprar la versión beta en PDF.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Luchando contra los spambots en foros phpBB</title>
   <link href="http://jaimeiniesta.com/2007/05/11/luchando-contra-los-spambots-en-foros-phpbb.html"/>
   <updated>2007-05-11T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/11/luchando-contra-los-spambots-en-foros-phpbb</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/05/spam.jpg&quot; title=&quot;SPAM&quot; alt=&quot;SPAM&quot; align=&quot;right&quot; /&gt;He librado recientemente una batalla contra el spam en uno de mis proyectos, &lt;a href=&quot;http://www.electroduendes.net&quot;&gt;Electroduendes.net&lt;/a&gt;, en el que el apartado de &lt;a href=&quot;http://foro.electroduendes.net&quot;&gt;foro&lt;/a&gt; &lt;a href=&quot;http://www.phpbb.com/&quot;&gt;phpBB&lt;/a&gt; estaba siendo pasto de vendedores de viagra.&lt;/p&gt;

&lt;p&gt;Aunque el foro usaba captchas para intentar evitar el registro de spambots, éstos se lo saltaban a la torera... Afortunadamente ya que phpBB es software libre, de código abierto, dispone de un buen montón de modificaciones disponibles para instalar...&lt;/p&gt;

&lt;p&gt;Una de ellas es el mod &lt;a href=&quot;http://www.phpbb.com/community/viewtopic.php?t=354376&quot;&gt;Spam Words&lt;/a&gt;, que vigila ciertas palabras para prohibirlas en los temas. Si los usuarios las intentan emplear, reciben un mensaje de aviso al estar prohibidas... si insiten, se les banea, tanto su cuenta de usuario como su IP. Con una sencilla modificación, este mod hace uso del filtro anti-spam &lt;a href=&quot;http://www.akismet.com&quot;&gt;Akismet&lt;/a&gt;. Funciona bastante bien!&lt;/p&gt;

&lt;p&gt;Por otro lado, muchos spambots se registran simplemente para tener enlaces a sus webs, a través de la lista de miembros. Aunque quites el enlace, lo siguen haciendo, y te puedes encontrar con miles de usuarios ficticios registrados. Borrarlos no es sencillo ya que la administración de usuarios de phpBB deja bastante que desear: es necesario buscarlos uno por uno para borrarlos. Afortunadamente existe un mod llamado &lt;a href=&quot;http://www.phpbb.com/community/viewtopic.php?t=117359&quot;&gt;Admin Userlist&lt;/a&gt; que permite generar listados de usuarios ordenándolos por diversos criterios, mostrando rápidamente sus datos y permitiendo banearlos, desactivarlos o borrarlos en masa. En un pis-pas reduje la lista de 3.000 usuarios a 250, que eran los únicos usuarios reales del foro...&lt;/p&gt;

&lt;p&gt;Finalmente, os recomiendo el mod &lt;a href=&quot;http://area51.phpbb.com/phpBB/viewforum.php?f=15&quot;&gt;EasyMOD&lt;/a&gt; que hace más sencilla la instalación de otros mods, ya que ese es otro de los puntos débiles de phpBB, que no resulta sencillo instalar las modificaciones.&lt;/p&gt;

&lt;p&gt;¿A qué espera el equipo de phpBB para incluir estas modificaciones en el core?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://blog.faqoff.org/2007/02/16/akismet-para-foros-phpbb/&quot;&gt;Más sobre este tema en blogoff&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Libros de Ruby on Rails en castellano</title>
   <link href="http://jaimeiniesta.com/2007/05/08/libros-de-ruby-on-rails-en-castellano.html"/>
   <updated>2007-05-08T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/08/libros-de-ruby-on-rails-en-castellano</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/05/upnrunning.jpg&quot; title=&quot;Ruby on Rails: Up and running&quot; alt=&quot;Ruby on Rails: Up and running&quot; align=&quot;right&quot; /&gt;Este fin de semana he estado en Girona y visitando una librería local me he encontrado con la traducción al castellano de &lt;a href=&quot;http://www.agapea.com/Ruby-on-Rails-n666495i.htm&quot;&gt;Ruby on Rails: Up and Running&lt;/a&gt;, un buen libro de introducción a RoR de la editorial O'Reilly, traducido por Anaya.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/uploads/2007/05/ajax-los-mejores-trucos-i0n623551.jpg&quot; title=&quot;AJAX: Los mejores trucos&quot; alt=&quot;AJAX: Los mejores trucos&quot; align=&quot;left&quot; /&gt;La semana pasada descubrí también que en libro &lt;a href=&quot;http://www.agapea.com/Ajax-Los-mejores-trucos-n623551i.htm&quot;&gt;AJAX, los mejores trucos&lt;/a&gt;, también de O'Reilly y también traducido por Anaya, incluye un capítulo sobre Ruby on Rails.&lt;/p&gt;

&lt;p&gt;Definitivamente, Ruby on Rails comienza a despegar en España!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Conferencia Rails 2007: calentando motores</title>
   <link href="http://jaimeiniesta.com/2007/05/08/conferencia-rails-2007-calentando-motores.html"/>
   <updated>2007-05-08T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/08/conferencia-rails-2007-calentando-motores</id>
   <content type="html">&lt;p&gt;El equipo de organizadores de la Conferencia Rails hemos vuelto al ataque. Ya llevamos un par de reuniones preparatorias y la cosa pinta bien. Si l&lt;a href=&quot;http://www.google.es/search?&amp;amp;amp;q=%22conferencia+rails%22&quot; title=&quot;27.500 resultados en Google no pueden estar equivocados ;)&quot;&gt;a Conferencia Rails 2006 tuvo una gran repercusión en la blogosfera&lt;/a&gt;, todo apunta a la que la del 2007 (nuevamente en Noviembre) va a ser mucho más sonada.&lt;/p&gt;

&lt;p&gt;Por secreto de sumario no contaré nada hasta que se desclasifiquen los papeles, de aquí a un par de semanas que empezaremos a moverlo oficialmente, pero id pensando en qué os gustaría tener este año en la conferencia...&lt;/p&gt;

&lt;p&gt;A mi personalmente me gustaría que hubiera más talleres introductorios. Mantener los talleres avanzados, pero hacer más de introducción. ¿No se puede hacer un blog en 15 minutos? Bueno, pues demostrémoslo, a ver qué podemos montar en una hora de taller... También me gustaría que este año grabáramos en vídeo todas las charlas, no sólo la de la sala principal.&lt;/p&gt;

&lt;p&gt;¿Qué se os ocurre a vosotros? ¿Qué mejoraríais respecto al año anterior?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Dreamhost, alojamiento ecológico</title>
   <link href="http://jaimeiniesta.com/2007/05/04/dreamhost-alojamiento-ecologico.html"/>
   <updated>2007-05-04T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/04/dreamhost-alojamiento-ecologico</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/05/aboutus-green.gif&quot; title=&quot;Dreamhost, una compañía ecológica&quot; alt=&quot;Dreamhost, una compañía ecológica&quot; align=&quot;right&quot; /&gt;La compañía de hosting &lt;a href=&quot;http://www.dreamhost.com/r.cgi?142348&quot;&gt;Dreamhost&lt;/a&gt; es conocida por l&lt;a href=&quot;http://www.jaimeiniesta.com/alojamiento-web-dreamhost&quot;&gt;a inmensa cantidad de recursos web que ponen a disposición de sus usuarios por muy poquito dinero&lt;/a&gt;, por ofrecer alojamiento Ruby on Rails y también por sus caidas puntuales que te dejan offline durante varias horas en un fin de semana :P&lt;/p&gt;

&lt;p&gt;Ahora Dreamhost se conocerá también por ser una compañía que cumple con normativas de reciclado y energías renovables. Tras calcular que con sus más de 1.300 servidores, transportes de empleados, papel de impresora, etc., etc., generaban 2.725 toneladas de CO2 al año, han tomado cartas en el asunto y se han apuntado al carro de las energías renovables.&lt;/p&gt;

&lt;p&gt;Más información &lt;a href=&quot;http://blog.dreamhost.com/2007/04/20/were-green/&quot;&gt;en su blog&lt;/a&gt; y &lt;a href=&quot;http://www.dreamhost.com/aboutus-green.html&quot;&gt;en su web&lt;/a&gt;. Ah, y si pulsas el banner en mi menú lateral verás que yo también soy ecológico pq me alojo en Dreamhost. :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Clap Your Hands Say Rails</title>
   <link href="http://jaimeiniesta.com/2007/05/02/clap-your-hands-say-rails.html"/>
   <updated>2007-05-02T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/05/02/clap-your-hands-say-rails</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/05/clapyourhands.jpg&quot; title=&quot;Portada del segundo disco de Clap Your Hands Say Yeah&quot; alt=&quot;Portada del segundo disco de Clap Your Hands Say Yeah&quot; align=&quot;right&quot; /&gt;Me parece imposible programar sin escuchar música. Siempre tengo a mano algún disco, unos cascos, un mp3... Música, café, código abierto: buena mezcla.&lt;/p&gt;

&lt;p&gt;Ahora estoy aprendiendo algo más de Ruby mientras veo un concierto de &lt;a href=&quot;http://www.clapyourhandssayyeah.com&quot; title=&quot;Clap Your Hands Say Yeah&quot;&gt;Clap Your Hands Say Yeah&lt;/a&gt; (live at the First Unitarian Church) que bajé de la mula. ¿Hay algún grupo que encaje mejor con Ruby on Rails? ¿Talking Heads, Devo?&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;&lt;em&gt; you look like david bowie
but you've nothing new to show me
start another fire
and watch it slowly die &lt;/em&gt;
&lt;p align=&quot;center&quot;&gt;(&lt;a href=&quot;http://clapyourhandssayyeah.com/mp3/lostAndFound.mp3&quot; title=&quot;Escucha&quot;&gt;Over and over again&lt;/a&gt;)&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Ruby para niños: aquí llega Hackety Hack!</title>
   <link href="http://jaimeiniesta.com/2007/04/26/ruby-para-ninos-aqui-llega-hackety-hack.html"/>
   <updated>2007-04-26T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/04/26/ruby-para-ninos-aqui-llega-hackety-hack</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/04/app-256x256.png&quot; title=&quot;Hackety Hack&quot; alt=&quot;Hackety Hack&quot; align=&quot;right&quot; /&gt;&lt;a href=&quot;http://whytheluckystiff.net&quot; title=&quot;_why the lucky stiff&quot;&gt;_Why the lucky stiff&lt;/a&gt;, el autor de la &lt;a href=&quot;http://poignantguide.net/ruby/&quot; title=&quot;poignant guide to ruby&quot;&gt;guía conmovedora de Ruby&lt;/a&gt;, ha presentado su nuevo proyecto con el que pretende enseñar a programar en Ruby a niños a partir de 12 años...&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://hacketyhack.net&quot;&gt;Hackety Hack&lt;/a&gt; es la nueva mascota que te guía a través de 10 lecciones, desde un programa en el que puedes escribir código Ruby y ejecutarlo directamente.&lt;/p&gt;

&lt;p&gt;Yo ya me he hecho fan de Hackety Hack y sigo sus tutoriales. :) Me parece estupendo el planteamiento... nuestra generación (tengo 34 años ahora) aprendió a programar con BASIC, pero ¿con qué aprenden a programar ahora los niños? ¿Hay un lenguaje mejor que Ruby para comenzar a programar? O, bueno... ¿hay un lenguaje mejor que Ruby, así en general? :D&lt;/p&gt;

&lt;p&gt;Por ahora el programa sólo está disponible para Windows, pero se espera que esté portado en breve para GNU/Linux y Mac OSX. Yo mientras tanto lo ejecuto a través de &lt;a href=&quot;http://fabrice.bellard.free.fr/qemu/&quot;&gt;Qemu&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Full Circle Magazine, nueva revista sobre Ubuntu</title>
   <link href="http://jaimeiniesta.com/2007/04/18/full-circle-magazine-nueva-revista-sobre-ubuntu.html"/>
   <updated>2007-04-18T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/04/18/full-circle-magazine-nueva-revista-sobre-ubuntu</id>
   <content type="html">&lt;p&gt;Atención ubunteros! Nueva revista electrónica dedicada al mundo Ubuntu:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.fullcirclemagazine.org&quot;&gt;www.fullcirclemagazine.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En el número de lanzamiento, de poquitas páginas, hacen un repaso de la historia de &lt;a href=&quot;http://www.ubuntu.com&quot;&gt;Ubuntu GNU/Linux&lt;/a&gt; (3 añitos tiene ya!) y las novedades de la nueva versión &lt;a href=&quot;http://www.ubuntu.com/news/ubuntu704&quot;&gt;7.04 Feisty Fawn&lt;/a&gt; que sale mañana: detección de redes wifi mejorada, instalación de codecs multimedia propietarios más sencilla, herramienta de migración desde windows, efectos compiz/beryl...&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/uploads/2007/04/fcm-issue0.pdf&quot; title=&quot;Full Circle Magazine Issue 0&quot;&gt;Full Circle Magazine Issue 0&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Limpiando los datos</title>
   <link href="http://jaimeiniesta.com/2007/04/11/limpiando-los-datos.html"/>
   <updated>2007-04-11T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/04/11/limpiando-los-datos</id>
   <content type="html">&lt;p&gt;38.000 valores históricos de PageRank eran demasiados para las 3.000 URLs y pico que almacena &lt;a href=&quot;http://www.pagerankalert.com&quot;&gt;PageRankAlert.com&lt;/a&gt;... era hora de hacer limpieza de datos y ahora la aplicación va a simplificar el historial de PageRank de las páginas.&lt;/p&gt;

&lt;p&gt;El primer patrón basura que he detectado es del tipo x,0,x ... o sea, por ejemplo una web con PR 5 cae a PR 0 y al día siguiente vuelve a subir a donde estaba, PR 5... A veces este patrón es del tipo x,-1,x. Considero estos casos como fallos al consultar el PR, así que los simplificamos y una serie de tipo x,0,x,0,x,y... se quedará simplemente en x,y.&lt;/p&gt;

&lt;p&gt;Por ahora parece que va quedando bien. Veamos el antes y el después del &lt;a href=&quot;http://www.pagerankalert.com/principal/show/1559&quot;&gt;historial de www.jaimeiniesta.com&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Antes:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/uploads/2007/04/gruff-antes.png&quot; title=&quot;Antes&quot;&gt;&lt;img src=&quot;/uploads/2007/04/gruff-antes.png&quot; title=&quot;Antes&quot; alt=&quot;Antes&quot; height=&quot;240&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Después:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/uploads/2007/04/gruff-despues.png&quot; title=&quot;Después&quot;&gt;&lt;img src=&quot;/uploads/2007/04/gruff-despues.png&quot; title=&quot;Después&quot; alt=&quot;Después&quot; height=&quot;240&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PageRankAlert.com beta 6</title>
   <link href="http://jaimeiniesta.com/2007/04/10/pagerankalertcom-beta-6.html"/>
   <updated>2007-04-10T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/04/10/pagerankalertcom-beta-6</id>
   <content type="html">&lt;p&gt;He actualizado &lt;a href=&quot;http://www.pagerankalert.com&quot;&gt;PageRankAlert.com&lt;/a&gt; a la beta 6, para dar una solución rápida al &lt;a href=&quot;http://www.jaimeiniesta.com/2007/04/09/pagerankalert-baneado/&quot;&gt;tema del baneo&lt;/a&gt; por parte de Google.&lt;/p&gt;

&lt;p&gt;Parece que efectivamente, a Google no le ha gustado que un sistema automatizado le realizara consultas... Era demasiado obvio, al hacerlas mediante una tarea programada con cron que se ejecutaba cada minuto durante las 24 horas, constantemente... o quizá por permitir que los usuarios añadieran hasta 100 URLs de una sola vez.&lt;/p&gt;

&lt;p&gt;Para solucionar el tema, ya que a mi servidor no se le permite realizar consultas de PageRank, he descentralizado la parte de la aplicación que realiza estas consultas. Ahora la aplicación del servidor mantiene la lista de páginas, el historial de PageRank, los usuarios, etc., pero las consultas a Google las hago desde mi portátil, a través de un script ruby que le consulta a PageRankAlert.com cuál es la siguiente página en cola de actualización, posteriormente le consulta a Google el PageRank (desde mi portátil, no desde el servidor), y le devuelve el valor a PageRankAlert.com.&lt;/p&gt;

&lt;p&gt;Para no tropezar dos veces con la misma piedra, ahora las actualizaciones se harán más pausadamente, a un ritmo aleatorio respetuoso con Google, y sólo durante el horario en el que mi máquina está encendida.&lt;/p&gt;

&lt;p&gt;Por otro lado, cuando los usuarios añaden una nueva página a la aplicación, el PR de ésta no se puede conocer sino que se pone en cola, con un valor de -2. Las páginas en cola son las que tienen prioridad en la actualización que hago desde mi portátil, así que en pocos minutos se actualizarán.&lt;/p&gt;

&lt;p&gt;Me motiva esta idea de la descentralización del trabajo, me plantea nuevas posibilidades como convertir esta aplicación en un sistema alimentado por colaboradores que trabajen en modo satélite, pidiendo las URLs en cola de actualización al servidor y enviando los resultados. Esto plantea dificultades como la de fiarse o no de los datos enviados por terceros... se podría solucionar haciendo un tratamiento estadístico y aceptando únicamente los valores que la mayoría envíe... mmm...&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PageRankAlert... baneado?</title>
   <link href="http://jaimeiniesta.com/2007/04/09/pagerankalert-baneado.html"/>
   <updated>2007-04-09T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/04/09/pagerankalert-baneado</id>
   <content type="html">&lt;p&gt;Ooops... me parece que Google se ha enfadado un poquito con mi aplicación PageRankAlert.com, que comprueba los cambios en el PageRank de las páginas, ya que desde el día 4 de abril no hace más que devolverme cero patatero cuando le consulto el PR a toolbarqueries.google.com...&lt;/p&gt;

&lt;p&gt;Si, tiene toda la pinta de que no le ha gustado que un sistema automático le preguntara unas 3.000 veces al día (ese es el número aproximado de URLs que mantiene actualmente mi aplicación), y ha decidido ignorar la IP de mi servidor...&lt;/p&gt;

&lt;p&gt;No me extraña, la verdad. Debería haber tenido más cuidado, no haber pretendido mantener actualizadas tantas URLs.&lt;/p&gt;

&lt;p&gt;Por el momento he paralizado la actualización de PageRanks, para ver si Google me perdona tras unos días de inactividad. Mientras tanto, modificaré la aplicación para que a partir de ahora haga pocas consultas, intentando mantener actualizadas sólo las URLs que estén asociadas a usuarios, y seguramente a un ritmo semanal, no diario como antes...&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PageRank calmness</title>
   <link href="http://jaimeiniesta.com/2007/04/03/pagerank-calmness.html"/>
   <updated>2007-04-03T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/04/03/pagerank-calmness</id>
   <content type="html">&lt;p&gt;Ahora que la base de datos de &lt;a href=&quot;http://www.pagerankalert.com&quot;&gt;PageRankAlert.com&lt;/a&gt; almacena &lt;strong&gt;34624&lt;/strong&gt; cambios de PageRank para &lt;strong&gt;3019&lt;/strong&gt; URLs (y subiendo!), he comenzado a explotar estos datos para ver qué cosas interesantes podemos deducir.&lt;/p&gt;

&lt;p&gt;Para empezar, he comenzando inventandome una medida, a la que me ha dado por llamar &lt;em&gt;&lt;strong&gt;PageRank Calmness&lt;/strong&gt;&lt;/em&gt;, o sea, la calma que ofrece una página dada en su variación de PageRank.&lt;/p&gt;

&lt;p&gt;Esta medida es un valor porcentual, que indica el número de días en los que su PageRank no ha cambiado, desde que la rastrea mi aplicación. Así, por ejemplo, &lt;a href=&quot;http://www.pagerankalert.com/principal/show/103&quot; aiotitle=&quot;Google.com tiene un PageRank calmness del 100%&quot;&gt;Google.com tiene un PageRank calmness del 100%&lt;/a&gt; porque no se ha movido de su PR 10 desde que les conozco. Iguales valores tienen otros gigantes como &lt;a href=&quot;http://www.pagerankalert.com/principal/show/111&quot; aiotitle=&quot;Macromedia.com&quot;&gt;Macromedia.com&lt;/a&gt; o &lt;a href=&quot;http://www.pagerankalert.com/principal/show/432&quot;&gt;Adobe.com&lt;/a&gt;, pero no así &lt;a href=&quot;http://www.pagerankalert.com/principal/show/139&quot;&gt;Ibm.com&lt;/a&gt; que tiene un 93%. &lt;a href=&quot;http://www.pagerankalert.com/principal/show/113&quot;&gt;Railes.net&lt;/a&gt; tiene un 87%, &lt;a href=&quot;http://www.pagerankalert.com/principal/show/1559&quot;&gt;JaimeIniesta.com&lt;/a&gt; un 59% y &lt;a href=&quot;http://www.pagerankalert.com/principal/show/140&quot;&gt;PageRankAlert.com&lt;/a&gt; un 96%, a día de hoy.&lt;/p&gt;

&lt;p&gt;Las URLs recién añadidas al sistema mostrarán una calma del 100% porque acaban de ser creadas, pero lo más normal es que vayan variando a los pocos días. Los nuevos sitios web oscilan mucho, hasta que se estabilizan al cabo de semanas o meses.&lt;/p&gt;

&lt;p&gt;En el cómputo de cambios se tiene en cuenta el tamaño de cada salto de PageRank. Así, por ejemplo, una web que oscile entre un PR de 4 y uno de 5 oscila menos que una que sube y baja del 6 al 0.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PageRankAlert.com beta 5</title>
   <link href="http://jaimeiniesta.com/2007/04/02/pagerankalertcom-beta-5.html"/>
   <updated>2007-04-02T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/04/02/pagerankalertcom-beta-5</id>
   <content type="html">&lt;p&gt;Acabo de publicar la beta de peligrosa rima de &lt;a href=&quot;http://www.pagerankalert.com&quot;&gt;PageRankAlert.com&lt;/a&gt;, mi aplicación Ruby on Rails para rastrear la evolución del valor de Google PageRank en las páginas.&lt;/p&gt;

&lt;p&gt;Esta versión incluye las siguientes novedades:
&lt;ul&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Nueva portada&amp;lt;/strong&amp;gt; en la que se muestra por un lado el top PageRank con las páginas con mayor PageRank, y por otro las últimas páginas añadidas por los usuarias. Ambas con navegación AJAX desde la portada.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Posibilidad de añadir hasta 100 URLs de una sola vez&amp;lt;/strong&amp;gt;. Por petición popular, ahora los usuarios podéis añadir de golpe todas vuestras URLs a la lista de páginas vigiladas, simplemente introduciendo las URLs que te interesan, una en cada línea. Se puede elegir si se desea recibir o no alertas por e-mail para todas ellas.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Activar/desactivar todas las alertas de e-mail&amp;lt;/strong&amp;gt;. En lugar de ir una por una, ahora puedes activar o desactivar todas las alertas de cambio de PageRank por e-mail. Muy útil para cuando te vas de vacaciones! :)&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/ul&gt;
&lt;a href=&quot;/uploads/2007/04/pagerankalert.pdf&quot; title=&quot;PageRankAlert en Sólo Programadores&quot;&gt;PageRankAlert en Sólo Programadores&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Taller sobre expresiones regulares</title>
   <link href="http://jaimeiniesta.com/2007/03/28/taller-sobre-expresiones-regulares.html"/>
   <updated>2007-03-28T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/28/taller-sobre-expresiones-regulares</id>
   <content type="html">&lt;p&gt;El próximo 11 de abril, a las 19:30 en el Aula The Cocktail de Madrid, tendrá lugar un taller sobre &lt;a href=&quot;http://aulathecocktail.pbwiki.com/Taller-de-Expresiones-Regulares&quot;&gt;expresiones regulares&lt;/a&gt;, con ejemplos en JavaScript.&lt;/p&gt;

&lt;p&gt;La asistencia es libre y gratuita pero debido al aforo máximo de 30 personas hay que apuntarse en el wiki.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Internet compartido con Ubuntu, Yoigo y K610i por USB</title>
   <link href="http://jaimeiniesta.com/2007/03/27/internet-compartido-con-ubuntu-yoigo-y-k610i-por-usb.html"/>
   <updated>2007-03-27T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/27/internet-compartido-con-ubuntu-yoigo-y-k610i-por-usb</id>
   <content type="html">&lt;p&gt;Hace unos días me pasé a &lt;a href=&quot;http://www.yoigo.com&quot;&gt;&lt;strong&gt;Yoigo&lt;/strong&gt;&lt;/a&gt;, no sólo por la claridad de sus tarifas (no se si serán o no más baratas pero claras sí que son), sino también por la posibilidad de conectarme a internet desde cualquier lugar usándolo como módem en mi portátil.&lt;/p&gt;

&lt;p&gt;Por falta de tiempo no había llegado a probarlo del todo, pero hoy a Telefónica le ha dado por deleitarme con una sobrecarga en la red así que mi ADSL de Jazztel no funcionaba... la ocasión ideal de configurar el acceso con Yoigo.&lt;/p&gt;

&lt;p&gt;Ahora mismo estoy conectado a través de Yoigo desde mi &lt;strong&gt;Ubuntu&lt;/strong&gt;, y estoy compartiendo la conexión en mi red local para que mi chica pueda conectarse a través de mí con su MacBook... y todo funciona estupendamente. La velocidad no es pasmosa, los tests me dan 150 Kbps de bajada y 50 Kbps de subida, pero el caso es que puedo navegar, leer el correo, usar skype, jabber, msn, ftp, ssh y demás como si tal cosa.&lt;/p&gt;

&lt;p&gt;Las instrucciones para configurar el acceso a internet con Yoigo desde Ubuntu, usando un móvil &lt;strong&gt;Sony Ericsson K610i&lt;/strong&gt; las he sacado de &lt;a href=&quot;http://ortigosano.wordpress.com/2007/02/05/internet-con-ubuntu-y-yoigo/&quot;&gt;Ortigosano&lt;/a&gt;, y las instrucciones para instalar &lt;a href=&quot;http://www.fs-security.com/&quot;&gt;&lt;strong&gt;Firestarter&lt;/strong&gt;&lt;/a&gt; de manera que me ayudara a configurar mis rutas para compartir la conexión del móvil (ppp0) a través de la red local (eth0), de &lt;a href=&quot;http://www.marblestation.com/blog/?p=606&quot;&gt;Marble Station&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Estoy muy contento de que funcione ya mi conexión a internet móvil, sobre todo a este precio de &lt;strong&gt;1,2 €/diario máximo sin límite de transferencia&lt;/strong&gt;! Ahora ya si que puedo irme a trabajar desde otros sitios o incluso mudarme temporalmente a otra ciudad como planeo... Más agilidad para mi vida freelance!&lt;/p&gt;

&lt;p&gt;Para que no se pierda tanta sabiduría, resumo aquí las instrucciones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;* Conexión a Internet con Ubuntu Edgy Eft 6.10,Yoigo y Sony Ericsson K610 conectado por USB&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.- Conecta el móvil por USB.  Cuando el móvil te pregunte, ponlo en &quot;modo teléfono&quot;.&lt;/p&gt;

&lt;p&gt;2.- Créate un fichero en tu directorio de usuario llamado &quot;.wvdialrc&quot;, y copia en él el siguiente código. Son los datos de conexión a Yoigo, por USB y Bluetooth:
&lt;pre lang=&quot;bash&quot;&gt;[Dialer YoigoUSB]
Modem = /dev/ttyACM0
Phone = &lt;em&gt;99&lt;/em&gt;**1#
Username = ''
Password = ''&lt;/p&gt;

&lt;p&gt;[Dialer YoigoBT]
Modem = /dev/rfcomm0
Phone = &lt;em&gt;99&lt;/em&gt;**1#
Username = ''
Password = ''&lt;/pre&gt;
3.- Para conectar, ejecuta desde tu directorio de usuario &quot;sudo wvdial YoigoUSB&quot;. Te saldrá algo como esto:
&lt;pre lang=&quot;bash&quot;&gt;jaime@zimpa:~$ sudo wvdial YoigoUSB
--&amp;gt; WvDial: Internet dialer version 1.56
--&amp;gt; Cannot get information for serial port.
--&amp;gt; Initializing modem.
--&amp;gt; Sending: ATZ
ATZ
OK...&lt;/pre&gt;
4.- ¡Ya estás conectado! Deberías poder navegar ahora, aunque todavía puedes ajustar la conexión un poco. Yo tuve que cambiar el tamaño de MTU, que en mi Ubuntu estaba en 1.500, para dejarlo en 472. Los valores típicos son entre 472 y 1000. Desde el terminal:
&lt;pre lang=&quot;bash&quot;&gt;ip l
sudo ip link set ppp0 mtu 472&lt;/pre&gt;
La primera línea te lista los dispositivos, allí puedes buscar el dispositivo ppp0 que es el módem y ver qué valor tiene de MTU... La segunda línea es la orden para establecer el valor de MTU a 472. A mi me ha ido bien, pero experimenta un poco...&lt;/p&gt;

&lt;p&gt;5.- Para colgar... Control+C en el terminal del dialer para abortarlo, se cerrará limpiamente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;* Compartir la conexión a Internet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Básicamente la cosa se resume en instalar firestarter (&lt;em&gt;sudo aptitude install firestarter&lt;/em&gt;), que es un programa con entorno gráfico que te ayudará a configurar el ordenador para poder compartir la conexión que tienes a internet desde ppp0, a través de otro interfaz de red, por ejemplo la red local en eth0 como es mi caso. No tiene mucha pérdida al ser un programa gráfico... aunque si sabes de redes quizá te manejes mejor desde el terminal.&lt;/p&gt;

&lt;p&gt;Una vez compartida la conexión, otros ordenadores en tu red local podrán usarte como gateway para salir. Por ejemplo, para configurar tanto un MacBook como un Windows XIP en mi red lo único que tuve que hacer es en las propiedades de red suyas, poner mi IP como gateway, y los DNS de Yoigo (10.8.0.20 y 10.8.0.21)... y a correr.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Los clientes piden código abierto</title>
   <link href="http://jaimeiniesta.com/2007/03/26/los-clientes-piden-codigo-abierto.html"/>
   <updated>2007-03-26T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/26/los-clientes-piden-codigo-abierto</id>
   <content type="html">&lt;p&gt;Desde que me dedico como freelance a desarrollar aplicaciones web usando software libre, me fijo en la predisposición de los clientes a trabajar con soluciones de código abierto. Hasta ahora, la norma ha sido encontrarme con que los clientes dejen la decisión sobre la tecnología a emplear al desarrollador, vamos, que les da igual el entorno que uses, prácticamente su criterio es el económico.&lt;/p&gt;

&lt;p&gt;Esto ha ido cambiando progresivamente, y ahora la norma es que sea el propio cliente quien solicite que su proyecto se realice empleando software libre. La semana pasada, por ejemplo, fué el propio cliente quien tras explicarme la funcionalidad deseada para su aplicación, añadió la sugerencia de intentar resolverlo usando &lt;a href=&quot;http://www.joomla.org&quot; title=&quot;Joomla CMS&quot;&gt;Joomla&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;La razón no fué que el desarrollo fuera (o no) más barato que con un desarrollo a medida, ni que se tratara de software libre, sino que al ser de código abierto, se trataba de un &lt;strong&gt;estándar&lt;/strong&gt;. Hablando claro: si yo le hacía un desarrollo a medida, a partir de entonces dependería de mí para los cambios futuros ya que aunque yo le entregara el código fuente y documentación, es más difícil (y caro) localizar a un programador que quiera meterle mano a códigos de terceros.&lt;/p&gt;

&lt;p&gt;En cambio, si el desarrollo se basa en Joomla, un paquete de código abierto muy extendido, sería más sencillo encontrar a programadores para realizar cambios posteriores en la aplicación, si por la razón que fuera ya no le interesaba seguir trabajando conmigo, o a mi no me interesaba trabajar con ellos.&lt;/p&gt;

&lt;p&gt;Un argumento de peso, a añadir a la lista de buenas razones para usar software libre.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>La BSA promueve el Software Libre</title>
   <link href="http://jaimeiniesta.com/2007/03/26/la-bsa-promueve-el-software-libre.html"/>
   <updated>2007-03-26T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/26/la-bsa-promueve-el-software-libre</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/03/nml_ball.jpg&quot; title=&quot;Ernie Ball&quot; alt=&quot;Ernie Ball&quot; align=&quot;right&quot; /&gt;Leo a través del &lt;a href=&quot;http://libroblanco.com/joomla/index.php?option=com_content&amp;amp;amp;task=view&amp;amp;amp;id=574&amp;amp;amp;Itemid=92&quot;&gt;Libro Blanco del Software Libre&lt;/a&gt; una &lt;a href=&quot;http://news.com.com/2008-1082_3-5065859.html&quot;&gt;escalofriante historia&lt;/a&gt; de cómo la BSA ha castigado al fabricante de cuerdas de guitarra &lt;a href=&quot;http://www.ernieball.com/&quot;&gt;Ernie Ball&lt;/a&gt; por tener instalado software de Microsoft sin licencia.&lt;/p&gt;

&lt;p&gt;Por lo visto se trataba de ordenadores antiguos reciclados. Ernie se debía haber encargado de formatear el disco duro e instalarlo todo con licencia, pero no lo hizo, le tocó una auditoría, que determinó que el 8% de sus equipos incumplía licencias, y se tradujo en un multazo de 65.000 $, más los costes de los abogados, otros 35.000 $.&lt;/p&gt;

&lt;p&gt;La parte alegre de esta historia es que esto le ha servido a Ernie para darse cuenta de que para que sus empleados usaran paquetes ofimáticos y correo electrónico, no necesitaban atarse con licencias privativas. El cabreo de pagar semejanete multa le ha servido para pasarse a GNU/Linux en todos sus equipos, y convertirse en férreo defensor del software libre, ahora que ve que no tiene virus, licencias ni multas, y que es igual de productivo que antes.&lt;/p&gt;

&lt;p&gt;Si es que hay gente que no aprende más que a golpes. Pero bueno, más vale tarde que nunca. Ahora Ernie es otro feliz empresario que se ha pasado al software libre y va cantando la buena nueva.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Taller sobre APIs en The Cocktail</title>
   <link href="http://jaimeiniesta.com/2007/03/23/taller-sobre-apis-en-the-cocktail.html"/>
   <updated>2007-03-23T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/23/taller-sobre-apis-en-the-cocktail</id>
   <content type="html">&lt;p&gt;El próximo miércoles 28 de marzo hay un taller sobre las APIs de Google Maps, Flickr, MyStrands, Last.fm y MusicBrainz.&lt;/p&gt;

&lt;p&gt;A las 19:30 en &lt;a href=&quot;http://11870.com/pro/17511&quot;&gt;The Cocktail&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://aulathecocktail.pbwiki.com/Taller-APIs&quot; title=&quot;Aula The Coktail&quot;&gt;Te puedes apuntar desde este wiki&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>LAECAP (Ley de Acceso Electrónico de los Ciudadanos a las Administraciones Públicas)</title>
   <link href="http://jaimeiniesta.com/2007/03/22/laecap-ley-de-acceso-electronico-de-los-ciudadanos-a-las-administraciones-publicas.html"/>
   <updated>2007-03-22T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/22/laecap-ley-de-acceso-electronico-de-los-ciudadanos-a-las-administraciones-publicas</id>
   <content type="html">&lt;p&gt;¿Crees que la Administración debería emplear sólo estándares abiertos para comunicarse con los ciudadanos? ¿Te interesa que la Administración libere el software que desarrolle? Entonces te interesa leer y difundir esto:&lt;/p&gt;

&lt;p&gt;Estamos haciendo un último esfuerzo para intentar que se acepten las enmiendas que hace Hispalinux y casi todos los partidos representados en
el congreso de los diputados en la &lt;strong&gt;LAECAP&lt;/strong&gt; (Ley de Acceso Electrónico de los Ciudadanos a las Administraciones Públicas) para que básicamente &lt;strong&gt;la
administración sólo use estandares abiertos y libre de regalías para comunicarse con la ciudadanía y además libere en un repositorio público y sin restricciones de uso toda la tecnología que va a desarrollar&lt;/strong&gt; para implementar LAECAP.&lt;/p&gt;

&lt;p&gt;¿Nos puedes echar una mano para difundirlo? blogueándolo, enviándolo a la prensa, a otros bloggers, a los responsables relacionados con la LAECAP que conozcas, etc...&lt;/p&gt;

&lt;p&gt;Un millón de gracias.&lt;/p&gt;

&lt;p&gt;Más información: &lt;a href=&quot;http://www.hispalinux.es/node/616&quot;&gt;http://www.hispalinux.es/node/616&lt;/a&gt;
Leído a través del blog de &lt;a href=&quot;http://www.lacoctelera.com/tomaslucas/post/2007/03/22/laecap-ley-acceso-electronico-los-ciudadanos-las&quot;&gt;Tomás Lucas&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Fiesta de lanzamiento de la nueva Coctelera</title>
   <link href="http://jaimeiniesta.com/2007/03/22/fiesta-de-lanzamiento-de-la-nueva-coctelera.html"/>
   <updated>2007-03-22T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/22/fiesta-de-lanzamiento-de-la-nueva-coctelera</id>
   <content type="html">&lt;p&gt;Hoy jueves 22 de marzo, la gente de &lt;a href=&quot;http://www.the-cocktail.com&quot; title=&quot;the cocktail&quot;&gt;The Cocktail&lt;/a&gt; va a celebrar la nueva versión de su portal de blogs &lt;a href=&quot;http://www.lacoctelera.com/&quot; title=&quot;la coctelera&quot;&gt;La Coctelera&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Con más de 54.000 blogs, casi medio millón de historias y más de un millón de comentarios, La Coctelera es todo un buque insignia que demuestra la potencia de Ruby on Rails.&lt;/p&gt;

&lt;p&gt;Los datos de la fiesta están &lt;a href=&quot;http://www.lacoctelera.com/fiesta&quot; title=&quot;Fiesta coctelera&quot;&gt;en esta página&lt;/a&gt;... ¿Nos vemos por allí?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Vídeos de la Conferencia Rails 2006</title>
   <link href="http://jaimeiniesta.com/2007/03/21/videos-de-la-conferencia-rails-2006.html"/>
   <updated>2007-03-21T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/21/videos-de-la-conferencia-rails-2006</id>
   <content type="html">&lt;p&gt;Ya están aquí los vídeos de las ponencias en la Conferencia Rails 2006:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://2006.conferenciarails.org&quot;&gt;http://2006.conferenciarails.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Los podéis ver en streaming desde la web, así como bajarlos en diferentes formatos. Hemos creado también un archivo gordote (423 Mb) con los 10 vídeos, lo podeis localizar buscando en la mula.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Highrise, el CRM RoR de 37signals, ya está aquí</title>
   <link href="http://jaimeiniesta.com/2007/03/21/highrise-el-crm-ror-de-37signals-ya-esta-aqui.html"/>
   <updated>2007-03-21T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/21/highrise-el-crm-ror-de-37signals-ya-esta-aqui</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;/uploads/2007/03/homeshot-dashboard.png&quot; title=&quot;Highrise&quot;&gt;&lt;img src=&quot;/uploads/2007/03/homeshot-dashboard.thumbnail.png&quot; title=&quot;Highrise&quot; alt=&quot;Highrise&quot; align=&quot;right&quot; /&gt;&lt;/a&gt;Ayer recibí un e-mail de &lt;a href=&quot;http://37signals.com&quot; title=&quot;37signals&quot;&gt;37signals&lt;/a&gt; anunciando el lanzamiento de su nuevo servicio, &lt;a href=&quot;http://www.highrisehq.com&quot; title=&quot;Highrise HQ&quot;&gt;Highrise&lt;/a&gt;. Se trata de una aplicación web que nos permite almacenar nuestros contactos, organizados por empresas o individuos, con todos sus detalles, tomar notas sobre ellos, agruparlos por &quot;casos&quot; o proyectos, y establecer una lista de tareas a realizar.&lt;/p&gt;

&lt;p&gt;La idea no es novedosa, ya existen muchas aplicaciones de CRM como &lt;a href=&quot;http://www.sugarcrm.com&quot; title=&quot;SugarCRM&quot;&gt;SugarCRM&lt;/a&gt;, pero seguramente ninguna tan sencilla como ésta, en la línea del resto de productos de 37signals.&lt;/p&gt;

&lt;p&gt;Para apuntarse bastan 30 segundos y los precios varían desde una cuenta gratuita con funcionalidad limitada a la más elevada de $149/mes.&lt;/p&gt;

&lt;p&gt;¿Potenciará esto la aparición de nuevos CRM de código abierto, como sucedió con el clon de &lt;a href=&quot;http://basecamphq.com&quot; title=&quot;Basecamp&quot;&gt;Basecamp&lt;/a&gt;, &lt;a href=&quot;http://www.activecollab.com&quot; title=&quot;ActiveCollab&quot;&gt;ActiveCollab&lt;/a&gt;?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>KFLink es ahora Cafelink</title>
   <link href="http://jaimeiniesta.com/2007/03/20/kflink-es-ahora-cafelink.html"/>
   <updated>2007-03-20T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/20/kflink-es-ahora-cafelink</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/uploads/2007/03/cafelink.gif&quot; title=&quot;Cafelink&quot; alt=&quot;Cafelink&quot; align=&quot;right&quot; /&gt;KFLink, una de las empresas que participó en la organización de la Conferencia Rails 2006, ha cambiado recientemente de nombre y de paso han actualizado su web.&lt;/p&gt;

&lt;p&gt;Ahora se llaman &lt;strong&gt;Cafelink&lt;/strong&gt; y su nueva web es &lt;a href=&quot;http://www.cafelink.es&quot; title=&quot;Cafelink&quot;&gt;www.cafelink.es&lt;/a&gt;. Si os dais una vuelta por su nuevo sitio descubriréis todo lo que son capaces de hacer estos chicos si les dejas un teclado cerca, desde Rails hasta vídeos musicales...&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>HTMLEntities 4.0.0 y el lado humano del software libre</title>
   <link href="http://jaimeiniesta.com/2007/03/16/htmlentities-400-y-el-lado-humano-del-software-libre.html"/>
   <updated>2007-03-16T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/16/htmlentities-400-y-el-lado-humano-del-software-libre</id>
   <content type="html">&lt;p&gt;Una de las cosas que más me gustan del software libre es que es fácil identificar y contactar a las personas que lo han creado. Por ejemplo, ayer pedía ayuda en la &lt;a href=&quot;https://listas.escomposlinux.org/mailman/listinfo/rubies&quot; title=&quot;lista de correo de Ruby en español&quot;&gt;lista de Rubíes&lt;/a&gt; para encontrar una manera fácil de sustituir los caracteres especiales (tildes, eñes, letras griegas...) por las entidades HTML correspondientes. Al poco me contestaron dos personas de la lista, y me recomendaron el uso de la gema &lt;a href=&quot;http://htmlentities.rubyforge.org/&quot; title=&quot;gema htmlentities&quot;&gt;HTMLEntities&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Tras probar esta gema ví que resolvía parte de mis necesidades, ya que reemplazaba caracteres como tildes y eñes, pero no procesaba letras griegas. Vaya! Me hacía falta esto para tratar con un proyecto de sustancias químicas...&lt;/p&gt;

&lt;p&gt;Gracias a que esta gema está publicada con una licencia libre, de código abierto, pude inspeccionar el código fuente para ver cómo funcionaba, y se me ocurrió cómo añadir soporte para letras griegas a este software. Contacté con el autor, &lt;a href=&quot;http://po-ru.com/&quot; title=&quot;El blog de Paul&quot;&gt;Paul Buttley&lt;/a&gt;, a través de correo electrónico para ofrecerle mi ayuda, y al rato me contestó para agradecerme la oferta, pero me dijo que no hacía falta porque estaba a puntito de publicar la nueva versión de su gema, y que ésta incluía soporte para más caracteres, incluyendo los griegos.... Me dió acceso a los nuevos códigos fuente y pude probarlos, y usar la nueva versión de la gema para finalizar el procesado de esas 100.000 sustancias químicas que me desafiaban hablando en griego :) .&lt;/p&gt;

&lt;p&gt;Al día siguiente Paul publicó su nueva versión, la 4.0.0, y este es el anuncio de las nuevas características:
&lt;blockquote&gt; This update has many requested improvements and fixes:
&lt;ul&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;Now understands all the entities referred to in the XHTML 1.0 DTD&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;(253 entities compared with 131 in version 3.0.1).&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Calls to_s on parameters to play nicely with Rails 1.2.1.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Entity mapping data is now lazily loaded.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;New instantiation-based interface (but legacy interface is preserved for compatibility).&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Handles HTML4 as well as XHTML1 (the former lacks the ' entity).&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Encodes basic entities numerically when :basic isn't specified and :decimal or :hexadecimal is.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Performs a maximum of two gsub passes instead of three when encoding, which should be more efficient on long strings.&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/ul&gt;
&lt;/blockquote&gt;
En fin... Que cómo mola todo y qué buen rollo nos traemos, qué risas nos echamos y todo eso. De programador a programador, cara a cara, y tiro porque me toca.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Importar XLS desde Rails</title>
   <link href="http://jaimeiniesta.com/2007/03/15/importar-xls-desde-rails.html"/>
   <updated>2007-03-15T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/15/importar-xls-desde-rails</id>
   <content type="html">&lt;p&gt;Siguiendo con esta serie de tutoriales en la semana de la amistad entre Excel y Rails :) , vamos a ver ahora cómo podemos leer un archivo Excel desde una aplicación Ruby on Rails.&lt;/p&gt;

&lt;p&gt;Para ello necesitamos la gema &quot;parseexcel&quot;, que podemos instalar mediante gem:
&lt;pre lang=&quot;bash&quot;&gt;jaime@zimpa:~$ sudo gem install parseexcel
Password:
Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed parseexcel-0.5.1.1&lt;/pre&gt;
A continuación, veremos un ejemplo de cómo abrir un fichero Excel que se llama &quot;datos.xls&quot; y está en el directorio &quot;/public/xls&quot;, coger la primera hoja y mostrarlo como una tabla HTML. En primer lugar, el controlador:
&lt;pre lang=&quot;ruby&quot;&gt;class ExportadorController &amp;lt; ApplicationController
  require 'parseexcel'
  include Spreadsheet
  def parse_xls&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Prueba de leer un archivo Excel
workbook = Spreadsheet::ParseExcel.parse(&quot;#{RAILS_ROOT}/public/xls/datos.xls&quot;)
# Cogemos la primera hoja
@worksheet = workbook.worksheet(0)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;  end
end&lt;/pre&gt;
Y en segundo lugar la vista, que recorre la hoja por filas y columnas y lo muestra en forma de tabla HTML:
&lt;pre lang=&quot;ruby&quot;&gt;&lt;table border=&quot;1&quot;&gt;&amp;lt;% for f in @worksheet %&amp;gt;
&lt;tbody&gt;
&lt;tr&gt;&amp;lt;% for c in f %&amp;gt;
&lt;td&gt;&amp;lt;%= c.to_s %&amp;gt;&lt;/td&gt;
&amp;lt;% end %&amp;gt;&lt;/tr&gt;
&amp;lt;% end %&amp;gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/pre&gt;
Eso es todo amigos... Otro día podemos pensar en cómo haríamos para modificar un archivo Excel desde una aplicación Ruby on Rails... parece que la solución pasará por conjuntar las dos gemas, una para leer (parseexcel) y otra para generar (spreadsheet-excel).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Exportar a XLS desde Rails</title>
   <link href="http://jaimeiniesta.com/2007/03/14/exportar-a-xls-desde-rails.html"/>
   <updated>2007-03-14T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/14/exportar-a-xls-desde-rails</id>
   <content type="html">&lt;p&gt;Hace unos días veíamos &lt;a href=&quot;http://www.jaimeiniesta.com/2007/03/08/exportar-a-csv-desde-rails/&quot; title=&quot;CSV desde Rails&quot;&gt;cómo exportar datos de una aplicación Ruby on Rails en formato CSV&lt;/a&gt;, y hoy vamos a ver cómo hacer para generar directamente un archivo de Excel. Una de las ventajas que tiene el formato XLS sobre CSV es la posibilidad de incluir varias hojas dentro de un mismo archivo.&lt;/p&gt;

&lt;p&gt;En primer lugar, necesitaremos instalar la gema &lt;a href=&quot;http://rubyforge.org/projects/spreadsheet&quot; title=&quot;spreadsheet-excel&quot;&gt;spreadsheet-excel&lt;/a&gt;. Aunque actualmente está en versión pre-alpha, a mí me ha funcionado estupendamente. Para ello la instalaremos usando gem, en mi caso desde Ubuntu GNU/Linux:
&lt;pre lang=&quot;bash&quot;&gt;jaime@zimpa:~$ sudo gem install spreadsheet-excel
Password:
Need to update 6 gems from http://gems.rubyforge.org
......
complete
Successfully installed spreadsheet-excel-0.3.5.1
Installing ri documentation for spreadsheet-excel-0.3.5.1...
Installing RDoc documentation for spreadsheet-excel-0.3.5.1...&lt;/pre&gt;
Una vez disponible esta gema en nuestro sistema ya podemos usarla desde nuestro controlador:
&lt;pre lang=&quot;ruby&quot;&gt;class ExportadorController &amp;lt; ApplicationController
  require 'spreadsheet/excel'
  include Spreadsheet
  def xls&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Creamos un nuevo archivo Excel en disco
workbook = Excel.new(&quot;#{RAILS_ROOT}/public/xls/datos.xls&quot;)
# Añadimos hoja EMPRESAS
hoja_empresas = workbook.add_worksheet(&quot;Empresas&quot;)
# Fila de cabecera
@cabecera = %w(id nombre localidad provincia)
columna = 0
@cabecera.each do |cab|
  hoja_empresas.write(0,columna,cab)
  columna += 1
end
# Una fila para cada empresa
@empresas = Empresa.find(:all)
fila = 1
for e in @empresas
  # Añado la fila con los datos en sus respectivas columnas
  hoja_empresas.write(fila,0,e.id)
  hoja_empresas.write(fila,1,e.nombre)
  hoja_empresas.write(fila,2,e.localidad)
  hoja_empresas.write(fila,3,e.provincia)
  # Pasamos a la siguiente empresa en una nueva fila
  fila += 1
end
# Añadimos hoja PRODUCTOS
hoja_productos = workbook.add_worksheet(&quot;Productos&quot;)
hoja_productos.write(0,0,&quot;Datos de los productos...&quot;)
# Cerramos el libro
workbook.close
# Enviamos el fichero al navegador
send_file &quot;#{RAILS_ROOT}/public/xls/datos.xls&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;  end
end&lt;/pre&gt;
En este ejemplo, hemos creado un archivo Excel (workbook) con dos hojas (worksheets), una con los datos de las empresas y otra para los productos (con un par de frases). El archivo se guardará en /public/xls y después se enviará al navegador con send_file.&lt;/p&gt;

&lt;p&gt;Un tema importante a tener en cuenta es la codificación de caracteres. Si nuestros datos contienen tildes, eñes, etc., tenemos que asegurarnos de convertirlos a la hora de incorporarlos al Excel, para que se vean correctamente. Haremos esto con &lt;a href=&quot;http://www.ruby-doc.org/stdlib/libdoc/iconv/rdoc/index.html&quot;&gt;iconv&lt;/a&gt;, por ejemplo, en lugar de almacenar directamente el nombre, podemos hacerlo convirtiendo a otra codificación así:
&lt;pre lang=&quot;ruby&quot;&gt;# En lugar de...&lt;/p&gt;

&lt;h1&gt;hoja_empresas.write(fila,1,e.nombre)&lt;/h1&gt;

&lt;h1&gt;...usaremos...&lt;/h1&gt;

&lt;p&gt;hoja_empresas.write(fila,1,Iconv.conv(&quot;ISO-8859-1&quot;,&quot;UTF-8&quot;, e.nombre))&lt;/pre&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Especificaciones compartidas, prototipado rápido</title>
   <link href="http://jaimeiniesta.com/2007/03/13/especificaciones-compartidas-prototipado-rapido.html"/>
   <updated>2007-03-13T00:00:00-07:00</updated>
   <id>http://jaimeiniesta.com//2007/03/13/especificaciones-compartidas-prototipado-rapido</id>
   <content type="html">&lt;p&gt;Desde que trabajo con Ruby on Rails como freelance, mi trato con los clientes ha cambiado radicalmente, respecto a la manera de trabajar &quot;a la antigua&quot; que tenía en las empresas donde estuve anteriormente.&lt;/p&gt;

&lt;p&gt;Antes, se trataba a toda costa de blindarse contra el cliente. El cliente era el enemigo, malo, tonto y perverso por naturaleza, así que la idea era protegerse contra él. Las principales armas eran dos, la primera redactar un contrato especificando lo más en detalle posible el alcance de la aplicación a desarrollar; la segunda, el secretismo hasta el final: no enseñar nada del desarrollo hasta que se llegue a la fecha acordada, no sea que comiencen a opinar y nos cambien algo.&lt;/p&gt;

&lt;p&gt;Estas dos armas siempre se demostraron inútiles y engorrosas, y más que facilitarnos la vida, nos la complicaban. Que el cliente nunca sabe lo que quiere es una verdad como un templo, y para comprobarla basta con ponernos en su lugar.&lt;/p&gt;

&lt;p&gt;Afortunadamente, han llegado nuevos tiempos y sabemos que hay mejores maneras de hacer las cosas, que nos harán a todos mucho más agradecido nuestro trabajo.&lt;/p&gt;

&lt;p&gt;Una vez asumido que el cliente no es el enemigo, hemos de integrarlo en el proyecto. Demos por hecho que no sabe lo que quiere, así que trabajemos con él para definirlo. Nuestras nuevas dos armas serán dos: especificaciones compartidas, y prototipado rápido.&lt;/p&gt;

&lt;p&gt;Una buena manera de trabajar en especificaciones compartidas es usar &lt;a href=&quot;http://docs.google.com/&quot; title=&quot;Google Docs&quot;&gt;Google Docs&lt;/a&gt; para redactar un documento en común donde apuntaremos los objetivos del proyecto. Google Docs nos permite compartir un documento a través de un procesador de textos común, donde todos los interesados pueden editar, y tendremos un historial de revisiones del documento, al que podemos recurrir en cualquier momento para ver los cambios.&lt;/p&gt;

&lt;p&gt;Como complemento, recordando que una imagen vale más que mil palabras, y un interfaz no digamos, haremos uso de Rails para desarrollar un prototipo rápido, con las ideas básicas de la aplicación, y lo tomaremos de referencia para concretar con el cliente lo que quiere, dándole acceso desde el principio, incluso antes de haber terminado de redactar las especificaciones.&lt;/p&gt;

&lt;p&gt;A mí me funciona de maravilla... ¿Y a vosotros?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Exportar a CSV desde Rails</title>
   <link href="http://jaimeiniesta.com/2007/03/08/exportar-a-csv-desde-rails.html"/>
   <updated>2007-03-08T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2007/03/08/exportar-a-csv-desde-rails</id>
   <content type="html">&lt;p&gt;En una de las aplicaciones Rails en las que estoy trabajando actualmente, el cliente necesita poder exportar datos como un archivo que pueda abrir con una hoja de cálculo. Una manera muy sencilla de hacer esto es emplear el formato de manejo de CSV desde Ruby.&lt;/p&gt;

&lt;p&gt;Podemos encontrar ejemplos de esto en el libro &lt;a href=&quot;http://www.pragmaticprogrammer.com/titles/fr_rr/&quot;&gt;Rails Recipes&lt;/a&gt; de &lt;a href=&quot;http://www.chadfowler.com/&quot;&gt;Chad Fowler&lt;/a&gt;, o &lt;a href=&quot;http://blog.teksol.info/articles/2006/03/23/returning-csv-data-to-the-browser&quot;&gt;en la web&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Examinemos un ejemplo. Aquí tenemos un controlador &quot;Exportador&quot; con una acción &quot;empresas&quot; que devuelve todas las empresas como CSV, con los valores separados por comas.&lt;/p&gt;

&lt;pre lang=&quot;ruby&quot;&gt;
class ExportadorController &lt; ApplicationController
  require 'csv'
  def empresas
    # Nos traemos todas las empresas y montamos el CSV
    @empresas = Empresa.find(:all)
    report = StringIO.new
    CSV::Writer.generate(report, ',') do |csv|
      csv &lt;&lt; %w(id nombre localidad provincia)
      @empresas.each do |e|
        csv &lt;&lt; [e.id, e.nombre, e.localidad, e.provincia]
      end
    end
    # Enviamos los datos al navegador
    report.rewind
    send_data(report.read,
      :type =&gt; 'text/csv',
      :filename =&gt; 'empresas.csv')
  end
end
&lt;/pre&gt;


&lt;p&gt;Fíjate en que hace falta la línea &lt;strong&gt;require 'csv'&lt;/strong&gt; para hacer uso de este módulo. Como opción podrías especificar otro caracter de separación de columnas, por ejemplo si quisieras emplear la barra vertical, lo harías así:&lt;/p&gt;

&lt;pre lang=&quot;ruby&quot;&gt;
    CSV::Writer.generate(report, '|') do |csv|
&lt;/pre&gt;


&lt;p&gt;Sencillo, ¿no? :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Procesar XML desde Ruby</title>
   <link href="http://jaimeiniesta.com/2007/03/07/procesar-xml-desde-ruby.html"/>
   <updated>2007-03-07T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2007/03/07/procesar-xml-desde-ruby</id>
   <content type="html">&lt;p&gt;Ruby se ha convertido en mi lenguaje de script preferido, y no sólo por ser la palabra de la izquierda en &quot;Ruby on Rails&quot;. Ruby es perfecto para otras tareas como lenguaje de script y lo podemos usar hasta como herramienta complementaria, como una utilidad más en nuestro trabajo.&lt;/p&gt;

&lt;p&gt;Por ejemplo, en un proyecto un cliente me facilitó un enorme fichero XML que me tenía que encargar de procesar para extraer sus datos, pero el cliente no sabía indicarme exactamente qué campos contenía este fichero XML. Así que en una primera fase era necesario inspeccionar todo el XML y ver qué campos contenían las entidades &quot;item&quot;.&lt;/p&gt;

&lt;p&gt;Para hacernos una idea, este fichero de 20 Mb tenía una estructura similar a esta:
&lt;pre lang=&quot;xml&quot;&gt;&lt;ecinventoryentries&gt;&lt;/p&gt;

&lt;p&gt;  &lt;item&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;ecnumber&amp;gt;200-001-8&amp;lt;/ecnumber&amp;gt;

&amp;lt;name&amp;gt;formaldehído&amp;lt;/name&amp;gt;

&amp;lt;casnumber&amp;gt;50-00-0&amp;lt;/casnumber&amp;gt;

&amp;lt;molecularformula&amp;gt;CH2O&amp;lt;/molecularformula&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;  &lt;/item&gt;&lt;/p&gt;

&lt;p&gt;&lt;/ecinventoryentries&gt;&lt;/pre&gt;
Algo así, pero repetido unas 100.000 veces, y en cada item podía haber diferentes tipos de campos...&lt;/p&gt;

&lt;p&gt;...¿Cómo procesamos esto? ¡Ruby al rescate! Echando mano de la librería REXML, y con este pequeño script, conseguimos procesar el fichero XML en unos 5 minutos (REXML no es muy rápido, de todos modos, son 100.000 items, o sea, unos 333 items/segundo)
&lt;pre lang=&quot;ruby&quot;&gt;
require &quot;rexml/document&quot;
include REXML
nombres = &quot;&quot;
doc = Document.new File.new(&quot;demo.xml&quot;)
doc.elements.each(&quot;*/ECInventory/ecInventoryEntries/item&quot;) do |i|&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;i.elements.each do |e|
    nombres &amp;amp;lt;&amp;amp;lt; &quot; &quot;+e.name if !nombres.include? &quot; &quot;+e.name
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;end
puts nombres&lt;/pre&gt;
Y el resultado...
&lt;pre lang=&quot;bash&quot;&gt;
$ ruby procesadorxml.rb
ecNumber name casNumber molecularFormula description&lt;/pre&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Vídeos y material de la Conferencia Rails 2006</title>
   <link href="http://jaimeiniesta.com/2007/03/06/videos-y-material-de-la-conferencia-rails-2006.html"/>
   <updated>2007-03-06T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2007/03/06/videos-y-material-de-la-conferencia-rails-2006</id>
   <content type="html">&lt;p&gt;Así a lo tonto han pasado ya cuatro meses desde la &lt;a href=&quot;http://www.conferenciarails.org&quot;&gt;Conferencia Rails 2006&lt;/a&gt; y todavía no están disponibles para descarga los vídeos de las charlas ni el material de los ponentes.&lt;/p&gt;

&lt;p&gt;Los organizadores de la conferencia entonamos el mea culpa y como lo prometido es deuda, nos estamos poniendo las pilas para tenerlo todo listo lo antes posible.&lt;/p&gt;

&lt;p&gt;Estad atentos a vuestros feeds RSS, en pocos días podréis descargarlo todo.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>La herramienta adecuada</title>
   <link href="http://jaimeiniesta.com/2007/03/06/la-herramienta-adecuada.html"/>
   <updated>2007-03-06T00:00:00-08:00</updated>
   <id>http://jaimeiniesta.com//2007/03/06/la-herramienta-adecuada</id>
   <content type="html">&lt;p&gt;Soy desarrollador &lt;a href=&quot;http://rubyonrails.org.es/&quot;&gt;Ruby on Rails&lt;/a&gt;, pero he escogido &lt;a href=&quot;http://wordpress.org/&quot;&gt;Wordpress&lt;/a&gt; como gestor de contenidos para mi blog personal. &quot;¡Horror!&quot;, dirán algunos fanáticos de Rails... ¡pero si eso está programado en PHP! :)&lt;/p&gt;

&lt;p&gt;Los que me vienen con este argumento, que no son pocos, no han entendido de la misa la media. No saben que estamos hablando de desarrollo ágil, de no reinventar la rueda, de &lt;a href=&quot;http://www.37signals.com/svn/archives2/the_right_tool_for_the_job.php&quot;&gt;escoger la mejor herramienta para cada tarea&lt;/a&gt; (si, 37signals también usa PHP!).&lt;/p&gt;

&lt;p&gt;En el caso de los blogs, Wordpress es la mejor herramienta, la más completa y la más probada. Las soluciones existentes hoy día en Ruby on Rails como &lt;a href=&quot;http://mephistoblog.com&quot;&gt;Mephisto&lt;/a&gt; dan más de un &lt;a href=&quot;http://blog.labratz.net/articles/2006/08/19/yet-another-guide-to-installing-mephisto-on-dreamhost&quot;&gt;quebradero&lt;/a&gt; &lt;a href=&quot;http://mede.us/2006/12/1/mephisto-and-dreamhost&quot;&gt;de cabeza&lt;/a&gt; para instalar o son demasiado sencillas como &lt;a href=&quot;http://simplelog.net/&quot;&gt;Simplelog&lt;/a&gt;...&lt;/p&gt;
</content>
 </entry>
 
 
</feed>