miércoles, 30 de julio de 2008

foreign key migrations

Hoy acabo de darme cuenta por n-esima vez, y no escarmiento, de que a veces es importante leer antes de ponerse a hacer las cosas.

Me he instalado el plugin Foreign Key Migrations y me daba este error en el db:migrate

rake aborted!
undefined method 'name' for #
C:/projects/f2f/community/vendor/plugins/foreign_key_migrations/lib/red_hill_consulting/foreign_key_migrations/active_record/connection_adapters/table_definition.rb:16:in 'column'
C:/projects/f2f/community/vendor/plugins/foreign_key_migrations/lib/red_hill_consulting/foreign_key_migrations/active_record/connection_adapters/table_definition.rb:11:in 'primary_key'
C:/projects/f2f/community/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb:96:in 'create_table'


Al principio he pensado que era culpa de que era cosa de que lo he instalado en Rails 2.1.0 y después de perder un buen rato depurando y buscando donde estaba definido el metodo name de TableDefinition, la solución era tan simple como leerse la página del plugin:

Dependencies

  • RedHill on Rails Core (redhillonrails_core).

Y efectivamente, despues de instalar RedHill on Rails Core ya funciona.... que penita....

viernes, 18 de julio de 2008

Exportar a excel desde ruby

Normalmente, la exportación a Excel la resuelvo simplemente creando un fichero csv con FasterCSV

csv_string = FasterCSV.generate do |csv|
# Aquí la generación del csv
end
send_data csv_string, :filename => 'nombre.xls'


Pero me he encontrado en una aplicación que el cliente pide directamente un Excel para evitar la pantalla de importar CSV. He encontrado estas alternativas:

  • Librerias Win32OLE, pero esta opción no me vale ya que el servidor es Linux
  • La gema Spreadsheet-Excel , que genera formato Excel 95
  • Generar una tabla HTML y ponerle las cabeceras de excel
  • Generar un XML para Excel 2003 tal y como cuentan en la wiki de rubyonrails
Al final la solución que he elegido es la última, practicamente ha sido un copy-paste del ejemplo añadiéndole un nuevo estilo en negrita:

xml.Style 'ss:ID' => 'Header' do
xml.Font 'ss:Bold' => '1'
end

Y aplicar ese estilo a las celdas de la cabecera

xml.Cell 'ss:StyleID'=>'Header' do


El único problema que me he encontrado es que OpenOffice no reconoce un .xls en formato XML, así que para abrirlo con Calc, hay que renombrarlo a .xml. Con Office se abre sin problemas.

martes, 8 de julio de 2008

Tag Cloud Widget

No me gusta nada como se muestran por defecto los tags, simplemente en un listado, me gustá más la opción de mostrar un Tag Cloud

Y en Compender he encontrado la solución que ya he puesto en este blog :-)

http://www.compender.com/2007/12/simple-tag-cloud.html

viernes, 27 de junio de 2008

Error 501 Syntactically invalid HELO argument(s) en envío de mails

Enviando una newsletter me he encontrado con que un servidor rechazaba los mails con el mensaje de error:

Error 501 Syntactically invalid HELO argument(s) en envío de mails

Investigando un poco parece ser que el problema es que el nombre de servidor que tenía definido en /etc/hosts tenía un _ y tal y como cuentan aquí no cumple el estandar RFC2821

To promote interoperability and consistent with long-standing
guidance about conservative use of the DNS in naming and applications
(e.g., see section 2.3.1 of the base DNS document, RFC1035 [22]),
characters outside the set of alphas, digits, and hyphen MUST NOT
appear in domain name labels for SMTP clients or servers. In
particular, the underscore character is not permitted. SMTP servers
that receive a command in which invalid character codes have been
employed, and for which there are no other reasons for rejection,
MUST reject that command with a 501 response.


Lo curioso es que practicamente ningún servidor hace esa comprobación, ya que sólo me ha pasado con un dominio.

Y para acabar una demostración del problema:

telnet mailin.blueyonder.co.uk 25
Trying 195.188.53.99...
Connected to mailin.blueyonder.co.uk.
Escape character is '^]'.
220 exim9.blueyonder.co.uk ESMTP Exim 4.68 Tue, 17 Jun 2008 07:54:52 +0100
helo prueba_1
501 Syntactically invalid HELO argument(s)
8 Tue, 17 Jun 2008 07:46:24 +0100
helo prueba
250 exim13.blueyonder.co.uk Hello prueba

domingo, 15 de junio de 2008

ImageScience y FreeImage en x86_64

Hace un tiempo tuve que hacer un pequeño tratamiento de imagenes, consistente en reescalar las imagenes subidas por los usuarios al servidor. Despues de leer sobre las alternativas disponibles, que son básicamente las que aparecen aquí (RMagick, Mini-magic y ImageScience), me decidí por ImageScience.

Un pre-requisito es instalar FreeImage, pero al instalar la versión 3.10 en Slicehost (Dual-Core AMD Opteron de 64 bits)

uname -a
Linux pre.beruby.com 2.6.18-xen #1 SMP Tue Feb 12 06:40:50 UTC 2008 x86_64 GNU/Linux

da un error de compilación

Source/FreeImage/PluginBMP.cpp: In function 'BOOL LoadPixelDataRLE4(FreeImageIO*, void*, int, int, FIBITMAP*)':
Source/FreeImage/PluginBMP.cpp:227: error: no matching function for call to 'MIN(int&, long int)'
Source/FreeImage/PluginBMP.cpp:282: error: no matching function for call to 'MIN(int&, long int)'
make[1]: *** [Source/FreeImage/PluginBMP.o] Error 1


Como siempre, googleando un poco encontré un parche con la solución que consiste simplemente en cambiar la definición de un par de variables desde DWORD y int a long.

Parece que en la última versión de CVS de FreeImage ya esta solucionado el error, pero bueno, esta solución tambien es valida :-)