<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-9446919</atom:id><lastBuildDate>Wed, 21 Jun 2023 04:25:52 +0000</lastBuildDate><category>rails</category><category>RubyOnRails</category><category>ruby</category><category>ubuntu</category><category>linux</category><category>inteligenciaArtificial</category><category>hosting</category><category>conferenciarails</category><category>conferenciarails2007</category><category>festivalttsOnRails</category><category>general</category><category>gentoo</category><category>algoritmosGeneticos</category><category>amazon</category><category>bases de datos</category><category>bee.com.es</category><category>bn4r</category><category>capistrano</category><category>conferenciarails2006</category><category>feeds</category><category>festivaltts4r</category><category>gga4r</category><category>hlt</category><category>metarails</category><category>postgresql</category><category>railsconfeurope2007</category><category>rdoc ruby rubyonrails</category><category>seo</category><category>serp</category><category>text-to-speech</category><category>weka</category><category>windows vista</category><title>Spejman&#39;s Blog</title><description>Web2.0, Ruby on Rails, Ubuntu Linux  y alguna cosa más ...</description><link>http://spejman.blogspot.com/</link><managingEditor>noreply@blogger.com (Spejman)</managingEditor><generator>Blogger</generator><openSearch:totalResults>68</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-5935323281986549875</guid><pubDate>Tue, 17 Jun 2008 09:27:00 +0000</pubDate><atom:updated>2008-06-17T11:33:43.882+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">bases de datos</category><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">postgresql</category><title>Copiar o hacer backup en postgresql de una base de datos</title><description>Después de mucho tiempo sin actualizar el blog, vuelvo a hacerlo con un pequeño truco para administrar una base de datos en postgresql.&lt;br /&gt;&lt;br /&gt;Para copiar los datos y el esquema de una base de datos en postgresql podemos utilizar el siguiente comando:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; pg_dump -c NOMBRE_DE_LA_BD &gt; ARCHIVO.sql&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Si posteriormente queremos introducir estos datos en la base de datos podemos utilizar este comando:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;cat ARCHIVO.sql | psql NOMBRE_DE_LA_BD&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;¡Espero que os sea útil!</description><link>http://spejman.blogspot.com/2008/06/copiar-o-hacer-backup-en-postgresql-de.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-2146595682111113738</guid><pubDate>Mon, 04 Feb 2008 19:20:00 +0000</pubDate><atom:updated>2008-02-04T20:21:09.472+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rdoc ruby rubyonrails</category><title>Rdoc, el generador de documentación de Ruby</title><description>Rdoc es el generador de documentación de Ruby por defecto. Es muy útil para generar la documentación de librerías que luego has de reutilizar.&lt;br /&gt;&lt;br /&gt;Básicamente parsea recursivamente todos los archivos .rb, .rbw y .c del subdirectorio actual, en busca de comentarios encima de la definición de cada función y al inicio del fichero. Con todos estos datos crea archivos HTML en un subdirectorio llamado &quot;doc&quot;. Un ejemplo del resultado es: api.rubyonrails.com&lt;br /&gt;&lt;br /&gt;Para ejecutarlo hay que llamar a:&lt;br /&gt;&lt;code&gt;rdoc&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Unos flags útiles son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;--main [PATH a un fichero], hará que el fichero apuntado sea el que aparezca como inicio en la documentación generada.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;--all, incluye también métodos privados en la documentación (por defecto solo incluye los públicos).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;--op [PATH a un directorio], utiliza este directorio para guardar la documentación en lugar de &quot;doc&quot;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;--inline-source, incluye el código fuente de cada método en la documentación.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Reglas básicas de marcado:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;= cabecera de nivel 1&lt;/li&gt;&lt;br /&gt;&lt;li&gt;== cabecera de nivel 2&lt;/li&gt;&lt;br /&gt;&lt;li&gt;* o - crea un elemento de una lista&lt;/li&gt;&lt;br /&gt;&lt;li&gt;# crea un elemento de una lista numerada&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Con las palabras se puede hacer: _italica_, *negrita* y +codigo+&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Más información:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://rdoc.sourceforge.net/&quot;&gt;rdoc.sourceforge.net&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><link>http://spejman.blogspot.com/2008/02/rdoc-el-generador-de-documentacin-de.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-1110211503317206591</guid><pubDate>Fri, 01 Feb 2008 20:30:00 +0000</pubDate><atom:updated>2008-02-01T21:30:17.023+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">conferenciarails</category><category domain="http://www.blogger.com/atom/ns#">conferenciarails2007</category><category domain="http://www.blogger.com/atom/ns#">rails</category><category domain="http://www.blogger.com/atom/ns#">RubyOnRails</category><title>Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web</title><description>Mas vale tarde que nunca... este post debería haberlo escrito hace unos 2 meses, pero estos han sido frenéticos, mucho trabajo. Uno de los proyectos que me ha tenido más ocupado estos meses es &lt;a href=&quot;http://www.verycocinar.com&quot;&gt;verycocinar.com&lt;/a&gt; que en los próximos días verá la luz, la verdad es que está teniendo críticas muy positivas lo que me anima a continuar trabajando.&lt;br /&gt;&lt;br /&gt;Bueno, aquí dejo las transparencias de la sesión: &lt;a href=&quot;http://www.slideshare.net/spejman/inteligencia-artificial-y-ruby-on-rails-mejora-la-publicidad-de-tu-web&quot;&gt;http://www.slideshare.net/spejman/inteligencia-artificial-y-ruby-on-rails-mejora-la-publicidad-de-tu-web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y aquí el vídeo con la ponencia grabada:&lt;br /&gt;&lt;a href=&quot;http://2007.conferenciarails.org/videos/02_Rails_Hispana_2007_Sala2_Inteligencia_Artificial.wmv&quot;&gt;http://2007.conferenciarails.org/videos/02_Rails_Hispana_2007_Sala2_Inteligencia_Artificial.wmv&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero que sean de utilidad!</description><link>http://spejman.blogspot.com/2008/02/inteligencia-artificial-y-ruby-on-rails.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-6848061830707194571</guid><pubDate>Thu, 22 Nov 2007 13:07:00 +0000</pubDate><atom:updated>2007-11-22T14:14:09.642+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">conferenciarails</category><category domain="http://www.blogger.com/atom/ns#">conferenciarails2007</category><title>Conferencia Rails Hispana 2007</title><description>&lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11pt;&quot;&gt;Ya ha pasado un año de la primera conferencia rails hispana, hoy acaba de empezar la segunda y volvemos a estar aquí, en Madrid, gran parte de la comunidad rails de españa.&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11pt;&quot;&gt;Esta edición de la conferencia viene cargada de ponencias interesantes de las cuales las que se dan en la sala 1 y 2 estarán grabadas, para su posterior difusión.&lt;/p&gt;&lt;br /&gt;&lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://www.conferenciarails.org/&quot;&gt;&lt;img src=&quot;http://www.conferenciarails.org/images/badges/ponente.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11pt;&quot;&gt;Mañana 23 de noviembre daré junto a Santiago Bel una charla sobre Inteligencia Artificial aplicada a mejorar el rendimiento de la publicidad en una web. Puedes encontrar más información en:&lt;br /&gt;                                                                                                                                                                                           &lt;a href=&quot;http://ponencias.conferenciarails.org/charlas/ver/9&quot; class=&quot;confirmada&quot;&gt;Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web&lt;/a&gt;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11pt;&quot;&gt;Espero que encuentres la ponencia interesante y si estás en la conferencia vengas a vernos y sino veas el video de la ponencia.&lt;/p&gt;</description><link>http://spejman.blogspot.com/2007/11/conferencia-rails-hispana-2007.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-3344813164246897282</guid><pubDate>Mon, 03 Sep 2007 20:08:00 +0000</pubDate><atom:updated>2007-09-03T22:13:03.802+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">festivalttsOnRails</category><category domain="http://www.blogger.com/atom/ns#">rails</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">RubyOnRails</category><title>La aplicación Rails que habla</title><description>Después de varias semanas sin publicar nada y de unas vacaciones, he acabado un ejemplo de lo que se puede hacer con &lt;a href=&quot;http://festivaltts4r.rubyforge.org/&quot;&gt;festivaltts para Ruby&lt;/a&gt;: Un aplicación en Ruby on Rails que habla!&lt;br /&gt;&lt;br /&gt;Puedes probarla en: &lt;a href=&quot;http://thetalkingrailsapp.sergioespeja.com/&quot;&gt;http://thetalkingrailsapp.sergioespeja.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;De momento sólo funciona con la voz inglesa, espero que te de ideas para tus aplicaciones RoR!</description><link>http://spejman.blogspot.com/2007/09/la-aplicacin-rails-que-habla.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-4744681575479072897</guid><pubDate>Wed, 11 Jul 2007 10:04:00 +0000</pubDate><atom:updated>2007-07-11T12:05:39.406+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">metarails</category><category domain="http://www.blogger.com/atom/ns#">rails</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">RubyOnRails</category><title>MetaQuerier Beta</title><description>MetaQuerier es un plugin para Ruby on Rails que una vez instalado infiere la estructura de la base de datos y de los modelos de la aplicación Rails. Permite hacer consultas, guardar consultas parametrizadas para utilizarlas más adelante y ver la estructura de base de datos.&lt;br /&gt;&lt;br /&gt;No requiere ningún tipo de configuración ( a excepción de que tengas instalado ActsAsAuthenticated y quieras &lt;span id=&quot;misp_compose_9&quot; class=&quot;hm&quot;&gt;deshabilitarlo&lt;/span&gt;). Para instalarlo hay que ejecutar:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;script/plugin install svn://rubyforge.org/var/svn/meta-rails/plugins/meta_querier&lt;/code&gt;&lt;/pre&gt;Los prerequisitos son tener una versión de Ruby on Rails mayor o igual a la 1.2.0 (y tener activada la constante RAILS_GEM_VERSION que encontrarás en /config/environment.rb) o en caso contrario, tener instalado el &lt;a href=&quot;http://rails-engines.org/&quot;&gt;plugin engines&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Una vez instalado podemos crear las consultas (queries), accediendo al controlador /meta_querier (ej:&lt;a href=&quot;http://localhost:3000/meta_querier&quot;&gt; http://localhost:3000/meta_querier&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://farm2.static.flickr.com/1067/774811969_2858515e0d.jpg&quot; style=&quot;margin: 0pt auto 10px; display: block; text-align: center;&quot; title=&quot;MetaQuerier &quot; build=&quot;&quot; query=&quot;&quot; screenshoot=&quot;&quot; /&gt;&lt;br /&gt;Guardarlas parametrizadas (Save):&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://farm2.static.flickr.com/1113/775687160_2d21201b70.jpg&quot; style=&quot;margin: 0pt auto 10px; display: block; text-align: center;&quot; title=&quot;MetaQuerier &quot; save=&quot;&quot; query=&quot;&quot; screenshoot=&quot;&quot; /&gt;&lt;br /&gt;Ver un listado de las queries que existen (List):&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://farm2.static.flickr.com/1294/775687238_e6bb9b32e6.jpg&quot; style=&quot;margin: 0pt auto 10px; display: block; text-align: center;&quot; title=&quot;MetaQuerier &quot; list=&quot;&quot; queries=&quot;&quot; screenshoot=&quot;&quot; /&gt;&lt;br /&gt;Ejecutar las queries (Run):&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://farm2.static.flickr.com/1114/775687094_4da91ccfae.jpg&quot; style=&quot;margin: 0pt auto 10px; display: block; text-align: center;&quot; title=&quot;MetaQuerier &quot; run=&quot;&quot; query=&quot;&quot; screenshoot=&quot;&quot; /&gt;&lt;img src=&quot;http://farm2.static.flickr.com/1159/775687022_0d5162d882.jpg&quot; style=&quot;margin: 0pt auto 10px; display: block; text-align: center;&quot; title=&quot;MetaQuerier &quot; query=&quot;&quot; result=&quot;&quot; screenshoot=&quot;&quot; /&gt;&lt;br /&gt;Como puedes ver este plugin puede ser muy interesante para generar pantallas de administración o incluso pantallas de listados con un esfuerzo mínimo. Forma parte del proyecto MetaRails que pretende hacer Ruby on Rails todavía más Don&#39;t Repeat Yourself.&lt;br /&gt;&lt;br /&gt;Queda trabajo por hacer, pero antes de continuar me gustaría estabilizar el código actual. Si te interesa puedes ayudarme instalándote el plugin, probando si te funciona y enviándome tus comentarios.&lt;br /&gt;&lt;br /&gt;Más información:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Página del proyecto: &lt;a href=&quot;http://meta-rails.rubyforge.org&quot;&gt;http://meta-rails.rubyforge.org&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><link>http://spejman.blogspot.com/2007/07/metaquerier-beta.html</link><author>noreply@blogger.com (Spejman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm2.static.flickr.com/1067/774811969_2858515e0d_t.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-2842884480504282372</guid><pubDate>Fri, 15 Jun 2007 13:01:00 +0000</pubDate><atom:updated>2007-06-15T15:17:58.603+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rails</category><category domain="http://www.blogger.com/atom/ns#">railsconfeurope2007</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">RubyOnRails</category><title>Mi charla ha sido seleccionada para la Railsconf Europe 2007</title><description>La propuesta &quot;&lt;a href=&quot;http://www.railsconfeurope.com/cs/railseurope2007/view/e_sess/14415&quot;&gt;Making Rails More (Artificially) Intelligent&lt;/a&gt;&quot; ha sido elegida para presentarla en la &lt;a href=&quot;http://www.railsconfeurope.com&quot;&gt;Railsconf Europe&lt;/a&gt; 2007 que se celebrará del 17 al 19 de septiembre de este año en Berlín.&lt;br /&gt;&lt;br /&gt;Estoy muy contento porque será una gran oportunidad para charlar con algunas de las personas que más saben y más han contribuido al desarrollo de Ruby on Rails.&lt;br /&gt;&lt;br /&gt;Mi charla tratará sobre como usar Inteligencia Artificial en las aplicaciones RoR. El uso de la IA en aplicaciones RoR permitirá crear ideas web más innovadoras y originales.&lt;br /&gt;&lt;br /&gt;Si tienes previsto asistir a la conferencia, espero que encuentres la propuesta interesante y vengas a verla ;)</description><link>http://spejman.blogspot.com/2007/06/mi-charla-ha-sido-seleccionada-para-la.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>8</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-5929184544019326232</guid><pubDate>Tue, 12 Jun 2007 05:30:00 +0000</pubDate><atom:updated>2007-06-12T07:49:02.447+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">festivaltts4r</category><category domain="http://www.blogger.com/atom/ns#">festivalttsOnRails</category><category domain="http://www.blogger.com/atom/ns#">rails</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">RubyOnRails</category><category domain="http://www.blogger.com/atom/ns#">text-to-speech</category><title>Voz en tus aplicaciones Ruby on Rails</title><description>Acabo de publicar la primera versión utilizable de festivaltts4r junto con su plugin para Ruby on Rails festivalttsOnRails. Con esta librería y este plugin podrás hacer que tus aplicaciones Ruby y Ruby on Rails hablen!&lt;br /&gt;&lt;br /&gt;El plugin para rails en ubuntu es muy sencillo de utilizar:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Instalar las librerías de tts y de generación de mp3:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install festival lame&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Instalar el plugin festivalttsOnRails para Ruby on Rails:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;script/plugin install \&lt;br /&gt;svn://rubyforge.org/var/svn/festivaltts4r/plugins/festivaltts_on_rails&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Utilizar el método text_to_flash_player(text) en tus vistas:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&lt;%= text_to_flash_player &quot;Talk me!&quot; %&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Actualmente el plugin solo está disponible en la versión con voz inglesa, pero como prueba de concepto ya puede servir. En función del interés por el plugin y de la ayuda de la comunidad puedo ir mejorándolo.&lt;br /&gt;&lt;br /&gt;He comprobado que funciona en Ubuntu linux, si puedes probarlo en otras plataformas te agradecería que me comentases como funciona ;)&lt;br /&gt;&lt;br /&gt;También puedes utilizar la librería festivaltts4r para realizar aplicaciones de voz con Ruby en modo local. Al igual que el plugin, es muy fácil de instalar y usar:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Instalar las librerías de tts y de generación de mp3:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install festival lame&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Instalar la gem festivaltts4r:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;sudo gem install festivaltts4r&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Incluir las gems necesarias y llamar al método to_speech con que se define en la clase String:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;require &quot;rubygems&quot;&lt;br /&gt;require &quot;festivaltts4r&quot;&lt;br /&gt;    &lt;br /&gt;&quot;I&#39;m talking&quot;.to_speech&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Este proyecto se ha realizado utilizando las librerías &lt;a href=&quot;http://www.cstr.ed.ac.uk/projects/festival/&quot;&gt;Festival TTS&lt;/a&gt; y &lt;a href=&quot;http://lame.sourceforge.net/index.php&quot;&gt;lame&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;El reproductor de mp3 en flash que reproduce la voz en el plugin para rails esta realizado por &lt;a href=&quot;http://www.estvideo.com/dew/index/2005/02/16/370-player-flash-mp3-leger-comme-une-plume&quot;&gt;dew&lt;/a&gt; con la licencia &lt;a href=&quot;http://creativecommons.org/licenses/by-sa/2.0/fr/deed.fr&quot;&gt;Creative Commons Attribution-ShareAlike License France&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Más información en la página oficial del proyecto: &lt;a href=&quot;http://festivaltts4r.rubyforge.org/&quot;&gt;festivaltts4r.rubyforge.org&lt;/a&gt;</description><link>http://spejman.blogspot.com/2007/06/voz-en-tus-aplicaciones-ruby-on-rails.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-4488331212795313769</guid><pubDate>Tue, 05 Jun 2007 10:00:00 +0000</pubDate><atom:updated>2007-06-05T11:55:32.949+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Dibujar con Ruby y Scribble!</title><description>Viendo el blog de nuevo blog de _why (http://hackety.org) descubrí &lt;a href=&quot;http://nex3.leeweiz.net/posts/3&quot;&gt;Scribble!&lt;/a&gt; que es una versión en Ruby de &lt;a href=&quot;http://nodebox.net/code/index.php/Home&quot;&gt;NodeBox&lt;/a&gt;. Permite hacer dibujos muy chulos utilizando Ruby.&lt;br /&gt;&lt;br /&gt;Si quieres probarlo en windows puedes seguir las instrucciones en http://nex3.leeweiz.net/posts/3&lt;br /&gt;&lt;br /&gt;Yo quería probarlo en Linux, pero no encontré documentación relacionada por lo que tuve que investigar como instalarlo. Conseguí que funcionará en Ubuntu ejecutando lo siguiente:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Instalamos las librerías cairo y gtk2 para ruby:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install libcairo-ruby1.8 libgtk2-ruby&lt;br /&gt;svn co svn://hamptoncatlin.com/scribble/trunk scribble&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ejecutamos scribble:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;cd scribble&lt;br /&gt;bin/scribble&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Con esto ejecutaremos Scribble! y podremos hacer dibujos como este:&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://farm1.static.flickr.com/222/516610626_0766a79444.jpg&quot; width=&quot;435&quot; height=&quot;500&quot; alt=&quot;Scribble! Screenshot&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Este dibujo es prácticamente único ya que se genera aleatoriamente a partir de este código:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;brush.fill = rand(0.1) + 0.9, rand(0.4) + 0.6, rand(0.1) + 0.9, rand(0.1)+0.1&lt;br /&gt;blanket&lt;br /&gt;&lt;br /&gt;brush.fill = rand(0.1) + 0.9, rand(0.4) + 0.6, rand(0.1) + 0.9, rand(0.1)+0.1&lt;br /&gt;brush.stroke = rand(0.4) + 0.6, 0, 1, 0.2&lt;br /&gt;brush.width = 2&lt;br /&gt;&lt;br /&gt;100.times do&lt;br /&gt;circle :center =&gt; [rand(size[0]), rand(size[1])], :radius =&gt; rand(50) + 10&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Si te animas y creas algún dibujo chulo con Scribble! compártelo poniendo el código fuente como comentario en esta entrada ;)</description><link>http://spejman.blogspot.com/2007/06/dibujar-con-ruby-y-scribble.html</link><author>noreply@blogger.com (Spejman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm1.static.flickr.com/222/516610626_0766a79444_t.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-6803718633477694679</guid><pubDate>Mon, 28 May 2007 10:20:00 +0000</pubDate><atom:updated>2007-05-28T12:25:54.671+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rails</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">RubyOnRails</category><title>Palabras reservadas de MySQL como nombre de modelo</title><description>Al generar un modelo con una migration en ruby on rails creamos una tabla en la base de datos. El nombre de esta tabla será igual a la forma pluralizada del nombre del modelo. En MySQL esta migration generará una sentencia sql de la forma:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;CREATE TABLE model_name_pluralized (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY,&lt;br /&gt; `created_on` date DEFAULT NULL, `name` varchar(255) DEFAULT NULL) ENGINE=InnoDB&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Como puedes ver, los nombres de las columnas están entre comillas pero el nombre de la tabla no. Si utilizas como nombre de modelo la forma en singular de una palabra reservada de MySQL, la migration generará una sentencia sql que dará un error como:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;Mysql::Error: You have an error in your SQL syntax; check the manual that corresponds to your&lt;br /&gt; MySQL server version for the right syntax to use near &#39;databases (`id` int(11) DEFAULT NULL &lt;br /&gt;auto_increment PRIMARY KEY, `created_on` da&#39; at line 1: CREATE TABLE databases (`id` int(11) &lt;br /&gt;DEFAULT NULL auto_increment PRIMARY KEY, `created_on` date DEFAULT NULL, `name` varchar(255) &lt;br /&gt;DEFAULT NULL) ENGINE=InnoDB&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;La semana pasada leí unas transparencias de &lt;a href=&quot;http://hasmanythrough.com&quot;&gt;Josh Susser&lt;/a&gt; (&lt;a href=&quot;http://hasmanythrough.com/layingtracks/LayingTracks.pdf&quot;&gt;Laying Tracks&lt;/a&gt;) que me animaron a escribir un parche para este problema.&lt;br /&gt;&lt;br /&gt;Antes de escribir nada miré si podía encontrar algo relacionado. Encontre algún ticket similar en el &lt;a href=&quot;dev.rubyonrails.org&quot;&gt;trac de Rails&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://dev.rubyonrails.org/ticket/7850&quot;&gt;&lt;span style=&quot;text-decoration: line-through&quot;&gt;#7850&lt;/span&gt;: [PATCH] Added missing backticks to mysql adapter&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://dev.rubyonrails.org/ticket/4905&quot;&gt;&lt;span&gt;#4905&lt;/span&gt;[PATCH] Rails should backtick table names automagically&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://dev.rubyonrails.org/ticket/3631&quot;&gt;&lt;span style=&quot;text-decoration: line-through&quot;&gt;#3631&lt;/span&gt;: table names should be quoted&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://dev.rubyonrails.org/ticket/1633&quot;&gt;&lt;span style=&quot;text-decoration: line-through&quot;&gt;#1633&lt;/span&gt;: [PATCH] quote_column_name in ActiveRecord::ConnectionAdapters  ...&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;El ticket más interesante de estos es el #4905, donde se corrigen todas las sentencias MySQL que pueden generar ese error. No se porque pero este parche no está incluido en el código de rails a pesar de ser del 25 de mayo de 2006. El tickert #7850 está cerrado al considerarse duplicado respecto el #4905. Y la história del ticket #3631 acaba con la frase &quot;no usar palabras reservadas&quot;, lo cual en mi opinión no es la mejor solución.&lt;br /&gt;&lt;br /&gt;En resumen, el problema existe (no se pueden crear modelos con nombres como &quot;database&quot;, &quot;exist&quot;, etc ...) y el parche también existe (#4905). Entoces,&lt;br /&gt;que se debe hacer ahora para arreglar este problema?</description><link>http://spejman.blogspot.com/2007/05/palabras-reservadas-de-mysql-como.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-7936770883693084211</guid><pubDate>Sat, 12 May 2007 17:32:00 +0000</pubDate><atom:updated>2007-05-15T11:11:36.476+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">feeds</category><category domain="http://www.blogger.com/atom/ns#">rails</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><title>Copia de seguridad de bloglines</title><description>Si eres usuario de &lt;a href=&quot;http://www.bloglines.com&quot;&gt;bloglines&lt;/a&gt; (lector de feeds online) probablemente guardes los posts que te parezcan interesantes utilizando la opción &quot;keep new&quot;.&lt;br /&gt;&lt;br /&gt;Después de usar este lector de feeds durante un tiempo, la cantidad de posts interesantes que he guardado así es importante. Estuve pensado que no me haría ninguna gracia perder estos datos, por eso he hecho un script que hace un backup de estos posts en un archivo xml.&lt;br /&gt;&lt;br /&gt;Este script me ha servido para probar dos librerías muy útiles de Ruby: &lt;a href=&quot;http://mechanize.rubyforge.org/mechanize/&quot;&gt;mechanize&lt;/a&gt; y &lt;a href=&quot;http://code.whytheluckystiff.net/hpricot/&quot;&gt;hpricot&lt;/a&gt;. Mechanize permite navegar por web utilizando comandos muy simples como podrás ver en el script. Hpricot permite parsear documentos html y xml de manera muy fácil e intuitiva.&lt;br /&gt;&lt;br /&gt;Para usar el script necesitas instalar las siguientes librerías:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;gem install json&lt;br /&gt;gem install activesupport&lt;br /&gt;gem install hpricot&lt;br /&gt;gem install mechanize&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Y aquí dejo el script, creo que se entiende bastante bien lo que hace. Espero que os ayude bien a hacer un backup de vuestra cuenta de bloglines (recuerda cambiar los valores EMAIL y PASSWORD) o bien a aprender un poco como funcionan mechanize y hpricot.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;require &quot;rubygems&quot;&lt;br /&gt;require &quot;hpricot&quot;&lt;br /&gt;require &quot;json&quot;&lt;br /&gt;require &quot;mechanize&quot;&lt;br /&gt;require &quot;active_support&quot;&lt;br /&gt;&lt;br /&gt;# Reads a bloglines javascript tree structure that has all&lt;br /&gt;# feeds data.&lt;br /&gt;def read_tree( tree_base, label = &quot;&quot; )&lt;br /&gt; tree_base.each do |tree|&lt;br /&gt; if tree[&quot;kids&quot;]&lt;br /&gt;  read_tree tree[&quot;kids&quot;], label + &quot;/&quot; + tree[&quot;n&quot;]&lt;br /&gt;  else&lt;br /&gt;  @feeds &lt;&lt; [tree[&quot;n&quot;], label, tree[&quot;kn&quot;], &quot;http://www.bloglines.com/myblogs_display?sub=#{tree[&quot;id&quot;]}&amp;site=#{tree[&quot;sid&quot;]}&quot;]&lt;br /&gt; end&lt;br /&gt; end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# Add more memory to hpricot otherwise couldn&#39;t load some webs.&lt;br /&gt;Hpricot.buffer_size = 262144&lt;br /&gt;&lt;br /&gt;agent = WWW::Mechanize.new&lt;br /&gt;page = agent.get &#39;http://www.bloglines.com/login&#39;&lt;br /&gt;&lt;br /&gt;form = page.forms[1]&lt;br /&gt;form.email = &#39;EMAIL&#39;&lt;br /&gt;form.password = &#39;PASSWORD&#39;&lt;br /&gt;&lt;br /&gt;page = agent.submit form&lt;br /&gt;&lt;br /&gt;# Get the bloglines sindicated feeds&lt;br /&gt;menu_page = agent.get &quot;http://www.bloglines.com/myblogs_subs&quot;&lt;br /&gt;start_text = &quot;var initTreeData = &quot;&lt;br /&gt;end_text = &quot;\n;\n&quot;&lt;br /&gt;js_feeds_tree_str = menu_page.content[menu_page.content.index(start_text)+start_text.size..menu_page.content.index(end_text)]&lt;br /&gt;feeds_tree = JSON.parse js_feeds_tree_str.gsub(&quot;\\&quot;,&quot;&quot;)&lt;br /&gt;@feeds = []&lt;br /&gt;read_tree(feeds_tree[&quot;kids&quot;])&lt;br /&gt;&lt;br /&gt;puts &quot;&amp;lt;bloglines_saves&amp;gt;&quot;&lt;br /&gt;@feeds.each do |feed|&lt;br /&gt;&lt;br /&gt; page = agent.get feed[3]&lt;br /&gt; doc= Hpricot(page.content)&lt;br /&gt;&lt;br /&gt; # get the content of all saved feed posts&lt;br /&gt; content = ((doc/&quot;body&quot;)/&quot;td.article&quot;)&lt;br /&gt; next if content.empty?&lt;br /&gt; puts &quot;&amp;lt;feed name=\&quot;#{feed[0].strip}\&quot; folder=\&quot;#{feed[1].strip}\&quot;&amp;gt;&quot;&lt;br /&gt; &lt;br /&gt; # Iterate each saved feed post&lt;br /&gt; ((doc/&quot;body&quot;)/&quot;a.bl_itemtitle&quot;).each_with_index do |title, index|&lt;br /&gt;  puts &quot;&amp;lt;feed_save title=\&quot;#{title.inner_html.strip}\&quot; href=\&quot;#{title.attributes[&quot;href&quot;]}\&quot;&amp;gt;&quot;&lt;br /&gt;  puts content[index].inner_html.to_xs&lt;br /&gt;  puts &quot;&amp;lt;/feed_save&amp;gt;&quot;&lt;br /&gt; end&lt;br /&gt; puts &quot;&amp;lt;/feed&amp;gt;&quot;&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;puts &quot;&amp;lt;/bloglines_saves&amp;gt;&quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Más información:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Hpricot: &lt;a href=&quot;http://code.whytheluckystiff.net/hpricot/&quot;&gt;http://code.whytheluckystiff.net/hpricot/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Mechanize: &lt;a href=&quot;http://mechanize.rubyforge.org/mechanize/&quot;&gt;http://mechanize.rubyforge.org/mechanize/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><link>http://spejman.blogspot.com/2007/05/copia-de-seguridad-de-bloglines.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-6433897626139081853</guid><pubDate>Thu, 10 May 2007 18:12:00 +0000</pubDate><atom:updated>2007-05-10T20:17:57.878+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rails</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">RubyOnRails</category><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Instalar sqlite3 para rails en Ubuntu</title><description>&lt;ol&gt;&lt;li&gt;Instalar sqlite y sus librerías de desarrollo:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install sqlite3 libsqlite3-dev&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Instalar  la interfaz sqlite3-ruby para poder conectarnos a la base de datos sqlite3 desde Ruby.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;sudo gem install sqlite3-ruby&lt;br /&gt;(&lt;em&gt;Si aparecen varias versiones a escoger, seleccionar &lt;br /&gt;la última versión para ruby.&lt;/em&gt;)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Crear la base de datos, realmente solo creamos un archivo vacío que es lo único que necesita sqlite3.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;touch database_name_dev.db&lt;br /&gt;touch database_name_test.db&lt;br /&gt;touch database_name_prod.db&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Configurar la aplicación Ruby on Rails para usar estas bases de datos.&lt;br /&gt;Modificar el archivo config/database.yml:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;development:&lt;br /&gt;  adapter: sqlite3&lt;br /&gt;  database: db/database_name_dev.db&lt;br /&gt;&lt;br /&gt;test:&lt;br /&gt;  adapter: sqlite3&lt;br /&gt;  database: db/database_name_test.db&lt;br /&gt;&lt;br /&gt;production:&lt;br /&gt;  adapter: sqlite3&lt;br /&gt;  database: db/database_name_prod.db&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Listo! a partir de aquí puedes desarrollar tu aplicación rails usando sqlite3 como base de datos.</description><link>http://spejman.blogspot.com/2007/05/instalar-sqlite3-para-rails-en-ubuntu.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-8993245639415643913</guid><pubDate>Thu, 03 May 2007 18:50:00 +0000</pubDate><atom:updated>2007-05-03T20:47:00.718+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">general</category><category domain="http://www.blogger.com/atom/ns#">hlt</category><category domain="http://www.blogger.com/atom/ns#">inteligenciaArtificial</category><title>Congreso NAACL HLT 2007</title><description>La semana pasada estuve en el congreso &lt;a href=&quot;http://www.cs.rochester.edu/meetings/hlt-naacl07/&quot;&gt;NAACL HLT&lt;/a&gt; (North American Association for Computational Linguistics Human Languages Technologies) en Rochester (New York). Allí presentamos un artículo sobre adquisición automática de información léxica (&quot;Automatic Acquisition of Grammatical Types for Nouns&quot;, BEL, N.; ESPEJA, S.; MARIMON, M. &lt;a href=&quot;http://www.upf.edu/pdi/iula/sergio.espeja/pdf/NAACL_HLT_AAGTN.pdf&quot;&gt;PDF&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;El congreso fue muy interesante, destacaría que hay muchísimo trabajo por hacer en el área de la lingüística computacional. Google, que está muy metido en estos temas, presentó sus resultados de traducción automática. Parece que son los mejores utilizando métodos estadísticos para traducir del chino al inglés. De todas maneras sólo tienen un 40% de acierto utilizando TeraBytes de datos! Lo que permite intuir la complejidad de la tarea.&lt;br /&gt;&lt;br /&gt;Esta semana en Estados Unidos también me ha permitido hacer un poco de turismo y comprobar que efectivamente, Estados Unidos es como en las películas. Es muy gracioso ir viendo como todo lo que aparece en las películas lo encuentras por la calle.&lt;br /&gt;&lt;br /&gt;A continuación os muestro algunas fotos del viaje.&lt;br /&gt;&lt;em&gt;Nueva York:&lt;/em&gt;&lt;br /&gt;&lt;a href=&quot;http://www.flickr.com/photos/spejman/482919688/&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/194/482919688_de547088b0_m.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Rochester:&lt;/em&gt;&lt;br /&gt;&lt;a href=&quot;http://www.flickr.com/photos/spejman/482919694/&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/218/482919694_d1fd258d72_m.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;American way of life:&lt;/em&gt;&lt;br /&gt;&lt;a href=&quot;http://www.flickr.com/photos/spejman/482919702/&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/186/482919702_587abaf9f5_m.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Cataratas del niagara:&lt;/em&gt;&lt;br /&gt;&lt;a href=&quot;http://www.flickr.com/photos/spejman/482919710/&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/181/482919710_9d60472630_m.jpg&quot; /&gt;&lt;/a&gt;</description><link>http://spejman.blogspot.com/2007/05/congreso-naacl-hlt-2007.html</link><author>noreply@blogger.com (Spejman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm1.static.flickr.com/194/482919688_de547088b0_t.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-1444687084591071757</guid><pubDate>Wed, 02 May 2007 09:05:00 +0000</pubDate><atom:updated>2007-05-02T11:08:42.188+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">amazon</category><category domain="http://www.blogger.com/atom/ns#">hosting</category><title>Cambio de precios en Amazon S3</title><description>Amazon ha cambiado su política de precios en su servicio S3 (almacenaje), lo que también afecta a los servicios EC2 (computación elástica) y SQS (paso de mensajes).&lt;br /&gt;&lt;br /&gt;Los cambios se reflejan en las tarifas de uso de ancho de banda. Anteriormente el precio era de $0,20 por GB subido o bajado, independientemente de las peticiones realizadas.&lt;br /&gt;&lt;br /&gt;En Amazon se han dado cuenta de que les cuesta mas atender peticiones que subir o bajar datos, por lo que cobrarán por un lado el ancho de banda utilizado (subir o bajar datos) y por otro lado las peticiones:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;$0,10 por GB para todos los datos subidos.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;$0,18 por GB para los primeros 10 TB de datos descargados al mes.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;$0,16 por GB para los siguientes 40 TB de datos descargados al mes.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;$0,13 por GB para los datos descargados al mes a partir de 50 TB.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;$0,01 por cada 1.000 peticiones PUT o LIST.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;$0,01 por cada 10.000 peticiones GET o otras (excepto las DELETE que son gratuitas)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Estos cambios se harán efectivos el 1 de Junio de 2007.</description><link>http://spejman.blogspot.com/2007/05/cambio-de-precios-en-amazon-s3.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-5513701923329306939</guid><pubDate>Thu, 19 Apr 2007 17:27:00 +0000</pubDate><atom:updated>2007-05-16T20:25:26.228+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Instalar Ubuntu 7.04 Feisty Fawn</title><description>Hoy a salido la nueva versión de Ubuntu Linux, Ubuntu 7.04 Feisty Fawn. He aprovechado que tenía un pc por reinstalar y una vez he conseguido bajarme el CD de instalación (no ha sido fácil debido a la demanda...) lo he instalado.&lt;br /&gt;&lt;br /&gt;La verdad es que la instalación cada vez es más fácil, la parte tradicionalmente más complicada  es la de las particiones, en esta versión está muy bien explicada convirtiéndose en un paso más. He notado que han añadido a la instalación una herramienta de migración desde windows, pero como el pc no tenia windows no he podido probarla.&lt;br /&gt;&lt;br /&gt;El sistema en apariencia no cambia mucho respecto a la anterior versión. Lo que me ha gustado mucho es el detector de redes wifi instalado por defecto, aparece al pulsar en la imagen de la red que aparece por defecto a la izquierda de la fecha. Este detector permite conectarnos fácilmente a cualquier red disponible con un simple click, algo que se echaba a faltar en versiones anteriores.&lt;br /&gt;&lt;br /&gt;Como siempre es recomendable instalar una herramienta que nos ayude con los paquetes más comunes que requieren una configuración complicada. Yo he usado &lt;a href=&quot;http://www.getautomatix.com/&quot;&gt;automatrix2&lt;/a&gt;. Al instalarlo me he encontrado con un problema de fácil solución (faltaban librerías). En resumen, los pasos a seguir para instalar automatrix2 son:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;sudo apt-get install python2.4-minimal python2.4&lt;br /&gt;wget http://www.getautomatix.com/apt/dists/feisty/main/binary-i386/automatix2_1.1-4.3-7.04feisty_i386.deb&lt;br /&gt;sudo dpkg -i automatix2_1.1-4.3-7.04feisty_i386.deb&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Posteriormente ejecutamos automatrix2 y escogemos los paquetes a instalar:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;automatrix2&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Con esto ya tendremos Ubuntu instalado, a ver que nuevas sorpresas nos da esta versión!</description><link>http://spejman.blogspot.com/2007/04/instalar-ubuntu-704-feisty-fawn.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-6483096502394777654</guid><pubDate>Wed, 18 Apr 2007 06:33:00 +0000</pubDate><atom:updated>2007-04-18T09:22:46.566+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rails</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">RubyOnRails</category><title>Crear controladores y vistas en plugins Ruby on Rails</title><description>Uno de los plugins que forman el proyecto meta-rails (&lt;a href=&quot;http://meta-rails.rubyforge.org&quot;&gt;http://meta-rails.rubyforge.org&lt;/a&gt;)&lt;br /&gt;se encarga de hacer un diagrama de las clases de la aplicación y proporciona un generador&lt;br /&gt;de consultas a estas clases. Para realizar esto necesitaba cargar controladores y sus vistas&lt;br /&gt;directamente desde este plugin.&lt;br /&gt;&lt;br /&gt;Después de documentarme y hacer pruebas he encontrado la manera de hacerlo fácil.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Cargar los controladores&lt;/b&gt;&lt;br /&gt;Todos los plugins en ruby on rails pueden tener el archivo init.rb en su carpeta raiz&lt;br /&gt;que se ejecuta al cargar la aplicación rails. Este archivo es el hook (gancho) que podemos&lt;br /&gt;utilizar para introducir código del plugin en la aplicación rails.&lt;br /&gt;&lt;br /&gt;Si ponemos nuestros controladores en el subdirectorio del plugin app/controllers, para cargarlos&lt;br /&gt; podemos utilizar el código siguiente:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;directory = &quot;#{RAILS_ROOT}/vendor/plugins/NOMBRE_DEL_PLUGIN&quot;&lt;br /&gt;controller_path = File.join(directory, &#39;app&#39;, &#39;controllers&#39;)&lt;br /&gt;require &quot;#{controller_path}/NOMBRE_DEL_CONTROLADOR.rb&quot;&lt;br /&gt;$LOAD_PATH &lt;&lt; controller_path&lt;br /&gt;if defined?(RAILS_GEM_VERSION) and RAILS_GEM_VERSION &gt;= &#39;1.2.0&#39;&lt;br /&gt;  Dependencies.load_paths &lt;&lt; controller_path&lt;br /&gt;else&lt;br /&gt;  raise &quot;Engines plugin is needed for running NOMBRE_DEL_PLUGIN with \&lt;br /&gt;  a Ruby on Rails version &lt; 1.2.0&quot; if Dir[&quot;#{RAILS_ROOT}/vendor/plugins/engines&quot;].empty?&lt;br /&gt;end&lt;br /&gt;config.controller_paths &lt;&lt; controller_path&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Analizando el código vemos que este código se ejecuta de manera diferente según utilizemos&lt;br /&gt;versiones de Ruby on Rails posteriores a 1.2.0 o previas. Esto es porque para que funcione&lt;br /&gt;en versiones anteriores a 1.2.0 necesitamos el plugin engines instalado (&lt;a href=&quot;http://rails-engines.org&quot;&gt;http://rails-engines.org&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Una vez puesto este código podemos crear nuestros controladores haciendo que hereden de ActionController::Base:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;class MetaQuerierController &lt; ActionController::Base&lt;br /&gt;&lt;br /&gt;def index&lt;br /&gt;   render :text =&gt; &quot;Funciona!&quot;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Vistas para nuestros controladores&lt;/b&gt;&lt;br /&gt;Una vez hemos cargado los controladores, tenemos que asignarles los subdirectorios donde pueden&lt;br /&gt;encontrar sus vistas. Esto lo hacemos con cambiando una variable de clase con self.template_root:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;class MetaQuerierController &lt; ActionController::Base&lt;br /&gt;   self.template_root = &quot;#{RAILS_ROOT}/vendor/plugins/meta_querier/app/views/&quot;&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Espero que te sea de utilidad, puedes encontrar más información en:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;http://weblog.techno-weenie.net/2007/1/24/understanding-the-rails-initialization-process&lt;/li&gt;&lt;/ul&gt;</description><link>http://spejman.blogspot.com/2007/04/crear-controladores-y-vistas-en-plugins.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-8331253246362187840</guid><pubDate>Wed, 11 Apr 2007 08:26:00 +0000</pubDate><atom:updated>2007-04-11T10:45:44.674+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">capistrano</category><category domain="http://www.blogger.com/atom/ns#">rails</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">RubyOnRails</category><title>Logs del servidor con capistrano</title><description>Acabo de probar esta &quot;receta&quot;  para capistrano publicada por &lt;a href=&quot;http://drnicwilliams.com/2007/04/10/capistrano-variables/&quot;&gt;DrNic&lt;/a&gt;. La encuentro muy útil, permite ver los logs del servidor ruby on rails mediante el comando &lt;code&gt;cap log&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Código a insertar en &lt;code&gt;config/deploy.rb&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;# logs&lt;br /&gt;desc &quot;Devuelve las últimas líneas del archivo de log. Uso: cap log [-s lines=200] [-s rails_env=production]&quot;&lt;br /&gt;task :log do&lt;br /&gt;  lines     = configuration.variables[:lines] || 200&lt;br /&gt;  rails_env = configuration.variables[:rails_env] || &#39;production&#39;&lt;br /&gt;  run &quot;tail -n #{lines} #{current_path}/log/#{rails_env}.log&quot; do |ch, stream, out|&lt;br /&gt;    puts out&lt;br /&gt;  end&lt;br /&gt;end&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Una vez insertado este código podemos utilizarlo así:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;cap log&lt;br /&gt;cap log -s lines=1000&lt;br /&gt;cap log -s lines=1000 rails_env=development&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Más información:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://drnicwilliams.com/2007/04/10/capistrano-variables/&quot;&gt;DrNic: Capistrano variables&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://manuals.rubyonrails.com/read/book/17&quot;&gt;Manual de capistrano&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><link>http://spejman.blogspot.com/2007/04/logs-del-servidor-con-capistrano.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-3715561173413102855</guid><pubDate>Tue, 03 Apr 2007 19:53:00 +0000</pubDate><atom:updated>2007-04-10T12:33:25.635+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Error &quot;no such file to load — net/https&quot; con Ruby en Ubuntu</title><description>Cuando utilizamos librerías en ruby que llaman a &quot;net/https&quot; en Ubuntu, habitualmente aparece el error:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;custom_require.rb:27:in `gem_original_require’: no such file to load — net/https (MissingSourceFile)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A mi concretamente me ocurrió al instalar hpricot, una librería para parsear html fácilmente.&lt;br /&gt;&lt;br /&gt;Para solucionarlo hay que instalar las librerías openssl-ruby:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;apt-get install libopenssl-ruby&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;</description><link>http://spejman.blogspot.com/2007/04/error-no-such-file-to-load-nethttps-con.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-7452827863894351110</guid><pubDate>Tue, 03 Apr 2007 19:45:00 +0000</pubDate><atom:updated>2007-04-03T21:47:27.847+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rails</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">RubyOnRails</category><title>Serializar objetos en Ruby on Rails con Active Record</title><description>&lt;p&gt;Muchas veces nos es cómodo guardar en la base de datos estructuras de datos como arrays o hashes.&lt;/p&gt;&lt;p&gt;En Ruby on Rails podemos hacerlo fácilmente con el método &lt;code&gt;serialize&lt;/code&gt; de ActiveRecord. Este método permite guardar objetos en un campo de la base de datos en formato texto. Utiliza el formato YAML para convertir el objeto a texto.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;class Ejemplo &lt; ActiveRecord::Base&lt;br /&gt;   serialize :datos&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Ahora podemos utilizar la clase Ejemplo de la siguiente manera:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;ej = Ejemplo.create(:datos =&gt; {&#39;clave1&#39; =&gt; &#39;atributo1&#39;, &#39;clave2&#39; =&gt; 2 })&lt;br /&gt;puts ej.datos[&#39;clave2&#39;]&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Utilizar &lt;code&gt;serialize&lt;/code&gt; nos puede ahorrar muchas líneas de código ;)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Más información:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://ar.rubyonrails.org/&quot;&gt;http://ar.rubyonrails.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blog.jayfields.com/2007/03/rails-activerecord-serialize-method.html&quot;&gt;Rails: ActiveRecord Serialize method&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.karmiccoding.com/articles/2005/11/29/querying-serialized-data-in-activerecord&quot;&gt;Querying serialized data in ActiveRecord&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><link>http://spejman.blogspot.com/2007/04/serializar-objetos-en-ruby-on-rails-con.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-638597543561197160</guid><pubDate>Thu, 29 Mar 2007 08:19:00 +0000</pubDate><atom:updated>2007-03-29T13:15:50.165+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">algoritmosGeneticos</category><category domain="http://www.blogger.com/atom/ns#">gga4r</category><category domain="http://www.blogger.com/atom/ns#">inteligenciaArtificial</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><title>Algoritmos genéticos para Ruby (gga4r) release 0.9</title><description>Algoritmos genéticos para Ruby (gga4r) es una librería para ejecutar algoritmos genéticos fácilmente.&lt;br /&gt;&lt;br /&gt;En 3 pasos ya puedes trabajar con gga4r:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Escoger la clase a evolucionar y definirle los métodos &lt;code&gt;fitness&lt;/code&gt;, &lt;code&gt;combine&lt;/code&gt; y &lt;code&gt;mutate&lt;/code&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Con un array de instancias de la clase anterior (población inicial) crear un objeto de tipo GeneticAlgorithm.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Llamar a la función &lt;code&gt;evolve&lt;/code&gt; de la clase GeneticAlgorithm tantas veces como quieras.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Más documentación y ejemplos en:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Página web: &lt;a href=&quot;http://gga4r.rubyforge.org/es&quot;&gt;http://gga4r.rubyforge.org/es&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Proyecto en rubyforge: &lt;a href=&quot;http://rubyforge.org/projects/gga4r&quot;&gt;http://rubyforge.org/projects/gga4r&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Página web en inglés: &lt;a href=&quot;http://gga4r.rubyforge.org&quot;&gt;http://gga4r.rubyforge.org&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><link>http://spejman.blogspot.com/2007/03/algortmos-genticos-para-ruby-gga4r.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-8122975008907462267</guid><pubDate>Wed, 28 Mar 2007 21:05:00 +0000</pubDate><atom:updated>2007-03-28T23:16:22.262+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">general</category><title>Estreno template! Hemingway modificado</title><description>Como podéis ver, estreno template para el blog. El estilo anterior desaprovechaba mucho el espacio y no se leía muy bien.&lt;br /&gt;&lt;br /&gt;He partido del template &lt;a href=&quot;http://tabo.aurealsys.com/templates/hemingway-template-for-blogger/&quot;&gt;Hemingway&lt;/a&gt; y lo he modificado para añadir una cabezera y un par de cosillas más. Poco a poco iré añadiendo algún link más y algo que permita ver las últimas entradas de mi nuevo Thumblog: &lt;a href=&quot;http://spejman.tumblr.com/&quot;&gt;Spejman Thumblog!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero que os guste y sobretodo que sea más cómodo de leer!&lt;br /&gt;&lt;br /&gt;Ya sabéis, acepto todo tipo de críticas ;)</description><link>http://spejman.blogspot.com/2007/03/estreno-template-hemingway-modificado.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-5463456340434213246</guid><pubDate>Sun, 11 Mar 2007 22:46:00 +0000</pubDate><atom:updated>2007-03-11T23:50:16.825+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><category domain="http://www.blogger.com/atom/ns#">windows vista</category><title>Leer y escribir en particiones de Windows Vista desde ubuntu edgy eft</title><description>Para leer y escribir en particiones con el sistema de ficheros de &lt;a href=&quot;http://es.wikipedia.org/wiki/Windows_Vista&quot;&gt;Windows Vista&lt;/a&gt; necesitamos el driver &lt;a href=&quot;http://www.ntfs-3g.org/&quot;&gt;ntfs-3g&lt;/a&gt;. Para instalarlo en ubuntu edgy eft hay que realizar los siguientes pasos:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Configurar los repositorios:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Copiar las siguientes lineas al final del archivo &lt;code&gt;/etc/apt/sources.list&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;deb http://flomertens.free.fr/ubuntu/ edgy main main-all&lt;br /&gt;deb http://ntfs-3g.sitesweetsite.info/ubuntu/ edgy main main-all&lt;br /&gt;deb http://flomertens.keo.in/ubuntu/ edgy main main-all&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Instalar la clave de autentificación de los repositorios:&lt;/li&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;wget http://flomertens.keo.in/ubuntu/givre_key.asc -O- | sudo apt-key add -&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Actualizar el sistema:&lt;/li&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;sudo apt-get update&lt;br /&gt;sudo apt-get upgrade&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Configurar el driver:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Instalación del programa de configuración:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;sudo apt-get install ntfs-config&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Configuración del driver ntfs-3g:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;gksu ntfs-config&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Más información:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;br /&gt;&lt;a href=&quot;http://www.ubuntuforums.org/showthread.php?t=217009&quot;&gt;http://www.ubuntuforums.org/showthread.php?t=217009&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;</description><link>http://spejman.blogspot.com/2007/03/leer-y-escribir-en-particiones-de.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-249514885919559557</guid><pubDate>Thu, 08 Mar 2007 20:07:00 +0000</pubDate><atom:updated>2007-03-08T21:25:39.202+01:00</atom:updated><title>Jornadas DEISA (Distributed European Infrastructure for Supercomputing Applications)</title><description>Esta semana estoy asistiendo a las training sessions de DEISA en Barcelona, donde nos enseñan cómo ejecutar tareas en una red con los supercomputadores más potentes de Europa (&lt;a href=&quot;https://www.deisa.org/grid/architecture.php&quot;&gt;arquitectura DEISA&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;Entre estos supercomputadores se encuentra el &lt;a href=&quot;http://es.wikipedia.org/wiki/MareNostrum&quot;&gt;Marenostrum&lt;/a&gt;, a día de hoy es el ordenador más potente de europa y el quinto más potente mundial según &lt;a href=&quot;http://www.top500.org&quot;&gt;www.top500.org&lt;/a&gt;. Consta de 10.240 CPUs Power PC, 20 TeraBytes de memoria y 370 TeraBytes de disco ... Esta ubicado en una antigua capilla lo que le da un encanto especial.&lt;br /&gt;&lt;br /&gt;Hoy he tenido la suerte de poder visitar el &lt;a href=&quot;http://es.wikipedia.org/wiki/MareNostrum&quot;&gt;Marenostrum&lt;/a&gt; por dentro y os enseño las fotos que he hecho:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.flickr.com/photos/spejman/414859166/&quot; title=&quot;Photo Sharing&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/167/414859166_139c5d89db_m.jpg&quot; width=&quot;180&quot; height=&quot;240&quot; alt=&quot;Marenostrum&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.flickr.com/photos/spejman/414859160/&quot; title=&quot;Photo Sharing&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/183/414859160_80c434aa91_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Marenostrum&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.flickr.com/photos/spejman/414859174/&quot; title=&quot;Photo Sharing&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/126/414859174_c26b9b7e47_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Marenostrum Core&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Más fotos: &lt;a href=&quot;http://www.flickr.com/photos/spejman/tags/marenostrum/&quot;&gt;http://www.flickr.com/photos/spejman/tags/marenostrum/&lt;/a&gt;</description><link>http://spejman.blogspot.com/2007/03/jornadas-deisa-distributed-european.html</link><author>noreply@blogger.com (Spejman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm1.static.flickr.com/167/414859166_139c5d89db_t.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-5249171250673835268</guid><pubDate>Wed, 28 Feb 2007 09:30:00 +0000</pubDate><atom:updated>2007-10-22T14:27:28.185+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">inteligenciaArtificial</category><category domain="http://www.blogger.com/atom/ns#">weka</category><title>Ejecutar weka desde linea de comandos</title><description>&lt;a href=&quot;http://www.cs.waikato.ac.nz/ml/weka/&quot;&gt;Weka&lt;/a&gt; es una librería de algoritmos de aprendizaje automático para realizar tareas de minería de datos (data mining). Incluye también un entorno gráfico muy útil.&lt;br /&gt;&lt;br /&gt;Para un proyecto de adquisición léxica en el que estoy trabajando necesitaba ejecutar weka desde línea de comandos, como no ha sido directo averiguar como se hace os hago un resumen.&lt;br /&gt;&lt;br /&gt;La idea es que tenemos que escoger un algoritmo, entrenarlo, guardarnos el modelo generado con este entrenamiento y usarlo para clasificar los datos que queramos.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Entrenamiento&lt;/b&gt;: Una vez escogido el algoritmo (en nuestro caso utilizaremos un árbol de decisión  &lt;i&gt;weka.classifiers.trees.J48&lt;/i&gt;) creamos el modelo entrenando el árbol con los datos de entrenamiento:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;java -Xmx[MEGABYTES_DE_MEM_PARA_LA_TAREA]M -cp [PATH_A_weka.jar] [ALGORITMO_DE_APRENDIZAJE+PARÁMETROS] -t [FICHERO_ENTRENAMIENTO] -d [FICHERO_DONDE_SE_GUARDA_EL_MODELO]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Por ejemplo:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;java -Xmx1024M -cp /opt/weka-3-4-9/weka.jar  weka.classifiers.trees.J48 -C 0.25 -M 2 -t rweka.arff -d rweka.model&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Clasificación&lt;/b&gt;: Con el modelo generado en el paso anterior y los datos para clasificar ejecutamos:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;java -Xmx[MEGABYTES_DE_MEM_PARA_LA_TAREA]M -cp [PATH_A_weka.jar] [ALGORITMO_DE_APRENDIZAJE] -l [FICHERO_CON_EL_MODELO] -T [FICHERO_A_CLASIFICAR] -p 0&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;En mi caso:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;java -Xmx1024M -cp /opt/weka-3-4-9/weka.jar  weka.classifiers.trees.J48 -l rweka.model -T rweka.arff -p 0&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Este paso nos retornará por la salida estándar la clasificación de cada elemento del fichero en una línea con el número de este elemento en primer lugar, seguido de la clase que asigna el algoritmo y de información adicional:&lt;br /&gt;[NÚMERO_ELEMENTO] [CLASE_ASIGNADA] [CONFIANZA_EN_LA_RESPUESTA] [CLASE_REAL]&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Notas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Los archivos con los datos de entrenamiento y de clasificación han de estar en formato &lt;a href=&quot;http://www.cs.waikato.ac.nz/~ml/weka/arff.html&quot;&gt;ARFF&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;</description><link>http://spejman.blogspot.com/2007/02/ejecutar-weka-desde-linea-de-comandos.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9446919.post-5586328823775489686</guid><pubDate>Thu, 22 Feb 2007 09:25:00 +0000</pubDate><atom:updated>2007-02-22T10:32:00.339+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">hosting</category><category domain="http://www.blogger.com/atom/ns#">rails</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">RubyOnRails</category><title>Configurar capistrano en servidores compartidos</title><description>Esta es la configuración de capistrano para desplegar una aplicación en &lt;a href=&quot;http://www.site5.com/affiliates/idevaffiliate.php?id=1525_5&quot;&gt;Site5&lt;/a&gt; cuando tenemos el código en un repositorio subversion. Posiblemente puede utilizarse en otros servidores compartidos con ligeras modificaciones.&lt;br /&gt;&lt;br /&gt;Para escribir este post he realizado un despliegue real de una aplicación, he consultado el tutorial que encontré en http://www.thebitguru.com/articles/9-Setting+up+Capistrano+on+Site5 y he utilizado el soporte de los técnicos de &lt;a href=&quot;http://www.site5.com/affiliates/idevaffiliate.php?id=1525_5&quot;&gt;Site5&lt;/a&gt; que me han ayudado durante el proceso con un problema de permisos que había en el servidor.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;i&gt;(este punto es específico de &lt;a href=&quot;http://www.site5.com/affiliates/idevaffiliate.php?id=1525_5&quot;&gt;Site5&lt;/a&gt;)&lt;/i&gt; Pedir que te cambien el shell por defecto de jailshell a bash.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Configurar el entorno de desarrollo: desde el subdirectorio de tu aplicación rails ejecutar &lt;code&gt; cap --apply-to . NOMBRE_APLICACION&lt;/code&gt; este comando generará:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;exists  config&lt;br /&gt;create  config/deploy.rb&lt;br /&gt;exists  lib/tasks&lt;br /&gt;create  lib/tasks/capistrano.rake&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Editar las opciones de configuración: en el archivo config/deploy.rb&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Indicar la URL del repositorio subversion:&lt;br /&gt;&lt;code&gt;set :repository, &quot;svn+ssh://USUARIO@DOMINIO/RUTA_DEL_REPOSITORIO&quot;&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Poner las direcciones de cada rol de tu aplicación (web, app, db). Típicamente solo se utilizan :web y :app poniendoles el nombre del dominio (por ejemplo &quot;bee.com.es&quot; ).&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Descomentar la linea &quot;deploy_set&quot; indicándole la ruta correcta hacia el subdirectorio del servidor donde quieres que se instale la aplicación, por ejemplo:&lt;br /&gt;&lt;code&gt;set :deploy_to, &quot;/home/TU_USERNAME/apps/#{application}&quot;&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Si el username del servidor es diferente del de la máquina desde donde usarás capistrano, descomenta la línea &quot;user&quot; y pon tu username:&lt;br /&gt;&lt;code&gt;set :user, &quot;TU_USERNAME&quot;&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Añadir las siguientes tareas de capistrano al final del archivo:&lt;br /&gt;&lt;code&gt;desc &quot;Link in the production database.yml and fix permissions&quot; &lt;br /&gt;task :after_update_code do&lt;br /&gt;  run &quot;find #{release_path}/public -type d -exec chmod 0755 {} \\;&quot;&lt;br /&gt;  run &quot;find #{release_path}/public -type f -exec chmod 0644 {} \\;&quot;&lt;br /&gt;  run &quot;chmod 0755 #{release_path}/public/dispatch.*&quot; &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;desc &quot;Restart the web server. Overrides the default task for Site5 use.&quot; &lt;br /&gt;task :restart, :roles =&gt; :app do&lt;br /&gt;  run &quot;chmod 755 #{current_path}/public/dispatch.fcgi&quot; &lt;br /&gt;  run &quot;touch #{current_path}/public/dispatch.fcgi&quot; &lt;br /&gt;end&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Configurar el servidor: Ejecutar desde la raiz de la aplicación el comando &lt;code&gt;cap setup&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cambiar la linea de public/.htaccess:&lt;br /&gt;&lt;code&gt;RewriteRule ^(.*)$ dispatch.cgi [QSA,L]&lt;/code&gt;&lt;br /&gt;por:&lt;br /&gt;&lt;code&gt;RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]&lt;/code&gt;&lt;br /&gt;Fíjate que solo es cambiar la extensión .cgi por .fcgi&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Listo! ahora para desplegar tu aplicación solo tienes que ejecutar desde la raiz de la aplicación el comando &lt;code&gt;cap deploy&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Posibles errores:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Si el protocolo de tu repositorio subversion es svn+ssh, es decir, utiliza ssh tienes que pedir que te perimitan realizar ssh desde el servidor porque por defecto lo tienen deshabilitado.&lt;/li&gt;&lt;/ul&gt;</description><link>http://spejman.blogspot.com/2007/02/configurar-capistrano-en-servidores.html</link><author>noreply@blogger.com (Spejman)</author><thr:total>1</thr:total></item></channel></rss>