Latest entries
Migrando de Piwik a Google Analytics
4 March 2011
Hace ya un tiempo que apareció la versión 1.1 de Piwik (yo tenía la versión 1.0 instalada en el servidor) y por falta de tiempo no había actualizado. Anoche apareció la versión 1.2 y decidí a actualizar.
makeinfo: none found en Ubuntu
4 March 2011
Compilando un programita me he encontrado con lo siguiente:
$ ./configure
Checking for 'grep'... /bin/grep
Checking whether '/bin/grep' supports -E... yes
Checking for 'sed'... /bin/sed
Checking whether '/bin/sed' supports -i and -e... yes
Checking for 'bash'... /bin/bash
Checking for 'cut'... /usr/bin/cut
Checking for 'install'... /usr/bin/install
Checking for 'make'... /usr/bin/make
Checking for 'gcc'... /usr/bin/gcc
Checking for 'awk'... /usr/bin/awk
Checking for 'bison'... /usr/bin/bison
Checking for 'flex'... /usr/bin/flex
Checking for 'makeinfo'... no
makeinfo: none found
Either you are missing entirely the needed tool,
or the version you have is too old.
configure: Bailing out...
Solución:
$ sudo apt-get install texinfo
Jugando con SQLite3 y Python
2 March 2011
Aunque hay muchos ejemplos por ahí, ahora me toca a mi poner uno :) Básicamente he hecho un pequeño wrapper sobre SQLite3 para almacenar información de forma persistente. La idea es muy simple: vamos a gestionar una lista de nodos (dirección MAC y dirección lógica).
La clase con la que vamos a trabajar es la siguiente:
class Node:
def __init__(self, mac, address):
self.mac = mac
self.address = address
Montando un toolchain con crosstool-ng a través de samples
2 March 2011
Ayer terminaba un artículo acerca de cómo construir un toolchain con crosstool-ng, pero ahora voy a explicar como utilizar uno de los ejemplos disponibles para partir desde una base concreta. Como ya comentaba, en la página de croostool-ng hay disponible una serie de ejemplos desde los cuales podemos partir.
Montando un toolchain con crosstool-ng
1 March 2011
Hace un rato explicaba en qué consiste la compilación cruzada y ahora vamos a ver como montar un toolchain para poder hacer esto. Para ello he elegido la herramienta crosstool-ng ya que nos permite automatizar el proceso.
En mi caso voy a generar una toolchain para generar código en una arquitectura MIPS, ya que voy a implementar algunos programitas para un router. Además, he elegido Debian Squeeze como plataforma de trabajo, pero también lo he probado sobre Ubuntu 10.04 con el mismo resultado.
Más sobre bibliotecas C para sistemas embebidos
25 February 2011
MacOS: Ya hay una copia abierta de Firefox
24 February 2011
En la oficina donde trabajo, tengo un iMac y mientras trabaja hoy, se ha ido la luz. Cuando he vuelto a arrancar e intentar abrir Firefox, me he encontrado con lo siguiente:

Guardar ficheros subidos mediante FileField en un lugar distinto a MEDIA_ROOT en Django
24 February 2011
Muy brevemente voy a explicar cómo podemos guardar ficheros en una ubicación distinta a MEDIA_ROOT. Esto es especialmente útil cuando quieres subir ficheros que puedan consultar los usuarios logueados, pero quieres que no tengan un acceso público (como todo el contenido de media):
from django.core.files.storage import FileSystemStorage
sistema_almacenamiento = FileSystemStorage(location='/ubicacion/distinta/a/media/')
class MiModelo(models.Model):
file = models.FileField(upload_to='ficheros', storage=sistema_almacenamiento)
¡Cuidado con los permisos de los directorios!
Biblioteca C newlib
24 February 2011
¿Qué es newlib? Es una implementación de la librería C pensada para dispositivos empotrados y desarrollada por RedHat. Esta es la librería que algunos utilizan para dispositivos empotrados, ya hablaré más adelante de ella.
¿Qué es la compilación cruzada?
24 February 2011
Estos días estoy trabajando bastante con el tema, y voy a explicar brevemente qué es y por qué se utiliza la compilación cruzada. Por lo general, los programadores, estamos acostumbrados a compilar para la arquitectura sobre la que se ejecutará el binario. Es decir, programamos en la misma máquina en la que se ejecutará la aplicación. Esto no siempre es posible.
La compilación cruzada o cross-compiling consiste, por tanto, en generar binarios para una arquitectura distinta a la que estamos utilizando para compilar. Por ejemplo, generar un ejecutable para un procesador ARM desde una arquitectura IA-32 o AMD64.
Estructuras, definición de tipos y estructuras anónimas en C
22 February 2011
Estoy ahora trabajando en C y voy a explicar brevemente acerca de los structs. Imagino que todos los que hayan programado alguna vez en C conocerán este tipo de dato. No trato de explicar qué es una estructura, sino detallar algunas situaciones particulares con ellas: estructuras anónimas y definición de tipos.
Cómo enviar un email con Python
16 February 2011
Estos días he estado configurando Postfix (si tengo tiempo ya explicaré una breve introducción de cómo echarlo a andar). Una vez montado he estado probando la configuración y autenticación vía Telnet, pero resulta un poco incómodo cuando lo tienes que hacer 4 veces. Así que aquí dejo un pequeño código para enviar un correo a través de Python.
Publicando automáticamente en Twitter
28 January 2011
Básicamente este post se trata de una prueba simple. Estoy trabajando en un sistema para que automáticamente se publique un tweet al añadir una entrada.
Si el tiempo me lo permite, en los próximos días trataré de explicar como he realizado el proceso para conectar a Twitter desde Python. Adelantar que el software utilizado es tweepy.
Menudo problema en Flipboard
26 January 2011
Hoy he tenido ocasión de usar Flipboard en el iPad de un colega. Para quién no lo sepa, es una aplicación que permite seguir feeds, twitter, facebook, ... y otras redes sociales, pero hace una presentación en modo revista.
La verdad es que la presentación de la aplicación es impresionante. Me ha gustado mucho. Aquí dejo una captura:
Sinceramente espero que tengan intención de llevarla a Android.
Corregir problemas GPS en Galaxy 3 y Galaxy 5
22 January 2011
Hace cerca de 3 meses que me compré un Galaxy 5, mi primer Android, pero no había conseguido hacer funcionar el GPS. Ahora vamos a ver como corregir el problemilla.
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é.


