2014

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2013

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

más...

2011

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2010

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2009

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2008

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2007

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2006

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2005

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2004

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2003

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

Fotolog

A través del espejo
2010-10-12: A través del espejo
¡La radio habla en binario!
2010-10-10: ¡La radio habla en binario!
Gigaminx (regalo por mi cumple)
2010-09-16: Gigaminx (regalo por mi cumple)
Trini en bici
2010-09-05: Trini en bici
Valporquero
2010-08-28: Valporquero
Mi bici nueva
2010-08-22: Mi bici nueva
Boda de Mario y Ana
2010-08-13: Boda de Mario y Ana
De cañones en Guara
2010-08-07: De cañones en Guara
Trini y Mari en Marbella
2010-08-05: Trini y Mari en Marbella
Trini y Chelo en Tabarca
2010-08-03: Trini y Chelo en Tabarca
Valid XHTML 1.1
Acceder
Etiquetas: PHP blog

Desgraciadamente, he tenido una laarga pausa debido a la internacionalización...

Ahora mismo, todas las entradas tienen (o mejor, pueden tener) diferente contenido en las páginas en español y en inglés.

De hecho, ha estado funcionando desde hace tiempo, pero hasta hoy no he podido crear nuevas entradas :-)

Etiquetas: LaTeX cómo

In LaTeX hay 10 caracteres especiales:

# $ % & \ ^ _ { } ~

La mayor parte de ellos se pueden escapar con una barra invertida delante (\), pero \, ^ y ~ necesitan algo más:

  • para la barra invertida (\) hay que usar \textbackslash{}
  • para el acento circunflejo (^) hay que usar \^{} o \textasciicircum{}
  • y para la virgulilla (~) hay que usar \~{} o \textasciitilde{}

Resumiendo:

Para conseguirHay que usar
#\#
$\$
%\%
&\&
\\textbackslash{}
^\textasciicircum{}
_\_
{\{
}\}
~\textasciitilde{}
Etiquetas: emacs cómo

Si quieres poner un GNU Emacs en pantalla completa, hay 3 cosas que deberías hacer:

  • Desactiva la barra de botones
    Esto se puede hacer ejecutando (desde dentro de Emacs) (tool-bar-mode -1)
  • Desactiva el menú
    Para hacerlo, ejecuta (menu-bar-mode -1)
  • Pasar a modo pantalla de completa
    Hay que ejecutar (set-frame-parameter nil 'fullscreen 'fullboth)

Si quieres tener siempre deshabilitada la barra de botones y el menú, como yo, y quieres poder pasar a pantalla completa con una tecla (por ejemplo, F11), añade esto a tu .emacs:

;; F11 = Full Screen
(defun toggle-fullscreen (&optional f)
  (interactive)
  (let ((current-value (frame-parameter nil 'fullscreen)))
    (set-frame-parameter nil 'fullscreen
      (if (equal 'fullboth current-value)
        (if (boundp 'old-fullscreen) old-fullscreen nil)
        (progn (setq old-fullscreen current-value)
          'fullboth)))))
(global-set-key [f11] 'toggle-fullscreen)

;; Disable tool-bar
(tool-bar-mode -1)

;; Disable Menu Bar
(menu-bar-mode -1)
Comando Mandril 18 sep 2010
Etiquetas: bicicleta

Después de cerca de un mes insistiendo, mi primo Iván nos convenció a unos cuantos para recorrer el anillo ciclista de Madrid de noche, comenzando a las 22:30.

Tardamos unas 3 horas y media en recorrer 66 kilómetros. Velocidad media, 19 kilómetros por hora.

Hoy es mi cumpleaños, y mis compañeros de trabajo me han hecho un regalo: un Gigaminx (es como el Megaminx, pero con 5 piezas en cada arista en lugar de 3).

Etiquetas: SQL cómo
Para aprender cómo implementar búsquedas sencillas en campos de texto de una base de datos PostgreSQL hay que utilizar dos funciones: to_tsvector() y plainto_tsquery(), y un operador binario, @@.
  • to_tsvector() convierte una lista de palabras en una lista de lexemas significativos con las que poder hacer operaciones de búsqueda. Ejemplo:
    postgres=> SELECT to_tsvector('spanish','cómo cazar un león');
           to_tsvector
    --------------------------
     'caz':2 'com':1 'leon':4
    (1 row)
    

    Para evitar tener que estar poniendo 'spanish' continuamente, si nuestra base de datos tiene información únicamente en español, podemos cambiar el lenguaje de búsquedas por defecto de la base de datos, con:

    ALTER DATABASE cuevasysimas set default_text_search_config = 'spanish';
    

  • plainto_tsquery() se utiliza para convertir una cadena en un patrón de búsqueda
  • @@ se usa para comprobar si se encuentra un patrón de búsqueda en una lista de lexemas:
    postgres=> SELECT to_tsvector('cómo cazar un león') @@ plainto_tsquery('cazando leones');
     ?column?
    ----------
     t
    (1 row)
    
Por ejemplo, si tenemos una tabla de libros, con las columnas 'titulo' y 'resumen', y queremos mostrar el título de los libros que concuerdan con una búsqueda en el resumen, podemos hacer:
postgres=> SELECT titulo FROM libro WHERE to_tsvector(resumen) @@ plainto_tsquery('palabra');
Etiquetas: seguridad scripts cómo

Si quieres tener un fichero cifrado, de manera que nadie pueda ver su contenido a no ser que sepa la contraseña, puedes usar "gpg" para cifrarlo y descifrarlo. Sin embardo, su uso es un poco complicado.

Por lo tanto, he escrito un pequeño script, llamado "gpg-vi", que pregunta una contraseña, y permite editar un fichero cifrado simétricamente usando GnuPG con esa contraseña.

El script no permite que nadie más en la máquina pueda ver el contenido del fichero, pero atención: el script escribe el contenido del fichero en claro en un fichero temporal, de manera que alguien más que use tu UID, o root, podría ver el contenido mientras la edición no haya terminado (o incluso después, porque el contenido puede estar aún en algún lugar del disco después de borrar el fichero).

La Melonera 11 sep 2010
Etiquetas: correr

La Melonera es una carrera popular que se celebra desde hace 15 años en septiembre, coincidiendo con las fiestas del barrio de la Arganzuela.

Es una carrera de en torno a 10 kilómetros, y lo característico de ella es que, al final de la carrera, obsequian a todos los que hayan terminado con una raja de melón, que está riquísimo :)

Este año, la carrera fue de 10060m, y mi tiempo fue de 1 hora, 10 minutos y 41 segundos.

Etiquetas: SQL Perl cómo

(o cómo usar Tablas de Historia en PostgreSQL)

Si quieres guardar en algún lugar la historia completa de todas las inserciones, modificaciones y eliminaciones de columnas en tus tablas (para mantener una base de datos estilo wiki), no hay ninguna manera directa de hacerlo... pero aquí puedes ver cómo hacerlo, en un artículo escrito por Thomas Liske.

Funciona con PostgreSQL, creando un trigger escrito en PL/Perl llamado log_history() que añade una línea a una tabla llamada history.<SCHEMA>_<TABLENAME> con un instante de tiempo (hist_ts), la operación realizada (hist_op) y el contenido de todas las columnas, cada vez que se ejecuta un INSERT, UPDATE o DELETE. Esto realmente almacena toda la historia de las tablas en las que se use este trigger.

Aquí puedes ver el trigger log_history, y una función sencilla que activa el trigger en todas las tablas de un schema, history_create_triggers. Puedes llamar a esta función para el schema "public" usando SELECT history_create_triggers('public');

Estas dos funciones están escritas en PL/Perl y PL/pgSQL, respectivamente, así que tendrás que añadir esos dos lenguajes a tu base de datos PostgreSQL, si no lo has hecho ya, con CREATE LANGUAGE plperl; y CREATE LANGUAGE plpgsql;