Thinking on hiring me?

Please read

Fernando Guillén

a Freelance Web Developer

cabecera decorativa

software development as an artistic expression

Archive for the ‘útil’ Category

Domingo, Febrero 1st, 2009

Ruby on Rails, Paperclip y validaciones de dimensiones

Me he picado una extensión de Paperclip para porveer de validaciones de dimensiones para las imágenes adjuntas aquí la comparto contigo por si te resulta útil.

No he hecho un parche para Paperclip pues eso supone un gran esfuerzo en tests y demás y eso tendrá que esperar un poco.

Lo he organizado todo para que copies y pegues el código en un fichero en /lib y lo requieras desde el environment.rb con eso debería valer pero úsalo bajo tu entera responsabilidad :)

La extensión provee de dos nuevos validates:

  • validates_attachment_width
  • validates_attachment_height

Que se pueden usar con toda la convinación de opciones que el nativo ‘validates_attachment_size‘.

Por ejemplo:

validates_attachment_width :photo, :greater_than => 576, :less_than => 1000
validates_attachment_height :photo, :greater_than => 150, :less_than => 300
 
validates_attachment_width :photo, :in => 576..1000
validates_attachment_height :photo, :in => 150..300, :message => "file height must be between :min and :max pixels."

Tenemos por ejemplo la validación del ancho:

    def validates_attachment_width name, options = {}
      min     = options[:greater_than] || (options[:in] && options[:in].first) || 0
      max     = options[:less_than]    || (options[:in] && options[:in].last)  || (1.0/0)
      range   = (min..max)
      message = options[:message] || "file width must be between :min and :max pixels."
 
      attachment_definitions[name][:validations][:width] = lambda do |attachment, instance|
        if attachment.file? && !range.include?( Geometry.from_file(attachment.queued_for_write[:original]).width.to_i )
          message.gsub(/:min/, min.to_s).gsub(/:max/, max.to_s)
        end
      end
    end

El código completo lo tienes aquí:  paperclip_validations_extended.rb.

Un ejemplo de tests y usos lo tienes aquí: paperclip_validations_extended_test.rb.

A mi me está funcionando.. y a tí?

Jueves, Enero 22nd, 2009

Como linkar a la última versión de un fichero en GitHub

Sino conoces github no sigas leyendo.. y échale un vistazo, sino es el caso igual te interese este truquito que he descubierto trasteando.

Resulta que si quieres compartir un link de un fichero de un proyecto en github puedes navegar por los ficheros llegar al que quieres compartir y copiar el link que muestra la página, algo como esto:

http://github.com/fguillen/euruko_app/blob/b94f2458b54fdea82e970810de5e9bbe9f63a385/doc/TODO.md

Y bien, funciona, o eso parece.. pero no, porque entonces estarás compartiendo el estado congelado del fichero en un commit determinado osea que cuando tus amigos sigan el link dentro de unos diás, después de unos commits, seguirán viendo la misma versión ya anticuada.

El truco para compartir un link que siempre tenga la última versión disponible es sustituir el identificador del commit por el alias de ‘último commit‘ que es ‘HEAD‘, tal que así:

http://github.com/fguillen/euruko_app/blob/HEAD/doc/TODO.md

Ahí queda :)

Sábado, Diciembre 27th, 2008

Shell: script para borrar todos los delete pendientes con GIT

Tengo la mala costumbre de borrar los ficheros desde mi editor de texto así que cuando vuelvo a consola y hago un ‘git status‘ me salen un montón de ficheros borrados y no encuentro el comando de ‘git‘ para decirle: cárgatelos todos en el próximo commit.

Así que me he hecho este script para decirle exactamente eso:

$ git rm `git status | grep "deleted" | cut -f 2 -d ":" | cut -d " " -f 5`

Cuidadín con él eh :).. a ver si no va a estar bien..

Actualización: como dice Juanma en los comentarios podemos hacerlo mucho más elegantemente con:

git add -u
Domingo, Diciembre 21st, 2008

Ruby on Rails: script para volver a la anterior sintaxis de tests

El nuevo generador de scaffold de RoR 2.2 no se lleva bien con Texmate, la nueva sintaxis para tests impide que usemos el utilísimo atajo de teclado ‘ctrl + shift + R‘ para ejecutar solamente uno de los tests de todo el fichero.

Este script convierte las líneas tipo:

test "should get new" do

en:

def test_should_get_new

Seguro que esto le espanta a más de uno, pero mientras Texmate no soporte la nueva sintaxis yo tampoco la soporto :). El script es la primera versión que me ha salido, se aceptan mejoras.

El script:

if ARGV[0].nil?
  puts "Indica la ruta al fichero" 
  exit
end
 
if not File.exists?(ARGV[0])
  puts "Fichero no encontrado: #{ARGV[0]}" 
  exit
end
 
result = ""
 
File.open(ARGV[0]).read.each do |line|
  if line =~ /^\s*test ".*" do$/
    line.gsub!( /\"\sdo\s*/, "" )
    line.gsub!( /"/, "" )
    line.gsub!( /^\s*/, "" )
    line.gsub!( /\s/, "_" )
    line.gsub!( /^/, "def ")
 
    line = "  " + line + "\n"
  end
 
  result << line
end
 
File.new( ARGV[0], "w+" ).puts( result )
Lunes, Abril 21st, 2008

El atajo shell del día.

Monitoreando un fichero y enviando alertas por email: 

Este script envía un email cada vez que aparece la palabra ‘now’ en el fichero stuff.

$ tail -f stuff | awk ' /now/ { system("mail -s \"Now Occured\"  mail@foo.com < msg") }'

Hay quién se anima el día leyendo la frase zen diaria en su calendario, o el consejo cristiano, o el chiste del pajares, son buenos recursos para comentar con los compañeros en la hora del café.

Y los hay quienes se activan con el comando o atajo shell del día.

[shell-fu]$, Recopilatorio de comandos y atajos shell.

Ya estás alimentando tu lector de feeds :)

Vía GenBeta.

Viernes, Abril 18th, 2008

Tomcat 5.5 nuevas features: no funciona nada.

¿Dónde demonios se ha metido todo? ¿El webapps? ¿El /manager? ¿El log? ¿Que demonios pasa con los VirtualHosts?

Todas estas preguntas que arrastro desde hace tiempo, desde que Tomcat 5.0 ya no está soportado en Ubuntu.

La 5.5 viene con un montón de features, la principal es que no funciona nada de lo que me funcionaba antes.

Alguna luz se me ha abierto.

Para que funcione el /manager hay que instalar:

$ sudo aptitude install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps

Y lo encontrarás en:

http://localhost:8180/manager/html/

La seguridad como siempre nos juega una mala pasada y hay que mandarla a freir lechugas:

$ sudo vim /etc/default/tomcat5.5
TOMCAT5_SECURITY=no

El webapps se encuentra aquí:

/usr/share/tomcat5.5/webapps/

Este tutorial está bastante bien.

Actualizado 2008-05-14:

En Ubuntu 8.04 vuelve a fallar todo y aunque reinstale todo el tomcat no arranca

Solución: seguir este tutorial.

Si en el  /usr/share/tomcat5.5/logs/catalina.out te aparece algo así como esto:

java.lang.ClassNotFoundException: org.apache.catalina.startup.Bootstrap

Debes reinstalar libtomcat5.5-java:

 $ sudo aptitude reinstall libtomcat5.5-java

Suerte.. mucha suerte :)

Martes, Marzo 18th, 2008

Las fuentes: otra hoguera en el infierno CSS

Uno de los múltiples dolores de cabeza del diseño web son las fuentes.

Nunca sabemos qué fuentes podemos usar pues no sabemos qué fuentes tendrá instalado el usuario final.

Tampoco encontraba ningún sitio donde se mostraran listados de fuentes y como quedan renderizadas como parte de una web.

Ahora codestyle nos resuelve las dos papeletas de un plumazo.

Aquí podemos encontrar directorios de fuentes con sus posibilidades de encontrarlas instaladas en un usuario dependiendo de su sistema operativo y también nos muestra como quedan renderizadas como html (no lo verás sino la tienes instalada.. claro¡).

Martes, Marzo 18th, 2008

Twiddla, pizarra online compartida

Otra aplicación que me dejo aquí para recordarla cuando la necesite, pues han sido muchas veces en el pasado y no la encontré entonces.

Se trata de Twiddla: una pizarra online compartida.

Me parece una herramienta imprescindible cuando se apuesta por el teletrabajo.

Vía genbeta.

Jueves, Marzo 6th, 2008

Glabels, generador de etiquetas para Linux

glabelsApunto aquí esta aplicación para que no se me olvide.

Muy curiosa y útil en la oficina.

¿Cuántas veces nos hemos pegado con el Open Office para tener plantillas para imprimir etiquetas para sobres y demás?

Ahora con Glabels todo es mucho más sencillo.

También sirve para tarjetas de visita.

a Freelance Web Developer is proudly powered by WordPress
Entries (RSS) and Comments (RSS).

Creative Commons License
Fernando Guillen's blog by Fernando Guillen is licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License.