Mucha tarjeta de crédito, ¿pero cómo funciona?

Empezó poco a poco, quizás con un poco de desconfianza por parte de los usuarios, pero ya practicamente forma parte de la rutina de cualquier usuario de Internet.

Sí, hablo del pago con tarjeta de crédito, el que no lo usa habitualmente seguro que lo ha usado alguna vez pero, para los más técnicos, ¿os habéis preguntado cómo funciona?

En esta entrada voy a explicar, de forma breve y esquemática, sin entrar en detalles de implementación, cómo es posible comunicar de manera segura un sitio web con una pasarela de pago (o tpv). Obviamente existirán más mecanismos, pero a grandes este es el esquema usado.

¡Sigue leyendo!

Leer mas

django-thumbs ahora en blanco y negro

Trabajando con miniaturas de imágenes, nos ha surgido la necesidad de hacer algunas en blanco y negro.

Con este objetivo he decido mejorar el módulo django-thumbs añadiendo soporte para esto y de paso me he animado y ha realizado mi primera publicación en http://djangosnippets.org.

Toda la documentación está en el snippet que podéis encontrarlo aquí http://djangosnippets.org/snippets/2817/ :)

Extraño fallo en python reportlab 2.5

En el proyecto que ando inmerso actualmente estamos generando documentación en PDF continuamente.

 

Para ello renderizo un HTML con django para después haciendo uso de la biblioteca xhtml2pdf convertirlo a PDF, con muy buenos resultados. Esta biblioteca a su vez hace uso de reportlab (un toolkit para generar PDF), en su binding para python, concretamente estoy hablando de la versión 2.5.

Pues bien, aquí me he encontrado con un fallo en dicha biblioteca, que además está muy documentado y saltaba en documentos concretos, siendo muy difícil localizarlo en el documento origen.

 

Antes de andar buscando e indagando porque ciertos HTML provocaban el error he decido parchear el mismísimo reportlab, con sólo añadir 2 líneas tenemos el problema solucionado :)

 

Aquí les dejo el parche. Aplicar con patch -p1 -i reportlab_fix.patch en el directorio raíz de reportlab.

Mejorando django-simple-captcha

Esta semana estamos siendo objeto de un ataque de spam (basado en comentarios) en thechurchofhorrors.com, que aparte de lo absurdo de su objetivo es un auténtico incordio.

TheChurchofHorrors es un Magazine Cultural que yo mismo desarrollé hace un tiempo que sigo manteniendo y mejorando, el código fuente completo lo podemos encontrar en https://github.com/dugo/The-Church-of-Horrors

Al parecer el posible atacante ha sido capaz de romper la protección captcha de los comentarios, basada en django simple captcha versión 0.3.0

Recuerdo que se acordó la publicación de comentarios libre para fomentar la participación y la libertad de expresión, de hecho en las implementaciones iniciales mi idea era aprobar los comentarios, algo que molestó a mis compañeros.

Para solucionar el problema he implementado las mejoras expuestas en http://hacktimes.com/reforzando_django_simple_captcha/ pero con algunas modificaciones propias.

Leer mas

Exportando asientos a Contaplus

Y yo que creía que un asiento era eso, algo para sentarse…

 

Este post poco o nada tiene que ver con la temática que he ido llevando en el blog. Trata de un script en python para exportar asientos contables de Lugano (un obsoleto programa de gestión y contabilidad desarrollado en VB7) a Contaplus 2011.

Si bien va a ser muy raro que  alguien necesite exportar de dicho programa a Contaplus, puede servir de referencia a quién necesite exportar desde otro programa, ya que el formato de los ficheros de Contaplus sería exactamente el mismo.

 

Seré breve y conciso, ya que en casos cómo este vale más el código en sí que una explicación detallada y confusa.

Leer mas

Backups automáticos en Amazon S3

Como todo buen administrador de sistemas (si, a estas alturas ya creo que me puedo llamar así) te das cuenta que siempre es mejor automatizar procesos que hacerlos a mano.

Y ahora les ha tocado a las copias de seguridad, aquí les presento un script en python mediante el cual realizo copias diarias de mis sistemas de forma que pueda restaurarlos ante un desastre.

El funcionamiento es simple; comprimimos las bases de datos, los ficheros de configuración y las aplicaciones web para después subirlos a un bucket a Amazon S3.

Hecho esto, el script elimina la copia de seguridad del día anterior si esta no corresponde a un domingo, digamos que siempre tendremos una copia de seguridad semanal más una diaria que será la más reciente.

Para ejecutarlo necesitaremos tener instalado boto (pip install boto), un módulo python que se encarga de las operaciones con AWS y otro módulo, settings.py, que contendrá las directivas AWS_STORAGE_BUCKET_NAMEAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY que será el bucket a usar en S3, nuestra id de acceso y nuestra clave para AWS resp.

Hecho esto ya sólo nos quedaría crear un crontab para ejecutar el script diariamente.

El script lo podemos encontrar en http://snipplr.com/view/64969/amazon-s3-backup/

Evitando solapamientos en cron con lockrun

Es algo muy común que programemos una tarea en cron periódica cada x tiempo, todo debe funcionar bien para tiempos relativamente grandes, p.e tareas diárias, semanales, etc.

Pero para tiempos pequeños, ¿quién nos garantiza que dicha tarea va a ejecutarse en menos de ese x tiempo?

Un ejemplo más ilustrativo, supongamos el caso de una tarea que actualiza el índice de un motor de búsqueda, para tenerlo lo más reciente posible lo actualizaremos cada minuto.

Dicha tarea puede ser que tarde más de un minuto en ejecutarse, debido a la carga de trabajo de la misma, ¿qué ocurre entonces? ¡Exacto! Se solapan las ejecuciones de la tarea…

Si esto ocurre, es posible que las distintas instancias corrompan algún fichero que modifiquen o, es más, que nos saturen los servidores.

Para esto existe la solución lockrun, bloqueo de ejecución, consiste en un pequeño programita el cual se encargará de gestionar las ejecuciones de dicha tarea.

Para hacer uso de él simplemente descargar lockrun.c de aquí; http://www.unixwiz.net/tools/lockrun.html

Compilar con gcc lockrun.c -o lockrun y luego copiar el ejecutable a /usr/local/bin/.

Hecho estos sólo tendremos que añadir a nuestras tareas en crontab /usr/local/bin/lockrun –lockfile=/var/run/tarea.lock — <tarea> y el solito se encargará de gestionar dichas ejecuciones :)

HTML; yo te dejo limpio que tú sólo te ensucias

Recientemente me han pasado unas maquetas HTML diseñadas con la herramienta iWeb de Mac.

El principal problema que queríamos solucionar es que dicha herramienta, aparte de embeber estilos CSS en un fichero externo, mete muchos estilos CSS inline, algo que no viene nada bien para SEO.

Solución rápida; en lugar de abrir manualmente cada una de las maquetas, mirar los posibles estilos, intentar factorizar y construir un nuevo CSS con nuevas clases he escrito un script python con el que, mediante BeautifulSoup, leo el DOM del documento y creo nuevas clases en base a los estilos inline, nada complicado pero sí útil y funcional (cómo me gustan esas dos palabras :))

 

Sólo necesitamos tener BeautifulSoup instalado (pip install BeautifulSoup) y ejecutar con python css_extract.py <fichero.html>

Lo podéis ver en http://snipplr.com/view/64624/python-css-inline-extractor/

Liberación de prácticas; Mantenimiento de equipos informáticos

Previamente en esta entrada http://dug0.com/blog/liberacion-de-practicas/liberacion-de-practicas-mei/ liberé el trabajo final de la asignatura, muy completo por cierto.

Ahora libero todos y cada uno de los ejercicios ya que los tenía aparcados en el disco duro y ahí me va a servir de poco.

De nuevo el enlace al repositorio lo podéis encontrar a la derecha un poco más abajo.

django-minipressroom

Aquí dejo mi nueva contribución al mundo del software libre, se trata de una aplicación de django muy simple pero funcional que puede ser muy útil para aprender.

La podréis encontrar de nuevo en GitHub https://github.com/dugo/django-minipressroom

La aplicación consiste en una sala de prensa, pensada para mostrar una serie de entradas organizadas por medios (tv, radio, etc)

Click para ver más grande


 De forma muy simple pero ilustrativa podemos encontrar un ejemplo de: modelos, vistas, plantillas , fixtures, admininistración e internacionalización.

Para usarla tendremos que instalar django-transmeta (pip install django-transmeta) que es necesario para algunos modelos.