<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Apuntes de Rails]]></title>
  <link href="http://apuntesderails.amaiac.net/atom.xml" rel="self"/>
  <link href="http://apuntesderails.amaiac.net/"/>
  <updated>2013-09-08T13:30:24+02:00</updated>
  <id>http://apuntesderails.amaiac.net/</id>
  <author>
    <name><![CDATA[Amaia Castro]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Quitar los metadatos exif de las fotos]]></title>
    <link href="http://apuntesderails.amaiac.net/2013/09/08/quitar-los-metadatos-exif-de-las-fotos/"/>
    <updated>2013-09-08T12:54:00+02:00</updated>
    <id>http://apuntesderails.amaiac.net/2013/09/08/quitar-los-metadatos-exif-de-las-fotos</id>
    <content type="html"><![CDATA[<p>Ahora que he empezado a escribir un <a href="http://tinker.amaiac.net">blog con mis cacharreos con Arduino</a>, se me ha presentado la necesidad de quitar los metadatos exif de las fotos que subo, porque no quiero publicar tanta información en cada foto.</p>

<p>Una solución, si no quieres redimensionar o recomprimir la imagen, es la que dan en <a href="http://stackoverflow.com/questions/2654281/how-to-remove-exif-data-without-recompressing-the-jpeg">esta pregunta de stackoverflow</a> usando <a href="http://owl.phy.queensu.ca/~phil/exiftool/">ExifTool</a>:</p>

<pre><code>exiftool -all= image.jpg
</code></pre>

<p>Como además de quitar los datos quiero redimensionar las fotos para que pesen menos y encajen mejor en el blog, al final he optado por usar <a href="http://www.imagemagick.org">ImageMagick</a> <a href="http://www.howtogeek.com/109369/how-to-quickly-resize-convert-modify-images-from-the-linux-terminal/">desde línea de comandos</a> para hacerlo todo del tirón con el comando:</p>

<pre><code>convert image.jpg -resize 600 -quality 95 -strip converted_image.jpg
</code></pre>

<p>La opción -strip quita todos los datos exif de la imagen.</p>

<p>Para convertir todos las imágenes de golpe me he hecho un pequeño script en ruby que hace justo lo que necesito:</p>

<pre><code>#!/usr/bin/env ruby

size = ARGV.shift || 600

Dir.glob('*.{jpg,png,gif}', File::FNM_CASEFOLD).each do |file|
  puts "Converting image #{file}"
  system("convert #{file} -resize #{size} -quality 95 -strip #{file}")
  Dir.mkdir("converted") unless File.exists?("converted")
  File.rename file, "converted/#{file}"
end
</code></pre>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[RubyPair.com, <em>pair programming</em> en Ruby]]></title>
    <link href="http://apuntesderails.amaiac.net/2012/09/20/rubypair-dot-com-pair-programming-en-ruby/"/>
    <updated>2012-09-20T10:58:00+02:00</updated>
    <id>http://apuntesderails.amaiac.net/2012/09/20/rubypair-dot-com-pair-programming-en-ruby</id>
    <content type="html"><![CDATA[<p><a href="http://rubypair.com">RubyPair.com</a> es una web donde encontrar gente con la que hacer <em>pair programming</em> en Ruby, ya sea en remoto o de forma local. En realidad la web es bastate sencilla, te das de alta a través de tu cuenta de <a href="http://github.com">GitHub</a> y rellenas tu perfil con unos pocos datos como tu cuenta de twitter y tus intereses y apareces en el listado donde la gente puede buscar pares. También puedes marcar tu perfil como disponible en ese momento y saldrás en otro listado de gente disponible.</p>

<p>Lo descubrí hace poco escuchando el <a href="http://rubyfreelancers.com/the-ruby-freelancers-show-012-getting-starting-as-a-freelancer/">capítulo 12 del podcast Ruby Freelancers</a> y me pareció buena idea, pero cuando fui a darme de alta había un problema con el login a través de GitHub. Como tenía ganas de darme de alta y resulta que el código del sitio está en GitHub hice un <a href="https://github.com/rubypair/rubypair/pull/54">pull request</a> con los cambios que hacían falta para que el login volviese a funcionar.</p>

<p>El error se solucionaba actualizando la versión de la gema <code>omniauth</code>, así que en el Gemfile había que asegurarse que la versión de omniauth era la 1 y añadir <code>omniauth-github</code> para utilizar esta estrategia de autenticación, ya que a partir de la versión 1 de omniauth cada una de las estrategias de login (facebook, twitter, github, etc) va en una gema aparte. Al cambiar de versión de <a href="https://github.com/intridea/omniauth">OmniAuth</a> cambian algunos nombres en el auth hash que devuelve omniauth, pero con un par de cambios en los métodos que lo utilizan y sus correspondientes tests queda todo arreglado. Se pueden ver los cambios en concreto en <a href="https://github.com/rubypair/rubypair/pull/54/files">https://github.com/rubypair/rubypair/pull/54/files</a>.</p>

<p>Ahora que el login vuelve a funcionar, ¿te animas a apuntarte?</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Rails Starter Box]]></title>
    <link href="http://apuntesderails.amaiac.net/2012/09/05/rails-starter-box/"/>
    <updated>2012-09-05T11:04:00+02:00</updated>
    <id>http://apuntesderails.amaiac.net/2012/09/05/rails-starter-box</id>
    <content type="html"><![CDATA[<p>En los últimos días he estado componiendo una <em>box</em> para Vagrant con las cosas básicas instaladas para poder empezar a desarrollar aplicaciones Rails. Mi idea es que se pueda usar por gente que esté empezando o quiera probar Rails sin tener que pelearse mucho con su sistema operativo para instalar rvm o las dependencias de rmagick, por ejemplo.</p>

<p>La idea se me ocurrió leyendo el libro <a href="http://pragprog.com/book/cbdepra/deploying-rails">Deploying Rails</a> y está muy basada en la <a href="https://github.com/rails/rails-dev-box">rails-dev-box</a> de <a href="https://github.com/fxn">fxn</a>.</p>

<p>El siguiente paso será empaquetarla para que se pueda user directamente como <em>base box</em> en Vagrant.</p>

<p>De momento aquí está el código:</p>

<p><a href="https://github.com/amaia/rails-starter-box">https://github.com/amaia/rails-starter-box</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Newsletters semanales para estar al día]]></title>
    <link href="http://apuntesderails.amaiac.net/2012/08/27/newsletters-semanales-para-estar-al-dia/"/>
    <updated>2012-08-27T12:04:00+02:00</updated>
    <id>http://apuntesderails.amaiac.net/2012/08/27/newsletters-semanales-para-estar-al-dia</id>
    <content type="html"><![CDATA[<p>Una de newsletters semanales para estar al día de lo que pasa por el mundo del desarrollo web y alrededores:</p>

<ul>
<li><a href="http://rubyweekly.com/">Ruby Weekly</a> por Peter Cooper (<a href="http://rubyweekly.com/archive/">archivo</a>)</li>
<li><a href="http://javascriptweekly.com/">JavaScript Weekly</a> por Peter Cooper (<a href="http://javascriptweekly.com/archive/">archivo</a>)</li>
<li><a href="http://html5weekly.com/">HTML5 Weekly</a> por Peter Cooper (<a href="http://html5weekly.com/archive/">archivo</a>)</li>
<li><a href="http://devopsweekly.com/">Devops Weekly</a> por  Gareth Rushgrove (<a href="http://devopsweekly.com/archive">archivo</a>)</li>
<li><a href="http://www.nosqlweekly.com/">NoSQL Weekly</a> por Rahul Chaudhary</li>
<li><a href="http://www.pythonweekly.com/">Python Weekly</a> por Rahul Chaudhary</li>
<li><a href="http://theweeklydrop.com/">The Weekly Drop</a> (Drupal) por Bob Kepford (<a href="http://theweeklydrop.com/archive">archivo</a>)</li>
<li><a href="http://freelancingweekly.com/">Freelancing Weekly</a> por Jeff Schoolcraft, uno de los participantes del podcast <a href="http://rubyfreelancers.com/">Ruby Freelancers</a>.</li>
</ul>


<p>Y si te va el tema de startups Rahul Chaudhary hace otra llamada <a href="http://www.founderweekly.com/">Founder Weekly</a>.</p>

<p>Seguro que hay muchas más pero estas son las que yo conozco, si sabes de otras ponlas en los comentarios, por favort.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Instalación de Vagrant en Ubuntu 12.04]]></title>
    <link href="http://apuntesderails.amaiac.net/2012/08/16/instalacion-de-vagrant-en-ubuntu-12-04/"/>
    <updated>2012-08-16T16:03:00+02:00</updated>
    <id>http://apuntesderails.amaiac.net/2012/08/16/instalacion-de-vagrant-en-ubuntu-12-04</id>
    <content type="html"><![CDATA[<p>Ahora que estoy leyendo el libro <a href="http://pragprog.com/book/cbdepra/deploying-rails">Deploying Rails</a>, estoy volviendo a trastear un poco con <a href="http://vagrantup.com">Vagrant</a>.</p>

<p>Antes la forma recomendada de instalar Vagrant era mediante Rubygems, pero ahora la forma recomendada es mediante <a href="http://downloads.vagrantup.com/">paquetes del sistema operativo</a>, así que descargué <code>vagrant_1.0.3_x86_64.deb</code> para mi Ubuntu 12.04 y lo instalé.
Pero resulta que la instalación se hace en <code>/opt/vagrant</code> y ese directorio no está en el path, hay que hacer un enlace simbólico en <code>/usr/local/bin</code> (por ejemplo, o en otro directorio que sí esté en el path) o añadir <code>/opt/vagrant</code> al path. Lo pone en la <a href="http://vagrantup.com/v1/docs/getting-started/index.html">documentación</a>, pero a mí se me había pasado al leerlo.</p>

<p>Para hacer un enlace simbólico:</p>

<pre><code>sudo ln -s /opt/vagrant/bin/vagrant /usr/local/bin/vagrant
</code></pre>

<p>Para añadir el directorio de instalación al path, en <code>~/.bashrc</code> añadir la línea:</p>

<pre><code>PATH=$PATH:/opt/vagrant/bin
</code></pre>

<p>Y para jugar con distintos sistemas las &#8220;base boxes&#8221; están en:</p>

<p>Official boxes:
<a href="https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Boxes">https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Boxes</a></p>

<p>Other boxes:
<a href="http://vagrantbox.es">http://vagrantbox.es</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Migrando el blog a Octopress]]></title>
    <link href="http://apuntesderails.amaiac.net/2012/05/20/migrando-el-blog-a-octopress/"/>
    <updated>2012-05-20T20:15:00+02:00</updated>
    <id>http://apuntesderails.amaiac.net/2012/05/20/migrando-el-blog-a-octopress</id>
    <content type="html"><![CDATA[<p>Hacía siglos que no escribía en este blog, al principio pensé que era sólo que no tenía nada que escribir,
pero después me di cuenta que una de las cosas que más pereza me daba de ponerme a escribir algo era usar
una interfaz web para publicar, que además iba bastante lenta en el hosting donde tenía el blog.
Había migrado el blog del Simplelog original a Drupal hacía
unos cuantos meses, incluso hice la migración de Drupal 6 a Drupal 7, pero no me decidía a escribir nada.</p>

<p>Últimantente le he cogido el gustillo a Git como control de verisones y a editar ficheros en Vim
y pensé que me resultaría más cómodo usar un gestor de blogs como <a href="http://octopress.org">Octopress</a>
para publicar. En Octopress los posts son ficheros que editas con cualquier editor y el sitio web
se genera como html estático que luego subes a algún sitio, en mi caso a Heroku.
Además puedes ver cómo queda todo en local antes de subirlo al servidor.</p>

<p>Así que me puse manos a la obra y aquí está el blog con Octopress,
con <a href="http://melandri.net/2012/02/14/octopress-theme-customization/">un theme de Alessandro Melandri</a>,
que ya iré modificando más a mi gusto, y los comentarios con <a href="http://disqus.com">Disqus</a>,
ya que al pasar a un blog con html estático la gestión de comentarios hay que externalizarla.</p>

<p>Los comentarios de los posts antiguos los he dejado como comentarios estáticos dentro de cada post,
porque no me parecía buena idea importarlos a Disqus con los datos (p.ej. email) de gente que cuando
hizo el comentario no lo hizo ahí, y yo no soy nadie para darle el email de otra persona a un servicio externo.</p>

<p>Creo que con este cambio le daré un poco más de vidilla al blog.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Desactivar servicios en el arranque de Ubuntu]]></title>
    <link href="http://apuntesderails.amaiac.net/2012/05/20/desactivar-servicios-en-el-arranque-de-ubuntu/"/>
    <updated>2012-05-20T17:39:00+02:00</updated>
    <id>http://apuntesderails.amaiac.net/2012/05/20/desactivar-servicios-en-el-arranque-de-ubuntu</id>
    <content type="html"><![CDATA[<p>Últimamente he instalado muchos servicios nuevos en mi portátil para ir probando, pero que no uso a diario, como PostgreSQL, Redis, MongoDB, CouchDB, etc. y no quiero que se arranquen automáticamente al inicio para que no consuman recursos innecesarios si no los estoy usando. Como siempre google tiene la respuesta y esta vez estaba en <a href="http://superuser.com/a/418012">http://superuser.com/a/418012</a>.</p>

<blockquote><p>   sudo update-rc.d mysql disable 2</p>

<p>This will rename the sym link to start with &#8216;K&#8217; and the service won&#8217;t start-up on boot. You can then re-enable it at any time if you do decide you want it to start-up on boot.</p></blockquote>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Presentaciones de la Conferencia Rails 2011]]></title>
    <link href="http://apuntesderails.amaiac.net/2012/05/20/presentaciones-de-la-conferencia-rails-2011/"/>
    <updated>2012-05-20T14:51:00+02:00</updated>
    <id>http://apuntesderails.amaiac.net/2012/05/20/presentaciones-de-la-conferencia-rails-2011</id>
    <content type="html"><![CDATA[<p>Estaba esperando a que se publicasen los vídeos de la Conferencia Rails 2011 para hacer un post con los enlaces, pero como parece que los vídeos se retrasan y que ya no habrá más ediciones de la conferencia, dejo aquí un <a href="https://gist.github.com/1089219">enlace al gist</a> en el que recopilé en su momento los enlaces a las presentaciones de las charlas que se dieron.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Conferencia Rails 2010]]></title>
    <link href="http://apuntesderails.amaiac.net/2010/11/14/conferencia-rails-2010/"/>
    <updated>2010-11-14T20:34:00+01:00</updated>
    <id>http://apuntesderails.amaiac.net/2010/11/14/conferencia-rails-2010</id>
    <content type="html"><![CDATA[<p>La semana pasada tuvo lugar la 5ª Conferencia Rails, la 4º a la que asisto.</p>

<p>Este año ha habido <a href="http://conferenciarails.org/2010/schedule.html">un sólo track</a> y además la conferencia se ha hecho más internacional y todas las charlas fueron en inglés. Lo de un único track me ha gustado bastante, así no hay dilemas a la hora de escoger a qué charla asistir y supongo que es más fácil para la organización gestionar sólo una sala. Sobre el idioma, a los hispanos prefiero escucharlos en español, pero la verdad es que me da igual, siempre que los ponentes no tengan un acento de esos complicados de pillar (el año pasado hubo un par que me costaba seguir).</p>

<p>Pronto estarán disponibles los vídeos pero mientras hago <a href="http://apuntesderails.amaiac.net/archives/2010/11/14/conferencia-rails-2010">aquí</a> una lista de las slides publicadas hasta ahora para encontrarlas más fácilmente.</p>

<p><strong>[ACTUALIZACIÓN]</strong> Videos publicados en http://globalplaza.org/spaces/conferencia-rails/events/conferencia-rails-2010</p>

<!--more-->


<p><strong>Charlas</strong></p>

<p><a href="http://conferenciarails.org/2010/talks/how_do_i_do_what_i_do_and_why.html"><strong>How do I do what I do? (and why)</strong> (Raúl Murciano)</a></p>

<p><a href="http://conferenciarails.org/2010/talks/dexy.html"><strong>Dexy</strong> (Ana Nelson)</a><br/>
Slides: http://www.slideshare.net/ananelson/dexy-on-rails</p>

<p><a href="http://conferenciarails.org/2010/talks/to_localise_or_not_to_localise.html"><strong>To Localise or not to Localise, that is the question</strong> (Elizabeth Sánchez, Carlos Hernández)</a></p>

<p><a href="http://conferenciarails.org/2010/talks/meet_couch_db.html"><strong>Meet CouchDB</strong> (Esti Álvarez)</a><br/>
Slides: http://www.slideshare.net/estialvarez/meet-couch-db</p>

<p><a href="http://conferenciarails.org/2010/talks/node_js_and_ruby.html"><strong>Node.js &amp; Ruby</strong> (Christian Kvalheim)</a><br/>
Slides: http://www.slideshare.net/christkv/nodejs-and-ruby</p>

<p><a href="http://conferenciarails.org/2010/talks/derailed_cucumber.html"><strong>Derailed Cucumber</strong> (Alan Kennedy &amp; Borja Arias)</a></p>

<p><a href="http://conferenciarails.org/2010/talks/cqrs_diet.html"><strong>CQRS Diet</strong> (Luismi Cavallé)</a><br/>
Slides: http://www.slideshare.net/cavalle/the-cqrs-diet</p>

<p><a href="http://conferenciarails.org/2010/talks/powerful_ux.html"><strong>Powerful UX</strong> (Lori M. Olson)</a><br/>
Slides: http://www.slideshare.net/wndxlori/powerful-ux-not-just-for-desktops-anymore</p>

<p><a href="http://conferenciarails.org/2010/talks/geospatial_capabilities_in_ruby.html"><strong>Geospatial capabilities in Ruby</strong> (Javier de la Torre, Fernando Blat)</a><br/>
Slides: http://www.slideshare.net/jatorre/geospatial-capabilities-on-ruby</p>

<p><a href="http://conferenciarails.org/2010/talks/swallowing_the_pair_programming_pill.html"><strong>Swallowing the Pair Programming Pill</strong> (Jim ‘Big Tiger’ Remsik)</a></p>

<p><a href="http://conferenciarails.org/2010/talks/neo4j.html"><strong>Neo4j</strong> (Pablo Delgado)</a><br/>
Slides: http://www.slideshare.net/pablete/neo4j-for-ruby-and-rails<br/>
Code: https://github.com/pablete/conferenciarails2010</p>

<p><a href="http://conferenciarails.org/2010/talks/html5_websockets_ruby_and_node_js.html"><strong>HTML5 WebSockets, Ruby and NodeJS</strong> (Pedro Palazón)</a><br/>
Slides (pdf): http://tinyurl.com/37zxoo9</p>

<p><a href="http://conferenciarails.org/2010/talks/documenting_from_the_trenches.html"><strong>Documenting From The Trenches</strong> (Xavier Noria)</a></p>

<p><a href="http://conferenciarails.org/2010/talks/simple_data_visualization_with_js.html"><strong>Simple Data Visualization with JS</strong> (Eli Kroumova)</a><br/>
Slides: https://github.com/elika/code_cr2010/raw/master/slides.pdf<br/>
Code: http://github.com/elika/code_cr2010</p>

<p><a href="http://conferenciarails.org/2010/talks/rails_is_not_enough.html"><strong>Rails is not Enough</strong> (Javier Ramírez)</a><br/>
Slides: http://www.slideshare.net/supercoco9/rails-is-not-enough-by-javier-ramirez-at-conferencia-rails-2010-in-madrid-spain</p>

<p><strong>Lightning Talks</strong>
<a href="http://www.slideshare.net/alberto.perdomo/boost-your-productivity-productivity-tips-for-rails-developers-lightning-talk-conferencia-rails-2010">Productivity Tips for Rails Developers (Alberto Perdomo)</a><br/>
<a href="http://globalplaza.org/spaces/conferencia-rails/attachments/830.all">Social Stream (Antonio Tapiador)</a></p>

<p><strong>Workshops</strong>
<a href="http://conferenciarails.org/2010/talks/compass_and_the_960_framework.html">Compass and the 960 Framework (Juanjo Andrés Prado)</a>
https://github.com/aentos/workshop_compass</p>

<p><a href="http://conferenciarails.org/2010/talks/a_process_automation_workshop.html">Process Automation (Jorge Dias)</a>
http://mrdias.com/2010/11/04/conferencia-rails-workshop.html</p>

<p><strong><a href="http://rejectconf.jottit.com/">RejectConf</a></strong><br/>
<a href="http://www.slideshare.net/sergio.gil/the-total-ide">http://www.slideshare.net/sergio.gil/the-total-ide</a><br/>
<a href="http://www.slideshare.net/linkingpaths/you-dont-get-8000-customers-without-working-like-a-mule">http://www.slideshare.net/linkingpaths/you-dont-get-8000-customers-without-working-like-a-mule</a><br/>
<a href="http://prezi.com/srl5u25videa/conversaciones-entre-platon-aristoteles-y-amigos-sobre-software/">http://prezi.com/srl5u25videa/conversaciones-entre-platon-aristoteles-y-amigos-sobre-software/</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Migración de ficheros de FileColumn a Paperclip]]></title>
    <link href="http://apuntesderails.amaiac.net/2010/10/30/migracion-de-ficheros-de-filecolumn-paperclip/"/>
    <updated>2010-10-30T10:49:00+02:00</updated>
    <id>http://apuntesderails.amaiac.net/2010/10/30/migracion-de-ficheros-de-filecolumn-paperclip</id>
    <content type="html"><![CDATA[<p>Dejo aquí una chuletilla para migrar los attachments de FileColumn a Paperclip que tenía por ahí guardada desde hace meses.</p>

<p>En este caso lo hice en la migración pero se puede hacer en una tarea rake, o directamente desde la consola. Una vez que tienes los campos necesarios para Paperclip, y los datos del attachment definidos en el modelo, puedes hacer:</p>

<pre><code>Modelo.all.each do |f| 
  f.fichero = File.open("#{RAILS_ROOT}/public/modelo/fichero/#{f.id}/#{f.fichero_viejo}",'rb')
  f.save
end 
</code></pre>

<p>Se puede mejorar mucho, pero como era sólo una vez esto me sirvió, lo dejo aquí por si a alguien más le sirve como punto de partida.</p>

<pre><code>class FdsAPaperclip ActiveRecord::Migration                                                                                                                
  def self.up
    rename_column :fds, :fichero, :fichero_viejo
    add_column :fds, :fichero_file_name, :string
    add_column :fds, :fichero_content_type, :string
    add_column :fds, :fichero_file_size,    :integer
    add_column :fds, :fichero_updated_at,   :datetime

    Fds.all.each do |f| 
      f.fichero = File.open("#{RAILS_ROOT}/public/fds/fichero/#{f.id}/#{f.fichero_viejo}",'rb')
      f.save
    end 

  end 

  def self.down
    rename_column :fds, :fichero_viejo, :fichero
    remove_column :fds, :fichero, :fichero_file_name
    remove_column :fds, :fichero_content_type
    remove_column :fds, :fichero_file_size
    remove_column :fds, :fichero_updated_at
  end 
end
</code></pre>
]]></content>
  </entry>
  
</feed>
