Latest entries

Testear tu proyecto en Django 1.3 beta con VirtualEnv

written by uve

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.

Full entry >>

Introducción a VirtualEnv

written by uve

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

Full entry >>

Usar las fuentes de Ubuntu en nuestra página a través de Google Fonts

written by uve

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>

Full entry >>

Django, forms y ugettext: "TypeError: Lazy object returned unexpected type."

written by uve

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.

Full entry >>

Como realizar la validación de un Cif en Python

written by uve

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.

Full entry >>

Cómo instalar una multifunción Brother MFC-7420 en Ubuntu

written by uve

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

Full entry >>

Como realizar la validación de un Nif en Python

written by uve

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.

Full entry >>

Agujero de seguridad generando contenido dinámico para una ForeignKey

written by uve

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.

Full entry >>

Generar contenido dinámico de una ForeignKey para un Form en Django

written by uve

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.

Full entry >>

Llamar a una función que recibe un parámetro desde una plantilla en Django

written by uve

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.

Full entry >>

Cómo crear objetos automáticamente al ejecutar syncdb en Django

written by uve

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.

Full entry >>

Breves: Cómo convertir una cadena de texto a fecha en Python

written by uve

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

Full entry >>

No a la censura. No a la Ley Sinde. No al cierre de webs.

written by uve

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.

Full entry >>

Obtener información del hardware en Linux

written by uve

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, ...

Full entry >>

Jugando con Automake para generar Makefiles automáticos

written by uve

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.

Full entry >>

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é.