<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
        xmlns:content="http://purl.org/rss/1.0/modules/content/"
        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:atom="http://www.w3.org/2005/Atom"
        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
        xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
        >

<channel>
        <title>Functional Mind</title>
        <atom:link href="http://neuromancer.inf.um.es/fm/rss2.xml" rel="self" type="application/rss+xml" />
        <link>http://neuromancer.inf.um.es/fm</link>
        <description>an emacs-lisp and org-mode based blog by diego sevilla</description>
        <lastBuildDate>Tue, 21 May 2013 21:50:13 +0002</lastBuildDate>

        <language>en</language>
        <sy:updatePeriod>hourly</sy:updatePeriod>
        <sy:updateFrequency>1</sy:updateFrequency>
        <generator>Common Lisp using a nice blog software by me</generator>
<item>
<title>Family at the beach</title>

<link>http://neuromancer.inf.um.es/fm/family-at-the-beach.html</link>
<comments>http://neuromancer.inf.um.es/fm/family-at-the-beach.html#disqus_thread</comments>
<pubDate>Tue, 11 Sep 2012 13:00:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[english]]></category>
<category><![CDATA[martina]]></category>
<category><![CDATA[family]]></category>
<category><![CDATA[photo]]></category>
<category><![CDATA[film]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/family-at-the-beach.html</guid>
<description><![CDATA[
Some time ago. Mamiya Press Super 23 + Sekor 90/3.5 + 6x9 back + Fuji PRO 160 long expired.]]></description>
        <content:encoded><![CDATA[<a href="http://www.flickr.com/photos/dsevilla/7975902173/" title="family at the beach por dsevilla, en Flickr"><img src="http://farm9.staticflickr.com/8312/7975902173_cfa93775f1_z.jpg" width="640" height="432" alt="family at the beach"></a>
<p>Some time ago. Mamiya Press Super 23 + Sekor 90/3.5 + 6x9 back + Fuji PRO 160 long expired.</p>]]></content:encoded>
</item>
<item>
<title>Modified deft-mode to multiple directories</title>

<link>http://neuromancer.inf.um.es/fm/modified-deftmode-to-multiple-directories.html</link>
<comments>http://neuromancer.inf.um.es/fm/modified-deftmode-to-multiple-directories.html#disqus_thread</comments>
<pubDate>Mon, 10 Sep 2012 00:00:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[org-mode]]></category>
<category><![CDATA[deft]]></category>
<category><![CDATA[emacs-lisp]]></category>
<category><![CDATA[lisp]]></category>
<category><![CDATA[emacs]]></category>
<category><![CDATA[english]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/modified-deftmode-to-multiple-directories.html</guid>
<description><![CDATA[
After some hacking, I've been able to modify the wonderful Deft mode
by Jason R. Blevins to support several directories. I had my notes
divided in several directories, including my TO-DO entries, and I
thought it would be nice to give Deft the possibility to support
several directories, and at the same time, an exercise for my Emacs
Lisp.


I tried to make the least modifications as possible to [...]]]></description>
        <content:encoded><![CDATA[
<p>After some hacking, I've been able to modify the wonderful Deft mode
by Jason R. Blevins to support several directories. I had my notes
divided in several directories, including my TO-DO entries, and I
thought it would be nice to give Deft the possibility to support
several directories, and at the same time, an exercise for my Emacs
Lisp.
</p>
<p>
I tried to make the least modifications as possible to the original
source, so that the change can be made with a patch, if the original
author considers it (this is also why I didn't change the name of the
mode either.) You can download it, and read instructions of
installation and usage here:
</p>
<p>
<a href="https://github.com/dsevilla/deft-multidir">deft-multidir on GitHub</a>
</p>
<p>
As always, feedback is highly appreciated.
</p>
]]></content:encoded>
</item>
<item>
<title>Using org-mode to create posts</title>

<link>http://neuromancer.inf.um.es/fm/using-orgmode-to-create-posts.html</link>
<comments>http://neuromancer.inf.um.es/fm/using-orgmode-to-create-posts.html#disqus_thread</comments>
<pubDate>Sun, 11 Mar 2012 00:00:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[org-mode]]></category>
<category><![CDATA[emacs]]></category>
<category><![CDATA[english]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/using-orgmode-to-create-posts.html</guid>
<description><![CDATA[
Some time ago I decided to change my Common-Lisp based blog generator
to an Emacs-based one. And it was to learn Emacs-Lisp (compared
to Common-Lisp, that I had used before), but mostly to use the
wonderful org-mode to write posts.


At first I thought that it would be nice to write the posts using Lisp
alone. Using some HTML-generating library it would be easy to write
posts like I write Lisp. [...]]]></description>
        <content:encoded><![CDATA[
<p>Some time ago I decided to change my Common-Lisp based blog generator
to an Emacs-based one. And it was to learn Emacs-Lisp (compared
to Common-Lisp, that I had used before), but mostly to use the
wonderful org-mode to write posts.
</p>
<p>
At first I thought that it would be nice to write the posts using Lisp
alone. Using some HTML-generating library it would be easy to write
posts like I write Lisp. However, posts have much more text than
markup, and within lisp (unless you write some reader macro, that I
may explore in the future), you have to add all those quotes,
<i>backquoting</i> to eliminate special characters, etc. Posts look like
this:
</p>



<pre class="src src-lisp">(fmb-new-post
 <span class="org-string">"Let Over Lambda--50 years of Lisp"</span>
 <span class="org-builtin">:body</span> (__ (h:p  <span class="org-string">"Hoy por casualidad he encontrado esta referencia, "</span>
               (h:a '((href . <span class="org-string">"http://letoverlambda.com/index.cl/guest/chap2.html"</span>))
                  <span class="org-string">"Let Over Lambda, Closures"</span>) <span class="org-string">" de Doug Hoyte. Es</span>
<span class="org-string">                  curioso que sin haberlo le&#237;do antes, la soluci&#243;n que</span>
<span class="org-string">                  he dado al problema de extraer la descripci&#243;n de una</span>
<span class="org-string">                  entrada del blog sin "</span> (h:em <span class="org-string">"tags"</span>) <span class="org-string">" HTML ha sido</span>
<span class="org-string">                  as&#237; usando un "</span> (h:em <span class="org-string">"closure"</span>) <span class="org-string">"."</span>))
 <span class="org-builtin">:categories</span> '(espa&#241;ol spanish programming lisp common-lisp blog)
 <span class="org-builtin">:hours</span> 23
 <span class="org-builtin">:minutes</span> 06
 <span class="org-builtin">:day</span> 9
 <span class="org-builtin">:month</span> 'october
 <span class="org-builtin">:year</span> 2011)
</pre>


<p>
I was happy because I could practice Lisp any time I wrote a
post. However, this is not very comfortable, and when I had to
include code snippets things got worse.
</p>
<p>
At the same time, I got impressed by the work of
<a href="http://reginald.braythwayt.com/">Reg Braithwaite</a> with his blog
<a href="https://github.com/raganwald/homoiconic">Homoiconic</a>. Thanks to the
formatting capabilities of GitHub, he can write just Markdown files,
and, with a directory structure that resembles years and months, he
can write his blog. The name is representative, also, as it is the
characteristic of programming languages that can treat code as data
and vice versa (such as Lisp). However, I find much more interesting
<a href="http://www.orgmode.org">org-mode</a> than Markdown, so I decided I
wanted to do something similar.
</p>
<p>
Being written in Common Lisp, I had no library or implementation of
the complete org-mode, so I decided, also to test other lisps, to use
Emacs-Lisp and to use the characteristics of org-mode directly to
produce the HTML that goes into posts, and even to support its
tangling feature (more on that later). Also, it allowed me to have
<a href="https://github.com/dsevilla/functional-mind-blog/tree/emacs-lisp-version/blog/content/posts">a directory</a> in which all the posts live, and be able to browse them
just using GitHub (where this blog now lives), as now GitHub also
renders org-mode content (not quite correctly, but acceptably.)
</p>
<p>
The code that generates the HTML from the org-mode files is the
following. It uses a function to obtain all the <code>.org</code> files, and with
them, obtains the file properties, title, date, and categories, and
generates the HTML with <code>org-export-region-as-html</code>:
</p>



<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">fmb-import-org-posts</span> ()
  <span class="org-doc">"Import all posts written in .org files.</span>
<span class="org-doc">Search all .org files, create a buffer for each of them,</span>
<span class="org-doc">extract all the initial properties (export properties), and then generate</span>
<span class="org-doc">the HTML equivalent of the body. Add it to the list of actual posts, that</span>
<span class="org-doc">will be ordered by date finally."</span>
  (<span class="org-keyword">dolist</span> (f (fmb-files-in-below-directory <span class="org-string">"content/posts"</span>))
    (<span class="org-keyword">with-current-buffer</span> (find-file-noselect f)
      (<span class="org-keyword">let*</span> ((file-properties (org-infile-export-plist))
             (title (plist-get file-properties <span class="org-builtin">:title</span>))
             (date (plist-get file-properties <span class="org-builtin">:date</span>))
             (categories (plist-get file-properties <span class="org-builtin">:keywords</span>))
             (body-as-html (org-export-region-as-html
                            (point-min)
                            (point-max)
                            t 'string)))
        (<span class="org-keyword">multiple-value-bind</span> (secs mins hours day month year)
            (org-parse-time-string date)
          (fmb-new-post title
                        <span class="org-builtin">:day</span> day
                        <span class="org-builtin">:month</span> month
                        <span class="org-builtin">:year</span> year
                        <span class="org-builtin">:hours</span> hours
                        <span class="org-builtin">:minutes</span> mins
                        <span class="org-builtin">:categories</span> (mapcar #'(<span class="org-keyword">lambda</span> (s) (intern s))
                                            (split-string categories nil t))
                        <span class="org-builtin">:body</span> body-as-html))
      (kill-buffer)))))
</pre>


<p>
Categories are extracted from the <code>#+KEYWORDS</code> option. For example,
the few initial lines of this post:
</p>



<pre class="src src-org"><span class="org-org-document-info-keyword">#+TITLE:</span>     <span class="org-org-document-title">Using org-mode to create posts</span>
<span class="org-org-document-info-keyword">#+AUTHOR:</span>    <span class="org-org-document-info">Diego Sevilla</span>
<span class="org-org-document-info-keyword">#+EMAIL:</span>     <span class="org-org-document-info">dsevilla@ditec.um.es</span>
<span class="org-org-document-info-keyword">#+DATE:</span>      <span class="org-org-document-info">2012-03-11 dom</span>
<span class="org-org-meta-line">#+DESCRIPTION:</span>
<span class="org-org-meta-line">#+KEYWORDS:  general org-mode emacs english</span>
<span class="org-org-meta-line">#+LANGUAGE:  en</span>

Some time ago I decided to change my Common-Lisp based blog generator
to an Emacs-based one. And it was to learn Emacs-Lisp (compared
</pre>


<p>
Finally, as the great site <a href="http://nakkaya.com/">nakkaya.com</a>, I can
offer, through <code>org-babel-tangle</code>, the generation of the files shown
in the entry. See, for example,
<a href="http://nakkaya.com/2011/06/29/ferret-an-experimental-clojure-compiler/">this entry about the Ferret compiler</a>. This open the world of Literate
Programming also to this blog. All in all, a winning configuration.
</p>]]></content:encoded>
</item>
<item>
<title>Impresionado con la cámara del Samsung Galaxy S II</title>

<link>http://neuromancer.inf.um.es/fm/impresionado-con-la-camara-del-samsung-galaxy-s-ii.html</link>
<comments>http://neuromancer.inf.um.es/fm/impresionado-con-la-camara-del-samsung-galaxy-s-ii.html#disqus_thread</comments>
<pubDate>Tue, 15 Nov 2011 00:16:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[photography]]></category>
<category><![CDATA[android]]></category>
<category><![CDATA[photo]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/impresionado-con-la-camara-del-samsung-galaxy-s-ii.html</guid>
<description><![CDATA[
He hecho una pequeña prueba con un programa de escaneo de documentos y es magnífica la cámara. Con luz artificial ha generado una imagen con una resolución perfecta de mi tarjeta de seguridad social americana, que llevaba mil años (desde el 2002) en mi cartera. La he usado para mirar mi número de seguridad social americano para abrirme una cuenta en Getty Images, que parece que quieren alguna de[...]]]></description>
        <content:encoded><![CDATA[
<p>He hecho una pequeña prueba con un programa de escaneo de documentos y es magnífica la cámara. Con luz artificial ha generado una imagen con una resolución perfecta de mi tarjeta de seguridad social americana, que llevaba mil años (desde el 2002) en mi cartera. La he usado para mirar mi número de seguridad social americano para abrirme una cuenta en Getty Images, que parece que quieren alguna de mis imágenes de Flickr. Todavía no estoy seguro de si venderé alguna, pero por curiosidad he abierto la cuenta. Pongo a continuación un crop al 100% de la imagen:</p><img src="http://neuromancer.inf.um.es/fm/img/ssn.png" alt="Blog image."></img>]]></content:encoded>
</item>
<item>
<title>Martina playing, 23 months old</title>

<link>http://neuromancer.inf.um.es/fm/martina-playing-23-months-old.html</link>
<comments>http://neuromancer.inf.um.es/fm/martina-playing-23-months-old.html#disqus_thread</comments>
<pubDate>Thu, 03 Nov 2011 01:22:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[english]]></category>
<category><![CDATA[video]]></category>
<category><![CDATA[martina]]></category>
<category><![CDATA[black&white]]></category>
<category><![CDATA[b&w]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/martina-playing-23-months-old.html</guid>
<description><![CDATA[
It is REALLY amazing how fast she learns. At her age, she uses almost all Spanish constructions well, verbs (including irregular ones), nouns, slang expressions, tenses, etc. I used the Harinezumi 2++ for this. It is not very good in interiors, but in B&W gives a nice vintage feeling. For those of you not knowing Spanish, at the end of the video she says something like `Wait for me, I'll be righ[...]]]></description>
        <content:encoded><![CDATA[<object type="application/x-shockwave-flash" width="640" height="480" data="http://www.flickr.com/apps/video/stewart.swf?v=109786" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="flashvars" value="intl_lang=es-us&photo_secret=bd3e6d1bfc&photo_id=6307578684&flickr_show_info_box=true"></param> <param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=109786"></param> <param name="bgcolor" value="#000000"></param> <param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=109786" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=es-us&photo_secret=bd3e6d1bfc&photo_id=6307578684&flickr_show_info_box=true" height="480" width="640"></embed></object>
<p>It is REALLY amazing how fast she learns. At her age, she uses almost all Spanish constructions well, verbs (including irregular ones), nouns, slang expressions, tenses, etc. I used the Harinezumi 2++ for this. It is not very good in interiors, but in B&W gives a nice vintage feeling. For those of you not knowing Spanish, at the end of the video she says something like `Wait for me, I'll be right back'... :)</p>]]></content:encoded>
</item>
<item>
<title>Macros Emacs para facilitar introducir entradas</title>

<link>http://neuromancer.inf.um.es/fm/macros-emacs-para-facilitar-introducir-entradas.html</link>
<comments>http://neuromancer.inf.um.es/fm/macros-emacs-para-facilitar-introducir-entradas.html#disqus_thread</comments>
<pubDate>Sat, 29 Oct 2011 02:20:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<category><![CDATA[lisp]]></category>
<category><![CDATA[emacs]]></category>
<category><![CDATA[emacs-lisp]]></category>
<category><![CDATA[skeleton]]></category>
<category><![CDATA[blog]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/macros-emacs-para-facilitar-introducir-entradas.html</guid>
<description><![CDATA[
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
&gt; "\"" str "\"" \n
&gt; "[...]]]></description>
        <content:encoded><![CDATA[
<p>Continuando con el formato <code>org-mode</code>, he añadido también un <i>esqueleto</i> 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:
</p>



<pre class="src src-emacs-lisp">(<span style="color: #6495ed; font-weight: bold;">define-skeleton</span> <span style="color: #87ceeb;">add-new-post</span>
  <span style="color: #32cd32;">"Add a new post with the current date and time. Ask for the post title."</span>
  <span style="color: #32cd32;">"Post title: "</span>
  <span style="color: #32cd32;">"(new-post"</span> \n
  &gt; <span style="color: #32cd32;">"\""</span> str <span style="color: #32cd32;">"\""</span> \n
  &gt; <span style="color: #32cd32;">":body \""</span> _  <span style="color: #32cd32;">"\""</span> \n
  &gt; <span style="color: #32cd32;">":categories '('general)"</span> \n
  &gt; <span style="color: #32cd32;">":body-format 'string"</span> \n
  &gt; (format-time-string
     <span style="color: #32cd32;">":hours %H :minutes %M :day %e :month %m :year %Y)"</span>
     (current-time)) \n )
</pre>

<p>
La función <code>new-post</code> 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 <code>define-skeleton</code> después me pregunta por el título de la entrada (el uso de la variable <code>str</code> 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 <code>(current-time)</code>. Finalmente, el carácter <code>_</code> indica la posición en la que queda el cursor, con lo que puedo empezar a escribir el cuerpo de la entrada.
</p>]]></content:encoded>
</item>
<item>
<title>Prueba del formato org-mode</title>

<link>http://neuromancer.inf.um.es/fm/prueba-del-formato-orgmode.html</link>
<comments>http://neuromancer.inf.um.es/fm/prueba-del-formato-orgmode.html#disqus_thread</comments>
<pubDate>Sat, 29 Oct 2011 01:53:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<category><![CDATA[lisp]]></category>
<category><![CDATA[emacs]]></category>
<category><![CDATA[org-mode]]></category>
<category><![CDATA[org]]></category>
<category><![CDATA[blog]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/prueba-del-formato-orgmode.html</guid>
<description><![CDATA[
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-mi[...]]]></description>
        <content:encoded><![CDATA[
<p>En este caso, he utilizado <code>org-mode</code> para <del>crear</del> escribir esta entrada.
</p>
<p>
¡Incluso soporta varios párrafos!
</p>

<p>El código para hacerlo en Emacs-lisp es el siguiente:
</p>

<pre class="src src-emacs-lisp">(<span style="color: #6495ed; font-weight: bold;">defun</span> <span style="color: #87ceeb;">org-to-html</span> ()
  (interactive)
  (<span style="color: #6495ed; font-weight: bold;">when</span> (mark)
    (<span style="color: #6495ed; font-weight: bold;">save-excursion</span>
      (<span style="color: #6495ed; font-weight: bold;">let</span> ((text (buffer-substring-no-properties (point) (mark))))
        (delete-region (point) (mark))
        (insert
         (<span style="color: #6495ed; font-weight: bold;">with-temp-buffer</span>
           (insert text)
           (org-export-region-as-html (point-min) (point-max) t 'string)))))))
</pre>

<p> Lo que hago pues es seleccionar el texto que
escribo en formato org y llamar a esa función
<code>org-to-html</code>, 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&hellip; </p>]]></content:encoded>
</item>
<item>
<title>¡Otra vez no! Muere John McCarthy, inventor de Lisp</title>

<link>http://neuromancer.inf.um.es/fm/otra-vez-no-muere-john-mccarthy-inventor-de-lisp.html</link>
<comments>http://neuromancer.inf.um.es/fm/otra-vez-no-muere-john-mccarthy-inventor-de-lisp.html#disqus_thread</comments>
<pubDate>Mon, 24 Oct 2011 23:45:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[lisp]]></category>
<category><![CDATA[mccarthy]]></category>
<category><![CDATA[programming]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/otra-vez-no-muere-john-mccarthy-inventor-de-lisp.html</guid>
<description><![CDATA[
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[...]]]></description>
        <content:encoded><![CDATA[
<p>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 <a href="http://t.co/oxjiRip7" rel="interesting link">artículo original de LISP</a>.</p><img src="http://neuromancer.inf.um.es/fm/img/john-mccarthy-programming-wrong.jpg" alt="McCarthy"></img>]]></content:encoded>
</item>
<item>
<title>Interesante entrada de JJ. Merelo sobre Jobs y Stallman</title>

<link>http://neuromancer.inf.um.es/fm/interesante-entrada-de-jj-merelo-sobre-jobs-y-stallman.html</link>
<comments>http://neuromancer.inf.um.es/fm/interesante-entrada-de-jj-merelo-sobre-jobs-y-stallman.html#disqus_thread</comments>
<pubDate>Mon, 24 Oct 2011 12:20:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[libre]]></category>
<category><![CDATA[software]]></category>
<category><![CDATA[jobs]]></category>
<category><![CDATA[stallman]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/interesante-entrada-de-jj-merelo-sobre-jobs-y-stallman.html</guid>
<description><![CDATA[
Coincide totalmente con lo que pienso. Os
dejo el enlace:
&quot;Odio a los mártires del rock&quot;.]]></description>
        <content:encoded><![CDATA[
<p>Coincide totalmente con lo que pienso. Os
dejo <a href="http://atalaya.blogalia.com/historias/70546" rel="interesting link">el enlace:
&quot;Odio a los mártires del rock&quot;</a>.</p>]]></content:encoded>
</item>
<item>
<title>Translation within Emacs using Google Translate</title>

<link>http://neuromancer.inf.um.es/fm/translation-within-emacs-using-google-translate.html</link>
<comments>http://neuromancer.inf.um.es/fm/translation-within-emacs-using-google-translate.html#disqus_thread</comments>
<pubDate>Mon, 24 Oct 2011 00:17:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[english]]></category>
<category><![CDATA[emacs]]></category>
<category><![CDATA[lisp]]></category>
<category><![CDATA[emacs-lisp]]></category>
<category><![CDATA[google-translate]]></category>
<category><![CDATA[translate]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/translation-within-emacs-using-google-translate.html</guid>
<description><![CDATA[
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 wr[...]]]></description>
        <content:encoded><![CDATA[<object type="application/x-shockwave-flash" width="400" height="375" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="flashvars" value="intl_lang=es-us&amp;photo_secret=&amp;photo_id=6274361464"></param> <param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"></param> <param name="bgcolor" value="#000000"></param> <param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=es-us&amp;photo_secret=&amp;photo_id=6274361464" height="375" width="400"></embed></object>
<p>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 <code>insert-translation</code> 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...</p>]]></content:encoded>
</item>
<item>
<title>Agur, ETA</title>

<link>http://neuromancer.inf.um.es/fm/agur-eta.html</link>
<comments>http://neuromancer.inf.um.es/fm/agur-eta.html#disqus_thread</comments>
<pubDate>Fri, 21 Oct 2011 02:26:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[españa]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/agur-eta.html</guid>
<description><![CDATA[
No voy a decir nada que no se haya dicho ya. Quizá como
diría el gran Labordeta: &quot;¡A la mierda!&quot;. 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:]]></description>
        <content:encoded><![CDATA[
<p>No voy a decir nada que no se haya dicho ya. Quizá como
 diría el gran Labordeta: &quot;¡A la mierda!&quot;. 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:<a href="http://imagenes.publico-estaticos.es/resources/archivos/2011/10/21/1319151795449portada22pdf.pdf"><img src="http://neuromancer.inf.um.es/fm/img/portada_publico.jpg" alt="Portada
Público"></img></a></p>]]></content:encoded>
</item>
<item>
<title>Actualización a Ubuntu Oneiric Ocelot (11.10)</title>

<link>http://neuromancer.inf.um.es/fm/actualizacion-a-ubuntu-oneiric-ocelot-1110.html</link>
<comments>http://neuromancer.inf.um.es/fm/actualizacion-a-ubuntu-oneiric-ocelot-1110.html#disqus_thread</comments>
<pubDate>Tue, 18 Oct 2011 01:19:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[ubuntu]]></category>
<category><![CDATA[oneiric]]></category>
<category><![CDATA[ocelot]]></category>
<category><![CDATA[linux]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/actualizacion-a-ubuntu-oneiric-ocelot-1110.html</guid>
<description><![CDATA[
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 desarrol[...]]]></description>
        <content:encoded><![CDATA[
<p>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 <strong>NO ME GUSTA NADA</strong>. 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.</p>
<p>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 <code>compizconfig-settings-manager</code>, y ahí tienes una
 pestaña &quot;Unity&quot; que sirve para configurar también la barra
 lateral (tamaño, aparición, etc.). Por último, por ejemplo, si
 teníais configurados <em>applets</em> 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 <code>indicator-weather</code> para el tiempo,
 e <code>indicator-multiload</code> para que muestre el uso de CPU,
 memoria y red. Al ejecutarlos, se establecen en la barra superior tal
 que así:</p><img src="http://neuromancer.inf.um.es/fm/img/unity_bar.png" alt="Unity Bar"></img>
<p>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.</p>
<p><strong>ACTUALIZACIÓN</strong>: Por lo que
veo <a href="http://www.webupd8.org/2011/08/installing-using-classic-gnome-desktop.html" rel="interesting link">aquí</a>
instalando el paquete <code>gnome-session-fallback</code> se puede
seleccionar &quot;GNOME Classic&quot; en gdm o LightDM... Menos
mal.</p>]]></content:encoded>
</item>
<item>
<title>&quot;Conferencia&quot; &quot;internacional&quot; sobre el futuro de ETA...</title>

<link>http://neuromancer.inf.um.es/fm/quotconferenciaquot-quotinternacionalquot-sobre-el-futuro-de-eta.html</link>
<comments>http://neuromancer.inf.um.es/fm/quotconferenciaquot-quotinternacionalquot-sobre-el-futuro-de-eta.html#disqus_thread</comments>
<pubDate>Tue, 18 Oct 2011 00:56:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[españa]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/quotconferenciaquot-quotinternacionalquot-sobre-el-futuro-de-eta.html</guid>
<description><![CDATA[
¿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é.]]></description>
        <content:encoded><![CDATA[
<p>¿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é.</p>]]></content:encoded>
</item>
<item>
<title>Schopenhauer: El amor, las mujeres y la muerte</title>

<link>http://neuromancer.inf.um.es/fm/schopenhauer-el-amor-las-mujeres-y-la-muerte.html</link>
<comments>http://neuromancer.inf.um.es/fm/schopenhauer-el-amor-las-mujeres-y-la-muerte.html#disqus_thread</comments>
<pubDate>Thu, 13 Oct 2011 11:39:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[filosofía]]></category>
<category><![CDATA[mujer]]></category>
<category><![CDATA[schopenhauer]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/schopenhauer-el-amor-las-mujeres-y-la-muerte.html</guid>
<description><![CDATA[
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,[...]]]></description>
        <content:encoded><![CDATA[
<p>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:</p>
<blockquote>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. [...]</blockquote>

<p>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.</p>]]></content:encoded>
</item>
<item>
<title>Muere Dennis Ritchie</title>

<link>http://neuromancer.inf.um.es/fm/muere-dennis-ritchie.html</link>
<comments>http://neuromancer.inf.um.es/fm/muere-dennis-ritchie.html#disqus_thread</comments>
<pubDate>Thu, 13 Oct 2011 10:43:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[c]]></category>
<category><![CDATA[programming]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/muere-dennis-ritchie.html</guid>
<description><![CDATA[
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í).]]></description>
        <content:encoded><![CDATA[
<p>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 <a href="http://www.biobiochile.cl/2011/10/12/muere-dennis-ritchie-padre-del-lenguaje-de-programacion-c-y-el-sistema-operativo-unix.shtml" rel="interesting link">su muerte</a>. Adiós a un grande de la informática (este sí).</p>]]></content:encoded>
</item>
<item>
<title>Let Over Lambda--50 years of Lisp</title>

<link>http://neuromancer.inf.um.es/fm/let-over-lambda50-years-of-lisp.html</link>
<comments>http://neuromancer.inf.um.es/fm/let-over-lambda50-years-of-lisp.html#disqus_thread</comments>
<pubDate>Sun, 09 Oct 2011 23:06:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<category><![CDATA[programming]]></category>
<category><![CDATA[lisp]]></category>
<category><![CDATA[common-lisp]]></category>
<category><![CDATA[blog]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/let-over-lambda50-years-of-lisp.html</guid>
<description><![CDATA[
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.]]></description>
        <content:encoded><![CDATA[
<p>Hoy por casualidad he encontrado esta referencia, <a href="http://letoverlambda.com/index.cl/guest/chap2.html">Let Over Lambda, Closures</a> 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 <em>tags</em> HTML ha sido
                  así usando un <em>closure</em>.</p>]]></content:encoded>
</item>
<item>
<title>Peggy Lee--It is a Good Day</title>

<link>http://neuromancer.inf.um.es/fm/peggy-leeit-is-a-good-day.html</link>
<comments>http://neuromancer.inf.um.es/fm/peggy-leeit-is-a-good-day.html#disqus_thread</comments>
<pubDate>Thu, 06 Oct 2011 12:36:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<category><![CDATA[general]]></category>
<category><![CDATA[grooveshark]]></category>
<category><![CDATA[music]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/peggy-leeit-is-a-good-day.html</guid>
<description><![CDATA[
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.]]></description>
        <content:encoded><![CDATA[
<p>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.</p><object width="250" height="40"><param name="movie" value="http://grooveshark.com/songWidget.swf" /><param name="wmode" value="window" /><param name="allowScriptAccess" value="always" /><param name="flashvars" value="hostname=cowbell.grooveshark.com&amp;songIDs=27103833&amp;style=metal&amp;p=0" /><embed src="http://grooveshark.com/songWidget.swf" type="application/x-shockwave-flash" width="250" height="40" flashvars="hostname=cowbell.grooveshark.com&amp;songIDs=27103833&amp;style=metal&amp;p=0" allowScriptAccess="always" wmode="window" /></object>]]></content:encoded>
</item>
<item>
<title>Búsqueda en el blog</title>

<link>http://neuromancer.inf.um.es/fm/busqueda-en-el-blog.html</link>
<comments>http://neuromancer.inf.um.es/fm/busqueda-en-el-blog.html#disqus_thread</comments>
<pubDate>Wed, 05 Oct 2011 02:31:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<category><![CDATA[blog]]></category>
<category><![CDATA[common-lisp]]></category>
<category><![CDATA[lisp]]></category>
<category><![CDATA[programming]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/busqueda-en-el-blog.html</guid>
<description><![CDATA[
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[...]]]></description>
        <content:encoded><![CDATA[
<p>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: </p>
<pre class="prettyprint lang-lisp">
BLOG> (hash-table-count
       *words-to-post-hash*)
18119
</pre>
<p>18119 palabras diferentes. Ahora los posts que
contienen "corba", y sus títulos:</p>
<pre class="prettyprint lang-lisp">
BLOG> (gethash "corba" *words-to-post-hash*)
(#&lt;POST {100A12E8A1}> #&lt;POST {100A12E881}> #&lt;POST {100A12E521}>
 #&lt;POST {100A12E4E1}> #&lt;POST {100A12E4C1}> #&lt;POST {100A12E3E1}>
 #&lt;POST {100A12E021}> #&lt;POST {100A12DBA1}> #&lt;POST {100A12D321}>
 #&lt;POST {100A12CEE1}> #&lt;POST {100A12C821}> #&lt;POST {100A12C641}>
 #&lt;POST {100A12C5A1}> #&lt;POST {100A12C361}> #&lt;POST {100A12C2E1}>
 #&lt;POST {100A12B4E1}> #&lt;POST {1003344011}> #&lt;POST {1003343EB1}>
 #&lt;POST {10033437B1}> #&lt;POST {10033436B1}> #&lt;POST {1007887F81}>
 #&lt;POST {1007887221}> #&lt;POST {10078870A1}> #&lt;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")
</pre>
<p>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.</p>]]></content:encoded>
</item>
<item>
<title>pacman, el gestor de paquetes de Arch Linux</title>

<link>http://neuromancer.inf.um.es/fm/pacman-el-gestor-de-paquetes-de-arch-linux.html</link>
<comments>http://neuromancer.inf.um.es/fm/pacman-el-gestor-de-paquetes-de-arch-linux.html#disqus_thread</comments>
<pubDate>Tue, 04 Oct 2011 12:43:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[linux]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/pacman-el-gestor-de-paquetes-de-arch-linux.html</guid>
<description><![CDATA[
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[...]]]></description>
        <content:encoded><![CDATA[
<p>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, <code>pacman</code> y me ha aparecido esto:</p>
<pre>
[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
</pre>
<p>El juego de palabras es claro. <code>pacman</code>, de
"package manager", y también del conocido juego del comecocos.</p>]]></content:encoded>
</item>
<item>
<title>Integración de APIs en el modelado</title>

<link>http://neuromancer.inf.um.es/fm/integracion-de-apis-en-el-modelado.html</link>
<comments>http://neuromancer.inf.um.es/fm/integracion-de-apis-en-el-modelado.html#disqus_thread</comments>
<pubDate>Tue, 04 Oct 2011 01:00:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[modeling]]></category>
<category><![CDATA[spanish]]></category>
<category><![CDATA[mde]]></category>
<category><![CDATA[español]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/integracion-de-apis-en-el-modelado.html</guid>
<description><![CDATA[
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í.]]></description>
        <content:encoded><![CDATA[
<p>El magnífico trabajo de Javier Cánovas modelando APIs
de programación aparece enlazado en el blog <a href="http://modeling-languages.com/" rel="interesting link">Modeling Languages</a>. 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 <a href="http://modeling-languages.com/integrating-apis-in-model-driven-engineering/" rel="interesting link">aquí</a>.</p>]]></content:encoded>
</item>
<item>
<title>Attitude</title>

<link>http://neuromancer.inf.um.es/fm/attitude.html</link>
<comments>http://neuromancer.inf.um.es/fm/attitude.html#disqus_thread</comments>
<pubDate>Fri, 30 Sep 2011 01:11:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[family]]></category>
<category><![CDATA[photography]]></category>
<category><![CDATA[english]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/attitude.html</guid>
<description><![CDATA[]]></description>
        <content:encoded><![CDATA[<img src="http://neuromancer.inf.um.es/fm/img/DSC_0174.jpg" alt="Blog image."></img><img src="http://neuromancer.inf.um.es/fm/img/DSC_0059.jpg" alt="Blog image."></img>]]></content:encoded>
</item>
<item>
<title>Imágenes en el blog</title>

<link>http://neuromancer.inf.um.es/fm/imagenes-en-el-blog.html</link>
<comments>http://neuromancer.inf.um.es/fm/imagenes-en-el-blog.html#disqus_thread</comments>
<pubDate>Fri, 30 Sep 2011 00:49:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[blog]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<category><![CDATA[common-lisp]]></category>
<category><![CDATA[lisp]]></category>
<category><![CDATA[programming]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/imagenes-en-el-blog.html</guid>
<description><![CDATA[
Iba a introducir imágenes en el blog y he querido escribir
una pequeña función que hace más sencillo introducir fácilmente las
imágenes con la ruta por defecto, y, si procede, un enlace para las
mismas. La función queda como sigue:
(defun blog-img (img-file &amp;key alt anchor title params)
(let* ((param-list
(cons `(src . ,(format nil "~A/~A" *base-img-url* img-file))
(cons `(alt . ,(or alt "Bl[...]]]></description>
        <content:encoded><![CDATA[
<p>Iba a introducir imágenes en el blog y he querido escribir
una pequeña función que hace más sencillo introducir fácilmente las
imágenes con la ruta por defecto, y, si procede, un enlace para las
mismas. La función queda como sigue:</p>
<pre class="prettyprint lang-lisp">(defun blog-img (img-file &amp;key alt anchor title params)
  (let* ((param-list
          (cons `(src . ,(format nil "~A/~A" *base-img-url* img-file))
                (cons `(alt . ,(or alt "Blog image.")) ; alt is obligatory
                      (when title `((title . ,title))))))
         (param-list-1 (append param-list params))
         (img-html (img param-list-1)))
    (if anchor
        (a `((href . ,anchor)) img-html)
        img-html)))
</pre>
<p>¿No es bonito? En particular me gusta el uso
        del <em>seudoquote</em>. Las funciones <code>img</code>
        y <code>a</code> generan el HTML para las imágenes y para los
        enlaces, respectivamente. Un ejemplo de uso de esa función
        sería:</p>
<pre class="prettyprint lang-lisp">(blog-img "abc.jpg" :alt "Alt text" :params '((:width . 500)))
</pre>
<p>donde se elige el fichero <code>img/abc.jpg</code> con un
        texto alternativo y con el conjunto de parámetros adicionales,
        entre ellos el ancho de la imagen. Si se especifica un elemento <code>anchor</code> el código que se genera es el siguiente:</p>
<pre class="prettyprint lang-lisp">(blog-img "abc.jpg" 'anchor "http://wherever.com"  'alt "bah" 'params '(('width . 500)))</pre>
<pre class="prettyprint">
&lt;A HREF="http://wherever.com"&gt;&lt;IMG SRC="img/abc.jpg" ALT="bah" WIDTH="500"&gt;&lt;/IMG&gt;&lt;/A&gt;</pre>]]></content:encoded>
</item>
<item>
<title>Estadísticas de tiempo de generación del blog</title>

<link>http://neuromancer.inf.um.es/fm/estadisticas-de-tiempo-de-generacion-del-blog.html</link>
<comments>http://neuromancer.inf.um.es/fm/estadisticas-de-tiempo-de-generacion-del-blog.html#disqus_thread</comments>
<pubDate>Thu, 29 Sep 2011 16:17:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[blog]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[programming]]></category>
<category><![CDATA[common-lisp]]></category>
<category><![CDATA[lisp]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/estadisticas-de-tiempo-de-generacion-del-blog.html</guid>
<description><![CDATA[
De cara a optimizar la generación de las páginas del blog
con multiprogramación, he querido registrar el tiempo que tarda en
ejecutar la generación en el ordenador que se genera, para compararla
después con la optimización. Para mi sorpresa, la mayor parte del os 8
segundos que lleva la generación se la lleva el leer y compilar el
fichero Lisp que contiene las entradas antiguas (1.3MB), mientras[...]]]></description>
        <content:encoded><![CDATA[
<p>De cara a optimizar la generación de las páginas del blog
con multiprogramación, he querido registrar el tiempo que tarda en
ejecutar la generación en el ordenador que se genera, para compararla
después con la optimización. Para mi sorpresa, la mayor parte del os 8
segundos que lleva la generación se la lleva el leer y compilar el
fichero Lisp que contiene las entradas antiguas (1.3MB), mientras que
la generación de todas las páginas no tarda más de 4 segundos:</p>
<pre>[dsevilla@neuromancer:~/svn/blog]$ sbcl --script packages.lisp
Doing pre-calculations...
Generating index page...
Evaluation took:
  0.116 seconds of real time
  0.120000 seconds of total run time (0.080000 user, 0.040000 system)
  [ Run times consist of 0.040 seconds GC time, and 0.080 seconds non-GC time. ]
  103.45% CPU
  325,871,901 processor cycles
  63,697,264 bytes consed

Generating post pages...
Evaluation took:
  0.408 seconds of real time
  0.410000 seconds of total run time (0.270000 user, 0.140000 system)
  [ Run times consist of 0.010 seconds GC time, and 0.400 seconds non-GC time. ]
  100.49% CPU
  1,144,029,612 processor cycles
  167,055,120 bytes consed

Generating categories pages...
Evaluation took:
  0.074 seconds of real time
  0.070000 seconds of total run time (0.070000 user, 0.000000 system)
  94.59% CPU
  209,026,050 processor cycles
  39,985,040 bytes consed

Generating archives pages...
Evaluation took:
  0.086 seconds of real time
  0.090000 seconds of total run time (0.090000 user, 0.000000 system)
  104.65% CPU
  240,093,459 processor cycles
  43,278,720 bytes consed

Generating RSS...
Evaluation took:
  0.084 seconds of real time
  0.080000 seconds of total run time (0.080000 user, 0.000000 system)
  [ Run times consist of 0.020 seconds GC time, and 0.060 seconds non-GC time. ]
  95.24% CPU
  236,784,003 processor cycles
  35,828,208 bytes consed
</pre>
<p>Esto hace que la optimización, como máximo, sólo pueda
reducir esos 0,4 segundos que tarda la generación. Aún así lo intentaré
como un ejercicio de programación. La otra idea será ver optimizar el
proceso de carga quizá a través de pre-compilación de los ficheros
.lisp. Por cierto, para que luego digan que los lenguajes
interpretados son lentos... 1 segundo en generar 34MB de ficheros de
texto.</p>
<p>La última sorpresa... Por casualidad he probado <code>clisp</code>... Bien, aquí la carga de los ficheros .lisp es
 instantánea, y la ejecución es incluso más rápida (diría incluso
 increíblemente rápida:</p>
<pre>[dsevilla@neuromancer:~/svn/blog]$ clisp packages.lisp
Doing pre-calculations...
Generating index page...
Real time: 0.186066 sec.
Run time: 0.19 sec.
Space: 24960736 Bytes
GC: 13, GC time: 0.03 sec.
Generating post pages...
Real time: 0.708989 sec.
Run time: 0.69 sec.
Space: 83706152 Bytes
GC: 36, GC time: 0.06 sec.
Generating categories pages...
Real time: 0.051339 sec.
Run time: 0.05 sec.
Space: 11157832 Bytes
GC: 5, GC time: 0.0 sec.
Generating archives pages...
Real time: 0.249124 sec.
Run time: 0.25 sec.
Space: 13408648 Bytes
GC: 6, GC time: 0.02 sec.
Generating RSS...
Real time: 0.891364 sec.
Run time: 0.88 sec.
Space: 20991880 Bytes
GC: 9, GC time: 0.05 sec.
</pre>
<p>Comparando el tiempo de ejecución visto por el usuario:</p>
<pre>[dsevilla@neuromancer:~/svn/blog]$ time clisp packages.lisp
real	0m2.320s
user	0m1.970s
sys	0m0.310s
</pre>
<pre>[dsevilla@neuromancer:~/svn/blog]$ time sbcl --script packages.lisp
real	0m10.405s
user	0m9.940s
sys	0m0.440s
</pre>
<p>Esto es, ¡5 veces más rápido en general clisp que sbcl! Sin
embargo, mirando los datos de cada parte, hay resultados muy extraños
e inconsistentes. Por ejemplo, clisp tarda casi un segundo en generar
RSS, mientras que sbcl tarda 0,08 segundos (un orden de magnitud
menos). Estudiaré el código para ver dónde puede estar el problema,
pero por ahora, usaré clisp para generar el blog, aunque use sbcl, con
el magnífico entorno Slime para Emacs para seguir programando y probando.</p>]]></content:encoded>
</item>
<item>
<title>Multiprocesamiento para generar el blog</title>

<link>http://neuromancer.inf.um.es/fm/multiprocesamiento-para-generar-el-blog.html</link>
<comments>http://neuromancer.inf.um.es/fm/multiprocesamiento-para-generar-el-blog.html#disqus_thread</comments>
<pubDate>Thu, 29 Sep 2011 00:27:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[blog]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[programming]]></category>
<category><![CDATA[common-lisp]]></category>
<category><![CDATA[lisp]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/multiprocesamiento-para-generar-el-blog.html</guid>
<description><![CDATA[
Siguiendo este enlace voy a intentar añadir multiprocesamiento a
la generación del blog para acelerarlo. No va a ser tan sencillo como
debería ser, por ejemplo, debería existir, como en Clojure, un parallel map pero la verdad es que no hay, sólo hilos
tradicionales... La ventaja, sin embargo, será grande, ya que todas
las páginas se pueden generar en paralelo.]]></description>
        <content:encoded><![CDATA[
<p>Siguiendo <a href="http://blog.viridian-project.de/2008/10/04/threads-in-sbcl/" rel="interesting link">este enlace</a> voy a intentar añadir multiprocesamiento a
la generación del blog para acelerarlo. No va a ser tan sencillo como
debería ser, por ejemplo, debería existir, como en Clojure, un <code>parallel map</code> pero la verdad es que no hay, sólo hilos
tradicionales... La ventaja, sin embargo, será grande, ya que todas
las páginas se pueden generar en paralelo.</p>]]></content:encoded>
</item>
<item>
<title>Entradas del blog antiguo disponibles</title>

<link>http://neuromancer.inf.um.es/fm/entradas-del-blog-antiguo-disponibles.html</link>
<comments>http://neuromancer.inf.um.es/fm/entradas-del-blog-antiguo-disponibles.html#disqus_thread</comments>
<pubDate>Tue, 27 Sep 2011 21:16:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[blog]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/entradas-del-blog-antiguo-disponibles.html</guid>
<description><![CDATA[
No sin algo de trabajo, salvando las idiosincrasias de SQL,
donde tenía alojado mi anterior blog con la estructura de base de
datos de Wordpress, (por ejemplo, las comillas simples en SQL son
'', y no \') y de Common-Lisp (por ejemplo, no acepta caracteres
especiales como \n ni \r), he conseguido añadir todas las entradas
del anterior blog. Ha sido sorprendentemente automático, dadas las
convers[...]]]></description>
        <content:encoded><![CDATA[
<p>No sin algo de trabajo, salvando las idiosincrasias de SQL,
donde tenía alojado mi anterior blog con la estructura de base de
    datos de Wordpress, (por ejemplo, las comillas simples en SQL son
'', y no \') y de Common-Lisp (por ejemplo, no acepta caracteres
especiales como \n ni \r), he conseguido añadir todas las entradas
del anterior blog. Ha sido sorprendentemente automático, dadas las
conversiones pertinentes (no muchas).</p>
<p>Pero lo que más me ha
sorprendido es que el blog actualmente, al ser generado estáticamente,
ocupa 34 MBytes de datos, está compuesto por 1393 ficheros HTML, y
tarda unos 5 segundos en generarse. No está mal para ser un lenguaje
interpretado. Y podría ser mucho más rápido si supiera optimizarlo
bien, y arreglara algún que otro algoritmo que podría hacerse más
rápido. También si pre-compilara el código en vez de hacerlo cada vez
que se genera el blog (esto lo añadiré al script de generación, que
recompile los ficheros sólo si han cambiado).</p>
<p>Al ser tantas entradas, he tenido que añadir una opción de
dividir todos las entradas en páginas, a un número de 50 entradas por
página (de la página principal salen 13 subpáginas). Ha sido algo
complicado integrar la generación de várias subpáginas en lo que ya
tenía, pero no me ha llevado mucho (una media hora). En parte ha sido
más complejo porque Common-Lisp no tiene una operación para partir una
lista (la de las entradas) eficientemente, y he tenido que hacerla
yo. No es muy compleja, pero tampoco trivial si quieres hacerla eficiente.</p>]]></content:encoded>
</item>
<item>
<title>Añadido colorización de código con google-code-prettify</title>

<link>http://neuromancer.inf.um.es/fm/anadido-colorizacion-de-codigo-con-googlecodeprettify.html</link>
<comments>http://neuromancer.inf.um.es/fm/anadido-colorizacion-de-codigo-con-googlecodeprettify.html#disqus_thread</comments>
<pubDate>Fri, 23 Sep 2011 22:40:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[blog]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<category><![CDATA[common-lisp]]></category>
<category><![CDATA[lisp]]></category>
<category><![CDATA[programming]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/anadido-colorizacion-de-codigo-con-googlecodeprettify.html</guid>
<description><![CDATA[
Pues no ha sido complicado. Simplemente he seguido las
instrucciones del README de la página de google-code-prettify y ya está.]]></description>
        <content:encoded><![CDATA[
<p>Pues no ha sido complicado. Simplemente he seguido las
instrucciones del README de la página <a href="http://code.google.com/p/google-code-prettify/" rel="interesting link">de google-code-prettify</a> y ya está.</p>]]></content:encoded>
</item>
<item>
<title>Fiestas en Mula</title>

<link>http://neuromancer.inf.um.es/fm/fiestas-en-mula.html</link>
<comments>http://neuromancer.inf.um.es/fm/fiestas-en-mula.html#disqus_thread</comments>
<pubDate>Wed, 21 Sep 2011 22:00:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[friends]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/fiestas-en-mula.html</guid>
<description><![CDATA[
Me alegro de que mi amigo Pedro Aurelio continúe su blog. En la última entrada de su blog, aparte del sentimiento
religioso, que en mi caso es nulo, sí que echo de menos sentir el
sonido de mi pueblo, poder pasear tranquilamente por él... ¡No dudéis en
acercaros a Mula del 19 al 25 de septiembre!]]></description>
        <content:encoded><![CDATA[
<p>Me alegro de que mi amigo Pedro Aurelio continúe su blog. En la <a href="http://pallamasjimenez.blogspot.com/2011/09/campanas.html">última entrada de su blog</a>, aparte del sentimiento
religioso, que en mi caso es nulo, sí que echo de menos sentir el
sonido de mi pueblo, poder pasear tranquilamente por él... ¡No dudéis en
acercaros a Mula del 19 al 25 de septiembre!</p>]]></content:encoded>
</item>
<item>
<title>Y las páginas de los tags</title>

<link>http://neuromancer.inf.um.es/fm/y-las-paginas-de-los-tags.html</link>
<comments>http://neuromancer.inf.um.es/fm/y-las-paginas-de-los-tags.html#disqus_thread</comments>
<pubDate>Tue, 20 Sep 2011 00:00:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[blog]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<category><![CDATA[common-lisp]]></category>
<category><![CDATA[lisp]]></category>
<category><![CDATA[programming]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/y-las-paginas-de-los-tags.html</guid>
<description><![CDATA[
Sólo por curiosidad, he aquí cómo está
implementada la generación de los links con diferente tamaño del sidebar:
(defun categories-links ()
(if *categories-links*
*categories-links*
(setf *categories-links* (multiple-value-bind (max-n-posts min-n-posts)
(loop for c being the hash-values in *posts-for-category*
maximizing (car c) into max
minimizing (car c) into min
finally (return (values max mi[...]]]></description>
        <content:encoded><![CDATA[
<p>Sólo por curiosidad, he aquí cómo está
implementada la generación de los links con diferente tamaño del <em>sidebar</em>:</p>
<pre class="prettyprint lang-lisp">(defun categories-links ()
  (if *categories-links*
      *categories-links*
      (setf *categories-links* (multiple-value-bind (max-n-posts min-n-posts)
          (loop for c being the hash-values in *posts-for-category*
             maximizing (car c) into max
             minimizing (car c) into min
             finally (return (values max min)))
        (apply #'concatenate 'string
                (loop for k being the hash-keys in *posts-for-category*
                   using (hash-value v)
                   collect (format nil "&lt;a href=\"category-~A.html\"
                             title=\"~A topic~:*~p\" rel=\"category tag\"
                             style=\"font-size: ~Apx;\">~3:*~A&lt;/a> "
                             (string-downcase k)
                             (car v)
                             (+ 9 (round
                                   (/ (- (car v) min-n-posts)
                                      (/ (- max-n-posts min-n-posts) 10)))))))))))</pre>
<p>Y eso sin contar con el cálculo de <code>*posts-for-category*</code>.</p>]]></content:encoded>
</item>
<item>
<title>Ya funcionan los archivos</title>

<link>http://neuromancer.inf.um.es/fm/ya-funcionan-los-archivos.html</link>
<comments>http://neuromancer.inf.um.es/fm/ya-funcionan-los-archivos.html#disqus_thread</comments>
<pubDate>Tue, 20 Sep 2011 00:00:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[blog]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/ya-funcionan-los-archivos.html</guid>
<description><![CDATA[
No un gran logro, pero ya funcionan.]]></description>
        <content:encoded><![CDATA[
<p>No un gran logro, pero ya funcionan.</p>]]></content:encoded>
</item>
<item>
<title>¡Blog online!</title>

<link>http://neuromancer.inf.um.es/fm/blog-online.html</link>
<comments>http://neuromancer.inf.um.es/fm/blog-online.html#disqus_thread</comments>
<pubDate>Sun, 18 Sep 2011 00:00:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[español]]></category>
<category><![CDATA[spanish]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/blog-online.html</guid>
<description><![CDATA[
Pues por ahora no funciona casi nada, pero el blog ya se
auto-genera, lo cual está muy bien. Por ahora se generan las páginas
de cada entrada (sin comentarios por ahora), y las categorías,
también cada una en su página. No genera por ahora ni RSS ni Atom,
pero eso es sencillo una vez que lo tengo todo funcionando. Como cada
entrada es un fichero de texto, añadiré también macros de Emacs para
gen[...]]]></description>
        <content:encoded><![CDATA[
<p>Pues por ahora no funciona casi nada, pero el blog ya se
 auto-genera, lo cual está muy bien. Por ahora se generan las páginas
 de cada entrada (sin comentarios por ahora), y las categorías,
 también cada una en su página. No genera por ahora ni RSS ni Atom,
 pero eso es sencillo una vez que lo tengo todo funcionando. Como cada
 entrada es un fichero de texto, añadiré también macros de Emacs para
 generar enlaces con macros...</p>]]></content:encoded>
</item>
<item>
<title>¡Primera entrada!</title>

<link>http://neuromancer.inf.um.es/fm/primera-entrada.html</link>
<comments>http://neuromancer.inf.um.es/fm/primera-entrada.html#disqus_thread</comments>
<pubDate>Tue, 13 Sep 2011 00:00:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<category><![CDATA[lisp]]></category>
<category><![CDATA[common-lisp]]></category>
<category><![CDATA[spanish]]></category>
<category><![CDATA[español]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/primera-entrada.html</guid>
<description><![CDATA[
Esta es la primera entrada de este nuevo blog cuyo
generador está escrito en Common-Lisp. ¿Lisp? Sí, más de 50
años después sigue vivo, y sinceramente, es una maravilla
aprenderlo y usarlo. Iré mostrando en el futuro cómo se
genera.]]></description>
        <content:encoded><![CDATA[
<p>Esta es la primera entrada de este nuevo blog cuyo
          generador está escrito en Common-Lisp. ¿Lisp? Sí, más de 50
          años después sigue vivo, y sinceramente, es una maravilla
          aprenderlo y usarlo. Iré mostrando en el futuro cómo se
          genera.</p>]]></content:encoded>
</item>
<item>
<title>Martina, Emma</title>

<link>http://neuromancer.inf.um.es/fm/martina-emma.html</link>
<comments>http://neuromancer.inf.um.es/fm/martina-emma.html#disqus_thread</comments>
<pubDate>Thu, 05 May 2011 00:00:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[family]]></category>
<category><![CDATA[photography]]></category>
<category><![CDATA[spanish]]></category>
<category><![CDATA[español]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/martina-emma.html</guid>
<description><![CDATA[


martina, emma  , originally uploaded by dsevilla.


A través de Flickr:
De hace algunos meses.
Lipca Rollop Ennit 8cm/2.8 + Fuji Neopan 400cn

]]></description>
        <content:encoded><![CDATA[
        <a href="http://www.flickr.com/photos/dsevilla/5679519416/" title="photo sharing"><img src="http://farm6.static.flickr.com/5110/5679519416_505ea1e173.jpg" alt="" /></a><br />
<br />
        <a href="http://www.flickr.com/photos/dsevilla/5679519416/">martina, emma <img src='wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </a>, originally uploaded by <a href="http://www.flickr.com/photos/dsevilla/">dsevilla</a>.

<p>
        <i>A través de Flickr:</i><br />
De hace algunos meses.</p>
<p>Lipca Rollop Ennit 8cm/2.8 + Fuji Neopan 400cn
</p>
]]></content:encoded>
</item>
<item>
<title>martina</title>

<link>http://neuromancer.inf.um.es/fm/martina-post-2011-3-28.html</link>
<comments>http://neuromancer.inf.um.es/fm/martina-post-2011-3-28.html#disqus_thread</comments>
<pubDate>Mon, 28 Mar 2011 10:38:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/martina-post-2011-3-28.html</guid>
<description><![CDATA[martina, originally uploaded by dsevilla.                                 Vino corriendo hacia mí y salió esta foto :)She came running to me and I shot this! :)]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/5567060979/" title="photo sharing"><img src="http://farm6.static.flickr.com/5174/5567060979_316df9de9d.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/5567060979/">martina</a>, originally uploaded by <a href="http://www.flickr.com/photos/dsevilla/">dsevilla</a>.<br/></div><br/>                              <br/><p><br/>   Vino corriendo hacia mí y salió esta foto :)<br /><br/><br /><br/>She came running to me and I shot this! :)<br/></p>]]></content:encoded>
</item>
<item>
<title>Boats &amp; child</title>

<link>http://neuromancer.inf.um.es/fm/boats-amp-child.html</link>
<comments>http://neuromancer.inf.um.es/fm/boats-amp-child.html#disqus_thread</comments>
<pubDate>Mon, 21 Mar 2011 00:15:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/boats-amp-child.html</guid>
<description><![CDATA[Boats &amp; child, originally uploaded by dsevilla.]]></description>
        <content:encoded><![CDATA[<div><a href="http://www.flickr.com/photos/dsevilla/5542444491/" title="photo sharing"><img src="http://farm6.static.flickr.com/5138/5542444491_33bfdba597.jpg" alt="" /></a><br /><br/><a href="http://www.flickr.com/photos/dsevilla/5542444491/">Boats &amp; child</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.</div>]]></content:encoded>
</item>
<item>
<title>Primera aproximación de un mecanismo de actores para C++</title>

<link>http://neuromancer.inf.um.es/fm/primera-aproximacion-de-un-mecanismo-de-actores-para-c.html</link>
<comments>http://neuromancer.inf.um.es/fm/primera-aproximacion-de-un-mecanismo-de-actores-para-c.html#disqus_thread</comments>
<pubDate>Wed, 09 Feb 2011 00:00:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[c++]]></category>
<category><![CDATA[programming]]></category>
<category><![CDATA[spanish]]></category>
<category><![CDATA[español]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/primera-aproximacion-de-un-mecanismo-de-actores-para-c.html</guid>
<description><![CDATA[Desde hace tiempo quiero escribir esta entrada, pero por falta de
tiempo no he podido. El mecanismo de actores se utiliza en lenguajes
de programación como Erlang y Scala para sincronizar diferentes
«actores» que están funcionando en el sistema. Tradicionalmente, la
programación con hilos (salvo en casos como BSP, por ejemplo) se ha
realizado básicamente como la programación monoproceso, pero hac[...]]]></description>
        <content:encoded><![CDATA[<p>Desde hace tiempo quiero escribir esta entrada, pero por falta de
tiempo no he podido. El mecanismo de actores se utiliza en lenguajes
de programación como Erlang y Scala para sincronizar diferentes
«actores» que están funcionando en el sistema. Tradicionalmente, la
programación con hilos (salvo en casos como BSP, por ejemplo) se ha
realizado básicamente como la programación monoproceso, pero haciendo
que el programador tuviera en la cabeza las posibles colisiones que
varios hilos ejecutando un código podrían tener.</p> <p>La otra cara
de esta moneda la han tenido lenguajes y paradigmas que cambiaban la
manera de programación hacia esquemas que hicieran más fácil escalar
en el número de hilos/cores a la vez que permitían una programación
más natural de programas multihilo. Estos nuevos paradigmas también
evitaban, por diseño, los problemas que se dan con los candados,
reentrancia, etc.</p> <p>El paradigma sobre el que hablaré hoy es el
de los actores. Este mecanismo, que data de 1986, se utiliza en Erlang
y en <a
href="http://lamp.epfl.ch/~phaller/doc/haller07coord.pdf">Scala</a>,
por ejemplo, pero no he encontrado ejemplos de cómo implementar este
mecanismo en C++, salvo un <a
href="http://people.cs.vt.edu/~kafura/PreviousPapers/act++-joop93.pdf">artículo
de 1993 de Kafura, Mukherji y Lavender</a> en el que no se hace uso de
ninguna característica «moderna» de C++, como los tipos parametrizados
o la sobrecarga de operadores.</p>

<p>En resumen, el mecanismo de actores se basa en definir un actor
como un objeto reactivo que se ejecuta en su propio hilo. Son
similares a los objetos <em>stricto sensu</em>, en el sentido de que
se les puede enviar invocaciones (en mi caso eventos), y los actores
responden ejecutándolos, como los objetos normales. No obstante, son
diferentes porque las invocaciones se ejecutan de manera que no causan
problemas de concurrencia. ¿Cómo? Pues asegurando que todas las
invocaciones sobre un actor se ejecutan en un mismo hilo. En este
sentido, un actor también aglutina, en general, un hilo de ejecución
propio en el que se ejecutan las llamadas al mismo (esto puede no ser
así exactamente, pero la idea es la misma).</p> <p>Existe una
diferencia con los paradigmas tradicionales de programación. Por
ejemplo, para no causar problemas de concurrencia, todos los métodos
de un objeto se podrían marcar como «<code>synchronized</code>» al
estilo de Java. Esto, efectivamente, hace que no haya problemas de
concurrencia (al menos los más usuales), ya que todas las invocaciones
a un objeto se realizan en exclusión mutua. Sin embargo, una
invocación a objeto normal lleva consigo asociada un hilo de
ejecución, y el hilo de ejecución del objeto llamante es el que
realiza la llamada al objeto llamado, con lo que también se tienen que
prevenir problemas como interbloqueos, esperas de candados, etc.</p>
<p>En resumen, sería casi como un sistema basado en eventos en donde
los objetos se envían mensajes que son a su vez procesados en los
hilos respectivos de cada actor. Ahora bien, ¿cómo implementar en C++
este mecanismo sin ser excesivamente intrusivo, teniendo en cuenta que
el mecanismo de envío de eventos no existe en C++? Pensé en utilizar
<code>boost.signal</code>, pero éste no asegura que el objeto receptor
va a ejecutar la señal en su propio hilo. Los requisitos que establecí
pues para el desarrollo fueron los siguientes:</p> <ol> <li>El
mecanismo debe ser poco intrusivo, en el sentido de que las clases que
quieran beneficiarse de este mecanismo no tienen por qué escribirse
heredando de un interfaz en particular, sino que sólo tienen que
definir una serie de tipos para saber tratarlas como actor.  </li>
<li>Cualquier clase puede definir de manera sencilla qué eventos puede
recibir y cómo actuará ante cualquier evento, y estos serán los únicos
requisitos que tendrá que especificar la clase.</li>

<li>Las clases pueden modificar de forma sencilla qué eventos producen y reciben.</li>
<li>Las clases no tendrán que preocuparse de tratar con hilos, asincronía, almacenamiento y reproducción de eventos, etc.
</li>
<li>El mecanismo de envío de eventos debe estar integrado en el lenguaje C++ de forma natural. Por ejemplo, con un operador que muestre que se está enviando un evento: <code>objeto &lt;&lt;  mensaje;</code>.</li>
</ol>
<p>Con estos requisitos, pensé hacer la clase <code>actor</code> que pudiera aceptar como parámetro cualquier otra clase, y convertirla así en un actor. Este mecanismo es poco intrusivo, sólo obligando a que la clase que se quiere beneficiar de este mecanismo especifique qué eventos es capaz de recibir. La clase actor que me quedó fue la siguiente, con comentarios al estilo de la <em>literate programming</em> (si alguien está interesado le puedo pasar el código sin los comentarios):</p>

<pre>
<span style="color: #6495ed; font-weight: bold;">template</span> &lt;<span style="color: #6495ed; font-weight: bold;">typename</span> <span style="color: #9290ff;">Klass</span>&gt;
<span style="color: #6495ed; font-weight: bold;">struct</span> <span style="color: #9290ff;">actor</span>
{
    <span style="color: #6495ed; font-weight: bold;">typedef</span> <span style="color: #6495ed; font-weight: bold;">typename</span> <span style="color: #9932cc; font-weight: bold;">Klass</span>::<span style="color: #9290ff;">events_type</span> <span style="color: #9290ff;">VariantType</span>;

</pre>
<p>Uno de los requisitos que tiene que proveer la clase que se va a convertir en actor es ofrecer el tipo <code>VariantType</code> con los distintos eventos que va a poder recibir. Para esto se usará el tipo <code>boost.variant</code> como se verá después.</p>
<pre>
    <span style="color: #6495ed; font-weight: bold;">typedef</span> <span style="color: #9290ff;">actor</span>&lt;<span style="color: #9290ff;">Klass</span>&gt; <span style="color: #9290ff;">self</span>;

    <span style="color: #87ceeb;">actor</span> (<span style="color: #9290ff;">Klass</span>&amp; <span style="color: #98fb98;">a</span>)
        : delegate_ (a)
    {
        thread_ = <span style="color: #9932cc; font-weight: bold;">boost</span>::thread (<span style="color: #9932cc; font-weight: bold;">boost</span>::ref (*<span style="color: #6495ed; font-weight: bold;">this</span>));
    }

</pre>
<p>Cada actor posee su propio hilo. Esto, por supuesto puede modificarse después. Sólo quería hacer una prueba de concepto. En scala existen <em>schedulers</em> que enlazan actores con hilos.</p>
<pre>
    <span style="color: #66cdaa;">// </span><span style="color: #66cdaa;">Thread func.
</span>    <span style="color: #9290ff;">void</span> <span style="color: #6495ed; font-weight: bold;">operator</span><span style="color: #87ceeb;">()</span>()
    {
        <span style="color: #9932cc; font-weight: bold;">std</span>::cout &lt;&lt; <span style="color: #32cd32;">&#8220;running thread&#8221;</span> &lt;&lt; <span style="color: #9932cc; font-weight: bold;">std</span>::endl;

        <span style="color: #6495ed; font-weight: bold;">while</span>(!stop_)
        {
            <span style="color: #9290ff;">bool</span> <span style="color: #98fb98;">b</span>;
            {
                <span style="color: #9932cc; font-weight: bold;">boost</span>::<span style="color: #9290ff;">lock_guard</span>&lt;<span style="color: #9932cc; font-weight: bold;">boost</span>::mutex&gt; <span style="color: #98fb98;">guard</span> (list_mutex_);
                b = el_.empty();
            }

            <span style="color: #6495ed; font-weight: bold;">if</span> (b)
            {
                <span style="color: #9932cc; font-weight: bold;">boost</span>::<span style="color: #9290ff;">unique_lock</span>&lt;<span style="color: #9932cc; font-weight: bold;">boost</span>::mutex&gt; <span style="color: #98fb98;">lock</span> (mut_);

                <span style="color: #66cdaa;">// </span><span style="color: #66cdaa;">wait on the cond. var.

</span>                cond_.wait (lock);
            }

            <span style="color: #6495ed; font-weight: bold;">while</span> (<span style="color: #9932cc; font-weight: bold;">true</span>)
            {
                <span style="color: #9290ff;">VariantType</span> <span style="color: #98fb98;">vtv</span>;
                {
                    <span style="color: #9932cc; font-weight: bold;">boost</span>::<span style="color: #9290ff;">lock_guard</span>&lt;<span style="color: #9932cc; font-weight: bold;">boost</span>::mutex&gt; <span style="color: #98fb98;">guard</span> (list_mutex_);
                    <span style="color: #6495ed; font-weight: bold;">if</span> (el_.empty())
                        <span style="color: #6495ed; font-weight: bold;">break</span>;

                    vtv = el_.front();
                    el_.pop_front();
                }

                <span style="color: #66cdaa;">// </span><span style="color: #66cdaa;">Call the delegate without holding the mutex locked

</span>                <span style="color: #9932cc; font-weight: bold;">boost</span>::apply_visitor (<span style="color: #9932cc; font-weight: bold;">detail</span>::<span style="color: #9290ff;">event_caller</span>&lt;Klass&gt; (<span style="color: #98fb98;">delegate_</span>),
                                      vtv);
            }
        }
    }
</pre>
<p>El <code>operator()()</code> de la clase actor ejecuta el código del hilo. He utilizado variables de condición porque me parecen más ricas semánticamente. El hilo básicamente extrae eventos de la cola de eventos y los ejecuta sobre el delegate. Como los eventos de la cola pueden ser de diferentes <em>tipos</em> (nótese que este punto es especialmente difícil en C++), hay que utilizar estructuras que permitan tratar diferentes tipos de eventos de forma genérica. Para eso he usado la construcción <code>boost::apply_visitor</code> de <code>boost.variant</code>. Con el uso de una clase especial, <code>detail::event_caller</code>, que se verá más abajo, se consigue llamar a la clase original, a los métodos <code>process(Evento)</code>, para cada uno de los eventos recibidos.</p>

<pre>
    <span style="color: #6495ed; font-weight: bold;">template</span> &lt;<span style="color: #6495ed; font-weight: bold;">typename</span> <span style="color: #9290ff;">Event</span>&gt;
    <span style="color: #9290ff;">self</span>&amp; <span style="color: #6495ed; font-weight: bold;">operator</span><span style="color: #87ceeb;">&lt;&lt;</span>(<span style="color: #9290ff;">Event</span>&amp; <span style="color: #98fb98;">e</span>)
    {
        <span style="color: #9932cc; font-weight: bold;">std</span>::cout &lt;&lt; <span style="color: #32cd32;">&#8220;Received event&#8221;</span> &lt;&lt; <span style="color: #9932cc; font-weight: bold;">std</span>::endl;
        {
            <span style="color: #9932cc; font-weight: bold;">boost</span>::<span style="color: #9290ff;">lock_guard</span>&lt;<span style="color: #9932cc; font-weight: bold;">boost</span>::mutex&gt; <span style="color: #98fb98;">lock</span> (list_mutex_);
            el_.push_back (e);
        }

        <span style="color: #66cdaa;">// </span><span style="color: #66cdaa;">signal that a new event is available

</span>        cond_.notify_one();

        <span style="color: #6495ed; font-weight: bold;">return</span> *<span style="color: #6495ed; font-weight: bold;">this</span>;
    }
</pre>
<p>El operador <code>&lt;&lt;</code> se puede usar para enviar un evento al actor. Esta es una construcción que queda muy natural. Enviar un mensaje es diferente a realizar una llamada, aunque también se puede pensar en un mecanismo de llamada a función modificado. Al final, el envío de mensajes, como se verá después, será algo así como <code>actor &lt;&lt; Clase::Evento(valores);</code>.</p>
<pre>

    <span style="color: #9290ff;">void</span> <span style="color: #87ceeb;">join</span>()
    {
        thread_.join();
    }

    <span style="color: #9290ff;">void</span> <span style="color: #87ceeb;">stop</span>()
    {
        stop_ = <span style="color: #9932cc; font-weight: bold;">true</span>;
        cond_.notify_one();
    }

<span style="color: #6495ed; font-weight: bold;">private</span>:
    <span style="color: #9290ff;">Klass</span>&amp; <span style="color: #98fb98;">delegate_</span>;

    <span style="color: #6495ed; font-weight: bold;">typedef</span> <span style="color: #9932cc; font-weight: bold;">std</span>::<span style="color: #9290ff;">deque</span>&lt;<span style="color: #9290ff;">VariantType</span>&gt;  <span style="color: #9290ff;">event_list</span>;
    <span style="color: #9290ff;">event_list</span> <span style="color: #98fb98;">el_</span>;
    <span style="color: #9290ff;">bool</span> <span style="color: #98fb98;">stop_</span>; <span style="color: #66cdaa;">// </span><span style="color: #66cdaa;">stop?

</span>    <span style="color: #9932cc; font-weight: bold;">boost</span>::<span style="color: #9290ff;">thread</span> <span style="color: #98fb98;">thread_</span>;

    <span style="color: #9932cc; font-weight: bold;">boost</span>::<span style="color: #9290ff;">mutex</span> <span style="color: #98fb98;">mut_</span>;
    <span style="color: #9932cc; font-weight: bold;">boost</span>::<span style="color: #9290ff;">mutex</span> <span style="color: #98fb98;">list_mutex_</span>;
    <span style="color: #9932cc; font-weight: bold;">boost</span>::<span style="color: #9290ff;">condition_variable</span> <span style="color: #98fb98;">cond_</span>;
};

</pre>
<p>Por completitud, aquí está la clase <code>detail::event_caller</code>. Es necesaria para visitar un tipo <code>boost.variant</code> a través de la función <code>boost::apply_visitor</code>. Simplemente llama a la función <code>process()</code> correspondiente.</p>
<pre>
<span style="color: #6495ed; font-weight: bold;">namespace</span> <span style="color: #9932cc; font-weight: bold;">detail</span>

{

<span style="color: #6495ed; font-weight: bold;">template</span> &lt;<span style="color: #6495ed; font-weight: bold;">typename</span> <span style="color: #9290ff;">Klass</span>&gt;
<span style="color: #6495ed; font-weight: bold;">struct</span> <span style="color: #9290ff;">event_caller</span> : <span style="color: #6495ed; font-weight: bold;">public</span> <span style="color: #9932cc; font-weight: bold;">boost</span>::<span style="color: #9290ff;">static_visitor</span>&lt;&gt;

{
    <span style="color: #9290ff;">Klass</span>&amp; <span style="color: #98fb98;">instance_</span>;

    <span style="color: #87ceeb;">event_caller</span> (<span style="color: #9290ff;">Klass</span>&amp; <span style="color: #98fb98;">i</span>)
        : instance_ (i)
    {
    }

    <span style="color: #6495ed; font-weight: bold;">template</span> &lt;<span style="color: #6495ed; font-weight: bold;">typename</span> <span style="color: #9290ff;">T</span>&gt;

    <span style="color: #9290ff;">void</span> <span style="color: #6495ed; font-weight: bold;">operator</span><span style="color: #87ceeb;">()</span>( <span style="color: #9290ff;">T</span> <span style="color: #6495ed; font-weight: bold;">const</span> &amp; <span style="color: #98fb98;">operand</span> ) <span style="color: #6495ed; font-weight: bold;">const</span>
    {
        instance_.process (operand);
    }
};
}

</pre>
<p>Llegamos a la clase sobre la que queremos construir el actor, llamada para este ejemplo <code>TestClass</code>. La clase define internamente un par de eventos (<code>Event1</code> y <code>Event2</code>), y, como comentamos arriba, el tipo <code>events_type</code>, como un <code>boost.variant</code> de los diferentes eventos que puede recibir. Se pueden ver los métodos <code>process()</code> más abajo. En este caso la clase tiene métodos propios para retornar un actor interno. Esto no tiene por qué ser así, y como se ha visto, los actores son independientes de las clases de las que actúan en representación.</p>

<pre>
<span style="color: #6495ed; font-weight: bold;">class</span> <span style="color: #9290ff;">TestClass</span>
{
<span style="color: #6495ed; font-weight: bold;">public</span>:
    <span style="color: #6495ed; font-weight: bold;">typedef</span> <span style="color: #9290ff;">actor</span>&lt;<span style="color: #9290ff;">TestClass</span>&gt; <span style="color: #9290ff;">actor_type</span>;

    <span style="color: #6495ed; font-weight: bold;">struct</span> <span style="color: #9290ff;">Event1</span>

    {
        <span style="color: #9290ff;">int</span> <span style="color: #98fb98;">data</span>;
    };

    <span style="color: #6495ed; font-weight: bold;">struct</span> <span style="color: #9290ff;">Event2</span>
    {
        <span style="color: #9932cc; font-weight: bold;">std</span>::<span style="color: #9290ff;">string</span> <span style="color: #98fb98;">ss</span>;
    };

    <span style="color: #66cdaa;">// </span><span style="color: #66cdaa;">Obligatory

</span>    <span style="color: #6495ed; font-weight: bold;">typedef</span> <span style="color: #9932cc; font-weight: bold;">boost</span>::<span style="color: #9290ff;">variant</span>&lt; <span style="color: #9290ff;">Event1</span>, <span style="color: #9290ff;">Event2</span> &gt; <span style="color: #9290ff;">events_type</span>;

    <span style="color: #9290ff;">actor_type</span>&amp; <span style="color: #87ceeb;">the_actor</span>()
    {
        <span style="color: #6495ed; font-weight: bold;">return</span> *actor_;
    }

    <span style="color: #66cdaa;">// </span><span style="color: #66cdaa;">Ctor.

</span>    <span style="color: #87ceeb;">TestClass</span>()
        : actor_ (<span style="color: #6495ed; font-weight: bold;">new</span> <span style="color: #9290ff;">actor_type</span> (*<span style="color: #6495ed; font-weight: bold;">this</span>))
    {
    }

    ~<span style="color: #87ceeb;">TestClass</span>()
    {
        actor_-&gt;stop();
        actor_-&gt;join();
        <span style="color: #6495ed; font-weight: bold;">delete</span> actor_;
    }


<span style="color: #6495ed; font-weight: bold;">private</span>:
    <span style="color: #9290ff;">actor_type</span>* <span style="color: #98fb98;">actor_</span>;

<span style="color: #6495ed; font-weight: bold;">public</span>:
    <span style="color: #9290ff;">void</span> <span style="color: #87ceeb;">process</span> (Event1 <span style="color: #6495ed; font-weight: bold;">const</span>&amp; <span style="color: #98fb98;">e</span>)
    {
        <span style="color: #9932cc; font-weight: bold;">std</span>::cout &lt;&lt; <span style="color: #32cd32;">&#8220;Processed event: &#8220;</span>  &lt;&lt; e.data &lt;&lt; <span style="color: #9932cc; font-weight: bold;">std</span>::endl;
    }

    <span style="color: #9290ff;">void</span> <span style="color: #87ceeb;">process</span> (Event2 <span style="color: #6495ed; font-weight: bold;">const</span>&amp; <span style="color: #98fb98;">e</span>)
    {
        <span style="color: #9932cc; font-weight: bold;">std</span>::cout &lt;&lt; <span style="color: #32cd32;">&#8220;Processed event 2: &#8220;</span>  &lt;&lt; e.ss &lt;&lt; <span style="color: #9932cc; font-weight: bold;">std</span>::endl;
    }
};

</pre>
<p>Por último, ¿cómo se usa este mecanismo de actores? Lo ideal es proveer de mecanismos que sean semánticamente ricos y que sigan el principio de mínima sorpresa. Con las clases de arriba podemos escribir código sencillo como el siguiente:</p>
<pre>
    <span style="color: #9932cc; font-weight: bold;">TestClass</span>::<span style="color: #9290ff;">Event1</span> <span style="color: #98fb98;">ev</span>;
    ev.data = -2;

    <span style="color: #9932cc; font-weight: bold;">TestClass</span>::<span style="color: #9290ff;">Event2</span> <span style="color: #98fb98;">ev2</span>;
    ev2.ss = <span style="color: #32cd32;">&#8220;abcdef.&#8221;</span>;

    <span style="color: #9290ff;">TestClass</span> <span style="color: #98fb98;">tc</span>;

    <span style="color: #9932cc; font-weight: bold;">TestClass</span>::<span style="color: #9290ff;">actor_type</span>&amp; <span style="color: #98fb98;">ac</span> = tc.the_actor();</pre>

<p>Primero se crean un par de eventos de los dos tipos que puede recibir la clase <code>TestClass</code>, y se obtiene el actor <code>ac</code>. Se puede usar ese actor para enviar eventos a la clase:</p>
<pre>
    <span style="color: #66cdaa;">// </span><span style="color: #66cdaa;">Send the event2
</span>    ac &lt;&lt; ev2;

    <span style="color: #66cdaa;">// </span><span style="color: #66cdaa;">Send message
</span>    ac &lt;&lt; ev;
    <span style="color: #6495ed; font-weight: bold;">for</span> (<span style="color: #9290ff;">int</span> <span style="color: #98fb98;">i</span> = 0; i &lt; 2000; ++i)
    {
        ev.data = i;
        ac &lt;&lt; ev;
        ac &lt;&lt; ev2;
    }

</pre>
<p>Aquí se envía primero un evento de tipo <code>Event1</code>, y luego otro del tipo 2. Después se entra en un bucle que envía ambos mensajes, modificando el primer evento con un dato distinto. El programa va mostrando la salida de eventos de la clase en orden:</p>
<pre>
...
Processed event: 1996
Processed event 2: abcdef.
Processed event: 1997
Processed event 2: abcdef.
Processed event: 1998
Processed event 2: abcdef.
Processed event: 1999
Processed event 2: abcdef.
</pre>
<p>Un último apunte. Las diferencias con los actores de otros lenguajes dinámicos (Scala, por ejemplo), son que en estos lenguajes se puede especificar un procesado basado en máquinas de estados, como por ejemplo, cuando se recibe el evento 1, después sólo se puede recibir el evento 2. Esta máquina de estados se puede implementar. Es una primera implementación de prueba.</p>
<p>No dudéis en contactar conmigo para ideas o comentarios.
</p>]]></content:encoded>
</item>
<item>
<title>Hispania F1 Racing Team</title>

<link>http://neuromancer.inf.um.es/fm/hispania-f1-racing-team.html</link>
<comments>http://neuromancer.inf.um.es/fm/hispania-f1-racing-team.html#disqus_thread</comments>
<pubDate>Fri, 19 Nov 2010 00:21:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/hispania-f1-racing-team.html</guid>
<description><![CDATA[
Esta semana (el martes, creo recordar) hubo una charla
de este grupo de fórmula uno con capital español (murciano, para más
señas). Quizá es que esperaba más de esto, mucha tecnología al límite,
ingeniería de desarrollo, pruebas, ciclos cortos de desarrollo, etc.,
pero me desilusionó un poco la charla.
Explicaré por qué. No
pude ir al principio de la charla porque estaba dando clase en el
máster[...]]]></description>
        <content:encoded><![CDATA[
<p>Esta semana (el martes, creo recordar) hubo una charla
de este grupo de fórmula uno con capital español (murciano, para más
señas). Quizá es que esperaba más de esto, mucha tecnología al límite,
ingeniería de desarrollo, pruebas, ciclos cortos de desarrollo, etc.,
pero me desilusionó un poco la charla.</p>
<p>Explicaré por qué. No
pude ir al principio de la charla porque estaba dando clase en el
máster de la asignatura «Software como servicio y distribuido» hasta
las 5 de la tarde, y la conferencia había empezado a las 4. Con todo,
cuando llegué estaban en turno de preguntas, y pude hacerme una idea
de lo que había sido la presentación, aunque me habría gustado verla
desde el principio.</p>
<p>Parece que no fue excesivamente técnica,
al menos en la parte que nos interesa a los informáticos, porque una
de las preguntas que se hicieron tuvo que ver con el lenguaje de
programación o entorno que utilizaban. La respuesta del ingeniero
informático:</p>
<blockquote><em>- Utilizamos C#. Cuando entré a trabajar en
la empresa venía de experiencia de programación en C++. Cuando me
explicaron lo que tenía que hacer me eché las manos a la cabeza. Eso
no se podía hacer con C++. Aprendí en un par de semanas C# e hicimos
el programa.</em></blockquote>

<p>Como se puede suponer, tengo miles de
comentarios a este respecto. Primero, sí que pude ver el interfaz
gráfico que habían hecho. Interfaces con esa complejidad estamos
acostumbrados a hacer en C++ y Qt para SAES en la Cátedra de Software
libre, y no nos echamos las manos a la cabeza. El hecho de que un
ingeniero en particular no tenga el conocimiento suficiente, o tenga
que tomar una decisión acelerada no sé si debería decidir una
estrategia para el futuro. Además, aprender en un par de semanas C# no
parece lo más adecuado para hacer un programa de calidad, pero en
fin. Continuaba:</p>
<blockquote><em>- La salida de este programa son
ficheros XML que utilizamos para comunicar con los equipos de
carrera</em></blockquote>

<p>Esto es mi favorito. Al nombrar XML parece que
todo el mundo dice «ah, claro». XML ya hace que los programas
interactúen mágicamente... En fin. ¿Por qué no JSON/YAML? Reconozco
que esto es más una manía mía, pero ¿por qué en los nuevos desarrollos
de bases de datos (CouchDB, MongoDB) no se utiliza XML sino formatos
más sencillos y expresivos?</p>
<p>Me hubiera gustado preguntarles
por sus ciclos de desarrollo, pruebas, etc., pero como había llegado
tarde, ahí se quedó.</p>
<p>La conversación, a raíz de otra
pregunta, giró hacia la colaboración de estos grupos con la
Universidad. Uno de los ponentes (no recuerdo su nombre) había estado
trabajando para Red Bull anteriormente, y contaba proyectos de
colaboración que sus antiguos patronos tenían con Universidades. No es
el caso de Hispania, según decía, por problemas políticos, o por
problemas de medios de las universidades (laboratorios con material
especializado, etc.)</p>
<p>En este punto hice una pregunta, dado
que tenemos experiencia en colaborar con una empresa, pregunté que
para tener una colaboración a nivel de informática no se necesitaban
laboratorios especializados (sólo ordenadores y personas). Uno de los
ingenieros del equipo (presumo) me interrumpió gritando que «¿Cómo que
no necesitas? Para empezar necesitas un superordenador». Intenté
responderle a medio hacer la pregunta que no se necesita un
supercomputador <em>in situ</em> sino una persona que sepa cómo hacer
los programas paralelos que aprovechen en superordenador, y una
conexión internet para conectarse al CESGA o al Mare Nostrum (en los
tiempos de Internet, los ordenadores no tienen que estar en tu
habitación, aparte de que tenemos Ben Arabí, creo recordar de la
última vez que estuve allí... Además, ¡¡programan en C#!!, ¿qué
supercomputador???)... Cuando me dejó terminar la pregunta, la
respuesta del ponente era la misma, cuestiones políticas que escapaban
a su nivel de puesto de trabajo que hacía que no se colaborara con la
Universidad tampoco en informática. Creo que nuestra experiencia en
testing, modelado, etc., sería interesante para ellos, pero aquí
estamos.</p>
<p>Finalmente, fallo garrafal (según mi punto de
vista). Se quejaban de que tenían un presupuesto limitado, y utilizan
software propietario, licencias, etc., en vez de sacar partido al
software libre (incluso para C# existe Mono...). </p>
<p>Espero que
los ingenieros en otras ramas estén más al día, porque si no, el
equipo va a ganar pocas carreras :)</p>]]></content:encoded>
</item>
<item>
<title>.</title>

<link>http://neuromancer.inf.um.es/fm/post-2010-11-18.html</link>
<comments>http://neuromancer.inf.um.es/fm/post-2010-11-18.html#disqus_thread</comments>
<pubDate>Thu, 18 Nov 2010 23:32:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/post-2010-11-18.html</guid>
<description><![CDATA[., originally uploaded by dsevilla.                               Fotos del concurso de fotografía en Mula del pasado domingo. De esta me gustó especialmente el fondo de colores otoñales. No creía que iba a conseguir esto en Mula :)]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/5188354042/" title="photo sharing"><img src="http://farm2.static.flickr.com/1288/5188354042_0fe983e6b3.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/5188354042/">.</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                            <br/><p><br/>   Fotos del concurso de fotografía en Mula del pasado domingo. De esta me gustó especialmente el fondo de colores otoñales. No creía que iba a conseguir esto en Mula :)<br/></p>]]></content:encoded>
</item>
<item>
<title>Usando ramzswap para mejorar el uso de memoria</title>

<link>http://neuromancer.inf.um.es/fm/usando-ramzswap-para-mejorar-el-uso-de-memoria.html</link>
<comments>http://neuromancer.inf.um.es/fm/usando-ramzswap-para-mejorar-el-uso-de-memoria.html#disqus_thread</comments>
<pubDate>Fri, 22 Oct 2010 22:15:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/usando-ramzswap-para-mejorar-el-uso-de-memoria.html</guid>
<description><![CDATA[De siempre me han apasionado los compresores de memoria. Es cierto que aquellos primeros sistemas, de los que ya ni me acuerdo del nombre (incluso había uno oficial de Microsoft que iba con MS-DOS 6 ó 7) eran una patraña: los ordenadores eran tan lentos y los algoritmos de compresión tan poco sofisticados que ejecutar la compresión de la página era casi menos eficiente que dejar que se escribiera[...]]]></description>
        <content:encoded><![CDATA[De siempre me han apasionado los compresores de memoria. Es cierto que aquellos primeros sistemas, de los que ya ni me acuerdo del nombre (incluso había uno oficial de Microsoft que iba con MS-DOS 6 ó 7) eran una patraña: los ordenadores eran tan lentos y los algoritmos de compresión tan poco sofisticados que ejecutar la compresión de la página era casi menos eficiente que dejar que se escribiera en disco. Sin embargo, los tiempos han cambiado, y los procesadores son mucho más potentes, y los algoritmos de compresión más eficientes.<br/><br/>Ahora, en los últimos núcleos de Linux (al menos desde el 2.6.32), existe el módulo ramzswap. He empezado a usarlo hoy y noto el sistema más ágil, ya que hay veces que al cambiar de aplicaciones notaba cómo se restauraba del disco algún estado. Sin embargo, ahora no lee de disco y tarda menos tiempo. Los pasos para usar el ramzswap en Ubuntu 10.10 (en Ubuntu 10.04 no hace falta el paso intermedio):<br/><br/><pre><br/># modprobe ramzswap<br/># /usr/lib/initramfs-tools/bin/rzscontrol /dev/ramzswap0 --init<br/># swapon /dev/ramzswap0<br/></pre><br/><br/><code>rzscontrol</code> también permite mostrar las estadísticas de la partición. En mi caso, unos resultados interesantes:<br/><br/><pre><br/>DiskSize:         1014604 kB<br/>NumReads:            226<br/>NumWrites:     5962<br/>FailedReads:              0<br/>FailedWrites:             0<br/>InvalidIO:        0<br/>NotifyFree:              19<br/>ZeroPages:      826<br/>GoodCompress:            99 %<br/>NoCompress:             0 %<br/>PagesStored:         5117<br/>PagesUsed:     1331<br/>OrigDataSize:         20468 kB<br/>ComprDataSize:      5072 kB<br/>MemUsedTotal:       5324 kB<br/></pre><br/><br/>En este caso, ha usado 1GB para la memoria swap comprimida, de los cuales, ha almacenado 20MB. Sin embargo, gracias a la compresión, sólo ocupa 5MB de memoria física (un ratio de compresión de 4:1). Seguiré haciendo más pruebas en el ordenador de mi despacho que es el que peor va al ejecutar Thunderbird + Google Chrome + Eclipse...]]></content:encoded>
</item>
<item>
<title>Nuevo dominio para la Cátedra SAES</title>

<link>http://neuromancer.inf.um.es/fm/nuevo-dominio-para-la-catedra-saes.html</link>
<comments>http://neuromancer.inf.um.es/fm/nuevo-dominio-para-la-catedra-saes.html#disqus_thread</comments>
<pubDate>Thu, 07 Oct 2010 13:17:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/nuevo-dominio-para-la-catedra-saes.html</guid>
<description><![CDATA[Como alguna vez he escrito por aquí, colaboramos con la empresa SAES de Cartagena y San Fernando para realizar investigación dentro del marco de la Cátedra SAES/UMU de software libre, aplicaciones críticas y en tiempo real. Sólo un pequeño comentario para decir que hemos aunado las direcciones de la cátedra y hemos creado un dominio .org: www.catedrasaes.org. Dentro de él podéis encontrar la list[...]]]></description>
        <content:encoded><![CDATA[Como alguna vez he escrito por aquí, colaboramos con la empresa <a href="http://www.electronica-submarina.com/">SAES</a> de Cartagena y San Fernando para realizar investigación dentro del marco de la <a href="http://www.catedrasaes.org">Cátedra SAES/UMU de software libre, aplicaciones críticas y en tiempo real</a>. Sólo un pequeño comentario para decir que hemos aunado las direcciones de la cátedra y hemos creado un dominio .org: <a href="http://www.catedrasaes.org">www.catedrasaes.org</a>. Dentro de él podéis encontrar la lista, incompleta todavía, de <a href="http://www.catedrasaes.org/trac/#Currentprojectsandresearchresults">proyectos en los que estamos trabajando</a>, e incluso un <a href="http://www.catedrasaes.org/trac/blog">blog</a>.]]></content:encoded>
</item>
<item>
<title>IPhone OS 4 en un IPhone 3G</title>

<link>http://neuromancer.inf.um.es/fm/iphone-os-4-en-un-iphone-3g.html</link>
<comments>http://neuromancer.inf.um.es/fm/iphone-os-4-en-un-iphone-3g.html#disqus_thread</comments>
<pubDate>Wed, 25 Aug 2010 09:35:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/iphone-os-4-en-un-iphone-3g.html</guid>
<description><![CDATA[Me ha hecho mucho reir este vídeo. Es una parodia, pero lo he sufrido en mis carnes, y muy parecido. Nunca he tenido afición al Iphone. Lo compré porque me picó la curiosidad, pero la rabia contenida de ver cómo un dispositivo que tiene muchas más posibilidades se convierte en una piedra con pantalla táctil me ha hecho despreciarlo bastante. Ahora con el OS 4.0 la cosa va muy mal, y la parodia de[...]]]></description>
        <content:encoded><![CDATA[Me ha hecho mucho reir este vídeo. Es una parodia, pero lo he sufrido en mis carnes, y muy parecido. Nunca he tenido afición al Iphone. Lo compré porque me picó la curiosidad, pero la rabia contenida de ver cómo un dispositivo que tiene muchas más posibilidades se convierte en una piedra con pantalla táctil me ha hecho despreciarlo bastante. Ahora con el OS 4.0 la cosa va muy mal, y la parodia del vídeo te hace reír y llorar a la vez:<br/><br/><center><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/Pdk2cJpSXLg&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/Pdk2cJpSXLg&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="385"></embed></object></center>]]></content:encoded>
</item>
<item>
<title>martina 7 months old (martina con 7 meses)</title>

<link>http://neuromancer.inf.um.es/fm/martina-7-months-old-martina-con-7-meses.html</link>
<comments>http://neuromancer.inf.um.es/fm/martina-7-months-old-martina-con-7-meses.html#disqus_thread</comments>
<pubDate>Wed, 30 Jun 2010 22:59:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/martina-7-months-old-martina-con-7-meses.html</guid>
<description><![CDATA[martina 7 months old (martina con 7 meses)    Cargado originalmente por dsevillaHey, say hello to Martina in her 7 month-day! :)]]></description>
        <content:encoded><![CDATA[<div><a href="http://www.flickr.com/photos/dsevilla/4749714579/">martina 7 months old (martina con 7 meses)</a><br/><br/><object type="application/x-shockwave-flash" width="400" height="300" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="flashvars" value="intl_lang=es-us&photo_secret=b5a26076fb&photo_id=4749714579"></param> <param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"></param> <param name="bgcolor" value="#000000"></param> <param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=es-us&photo_secret=b5a26076fb&photo_id=4749714579" height="300" width="400"></embed></object><br/><br /><br/>Cargado originalmente por <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a><br/><br/></div><br/>Hey, say hello to Martina in her 7 month-day! :)<br/><br />]]></content:encoded>
</item>
<item>
<title>patio de colegio</title>

<link>http://neuromancer.inf.um.es/fm/patio-de-colegio.html</link>
<comments>http://neuromancer.inf.um.es/fm/patio-de-colegio.html#disqus_thread</comments>
<pubDate>Tue, 29 Jun 2010 22:49:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/patio-de-colegio.html</guid>
<description><![CDATA[patio de colegio, originally uploaded by dsevilla.                             Del archivo. Hace algún tiempo celebró mi colegio los 50 años. He visto esta foto y me ha gustado.Rolleiflex 3.5f + Fuji neopan400]]></description>
        <content:encoded><![CDATA[<div><a href="http://www.flickr.com/photos/dsevilla/4747271158/" title="photo sharing"><img src="http://farm5.static.flickr.com/4119/4747271158_69d6409775.jpg" alt="" /></a><br /><a href="http://www.flickr.com/photos/dsevilla/4747271158/">patio de colegio</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.</div>                             <p>Del archivo. Hace algún tiempo celebró mi colegio los 50 años. He visto esta foto y me ha gustado.<br /><br />Rolleiflex 3.5f + Fuji neopan400</p>]]></content:encoded>
</item>
<item>
<title>EMF4CPP, una implementación de Eclipse EMF en C++</title>

<link>http://neuromancer.inf.um.es/fm/emf4cpp-una-implementacion-de-eclipse-emf-en-c.html</link>
<comments>http://neuromancer.inf.um.es/fm/emf4cpp-una-implementacion-de-eclipse-emf-en-c.html#disqus_thread</comments>
<pubDate>Wed, 23 Jun 2010 01:26:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/emf4cpp-una-implementacion-de-eclipse-emf-en-c.html</guid>
<description><![CDATA[Estoy muy contento de que por fin podamos anunciar esto. Es una implementación en C++ del Eclipse Modeling Framework (o al menos de parte de él). Ha sido un trabajo magnífico llevado a cabo por Andrés Senac en su mayoría, con alguna ayuda mía. Uno de los resultados que poco a poco va obteniendo la Cátedra SAES de la Universidad de Murcia. Os dejo el texto que hemos usado para darlo a conocer en i[...]]]></description>
        <content:encoded><![CDATA[Estoy muy contento de que por fin podamos anunciar esto. Es una implementación en C++ del Eclipse Modeling Framework (o al menos de parte de él). Ha sido un trabajo magnífico llevado a cabo por Andrés Senac en su mayoría, con alguna ayuda mía. Uno de los resultados que poco a poco va obteniendo la <a href="http://www.catedrasaes.org/">Cátedra SAES de la Universidad de Murcia</a>. Os dejo el texto que hemos usado para darlo a conocer en inglés:<br/><br/>EMF4CPP (formerly Ecore2CPP) is a C++ implementation and type mapping for the Eclipse Modeling Framework core, the Ecore metamodel.<br/><br/>The current release allows to generate C++ code from Ecore metamodels, and to parse and serialize models and metamodels from and into XMI documents. Also, a partially implemented reflective API for generated metamodels is provided.<br/><br/>EMF4CPP consists of two parts: a source code generator from Ecore metamodels to C++ and two runtime support libraries. One of the runtime support libraries implements the Ecore metamodel (libemf4cpp-ecore). The other one allows to parse and serialize modeles in XMI format (libemf4cpp-ecorecpp). The generator is currently implemented using Xpand and Xtend.<br/><br/>This is our first step at providing a set of tools for MDD (Model-Driven Development) in C++ as an alternative to the Java world offered by Eclipse tools. We would like to explore common C++ idioms, paradigms and tools (such as template metaprogramming or Boost.Spirit) to provide tools for managing models, writing Domain-Specific Languages (DSLs), and Model-to-Text (M2T), Model-to-Model (M2M), and Text-to-Model (T2M) transformations.<br/><br/>Two direct advantages can be that C++ programmers can write their data model using Ecore and the Eclipse tools to finally generate code with EMF4CPP, and also, memory consumption and efficiency is usually better in EMF4CPP than in Java, as our preliminary results show.<br/><br/>The EMF4CPP development distribution (that can be downloaded from the <a href="http://www.catedrasaes.org/trac/wiki/EMF4CPP">EMF4CPP page</a>) consists of four Eclipse projects: emf4cpp.generator, emf4cpp.tests, emf4cpp.xtext and emf4cpp.xtext2qi. The first one contains a C++ source code generator from metamodels conforming to Ecore. The second one contains, as subdirectories, some metamodels we use to test our implementation, and some emf4cpp-based utilities we are developing. A relevant utility we are developing is a Python interpreter, called PyEcore, that allows to use EMF4CPP from Python scripts. The third one is a bootstrap implementation of a ANTLR3 grammars generator from Xtext grammars. The last one is an under development Boost Sprit Qi grammars generator from Xtext grammars.<br/><br/>The code is still being actively developed, but we encourage all programmers that want a port of the great EMF tooling to C++ to contact us and test the tools, provide feedback or even code. We hope this utility to be of help to the community.<br/><br/>EMF4CPP is offered under the LGPL license, and can be downloaded from its main web page: <a href="http://www.catedrasaes.org/trac/wiki/EMF4CPP">http://www.catedrasaes.org/trac/wiki/EMF4CPP</a>. It is part of the "Cátedra SAES UMU", a joint research venture between <a href="http://www.electronica-submarina.com">SAES</a> and the University of Murcia.<br/><br/>For further information, don't hesutate to contact Andrés Senac (andres.senac@um.es) or Diego Sevilla (dsevilla@um.es).<br/><br/><center><a href="http://www.catedrasaes.org/trac/wiki/EMF4CPP"><img src="http://www.catedrasaes.org/trac/raw-attachment/wiki/WikiStart/logo_emf4cpp.png" alt="EMF4CPP" /></a></center>]]></content:encoded>
</item>
<item>
<title>Saramago, por Garzón</title>

<link>http://neuromancer.inf.um.es/fm/saramago-por-garzon.html</link>
<comments>http://neuromancer.inf.um.es/fm/saramago-por-garzon.html#disqus_thread</comments>
<pubDate>Sat, 19 Jun 2010 11:21:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/saramago-por-garzon.html</guid>
<description><![CDATA[Me he propuesto bucear todo lo que pueda en esta figura, la de José Saramago. Sinceramente, entre el estrés de la vida cotidiana, trabajo, hija, investigación, etc., uno se va dejando cosas por el camino. Pero no quiero perder la oportunidad de conocer mejor a uno de los pocos verdaderos iconos del pensamiento crítico con mayúsculas. Garzón escribe de él en público:Con su muerte se va uno de los [...]]]></description>
        <content:encoded><![CDATA[Me he propuesto bucear todo lo que pueda en esta figura, la de José Saramago. Sinceramente, entre el estrés de la vida cotidiana, trabajo, hija, investigación, etc., uno se va dejando cosas por el camino. Pero no quiero perder la oportunidad de conocer mejor a uno de los pocos verdaderos iconos del pensamiento crítico con mayúsculas. Garzón escribe de él <a href="http://www.publico.es/culturas/321813/indignacion/activa">en público</a>:<br/><br/><blockquote><em>Con su muerte se va uno de los escasos intelectuales comprometidos, uno de los más preclaros, por su coherencia y su capacidad para unir acción social, literaria y política. Siempre fue una persona fiel a sus principios. Hoy día, cuando se echan tanto en falta referentes de todo orden, su presencia pública era un lujo.</em></blockquote><br/><br/>Y que lo digas, Baltasar. Descanse en paz. Su legado nos sirve cada día.]]></content:encoded>
</item>
<item>
<title>Ibarra: «Si España hubiera apostado por el software libre habría evitado congelar pensiones»</title>

<link>http://neuromancer.inf.um.es/fm/ibarra-si-espana-hubiera-apostado-por-el-software-libre-habria-evitado-congelar-pensiones.html</link>
<comments>http://neuromancer.inf.um.es/fm/ibarra-si-espana-hubiera-apostado-por-el-software-libre-habria-evitado-congelar-pensiones.html#disqus_thread</comments>
<pubDate>Mon, 17 May 2010 20:15:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/ibarra-si-espana-hubiera-apostado-por-el-software-libre-habria-evitado-congelar-pensiones.html</guid>
<description><![CDATA[Pero qué razón tiene. Siempre me ha caído muy bien. Si España, cuya única fuente de recursos es los cerebros de sus habitantes (y no hablo irónicamente), hubiera apostado por las tecnologías de la información y el software libre en serio, no sólo habríamos ahorrado mucho dinero, sino que además podríamos ocupar un lugar relevante en este tipo de tecnologías. Era un nicho que tuvimos la oportunida[...]]]></description>
        <content:encoded><![CDATA[Pero qué razón tiene. Siempre me ha caído muy bien. Si España, cuya única fuente de recursos es los cerebros de sus habitantes (y no hablo irónicamente), hubiera apostado por las tecnologías de la información y el software libre en serio, no sólo habríamos ahorrado mucho dinero, sino que además podríamos ocupar un lugar relevante en este tipo de tecnologías. Era un nicho que tuvimos la oportunidad de explotar, pero que otros países de la Unión, por ejemplo, como Alemania y Francia ya han hecho, y nos han adelantado. Es una pena que los pocos grupos que destacan y cobran relevancia en los medios que tratan con software libre en España tengan que hacerlo <em>a pesar</em> de las administraciones públicas del estado y regionales (¿Cuánto usa de software libre la administración murciana? De risa floja).<br/><br/>En cuanto a lo que opina sobre la propiedad intelectual y la producción cultural, una cita con la que no puedo estar más de acuerdo:<br/><br/><blockquote><em>Rodríguez Ibarra ha criticado que la izquierda defienda "con tanto ahínco" la propiedad intelectual y ha asegurado que un cambio en el modelo de negocio de las industrias de los contenidos no va a "acabar con la creación", algo que cree que demuestra el hecho de que "nunca ha habido tanta creación cultural como hoy".</em></blockquote><br/><br/>¿Cómo es posible que un señor hable tan claro y los demás estén tan sordos? El artículo original en la <a href="http://www.20minutos.es/noticia/709582/0/ibarra/software/libre/">web de 20minutos.es</a> a raíz de la concesión del premio de Internet 2010.]]></content:encoded>
</item>
<item>
<title>Garzón, estamos contigo</title>

<link>http://neuromancer.inf.um.es/fm/garzon-estamos-contigo.html</link>
<comments>http://neuromancer.inf.um.es/fm/garzon-estamos-contigo.html#disqus_thread</comments>
<pubDate>Sun, 16 May 2010 12:56:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/garzon-estamos-contigo.html</guid>
<description><![CDATA[Siento que después de tanto tiempo escriba en el blog para esto. Pero la verdadera pena es que esté pasando de verdad. Hoy me he paseado por Planet Murcia y me he encontrado con la entrada de El rey de la baraja: No es Garzón, es el franquismo, que me ha llevado a dos artículos muy esclarecedores de Martínez Soler: Franquismo y Gürtel: Aviso a navegantes y Acoso a Garzón: ¿Venganza política y/o c[...]]]></description>
        <content:encoded><![CDATA[Siento que después de tanto tiempo escriba en el blog para esto. Pero la verdadera pena es que esté pasando de verdad. Hoy me he paseado por Planet Murcia y me he encontrado con la entrada de El rey de la baraja: <a href="http://blog.elreydelabaraja.com/2010/05/no-es-garzon-es-el-franquismo.html">No es Garzón, es el franquismo</a>, que me ha llevado a dos artículos muy esclarecedores de Martínez Soler: <a href="http://blogs.20minutos.es/martinezsoler/post/2010/05/15/franquismo-y-gaartel-aviso-navegantes">Franquismo y Gürtel: Aviso a navegantes</a> y <a href="http://blogs.20minutos.es/martinezsoler/post/2010/03/10/acoso-garzain-aavenganza-polaatica-y-o-corporativa-">Acoso a Garzón: ¿Venganza política y/o corporativa?</a>, este último acompañado de una imagen de eneko bastante acertada:<br/><br/><center><br/><img src="http://blogs.20minutos.es/martinezsoler/files/garzon-eneko-10-02-17garzon.gif" alt="" /><br/></center><br/><br/>PD. Pronto empezaré a publicar más. Estamos haciendo muchos avances muy interesantes en la Cátedra SAES, y Martina está creciendo a marchas forzadas y más bonita cada día.]]></content:encoded>
</item>
<item>
<title>Más de bases de datos NoSQL: Consistent Hashing</title>

<link>http://neuromancer.inf.um.es/fm/mas-de-bases-de-datos-nosql-consistent-hashing.html</link>
<comments>http://neuromancer.inf.um.es/fm/mas-de-bases-de-datos-nosql-consistent-hashing.html#disqus_thread</comments>
<pubDate>Mon, 01 Mar 2010 13:56:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/mas-de-bases-de-datos-nosql-consistent-hashing.html</guid>
<description><![CDATA[Ahondando más en el tema de las bases de datos que no usan SQL, que nos interesan al grupo por cuestiones bastante diferentes (como por ejemplo, cómo representar tipos complejos e incluso XML usando estructuras JSON), encuentro en Hacker Medley una referencia a varios artículos. En particular, el que explica el algoritmo que se utilza en Dynamo, la base de datos escalable interna de Amazon, que m[...]]]></description>
        <content:encoded><![CDATA[Ahondando más en el tema de las bases de datos que no usan SQL, que nos interesan al grupo por cuestiones bastante diferentes (como por ejemplo, cómo representar tipos complejos e incluso XML usando estructuras JSON), encuentro en <a href="http://hackermedley.org/archives/51">Hacker Medley</a> una referencia a varios artículos. En particular, el que explica el algoritmo que se utilza en <a href="http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf">Dynamo</a>, la base de datos escalable interna de Amazon, que mueve desde los carros de la compra hasta las bases de datos como S3: <a href="http://www.tomkleinpeter.com/2008/03/17/programmers-toolbox-part-3-consistent-hashing/">Consistent Hashing</a>. Me ha parecido interesante y lo guardo aquí para referencia futura. El artículo es divertido, y tiene frases como esta:<br/><br/><blockquote><em>Now imagine hashing resources into points on the circle. They could be URLs, GUIDs, integer IDs, or any arbitrary sequence of bytes. Just run them through MD5 or SHA and shave off everything but 8 bytes (and if anyone tells you that you shouldn’t use MD5 for this because it isn’t secure, just nod and back away slowly. You have identified someone not worth arguing with). [...]</em></blockquote>]]></content:encoded>
</item>
<item>
<title>NoSQL databases</title>

<link>http://neuromancer.inf.um.es/fm/nosql-databases.html</link>
<comments>http://neuromancer.inf.um.es/fm/nosql-databases.html#disqus_thread</comments>
<pubDate>Tue, 23 Feb 2010 12:28:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/nosql-databases.html</guid>
<description><![CDATA[Una tendencia muy a tener en cuenta últimamente. Un estupendo artículo comparando las alternativas. En ese mismo blog, una comparación entre Groovy, Scala y Clojure.]]></description>
        <content:encoded><![CDATA[Una tendencia muy a tener en cuenta últimamente. Un <a href="http://www.vineetgupta.com/2010/01/nosql-databases-part-1-landscape.html">estupendo artículo</a> comparando las alternativas. En ese mismo blog, <a href="http://www.vineetgupta.com/2009/12/groovy-scala-and-clojure-comparison_3480.html">una comparación entre Groovy, Scala y Clojure</a>.]]></content:encoded>
</item>
<item>
<title>Más ventas de objetivos</title>

<link>http://neuromancer.inf.um.es/fm/mas-ventas-de-objetivos.html</link>
<comments>http://neuromancer.inf.um.es/fm/mas-ventas-de-objetivos.html#disqus_thread</comments>
<pubDate>Sun, 07 Feb 2010 23:23:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/mas-ventas-de-objetivos.html</guid>
<description><![CDATA[Renovando mi equipo fotográfico, he puesto en venta tres objetivos, por si le puede interesar a alguien. Están en Ebay. Son los que he tenido tiempo de poner hoy, que hacer fotos, escribir las descripciones, etc., te lleva al final toda la tarde. Vendrán más anuncios, como mi D200 (ya que he comprado la D700), y alguna otra cosa más, como una Hasselblad 500c/m con un carl-zeiss 80mm/2.8 T* que no[...]]]></description>
        <content:encoded><![CDATA[Renovando mi equipo fotográfico, he puesto en venta tres objetivos, por si le puede interesar a alguien. Están en Ebay. Son los que he tenido tiempo de poner hoy, que hacer fotos, escribir las descripciones, etc., te lleva al final toda la tarde. Vendrán más anuncios, como mi D200 (ya que he comprado la D700), y alguna otra cosa más, como una Hasselblad 500c/m con un carl-zeiss 80mm/2.8 T* que no uso, y que voy a vender. Ahí van las referencias:<br/><br/><ul><br/>     <li><a href="http://cgi.ebay.es/ws/eBayISAPI.dll?ViewItem&item=230434485404&ssPageName=STRK:MESELX:IT">SIGMA 30mm 1.4 EX DC HSM for NIKON</a>, un objetivo grandioso para formato DX, que fue el objetivo preferido cuando usaba la D200.</li><br/>   <li><a href="http://cgi.ebay.es/ws/eBayISAPI.dll?ViewItem&item=230434496972&ssPageName=STRK:MESELX:IT">Nikon Zoom-Nikkor 55-200 AFS DX f/4-5.6G ED</a>, un zoom sin pretensiones, pero que no está nada mal, y además pesa muy poco. Lo he usado poco, pero es ideal si quieres tener un zoom largo y no quieres cargar con un objetivo tocho.<br/></li><br/> <li><a href="http://cgi.ebay.es/ws/eBayISAPI.dll?ViewItem&item=230434505692&ssPageName=STRK:MESELX:IT">SIGMA 17-70 f. 2.8-4.5 DC SLD Macro</a>, un zoom muy versátil desde gran angular (17mm) hasta telefoto medio (70mm) y con una gran apertura (f/2.8) y con características de macro.</li><br/></ul><br/><br/>]]></content:encoded>
</item>
<item>
<title>C++ más rápido que C, o atoi <em>versus</em> boost.spirit v2</title>

<link>http://neuromancer.inf.um.es/fm/c-mas-rapido-que-c-o-atoi-emversusem-boostspirit-v2.html</link>
<comments>http://neuromancer.inf.um.es/fm/c-mas-rapido-que-c-o-atoi-emversusem-boostspirit-v2.html#disqus_thread</comments>
<pubDate>Fri, 05 Feb 2010 20:42:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/c-mas-rapido-que-c-o-atoi-emversusem-boostspirit-v2.html</guid>
<description><![CDATA[Leo en C++ soup un test que hizo Alex Ott comparando la implementación de la función atoi de la librería de C con la versión de boost.spirit versión 2. En su artículo ponía de manifiesto que la versión de boost spirit es unas 3 veces más rápida. Sinceramente, es un resultado que alienta las nuevas técnicas de meta-programación basadas en templates para C++. Ya traté el tema hace un tiempo para mo[...]]]></description>
        <content:encoded><![CDATA[Leo en <a href="http://cplusplus-soup.com/2010/01/08/boost-spirit-v2-x-versus-cs-atoi/">C++ soup</a> un test que hizo Alex Ott comparando la implementación de la función <code>atoi</code> de la librería de C con la versión de <a href="http://boost-spirit.com">boost.spirit versión 2</a>. En su <a href="http://alexott.blogspot.com/2010/01/boostspirit2-vs-atoi.html">artículo</a> ponía de manifiesto que la versión de boost spirit es unas 3 veces más rápida. Sinceramente, es un resultado que alienta las nuevas técnicas de meta-programación basadas en templates para C++. Ya traté el tema hace un tiempo para mostrar cómo el compilador no generaba código para las sentencias de log <a href="http://neuromancer.inf.um.es/blog/?p=1204">cuando la clase se creaba con un parámetro de template <code>false</code></a>.]]></content:encoded>
</item>
<item>
<title>http://typography.soup.io/</title>

<link>http://neuromancer.inf.um.es/fm/httptypographysoupio.html</link>
<comments>http://neuromancer.inf.um.es/fm/httptypographysoupio.html#disqus_thread</comments>
<pubDate>Fri, 05 Feb 2010 19:40:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/httptypographysoupio.html</guid>
<description><![CDATA[No me canso de mirarlo. Una fuente de inspiración contínua de arte gráfico con tipografía, recopilado de varias fuentes. Para muestra un botón:]]></description>
        <content:encoded><![CDATA[<a href="http://typography.soup.io/">No me canso de mirarlo</a>. Una fuente de inspiración contínua de arte gráfico con tipografía, recopilado de varias fuentes. Para muestra un botón:<br/><br/><center><a href="http://www.flickr.com/photos/spacesick/4102341648/sizes/o/"><img src="http://asset.soup.io/asset/0650/3362_e225.jpeg" alt="" /></a></center>]]></content:encoded>
</item>
<item>
<title>Curso de fotografía digital, por «El Mundo»</title>

<link>http://neuromancer.inf.um.es/fm/curso-de-fotografia-digital-por-el-mundo.html</link>
<comments>http://neuromancer.inf.um.es/fm/curso-de-fotografia-digital-por-el-mundo.html#disqus_thread</comments>
<pubDate>Thu, 07 Jan 2010 21:43:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/curso-de-fotografia-digital-por-el-mundo.html</guid>
<description><![CDATA[No es que me sorprenda ya, pero podríamos tener unos medios (y unos políticos) de mayor calidad, ¿no? Vamos, que en portada llamen a Zapatero y a González «los reyes del paro»... Que les falte rigor, vale, pero que les falte la educación también... Vía.]]></description>
        <content:encoded><![CDATA[No es que me sorprenda ya, pero podríamos tener unos medios (y unos políticos) de mayor calidad, ¿no? Vamos, que en portada llamen a Zapatero y a González «los reyes del paro»... Que les falte rigor, vale, pero que les falte la educación también... <a href="http://www.javiercasal.com/2010/01/curso-de-fotografia.html">Vía</a>.]]></content:encoded>
</item>
<item>
<title>(<em>concat</em> &quot;Happy &quot; (<em>replace-regexp-in-string</em> &quot;2009&quot; &quot;2010&quot; (<em>format-time-string</em> &quot;%Y&quot;)) &quot;!&quot;)</title>

<link>http://neuromancer.inf.um.es/fm/emconcatem-quothappy-quot-emreplaceregexpinstringem-quot2009quot-quot2010quot-emformattimestringem-quotyquot-quotquot.html</link>
<comments>http://neuromancer.inf.um.es/fm/emconcatem-quothappy-quot-emreplaceregexpinstringem-quot2009quot-quot2010quot-emformattimestringem-quotyquot-quotquot.html#disqus_thread</comments>
<pubDate>Thu, 31 Dec 2009 20:23:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/emconcatem-quothappy-quot-emreplaceregexpinstringem-quot2009quot-quot2010quot-emformattimestringem-quotyquot-quotquot.html</guid>
<description><![CDATA[Thanks to emacs-lisp :). Valid at least the whole 2010 :).]]></description>
        <content:encoded><![CDATA[Thanks to emacs-lisp :). Valid at least the whole 2010 :).]]></content:encoded>
</item>
<item>
<title>Vídeos y clases sobre Scheme,  LISP, Clojure, etc.</title>

<link>http://neuromancer.inf.um.es/fm/videos-y-clases-sobre-scheme--lisp-clojure-etc.html</link>
<comments>http://neuromancer.inf.um.es/fm/videos-y-clases-sobre-scheme--lisp-clojure-etc.html#disqus_thread</comments>
<pubDate>Wed, 30 Dec 2009 15:57:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/videos-y-clases-sobre-scheme--lisp-clojure-etc.html</guid>
<description><![CDATA[Las encontré el otro día por casualidad. En la entrada del sitio web enlazan varias y contiene vídeos. En particular, me encantó ésta, sobre Scribble, el sistema de documentación de PLT Scheme, y que utiliza el módulo de presentaciones de DrScheme (slideshow) para crear una presentación inicial con gancho para la audiencia.]]></description>
        <content:encoded><![CDATA[Las encontré el otro día por casualidad. En <a href="http://programming-musings.org/2009/12/23/scheme-lectures-mostly/">la entrada</a> del sitio web enlazan varias y contiene vídeos. En particular, me encantó <a href="http://www.vimeo.com/6630691">ésta</a>, sobre Scribble, el sistema de documentación de PLT Scheme, y que utiliza el módulo de presentaciones de DrScheme (<em>slideshow</em>) para crear una presentación inicial con gancho para la audiencia.]]></content:encoded>
</item>
<item>
<title>Pobre Miguel Hernández</title>

<link>http://neuromancer.inf.um.es/fm/pobre-miguel-hernandez.html</link>
<comments>http://neuromancer.inf.um.es/fm/pobre-miguel-hernandez.html#disqus_thread</comments>
<pubDate>Tue, 29 Dec 2009 17:03:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/pobre-miguel-hernandez.html</guid>
<description><![CDATA[No escapa a las catetas y sesgadas manos de la derecha.]]></description>
        <content:encoded><![CDATA[No escapa a las catetas y sesgadas manos de <a HREF="http://www.adn.es/cultura/20091229/NWS-0458-Familiares-Hernandez-Zapatero-Miguel-referencia.html">la derecha</a><a>.</a>]]></content:encoded>
</item>
<item>
<title>SOAP, entre lo peor de la década</title>

<link>http://neuromancer.inf.um.es/fm/soap-entre-lo-peor-de-la-decada.html</link>
<comments>http://neuromancer.inf.um.es/fm/soap-entre-lo-peor-de-la-decada.html#disqus_thread</comments>
<pubDate>Mon, 21 Dec 2009 20:09:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/soap-entre-lo-peor-de-la-decada.html</guid>
<description><![CDATA[Yo ya lo dije hace tiempo... Vía, que a su vez lo saca del "radar" de O'reilly. En ese artículo compara SOAP con CORBA, pero ni de lejos. Sobre todo porque la primera ha fracasado por su pésimo diseño arquitectural, mientras que CORBA fracasó por intereses económicos, no por que la tecnología estuviera mal diseñada.]]></description>
        <content:encoded><![CDATA[Yo ya lo dije hace tiempo... <a href="http://blogs.zdnet.com/service-oriented/?p=3742">Vía</a>, que a su vez lo saca del "<a href=http://radar.oreilly.com/2009/12/the-best-and-the-worst-tech-of.html"">radar</a>" de O'reilly. En ese artículo compara SOAP con CORBA, pero ni de lejos. Sobre todo porque la primera ha fracasado por su pésimo diseño arquitectural, mientras que CORBA fracasó por intereses económicos, no por que la tecnología estuviera mal diseñada.]]></content:encoded>
</item>
<item>
<title>El desafío de Arc, en Clojure</title>

<link>http://neuromancer.inf.um.es/fm/el-desafio-de-arc-en-clojure.html</link>
<comments>http://neuromancer.inf.um.es/fm/el-desafio-de-arc-en-clojure.html#disqus_thread</comments>
<pubDate>Mon, 21 Dec 2009 00:38:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/el-desafio-de-arc-en-clojure.html</guid>
<description><![CDATA[No conocía que Paul Graham, el inventor de un dialecto de Lisp llamado Arc, había lanzado un desafío. El desafío incluye escribir varias páginas web en cascada en la que la primera pide algo al usuario a través de un formulario. Al pulsar el botón de enviar del formulario, se muestra una segunda página con un enlace que lleva a una tercera que muestra lo que el usuario escribió. El ejemplo en Arc[...]]]></description>
        <content:encoded><![CDATA[No conocía que Paul Graham, el inventor de un dialecto de Lisp llamado <a href="http://www.paulgraham.com/arc.html">Arc</a>, había lanzado un desafío. El desafío incluye escribir varias páginas web en cascada en la que la primera pide algo al usuario a través de un formulario. Al pulsar el botón de enviar del formulario, se muestra una segunda página con un enlace que lleva a una tercera que muestra lo que el usuario escribió. El ejemplo en Arc se supone que es extremadamente simple (gracias, por supuesto, a un <em>framework</em> Web escrito para el lenguaje en cuestión.<br/><br/>Tampoco sabía que se habían lanzado en masa a mostrar cómo resolver este problema en otros lenguajes, pero enlazo aquí la <a href="http://www.bestinclass.dk/index.php/2009/12/beating-the-arc-challenge-in-clojure/">resolución en Clojure</a> también porque esa página lleva enlaces a otros ejemplos de cómo resolverlo, y enlaces a los foros de Arc.]]></content:encoded>
</item>
<item>
<title>API design matters</title>

<link>http://neuromancer.inf.um.es/fm/api-design-matters.html</link>
<comments>http://neuromancer.inf.um.es/fm/api-design-matters.html#disqus_thread</comments>
<pubDate>Mon, 21 Dec 2009 00:33:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/api-design-matters.html</guid>
<description><![CDATA[API design matters. Una versión distribuida de esto intento hacer en la asignatura de distribuidos. En sistemas distribuidos el API importa aún más.]]></description>
        <content:encoded><![CDATA[<a href="http://cacm.acm.org/magazines/2009/5/24646-api-design-matters/fulltext">API design matters</a>. Una versión distribuida de esto intento hacer en la asignatura de distribuidos. En sistemas distribuidos el API importa aún más.]]></content:encoded>
</item>
<item>
<title>having a baby leaves you this way :)</title>

<link>http://neuromancer.inf.um.es/fm/having-a-baby-leaves-you-this-way-.html</link>
<comments>http://neuromancer.inf.um.es/fm/having-a-baby-leaves-you-this-way-.html#disqus_thread</comments>
<pubDate>Sat, 12 Dec 2009 11:43:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/having-a-baby-leaves-you-this-way-.html</guid>
<description><![CDATA[having a baby leaves you this way :), originally uploaded by dsevilla.                            (a.k.a. wonders of iso 3200)I saw her in the bathroom and I had to do this :)Nikon D700 + Nikkor 50mm/1.4.]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/4177928039/" title="photo sharing"><img src="http://farm3.static.flickr.com/2487/4177928039_e23334e5f8.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/4177928039/">having a baby leaves you this way :)</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                         <br/><p><br/>   (a.k.a. wonders of iso 3200)<br /><br/><br /><br/>I saw her in the bathroom and I had to do this :)<br /><br/><br /><br/>Nikon D700 + Nikkor 50mm/1.4.<br/></p>]]></content:encoded>
</item>
<item>
<title>Mark Volkmann: Clojure</title>

<link>http://neuromancer.inf.um.es/fm/mark-volkmann-clojure.html</link>
<comments>http://neuromancer.inf.um.es/fm/mark-volkmann-clojure.html#disqus_thread</comments>
<pubDate>Fri, 11 Dec 2009 22:06:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/mark-volkmann-clojure.html</guid>
<description><![CDATA[Interesante página sobre clojure..]]></description>
        <content:encoded><![CDATA[<a href="http://java.ociweb.com/mark/clojure/">Interesante página sobre clojure.</a>.]]></content:encoded>
</item>
<item>
<title>Sacha di Manolo: Ride on</title>

<link>http://neuromancer.inf.um.es/fm/sacha-di-manolo-ride-on.html</link>
<comments>http://neuromancer.inf.um.es/fm/sacha-di-manolo-ride-on.html#disqus_thread</comments>
<pubDate>Fri, 04 Dec 2009 23:39:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/sacha-di-manolo-ride-on.html</guid>
<description><![CDATA[Buscando la música del anuncio retro de Citroën me he encontrado con esta:Y su MySpace.PD. ¿Por qué todos los artistas emergentes tienen que tener su sitio en MySpace? Es lo más caótico y peor diseñado que me podía haber imaginado en mis peores pesadillas. Supongo que los veinteañeros lo verán de lo más normal tener páginas totalmente desestructuradas, pero yo...]]></description>
        <content:encoded><![CDATA[Buscando la música del anuncio retro de Citroën me he encontrado con esta:<br/><br/><center><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Zf3qnZT2r6w&color1=0xb1b1b1&color2=0xcfcfcf&hl=en_US&feature=player_embedded&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/Zf3qnZT2r6w&color1=0xb1b1b1&color2=0xcfcfcf&hl=en_US&feature=player_embedded&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></object></center><br/><br/>Y su <a href="http://www.myspace.com/zachaz">MySpace</a>.<br/><br/>PD. ¿Por qué todos los artistas emergentes tienen que tener su sitio en MySpace? Es lo más caótico y peor diseñado que me podía haber imaginado en mis peores pesadillas. Supongo que los veinteañeros lo verán de lo más normal tener páginas totalmente desestructuradas, pero yo...]]></content:encoded>
</item>
<item>
<title>martina, 1 day old</title>

<link>http://neuromancer.inf.um.es/fm/martina-1-day-old.html</link>
<comments>http://neuromancer.inf.um.es/fm/martina-1-day-old.html#disqus_thread</comments>
<pubDate>Fri, 04 Dec 2009 17:10:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/martina-1-day-old.html</guid>
<description><![CDATA[martina, 1 day old, originally uploaded by dsevilla.    ¡Aquí está! ¡Qué bonita es! :) Con un día de vida en el hospital. No he tenido tiempo ni de subir más fotos, pero todo se andará :)Here she is! How beautiful she is! Just one day after birth at the hospital. I haven't had time to upload any more photos, but hopefuly I will in the near future :)D700 + 50mm/1.4 AF]]></description>
        <content:encoded><![CDATA[<div><a href="http://www.flickr.com/photos/dsevilla/4157498429/" title="photo sharing"><img src="http://farm3.static.flickr.com/2653/4157498429_f10854c3f8.jpg" alt="" /></a><br /><a href="http://www.flickr.com/photos/dsevilla/4157498429/">martina, 1 day old</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.</div><p>    ¡Aquí está! ¡Qué bonita es! :) Con un día de vida en el hospital. No he tenido tiempo ni de subir más fotos, pero todo se andará :)<br /><br />Here she is! How beautiful she is! Just one day after birth at the hospital. I haven't had time to upload any more photos, but hopefuly I will in the near future :)<br /><br />D700 + 50mm/1.4 AF</p>]]></content:encoded>
</item>
<item>
<title>Carta a mis nietos. Enrique Amat en La Verdad de hoy</title>

<link>http://neuromancer.inf.um.es/fm/carta-a-mis-nietos-enrique-amat-en-la-verdad-de-hoy.html</link>
<comments>http://neuromancer.inf.um.es/fm/carta-a-mis-nietos-enrique-amat-en-la-verdad-de-hoy.html#disqus_thread</comments>
<pubDate>Wed, 02 Dec 2009 00:42:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/carta-a-mis-nietos-enrique-amat-en-la-verdad-de-hoy.html</guid>
<description><![CDATA[De lo mejor que he leído últimamente. Vía.]]></description>
        <content:encoded><![CDATA[De lo mejor que he leído últimamente. <a HREF="http://www.laverdad.es/murcia/20091201/opinion/simbolos-religiosos-escuela-20091201.html">Vía</a>.]]></content:encoded>
</item>
<item>
<title>Intereconomía, las dos españas del 2009 y de por qué los condones no son más que un peligro para África</title>

<link>http://neuromancer.inf.um.es/fm/intereconomia-las-dos-espanas-del-2009-y-de-por-que-los-condones-no-son-mas-que-un-peligro-para-africa.html</link>
<comments>http://neuromancer.inf.um.es/fm/intereconomia-las-dos-espanas-del-2009-y-de-por-que-los-condones-no-son-mas-que-un-peligro-para-africa.html#disqus_thread</comments>
<pubDate>Sun, 29 Nov 2009 21:06:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/intereconomia-las-dos-espanas-del-2009-y-de-por-que-los-condones-no-son-mas-que-un-peligro-para-africa.html</guid>
<description><![CDATA[No me podía creer el vídeo. Creía que era una broma al estilo de la de la becaria del Wyoming. Pero sí. A través de escolar.net y periodismo + derechos humanos. El vídeo no tiene desperdicio. De hecho, comienza tal que así (las negritas son mías):Los medios de comunicación de izquierdas han atizado en las últimas semanas al papa...Para que luego digan que lo de las dos españas está muy trasnochad[...]]]></description>
        <content:encoded><![CDATA[No me podía creer el vídeo. Creía que era una broma al estilo de la de la becaria del Wyoming. Pero sí. A través de <a href="http://www.escolar.net/MT/archives/2009/11/por-que-el-condon-no-funciona-en-africa-segun-intereconomia.html">escolar.net</a> y <a href="http://www.pmasdh.com/2009/11/periodista-muchos-africanos-tienen-unas-manos-no-aptas-para-manipular-un-preservativo/">periodismo + derechos humanos</a>.<br/><br/><center><a href="http://www.youtube.com/watch?v=xvx4sjQspnM"><img src="http://img.youtube.com/vi/xvx4sjQspnM/0.jpg" alt="YouTube Preview Image" /></a></center><br/> <br/>El vídeo no tiene desperdicio. De hecho, comienza tal que así (las negritas son mías):<br/><br/><blockquote><em>Los <strong>medios de comunicación de izquierdas</strong> han atizado en las últimas semanas al papa...</em></blockquote><br/><br/>Para que luego digan que lo de las dos españas está muy trasnochado... Pero eso es con mucho lo de menos. Del vídeo, periodismo + derechos humanos ha destacado un conjunto de frases. Las negritas, de nuevo, son mías.<br/><br/><br/><br/><br/><blockquote><em><br/>    “En aquellos países donde se difunde la fe católica, la enfermedad del SIDA se expande menos que en las regiones donde se reparte el profiláctico”<br/><br/>    “Hay que tener cuidado y no rasgar el producto con las manos; <strong>en fin, la manicura en África no destaca</strong>”<br/><br/>    “Y si a esto sumamos que <strong>los ciudadanos del Tercer Mundo no saben leer</strong>, el uso del <strong>preservativo puede ser un peligro</strong>”<br/><br/>    “Prácticamente toda la población del continente se encuentra en zonas donde el clima es eminentemente caluroso, lo que hace dificil la conservación de los preservativos”<br/><br/>    “Aun si entendieran lo que leen, es dudoso que los africanos lleguen a aplicar directrices como la de tener cuidado al desplegar la funda. Muchos habitantes de zonas rurales del <strong>continente negro tienen unas manos que pueden ser no aptas para la manipulación del preservativo</strong>”.<br/></em></blockquote><br/><br/>Eso sí que es rigor periodístico. Y respeto por los demás. El problema son los preservativos, por supuesto, no que la población sea analfabeta. Hay que luchar, por supuesto, para que siga siendo así y no puedan ni leer la documentación adjunta. Y si no saben nada de nada y se creen a pies juntillas lo que le dice la Iglesia, pues mejor que mejor...<br/><br/>Me quedo sin palabras. Sobre todo porque los religiosos que están al pie del cañón en misiones allí en «el continente negro», están a favor del preservativo.<br/><br/>Como dicen por ahí, sin embargo, quizá sea incluso más penoso que haya gente que se lo crea.]]></content:encoded>
</item>
<item>
<title>martina</title>

<link>http://neuromancer.inf.um.es/fm/martina.html</link>
<comments>http://neuromancer.inf.um.es/fm/martina.html#disqus_thread</comments>
<pubDate>Fri, 27 Nov 2009 10:32:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/martina.html</guid>
<description><![CDATA[martina, originally uploaded by dsevilla.                                 She's comming but not here yet :) Just to be prepared, we bought a d700 to get just great photos of her :)This is her room, that we prepared with such care and eagerness. I just have to fix that bulb and it will be done. Note the nice frame made by my mother with her name. Lovely.Nikon D700 + Stone Age Tamron 17mm/3.5.]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/4138129486/" title="photo sharing"><img src="http://farm3.static.flickr.com/2797/4138129486_c72352fd66.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/4138129486/">martina</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                              <br/><p><br/>   She's comming but not here yet :) Just to be prepared, we bought a d700 to get just great photos of her :)<br /><br/><br /><br/>This is her room, that we prepared with such care and eagerness. I just have to fix that bulb and it will be done. Note the nice frame made by my mother with her name. Lovely.<br /><br/><br /><br/>Nikon D700 + Stone Age Tamron 17mm/3.5.<br/></p>]]></content:encoded>
</item>
<item>
<title>Java sucks</title>

<link>http://neuromancer.inf.um.es/fm/java-sucks.html</link>
<comments>http://neuromancer.inf.um.es/fm/java-sucks.html#disqus_thread</comments>
<pubDate>Fri, 27 Nov 2009 00:51:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/java-sucks.html</guid>
<description><![CDATA[Un poco antiguo, pero válido como el primer día. Java sucks.]]></description>
        <content:encoded><![CDATA[Un poco antiguo, pero válido como el primer día. <a href="http://www.jwz.org/doc/java.html">Java sucks</a>.]]></content:encoded>
</item>
<item>
<title>En Karmic: Increíble</title>

<link>http://neuromancer.inf.um.es/fm/en-karmic-increible.html</link>
<comments>http://neuromancer.inf.um.es/fm/en-karmic-increible.html#disqus_thread</comments>
<pubDate>Wed, 25 Nov 2009 21:01:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/en-karmic-increible.html</guid>
<description><![CDATA[Sólo he tenido que quitar la opción skip-bdb de mysqld, que parece que no le gusta. Por lo demás, absolutamente todo funcionando sin problemas y actualizado.]]></description>
        <content:encoded><![CDATA[Sólo he tenido que quitar la opción skip-bdb de mysqld, que parece que no le gusta. Por lo demás, absolutamente todo funcionando sin problemas y actualizado.]]></content:encoded>
</item>
<item>
<title>Paso a Karmic</title>

<link>http://neuromancer.inf.um.es/fm/paso-a-karmic.html</link>
<comments>http://neuromancer.inf.um.es/fm/paso-a-karmic.html#disqus_thread</comments>
<pubDate>Wed, 25 Nov 2009 16:21:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/paso-a-karmic.html</guid>
<description><![CDATA[Este servidor, a ver si hoy mismo, pasará a Ubuntu Karmic. Como es el ordenador en el que trabajo, me gusta tenerlo actualizado todo lo que puedo. A ver si no me da tantos quebraderos de cabeza como me dieron las otras actualizaciones...]]></description>
        <content:encoded><![CDATA[Este servidor, a ver si hoy mismo, pasará a Ubuntu Karmic. Como es el ordenador en el que trabajo, me gusta tenerlo actualizado todo lo que puedo. A ver si no me da tantos quebraderos de cabeza como me dieron las otras actualizaciones...]]></content:encoded>
</item>
<item>
<title>Auto-completado en Emacs</title>

<link>http://neuromancer.inf.um.es/fm/autocompletado-en-emacs.html</link>
<comments>http://neuromancer.inf.um.es/fm/autocompletado-en-emacs.html#disqus_thread</comments>
<pubDate>Wed, 25 Nov 2009 10:39:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/autocompletado-en-emacs.html</guid>
<description><![CDATA[Al hilo de mi anterior entrada sobre Emacs, me he puesto un rato a buscar unos enlaces y no quiero perderlos sobre auto-completado y ayudas semánticas (aparte del coloreado de sintaxis) en Emacs. La mayoría de estas cosas tengo que estudiarlas tranquilamente y leer los enlaces:       hippie-expand   Introducción a CEDET.   Respuestas en stackoverflow.com: aquí, aquí, y aquí.]]></description>
        <content:encoded><![CDATA[Al hilo de mi <a href="http://neuromancer.inf.um.es/blog/?p=1261">anterior entrada sobre Emacs</a>, me he puesto un rato a buscar unos enlaces y no quiero perderlos sobre auto-completado y ayudas semánticas (aparte del coloreado de sintaxis) en Emacs. La mayoría de estas cosas tengo que estudiarlas tranquilamente y leer los enlaces:<br/><br/><ul><br/>      <li> <code>hippie-expand</code><br/></li><br/>  <li> <a href="http://xtalk.msk.su/~ott/en/writings/emacs-devenv/EmacsCedet.html">Introducción a CEDET</a>.</li><br/>  <li> Respuestas en stackoverflow.com: <a href="http://stackoverflow.com/questions/1644490/emacs-completions-or-intellisense-the-same-as-on-visual-studio">aquí</a>, <a href="http://stackoverflow.com/questions/129257/eclipse-sytle-function-completions-in-emacs-for-c-c-and-java">aquí</a>, <a href="http://stackoverflow.com/questions/1285971/emacs-code-completion-for-c-c">y aquí</a>.</li><br/><br/></ul>]]></content:encoded>
</item>
<item>
<title>lovely after dinner</title>

<link>http://neuromancer.inf.um.es/fm/lovely-after-dinner.html</link>
<comments>http://neuromancer.inf.um.es/fm/lovely-after-dinner.html#disqus_thread</comments>
<pubDate>Wed, 25 Nov 2009 00:38:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/lovely-after-dinner.html</guid>
<description><![CDATA[lovely after dinner, originally uploaded by dsevilla.                             oh my!Lipca Rollop TLR. Ennit 2.8 (@2.8) + Fuji Neopan 400CN. 400 ASA, C-41 B&amp;W.]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/4131575895/" title="photo sharing"><img src="http://farm3.static.flickr.com/2629/4131575895_05d7890770.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/4131575895/">lovely after dinner</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                          <br/><p><br/>   oh my!<br /><br/><br /><br/>Lipca Rollop TLR. Ennit 2.8 (@2.8) + Fuji Neopan 400CN. 400 ASA, C-41 B&amp;W.<br/></p>]]></content:encoded>
</item>
<item>
<title>Curiosidad con emacs</title>

<link>http://neuromancer.inf.um.es/fm/curiosidad-con-emacs.html</link>
<comments>http://neuromancer.inf.um.es/fm/curiosidad-con-emacs.html#disqus_thread</comments>
<pubDate>Tue, 24 Nov 2009 02:00:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/curiosidad-con-emacs.html</guid>
<description><![CDATA[Por si no quedaba claro ya que emacs es (quizá) el mejor editor que se ha escrito nunca (quizá con el único que podría compararse es con vi, pero con ese no tento ganta experiencia), deciros que el otro día tenía que añadir 10 punteros, cada uno de un tipo, para una clase template en C++, y quería que tuvieran nombres también diferentes (t0 a t9). Sabía que en emacs tenía que ser sencillo inserta[...]]]></description>
        <content:encoded><![CDATA[Por si no quedaba claro ya que emacs es (quizá) el mejor editor que se ha escrito nunca (quizá con el único que podría compararse es con vi, pero con ese no tento ganta experiencia), deciros que el otro día tenía que añadir 10 punteros, cada uno de un tipo, para una clase template en C++, y quería que tuvieran nombres también diferentes (t0 a t9). Sabía que en emacs tenía que ser sencillo insertar en la posición actual con emacs-lisp. Y efectivamente, con ESC : (escape y después dos puntos) te pregunta en la ventana del minibuffer (abajo) la expresión lisp que evaluar. Si se introduce lo siguiente:<br/><br/><code>(dotimes (i 10) (insert (concat "T" (number-to-string i) "* t" (number-to-string i) ";\n")))</code><br/><br/>se obtiene lo que quería. Básicamente es repetir 10 veces insertar una cadena que concatena los textos con el valor de convertir de número a cadena la variable i. Se podría haber añadido un "let" para asociar el valor de i como cadena y no calcularlo dos veces, pero así lo escribí rápidamente. ¿Alguien da más?<br/><br/><center><img src="http://neuromancer.inf.um.es/blog/wp-content/uploads/2009/11/emacs.png" width="800" alt="emacs" /></center>]]></content:encoded>
</item>
<item>
<title>Interesante artículo sobre DSLs internos en Java</title>

<link>http://neuromancer.inf.um.es/fm/interesante-articulo-sobre-dsls-internos-en-java.html</link>
<comments>http://neuromancer.inf.um.es/fm/interesante-articulo-sobre-dsls-internos-en-java.html#disqus_thread</comments>
<pubDate>Fri, 20 Nov 2009 22:57:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/interesante-articulo-sobre-dsls-internos-en-java.html</guid>
<description><![CDATA[Buceando buscando información sobre DSLs (Domain Specific Languages, o lenguajes específicos de dominio) he encontrado un artículo en InfoQ muy interesante, de cómo implementarlos en Java. Tienen algunas ideas interesantes, pero es triste ver lo penosamente encorsetado que es Java comparado, por ejemplo, con C++ para implementar este tipo de lenguajes (no digamos con Ruby, por ejemplo). Comparand[...]]]></description>
        <content:encoded><![CDATA[Buceando buscando información sobre DSLs (<em>Domain Specific Languages</em>, o lenguajes específicos de dominio) he encontrado un artículo en <a href="http://www.infoq.com">InfoQ</a> muy interesante, de cómo <a href="http://www.infoq.com/articles/internal-dsls-java">implementarlos en Java</a>. Tienen algunas ideas interesantes, pero es triste ver lo penosamente encorsetado que es Java comparado, por ejemplo, con C++ para implementar este tipo de lenguajes (no digamos con Ruby, por ejemplo). Comparando esto con conocidos DSLs internos en C++, como por ejemplo, <a href="http://www.boost.org/doc/libs/1_41_0/libs/spirit/doc/html/index.html">Spirit</a> o <a href="http://www.rasterbar.com/products/luabind.html">LuaBind</a>, el soporte para DSLs en Java está un poco en pañales. ¿Se nota que no me gusta Java? :) Comparado con lenguajes serios como <a href="http://www.scala-lang.org">Scala</a> y <a href="http://www.clojure.org">Clojure</a>, que también se ejecutan en la JVM, Java es un lenguaje de juguete.]]></content:encoded>
</item>
<item>
<title>La luz de los inocentes</title>

<link>http://neuromancer.inf.um.es/fm/la-luz-de-los-inocentes.html</link>
<comments>http://neuromancer.inf.um.es/fm/la-luz-de-los-inocentes.html#disqus_thread</comments>
<pubDate>Wed, 11 Nov 2009 16:55:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/la-luz-de-los-inocentes.html</guid>
<description><![CDATA[Juventudes Socialistas de Mula, miembro del Consejo Local de la Juventud de Mula, celebra su II Semana de la Memoria Historica con varios actos que tendrán lugar los días 10, 12 y 13 de noviembre. Ayer asistí al primero de los actos del cartel, la conferencia sobre la represión franquista en la Región de Murcia y en Mula en particular, impartida por el ex-senador Antonio Martínez Ovejero. Me gust[...]]]></description>
        <content:encoded><![CDATA[Juventudes Socialistas de Mula, miembro del Consejo Local de la Juventud de Mula, celebra su II Semana de la Memoria Historica con varios actos que tendrán lugar los días 10, 12 y 13 de noviembre. Ayer asistí al primero de los actos del cartel, la conferencia sobre la represión franquista en la Región de Murcia y en Mula en particular, impartida por el ex-senador Antonio Martínez Ovejero. Me gustó mucho, y hasta me abrió la mente para tomar pasos en este sentido de la recuperación de la memoria. Veremos a ver.<br/><br/>En la charla, se exponía las atrocidades llevadas a cabo no sólo en la guerra, sino en la posguerra, por los falangistas y el movimiento franquista. El increíble número de juicios celebrados en la posguerra, con caciques convertidos por obra y gracia de Dios (nunca mejor dicho) en secretarios e integrantes de tribunales que sentenciaban a muerte sin ton ni son. Mujeres violadas y ultrajadas. Metidas en la cárcel por tener "moral difusa" y que a los tantos años, cuando llegaba su juicio, y ante la ausencia de causas que se sostuvieran, firmaban, como alma que lleva el diablo, condenas voluntarias por el tiempo que habían pasado encarceladas... No sigo que me da el coraje...<br/><br/><center><img src="http://www.mulajoven.com/carteljjss2.jpg" /></center>]]></content:encoded>
</item>
<item>
<title>.</title>

<link>http://neuromancer.inf.um.es/fm/post-2009-11-11.html</link>
<comments>http://neuromancer.inf.um.es/fm/post-2009-11-11.html#disqus_thread</comments>
<pubDate>Wed, 11 Nov 2009 16:23:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/post-2009-11-11.html</guid>
<description><![CDATA[, originally uploaded by dsevilla.                                Pentax 67 + 105/2.4 + Fuji Astia 100fView On Black]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/4095727112/" title="photo sharing"><img src="http://farm3.static.flickr.com/2565/4095727112_ca475ecb3e.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/4095727112/"></a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                             <br/><p><br/>   Pentax 67 + 105/2.4 + Fuji Astia 100f<br/><br/><a href="http://bighugelabs.com/onblack.php?id=4095727112&size=large">View On Black</a><br/><br/></p>]]></content:encoded>
</item>
<item>
<title>III concurso de pintura al aire libre de Mula</title>

<link>http://neuromancer.inf.um.es/fm/iii-concurso-de-pintura-al-aire-libre-de-mula.html</link>
<comments>http://neuromancer.inf.um.es/fm/iii-concurso-de-pintura-al-aire-libre-de-mula.html#disqus_thread</comments>
<pubDate>Wed, 11 Nov 2009 15:53:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/iii-concurso-de-pintura-al-aire-libre-de-mula.html</guid>
<description><![CDATA[Este domingo tuvo lugar el tercer concurso de pintura al aire libre de Mula. Uno de los placeres más bonitos que hay es pasear por el pueblo de uno tranquilamente. Si además hace un día como el del domingo pasado, y se está celebrando un concuso de pintura al aire libre, ya la historia no tiene comparación. Así que estuvimos allí casi todo el día. Paralelamente se celebraba un concurso de fotogra[...]]]></description>
        <content:encoded><![CDATA[Este domingo tuvo lugar el tercer concurso de pintura al aire libre de Mula. Uno de los placeres más bonitos que hay es pasear por el pueblo de uno tranquilamente. Si además hace un día como el del domingo pasado, y se está celebrando un concuso de pintura al aire libre, ya la historia no tiene comparación. Así que estuvimos allí casi todo el día. Paralelamente se celebraba un concurso de fotografía también, pero yo no estoy hecho para concursos :). Por la tarde se entregaron los premios. No tengo una foto de los premiados, porque había mucha gente y me resultaba difícil tener una foto, pero al final Emma y yo terminamos comprando uno de los cuadros que más me gustó para nuestra casa. La foto la tomé en el momento de exposición de todos los cuadros:<br/><br/><center><img src="http://neuromancer.inf.um.es/blog/wp-content/uploads/2009/11/DSC_4759%20(Modificada%20en%20UFRaw)%20(Modificada%20(2)).jpg" width="600" /></center><center></center><br/><br/>El de la derecha del suéter al revés y el gorro es el pintor. Después actualizo sus datos por si os interesa, que ahora no los tengo.]]></content:encoded>
</item>
<item>
<title>Aznar, siempre tan ocupado cuando viene a Murcia</title>

<link>http://neuromancer.inf.um.es/fm/aznar-siempre-tan-ocupado-cuando-viene-a-murcia.html</link>
<comments>http://neuromancer.inf.um.es/fm/aznar-siempre-tan-ocupado-cuando-viene-a-murcia.html#disqus_thread</comments>
<pubDate>Mon, 09 Nov 2009 15:50:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/aznar-siempre-tan-ocupado-cuando-viene-a-murcia.html</guid>
<description><![CDATA[No os lo perdáis, chicos. Estos días hay dos citas obligadas, ineludibles, en Murcia. Aznar presenta en Abarán su último libro «España puede salir de la crisis». Está bien que este gran personaje español tenga esas recetas mágicas para salir de la crisis y que además las plasme en un libro... ¡qué haríamos sin él! Parece que no lo han recibido muy bien (estaba buscando una foto de una pancarta de[...]]]></description>
        <content:encoded><![CDATA[No os lo perdáis, chicos. Estos días hay dos citas obligadas, ineludibles, en Murcia. Aznar presenta en Abarán su último libro «España puede salir de la crisis». Está bien que este gran personaje español tenga esas recetas mágicas para salir de la crisis y que además las plasme en un libro... ¡qué haríamos sin él! Parece que <a href="http://www.regiondemurcia.juventudes.org/noticias/186-aznar-persona-non-grata-en-abaran.html">no lo han recibido</a> <a href="http://www.laverdad.es/murcia/20091108/comarcas/izquierda-recibira-aznar-protestas-20091108.html">muy bien</a> (estaba buscando una foto de una pancarta del recibimiento en Abarán, pero no la he encontrado por la red, sólo en el diario La Opinión de papel, si la encontráis, por favor, decídmelo). Parece que los simpatizantes de IU y algún que otro confabulador de izquierda se reunieron en un acto paralelo. Muy buena iniciativa. Ignorar al esperpento, pasar de él. Muy buen movimiento (como comenta algún periodista en la noticia de <a href="http://www.vegamediapress.es/noticias/index.php?option=com_content&task=view&id=11248&Itemid=1">vegamediapress.es</a>, véase la diferencia a cuando vino la ministra Narbona, con insultos y hasta conato de linchamiento. Saquen ustedes las diferencias...)<br/><br/>Pero no se iba a quedar sólo en esto, no. Ya lo adivináis, ¿verdad? Ahá, <a href="http://www.ucam.edu/news/aznar-dirigira-la-nueva-catedra-de-la-ucam-etica-politica-y-humanidades">Aznar dirigirá la Cátedra de Ética, Política y Humanidades</a> de la UCAM (en <a href="http://www.publico.es/espana/261963/aznar/ensenara/etica/politica/humanidades">público</a> también se han coscado). Sí, sí, aquel que nos llevó a una guerra internacional ilegal. Aquel que jugó con los intereses de un país por sus amiguismos americanos. Aquel que se vendió por salir en la nefasta foto de las Azores... Los alumnos de la católica <a href="http://www.lahojanegra.com/2009/10/aznar-dara-clases-en-la-ucam-los.html">se descojonan</a>, y yo, si la hubiera tenido en estima, como baluarte educativo, me hubiera cabreado, pero no se le puede pedir peras al olmo.<br/><br/>Os dejo una foto que no ha hecho que me parta más de risa porque parece hasta macabra... (sacada de vegamediapress.es):<br/><br/><center><img src="http://www.vegamediapress.es/noticias/images/stories/aznarnio.jpg" alt="aznar santo ya!" /></center><center></center><br/><br/>¡Aznar santo ya! ¡Pero mira qué carita! ¡Pa comérselo!<br/><br/><strong>Actualización</strong>: En <a href="http://abaranen7dias.com/ae7d/detalle.noticia.php?key=1660">Abarán en 7 días</a> se hacen eco de las protestas (gracias, Jesús). <br/><strong>Actualización 2</strong>: abaran.es, la web del ayuntamiento, está caída y reportada como "dañina" por Google...<br/><strong>Actualización 3</strong>: <a href="http://blogs.20minutos.es/arsenioescolar/post/2009/11/10/lecciain-aotica-del-catedraatico-aznar">Arsenio Escolar</a> se hace eco de tan excelsas palabras...]]></content:encoded>
</item>
<item>
<title>Entrevista en enfoquemanual.com</title>

<link>http://neuromancer.inf.um.es/fm/entrevista-en-enfoquemanualcom.html</link>
<comments>http://neuromancer.inf.um.es/fm/entrevista-en-enfoquemanualcom.html#disqus_thread</comments>
<pubDate>Sun, 08 Nov 2009 00:08:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/entrevista-en-enfoquemanualcom.html</guid>
<description><![CDATA[Hace un tiempo Nacho Pello me pidió si podía hacerme una entrevista para su sitio web Enfoque Manual. La entrevista la podéis ver aquí. Como es de suponer, la entrevista versa sobre el enfoque manual, la fotografía tradicional (versus digital), etc. Agradezco mucho a Nacho esta entrevista, sobre todo por el poco tiempo que tengo para dedicarle últimamente a la fotografía...]]></description>
        <content:encoded><![CDATA[Hace un tiempo <a href="http://www.flickr.com/photos/nachopello">Nacho Pello</a> me pidió si podía hacerme una entrevista para su sitio web <a href="http://www.enfoquemanual.com/">Enfoque Manual</a>. La entrevista la podéis ver <a href="">aquí</a>. Como es de suponer, la entrevista versa sobre el enfoque manual, la fotografía tradicional (<em>versus</em> digital), etc. Agradezco mucho a Nacho esta entrevista, sobre todo por el poco tiempo que tengo para dedicarle últimamente a la fotografía...<br/><br/><center><a href="http://www.enfoquemanual.com/2009/10/entrevista-con-diego-sevilla-interview.html"><img src="http://neuromancer.inf.um.es/blog/wp-content/uploads/2009/11/manual.png" /></a></center>]]></content:encoded>
</item>
<item>
<title>Días Caldum'09</title>

<link>http://neuromancer.inf.um.es/fm/dias-caldum09.html</link>
<comments>http://neuromancer.inf.um.es/fm/dias-caldum09.html#disqus_thread</comments>
<pubDate>Thu, 05 Nov 2009 15:22:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/dias-caldum09.html</guid>
<description><![CDATA[Por estos días se celebran los días caldum en la Facultad de Informática y esta tarde me han pedido que participe en la mesa redonda sobre software libre (a las 18:30) representando a la cátedra SAES de software libre. Después pongo las transparencias. La mesa redonda supongo que irá sobre la influencia o implantación del software libre en Murcia. En mi caso, explicaré cómo una empresa de la regi[...]]]></description>
        <content:encoded><![CDATA[Por estos días se celebran los <a href="http://diascaldum.um.es">días caldum</a> en la Facultad de Informática y esta tarde me han pedido que participe en la mesa redonda sobre software libre (a las 18:30) representando a la cátedra SAES de software libre. Después pongo las transparencias. La mesa redonda supongo que irá sobre la influencia o implantación del software libre en Murcia. En mi caso, explicaré cómo una empresa de la región apuesta por él, y qué sinergias se pueden extraer.<br/><br/><strong>Actualización</strong>: Las transparencias <a href="http://neuromancer.inf.um.es/blog/wp-content/uploads/2009/11/caldum09_csaes.pdf">aquí (PDF)</a>.<br/><br/><center><a href="http://neuromancer.inf.um.es/blog/wp-content/uploads/2009/11/caldum09_csaes.pdf"><img src="http://neuromancer.inf.um.es/blog/wp-content/uploads/2009/11/caldum09_csaes.png" /></a></center>]]></content:encoded>
</item>
<item>
<title>Estrasburgo falla que los crucifijos en las aulas «violan el derecho» a la libertad de religión</title>

<link>http://neuromancer.inf.um.es/fm/estrasburgo-falla-que-los-crucifijos-en-las-aulas-violan-el-derecho-a-la-libertad-de-religion.html</link>
<comments>http://neuromancer.inf.um.es/fm/estrasburgo-falla-que-los-crucifijos-en-las-aulas-violan-el-derecho-a-la-libertad-de-religion.html#disqus_thread</comments>
<pubDate>Wed, 04 Nov 2009 15:42:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/estrasburgo-falla-que-los-crucifijos-en-las-aulas-violan-el-derecho-a-la-libertad-de-religion.html</guid>
<description><![CDATA[Pues eso, ya está bien que haya sentencias en ese sentido. Escolar también se ocupa de ello, señalando además que el estado español pagará la mitad de la visita del Papa a España en 2011. El grupo de Facebook lo dice bien claro.]]></description>
        <content:encoded><![CDATA[Pues eso, <a href="http://www.nortecastilla.es/20091104/castilla-leon/estrasburgo-falla-crucifijos-aulas-20091104.html">ya está bien que haya sentencias en ese sentido</a>. <a href="http://www.escolar.net/MT/archives/2009/11/cruces-son-sombras.html">Escolar</a> también se ocupa de ello, señalando además que el estado español <a href="http://www.publico.es/espana/265783/paga/mitad/visita/papa">pagará la mitad de la visita del Papa a España en 2011</a>. El <a href="http://www.facebook.com/group.php?gid=171463127186&ref=mf">grupo de Facebook</a> lo dice bien claro.]]></content:encoded>
</item>
<item>
<title>Should I use Comic Sans?</title>

<link>http://neuromancer.inf.um.es/fm/should-i-use-comic-sans.html</link>
<comments>http://neuromancer.inf.um.es/fm/should-i-use-comic-sans.html#disqus_thread</comments>
<pubDate>Wed, 04 Nov 2009 01:15:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/should-i-use-comic-sans.html</guid>
<description><![CDATA[]]></description>
        <content:encoded><![CDATA[<a hreF="http://catbird.tumblr.com/post/216293561"><img src="http://21.media.tumblr.com/tumblr_krpq76ijQw1qz4b32o1_400.gif" alt="" /></a>]]></content:encoded>
</item>
<item>
<title>Clojure</title>

<link>http://neuromancer.inf.um.es/fm/clojure.html</link>
<comments>http://neuromancer.inf.um.es/fm/clojure.html#disqus_thread</comments>
<pubDate>Wed, 04 Nov 2009 01:06:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/clojure.html</guid>
<description><![CDATA[Como hace tiempo que no escribo en el blog, me voy a ir desquitando de cosas que quiero ir añadiendo para recordarlas en un futuro.Clojure me interesa desde hace bastante tiempo por su mezcla entre lenguajes estilo Lisp dentro de la máquina virtual Java (como también Scala y unos cuantos otros, de los que hablaré más adelante). Por ahora he encontrado un link interesante que quiero guardar: 20 Cl[...]]]></description>
        <content:encoded><![CDATA[Como hace tiempo que no escribo en el blog, me voy a ir desquitando de cosas que quiero ir añadiendo para recordarlas en un futuro.<br/><br/><a href="http://clojure.org/">Clojure</a> me interesa desde hace bastante tiempo por su mezcla entre lenguajes estilo Lisp dentro de la máquina virtual Java (como también Scala y unos cuantos otros, de los que hablaré más adelante). Por ahora he encontrado un link interesante que quiero guardar: <a href="http://mattsears.com/2009/6/6/20-clojure-links-to-get-you-up-to-speed">20 Clojure Links To Get You Up To Speed</a>. Veinte enlaces a artículos interesantes sobre Clojure para iniciarse rápidamente. Además, clojure está de enhorabuena en su versión 2 :)<br/><br/><center><img src="http://clojure.org/file/view/clojure_cake.png/42336345" alt="" /></center>]]></content:encoded>
</item>
<item>
<title>emma 8 months! (1/2)</title>

<link>http://neuromancer.inf.um.es/fm/emma-8-months-12.html</link>
<comments>http://neuromancer.inf.um.es/fm/emma-8-months-12.html#disqus_thread</comments>
<pubDate>Wed, 04 Nov 2009 00:46:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/emma-8-months-12.html</guid>
<description><![CDATA[emma 8 months! (1/2), originally uploaded by dsevilla.                            Polaroid Land Camera 250 + Fuij FP-100c.Emma is reaching her 9th. month... Martina is nearly here! :)]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/4072924829/" title="photo sharing"><img src="http://farm3.static.flickr.com/2667/4072924829_3f078920b1.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/4072924829/">emma 8 months! (1/2)</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                         <br/><p><br/>   Polaroid Land Camera 250 + Fuij FP-100c.<br /><br/><br /><br/>Emma is reaching her 9th. month... Martina is nearly here! :)<br/></p>]]></content:encoded>
</item>
<item>
<title>emma 8 months (2/2)</title>

<link>http://neuromancer.inf.um.es/fm/emma-8-months-22.html</link>
<comments>http://neuromancer.inf.um.es/fm/emma-8-months-22.html#disqus_thread</comments>
<pubDate>Wed, 04 Nov 2009 00:46:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/emma-8-months-22.html</guid>
<description><![CDATA[emma 8 months (2/2), originally uploaded by dsevilla.                             Polaroid Land Camera 250 + Fuij FP-100c.Emma is reaching her 9th. month... Martina is nearly here! :)]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/4072924815/" title="photo sharing"><img src="http://farm3.static.flickr.com/2714/4072924815_5ed6e01a9a.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/4072924815/">emma 8 months (2/2)</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                          <br/><p><br/>   Polaroid Land Camera 250 + Fuij FP-100c.<br /><br/><br /><br/>Emma is reaching her 9th. month... Martina is nearly here! :)<br/></p>]]></content:encoded>
</item>
<item>
<title>Sobre comentarios en código</title>

<link>http://neuromancer.inf.um.es/fm/sobre-comentarios-en-codigo.html</link>
<comments>http://neuromancer.inf.um.es/fm/sobre-comentarios-en-codigo.html#disqus_thread</comments>
<pubDate>Mon, 02 Nov 2009 23:10:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/sobre-comentarios-en-codigo.html</guid>
<description><![CDATA[Al hilo de lo de ayer, he encontrado otras referencias interesantes:  Coding without comments y Code Tells You How, Comments Tell You Why, de Jeff Atwood, con comentarios sobre el conocido como literate programming, introducido por Knuth para implementar, entre otros, su TeX. En el último artículo introduce una cita que me parece muy ilustrativa:Programs must be written for people to read, and on[...]]]></description>
        <content:encoded><![CDATA[Al hilo de lo de ayer, he encontrado otras referencias interesantes:<br/><br/><ul><br/>  <li><a href="http://www.codinghorror.com/blog/archives/001150.html">Coding without comments</a> y <a href="http://www.codinghorror.com/blog/archives/000749.html">Code Tells You How, Comments Tell You Why</a>, de Jeff Atwood, con comentarios sobre el conocido como <em>literate programming</em>, introducido por Knuth para implementar, entre otros, su TeX. En el último artículo introduce una cita que me parece muy ilustrativa:<br/><br/><br/><br/><blockquote><em>Programs must be written for people to read, and only incidentally for machines to execute.</em></blockquote><br/><br/><br/></li><br/>       <li>Después, una reflexión de si la capacidad o incapacidad para escribir en tu idioma materno afecta a tus capacidades de programación: <a href="http://blog.jtimothyking.com/2006/12/15/does-bad-writing-reflect-poor-programming-skills">Does Bad Writing Reflect Poor Programming Skills?</a>, lo cual tampoco había pensado nunca, pero es una reflexión válida. Como batallita, comentaré que una de las preguntas que más me sorprendió de cuando hice mi entrevista en Google fue que uno de los que me entrevistaron directamente me preguntó «Virtual methods in C++?», y yo lo miré como diciendo... ¿qué? Me estaba pidiendo, por supuesto, que se lo explicara. Perfectamente, una cosa tan sencilla no iba a tener problema en explicárselo. Sin embargo, me puse a contárselo y no me salían las palabras exactas... <em>¿Habré hecho yo métodos virtuales en mi vida?</em>, me preguntaba yo... unos cuantos miles... en fin...<br/></li><br/>        <li>Finalmente, al hilo de los comentarios en el código, unas cuantas razones de por qué <a href="http://everything2.com/index.pl?node_id=1709851&displaytype=printable">los programadores no comentan su código</a>, entre otras, porque <em>"I'm the greatest programmer ever!"</em>... :)<br/></li><br/><br/></ul><br/><br/>Todo esto se puede adornar añadiendo cuestiones como las pruebas unitarias, etc. Todo se andará.]]></content:encoded>
</item>
<item>
<title>Fisionomía de un <em>creyente</em></title>

<link>http://neuromancer.inf.um.es/fm/fisionomia-de-un-emcreyenteem.html</link>
<comments>http://neuromancer.inf.um.es/fm/fisionomia-de-un-emcreyenteem.html#disqus_thread</comments>
<pubDate>Mon, 02 Nov 2009 01:03:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/fisionomia-de-un-emcreyenteem.html</guid>
<description><![CDATA[De lo mejor que he leído últimamente, «Destino de Iscariote», conocido blog de Planet Murcia, presenta una fisionomía de los creyentes en su entrada «Apología de la blasfemia: un nuevo enfoque»:Los creyentes, como todo parece indicar, creen. A pesar de la vasta cantidad de cosas en las que creer, los creyentes se decantan casi unánimemente por amigos imaginarios, seres superiores intangibles e in[...]]]></description>
        <content:encoded><![CDATA[De lo mejor que he leído últimamente, «<a href="http://ishkarioth.com/blog">Destino de Iscariote</a>», conocido blog de Planet Murcia, presenta una fisionomía de los creyentes en su entrada «<a href="http://ishkarioth.com/blog/2009/10/25/apologia-de-la-blasfemia/">Apología de la blasfemia: un nuevo enfoque</a>»:<br/><br/><br/><br/><blockquote><em>Los creyentes, como todo parece indicar, creen. A pesar de la vasta cantidad de cosas en las que creer, los creyentes se decantan casi unánimemente por amigos imaginarios, seres superiores intangibles e inaprensibles que dirigen el Cosmos y, por ende, la vida humana. Algunos de ellos incluso gustan proclamarlos miembros de su familia, y los conciben como padres, madres o hermanos. Otros los prefieren en versión consciencia de la naturaleza, o incluso señores de la guerra interestelar.</em></blockquote><br/><br/>Continúa...<br/><br/><br/><br/><blockquote><em>[...] Al principio se te escapa una risa floja. Je, je, cómo no voy a poder cagarme en dios. Si se te ocurre tener ese desliz en presencia de un creyente, la intensidad de su mirada te convencerá de que en efecto habla en serio. Sal del shock.</em></blockquote><br/><br/>Salpicado de consejos esporádicos:<br/><br/><br/><br/><blockquote><em>Esto, que evidentemente es una gilipollez, puede resultar muy útil cuando se debate con creyentes. Porque está escrito en su mismo lenguaje, en unos términos que pueden entender perfectamente (cuidado: si dices amigo imaginario y no dios pueden enfadarse) [...]</em></blockquote><br/><br/><br/><br/>En fin, que no sé si reirme o llorar... Me parece muy bueno el texto, pero precisamente esta semana tuve una discusión con un par de amigos míos y fue más o menos en estos términos... No sé de dónde han salido tantos <em>creyentes</em> en Murcia...<br/><br/><br/>]]></content:encoded>
</item>
<item>
<title>Práctica de la programación</title>

<link>http://neuromancer.inf.um.es/fm/practica-de-la-programacion.html</link>
<comments>http://neuromancer.inf.um.es/fm/practica-de-la-programacion.html#disqus_thread</comments>
<pubDate>Mon, 02 Nov 2009 00:43:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/practica-de-la-programacion.html</guid>
<description><![CDATA[Reconozco que nunca lo había pensado. Para programar bien, igual que con cualquier otro arte, hay que practicar. He encontrado este artículo, que me ha parecido muy interesante: Practicing Programming. El artículo incluye también trucos o indicaciones de qué practicar y cómo. Algunos de los consejos no me cuadran mucho porque se refieren a cómo realizar entrevistas a programadores, que también es[...]]]></description>
        <content:encoded><![CDATA[Reconozco que nunca lo había pensado. Para programar bien, igual que con cualquier otro <em>arte</em>, hay que practicar. He encontrado este artículo, que me ha parecido muy interesante: <a href="http://steve.yegge.googlepages.com/practicing-programming">Practicing Programming</a>. El artículo incluye también trucos o indicaciones de qué practicar y cómo. Algunos de los consejos no me cuadran mucho porque se refieren a cómo realizar entrevistas a programadores, que también es un tópico interesante, pero a mí no me interesa tanto.<br/><br/>En un momento dado, compara el ser contratado por una u otra empresa de informática como programador a estar jugando en una liga de fútbol americano (NFL). ¿Es importante que el jugador (programador) esté bien entrenado? <br/><br/><blockquote><em>[...] is it good enough for him to be in good shape? Hardly. Maybe it's sufficient for a position on a high-school junior-varsity team, but Amazon's supposed to be more like the NFL than high school J.V., isn't it? I think so.</em></blockquote><br/><br/>O dicho de otro modo. Si queremos terminar en una empresa seria, o aspirar a lo máximo, hay que tener al día nuestra práctica.<br/><br/>Al hilo de esto, y gracias a los comentarios, he encontrado también un sitio dedicado a esa práctica de la programación, llamado «<a href="http://codekata.pragprog.com/">CodeKata</a>» (al estilo de las tablas de artes marciales), y un artículo interesantísimo que critica y es contrapuesto a los típicos títulos «Aprenda XXX en 24 horas», o en pocos días, para el caso. El artículo, «<a href="http://www.norvig.com/21-days.html">Teach Yourself Programming in Ten Years</a>», también <a href="http://loro.sourceforge.net/notes/21-dias.html">en español</a>, muestra que hay estudios que demuestran que para obtener una destreza suficiente en una disciplina hacen falta unos diez años. Esto me ha recordado también a una magnífica charla que dio Michi Henning por el 2004 sobre las falacias de la computación, que siempre estará al día... (<a href="http://pyropus.ca/personal/writings/computing-fallacies.html">aquí con comentarios</a>).]]></content:encoded>
</item>
<item>
<title>the incidental passer-by</title>

<link>http://neuromancer.inf.um.es/fm/the-incidental-passerby.html</link>
<comments>http://neuromancer.inf.um.es/fm/the-incidental-passerby.html#disqus_thread</comments>
<pubDate>Mon, 26 Oct 2009 00:11:00 +0001</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/the-incidental-passerby.html</guid>
<description><![CDATA[the incidental passer-by, originally uploaded by dsevilla.                                We were in Hamburg for a few hours. After a walk through the city I just sit down a little expecting someone passing by.Bronica GS-1 + 110/3.5 + 6x6 back + Fuji Velvia 50.]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/4044632472/" title="photo sharing"><img src="http://farm3.static.flickr.com/2616/4044632472_fec59c7ae7.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/4044632472/">the incidental passer-by</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                             <br/><p><br/>   We were in Hamburg for a few hours. After a walk through the city I just sit down a little expecting someone passing by.<br /><br/><br /><br/>Bronica GS-1 + 110/3.5 + 6x6 back + Fuji Velvia 50.<br/></p>]]></content:encoded>
</item>
<item>
<title>.</title>

<link>http://neuromancer.inf.um.es/fm/post-2009-8-16.html</link>
<comments>http://neuromancer.inf.um.es/fm/post-2009-8-16.html#disqus_thread</comments>
<pubDate>Sun, 16 Aug 2009 23:04:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/post-2009-8-16.html</guid>
<description><![CDATA[, originally uploaded by dsevilla.                                Yashica 635 + Fuji RAP 100F + +1 close-up lens.In the same series as the previous one with the P67. A little bit overexposed, but I like it this way. I can't think of a title right now...]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/3828045608/" title="photo sharing"><img src="http://farm4.static.flickr.com/3546/3828045608_5463c9a1e4.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/3828045608/"></a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                             <br/><p><br/>   Yashica 635 + Fuji RAP 100F + +1 close-up lens.<br /><br/><br /><br/>In the same series as the previous one with the P67. A little bit overexposed, but I like it this way. I can't think of a title right now...<br/></p>]]></content:encoded>
</item>
<item>
<title>mamá</title>

<link>http://neuromancer.inf.um.es/fm/mama.html</link>
<comments>http://neuromancer.inf.um.es/fm/mama.html#disqus_thread</comments>
<pubDate>Thu, 13 Aug 2009 01:13:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/mama.html</guid>
<description><![CDATA[mamá, originally uploaded by dsevilla.                            Last (and only) snow of the season I took my mother for a walk to see the snow. She feels alone since we lost my father thirteen years ago. I love to share these moments with her, and I like the way she's not looking at me, and thinking on her own things.Norita 66 + Noritar80/2 + Fuji RAP 100F slide film.]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/3816425152/" title="photo sharing"><img src="http://farm4.static.flickr.com/3133/3816425152_85671ddd40.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/3816425152/">mamá</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                         <br/><p><br/>   Last (and only) snow of the season I took my mother for a walk to see the snow. She feels alone since we lost my father thirteen years ago. I love to share these moments with her, and I like the way she's not looking at me, and thinking on her own things.<br /><br/><br /><br/>Norita 66 + Noritar80/2 + Fuji RAP 100F slide film.<br/></p>]]></content:encoded>
</item>
<item>
<title>nature</title>

<link>http://neuromancer.inf.um.es/fm/nature.html</link>
<comments>http://neuromancer.inf.um.es/fm/nature.html#disqus_thread</comments>
<pubDate>Thu, 13 Aug 2009 00:43:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/nature.html</guid>
<description><![CDATA[nature, originally uploaded by dsevilla.                                  WOW! How long! I almost forgot how to upload photos on Flickr :) I'm sorry for the delay. My computer broke, and I lost all my recent (digital) photos... Curiously, the only ones I still have are those analog negatives I usually shoot :)It took me some time to configure again things, sort out negs, etc., but I hope to be up[...]]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/3816357702/" title="photo sharing"><img src="http://farm4.static.flickr.com/3538/3816357702_1f30ec7f75.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/3816357702/">nature</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                               <br/><p><br/>   WOW! How long! I almost forgot how to upload photos on Flickr :) I'm sorry for the delay. My computer broke, and I lost all my recent (digital) photos... Curiously, the only ones I still have are those analog negatives I usually shoot :)<br /><br/><br /><br/>It took me some time to configure again things, sort out negs, etc., but I hope to be uploading a little bit more from now on.<br/></p>]]></content:encoded>
</item>
<item>
<title>tea for one</title>

<link>http://neuromancer.inf.um.es/fm/tea-for-one.html</link>
<comments>http://neuromancer.inf.um.es/fm/tea-for-one.html#disqus_thread</comments>
<pubDate>Fri, 05 Jun 2009 10:47:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/tea-for-one.html</guid>
<description><![CDATA[tea for one, originally uploaded by dsevilla.                             Rolleiflex SL 66 + Rollei HFT Planar 80mm/2.8 + Fuji RAP 100FThe rollei is just fantastic.]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/3595558507/" title="photo sharing"><img src="http://farm4.static.flickr.com/3323/3595558507_461d06d805.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/3595558507/">tea for one</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                          <br/><p><br/>   Rolleiflex SL 66 + Rollei HFT Planar 80mm/2.8 + Fuji RAP 100F<br /><br/><br /><br/>The rollei is just fantastic.<br/></p>]]></content:encoded>
</item>
<item>
<title>e pluribus unum</title>

<link>http://neuromancer.inf.um.es/fm/e-pluribus-unum.html</link>
<comments>http://neuromancer.inf.um.es/fm/e-pluribus-unum.html#disqus_thread</comments>
<pubDate>Thu, 28 May 2009 00:22:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/e-pluribus-unum.html</guid>
<description><![CDATA[e pluribus unum, originally uploaded by dsevilla.                                 Rolleiflex SL66 + Rollei HFT Planar 80mm/2.8 + Fuji Velvia 50.]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/3570990837/" title="photo sharing"><img src="http://farm4.static.flickr.com/3331/3570990837_ab4eaf7115.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/3570990837/">e pluribus unum</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                              <br/><p><br/>   Rolleiflex SL66 + Rollei HFT Planar 80mm/2.8 + Fuji Velvia 50.<br/></p>]]></content:encoded>
</item>
<item>
<title>Pentax 67 + Kodak Aero-Ektar 178/2.5 versus Nikon D200 + Sigma 30mm/1.4</title>

<link>http://neuromancer.inf.um.es/fm/pentax-67--kodak-aeroektar-17825-versus-nikon-d200--sigma-30mm14.html</link>
<comments>http://neuromancer.inf.um.es/fm/pentax-67--kodak-aeroektar-17825-versus-nikon-d200--sigma-30mm14.html#disqus_thread</comments>
<pubDate>Sat, 16 May 2009 01:03:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/pentax-67--kodak-aeroektar-17825-versus-nikon-d200--sigma-30mm14.html</guid>
<description><![CDATA[Pentax 67 + Kodak Aero-Ektar 178/2.5 versus Nikon D200 + Sigma 30mm/1.4, originally uploaded by dsevilla.                                 Taken with a Kowa Six :) Fuji Pro 800z. Sometimes size matters...]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/3534086429/" title="photo sharing"><img src="http://farm3.static.flickr.com/2098/3534086429_2e0423fa58.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/3534086429/">Pentax 67 + Kodak Aero-Ektar 178/2.5 versus Nikon D200 + Sigma 30mm/1.4</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                              <br/><p><br/>   Taken with a Kowa Six :) Fuji Pro 800z. Sometimes size matters...<br/></p>]]></content:encoded>
</item>
<item>
<title>field, sun reflected</title>

<link>http://neuromancer.inf.um.es/fm/field-sun-reflected.html</link>
<comments>http://neuromancer.inf.um.es/fm/field-sun-reflected.html#disqus_thread</comments>
<pubDate>Thu, 14 May 2009 22:04:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/field-sun-reflected.html</guid>
<description><![CDATA[field, sun reflected, originally uploaded by dsevilla.                            Pentax 67 + SMC 45mm/4 + Fuji Velvia 50 slide film.]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/3531297705/" title="photo sharing"><img src="http://farm4.static.flickr.com/3387/3531297705_dcf087f119.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/3531297705/">field, sun reflected</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                         <br/><p><br/>   Pentax 67 + SMC 45mm/4 + Fuji Velvia 50 slide film.<br/></p>]]></content:encoded>
</item>
<item>
<title>primera foto / first photo</title>

<link>http://neuromancer.inf.um.es/fm/primera-foto--first-photo.html</link>
<comments>http://neuromancer.inf.um.es/fm/primera-foto--first-photo.html#disqus_thread</comments>
<pubDate>Fri, 08 May 2009 20:02:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/primera-foto--first-photo.html</guid>
<description><![CDATA[primera foto / first photo, originally uploaded by dsevilla.                              Claramente se me ve el parecido, ¿verdad? Llamémosle su primera foto "lo-fi" :)You clearly see the resemblance, right? Let's call it his first "lo-fi" photo :)]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/3513736688/" title="photo sharing"><img src="http://farm4.static.flickr.com/3370/3513736688_6bbd615446.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/3513736688/">primera foto / first photo</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                           <br/><p><br/>   Claramente se me ve el parecido, ¿verdad? Llamémosle su primera foto "lo-fi" :)<br /><br/><br /><br/>You clearly see the resemblance, right? Let's call it his first "lo-fi" photo :)<br/></p>]]></content:encoded>
</item>
<item>
<title>trapped tree</title>

<link>http://neuromancer.inf.um.es/fm/trapped-tree.html</link>
<comments>http://neuromancer.inf.um.es/fm/trapped-tree.html#disqus_thread</comments>
<pubDate>Wed, 29 Apr 2009 08:27:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/trapped-tree.html</guid>
<description><![CDATA[trapped tree, originally uploaded by dsevilla.                            Norita 66 + Noritar 80mm/2 + Fuji RAP 100F]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/3484626252/" title="photo sharing"><img src="http://farm4.static.flickr.com/3311/3484626252_7873d9c981.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/3484626252/">trapped tree</a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                         <br/><p><br/>   Norita 66 + Noritar 80mm/2 + Fuji RAP 100F<br/></p>]]></content:encoded>
</item>
<item>
<title>Blogs para estar al día de C++</title>

<link>http://neuromancer.inf.um.es/fm/blogs-para-estar-al-dia-de-c.html</link>
<comments>http://neuromancer.inf.um.es/fm/blogs-para-estar-al-dia-de-c.html#disqus_thread</comments>
<pubDate>Wed, 22 Apr 2009 19:30:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/blogs-para-estar-al-dia-de-c.html</guid>
<description><![CDATA[Se admiten sugerencias, y los pongo aquí para tenerlos accesibles:    Sutter's Mill, de Herb Sutter.   Visual C++ Team Blog, util para estar al día de las mejoras de C++0x.       C++ Soup!. Impresionante. Ojo a esta entrada.    C++ truths, que casualmente es del grupo de investigación donde estuve en EEUU: DOC group (Distributed Object Computing Group), los desarrolladores de ACE y TAO.¿Más suger[...]]]></description>
        <content:encoded><![CDATA[Se admiten sugerencias, y los pongo aquí para tenerlos accesibles:<br/><br/><ul><br/>    <li><a href="http://herbsutter.wordpress.com/">Sutter's Mill</a>, de Herb Sutter.</li><br/>   <li><a href="http://blogs.msdn.com/vcblog/">Visual C++ Team Blog</a>, util para estar al día de las mejoras de C++0x.</li><br/>       <li><a href="http://blog.cplusplus-soup.com/">C++ Soup!</a>. Impresionante. Ojo a <a href="http://blog.cplusplus-soup.com/2009/03/gcc-c0x-features-exploration.html">esta entrada</a>.</li><br/>    <li><a href="http://cpptruths.blogspot.com/">C++ truths</a>, que casualmente es del grupo de investigación donde estuve en EEUU: DOC group (Distributed Object Computing Group), los desarrolladores de ACE y TAO.</li></ul><br/><br/>¿Más sugerencias?]]></content:encoded>
</item>
<item>
<title>Cálculo de la FFT con metaprogramación en C++</title>

<link>http://neuromancer.inf.um.es/fm/calculo-de-la-fft-con-metaprogramacion-en-c.html</link>
<comments>http://neuromancer.inf.um.es/fm/calculo-de-la-fft-con-metaprogramacion-en-c.html#disqus_thread</comments>
<pubDate>Wed, 22 Apr 2009 17:25:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/calculo-de-la-fft-con-metaprogramacion-en-c.html</guid>
<description><![CDATA[Me ha parecido curioso. C++ es muy útil para poner al compilador a trabajar para generar de antemano valores que de otra manera tendrían que estar calculados por una función. Como un ejemplo extremo, se puede ver una implementación de la función FFT (transformación rápida de Fourier) en C++ con metaprogramación. Esta implementación funciona unas 4 veces más rápido que el algoritmo, ya que todo el[...]]]></description>
        <content:encoded><![CDATA[Me ha parecido curioso. C++ es muy útil para poner al compilador a trabajar para generar de antemano valores que de otra manera tendrían que estar calculados por una función. Como un ejemplo extremo, se puede ver una implementación de la función FFT (transformación rápida de Fourier) en <a href="http://www.oonumerics.org/blitz/examples/fft.html">C++ con metaprogramación</a>. Esta implementación funciona unas 4 veces más rápido que el algoritmo, ya que todo el trabajo de precálculo lo hace el compilador.]]></content:encoded>
</item>
<item>
<title>.</title>

<link>http://neuromancer.inf.um.es/fm/post-2009-4-21.html</link>
<comments>http://neuromancer.inf.um.es/fm/post-2009-4-21.html#disqus_thread</comments>
<pubDate>Tue, 21 Apr 2009 18:33:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/post-2009-4-21.html</guid>
<description><![CDATA[, originally uploaded by dsevilla.                                Long ago in a forgotten flower...Nikon D50 + Tamron 90mm macro + rawstudio.]]></description>
        <content:encoded><![CDATA[<div><br/>       <a href="http://www.flickr.com/photos/dsevilla/3463367392/" title="photo sharing"><img src="http://farm4.static.flickr.com/3657/3463367392_2fa0a34332.jpg" alt="" /></a><br/><br /><br/>        <a href="http://www.flickr.com/photos/dsevilla/3463367392/"></a>, originally uploaded by <a href="http://www.flickr.com/people/dsevilla/">dsevilla</a>.<br/></div><br/>                             <br/><p><br/>   Long ago in a forgotten flower...<br /><br/><br /><br/>Nikon D50 + Tamron 90mm macro + rawstudio.<br/></p>]]></content:encoded>
</item>
<item>
<title>10 tutoriales interesantes de Blender</title>

<link>http://neuromancer.inf.um.es/fm/10-tutoriales-interesantes-de-blender.html</link>
<comments>http://neuromancer.inf.um.es/fm/10-tutoriales-interesantes-de-blender.html#disqus_thread</comments>
<pubDate>Mon, 20 Apr 2009 15:54:00 +0002</pubDate>
<dc:creator>diego sevilla</dc:creator>
<category><![CDATA[general]]></category>
<guid isPermaLink="false">http://neuromancer.inf.um.es/fm/10-tutoriales-interesantes-de-blender.html</guid>
<description><![CDATA[Vía.]]></description>
        <content:encoded><![CDATA[<a href="http://www.kumailht.com/blog/design/10-blender-3d-tutorials-worth-a-look/">Vía</a>.]]></content:encoded>
</item>
</channel>
</rss>
