Instalar MySQLdb-Python en CentOS para utilizar sobre Django

6 de agosto, 2011 - por | | Sistemas, Tips

Si desarrollas sobre Django y lo haces tirando de una base de datos sobre MySQL, conectar Python a ésta en un entorno CentOS puede ser más difícil de lo que uno imagina. El paquete que CentOS instala por defecto para el driver de MySQL (“MySQL-python”) no cumple con los requisitos de Django, por antiguo. Así que si intentas hacer la instalación habitual:


yum install MySQL-python

te encontrarás con que cuando vas a levantar tu instancia de Django, ésta dice que no puede conectar a MySQL.

La solución más efectiva es tirar de “easy_install”:


easy_install mysql-python

Como lo que vas a ejecutar es una compilación de las fuentes del driver, tienes que tener instalados “gcc” y “python-devel”. De lo contrario, verás que aparecen errores de compilación. Para instalar éstos:


yum install gcc


yum install python-devel

Vim 7.3: Cómo marcar líneas demasiado largas

21 de julio, 2011 - por | | Desarrollo, Tips

Si desarrollas con un ancho fijo (en mi caso, a 80) seguro que agradeces la opción “colorcolumn” que Vim introdujo en su release 7.3. Te permite establecer una línea vertical al ancho y colores que tú definas. De este modo, tienes siempre una referencia muy clara para organizar el código.

Si recibes legacy code sin un ancho definido, te ayudará mucho a darle estilo; y por supuesto si no estás utilizando la opción “textwidth” para automáticamente cortar el ancho de las líneas, con la marca visual te resultará mucho más fácil saber dónde tienes que cortar.

En mi caso, lo tengo en mi .vimrc así:


set colorcolumn=80
hi colorcolumn ctermbg=lightgrey

Lo que me da una cosa como la siguiente:

ejemplo de la opción colorcolumn de Vim

Para saber más, échale un vistazto a “:help colorcolumn”.

Un nuevo proyecto basado en WordPress: artcuero.com

31 de enero, 2011 - por | | Proyectos

imagen de la home de artcuero.com

Hace un par de meses se nos presentó la oportunidad de trabajar para gente dedicada a artesanía del cuero: artcuero.com. La idea ha sido empezar con un sitio muy clarito y bien organizado, principalmente orientado a los productos que hacen, y a partir de ahí aportar progresivamente información relacionada.

Nuestra propuesta, como en proyectos anteriores de características similares, ha sido la de poner unas bases sencillas y flexibles, en las que todo el esfuerzo se concentre en aquellos recursos que ellos pueden crear (información, procesos de pedidos, etc.), y tener paciencia para ir poco a poco haciendo crecer ese punto de partida hasta algo que se parezca a lo que ellos desean tener ya. Siempre les recordamos a nuestros clientes que buena parte de su éxito está en sus manos: su tiempo para crear contenidos; sus ganas para pensar una y otra vez cuál es la mejor información para el producto; su esfuerzo para mantener informados a sus clientes y usuarios a través de noticias periódicas, etc.

Hemos escogido WordPress para el proyecto y le hemos dado la forma de un pequeño CMS. De esta forma, tenemos páginas para las distintas categorías de productos que ellos mismos pueden editar cómodamente, y al mismo tiempo tanto el blog como la generación de nuevos contenidos resulta fácil y ordenada.

El esquema con el que empezamos es muy sencillo: home con resumen de categorías de productos; páginas de categorías de productos; página de detalle de cada producto. Le hemos concedido mucha importancia a las imágenes, y la parte del detalle está en plena revisión por sus autores, porque aún tenemos que encontrar un perfil más fácil de leer. En cualquier caso, sí que llegamos a la conclusión de que por la propia naturaleza del producto -se hace a mano y bajo pedido-, no tenía sentido un proceso de compra -tipo carrito-, y que un contacto directo podía funcionar bien si se acompañaba de información y soporte. Y en eso están ahora mismo.

Son muchas cosas con las que tienen que manejarse: nuevas cuentas de correo, nueva cuenta en Flickr, nueva cuenta para gestionar los contenidos del sitio, nuevos amigos y nuevos ambientes en la red… Vamos a ver qué tal evoluciona la cosa. :)

Nginx como proxy de Apache para servir contenidos estáticos

28 de enero, 2011 - por | 3 comentarios | Linux, Sistemas

Si sueles utilizar Apache para tus sitios, estarás acostumbrado a la magnitud de sus procesos: son grandes, muy exigentes con la memoria, y relativamente lentos hasta que son lanzados. Evidentemente, ésto no tiene por qué ser cierto en todos los casos; se puede ajustar bastante para que tenga un comportamiento más liviano, y con el tiempo han ido surgiendo alternativas al modelo tradicional de procesamiento (MPM) que consiguen reducir mucho esos puntos negativos.

Ahora bien, en ocasiones uno quiere o necesita seguir manteniendo Apache en su modo tradicional, en una configuración típica con PHP o Python, por diferentes razones: te puede haber convencido su estabilidad; puede que no quieras sacrificar algunos módulos clásicos (como el mod_rewrite); no encuentras la misma actividad en las comunidades de los servidores alternativos, etc. Nosotros nos hemos visto en esa situación, y hemos encontrado una forma, ya bastante popular, de reducir los aspectos negativos de Apache sin renunciar a sus cosas buenas: utilizar Nginx para servir los contenidos estáticos y dejar Apache para todo lo demás.

Si te animas a probar esta solución (y hay un montón de información en la red para implementarla), te encontrarás con: 1) una reducción sustancial del uso de memoria; 2) un correspondiente aumento de capacidad de cacheo a nivel de disco; 3) mayor consistencia en la separación de las tareas del sistema; 4) un rendimiento más ágil y rápido en el servidor y, por lo tanto, en tu sitio. ¿Se puede pedir más? :)

Para cuando quieres leer cómodamente: Readability sobre Firefox

27 de enero, 2011 - por | | Tips

Si te pasa como a mí, que a lo largo del día acabas leyendo muchos contenidos sobre un navegador, contenidos de distinta naturaleza, con distintas disposiciones, tipos de letra, tamaño, etc., seguro que agradeces tener a mano Readability.

Lo configuras en un par de clicks y lo activas cuando te apetece leer un contenido de un determinado modo. En mi caso, casi siempre acabo tirando de la combinación: Newspaper + Large + Extra Narrow, y en ocasiones incluso convierto los enlaces en notas a pie de página. :)

Readability – Installation Video for Firefox, Safari & Chrome from Arc90 on Vimeo.

MVC en la web, la gran farsa de los arquitectos de software

En los entornos de desarrollo web es habitual referirse al patrón de diseño Modelo Vista Controlador (MVC) como la “forma correcta” de construir sitios/aplicaciones web. La realidad es que dicho patrón no se puede aplicar a la web tal y como se concibió, aunque su objetivo resulte útil y entronque con un principio general de diseño frecuente en distintos entornos de desarrollo de software: separar claramente las partes de un sistema. Así de sencillo. :)

Modelo-Vista-Controlador

El paradigma MVC, tal como se presentó originalmente, está pensado para aplicaciones estáticas como las que solemos manejar en un entorno de escritorio. Piensa por ejemplo en tu organizador de archivos (en Windows, en Mac o en Linux): te ofrece un buen número de botones, campos de entrada, controles de ventana, filtros, etc., que pueden ser presionados por ti en cualquier momento. Cuando lo haces, estás activando uno de los muchos “controladores”, su consecuente “modelo” para hacer lo que tiene que hacer, y finalmente actualizando una o más “vistas” que reflejarán el nuevo estado del “modelo”. En la implementación original la cosa quedaba descrita del siguiente modo:

The view manages the graphical and/or textual output to the portion of the bitmapped display that is allocated to its application. The controller interprets the mouse and keyboard inputs from the user, commanding the model and/or the view to change as appropriate. Finally, the model manages the behavior and data of the application domain, responds to requests for information about its state (usually from the view), and responds to instructions to change state (usually from the controller).

Es decir, el problema original al que se enfrentaba este “paradigma” era la simultaneidad, en un entorno de múltiples puntos de entrada (en forma de “controladores”) y múltiples puntos de salida (en forma de “vistas”). Lo que nos obliga a preguntarnos: ¿la web es un entorno de ese tipo? Evidentemente no. En la web manejas un sólo punto de entrada (request) y un sólo punto de salida (response), por lo que para empezar te encuentras con un patrón para el cual no dispones de un problema real sobre el que aplicarlo. :(

Pero además te encuentras con que las aplicaciones ideales para MVC son básicamente monousuarias y el modelo se mantiene en memoria mientras la aplicación está siendo ejecutada. Segundo elemento que no encontramos en la web: entorno típicamente multiusuario, donde el modelo para el usuario se regenera en cada request.

Si uno profundiza en las características del paradigma original se irá encontrando con más diferencias, que básicamente son fruto de estas dos básicas que he señalado.

Separa, separa, separa

Si el patrón original no puede ser aplicado realmente a los problemas típicos con los que nos enfrentamos en un entorno web, ¿qué es lo que podemos extraer de él? Sin duda alguna, su vocación por mantener separadas las partes de un sistema: es decir, pon tu código de datos en un lado, tu código de aplicación en otro, y tu código de presentación en otro. No suena a nada del otro mundo, dicho así; parece sentido común, y es al mismo tiempo una forma tradicional de desarrollo de software que encaja muy bien con trabajo en equipo y especializado.

Por lo tanto, no tiene sentido apelar a este patrón como una solución-para-todo, e incluso puede resultar contraproducente, puesto que se van a estar forzando las cosas (las palabras, los conceptos, etc.) y por lo tanto perdiendo perspectiva. Eso en el mejor de los casos; en el peor, se llegará a construir un problema ajustado al patrón y no a la inversa. :(