Leer email con Rails

La Guía de Rails (en este proyecto uso Rails 4) explica como procesar los correos, En el ejemplo, se lee de la entrada estándard. Sin embargo, el asunto medio complicado es como llevar los correos a la entrada estándard de Rails.

En el caso que me ocupa es leer correos de un servidor via POP3. La solución para mi fue combinar fetchmail con la aplicación de rails. Fetchmail es una joya, puede traer correo muy eficientemente casi de cualquier fuente. Una vez que trae el correo lo puede dejar en el buzón local del usuario o pasarlo a un MDA (Mail Deliver Agent). Cuando se pasa el correo al MDA lo que hace es iniciar el comando y pasar el mensaje a través de la entrada estándard. Ahí está todo el truco.

Primero, como uso rbenv, hice un script para iniciar el rails con un comando más simple el archivo /home/israel/bin/rails_app.sh

#!/bin/bash

export PATH=/home/israel/.rbenv/shims:/home/israel/.rbenv/bin:/home/israel/bin:/home/israel/.rbenv/shims:/home/israel/.rbenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

cd /home/israel/mi_app

bundle exec rails runner "RecibosMailer.receive(STDIN.read)"

Luego, en el archivo .fetchmailrc quedó así:

poll pop.gmail.com protocol POP3 port 995
  username "usuario@gmail.com" password "secreto"
  ssl mda "/home/israel/bin/rails_app.sh"

Cada vez que fetchmail trae un mensaje, lo pasa a la aplicación de rails que está escuchando en la entrada estándard. El método que lee el correo puede hacer lo que sea necesario, sirva como ejemplo, solo mostrar el remitente:

class RecibosMailer < ActionMailer::Base
  def receive(email)
    puts "CORREO DE #{email.from}"
  end
end

El detalle que encuentro con esta solución es con cada correo, se inicia una instancia de la aplicación que se termina al leer el mensaje. Sin embargo, no se espera un alto volumen de mensajes. Así que este detalle no creo que de mucho problema.

Deja un comentario

Openvpn Debian 8 Jessie

Para poder iniciar openvpn en Debian 8, es necesario, además de agregar el archivo de configuración /etc/openvpn/archivo.conf ejemplo:


client
dev tun
proto udp
remote servidor-vpn.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun

ca ca.crt
cert certificado.crt
key llave.key

ns-cert-type server
comp-lzo
verb 3

Tambièn es necesario modificar el archivo /etc/default/openvpn , en mi caso, solo quité el comentario a la línea:

AUTOSTART="all"

Posteriormente, fué necesario recargar la configuración:


# systemctl daemon-reload
# service openvpn start

Deja un comentario

Ruby 1.8.7 gcc 4.7

Hay un error en los binarios de ruby compilados con gcc 4.7.
Para instalar ruby 1.8.7 con rbenv, el truco es:

export RUBY_CFLAGS="-O2 -fno-tree-dce -fno-optimize-sibling-calls"
rbenv install 1.8.7-p358

Referencia:
https://bugs.ruby-lang.org/issues/6383#note-1
http://stackoverflow.com/questions/10820323/install-bundler-using-rvm-ruby-1-8-7-with-gcc-4-7-on-linux

Deja un comentario

Imagen ISO a USB stick

Como root


cp archivo.iso  /dev/sdX
sync

X es la letra de la unidad, usar dmesg para saber que unidad se asignó. La unidad debe estar desmontada. Nótese que no es la partición.

Deja un comentario

CFDI y los ampersands (&)

Tengo un cliente para el que que implementamos la generación de CFDIs. El programa que hicimos genera el XML, y lo enviamos a timbrar con el PAC (Edicom). Todo iba bien, hasta que apareció un receptor que tiene un ampersand en el nombre y en el RFC. Por ejemplo:

Rfc: X&Y081118ICA
Nombre: Xenon & Young Consulting

Según la especificación del SAT, hay que remplazar el ‘&’ por la secuencia de escape ‘&’ así en el xml, debería quedar:


<cfdi:Receptor rfc="X&amp;Y081118ICA" nombre="Xenon &amp; Young Consulting">

Con eso, en teoría debería estar bien formado el xml. Pero, al intentar el timbrado, el PAC indicaba que el RFC: “X&amp;Y081118ICA” estaba erróneo.

Además de lo anterior, al generar la cadena original utilizando el xslt del propio SAT, volvia a cambiar el & por la secuencia de escape y duplicaba el dichoso &. La sección de la cadena original queda mas o menos así:


|X&amp;Y081118ICA|Xenon &amp;amp; Young Consulting|

Primer intento de solución

Lo primero que intenté fué quitar la secuencia de escape en el xml.

El xml quedaba así.


<cfdi:Receptor rfc="X&Y081118ICA" nombre="Xenon & Young Consulting">

Y la cadena original así:


|X&amp;Y081118ICA|Xenon &amp; Young Consulting|

No sirvió. Ahora el proveedor dice que el sello digital era incorrecto.

Segundo intento

Quité también la secuencia de escape de la cadena original, ahora quedó asi:


|X&Y081118ICA|Xenon & Young Consulting|

Y entonces funcionó.

Moraleja

En lo que a los ampersands se refiere, no hay que usar secuencias de escape como indica el Anexo 20. Hay que tratarlos como un caracter mas.

Aún no me he encontrado con apóstrofes y comillas. Seguramente, en algún momento aparecerá ese problema.

7 comentarios

Formato de números en Ubuntu 12.04 y 13.04

En ubuntu 12.04 los números se están formateando al estilo de España, no al estilo de México, es decir, el separador de miles es el punto y el separador de decimales la coma.

La prueba se puede hacer con:

locale -k LC_NUMERIC

He encontrado dos soluciones. La primera es ejecutar:

sudo update-locale LC_NUMERIC=es_US.UTF-8

Lo que agregará la línea LC_NUMERIC=es_US.UTF-8 al archivo /etc/default/locale.

La segunda solución consiste en modificar, como super usuario, el archivo: /usr/share/i18n/locales/es_MX en donde dice (mas o menos por la línea 80):

LC_NUMERIC
copy "es_ES"
END LC_NUMERIC

poner

LC_NUMERIC
copy "es_US"
END LC_NUMERIC

luego ejecutar:

sudo dpkg-reconfigure locales

El bug en launchpad: https://bugs.launchpad.net/ubuntu/+source/langpack-locales/+bug/997248

1 comentario

Tipografías TrueType en LaTeX y Ubuntu

Investigando como poder usar fuentes TrueType en un documento de LaTeX, encontré que la
solución mas simple era usar XeTeX, que se encarga de procesar tipografías Open Type,
True Type. En realidad, trabaja con cualquier tipografía disponible en el sistema.

Para mi instalación de LaTeX, uso los siguientes paquetes:

sudo aptitude install texlive-latex-base texlive-latex-base-doc texlive-latex-extra texlive-latex-recommended latex-beamer texlive-fonts-recommended texlive-xetex lmodern texlive-font-utils

Las fuentes TrueType se pueden instalar, copiándolas a /usr/share/fonts/truetype/,
yo preferí colocarlas en el directorio /usr/share/fonts/truetype/extras
Una vez copiados los archivos, hay que actualizar el caché

sudo fc-cache -fv

Para usar las tipografías true type solamente es necesario incluir
en el preámbulo del documento (suponiendo que se desea usar la tipografía Ubuntu):


\usepackage{fontspec}
\defaultfontfeatures{Mapping=tex-text}
\usepackage{xunicode}
\usepackage{xltxtra}
\setmainfont{Ubuntu}

Y generar el pdf con xelatex

xelatex archivo.tex

Todo sobre XeTeX en http://tug.org/xetex/

Deja un comentario