Latest entries
Testear tu proyecto en Django 1.3 beta con VirtualEnv
19 January 2011
Ayer escribía una breve introducción acerca de VirtualEnv. Hoy voy a poner de manifiesto un posible uso. Para los entusiastas de nuevas features, como yo, pueden ir testeando proyectos y aplicaciones durante el desarrollo de Django e ir adaptando el código para que sea funcional.
Introducción a VirtualEnv
18 January 2011
Para quien no lo conozca, VirtualEnv es una manera de crear entornos virtuales para Python. Esto nos permite una gran número de posibilidades, que van desde realizar test, probar la integración de un módulo con distintas versiones, ..., hasta realizar despliegues web.
Hoy voy a explicar brevemente como podemos gestionar y utilizar distintos entornos virtuales. Para ello, vamos a preparar un directorio 'env' en nuestro directorio personal.
$ cd ~
$ mkdir env
$ cd env
Usar las fuentes de Ubuntu en nuestra página a través de Google Fonts
8 January 2011
Google dispone de un servicio gratuito que nos permite añadir fuentes en nuestra web de forma independiente al sistema operativo, es decir, aunque la fuente no esté instalada, ésta se visualizará correctamente. Podemos echar un vistazo en Google Font Directory.
Usar este servicio es extremadamente sencillo. Sólo tenemos que incluir en el header de nuestro código HTML lo siguiente:
<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Ubuntu:regular,bold&subset=Latin">
<style>body { font-family: Ubuntu, sans-serif; }</style>
Django, forms y ugettext: "TypeError: Lazy object returned unexpected type."
7 January 2011
Estaba programando tranquilamente un formulario (ModelForm) y de repente deja de renderizarse. Reviso la vista, el código de retorno, el HTML de salida... pero todo está correctamente salvo que el formulario no se visualiza.
El código es el siguiente:
models.py
from django.db import models
from django.utils.translation import ugettext_lazy as _
class MiModelo(models.Model):
...
campo = models.CharField(_(u''), ...)
forms.py:
from django import forms
class MiForm(forms.ModelForm):
class Meta:
model = MiModelo
Aparentemente todo está bien. Pero al ejecutar desde el shell (python manage.py shell) y tratar de renderizar el formulario me encuentro con el error:
TypeError: Lazy object returned unexpected type.
Como realizar la validación de un Cif en Python
5 January 2011
Ayer escribí una rutina para validar números NIF, hoy toca para CIF. en España se utiliza el Código de Identificación Fiscal (CIF) para la identificación tributaria de personas jurídicas.
Cómo instalar una multifunción Brother MFC-7420 en Ubuntu
5 January 2011
El problema que existe con los dispositivos de Brother es que no son completamente libres, y aunque parte del código es GPL otros componentes no lo son. Por este motivo no se pueden añadir directamente a repositorios y es necesario instalarlos manualmente. Personalmente espero que algún día hagan bien las cosas :S
Como realizar la validación de un Nif en Python
4 January 2011
Para quién no lo sepa, en España se utiliza el Número de Identificación Fiscal (NIF) para la identificación fiscal de personas físicas. Básicamente, el NIF consiste en el DNI (Documento Nacional de Identidad) + un dígito de control. Este dígito sirve como verificación, ya que se puede calcular a partir del DNI. ¿Para qué sirve entonces? Evita que alguien se pueda inventar un NIF sobre la marcha o, de forma más práctica, si te equivocas introduciendo un número, no se validará el NIF.
Agujero de seguridad generando contenido dinámico para una ForeignKey
24 December 2010
Hace un rato os contaba como generar contenido dinámico para una ForeignKey de un formulario, y mientras escribía he descubierto un agujero de seguridad.
Si modificamos el HTML del formulario, donde se selecciona el usuario, podemos cambiar el identificador del usuario manualmente y se añadiría de encargado a un usuario no permitido.
Generar contenido dinámico de una ForeignKey para un Form en Django
24 December 2010
Vamos a plantear el siguiente escenario:
class Grupo(models.Model):
usuarios = models.ForeignKey(User)
class Lista(models.Model):
grupo = models.ForeignKey(Grupo)
encargado = models.OneToOneField(User)
El objetivo es generar formularios para Lista donde el encargado sea un usuario del grupo.
Llamar a una función que recibe un parámetro desde una plantilla en Django
24 December 2010
Quien haya profundizado un poquito en el sistema de plantillas que ofrece Django sabrá que solamente se pueden invocar a funciones que no reciban parámetros.
Existe una forma de hacer esto, aunque no sé hasta que punto es correcta. Si es forzosamente necesario hacerlo, aquí explico como se puede hacer.
Cómo crear objetos automáticamente al ejecutar syncdb en Django
21 December 2010
Vamos a suponer una aplicación de noticias y etiquetas. Queremos que siempre exista una etiqueta 'general' que se usará en las noticias por defecto. Por supuesto, queremos automatizar el proceso, ya que es un coñazo tener que hacerlo manualmente cada vez que se crea la base de datos.
Para ello vamos a hacer uso del mecanismo de señales que ofrece Django.
Breves: Cómo convertir una cadena de texto a fecha en Python
20 December 2010
Para trabajar con fechas y horas disponemos del módulo datetime. Dentro de este módulo tenemos date (sólo para fechas) y datetime (para fechas y horas).
Así por ejemplo, por ejemplo, podemos obtener la fecha actual de las siguientes formas:
>>> import datetime
>>> datetime.date.today()
datetime.date(2010, 12, 20)
>>> datetime.datetime.now()
datetime.datetime(2010, 12, 20, 15, 46, 54, 804931)
>>>
Para convertir una cadena de texto a un objeto datetime disponemos de la función strptime. Esta función recibe la cadena de texto y el formato que se utiliza:
>>> datetime.datetime.strptime('15/12/2010 15:30', '%d/%m/%Y %H:%M')
datetime.datetime(2010, 12, 15, 15, 30)
Las opciones disponibles las podemos ver aquí. A partir de aquí se puede trabajar como un objeto datetime:
>>> fecha = datetime.datetime.strptime('15/12/2010 15:30', '%d/%m/%Y %H:%M')
>>> fecha < datetime.datetime.now()
True
No a la censura. No a la Ley Sinde. No al cierre de webs.
20 December 2010
AYÚDANOS A SEGUIR TEJIENDO
Discúlpanos si no es esta página lo que querías leer este domingo. Seguramente vienes de otra página de Internet donde esperabas encontrar algo muy distinto. Si así lo deseas, puedes dejar de leer ahora mismo, pero nos gustaría explicarte por qué hoy han cerrado algunas webs. Si el próximo martes 21 de diciembre algunos políticos deciden aprobar la Ley Sinde, la Internet en español que hemos conocido cambiará para siempre, y miles de páginas podrán ser cerradas desde el poder.
A lo largo del último año, en esta página se ha publicado mucha información sobre la Ley Sinde, un proyecto de censura de Internet escondido dentro del proyecto de Ley de Economía Sostenible. Te invitamos a ver los vídeos, a escuchar, a leer y a reflexionar. Cuando te hayas informado acerca del peligro para las libertades que representa la Ley Sinde, no te quedes sentado. Sal a la calle y explícaselo a todas aquellas personas que conozcas, muy especialmente a aquellas que viven desconectadas de Internet.
La Ley Sinde no nace de la voluntad del pueblo español, sino que es una imposición extranjera. La embajada de Estados Unidos ha presionado a nuestro gobierno para aprobarla, pisoteando nuestra soberanía nacional. Quieren una Internet sumisa y controlable, que sea útil para convencer a la población, como los restantes medios de comunicación controlados desde el poder. No quieren que la gente comparta información, no quieren que sepamos quién mueve realmente los hilos, no quieren que sepamos cómo se enriquecen empobreciendo al resto de la población. Quieren una red esclava desde la que vendernos su visión del mundo.
Hubo una vez un hombre que creyó en la paz y en la libertad, y que murió asesinado. Se llamaba Mohandas Karamchand Gandhi, y se enfrentó a un imperio con una primitiva herramienta: su rueca de hilar. Pronunció estas palabras: "Si trescientos millones de personas hilaran una vez por día, no porque un Hitler se lo ordenara, sino porque se inspiraran en el mismo ideal, tendríamos una unidad de propósitos suficiente para alcanzar la independencia."
Mucho más de trescientos millones de personas están tejiendo cada día esta inmensa red de intercambio de conocimiento que se llama Internet. Millones y millones de personas compartimos información a través de redes abiertas. Hemos creado una cultura y tenemos un objetivo común y universal. Todo eso puede cambiar a partir del próximo martes. La Ley Sinde es una tijera que permite cortar los hilos que mantienen viva Internet, una red que debe seguir siendo libre y neutral, como instrumento de progreso, paz y libertad.
Ayúdanos a seguir tejiendo. Sal a la calle, explícaselo a tus vecinos, a tus amigos, a tus compañeros de trabajo. Y discúlpanos por haberte estropeado este domingo, pero lo hacemos para que puedas disfrutar en libertad del resto de tus domingos. Muchas gracias.
Obtener información del hardware en Linux
14 December 2010
Existen muchas herramientas que nos proporcionan información acerca del hardware que tenemos en el equipo: lspci, lsusb, lshw, ... pero este viaje toca dmidecode.
dmidecode consulta información de la BIOS a través de los estándares SMBIOS y DMI. Esto nos permite obtener la velocidad de los módulos de RAM, información sobre caché, procesador, ...
Jugando con Automake para generar Makefiles automáticos
14 December 2010
Estos días estoy empezando a implemetar un pequeño programita para un Reto Tecnológico que organiza el Departamento de Teoría de la Señal, Telemática y Comunicaciones de la Universidad de Granada. Lo estoy desarrollando en C++ y sinceramente no me apetece hacer el Makefile. Así que estoy aprendiendo a usar las Autotools de GNU, empezando por Automake.
La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.
