Entradas con la etiqueta “python”

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

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? :)

Desarrollo de PHP con Vim: configuración y plugins

27 de enero, 2011 - por | 6 comentarios | Desarrollo, Linux, Tips

Última actualización: 24 de enero de 2012

Voy incorporando las sugerencias y tips que encuentro más interesantes. Así que si echas algo en falta, no dejes de comentarlo.

El tema de los editores/IDEs para trabajar con código sigue siendo algo que levanta discusiones en muchos ambientes de desarrolladores. Hay bastantes ideas preestablecidas al respecto, y nunca dejará de sorprenderme la cantidad de gente que no tiene un gusto formado al respecto, y se contentan con repetir prejuicios manoseados. :(

Mi gusto se apoya en las siguientes cosas (en este orden):

  • no quiero esperar para poder tirar código
  • no quiero utilizar algo que sea exigente con la máquina
  • quiero utilizar casi exclusivamente el teclado
  • quiero poder utilizarlo en distintos entornos y máquinas
  • mi medio natural es la consola de linux

Durante mucho tiempo estuve utilizando Emacs y Vim indistintamente para diferentes cosas. Según he ido desarrollando cada vez más en PHP, me he decantado del lado de Vim, porque he encontrado más cosas listas para utilizar y una comunidad mucho más viva que en Emacs. Las siguientes son las cosas que hasta el momento he encontrado realmente útiles cuando tiro código en PHP sobre Vim:

Mapeo para correr el fichero que estoy editando a través del intérprete de PHP

Para ésto en el fichero .vimrc tengo lo siguiente:


    :autocmd FileType php noremap  :w!:!/usr/bin/php %

Mapeo para parsear la sintaxis del fichero que estoy editando a través del intérprete de PHP en modo lint

En el fichero .vimrc:


    autocmd FileType php noremap  :!/usr/bin/php -l %

Autocompletar para sintaxis PHP

En el fichero .vimrc:


    autocmd FileType php set omnifunc=phpcomplete#CompletePHP

ManPageView plugin para consultar documentación de PHP en Vim

Un plugin que siempre he encontrado muy útil; te abre un nuevo buffer con la información de lo que hayas consultado. Igual te vale para PHP que para Perl y Python, y su uso es bien sencillo. Por ejemplo, imagina que quieres consultar la documentación para la función explode:


    :Man explode

Sólo tienes que descargarte el plugin, colocarlo en tu directorio de plugins de vim, y tener instalado links (que sueles tener disponible en cualquier repositorio de una distribución de Linux).

FindFile plugin para encontrar nombres de ficheros

Te permite abrir rápidamente un fichero tecleando su nombre. Lo autocompleta y te sugiere las coincidencias. Sólo tienes que descargarte el plugin, colocarlo en tu directorio de plugins de vim, y empezar a trabajar. Lo más cómodo es situarte en el path donde se encuentre tu código y cachear el sistema de ficheros desde ahí para abajo de forma recursiva:


    :FindFileCache .

A partir de ahí puedes invocar el principal comando:


    :FindFile

y empezar a teclear el nombre del fichero. Un nuevo buffer te ofrecerá las coincidencias. Como siempre en vim, puedes organizarte la disposición de los buffers con split y temas similares.

un buen fichero de configuración con indentación, wrap de líneas, mapeos, etc.

Cosas que yo siempre tengo en mi .vimrc:


    " vim as vim
    set nocompatible
    " always syntax on, for an easier life :)
    syntax on
    " load filetype plugins/indent settings
    filetype plugin indent on
    " status line always visible
    set laststatus=2
    " show current position along the bottom
    set ruler
    " highlights things found with the search
    set hlsearch
    " 8 is the magic number, sorry for pythonists :)
    set tabstop=8
    " shows what you are typing as command
    set showcmd
    " incremental search
    set incsearch
    " path for :find
    set path=$PWD/**
    " watch for file changes
    set autoread
    " navigation tabs
    :nmap  :tabnew
    :nmap  :tabclose

Cuando trabajo con Python también lo hago con Vim, aunque Emacs para Python está en una situación bastante mejor que para PHP. Así que en otro post comentaré cómo suelo trabajar con Python sobre Vim.

Actualización del 25 de agosto de 2011: sintaxis correcta para el plugin ManPageView

En los comentarios José Ignacio me recordó que la sintaxis correcta para utilizar el plugin ManPageView es la siguiente.


:Man explode.php

Es decir, añadiendo la extensión del lenguaje para el que realizas la búsqueda. Aunque la sintaxis corta que yo utilizo, también funciona, la oficial te permite buscar un mismo nombre de función en distintos lenguajes.

Actualización del 24 de enero de 2012: utilizando el manual de PHP como páginas man de UNIX

Una forma más cómoda de acceder a las funciones y métodos de PHP consiste en utilizar el manual de PHP como páginas man de UNIX. Ésto lo tenemos gracias al equipo de documentación de PHP. Mil gracias. :).

Para instalarlas lo más cómodo es:


$ pear install doc.php.net/pman

Después seteas en tu .vimrc la configuración:


set keywordprg=pman

Con ponerte sobre una función y pulsar ‘K’ tendrás la documentación correspondiente.

Encontré la info por el blog de bjori. Gracias. :)

Autenticación en Django a través de Facebook, Gmail, Twitter, Yahoo y OpenID

26 de enero, 2011 - por | 2 comentarios | Análisis, Desarrollo

Cuando uno está montando un nuevo sitio en forma de directorio, suele partir de una base de contenidos a los que espera sumar otros procedentes de los usuarios. Esta acción por parte de los usuarios siempre es algo difícil de conseguir, porque en definitiva se trata de su tiempo y su esfuerzo. Y los procesos de registro/login no suelen ayudar a corregir ese esfuerzo, sino que con frecuencia lo agrandan.

Esto se hace particularmente grave en sitios que consideran que el índice de regreso de sus usuarios es muy bajo. En estos casos se suelen aceptar contenidos, al menos en una fase inicial, sin necesidad de registro. La contrapartida es que los contenidos quedan huérfanos y tienen menos credibilidad. El sitio en definitiva puede llegar a tener más contenidos, pero de menos calidad.

Yo suelo tener una opinión contraria a este tipo de planteamientos, porque: 1) nunca sabes completamente el tipo de usuario que vas a tener (tu índice de regreso no es algo infalible ni está distribuido de forma homogénea en el 100% de tus usuarios, por lo que puedes llegar a perder porcentajes pequeños pero significativos desde el punto de vista de su actividad); y 2) porque acabas aplazando al medio plazo la decisión inicial, y entonces te encuentras con la difícil de decisión de mezclar contenidos (unos huérfanos, los otros ya con autores), o de dejarlos para siempre tal como están. Creo que hay soluciones intermedias.

Una de las más populares es ofrecer el registro a través de terceros, es decir, de alguna herramienta que ya esté utilizando el usuario. La más popular es, sin duda, Facebook, pero podría ser Gmail, Twitter, Yahoo, o cualquier otro servicio en el que sepas que tus usuarios ya tienen una cuenta. De esa forma les evitas el tedioso proceso de crearse una cuenta (otra más) y al mismo tiempo no sacrificas la calidad de los contenidos desde el momento 0.

Si trabajas con Django, cuentas con Django-Socialauth, que ofrece login a través de los servicios mencionados y alguno más, menos frecuente eso sí, como OpenID. Además, permite importar contactos y ver cuáles están ya como usuarios del sitio.Y, por supuesto, junto a ésto siempre puedes ofrecer un registro clásico. No hay necesidad de sacrificar nada. :)