Categoría: Programación


Tip: recover to_xml serialized latin chars

Marzo 24th, 2010 — 2:21am

I am generating an XML file for dumping some data from one application to another. Yes, I know it’s nicer to build a RESTful API, but it’s for a very custom scenario and the shorter way is to write an XML based interface. So I simply export some contents:

def show_some_content
  @content = Content.find(:all)

  respond_to do |format|
    format.xml
  end
end

For my view:

<%= @content.to_xml %>

The problem then is the resulting XML has not only escaped the HTML entities, but also latin characters (ie accents and tildes). After googling for an hour I’ve found some people blaming to_xs method (HTML escaped version of to_s, as its definition says) used for XML serialization.

Well, from the other app I need to parse this XML and get the original text. How the hell do I get latin chars unescaped again?

require 'cgi'
require 'iconv'

encoded_text = "ram&#243;n"
# some fucking encoded text coming from the XML

puts "#{Iconv.iconv('UTF-8', 'ISO-8859-1', CGI.unescapeHTML(encoded_text)).to_s}"
# => "ramón"

That’s it :-)

Comentar » | Programación, Ruby on Rails

Vim code folding with ruby on rails

Diciembre 3rd, 2009 — 1:33pm

I love vim for editing everything, no matter if it’s code, config files, a note or a to-do list. I use it with a lot of plugins and config snips for doing things I need as file browsing, file searching, window splitting, tabbing etc… and I was trying to find a good plugin for folding code. After finding Simplefold and not being able to make it work, i found a config snippet Stackoverflow which works like a charm.

Once more I have to say: I’M LOVING VIM!!

Comentar » | Programación, vim

Massive emailer

Noviembre 20th, 2009 — 2:04pm

Yesterday I did a talk at Xing offices in Barcelona. It was about some tips on how to send emails massively from a Ruby on Rails application without being tagged as a spammer by Hotmail, Gmail or Yahoo. I’m not a dedicated expert on this, but I’ve been learning these things while developing last internet site, and I thought it may be also interesting for other developers.
Here are the slides (in english) of the presentation, formerly named “Massive emailing with Linux, Postfix and Ruby on Rails“.

Here is the PDF for downloading.

Comentar » | Linux, Networking, Programación, Ruby on Rails

rubyonrails.org en parking!

Abril 23rd, 2009 — 5:03pm

DIOS!! esta es de las cosas más fuertes que he visto en internet en los últimos años… El dominio de Ruby On Rails (rubyonrails.org) está en parking!!

He mirado el registro del whois, y veo que el dominio ha caducado. Desde hoy mismo (23 de Abril 2009, día de Sant Jordi) pertenece a unos registradores masivos, de estos que te secuestran el dominio y luego te piden $15.000 por el.
Y desde luego la culpa no es de los bulk registers, sino del propietario anterior del dominio. Yo siempre me preocupo de renovar mis dominios antes de que caduquen.
Y es que en realidad el hecho de que se lo hayan quitado significa, no sólo que no se ha preocupado de renovarlo, sino que también se le ha pasado el periodo de redención (1 o 2 semanas, ahora no estoy seguro).

Bueno ahora la gran pregunta es dónde encontrar la documentación de la API, algo que uso a diario, y que ahora desde Gotapi no está disponible.

Qué es lo que ha pasado??? y ahora que????

EDIT: son las 20:31 y ya está funcionando again. No sé qué es lo que ha pasado, pero en 1 minuto se me ha venido el mundo encima. Se da uno cuenta de lo frágiles que somos, y lo delgada que es la cuerda sobre la que caminamos…

Comentar » | Programación, Ruby on Rails

Remote pair programming

Marzo 24th, 2009 — 2:53am

Pair programming es una técnica en la que dos programadores trabajan con una misma consola, sobre el mismo código. Normalmente uno hace la función de driver y el otro la de observer. El objetivo es evidente: crear un mejor código, a la vez que conseguir que ambos programadores lo conozcan con el mismo nivel de profundidad.

Hoy tenía un problema con el proyecto en el que estoy trabajando, y pedí a Mauro que me echase un cable a ver si entre los dos conseguíamos solucionarlo. Él estaba en su casa, y yo en la mía. Los ingredientes para cocinar un pair programming realmente fluído en remoto:

  • Port forwarding: un puerto para el acceso remoto por SSH y otro para el acceso al servidor de aplicaciones (acceso web)
  • screen: Usando una versión ligeramente modificada del screenrc de r0sk. Usamos tres consolas: [0] log del servidor, [1] vim con el código, [2] una bash para hacer accesos de mysql u otras cosas que necesitemos
  • vim: con los controles mapeados para trabajar con tabs, y el plugin de FuzzyFinderTextMate para buscar y abrir archivos… así se puede hacer todo en una sola consola
  • Skype: Para hablar todo el rato durante la sesión de programación

Los programadores maceros que usan TextMate suelen hacer el pair programming usando VNC, pero aunque no lo he probado pongo las dos manos en el fuego a que tiene que ser una cagada. La pareja screen+vim es brutal por lo lightweight y lo flexible, y consume muy poquito ancho de banda con lo que la comunicación del conjunto (ssh + skype) es perfecta.

La experiencia ha sido GENIAL, y hemos resuelto el problema en aproximadamente 1 hora. Es como trabajar en pair programming en local, tocando el mismo código y comentando todo el rato. Ha sido una pasada, y lo recomiendo a todos los programadores que trabajen separados físicamente del resto del equipo.

Comentar » | Linux, Networking, Programación

Remove email confirmation on restful_authentication

Marzo 17th, 2009 — 6:56pm

SPANISH: Al considerar este artículo de interés común y dado que no he encontrado la explicación en ningún otro sitio, voy a redactarlo en inglés por si puede servir a alguien en un futuro. Si hay algo que no se entienda bien, no dudéis preguntármelo.

I’m working on an online app about auctions. A lot of the users coming to register don’t complete the email confirmation process, although I advise it in a red huge font at the login form. Most of the time I’m getting emils of users saying they registered but can’t login. When I look into the database, they didn’t activate their accounts.

Well, finally our CEO’s decided to remove the activation process. And this is when I’ve been googling for hours without luck, nobody explains the way to do it. Well no problem, it hasn’t been difficult at all. This is the way: a user is active if its activation_code in the database is Null.

  • Edit models/user.rb and remove this filter
    before_create :make_activation_code
    
  • In the same models/user.rb file, remove the activate method (we’re not activating any more user)
  • In the same models/user.rb file, remove the make_activation_code method (it’s almost at the end of the file).
  • Now edit controllers/users_controller.rb, remove completelly the activate method
  • In the same controller/users_controller.rb file, in the create mehod, set the activated_at time before saving the user
    @user = User.new(params[:user])
    @user.activated_at = Time.now.utc  # <--- add this line
        if @user.save
        [...]
    
  • Edit models/user_mailer.rb and completelly remove the activation method
  • Remove the file views/user_mailer/activation.html.rb
  • Edit the file views/user_mailer/signup_notification.html.erb and set the message as you like (variables are coming from models/user_mailer.rb)
  • Restart your app and test

I'm sure there are better ways, and I'm not the best coder in the world, but this way works for me. Maybe it will help someone one day...

Comentar » | Programación, Ruby on Rails

Adjudicado!

Enero 30th, 2009 — 8:51pm

Y por fin vio la luz….
Desde la vuelta de vacaciones de verano he blogeado menos, pero los que me conocen bien saben que he estado trabajando en el desarrollo de un software en Ruby on Rails. Llevo desarrollando este proyecto desde septiembre de 2008, y aunque el grueso se desarrolló antes de fin de año, no fue hasta la semana pasada que se produjo el lanzamiento oficial del site.

Se trata de Subastasde, un site dedicado a ofrecer información (tracking en realidad) de pisos y casas en subasta procedentes de embargos judiciales. Algunos ejemplos de lo que se puede encontrar:

El site no ofrece la posibilidad de pujar online, sino que se enfoca a un público profesional (subasteros básicamente), al que ofrece el seguimiento completo de los inmuebles que salen a subasta procedentes de los bancos. Después de la subasta si nadie lo ha comprado, el inmueble queda en estado de cesión durante un plazo corto de tiempo, que al expirar queda adjudicado a la entidad financiera. Entonces el banco tiene que venderlo a través de un API al modo de las inmobiliarias habituales.

En realidad no pretendo explicar aquí todo el detalle del proceso legal que sufren estos inmuebles. Lo que me interesa comentar es que este proyecto me ha dado la oportunidad de trabajar con una tecnología que era completamente nueva para mí.

Estoy orgulloso de poder decir que TODO el site es obra mía. Evidentemente he programado lo que los CEO’s me pedían, las ideas no han sido mías. Pero sí he programado toda la aplicación desde 0. He montado las bases de datos, he desarrollado los modelos y sus relaciones, los controladores, las vistas (compatibles IE6 y FFox a base de ostias), he aprendido Ajax (prototype y scriptaculous), javascript, he montado los servidores de desarrollo y de producción, con servicios que hasta ahora no había tocado… llevo un mes peleándome con los XML y otras técnicas SEO (I hate SEO!!), he aprendido Subversion y finalmente he migrado a Git. He tenido mi primer contacto con un sistema de tracking (usamos redmine)… y en definitiva puedo decir que mi vida como sysadmin poco a poco ha dado un giro radical desde hace un tiempo, una especie de metamorfosis o digievolución, para convertirme en coder de rails.
A todo esto, no puedo dejar de agradecer enormemente a mi amigo Mauro el tiempo y la paciencia que ha dedicado a ayudarme, cada vez que yo no me aclaraba con las API’s, cuando no tenía claro como debía hacer alguna cosa, o simplemente cuando caía en un agujero y no sabía como salir adelante. Gracias mussol :-)

Y en general todo esto me ha dado una ilusión nueva, me recuerda a mis inicios como administrador de sistemas, empapándome de documentación nueva cada día y peleándome con cada cosa que aprendía. Vuelvo a pasar las noches casi sin dormir, y siento que he recuperado la ilusión en un reto nuevo. Vuelvo a comprar libros, a leer listas de correo, a preocuparme por las versiones…
Y sé que hay muchísimos programadores mejores que yo, pero de eso se trata no? al fin y al cabo lo mismo pasa en sistemas.

Bien, así que a partir de ahora supongo que postearé más cosas relacionadas con Rails que con sistemas, y supongo que también iré informando de la evolución del proyecto, que dicho sea de paso tiene muy muy buena pinta.
Y ya sabéis, si queréis compraros un piso a la mitad de su precio de tasación, pasaos por Subastasde, porque cada día se incorporan nuevos inmuebles y algunos son verdaderos chollos.

Adjudicado! :-D

3 comentarios » | Internet, Programación, proyectos

99 bottles of beer

Septiembre 23rd, 2008 — 1:19pm

Se trata de una canción muy tonta en inglés, que cuenta desde 99 botellas de cerveza hacia atrás, repitiendo siempre la misma estrofa.
99 bottles of beer es un website GENIAL, en el que se expone un algoritmo que canta ésa canción, programado en cientos de lenguajes distintos (ahora mismo está en 1227 lenguajes).

Están los clásicos de toda la vida, yo me puse nostálgico con la versión en BASIC, ya que fue el primer lenguaje que programé en mi vida, cuando tenía 9 años y con un ordenador Amiga500.

También me hizo gracia la versión en C++, que me recordaba a la universidad. Y es que ahora se estudia java en mi antigua facultad, pero hubo un día en que allí estudiábamos hombres de pelo en pecho, y programábamos en C y C++.

Me han hecho gracia también las versiones en Ruby y en Python, los lenguajes de moda en el desarrollo web. Yo programo Ruby on Rails, y un poquito de Python tmabién, con Cherrypy y Cheetah. En realidad me gusta más el algoritmo en Python que en Ruby, pero claro, hay que contar con que está hecho en el lenguaje puro, sin el framework de Rails…

Curiosidad! me han encantado las versiones de procmail, de Asterix (s/ix/isk/), y de vim… como buen alma de sysadmin.

Y entre las rarezas me han llamado la atención Brainfuck, Whitespace y Cow, que son un verdadaero pain-in-the-ass.

Curiosa por cierto la versión en Perl, que viene ofuscada mediante un módulo del CPAN llamado Acme::EyeDrops (+ info).

En realidad no he querido buscar nada más, porque entre pasearme por los lenguajes y leer hilos e hilos de comentarios he pasado unas 2 horas anonadado. Así que cierro la página porque sino perderé el día entero.

Comentar » | Geek, Programación

Sendmail con attachments

Mayo 22nd, 2006 — 10:45am

Buscando una herramienta para exportar un dump de Oracle8 en formato SQL de texto plano, he encontrado el siguiente script, que sirve para enviar mensajes de correo desde línea de comandos CON FICHEROS ADJUNTOS usando sendmail:

#!/bin/ksh

# --------------------------------------------------------------------
# Script:	unix_mail_withattachments.ksh
# Aurthor:	Ravin Maharaj
# Purpose:	Use sendmail to e-mail messages from Unix with
#		file attachements
# --------------------------------------------------------------------

SUBJ="Send mail from Unix with file attachments"
TO=someone@domain_name
CC=someoneelse_1@domain_name,someoneelse_2@domain_name
(
cat << !
To : ${TO}
Subject : ${SUBJ}
Cc : ${CC}
!

cat << !
HOPE THIS WORKS
This sample E-mail message demonstrates how one can attach
files when sending messages with the Unix sendmail utility.
!

uuencode ${file_1}  ${file_1}
uuencode ${file_2}  ${file_2}
uuencode ${file_3}  ${file_3}
!
) | sendmail -v ${TO} ${CC}

Evidentemente falta probarlo con bash. Lo dejo aquí por si a alguien le interesa... yo por mi parte haré pruebas esta semana.

2 comentarios » | Geek, Networking, Programación

Publicar código en Wordpress 2

Abril 26th, 2006 — 1:19am

Lo cierto es que como gestor de contenidos para blogging Wordpress está muy bien, sobretodo desde que en su segunda versión incorporó el editor wysiwyg. Aún así, sigo encontrando un gran fallo en la dificultad del mismo para la exposición de código. Sigo sin entender por qué no incorpora FCKeditor de serie, que es mucho más cómodo, completo y fácil de utilizar.

Sea como sea, ante la escasez de herramientas para el markup de código, he copiado los estilos del blog de pof para el tag pre. Espero que no le importe, pero conociéndole estoy seguro de que sus CSS son GPL :-D

Así, aunque siga sin poder anidar el código porque el editor no respeta los espacios ni los transforma a HTML, por lo menos se verá claramente lo que es código y lo que no:

#!/bin/bash
echo "Che mussol!     OvO"

3 comentarios » | Blogs, Programación

Volver arriba