Macros Emacs para facilitar introducir entradas

Continuando con el formato org-mode, he añadido también un esqueleto que rellena de forma automática los campos de una entrada del blog, para que sólo tenga que escribir el texto y las categorías. Es la siguiente función Emacs-Lisp:

(define-skeleton add-new-post
  "Add a new post with the current date and time. Ask for the post title."
  "Post title: "
  "(new-post" \n
  > "\"" str "\"" \n
  > ":body \"" _  "\"" \n
  > ":categories '('general)" \n
  > ":body-format 'string" \n
  > (format-time-string
     ":hours %H :minutes %M :day %e :month %m :year %Y)"
     (current-time)) \n )

La función new-post me permite añadir una entrada al blog. Es código Common Lisp, por lo que se ve que comienza por un parémtesis. El patrón (definido por el macro de Emacs-Lisp define-skeleton después me pregunta por el título de la entrada (el uso de la variable str hace que me pregunte a la hora de insertar el patrón). Después, añade el cuerpo vacío y también la fecha actual de la entrada obtenida de la función de Emacs-Lisp (current-time). Finalmente, el carácter _ indica la posición en la que queda el cursor, con lo que puedo empezar a escribir el cuerpo de la entrada.

Prueba del formato org-mode

En este caso, he utilizado org-mode para crear escribir esta entrada.

¡Incluso soporta varios párrafos!

El código para hacerlo en Emacs-lisp es el siguiente:

(defun org-to-html ()
  (interactive)
  (when (mark)
    (save-excursion
      (let ((text (buffer-substring-no-properties (point) (mark))))
        (delete-region (point) (mark))
        (insert
         (with-temp-buffer
           (insert text)
           (org-export-region-as-html (point-min) (point-max) t 'string)))))))

Lo que hago pues es seleccionar el texto que escribo en formato org y llamar a esa función org-to-html, que me transforma el texto seleccionado en HTML, incluso el trozo de código anterior, con coloreado de sintaxis que no necesita del embellecedor de código JavaScript de la página…

¡Otra vez no! Muere John McCarthy, inventor de Lisp

Estamos de tristeza últimamente. Tras la muerte de Ritchie, muere también el inventor de Lisp, John McCarthy. Para un blog escrito en Lisp (y para toda la comunidad informática mundial) una mala noticia. Si C es el padre de la mayoría de los lenguajes imperativos, Lisp lo es de los funcionales. Con esos dos lenguajes casi cubrimos el 99% de la informática... A este seguro que tampoco lo vemos en cientos de periódicos... Os dejo un enlace al artículo original de LISP.

McCarthy

Interesante entrada de JJ. Merelo sobre Jobs y Stallman

Coincide totalmente con lo que pienso. Os dejo el enlace: "Odio a los mártires del rock".

Translation within Emacs using Google Translate

Just to show a little Emacs-Lisp script I wrote the other day. We're in the process of translating all our class material into English, and thought of getting some help from Google Translator. Selecting a phrase and calling the insert-translation function substitutes current text with its traduction into English. You know, Google Translate fails a fair bit, but it helps, and you don't have to write all the slides again...

Agur, ETA

No voy a decir nada que no se haya dicho ya. Quizá como diría el gran Labordeta: "¡A la mierda!". Me ha gustado la portada de Público. Además del tributo a las víctimas (con el nombre de todas las víctimas), de nuevo apuntaré que me gustan los diseños basados en tipografía:Portada
Público

Actualización a Ubuntu Oneiric Ocelot (11.10)

Parece que en este caso la actualización a Ubuntu Oneiric Ocelot (11.10) no es tan sencilla ni tan poco problemática como otras. Primero, la imposición de Unity. Estoy todavía tratando de digerirla. Primero diré que NO ME GUSTA NADA. Ni en 2D ni en 3D. Linux no es Mac, por mucho que se empeñen en hacerlo parecer, en quitar el botón derecho a todos los paneles (claro, aquí seguro que los desarrolladores de Ubuntu usan Mac para todo...), etc.

Pero es que además la actualización no va bien. Siempre quedan flecos sueltos. En algunos la barra izquierda no sale cuando acercas el ratón. No hay manera de configurar cómo aparece esa barra, a no ser que te vuelvas loco y busques por Internet y te des cuenta de que tienes que instalar el paquete compizconfig-settings-manager, y ahí tienes una pestaña "Unity" que sirve para configurar también la barra lateral (tamaño, aparición, etc.). Por último, por ejemplo, si teníais configurados applets para mostrar la carga de CPU, red, etc., o el tiempo, temperatura, etc., estos tampoco aparecen directamente. La solución es instalar manualmente (y ejecutar y posteriormente configurar) los paquetes indicator-weather para el tiempo, e indicator-multiload para que muestre el uso de CPU, memoria y red. Al ejecutarlos, se establecen en la barra superior tal que así:

Unity Bar

Por cierto, que en este caso, no me aparece el icono del tiempo, ni tampoco el icono de terminar la sesión, que está escondido hacia la derecha. Tampoco se pueden mover los iconos, porque el botón derecho no lleva esa opción.

ACTUALIZACIÓN: Por lo que veo aquí instalando el paquete gnome-session-fallback se puede seleccionar "GNOME Classic" en gdm o LightDM... Menos mal.

"Conferencia" "internacional" sobre el futuro de ETA...

¿De verdad alguien se cree esa pantomima? Vergüenza les debería dar. Qué burdo espectáculo. Ahora la banda acatará la petición de tan excelso comité.

Schopenhauer: El amor, las mujeres y la muerte

Hace mucho tiempo, mi amigo y compañero de trabajo Ginés me dejó un libro de Schopenhauer con este título (por cierto, voy a devolvérselo hoy mismo). A su vez se lo había dejado Jesús García Molina. No sé exactamente por qué me lo dejó ni por qué se lo dejó aquél a Ginés. Cuando uno oye el nombre de Schopenhauer, reputado filósofo del siglo XVIII, se imagina a un pensador avanzado en su tiempo, o con un conocimiento profundo de la naturaleza humana. Cuál es mi sorpresa al leer el capítulo dedicado a las mujeres, cito textualmente:

Sólo el aspecto de la mujer revela que no está destinada ni a los grandes trabajos de la inteligencia ni a los grandes trabajos materiales. Paga su deuda a la vida, no con la acción, sino con el sufrimiento, los dolores del parto, los inquietos cuidados de la infancia; tiene que obedecer al hombre, ser una compañera pacienzuda que le serene. No está hecha para los grandes esfuerzos ni para las penas o los placeres excesivos. [...]

Ahí queda eso. Creo que ningún ser humano se echó tanta mierda (con perdón) encima con un sólo párrafo... Incomprensible, incluso para la época. Mucho menos para ser considerado un reputado filósofo.

Muere Dennis Ritchie

A todo aquel que haya programado alguna vez en C, o en alguno de los cientos de lenguajes que lo tomaron como guía, no puede más que apenar la noticia de su muerte. Adiós a un grande de la informática (este sí).

Let Over Lambda--50 years of Lisp

Hoy por casualidad he encontrado esta referencia, Let Over Lambda, Closures de Doug Hoyte. Es curioso que sin haberlo leído antes, la solución que he dado al problema de extraer la descripción de una entrada del blog sin tags HTML ha sido así usando un closure.

Peggy Lee--It is a Good Day

Siempre me ha gustado esta canción. Curiosamente la utilizan actualmente dos anuncios de la tele. Me sirve también para probar la incrustación de canciones de Grooveshark.

Búsqueda en el blog

Como véis, todavía no funciona la búsqueda en el blog, pero tengo una idea muy interesante para implementarla. Recordad que el blog se genera estáticamente, así que no puedo depender de ningún proceso de servidor, así que, por decirlo de alguna manera, tengo que precalcular la búsqueda y almacenarla en algún sitio, que además, no entorpezca con el blog (no tarde más tiempo en cargar, por ejemplo). Lo que estoy preparando lo explicaré con tranquilidad. Por ahora, valga una muestra de lo que llevo implementado:

BLOG> (hash-table-count
       *words-to-post-hash*)
18119

18119 palabras diferentes. Ahora los posts que contienen "corba", y sus títulos:

BLOG> (gethash "corba" *words-to-post-hash*)
(#<POST {100A12E8A1}> #<POST {100A12E881}> #<POST {100A12E521}>
 #<POST {100A12E4E1}> #<POST {100A12E4C1}> #<POST {100A12E3E1}>
 #<POST {100A12E021}> #<POST {100A12DBA1}> #<POST {100A12D321}>
 #<POST {100A12CEE1}> #<POST {100A12C821}> #<POST {100A12C641}>
 #<POST {100A12C5A1}> #<POST {100A12C361}> #<POST {100A12C2E1}>
 #<POST {100A12B4E1}> #<POST {1003344011}> #<POST {1003343EB1}>
 #<POST {10033437B1}> #<POST {10033436B1}> #<POST {1007887F81}>
 #<POST {1007887221}> #<POST {10078870A1}> #<POST {1007886801}>)
T
BLOG> (mapcar #'post-title (gethash "corba" *words-to-post-hash*))
("¿Por qué un Weblog?" "5.000.000.000" "CCM page, reloaded"
 "Recent articles on CCM" "German book on CCM" "CCM Wiki updated"
 "Some thoughts on Web Services" "New version of the CCM tutorial"
 "Stefan Tilkov on RPC Web Services" "Trabajo en la tesis" "CORBA Reborn?"
 "Interesting post on XML messaging by Stefan Tilkov" "Sistemas Distribuidos"
 "Prácticas de Sistemas Distribuidos" "Un día de trabajo con mi tesis" "FreeNX"
 "Fowler, inversion del control" "Ser profesor tiene sus cosas buenas"
 "Función C++ rara del día" "The S stands for Simple"
 "Conversión sencilla de tipos CORBA" "Parecía que nunca iba a llegar..."
 "Más avances: Cátedra SAES-UMU" "SOAP, entre lo peor de la década")

Lo cual es, por cierto, una magnífica lista de entradas para esa palabra... Esta información también me permitirá añadir al final un conjunto de "posts relacionados" en cada entrada.

pacman, el gestor de paquetes de Arch Linux

Tengo en alguna máquina antigua Arch Linux porque va muy bien, es sencillo y está optimizado para sistemas pequeños. Hoy, por casualidad he visto la versión del gestor de paquetes, pacman y me ha aparecido esto:

[dsevilla@dsr ~]$ pacman -V

 .--.                  Pacman v3.5.4 - libalpm v6.0.4
/ _.-' .-.  .-.  .-.   Copyright (C) 2006-2011 Pacman Development Team
\  '-. '-'  '-'  '-'   Copyright (C) 2002-2006 Judd Vinet
 '--'
                       Este programa puede distribuirse libremente bajo
                       los términos de la licencia GNU General Public License

El juego de palabras es claro. pacman, de "package manager", y también del conocido juego del comecocos.

Integración de APIs en el modelado

El magnífico trabajo de Javier Cánovas modelando APIs de programación aparece enlazado en el blog Modeling Languages. Tuve la suerte de estar en el tribunal de su tesis, y es una pena que se haya ido a Francia a continuar su trabajo. Le deso lo mejor. La entrada la tenéis aquí.