<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title><![CDATA[Stefano Rodighiero — Stream]]></title>
<description><![CDATA[Stefano Rodighiero — Stream]]></description>
<link>https://stefanorodighiero.net/blog/</link>
<lastBuildDate>Thu, 19 Feb 2026 20:33:25 +0100</lastBuildDate>
<item>
  <title><![CDATA[Emacs config size]]></title>
  <description><![CDATA[
<p>
<a href="https://irreal.org/blog/?p=13618">Let’s Play How Big Is Your Emacs Config?</a>
</p>

<p>
In my case:
</p>

<div class="org-src-container">
<pre class="src src-nil">wc -l .emacs.d/lisp/larsen-* .emacs.d/init.el | ag total
    2400 total
</pre>
</div>

<p>
<b>Also</b>
</p>

<ul class="org-ul">
<li><a href="https://stefanorodighiero.net/blog/emacs-conf-changes-in-2025.html">My Emacs configuration changes in 2025</a></li>
<li><a href="https://stefanorodighiero.net/blog/when-did-you-start-using-emacs.html">When did you start using Emacs?</a></li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[emacs]]></category>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/emacs-config-size.html</link>
  <guid>https://stefanorodighiero.net/blog/emacs-config-size.html</guid>
  <pubDate>Thu, 19 Feb 2026 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[A dedicated blog instance for links]]></title>
  <description><![CDATA[
<p>
I decided to separate normal posts and links posts into two separate blog instances: <a href="https://stefanorodighiero.net/blog/">blog</a> and <a href="https://stefanorodighiero.net/linkage/">linkage</a>.
</p>
<div id="outline-container-org45f9ebf" class="outline-2">
<h2 id="org45f9ebf">Managing multiple blog instances with org-static-blog</h2>
<div class="outline-text-2" id="text-org45f9ebf">
<p>
By itself, <a href="https://github.com/bastibe/org-static-blog">org-static-blog</a> does not support multiple blog instances,
but it's quite easy to obtain a similar feature.
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defvar</span> <span class="org-variable-name">+my-blogs+</span>
  '((blog . ((org-static-blog-publish-title . <span class="org-string">"Stefano Rodighiero &#8212; Stream"</span>)
             (org-static-blog-publish-url . <span class="org-string">"https://stefanorodighiero.net/blog/"</span>)
             <span class="org-comment-delimiter">;; </span><span class="org-comment">... and so on ...
</span>             ))
    (linkage . ((org-static-blog-publish-title . <span class="org-string">"Stefano Rodighiero &#8212; Linkage"</span>)
                (org-static-blog-publish-url . <span class="org-string">"https://stefanorodighiero.net/linkage/"</span>)
                <span class="org-comment-delimiter">;; </span><span class="org-comment">... and so on ...
</span>                ))))

(<span class="org-keyword">defun</span> <span class="org-function-name">select-active-blog</span> (blog-name)
  (<span class="org-keyword">interactive</span> (list (intern (completing-read <span class="org-string">"Select active blog for publication: "</span>
                                              (mapcar #'car +my-blogs+)))))
  (<span class="org-keyword">let</span> ((blog-options (cdr (assoc blog-name +my-blogs+))))
    (message <span class="org-string">"Setting active blog: %s"</span> blog-name)
    (<span class="org-keyword">dolist</span> (option-name (mapcar #'car blog-options))
      (set option-name (cdr (assoc option-name blog-options))))))
</pre>
</div>

<p>
Then <code>org-static-blog</code> functions can be advised so that <code>select-active-blog</code> is called before the operations.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(advice-add 'org-static-blog-publish <span class="org-builtin">:before</span> (<span class="org-keyword">lambda</span> (<span class="org-type">&amp;rest</span> args)
                                               (call-interactively 'select-active-blog)))
</pre>
</div>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[emacs]]></category>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/linkage-dedicated-blog.html</link>
  <guid>https://stefanorodighiero.net/blog/linkage-dedicated-blog.html</guid>
  <pubDate>Sat, 17 Jan 2026 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[My Emacs configuration changes in 2025]]></title>
  <description><![CDATA[
<pre class="example" id="org0aeb0e4">
$ git diff tags/2024...tags/2025 --stat | ag changed
 38 files changed, 540 insertions(+), 409 deletions(-)
</pre>

<p>
A list of the main changes (introducing or eliminating
packages, structural changes, important changes in the interface).
</p>

<table>


<colgroup>
<col  class="org-left">

<col  class="org-right">

<col  class="org-left">
</colgroup>
<tbody>
<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/0441b30"><code>0441b30</code></a></td>
<td class="org-right">2025-01-04</td>
<td class="org-left"><a href="https://github.com/Fuco1/dired-hacks/tree/2c1234592aee91dcd9401bcd67213e6a4a464fd9#dired-subtree">dired-subtree</a> configuration</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/4fc34aa"><code>4fc34aa</code></a></td>
<td class="org-right">2025-02-04</td>
<td class="org-left">switch to doom-tomorrow-night as default</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/3100c81"><code>3100c81</code></a></td>
<td class="org-right">2025-02-05</td>
<td class="org-left">+ <a href="https://github.com/magit/forge">forge</a></td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/90dfc96"><code>90dfc96</code></a></td>
<td class="org-right">2025-02-05</td>
<td class="org-left">+ <a href="https://github.com/alphapapa/org-sidebar">org-sidebar</a></td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/5318eb6"><code>5318eb6</code></a></td>
<td class="org-right">2025-02-16</td>
<td class="org-left">switch to sqlformat</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/6eddac8"><code>6eddac8</code></a></td>
<td class="org-right">2025-02-16</td>
<td class="org-left">+ <a href="https://github.com/minad/vertico">vertico</a> + <a href="https://github.com/minad/corfu">corfu</a> + <a href="https://github.com/minad/marginalia">marginalia</a> + <a href="https://github.com/oantolin/orderless">orderless</a> + <a href="https://github.com/minad/consult">consult</a></td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/291089c"><code>291089c</code></a></td>
<td class="org-right">2025-02-16</td>
<td class="org-left">combo for consult-line</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/0de118b"><code>0de118b</code></a></td>
<td class="org-right">2025-02-21</td>
<td class="org-left">trying <a href="https://github.com/emacs-tree-sitter/treesit-fold">treesit-fold</a> instead of yafolding</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/e54719f"><code>e54719f</code></a></td>
<td class="org-right">2025-02-21</td>
<td class="org-left"><a href="https://github.com/emacs-sideline/sideline">sideline</a> + <a href="https://github.com/dengste/minimap">minimap</a> (WIP)</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/a030077"><code>a030077</code></a></td>
<td class="org-right">2025-03-07</td>
<td class="org-left">+ <a href="https://elpa.gnu.org/packages/colorful-mode.html">colorful</a> package</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/bf09612"><code>bf09612</code></a></td>
<td class="org-right">2025-03-08</td>
<td class="org-left">using <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html">hideshow</a> instead of treesit-fold, more versatile</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/801fddf"><code>801fddf</code></a></td>
<td class="org-right">2025-03-15</td>
<td class="org-left"><a href="https://github.com/emacsorphanage/git-gutter-fringe">git in fringes</a></td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/d91e87d"><code>d91e87d</code></a></td>
<td class="org-right">2025-03-15</td>
<td class="org-left">Personalized fringe bitmap for Flymake</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/1e56038"><code>1e56038</code></a></td>
<td class="org-right">2025-03-15</td>
<td class="org-left">Integration with Ollama (<a href="https://github.com/s-kostyaev/ellama">Ellama</a>)</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/169efab"><code>169efab</code></a></td>
<td class="org-right">2025-06-15</td>
<td class="org-left">minimal init messages</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/f42b4b6"><code>f42b4b6</code></a></td>
<td class="org-right">2025-06-20</td>
<td class="org-left">Jira integration (using auth-info)</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/9000572"><code>9000572</code></a></td>
<td class="org-right">2025-09-17</td>
<td class="org-left">renamed larsen-ibuffer -&gt; larsen-buffer; added <a href="https://github.com/florommel/bufferlo">bufferlo</a> package</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/eedc448"><code>eedc448</code></a></td>
<td class="org-right">2025-09-19</td>
<td class="org-left"><a href="https://emacs.stackexchange.com/questions/85040/adjusting-faces-for-treemacs">better configuration for the background</a></td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/4db8195"><code>4db8195</code></a></td>
<td class="org-right">2025-10-08</td>
<td class="org-left">new work projects agenda view</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/2c0cb99"><code>2c0cb99</code></a></td>
<td class="org-right">2025-11-20</td>
<td class="org-left">Switch to <a href="https://github.com/joaotavora/sly">Sly</a> (from Slime)</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/d65d153"><code>d65d153</code></a></td>
<td class="org-right">2025-11-20</td>
<td class="org-left">more adjustments for Sly</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/147e53c"><code>147e53c</code></a></td>
<td class="org-right">2025-11-20</td>
<td class="org-left">+ <a href="https://deepwiki.com/oantolin/embark">embark</a></td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/1123bd1"><code>1123bd1</code></a></td>
<td class="org-right">2025-11-20</td>
<td class="org-left">setup for using and exporting GPX files</td>
</tr>

<tr>
<td class="org-left"><a href="https://github.com/larsen/emacs-configuration/commit/8f2db38"><code>8f2db38</code></a></td>
<td class="org-right">2025-12-30</td>
<td class="org-left"><a href="https://stefanorodighiero.net/blog/extending-image-dired.html">extending image-dired to show image size</a></td>
</tr>
</tbody>
</table>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[emacs]]></category>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/emacs-conf-changes-in-2025.html</link>
  <guid>https://stefanorodighiero.net/blog/emacs-conf-changes-in-2025.html</guid>
  <pubDate>Wed, 31 Dec 2025 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Books read in 2025]]></title>
  <description><![CDATA[

<figure id="org177cc32">
<img src="./images/books2025.png" alt="books2025.png">

</figure>

<table>


<colgroup>
<col  class="org-left">

<col  class="org-left">

<col  class="org-left">

<col  class="org-right">

<col  class="org-right">

<col  class="org-right">

<col  class="org-left">
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Author</th>
<th scope="col" class="org-left">&#xa0;</th>
<th scope="col" class="org-left">Title</th>
<th scope="col" class="org-right">Pages</th>
<th scope="col" class="org-right">Started</th>
<th scope="col" class="org-right">Finished</th>
<th scope="col" class="org-left">Category</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Zachary Tellman</td>
<td class="org-left">⭐</td>
<td class="org-left"><a href="https://www.librarything.com/work/23369111">Elements of Clojure</a></td>
<td class="org-right">119</td>
<td class="org-right">2025-01-01</td>
<td class="org-right">2025-01-13</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Gianni Solla</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/30452698">Il ladro di quaderni</a></td>
<td class="org-right">256</td>
<td class="org-right">2025-01-01</td>
<td class="org-right">2025-01-02</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Kent Beck</td>
<td class="org-left">⭐</td>
<td class="org-left"><a href="https://www.librarything.com/work/5148436">Smalltalk Best Practice Patterns</a></td>
<td class="org-right">215</td>
<td class="org-right">2025-01-13</td>
<td class="org-right">2025-01-20</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Leonardo Sciascia</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/33117410">Il contesto</a></td>
<td class="org-right">114</td>
<td class="org-right">2025-01-25</td>
<td class="org-right">2025-01-26</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Ian McEwan</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/12485472/t/Sweet-Tooth">Sweet Tooth</a></td>
<td class="org-right">370</td>
<td class="org-right">2025-02-02</td>
<td class="org-right">2025-02-08</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Michał "phoe" Herda</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/25593121/t/The-Common-Lisp-Condition-System-Beyond-Exception-Handling-with-Control-Flow-Mechanisms">The Common Lisp Condition System</a></td>
<td class="org-right">320</td>
<td class="org-right">2025-02-09</td>
<td class="org-right">2025-02-16</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Neil MacGregor</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/15467055/book/281506175">Germany: Memories of a Nation</a></td>
<td class="org-right">563</td>
<td class="org-right">2025-02-22</td>
<td class="org-right">2025-03-09</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Eric Evans</td>
<td class="org-left">⭐</td>
<td class="org-left"><a href="https://www.librarything.com/work/16754/t/Domain-Driven-Design-Tackling-Complexity-in-the-Heart-of-Software">Domain-Driven Design</a></td>
<td class="org-right">560</td>
<td class="org-right">2025-02-28</td>
<td class="org-right">2025-06-26</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Vittorio Sermonti</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/1519037/book/283635990">L'inferno di Dante</a></td>
<td class="org-right">555</td>
<td class="org-right">2025-03-25</td>
<td class="org-right">2025-04-13</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Roberto Bolaño</td>
<td class="org-left">⭐</td>
<td class="org-left"><a href="https://www.librarything.com/work/19247877/t/2666">2666</a></td>
<td class="org-right">963</td>
<td class="org-right">2025-04-01</td>
<td class="org-right">2025-05-09</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">James Hawes</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/19374797/t/The-Shortest-History-of-Germany">The Shortest History of Germany</a></td>
<td class="org-right">227</td>
<td class="org-right">2025-05-10</td>
<td class="org-right">2025-05-22</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Leonardo Sciascia</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/131116/book/286996172">Il giorno della civetta</a></td>
<td class="org-right">137</td>
<td class="org-right">2025-05-23</td>
<td class="org-right">2025-05-23</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Leonardo Sciascia</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/512743/t/One-Way-or-Another">Todo Modo</a></td>
<td class="org-right">121</td>
<td class="org-right">2025-05-24</td>
<td class="org-right">2025-05-25</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Judea Pearl, Dana Mackenzie</td>
<td class="org-left">⭐</td>
<td class="org-left"><a href="https://www.librarything.com/work/21656998/">The Book of Why</a></td>
<td class="org-right">372</td>
<td class="org-right">2025-07-12</td>
<td class="org-right">2025-08-24</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Barney White-Spunner</td>
<td class="org-left">⭐</td>
<td class="org-left"><a href="https://www.librarything.com/work/27225153">Berlin: The Story of a City</a></td>
<td class="org-right">448</td>
<td class="org-right">2025-07-12</td>
<td class="org-right">2025-08-16</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Seishi Yokomizo</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/23934723/t/The-Honjin-Murders">Il detective Kindaichi</a></td>
<td class="org-right">145</td>
<td class="org-right">2025-08-03</td>
<td class="org-right">2025-08-10</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Albert Hofmann</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/540766/t/LSD-My-Problem-Child-Reflections-on-Sacred-Drugs-Mysticism-and-Science">LSD Il mio bambino difficile</a></td>
<td class="org-right">175</td>
<td class="org-right">2025-08-25</td>
<td class="org-right">2025-09-04</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Neal Stephenson</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/15387480/t/Seveneves">Seveneves</a></td>
<td class="org-right">861</td>
<td class="org-right">2025-09-05</td>
<td class="org-right">2025-09-19</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Simon Masoned</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/27627233/t/A-Killing-in-November">Un omicidio a Novembre</a></td>
<td class="org-right">382</td>
<td class="org-right">2025-10-05</td>
<td class="org-right">2025-10-08</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Ursula K. Le Guin</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/1581326/t/A-Wizard-of-Earthsea">A wizard of Earthsea</a></td>
<td class="org-right">167</td>
<td class="org-right">2025-09-20</td>
<td class="org-right">2025-10-26</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">James Rebanks</td>
<td class="org-left">⭐</td>
<td class="org-left"><a href="https://www.librarything.com/work/15462714/book/298654732">The Shepherd's Life</a></td>
<td class="org-right">287</td>
<td class="org-right">2025-10-25</td>
<td class="org-right">2025-11-12</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Kent Beck</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/31208389/book/301827922">Tidy First?</a></td>
<td class="org-right">92</td>
<td class="org-right">2025-12-06</td>
<td class="org-right">2025-12-06</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Tanya Reilly</td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><a href="https://www.librarything.com/work/28042662/">The Staff Engineer's Path</a></td>
<td class="org-right">311</td>
<td class="org-right">2025-12-06</td>
<td class="org-right">2025-12-28</td>
<td class="org-left">N</td>
</tr>
</tbody>
<tbody>
<tr>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-right">7760</td>
<td class="org-right">&#xa0;</td>
<td class="org-right">&#xa0;</td>
<td class="org-left">&#xa0;</td>
</tr>
</tbody>
</table>

<p>
(⭐ marks books I particularly liked)
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/books-read-in-2025.html</link>
  <guid>https://stefanorodighiero.net/blog/books-read-in-2025.html</guid>
  <pubDate>Tue, 30 Dec 2025 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Extending image-dired]]></title>
  <description><![CDATA[
<p>
Emacs' <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Image_002dDired.html">image-dired</a> is a companion package to dired that makes it easier to
browse images and to do some very basic image editing.
It is a perfect example of how Emacs can be extended to
accomplish tasks that go beyond text manipulation.
</p>

<p>
I will not go through the details of how to use it, but I
will illustrate a couple of things I recently added to it in my configuration.
</p>

<p>
I typically use image-dired to manipulate pictures that accompany blog
posts and other stuff I publish on my personal website. These pictures
are often exported from Google Photos, and when that is the case their
size is usually not suitable for web.
</p>

<p>
So, I want to be able to know their resolution and, when it is too
high, to quickly resize them.
</p>
<div id="outline-container-org54412c9" class="outline-2">
<h2 id="org54412c9">More details in the header line</h2>
<div class="outline-text-2" id="text-org54412c9">
<p>
Let's tackle the first problem first. The image-dired header line only
displays the name and the size of the the image file.
</p>

<p>
Unfortunately, image-dired does not provide a direct way to customize
the header line format, so I have to recur to advicing.
</p>

<p>
The general idea of <i>function advicing</i> is to change the behavior of an
existing function without altering its original code.  More
specifically, it allows to provide a new function that is called
<code>:before</code> or <code>:after</code> each call to the original function, or even to
replace the original function into a new one that can intercept the
function call and completely control what is returned (this function
composition method is called <code>:around</code>). Refer to <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Advising-Functions.html">the manual</a> for further
options and instructions.
</p>

<p>
In general, I tend to avoid functions advicing because it creates an
invisible layer of indirection between the function definition and its
behaviour; in other words, it makes it impossible to know the real
result of a function call by just looking at the code of its
implementation.
</p>

<p>
Anyway, here my code:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">my/image-size</span> (file)
  (<span class="org-keyword">with-temp-buffer</span>
    (call-process <span class="org-string">"identify"</span> nil t nil <span class="org-string">"-format"</span> <span class="org-string">"%wx%h"</span> file )
    (buffer-string)))

(<span class="org-keyword">defun</span> <span class="org-function-name">my/image-dired-enrich-properties</span> (orig-fun buf file image-count props comment)
  (<span class="org-keyword">let</span> ((orig-str (apply orig-fun (list buf file image-count props comment)))
        (size (my/image-size file)))
    (concat orig-str <span class="org-string">" "</span> size)))

(advice-add 'image-dired-format-properties-string <span class="org-builtin">:around</span> #'my/image-dired-enrich-properties)
</pre>
</div>

<p>
The original function is <code>image-dired-format-properties-string</code>.  I
encapsulated a call to the external tool identify (part of
ImageMagick) into <code>my/image-size</code>, which I then call to add that
particular bit of information to the header line string.  In what is a
typical <code>:around</code> composition pattern, my advice function calls the
original function, then adds extra information to the original input.
</p>

<p>
Here an example of the results:
</p>


<figure id="org795da95">
<img src="./images/image-dired-enrich-properties.png" alt="image-dired-enrich-properties.png">

</figure>
</div>
</div>
<div id="outline-container-orgedc2f84" class="outline-2">
<h2 id="orgedc2f84">Interactively resizing images</h2>
<div class="outline-text-2" id="text-orgedc2f84">
<p>
The mechanism here is even simpler. We just need to provide a function
that can resize an image (again, using an utility courtesy of
ImageMagick), and wrap it in a interactive function we can call when
we are in the image-dired buffer.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">my/resize-image</span> (file size)
  <span class="org-doc">"Resize the image in FILE to the specified SIZE (interpreted as a percentage). "</span>
  (call-process <span class="org-string">"magick"</span> nil t nil file <span class="org-string">"-resize"</span> (format <span class="org-string">"%d%%"</span> size) file))

(<span class="org-keyword">defun</span> <span class="org-function-name">image-dired-thumbnail-resize-image</span> ()
  <span class="org-doc">"Resize the image at point. The size is specified at the prompt as a percentage of the original size."</span>
  (<span class="org-keyword">interactive</span> nil image-dired-thumbnail-mode)
  (<span class="org-keyword">if</span> (not (image-dired-image-at-point-p))
      (message <span class="org-string">"No thumbnail at point"</span>)
    (<span class="org-keyword">let*</span> ((file (image-dired-original-file-name))
           (defdir default-directory))
      (<span class="org-keyword">with-temp-buffer</span>
        (<span class="org-keyword">setq</span> default-directory defdir)
        (<span class="org-keyword">if</span> (eq 0 (my/resize-image file (read-number <span class="org-string">"New size (%): "</span> 50)))
            (message <span class="org-string">"Successfully resized image"</span>)
          (<span class="org-warning">error</span> <span class="org-string">"Could not resize image: %s"</span>
                 (string-replace <span class="org-string">"\n"</span> <span class="org-string">""</span> (buffer-string))))))))
</pre>
</div>

<p>
If we want, we can even map this function to a keystroke, manipulating its specific keymap.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(keymap-set image-dired-thumbnail-mode-map <span class="org-string">"Z"</span> 'image-dired-thumbnail-resize-image)
</pre>
</div>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> <a href="https://stefanorodighiero.net/blog/tag-programming.html">programming</a> </div></div>]]></description>
  <category><![CDATA[emacs]]></category>
  <category><![CDATA[programming]]></category>
  <link>https://stefanorodighiero.net/blog/extending-image-dired.html</link>
  <guid>https://stefanorodighiero.net/blog/extending-image-dired.html</guid>
  <pubDate>Fri, 05 Dec 2025 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[An Emacs Lisp macro to parse arguments in shell scripts]]></title>
  <description><![CDATA[
<p>
My Emacs system sometimes creeps out into the shell.  This usually
happens when I want to provide an additional entry point to data I
maintain using Emacs.
</p>

<p>
This means that in my <code>~/bin</code> I have a few scripts, written in Emacs
Lisp, that are meant to be run from the command line, outside of an
Emacs client.
</p>

<p>
With that, it comes the need to parse command line parameters.
</p>

<p>
After writing the same code a couple of times, and since back then I
could not find an obvious other choice to do the same thing, I decided
it was a good use case for a macro, which I called <code>with-positional-args</code>.
</p>

<p>
Here how it looks like in user-space. This is part of a script I use
to search into annotated PDFs in a directory:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">#!/usr/local/bin/emacs --script

<span class="org-comment-delimiter">;; </span><span class="org-comment">... omissis ...
</span><span class="org-comment-delimiter">;; </span><span class="org-comment">(preparing load-path and requiring a couple
</span><span class="org-comment-delimiter">;; </span><span class="org-comment">of features, including the one that implements
</span><span class="org-comment-delimiter">;; </span><span class="org-comment">with-positional-args)
</span>
(<span class="org-keyword">defun</span> <span class="org-function-name">pdf-search</span> (pattern path)
  <span class="org-comment-delimiter">;; </span><span class="org-comment">the details are irrelevant in this context
</span>  )

<span class="org-comment-delimiter">;; </span><span class="org-comment">Here we go!
</span>(<span class="org-keyword">with-positional-args</span> ((pattern <span class="org-builtin">:mandatory</span> <span class="org-string">"You must provide a PATTERN"</span>)
                       (path <span class="org-builtin">:default</span> <span class="org-string">"."</span>))
  (pdf-search pattern path))
</pre>
</div>


<p>
And here the implementation:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp"><span class="org-comment-delimiter">;; </span><span class="org-comment">Caveman args list parsing
</span>(<span class="org-keyword">defun</span> <span class="org-function-name">arg-resolver</span> (arg-properties idx)
  (<span class="org-keyword">pcase</span> (car arg-properties)
    (<span class="org-builtin">:default</span>
     `(<span class="org-keyword">or</span> (nth ,idx command-line-args)
              ,(cadr arg-properties)))
    (<span class="org-builtin">:mandatory</span>
     `(<span class="org-keyword">or</span> (nth ,idx command-line-args)
          (<span class="org-warning">error</span> (<span class="org-keyword">or</span> ,(cadr arg-properties)
                     <span class="org-string">"Undefined error"</span>))))
    (_ (nth idx command-line-args))))

(<span class="org-keyword">defmacro</span> <span class="org-function-name">with-positional-args</span> (arglist <span class="org-type">&amp;rest</span> body)
  <span class="org-doc">"Bind command-line arguments as per ARGLIST, then evaluate BODY.

Each element of ARGLIST has the form: (VAR) for optional argument, (VAR
:default VALUE) for specifying a default value when missing, (VAR
:mandatory [MSG]) for required arguments with optional error message
MSG."</span>
  (<span class="org-keyword">declare</span> (indent 1))
  `(<span class="org-keyword">let</span> ,(<span class="org-keyword">cl-loop</span> for (arg-name . arg-properties) in arglist
                  for idx from 3
                  collect `(,arg-name ,(arg-resolver
                                        arg-properties idx)))
     ,@body))
</pre>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/elisp-macro-for-shell-scripts.html</link>
  <guid>https://stefanorodighiero.net/blog/elisp-macro-for-shell-scripts.html</guid>
  <pubDate>Tue, 07 Oct 2025 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Camping in Stendenitz]]></title>
  <description><![CDATA[
<p>
This wasn't a lucky season for bikepacking—bad weather, mechanical
problems, and lack of time conspired against me. But I managed to
catch a break this weekend. I chose a campsite almost at random (I
just had a rough distance and direction in mind), but I hit the
jackpot.
</p>

<p>
It was a beautiful, quiet place, and I was assigned a
wonderful spot right in front of the lake. This will most likely be my
last night out this year, but it was a great one.
</p>

<style>
.gallery {
    position: relative;
}

.thumbs-wrapper {
    position: relative;
    max-width: 100%;
    overflow: hidden;
}

.thumbs-container {
    display: flex;
    flex-wrap: nowrap;
    justify-content: flex-start;
    position: relative;
    transition: transform 0.3s ease;
}

.thumb-wrapper {
    display: flex;
    flex-direction: column;
    align-items: center;
    flex-shrink: 0;
}

.thumb-wrapper img {

    height: 90px;
    width: auto;
    object-fit: cover;
    margin-right: 10px;
    margin-bottom: 10px;
    opacity: 0.8;
    cursor: pointer;
    transition: opacity 0.2s;

}

.thumb-wrapper img:hover {
    opacity: 1;
}

.thumb-caption {
    font-size: 12px;
    color: #666;
    margin-top: 5px;
    text-align: center;
    max-width: 100%;
    word-wrap: break-word;
}

/* Carousel navigation arrows */
.carousel-arrow {
    position: absolute;
    top: 30px;
    transform: translateY(-50%);
    background: rgba(0, 0, 0, 0.5);
    color: white;
    border: none;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    cursor: pointer;
    font-size: 20px;
    display: none;
    align-items: center;
    justify-content: center;
    z-index: 10;
    transition: background 0.2s;
}

.carousel-arrow:hover {
    background: rgba(0, 0, 0, 0.7);
}

.carousel-arrow.visible {
    display: flex;
}

.carousel-arrow-left {
    left: 5px;
}

.carousel-arrow-right {
    right: 5px;
}

/* Main expanded image container */
.container {
    position: relative;
    display: none;
    margin-top: 20px;
    padding: 15px;
    background: #f5f5f5;
    border-radius: 4px;
}

.container img {
    max-width: 100%;
    height: auto;
    cursor: pointer;
}

.imgtext {
    margin-top: 15px;
    color: #333;
    font-size: 16px;
    font-weight: 500;
}

.imgcaption {
    margin-top: 8px;
    color: #666;
    font-size: 14px;
}

/* Modal styles */
.modal {
    display: none;
    position: fixed;
    z-index: 1000;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.8);
    animation: fadeIn 0.3s;
}

@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

.modal-content {
    position: relative;
    margin: auto;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 90%;
    height: 90%;
    top: 5%;
}

.modal-image {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
}

.modal-caption {
    position: absolute;
    bottom: 20px;
    left: 20px;
    right: 20px;
    color: white;
    background: rgba(0, 0, 0, 0.7);
    padding: 15px;
    border-radius: 4px;
    max-width: 500px;
}

.modal-caption h3 {
    margin: 0 0 5px 0;
    font-size: 18px;
}

.modal-caption p {
    margin: 0;
    font-size: 14px;
}

.closebtn {
    position: absolute;
    top: 20px;
    right: 35px;
    color: white;
    font-size: 40px;
    font-weight: bold;
    cursor: pointer;
    transition: color 0.2s;
}

.closebtn:hover {
    color: #bbb;
}

.magnify-hint {
    font-size: 12px;
    color: #999;
    margin-top: 10px;
    font-style: italic;
}
</style>

<div class="gallery" id="gallery-stendenitz_2025">
    <div class="thumbs-wrapper">
        <button class="carousel-arrow carousel-arrow-left" onclick="scrollCarousel_stendenitz_2025('left')">‹</button>
        <button class="carousel-arrow carousel-arrow-right" onclick="scrollCarousel_stendenitz_2025('right')">›</button>

        <div class="thumbs-container" id="thumbs-container-stendenitz_2025">


             <div class="thumb-wrapper">
                 <img class="thumbnail_stendenitz2025"
                      src="images/stendenitz-1.jpg"
                      alt="undefined"
                      data-caption="undefined"
                      onclick="expandThumbnail_stendenitz_2025(this);">
                      <!--           <div class="thumb-caption">undefined</div> -->
             </div>

             <div class="thumb-wrapper">
                 <img class="thumbnail_stendenitz2025"
                      src="images/stendenitz-2.jpg"
                      alt="undefined"
                      data-caption="undefined"
                      onclick="expandThumbnail_stendenitz_2025(this);">
                      <!--           <div class="thumb-caption">undefined</div> -->
             </div>

             <div class="thumb-wrapper">
                 <img class="thumbnail_stendenitz2025"
                      src="images/stendenitz-3.jpg"
                      alt="undefined"
                      data-caption="undefined"
                      onclick="expandThumbnail_stendenitz_2025(this);">
                      <!--           <div class="thumb-caption">undefined</div> -->
             </div>

             <div class="thumb-wrapper">
                 <img class="thumbnail_stendenitz2025"
                      src="images/stendenitz-4.jpg"
                      alt="undefined"
                      data-caption="undefined"
                      onclick="expandThumbnail_stendenitz_2025(this);">
                      <!--           <div class="thumb-caption">undefined</div> -->
             </div>


        </div>
    </div>

    <!-- Main expanded image container -->
    <div class="container">
        <img id="expandedImg-stendenitz_2025">
        <div class="imgtext" id="imgtext-stendenitz_2025"></div>
        <div class="imgcaption" id="imgcaption-stendenitz_2025"></div>
        <div class="magnify-hint">Click image to magnify</div>
    </div>
</div>

<!-- Modal for magnified view -->
<div id="imageModal-stendenitz_2025" class="modal">
    <div class="modal-content">
        <span class="closebtn" onclick="closeModal_stendenitz_2025()">&times;</span>
        <img class="modal-image" id="modalImg-stendenitz_2025">
        <div class="modal-caption">
            <h3 id="modalTitle-stendenitz_2025"></h3>
            <p id="modalCaption-stendenitz_2025"></p>
        </div>
    </div>
</div>

<script>
(function() {
    var scrollPosition_stendenitz_2025 = 0;
    var container = document.getElementById('thumbs-container-stendenitz_2025');
    var wrapper = container.parentElement;
    var leftArrow = wrapper.querySelector('.carousel-arrow-left');
    var rightArrow = wrapper.querySelector('.carousel-arrow-right');

    function updateArrows_stendenitz_2025() {
        var containerWidth = container.scrollWidth;
        var wrapperWidth = wrapper.clientWidth;

        if (containerWidth > wrapperWidth) {
            if (scrollPosition_stendenitz_2025 > 0) {
                leftArrow.classList.add('visible');
            } else {
                leftArrow.classList.remove('visible');
            }

            if (scrollPosition_stendenitz_2025 < containerWidth - wrapperWidth) {
                rightArrow.classList.add('visible');
            } else {
                rightArrow.classList.remove('visible');
            }
        } else {
            leftArrow.classList.remove('visible');
            rightArrow.classList.remove('visible');
        }
    }

    window.scrollCarousel_stendenitz_2025 = function(direction) {
        var scrollAmount = 200;
        var containerWidth = container.scrollWidth;
        var wrapperWidth = wrapper.clientWidth;
        var maxScroll = containerWidth - wrapperWidth;

        if (direction === 'left') {
            scrollPosition_stendenitz_2025 = Math.max(0, scrollPosition_stendenitz_2025 - scrollAmount);
        } else {
            scrollPosition_stendenitz_2025 = Math.min(maxScroll, scrollPosition_stendenitz_2025 + scrollAmount);
        }

        container.style.transform = 'translateX(-' + scrollPosition_stendenitz_2025 + 'px)';
        updateArrows_stendenitz_2025();
    };

    window.expandThumbnail_stendenitz_2025 = function(imgs) {
        var expandImg = document.getElementById("expandedImg-stendenitz_2025");
        var imgText = document.getElementById("imgtext-stendenitz_2025");
        var imgCaption = document.getElementById("imgcaption-stendenitz_2025");

        expandImg.src = imgs.src;
        imgText.innerHTML = imgs.alt;
        imgCaption.innerHTML = imgs.dataset.caption || "";
        expandImg.parentElement.style.display = "block";
    };

    window.openModal_stendenitz_2025 = function(imgs) {
        var modal = document.getElementById("imageModal-stendenitz_2025");
        var modalImg = document.getElementById("modalImg-stendenitz_2025");
        var modalTitle = document.getElementById("modalTitle-stendenitz_2025");
        var modalCaption = document.getElementById("modalCaption-stendenitz_2025");

        modalImg.src = imgs.src;
        modalTitle.innerHTML = imgs.alt;
        modalCaption.innerHTML = imgs.dataset.caption || "";
        modal.style.display = "block";
    };

    window.closeModal_stendenitz_2025 = function() {
        document.getElementById("imageModal-stendenitz_2025").style.display = "none";
    };

    // Initialize on page load
    window.addEventListener('load', function() {
        updateArrows_stendenitz_2025();

        var expandedImg = document.getElementById("expandedImg-stendenitz_2025");
        if (expandedImg) {
            expandedImg.addEventListener("click", function() {
                var thumbs = document.querySelectorAll("#thumbs-container-stendenitz_2025 .thumb-wrapper img");
                for (var i = 0; i < thumbs.length; i++) {
                    if (thumbs[i].src === this.src) {
                        openModal_stendenitz_2025(thumbs[i]);
                        break;
                    }
                }
            });
        }

        var modal = document.getElementById("imageModal-stendenitz_2025");
        modal.addEventListener('click', function(event) {
            if (event.target === modal) {
                closeModal_stendenitz_2025();
            }
        });

        var firstThumb = document.querySelector("#thumbs-container-stendenitz_2025 .thumb-wrapper img");
        if (firstThumb) {
            expandThumbnail_stendenitz_2025(firstThumb);
        }
    });

    // Update arrows on window resize
    window.addEventListener('resize', function() {
        var containerWidth = container.scrollWidth;
        var wrapperWidth = wrapper.clientWidth;
        var maxScroll = containerWidth - wrapperWidth;
        scrollPosition_stendenitz_2025 = Math.min(scrollPosition_stendenitz_2025, maxScroll);
        container.style.transform = 'translateX(-' + scrollPosition_stendenitz_2025 + 'px)';
        updateArrows_stendenitz_2025();
    });
})();
</script>

<noscript>
<img src="https://via.placeholder.com/400?text=Gallery">
</noscript>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-bikepacking.html">bikepacking</a> <a href="https://stefanorodighiero.net/blog/tag-photos.html">photos</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[bikepacking]]></category>
  <category><![CDATA[photos]]></category>
  <link>https://stefanorodighiero.net/blog/camping-stendenitz.html</link>
  <guid>https://stefanorodighiero.net/blog/camping-stendenitz.html</guid>
  <pubDate>Sun, 07 Sep 2025 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Pain]]></title>
  <description><![CDATA[
<p>
<a href="https://fi-le.net/japanese/">On Language Learning</a>
</p>

<blockquote>
<p>
the appeal of this project was again the immense pain, in this case of
making any sense of a text which would give me headaches even in my
native language
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/pain.html</link>
  <guid>https://stefanorodighiero.net/blog/pain.html</guid>
  <pubDate>Sat, 26 Jul 2025 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Venetogravel 2025]]></title>
  <description><![CDATA[
<p>
Over the last weekend I partecipated to my second Venetogravel.  This
time following the Short Beach track, covering approximately 400
kilometers and 2200 meters of elevation.  The weather in the first two
day was not the best, but I still enjoyed it very much.
Here some stats and a small selection of pictures
</p>

<table>


<colgroup>
<col  class="org-left">

<col  class="org-right">

<col  class="org-right">

<col  class="org-left">

<col  class="org-left">

<col  class="org-left">

<col  class="org-left">
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">&#xa0;</th>
<th scope="col" class="org-right">Time in motion</th>
<th scope="col" class="org-right">Elapsed Time</th>
<th scope="col" class="org-left">↔</th>
<th scope="col" class="org-left">Avg speed</th>
<th scope="col" class="org-left">↗</th>
<th scope="col" class="org-left">↘</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">25/04</td>
<td class="org-right">06:43</td>
<td class="org-right">09:10</td>
<td class="org-left">132 km</td>
<td class="org-left">19.6 km/h</td>
<td class="org-left">110 m</td>
<td class="org-left">190 m</td>
</tr>

<tr>
<td class="org-left">26/04</td>
<td class="org-right">05:38</td>
<td class="org-right">08:29</td>
<td class="org-left">111 km</td>
<td class="org-left">19.7 km/h</td>
<td class="org-left">150 m</td>
<td class="org-left">120 m</td>
</tr>

<tr>
<td class="org-left">27/04</td>
<td class="org-right">06:16</td>
<td class="org-right">10:56</td>
<td class="org-left">101 km</td>
<td class="org-left">16.2 km/h</td>
<td class="org-left">1,380 m</td>
<td class="org-left">1,220 m</td>
</tr>

<tr>
<td class="org-left">28/04</td>
<td class="org-right">03:09</td>
<td class="org-right">04:29</td>
<td class="org-left">53.3 km</td>
<td class="org-left">16.9 km/h</td>
<td class="org-left">540 m</td>
<td class="org-left">640 m</td>
</tr>
</tbody>
</table>

<style>
.thumbs-container {
    display: flex;          /* Use flexbox for row alignment */
    flex-wrap: nowrap;      /* Ensure images stay in a single row */
    justify-content: flex-start; /* Align items to the left */
    position: relative;     /* Position the div relative to its normal position */
}

.thumbs-container img {
    max-width: 20%;       /* Set the maximum width for thumbnails */
    margin-right: 10px;
    margin-bottom: 10px;
    opacity: 0.8;
    cursor: pointer;
}
.thumbs-container img:hover {
  opacity: 1;
}

.thumbs-container img:last-child {
    margin-right: 0;        /* Remove margin from the last image */
}

/* The expanding image container (positioning is needed to position the close button and the text) */
.container {
  position: relative;
  display: none;
}

/* Expanding image text */
#imgtext {
  position: absolute;
  bottom: 15px;
  left: 15px;
  color: white;
  font-size: 20px;
}

/* Closable button inside the image */
.closebtn {
  position: absolute;
  top: 10px;
  right: 15px;
  color: white;
  font-size: 35px;
  cursor: pointer;
}
</style>

<script>
function expandThumbnail_venetogravel_2025(imgs) {
  // Get the expanded image
  var expandImg = document.getElementById("expandedImg-venetogravel_2025");
  // Get the image text
  var imgText = document.getElementById("imgtext");
  // Use the same src in the expanded image as the image being clicked on from the grid
  expandImg.src = imgs.src;
  // Use the value of the alt attribute of the clickable image as text inside the expanded image
  imgText.innerHTML = imgs.alt;
  // Show the container element (hidden with CSS)
  expandImg.parentElement.style.display = "block";
}
</script>

<div class="gallery">
<div class="thumbs-container">

       <img class="thumbnail-vg2025" src="images/vg2025-thumb.jpg" onclick="expandThumbnail_venetogravel_2025(this);">

       <img class="thumbnail-vg2025" src="images/vg2025-2-thumb.jpg" onclick="expandThumbnail_venetogravel_2025(this);">

       <img class="thumbnail-vg2025" src="images/vg2025-3-thumb.jpg" onclick="expandThumbnail_venetogravel_2025(this);">

       <img class="thumbnail-vg2025" src="images/vg2025-4-thumb.jpg" onclick="expandThumbnail_venetogravel_2025(this);">

</div>

<!-- The expanding image container -->
<div class="container">
  <!-- Close the image -->
  <span onclick="this.parentElement.style.display='none'" class="closebtn">&times;</span>

  <!-- Expanded image -->
  <img id="expandedImg-venetogravel_2025">

  <!-- Image text -->
  <div id="imgtext"></div>
</div>
</div>
<noscript>
<img src="images/vg2025-thumb.jpg">
</noscript>

<script>
  expandThumbnail_venetogravel_2025(document.getElementsByClassName("thumbnail-vg2025")[0]);
</script>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-bikepacking.html">bikepacking</a> <a href="https://stefanorodighiero.net/blog/tag-photos.html">photos</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[bikepacking]]></category>
  <category><![CDATA[photos]]></category>
  <link>https://stefanorodighiero.net/blog/venetogravel-2025.html</link>
  <guid>https://stefanorodighiero.net/blog/venetogravel-2025.html</guid>
  <pubDate>Wed, 30 Apr 2025 06:43:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Ingenious]]></title>
  <description><![CDATA[

<figure id="org8e01089">
<img src="./images/ingenious.png" alt="ingenious.png">

</figure>

<p>
I had it lying around for years, but about two weeks ago I finally
tried <a href="https://en.wikipedia.org/wiki/Ingenious_(board_game)">Ingenious</a> with a couple of friends.
</p>

<p>
It was very easy to learn, and enjoyable.
Now I want to try and implement a program that can play a game.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-games.html">games</a> </div></div>]]></description>
  <category><![CDATA[games]]></category>
  <link>https://stefanorodighiero.net/blog/ingenious.html</link>
  <guid>https://stefanorodighiero.net/blog/ingenious.html</guid>
  <pubDate>Sun, 06 Apr 2025 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[rando-planner v0.2]]></title>
  <description><![CDATA[
<p>
I created a 0.2 release for <a href="https://github.com/larsen/rando-planner">rando-planner</a>.
</p>


<figure id="org2b907f1">
<img src="./images/rando-planner-0-2-viewer-detail.png" alt="rando-planner-0-2-viewer-detail.png">

</figure>

<div id="outline-container-whats-changed" class="outline-2">
<h2 id="whats-changed">What's Changed</h2>
<div class="outline-text-2" id="text-whats-changed">
<ul class="org-ul">
<li>Different colors <a href="https://github.com/larsen/rando-planner/pull/50">https://github.com/larsen/rando-planner/pull/50</a></li>
<li>markers (circles) every N km
<a href="https://github.com/larsen/rando-planner/pull/56">https://github.com/larsen/rando-planner/pull/56</a></li>
<li>Option to configure average-speed day by day
<a href="https://github.com/larsen/rando-planner/pull/57">https://github.com/larsen/rando-planner/pull/57</a></li>
<li>Detail leaflet viewer <a href="https://github.com/larsen/rando-planner/pull/58">https://github.com/larsen/rando-planner/pull/58</a></li>
<li>Fullscreen button <a href="https://github.com/larsen/rando-planner/pull/66">https://github.com/larsen/rando-planner/pull/66</a></li>
<li>Support for user defined markers
<a href="https://github.com/larsen/rando-planner/pull/67">https://github.com/larsen/rando-planner/pull/67</a></li>
</ul>
</div>

<div id="outline-container-orge111570" class="outline-3">
<h3 id="orge111570">Reactions and follow ups</h3>
<div class="outline-text-3" id="text-orge111570">
<ul class="org-ul">
<li><span class="timestamp-wrapper"><span class="timestamp">&lt;2025-01-05 Sun&gt; </span></span> <a href="https://8stars.org/a/about/">Adam Rice</a> mentions a project that has features in
common: <a href="https://www.bestbikesplit.com/">Best Bike Split</a></li>
</ul>
</div>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-clojure.html">clojure</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[clojure]]></category>
  <link>https://stefanorodighiero.net/blog/rando-planner-v0.2.html</link>
  <guid>https://stefanorodighiero.net/blog/rando-planner-v0.2.html</guid>
  <pubDate>Mon, 06 Jan 2025 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Books read in 2024]]></title>
  <description><![CDATA[

<figure id="org3f78cc6">
<img src="./images/books2024.png" alt="books2024.png">

</figure>

<table>


<colgroup>
<col  class="org-left">

<col  class="org-left">

<col  class="org-right">

<col  class="org-right">

<col  class="org-right">

<col  class="org-left">
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Author</th>
<th scope="col" class="org-left">Title</th>
<th scope="col" class="org-right">Pages</th>
<th scope="col" class="org-right">Started</th>
<th scope="col" class="org-right">Finished</th>
<th scope="col" class="org-left">Category</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">David Byrne</td>
<td class="org-left"><a href="https://www.librarything.com/work/8427397/book/256594698">Diari della bicicletta</a></td>
<td class="org-right">382</td>
<td class="org-right">2024-01-10</td>
<td class="org-right">2024-01-20</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Ian McEwan</td>
<td class="org-left"><a href="https://www.librarything.com/work/7206/book/250228180">The Innocent</a></td>
<td class="org-right">226</td>
<td class="org-right">2024-01-23</td>
<td class="org-right">2024-01-30</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Alessandro Barbero</td>
<td class="org-left"><a href="https://www.librarything.com/work/4002851">Federico il Grande</a></td>
<td class="org-right">172</td>
<td class="org-right">2024-01-25</td>
<td class="org-right">2024-01-30</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Elizabeth Jane Howard</td>
<td class="org-left"><a href="https://www.librarything.com/work/57067">Gli anni della leggerezza</a></td>
<td class="org-right">600</td>
<td class="org-right">2024-02-02</td>
<td class="org-right">2024-02-13</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Jacques Le Goff</td>
<td class="org-left"><a href="https://www.librarything.com/work/24009383">Il Medioevo</a></td>
<td class="org-right">126</td>
<td class="org-right">2024-02-14</td>
<td class="org-right">2024-02-16</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Daniel C. Dennett</td>
<td class="org-left"><a href="https://www.librarything.com/work/18091946">From Bacteria to Bach and Back</a></td>
<td class="org-right">496</td>
<td class="org-right">2024-01-31</td>
<td class="org-right">2024-07-09</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">S.J. Morden</td>
<td class="org-left"><a href="https://www.librarything.com/work/25797004/book/206240090">Gallowglass</a></td>
<td class="org-right">373</td>
<td class="org-right">2024-05-15</td>
<td class="org-right">2024-05-25</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">David Spiegelhalter</td>
<td class="org-left"><a href="https://www.librarything.com/work/23069617">The Art of Statistics</a></td>
<td class="org-right">380</td>
<td class="org-right">2024-05-29</td>
<td class="org-right">2024-06-18</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">China Miéville</td>
<td class="org-left"><a href="https://www.librarything.com/work/7702396">The City and the City</a></td>
<td class="org-right">372</td>
<td class="org-right">2024-05-29</td>
<td class="org-right">2024-06-04</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Thomas Pynchon</td>
<td class="org-left"><a href="https://www.librarything.com/work/4918">The crying of lot 49</a></td>
<td class="org-right">142</td>
<td class="org-right">2024-07-02</td>
<td class="org-right">2024-07-12</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">K.J. Parker</td>
<td class="org-left"><a href="https://www.librarything.com/work/22619104/">Sixteen ways to defend a walled city</a></td>
<td class="org-right">350</td>
<td class="org-right">2024-07-15</td>
<td class="org-right">2024-07-26</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Will Ludwigsen</td>
<td class="org-left"><a href="https://www.librarything.com/work/32609910">A scout is brave</a></td>
<td class="org-right">158</td>
<td class="org-right">2024-07-24</td>
<td class="org-right">2024-07-24</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">George Polya</td>
<td class="org-left"><a href="https://www.librarything.com/work/7588">How to solve it</a></td>
<td class="org-right">253</td>
<td class="org-right">2024-07-23</td>
<td class="org-right">2024-08-15</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Joe Ide</td>
<td class="org-left"><a href="https://www.librarything.com/work/17763637">IQ</a></td>
<td class="org-right">336</td>
<td class="org-right">2024-08-11</td>
<td class="org-right">2024-08-13</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Jordan Ellenberg</td>
<td class="org-left"><a href="https://www.librarything.com/work/14820875">How not to be wrong</a></td>
<td class="org-right">437</td>
<td class="org-right">2024-08-18</td>
<td class="org-right">2024-10-16</td>
<td class="org-left">N</td>
</tr>

<tr>
<td class="org-left">Arkady &amp; Boris Strugatsky</td>
<td class="org-left"><a href="https://www.librarything.com/work/49011/book/262137788">Roadside picnic</a></td>
<td class="org-right">193</td>
<td class="org-right">2024-09-16</td>
<td class="org-right">2024-09-24</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Marco Malvaldi</td>
<td class="org-left"><a href="https://www.librarything.com/work/5576152">Briscola in cinque</a></td>
<td class="org-right">163</td>
<td class="org-right">2024-09-25</td>
<td class="org-right">2024-09-23</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Michael Warren Douglas</td>
<td class="org-left"><a href="https://www.librarything.com/work/19496634">git commit murder</a></td>
<td class="org-right">263</td>
<td class="org-right">2024-10-03</td>
<td class="org-right">2024-10-10</td>
<td class="org-left">F</td>
</tr>

<tr>
<td class="org-left">Stanislaw Lem</td>
<td class="org-left"><a href="https://www.librarything.com/work/18415">Solaris</a></td>
<td class="org-right">256</td>
<td class="org-right">2024-12-15</td>
<td class="org-right">2024-12-20</td>
<td class="org-left">F</td>
</tr>
</tbody>
<tbody>
<tr>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-right">5678</td>
<td class="org-right">&#xa0;</td>
<td class="org-right">&#xa0;</td>
<td class="org-left">&#xa0;</td>
</tr>
</tbody>
</table>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/books-read-in-2024.html</link>
  <guid>https://stefanorodighiero.net/blog/books-read-in-2024.html</guid>
  <pubDate>Tue, 31 Dec 2024 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[How I use :dbconnection in org files]]></title>
  <description><![CDATA[
<p>
In the post <a href="https://magnus.therning.org/2024-09-09-followup-on-secrets-in-my-work-notes.html">"Followup on secrets in my work notes"</a> Magnus Therning
mentions a feature in Org Babel I contributed to (in ob-sql.el, to be
more precise).
</p>

<p>
You can see <a href="https://stefanorodighiero.net/blog/a-patch-for-org-babel.html">my old post</a> for details about that feature, but basically,
the patch allows one to use a <code>:dbconnection</code> header argument in a
source block to reference a connection defined in
<code>sql-connection-alist</code>.
</p>

<p>
The question in Magnus' post is a signal somebody is actually using
this feature, so I am pleased. Perhaps I should also follow up,
describing how I use this feature in my workflow. This will constitute
another example of how to manage secrets.
</p>

<p>
I use Org, among other things, to keep work "lab notes" that usually
contain SQL queries on different databases.
</p>

<p>
At work, pretty much all databases are Postgresql or Redshift, and I
keep connection details in <code>~/.pgpass</code>, following this format:
</p>

<p>
In other words, every DB definition is made of two lines: the first is
a comment, with the name of the database (with no spaces); the second
contains the actual connection details.
</p>

<p>
In my Emacs configuration, then, I have this function:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">get-connection-alist</span> (filename)
  <span class="org-doc">"Gets PG connections details from ~/.pgpass file (FILENAME)."</span>
  (<span class="org-keyword">with-current-buffer</span> (find-file-noselect filename)
        (<span class="org-keyword">let</span> ((lines (split-string (buffer-string) <span class="org-string">"\n"</span> t)))
          (<span class="org-keyword">when</span> lines
            (<span class="org-keyword">cl-loop</span> for (k v) in (seq-partition lines 2)
                  collect (<span class="org-keyword">cl-destructuring-bind</span> (host port db user password)
                              (split-string v <span class="org-string">":"</span> nil)
                            `(,(replace-regexp-in-string <span class="org-string">"^#\s+"</span> <span class="org-string">""</span> k)
                              (sql-product 'postgres)
                              (sql-port ,(string-to-number port))
                              (sql-server ,host)
                              (sql-user ,user)
                              (sql-database ,db)
                              (sql-password ,password))))))))
</pre>
</div>

<p>
and
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">setq</span> sql-connection-alist (get-connection-alist <span class="org-string">"~/.pgpass"</span>))
</pre>
</div>

<p>
I use Emacs in daemon mode and it's not unusual Emacs to stay up for
weeks, so I also have an automatic way to incorporate <code>.pgpass</code> changes,
using <code>filenotify</code>.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(file-notify-add-watch
 <span class="org-string">"~/.pgpass"</span> '(change)
 (<span class="org-keyword">lambda</span> (evt)
   (<span class="org-keyword">setq</span> sql-connection-alist
         (get-connection-alist <span class="org-string">"~/.pgpass"</span>))))
</pre>
</div>
<div id="outline-container-org47ea9e1" class="outline-2">
<h2 id="org47ea9e1">Reactions and follow ups</h2>
<div class="outline-text-2" id="text-org47ea9e1">
<ul class="org-ul">
<li><a href="https://fosstodon.org/@baron42bba">Andreas Gerler</a> describes his approach and setup here: <a href="https://www.bundesbrandschatzamt.de/~baron/blog/20200110-emacs-sql.html">Emacs and SQL</a></li>
</ul>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/how-i-use-dbconnection-in-org.html</link>
  <guid>https://stefanorodighiero.net/blog/how-i-use-dbconnection-in-org.html</guid>
  <pubDate>Fri, 23 Aug 2024 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[The Hygieia Fountain in Hamburg]]></title>
  <description><![CDATA[
<p>
I recently spent a weekend in Hamburg to visit friends. While
exploring the city my attention was caught, for some reason, by the
fountain situated in the courtyard of the city hall, and the
sculptures that surround it. It's called <a href="https://de.wikipedia.org/wiki/Hygieia-Brunnen_(Hamburg)">Hygieia Fountain</a>.
</p>


<style>
.thumbs-container {
    display: flex;          /* Use flexbox for row alignment */
    flex-wrap: nowrap;      /* Ensure images stay in a single row */
    justify-content: flex-start; /* Align items to the left */
    position: relative;     /* Position the div relative to its normal position */
}

.thumbs-container img {
    max-width: 20%;       /* Set the maximum width for thumbnails */
    margin-right: 10px;
    margin-bottom: 10px;
    opacity: 0.8;
    cursor: pointer;
}
.thumbs-container img:hover {
  opacity: 1;
}

.thumbs-container img:last-child {
    margin-right: 0;        /* Remove margin from the last image */
}

/* The expanding image container (positioning is needed to position the close button and the text) */
.container {
  position: relative;
  display: none;
}

/* Expanding image text */
#imgtext {
  position: absolute;
  bottom: 15px;
  left: 15px;
  color: white;
  font-size: 20px;
}

/* Closable button inside the image */
.closebtn {
  position: absolute;
  top: 10px;
  right: 15px;
  color: white;
  font-size: 35px;
  cursor: pointer;
}
</style>

<script>
function expandThumbnail_hygieia(imgs) {
  // Get the expanded image
  var expandImg = document.getElementById("expandedImg-hygieia");
  // Get the image text
  var imgText = document.getElementById("imgtext");
  // Use the same src in the expanded image as the image being clicked on from the grid
  expandImg.src = imgs.src;
  // Use the value of the alt attribute of the clickable image as text inside the expanded image
  imgText.innerHTML = imgs.alt;
  // Show the container element (hidden with CSS)
  expandImg.parentElement.style.display = "block";
}
</script>

<div class="gallery">
<div class="thumbs-container">

       <img class="thumbnail-hygieia" src="images/hygieia-thumb.jpg" onclick="expandThumbnail_hygieia(this);">

       <img class="thumbnail-hygieia" src="images/hygieia-2-thumb.jpg" onclick="expandThumbnail_hygieia(this);">

</div>

<!-- The expanding image container -->
<div class="container">
  <!-- Close the image -->
  <span onclick="this.parentElement.style.display='none'" class="closebtn">&times;</span>

  <!-- Expanded image -->
  <img id="expandedImg-hygieia">

  <!-- Image text -->
  <div id="imgtext"></div>
</div>
</div>
<noscript>
<img src="images/hygieia-thumb.jpg">
</noscript>

<script>
  expandThumbnail_hygieia(document.getElementsByClassName("thumbnail-hygieia")[0]);
</script>

<blockquote>
<p>
Hygieia as the goddess of health and hygiene in Greek mythology and
its surrounding figures represents the power and pureness of the
water. It was built in remembrance of the cholera epidemic in 1892,
the former technical purpose was air cooling in the city hall
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-photos.html">photos</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[photos]]></category>
  <link>https://stefanorodighiero.net/blog/hygieia-fountain.html</link>
  <guid>https://stefanorodighiero.net/blog/hygieia-fountain.html</guid>
  <pubDate>Sun, 11 Aug 2024 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[1337]]></title>
  <description><![CDATA[

<figure id="orgd4e5169">
<img src="./images/statshunters-country-de.png" alt="statshunters-country-de.png">

</figure>

<p>
According to Statshunters so far I covered a non-random number of
squares in Germany.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/1337.html</link>
  <guid>https://stefanorodighiero.net/blog/1337.html</guid>
  <pubDate>Thu, 04 Jul 2024 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[BB(5)]]></title>
  <description><![CDATA[
<p>
<a href="https://www.quantamagazine.org/amateur-mathematicians-find-fifth-busy-beaver-turing-machine-20240702/">With Fifth Busy Beaver, Researchers Approach Computation’s Limits</a>
</p>

<p>
BB(5) has been verified to be equal to \(47,176,870\).
</p>

<p>
Years ago, when I was a student, I remember finding the University of
Waterloo's <a href="https://web.archive.org/web/20001010072304/http://www8.pair.com/mnajtiv/halt/paper/beaver.ps.gz">"Handout on The Busy Beaver Problem"</a> the easiest and most
succinct introduction to the topic. Later, I found Dewdney's piece
about busy beavers in the "The new Turing omnibus", perhaps a more
famous source.
</p>

<p>
Remarkably, Waterloo's handout already contained the result from
Marxen and Buntrock (1990), but it was a lower bound. Removing that
"&gt;" took 34 years. Here the table as presented in the handout:
</p>

<table>


<colgroup>
<col  class="org-right">

<col  class="org-right">

<col  class="org-right">

<col  class="org-left">
</colgroup>
<thead>
<tr>
<th scope="col" class="org-right">n</th>
<th scope="col" class="org-right">&Sigma;(n)</th>
<th scope="col" class="org-right">S(n)</th>
<th scope="col" class="org-left">Source</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-right">1</td>
<td class="org-right">1</td>
<td class="org-right">1</td>
<td class="org-left"><a href="https://dl.acm.org/doi/10.1145/321264.321270">Lin and Rado</a></td>
</tr>

<tr>
<td class="org-right">2</td>
<td class="org-right">4</td>
<td class="org-right">6</td>
<td class="org-left"><a href="https://dl.acm.org/doi/10.1145/321264.321270">Lin and Rado</a></td>
</tr>

<tr>
<td class="org-right">3</td>
<td class="org-right">6</td>
<td class="org-right">21</td>
<td class="org-left"><a href="https://dl.acm.org/doi/10.1145/321264.321270">Lin and Rado</a></td>
</tr>

<tr>
<td class="org-right">4</td>
<td class="org-right">13</td>
<td class="org-right">107</td>
<td class="org-left"><a href="https://www.ams.org/journals/mcom/1983-40-162/S0025-5718-1983-0689479-6/S0025-5718-1983-0689479-6.pdf">Brady</a></td>
</tr>

<tr>
<td class="org-right">5</td>
<td class="org-right">&gt;= 4,098</td>
<td class="org-right">&gt;= 47,176,870</td>
<td class="org-left"><a href="https://turbotm.de/~heiner/BB/mabu90.html">Marxen and Buntrock</a></td>
</tr>

<tr>
<td class="org-right">6</td>
<td class="org-right">&gt;= 95,524,079</td>
<td class="org-right">&gt;= 8,690,333,381,690,952</td>
<td class="org-left">Marxen (personal communication)</td>
</tr>
</tbody>
</table>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-math.html">math</a> <a href="https://stefanorodighiero.net/blog/tag-cs.html">cs</a> </div></div>]]></description>
  <category><![CDATA[math]]></category>
  <category><![CDATA[cs]]></category>
  <link>https://stefanorodighiero.net/blog/bb5.html</link>
  <guid>https://stefanorodighiero.net/blog/bb5.html</guid>
  <pubDate>Wed, 03 Jul 2024 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[A weekend in London]]></title>
  <description><![CDATA[

<figure id="org26d8078">
<img src="./images/london.jpg" alt="london.jpg">

</figure>

<p>
After many years since my last visit, I spent a long weekend in
London.  Among my various impressions, I note that I didn't touch any
cash whatsoever for the entire stay. Even more: if it weren't for a
guy in front of me at the cash register in a pub, who was paying with
a banknote, I would've not <b>seen</b> any cash during my visit. I imagine
this can lead to overspending, but nice.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/london.html</link>
  <guid>https://stefanorodighiero.net/blog/london.html</guid>
  <pubDate>Mon, 01 Jul 2024 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Exporting content from org-roam to arbitrary org files]]></title>
  <description><![CDATA[
<p>
I adopted org-roam to collect and manage my personal notes.  I also
use Org for managing the pages of my personal website (this site).  My
notes are mostly personal, as I said, but sometimes I want to publish
them on the website.
</p>

<p>
So far the process has been manual: when I had significant updates to
publish I just copied text from one org file (in org-roam) to another.
But I wanted something more systematic.
</p>

<p>
I therefore added this two functions in my Emacs configuration
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">my/remove-org-roam-links</span> (buffer-as-string)
  (replace-regexp-in-string
   <span class="org-string">"\\[\\[</span><span class="org-string"><span class="org-constant">id:.*\\</span></span><span class="org-string">]\\[</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">.*</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">\\]\\]"</span> <span class="org-string">"\\1"</span> buffer-as-string))

(<span class="org-keyword">defun</span> <span class="org-function-name">my/paste-org-roam-node</span> (initial-input <span class="org-type">&amp;key</span> no-links)
  (<span class="org-keyword">interactive</span>)
  (<span class="org-keyword">let*</span> ((file (org-roam-node-file (org-roam-node-read initial-input)))
         (raw-buffer (<span class="org-keyword">with-current-buffer</span> (find-file-noselect file)
                       (goto-char (point-min))
                       (buffer-string))))
    (<span class="org-keyword">if</span> no-links (my/remove-org-roam-links raw-buffer)
      raw-buffer)))
</pre>
</div>

<p>
Then I can use a snippet like this in the destination buffer
</p>

<pre class="example" id="org2adac57">
#+begin_src emacs-lisp :results value raw append
  (my/paste-org-roam-node "through" :no-links t)
#+end_src
</pre>

<p>
And this appends to the file the contents of the original org-roam
note (I happen to have a note titled "Through the Language Glass", so
that 'through' is enough to identify a node), after stripping, if
requested, the links to other notes.
</p>

<p>
There's still some manual work to do before one can post, but this
solution is already an useful improvement.
</p>
<div id="outline-container-orgd00c715" class="outline-2">
<h2 id="orgd00c715"><span class="todo TODO">TODO</span> </h2>
<div class="outline-text-2" id="text-orgd00c715">
<ul class="org-ul">
<li class="off"><code>[&#xa0;]</code> the operation is not idempotent</li>
<li class="off"><code>[&#xa0;]</code> <code>org-roam-node-read</code> still requires the user to hit return in the
minibuffer to confirm the choice. I'd rather have no interaction
after invoking the command by <code>C-C C-C</code></li>
<li class="off"><code>[&#xa0;]</code> after the note content is appended to the file, there's some clean
up to do: removing unwanted metadata from the original buffer, and
so on…</li>
<li class="off"><code>[&#xa0;]</code> it seems there are problems with the management of footnotes, if
present in the original note</li>
</ul>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/export-from-org-roam.html</link>
  <guid>https://stefanorodighiero.net/blog/export-from-org-roam.html</guid>
  <pubDate>Fri, 21 Jun 2024 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Custom CSS for my website]]></title>
  <description><![CDATA[
<p>
My website is intentionally unadorned, but not because I don't like
colors or typography. It's just I want the site to load as fast as
possible, and I don't want to impose JS automatisms or othe
shenanigans like these.
</p>

<p>
Actually, when I browse my pages myself, I use browser add-ons to
apply a personalized CSS and even some JS facility. And I change the
style often.  Here how it currently looks like.
</p>


<figure id="orgd4c2a87">
<img src="./images/site-dark-light.png-thumb.jpg" alt="site-dark-light.png-thumb.jpg">

</figure>

<p>
And the respective CSS and JS I use with <a href="https://tenrabbits.github.io/user-js-css-docs/">User JS and CSS</a> Chrome
extension to implement it.
</p>

<p>
<a href="https://stefanorodighiero.net/misc/personal.css">https://stefanorodighiero.net/misc/personal.css</a>
</p>

<p>
<a href="https://stefanorodighiero.net/misc/personal.js">https://stefanorodighiero.net/misc/personal.js</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/custom-css.html</link>
  <guid>https://stefanorodighiero.net/blog/custom-css.html</guid>
  <pubDate>Thu, 13 Jun 2024 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Switching from stream to blog]]></title>
  <description><![CDATA[
<p>
I wanted to transform my stream for a long time, switching from a
single .org file where I kept adding things, to a more appropriate
blog structure, with individual posts, index, archive, tag pages, a
feed and so on. Thanks to Org, it was relatively easy to use the
original material to produce the files I then fed to <a href="https://github.com/bastibe/org-static-blog">org-static-blog</a>.
</p>

<p>
Here the code I used (I just omitted a few service functions)
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">split-org-file</span> (input-file output-dir)
  <span class="org-doc">"Split an .org file into separate files for each top-level entry.</span>
<span class="org-doc">INPUT-FILE is the path to the .org file.</span>
<span class="org-doc">OUTPUT-DIR is the directory where the separate files will be saved."</span>
  (<span class="org-keyword">with-current-buffer</span> (find-file-noselect input-file)
    (goto-char (point-min))
    (org-map-entries
     (<span class="org-keyword">lambda</span> ()
       (<span class="org-keyword">let*</span> ((entry-title (nth 4 (org-heading-components)))
              (tags (parse-tags-into-filetags
                     (nth 5 (org-heading-components))))
              (ts (get-timestamp-from-title entry-title))
              (entry-title-stripped (strip-entry-title entry-title))
              (output-file (expand-file-name
                            (format <span class="org-string">"%s.org"</span> (dirify-string entry-title-stripped))
                            output-dir)))
         (<span class="org-keyword">let</span> ((body (org-copy-subtree))
               (cleaned-body (<span class="org-keyword">with-temp-buffer</span>
                               (insert (car kill-ring))
                               (goto-char (point-min))
                               (<span class="org-keyword">when</span> (re-search-forward <span class="org-string">"^\\*+ </span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">.*</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">$"</span> nil t)
                                 (replace-match <span class="org-string">""</span> nil nil))
                               (buffer-string))))
           (<span class="org-keyword">with-temp-file</span> output-file
             (insert (format <span class="org-string">"#+title: %s\n"</span> entry-title-stripped)
                     (format <span class="org-string">"#+date: %s\n"</span> (<span class="org-keyword">or</span> ts <span class="org-string">"2000-01-01"</span>))
                     (format <span class="org-string">"#+filetags: %s\n"</span> (<span class="org-keyword">or</span> tags <span class="org-string">""</span>))
                     <span class="org-string">"\n\n"</span>
                     (format <span class="org-string">"%s"</span> cleaned-body))))))
     <span class="org-string">"LEVEL=1"</span>)))
</pre>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[emacs]]></category>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/stream-to-blog.html</link>
  <guid>https://stefanorodighiero.net/blog/stream-to-blog.html</guid>
  <pubDate>Tue, 11 Jun 2024 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Venetogravel finisher stats]]></title>
  <description><![CDATA[
<p>
The organization of <a href="https://www.venetogravel.it/en/">Venetogravel</a> published the finisher stats for the
2024 edition. I grabbed this data and the datapoints from 2023 to plot
some charts.
</p>


<figure id="org62bce20">
<img src="./images/comparison-vg.png" alt="comparison-vg.png">

</figure>

<p>
"beach", "classic" and "lake" represent three different routes each
participant could choose from, respectively ~400km (2800m total
ascent), ~720km (4300m), ~400km (1800m). The editions of 2024 and 2023
presented the same choices, with the major difference that the
direction of the routes was reversed. 2024's edition had also a new
200km (2800m) option which I didn't analyze.
</p>

<p>
I was interested to see if the median finisher time (indicated by the
dashed line in the charts) would change, which I intended as a
possible answer to the question "Would reversing the direction make
the routes easier or harder?".
</p>

<p>
Data show that for "classic" and "beach" it didn't change, but the
value is significantly higher for 2024 for the Lake route.
(I, by the way, completed the Lake route in 53 hours and 16 minutes).
</p>

<p>
Not sure how to explain that.  It's true the weather was worst in
2024, and I know several cyclists (including me) were blocked by a
storm on Sunday, but that lasted only a couple of hours, not enough to
explain the significant increase in median time.
</p>

<p>
Perhaps the population of cyclists that chose the Lake route was made
of less experienced athletes, that had to take more time to complete
it. Not sure.
</p>

<hr>
<div id="outline-container-org3b5ef3a" class="outline-2">
<h2 id="org3b5ef3a">How I made the charts</h2>
<div class="outline-text-2" id="text-org3b5ef3a">
<p>
First I load and transform the files I obtained from the website:
</p>

<div class="org-src-container">
<pre class="src src-R">classic2023 <span class="org-ess-assignment">&lt;-</span> processfile(<span class="org-string">"2023/data/classic.txt"</span>, <span class="org-string">"classic"</span>, 2023)
beach2023 <span class="org-ess-assignment">&lt;-</span> processfile(<span class="org-string">"2023/data/beach.txt"</span>, <span class="org-string">"beach"</span>, 2023)
lake2023 <span class="org-ess-assignment">&lt;-</span> processfile(<span class="org-string">"2023/data/lake.txt"</span>, <span class="org-string">"lake"</span>, 2023)

classic2024 <span class="org-ess-assignment">&lt;-</span> processfile(<span class="org-string">"2024/data/classic.txt"</span>, <span class="org-string">"classic"</span>, 2024)
beach2024 <span class="org-ess-assignment">&lt;-</span> processfile(<span class="org-string">"2024/data/beach.txt"</span>, <span class="org-string">"beach"</span>, 2024)
lake2024 <span class="org-ess-assignment">&lt;-</span> processfile(<span class="org-string">"2024/data/lake.txt"</span>, <span class="org-string">"lake"</span>, 2024)
</pre>
</div>

<p>
here the body of <code>processfile</code>:
</p>

<div class="org-src-container">
<pre class="src src-R"><span class="org-function-name">convert_elapsed_time_to_minutes</span> <span class="org-ess-assignment">&lt;-</span> <span class="org-ess-keyword">function</span>(elapsed_time_str) {
  time_parts <span class="org-ess-assignment">&lt;-</span> str_split(elapsed_time_str, <span class="org-string">":"</span>)[[1]]
  hours <span class="org-ess-assignment">&lt;-</span> as.integer(time_parts[1])
  minutes <span class="org-ess-assignment">&lt;-</span> as.integer(time_parts[2])
  total_minutes <span class="org-ess-assignment">&lt;-</span> (hours * 60) + minutes
  result <span class="org-ess-assignment">&lt;-</span> total_minutes
}

processfile = <span class="org-ess-keyword">function</span>(filepath, track, year) {
  df <span class="org-ess-assignment">&lt;-</span> read.table(
    text=gsub(<span class="org-string">" &#8211; "</span>, <span class="org-string">"\t"</span>, readLines(filepath)),
    sep=<span class="org-string">"\t"</span>
  )

  names(df) <span class="org-ess-assignment">&lt;-</span> c(<span class="org-string">"country"</span>, <span class="org-string">"name"</span>, <span class="org-string">"elapsed_time"</span>)

  <span class="org-ess-keyword">return</span>(df
         <span class="org-ess-XopX">%&gt;%</span> rowwise()
         <span class="org-ess-XopX">%&gt;%</span> mutate(elapsed_time_minutes = convert_elapsed_time_to_minutes(elapsed_time))
         <span class="org-ess-XopX">%&gt;%</span> mutate(track = track)
         <span class="org-ess-XopX">%&gt;%</span> mutate(year = year)
         <span class="org-ess-XopX">%&gt;%</span> filter(elapsed_time_minutes &gt; 0)
         <span class="org-ess-XopX">%&gt;%</span> filter(elapsed_time_minutes &lt; 10000) <span class="org-comment-delimiter"># </span><span class="org-comment">filter outliers</span>
         <span class="org-ess-XopX">%&gt;%</span> select(country, track, year, elapsed_time_minutes)
  )
}
</pre>
</div>

<p>
Then we put together these dataframes, and compute some aggregated stats
</p>

<div class="org-src-container">
<pre class="src src-R">data <span class="org-ess-assignment">&lt;-</span> bind_rows(classic2023, beach2023, lake2023,
                  classic2024, beach2024, lake2024)

data_medians <span class="org-ess-assignment">&lt;-</span> data <span class="org-ess-XopX">%&gt;%</span> group_by(year, track) <span class="org-ess-XopX">%&gt;%</span> summarize(x=median(elapsed_time_minutes))

data_count <span class="org-ess-assignment">&lt;-</span> data <span class="org-ess-XopX">%&gt;%</span> group_by(year, track) <span class="org-ess-XopX">%&gt;%</span> summarize(x=n())
</pre>
</div>

<p>
We're ready to produce the chart using <code>ggplot</code>:
</p>

<div class="org-src-container">
<pre class="src src-R"><span class="org-function-name">x_labels</span> <span class="org-ess-assignment">&lt;-</span> <span class="org-ess-keyword">function</span>(m) {
  res <span class="org-ess-assignment">&lt;-</span> round(m / 60, 2)
  paste(res, <span class="org-string">'h'</span>,sep = <span class="org-string">""</span>)
}

ggplot(data, aes(x=elapsed_time_minutes, color=track)) +
  geom_histogram(binwidth = 60) +
  facet_grid(cols=vars(track), rows = vars(year)) +
  geom_vline(data = data_medians, aes(xintercept = x),
             linetype=<span class="org-string">"dashed"</span>) +
  geom_text(
    data=data_medians,
    aes(x=x, label=x_labels(x), y=25),
    size = 4,
    nudge_x=+1000,
    color = <span class="org-string">'black'</span>
  ) +
  geom_text(
    data=data_count,
    aes(x=0, label=paste(<span class="org-string">"# finisher:"</span>, x), y=35),
    size = 4,
    nudge_x=1500,
    color = <span class="org-string">'black'</span>
  ) +
  scale_x_continuous(breaks=c(60*24, 60*48, 60*72, 60*48*2, 60*24*5),
                     label=x_labels) +
  xlab(<span class="org-string">"Tempo totale"</span>) +
  ylab(<span class="org-string">"Numero di finisher"</span>) +
  theme_solarized() +
  theme(
    legend.position = <span class="org-string">"none"</span>,
    axis.title = element_blank(),
    axis.line.x = element_line(linewidth=.8),
    axis.ticks.x = element_line(linewidth = .8) ,
    axis.ticks.length.x = unit(.5, <span class="org-string">"cm"</span>),
    panel.border = element_blank(),
    panel.grid = element_blank(),
    plot.title = element_text(face=<span class="org-string">"bold"</span>, size=21)
  ) +
  ggtitle(<span class="org-string">"Venetogravel: confronto distribuzione tempi finisher"</span>)
</pre>
</div>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/venetogravel-finisher-stats.html</link>
  <guid>https://stefanorodighiero.net/blog/venetogravel-finisher-stats.html</guid>
  <pubDate>Wed, 29 May 2024 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[rando-planner]]></title>
  <description><![CDATA[
<p>
The tool I am building to plan multi-day bike events is coming together.
Now one can obtain a map with markers that are automatically placed based
on the data in the plan data structure.
</p>

<p>
<img src="./images/vg24-plan-2.png" alt="Defining a plan" style="width: 500px; padding: 15px; float: left">
<img src="./images/vg24-plan-3.png" alt="Using a plan to put markers on a map" style="width: 500px; padding: 15px; float: left">
</p>
<p style="clear: both"></p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-clojure.html">clojure</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[clojure]]></category>
  <link>https://stefanorodighiero.net/blog/rando-planner.html</link>
  <guid>https://stefanorodighiero.net/blog/rando-planner.html</guid>
  <pubDate>Fri, 02 Feb 2024 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Using Clerk to plan bikepacking events]]></title>
  <description><![CDATA[
<p>
I have been experimenting with <a href="https://github.com/nextjournal/clerk">Clerk</a> to build a tool I can use to
study different strategies for <a href="https://www.venetogravel.it/en/">Venetogravel 2024</a>.  Inputing parameters
such as the distance I have to cover, the average speed I think I can
maintain during the event, and how I intend to distribute the effort
over several days, I can obtain a diagram.
It's a work in progress, here what I got so far:
</p>

<div class="org-src-container">
<pre class="src src-clojure">(<span class="org-keyword">def</span> <span class="org-variable-name">plan-start-19</span>
{<span class="org-clojure-keyword">:description</span> <span class="org-string">"Starting on April 19th"</span>
 <span class="org-clojure-keyword">:daily-plans</span> [{<span class="org-clojure-keyword">:label</span> <span class="org-string">"Day 1"</span>
                <span class="org-clojure-keyword">:activities</span> [{<span class="org-clojure-keyword">:start</span> <span class="org-string">"15:00"</span> <span class="org-clojure-keyword">:length</span> 6 <span class="org-clojure-keyword">:type</span> <span class="org-clojure-keyword">:ride</span>}]}
               {<span class="org-clojure-keyword">:label</span> <span class="org-string">"Day 2"</span>
                <span class="org-clojure-keyword">:activities</span> [{<span class="org-clojure-keyword">:start</span> <span class="org-string">"07:00"</span> <span class="org-clojure-keyword">:length</span> 5 <span class="org-clojure-keyword">:type</span> <span class="org-clojure-keyword">:ride</span>}
                             {<span class="org-clojure-keyword">:start</span> <span class="org-string">"17:00"</span> <span class="org-clojure-keyword">:length</span> 3 <span class="org-clojure-keyword">:type</span> <span class="org-clojure-keyword">:ride</span>}]}
               {<span class="org-clojure-keyword">:label</span> <span class="org-string">"Day 3"</span>
                <span class="org-clojure-keyword">:activities</span> [{<span class="org-clojure-keyword">:start</span> <span class="org-string">"08:00"</span> <span class="org-clojure-keyword">:length</span> 6 <span class="org-clojure-keyword">:type</span> <span class="org-clojure-keyword">:ride</span>}]}]})
</pre>
</div>

<p>
which results in
</p>


<figure id="orgd5db65c">
<img src="./images/vg24-plan.png" alt="vg24-plan.png">

</figure>

<p>
To do:
</p>

<ul class="org-ul">
<li>integrate data from GPX files (altitude is fundamental)</li>
<li>learn how to rotate entities with SVG (transformations seem to work
in the least intuitive ways)</li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-clojure.html">clojure</a> <a href="https://stefanorodighiero.net/blog/tag-bikepacking.html">bikepacking</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[clojure]]></category>
  <category><![CDATA[bikepacking]]></category>
  <link>https://stefanorodighiero.net/blog/using-clerk-to-plan-bikepacking-events.html</link>
  <guid>https://stefanorodighiero.net/blog/using-clerk-to-plan-bikepacking-events.html</guid>
  <pubDate>Sun, 17 Dec 2023 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Bikepacking updates]]></title>
  <description><![CDATA[
<p>
I only managed two overnighters during this season, but I learned
something on how to pack, reaching a nice setup for my kit.
</p>


<figure id="org1c6d0a2">
<img src="./images/PXL_20230820_060950325-thumb.jpg" alt="PXL_20230820_060950325-thumb.jpg">

</figure>

<p>
The setup is now more compact and feels more comfortable.
</p>

<p>
The front bag contains the sleeping bag (15 ⁰C) and <b>both</b> the tent
layers (Naturhike Cloudup 2). I didn't think it was possible, but it
was just a matter of squeezing (and believing) harder. Also, not using
compression bags helps, because this way the material is more free to
occupy all available space.
</p>

<p>
This makes the front bag slightly wider, so I had to add spacers to
keep it clear of the levers.
</p>

<p>
I added an Ortlieb accessory bag on the front, where I put food and
some kitchen tools (nothing particular, a collapsible bowl, sporks, …
stuff like that)
</p>

<p>
The saddle bag is much smaller and shorter, which makes the bike
easier to handle. It now contains just the mat, the tent base layer,
stove + pot (another new addition to my kit), and clothes.
</p>

<p>
I am quite satisfied with the results. One thing I have to learn is
how to re-pack things so that dirty or slightly soggy clothes don't
ruin other clean items; this would allow me to do longer journeys.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-bikepacking.html">bikepacking</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[bikepacking]]></category>
  <link>https://stefanorodighiero.net/blog/bikepacking-updates.html</link>
  <guid>https://stefanorodighiero.net/blog/bikepacking-updates.html</guid>
  <pubDate>Sat, 23 Sep 2023 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[TIL]]></title>
  <description><![CDATA[
<div class="org-src-container">
<pre class="src src-nil">$ cat .inputrc
set completion-ignore-case on
</pre>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/til.html</link>
  <guid>https://stefanorodighiero.net/blog/til.html</guid>
  <pubDate>Thu, 07 Sep 2023 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Some experiments with Pharo]]></title>
  <description><![CDATA[
<p>
<a href="https://github.com/larsen/Raytracer-st">Some experiments with Pharo</a>
</p>


<figure id="orgfce7614">
<img src="./images/rt-gui.png" alt="rt-gui.png">

</figure>

<p>
Cool that it is so easy to include an inspector in the GUI:
</p>

<div class="org-src-container">
<pre class="src src-smalltalk">defaultLayout

  <span class="org-function-name">|</span> rt <span class="org-function-name">|</span>
  rt <span class="org-function-name">:=</span> <span class="org-type">Raytracer</span> new.
  rt <span class="org-function-name">scene:</span> (<span class="org-type">Scene</span> demo).

  <span class="org-builtin">^</span> <span class="org-type">SpBoxLayout</span> newLeftToRight
    <span class="org-function-name">add:</span> (<span class="org-type">SpBoxLayout</span> newTopToBottom
      <span class="org-function-name">add:</span> (<span class="org-type">SpMorphPresenter</span> new <span class="org-function-name">morph:</span> (rt imageMorph));
      <span class="org-function-name">addLast:</span> (<span class="org-type">SpPresenter</span> new newButton <span class="org-function-name">label:</span> <span class="org-string">'Render'</span>;
        <span class="org-function-name">action:</span> [rt render] ) <span class="org-function-name">expand:</span> <span class="org-constant">false</span>;
      yourself);
    <span class="org-function-name">add:</span> (<span class="org-type">StInspector</span> new <span class="org-function-name">model:</span> (rt scene objects) );
      yourself
</pre>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-smalltalk.html">smalltalk</a> <a href="https://stefanorodighiero.net/blog/tag-pharo.html">pharo</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[smalltalk]]></category>
  <category><![CDATA[pharo]]></category>
  <link>https://stefanorodighiero.net/blog/some-experiments-with-pharo.html</link>
  <guid>https://stefanorodighiero.net/blog/some-experiments-with-pharo.html</guid>
  <pubDate>Sun, 02 Jul 2023 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Org-roam]]></title>
  <description><![CDATA[
<p>
I started experimenting with org-roam (v2, with org-roam-ui to have
an idea of the progress).  Still not entirely clear to me, but I
will continue.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/org-roam.html</link>
  <guid>https://stefanorodighiero.net/blog/org-roam.html</guid>
  <pubDate>Wed, 04 Aug 2021 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Mühlensee]]></title>
  <description><![CDATA[

<figure id="org7a5cf1e">
<img src="./images/IMG_20210501_114837-thumb.jpg" alt="IMG_20210501_114837-thumb.jpg">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/m%C3%BChlensee.html</link>
  <guid>https://stefanorodighiero.net/blog/m%C3%BChlensee.html</guid>
  <pubDate>Sat, 01 May 2021 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Biking, December update]]></title>
  <description><![CDATA[

<figure id="orga52c32c">
<img src="../images/biking/goal2020-20210102.png" alt="goal2020-20210102.png">

</figure>


<figure id="org412af6e">
<img src="../images/biking/veloviewer-square-20210102.png" alt="veloviewer-square-20210102.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/biking-december-update.html</link>
  <guid>https://stefanorodighiero.net/blog/biking-december-update.html</guid>
  <pubDate>Sat, 02 Jan 2021 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Biking, November update]]></title>
  <description><![CDATA[

<figure id="org1bd6c63">
<img src="../images/biking/goal2020-20201204.png" alt="goal2020-20201204.png">

</figure>


<figure id="org43645e0">
<img src="../images/biking/veloviewer-square-20201204.png" alt="veloviewer-square-20201204.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/biking-november-update.html</link>
  <guid>https://stefanorodighiero.net/blog/biking-november-update.html</guid>
  <pubDate>Fri, 04 Dec 2020 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Biking, October update]]></title>
  <description><![CDATA[

<figure id="orgadc3394">
<img src="../images/biking/goal2020-20201102.png" alt="goal2020-20201102.png">

</figure>


<figure id="org7478527">
<img src="../images/biking/veloviewer-square-20201102.png" alt="veloviewer-square-20201102.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/biking-october-update.html</link>
  <guid>https://stefanorodighiero.net/blog/biking-october-update.html</guid>
  <pubDate>Mon, 02 Nov 2020 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[A snippet for LibraryThing]]></title>
  <description><![CDATA[
<p>
A very short one, to extract book titles from the widget "Your list"
on the right, in a format suitable to paste in a Org document.
Unfortunately I could not find an API endpoint to do the same thing in
a more structured way.
</p>

<div class="org-src-container">
<pre class="src src-javascript">$$(<span class="org-string">'ol#list_yourlist li a'</span>).forEach( book =&gt; console.log(<span class="org-string">'[['</span> + book.href + <span class="org-string">']['</span> + book.textContent + <span class="org-string">']]'</span>))
</pre>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/a-snippet-for-librarything.html</link>
  <guid>https://stefanorodighiero.net/blog/a-snippet-for-librarything.html</guid>
  <pubDate>Sat, 10 Oct 2020 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Biking, September update]]></title>
  <description><![CDATA[

<figure id="org08248ac">
<img src="../images/biking/goal2020-20201001.png" alt="goal2020-20201001.png">

</figure>


<figure id="org953e3b3">
<img src="../images/biking/veloviewer-square-20201001.png" alt="veloviewer-square-20201001.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/biking-september-update.html</link>
  <guid>https://stefanorodighiero.net/blog/biking-september-update.html</guid>
  <pubDate>Thu, 01 Oct 2020 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[The Muse]]></title>
  <description><![CDATA[
<p>
<a href="https://www.grumpygamer.com/the_muse">The Muse</a>
</p>

<p>
From <a href="https://www.grumpygamer.com/the_muse">Ron Gilbert's blog</a>.
</p>

<blockquote>
<p>
"The Muse visits during the act of creation, not before. Don't wait
for her. Start alone." - Roger Ebert
</p>

<p>
One of my favorite quotes and one I keep needing to remind myself
of. No matter how blocked or stuck I am, if I just force myself to
start writing or designing, it's not long before the ideas start
flowing.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/the-muse.html</link>
  <guid>https://stefanorodighiero.net/blog/the-muse.html</guid>
  <pubDate>Mon, 14 Sep 2020 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Blankenfelde]]></title>
  <description><![CDATA[

<figure id="org684a752">
<img src="./images/IMG_20200906_150800-thumb.jpg" alt="IMG_20200906_150800-thumb.jpg">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/blankenfelde.html</link>
  <guid>https://stefanorodighiero.net/blog/blankenfelde.html</guid>
  <pubDate>Sun, 06 Sep 2020 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Biking, August update]]></title>
  <description><![CDATA[

<figure id="org6b17d55">
<img src="../images/biking/goal2020-20200901.png" alt="goal2020-20200901.png">

</figure>


<figure id="org5316575">
<img src="../images/biking/veloviewer-square-20200901.png" alt="veloviewer-square-20200901.png">

</figure>
<div class="taglist"></div></div>]]></description>
  <link>https://stefanorodighiero.net/blog/biking-august-update.html</link>
  <guid>https://stefanorodighiero.net/blog/biking-august-update.html</guid>
  <pubDate>Tue, 01 Sep 2020 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Alfred Wainwright]]></title>
  <description><![CDATA[
<p>
<a href="https://en.wikipedia.org/wiki/Alfred_Wainwright">Alfred Wainwright</a>
</p>


<figure id="orge56003e">
<img src="./images/wainwright.jpg" alt="wainwright.jpg">

</figure>

<blockquote>
<p>
<a href="https://en.wikipedia.org/wiki/Pictorial_Guide_to_the_Lakeland_Fells">A Pictorial Guide to the Lakeland Fells</a> is a series of seven books
by A. Wainwright, detailing the fells (the local word for hills and
mountains) of the Lake District in northwest England. Written over a
period of 13 years from 1952, they consist entirely of reproductions
of Wainwright's manuscript, hand-produced in pen and ink with no
typeset material.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/alfred-wainwright.html</link>
  <guid>https://stefanorodighiero.net/blog/alfred-wainwright.html</guid>
  <pubDate>Tue, 01 Sep 2020 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Biking, July update]]></title>
  <description><![CDATA[

<figure id="org2956202">
<img src="../images/biking/goal2020-20200801.png" alt="goal2020-20200801.png">

</figure>


<figure id="org7bcdb0a">
<img src="../images/biking/veloviewer-square-20200801.png" alt="veloviewer-square-20200801.png">

</figure>


<figure id="org02cec59">
<img src="../images/biking/veloviewer-square-20200801-2.png" alt="veloviewer-square-20200801-2.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/biking-july-update.html</link>
  <guid>https://stefanorodighiero.net/blog/biking-july-update.html</guid>
  <pubDate>Sat, 01 Aug 2020 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Biking, June update]]></title>
  <description><![CDATA[
<p>
Done almost nothing (bad weather, bad mood)
</p>


<figure id="orga20cde7">
<img src="../images/biking/goal2020-20200701.png" alt="goal2020-20200701.png">

</figure>


<figure id="org87a3e2e">
<img src="../images/biking/veloviewer-square-20200701.png" alt="veloviewer-square-20200701.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/biking-june-update.html</link>
  <guid>https://stefanorodighiero.net/blog/biking-june-update.html</guid>
  <pubDate>Thu, 02 Jul 2020 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Biking, May update]]></title>
  <description><![CDATA[

<figure id="org381af52">
<img src="../images/biking/goal2020-20200601.png" alt="goal2020-20200601.png">

</figure>


<figure id="orgab8b7ab">
<img src="../images/biking/veloviewer-square-20200601.png" alt="veloviewer-square-20200601.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/biking-may-update.html</link>
  <guid>https://stefanorodighiero.net/blog/biking-may-update.html</guid>
  <pubDate>Mon, 01 Jun 2020 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[First (metric) century]]></title>
  <description><![CDATA[

<figure id="org4a0c2c0">
<img src="../images/IMG_20200517_095740_small.jpg" alt="IMG_20200517_095740_small.jpg">

</figure>

<p>
A bit above 100km in a single ride.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/first-(metric)-century.html</link>
  <guid>https://stefanorodighiero.net/blog/first-(metric)-century.html</guid>
  <pubDate>Sun, 17 May 2020 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Biking, April update]]></title>
  <description><![CDATA[

<figure id="orga0e7d13">
<img src="../images/biking/goal2020-20200501.png" alt="goal2020-20200501.png">

</figure>


<figure id="orgac3c788">
<img src="../images/biking/veloviewer-square-20200501.png" alt="veloviewer-square-20200501.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/biking-april-update.html</link>
  <guid>https://stefanorodighiero.net/blog/biking-april-update.html</guid>
  <pubDate>Fri, 01 May 2020 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Biking, March update]]></title>
  <description><![CDATA[
<p>
Started well. Abrupt stop: riding in the midst of COVID19 related
restrictions didn't feel right.
</p>


<figure id="org8434141">
<img src="../images/biking/goal2020-20200401.png" alt="goal2020-20200401.png">

</figure>


<figure id="orgee04f04">
<img src="../images/biking/veloviewer-square-20200401.png" alt="veloviewer-square-20200401.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/biking-march-update.html</link>
  <guid>https://stefanorodighiero.net/blog/biking-march-update.html</guid>
  <pubDate>Wed, 01 Apr 2020 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Biking, February update]]></title>
  <description><![CDATA[
<p>
Not very exciting (bad weather and broken glasses)
</p>


<figure id="org2eaa2d4">
<img src="../images/biking/goal2020-20200301.png" alt="goal2020-20200301.png">

</figure>


<figure id="orgf6a233c">
<img src="../images/biking/veloviewer-square-20200301.png" alt="veloviewer-square-20200301.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/biking-february-update.html</link>
  <guid>https://stefanorodighiero.net/blog/biking-february-update.html</guid>
  <pubDate>Sun, 01 Mar 2020 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Biking, January update]]></title>
  <description><![CDATA[
<p>
Here some stats about January.
</p>


<figure id="orga2ea26c">
<img src="../images/biking/goal2020-20200201.png" alt="goal2020-20200201.png">

</figure>

<p>
And here Veloviewer's map update. Max square still 3x3, but I covered more territory.
</p>


<figure id="org998dca6">
<img src="../images/biking/veloviewer-square-20200201.png" alt="veloviewer-square-20200201.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/biking-january-update.html</link>
  <guid>https://stefanorodighiero.net/blog/biking-january-update.html</guid>
  <pubDate>Sat, 01 Feb 2020 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Veloviewer stats]]></title>
  <description><![CDATA[
<p>
One of the fun parts of riding a bike is generating stats.
Using <a href="https://veloviewer.com/">Veloviewer</a> (via Strava), for example, one can compute
the max cluster size of his activities.
Mine is 3x3, at the moment.
</p>


<figure id="orgbe70053">
<img src="../images/biking/veloviewer-square-20200104.png" alt="veloviewer-square-20200104.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/veloviewer-stats.html</link>
  <guid>https://stefanorodighiero.net/blog/veloviewer-stats.html</guid>
  <pubDate>Sat, 04 Jan 2020 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Plans for 2020]]></title>
  <description><![CDATA[
<p>
I don't particularly like the plans-for-next-year literary genre, but
I imagine it will be fun to read this at this very same time next
year: a memento of what my focus was. Anyway, here what I'd like to
start, stop and continue doing next year.
</p>

<ul class="org-ul">
<li><b>Reading more books than <a href="https://www.librarything.com/list/20367/all/Finished-in-2019">those I read during 2019</a></b>.</li>
<li><b>Contribute to an open source project</b>. In 2019 I was particularly
happy because I managed to get a patch accepted for a tool I use
daily (org-mode).</li>
<li><b>Riding my bike for a total of 3500 km</b>. I only recently got more
serious about biking. At the moment I am not interested at all in
speed and pure performance: for me it's more about exploring and
spending time outdoor, but yet I started collecting data.
<ul class="org-ul">
<li>Why 3500? I initially thought 3000, because it's a nice round
number. But it didn't make me unconfortable, as an objective
should do. Adding 500 km does, yet it should not be a crazy
stretch, especially if I develop the habit of using the bike
instead of U-Bahn for commuting. I plan to post monthly reports
here.</li>
<li>As a sub-goal, I'd like to <b>try bikepacking</b>, at least for a
weekend.</li>
</ul></li>
<li><b>Start and publish a software project</b>: I had several ideas over the
last years, but all of them didn't go beyond the explorative or
half-baked idea stage.</li>
<li>Make some efforts at <b>learning German</b> (I'd like to reach a level
where I can read articles and simple books).</li>
<li>Stop wasting my time.</li>
<li>Continue tracking expenses, sleeping and physical activities.</li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/plans-for-2020.html</link>
  <guid>https://stefanorodighiero.net/blog/plans-for-2020.html</guid>
  <pubDate>Tue, 31 Dec 2019 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Books I finished in 2019]]></title>
  <description><![CDATA[




<div id="outline-container-orge714616" class="outline-2">
<h2 id="orge714616">Novels</h2>
<div class="outline-text-2" id="text-orge714616">
<ul class="org-ul">
<li><a href="https://www.librarything.com/work/19380064">A Legacy of Spies</a></li>
<li><a href="https://www.librarything.com/work/1575603">Tattoo</a></li>
<li>Impossible Times trilogy
<ul class="org-ul">
<li><a href="https://www.librarything.com/work/22337514">One Word Kill</a></li>
<li><a href="https://www.librarything.com/work/22569956">Limited Wish</a></li>
<li><a href="https://www.librarything.com/work/23231389">Dispel Illusion</a></li>
</ul></li>
<li><a href="https://www.librarything.com/work/18939832">L'amante senza fissa dimora (Italian Edition)</a></li>
<li><a href="https://www.librarything.com/work/27814">In the Garden of Iden</a></li>
<li><a href="https://www.librarything.com/work/17038900">Fall; or, Dodge in Hell</a></li>
<li><a href="https://www.librarything.com/work/149957">Plot It Yourself</a></li>
</ul>
</div>
</div>

<div id="outline-container-org2960be4" class="outline-2">
<h2 id="org2960be4">Other books</h2>
<div class="outline-text-2" id="text-org2960be4">
<ul class="org-ul">
<li><a href="https://www.librarything.com/work/10023646">Through the Language Glass: Why the World Looks Different in Other Languages</a></li>
<li><a href="https://www.librarything.com/work/17287777">Radical Focus: Achieving Your Most Important Goals with Objectives and Key Results</a></li>
<li><a href="https://www.librarything.com/work/15459068">Seven Brief Lessons on Physics</a></li>
<li><a href="https://www.librarything.com/work/19397826">The Manager's Path: A Guide for Tech Leaders Navigating Growth and Change</a></li>
<li><a href="https://www.librarything.com/work/10820921">The Computer Boys Take Over: Computers, Programmers, and the Politics of Technical Expertise</a></li>
<li><a href="https://www.librarything.com/work/23840124">UNIX: A History and a Memoir</a></li>
</ul>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/books-i-finished-in-2019.html</link>
  <guid>https://stefanorodighiero.net/blog/books-i-finished-in-2019.html</guid>
  <pubDate>Tue, 31 Dec 2019 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Atreus 2]]></title>
  <description><![CDATA[
<p>
Jesse Vincent announced a collaboration between Keyboard.io and
technomancy to mass-produce a new version of the Atreus keyboard. Phil
posted in the Atreus ML describing differences with the original kit:
</p>

<ul class="org-ul">
<li>2 extra switches (backtick and backslash will no longer need fn)</li>
<li>injection-molded case with smaller dimensions</li>
<li>detachable USB cable</li>
<li>default firmware is <a href="https://github.com/keyboardio/Kaleidoscope">Kaleidoscope</a> (QMK will still work)</li>
<li>cherry-MX-compatible switches in sockets (removable without soldering)</li>
<li>optional labels on keycaps</li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-hw.html">hw</a> </div></div>]]></description>
  <category><![CDATA[hw]]></category>
  <link>https://stefanorodighiero.net/blog/atreus-2.html</link>
  <guid>https://stefanorodighiero.net/blog/atreus-2.html</guid>
  <pubDate>Wed, 09 Oct 2019 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Lemonodor]]></title>
  <description><![CDATA[
<p>
I am going through old Lemonodor's posts, because why not. It's a
treasure trove of interesting material (and also a testament to the
fact Internet content is more ephemeral than one could think of)
</p>

<ul class="org-ul">
<li><a href="https://www.artima.com/wbc/interprog.html">How to Interview a Programmer</a></li>
<li><a href="https://dspace.mit.edu/handle/1721.1/6686">Advanced Programming Language Features for Executable Design Patterns</a></li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/lemonodor.html</link>
  <guid>https://stefanorodighiero.net/blog/lemonodor.html</guid>
  <pubDate>Fri, 27 Sep 2019 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Reconfigure "Open Folder"]]></title>
  <description><![CDATA[
<p>
Just a note to myself, because I keep forgetting:
</p>

<pre class="example" id="orgac54247">
$ xdg-mime query default inode/directory
nautilus-folder-handler.desktop
$ locate Thunar.desktop
/usr/share/app-install/desktop/thunar:Thunar.desktop
/usr/share/applications/Thunar.desktop
/usr/share/xfce4/helpers/Thunar.desktop
$ xdg-mime default Thunar.desktop inode/directory
</pre>
<div class="taglist"></div></div>]]></description>
  <link>https://stefanorodighiero.net/blog/reconfigure-open-folder.html</link>
  <guid>https://stefanorodighiero.net/blog/reconfigure-open-folder.html</guid>
  <pubDate>Sun, 08 Sep 2019 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[A view on the river Havel]]></title>
  <description><![CDATA[

<figure id="orgcb00e9a">
<img src="./images/IMG_20190728_110022-PANO-thumb.jpg" alt="IMG_20190728_110022-PANO-thumb.jpg">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/a-view-on-the-river-havel.html</link>
  <guid>https://stefanorodighiero.net/blog/a-view-on-the-river-havel.html</guid>
  <pubDate>Sun, 28 Jul 2019 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Changing style of Emacs' tooltips]]></title>
  <description><![CDATA[
<p>
It seems obvious now that I figured it out.
</p>

<p>
Some parts of Emacs GUI are not configurable through faces (obvious).
My Emacs is compiled with GTK 3.0, so it uses that library to render
some of the elements of the GUI (even more obvious). Tooltips are
among those elements. So, in order to change their style, I need to
intervene on the configuration of GTK.
For example, I had this:
</p>


<figure id="orga63b71a">
<img src="./images/tooltip-dark.png" alt="tooltip-dark.png">

</figure>

<p>
Creating a file <code>~/.config/gtk-3.0/gtk.css</code>:
</p>

<div class="org-src-container">
<pre class="src src-nil">@define-color tooltip_bg_color #fff8dc;
@define-color tooltip_fg_color Black;
</pre>
</div>

<p>
and restarting Emacs, I obtain this:
</p>


<figure id="org41351e5">
<img src="./images/tooltip-light.png" alt="tooltip-light.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/changing-style-of-emacs-tooltips.html</link>
  <guid>https://stefanorodighiero.net/blog/changing-style-of-emacs-tooltips.html</guid>
  <pubDate>Sun, 19 May 2019 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[A patch for Org Babel]]></title>
  <description><![CDATA[
<p>
Org-babel allows SQL snippets to be run on a database connection that
can be specified in the source block header using parameters such as
<code>:dbhost</code>, <code>:dbuser</code>, <code>:dbpassword</code> and so forth.
</p>

<p>
This is very useful, but I'd also like to be able to use symbolic
references to connections defined elsewhere, so that for example one
does not have to specify the password every time, interactively or,
worse, in the .org file itself.
</p>

<p>
I am also a user of sql.el, that provides a custom variable
<code>sql-connection-alist</code>, where users can define a mapping between
connection names and connection details.
</p>

<p>
The patch I submitted extends the behavior of <code>org-babel-execute:sql</code> so
that it's possible to specify a new param <code>:dbconnection</code> containing a
connection name, used for looking up <code>sql-connection-alist</code>.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/a-patch-for-org-babel.html</link>
  <guid>https://stefanorodighiero.net/blog/a-patch-for-org-babel.html</guid>
  <pubDate>Sun, 21 Apr 2019 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Birches]]></title>
  <description><![CDATA[

<figure id="orgfaf69f0">
<img src="./images/vancells_february_450a.jpg" alt="vancells_february_450a.jpg">

</figure>

<p>
by <a href="http://linesandcolors.com/2019/02/07/eye-candy-for-today-joaquim-vancells-february/">Joaquim Vancells</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/birches.html</link>
  <guid>https://stefanorodighiero.net/blog/birches.html</guid>
  <pubDate>Thu, 07 Feb 2019 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Bürgerpark Pankow]]></title>
  <description><![CDATA[
<p>
is conveniently close to home (the picture was not taken in the
park but just outside it, on my way back)
</p>


<figure id="orgcb9cb84">
<img src="./images/IMG_20190127_111318-thumb.jpg" alt="IMG_20190127_111318-thumb.jpg">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/b%C3%BCrgerpark-pankow.html</link>
  <guid>https://stefanorodighiero.net/blog/b%C3%BCrgerpark-pankow.html</guid>
  <pubDate>Sun, 27 Jan 2019 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Books batch]]></title>
  <description><![CDATA[

<figure id="org67ef6f1">
<img src="./images/IMG_20190120_104656-thumb.jpg" alt="IMG_20190120_104656-thumb.jpg">

</figure>

<ul class="org-ul">
<li><b>Nate Silver's <a href="https://www.librarything.com/work/12670479/book/164626364">The Signal and the Noise</a></b></li>
<li><a href="https://www.librarything.com/work/3585/book/164626361">The Language Instinct</a> by <b>Steven Pinker</b></li>
<li><a href="https://www.librarything.com/work/15888266/book/164626365">The Wandering Earth</a> by <b>Cixin Liu</b>. I heard about Cixin Liu for
the first time when he was nominated for the Hugo Awards, but
never tried reading anything. This one is ideal, as it is a
collection of shorter novellas.</li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/books-batch.html</link>
  <guid>https://stefanorodighiero.net/blog/books-batch.html</guid>
  <pubDate>Sun, 20 Jan 2019 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Fun with Fonts]]></title>
  <description><![CDATA[
<p>
<a href="http://erikdemaine.org/papers/Fonts_TCS/">Fun with Fonts</a>
</p>

<p>
Quoted in <a href="https://www.nytimes.com/2018/12/17/science/donald-knuth-computers-algorithms-programming.html">a profile of Donald Knuth published on NYTJ</a>.
</p>


<figure id="org13e61a6">
<img src="./images/2018-12-17-150407_3840x1920_scrot.png" alt="2018-12-17-150407_3840x1920_scrot.png">

</figure>

<blockquote>
<p>
Over the past decade, we have designed six typefaces based on
mathematical theorems and open problems, specifically computational
geometry. These typefaces expose the general public in a unique way to
intriguing results and hard problems in hinged dissections, geometric
tours, origami design, computer-aided glass design, physical
simulation, and protein folding. In particular, most of these
typefaces include puzzle fonts, where reading the intended message
requires solving a series of puzzles which illustrate the challenge of
the underlying algorithmic problem.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/fun-with-fonts.html</link>
  <guid>https://stefanorodighiero.net/blog/fun-with-fonts.html</guid>
  <pubDate>Mon, 17 Dec 2018 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Latest batch]]></title>
  <description><![CDATA[
<p>
Latest loot from the used-book store.
</p>


<figure id="org75b99e4">
<img src="./images/IMG_20181028_121408-thumb.jpg" alt="IMG_20181028_121408-thumb.jpg">

</figure>

<ul class="org-ul">
<li><b>Jonathan Strange &amp; Mr.Norrell</b> was repeteadly recommended by
colleagues. Years ago, when the book was published and gained
attention and success, I somehow didn't notice: I have only a
vague idea about the subject and the plot, so I'm excited about
what I'm about to discover.</li>
<li>I took <b>Greek Mathematical thought and the origins of Algebra</b>
largely because of a casual conversation I recently had about
mathematical formalism and its history. I had only sketchy ideas
about the subject, so I thought this one could be useful reference
material.</li>
<li>I am curious about <b>Decoding the Universe</b> (let's see if the book
can hold up to the hype of that subtitle)</li>
<li><b>The Mathematical Theory of Communication</b> is a classic, picking it
up was an easy decision.</li>
<li>I have never read anything by Ray Kurzweil so when I saw this <b>The
Age of Spiritual Machines</b> I put it on my pile without hesitation.</li>
<li>For quite opposite reasons, but with the same effect, I grabbed
this copy of <b>I am a strange loop</b></li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/latest-batch.html</link>
  <guid>https://stefanorodighiero.net/blog/latest-batch.html</guid>
  <pubDate>Sun, 28 Oct 2018 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Capital Sharp S in German orthography]]></title>
  <description><![CDATA[
<p>
Mark Dominus <a href="https://shitpost.plover.com/t/today-i-learned-9.html">points</a> to an article from typography.guru: <a href="https://typography.guru/journal/the-capital-sharp-s-in-now-part-of-the-official-german-orthography-r53/">The Capital
Sharp S in now part of the official German orthography</a>.
</p>

<p>
I would be supposed to be learning German but as of today my exposure
is still quite limited. I think the only times when I see the letter ß
is when reading street signs.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/capital-sharp-s-in-german-orthography.html</link>
  <guid>https://stefanorodighiero.net/blog/capital-sharp-s-in-german-orthography.html</guid>
  <pubDate>Thu, 13 Sep 2018 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[The Utter Failure of Fictional Time Travel]]></title>
  <description><![CDATA[
<p>
<a href="https://blogs.scientificamerican.com/life-unbounded/the-utter-failure-of-fictional-time-travel/">The Utter Failure of Fictional Time Travel</a>
</p>

<blockquote>
<p>
Perhaps the reason is that no one has (ever) solved the spatial
problem, and the cosmos is littered with time travelers adrift between
the stars and galaxies.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/the-utter-failure-of-fictional-time-travel.html</link>
  <guid>https://stefanorodighiero.net/blog/the-utter-failure-of-fictional-time-travel.html</guid>
  <pubDate>Tue, 07 Aug 2018 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[USDA Pomological Watercolor Collection]]></title>
  <description><![CDATA[
<p>
<a href="https://usdawatercolors.nal.usda.gov/pom/home.xhtml">USDA Pomological Watercolor Collection</a>
</p>

<blockquote>
<p>
The USDA Pomological Watercolor Collection documents fruit and nut
varieties developed by growers or introduced by USDA plant explorers
around the turn of the 20th century. Technically accurate paintings
were used to create lithographs illustrating USDA bulletins,
yearbooks, and other series distributed to growers and gardeners
across America.
</p>
</blockquote>

<p>
Kudos to my teacher from last summer watercolor lessons for finding
this pearl.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/usda-pomological-watercolor-collection.html</link>
  <guid>https://stefanorodighiero.net/blog/usda-pomological-watercolor-collection.html</guid>
  <pubDate>Tue, 17 Jul 2018 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Fruit]]></title>
  <description><![CDATA[
<p>
Today I said: "Cherries are the best fruit with the worst user
interface".  I love how they taste, but I'm always afraid to choke or
break a teeth on the core, I find it annoying to dispose of the
petioles, and so on.  A colleague replied: "There's a XKCD for that!
And he disagrees!".  Indeed <a href="https://xkcd.com/388/">there is</a> one!
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/fruit.html</link>
  <guid>https://stefanorodighiero.net/blog/fruit.html</guid>
  <pubDate>Tue, 10 Jul 2018 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[PyData Berlin 2018]]></title>
  <description><![CDATA[
<p>
First Python conference I attend.
</p>

<p>
The venue is in the complex of Charité – Universitätsmedizin Berlin:
Forum 3 is a nice building and has also some space outdoors
(fortunately the conference days were blessed by sun and a nice
temperature).
</p>

<ul class="org-ul">
<li>First keynote was not strictly related to Python or data
science/engineering. It was an extremely interesting, fun and in
some moments moving account of the hacker scene in Romania before
the collapse of Ceaușescu's regime in the eighties. The <a href="https://arstechnica.com/gadgets/2017/11/the-underground-story-of-cobra-the-1980s-illicit-handmade-computer/">story of the
COBRA</a> was particularly interesting (COBRA is a Romanian clone of ZX
Spectrum, the result of a remarkable process of reverse-engineering,
glorious stubborness and sometimes not-strictly-legal work-arounds).</li>
<li>Next I attented <a href="https://pydata.org/berlin2018/schedule/presentation/40/">Five things I learned from turning research papers
into industry prototypes</a>. A practical collection of advices if you
are tasked with the mission of converting some "theory" from a paper
into something executable. Apparently a problem the audience could
relate to a great deal. You can find the slides <a href="https://speakerdeck.com/ellenkoenig/pydata-bln-2018-five-things-i-learned-while-prototyping-ml-papers">here</a>.</li>
<li><a href="https://pydata.org/berlin2018/schedule/presentation/30/">Simple diagrams of convoluted neural networks</a> seemed interesting,
but unfortunately the presentation was hard to understand to my
ears. Anyway, I managed to extract some value from it, mostly
because the arguments led me to think about the general problem of
devising a notation for expressing and describing a complex system
(like a NN): it should make the reader able to follow the process
step by step, it should make it easier to spot errors in the system,
it should adhere consistently to the metaphor &#x2013;if any&#x2013; it decides
to follow, it should pay attention to representing clearly what and
how it's combined in the various phases of the process, and it
should be dynamic (so apparently trying to represent neural networks
using a static diagram is a lost cause?). The speaker said that the
baseline is currently very low, and there's much space for
improvement. <a href="https://www.dropbox.com/s/a7xako61ihuh82k/20180607_network_viz_pydata_berlin.pdf?dl=0">The slides</a>.</li>
<li>Compared to the previous talk, <a href="https://pydata.org/berlin2018/schedule/presentation/57/">Launch Jupyter to the Cloud: an
example of using Docker and Terraform</a> was very basic but very well
presented. The lesson is you can use Terraform and Docker to
completely describe (thus making it really reproducible) the
entire configuration needed for an experiment (being it some data
analysis task, a Jupyter notebook, things like that). <a href="https://docs.google.com/presentation/d/e/2PACX-1vR0K9gtlPRGRIL6isoVWqa7SOr486yn9p_yCfH-ljtgQa2KpN0J03fOJa_jYgjeVwY3uAJe6GgAxez6/pub?start=false&amp;loop=false&amp;delayms=3000&amp;slide=id.gc6f9e470d_0_0">The slides</a>.</li>
<li>I was particularly excited about the talk coming after the lunch
break: <a href="https://pydata.org/berlin2018/schedule/presentation/71/">Let's SQL Like It's (NOT) 1992!</a> The main point of the speaker
is that writing SQL is usually a skill one learns in college, then
it's only rarely refreshed and kept up to date with the improvements
to the standard.  Also, SQL is frequently thought only as a query
language, but it actually includes a data modeling language and a
data definition language. The presentation was compelling and well
delivered (it was actually a live coding session), but unfortunately
James run out of time and had to stop abruptly and pass the podium
to the next speaker before arriving at the most interesting parts of
his talk. He promised to put the code on github. Besides a couple of
idioms I didn't see before the talk, I discovered a seemingly <a href="http://clarkdave.net/2015/02/historical-records-with-postgresql-and-temporal-tables-and-sql-2011/">useful
extension</a> for PostgreSQL, allowing users to implement bitemporal
tables automatically (so that it's possible to have usual CRUD
primitives, and still be able to reconstruct the state of the
dataset at any given time).</li>
<li>Next talk was <a href="https://pydata.org/berlin2018/schedule/presentation/69/">A/B testing at Zalando: concepts and tools</a>. A
researcher from Zalando illustrated the tools (and the mindset) they
adopted for conducting A/B tests. An endevour they took very
seriously, apparently, as they dedicated 3 BE Engs + 3 FE Engs + 4
Researchers + 3 Product managers = 13 persons to it. They developed
an internal tool called <a href="https://www.slideshare.net/ssarabadani/building-octopus-an-introduction">Octopus</a> and released a OS Python library
called <a href="https://github.com/zalando/expan">ExPan</a> for statistical analysis of randomised control trials.
Highlights: one of the attendees asked what are common pitfalls when
developing A/B tests. According to the speaker, one is testing too
many variables at once (he said they're developing techniques to
automatically detect variable "interference" in A/B experiments,
such as frontend variations that can reciprocally hinder each
other). Another common error is stopping the experiment too early
(for example because management wants answers faster), leading to
results that have no statistical relevance. He also stressed the
point that stats and probability form only half of the picture:
business stakeholders need to be involved from the very beginning
(e.g. How much running an experiment cost?)</li>
<li>Frankly, I chose next talk because I had headache, the other ones in
this time slot seemed a bit above my head so I chose something
simple: <a href="https://pydata.org/berlin2018/schedule/presentation/65/">Solving very simple substitution ciphers algorithmically</a>. It
was about a toy problem (automatically decyphering mono-alphabetic
substitution codes) so nothing new, but what I liked very much is
that the speaker was a mathematician, and it was a pleasure
following the terse, ordinate and precise explanation ("Let me first
name and define a few things").</li>
<li>The second keynote of the first day was about GDPR. It was a nice
round up from the point of view of the legislator, explaining the
principles (old and new) underlying the regulation. The juicy part
came during the Q&amp;A afterwards, according to me. First question was
about a practical problem that might rise in the context of ML: what
if some data a user decided to let the controller store is used to
train a model, and then the same user asked for that data to be
deleted? Is the model still valid?  The speaker explained this is
out of the scope by GDPR, it's an open question and she would be
interested in reading a paper about that if someone would bother to
write one. Second question was a bit of a critique: GDPR is
endangering small startups and grassroot association that don't have
the resources to implement what's needed for complying with the
regulation: the speaker said it's a common problem and added that in
her opinion the time (two years, more or less) we had to prepare for
GDPR was not very well spent: we should have a platform allowing
anyone to comply with GDPR using ready tools.  We're not there yet.</li>
<li>Last of the first day was the lighting talks session. I particularly
like this formula: very brief (5 minutes) but intense talks about
various topics, useful for those that had no time to prepare a full
fledged about their idea. The most interesting was the "Don't trust
your data" talk: a Phd student discovered a dataset about chemical
compound skin penetration, used since the 60s is incomplete, yet
used over time in many research endevours (such as training 20+ ML
models). He went back to the original papers illustrating the
dataset, discovered many more features were available, and published
a new refined dataset. Certainly a lesson in questioning your input.
End of first day.</li>
<li>Second day opened with a keynote: <a href="https://pydata.org/berlin2018/schedule/presentation/79/">Fairness and Diversity in Online
Social Systems</a>.</li>
<li>Next, mobile.de (an Ebay company) presented the architecture and the
tools they use to offer their users a personalized web experience,
and specifically to infer future users' behaviour using a stream of
events describing their usage of the website. They started using
Hive (with Jinja2 to generate SQL queries) but then switched to
(Py)Spark, gaining a 5x time improvement and, according to their
judgement, a much easier system to understand. They didn't publish
the slides but I found some pointers on one of the speakers'
personal website: <a href="https://florianwilhelm.info/2017/07/which_car_fits_my_life/">“Which car fits my life?” - mobile.de’s approach
to recommendations</a>.</li>
<li><p>
In <a href="https://pydata.org/berlin2018/schedule/presentation/16/">Going Full Stack with Data Science: Using Technical Readiness
Level to Guide Data Science Outcomes</a> Emily Gorcenski suggested we
could use NASA's TRL (a scale used by engineers to measure progress
of technology) adapting it into a "Data Science Readiness Levels"
scale. Here the original scale, with a possible translation for
software products and for data science projects.
</p>

<table>


<colgroup>
<col  class="org-left">

<col  class="org-left">

<col  class="org-left">
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">TRL</th>
<th scope="col" class="org-left">Product</th>
<th scope="col" class="org-left">Data Science</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Basic principles observed</td>
<td class="org-left">Need or shortcoming identified</td>
<td class="org-left">Algorithm design &amp; development</td>
</tr>

<tr>
<td class="org-left">Technology concept formulated</td>
<td class="org-left">Technology concept formulated</td>
<td class="org-left">Data explored and described</td>
</tr>

<tr>
<td class="org-left">Experimental proof of concept</td>
<td class="org-left">Tests written</td>
<td class="org-left">Experimental proof of concept</td>
</tr>

<tr>
<td class="org-left">Technology validated in lab</td>
<td class="org-left">Tests passing on dev machines</td>
<td class="org-left">Algorithm validated against sample data</td>
</tr>

<tr>
<td class="org-left">Technology validated in relevant environment</td>
<td class="org-left">Tests passing in develop</td>
<td class="org-left">Algorithm validated against production data</td>
</tr>

<tr>
<td class="org-left">Technology demonstrated in relevant environment</td>
<td class="org-left">In QA</td>
<td class="org-left">Algorithm integrated in develop</td>
</tr>

<tr>
<td class="org-left">Prototype demonstrated in relavant env.</td>
<td class="org-left">Beta version in limited staging</td>
<td class="org-left">Prototype demostrated in operational env.</td>
</tr>

<tr>
<td class="org-left">System complete and qualified</td>
<td class="org-left">QA passed and ready for staging</td>
<td class="org-left">System complete and qualified</td>
</tr>

<tr>
<td class="org-left">System proven in operational env.</td>
<td class="org-left">System running in production</td>
<td class="org-left">System proven in operational env.</td>
</tr>
</tbody>
</table>

<p>
She proposed the idea of "full-stack teams" (opposed to full-stack
devs, unrealistic if one has to take seriously the amount of
knowledge modern system engineering encompasses), and the fact that
data science / data analysis is inseparable from the other facets of
a software project, since its inception.
</p></li>
<li>In <a href="https://pydata.org/berlin2018/schedule/presentation/64/">Data versioning in machine learning projects</a> Dmitry Petrov
started from what I think is a very common problem: we have good
tools to manage code versioning, but the same can't be said about
versioning data. More generally, he stated that while hardware
development has a well established methodology (Waterfall), and
software development has one as well (Agile/Scrum), the same can't
be said for data related projects. He presented a tool he's
developing called <a href="https://dvc.org/">DVC</a>, an extension to git (similar to git-annex in
some aspects) specifically designed for managing large volumes of
data.</li>
<li><a href="https://pydata.org/berlin2018/schedule/presentation/17/">Big Data Systems Performance: The Little Shop of Horrors</a> by Jens
Dittrich was in large part a tirade against the over-hyped terms
like "Big Data" &amp;co, that often bring more confusion than clarity
when it comes to evaluate a solution for a data related
problem. This lack of clarity hinders reaching an efficient
solution, because of the mix of three "dimensions" that should
instead be orthogonal (as the name Dittrich chose
suggests): 1. fancy sounding buzzwords, 2. technical principles and
patterns, 3. software platforms. He dismissed the first as good only
for marketing (he apparently had a bad opinion about marketing), he
said being familiar with 3 is important, but even more important is
knowing very well 2, because those principles are ubiquitous and
more solid. He brought a real life example, where he obtained a
10000x speed improvement applying different patterns and tools from
the already existing solution.</li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/pydata-berlin-2018.html</link>
  <guid>https://stefanorodighiero.net/blog/pydata-berlin-2018.html</guid>
  <pubDate>Sat, 07 Jul 2018 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[First experiences with Python]]></title>
  <description><![CDATA[
<p>
At the new job I use Python for my programming tasks.  Currently
developing some data related stuff (ETL and reporting) and a web
service, trying to organize the stuff I write so that it can be used
by other members of the team for other projects. I will register a
few impressions:
</p>

<ul class="org-ul">
<li>Overall, I like the syntax. More specifically, I like the fact
there are very few principles that uniformly apply in many
situations. Most of the time I can "invent" the way something has
to be written and it usually turns out as the right form.</li>
<li>I like the ecosystem I've seen so far: pandas is a great tool, for
example. I'm struggling with SQLAlchemy, but I <a href="http://stefanorodighiero.net/writings/rearranging-abstraction-layers.html">never quite liked
ORMs anyway</a>.</li>
<li>I am trying to follow PEP8, even if I have quite different ideas
at least about aestethics in code (first time I run pylint on a
script I scored -8.61/10).</li>
<li>I didn't quite get yet the way modules are organized on the file
system.</li>
<li>I feel the documentation lacks regularity and completeness. I can
find a lot of tutorials about any topic, but I still could not
find a systematic source to use as a reference.</li>
</ul>
<div id="outline-container-org6140b5c" class="outline-2">
<h2 id="org6140b5c"><b>Update</b></h2>
<div class="outline-text-2" id="text-org6140b5c">
<p>
Speaking of great tools in the Python ecosystem, I just discovered
Jupyter <a href="https://blog.jupyter.org/jupyter-receives-the-acm-software-system-award-d433b0dfe3a2">received the ACM Software System Award. Congratulations</a>!
</p>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/first-experiences-with-python.html</link>
  <guid>https://stefanorodighiero.net/blog/first-experiences-with-python.html</guid>
  <pubDate>Wed, 02 May 2018 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[eyebrowse]]></title>
  <description><![CDATA[
<p>
I started using <a href="https://github.com/wasamasa/eyebrowse">eyebrowse</a> more systematically. I tend to have
multiple frames scattered around my xmonad workspaces, but I usually
also have a workspace exclusively devoted to a fullscreen Emacs
frame, and there I usually work on different projects, that require
different windows configurations. So eyebrowse is useful. To be able
to switch more confortably from a configuration to another, I added
this little piece of code to my setup:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">loop</span> for i from 1 upto 9
      do (define-key eyebrowse-mode-map
           (kbd (format <span class="org-string">"M-%d"</span> i))
           `(<span class="org-keyword">lambda</span> ()
              (<span class="org-keyword">interactive</span>)
              (eyebrowse-switch-to-window-config ,i))))
</pre>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[emacs]]></category>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/eyebrowse.html</link>
  <guid>https://stefanorodighiero.net/blog/eyebrowse.html</guid>
  <pubDate>Tue, 24 Apr 2018 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[The Oldest Board Game]]></title>
  <description><![CDATA[
<p>
<a href="https://boingboing.net/2018/04/05/watch-the-worlds-oldest-boar.html">The Oldest Board Game</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> <a href="https://stefanorodighiero.net/blog/tag-games.html">games</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <category><![CDATA[games]]></category>
  <link>https://stefanorodighiero.net/blog/the-oldest-board-game.html</link>
  <guid>https://stefanorodighiero.net/blog/the-oldest-board-game.html</guid>
  <pubDate>Fri, 06 Apr 2018 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[New job!]]></title>
  <description><![CDATA[
<p>
I joined the team of <a href="http://www.idagio.com">Idagio</a>, a streaming service for classical music.
</p>
<div class="taglist"></div></div>]]></description>
  <link>https://stefanorodighiero.net/blog/new-job.html</link>
  <guid>https://stefanorodighiero.net/blog/new-job.html</guid>
  <pubDate>Thu, 15 Mar 2018 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Which mathematicians were known for their ability to teach?]]></title>
  <description><![CDATA[
<p>
<a href="https://www.reddit.com/r/math/comments/83ofkp/which_mathematicians_were_known_for_their_ability/?st%3Djenxxh46&amp;sh%3Df9c228c5">Which mathematicians were known for their ability to teach?</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/which-mathematicians-were-known-for-their-ability-to-teach.html</link>
  <guid>https://stefanorodighiero.net/blog/which-mathematicians-were-known-for-their-ability-to-teach.html</guid>
  <pubDate>Mon, 12 Mar 2018 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Atreus firmware + Ragel logic]]></title>
  <description><![CDATA[
<p>
<a href="https://www.freelists.org/post/atreus/Atreus-Firmware-Ragel-logic">Atreus firmware + Ragel logic</a>
</p>

<p>
Excellent content on the Atreus mailing list. An user shows how he
used <a href="http://www.colm.net/open-source/ragel/">Ragel state machine compiler</a> to implement the logic of his
Atreus' controller. Impressive and very interesting.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> <a href="https://stefanorodighiero.net/blog/tag-hw.html">hw</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <category><![CDATA[hw]]></category>
  <link>https://stefanorodighiero.net/blog/atreus-firmware-+-ragel-logic.html</link>
  <guid>https://stefanorodighiero.net/blog/atreus-firmware-+-ragel-logic.html</guid>
  <pubDate>Thu, 01 Feb 2018 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Why I (don't) hate LaTeX]]></title>
  <description><![CDATA[
<p>
<a href="http://aty.sdsu.edu/bibliog/latex/gripe.html">Why I (don't) hate LaTeX</a>
</p>

<p>
<i>(via <a href="http://www.ariis.it/static/stream/page.html#minor-mode">ariis' stream</a>)</i>
</p>

<p>
I understand and I can sympathize with the nuisances the author
mentions (the error messages!), but <b>I do not hate LaTeX</b>.
</p>

<p>
I use LaTeX for practically everything I need to print. Actually,
for most of the things I use org-mode, using its exporter later to
obtain a LaTeX or a PDF document &#x2013; via LaTeX, again &#x2013; when
needed. When I don't need anything special, it's good enough.
And it's all plain text, which is also good.
</p>

<p>
When I need something special, I can thrown in some packages doing
the work for me. If I need something <b>very</b> special, well, it might
lead me to swearing and tears and whatnot, but I know at the end
I'll have something largely more manageable than any other system I
know could give me.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[emacs]]></category>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/why-i-(dont)-hate-latex.html</link>
  <guid>https://stefanorodighiero.net/blog/why-i-(dont)-hate-latex.html</guid>
  <pubDate>Wed, 06 Dec 2017 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Code to read]]></title>
  <description><![CDATA[
<p>
I opened <a href="https://github.com/larsen/code-to-read">a new repository</a> on github. It's called <code>code-to-read</code>, an
attempt to collect and organize links to code bases particularly good
for a human to read.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/code-to-read.html</link>
  <guid>https://stefanorodighiero.net/blog/code-to-read.html</guid>
  <pubDate>Mon, 27 Nov 2017 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Pocket Perl ebook]]></title>
  <description><![CDATA[
<p>
The publisher released an ebook version of <a href="http://stefanorodighiero.net/pocketperl/index.html">my book</a>.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/pocket-perl-ebook.html</link>
  <guid>https://stefanorodighiero.net/blog/pocket-perl-ebook.html</guid>
  <pubDate>Fri, 24 Nov 2017 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Haskell Day in Rome]]></title>
  <description><![CDATA[
<p>
<img src="./images/haskell-day-rome-2017-group-thumb.jpg" alt="haskell-day-rome-2017-group-thumb.jpg">
<img src="./images/haskell-day-rome-2017-room-thumb.jpg" alt="haskell-day-rome-2017-room-thumb.jpg">
</p>

<p>
Yesterday I spent the entire day in Rome to attend another Haskell
meeting. It's been quite a productive and interesting event: as
usual, instead of talks we had impromptu groups engaged in different
practical projects. Yesterday, the majority of people followed a
beginners course. In my case, I showed my <a href="https://github.com/larsen/wiz">Wiz project</a> to some more
experienced programmers, receiving a great deal of observations,
questions and suggestions.  Other remarks: I saw a <a href="https://geoff.greer.fm/2017/07/16/thinkpad-x62/">"Frankenpad"</a> and
learned some details about it; I showed my mechanical keyboards to
other <i>aficionados</i>; I unexpectedly received a bottle of <a href="https://www.gouletpens.com/rohrer-klingner-leipziger-schwarz-50ml-bottled-fountain-pen-ink/p/rk40707050">Rohrer &amp;
Klingner Leipziger Schwarz</a> fountain pen ink (thank you!).
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/haskell-day-in-rome.html</link>
  <guid>https://stefanorodighiero.net/blog/haskell-day-in-rome.html</guid>
  <pubDate>Sat, 18 Nov 2017 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Lisp is the greatest single programming language ever designed]]></title>
  <description><![CDATA[
<p>
<a href="https://www.quora.com/What-did-Alan-Kay-mean-by-Lisp-is-the-greatest-single-programming-language-ever-designed">Another insightful</a> post by Alan Kay on Quora:
</p>

<blockquote>
<p>
One of our many problems with thinking is “cognitive load”: the number
of things we can pay attention to at once. The cliche is 7±2, but for
many things it is even less. We make progress by making those few
things be more powerful.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/lisp-is-the-greatest-single-programming-language-ever-designed.html</link>
  <guid>https://stefanorodighiero.net/blog/lisp-is-the-greatest-single-programming-language-ever-designed.html</guid>
  <pubDate>Thu, 26 Oct 2017 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Interview with Alan Kay]]></title>
  <description><![CDATA[
<p>
<a href="https://www.fastcompany.com/40435064/what-alan-kay-thinks-about-the-iphone-and-technology-now">The Father of mobile computing is not impressed</a>
</p>

<p>
An interview with Alan Kay caught my attention this weekend.  There
are many things worth noting and I invite you to read the entire
article, but a few of them are particularly interesting.
</p>

<blockquote>
<p>
And by the way, chat and tweeting? Remove that, because the utterances
are so small, they’re basically transliterations of oral. And that has
been studied in Africa by some of Jerome Bruner’s students.
</p>

<p>
Putting a writing system into an oral society doesn’t actually do it,
doesn’t change them. It requires something more, because the thing
that’s important about writing and how it changes the thinking of the
civilization is the literate aspects of it, the structure and the
thought, in various ways. Anyway, so this is all stuff that’s water
over the dam, but most people don’t understand it. Most people in
media don’t understand it.
</p>
</blockquote>

<blockquote>
<p>
In fact, mobile computers, he says, have turned out to be
mind-numbing consumption devices—sophisticated televisions—rather
than the wheels for the mind that Steve Jobs envisioned.
</p>
</blockquote>
<div class="taglist"></div></div>]]></description>
  <link>https://stefanorodighiero.net/blog/interview-with-alan-kay.html</link>
  <guid>https://stefanorodighiero.net/blog/interview-with-alan-kay.html</guid>
  <pubDate>Mon, 18 Sep 2017 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA["The right thing should be easier to do"]]></title>
  <description><![CDATA[
<p>
I register here a series of tweets I already posted, for further
ruminations.
</p>

<blockquote>
<p>
One nice thing about Lisp and image based dev environments is that
they make the act of exploring easier and more frictionless. This
means producing something working is easier, when you're learning a
new API or technology. On the other hand they make easier also to
transform a crack-fueled idea into something deceitfully working,
especially if you don't know well the domain. Thus breaking the rule
"Right things should be easier to do", I guess.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-lisp.html">lisp</a> <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[lisp]]></category>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/the-right-thing-should-be-easier-to-do.html</link>
  <guid>https://stefanorodighiero.net/blog/the-right-thing-should-be-easier-to-do.html</guid>
  <pubDate>Thu, 07 Sep 2017 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[August 2017]]></title>
  <description><![CDATA[
<p>
I spent the entire month in Berlin, half telecommuting, half being
my summer vacations. So, I had some free time I spent in many ways,
in particular:
</p>

<ul class="org-ul">
<li>Riding bike. Berlin is a very nice city to visit with a bike. Most
of the streets have room dedicated to cyclists. Gardens and parks
are a few minutes away, wherever you are. I guess the average
velocity of the bikers is higher compared to Italy. Average
attention and respect is higher too.</li>
<li>Programming
<ul class="org-ul">
<li>Some progress with my Scheme interpreter, the environment model
is kind of working (enabling features like closures), but I'm
still having problems with quoting (this is what prevents me
from pushing lastest changed to a public repository).</li>
<li>Minor fiddling with Lisp, specifically using CEPL (I have I
rather ambitious project idea).</li>
</ul></li>
<li>Reading
<ul class="org-ul">
<li><a href="http://stefanorodighiero.net/books/designing-data-intensive-applications.html">Designing Data-Intensive Applications</a> by Martin Kleppmann</li>
<li><a href="http://www.librarything.com/work/book/144723086">The Rise and Fall of Dodo</a> by by Nicole Galland and Neal Stephenson</li>
<li><a href="http://www.librarything.com/work/book/145325663">Winter of the World</a> by Ken Follett. A friend recommended the
Century Trilogy to me (this is book two). Not my usual genre,
but it flows easily and as I developed an attachment for some of
the characters, I want to know what is going to happen to them.</li>
</ul></li>
<li>Painting
<ul class="org-ul">
<li>I was scouting the web for technical
conferences to attend, but I found instead a watercolor course
for beginners. One could even register for just one lesson. I
ended up doing five (7.5 hours total). It was very fun,
interesting and useful, absolutely worth the money. And I made
some new friends in the process. Call it serendipity.</li>
</ul></li>
<li>Playing
<ul class="org-ul">
<li>See below about The Swapper</li>
</ul></li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/august-2017.html</link>
  <guid>https://stefanorodighiero.net/blog/august-2017.html</guid>
  <pubDate>Tue, 05 Sep 2017 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[The Swapper]]></title>
  <description><![CDATA[

<figure id="org6296c5e">
<img src="./images/swapper.png" alt="swapper.png">

</figure>

<p>
Decided to download a new game from Steam, The Swapper.
Interesting game mechanic, and daunting sci-fi setting.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-games.html">games</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[games]]></category>
  <link>https://stefanorodighiero.net/blog/the-swapper.html</link>
  <guid>https://stefanorodighiero.net/blog/the-swapper.html</guid>
  <pubDate>Sat, 19 Aug 2017 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Orankesee (Berlin short bike stroll)]]></title>
  <description><![CDATA[
<p>
It's remarkable how easy and quick it is to reach green areas and
parks in Berlin. This is a mere 20 minutes from where I'm staying. I
took many pictures (they're going to be reference material for future
<a href="../watercolors/">watercolor paintings</a>).
</p>

<p>
<img src="./images/IMG_20170806_110549-thumb.jpg" alt="IMG_20170806_110549-thumb.jpg">
<img src="./images/IMG_20170806_111237-2-thumb.jpg" alt="IMG_20170806_111237-2-thumb.jpg">
<img src="./images/IMG_20170806_111759-thumb.jpg" alt="IMG_20170806_111759-thumb.jpg">
</p>
<div class="taglist"></div></div>]]></description>
  <link>https://stefanorodighiero.net/blog/orankesee-(berlin-short-bike-stroll).html</link>
  <guid>https://stefanorodighiero.net/blog/orankesee-(berlin-short-bike-stroll).html</guid>
  <pubDate>Sun, 06 Aug 2017 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Melvin Decimal System stats on LibraryThing]]></title>
  <description><![CDATA[
<p>
I just noticed <a href="http://blog.librarything.com/main/2017/07/your-library-in-dewey/">LibraryThing released a new feature</a>.
</p>


<figure id="org33c695d">
<img src="./images/melvin.png" alt="melvin.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/melvin-decimal-system-stats-on-librarything.html</link>
  <guid>https://stefanorodighiero.net/blog/melvin-decimal-system-stats-on-librarything.html</guid>
  <pubDate>Wed, 02 Aug 2017 15:50:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[The Rise and Fall of D.O.D.O.]]></title>
  <description><![CDATA[

<figure id="orgd339e7e">
<img src="./images/dodo.jpg" alt="dodo.jpg">

</figure>

<p>
I started reading last Neal Stephenson's (and Nicole Galland's)
novel. I'm only a few dozen pages into the book: it's soon to tell
but it seems to be less "hard" SF than then other things I read from
Stephenson. We'll see.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/the-rise-and-fall-of-dodo.html</link>
  <guid>https://stefanorodighiero.net/blog/the-rise-and-fall-of-dodo.html</guid>
  <pubDate>Tue, 18 Jul 2017 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[CEPL]]></title>
  <description><![CDATA[
<p>
This weekend I have been exploring <a href="https://github.com/cbaggers/cepl">CEPL</a>: "a lispy and REPL-friendly
Common Lisp library for working with OpenGL", as its <a href="http://techsnuffle.com/">author</a> writes.
I have no prior experience with OpenGL, but thanks to Baggers' video
series <a href="https://www.youtube.com/playlist?list=PL2VAYZE_4wRITJBv6saaKouj4sWSG1FcS">"Pushing pixels with Lisp"</a>, and predating the examples I
found, I managed to write some working code. I have a project idea
in mind, let's see how it ends up.
</p>


<figure id="org0ec7cfe">
<img src="./images/cepl.jpg" alt="cepl.jpg">

</figure>

<p>
A couple of remarks if you're inclined to experiment on your own.
</p>

<ul class="org-ul">
<li>When I started I was not able to run <code>cepl:repl</code>, due to the
OpenGL version exposed by my driver (3.0, whereas the mininum for
CEPL is 3.1). But that's not the actual version supported by the
hardware. To access the real capabilities, and ultimately to be
able to run CEPL, you must ask explicitly, for example <code>(cepl:repl
    800 600 3.1)</code>; I initially missed that, so I spent time trying to
solve the wrong problem.</li>

<li><p>
I work with xmonad. The default tiled windows positioning is not
ideal with the CEPL output window, but thankfully CEPL's window is
easy to identify at <code>manageHook</code> level by its title. So I added
this in my configuration: <code>&lt;+&gt; (title =? "CEPL" --&gt; doFloat)</code>. For
example:
</p>

<div class="org-src-container">
<pre class="src src-haskell"><span class="org-haskell-definition">myManageHook</span> <span class="org-haskell-operator">=</span> manageDocks
  <span class="org-haskell-operator">&lt;+&gt;</span> (title <span class="org-haskell-operator">=?</span> <span class="org-string">"CEPL"</span> <span class="org-haskell-operator">--&gt;</span> doFloat)
  <span class="org-haskell-operator">&lt;+&gt;</span> manageHook defaultConfig
</pre>
</div></li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-lisp.html">lisp</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[lisp]]></category>
  <link>https://stefanorodighiero.net/blog/cepl.html</link>
  <guid>https://stefanorodighiero.net/blog/cepl.html</guid>
  <pubDate>Sun, 16 Jul 2017 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[When did you start using Emacs?]]></title>
  <description><![CDATA[
<p>
<a href="https://www.reddit.com/r/emacs/comments/6fytr5/when_did_you_start_using_emacs/">When did you start using Emacs?</a>
</p>

<p>
Noticed this Reddit thread in one of <a href="http://sachachua.com/blog/2017/06/2017-06-12-emacs-news/">Sacha Chua's Emacs News posts</a>, and wondered
what I could answer.
</p>

<div class="org-src-container">
<pre class="src src-text">~/.emacs.d (master) $ git log --reverse --pretty=format:%ai | head -n 1
2014-05-23 10:29:04 +0200
</pre>
</div>

<p>
I didn't realize it's been 3 years already since I started using Emacs.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/when-did-you-start-using-emacs.html</link>
  <guid>https://stefanorodighiero.net/blog/when-did-you-start-using-emacs.html</guid>
  <pubDate>Wed, 14 Jun 2017 10:10:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Record Keeping]]></title>
  <description><![CDATA[
<p>
<a href="https://alexschroeder.ch/wiki/2017-04-27_Record_Keeping">Record Keeping</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/record-keeping.html</link>
  <guid>https://stefanorodighiero.net/blog/record-keeping.html</guid>
  <pubDate>Fri, 28 Apr 2017 09:55:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Indirect buffers]]></title>
  <description><![CDATA[
<p>
Inspired by a post found on the excellent <a href="http://sachachua.com/blog/2017/04/2017-04-03-emacs-news/">Emacs news</a> curated by Sasha
Chua (<a href="https://vimvalley.com/replacing-scrivener-with-emacs-and-vim/">Replacing Scrivener with Emacs and Vim</a>), I decided to give
indirect buffers another try.
</p>

<p>
Indirect buffers are buffers that share text with another buffer (the
<i>base buffer</i>); org-mode, for example, allows the user to display a
subtree in a indirect buffer, which might be a convenient way to focus
on a particular section of a document.
</p>

<p>
Convenient but not practical to me, as I keep forgetting the
combination used to open that indirect buffer (<code>C-c C-x b</code>), plus the
cursor does not move where I'd want it. Here some code I borrowed from
the configuration presented in the post: it is very simple, and in my
opinion it makes the usage of indirect buffers a lot more pleasant:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">open-subtree-in-another-window</span> ()
  (<span class="org-keyword">interactive</span>)
  (org-tree-to-indirect-buffer)
  (windmove-right))

(global-set-key (kbd <span class="org-string">"C-M-l"</span>) 'open-subtree-in-another-window)
</pre>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/indirect-buffers.html</link>
  <guid>https://stefanorodighiero.net/blog/indirect-buffers.html</guid>
  <pubDate>Tue, 04 Apr 2017 11:55:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Wacom tablet]]></title>
  <description><![CDATA[
<p>
Quite surprisingly, the rotation property is a property of the stylus
and the eraser, not of the pad.
</p>

<div class="org-src-container">
<pre class="src src-nil">$ xsetwacom --set "Wacom Bamboo 16FG 4x5 Pen stylus" Rotate half
$ xsetwacom --set "Wacom Bamboo 16FG 4x5 Pen eraser" Rotate half
</pre>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-hw.html">hw</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[hw]]></category>
  <link>https://stefanorodighiero.net/blog/wacom-tablet.html</link>
  <guid>https://stefanorodighiero.net/blog/wacom-tablet.html</guid>
  <pubDate>Sun, 26 Mar 2017 01:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Haskell Day]]></title>
  <description><![CDATA[
<p>
Haskell Day in Milan, hosted by Mikamai/LinkMe offices.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/haskell-day.html</link>
  <guid>https://stefanorodighiero.net/blog/haskell-day.html</guid>
  <pubDate>Sat, 25 Feb 2017 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Games]]></title>
  <description><![CDATA[
<p>
I've been playing more than the usual, recently:
</p>

<ul class="org-ul">
<li><a href="https://thelastdoor.com/">The Last Door</a> (I played the Android version) - This is a classic
point-and-click adventure.  Rather simple, but the plot -a homage to
Lovecraft's and Poe's horror tales- is interesting. Special mention
for the original soundtrack, a real plus in setting the mood. The
graphics is intentionally low-res and pixelated, an odd choice that
surprisingly played well on a game of this type: I guess it is
because the player's mind has to convert the limited detail the
images offer into actionable information, thus staying more
focused. In practice, I ended up being immersed into the game
reality, and that made the scary moments (some of them really
upsetting) more effective. Recommended.</li>

<li><a href="https://saraismissing.itch.io/sim">SIM</a> (Sara is missing) (I played the Android version) - In this game
of interactive fiction Sara is missing and you find her
smartphone. You're supposed to rescue her, looking for clues in her
messages, emails and whatnot, with the aid of Iris, an artificial
intelligent system running on her phone. The game is very simple and
the player is merely instrumental in letting the story unfold. There
are a few scary moments, but in retrospective they were more about
how the message was delivered, rather than the message itself. To
sum up, the game mechanism is interesting but I would have
appreciated a more complex plot.</li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-games.html">games</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[games]]></category>
  <link>https://stefanorodighiero.net/blog/games.html</link>
  <guid>https://stefanorodighiero.net/blog/games.html</guid>
  <pubDate>Wed, 22 Feb 2017 14:54:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Mindstorms]]></title>
  <description><![CDATA[
<p>
<a href="http://mindstorms.media.mit.edu/">Mindstorms</a>
</p>

<blockquote>
<p>
Seymour Papert’s Mindstorms was published by Basic Books in 1980, and
outlines his vision of children using computers as instruments for
learning. A second edition, with new Forewords by John Sculley and
Carol Sperry, was published in 1993. The book remains as relevant now
as when first published almost forty years ago.
</p>

<p>
The Media Lab is grateful to Seymour Papert’s family for allowing us
to post the text here. We invite you to add your comments and
reflections.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/mindstorms.html</link>
  <guid>https://stefanorodighiero.net/blog/mindstorms.html</guid>
  <pubDate>Sat, 18 Feb 2017 13:29:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[xmonad + Libreoffice problems]]></title>
  <description><![CDATA[
<p>
Apparently I fixed the pesky problems I had with xmonad + Libreoffice.
</p>


<figure id="org75c1c77">
<img src="./images/xmonad-patch.png" alt="xmonad-patch.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/xmonad-+-libreoffice-problems.html</link>
  <guid>https://stefanorodighiero.net/blog/xmonad-+-libreoffice-problems.html</guid>
  <pubDate>Mon, 23 Jan 2017 14:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[hledger-dupes is now in hledger]]></title>
  <description><![CDATA[
<p>
Simon Michael asked me to include <a href="http://stefanorodighiero.net/software/hledger-dupes.html">hledger-dupes</a> in the <a href="https://github.com/simonmichael/hledger/tree/master/bin">main hledger repo</a>.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/hledger-dupes-is-now-in-hledger.html</link>
  <guid>https://stefanorodighiero.net/blog/hledger-dupes-is-now-in-hledger.html</guid>
  <pubDate>Tue, 10 Jan 2017 00:41:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Scheme interpreter going on]]></title>
  <description><![CDATA[
<p>
I spent part of the weekend on my Scheme interpreter implementation,
after a long hiatus. Cleaned up some code, and started enstablishing
the grounds for adding closures (thus passing from the substitution
model to the environment model of evaluation, a profound change).
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/scheme-interpreter-going-on.html</link>
  <guid>https://stefanorodighiero.net/blog/scheme-interpreter-going-on.html</guid>
  <pubDate>Mon, 05 Dec 2016 10:35:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Why Catholics Built Secret Astronomical Features Into Churches to Help Save Souls]]></title>
  <description><![CDATA[
<p>
<a href="http://www.atlasobscura.com/articles/catholics-built-secret-astronomical-features-into-churches-to-help-save-souls">Why Catholics Built Secret Astronomical Features Into Churches to Help Save Souls</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/why-catholics-built-secret-astronomical-features-into-churches-to-help-save-souls.html</link>
  <guid>https://stefanorodighiero.net/blog/why-catholics-built-secret-astronomical-features-into-churches-to-help-save-souls.html</guid>
  <pubDate>Thu, 17 Nov 2016 19:16:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Quick, How Might the Alien Spacecraft Work?]]></title>
  <description><![CDATA[
<p>
<a href="http://blog.stephenwolfram.com/2016/11/quick-how-might-the-alien-spacecraft-work/">Quick, How Might the Alien Spacecraft Work?</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/quick-how-might-the-alien-spacecraft-work.html</link>
  <guid>https://stefanorodighiero.net/blog/quick-how-might-the-alien-spacecraft-work.html</guid>
  <pubDate>Mon, 14 Nov 2016 12:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[:syntax off]]></title>
  <description><![CDATA[
<p>
<a href="http://dudzik.co/digress-into-development/syntax-off/">:syntax off</a>
</p>

<p>
Maybe syntax highlighting is not as good as it seems.
</p>
<div class="taglist"></div></div>]]></description>
  <link>https://stefanorodighiero.net/blog/syntax-off.html</link>
  <guid>https://stefanorodighiero.net/blog/syntax-off.html</guid>
  <pubDate>Sun, 06 Nov 2016 23:52:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[The Case Against TODO]]></title>
  <description><![CDATA[
<p>
<a href="http://wordaligned.org/docs/todo/index.html">The Case Against TODO</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/the-case-against-todo.html</link>
  <guid>https://stefanorodighiero.net/blog/the-case-against-todo.html</guid>
  <pubDate>Fri, 28 Oct 2016 17:23:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[IRCv3]]></title>
  <description><![CDATA[
<p>
<a href="http://ircv3.net/">IRCv3</a>
</p>

<blockquote>
<p>
The IRCv3 Working Group is a collection of IRC client and server
software authors working to enhance, maintain and standardize the IRC
protocol using backwards-compatible extensions.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/ircv3.html</link>
  <guid>https://stefanorodighiero.net/blog/ircv3.html</guid>
  <pubDate>Mon, 24 Oct 2016 16:37:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[A history of storage media]]></title>
  <description><![CDATA[
<p>
<a href="https://codewords.recurse.com/issues/seven/a-history-of-storage-media">A history of storage media</a>
Kiran Bhattaram published a very interesting piece about how storage
evolved in computing.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/a-history-of-storage-media.html</link>
  <guid>https://stefanorodighiero.net/blog/a-history-of-storage-media.html</guid>
  <pubDate>Wed, 12 Oct 2016 16:46:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Emacs Lisp's Future]]></title>
  <description><![CDATA[
<p>
<a href="https://lists.gnu.org/archive/html/emacs-devel/2016-10/msg00125.html">Emacs Lisp's Future</a>
A thread from two years ago reemerged
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/emacs-lisps-future.html</link>
  <guid>https://stefanorodighiero.net/blog/emacs-lisps-future.html</guid>
  <pubDate>Mon, 10 Oct 2016 15:57:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Writing a test library for Common Lisp]]></title>
  <description><![CDATA[
<p>
<a href="http://stefanorodighiero.net/software/writing-a-test-library.html">Writing a test library for Common Lisp</a>
</p>

<p>
New page, with some notes about the ongoing process of writing
a test library for CL (just a toy project, I'm not going to spoil
the ecosystem).
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-lisp.html">lisp</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[lisp]]></category>
  <link>https://stefanorodighiero.net/blog/writing-a-test-library-for-common-lisp.html</link>
  <guid>https://stefanorodighiero.net/blog/writing-a-test-library-for-common-lisp.html</guid>
  <pubDate>Tue, 04 Oct 2016 12:29:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA["Finding most frequent element in a list"]]></title>
  <description><![CDATA[
<p>
A <a href="http://stackoverflow.com/questions/39670342/find-most-frequent-element-in-a-list-in-lisp">question on Stackoverflow</a> and a brief search led me to some thoughts
I want to register to document my learning experience.
</p>

<blockquote>
<p>
I've been searching for a while for a function that does this in
(Common) Lisp. Does one already exist, or do I need to code it on my
own? To be more specific, I'm looking for a function that if I fed it
in something like <code>'(1 2 4 1)</code>, it would return <code>1</code>?
</p>
</blockquote>

<p>
First of all, the request specifics are incomplete: what should the
function return if there's more than one element that occur most
frequently? What is the notion of sameness among the elements of the
list?
</p>

<p>
As a beginner, I often find myself looking for idiomatic ways to do
things: reusing code in a package is apparently the way to go, but I
haven't found a clear path yet for such researchs: I usually look for
something in Quicklisp package collection, then on github and the
Clwiki. I suspect that, at least for these simple functions, CL makes
it so easy to roll your own version that everybody end up writing a
homemade solution.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> <a href="https://stefanorodighiero.net/blog/tag-lisp.html">lisp</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <category><![CDATA[lisp]]></category>
  <link>https://stefanorodighiero.net/blog/finding-most-frequent-element-in-a-list.html</link>
  <guid>https://stefanorodighiero.net/blog/finding-most-frequent-element-in-a-list.html</guid>
  <pubDate>Sun, 25 Sep 2016 11:45:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[A-LANG: ways to implement computer languages on 6502s]]></title>
  <description><![CDATA[
<p>
<a href="http://www.dwheeler.com/6502/a-lang.txt">A-LANG: ways to implement computer languages on 6502s</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/a-lang-ways-to-implement-computer-languages-on-6502s.html</link>
  <guid>https://stefanorodighiero.net/blog/a-lang-ways-to-implement-computer-languages-on-6502s.html</guid>
  <pubDate>Tue, 20 Sep 2016 09:08:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Mac OS X -> Linux]]></title>
  <description><![CDATA[
<p>
In other news, I completely switched from Mac OS X to Linux.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/mac-os-x---linux.html</link>
  <guid>https://stefanorodighiero.net/blog/mac-os-x---linux.html</guid>
  <pubDate>Mon, 19 Sep 2016 23:41:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[The System Paradigm]]></title>
  <description><![CDATA[
<p>
<a href="http://realworldclojure.com/the-system-paradigm/">The System Paradigm</a>
</p>
<blockquote>
<p>
I have used a REPL connected to a production system to change
code. Yes, I have changed code in a running production system. Does
that terrify you? Honestly, it kind of terrifies me a little, too!
Regardless, sometimes the best way—the only way—to diagnose a
particularly nasty bug is to poke a living organism and observe the
result. I am more like a doctor diagnosing a patient and less like a
detective trying to piece together a sequence of events from the clues
left behind.
</p>
</blockquote>

<p>
There's that and plenty of fascinating observations about the
difference between a system constructed as a organism (system
paradigm), and constructed as a cathedral (or a pyramid: that's the
language paradigm).
</p>

<p>
I am fascinated, but I'd like to talk to someone who had this kind of
experience. I understand the beauty and the utility of the REPL, yet
intervening in a system in such a organic and (apparently, to me) not
organized fashion seems more dangerous than it's compelling. How one
can ensure the changes applied to the running deploy will be
incorporated in the code base? How can you properly "undo" the changes
you've made while you were tinkering with the system.
Anyway, a nice and inspiring post.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/the-system-paradigm.html</link>
  <guid>https://stefanorodighiero.net/blog/the-system-paradigm.html</guid>
  <pubDate>Mon, 19 Sep 2016 23:40:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[The Classics of Science Fiction]]></title>
  <description><![CDATA[
<p>
<a href="https://auxiliarymemory.com/2016/08/29/the-classics-of-science-fiction-v-2-archived/">The Classics of Science Fiction</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/the-classics-of-science-fiction.html</link>
  <guid>https://stefanorodighiero.net/blog/the-classics-of-science-fiction.html</guid>
  <pubDate>Thu, 01 Sep 2016 11:14:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Status update]]></title>
  <description><![CDATA[
<p>
Some days off, not very much done. Somehow relevant in the context of
this stream:
</p>

<ul class="org-ul">
<li>Writing some simple Common Lisp, for exercise.  The <a href="https://github.com/larsen/wireworld">Wireworld
simulator and editor</a> &#x2013;which has some significance <i>per se</i> besides
being interesting as a CL exercise&#x2013; is on pause (while I try to
figure out Lispbuilder-sdl's ways of treating surfaces), and I'm now
on something simpler. It's a <a href="https://github.com/larsen/sudoku-solver">Sudoku solver assistant</a>. It's not clear
to me what the scope of the project will be, however I'm discovering
handy techniques and tools useful for a "real" system: for example I
borrowed from scmutils the idea of using TeX to obtain a
representation of the Sudoku problem (it's faster than I initially
thought).</li>
<li>Reading <a href="http://www.nealstephenson.com/seveneves.html">Seveneves</a> by Neal Stephenson. I hope to write something more
substantial as I reach its end.</li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-lisp.html">lisp</a> <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[lisp]]></category>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/status-update.html</link>
  <guid>https://stefanorodighiero.net/blog/status-update.html</guid>
  <pubDate>Mon, 15 Aug 2016 01:22:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[ELisp refactoring tools]]></title>
  <description><![CDATA[
<p>
Started working on <a href="https://github.com/larsen/emacs-configuration/blob/master/larsen-refactoring.el">tools to help me refactor Elisp code</a>.
Here the first main function:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">create-new-function</span> (function-name)
  <span class="org-doc">"Creates a new function definition, given a selection. Removes</span>
<span class="org-doc">  the selection and replaces it with a call to the newly created function"</span>
  (<span class="org-keyword">interactive</span> <span class="org-string">"sFunction name: "</span>)
  (<span class="org-keyword">let</span> ((code (get-region)))
    (<span class="org-keyword">progn</span>
      (<span class="org-keyword">save-excursion</span>
        (<span class="org-keyword">progn</span>
          (move-to-empty-point)
          (insert-new-function-definition function-name code)))
      (insert <span class="org-string">"("</span> function-name <span class="org-string">" )"</span>))))
</pre>
</div>

<p>
Comments welcome.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/elisp-refactoring-tools.html</link>
  <guid>https://stefanorodighiero.net/blog/elisp-refactoring-tools.html</guid>
  <pubDate>Mon, 25 Jul 2016 18:19:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Surprising reasons to use a syntax-coloring editor]]></title>
  <description><![CDATA[
<p>
<a href="http://blog.plover.com/prog/syntax-coloring-1998.html">Surprising reasons to use a syntax-coloring editor</a>
</p>

<p>
Mark Jason Dominus on syntax higlighting.
</p>

<blockquote>
<p>
Syntax highlighters should be highlighting the semantic content like
expression boundaries, implied parentheses, boolean subexpressions,
interpolated variables and other non-apparent semantic features. I
think there is probably a lot of interesting work to be done
here. Often you hear programmers say things like “Oh, I didn't see the
that the trailing comma was actually a period.” That, in my opinion,
is the kind of thing the syntax highlighter should call out. How often
have you heard someone say “Oh, I didn't see that while there”?
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/surprising-reasons-to-use-a-syntax-coloring-editor.html</link>
  <guid>https://stefanorodighiero.net/blog/surprising-reasons-to-use-a-syntax-coloring-editor.html</guid>
  <pubDate>Tue, 19 Jul 2016 09:14:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Bit Twiddling Hacks]]></title>
  <description><![CDATA[
<p>
<a href="https://graphics.stanford.edu/~seander/bithacks.html">Bit Twiddling Hacks</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/bit-twiddling-hacks.html</link>
  <guid>https://stefanorodighiero.net/blog/bit-twiddling-hacks.html</guid>
  <pubDate>Mon, 04 Jul 2016 18:34:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Automatic webjump list from org]]></title>
  <description><![CDATA[
<p>
<a href="https://www.emacswiki.org/emacs/WebJump">Webjump</a> is a bookmark facility for Emacs. Fed with a list of bookmarks
(as an <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Association-Lists.html">association list</a>) it presents a menu, then open a browser page
with the selected link. Simple and handy.
</p>

<p>
This function converts my list of bookmarks (expressend in a org
document that is also used to build my <a href="http://stefanorodighiero.net/links.html">Links</a> page) in a data structure
suitable for webjump.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">get-webjump-sites</span> ()
  (<span class="org-keyword">with-current-buffer</span> (get-file-buffer <span class="org-string">"~/Dropbox/stefanorodighiero.net/links.org"</span>)
    (delq nil
          (mapcar
           (<span class="org-keyword">lambda</span> (i)
             (<span class="org-keyword">let</span> ((item-string (cdr (assoc <span class="org-string">"ITEM"</span> i)))
                   (regex <span class="org-string">"\\[\\[</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">.*</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">\\]\\[</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">.*</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">\\]\\]"</span>))
               (<span class="org-keyword">if</span> (posix-string-match regex item-string)
                   `(,(match-string 2 item-string) . ,(match-string 1 item-string)))))
           (org-map-entries 'org-entry-properties nil 'file)))))

(<span class="org-keyword">setq</span> webjump-sites (get-webjump-sites))
</pre>
</div>
<div id="outline-container-org523c233" class="outline-2">
<h2 id="org523c233">Update <span class="timestamp-wrapper"><span class="timestamp">&lt;2016-06-28 Tue 23:26&gt;</span></span></h2>
<div class="outline-text-2" id="text-org523c233">
<p>
I asked for a review on #emacs, bpalmer kindly pointed out a few things
that should be done in a different manner:
</p>

<ul class="org-ul">
<li>I'm building a list containing nils, which I need to delete later
(<code>delq</code>). I shouldn't be creating them in the first place</li>
<li>Probably no need for <code>posix-string-match</code> instead of <code>string-match</code></li>
<li>I should provide a docstring</li>
</ul>

<p>
So, here a better version, using the <code>loop</code> macro
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">require</span> '<span class="org-constant">cl</span>)
(<span class="org-keyword">defun</span> <span class="org-function-name">get-webjump-sites</span> ()
  <span class="org-doc">"converts a org document in a data structure suitable for webjump"</span>
  (<span class="org-keyword">let</span> ((regex <span class="org-string">"\\[\\[</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">.*</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">\\]\\[</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">.*</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">\\]\\]"</span>))
    (<span class="org-keyword">with-current-buffer</span> (get-file-buffer <span class="org-string">"~/Dropbox/stefanorodighiero.net/links.org"</span>)
      (<span class="org-keyword">loop</span> for i in (org-map-entries 'org-entry-properties nil 'file)
            for item-string = (cdr (assoc <span class="org-string">"ITEM"</span> i))
            if (string-match regex item-string)
            collect `(,(match-string 2 item-string) . ,(match-string 1 item-string))))))
</pre>
</div>

<p>
It's more concise and direct, definitely better, but I'm still not
satisfied: it lacks clarity and cleanliness.
</p>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[emacs]]></category>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/automatic-webjump-list-from-org.html</link>
  <guid>https://stefanorodighiero.net/blog/automatic-webjump-list-from-org.html</guid>
  <pubDate>Tue, 28 Jun 2016 17:29:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[New site structure]]></title>
  <description><![CDATA[
<p>
I just published a restructuring of my website. Content is more or
less the same. Main difference is I ditched the blog: I discovered
blogging (I mean, organizing the stuff I publish as distinct articles
ordered in time) is not for me. I'm more comfortable dedicating a page
to each project I'm following, and keep updating the page as the
project proceeds.
</p>

<p>
Ditching the blog also means I'm now using one tool only for all the
editing and publishing.
</p>

<p>
Things to do:
</p>
<ul class="org-ul">
<li>testing</li>
<li>implement some sort of feed for the updates</li>
<li>re-linking minor stuff that has not yet a place in the new structure</li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/new-site-structure.html</link>
  <guid>https://stefanorodighiero.net/blog/new-site-structure.html</guid>
  <pubDate>Thu, 23 Jun 2016 22:07:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Manipulate regions]]></title>
  <description><![CDATA[
<p>
A useful code snippet to manipulate regions.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">my/org-convert-region-quote</span> ()
  <span class="org-doc">"Converts selection in a QUOTE block"</span>
  (<span class="org-keyword">interactive</span>)
  (<span class="org-keyword">progn</span> (insert <span class="org-string">"#+END_QUOTE\n"</span>)
         (exchange-point-and-mark)
         (insert <span class="org-string">"#+BEGIN_QUOTE\n"</span>)))
</pre>
</div>

<p>
Knowing about <a href="https://www.gnu.org/software/emacs/manual/html_node/eintr/Point-and-mark.html">point and mark</a> is useful to understand the code. One
defect of this code is that it doesn't work if you select a region
starting from the end.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/manipulate-regions.html</link>
  <guid>https://stefanorodighiero.net/blog/manipulate-regions.html</guid>
  <pubDate>Fri, 10 Jun 2016 10:09:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Darius Bacon]]></title>
  <description><![CDATA[
<p>
Oh  good lord I found again a web page I was used to peruse like 20
years ago. Many journeys started from there. It's the personal homepage
of <a href="http://wry.me/~darius/">Darius Bacon</a>.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/darius-bacon.html</link>
  <guid>https://stefanorodighiero.net/blog/darius-bacon.html</guid>
  <pubDate>Tue, 07 Jun 2016 14:40:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[The Early History of Smalltalk]]></title>
  <description><![CDATA[
<p>
<a href="http://worrydream.com/EarlyHistoryOfSmalltalk/">The Early History of Smalltalk</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/the-early-history-of-smalltalk.html</link>
  <guid>https://stefanorodighiero.net/blog/the-early-history-of-smalltalk.html</guid>
  <pubDate>Thu, 02 Jun 2016 10:54:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Alan Kay's reading list]]></title>
  <description><![CDATA[
<p>
<a href="http://www.squeakland.org/resources/books/readingList.jsp">Alan Kay's reading list</a>
</p>

<p>
(reproducing it here for archive)
</p>

<table>


<colgroup>
<col  class="org-left">

<col  class="org-left">

<col  class="org-left">
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">category</th>
<th scope="col" class="org-left">title</th>
<th scope="col" class="org-left">authors</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Technology &amp; Media</td>
<td class="org-left"><a href="https://www.librarything.com/work/85998">The Gutenberg Galaxy: The Making of Typographic Man</a></td>
<td class="org-left">Marshall Mcluhan</td>
</tr>

<tr>
<td class="org-left">Technology &amp; Media</td>
<td class="org-left"><a href="https://www.librarything.com/work/86020">Understanding Media</a></td>
<td class="org-left">Marshall Mcluhan</td>
</tr>

<tr>
<td class="org-left">Technology &amp; Media</td>
<td class="org-left"><a href="https://www.librarything.com/work/323592">The Myth of the Machine</a></td>
<td class="org-left">Lewis Mumford</td>
</tr>

<tr>
<td class="org-left">Technology &amp; Media</td>
<td class="org-left"><a href="https://www.librarything.com/work/92598">Technics and Civilization</a></td>
<td class="org-left">Lewis Mumford</td>
</tr>

<tr>
<td class="org-left">Technology &amp; Media</td>
<td class="org-left"><a href="https://www.librarything.com/work/1719240">Technology, Management,and Society</a></td>
<td class="org-left">Peter Drucker</td>
</tr>

<tr>
<td class="org-left">Technology &amp; Media</td>
<td class="org-left"><a href="https://www.librarything.com/work/286768">Innovation and Entrepreneurship</a></td>
<td class="org-left">Peter Drucker</td>
</tr>

<tr>
<td class="org-left">Technology &amp; Media</td>
<td class="org-left"><a href="https://www.librarything.com/work/23577">Amusing Ourselves to Death: Public Discourse in the Age of Show Business</a></td>
<td class="org-left">Neil Postman</td>
</tr>

<tr>
<td class="org-left">Technology &amp; Media</td>
<td class="org-left"><a href="https://www.librarything.com/work/19471350">The Disappearance of Childhood</a></td>
<td class="org-left">Neil Postman</td>
</tr>

<tr>
<td class="org-left">Technology &amp; Media</td>
<td class="org-left"><a href="https://www.librarything.com/work/2314714">Conscientious Objections</a></td>
<td class="org-left">Neil Postman</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/402980">The Psycology of the Child</a></td>
<td class="org-left">Jean Piaget</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/1240480">To Understand is to Invent</a></td>
<td class="org-left">Jean Piaget</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/61057">Thought and Language</a></td>
<td class="org-left">Lev Vygotsky</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/1240480">To Understand Is to Invent</a></td>
<td class="org-left">Lev Vygotsky</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/2900372">The Psychology of Art</a></td>
<td class="org-left">Lev Vygotsky</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/485220">Towards a Theory of Instruction</a></td>
<td class="org-left">Jerome Bruner</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/656867">The Relevance of Education</a></td>
<td class="org-left">Jerome Bruner</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/167717">Instead of Education: Ways to Help People do Things Better</a></td>
<td class="org-left">John Holt</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/1378305">Teach Your Own</a></td>
<td class="org-left">John Holt</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/1445393">Essays into Literacy</a></td>
<td class="org-left">Frank Smith</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/153585">Lateral Thinking: A Textbook of Creativity</a></td>
<td class="org-left">Edward De Bono</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/29227341">Six Thinking Hats</a></td>
<td class="org-left">Edward De Bono</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/291">The Inner Game of Tennis</a></td>
<td class="org-left">Tim Gallwey</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/557451">Nurtured by Love: The Classic Approach to Talent Education</a></td>
<td class="org-left">Shinichi Suzuki</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/232570">The Secret of Childhood</a></td>
<td class="org-left">Maria Montessori</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/3207763">The School and Society</a></td>
<td class="org-left">John Dewey</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/97323">Freedom and Culture</a></td>
<td class="org-left">John Dewey</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/80862">The Act of Creation: A Study of the Conscious and Unconscious in Science and Art</a></td>
<td class="org-left">Arthur Koestler</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/2089511">The Ghost in the Machine</a></td>
<td class="org-left">Arthur Koestler</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/60994">Mindstorms</a></td>
<td class="org-left">Seymour Papert</td>
</tr>

<tr>
<td class="org-left">Learning &amp; Creativity</td>
<td class="org-left"><a href="https://www.librarything.com/work/454098">The Childrens' Machine</a></td>
<td class="org-left">Seymour Papert</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/38867">Myths to Live By</a></td>
<td class="org-left">Joseph Campbell</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/799743">The Masks of God: Creative Mythology</a></td>
<td class="org-left">Joseph Campbell</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/124156">Language and Species</a></td>
<td class="org-left">Derek Bickerton</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/68587">The Psychology of Literacy</a></td>
<td class="org-left">Silvia Scribner &amp; Mike Cole</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/25521">The Origin of Consciousness in the Breakdown of the Bicameral Mind</a></td>
<td class="org-left">Julian Jaynes</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/30221">The Interpretation of Cultures</a></td>
<td class="org-left">Clifford Geertz</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/176224">Beyond Boredom and Anxiety</a></td>
<td class="org-left">Mihaly Csikszentmihaly</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/13383">Flow: The Psychology of Optimal Experience</a></td>
<td class="org-left">Mihaly Csikszentmihalyi</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/503898">New World, New Mind: Moving Toward Conscious Evolution</a></td>
<td class="org-left">Robert Ornstein &amp; Paul Erlich</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/17613267">Maps of the Mind</a></td>
<td class="org-left">Charles Hampton-Turner</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/391">Man and his Symbols</a></td>
<td class="org-left">Carl Jung</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/923309">Modern Woman in Search of a Soul</a></td>
<td class="org-left">Carl Jung</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/45992">Society of Mind</a></td>
<td class="org-left">Marvin Minsky</td>
</tr>

<tr>
<td class="org-left">Anthropology &amp; Psychology</td>
<td class="org-left"><a href="https://www.librarything.com/work/1555316">Archetypes: A Natural History of the Self</a></td>
<td class="org-left">Anthony Stevens</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/98334">Timeaus</a></td>
<td class="org-left">Plato</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/1993">Republic</a></td>
<td class="org-left">Plato</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/46716">A History of Western Philosophy</a></td>
<td class="org-left">Bertrand Russell</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/89099">Human Knowledge: Its Scope and Limits</a></td>
<td class="org-left">Bertrand Russell</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/88323">Sceptical Essays</a></td>
<td class="org-left">Bertrand Russell</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/12299">The Passion of the Western Mind</a></td>
<td class="org-left">Richard Tarnas</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/14910">Ascent of Man</a></td>
<td class="org-left">Jacob Bronowski</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/1605091">Wisdom, Information &amp; Wonder</a></td>
<td class="org-left">Mary Midgley</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/540803">Science as Salvation: A Modern Myth and Its Meaning</a></td>
<td class="org-left">Mary Midgley</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/9740">The Human Condition</a></td>
<td class="org-left">Hannah Arendt</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/63392">Science and Sanity: An Introduction to Non-Aristotelian Systems and General Semantics</a></td>
<td class="org-left">Count Korzybski</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/795898">Science if not Enough</a></td>
<td class="org-left">Vannevar Bush</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/1610091">What I believe</a></td>
<td class="org-left">Mark Booth (Ed)</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/24392">Te-Tao Ching</a></td>
<td class="org-left">Lao-Tzu</td>
</tr>

<tr>
<td class="org-left">Philosophy</td>
<td class="org-left"><a href="https://www.librarything.com/work/18466">Zen Mind, Beginner's Mind</a></td>
<td class="org-left">Shunryu Suzuki</td>
</tr>

<tr>
<td class="org-left">Art &amp; Perception</td>
<td class="org-left"><a href="https://www.librarything.com/work/57343">Civilisation: A Personal View</a></td>
<td class="org-left">Kenneth Clark</td>
</tr>

<tr>
<td class="org-left">Art &amp; Perception</td>
<td class="org-left"><a href="https://www.librarything.com/work/268644">What is a Masterpiece</a></td>
<td class="org-left">Kenneth Clark</td>
</tr>

<tr>
<td class="org-left">Art &amp; Perception</td>
<td class="org-left"><a href="https://www.librarything.com/work/25095">Art and Illusion</a></td>
<td class="org-left">Ernst Gombrich</td>
</tr>

<tr>
<td class="org-left">Art &amp; Perception</td>
<td class="org-left"><a href="https://www.librarything.com/work/163340">Eye and Brain</a></td>
<td class="org-left">Richard Gregory</td>
</tr>

<tr>
<td class="org-left">Art &amp; Perception</td>
<td class="org-left"><a href="https://www.librarything.com/work/238356">Visual Thinking</a></td>
<td class="org-left">Rudolf Arnheim</td>
</tr>

<tr>
<td class="org-left">Design</td>
<td class="org-left"><a href="https://www.librarything.com/work/2005735">Notes on the Synthesis of Form</a></td>
<td class="org-left">Christopher Alexander</td>
</tr>

<tr>
<td class="org-left">Design</td>
<td class="org-left"><a href="https://www.librarything.com/work/1306703">Gossamer Odyssey: The Triumph of Human-Powered Flight</a></td>
<td class="org-left">Morton Grosser</td>
</tr>

<tr>
<td class="org-left">Design</td>
<td class="org-left"><a href="https://www.librarything.com/work/514077">Vehicles: Experiments in Synthetic Psychology</a></td>
<td class="org-left">Valentino Braitenberg</td>
</tr>

<tr>
<td class="org-left">Design</td>
<td class="org-left"><a href="https://www.librarything.com/work/589010">The Living Brain</a></td>
<td class="org-left">W. Gray Walter</td>
</tr>

<tr>
<td class="org-left">Design</td>
<td class="org-left"><a href="https://www.librarything.com/work/7983">The Visual Display of Quantitative Information</a></td>
<td class="org-left">Edward Tufte</td>
</tr>

<tr>
<td class="org-left">Design</td>
<td class="org-left"><a href="https://www.librarything.com/work/2815655">Envisioning Information</a></td>
<td class="org-left">Edward Tufte</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/289403">The Machinery of Life</a></td>
<td class="org-left">David Goodsell</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/138383">The Ring of Truth</a></td>
<td class="org-left">Philip Morrison</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/3845769">The Animal in Its World</a></td>
<td class="org-left">Niko Tinbergen</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/57250">Relativity Visualized</a></td>
<td class="org-left">L.C. Epstein</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/20719">Engines of Creation: The Coming Era of Nanotechnology</a></td>
<td class="org-left">Eric Drexler</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/1576656">The Blind Watchmaker</a></td>
<td class="org-left">Richard Dawkins</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/23538">The Selfish Gene</a></td>
<td class="org-left">Richard Dawkins</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/52747">Dragons of Eden</a></td>
<td class="org-left">Carl Sagan</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/24116">Broca's Brain: Reflections on the Romance of Science</a></td>
<td class="org-left">Carl Sagan</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/25805308">Neuroethology</a></td>
<td class="org-left">J.-P. Ewert</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/58717">The Character of Physical Law</a></td>
<td class="org-left">Richard Feynman</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/27937">QED: The Strange Theory of Light and Matter</a></td>
<td class="org-left">Richard Feynman</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/84194">The God Particle</a></td>
<td class="org-left">Leon Lederman</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/207523">From Quarks to Cosmos</a></td>
<td class="org-left">Leon Lederman</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/11624">The Double Helix</a></td>
<td class="org-left">James Watson</td>
</tr>

<tr>
<td class="org-left">Science &amp; Mathematics</td>
<td class="org-left"><a href="https://www.librarything.com/work/84193">The Fractal Geometry of Nature</a></td>
<td class="org-left">Benoit Mandelbrot</td>
</tr>

<tr>
<td class="org-left">Politics &amp; Economy</td>
<td class="org-left"><a href="https://www.librarything.com/work/468203">An American Primer</a></td>
<td class="org-left">Daniel Boorstin</td>
</tr>

<tr>
<td class="org-left">Politics &amp; Economy</td>
<td class="org-left"><a href="https://www.librarything.com/work/190873">The Americans : The democratic experience</a></td>
<td class="org-left">Daniel Boorstin</td>
</tr>

<tr>
<td class="org-left">Politics &amp; Economy</td>
<td class="org-left"><a href="https://www.librarything.com/work/10099872">The Federalist Papers</a></td>
<td class="org-left">Madison, Et Al</td>
</tr>

<tr>
<td class="org-left">Politics &amp; Economy</td>
<td class="org-left"><a href="https://www.librarything.com/work/37413">The Anti-Federalist Papers and the Constitutional Convention Debates</a></td>
<td class="org-left">Ralph Ketcham (Ed)</td>
</tr>

<tr>
<td class="org-left">Politics &amp; Economy</td>
<td class="org-left"><a href="https://www.librarything.com/work/17411">Common Sense</a></td>
<td class="org-left">Tom Paine</td>
</tr>

<tr>
<td class="org-left">Politics &amp; Economy</td>
<td class="org-left"><a href="https://www.librarything.com/work/375988">The Rights of Man</a></td>
<td class="org-left">Tom Paine</td>
</tr>

<tr>
<td class="org-left">Politics &amp; Economy</td>
<td class="org-left"><a href="https://www.librarything.com/work/109890">The Age of Reason</a></td>
<td class="org-left">Tom Paine</td>
</tr>

<tr>
<td class="org-left">Politics &amp; Economy</td>
<td class="org-left"><a href="https://www.librarything.com/work/2482705">An Aristocracy of Everyone: The Politics of Education and the Future of America</a></td>
<td class="org-left">Benjamin Barber</td>
</tr>

<tr>
<td class="org-left">Politics &amp; Economy</td>
<td class="org-left"><a href="https://www.librarything.com/work/98308">The Zero-Sum Society: Distribution and the Possibilities for Economic Change</a></td>
<td class="org-left">Lester Thurow</td>
</tr>

<tr>
<td class="org-left">Politics &amp; Economy</td>
<td class="org-left"><a href="https://www.librarything.com/work/97208">Economics Explained: Everything You Need to Know About How the Economy Works and Where It's Going</a></td>
<td class="org-left">Lester Thurow</td>
</tr>

<tr>
<td class="org-left">Politics &amp; Economy</td>
<td class="org-left"><a href="https://www.librarything.com/work/275113">Head to Head: The Coming Economic Battle Among Japan, Europe, and America</a></td>
<td class="org-left">Lester Thurow</td>
</tr>

<tr>
<td class="org-left">Politics &amp; Economy</td>
<td class="org-left"><a href="https://www.librarything.com/work/569266">Made in America: Regaining the Productive Edge</a></td>
<td class="org-left">Mike Dertuozos (Ed)</td>
</tr>

<tr>
<td class="org-left">Computers</td>
<td class="org-left"><a href="https://www.librarything.com/work/619340">Building Large Knowledge-Based Systems: Representation and Inference in the Cyc Project</a></td>
<td class="org-left">Doug Lenat</td>
</tr>

<tr>
<td class="org-left">Computers</td>
<td class="org-left"><a href="https://www.librarything.com/work/135222">LISP 1.5 Programmer's Manual</a></td>
<td class="org-left">John Mccarthy</td>
</tr>

<tr>
<td class="org-left">Computers</td>
<td class="org-left"><a href="https://www.librarything.com/work/323519">Computation: Finite and Infinite Machines (Automatic Computation)</a></td>
<td class="org-left">Marvin Minsky</td>
</tr>

<tr>
<td class="org-left">Computers</td>
<td class="org-left"><a href="https://www.librarything.com/work/2261391">The Architecture Machine: Toward a More Human Environment</a></td>
<td class="org-left">Nicholas Negroponte</td>
</tr>

<tr>
<td class="org-left">Computers</td>
<td class="org-left"><a href="https://www.librarything.com/work/10443066">Soft Architecture Machines</a></td>
<td class="org-left">Nicholas Negroponte</td>
</tr>
</tbody>
</table>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/alan-kays-reading-list.html</link>
  <guid>https://stefanorodighiero.net/blog/alan-kays-reading-list.html</guid>
  <pubDate>Tue, 31 May 2016 08:46:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[So you want to be a compiler wizard]]></title>
  <description><![CDATA[
<p>
<a href="http://belkadan.com/blog/2016/05/So-You-Want-To-Be-A-Compiler-Wizard/">So you want to be a compiler wizard</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/so-you-want-to-be-a-compiler-wizard.html</link>
  <guid>https://stefanorodighiero.net/blog/so-you-want-to-be-a-compiler-wizard.html</guid>
  <pubDate>Thu, 26 May 2016 18:36:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[On Google's last week announcements]]></title>
  <description><![CDATA[
<p>
One of the things presented during the Google I/O I consider
particularly important. Some annotations (which might or might not
lead to a a more structured piece):
</p>

<ul class="org-ul">
<li>it was an error to compare mobile devices to computers
<ul class="org-ul">
<li>computers have protean nature; how they behave (the function they
enable) depends on software</li>
<li>one chooses what functions his computer needs to perform, and buy
appropriate software accordingly</li>
<li>On the other hand</li>
<li>Mobile devices use the computer and a ground model, but their
nature is to be capable of many things off-the-shelves</li>
<li>Hence users can legitimately perceive as absurd the fact that
software (apps) cost money</li>
<li>It feels more natural to pay for services</li>
</ul></li>
<li>Apps are not human concept
<ul class="org-ul">
<li>I mean the fact that one has to pass from an application to
another one to accomplish tasks</li>
<li>see for example "The Human Interface" by Jef Raskin</li>
<li>On the user level, computer- and human- concepts are intermixed,
but there's no human reason to do so</li>
</ul></li>
<li>Google presented "Instant Apps"
<ul class="org-ul">
<li>it seems they would eliminate to boundaries between one
application and the other one</li>
<li>the OS is just a framework (with unified interfaces and metaphors)
where users can accomplish tasks and access to services</li>
<li>OS seamlessly manages the acquisition of other components
(modules? apps bits?) needed to do so</li>
</ul></li>
</ul>
<div class="taglist"></div></div>]]></description>
  <link>https://stefanorodighiero.net/blog/on-googles-last-week-announcements.html</link>
  <guid>https://stefanorodighiero.net/blog/on-googles-last-week-announcements.html</guid>
  <pubDate>Sun, 22 May 2016 09:30:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Nowadays, we do programming by poking]]></title>
  <description><![CDATA[
<p>
<a href="http://www.posteriorscience.net/?p=206">http://www.posteriorscience.net/?p=206</a>
<a href="https://vimeo.com/151465912#t=59m36s">https://vimeo.com/151465912#t=59m36s</a>
</p>

<blockquote>
<p>
Today, this is no longer the case. Sussman pointed out that engineers
now routinely write code for complicated hardware that they don’t
fully understand (and often can’t understand because of trade
secrecy.) The same is true at the software level, since programming
environments consist of gigantic libraries with enormous
functionality. According to Sussman, his students spend most of their
time reading manuals for these libraries to figure out how to stitch
them together to get a job done. He said that programming today is
“More like science. You grab this piece of library and you poke at
it. You write programs that poke it and see what it does. And you say,
‘Can I tweak it to do the thing I want?'”. The “analysis-by-synthesis”
view of SICP — where you build a larger system out of smaller, simple
parts — became irrelevant. Nowadays, we do programming by poking.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/nowadays-we-do-programming-by-poking.html</link>
  <guid>https://stefanorodighiero.net/blog/nowadays-we-do-programming-by-poking.html</guid>
  <pubDate>Wed, 04 May 2016 18:13:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Dyson's Dodecahedron]]></title>
  <description><![CDATA[
<p>
<a href="https://rpgcharacters.wordpress.com/">Dyson's Dodecahedron</a>
A nice collection of hand-drawn RPG maps
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/dysons-dodecahedron.html</link>
  <guid>https://stefanorodighiero.net/blog/dysons-dodecahedron.html</guid>
  <pubDate>Sun, 01 May 2016 11:47:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Isabella the Catholic brings change to Chess]]></title>
  <description><![CDATA[
<p>
<a href="http://nobility.org/2014/12/18/isabella-the-catholic-brings-change-to-chess/">Isabella the Catholic brings change to Chess</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/isabella-the-catholic-brings-change-to-chess.html</link>
  <guid>https://stefanorodighiero.net/blog/isabella-the-catholic-brings-change-to-chess.html</guid>
  <pubDate>Mon, 18 Apr 2016 12:29:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Org as a Word Processor]]></title>
  <description><![CDATA[
<p>
<a href="http://www.howardism.org/Technical/Emacs/orgmode-wordprocessor.html">Org as a Word Processor</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/org-as-a-word-processor.html</link>
  <guid>https://stefanorodighiero.net/blog/org-as-a-word-processor.html</guid>
  <pubDate>Sat, 02 Apr 2016 12:12:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA["Learning Racket" series]]></title>
  <description><![CDATA[
<p>
<a href="https://artyom.me/learning-racket-1">"Learning Racket" series</a>
  An expert programmer learns Racket and takes notes in the
  process. Many interesting remarks, for example (after discovering a <a href="http://planet.racket-lang.org/package-source/asumu/sweet.plt/1/4/planet-docs/sweet/index.html">library
  that let the user bend the language</a>):
</p>

<blockquote>
<p>
It must be any language designer's ultimate dream.
</p>

<p>
(And this is probably Lisp's greatest weakness as well – with this
level of possible diversity, everyone has to use the “common lowest
denominator” simply because nobody can agree on what alternative
syntax / library / etc. is better and should be used.)
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/learning-racket-series.html</link>
  <guid>https://stefanorodighiero.net/blog/learning-racket-series.html</guid>
  <pubDate>Tue, 29 Mar 2016 16:37:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Switched to Ubuntu Xenial Xerus]]></title>
  <description><![CDATA[
<p>
Better hardware support with less work for me (the Broadcom Wifi
chip has been recognized with no problems).
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/switched-to-ubuntu-xenial-xerus.html</link>
  <guid>https://stefanorodighiero.net/blog/switched-to-ubuntu-xenial-xerus.html</guid>
  <pubDate>Tue, 29 Mar 2016 10:38:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[eshell and why can't I convert to you]]></title>
  <description><![CDATA[
<p>
<a href="https://www.reddit.com/r/emacs/comments/48opk1/eshell_and_why_cant_i_convert_to_you/">eshell and why can't I convert to you</a>
Some interesting Emacs shell tricks in this Reddit thread.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/eshell-and-why-cant-i-convert-to-you.html</link>
  <guid>https://stefanorodighiero.net/blog/eshell-and-why-cant-i-convert-to-you.html</guid>
  <pubDate>Thu, 03 Mar 2016 08:51:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[The Lisp Curse]]></title>
  <description><![CDATA[
<p>
<a href="http://www.winestockwebdesign.com/Essays/Lisp_Curse.html">The Lisp Curse</a>
</p>

<p>
Interesting read, that resounds with something we were talking about at
last Haskell meetup.
</p>

<blockquote>
<p>
Lisp is so powerful that problems which are technical issues in other
programming languages are social issues in Lisp.
</p>

<p>
Consider the case of Scheme, again. Since making Scheme
object-oriented is so easy, many Scheme hackers have done so. More to
the point, many individual Scheme hackers have done so. In the 1990s,
this led to a veritable warehouse inventory list of object-oriented
packages for the language. The Paradox of Choice, alone, guaranteed
that none of them would become standard. Now that some Scheme
implementations have their own object orientation facilities, it's not
so bad. Nevertheless, the fact that many of these packages were the
work of lone individuals led to problems which Olin Shivers wrote
about in documenting the Scheme Shell, scsh.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> <a href="https://stefanorodighiero.net/blog/tag-lisp.html">lisp</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <category><![CDATA[lisp]]></category>
  <link>https://stefanorodighiero.net/blog/the-lisp-curse.html</link>
  <guid>https://stefanorodighiero.net/blog/the-lisp-curse.html</guid>
  <pubDate>Fri, 26 Feb 2016 17:13:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[What are some of the must-read, harder Sci Fi books you all recommend?]]></title>
  <description><![CDATA[
<p>
<a href="https://www.reddit.com/r/printSF/comments/46huwi/what_are_some_of_the_mustread_harder_sci_fi_books/">What are some of the must-read, harder Sci Fi books you all recommend?</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/what-are-some-of-the-must-read-harder-sci-fi-books-you-all-recommend.html</link>
  <guid>https://stefanorodighiero.net/blog/what-are-some-of-the-must-read-harder-sci-fi-books-you-all-recommend.html</guid>
  <pubDate>Fri, 19 Feb 2016 15:02:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[R setup]]></title>
  <description><![CDATA[
<p>
I need to setup a R environment on the Linux machine. RStudio (which
<a href="http://stefanorodighiero.net/wiki/software.html">I'm currently using on my Mac</a>) eases packages installation and at the
same time provides a rich and pleasant to use environment, but I'm
considering going for a different setup on my Linux machine. For
example, one way could be using Debian packaged R plus Emacs ESS.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/r-setup.html</link>
  <guid>https://stefanorodighiero.net/blog/r-setup.html</guid>
  <pubDate>Sat, 06 Feb 2016 11:46:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Farewell, Marvin Minsky (1927–2016)]]></title>
  <description><![CDATA[
<p>
<a href="http://blog.stephenwolfram.com/2016/01/farewell-marvin-minsky-19272016/">Farewell, Marvin Minsky (1927–2016)</a>
</p>

<p>
Especially interesting is what Minsky observes about teaching programming languages:
</p>

<blockquote>
<p>
I remember a few years ago bringing up the topic of teaching
programming, and how I was hoping the Wolfram Language would be
relevant to it. Marvin immediately launched into talking about how
programming languages are the only ones that people are expected to
learn to write before they can read. He said he’d been trying to
convince Seymour Papert that the best way to teach programming was to
start by showing people good code. He gave the example of teaching
music by giving people Eine kleine Nachtmusik, and asking them to
transpose it to a different rhythm and see what bugs occur. (Marvin
was a long-time enthusiast of classical music.) In just this vein, one
way the Wolfram Programming Lab that we launched just last week lets
people learn programming is by starting with good code, and then
having them modify it.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/farewell-marvin-minsky-(1927%E2%80%932016).html</link>
  <guid>https://stefanorodighiero.net/blog/farewell-marvin-minsky-(1927%E2%80%932016).html</guid>
  <pubDate>Wed, 27 Jan 2016 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[A surface code quantum computer in silicon]]></title>
  <description><![CDATA[
<p>
<a href="http://advances.sciencemag.org/content/1/9/e1500707.full-text.pdf+html">A surface code quantum computer in silicon</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/a-surface-code-quantum-computer-in-silicon.html</link>
  <guid>https://stefanorodighiero.net/blog/a-surface-code-quantum-computer-in-silicon.html</guid>
  <pubDate>Fri, 15 Jan 2016 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Black Hole, by Bucky Sinister]]></title>
  <description><![CDATA[

<figure id="org422736c">
<img src="images/black-hole.jpg" alt="black-hole.jpg">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/black-hole-by-bucky-sinister.html</link>
  <guid>https://stefanorodighiero.net/blog/black-hole-by-bucky-sinister.html</guid>
  <pubDate>Sat, 02 Jan 2016 19:44:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[The best things and stuff of 2015]]></title>
  <description><![CDATA[
<p>
<a href="http://blog.fogus.me/2015/12/29/the-best-things-and-stuff-of-2015/">The best things and stuff of 2015</a>
The annual post by Fogus. Great stuff.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/the-best-things-and-stuff-of-2015.html</link>
  <guid>https://stefanorodighiero.net/blog/the-best-things-and-stuff-of-2015.html</guid>
  <pubDate>Sat, 02 Jan 2016 12:33:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[How modern languages will save the text editor]]></title>
  <description><![CDATA[
<p>
<a href="http://yann.hodique.info/blog/how-modern-languages-save-the-text-editor/">How modern languages will save the text editor</a>
</p>

<p>
Interesting post about programming language writing tools.
</p>

<blockquote>
<p>
[…] the languages were developed in complete ignorance of these tools,
which made them somewhat hostile to those goals (anybody who tried to
implement a correct C++ parser knows what I mean, life before clang
was just painful). As a result, very complex tools making heavy use of
specialized partial parsers, static analysis, and crazy heuristics
emerged. And they emerged as part of even more complex development
suites to combine them all in a coherent form: the IDE was born.
</p>

<p>
[…]
</p>

<p>
But more recently, things took a different turn (for the best I
think): a new language emerged that was promoting a different
paradigm: Go. Instead of making the tooling an afterthought, it’s been
pretty much there at some level since inception. It even shows in the
language grammar itself, which is designed to enable fast compilation,
partial parsing, and a whole bunch of analysis tools.
</p>
</blockquote>

<p>
It resonates with an old paper I'm reading: <a href="https://www.ida.liu.se/ext/caisor/archive/1978/001/caisor-1978-001.pdf">Programming in an
interactive environment the “LISP” experience by Eric Sandewall</a>.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/how-modern-languages-will-save-the-text-editor.html</link>
  <guid>https://stefanorodighiero.net/blog/how-modern-languages-will-save-the-text-editor.html</guid>
  <pubDate>Sat, 02 Jan 2016 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Yay! New laptop]]></title>
  <description><![CDATA[
<p>
Now some work to make it work like I want (it comes with Windows 10
installed but I want a GNU/Linux system on it. So far I've only tried
a live distro to check hardware support. As I expected, it's going to
need some work to make the wifi chipset work properly).
</p>
<div id="outline-container-org340bfb8" class="outline-2">
<h2 id="org340bfb8"><b>Update</b></h2>
<div class="outline-text-2" id="text-org340bfb8">
<p>
Linux installed. First update from the new environment!
</p>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-hw.html">hw</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[hw]]></category>
  <link>https://stefanorodighiero.net/blog/yay-new-laptop.html</link>
  <guid>https://stefanorodighiero.net/blog/yay-new-laptop.html</guid>
  <pubDate>Sun, 20 Dec 2015 10:35:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Creating Adventure Games On Your Computer]]></title>
  <description><![CDATA[
<p>
<a href="http://www.atariarchives.org/adventure/">Creating Adventure Games On Your Computer</a>
by Tim Hartnell, published 1983
</p>


<figure id="orgf06f664">
<img src="./images/creating-adv-games-thumb.gif" alt="creating-adv-games-thumb.gif">

</figure>

<p>
(I found this reference in an excellent post by <a href="http://blog.fogus.me/">Michael Fogus</a>)
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/creating-adventure-games-on-your-computer.html</link>
  <guid>https://stefanorodighiero.net/blog/creating-adventure-games-on-your-computer.html</guid>
  <pubDate>Tue, 15 Dec 2015 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Early Christmas present]]></title>
  <description><![CDATA[

<figure id="org447d993">
<img src="images/feynman-lectures-small.jpg" alt="feynman-lectures-small.jpg">

</figure>

<p>
The only way to beat this would be giving me more time to read it.
(It's a wonderful boxed-set edition of the famous Feynman Lectures on Physics)
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/early-christmas-present.html</link>
  <guid>https://stefanorodighiero.net/blog/early-christmas-present.html</guid>
  <pubDate>Sat, 12 Dec 2015 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Untangling the Tale of Ada Lovelace]]></title>
  <description><![CDATA[
<p>
<a href="http://blog.stephenwolfram.com/2015/12/untangling-the-tale-of-ada-lovelace/">Untangling the Tale of Ada Lovelace</a>
</p>

<p>
Nice post on Stephen Wolfram's blog ("<i>In other words, she basically
proposed to take on the role of CEO, with Babbage becoming CTO</i>").
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/untangling-the-tale-of-ada-lovelace.html</link>
  <guid>https://stefanorodighiero.net/blog/untangling-the-tale-of-ada-lovelace.html</guid>
  <pubDate>Fri, 11 Dec 2015 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[How to get good at chess, fast]]></title>
  <description><![CDATA[
<p>
<a href="http://www.gautamnarula.com/how-to-get-good-at-chess-fast/">How to get good at chess, fast</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> <a href="https://stefanorodighiero.net/blog/tag-games.html">games</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <category><![CDATA[games]]></category>
  <link>https://stefanorodighiero.net/blog/how-to-get-good-at-chess-fast.html</link>
  <guid>https://stefanorodighiero.net/blog/how-to-get-good-at-chess-fast.html</guid>
  <pubDate>Wed, 09 Dec 2015 13:09:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Adding dashboards to hledger]]></title>
  <description><![CDATA[
<p>
I spent a couple of days trying to hack some changes into
hledger-web. I use it from time to time, especially to visualize the
item tree generated from my journal, but I would need more to
incorporate it in my workflow. What I would like is a system to
describe arbitrary <i>widgets</i> to compose in a dashboard. Things like
"<i>monthly expenses, comparing this and last year, using a
histogram</i>". Or "<i>breakdown of the top N expense categories, using a
pie chart</i>".
</p>

<p>
So far, I just built some familiarity with the codebase and I managed
to obtain a static (I mean, non-configurable) dashboard with a single
widget showing my monthly expenses. Like that (code <a href="https://github.com/larsen/hledger/tree/dashboards">is on github</a>):
</p>


<figure id="orga553ab4">
<img src="images/dashboard_-_hledger-web.png" alt="dashboard_-_hledger-web.png">

</figure>

<p>
But the real problem is designing a sensible dashboard configuration
language.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/adding-dashboards-to-hledger.html</link>
  <guid>https://stefanorodighiero.net/blog/adding-dashboards-to-hledger.html</guid>
  <pubDate>Tue, 08 Dec 2015 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Chris Wellons: 9 Elfeed Features You Might Not Know]]></title>
  <description><![CDATA[
<p>
<a href="http://nullprogram.com/blog/2015/12/03/">Chris Wellons: 9 Elfeed Features You Might Not Know</a>
</p>

<p>
A list of interesting elfeed tricks
</p>
<div id="outline-container-org72dbfcb" class="outline-2">
<h2 id="org72dbfcb">Update <span class="timestamp-wrapper"><span class="timestamp">&lt;2015-12-06 Sun 09:57&gt;</span></span></h2>
<div class="outline-text-2" id="text-org72dbfcb">
<p>
I spent some time fiddling with my elfeed configuration. I like the
interface and the way one could program and extend it. Here some more
resources I found useful:
</p>
<ul class="org-ul">
<li><a href="http://nullprogram.com/tags/elfeed/">Chris Wellons posts tagged 'elfeed'</a></li>
<li><a href="http://heikkil.github.io/blog/2015/05/09/notes-from-elfeed-entries/">Heikki Lehväslaiho's "Notes from Elfeed entries" (blog post)</a></li>
</ul>
</div>
</div>
<div id="outline-container-orgd61910a" class="outline-2">
<h2 id="orgd61910a">Update <span class="timestamp-wrapper"><span class="timestamp">&lt;2015-12-07 Mon 09:00&gt;</span></span></h2>
<div class="outline-text-2" id="text-orgd61910a">
<p>
Some times elfeed gets stuck while downloading the feeds.  Reading <a href="https://github.com/skeeto/elfeed/issues/33">a
relevant issue</a> on github, I discovered the function <code>elfeed-unjam</code>
that fixes the problem.
</p>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/chris-wellons-9-elfeed-features-you-might-not-know.html</link>
  <guid>https://stefanorodighiero.net/blog/chris-wellons-9-elfeed-features-you-might-not-know.html</guid>
  <pubDate>Sat, 05 Dec 2015 09:56:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Programming Interactive Worlds with Linear Logic]]></title>
  <description><![CDATA[
<p>
<a href="http://www.cs.cmu.edu/~cmartens/thesis/">Programming Interactive Worlds with Linear Logic</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/programming-interactive-worlds-with-linear-logic.html</link>
  <guid>https://stefanorodighiero.net/blog/programming-interactive-worlds-with-linear-logic.html</guid>
  <pubDate>Sun, 29 Nov 2015 11:20:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Logo-ish drawing environment]]></title>
  <description><![CDATA[
<p>
Some months ago I bought a copy of <a href="https://en.wikipedia.org/wiki/Turtle_Geometry">"Turtle Geometry"</a>. I am looking for
a LOGO environment to follow along and do the exsercises, but I could
not find anything good enough for Mac OS X (which is quite surprising,
if you ask me). So I decided to write my own version. The first usable
thing I produced is not quite LOGO, but enough to do fancy drawings
and (I'm guessing) translate most of the exercises without
efforts. Code <a href="https://github.com/larsen/logo">is on github</a>.
</p>


<figure id="org33c9056">
<img src="https://github.com/larsen/logo/raw/master/screenshot.png" alt="screenshot.png">

</figure>
<div id="outline-container-orgafe1641" class="outline-2">
<h2 id="orgafe1641">Update <span class="timestamp-wrapper"><span class="timestamp">&lt;2015-11-29 Sun 09:39&gt;</span></span></h2>
<div class="outline-text-2" id="text-orgafe1641">
<p>
One thing I'm not sure how I could do is the interactive environment,
but I discovered I have something acceptable at no cost, thanks to how
Lisp and the lispbuilder-sdl package work.
</p>

<p>
Here <a href="https://github.com/larsen/logo/blob/master/logo.lisp#L105">a piece of code from my project</a>:
</p>

<div class="org-src-container">
<pre class="src src-common-lisp"><span class="org-comment-delimiter">;; </span><span class="org-comment">[...]</span>
    (<span class="org-keyword">with-events</span> ()
      (<span class="org-builtin">:quit-event</span> () t)
      (<span class="org-builtin">:key-down-event</span> (<span class="org-builtin">:key</span> key)
                       (<span class="org-keyword">when</span> (sdl:key= key <span class="org-builtin">:sdl-key-escape</span>))
                       (sdl:push-quit-event))
      (<span class="org-builtin">:idle</span> (reset-turtle)
             (fancy 20)
             (draw-turtle *position-x* *position-y* *direction*)
             (update-display)))))
</pre>
</div>

<p>
Since we're implicitly using the <code>:poll</code> event mechanism, the <code>:idle</code>
event is triggered at each "game loop" iteration. Thus, if I redefine
the functions used in the body associated to the <code>:idle</code> event <b>while
the program is running</b>, I obtain a different drawing. What I do, at
the end, is:
</p>

<ul class="org-ul">
<li>evaluate <code>(main)</code> (the SDL window appear)</li>
<li>focus in the Emacs window</li>
<li>edit some relevant functions (for example the body of <code>fancy</code>)</li>
<li><code>C-x C-e</code> to re-evaluate the definition</li>
<li>voilà, new picture is drawn</li>
</ul>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-lisp.html">lisp</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[lisp]]></category>
  <link>https://stefanorodighiero.net/blog/logo-ish-drawing-environment.html</link>
  <guid>https://stefanorodighiero.net/blog/logo-ish-drawing-environment.html</guid>
  <pubDate>Fri, 27 Nov 2015 23:25:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[A Basis for Concurrency and Distribution]]></title>
  <description><![CDATA[
<p>
<a href="http://groups.inf.ed.ac.uk/abcd/">A Basis for Concurrency and Distribution</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/a-basis-for-concurrency-and-distribution.html</link>
  <guid>https://stefanorodighiero.net/blog/a-basis-for-concurrency-and-distribution.html</guid>
  <pubDate>Fri, 27 Nov 2015 12:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[John Wiegley on git]]></title>
  <description><![CDATA[
<p>
<a href="https://lists.gnu.org/archive/html/emacs-devel/2015-10/msg02444.html">From emacs-devel mailing list</a>:
</p>

<blockquote>
<p>
One thing to keep in mind is that Git has several distinct layers:
</p>

<ul class="org-ul">
<li>The data model</li>
<li>The plumbing</li>
<li>The porcelain</li>
</ul>

<p>
The data model is <b>incredibly</b> simple. This, I think, is Git's main
attraction. I've written about the data model in my article "Git from
the Bottom Up", and also via a Haskell library for interacting with
this model, called gitlib (<a href="http://hackage.haskell.org/package/gitlib">http://hackage.haskell.org/package/gitlib</a>).
</p>

<p>
The plumbing is&#x2026; unintuitive to say the least. The porcelain
is&#x2026; fairly bad, but slowly getting better.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/john-wiegley-on-git.html</link>
  <guid>https://stefanorodighiero.net/blog/john-wiegley-on-git.html</guid>
  <pubDate>Thu, 05 Nov 2015 18:03:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Spoiled by xmonad]]></title>
  <description><![CDATA[
<p>
I'm doing some experiments with xmonad and I particularly like its
<code>mod-Space</code> key combination to switch the window layout in a
workspace. Is there something similar for Emacs?
</p>

<p>
This is similar to what I want: <a href="http://www.emacswiki.org/emacs/ThreeWindows">ThreeWindows</a>
</p>
<div id="outline-container-org22c27ac" class="outline-2">
<h2 id="org22c27ac">Update <span class="timestamp-wrapper"><span class="timestamp">&lt;2015-11-15 Sun 11:51&gt;</span></span></h2>
<div class="outline-text-2" id="text-org22c27ac">
<p>
I ended up doing this (the entire code is here: <a href="https://github.com/larsen/emacs-configuration/commit/cb37d713d598c30741b5e49f82e7a8f9251d2dc3">larsen-functions.el</a>)
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defvar</span> <span class="org-variable-name">*larsen/split-layout-type*</span> t)

(<span class="org-keyword">defun</span> <span class="org-function-name">toggle-split-layout</span> ()
  (<span class="org-keyword">interactive</span>)
  (<span class="org-keyword">progn</span> (change-split-type-2 *larsen/split-layout-type*)
         (<span class="org-keyword">if</span> *larsen/split-layout-type*
             (<span class="org-keyword">setq</span> *larsen/split-layout-type* nil)
           (<span class="org-keyword">setq</span> *larsen/split-layout-type* t))))

(global-set-key (kbd <span class="org-string">"M-&lt;f1&gt;"</span>) 'toggle-split-layout)
</pre>
</div>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/spoiled-by-xmonad.html</link>
  <guid>https://stefanorodighiero.net/blog/spoiled-by-xmonad.html</guid>
  <pubDate>Sun, 01 Nov 2015 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[lispbuilder-sdl]]></title>
  <description><![CDATA[
<p>
Tried to install listbuilder-sdl via quicklisp, but got stuck on
cocoahelper dependency. Is it supposed to work on Yosemite?
</p>
<div id="outline-container-orgd30d629" class="outline-2">
<h2 id="orgd30d629"><span class="timestamp-wrapper"><span class="timestamp">&lt;2015-10-29 Thu 21:46&gt;</span></span></h2>
<div class="outline-text-2" id="text-orgd30d629">
<p>
Managed to install the library on a Linux virtual machine.
Tried <a href="https://github.com/andyhd/asteroids">Asteroids</a> to test it.
</p>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-lisp.html">lisp</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[lisp]]></category>
  <link>https://stefanorodighiero.net/blog/lispbuilder-sdl.html</link>
  <guid>https://stefanorodighiero.net/blog/lispbuilder-sdl.html</guid>
  <pubDate>Wed, 28 Oct 2015 22:43:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Collection of CSS styles for org]]></title>
  <description><![CDATA[
<p>
<a href="https://www.reddit.com/r/emacs/comments/3pvbag/is_there_a_collection_of_css_styles_for_org/">Collection of CSS styles for org</a>
A thread on Reddit with pointers to CSS styles for org-mode HTML export.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/collection-of-css-styles-for-org.html</link>
  <guid>https://stefanorodighiero.net/blog/collection-of-css-styles-for-org.html</guid>
  <pubDate>Wed, 28 Oct 2015 09:04:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[A neat tmux trick]]></title>
  <description><![CDATA[
<p>
<a href="http://ariis.it/">Francesco</a> showed me his tmux conf. This is particularly useful:
</p>

<div class="org-src-container">
<pre class="src src-tmux">bind . send-keys B Space E Enter
</pre>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/a-neat-tmux-trick.html</link>
  <guid>https://stefanorodighiero.net/blog/a-neat-tmux-trick.html</guid>
  <pubDate>Mon, 19 Oct 2015 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Clojure: If Lisp is so great, why do we keep needing new variants?]]></title>
  <description><![CDATA[
<p>
<a href="https://blogs.law.harvard.edu/philg/2015/10/12/clojure-if-lisp-is-so-great-why-do-we-keep-needing-new-variants/">Clojure: If Lisp is so great, why do we keep needing new variants?</a>
</p>

<blockquote>
<p>
The one thing that Lisp programmers can agree on is how much better
Lisp is than C and similar languages. I was talking last week to
some programmers who use the Clojure version of Lisp and it made me
wonder “If Lisp is so great, why did this guy have to build a
slightly different version instead of building a popular application
program in an existing version of Lisp, such as Common Lisp?”
</p>
</blockquote>
<p>
Interesting discussion in the comments
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> <a href="https://stefanorodighiero.net/blog/tag-clojure.html">clojure</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <category><![CDATA[clojure]]></category>
  <link>https://stefanorodighiero.net/blog/clojure-if-lisp-is-so-great-why-do-we-keep-needing-new-variants.html</link>
  <guid>https://stefanorodighiero.net/blog/clojure-if-lisp-is-so-great-why-do-we-keep-needing-new-variants.html</guid>
  <pubDate>Mon, 12 Oct 2015 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Old but interesting]]></title>
  <description><![CDATA[
<p>
<a href="http://yosefk.com/blog/the-high-level-cpu-challenge.html">The "high-level CPU" challenge</a>
</p>
<div class="taglist"></div></div>]]></description>
  <link>https://stefanorodighiero.net/blog/old-but-interesting.html</link>
  <guid>https://stefanorodighiero.net/blog/old-but-interesting.html</guid>
  <pubDate>Fri, 09 Oct 2015 16:19:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[the interview with Oliver Charles]]></title>
  <description><![CDATA[
<p>
<a href="http://bookflocks.com/interview/oliver.charles">the interview with Oliver Charles</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/the-interview-with-oliver-charles.html</link>
  <guid>https://stefanorodighiero.net/blog/the-interview-with-oliver-charles.html</guid>
  <pubDate>Fri, 09 Oct 2015 12:23:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Trying Spacemacs]]></title>
  <description><![CDATA[
<div id="outline-container-orga99e022" class="outline-2">
<h2 id="orga99e022">In a virtual machine, to avoid compromising my existing main setup</h2>
</div>

<div id="outline-container-org78020fa" class="outline-2">
<h2 id="org78020fa">The installation process seems to be smooth.</h2>
<div class="outline-text-2" id="text-org78020fa">
<p>
It asked a couple of questions: one mysterious about the environment I
would prefer, and another one about the initial settings (minimal or
not) I'd rather use.
</p>
</div>
</div>
<div id="outline-container-org20e143f" class="outline-2">
<h2 id="org20e143f">Initial setup finished with no errors</h2>
<div class="outline-text-2" id="text-org20e143f">
<p>
Which is good. The only problem –if one wants to be picky– is that the
status line looks messy, probably due to a lack of proper fonts.
</p>
</div>
</div>
<div id="outline-container-org9e4bf91" class="outline-2">
<h2 id="org9e4bf91">I try to venture in the <b>scratch</b> buffer</h2>
<div class="outline-text-2" id="text-org9e4bf91">
<p>
I have, somehow, Vim keybindings <span class="underline">and</span> Emacs' ones. So for example I can
edit some Elisp expression using "Vim" then evaluate it with C-x
C-e. I think there are people that were burned like witches for much
less.
</p>
</div>
</div>
<div id="outline-container-org71adb90" class="outline-2">
<h2 id="org71adb90">I'm surprised</h2>
<div class="outline-text-2" id="text-org71adb90">
<p>
I  had the uneducated conviction that with evilmode (on which Spacemacs
is based, if I understood correctly) one could <span class="underline">either</span> use Vim
bindings or Emacs' ones, choosing on a buffer basis. And that seemed
unconvenient and unpractical to me. I should dig deeper, but this
mixture seems well conceived and sound. <a href="http://stefanorodighiero.net/posts/2014-09-07-simple-webservice-emacs-lisp.html">As I wrote in another place</a>,
quoting Nic Ferrier, Vim is a superior editor, but Emacs is a superior
environment to write editors. And Spacemacs is a proof.
</p>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/trying-spacemacs.html</link>
  <guid>https://stefanorodighiero.net/blog/trying-spacemacs.html</guid>
  <pubDate>Wed, 07 Oct 2015 22:06:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Land of Lisp]]></title>
  <description><![CDATA[
<p>
<a href="http://landoflisp.com/">Land of Lisp</a>
</p>


<figure id="org4c10be5">
<img src="images/lol1.jpg" alt="lol1.jpg">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> <a href="https://stefanorodighiero.net/blog/tag-lisp.html">lisp</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <category><![CDATA[lisp]]></category>
  <link>https://stefanorodighiero.net/blog/land-of-lisp.html</link>
  <guid>https://stefanorodighiero.net/blog/land-of-lisp.html</guid>
  <pubDate>Tue, 06 Oct 2015 17:52:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Finished Anathem]]></title>
  <description><![CDATA[
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/finished-anathem.html</link>
  <guid>https://stefanorodighiero.net/blog/finished-anathem.html</guid>
  <pubDate>Mon, 05 Oct 2015 23:36:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Software I'm looking for]]></title>
  <description><![CDATA[
<p>
<a href="https://stefanorodighiero.net//software.html#org375269d">Software I'm looking for</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/software-im-looking-for.html</link>
  <guid>https://stefanorodighiero.net/blog/software-im-looking-for.html</guid>
  <pubDate>Fri, 02 Oct 2015 11:56:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Switching theme]]></title>
  <description><![CDATA[
<p>
When you use <code>load-theme</code> the chosen theme is applied together with
any other theme precedently activated. This small function could be
useful to <b>switch</b> theme instead of just pushing another one on the
stack.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">switch-theme</span> (theme)
  (<span class="org-keyword">interactive</span>
   (list
    (intern (completing-read <span class="org-string">"Switch to custom theme: "</span>
                             (mapcar 'symbol-name
                                     (custom-available-themes))))))
  (<span class="org-keyword">dolist</span> (curr custom-enabled-themes) (disable-theme curr))
  (load-theme theme))
</pre>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/switching-theme.html</link>
  <guid>https://stefanorodighiero.net/blog/switching-theme.html</guid>
  <pubDate>Fri, 25 Sep 2015 16:27:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[techevents.yooxlabs.com]]></title>
  <description><![CDATA[
<p>
<a href="http://techevents.yooxlabs.com">techevents.yooxlabs.com</a>
</p>


<ul class="org-ul">
<li><b>UPDATE</b> <span class="timestamp-wrapper"><span class="timestamp">&lt;2015-09-24 Thu 09:38&gt; </span></span> Danilo Poccia wrote a post to recap the event: <a href="http://danilop.net/aws/2015/09/23/yooxlabs/">YOOXlabs Technology Event</a></li>
</ul>
<div class="taglist"></div></div>]]></description>
  <link>https://stefanorodighiero.net/blog/techeventsyooxlabscom.html</link>
  <guid>https://stefanorodighiero.net/blog/techeventsyooxlabscom.html</guid>
  <pubDate>Tue, 22 Sep 2015 19:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Giraffe: Using Deep Reinforcement Learning to Play Chess]]></title>
  <description><![CDATA[
<p>
<a href="http://arxiv.org/pdf/1509.01549v1.pdf">Giraffe: Using Deep Reinforcement Learning to Play Chess</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> <a href="https://stefanorodighiero.net/blog/tag-games.html">games</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <category><![CDATA[games]]></category>
  <link>https://stefanorodighiero.net/blog/giraffe-using-deep-reinforcement-learning-to-play-chess.html</link>
  <guid>https://stefanorodighiero.net/blog/giraffe-using-deep-reinforcement-learning-to-play-chess.html</guid>
  <pubDate>Tue, 15 Sep 2015 15:47:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Freer Monads, More Extensible Effects]]></title>
  <description><![CDATA[
<p>
<a href="http://okmij.org/ftp/Haskell/extensible/more.pdf">Freer Monads, More Extensible Effects</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/freer-monads-more-extensible-effects.html</link>
  <guid>https://stefanorodighiero.net/blog/freer-monads-more-extensible-effects.html</guid>
  <pubDate>Tue, 15 Sep 2015 15:46:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Trying to configure ox-rss.el]]></title>
  <description><![CDATA[
<p>
I'm trying to properly configure ox-rss.el to produce a feed for this stream.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/trying-to-configure-ox-rssel.html</link>
  <guid>https://stefanorodighiero.net/blog/trying-to-configure-ox-rssel.html</guid>
  <pubDate>Sun, 13 Sep 2015 18:43:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Computer Science Courses that Don't Exist, But Should]]></title>
  <description><![CDATA[
<p>
<a href="http://prog21.dadgum.com/210.html">Computer Science Courses that Don't Exist, But Should</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/computer-science-courses-that-dont-exist-but-should.html</link>
  <guid>https://stefanorodighiero.net/blog/computer-science-courses-that-dont-exist-but-should.html</guid>
  <pubDate>Sun, 13 Sep 2015 10:01:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Genius at play]]></title>
  <description><![CDATA[

<figure id="org9663bb1">
<img src="./images/genius_at_play.jpg" alt="genius_at_play.jpg">

</figure>

<p>
A biography of John Horton Conway. Arrived on Monday.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/genius-at-play.html</link>
  <guid>https://stefanorodighiero.net/blog/genius-at-play.html</guid>
  <pubDate>Wed, 09 Sep 2015 08:32:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[The present in deep history]]></title>
  <description><![CDATA[
<p>
<a href="http://www.antipope.org/charlie/blog-static/2015/09/the-present-in-deep-history.html">The present in deep history</a>
</p>

<p>
Charlie Stross on his blog:
</p>

<blockquote>
<p>
Assume you are a historian in the 30th century, compiling a pop
history text about the period 1700-2300AD. What are the five most
influential factors in that period of history?
</p>
</blockquote>

<p>
The comments are interesting.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/the-present-in-deep-history.html</link>
  <guid>https://stefanorodighiero.net/blog/the-present-in-deep-history.html</guid>
  <pubDate>Tue, 08 Sep 2015 08:33:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Upgrading Haskell on my system]]></title>
  <description><![CDATA[
<p>
(all started trying to do some experiments with Servant)
</p>
<div class="taglist"></div></div>]]></description>
  <link>https://stefanorodighiero.net/blog/upgrading-haskell-on-my-system.html</link>
  <guid>https://stefanorodighiero.net/blog/upgrading-haskell-on-my-system.html</guid>
  <pubDate>Sun, 06 Sep 2015 17:30:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Monkey Island turns 25yo]]></title>
  <description><![CDATA[
<p>
<a href="http://grumpygamer.com/monkey25">Monkey Island turns 25yo</a>
</p>

<p>
I can't even start telling how much is significant to me.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/monkey-island-turns-25yo.html</link>
  <guid>https://stefanorodighiero.net/blog/monkey-island-turns-25yo.html</guid>
  <pubDate>Fri, 04 Sep 2015 15:33:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Urania 1622]]></title>
  <description><![CDATA[

<figure id="org3b5875a">
<img src="./images/urania1622.jpg" alt="urania1622.jpg">

</figure>

<p>
I'm told that Bruce Sterling now lives in Italy, in Turin.  This is
a collection of stories set around Italy. Just skimmed the very
first pages so far, I noticed an overflow of the word "occult".
</p>
<div id="outline-container-org0c9ceb1" class="outline-2">
<h2 id="org0c9ceb1"><a href="http://cronachediunsolelontano.blogspot.it/2015/09/utopia-pirata-i-racconti-di-bruno.html">A review by Umberto Rossi</a></h2>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/urania-1622.html</link>
  <guid>https://stefanorodighiero.net/blog/urania-1622.html</guid>
  <pubDate>Fri, 04 Sep 2015 08:55:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[I have history back to ~2003.]]></title>
  <description><![CDATA[
<p>
<a href="https://twitter.com/michaelhoffman/status/639178145673932800">I have history back to ~2003.</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/i-have-history-back-to-~2003.html</link>
  <guid>https://stefanorodighiero.net/blog/i-have-history-back-to-~2003.html</guid>
  <pubDate>Fri, 04 Sep 2015 08:52:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[TMK firmware]]></title>
  <description><![CDATA[
<p>
Trying the <a href="https://github.com/technomancy/tmk_keyboard">tmk firmare</a> on the Atreus. The feature list is very
interesting, but it's not clear to me if it's all appliable to the
specific hardware I'm using.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-hw.html">hw</a> <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[hw]]></category>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/tmk-firmware.html</link>
  <guid>https://stefanorodighiero.net/blog/tmk-firmware.html</guid>
  <pubDate>Tue, 01 Sep 2015 18:34:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Typing analytics]]></title>
  <description><![CDATA[
<p>
I wish I could be able to measure my typing speed in a consistent
manner, and without recurring to tools external to my flow. Ideally,
it would be something sitting behind and observing my keyboard usage
as I work.
</p>

<ul class="org-ul">
<li><a href="https://pavpanchekha.com/blog/emacs-keylogger.html">Typing Analytics in Emacs</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/2euqn7/emacs_extension_to_measure_typing_speed_in_the/">Emacs extension to measure typing speed in the background?</a> [Reddit]</li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/typing-analytics.html</link>
  <guid>https://stefanorodighiero.net/blog/typing-analytics.html</guid>
  <pubDate>Tue, 01 Sep 2015 08:34:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[First Atreus mod idea]]></title>
  <description><![CDATA[
<p>
I'd like to attach a wire to the board's pins that pilot the LEDs,
thus being able to see when I'm on a certain layer.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-hw.html">hw</a> </div></div>]]></description>
  <category><![CDATA[hw]]></category>
  <link>https://stefanorodighiero.net/blog/first-atreus-mod-idea.html</link>
  <guid>https://stefanorodighiero.net/blog/first-atreus-mod-idea.html</guid>
  <pubDate>Mon, 31 Aug 2015 18:55:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[hakyll deploy command]]></title>
  <description><![CDATA[
<p>
Hakyll allows users to configure a deploy command:
</p>
<ul class="org-ul">
<li><a href="http://jaspervdj.be/hakyll/reference/Hakyll-Core-Configuration.html">http://jaspervdj.be/hakyll/reference/Hakyll-Core-Configuration.html</a></li>
<li>An example: <a href="http://hrothen.github.io/posts/switching-from-jekyll-bootstrap-to-hakyll.html">Switching from Jekyll Bootstrap to Hakyll</a></li>
</ul>

<p>
Next question is: how could I add more commands?
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/hakyll-deploy-command.html</link>
  <guid>https://stefanorodighiero.net/blog/hakyll-deploy-command.html</guid>
  <pubDate>Mon, 31 Aug 2015 12:47:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Double feature keyboard review]]></title>
  <description><![CDATA[
<p>
<a href="http://stefanorodighiero.net/posts/2015-08-30-double-feature-keyboard-review.html">Double feature keyboard review</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/double-feature-keyboard-review.html</link>
  <guid>https://stefanorodighiero.net/blog/double-feature-keyboard-review.html</guid>
  <pubDate>Sun, 30 Aug 2015 15:54:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Width-adaptive XMonad layout]]></title>
  <description><![CDATA[
<p>
<a href="http://blog.ezyang.com/2015/05/width-adaptive-xmonad-layout/">Width-adaptive XMonad layout</a>
</p>

<p>
I thing this will be handy in the future
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/width-adaptive-xmonad-layout.html</link>
  <guid>https://stefanorodighiero.net/blog/width-adaptive-xmonad-layout.html</guid>
  <pubDate>Sun, 30 Aug 2015 10:15:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[DateTime::Duration]]></title>
  <description><![CDATA[
<p>
Here a surprising feature in <a href="https://metacpan.org/pod/DateTime::Duration">DateTime::Duration</a>'s API. What this
code will print?
</p>

<div class="org-src-container">
<pre class="src src-perl"><span class="org-keyword">use</span> <span class="org-constant">strict</span>;
<span class="org-keyword">use</span> <span class="org-constant">warnings</span>;

<span class="org-keyword">use</span> <span class="org-constant">DateTime</span>;
<span class="org-keyword">use</span> <span class="org-constant">DateTime::Duration</span>;

<span class="org-keyword">my</span> $<span class="org-variable-name">dt1</span> = DateTime-&gt;new( year =&gt; 2015, month =&gt; 8, day =&gt; 1 );
<span class="org-keyword">my</span> $<span class="org-variable-name">dt2</span> = DateTime-&gt;new( year =&gt; 2015, month =&gt; 8, day =&gt; 31 );

<span class="org-keyword">my</span> $<span class="org-variable-name">duration</span> = $<span class="org-variable-name">dt1</span>-&gt;delta_days( $<span class="org-variable-name">dt2</span> );
print $<span class="org-variable-name">duration</span>-&gt;days();
</pre>
</div>

<p>
It prints <code>2</code>, because the <code>days()</code> method is implemented as
</p>

<div class="org-src-container">
<pre class="src src-perl">abs( ($<span class="org-variable-name">duration</span>-&gt;in_units( <span class="org-string">'days'</span>, <span class="org-string">'weeks'</span> ) )[0] )
</pre>
</div>

<p>
meaning that the duration is <b>first converted to weeks</b>, then the
remainder is returned.
</p>

<p>
Here an extended piece of code to show what happens:
</p>

<div class="org-src-container">
<pre class="src src-perl"><span class="org-keyword">use</span> <span class="org-constant">strict</span>;
<span class="org-keyword">use</span> <span class="org-constant">warnings</span>;

<span class="org-keyword">use</span> <span class="org-constant">DateTime</span>;
<span class="org-keyword">use</span> <span class="org-constant">DateTime::Duration</span>;

<span class="org-keyword">my</span> $<span class="org-variable-name">dt1</span> = DateTime-&gt;new( year =&gt; 2015, month =&gt; 8, day =&gt; 1 );

<span class="org-keyword">foreach</span> <span class="org-keyword">my</span> $<span class="org-variable-name">d</span> ( 2 .. 31 ) {
  <span class="org-keyword">my</span> $<span class="org-variable-name">dt2</span> = DateTime-&gt;new( year =&gt; 2015, month =&gt; 8, day =&gt; $<span class="org-variable-name">d</span> );
  <span class="org-keyword">my</span> $<span class="org-variable-name">duration</span> = $<span class="org-variable-name">dt1</span>-&gt;delta_days( $<span class="org-variable-name">dt2</span> );
  printf <span class="org-string">"%s days and %s weeks\n"</span>, $<span class="org-variable-name">duration</span>-&gt;in_units( <span class="org-string">'days'</span>, <span class="org-string">'weeks'</span> );
}
</pre>
</div>

<p>
which prints:
</p>

<pre class="example" id="orgc0dc10c">
2 days and 0 weeks
3 days and 0 weeks
4 days and 0 weeks
5 days and 0 weeks
6 days and 0 weeks
0 days and 1 weeks
1 days and 1 weeks
2 days and 1 weeks
… and so forth
</pre>

<p>
If you want to know how many days there are between two given dates,
better be explicit and use <code>$duration-&gt;in_units('days')</code>.
</p>

<p>
The doc explains it clearly if you take the time to read it:
</p>

<blockquote>
<p>
These methods return numbers indicating how many of the given unit the
object represents, after having done a conversion to any larger units.
</p>
</blockquote>

<p>
But it's baffling to me nonetheless.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/datetimeduration.html</link>
  <guid>https://stefanorodighiero.net/blog/datetimeduration.html</guid>
  <pubDate>Fri, 28 Aug 2015 17:10:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[How recursion got into programming: a comedy of errors]]></title>
  <description><![CDATA[
<p>
<a href="https://vanemden.wordpress.com/2014/06/18/how-recursion-got-into-programming-a-comedy-of-errors-3/">How recursion got into programming: a comedy of errors</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/how-recursion-got-into-programming-a-comedy-of-errors.html</link>
  <guid>https://stefanorodighiero.net/blog/how-recursion-got-into-programming-a-comedy-of-errors.html</guid>
  <pubDate>Fri, 28 Aug 2015 13:04:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Light Up]]></title>
  <description><![CDATA[
<p>
<a href="http://www.chiark.greenend.org.uk/~sgtatham/puzzles/">Simon Tatham's Portable Puzzle Collection</a> is a nice collection of
puzzle games that should be interesting to solve automatically. I
installed the Android version of the collection and played a little
with <a href="http://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/lightup.html">Light Up</a>.
</p>

<blockquote>
<p>
You have a grid of squares. Some are filled in black; some of the
black squares are numbered. Your aim is to ‘light up’ all the empty
squares by placing light bulbs in some of them.
</p>

<p>
Each light bulb illuminates the square it is on, plus all squares in
line with it horizontally or vertically unless a black square is
blocking the way.
</p>

<p>
To win the game, you must satisfy the following conditions:
</p>

<ul class="org-ul">
<li>All non-black squares are lit.</li>
<li>No light is lit by another light.</li>
<li>All numbered black squares have exactly that number of lights
adjacent to them (in the four squares above, below, and to the
side).</li>
</ul>

<p>
Non-numbered black squares may have any number of lights adjacent to them.
</p>
</blockquote>

<p>
First thing, board representation and some <a href="http://projects.haskell.org/diagrams/">diagrams</a> code to obtain a
graphical rendition.
</p>


<figure id="orgc7eb6cc">
<img src="./images/lu.svg" alt="lu.svg" class="org-svg">

</figure>

<div class="org-src-container">
<pre class="src src-haskell"><span class="org-haskell-keyword">import</span> <span class="org-haskell-constructor">Diagrams.Prelude</span>
<span class="org-haskell-keyword">import</span> <span class="org-haskell-constructor">Diagrams.Backend.SVG.CmdLine</span>

<span class="org-haskell-keyword">data</span> <span class="org-haskell-type">Square</span> <span class="org-haskell-operator">=</span> <span class="org-haskell-constructor">Empty</span>
            <span class="org-haskell-operator">|</span> <span class="org-haskell-constructor">Box</span>
            <span class="org-haskell-operator">|</span> <span class="org-haskell-constructor">Light</span>
            <span class="org-haskell-operator">|</span> <span class="org-haskell-constructor">Lamp</span>
            <span class="org-haskell-operator">|</span> <span class="org-haskell-constructor">Num</span> <span class="org-haskell-constructor">Integer</span>

<span class="org-haskell-keyword">type</span> <span class="org-haskell-type">Board</span> <span class="org-haskell-operator">=</span> [[<span class="org-haskell-type">Square</span>]]

<span class="org-haskell-definition">board</span> <span class="org-haskell-operator">::</span> <span class="org-haskell-type">Board</span>
<span class="org-haskell-definition">board</span> <span class="org-haskell-operator">=</span> [[<span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Box</span>,   <span class="org-haskell-constructor">Light</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Box</span>,   <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Empty</span>],
         [<span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Light</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Box</span>,   <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Num</span> 0],
         [<span class="org-haskell-constructor">Box</span>,   <span class="org-haskell-constructor">Num</span> 2, <span class="org-haskell-constructor">Lamp</span>,  <span class="org-haskell-constructor">Light</span>, <span class="org-haskell-constructor">Light</span>, <span class="org-haskell-constructor">Light</span>, <span class="org-haskell-constructor">Light</span>],
         [<span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Light</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Empty</span>],
         [<span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Light</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Num</span> 1, <span class="org-haskell-constructor">Num</span> 1],
         [<span class="org-haskell-constructor">Num</span> 2, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Box</span>,   <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Empty</span>],
         [<span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Num</span> 1, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Empty</span>, <span class="org-haskell-constructor">Num</span> 0, <span class="org-haskell-constructor">Empty</span>]]

<span class="org-haskell-definition">squareSize</span> <span class="org-haskell-operator">=</span> 30

<span class="org-haskell-definition">drawSquare</span> <span class="org-haskell-constructor">Empty</span> <span class="org-haskell-operator">=</span> square squareSize
<span class="org-haskell-definition">drawSquare</span> <span class="org-haskell-constructor">Box</span> <span class="org-haskell-operator">=</span> square squareSize <span class="org-haskell-operator">#</span> fc black
<span class="org-haskell-definition">drawSquare</span> <span class="org-haskell-constructor">Light</span> <span class="org-haskell-operator">=</span> square squareSize <span class="org-haskell-operator">#</span> fc yellow
<span class="org-haskell-definition">drawSquare</span> <span class="org-haskell-constructor">Lamp</span> <span class="org-haskell-operator">=</span> circle (squareSize <span class="org-haskell-operator">*</span> 0.3) <span class="org-haskell-operator">#</span> fc white
               <span class="org-haskell-operator">&lt;&gt;</span> square squareSize <span class="org-haskell-operator">#</span> fc yellow
<span class="org-haskell-definition">drawSquare</span> (<span class="org-haskell-constructor">Num</span> n) <span class="org-haskell-operator">=</span> text (show n) <span class="org-haskell-operator">#</span> fc white <span class="org-haskell-operator">#</span> fontSize (<span class="org-haskell-constructor">Local</span> 16)
                  <span class="org-haskell-operator">&lt;&gt;</span> square squareSize <span class="org-haskell-operator">#</span> fc black
<span class="org-haskell-definition">drawBoard</span> <span class="org-haskell-operator">::</span> <span class="org-haskell-type">Board</span> <span class="org-haskell-operator">-&gt;</span> <span class="org-haskell-type">Diagram</span> <span class="org-haskell-type">B</span> <span class="org-haskell-type">R2</span>

<span class="org-haskell-definition">drawBoard</span> b <span class="org-haskell-operator">=</span> vcat <span class="org-haskell-operator">.</span> map (alignR <span class="org-haskell-operator">.</span> hcat) <span class="org-haskell-operator">.</span> (map <span class="org-haskell-operator">.</span> map) drawSquare <span class="org-haskell-operator">$</span> board

<span class="org-haskell-definition">sketch</span> <span class="org-haskell-operator">=</span> drawBoard board

<span class="org-haskell-definition">main</span> <span class="org-haskell-operator">=</span> mainWith sketch
</pre>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/light-up.html</link>
  <guid>https://stefanorodighiero.net/blog/light-up.html</guid>
  <pubDate>Thu, 27 Aug 2015 22:50:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[twitter followers == 0?]]></title>
  <description><![CDATA[
<p>
Apparently my Twitter following/followers counter has been reset to 0.
</p>
<div id="outline-container-orgf7131db" class="outline-2">
<h2 id="orgf7131db">Fixed <span class="timestamp-wrapper"><span class="timestamp">&lt;2015-08-27 Thu 09:25&gt;</span></span></h2>
</div>
<div class="taglist"></div></div>]]></description>
  <link>https://stefanorodighiero.net/blog/twitter-followers-==-0.html</link>
  <guid>https://stefanorodighiero.net/blog/twitter-followers-==-0.html</guid>
  <pubDate>Thu, 27 Aug 2015 08:49:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[which-key]]></title>
  <description><![CDATA[
<p>
<a href="https://twitter.com/manuel_uberti"><code>@manuel_uberti</code></a> <a href="http://informatica.boccaperta.com/m-x-emacs-which-key/">wrote about <code>which-key</code></a>, a package that displays
available keybindings in popup. Manuel shows an example to activate
it:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(which-key-mode)

(<span class="org-keyword">setq</span> which-key-idle-delay 0.5
                which-key-key-replacement-alist
                '((<span class="org-string">"&lt;</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">[[:alnum:]-]+</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">&gt;"</span> . <span class="org-string">"\\1"</span>)
                  (<span class="org-string">"up"</span>                  . <span class="org-string">"&#8593;"</span>)
                  (<span class="org-string">"right"</span>               . <span class="org-string">"&#8594;"</span>)
                  (<span class="org-string">"down"</span>                . <span class="org-string">"&#8595;"</span>)
                  (<span class="org-string">"left"</span>                . <span class="org-string">"&#8592;"</span>)
                  (<span class="org-string">"DEL"</span>                 . <span class="org-string">"&#9003;"</span>)
                  (<span class="org-string">"deletechar"</span>          . <span class="org-string">"&#8998;"</span>)
                  (<span class="org-string">"RET"</span>                 . <span class="org-string">"&#9166;"</span>)))
</pre>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[emacs]]></category>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/which-key.html</link>
  <guid>https://stefanorodighiero.net/blog/which-key.html</guid>
  <pubDate>Wed, 26 Aug 2015 18:24:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[State of the Common Lisp Ecosystem, 2015]]></title>
  <description><![CDATA[
<p>
<a href="http://eudoxia.me/article/common-lisp-sotu-2015/">State of the Common Lisp Ecosystem, 2015</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/state-of-the-common-lisp-ecosystem-2015.html</link>
  <guid>https://stefanorodighiero.net/blog/state-of-the-common-lisp-ecosystem-2015.html</guid>
  <pubDate>Wed, 26 Aug 2015 09:06:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[an observation]]></title>
  <description><![CDATA[
<p>
So, apparently the code highlighting I get publishing a org document
gets affected by the current theme in Emacs (note to self: using the
cyberpunk theme produces unreadable code on white background).
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/an-observation.html</link>
  <guid>https://stefanorodighiero.net/blog/an-observation.html</guid>
  <pubDate>Wed, 26 Aug 2015 08:49:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Ron Gilbert on Thimbleweed Park]]></title>
  <description><![CDATA[
<p>
<a href="http://blog.thimbleweedpark.com/stateofthegame2">Ron Gilbert on Thimbleweed Park</a>
</p>

<blockquote>
<p>
Saving games still scare me.This is something I should have figured
out months ago. The issue isn't a matter of how to store the data,
it's way more complex than that. There is a lot of data to iterate
through and save off in a way that can be reconstructed. Doing save
games is harder today than it was back in the SCUMM years. Back then
we didn't have to worry about patching. These days, the save game
has to survive the game being patched and that can mean resources
being added or removed.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/ron-gilbert-on-thimbleweed-park.html</link>
  <guid>https://stefanorodighiero.net/blog/ron-gilbert-on-thimbleweed-park.html</guid>
  <pubDate>Tue, 25 Aug 2015 08:51:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[ghci]]></title>
  <description><![CDATA[
<p>
ghci + Gloss don't play well on my system. I need to do
</p>

<p>
<code>ghci -isrc -fno-ghci-sandbox src/Main</code>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/ghci.html</link>
  <guid>https://stefanorodighiero.net/blog/ghci.html</guid>
  <pubDate>Tue, 25 Aug 2015 02:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Ryan Carmack's game]]></title>
  <description><![CDATA[
<p>
<a href="http://www.1k3c.com/">Ryan Carmack's game</a>
</p>

<p>
Ryan is John Carmack's son.
</p>

<blockquote>
<p>
I’m still taking a little heat from my wife for using an obscure
language instead of something mainstream that is broadly used in
industry, but I have nothing but good things to say about using
Racket and DrRacket for a beginning programmer, and highly recommend
it.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/ryan-carmacks-game.html</link>
  <guid>https://stefanorodighiero.net/blog/ryan-carmacks-game.html</guid>
  <pubDate>Mon, 24 Aug 2015 23:13:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[wiz]]></title>
  <description><![CDATA[
<p>
I wanted to do some progress on the Scheme interpreter, but I ended up
instead fixing code that went on github by mistake, and fighting
with some git nuisances.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/wiz.html</link>
  <guid>https://stefanorodighiero.net/blog/wiz.html</guid>
  <pubDate>Mon, 24 Aug 2015 23:02:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Anathem, by Neal Stephenson]]></title>
  <description><![CDATA[
<p>
I'm currently approximately 5% through the novel. I still have only
faint ideas about what's going on. Not yet alarming, by my count.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/anathem-by-neal-stephenson.html</link>
  <guid>https://stefanorodighiero.net/blog/anathem-by-neal-stephenson.html</guid>
  <pubDate>Sun, 23 Aug 2015 10:43:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Clojure IDE]]></title>
  <description><![CDATA[
<p>
Spent some time setting up a development environment for Clojure
using Leiningen + Emacs + CIDER + clj-refactor. Still confused by some
parts of the system but I can see how pleasant it can be.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-clojure.html">clojure</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[clojure]]></category>
  <link>https://stefanorodighiero.net/blog/clojure-ide.html</link>
  <guid>https://stefanorodighiero.net/blog/clojure-ide.html</guid>
  <pubDate>Sat, 22 Aug 2015 19:11:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Meeting J-Bob: Notes on "The Little Prover" Chapters 1-5]]></title>
  <description><![CDATA[
<p>
<a href="http://michaelrbernste.in/2015/08/12/meeting-j-bob.html">Meeting J-Bob: Notes on "The Little Prover" Chapters 1-5</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/meeting-j-bob-notes-on-the-little-prover-chapters-1-5.html</link>
  <guid>https://stefanorodighiero.net/blog/meeting-j-bob-notes-on-the-little-prover-chapters-1-5.html</guid>
  <pubDate>Fri, 21 Aug 2015 10:01:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[The Little Prover]]></title>
  <description><![CDATA[
<p>
<a href="http://the-little-prover.github.io/">The Little Prover</a>
</p>


<figure id="orgdd822fc">
<a href="./images/the-little-prover.jpg"><img src="./images/the-little-prover-thumb.jpg" alt="the-little-prover-thumb.jpg"></a>

</figure>

<p>
Just arrived. It's printed in colours!
</p>

<p>
I didn't have the courage to ask the courier about two more books I'm
waiting for: he seemed very pissed off for the problems he had finding
my address.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/the-little-prover.html</link>
  <guid>https://stefanorodighiero.net/blog/the-little-prover.html</guid>
  <pubDate>Thu, 20 Aug 2015 11:18:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[How to Help Self-Driving Cars Make Ethical Decisions]]></title>
  <description><![CDATA[
<p>
<a href="http://www.technologyreview.com/news/539731/how-to-help-self-driving-cars-make-ethical-decisions/">How to Help Self-Driving Cars Make Ethical Decisions</a>
</p>


<blockquote>
<p>
They implemented different ethical settings in the software that
controls automated vehicles and then tested the code in simulations
and even in real vehicles. Such settings might, for example, tell a
car to prioritize avoiding humans over avoiding parked vehicles, or
not to swerve for squirrels.
</p>

<p>
As the technology advances, however, and cars become capable of
interpreting more complex scenes, automated driving systems may need
to make split-second decisions that raise real ethical questions.
</p>

<p>
At a recent industry event, Gerdes gave an example of one such
scenario: a child suddenly dashing into the road, forcing the
self-driving car to choose between hitting the child or swerving into
an oncoming van.
</p>

<p>
“As we see this with human eyes, one of these obstacles has a lot more
value than the other,” Gerdes said. “What is the car’s
responsibility?”
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/how-to-help-self-driving-cars-make-ethical-decisions.html</link>
  <guid>https://stefanorodighiero.net/blog/how-to-help-self-driving-cars-make-ethical-decisions.html</guid>
  <pubDate>Wed, 19 Aug 2015 09:46:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Measuring things]]></title>
  <description><![CDATA[
<p>
I use org-mode for registering the books I read. Here some code to produce stats.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp"><span class="org-comment-delimiter">;; </span><span class="org-comment">Is there a better (more idiomatic) way to aggregate values?</span>
(<span class="org-keyword">defun</span> <span class="org-function-name">aggregate</span> (aggregate-function lst)
  (<span class="org-keyword">let</span> ((hash (make-hash-table <span class="org-builtin">:test</span> 'equal)))
    (<span class="org-keyword">loop</span> for key in (mapcar 'car lst)
          for value in (mapcar 'cdr lst)
          do (<span class="org-keyword">if</span> (null (gethash key hash))
                 (puthash key value hash)
               (puthash key (funcall aggregate-function value (gethash key hash)) hash))
          finally return hash)))

(<span class="org-keyword">defun</span> <span class="org-function-name">pages-per-month-raw</span> ()
  (<span class="org-keyword">with-current-buffer</span> (get-file-buffer <span class="org-string">"~/org/books.org"</span>)
    (mapcar (<span class="org-keyword">lambda</span> (b)
              (<span class="org-keyword">let*</span> ((month (format-time-string <span class="org-string">"%b"</span> (date-to-time (cdr (assoc <span class="org-string">"TIMESTAMP"</span> b)))))
                     (pages (string-to-int (cdr (assoc <span class="org-string">"PAGES"</span> b)))))
                (cons month pages)))
            (books/in-year <span class="org-string">"2015"</span>))))

(<span class="org-keyword">defun</span> <span class="org-function-name">pages-per-month</span> ()
  (<span class="org-keyword">let</span> ((ppmr (pages-per-month-raw)))
    (aggregate '+ ppmr)))

(<span class="org-keyword">defun</span> <span class="org-function-name">month-list</span> ()
  '(<span class="org-string">"Jan"</span> <span class="org-string">"Feb"</span> <span class="org-string">"Mar"</span> <span class="org-string">"Apr"</span> <span class="org-string">"May"</span> <span class="org-string">"Jun"</span>
    <span class="org-string">"Jul"</span> <span class="org-string">"Aug"</span> <span class="org-string">"Sep"</span> <span class="org-string">"Oct"</span> <span class="org-string">"Nov"</span> <span class="org-string">"Dec"</span>))

(<span class="org-keyword">defun</span> <span class="org-function-name">complete-hash</span> (hash)
  (<span class="org-keyword">let</span> ((new-hash (make-hash-table)))
    (<span class="org-keyword">loop</span> for month-name in (month-list)
          do (<span class="org-keyword">if</span> (null (gethash month-name hash))
                 (puthash month-name 0 new-hash)
               (puthash month-name (gethash month-name hash) new-hash))
          finally return new-hash)))

<span class="org-comment-delimiter">;; </span><span class="org-comment">Poor man's TSV export</span>
<span class="org-comment-delimiter">;; </span><span class="org-comment">TODO check the implicit assertion on the ordering</span>
(maphash (<span class="org-keyword">lambda</span> (k v) (insert (format <span class="org-string">"%s\t%s\n"</span> k v)))
         (complete-hash (pages-per-month)))
</pre>
</div>

<p>
Then, for example:
</p>

<div class="org-src-container">
<pre class="src src-R">stats &lt;- read.csv("/tmp/stats.tsv", sep = "\t", header = F)
names(stats) &lt;- c("month", "pages")
stats$month &lt;- factor(stats$month, month.name )
p &lt;- ggplot( stats, aes(month, pages)) +
    geom_histogram() +
    theme(axis.text.x = element_text(angle=45, hjust=1))
p
</pre>
</div>


<figure id="orgcf381f1">
<img src="./images/book-stats.png" alt="book-stats.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> <a href="https://stefanorodighiero.net/blog/tag-emacs.html">emacs</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[books]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://stefanorodighiero.net/blog/measuring-things.html</link>
  <guid>https://stefanorodighiero.net/blog/measuring-things.html</guid>
  <pubDate>Tue, 18 Aug 2015 22:09:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA["With great power comes a really shitty UI"]]></title>
  <description><![CDATA[

<figure id="org574ad89">
<img src="./images/power-ui.png" alt="power-ui.png">

</figure>

<p>
<a href="https://twitter.com/paulca/status/629607174277361664">Original tweet</a>
</p>
<div class="taglist"></div></div>]]></description>
  <link>https://stefanorodighiero.net/blog/with-great-power-comes-a-really-shitty-ui.html</link>
  <guid>https://stefanorodighiero.net/blog/with-great-power-comes-a-really-shitty-ui.html</guid>
  <pubDate>Tue, 18 Aug 2015 14:53:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Chicken Scheme]]></title>
  <description><![CDATA[
<p>
<a href="http://code.call-cc.org/">Chicken Scheme</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/chicken-scheme.html</link>
  <guid>https://stefanorodighiero.net/blog/chicken-scheme.html</guid>
  <pubDate>Tue, 18 Aug 2015 09:50:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[The Turing Digital Archive]]></title>
  <description><![CDATA[
<p>
<a href="http://www.turingarchive.org/">The Turing Digital Archive</a>
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/the-turing-digital-archive.html</link>
  <guid>https://stefanorodighiero.net/blog/the-turing-digital-archive.html</guid>
  <pubDate>Mon, 17 Aug 2015 18:14:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Basic setup]]></title>
  <description><![CDATA[
<p>
Basic stream setup done.
</p>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <category><![CDATA[meta]]></category>
  <link>https://stefanorodighiero.net/blog/basic-setup.html</link>
  <guid>https://stefanorodighiero.net/blog/basic-setup.html</guid>
  <pubDate>Mon, 17 Aug 2015 16:46:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Anachronistic computing]]></title>
  <description><![CDATA[
<p>
Yay! The laptop I recently bought for a ridiculously low price is
eventually working like I want.
</p>

<p>
<img src="../images/x32.png" alt="x32.png">
First its characteristics:
</p>

<table>


<colgroup>
<col  class="org-left">

<col  class="org-left">
</colgroup>
<tbody>
<tr>
<td class="org-left"><b>CPU</b></td>
<td class="org-left">Intel Pentium M (Dothan)</td>
</tr>

<tr>
<td class="org-left"><b>RAM</b></td>
<td class="org-left">512MB</td>
</tr>

<tr>
<td class="org-left"><b>HDD</b></td>
<td class="org-left">40GB 2.5" PATA</td>
</tr>

<tr>
<td class="org-left"><b>Display</b></td>
<td class="org-left">12.1" TFT with 1024x768 resolution</td>
</tr>
</tbody>
</table>

<p>
It is a <a href="http://www.thinkwiki.org/wiki/Category:X32">IBM Thinkpad X32</a>. A good news is it sports one of the best
keyboards one can find on a laptop (and I was lucky enough to find the
GB layout). I found it at an electronic fair I recently visited, and
grabbed it without much thinking from the pile (literally) where it
layed together with some of its twins.
</p>

<p>
I think it's remarkable that such an old piece of hardware can be a
perfectly usable machine (at least for the way I'm used to work). All it
takes is some attention to the software one chooses to install:
</p>

<ul class="org-ul">
<li>Linux, obvious choice to revive old hardware (in this case, I had to
recur to a non-PAE kernel due to the particular CPU architecture)</li>
<li><a href="http://i3wm.org/">i3</a>, a lightweight tiling window manager</li>
<li>Emacs 24.3, where I'm going to spend much of my time
(<a href="http://www.emacswiki.org/emacs/emacs-w3m">w3m</a> is a decent
surrogate of a proper graphical browser for reading documentation)</li>
<li>I'm even running Hakyll locally to prepare this post</li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-hw.html">hw</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[hw]]></category>
  <link>https://stefanorodighiero.net/blog/anachronistic-computing.html</link>
  <guid>https://stefanorodighiero.net/blog/anachronistic-computing.html</guid>
  <pubDate>Mon, 13 Oct 2014 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[The Internet with a human face]]></title>
  <description><![CDATA[
<p>
An <a href="http://idlewords.com/bt14.htm">interesting talk</a> by <a href="http://idlewords.com/about.htm">Maciej Cegłowski</a>.
</p>


<figure id="orgc322318">
<img src="../images/bt14.012.jpg" alt="bt14.012.jpg">

</figure>

<blockquote>
<p>
Anyone who works with computers learns to fear their capacity to
forget. Like so many things with computers, memory is strictly binary.
There is either perfect recall or total oblivion, with nothing in
between. It doesn't matter how important or trivial the information
is. The computer can forget anything in an instant. If it remembers,
it remembers for keeps.
</p>
</blockquote>

<blockquote>
<p>
[&#x2026;]
</p>
</blockquote>

<blockquote>
<p>
Our lives have become split between two worlds with two very different
norms around memory.
</p>
</blockquote>

<blockquote>
<p>
[&#x2026;]
</p>
</blockquote>

<blockquote>
<p>
The online world is very different. Online, everything is recorded by
default, and you may not know where or by whom. If you've ever
wondered why Facebook is such a joyless place, even though we've
theoretically surrounded ourselves with friends and loved ones, it's
because of this need to constantly be wearing our public face.
Facebook is about as much fun as a zoning board hearing.
</p>
</blockquote>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-link.html">link</a> </div></div>]]></description>
  <category><![CDATA[link]]></category>
  <link>https://stefanorodighiero.net/blog/the-internet-with-a-human-face.html</link>
  <guid>https://stefanorodighiero.net/blog/the-internet-with-a-human-face.html</guid>
  <pubDate>Mon, 18 Aug 2014 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[2011 in books]]></title>
  <description><![CDATA[
<div id="outline-container-org468afec" class="outline-2">
<h2 id="org468afec">Essays/Computer science/$work stuff</h2>
<div class="outline-text-2" id="text-org468afec">
<ul class="org-ul">
<li><a href="http://www.amazon.com/dp/1449302645">Programming Pig</a></li>
<li><a href="http://www.amazon.com/dp/1449302645">Hadoop The definitive guide</a></li>
<li><a href="http://www.amazon.com/dp/1449390412">Cassandra: The definitive guide</a></li>
<li><a href="http://www.amazon.com/dp/0596802358">Data Analysis with Open Source Tools</a></li>
</ul>

<p>
In 2011 I started my adventures in the perilous lands of bigdata, so
I've begun harvesting literature on the subject. Extremely interesting
and relatively young field. I have an almost finished review of "Data
Analysis with Open Source Tools" which I hope to publish soon.
</p>

<ul class="org-ul">
<li><a href="http://www.amazon.com/dp/1934356344">The Passionate Programmer</a></li>
<li><a href="http://www.amazon.com/dp/8817112909">Longitudine</a></li>
</ul>
</div>
</div>
<div id="outline-container-org6a3d0a7" class="outline-2">
<h2 id="org6a3d0a7">Novels</h2>
<div class="outline-text-2" id="text-org6a3d0a7">
<ul class="org-ul">
<li><a href="http://www.amazon.com/dp/1439157022">Generation A</a></li>
<li><a href="http://www.amazon.com/dp/0007179812">Microserfs</a></li>
</ul>

<p>
My first encounter with <a href="http://en.wikipedia.org/wiki/Douglas_Coupland">Douglas Coupland</a>. I particularly liked
Microserfs, that somehow seemed to be speaking directly to me. Perhaps
not for everybody.
</p>

<ul class="org-ul">
<li><a href="http://www.amazon.com/dp/0553103547">A game of Thrones</a></li>
<li><a href="http://www.amazon.com/dp/0553108034">A clash of Kings</a></li>
<li><a href="http://www.amazon.com/dp/0006479901">A storm of Swords</a></li>
</ul>

<p>
Five minutes after <a href="http://en.wikipedia.org/wiki/Game_of_Thrones_(TV_series)">Games of Thrones</a> s01e01 I realized I couldn't wait
an entire week to know the rest of the story. Still entertaining,
after ~3000 pages and already in the fourth book.
</p>

<ul class="org-ul">
<li><a href="http://www.amazon.com/dp/0061977969">REAMDE</a></li>
</ul>

<p>
I'm a hardcore <a href="http://en.wikipedia.org/wiki/Neal_Stephenson">Neal Stephenson</a> fan. I also have Anathem in my stack,
but I decided to read Reamde first, because it seemed less dense. It
was, and also more fast-paced than usual.
</p>

<ul class="org-ul">
<li><a href="http://www.amazon.com/dp/0307472590">La sombra del viento</a></li>
<li><a href="http://www.amazon.com/dp/8804499079">La donna della domenica</a></li>
<li><a href="http://www.amazon.com/dp/8845921794">Solomon Gursky è stato qui</a></li>
</ul>
</div>
</div>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-books.html">books</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[books]]></category>
  <link>https://stefanorodighiero.net/blog/2011-in-books.html</link>
  <guid>https://stefanorodighiero.net/blog/2011-in-books.html</guid>
  <pubDate>Sat, 31 Dec 2011 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[How fast my git repositories are growing]]></title>
  <description><![CDATA[
<p>
I wrote a very small utility to gather LOC counts from a git
repository.  Called gitsloc, it's based on <a href="http://cloc.sourceforge.net/">Cloc</a>, with some extra
goodness provided by <a href="http://search.cpan.org/~mschilli/Sysadm-Install/">Sysadm::Install</a> (a rather inaptly named module,
if you ask to me, but full of useful gems).
</p>

<p>
I guess it could actually have some uses, who knows?, but I wrote it
mostly because I wanted to see how fast repos are growing, and <a href="http://www.r-project.org/">R</a> is
the obvious tool to tinker with the results.
</p>

<p>
I'm less than a beginner with R, and I have to admit plotting data
from a multi-column CSV file is less straitghforward than I expected:
I had to use <code>xyplot</code> from the <a href="http://cran.r-project.org/web/packages/lattice/index.html">lattice package</a>, like this:
</p>

<pre class="example" id="org5499f7b">
xyplot(
  Perl + Bourne.Shell ~ 1:nrow(sloc),
  data = sloc,
  type = 'a',
  auto.key = list( space = "top", lines = TRUE, points = FALSE)
)
</pre>

<p>
Here the result, with data provided analysing the <a href="http://www.perldancer.org/">Dancer</a> github
repository (branch devel).
</p>


<figure id="orgb1a7df1">
<img src="../images/Rplot01.png" alt="Rplot01.png">

</figure>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-dev.html">dev</a> </div></div>]]></description>
  <category><![CDATA[dev]]></category>
  <link>https://stefanorodighiero.net/blog/how-fast-my-git-repositories-are-growing.html</link>
  <guid>https://stefanorodighiero.net/blog/how-fast-my-git-repositories-are-growing.html</guid>
  <pubDate>Sat, 06 Aug 2011 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Kindle first impressions]]></title>
  <description><![CDATA[
<p>
I just unboxed my <a href="http://en.wikipedia.org/wiki/Amazon_Kindle">Kindle</a>. I played with it for a few hours only, but
I'm satisfied with the choice so far.
</p>

<p>
First of all, to the zealots that may happen to read this article and
feel compelled to whine on "scent of paper" and other oddities: I'm
not planning the disposal of all my "real" books, neither I'm
considering buying only digital contents from now on.
</p>

<p>
I decided to buy an ebook reader because I wanted to see on my own
what can be done with this technology, which I consider immature and
yet to be completely exploited.  I think I am an early adopter, even
if Amazon Kindle and its competitors hit the market several years ago.
</p>

<p>
Also, I think having an ebook reader is nowadays the most practical
solution to the eternal problem "What books should I bring with me
during the journey?". Being able to answer "All!" is a wild dream that
comes true (but I understand this can be a problem as well).
</p>

<p>
Anyway, here a few impressions from a very very beginner.
</p>

<ul class="org-ul">
<li>The device itself looks beautiful. It's not heavy and it seems
prolongated use will not be tiring. On the other hand, I have the
impression it's not particularly sturdy. Again, this is something I
can say only in a few months (or in a few hundreds kilometers).</li>

<li>I think the slogan <i>"it's like paper"</i> is inaccurate.  Whatever
appears on the screen seems printed, but it does not recall paper to
me.  Besides that, fonts are very  crisp and readable, so Kindle
hits on the spot for what is supposed to be its  main use.</li>

<li>I am positively surprised by the refresh delay. Maybe because  I
expected it to be even worse, I think it's bearable, at least for
the kind  of books you read cover to cover in a sequential
fashion. In other words, good for novels, articles and stuff like
that; maybe not practical for manuals, documentation&#x2026; in general,
things you want to study, or browse randomly.</li>

<li>I suspect I will eventually feel hampered by the position of
buttons on the device. Anyway, this can't be but a speculation.</li>

<li>I'm currently at my parents' place, and there are problems with
the Internet connection, so I couldn't try its wifi capabilities
yet. A pity: one of the things I was more eager to try was Kindle's
use in conjunction with Instapaper.</li>

<li>Ah, the screensavers are wonderful!</li>
</ul>
<div class="taglist"><a href="https://stefanorodighiero.net/blog/tags.html">Tags</a>: <a href="https://stefanorodighiero.net/blog/tag-meta.html">meta</a> <a href="https://stefanorodighiero.net/blog/tag-hw.html">hw</a> </div></div>]]></description>
  <category><![CDATA[meta]]></category>
  <category><![CDATA[hw]]></category>
  <link>https://stefanorodighiero.net/blog/kindle-first-impressions.html</link>
  <guid>https://stefanorodighiero.net/blog/kindle-first-impressions.html</guid>
  <pubDate>Sun, 17 Apr 2011 00:00:00 +0200</pubDate>
</item>
</channel>
</rss>
