<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9446919</id><updated>2012-01-26T16:38:11.723+01:00</updated><category term='linux'/><category term='ruby'/><category term='feeds'/><category term='conferenciarails2007'/><category term='bn4r'/><category term='postgresql'/><category term='weka'/><category term='railsconfeurope2007'/><category term='gentoo'/><category term='text-to-speech'/><category term='conferenciarails'/><category term='bases de datos'/><category term='hosting'/><category term='inteligenciaArtificial'/><category term='RubyOnRails'/><category term='general'/><category term='serp'/><category term='seo'/><category term='rdoc ruby rubyonrails'/><category term='conferenciarails2006'/><category term='festivaltts4r'/><category term='festivalttsOnRails'/><category term='bee.com.es'/><category term='amazon'/><category term='rails'/><category term='metarails'/><category term='hlt'/><category term='gga4r'/><category term='ubuntu'/><category term='capistrano'/><category term='algoritmosGeneticos'/><category term='windows vista'/><title type='text'>Spejman's Blog</title><subtitle type='html'>Web2.0, Ruby on Rails, Ubuntu Linux  y alguna cosa más ...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>68</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9446919.post-5935323281986549875</id><published>2008-06-17T11:27:00.003+02:00</published><updated>2008-06-17T11:33:43.882+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bases de datos'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>Copiar o hacer backup en postgresql de una base de datos</title><content type='html'>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!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-5935323281986549875?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/5935323281986549875/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=5935323281986549875' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5935323281986549875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5935323281986549875'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2008/06/copiar-o-hacer-backup-en-postgresql-de.html' title='Copiar o hacer backup en postgresql de una base de datos'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-2146595682111113738</id><published>2008-02-04T20:20:00.000+01:00</published><updated>2008-02-04T20:21:09.472+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rdoc ruby rubyonrails'/><title type='text'>Rdoc, el generador de documentación de Ruby</title><content type='html'>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 "doc". 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 "doc".&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="http://rdoc.sourceforge.net/"&gt;rdoc.sourceforge.net&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-2146595682111113738?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/2146595682111113738/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=2146595682111113738' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/2146595682111113738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/2146595682111113738'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2008/02/rdoc-el-generador-de-documentacin-de.html' title='Rdoc, el generador de documentación de Ruby'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-1110211503317206591</id><published>2008-02-01T21:30:00.000+01:00</published><updated>2008-02-01T21:30:17.023+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conferenciarails2007'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><category scheme='http://www.blogger.com/atom/ns#' term='conferenciarails'/><title type='text'>Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web</title><content type='html'>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="http://www.verycocinar.com"&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="http://www.slideshare.net/spejman/inteligencia-artificial-y-ruby-on-rails-mejora-la-publicidad-de-tu-web"&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="http://2007.conferenciarails.org/videos/02_Rails_Hispana_2007_Sala2_Inteligencia_Artificial.wmv"&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!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-1110211503317206591?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/1110211503317206591/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=1110211503317206591' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/1110211503317206591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/1110211503317206591'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2008/02/inteligencia-artificial-y-ruby-on-rails.html' title='Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-6848061830707194571</id><published>2007-11-22T14:07:00.000+01:00</published><updated>2007-11-22T14:14:09.642+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conferenciarails2007'/><category scheme='http://www.blogger.com/atom/ns#' term='conferenciarails'/><title type='text'>Conferencia Rails Hispana 2007</title><content type='html'>&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&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="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&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="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;&lt;br /&gt;&lt;a href="http://www.conferenciarails.org/"&gt;&lt;img src="http://www.conferenciarails.org/images/badges/ponente.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&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="http://ponencias.conferenciarails.org/charlas/ver/9" class="confirmada"&gt;Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web&lt;/a&gt;&lt;/p&gt;  &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-6848061830707194571?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/6848061830707194571/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=6848061830707194571' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/6848061830707194571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/6848061830707194571'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/11/conferencia-rails-hispana-2007.html' title='Conferencia Rails Hispana 2007'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-3344813164246897282</id><published>2007-09-03T22:08:00.000+02:00</published><updated>2007-09-03T22:13:03.802+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='festivalttsOnRails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>La aplicación Rails que habla</title><content type='html'>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="http://festivaltts4r.rubyforge.org/"&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="http://thetalkingrailsapp.sergioespeja.com/"&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!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-3344813164246897282?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/3344813164246897282/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=3344813164246897282' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/3344813164246897282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/3344813164246897282'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/09/la-aplicacin-rails-que-habla.html' title='La aplicación Rails que habla'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-4744681575479072897</id><published>2007-07-11T12:04:00.001+02:00</published><updated>2007-07-11T12:05:39.406+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='metarails'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>MetaQuerier Beta</title><content type='html'>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="misp_compose_9" class="hm"&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="http://rails-engines.org/"&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="http://localhost:3000/meta_querier"&gt; http://localhost:3000/meta_querier&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm2.static.flickr.com/1067/774811969_2858515e0d.jpg" style="margin: 0pt auto 10px; display: block; text-align: center;" title="MetaQuerier " build="" query="" screenshoot="" /&gt;&lt;br /&gt;Guardarlas parametrizadas (Save):&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm2.static.flickr.com/1113/775687160_2d21201b70.jpg" style="margin: 0pt auto 10px; display: block; text-align: center;" title="MetaQuerier " save="" query="" screenshoot="" /&gt;&lt;br /&gt;Ver un listado de las queries que existen (List):&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm2.static.flickr.com/1294/775687238_e6bb9b32e6.jpg" style="margin: 0pt auto 10px; display: block; text-align: center;" title="MetaQuerier " list="" queries="" screenshoot="" /&gt;&lt;br /&gt;Ejecutar las queries (Run):&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm2.static.flickr.com/1114/775687094_4da91ccfae.jpg" style="margin: 0pt auto 10px; display: block; text-align: center;" title="MetaQuerier " run="" query="" screenshoot="" /&gt;&lt;img src="http://farm2.static.flickr.com/1159/775687022_0d5162d882.jpg" style="margin: 0pt auto 10px; display: block; text-align: center;" title="MetaQuerier " query="" result="" screenshoot="" /&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'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="http://meta-rails.rubyforge.org"&gt;http://meta-rails.rubyforge.org&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-4744681575479072897?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/4744681575479072897/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=4744681575479072897' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/4744681575479072897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/4744681575479072897'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/07/metaquerier-beta.html' title='MetaQuerier Beta'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-2842884480504282372</id><published>2007-06-15T15:01:00.000+02:00</published><updated>2007-06-15T15:17:58.603+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='railsconfeurope2007'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Mi charla ha sido seleccionada para la Railsconf Europe 2007</title><content type='html'>La propuesta "&lt;a href="http://www.railsconfeurope.com/cs/railseurope2007/view/e_sess/14415"&gt;Making Rails More (Artificially) Intelligent&lt;/a&gt;" ha sido elegida para presentarla en la &lt;a href="http://www.railsconfeurope.com"&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 ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-2842884480504282372?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/2842884480504282372/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=2842884480504282372' title='8 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/2842884480504282372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/2842884480504282372'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/06/mi-charla-ha-sido-seleccionada-para-la.html' title='Mi charla ha sido seleccionada para la Railsconf Europe 2007'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-5929184544019326232</id><published>2007-06-12T07:30:00.000+02:00</published><updated>2007-06-12T07:49:02.447+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='festivaltts4r'/><category scheme='http://www.blogger.com/atom/ns#' term='text-to-speech'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='festivalttsOnRails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Voz en tus aplicaciones Ruby on Rails</title><content type='html'>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 "Talk me!" %&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 "rubygems"&lt;br /&gt;require "festivaltts4r"&lt;br /&gt;    &lt;br /&gt;"I'm talking".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="http://www.cstr.ed.ac.uk/projects/festival/"&gt;Festival TTS&lt;/a&gt; y &lt;a href="http://lame.sourceforge.net/index.php"&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="http://www.estvideo.com/dew/index/2005/02/16/370-player-flash-mp3-leger-comme-une-plume"&gt;dew&lt;/a&gt; con la licencia &lt;a href="http://creativecommons.org/licenses/by-sa/2.0/fr/deed.fr"&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="http://festivaltts4r.rubyforge.org/"&gt;festivaltts4r.rubyforge.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-5929184544019326232?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/5929184544019326232/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=5929184544019326232' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5929184544019326232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5929184544019326232'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/06/voz-en-tus-aplicaciones-ruby-on-rails.html' title='Voz en tus aplicaciones Ruby on Rails'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-4488331212795313769</id><published>2007-06-05T12:00:00.000+02:00</published><updated>2007-06-05T11:55:32.949+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Dibujar con Ruby y Scribble!</title><content type='html'>Viendo el blog de nuevo blog de _why (http://hackety.org) descubrí &lt;a href="http://nex3.leeweiz.net/posts/3"&gt;Scribble!&lt;/a&gt; que es una versión en Ruby de &lt;a href="http://nodebox.net/code/index.php/Home"&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="http://farm1.static.flickr.com/222/516610626_0766a79444.jpg" width="435" height="500" alt="Scribble! Screenshot" /&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 ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-4488331212795313769?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/4488331212795313769/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=4488331212795313769' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/4488331212795313769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/4488331212795313769'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/06/dibujar-con-ruby-y-scribble.html' title='Dibujar con Ruby y Scribble!'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-6803718633477694679</id><published>2007-05-28T12:20:00.000+02:00</published><updated>2007-05-28T12:25:54.671+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Palabras reservadas de MySQL como nombre de modelo</title><content type='html'>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 'databases (`id` int(11) DEFAULT NULL &lt;br /&gt;auto_increment PRIMARY KEY, `created_on` da' 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="http://hasmanythrough.com"&gt;Josh Susser&lt;/a&gt; (&lt;a href="http://hasmanythrough.com/layingtracks/LayingTracks.pdf"&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="dev.rubyonrails.org"&gt;trac de Rails&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dev.rubyonrails.org/ticket/7850"&gt;&lt;span style="text-decoration: line-through"&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="http://dev.rubyonrails.org/ticket/4905"&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="http://dev.rubyonrails.org/ticket/3631"&gt;&lt;span style="text-decoration: line-through"&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="http://dev.rubyonrails.org/ticket/1633"&gt;&lt;span style="text-decoration: line-through"&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 "no usar palabras reservadas", 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 "database", "exist", etc ...) y el parche también existe (#4905). Entoces,&lt;br /&gt;que se debe hacer ahora para arreglar este problema?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-6803718633477694679?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/6803718633477694679/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=6803718633477694679' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/6803718633477694679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/6803718633477694679'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/05/palabras-reservadas-de-mysql-como.html' title='Palabras reservadas de MySQL como nombre de modelo'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-7936770883693084211</id><published>2007-05-12T19:32:00.000+02:00</published><updated>2007-05-15T11:11:36.476+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='feeds'/><title type='text'>Copia de seguridad de bloglines</title><content type='html'>Si eres usuario de &lt;a href="http://www.bloglines.com"&gt;bloglines&lt;/a&gt; (lector de feeds online) probablemente guardes los posts que te parezcan interesantes utilizando la opción "keep new".&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="http://mechanize.rubyforge.org/mechanize/"&gt;mechanize&lt;/a&gt; y &lt;a href="http://code.whytheluckystiff.net/hpricot/"&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 "rubygems"&lt;br /&gt;require "hpricot"&lt;br /&gt;require "json"&lt;br /&gt;require "mechanize"&lt;br /&gt;require "active_support"&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 = "" )&lt;br /&gt; tree_base.each do |tree|&lt;br /&gt; if tree["kids"]&lt;br /&gt;  read_tree tree["kids"], label + "/" + tree["n"]&lt;br /&gt;  else&lt;br /&gt;  @feeds &lt;&lt; [tree["n"], label, tree["kn"], "http://www.bloglines.com/myblogs_display?sub=#{tree["id"]}&amp;site=#{tree["sid"]}"]&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'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 'http://www.bloglines.com/login'&lt;br /&gt;&lt;br /&gt;form = page.forms[1]&lt;br /&gt;form.email = 'EMAIL'&lt;br /&gt;form.password = 'PASSWORD'&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 "http://www.bloglines.com/myblogs_subs"&lt;br /&gt;start_text = "var initTreeData = "&lt;br /&gt;end_text = "\n;\n"&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("\\","")&lt;br /&gt;@feeds = []&lt;br /&gt;read_tree(feeds_tree["kids"])&lt;br /&gt;&lt;br /&gt;puts "&amp;lt;bloglines_saves&amp;gt;"&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/"body")/"td.article")&lt;br /&gt; next if content.empty?&lt;br /&gt; puts "&amp;lt;feed name=\"#{feed[0].strip}\" folder=\"#{feed[1].strip}\"&amp;gt;"&lt;br /&gt; &lt;br /&gt; # Iterate each saved feed post&lt;br /&gt; ((doc/"body")/"a.bl_itemtitle").each_with_index do |title, index|&lt;br /&gt;  puts "&amp;lt;feed_save title=\"#{title.inner_html.strip}\" href=\"#{title.attributes["href"]}\"&amp;gt;"&lt;br /&gt;  puts content[index].inner_html.to_xs&lt;br /&gt;  puts "&amp;lt;/feed_save&amp;gt;"&lt;br /&gt; end&lt;br /&gt; puts "&amp;lt;/feed&amp;gt;"&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;puts "&amp;lt;/bloglines_saves&amp;gt;"&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="http://code.whytheluckystiff.net/hpricot/"&gt;http://code.whytheluckystiff.net/hpricot/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Mechanize: &lt;a href="http://mechanize.rubyforge.org/mechanize/"&gt;http://mechanize.rubyforge.org/mechanize/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-7936770883693084211?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/7936770883693084211/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=7936770883693084211' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/7936770883693084211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/7936770883693084211'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/05/copia-de-seguridad-de-bloglines.html' title='Copia de seguridad de bloglines'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-6433897626139081853</id><published>2007-05-10T20:12:00.000+02:00</published><updated>2007-05-10T20:17:57.878+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Instalar sqlite3 para rails en Ubuntu</title><content type='html'>&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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-6433897626139081853?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/6433897626139081853/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=6433897626139081853' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/6433897626139081853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/6433897626139081853'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/05/instalar-sqlite3-para-rails-en-ubuntu.html' title='Instalar sqlite3 para rails en Ubuntu'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-8993245639415643913</id><published>2007-05-03T20:50:00.000+02:00</published><updated>2007-05-03T20:47:00.718+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inteligenciaArtificial'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><category scheme='http://www.blogger.com/atom/ns#' term='hlt'/><title type='text'>Congreso NAACL HLT 2007</title><content type='html'>La semana pasada estuve en el congreso &lt;a href="http://www.cs.rochester.edu/meetings/hlt-naacl07/"&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 ("Automatic Acquisition of Grammatical Types for Nouns", BEL, N.; ESPEJA, S.; MARIMON, M. &lt;a href="http://www.upf.edu/pdi/iula/sergio.espeja/pdf/NAACL_HLT_AAGTN.pdf"&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="http://www.flickr.com/photos/spejman/482919688/"&gt;&lt;img src="http://farm1.static.flickr.com/194/482919688_de547088b0_m.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Rochester:&lt;/em&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/spejman/482919694/"&gt;&lt;img src="http://farm1.static.flickr.com/218/482919694_d1fd258d72_m.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;American way of life:&lt;/em&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/spejman/482919702/"&gt;&lt;img src="http://farm1.static.flickr.com/186/482919702_587abaf9f5_m.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Cataratas del niagara:&lt;/em&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/spejman/482919710/"&gt;&lt;img src="http://farm1.static.flickr.com/181/482919710_9d60472630_m.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-8993245639415643913?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/8993245639415643913/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=8993245639415643913' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/8993245639415643913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/8993245639415643913'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/05/congreso-naacl-hlt-2007.html' title='Congreso NAACL HLT 2007'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-1444687084591071757</id><published>2007-05-02T11:05:00.000+02:00</published><updated>2007-05-02T11:08:42.188+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='hosting'/><title type='text'>Cambio de precios en Amazon S3</title><content type='html'>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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-1444687084591071757?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/1444687084591071757/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=1444687084591071757' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/1444687084591071757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/1444687084591071757'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/05/cambio-de-precios-en-amazon-s3.html' title='Cambio de precios en Amazon S3'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-5513701923329306939</id><published>2007-04-19T19:27:00.000+02:00</published><updated>2007-05-16T20:25:26.228+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Instalar Ubuntu 7.04 Feisty Fawn</title><content type='html'>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="http://www.getautomatix.com/"&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!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-5513701923329306939?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/5513701923329306939/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=5513701923329306939' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5513701923329306939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5513701923329306939'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/04/instalar-ubuntu-704-feisty-fawn.html' title='Instalar Ubuntu 7.04 Feisty Fawn'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-6483096502394777654</id><published>2007-04-18T08:33:00.000+02:00</published><updated>2007-04-18T09:22:46.566+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Crear controladores y vistas en plugins Ruby on Rails</title><content type='html'>Uno de los plugins que forman el proyecto meta-rails (&lt;a href="http://meta-rails.rubyforge.org"&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 = "#{RAILS_ROOT}/vendor/plugins/NOMBRE_DEL_PLUGIN"&lt;br /&gt;controller_path = File.join(directory, 'app', 'controllers')&lt;br /&gt;require "#{controller_path}/NOMBRE_DEL_CONTROLADOR.rb"&lt;br /&gt;$LOAD_PATH &lt;&lt; controller_path&lt;br /&gt;if defined?(RAILS_GEM_VERSION) and RAILS_GEM_VERSION &gt;= '1.2.0'&lt;br /&gt;  Dependencies.load_paths &lt;&lt; controller_path&lt;br /&gt;else&lt;br /&gt;  raise "Engines plugin is needed for running NOMBRE_DEL_PLUGIN with \&lt;br /&gt;  a Ruby on Rails version &lt; 1.2.0" if Dir["#{RAILS_ROOT}/vendor/plugins/engines"].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="http://rails-engines.org"&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; "Funciona!"&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 = "#{RAILS_ROOT}/vendor/plugins/meta_querier/app/views/"&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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-6483096502394777654?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/6483096502394777654/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=6483096502394777654' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/6483096502394777654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/6483096502394777654'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/04/crear-controladores-y-vistas-en-plugins.html' title='Crear controladores y vistas en plugins Ruby on Rails'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-8331253246362187840</id><published>2007-04-11T10:26:00.000+02:00</published><updated>2007-04-11T10:45:44.674+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><category scheme='http://www.blogger.com/atom/ns#' term='capistrano'/><title type='text'>Logs del servidor con capistrano</title><content type='html'>Acabo de probar esta "receta"  para capistrano publicada por &lt;a href="http://drnicwilliams.com/2007/04/10/capistrano-variables/"&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="ruby"&gt;# logs&lt;br /&gt;desc "Devuelve las últimas líneas del archivo de log. Uso: cap log [-s lines=200] [-s rails_env=production]"&lt;br /&gt;task :log do&lt;br /&gt;  lines     = configuration.variables[:lines] || 200&lt;br /&gt;  rails_env = configuration.variables[:rails_env] || 'production'&lt;br /&gt;  run "tail -n #{lines} #{current_path}/log/#{rails_env}.log" 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="http://drnicwilliams.com/2007/04/10/capistrano-variables/"&gt;DrNic: Capistrano variables&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://manuals.rubyonrails.com/read/book/17"&gt;Manual de capistrano&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-8331253246362187840?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://drnicwilliams.com/2007/04/10/capistrano-variables/' title='Logs del servidor con capistrano'/><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/8331253246362187840/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=8331253246362187840' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/8331253246362187840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/8331253246362187840'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/04/logs-del-servidor-con-capistrano.html' title='Logs del servidor con capistrano'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-3715561173413102855</id><published>2007-04-03T21:53:00.000+02:00</published><updated>2007-04-10T12:33:25.635+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Error "no such file to load — net/https" con Ruby en Ubuntu</title><content type='html'>Cuando utilizamos librerías en ruby que llaman a "net/https" 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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-3715561173413102855?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/3715561173413102855/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=3715561173413102855' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/3715561173413102855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/3715561173413102855'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/04/error-no-such-file-to-load-nethttps-con.html' title='Error &quot;no such file to load — net/https&quot; con Ruby en Ubuntu'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-7452827863894351110</id><published>2007-04-03T21:45:00.000+02:00</published><updated>2007-04-03T21:47:27.847+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Serializar objetos en Ruby on Rails con Active Record</title><content type='html'>&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; {'clave1' =&gt; 'atributo1', 'clave2' =&gt; 2 })&lt;br /&gt;puts ej.datos['clave2']&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="http://ar.rubyonrails.org/"&gt;http://ar.rubyonrails.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.jayfields.com/2007/03/rails-activerecord-serialize-method.html"&gt;Rails: ActiveRecord Serialize method&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.karmiccoding.com/articles/2005/11/29/querying-serialized-data-in-activerecord"&gt;Querying serialized data in ActiveRecord&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-7452827863894351110?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/7452827863894351110/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=7452827863894351110' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/7452827863894351110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/7452827863894351110'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/04/serializar-objetos-en-ruby-on-rails-con.html' title='Serializar objetos en Ruby on Rails con Active Record'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-638597543561197160</id><published>2007-03-29T10:19:00.000+02:00</published><updated>2007-03-29T13:15:50.165+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='inteligenciaArtificial'/><category scheme='http://www.blogger.com/atom/ns#' term='gga4r'/><category scheme='http://www.blogger.com/atom/ns#' term='algoritmosGeneticos'/><title type='text'>Algoritmos genéticos para Ruby (gga4r) release 0.9</title><content type='html'>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="http://gga4r.rubyforge.org/es"&gt;http://gga4r.rubyforge.org/es&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Proyecto en rubyforge: &lt;a href="http://rubyforge.org/projects/gga4r"&gt;http://rubyforge.org/projects/gga4r&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Página web en inglés: &lt;a href="http://gga4r.rubyforge.org"&gt;http://gga4r.rubyforge.org&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-638597543561197160?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/638597543561197160/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=638597543561197160' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/638597543561197160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/638597543561197160'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/03/algortmos-genticos-para-ruby-gga4r.html' title='Algoritmos genéticos para Ruby (gga4r) release 0.9'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-8122975008907462267</id><published>2007-03-28T23:05:00.000+02:00</published><updated>2007-03-28T23:16:22.262+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Estreno template! Hemingway modificado</title><content type='html'>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="http://tabo.aurealsys.com/templates/hemingway-template-for-blogger/"&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="http://spejman.tumblr.com/"&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 ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-8122975008907462267?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/8122975008907462267/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=8122975008907462267' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/8122975008907462267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/8122975008907462267'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/03/estreno-template-hemingway-modificado.html' title='Estreno template! Hemingway modificado'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-5463456340434213246</id><published>2007-03-11T23:46:00.000+01:00</published><updated>2007-03-11T23:50:16.825+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows vista'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Leer y escribir en particiones de Windows Vista desde ubuntu edgy eft</title><content type='html'>Para leer y escribir en particiones con el sistema de ficheros de &lt;a href="http://es.wikipedia.org/wiki/Windows_Vista"&gt;Windows Vista&lt;/a&gt; necesitamos el driver &lt;a href="http://www.ntfs-3g.org/"&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="http://www.ubuntuforums.org/showthread.php?t=217009"&gt;http://www.ubuntuforums.org/showthread.php?t=217009&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-5463456340434213246?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/5463456340434213246/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=5463456340434213246' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5463456340434213246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5463456340434213246'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/03/leer-y-escribir-en-particiones-de.html' title='Leer y escribir en particiones de Windows Vista desde ubuntu edgy eft'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-249514885919559557</id><published>2007-03-08T21:07:00.000+01:00</published><updated>2007-03-08T21:25:39.202+01:00</updated><title type='text'>Jornadas DEISA (Distributed European Infrastructure for Supercomputing Applications)</title><content type='html'>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="https://www.deisa.org/grid/architecture.php"&gt;arquitectura DEISA&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;Entre estos supercomputadores se encuentra el &lt;a href="http://es.wikipedia.org/wiki/MareNostrum"&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="http://www.top500.org"&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="http://es.wikipedia.org/wiki/MareNostrum"&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="http://www.flickr.com/photos/spejman/414859166/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/167/414859166_139c5d89db_m.jpg" width="180" height="240" alt="Marenostrum" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/spejman/414859160/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/183/414859160_80c434aa91_m.jpg" width="240" height="180" alt="Marenostrum" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/spejman/414859174/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/126/414859174_c26b9b7e47_m.jpg" width="240" height="180" alt="Marenostrum Core" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Más fotos: &lt;a href="http://www.flickr.com/photos/spejman/tags/marenostrum/"&gt;http://www.flickr.com/photos/spejman/tags/marenostrum/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-249514885919559557?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/249514885919559557/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=249514885919559557' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/249514885919559557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/249514885919559557'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/03/jornadas-deisa-distributed-european.html' title='Jornadas DEISA (Distributed European Infrastructure for Supercomputing Applications)'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-5249171250673835268</id><published>2007-02-28T10:30:00.000+01:00</published><updated>2007-10-22T14:27:28.185+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inteligenciaArtificial'/><category scheme='http://www.blogger.com/atom/ns#' term='weka'/><title type='text'>Ejecutar weka desde linea de comandos</title><content type='html'>&lt;a href="http://www.cs.waikato.ac.nz/ml/weka/"&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="http://www.cs.waikato.ac.nz/~ml/weka/arff.html"&gt;ARFF&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-5249171250673835268?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/5249171250673835268/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=5249171250673835268' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5249171250673835268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5249171250673835268'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/02/ejecutar-weka-desde-linea-de-comandos.html' title='Ejecutar weka desde linea de comandos'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-5586328823775489686</id><published>2007-02-22T10:25:00.000+01:00</published><updated>2007-02-22T10:32:00.339+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><category scheme='http://www.blogger.com/atom/ns#' term='hosting'/><title type='text'>Configurar capistrano en servidores compartidos</title><content type='html'>Esta es la configuración de capistrano para desplegar una aplicación en &lt;a href="http://www.site5.com/affiliates/idevaffiliate.php?id=1525_5"&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="http://www.site5.com/affiliates/idevaffiliate.php?id=1525_5"&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="http://www.site5.com/affiliates/idevaffiliate.php?id=1525_5"&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, "svn+ssh://USUARIO@DOMINIO/RUTA_DEL_REPOSITORIO"&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 "bee.com.es" ).&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Descomentar la linea "deploy_set" 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, "/home/TU_USERNAME/apps/#{application}"&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 "user" y pon tu username:&lt;br /&gt;&lt;code&gt;set :user, "TU_USERNAME"&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 "Link in the production database.yml and fix permissions" &lt;br /&gt;task :after_update_code do&lt;br /&gt;  run "find #{release_path}/public -type d -exec chmod 0755 {} \\;"&lt;br /&gt;  run "find #{release_path}/public -type f -exec chmod 0644 {} \\;"&lt;br /&gt;  run "chmod 0755 #{release_path}/public/dispatch.*" &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;desc "Restart the web server. Overrides the default task for Site5 use." &lt;br /&gt;task :restart, :roles =&gt; :app do&lt;br /&gt;  run "chmod 755 #{current_path}/public/dispatch.fcgi" &lt;br /&gt;  run "touch #{current_path}/public/dispatch.fcgi" &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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-5586328823775489686?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/5586328823775489686/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=5586328823775489686' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5586328823775489686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5586328823775489686'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/02/configurar-capistrano-en-servidores.html' title='Configurar capistrano en servidores compartidos'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-683875573918967612</id><published>2007-02-13T16:30:00.000+01:00</published><updated>2007-02-13T16:33:04.465+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><title type='text'>Traducir código ruby del inglés a otros idiomas</title><content type='html'>La sintaxis de Ruby es muy cercana al lenguaje natural, esto facilita la lectura del código. Esta característica me hizo pensar la opción de traducir las palabras reservadas y los métodos de las clases más comunes de Ruby.&lt;br /&gt;&lt;br /&gt;Esto permitiría acercar Ruby a más gente a parte de simplificar el desarrollo y mantenimiento de aplicaciones en comunidades no anglo parlantes.&lt;br /&gt;&lt;br /&gt;Te imaginas:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;vector_de_palabras.cada_uno haz |palabra|&lt;br /&gt; imprime palabra&lt;br /&gt;fin&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;En lugar de:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;vector_de_palabras.each do |palabra|&lt;br /&gt; print palabra&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Esta idea tiene a priori ventajas/inconvenientes&lt;br /&gt;&lt;br /&gt;Ventajas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Código más legible por no anglo parlantes&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Código más fácil de desarrollar&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Mayor mantenibilidad&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Inconvenientes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Código menos estándar&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Decisiones a tomar en cuenta para implementarlo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Traducir sólo los métodos o traducir también palabras reservadas y sintaxis.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cómo interpretar el nuevo código:&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Crear versiones del interprete de ruby&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Crear un parser que transforme el nuevo código ruby a código ruby estandar&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Crear un DSL.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Utilizar o no acentos, dieresis, etc.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;He creado un proyecto en rubyforge llamado &lt;a href="http://poliglota.rubyforge.org"&gt;políglota&lt;/a&gt; dónde organizar toda la información, ficheros y código relacionados.&lt;br /&gt;&lt;br /&gt;La idea es crear un framework que permita traducir ruby a varios lenguajes, cuento con la ayuda de traductores titulados, gracias a ellos podremos conseguir unas traducciones más correctas.&lt;br /&gt;&lt;br /&gt;Como puedes ver es una propuesta todavía muy verde, espero que te parezca interesante! Si quieres puedes colaborar explicándome tus impresiones en los comentarios o desarrollando partes del proyecto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-683875573918967612?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/683875573918967612/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=683875573918967612' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/683875573918967612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/683875573918967612'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/02/traducir-cdigo-ruby-otros-lenguajes.html' title='Traducir código ruby del inglés a otros idiomas'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-4838324845570240565</id><published>2007-02-08T13:10:00.000+01:00</published><updated>2007-02-08T13:58:43.521+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Generador automático de consultas en Ruby on Rails</title><content type='html'>Estoy intentando hacer una especie de query builder en ruby on rails que permita al usuario crear consultas a la base de datos teniendo en cuenta todas las tablas y sus atributos.&lt;br /&gt;&lt;br /&gt;Haciéndolo estoy aprendiendo mucho del código interno de &lt;a href="http://es.wikipedia.org/wiki/ActiveRecord"&gt;ActiveRecord&lt;/a&gt;, os comento un par de trucos que he aprendido y alguna duda que me ha surgido.&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;¿Cómo sabe ActiveRecord las columnas de las tablas que forman los métodos de sus objetos?&lt;/b&gt; En mysql utiliza la query "SHOW FIELDS FROM nombre_tabla" y lo hace en el método &lt;code&gt;ActiveRecord::Base.connection.columns(nombre_tabla)&lt;/code&gt;.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;¿Cómo saber las tablas que hay actualmente en la bd?&lt;/b&gt; Para saber esto he utilizado la sentencia sql de mysql "SHOW TABLES", ejecutando &lt;code&gt;ActiveRecord::Base.connection.select_values("SHOW TABLES")&lt;/code&gt; obtenemos un array con todos los nombres de las tablas que hay en la bd.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;¿Cómo saber que objetos ActiveRecord válidos hay en la aplicación RoR que estamos ejecutando a partir de la lista de nombres de tablas?&lt;/b&gt; Para hacer esto utilizo el siguiente código:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  table_names.each do |table_name|&lt;br /&gt;    # comprobación de seguridad antes de hacer el eval.&lt;br /&gt;    next if table_name.include?(";") or \&lt;br /&gt;      table_name =~ /\s/&lt;br /&gt;    table_name = table_name.classify&lt;br /&gt;    begin&lt;br /&gt;      activerecord_classes_names &lt;&lt; table_name \&lt;br /&gt;         if eval("#{table_name}.class == Class")&lt;br /&gt;    rescue; end&lt;br /&gt;  end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;No se si es la mejor manera, pero no se me ocurrió ninguna otra puesto que no he encontrado ningún método que me muestre las clases que existen en la aplicación, pero debe haberlo si tu lo sabes por favor dímelo ;)&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;¿Como saber las asociaciones que tiene un objeto ActiveRecord con otros objetos ActiveRecord?&lt;/b&gt; En la clase ActiveRecord existe el método de clase "reflections" que retorna un hash con los nombres de las asociaciones apuntando a objetos del tipo ActiveRecord::Reflection::AssociationReflection que, entre otros, tienen los siguientes atributos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;class_name: Nombre de la clase destino&lt;/li&gt;&lt;br /&gt;&lt;li&gt;macro: símbolo correspondiente al tipo de relación (has_many, belongs_to, ...)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-4838324845570240565?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/4838324845570240565/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=4838324845570240565' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/4838324845570240565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/4838324845570240565'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/02/generador-automatico-de-consultas-en.html' title='Generador automático de consultas en Ruby on Rails'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-4063256518108081929</id><published>2007-01-29T12:19:00.000+01:00</published><updated>2007-01-29T12:21:14.444+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Ver que attributos tiene un objeto ActiveRecord</title><content type='html'>El plugin annotate models nos permite ver los atributos de una clase ActiveRecord (columnas de la  tabla en la base de datos)  de manera cómoda en el código de la clase. Es muy útil para no tener que estar consultando la estructura de la base de datos al olvidarnos de los métodos de una clase, de manera que podremos programar más rápido y no repetir declaraciones (DRY) ya que lo hace automáticamente.&lt;br /&gt;&lt;br /&gt;Consiste en una tarea para rake que al ejecutarla nos escribe en las cabeceras de las clases del modelo la información asociada que obtiene de la base de datos. Por ejemplo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# == Schema Information&lt;br /&gt;# Schema version: 39&lt;br /&gt;#&lt;br /&gt;# Table name: signatures&lt;br /&gt;#&lt;br /&gt;#  id                      :integer(11)   not null, primary key&lt;br /&gt;#  lema                    :string(255)  &lt;br /&gt;#  language_id             :integer(10)   default(0), not null&lt;br /&gt;#  domain_id               :integer(10)   default(0), not null&lt;br /&gt;#  created_on              :date         &lt;br /&gt;#  category_id             :integer(10)   default(0), not null&lt;br /&gt;#  linguistic_cue_group_id :integer(10)   default(0), not null&lt;br /&gt;#&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Cómo instalarlo:&lt;br /&gt;&lt;ul&gt;&lt;ol&gt;1. Instalar el plugin&lt;br /&gt;&lt;pre&gt;script/plugin install \&lt;br /&gt;http://svn.pragprog.com/Public/plugins/annotate_models&lt;/pre&gt;&lt;/ol&gt;&lt;br /&gt;&lt;ol&gt;2. Ejecutar el script que anota los modelos&lt;br /&gt;&lt;pre&gt;rake annotate_models&lt;/pre&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Referencias:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://weblog.rubyonrails.org/2006/3/3/annotated-models"&gt;http://weblog.rubyonrails.org/2006/3/3/annotated-models&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-4063256518108081929?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/4063256518108081929/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=4063256518108081929' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/4063256518108081929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/4063256518108081929'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/01/ver-que-attributos-tiene-un-objeto.html' title='Ver que attributos tiene un objeto ActiveRecord'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-1453096033866707422</id><published>2007-01-22T20:41:00.000+01:00</published><updated>2007-05-12T20:24:55.484+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='inteligenciaArtificial'/><category scheme='http://www.blogger.com/atom/ns#' term='bn4r'/><title type='text'>Redes Bayesianas para Ruby (bn4r) release 0.9</title><content type='html'>&lt;p&gt;Redes Bayesianas para Ruby (bn4r) permite crear, modificar, resolver, importar y exportar redes bayesianas, pruébalas y infiere alguna probabilidad con ellas!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Esta entrega incluye soporte para nodos con variables discretas, ahora puedes usar nodos en las redes con valores como {poco, normal, mucho, muchísimo} en lugar de {cierto, falso}&lt;br /&gt;&lt;/p&gt;&lt;p&gt;La función de exportar a &lt;a href="http://research.microsoft.com/dtas/msbn/default.htm"&gt;Microsoft Belief Network&lt;/a&gt; se ha mejorado.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Al igual que en entregas anteriores, puedes resolver tus redes mediante los algoritmos enumeration ask, prior sample, rejection sampling o likelihood weighting.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Se agradecerá ayuda con el testeo, si estás interesado puedes contactar conmigo en &lt;a href="http://rubyforge.org/projects/bn4r"&gt;http://rubyforge.org/projects/bn4r&lt;/a&gt; o en sergio.espeja ( ya sabes ... ) gmail.com.&lt;br /&gt;&lt;br /&gt;Más información:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Página web: &lt;a href="http://bn4r.rubyforge.org/es"&gt;http://bn4r.rubyforge.org/es&lt;/a&gt;&lt;a href="http://bn4r.rubyforge.org/"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Proyecto en Rubyforge : &lt;a href="http://rubyforge.org/projects/bn4r"&gt;http://rubyforge.org/projects/bn4r&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Página web en inglés: &lt;a href="http://bn4r.rubyforge.org/"&gt;http://bn4r.rubyforge.org&lt;/a&gt;&lt;a href="http://bn4r.rubyforge.org/es"&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-1453096033866707422?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/1453096033866707422/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=1453096033866707422' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/1453096033866707422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/1453096033866707422'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/01/redes-bayesianas-para-ruby-bn4r-release.html' title='Redes Bayesianas para Ruby (bn4r) release 0.9'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-4748367984639356629</id><published>2007-01-10T16:59:00.000+01:00</published><updated>2007-01-11T09:36:54.422+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>ActiveRecord: diferencias entre save, save!, create y create!</title><content type='html'>ActiveRecord define varias maneras para guardar un objeto (instancia de un modelo) en la base de datos, es importante saber como actúa cada una para luego no tener sorpresas y usar el más adecuado en cada momento.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;save&lt;/b&gt;: Devuelve &lt;em&gt;true&lt;/em&gt; si el objeto se ha guardado correctamente, o &lt;em&gt;nil&lt;/em&gt; en caso contrario. No genera ninguna excepción.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;save!&lt;/b&gt;: Devuelve &lt;em&gt;true&lt;/em&gt; si el objeto se ha guardado correctamente, y si no ha podido guardarse lanza una excepción con el error.&lt;br /&gt;Esta excepción es del tipo &lt;em&gt;ActiveRecord::RecordInvalid&lt;/em&gt;, se lanza principalmente cuando hay errores de validación (campo obligatorio vacío, email no válido, etc ...) y la podemos usar para mostrar el error al usuario.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;create&lt;/b&gt;: Retorna siempre el objeto independientemente de que se haya guardado con éxito o no, tenemos que consultar el objeto por si ha ocurrido algún error de validación.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;create!&lt;/b&gt;: Aparece en Rails 1.2, yo no lo he podido probar todavía pero por lo que pone en Agile Web Development with Rails devuelve el objeto si se ha guardado con éxito, sino retorna una excepción al igual que &lt;em&gt;save!&lt;/em&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Más información:&lt;br /&gt;&lt;div style="text-align:center"&gt;&lt;br /&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?t=sergioespejah-20&amp;o=1&amp;p=8&amp;l=as1&amp;asins=0977616630&amp;fc1=000000&amp;IS2=1&amp;lt1=_top&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-4748367984639356629?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/4748367984639356629/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=4748367984639356629' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/4748367984639356629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/4748367984639356629'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/01/activerecord-diferencias-entre-save.html' title='ActiveRecord: diferencias entre save, save!, create y create!'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-8913290612745422411</id><published>2007-01-02T19:25:00.000+01:00</published><updated>2007-01-02T19:44:35.907+01:00</updated><title type='text'>Año nuevo, feed nuevo!</title><content type='html'>Aprovecho que cambiamos de año para publicar el feed de mi blog mediante feedburner que permite ver estadísticas del uso de tu feed entre otras cosas.&lt;br /&gt;&lt;br /&gt;Agradecería que cambiaseis la suscripción en vuestro blog reader por esta:&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/spejman"&gt;http://feeds.feedburner.com/spejman&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Muchas gracias y perdonad las molestias!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-8913290612745422411?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://feeds.feedburner.com/spejman' title='Año nuevo, feed nuevo!'/><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/8913290612745422411/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=8913290612745422411' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/8913290612745422411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/8913290612745422411'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2007/01/ao-nuevo-feed-nuevo.html' title='Año nuevo, feed nuevo!'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-7246233108904558792</id><published>2006-12-30T13:10:00.000+01:00</published><updated>2006-12-30T13:29:40.942+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Completar con el tabulador y colorear irb con Wirble</title><content type='html'>Hoy he probado Wirble siguiendo el tutorial en ingles de &lt;a href="http://www.rubyinside.com/wirble-tab-completion-and-syntax-coloring-for-irb-336.html"&gt;Ruby Inside&lt;/a&gt; y lo encuentro muy útil, sobretodo porque permite autocompletar con el tabulador! Se acabó utilizar &lt;code&gt;print objeto.methods.sort.join("\n")&lt;/code&gt; cada vez que no te acuerdas del nombre de un método.&lt;br /&gt;&lt;br /&gt;Para utilizarlo hay que instalar la gem:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;gem install -y wirble&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y si utilizas linux hay que editar el archivo ~/.irbrc y añadir:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'rubygems'&lt;br /&gt;require 'wirble'&lt;br /&gt;Wirble.init&lt;br /&gt;Wirble.colorize&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;En Windows no se como funcionará si alguien lo sabe que me lo diga y actualizo el post. En mac os supongo que funcionará igual.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-7246233108904558792?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/7246233108904558792/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=7246233108904558792' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/7246233108904558792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/7246233108904558792'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/12/completar-con-el-tabulador-y-colorear.html' title='Completar con el tabulador y colorear irb con Wirble'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-9063999177766281075</id><published>2006-12-27T11:00:00.000+01:00</published><updated>2006-12-27T12:08:37.550+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><category scheme='http://www.blogger.com/atom/ns#' term='hosting'/><title type='text'>Instalar ruby gems en servidores compartidos sin permisos de root</title><content type='html'>Para realizar esto necesitamos saber donde están alojadas actualmente las ruby gems y añadir un nuevo repositorio en un subdirectorio nuestro (por ejemplo &lt;i&gt;/home/Nombre_De_Usuario/gems&lt;/i&gt;), cambiando las variables GEM_PATH y GEM_HOME&lt;br /&gt;&lt;br /&gt;Este pequeño truco nos permite tener un servidor 100% funcional para trabajar con Ruby on Rails en servidores de hosting con precios muy competitivos como &lt;a href="http://www.site5.com/affiliates/idevaffiliate.php?id=1525_5"&gt;Site5&lt;/a&gt;, que perdonad por la publicidad pero me impresionó: ofrecen unos atractivos 5TB de transferencia al mes, 55 Gb de espacio, 55 dominios, etc por 5$ al mes si pagas 2 años por adelantado, osea 120$ pero tienes 60 días de prueba, si no te gusta te devuelven el dinero, bueno no hago más publicidad, si os interesa aquí tenéis más información: &lt;a href="http://www.site5.com/affiliates/idevaffiliate.php?id=1525_8"&gt;Site5&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Explicación paso a paso&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para ver dónde están las ruby gems actualmente hay que ejecutar el comando desde una consola en el servidor compartido:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;gem environment&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Este comando generará una salida similar a esta:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Rubygems Environment:&lt;br /&gt;- VERSION: 0.8.10 (0.8.10)&lt;br /&gt;- INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8&lt;br /&gt;- GEM PATH:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;- /usr/lib/ruby/gems/1.8&lt;br /&gt;- REMOTE SOURCES:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;- http://gems.rubyforge.org&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Una vez hemos creado el subdirectorio &lt;i&gt;/home/Nombre_De_Usuario/gems&lt;/i&gt;, podemos cambiar las variables GEM_PATH y GEM_HOME creando un archivo llamado &lt;i&gt;.gemrc&lt;/i&gt; en nuestra carpeta personal &lt;i&gt;/home/Nombre_De_Usuario&lt;/i&gt;. El formato del archivo .gemrc es YAML, por lo que tiene que ser como el siguiente cambiando Nombre_De_Usuario y /usr/lib/ruby/gems/1.8 por nuestro nombre de usuario y por el anterior GEM PATH (que hemos averiguado con el comando &lt;code&gt;gem environment&lt;/code&gt;) respectivamente.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;.gemrc&lt;/b&gt;:&lt;br /&gt;&lt;code&gt;gemhome: /home/Nombre_De_Usuario/gems&lt;br /&gt;gempath:&lt;br /&gt;- /home/Nombre_De_Usuario/gems&lt;br /&gt;- /usr/lib/ruby/gems/1.8&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Si ahora ejecutamos &lt;code&gt;gem environment&lt;/code&gt; obtenemos:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Rubygems Environment:&lt;br /&gt;- VERSION: 0.8.10 (0.8.10)&lt;br /&gt;- INSTALLATION DIRECTORY: /home/Nombre_De_Usuario/gems&lt;br /&gt;- GEM PATH:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;- /home/Nombre_De_Usuario/gems&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;- /usr/lib/ruby/gems/1.8&lt;br /&gt;- REMOTE SOURCES:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;- http://gems.rubyforge.org&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Mas información:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://forums.site5.com/showthread.php?t=11954&amp;highlight=ruby+gem"&gt;http://forums.site5.com/showthread.php?t=11954&amp;highlight=ruby+gem&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.nanorails.com/articles/2006/08/12/install-your-own-ruby-on-a-shared-host"&gt;http://blog.nanorails.com/articles/2006/08/12/install-your-own-ruby-on-a-shared-host&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-9063999177766281075?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/9063999177766281075/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=9063999177766281075' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/9063999177766281075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/9063999177766281075'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/12/instalar-ruby-gems-en-servidores.html' title='Instalar ruby gems en servidores compartidos sin permisos de root'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-1424006302669557862</id><published>2006-12-20T20:00:00.001+01:00</published><updated>2009-05-07T18:28:59.569+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Autenticación o login de usuarios en Ruby on Rails</title><content type='html'>Existe un plugin para Ruby on Rails llamado Acts As Authenticated que nos ahorra la siempre repetitiva tarea de la autenticación ( login ) de usuarios en RoR, crea el modelo para el usuario, el controlador y las vistas para realizar login, logout, comprobar si el usuario esta autenticado, etc ...&lt;br /&gt;&lt;br /&gt;La instalación es simple, ejecutar los siguientes comandos desde la raíz de la aplicación rails:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Descargar el código del repositorio subversion:&lt;br /&gt;&lt;code&gt;script/plugin source http://svn.techno-weenie.net/projects/plugins&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Instalar el plugin&lt;br /&gt;&lt;code&gt;script/plugin install acts_as_authenticated&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Generar el modelo User y el controlador Account&lt;br /&gt;&lt;code&gt;script/generate authenticated user account&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Crear la tabla de usuarios en la base de datos&lt;br /&gt;&lt;code&gt;rake migrate&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Para configurarlo y empezarlo a usar tenemos que mover la linea que pone "include AuthenticatedSystem" de /app/controllers/account_controller.rb a /app/controllers/aplication.rb&lt;br /&gt;&lt;br /&gt;Finalmente tenemos que decidir si queremos añadir autenticación a por defecto a todas las páginas y explicitar las páginas que queremos que sean públicas, o tener por defecto todas las páginas públicas y marcar las páginas que queremos autenticar una a una.&lt;br /&gt;&lt;br /&gt;Para la primera opción tenemos que añadir la linea "before_filter :login_required" en /app/controllers/aplication.rb y la línea "skip_before_filter :login_required" en los controladores de las páginas que queremos que sean públicas.&lt;br /&gt;&lt;br /&gt;Si por el contrario deseamos que todas las páginas sean por defecto públicas, debemos explicitar en las páginas que queremos autenticación añadiendo la línea "before_filter :login_required" en su controlador:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class MiPaginaProtegidaController &lt; ApplicationController&lt;br /&gt;  before_filter :login_required&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Si queremos autenticar solo algunas acciones dentro del controlador, podemos usar el parámetro  "only" de la función "login_required". Por ejemplo si sólo queremos que se necesite autenticación en las acciones edit y update del controlador:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class MiPaginaProtegidaController &lt; ApplicationController&lt;br /&gt;  before_filter :login_required, :only =&gt; [ :edit, :update ]&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;El único problema que le he encontrado a este plugin es que el formulario de login ( /app/views/account/login.rhtml) no funciona, debeis reemplazarlo por:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&amp;#60;%= start_form_tag %&gt;&lt;br /&gt;&amp;#60;p&amp;#62;&amp;#60;label for="login"&amp;#62;Login&amp;#60;/label&amp;#62;&amp;#60;br/&amp;#62;&lt;br /&gt;&lt;br /&gt;&amp;#60;%= text_field_tag 'login' %&gt;&amp;#60;/p&amp;#62;&lt;br /&gt;&lt;br /&gt;&amp;#60;p&amp;#62;&amp;#60;label for="password"&amp;#62;Password&amp;#60;/label&amp;#62;&amp;#60;br/&amp;#62;&lt;br /&gt;&amp;#60;%= password_field_tag 'password' %&gt;&lt;br /&gt;&amp;#60;/p&gt;&lt;br /&gt;&lt;br /&gt;&amp;#60;!-- Uncomment this if you want this functionality&lt;br /&gt;&amp;#60;p&amp;#62;&amp;#60;label for="remember_me"&gt;Remember me:&amp;#60;/label&amp;#62;&lt;br /&gt;&amp;#60;%= check_box_tag 'remember_me' %&gt;&amp;#60;/p&amp;#62;&lt;br /&gt;--&amp;#62;&lt;br /&gt;&lt;br /&gt;&amp;#60;p&amp;#62;&lt;br /&gt;&amp;#60;%= submit_tag 'Log in' %&gt;&amp;#60;/p&amp;#62;&lt;br /&gt;&lt;br /&gt;&amp;#60;%= end_form_tag %&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Más información (en inglés): &lt;a href="http://technoweenie.stikipad.com/plugins/show/Acts+as+Authenticated"&gt;http://technoweenie.stikipad.com/plugins/show/Acts+as+Authenticated&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-1424006302669557862?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/1424006302669557862/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=1424006302669557862' title='29 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/1424006302669557862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/1424006302669557862'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/12/autenticacin-o-login-de-usuarios-en.html' title='Autenticación o login de usuarios en Ruby on Rails'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>29</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-5857335876732399910</id><published>2006-12-19T11:22:00.000+01:00</published><updated>2006-12-19T17:30:11.699+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>¿Como convencer a alguien para que use Ruby on Rails?</title><content type='html'>Supongo que algunos de vosotros os habréis hecho esta misma pregunta, si habéis encontrado la respuesta agradecería que la pusieseis en los comentarios de este blog ;)&lt;br /&gt;&lt;br /&gt;Me explico, la semana que viene intentaré convencer a unos amigos de mi antiguo trabajo de lo que van a ganar en calidad de vida si se pasan a Ruby on Rails. Parece tarea fácil si no fuera porque están un poco hartos de oír sobre frameworks maravillosos que automatizan todo, pero que a la hora de la verdad si te sales de lo común no hacen más que aumentar el sufrimiento del programador.&lt;br /&gt;&lt;br /&gt;Mi idea es hacer unas transparencias donde mostrar por encima el mundo Ruby y Ruby on Rails, y acabar con una demo. Toda esta documentación la colgaré para ayudar a otros "evangelizadores" de Ruby on Rails ;)&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;¿Que partes de Rails destacaríais?&lt;/strong&gt; Yo he pensado centrarme en el modelo MVC, ActiveRecord, migrations y partials.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;¿Como demostraríais que Ruby mola?&lt;/strong&gt;He pensado empezar con la comparación de Ruby con C# de &lt;a href="http://rubyclr.com"&gt;rubyclr.com&lt;/a&gt; y continuar con ideas que he visto en la &lt;a href="http://www.lacoctelera.com/porras/post/2006/11/28/ruby-mola-y-que-"&gt;presentación de Sergio Gil en la conferencia rails hispana&lt;/a&gt;:&lt;ul&gt;&lt;li&gt;Cercano a nuestra forma de pensar&lt;/li&gt;&lt;li&gt;Minimiza el código:&lt;/li&gt;   &lt;ul&gt;&lt;li&gt;Menos errores de código&lt;/li&gt;&lt;li&gt;Código más bonito&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Cualquier idea que se os ocurra (ejemplos de código, característica de Ruby o de Rails a destacar, etc) puede ayudar para hacer un documento más útil.&lt;br /&gt;&lt;br /&gt;Gracias a todos por adelantado!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-5857335876732399910?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/5857335876732399910/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=5857335876732399910' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5857335876732399910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5857335876732399910'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/12/como-convencer-alguien-para-que-use.html' title='¿Como convencer a alguien para que use Ruby on Rails?'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-2386053511388909707</id><published>2006-12-11T10:46:00.000+01:00</published><updated>2006-12-15T15:19:22.988+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Cachear objetos del modelo en Ruby on Rails con Memcached en Ubuntu</title><content type='html'>Cachear objetos del modelo en Ruby on Rails es muy fácil utilizando CachedModel, que permite cachear los objetos de nuestra aplicación Rails que recuperamos uno a uno. Es decir, acelera consultas del tipo Modelo.find(:first) o Modelo.find(id).&lt;br /&gt;&lt;br /&gt;Para usarlo debemos instalar &lt;a href="http://www.danga.com/memcached/"&gt;memcached&lt;/a&gt; y hacer que nuestras clases del modelo extiendan de "CachedModel" en lugar de "ActiveRecord::Base".&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Instalar memcached en Ubuntu&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;apt-get install memcached&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Instalar la ruby gem&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo gem install cached_model&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Configurar nuestro proyecto rails&lt;/strong&gt;&lt;br /&gt;Poner la siguiente linea con el nombre de nuestro proyecto en el archivo config/environment.rb&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# Conf. CachedModel&lt;br /&gt;require 'cached_model'&lt;br /&gt;&lt;br /&gt;memcache_options = {&lt;br /&gt;  :c_threshold =&gt; 10_000,&lt;br /&gt;  :compression =&gt; true,&lt;br /&gt;  :debug =&gt; false,&lt;br /&gt;  :namespace =&gt; &lt;span style="font-weight:bold;"&gt;'NOMBRE_DE_NUESTRO_PROYECTO_RAILS',&lt;/span&gt;&lt;br /&gt;  :readonly =&gt; false,&lt;br /&gt;  :urlencode =&gt; false&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;CACHE = MemCache.new memcache_options&lt;br /&gt;CACHE.servers = 'localhost:11211'&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Cachear las clases&lt;/strong&gt;&lt;br /&gt;Substituir en cada clase del modelo que nos interese cachear donde pone "ActiveRecord::Base" por "CachedModel"&lt;br /&gt;Ejemplo:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class MiClase &lt; CachedModel&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Enlaces:&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Página de CachedModel: &lt;a href="http://dev.robotcoop.com/Libraries/cached_model/"&gt;http://dev.robotcoop.com/Libraries/cached_model/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Página de memcached: &lt;a href="http://www.danga.com/memcached/"&gt;memcached&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-2386053511388909707?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/2386053511388909707/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=2386053511388909707' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/2386053511388909707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/2386053511388909707'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/12/cachear-objetos-del-modelo-en-ruby-on.html' title='Cachear objetos del modelo en Ruby on Rails con Memcached en Ubuntu'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-5972627508904262193</id><published>2006-12-10T19:09:00.000+01:00</published><updated>2006-12-11T12:24:43.042+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Crear Ruby Gems fácilmente</title><content type='html'>Las ruby gems permiten instalar librerías de Ruby con un simple comando desde cualquier máquina que interprete Ruby y tenga ruby gems instalado.&lt;br /&gt;&lt;br /&gt;Para crear Ruby gems fácilmente podemos utilizar la librería NewGem&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Instalación:&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;gem install newgem&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Creación del esqueleto de la ruby gem&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;newgem NOMBRE_DE_LA_NUEVA_GEM&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Este script creará varios ficheros y subdirectorios necesarios para automatizar todo lo que habitualmente necesitamos para gestionar la creación y difusión de ruby gems.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Copiar el código de nuestra gem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Todo el código que queremos empaquetar en la ruby gem tenemos que copiarlo en el subdirectorio que ha creado el script anterior llamado lib/NOMBRE_DE_LA_NUEVA_GEM&lt;br /&gt;&lt;br /&gt;Esto funciona porque en el archivo &lt;span style="font-style: italic;"&gt;lib/NOMBRE_DE_LA_NUEVA_GEM.rb&lt;/span&gt; incluye automáticamente todos los archivos .rb del subdirectorio &lt;span style="font-style: italic;"&gt;lib/NOMBRE_DE_LA_NUEVA_GEM&lt;/span&gt;, magia? no, una linea en ruby:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;i&gt;lib/NOMBRE_DE_LA_NUEVA_GEM.rb:&lt;/i&gt;&lt;br /&gt;Dir[File.join(File.dirname(__FILE__), 'NOMBRE_DE_LA_NUEVA_GEM/**/*.rb')].sort.each { |lib| require lib }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. Número de versión&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Antes de generar nuestra gem es mejor indicar el número de versión de esta. El fichero &lt;span style="font-style: italic;"&gt;lib/NOMBRE_DE_LA_NUEVA_GEM/version.rb&lt;/span&gt; contiene las constantes MAYOR, MINOR y TINY. Los valores que demos a estas constantes servirán para definir la versión de la gem.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;i&gt;lib/NOMBRE_DE_LA_NUEVA_GEM/version.rb:&lt;/i&gt;&lt;br /&gt;module NOMBRE_DE_LA_NUEVA_GEM #:nodoc:&lt;br /&gt;module VERSION #:nodoc:&lt;br /&gt;  MAJOR = 0&lt;br /&gt;  MINOR = 0&lt;br /&gt;  TINY  = 1&lt;br /&gt;&lt;br /&gt;  STRING = [MAJOR, MINOR, TINY].join(’.')&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5. Crear la gem&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;rake package&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Este comando nos generará la gem con el nombre &lt;span style="font-style: italic;"&gt;NOMBRE_DE_LA_NUEVA_GEM-MAYOR.MINOR.TINY.gem&lt;/span&gt; en el subdirectorio &lt;span style="font-style: italic;"&gt;pkg&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6. Instalar la gem en nuestro sistema&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;gem install pkg/NOMBRE_DE_LA_NUEVA_GEM-MAYOR.MINOR.TINY.gem&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Si queremos que todo el mundo pueda usar nuestra gem con el comando &lt;span style="font-style: italic;"&gt;gem install NOMBRE_DE_LA_NUEVA_GEM&lt;/span&gt; tenemos que crear un proyecto en &lt;a href="http://www.rubyforge.org/"&gt;RubyForge&lt;/a&gt; y crear un fichero con la gem que acabamos de generar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-5972627508904262193?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/5972627508904262193/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=5972627508904262193' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5972627508904262193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5972627508904262193'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/12/crear-ruby-gems-fcilmente.html' title='Crear Ruby Gems fácilmente'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-4823913181234469</id><published>2006-12-05T15:04:00.000+01:00</published><updated>2006-12-10T19:09:14.767+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Instalar RMagick en Ubuntu ( gestión avanzada de imágenes en Ruby )</title><content type='html'>RMagick permite modificar y realizar efectos en imágenes desde Ruby, y por supuesto desde Ruby on Rails. Realmente RMagick es una interfície a los programas ImageMagick y GraphicsMagick que permiten realizar multitud de transformaciones a imágenes.&lt;br /&gt;&lt;br /&gt;Instalar RMagick en Ubuntu no es tan directo como instalar un paquete habitual, hay que instalar el paquete imagemagick, luego unas librerías de desarrollo y finalmente la ruby gem rmagick.&lt;br /&gt;&lt;br /&gt;1. Instalar ImageMagick&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install imagemagick&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;2. Instalar las librerías de desarrollo de ImageMagick&lt;br /&gt;2.1. Ver la versión de la librería de desarrollo de ImageMagick&lt;br /&gt;&lt;code&gt;&lt;br /&gt;dpkg -l | grep magick&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Al ejecutar este comando aparecerá por consola una linea similar a esta:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ii  libmagick9   6.2.4.5.dfsg1-0.10ubuntu0.1   Image manipulation library&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;La segunda columna indica el nombre de la librería de ImageMagick, la de desarrollo se llama igual añadiéndole el sufijo "-dev" (libmagick9-dev).&lt;br /&gt;&lt;br /&gt;2.2. Instalarla&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install libmagick9-dev&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;3. Instalar la ruby gem rmagick.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo gem install rmagick&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Para más información sobre que se puede hacer con RMagick:&lt;br /&gt;&lt;a href="http://rmagick.rubyforge.org/"&gt;http://rmagick.rubyforge.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-4823913181234469?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/4823913181234469/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=4823913181234469' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/4823913181234469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/4823913181234469'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/12/instalar-rmagick-en-ubuntu-gestin.html' title='Instalar RMagick en Ubuntu ( gestión avanzada de imágenes en Ruby )'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-2422482521918648290</id><published>2006-12-05T14:27:00.000+01:00</published><updated>2007-03-12T20:05:29.132+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Instalar Ruby on Rails en Ubuntu Edgy</title><content type='html'>&lt;span style="font-weight: bold;"&gt;1. Instalar Ruby&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este paso instala el lenguaje Ruby, los gestores de documentación de ruby rdoc y ri, y la consola interactiva de ruby irb.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install ruby ruby1.8 ruby1.8-dev rdoc ri irb&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Instalar MySQL&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;2.1. Descargar y instalar el servidor y las librerías de conexión con ruby&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install mysql-server libmysql-ruby&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;2.2. Configurarlo&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;mysqladmin -u root password NUEVO_PASSWORD&lt;br /&gt;sudo /etc/init.d/mysql restart&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;2.3. Instalar herramientas para administrar y consultar MySQL&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install mysql-query-browser mysql-admin&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;3. Instalar Ruby Gems&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ruby Gems es el sistema de gestión de paquetes de ruby que permite instalar librerias y aplicaciones ruby de manera muy simple como veremos en el punto 4. A día de hoy, Ubuntu no incluye ruby gems en sus repositorios.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;3.1 Instalar la versión 0.9.0 de rubygems&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;wget http://rubyforge.org/frs/download.php/17190/rubygems-0.9.2.tgz&lt;br /&gt;tar zxvf rubygems-0.9.2.tgz&lt;br /&gt;cd rubygems-0.9.2&lt;br /&gt;sudo ruby setup.rb&lt;br /&gt;cd ..; rm -rf rubygems-0.9.2; rm rubygems-0.9.2.tgz&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;4. Instalar Ruby on Rails&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Instalaremos Ruby on Rails mediante ruby gem:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo gem install rails --include-dependencies&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;5. Instalar un IDE de programación RoR&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El IDE que utilizo yo para programar en RoR es RadRails, puedes descargarlo en &lt;a href="http://www.radrails.org/"&gt;http://www.radrails.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Actualización:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;12-Marzo-2007&lt;/i&gt;: Actualización a nueva versión de rubygems 0.9.2&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-2422482521918648290?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/2422482521918648290/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=2422482521918648290' title='7 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/2422482521918648290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/2422482521918648290'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/12/instalar-ruby-on-rails-en-ubuntu-edgy.html' title='Instalar Ruby on Rails en Ubuntu Edgy'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-5174315167261208674</id><published>2006-11-29T09:30:00.000+01:00</published><updated>2006-11-29T09:57:43.479+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>BackgrounDRb 0.2.1 Lanzado</title><content type='html'>La versión 0.2.1 de BackgrounDRb ya está lista para descargarse en el repositorio svn:&lt;br /&gt;&lt;code&gt;http://svn.devjavu.com/backgroundrb/tags/release-0.2.1&lt;/code&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;BackgrounDRb es un framework que extrae procesos del ciclo petición/respuesta de ruby on rails. Sirve principalmente para realizar tareas en background con Ruby on Rails ( más información en &lt;a href="http://bee.com.es/espeja/conferenciarails"&gt;bee.com.es/espeja/conferenciarails&lt;/a&gt; )&lt;br /&gt;&lt;br /&gt;Esta versión corrige bugs de la versión 0.2.0 y todavía es considerada experimental.&lt;br/&gt;&lt;br /&gt;Para usarla hay que descargarse el código del svn y ponerlo en el subdirectorio de nuestra aplicación rails &lt;code&gt;/vendor/plugins/backgroundrb&lt;/code&gt;.&lt;br/&gt;&lt;br /&gt;También es necesario actualizar la librería Slave a la versión 1.1.0 ( &lt;code&gt;gem update slave&lt;/code&gt; ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-5174315167261208674?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://brainspl.at/articles/2006/11/29/backgroundrb-0-2-1-release' title='BackgrounDRb 0.2.1 Lanzado'/><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/5174315167261208674/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=5174315167261208674' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5174315167261208674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5174315167261208674'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/11/backgroundrb-021-lanzado.html' title='BackgrounDRb 0.2.1 Lanzado'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-5353321711371870701</id><published>2006-11-28T19:19:00.000+01:00</published><updated>2006-11-28T19:27:51.668+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Agile Web Development with Rails 2nd Edition</title><content type='html'>La segunda edición de Agile Web Development with Rails ya se está imprimiendo, por lo que dice &lt;a href="http://www.loudthinking.com/"&gt;DHH&lt;/a&gt; en su blog, esta última versión cubre la nueva release de Rails 1.2.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Yo ya lo he pedido, a ver cuando llega ...&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center"&gt;&lt;br /&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?t=sergioespejah-20&amp;o=1&amp;p=8&amp;l=as1&amp;asins=0977616630&amp;fc1=000000&amp;IS2=1&amp;lt1=_top&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-5353321711371870701?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/5353321711371870701/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=5353321711371870701' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5353321711371870701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/5353321711371870701'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/11/agile-web-development-with-rails-2nd.html' title='Agile Web Development with Rails 2nd Edition'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-384042856604667090</id><published>2006-11-27T19:20:00.000+01:00</published><updated>2006-11-29T09:45:03.936+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><category scheme='http://www.blogger.com/atom/ns#' term='conferenciarails2006'/><title type='text'>Transparencias y recursos de la ponencia "Tareas en background con RoR y BackgrounDRb"</title><content type='html'>Podéis encontrar las transparencias, el código utilizado y otros recursos relacionados con la ponencia que dí el pasado viernes 24 en la conferencia rails hispana 2006: &lt;a href="http://bee.com.es/espeja/conferenciarails"&gt;Tareas en background con RoR y BackgrounDRb&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A modo de recuerdo de la conferencia he puesto el siguiente código en la página:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;session[:photos] ||= Flickr.new.tag("conferenciarails06")&lt;br /&gt;@photos = []&lt;br /&gt;6.times { @photos &lt;&lt; \&lt;br /&gt;   session[:photos][(rand*session[:photos].size).to_i] }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Si estuviste en la conferencia quizás apareces ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-384042856604667090?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://bee.com.es/espeja/conferenciarails' title='Transparencias y recursos de la ponencia &quot;Tareas en background con RoR y BackgrounDRb&quot;'/><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/384042856604667090/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=384042856604667090' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/384042856604667090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/384042856604667090'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/11/transparencias-y-recursos-de-la.html' title='Transparencias y recursos de la ponencia &quot;Tareas en background con RoR y BackgrounDRb&quot;'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-116358148924022872</id><published>2006-11-21T18:10:00.000+01:00</published><updated>2006-11-21T18:15:16.130+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Generar documentación en Ruby al estilo RoR</title><content type='html'>Para generar la documentación de un proyecto Ruby se utiliza el comando rdoc, este comando tiene un template por defecto, pero lo podemos cambiar añadiendo templates en el subdirectorio #{RUBY_SOURCE}/lib/ruby/1.8/rdoc/generators/template/html&lt;br /&gt;El template de rdoc utilizado en la &lt;a href="http://api.rubyonrails.com/"&gt;api de Ruby on Rails&lt;/a&gt; se llama &lt;a href="http://www.jamisbuck.org/svn/rdoc-templates/jamis.rb"&gt;jamis.rb&lt;/a&gt;. Para generar la documentación con este template tenemos que seguir los siguientes pasos:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Descargar el template jamis.rb ( &lt;a href="http://www.jamisbuck.org/svn/rdoc-templates/jamis.rb"&gt;http://www.jamisbuck.org/svn/rdoc-templates/jamis.rb&lt;/a&gt; ) y guardarlo en el subdirectorio de templates ( #{RUBY_SOURCE}/lib/ruby/1.8/rdoc/generators/template/html )&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ir a la raíz de nuestro proyecto ruby.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ejecutar:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;rdoc [SUBDIRECTORIOS | FICHEROS] --template=jamis \&lt;br /&gt;--line-numbers --inline-source&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;Con esto se nos generará la documentación en el subdirectorio &lt;span style="font-style: italic; font-weight: bold;"&gt;doc &lt;/span&gt;de nuestro proyecto Ruby.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-116358148924022872?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/116358148924022872/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=116358148924022872' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116358148924022872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116358148924022872'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/11/generar-documentacin-en-ruby-al-estilo.html' title='Generar documentación en Ruby al estilo RoR'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-116402666693334368</id><published>2006-11-20T13:02:00.000+01:00</published><updated>2007-03-19T21:06:30.447+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Notificación de excepciones por email en ruby on rails</title><content type='html'>Para automatizar la notificación de errores ( excepciones ) ocurridos en una aplicación RoR podemos utilizar el plugin Exception Notification, que envia un email con todos los datos del error (excepción, variables de entorno, ...) cada vez que ocurre una excepción en la aplicación.&lt;br /&gt;&lt;br /&gt;Para instalar este plugin debemos ejecutar:&lt;br /&gt;&lt;pre&gt;&lt;code class="typocode_default"&gt;ruby script/plugin install exception_notification&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Para añadir la notificación de errores a toda la aplicación hay que poner después de la declaración de la clase ApplicationController (app/application.rb) la siguiente linea.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class="typocode_ruby"&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;ApplicationController&lt;/span&gt; &lt;span class="punct"&gt;&lt;&lt;/span&gt; &lt;span class="constant"&gt;ActionController&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Base&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold;" class="ident"&gt;include&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;" class="constant"&gt;ExceptionNotifiable&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Si queremos que solo nos notifique errores de determinados controladores, hay que poner el include ExceptionNotifiable en los controladores que nos interesen y quitarlo del ApplicationController.&lt;br /&gt;&lt;br /&gt;Finalmente debemos indicar la dirección email donde nos llegarán los correos de notificación. Esto se configura en el archivo environment.rb ( config/environment.rb ):&lt;br /&gt;&lt;pre&gt;&lt;code class="typocode_ruby"&gt;&lt;span class="constant"&gt;ExceptionNotifier&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;exception_recipients&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;%w(email1&lt;/span&gt;&lt;span class="string"&gt;@dominio.com email2@dominio.com&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;Esta configuración solo enviará emails si la excepción es provocada por una petición que proviene de una máquina distinta al servidor.&lt;br /&gt;&lt;br /&gt;Para comprobar que funciona podemos añadir el metodo boom a qualquier controlador y llamarlo http://servidor/controlador/boom:&lt;br /&gt;&lt;pre&gt;&lt;code class="typocode_ruby"&gt;def boom&lt;br /&gt; raise "Boooooooooommm!"&lt;br /&gt;end&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="http://dev.rubyonrails.org/svn/plugins/exception_notification/README"&gt;dev.rubyonrails.org/svn/plugins/exception_notification/README&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Rails Recipes:&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0977616606?ie=UTF8&amp;tag=sergioespejah-20&amp;amp;linkCode=as2&amp;camp=1789&amp;amp;creative=9325&amp;creativeASIN=0977616606"&gt;&lt;img src="http://www.upf.edu/pdi/iula/sergio.espeja/img/cover_railsrecipes.jpg" border="0" /&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=sergioespejah-20&amp;amp;l=as2&amp;o=1&amp;amp;a=0977616606" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-116402666693334368?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/116402666693334368/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=116402666693334368' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116402666693334368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116402666693334368'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/11/notificacin-de-excepciones-por-email.html' title='Notificación de excepciones por email en ruby on rails'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-116380544633709883</id><published>2006-11-18T00:07:00.000+01:00</published><updated>2006-11-20T19:22:19.739+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bee.com.es'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='serp'/><title type='text'>Seguir la posición de tu web en google</title><content type='html'>En &lt;a href="http://bee.com.es"&gt;bee.com.es&lt;/a&gt; hemos desarrollado un SERP (Search Engine Results Page) Tracker, que es una herramienta que permite ver como va cambiando la posición de una web en las páginas de resultados de google para varias palabras clave.&lt;br /&gt;&lt;br /&gt;Nuestro SERP Tracker esta todavía en fase beta aunque es totalmente funcional, si te interesa esta aplicación entra en &lt;a href="http://bee.com.es/serp_tracker"&gt;bee.com.es/serp_tracker&lt;/a&gt; y te enviaremos una invitación para que la pruebes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-116380544633709883?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://bee.com.es/serp_tracker' title='Seguir la posición de tu web en google'/><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/116380544633709883/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=116380544633709883' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116380544633709883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116380544633709883'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/11/seguir-la-posicin-de-tu-web-en-google.html' title='Seguir la posición de tu web en google'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-116358278688542275</id><published>2006-11-15T10:05:00.000+01:00</published><updated>2006-11-15T10:26:26.913+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Conferencia Rails Hispana</title><content type='html'>Los días 24 y 25 de noviembre se realizará la primera conferencia sobre Ruby on Rails hispana, que pretende dar a conocer Ruby on Rails en el mundo hispanohablante. Principalmente en la conferencia se hablará de iniciación a rails, internacionalización, casos prácticos y testing.&lt;br /&gt;&lt;br /&gt;He tenido la suerte de poder participar como ponente en la conferencia. El viernes 24 a las 16:45 daré una ponencia sobre &lt;a href="http://programa.conferenciarails.org/ponencias.php#sergioespeja"&gt;Tareas en background con RoR y BackgrounDRb&lt;/a&gt;, donde hablaré sobre como mejorar la sensación del usuario al ejecutar tareas de larga duración en aplicaciones web desarrolladas con RoR.&lt;br /&gt;&lt;br /&gt;Espero que encontréis la propuesta interesante y os sea de utilidad para vuestros proyectos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.conferenciarails.org/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/1982/688/320/badge_04.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Más información:&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.conferenciarails.org"&gt;www.conferenciarails.org&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://programa.conferenciarails.org"&gt;programa.conferenciarails.org&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-116358278688542275?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/116358278688542275/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=116358278688542275' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116358278688542275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116358278688542275'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/11/conferencia-rails-hispana.html' title='Conferencia Rails Hispana'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-116279957117782101</id><published>2006-11-06T08:50:00.000+01:00</published><updated>2006-11-06T08:52:51.193+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Añadir usuarios a sudo</title><content type='html'>Para añadir &lt;span style="font-weight:bold;"&gt;nuevos &lt;/span&gt;usuarios a sudo ejecutar:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;sudo usermod -G admin username&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Si el usuario existe y queremos añadirle al grupo de usuarios que pueden usar sudo, ejecutar:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;sudo usermod -a -G admin username&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-116279957117782101?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/116279957117782101/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=116279957117782101' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116279957117782101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116279957117782101'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/11/aadir-usuarios-sudo.html' title='Añadir usuarios a sudo'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-116223220512037052</id><published>2006-10-30T19:09:00.000+01:00</published><updated>2006-10-30T19:18:56.286+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Actualizar Ubuntu Dapper a Edgy Eft</title><content type='html'>Para actualizar Ubuntu  de Dapper a Edgy Eft tenemos que ejecutar los siguientes comandos:&lt;br /&gt;&lt;br /&gt;1. Cambiamos los repositorios de dapper a edgy:&lt;br /&gt;&lt;pre&gt;sudo sed -e 's/dapper/edgy/g' -i /etc/apt/sources.list&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Actualizamos las listas de paquetes:&lt;br /&gt;&lt;pre&gt;sudo apt-get update&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3. Pasamos de Dapper a Edgy Eft ( esto tardará un ratito ... )&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;sudo apt-get dist-upgrade&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class='tag_list'&gt;Tags: &lt;span style=font-size:70%;&gt;&lt;a href=http://technorati.com/tag/ubuntu rel=tag&gt;ubuntu&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-116223220512037052?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/116223220512037052/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=116223220512037052' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116223220512037052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116223220512037052'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/10/actualizar-ubuntu-dapper-edgy-eft.html' title='Actualizar Ubuntu Dapper a Edgy Eft'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-116159423687179088</id><published>2006-10-23T10:57:00.000+02:00</published><updated>2006-10-23T11:04:19.806+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Instalar memcached para rails en Windows</title><content type='html'>Memcached es un sistema de cache de objetos distribuido. Para instalarlo en windows debemos:&lt;br /&gt;&lt;br /&gt;1. Bajarnos los binarios en la web http://jehiah.com/projects/memcached-win32/ ( descargar memcached for win32 binaries ).&lt;br /&gt;2. Descomprimir el archivo.&lt;br /&gt;3. Entrar en el subdirectorio donde hemos descomprimido el archivo y ejecutar:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;memcached.exe -d install&lt;br /&gt;&lt;br /&gt;Con esto tendremos memcached instalado como un servicio de windows al que podemos acceder desde el panel de control. Si queremos encender el servicio desde la consola de windows:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;memcached.exe -d start&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-116159423687179088?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/116159423687179088/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=116159423687179088' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116159423687179088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/116159423687179088'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/10/instalar-memcached-para-rails-en.html' title='Instalar memcached para rails en Windows'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-115762676361529806</id><published>2006-09-07T12:29:00.000+02:00</published><updated>2006-09-07T13:03:29.250+02:00</updated><title type='text'>Añadir google sitemaps de blogger</title><content type='html'>Para añadir el sitemap de un blog en blogger a google sitemaps, únicamente es necesario pasarle el vínculo al archivo atom.xml.&lt;br /&gt;&lt;br /&gt;Es decir, dentro de la cuenta de google sitemaps hay que pulsar en añadir sitemap y introducir la url:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;http://TU-BLOG.blogspot.com/atom.xml&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-115762676361529806?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/115762676361529806/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=115762676361529806' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/115762676361529806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/115762676361529806'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/09/aadir-google-sitemaps-de-blogger.html' title='Añadir google sitemaps de blogger'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-115296559804445178</id><published>2006-07-15T14:00:00.000+02:00</published><updated>2006-07-15T14:13:18.983+02:00</updated><title type='text'>Añadir protocolos a firefox</title><content type='html'>Si queremos que firefox abra una aplicación determinada al pulsar sobre un enlace con un protocolo no habitual como "lastfm://", debemos añadir un nuevo protocolo.&lt;br /&gt;&lt;br /&gt;Para añadir nuevos protocolos a firefox además de los existentes como "http://", "ftp://", etc. Es necesario:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Escribir en la barra de direcciones: about:config&lt;/li&gt;&lt;li&gt;Pulsar con el botón derecho del ratón sobre la lista que aparece y seleccionar "Nuevo -&gt; String"&lt;/li&gt;&lt;li&gt;Escribir el nombre del nuevo string como &lt;span style="font-style: italic;"&gt;network.protocol-handler.app.PROTOCOLO&lt;/span&gt; y después el path hacia la aplicación que se encargará de interpretar el protocolo.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;blockquote&gt;Ejemplo:&lt;br /&gt;    Protocolo: lastfm://&lt;br /&gt;    Nombre del string:  &lt;span style="font-style: italic;"&gt;network.protocol-handler.app.lastfm&lt;/span&gt;&lt;br /&gt;    Path hacia la aplicación: Path hasta el last.fm player.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-115296559804445178?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.mozilla-europe.org/es/products/firefox/' title='Añadir protocolos a firefox'/><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/115296559804445178/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=115296559804445178' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/115296559804445178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/115296559804445178'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/07/aadir-protocolos-firefox.html' title='Añadir protocolos a firefox'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-114674901862668978</id><published>2006-05-04T15:22:00.000+02:00</published><updated>2006-05-04T15:23:38.643+02:00</updated><title type='text'>Blog worm virus ...</title><content type='html'>&lt;a href="http://www.moox.nl/blogworm/"&gt;&lt;br /&gt;&lt;img src="http://www.moox.nl/blogworm/virus.gif" alt="Blog.Worm" border="0"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-114674901862668978?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/114674901862668978/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=114674901862668978' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/114674901862668978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/114674901862668978'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2006/05/blog-worm-virus.html' title='Blog worm virus ...'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-113110369111931658</id><published>2005-11-04T12:25:00.000+01:00</published><updated>2005-11-04T12:28:11.130+01:00</updated><title type='text'>Problemas con los carácteres en páginas web</title><content type='html'>Para solucionar una incorrecta visualización de carácteres en una página web, hay que homogeneizar los charsets de todas las páginas.&lt;br /&gt;&lt;br /&gt;Una manera fácil de hacerlo indicar en el servidor web apache el juego de caracteres por defecto.&lt;br /&gt;&lt;br /&gt;Esto se hace añadiendo en http.conf la siguiente línea:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    AddDefaultCharset &lt;charset&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        Ejemplo:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        AddDefaultCharset ISO-8859-1&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-113110369111931658?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/113110369111931658/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=113110369111931658' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/113110369111931658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/113110369111931658'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/11/problemas-con-los-carcteres-en-pginas.html' title='Problemas con los carácteres en páginas web'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-112505192145303681</id><published>2005-08-26T11:55:00.000+02:00</published><updated>2005-08-26T12:25:21.496+02:00</updated><title type='text'>Instalar módulos CPAN en Windows con ActiveState Perl</title><content type='html'>No he encontrado nada fácil instalar módulos de perl de &lt;a href="http://www.cpan.org/"&gt;CPAN&lt;/a&gt; en windows con ActiveState Perl instalado. Por eso escribo una mini-guia:&lt;br /&gt;0. Previamente necesitamos instalar el siguiente software ( propongo donde descargarlo):&lt;br /&gt;    0.1. gunzip: http://www.gzip.org&lt;br /&gt;    0.2. tar: http://gnuwin32.sourceforge.net/packages/tar.htm&lt;br /&gt;    0.3. unzip: http://gnuwin32.sourceforge.net/packages/unzip.htm&lt;br /&gt;    0.4. nmake: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q132084&lt;br /&gt;    0.5. gpg: ftp://ftp.gnupg.org/gcrypt/binary/gnupg-w32cli-1.2.3.zip&lt;br /&gt;    0.6. Cygwin: instalar con cygwin lynx, wget y ncftp. Por defecto se instalarán en C:/cygwin/bin.&lt;br /&gt;   &lt;br /&gt;1. Desde la linea de comandos escribir:  &lt;span style="font-family: monospace;"&gt;&lt;/span&gt;perl -MCPAN -e shell&lt;br /&gt;&lt;br /&gt;2. Ir respondiendo paso a paso.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-112505192145303681?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/112505192145303681/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=112505192145303681' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/112505192145303681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/112505192145303681'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/08/instalar-mdulos-cpan-en-windows-con.html' title='Instalar módulos CPAN en Windows con ActiveState Perl'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-112046549831531808</id><published>2005-07-04T10:18:00.000+02:00</published><updated>2005-07-04T11:16:14.153+02:00</updated><title type='text'>Aplicaciones con Bases de Datos</title><content type='html'>Según se va desarrollando una aplicación que utilice base de datos, esta base de datos también va evolucionando. Sería interesante poder identificar la versión de la base de datos al igual que identificamos la versión del software.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www-128.ibm.com/developerworks/web/library/wa-dbversion/dbv03.gif" /&gt;&lt;br /&gt;&lt;br /&gt;La idea propuesta en el artículo es añadir una tabla nueva "DatabaseVersion" con sólo una fila que indique el número de versión, la fecha y el archivo de actualización.&lt;br /&gt;&lt;br /&gt;Artículo en IBM DeveloperWorks: &lt;a href="http://www-128.ibm.com/developerworks/web/library/wa-dbversion/index.html?ca=drs-tp2605"&gt;&lt;span class="atitle"&gt;Track and record database schema versions&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class='tag_list'&gt;Tags: &lt;span style=font-size:70%;&gt;&lt;a href=http://technorati.com/tag/programación rel=tag&gt;programación&lt;/a&gt; &lt;a href=http://technorati.com/tag/basesdedatos rel=tag&gt;basesdedatos&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-112046549831531808?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www-128.ibm.com/developerworks/web/library/wa-dbversion/index.html?ca=drs-tp2605' title='Aplicaciones con Bases de Datos'/><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/112046549831531808/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=112046549831531808' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/112046549831531808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/112046549831531808'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/07/aplicaciones-con-bases-de-datos.html' title='Aplicaciones con Bases de Datos'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-111703353958446958</id><published>2005-05-25T17:04:00.000+02:00</published><updated>2005-07-04T11:33:00.196+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Gentoo utils</title><content type='html'>&lt;pre&gt;&lt;span style="font-family: verdana;"&gt;Para saber a que paquete pertenece un ejecutable se puede utilizar:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; qpkg -f&lt;/span&gt; &lt;span style="font-style: italic;"&gt;path_ejecutable&lt;/span&gt;&lt;path_ejecutable&gt;&lt;/path_ejecutable&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class='tag_list'&gt;Tags: &lt;span style=font-size:70%;&gt;&lt;a href=http://technorati.com/tag/gentoo rel=tag&gt;gentoo&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-111703353958446958?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/111703353958446958/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=111703353958446958' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/111703353958446958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/111703353958446958'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/05/gentoo-utils.html' title='Gentoo utils'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-111142127377260591</id><published>2005-05-21T16:00:00.000+02:00</published><updated>2005-07-04T11:30:49.083+02:00</updated><title type='text'>AJAX</title><content type='html'>Asynchronous JavaScript and XML, es una nueva técnica de programación web que consiste baásicamente en hacer pequeñas consultas al servidor desde el cliente web sin recargar la página web, y modificando su estado mediante JavaScript.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Links:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ajaxmatters.com/"&gt;http://www.ajaxmatters.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://del.icio.us/spejman/ajax"&gt;http://del.icio.us/spejman/ajax&lt;/a&gt;&lt;a href="http://eireneh.thorubio.org/dwr/index.html"&gt;&lt;/a&gt;&lt;a href="http://johnvey.com/features/gmailapi/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class='tag_list'&gt;Tags: &lt;span style=font-size:70%;&gt;&lt;a href=http://technorati.com/tag/ajax rel=tag&gt;ajax&lt;/a&gt; &lt;a href=http://technorati.com/tag/programación rel=tag&gt;programación&lt;/a&gt; &lt;a href=http://technorati.com/tag/web rel=tag&gt;web&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-111142127377260591?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/111142127377260591/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=111142127377260591' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/111142127377260591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/111142127377260591'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/05/ajax.html' title='AJAX'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-111329300547004305</id><published>2005-04-11T21:51:00.000+02:00</published><updated>2005-07-04T11:31:28.726+02:00</updated><title type='text'>Si no tienes pagina web es porque no quieres...</title><content type='html'>Últimamente he descubierto varias páginas web donde poder publicar páginas dinámicas en PHP o en Java/J2EE. Estas junto a otras que ofrecen almacenamiento te pueden permitir tener un sitio web dinámico sin gastarte ni un duro!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Publicación de páginas web dinámicas&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;PHP+MySQL (25Mb): &lt;a href="http://www.bloglines.com/blog/www.gratishost.com" target="_blank" class="blines3" title="Link outside of this blog"&gt;http://www.gratishost.com&lt;/a&gt;&lt;/li&gt;   &lt;li&gt;JSP/Servlets/Cocoon + hsqldb (5 Mb):  &lt;a href="http://www.myjavaserver.com/"&gt;http://www.myjavaserver.com&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Wikis&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Posibilidad de generar tu propio Wiki (herramienta web de edición/publicación de contenidos) temático&lt;/li&gt;   &lt;ul&gt;     &lt;li&gt;Wikis (50 paginas):&lt;b&gt; &lt;/b&gt;&lt;a href="http://www.seedwiki.com" target="_blank" class="blines3" title="Link outside of this blog"&gt;http://www.seedwiki.com&lt;/a&gt;&lt;br /&gt;    &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Álbum de fotos&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Página web muy completa con muchos complementos y una comunidad muy importante que la apoya: &lt;/li&gt;   &lt;ul&gt;     &lt;li&gt;&lt;a href="http://www.flickr.com" target="_blank" class="blines3" title="Link outside of this blog"&gt;http://www.flickr.com&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Y si el problema es el espacio...&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Existen librerias para montar una especie de disco duro web con las cuentas de gmail más info en:&lt;/li&gt;   &lt;ul&gt;     &lt;li&gt;&lt;a href="http://www.aimlesswords.com/"&gt;http://www.aimlesswords.com&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt;   &lt;ul&gt;     &lt;li&gt;&lt;a href="http://www.googlemania.com" target="_blank" class="blines2" title="Link to another page in this blog"&gt;http://www.googlemania.com&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class='tag_list'&gt;Tags: &lt;span style=font-size:70%;&gt;&lt;a href=http://technorati.com/tag/geek rel=tag&gt;geek&lt;/a&gt; &lt;a href=http://technorati.com/tag/web rel=tag&gt;web&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-111329300547004305?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/111329300547004305/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=111329300547004305' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/111329300547004305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/111329300547004305'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/04/si-no-tienes-pagina-web-es-porque-no.html' title='Si no tienes pagina web es porque no quieres...'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-111217196433001943</id><published>2005-03-30T10:31:00.000+02:00</published><updated>2005-07-04T11:29:32.006+02:00</updated><title type='text'>Subversion</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Crear el directorio en subversion:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;svn import subdirectorio URL&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(&lt;span style="font-weight: bold; font-style: italic;"&gt;nota&lt;/span&gt;&lt;span style="font-style: italic;"&gt;:  se añadirá el contenido del subdirectorio, pero no el subdirectorio en si. Se creará toda la ruta que se introduzca en la URL&lt;/span&gt;).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Descargar el subdirectorio de trabajo:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;svn checkout URL&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Uso habitual:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) svn update&lt;br /&gt;2) svn add|delete|...&lt;br /&gt;3) svn update&lt;br /&gt;4) svn commit&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Crear un nuevo branch:&lt;/span&gt;&lt;br /&gt;&lt;pre class="screen"&gt; svn copy http://svn.example.com/repos/calc/trunk          &lt;br /&gt;  http://svn.example.com/repos/calc/branches/my-calc-branch&lt;br /&gt;  -m "Creating a private branch of /calc/trunk."&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://svnbook.red-bean.com/en/1.1/images/ch04dia3.png" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Links:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  - &lt;a href="http://electricjellyfish.net/garrett/talks/oscon2004/svn-best-practices/"&gt;Transparencias "Best Practices"&lt;/a&gt;&lt;br /&gt;  - &lt;a href="http://svnbook.red-bean.com/"&gt;Book "Version control with Subversion"&lt;/a&gt;&lt;br /&gt;  - &lt;a href="http://www.onlamp.com/pub/a/onlamp/2002/10/31/subversion.html"&gt;OnLamp Article&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class='tag_list'&gt;Tags: &lt;span style=font-size:70%;&gt;&lt;a href=http://technorati.com/tag/programación rel=tag&gt;programación&lt;/a&gt; &lt;a href=http://technorati.com/tag/subversion rel=tag&gt;subversion&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-111217196433001943?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/111217196433001943/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=111217196433001943' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/111217196433001943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/111217196433001943'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/03/subversion.html' title='Subversion'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-111062160829360773</id><published>2005-03-12T10:56:00.000+01:00</published><updated>2005-07-04T11:36:12.763+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Gentoo pkgconfig</title><content type='html'>pkgconfig es el programa que utilizan los instaladores en linux para detectar versiones, localizaciones de archivos, etc... de sus dependencias.&lt;br /&gt;&lt;br /&gt;Para realizar sus tareas pkgconfig guarda archivos de configuración en el subdirectorio /usr/lib/pkgconfig.&lt;br /&gt;&lt;br /&gt;&lt;div class='tag_list'&gt;Tags: &lt;span style=font-size:70%;&gt;&lt;a href=http://technorati.com/tag/gentoo rel=tag&gt;gentoo&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-111062160829360773?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/111062160829360773/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=111062160829360773' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/111062160829360773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/111062160829360773'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/03/gentoo-pkgconfig.html' title='Gentoo pkgconfig'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-110984869397331330</id><published>2005-03-03T12:17:00.000+01:00</published><updated>2005-07-04T11:32:29.450+02:00</updated><title type='text'>Web S.O.</title><content type='html'>Un ejemplo de lo que puede ser un escritorio web ...&lt;br /&gt;&lt;br /&gt;&lt;div class='tag_list'&gt;Tags: &lt;span style=font-size:70%;&gt;&lt;a href=http://technorati.com/tag/geek rel=tag&gt;geek&lt;/a&gt; &lt;a href=http://technorati.com/tag/web rel=tag&gt;web&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-110984869397331330?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://robin.sourceforge.net/' title='Web S.O.'/><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/110984869397331330/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=110984869397331330' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110984869397331330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110984869397331330'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/03/web-so.html' title='Web S.O.'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-110978764164939305</id><published>2005-03-02T19:16:00.000+01:00</published><updated>2005-07-04T11:33:59.470+02:00</updated><title type='text'>Mono Applications</title><content type='html'>Recopilación de proyectos para &lt;a href="http://www.mono-project.com/"&gt;mono&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://www.mono-project.com/"&gt;mono&lt;/a&gt; es una implementación Open Source de la plataforma .NET de Microsoft, existen versiones para Linux, MacOS y Windows.&lt;br /&gt;&lt;br /&gt;&lt;div class='tag_list'&gt;Tags: &lt;span style=font-size:70%;&gt;&lt;a href=http://technorati.com/tag/programación rel=tag&gt;programación&lt;/a&gt; &lt;a href=http://technorati.com/tag/mono rel=tag&gt;mono&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-110978764164939305?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.osnews.com/story.php?news_id=9780' title='Mono Applications'/><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/110978764164939305/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=110978764164939305' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110978764164939305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110978764164939305'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/03/mono-applications.html' title='Mono Applications'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-110918425090393206</id><published>2005-02-23T19:39:00.000+01:00</published><updated>2005-07-04T11:34:24.760+02:00</updated><title type='text'>Crear un arbol de portage adicional</title><content type='html'>Para crear un arbol de portage adicional con ebuilds "no oficiales" de gentoo, es necesario:&lt;br /&gt;&lt;br /&gt;1) Ejecutar:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;    install -d DIRECTORIO_DESTINO_ARBOL_ADICIONAL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2) Añadir la siguiente linea a &lt;span style="font-style: italic;"&gt;/etc/make.conf &lt;/span&gt; :&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt; &lt;pre style="font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt; PORTDIR_OVERLAY="DIRECTORIO_DESTINO_ARBOL_ADICIONAL"&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt; &lt;span style="font-weight: bold;"&gt;Links:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://gentoo-wiki.com/HOWTO_Installing_3rd_Party_Ebuilds"&gt;http://gentoo-wiki.com/HOWTO_Installing_3rd_Party_Ebuilds&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class='tag_list'&gt;Tags: &lt;span style=font-size:70%;&gt;&lt;a href=http://technorati.com/tag/gentoo rel=tag&gt;gentoo&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-110918425090393206?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/110918425090393206/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=110918425090393206' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110918425090393206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110918425090393206'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/02/crear-un-arbol-de-portage-adicional.html' title='Crear un arbol de portage adicional'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-110882797606240737</id><published>2005-02-19T16:36:00.000+01:00</published><updated>2005-07-04T11:34:58.136+02:00</updated><title type='text'>Desastres posibles después de hacer emerge word</title><content type='html'>A continuación explico dos cosas importates que pueden hacer que falle tu sistema operativo GNU/Linux &lt;a href="http://www.gentoo.org/"&gt;Gentoo&lt;/a&gt; al ponerlo al dia con el comando &lt;span style=";font-family:courier new;font-size:85%;"  &gt;emerge world&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) Mucho cuidado al actualizar los archivos de configuración --&gt; Después de hacer emerge, gentoo te pedirá que actualices los archivos de configuración mediante &lt;span style=";font-family:courier new;font-size:85%;"  &gt;etc-update&lt;/span&gt;, al hacer esto hay que &lt;span style="font-weight: bold;"&gt;leer los archivos que se van a modificar&lt;/span&gt; pq sino pueden pasar cosas como lo que me paso a mi: se me sobreescribió el archivo /etc/fstab impidiendo que el sistema reconociese las particiones que existían.&lt;br /&gt;&lt;br /&gt;  2) Pensarselo 2 veces antes de recompilar &lt;span style="font-weight: bold;"&gt;glibc!!&lt;/span&gt; Si falla algo los programas dejarn de funcionar y el sistema no volverá reiniciarse.&lt;br /&gt;&lt;br /&gt;SOLUCIÓN si hay un fallo al recompilar glibc: reiniciar el PC con el CD de instalación de gentoo y sobreescribir la carpeta /lib de nuestro PC con el contenido de la que se carga al arrancar con el CD de instalación de gentoo.&lt;br /&gt;&lt;br /&gt;&lt;div class='tag_list'&gt;Tags: &lt;span style=font-size:70%;&gt;&lt;a href=http://technorati.com/tag/gentoo rel=tag&gt;gentoo&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-110882797606240737?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/110882797606240737/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=110882797606240737' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110882797606240737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110882797606240737'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/02/desastres-posibles-despus-de-hacer.html' title='Desastres posibles después de hacer &lt;i&gt;emerge word&lt;/i&gt;'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-110840623073256083</id><published>2005-02-14T19:30:00.000+01:00</published><updated>2005-02-14T19:37:10.733+01:00</updated><title type='text'>Webs para buscar piso principalmente en BCN</title><content type='html'>Estas páginas web fueron recomendadas por un programa del canal 33 (televisión autonómica catalana). En principio son legales ...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Vivendum:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.vivendum.fotocasa.es/"&gt;http://www.vivendum.fotocasa.es/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Servihabitat:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.servihabitat.es"&gt;http://www.servihabitat.es&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;BCN.es:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.bcn.es/ciaj/"&gt;http://www.bcn.es/ciaj/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-110840623073256083?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/110840623073256083/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=110840623073256083' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110840623073256083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110840623073256083'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/02/webs-para-buscar-piso-principalmente.html' title='Webs para buscar piso principalmente en BCN'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-110641400923825838</id><published>2005-01-22T18:07:00.000+01:00</published><updated>2005-07-04T11:35:39.250+02:00</updated><title type='text'>Uso de tftp de BusyBox</title><content type='html'>&lt;a href="http://www.busybox.net/"&gt;BusyBox&lt;/a&gt; es un conjunto de aplicaciones optimizadas para dispositivos embedded o móbiles con pocos recursos. La documentación se puede encontrar en: &lt;a href="http://www.busybox.net/downloads/BusyBox.html"&gt;http://www.busybox.net/downloads/BusyBox.htm&lt;/a&gt;&lt;br /&gt;Tftp es el acrónimo de Trivial FTP, un pequeño protocolo de FTP.&lt;br /&gt;&lt;br /&gt;Descargar un fichero:&lt;br /&gt;   &lt;span style="font-family: courier new;"&gt; tftp -g -r FICHERO HOST&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Subir un fichero&lt;br /&gt;    &lt;span style="font-family: courier new;"&gt;tftp -p -l FICHERO HOST&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class='tag_list'&gt;Tags: &lt;span style=font-size:70%;&gt;&lt;a href=http://technorati.com/tag/embedded rel=tag&gt;embedded&lt;/a&gt; &lt;a href=http://technorati.com/tag/Linux rel=tag&gt;Linux&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-110641400923825838?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/110641400923825838/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=110641400923825838' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110641400923825838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110641400923825838'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2005/01/uso-de-tftp-de-busybox.html' title='Uso de tftp de BusyBox'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-110321592085924389</id><published>2004-12-16T17:38:00.000+01:00</published><updated>2004-12-16T17:52:54.403+01:00</updated><title type='text'>My new nokia 6100 / Mi nuevo nokia 6100</title><content type='html'>Yesterday I bought a Nokia 6100, I was so happy when I found &lt;a href="http://www.blogger.com/app/www.gnokii.org"&gt;gnokii&lt;/a&gt; (a open source tool to replace Nokia's PC Suite that works in Linux) but I become sad when I saw the message: "gnokii could break your nokia 6100 don't use it...".&lt;br /&gt;&lt;br /&gt;If someone had find some solution to this I should be very much obliged...&lt;br /&gt;&lt;br /&gt;The problem is that I haven't any solution to sync my nokia in Linux. Today I'll test to Nokia PC Suite with &lt;a href="http://www.blogger.com/app/www.codeweavers.com/products/crossover/"&gt;crossover&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Ayer compré un Nokia 6100, me alegré mucho cuando encontré &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.blogger.com/app/www.gnokii.org"&gt;gnokii&lt;/a&gt;&lt;span style="font-style: italic;"&gt; (una herramienta open source que actua como el PC Suite de Nokia), pero empezé a desilusionarme cuando vi el mensaje: "gnokii puede romper tu nokia 6100, no lo utilizes ..."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Me alegraria mucho si alguien encontrase alguna solución a este problema.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;El problema es que no tengo ninguna solución para sincronizar mi nokia en Linux. Hoy voy a probar de instalar el PC Suite de Nokia con &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.blogger.com/app/www.codeweavers.com/products/crossover/"&gt;crossover&lt;/a&gt;&lt;span style="font-style: italic;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-110321592085924389?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/110321592085924389/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=110321592085924389' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110321592085924389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110321592085924389'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2004/12/my-new-nokia-6100-mi-nuevo-nokia-6100.html' title='My new nokia 6100 / &lt;i&gt;Mi nuevo nokia 6100&lt;/i&gt;'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9446919.post-110209266949571410</id><published>2004-12-04T02:46:00.000+01:00</published><updated>2004-12-03T17:51:09.496+01:00</updated><title type='text'>Mi primer blog...</title><content type='html'>Hola &lt;span style="font-weight: bold;"&gt;W&lt;/span&gt;orld &lt;span style="font-weight: bold;"&gt;w&lt;/span&gt;ide &lt;span style="font-weight: bold;"&gt;W&lt;/span&gt;eb!&lt;br /&gt;&lt;br /&gt;Este es mi primer blog de prueba, quizás continue este blog o quizás se quede en el olvido, pero de todas maneras lo importante es participar ;P&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9446919-110209266949571410?l=spejman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spejman.blogspot.com/feeds/110209266949571410/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9446919&amp;postID=110209266949571410' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110209266949571410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9446919/posts/default/110209266949571410'/><link rel='alternate' type='text/html' href='http://spejman.blogspot.com/2004/12/mi-primer-blog.html' title='Mi primer blog...'/><author><name>Spejman</name><uri>http://www.blogger.com/profile/08456968654669529943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
