Archivo de la categoría: Programación

Enviar email con valores de una base de datos UTF-8 en Python

Si tenemos un base de datos MySQL y queremos enviar emails usando la librería smptlib de python, nos puede dar más de un quebradero de cabeza si queremos usar la codificación UTF-8. Pongo aquí este breve manual que he hecho con la ayuda de Héctor, un compañero del proyecto en el que estoy trabajando ahora mismo.

Si usamos la librería MySQLdb, tendremos que añadir unos parámetros adicionales para indicarle que nos vamos a conectar a una base de datos con codificación UTF-8.

Ahora creamos el mensaje a enviar:

Y por último, lo enviamos a través del servidor de correo:

Uso del comando date en cron

Si queremos crear un fichero de log con el resultado de un script que vamos a lanzar periódicamente usando cron, conviene tener en cuenta un detalle de sintaxis.


$ crontab -e

# m h  dom mon dow   command
00 03  * * * /ruta/script.sh > /ruta/fichero_<code>date +\%y_\%m_\%d

.log

Esto sería un ejemplo de la lista de tareas de cron, si os fijáis en el detalle de

date +\%d_\%m_\%y

se han escapado los símbolos de %. Esto se explica perfectamente en el man 5 crontab, pero lo escribo aquí para no olvidarme y por si de paso le sirve a alguien más.

The ‘‘sixth’’ field (the rest of the line) specifies the command to be run. The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the crontab file. Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input. There is no way to split a single command line onto multiple lines, like the shell’s trailing «\».

Más información: cron y date.

substr HTML seguro en PHP

Si habéis programado en PHP seguramente habréis utilizado la función substr que sirve para obtener una subcadena de una cadena de texto mayor tamaño. Por ejemplo:

Obtendríamos como resultado ‘Hola’.

Pero si estamos usando una cadena que contiene código HTML, es posible que se queden etiquetas abiertas y nos de problemas. Por ejemplo:

Obtendríamos como resultado ‘<a h’. Y no es lo que quería.

He encontrado una solución en los comentarios de la propia web de PHP. Sería usar la siguiente función en vez de substr.

Por tanto, si ahora cambiamos substr por csubstr, obtendríamos como resultado ‘<a href=»helloworld.php»>Hello</a>’. Que a la hora de imprimirlo en una web quedaría correctamente.

Haciendo un planet en python

La práctica 5 de AAP consistía en crear un programa que recogiese las noticias de diferentes fuentes y las mostrase en un sólo documento HTML, lo que se viene a denominar un planet en la jerga bloguera.

En mi caso lo he programado en Python haciendo uso de la librería feedparser y genero una página HTML así como un feed usando la librería PyRSS2Gen.

He usado la codificación de caracteres utf-8 en todo momento, pero tengo un problema al generar el archivo html ya que no se guarda como utf-8 (si lo abrimos con un editor como geany podemos comprobar que está «sin codificación»), y luego al mostrarlo en el navegador no se ve bien. El caso es que en mi máquina sí se muestra correctamente, pero en el servidor donde lo he alojado no, como podéis ver en http://swecai.ugr.es/~planet_etsiit. Si en el navegador seleccionáis la codificación unicode, se ve bien, e incluso en el header está el meta indicando que es utf-8. ¿Alguna idea de cómo solucionar esto? Editado: blaxter ha dado con la tecla en este comentario. ¡Gracias!

Podéis descargar la aplicación libremente: planet.tgz. En el fichero index.html viene una descripción más detallada del trabajo realizado y en la carpeta scripts se encuentra el fichero actualizar.py que se encarga de generar los ficheros planet.html y feed.xml a partir de los feeds situados en sites.txt cada cierto tiempo, que podemos indicar usando una tarea cron.

Cómo clonar ramas (branch) en git

Escenario
Tienes tu proyecto en un repositorio de github.com con dos ramas (master y foo) y quieres clonarlas a tu disco duro.

Solución

git clone git@github.com:usuario/proyecto.git

Con esto obtendremos la rama principal (master).

git fetch
git checkout --track -b foo origin/foo

Y con esto otro la rama foo.

¿Conocéis alguna forma más sencilla? En este caso tenemos dos ramas, pero si hubiese N+1, ¿tendremos que descargar todas una a una?

Vía

AAP Práctica 3 – Script para Greasemonkey

Greasemonkey es un plugin para el navegador Firefox que nos permite modificar el comportamiento de la página web que estemos visitando gracias a los diferentes scripts que tengamos instalados. Estos scripts se programan en Javascript, de manera que tenemos una versatilidad increíble para cambiar el aspecto y dotar de más funcionalidad a una web.

Para mi práctica he hecho un script muy simple pero útil para los foros de Swad, la plataforma de apoyo a la docencia con más uso de la Universidad de Granada. La funcionalidad que he añadido es la de citar en tu respuesta el trozo de texto que selecciones de un mensaje anterior.

Los que tengáis cuenta en Swad podéis instalar el script simplemente pinchando en: replyswad.user.js (previamente has de tener instalado Greasemonkey).

Este sería el botón extra añadido:

boton citar texto swad

Y este el aspecto que presentaría nuestro mensaje:

mensaje con texto citado swad

AAP Práctica 1 – Recursos para la asignatura

Aquí os dejo con una serie de recursos que nos pueden ser útiles para la asignatura de AAP, junto con una valoración personal sobre 5 puntos.

  • Firebug: plugin de Firefox imprescindible para el desarrollo web e incluye un intérprete de Javascript así como un profiler y un debugger. 5/5 puntos
  • Visual jQuery: es una herramienta para la navegación por la documentación de jQuery, que nos permite encontrar fácilmente ayuda sobre un procedimiento que estemos buscando de este popular framework de Javascript. 4/5 puntos (debería estar actualizado a la última versión estable 1.3.1)
  • gotAPI: buscador vertical para distintos lenguajes de programación. Imprescindible para encontrar rapidamente ayuda sobre funciones de un determinado lenguaje (HTML, Javascript, PHP, Perl, Ruby, C++, etc.) 4/5 puntos
  • Javascript in Ten Minutes: un repaso rápido a la funcionalidad y sintaxis de Javascript. 3/5 puntos (viene bien para un vistazo rápido)
  • <WebDevResourceList />: listado de frameworks, cms, wikis, blogs, foros y demás herramientas que podemos filtrar por el lenguaje programación que utilizan (PHP, Python, Ruby, Perl, Java…). 2/5 puntos (algo tonto, pero curioso)
  • Visual Event: nos permite añadir una capa sobre la web para ver los eventos javascript que incorpora. Se puede ver un ejemplo aquí. 3/5 puntos (sólo funciona con algunas librerías)
  • XML Examples: algunos ejemplos sobre cómo trabajar con XML, aplicando CSS, XSLT, Ajax y Javascript. 5/5 puntos (ejemplos claros e ilustrativos)

V8, el intérprete de Javascript de Google Chrome en Linux

En clase de AAP vamos a aprender a usar JavaScript no sólo como complemento al diseño web, si no como el lenguaje de programación completo que es. Para ello usaremos un intérprete que funcione desde línea de comandos. Entre otros, podemos encontrar SpiderMonkey (paquete spidermonkey-bin en Ubuntu) que está implementado en C, o por ejemplo Rhino que está hecho en Java.

En este post pretendo mostrar cómo instalar V8, el motor de JavaScript que usa el navegador Google Chrome y que está implementado en C++.

Primero nos descargamos el código fuente:

svn checkout http://v8.googlecode.com/svn/trunk/ ./v8

Para compilarlo, necesitamos tener instalado scons:

sudo aptitude install scons

Una vez instalado, procedemos a compilarlo:

cd v8
scons sample=shell

Y con esto, ya tendremos un ejecutable con el que podemos interpretar nuestros programas en JavaScript. Para facilitar las cosas podemos crear un enlace simbólico:

sudo ln -s /home/draxus/v8/shell /usr/bin/v8

Otros motores de última generación son TraceMonkey (Firefox 3.1) o SquirrelFish (Safari 4). Es interesante estar al tanto del rendimiento de estos motores porque están continuamente mejorando para ser competitivos en aplicaciones muy ricas en JavaScript como puede ser Gmail.