Latest entries
Como hacer copias de seguridad en PostgreSQL
19 June 2010
Ahora vamos a ver como realizar copias de seguridad de una base de datos en PostgreSQL. Para ello existe un comando que se llama pg_dump que nos permite hacer un volcado de una base de datos a un fichero, para posteriormente restaurarlo. La sintaxis básica es:
pg_dump [opciones] [base de datos]
Arreglillos varios
19 June 2010
Esta noche me he tomado un rato de descanso y he aprovechado para arreglar un par de cosillas más del blog (aunque todavía no hay comentarios... ya llegarán Antares).
Breves: Autodescubrir RSS en los navegadores
19 June 2010
Los navegadores web de última generación permiten la subscripción automática a fuentes RSS o Atom de nuestro. Para ello necesitamos indicarle al navegador el link.
Enteros de mayor precisión en Java
17 June 2010
Ahora mismo estoy desarrollando una práctica en la que necesito generar números de 128 bits y escribirlos en un fichero en formato decimal, formato hexadecimal y formato binario.
Empecé jugueteando con C++, y mi sorpresa fue que un long long int utiliza 64 bits bajo una arquitectura de 64 bits. Como el estándar de C/C++ no especifica el tamaño de los tipos de datos esperaba que la últimas versiones del compilador (g++ para ser concretos) utilizasen mayor precisión. Tras esto descarté C++. Existen librerías, como GMP, que nos permiten trabajar con datos de mayor precisión, pero no dispongo de tiempo para investigar.
Lo siguiente en venirme a la cabeza fue Python. La ventaja (y en este caso desventaja) de usar Python es que Python utiliza precisión arbitraria. Esto es, que tú asignas a una variable un entero y te puedes despreocupar. Python asigna dinámicamente el tipo de dato int a la variable, pero si esta crece, en lugar de producir un overflow, le asigna el tipo de dato long y continúa con la ejecución. A partir de ahí, el tipo de dato long crece (reserva de memoria automática) en función de la precisión que necesite. Esto me impide limitar los enteros a 128 bits :(
La opción por la que he optado: Java.
Personalizar la clave primaria en Django
5 June 2010
Supongamos que tenemos la necesidad de utilizar una primary key personalizada en un modelo. O simplemente, supongamos que tenemos el capricho de cambiar el nombre de la clave primaria. Sea como sea, partimos de esta situación:
class Article(models.Model):
id = models.AutoField(primary_key=True)
...
Con el hecho de que definamos una primary key, estamos indicando a Django que no cree una clave primaria por defecto. Al utilizar AutoField, se asignará automáticamente el identificador entero que corressponda. ¿Qué problema tiene esto?
Nueva aplicación : django-browsers
3 June 2010
En cuatro ratillos que he conseguido sacar en estos días he desarrollado una aplicación para Django que se llama django-browsers. Faltan aún algunos detalles para poder sacar la versión 0.1, pero me gustaría tenerla lista para el 20 de Junio. De todas formas me complace poder presentarla.
Esta aplicación está pensada para promocionar y promover el uso de navegadores web que cumplan los estándares (HTML5, CSS3, ...) y tratar de pasar página a la época de Internet Explorer.
Una de iteradores en C++
29 May 2010
Ayer, mi colega Antares me planteó un problema (y yo no sé decir que no a los problemas). Está desarrollando un contenedor en el cuál necesita tener iteradores e iteradores constantes para recorrer los elementos. Probando los iteradores constantes, utilizó el siguiente código:
Contenedor c;
for(Contenedor::const_iterator it = c.begin(); it != c.end(); ++it)
{
...
}
Pero el compilador arrojaba el siguiente error:
contenedor.cpp:474: error: conversion from ‘Contenedor::iterator’ to non-scalar type ‘Contenedor::const_iterator’ requested
contenedor.cpp:474: error: no match for ‘operator!=’ in ‘ite != Contenedor::end()()’
contenedor.h:226: note: candidates are: bool Contenedor::const_iterator::operator!=(const Contenedor::const_iterator&) const
Breves: Inicializar una variable a infinito en C
29 May 2010
Ahora, de forma análoga a como Inicializar una variable a infinito en C++, vamos a ver como podemos hacer esto en C. Partimos del mismo ejemplo, supongamos un programa que acepta por entrada estándar un número indeterminado de números reales (pudiendo no introducir ninguno) y queremos que se devuelva el menor de todos los números introducidos. En caso de que no se introduzca ninguno, el programa informará de ello.
Breves: Inicializar una variable a infinito en C++
29 May 2010
En algunas ocasiones, nos encontramos con que necesitamos inicializar una variable al mayor valor posible. Por ejemplo, supongamos un programa que acepta por entrada estándar un número indeterminado de números reales (pudiendo no introducir ninguno) y queremos que se devuelva el menor de todos los números introducidos. En caso de que no se introduzca ninguno, el programa informará de ello.
Funciones con lista de argumentos variables en C
26 May 2010
Hoy voy a explicar brevemente como podemos escribir una función en C con un número de parámetros variables. Esto no es muy habitual, pero en algunas ocasiones puede resultar interesante.
Como ejemplo vamos a implementar una función que concatene un número variable de cadenas de texto.
Forzar la administración Django a usar SSL
22 May 2010
Django ofrece un panel de administración de forma automática. Voy a explicar brevemente como podemos forzar que todo lo que se realice a través del panel de administración vaya a través de una conexión segura: SSL.
Para ello vamos a hacer uso del módulo rewrite que ofrece Apache. Este módulo nos permite reescribir las peticiones antes de que se procesen. Esto se suele utilizar mucho en PHP para que la URI sea más bonita, cosa que en Django no es necesario.
Apache2: Invalid command 'SSLEngine'
21 May 2010
Llevo un par de días investigando el tema de Certificados Digitales, SSL y HTTPS. Aprovechando que tengo que hacer un trabajo acerca de las Autoridades de Certificación (CA) y los Certificados Digitales estoy añadiendo un certificado para el blog. Y como no, ¡menudo problema!
$ sudo service apache2 restart
* Restarting web server apache2
Syntax error on line 10 of /etc/apache2/sites-enabled/ssl:
Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
[fail]
Breves: Forzar la lectura de un entero en C++
11 May 2010
Cuando estamos programando en C++ y leemos un entero por terminal, nadie garantiza que realmente se lea. Imaginemos lo siguiente:
int entero;
cin >> entero;
Y cuando se ejecuta el programa, el usuario escribe una 'a'. ¿Qué ocurre? Pues que el programa se sigue ejecutando y el entero no se ha leído.
Breves: Leer de cin después de cerrarlo en C++
11 May 2010
Vamos a ponernos en contexto. Estaba escribiendo un programita en C++ el cuál hace uso de una función que lee desde un flujo (en este caso cin) hasta que encuentra EOF. Escribiendo en terminal podemos simular un fin de fichero pulsando Ctrl+D, pero como consecuencia, también cierra el flujo o lo que es lo mismo, ya no podemos seguir leyendo más datos a través de cin. Todo intento de lectura dará un error.
Breves: Cómo saber si un campo es nulo con JDBC
3 May 2010
Cuando en una tabla se permiten columnas con valores nulos, es necesario checkear que realmente tienen un valor antes de utilizarlo para evitar un java.lang.NullPointerException.
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é.
