Thorsten Zöllerhttps://thorstenzoeller.comThorsten Zöller2025-10-12T00:00:00+02:00<h1>Michael W Lucas: “Ed Mastery”</h1>
<div class="paragraph">
<p>2024-09-29</p>
</div>
<div class="paragraph">
<p>The average user may not think a lot about which text editor to use. For us,
however, the choice of a text editor is a very serious matter.</p>
</div>
<div class="paragraph">
<p>I’ll admit it: I have always felt a little proud to be a
<a href="https://man.openbsd.org/vi">vi(1)</a> user (I even have a dedicated <a href="../vi/">vi
page</a> on my website). After having read <a href="https://mwl.io/nonfiction/tools#ed">Ed
Mastery</a> by <a href="https://mwl.io/">Michael W Lucas</a>, however, I feel somewhat whimpy
about it.</p>
</div>
<div class="paragraph">
<p>Only recently did I stumble across the book, and I was surprised that a book
about <a href="https://man.openbsd.org/ed">ed(1)</a> – “the standard Unix text
editor” – even exists. Yet, I knew immediately that I would have to read
it. The mere existence of a book about <a href="https://man.openbsd.org/ed">ed(1)</a> was
enough to convince me that it will be worth it.</p>
</div>
<div class="paragraph">
<p>And I was not disappointed (not that I had expected that…​). Michael W Lucas'
style of writing is hilarious, and first and foremost, it is simply a pleasure
to read.</p>
</div>
<div class="paragraph">
<p>Admittedly, I never really looked past <a href="https://man.openbsd.org/vi">vi(1)</a> in the
history of Unix text editors. I roughly new that
<a href="https://man.openbsd.org/ex">ex(1)</a> and <a href="https://man.openbsd.org/ed">ed(1)</a> are
predecessors of <a href="https://man.openbsd.org/vi">vi(1)</a> and that they are line
editors, but they always seemed a bit too peculiar and exotic to me to justify
looking into them in more detail (mostly because they are line editors, stemming
from a time when monitors were not yet common or even available – one
cannot take a line editor seriously these days, can one?). While I always felt
that no real progression has taken place in editor development since the advent
of <a href="https://man.openbsd.org/vi">vi(1)</a> (which explicitly includes editors like
<a href="https://www.vim.org/">Vim</a> or <a href="http://neovim.io/">Neovim</a>), I always implicitly
assumed that <a href="https://man.openbsd.org/vi">vi(1)</a> <em>was</em> in fact a progression from
<a href="https://man.openbsd.org/ed">ed(1)</a> and <a href="https://man.openbsd.org/ex">ex(1)</a>
(reflecting the progression from line printers to monitors for displaying
output). After reading <a href="https://mwl.io/nonfiction/tools#ed">Ed Mastery</a>, though, I
am not so certain about it anymore. I thought <a href="https://man.openbsd.org/vi">vi(1)</a>
was the pinnacle of simplicity, beauty and efficiency, but maybe I was wrong all
along.</p>
</div>
<div class="paragraph">
<p>A while ago, there was a great post titled
<a href="https://stackoverflow.com/a/1220118">Your problem with Vim is that you don’t grok
vi.</a> on Stack Overflow (read it if you haven’t yet!). It basically states that
many of the features of <a href="https://www.vim.org/">Vim</a> that are generally considered
improvements over <a href="https://man.openbsd.org/vi">vi(1)</a> (<em>Vi IMproved</em>, you know?),
making it more “user friendly”, are in fact feature creep (visual mode? why?)
and simply exist because users don’t want to take the time to get really
familiar and acquainted with <a href="https://man.openbsd.org/vi">vi(1)</a>. It is the
antidote to Antoine de Saint-Exupéry’s famous statement “Perfection is
achieved, not when there is nothing more to add, but when there is nothing left
to take away.”<sup class="footnote">[<a id="_footnoteref_1" class="footnote" href="#_footnotedef_1" title="View footnote.">1</a>]</sup></p>
</div>
<div class="paragraph">
<p>I am wondering if something similar could not be said about
<a href="https://man.openbsd.org/ed">ed(1)</a> as well: “Your problem with vi is that you
don’t grok ed.”</p>
</div>
<div class="paragraph">
<p>In any event, after reading <em>Ed Mastery</em>, many known features from
<a href="https://man.openbsd.org/vi">vi(1)</a> will make more sense. And even though it is
rather unlikely that most users will ditch their editor of choice right away in
favor of <a href="https://man.openbsd.org/ed">ed(1)</a> after reading the book, I am
convinced that it will improve your editing skills (if you use an editor
descending from <a href="https://man.openbsd.org/ed">ed(1)</a>, that is – otherwise,
all hope is lost anyway).</p>
</div>
<div class="paragraph">
<p>In summary: Experiencing joy while reading the book and learning profound things
along the way: What more could you wish for from a book?</p>
</div>
<div class="paragraph">
<p>Therefore my recommendation: <a href="https://mwl.io/nonfiction/tools#ed">Get the book</a>,
read it and grok <a href="https://man.openbsd.org/ed">ed(1)</a>, now!</p>
</div>
<div class="paragraph">
<p><em>Note:</em> Peter N. M. Hansteen has already written
<a href="https://nxdomain.no/~peter/ed_mastery_is_a_must_for_real_unix_person.html">a
great review</a> of the book several years ago, and actually I feel that there is
not much I could add to it (apart from my casual ranting you spent the last
couple of minutes reading). You should definitely read it as well if you
haven’t!</p>
</div>
<div id="footnotes">
<hr>
<div class="footnote" id="_footnotedef_1">
<a href="#_footnoteref_1">1</a>. I’ll happily admit that I do use <a href="https://neovim.io/">Neovim</a>. Have I ever claimed that I live up to my own standards, after all? <a href="#_footnoteref_1">↩</a>
</div>
</div>https://thorstenzoeller.com/ed-mastery2024-09-29T00:00:00+02:00Michael W Lucas: “Ed Mastery”2024-09-29T00:00:00+02:002024-09-29T00:00:00+02:00<h1>My New Website</h1>
<div class="paragraph">
<p>2021-06-20</p>
</div>
<div class="paragraph">
<p>Not long ago, I created my first website. It was a static website, just like
this one. I wrote the content in AsciiDoc and created a small script which
rendered the pages to HTML.</p>
</div>
<div class="paragraph">
<p>I was very proud of it.</p>
</div>
<div class="paragraph">
<p>The content was basically plain text with a little bit of markup and some meta
data – a beautifully clear separation of form and content.</p>
</div>
<div class="paragraph">
<p>The script generating the site consisted of about 200 lines of Ruby code. It was
simple, and it did its job.</p>
</div>
<div class="paragraph">
<p>But it turned out that I would spend far more time tweaking the script to
generate the site than to write content. After all, it was easier and more fun
than to think about what to write.</p>
</div>
<div class="paragraph">
<p>Also, the barrier to publish was too high: There were always a few steps to be
done before any change could be published. Not many steps, really: Make some
change, run the script, clone the respository for the site, delete its content,
copy the output of the script to the repository, commit and publish it.</p>
</div>
<div class="paragraph">
<p>Yet too many, as it turned out.</p>
</div>
<div class="paragraph">
<p>So I ditched the script for generating the site and started anew.</p>
</div>
<div class="paragraph">
<p>This time, it’s just plain HTML. Everything is created manually. Sounds like
more work, but it’s not. It’s a profound simplification.</p>
</div>
<div class="paragraph">
<p>This approach has its drawbacks, of course. The content is interspersed with
markup – HTML is not really lightweight. It is not possible to make a
change in the template which is immediately reflected in all pages using this
template.</p>
</div>
<div class="paragraph">
<p>But it’s definitely worth it.</p>
</div>
<div class="paragraph">
<p>I thought my site was simple, but it wasn’t. Or at least not simple enough.</p>
</div>
<div class="paragraph">
<p>Lesson learned.</p>
</div>https://thorstenzoeller.com/new2021-06-20T00:00:00+02:00My New Website2021-06-20T00:00:00+02:002021-06-20T00:00:00+02:00<h1>Derek Sivers: “How to Live”</h1>
<div class="paragraph">
<p>2023-03-05</p>
</div>
<div class="paragraph">
<p>To state it upfront: <a href="https://sive.rs/h">How to Live</a> is a book which can hardly
be overrated. It is full of wisdom, packed even more densely with insights than
Dereks' previous writings.</p>
</div>
<div class="paragraph">
<p>The title of the book asks one of the most important questions of life –
maybe the single most important one –, and it implies that the book sets
out to answer this question.</p>
</div>
<div class="paragraph">
<p>Instead of answering the titles’ question, however, the book presents us
with <em>twenty-one</em> ways how to live. Each of the 21 short chapters explains how
to live a life according to a certain guiding principle. It describes how to
live in complete accordance with that principle, to adhere to it with the utmost
consequence.</p>
</div>
<div class="paragraph">
<p>But: All of the 21 ways to live are completely incompatible with each other, due
to their conflicting guiding principles.</p>
</div>
<div class="paragraph">
<p>So does this book answer the question posed in its title? No. Instead, it
presents possibilities. Every single chapter is convincing and persuading, yet
every one is completely different than any other.</p>
</div>
<div class="paragraph">
<p>To me, the core statement of this book is that there are no definite answers, at
least not to the really important questions of life. We humans yearn for
answers, for recipes, for certainty – yet at some point, everybody has to
face the fact that there are no simple, universal answers to the truly important
questions. Life is contradictory, often messy, rarely proceeding along a
straight line. And, most important: Each life is absolutely individual, and
everyone has to find his own answers.</p>
</div>
<div class="paragraph">
<p>Just as remarkable as the books' content is its form. It is incredibly dense.
Derek somehow manages to picture the different ways to live in often not more
than three or four pages. Most sentences are very short, often fitting on a
single line, and new sentences always start on the next line. His writing is
never pleasing, but always sharp and to the point, and with “How to Live” he
has perfected his style. To me, it is supremely elegant.</p>
</div>
<div class="paragraph">
<p>Two quotes come to my mind when thinking of “How to Live”:</p>
</div>
<div class="paragraph">
<p>“Perfection is achieved, not when there is nothing more to add, but when there
is nothing left to take away.” by Antoine de Saint-Exupéry. It seems to me that
this was Dereks' personal guiding principle in writing this book.</p>
</div>
<div class="paragraph">
<p>The second one is by Michelangelo: “The sculpture is already complete within
the marble block, before I start my work. It is already there, I just have to
chisel away the superfluous material.” I can imagine how Derek spent hours and
hours chiseling away the superfluous words, finally achieving something which
comes very close to the perfection as it is defined in the quote by Antoine de
Saint-Exupéry above.</p>
</div>
<div class="paragraph">
<p>Making a point using many words is easy; making a point using very few words is
exceedingly difficult. Derek has succeeded in every aspect.</p>
</div>
<div class="paragraph">
<p>If you have not read the book yet, buy it and read it, immediately. Then, after
some time, read it again, and again.</p>
</div>https://thorstenzoeller.com/sivers-how-to-live2023-03-05T00:00:00+01:00Derek Sivers: “How to Live”2023-03-05T00:00:00+01:002023-03-05T00:00:00+01:00<h1>Running Anki inside Xephyr</h1>
<div class="paragraph">
<p>2023-02-26</p>
</div>
<div class="paragraph">
<p><a href="https://apps.ankiweb.net/">Anki</a> is a great tool for memorizing things, like
words in a foreign language you want to learn. I am using it for memorizing
Vietnamese words in my endeavor to learn Vietnamese.</p>
</div>
<div class="paragraph">
<p>I am currently running Anki 2.1.16 on OpenBSD 7.1. Unfortunately, quite often
Anki freezes after using it for some time, without any advance notice. When this
happens, I can no longer do anything except moving the mouse pointer. I cannot
switch windows and not even switch to the console in order to forcefully quit
Anki. Apparently, it crashes the whole system, and the only way out is a
forceful reboot.</p>
</div>
<div class="paragraph">
<p>I do not know what causes this behavior or if there is any fix for it. It seems
that I am not the only one experiencing this, but I have not yet found a
solution to this behavior.</p>
</div>
<div class="paragraph">
<p>I did find a workaround, however: Running Anki inside of
<a href="https://man.openbsd.org/Xephyr">Xephyr(1)</a> (a nested X server that runs as an X
application and is part of OpenBSD base) seems to prevent it from freezing. The
workaround involves three steps:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Launch <code>Xephyr</code> on display <code>:1</code> (or any other display differing from your main
display, which is usually <code>:0</code>).</p>
</li>
<li>
<p>Launch <code>cwm</code> inside the <code>Xephyr</code> window just created (it is necessary to run a
window manager since Anki employs multiple windows in general; of course, any
other window manager can be used as well).</p>
</li>
<li>
<p>Lauch Anki inside the <code>Xephyr</code> window.</p>
</li>
</ol>
</div>
<div class="paragraph">
<p>For convenience, I have created a small shell script for executing these steps:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>Xephyr -br -ac -noreset -screen 1920x1080 :1 &
cwm -c .cwmrc_xephyr -d :1 &
DISPLAY=:1 anki &</code></pre>
</div>
</div>
<div class="paragraph">
<p>Of course, the value of the <code>screen</code> command line parameter of <code>Xephyr</code> needs to
be adjusted to your screen size. Also, I run <code>cwm</code> in the <code>Xephyr</code> window with a
specific configuration file.</p>
</div>
<div class="paragraph">
<p>It works well, but strangely, after a while <code>cwm</code> seems to stop running inside
<code>Xephyr</code>. This is inconvenient because it makes it impossible to switch between
different Anki windows. The solution is to simply restart <code>cwm</code> by manually
executing the second line of the script again.</p>
</div>
<div class="paragraph">
<p>Obviously, this is not a real fix to the problem, but it works. Hopefully, Anki
will get more stable in the future so that this workaround will no longer be
needed.</p>
</div>https://thorstenzoeller.com/anki-inside-xephyr2023-02-26T00:00:00+01:00Running Anki inside Xephyr2023-02-26T00:00:00+01:002023-02-26T00:00:00+01:00<h1>How I Use Vim</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>2025-08-30</p>
</div>
<div class="paragraph">
<p>First things first: This is a contribution to the first ever
<a href="https://lazybea.rs/carnivals/"> Vim Carnival</a>, initiated by
<a href="https://lazybea.rs/">Hyde</a>, and it is an honor to be part of it! A big “thank
you” to Hyde for coming up with this great idea, organizing the carnival and
hosting the <a href="https://lazybea.rs/vim-carnival-202509/">first one</a>!</p>
</div>
<div class="paragraph">
<p><em>Note: In the whole article, I am mostly using “Vim” as a general term
referring to any Vim-like editor (i.e. it encompasses in particular both
<a href="https://www.vim.org/">Vim</a> and <a href="https://neovim.io/">Neovim</a>), unless otherwise
stated.</em></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_my_history_of_using_vim_a_personal_account">My History of Using Vim – A Personal Account</h2>
<div class="sectionbody">
<div class="paragraph">
<p>When I first grappled with Linux in the mid-to-late 1990s, I was inevitably
confronted with the question of which editor to use. There was a huge amount of
editors to choose from, but I quickly learned that there were two editors which
were mentioned much more than others, and those two editors obviously were vi
and Emacs. I started playing around a little bit with Emacs, but soon I realized
that it was not the right editor for me. I was looking for a tool which allowed
me to edit text files, and nothing else. And Emacs definitely allows one to do
<em>a lot more</em> than just editing text files.</p>
</div>
<div class="paragraph">
<p>Now it is certainly not my intention to revive one of the most famous holy wars
ever. I completely understand if people use Emacs if this is the right editor
for them (or any other editor, for that matter). For me, however, vi (or rather
Vim at that time) turned out to be the right editor.</p>
</div>
<div class="paragraph">
<p>Its simplicity and minimalist appearance appealed a lot to me. I liked that the
mouse played no role in using it. And I knew that there was no need for me to
look any further.</p>
</div>
<div class="paragraph">
<p>I guess I was drawn to vi for the same reasons I was – albeit many years
later – drawn to the <a href="https://www.openbsd.org">OpenBSD</a> operating system: I
like things to be minimal. In particular, tools should do one thing only and do
it well (the core of the <a href="https://en.wikipedia.org/wiki/Unix_philosophy">Unix
philosophy</a>, by the way).<sup class="footnote">[<a id="_footnoteref_1" class="footnote" href="#_footnotedef_1" title="View footnote.">1</a>]</sup></p>
</div>
<div class="paragraph">
<p>Once I started using Vim, I never felt any desire to switch to another editor,
and it is now my editor of choice since more than a quarter of a century (and I
am so fond of it that I even maintain a dedicated <a href="../vi/">vi page</a>).</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_so_how_do_i_actually_use_vim">So, How Do I Actually Use Vim?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>I do basically all my editing and writing in Vim, from e-mails to my PhD thesis
(and, obviously, this very article as well). I also do all of my programming in
Vim (no need for fancy IDEs). It is suitable for minor editing tasks just as
well as for large writing or programming projects, and it has never failed me.
It is fast – <em>really</em> fast –, and plain vi is available on basically
every Unix installation out there – no matter what flavor of Unix or what
age it is.</p>
</div>
<div class="paragraph">
<p>I love that it is a modal editor. In contrast to most other editors, pressing a
key does not automatically make the corresponding character appear on the screen
– it only does if you happen to be in insert mode. Otherwise, it is
interpreted as a command. This allows for pretty easy key combinations for most
simple and elementary commands (in contrast to non-modal editors, where one
always has to escape entering characters, which necessarily leads to more
complex key combinations). I also love that commands are very logical in a
specific way; one could argue that they form some sort of a language. I will not
dive into the details here; that would make for an entire new article (or two or
three…​). It has been claimed that editing text in Vim is an almost Zen-like
experience, and while I feel that this does not really do justice to Zen, I
completely get what is meant by that statement.</p>
</div>
<div class="paragraph">
<p>I do not use any plugins, although there is a huge ecosystem of plugins
available for Vim (and Neovim even declares itself a “hyperextensible Vim-based
text editor” on its <a href="https://neovim.io/">website</a>). I simply do not have any need
for them. While there are certainly plugins which aim at improving the <em>editing</em>
experience, my impression is that many plugins try to make Vim into something
more than an editor. As mentioned earlier, though, that was one of the major
reasons for me <em>not</em> to use Emacs. I do not want Vim to be more than an editor.
I want to have an editor – no more and no less, period.</p>
</div>
<div class="paragraph">
<p>Actually, I do not even care much about many of the <em>improvements</em> of Vim over
plain vi (Vim is “Vi IMproved”, after all…​). For instance, I never use
visual mode. While it may be helpful when one is new to Vim<sup class="footnote">[<a id="_footnoteref_2" class="footnote" href="#_footnotedef_2" title="View footnote.">2</a>]</sup>
– and in particular when one is used to GUI editors allowing one to mark
text –, it is probably not the most efficient way to accomplish most of
the things it is used for. In fact, I would argue that it would be a good idea
to use plain vi for quite some time before (potentially) moving on to Vim. Many
people probably do not even know how to accomplish things in vi without
resorting to the <em>improvements</em> Vim offers. Yet, I am convinced that many of
those <em>improvements</em> are improvements only in a superficial way. All this is
elaborated extremely well in a reply on Stack Overflow,
<a href="https://stackoverflow.com/a/1220118">Your problem with Vim is that you don’t grok
vi</a>. I suggest reading it to everyone who is using Vim.</p>
</div>
<div class="paragraph">
<p>So, in a perfect world, I would be using plain vi instead of Vim<sup class="footnote">[<a id="_footnoteref_3" class="footnote" href="#_footnotedef_3" title="View footnote.">3</a>]</sup>, and actually this is
what I did for a couple of years.<sup class="footnote">[<a id="_footnoteref_4" class="footnote" href="#_footnotedef_4" title="View footnote.">4</a>]</sup> There are some reasons, though, why I switched
to using Neovim for most things. One reason is that multiple levels of “undo”
<em>is</em> in fact a real improvement over vi. Besides, I hail from one of those
strange countries where people like to draw little dots above the letters, so
Unicode support is practically non-negotiable for me. Also, I do use syntax
highlighting, though I consider it by no means necessary (contrary to what I
used to believe before using plain vi exclusively for a while).</p>
</div>
<div class="paragraph">
<p>My <code>.vimrc</code> is very simple as well. While I am quite impressed by all the config
files one can find on the Internet which are hundreds of lines long, and while I
have a tendency myself to tweak config files way too much, I prefer to keep
things simple here as well. Setting a few options fully suffices to make Vim
behave the way I like.</p>
</div>
<div class="paragraph">
<p>Now, while one might get that impression, it is certainly not my intention to
argue against using Vim and in favor of vi. While I do think that Vim has become
rather bloated over time, I use it on a daily basis and am most happy with it.
My point is to direct the focus on the beautiful core of Vim – which is
pretty close to plain vi in my opinion, yet extends it in certain ways. I
sometimes like to compare vi and Vim to C and C++:<sup class="footnote">[<a id="_footnoteref_5" class="footnote" href="#_footnotedef_5" title="View footnote.">5</a>]</sup> There
is this beautiful, rather small and well-defined, yet immensely powerful
language C. And then there is C++, which extends C by far, adding feature
over feature to it. Both are used heavily, and there are certainly reasons for
both; but in most cases, I would rather use C instead of C++ (if I used
them at all…​).</p>
</div>
<div class="paragraph">
<p>So, coming back to the subject of this article, the question of how I use Vim: I
use it mostly the way I would use plain vi, but I also happily make use of those
extensions I find useful – which are rather few, though. While I have used
Vim for decades, I am sure I only employ a small fraction of the possibilities
Vim – or even vi – offers. I might become more efficient by putting
work into learning more subtle and intricate features, but I feel no real need
for it. I know that, should I need a particular feature, I will most certainly
find it – if not in vi, then in Vim. Most of the time, though, I am happy
using a select set of commands in a more or less efficient way.</p>
</div>
<div class="paragraph">
<p>There is so much more to say about Vim (maybe in the context of another Vim
Carnival?), but for now, I will close my ramblings about Vim with one last
observation: I do not just <em>use</em> Vim – I <em>enjoy</em> using it, a lot.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_further_reading">Further Reading</h2>
<div class="sectionbody">
<div class="paragraph">
<p>There are a lot of great text about Vim out there (for a selection, see my
<a href="../vi/">vi page</a>), so I would just like to mention two particular ones
here:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://moolenaar.net/habits.html">Seven habits of effective text editing</a> by
Bram Moolenaar, author of <a href="https://www.vim.org/">Vim</a>.</p>
</li>
<li>
<p><a href="http://www.viemu.com/a-why-vi-vim.html">Why, oh WHY, do those #?@! nutheads
use vi?</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>There once was another nice article called “Grokking the Zen of the Vim
Wu-Wei”, but unfortunately the original link is broken, and I cannot find it
anywhere else. If someone does manage to find it, I would be grateful for the
link.</p>
</div>
</div>
</div>
<div id="footnotes">
<hr>
<div class="footnote" id="_footnotedef_1">
<a href="#_footnoteref_1">1</a>. Strangely, I recently found two articles which make the very same point with respect to coffee preparation: <a href="https://btxx.org/posts/one-thing/">My Coffee Maker Just Makes Coffee</a>, and <a href="https://www.fromjason.xyz/p/notebook/the-bliss-of-good-enough-an-ode-to-my-moka-pot/">The bliss of good enough— an ode to my moka pot</a>. <a href="#_footnoteref_1">↩</a>
</div>
<div class="footnote" id="_footnotedef_2">
<a href="#_footnoteref_2">2</a>. And I have used it myself for many years, I should add. <a href="#_footnoteref_2">↩</a>
</div>
<div class="footnote" id="_footnotedef_3">
<a href="#_footnoteref_3">3</a>. And in an even more perfect world, I would be using <a href="../ed-mastery/">ed</a>. <a href="#_footnoteref_3">↩</a>
</div>
<div class="footnote" id="_footnotedef_4">
<a href="#_footnoteref_4">4</a>. To be more precise, I was using nvi. <a href="#_footnoteref_4">↩</a>
</div>
<div class="footnote" id="_footnotedef_5">
<a href="#_footnoteref_5">5</a>. Though the comparison is admittedly far from perfect…​ <a href="#_footnoteref_5">↩</a>
</div>
</div>https://thorstenzoeller.com/how-i-use-vim2025-08-30T00:00:00+02:00How I Use Vim2025-08-30T00:00:00+02:002025-08-30T00:00:00+02:00<h1>A Simple E-Mail Reminder System Based on cron and at</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>2023-02-10</p>
</div>
<div class="paragraph">
<p>Since I cannot keep everything I have to remember in my head, I need a reminder
system. While I would prefer an analog system (ideally one that integrates with
my system for keeping track of tasks), I have not found a satisfying analog
solution so far.</p>
</div>
<div class="paragraph">
<p>I am not looking for a full-fledged calendar system. If I were, I would be using
<a href="https://www.roaringpenguin.com/products/remind">Remind</a> or
<code>calendar</code><sup class="footnote">[<a id="_footnoteref_1" class="footnote" href="#_footnotedef_1" title="View footnote.">1</a>]</sup>.
But they offer way more features than I need.</p>
</div>
<div class="paragraph">
<p>I basically have two requirements for my reminder system:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>It has to remind me reliably by e-mail about things a certain time in advance.</p>
</li>
<li>
<p>It has to be simple and have as few external dependencies as possible.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The solution I have come up with is almost too trivial to share: It employs
<code>cron</code> and <code>at</code> to schedule reminders, which are sent as e-mails via a remote
SMTP server when they are due.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_the_setup">The Setup</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The system depends on the following ingredients:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>A machine which is up 24/7 – for scheduling reminders for arbitrary
times.<sup class="footnote">[<a id="_footnoteref_2" class="footnote" href="#_footnotedef_2" title="View footnote.">2</a>]</sup> I am using a server hosted on
<a href="https://openbsd.amsterdam/">OpenBSD Amsterdam</a>.</p>
</li>
<li>
<p><code>smtpd</code> – for <a href="../smtpd-relay/">relaying e-mails to a remote SMTP
server</a>.</p>
</li>
<li>
<p><code>cron</code> – for scheduling recurring reminders (like birthdays).</p>
</li>
<li>
<p><code>at</code> – for scheduling nonrecurring reminders (like one-time events, or
events which recur in irregular intervals).</p>
</li>
<li>
<p><code>mail</code> – for sending e-mails non-interactively.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>On <a href="https://www.openbsd.org/">OpenBSD</a>, all the required software is part of the
base system; see <a href="https://man.openbsd.org/smtpd.8">smtpd(8)</a>,
<a href="https://man.openbsd.org/cron.8">cron(8)</a>, <a href="https://man.openbsd.org/at.1">at(1)</a>,
<a href="https://man.openbsd.org/mail.1">mail(1)</a>.</p>
</div>
<div class="paragraph">
<p>Both <code>cron</code> and <code>at</code> basically take two kinds of data as input: A timestamp
which specifies <em>when</em> something is to be done, and an action which specifies
<em>what</em> is to be done at the specified time.</p>
</div>
<div class="paragraph">
<p>Regardless of whether a reminder is recurring or nonrecurring, I want an e-mail
to be sent to me at the specified time. Therefore, the action in both cases is
sending an e-mail to me reminding me of the given event. Since the e-mail needs
to be sent non-interactively when the given time is reached, the <code>mail</code> utility
is invoked, and the reminder text is passed to it as the mail subject (since
they are usually short, I only specify a subject and leave the body empty; then
I don’t even have to open the e-mail).</p>
</div>
<div class="paragraph">
<p>In order not to have to specify the non-changing details (like the e-mail
address) for sending the mail each time, I employ a small script called
<code>mailrem</code> which is basically a wrapper around <code>mail</code> which takes the reminder
text as its argument:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>#!/bin/sh
from="John Doe <john.doe@email.com>"
subject="$1"
echo | mail -r "$from" -s "$subject" "$from"</code></pre>
</div>
</div>
<div class="paragraph">
<p>Finally, in order for <code>mail</code> to be able to send mails to a remote SMTP server,
<code>smtpd</code> needs to be <a href="#smtpd-relay">configured such that it relays outgoing
mail to a remote server</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_usage">Usage</h2>
<div class="sectionbody">
<div class="paragraph">
<p>E-mail reminders are sent by calling <code>mailrem</code> with the specific reminder text
as its argument, e.g.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ mailrem "Prepare tax statement"</code></pre>
</div>
</div>
<div class="paragraph">
<p>In order to schedule reminders for a specific time, <code>mailrem</code> is not invoked
directly as above, but either by <code>cron</code> or by <code>at</code>, depending on whether the
reminder is to be sent on a regular basis or just once.</p>
</div>
<div class="sect2">
<h3 id="_recurring_reminders">Recurring reminders</h3>
<div class="paragraph">
<p>Recurring reminders are scheduled by <code>cron</code> via corresponding crontab entries.
Start editing the crontab file:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ crontab -e</code></pre>
</div>
</div>
<div class="paragraph">
<p>Then add an entry for each recurring reminder like this:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>0 0 3 18 * $HOME/bin/mailrem "[Reminder] Paul's $(( $(/bin/date +\%Y) - 1976 )). birthday (1976)"</code></pre>
</div>
</div>
<div class="paragraph">
<p>This entry would send an e-mail each year at midnight on March 18 with subject
“[Reminder] Paul’s <em>n</em>. birthday (1976)”, where <em>n</em> is calculated each time
the cron entry is triggered by subtracting Paul’s year of birth, 1976, from the
current year obtained by the <code>date</code> utility.<sup class="footnote">[<a id="_footnoteref_3" class="footnote" href="#_footnotedef_3" title="View footnote.">3</a>]</sup></p>
</div>
</div>
<div class="sect2">
<h3 id="_nonrecurring_reminders">Nonrecurring reminders</h3>
<div class="paragraph">
<p>Nonrecurring reminders are scheduled by <code>at</code> via corresponding atjobs. For
instance, to schedule an atjob for midnight in three days:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ at midnight + 3 days</code></pre>
</div>
</div>
<div class="paragraph">
<p>When prompted, enter the action to be executed at the specified time like this:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>> mailrem "[Reminder] Doctor's appointment at 9 am"</code></pre>
</div>
</div>
<div class="paragraph">
<p>Then, press <code>Ctrl + D</code> to queue the atjob.</p>
</div>
<div class="paragraph">
<p>That’s it. A very simple system which does its job and is easy to setup and
maintain.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_caveats">Caveats</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>The system is certainly not suitable for time-critical reminders. This is
obvious, since by nature the reminders are sent in an asynchroneous way (i.e.
via e-mail).</p>
</li>
<li>
<p>There is no easy way to get a consolidated overview over all currently
scheduled reminders. For recurring reminders, <code>crontab -l</code> could be used.
Similarly, <code>atq</code> displays the queue of atjobs. However, the output of <code>atq</code> is
pretty much unparseable (at least in the version which ships with OpenBSD). So
one would have to manually extract the job ID from the output of <code>atq</code> and
then do <code>$ at -c <id></code> in order to see the content of the job.</p>
</li>
<li>
<p>Failures cannot easily be discovered in general, and there is no recovery
mechanism. If, e.g., for some reason the <code>cron</code> daemon is not running at the
time a reminder is due, it will not be sent and will subsequently be lost
forever.</p>
</li>
</ul>
</div>
</div>
</div>
<div id="footnotes">
<hr>
<div class="footnote" id="_footnotedef_1">
<a href="#_footnoteref_1">1</a>. Man page of the OpenBSD version: <a href="https://man.openbsd.org/calendar.1">calendar(1)</a>. <a href="#_footnoteref_1">↩</a>
</div>
<div class="footnote" id="_footnotedef_2">
<a href="#_footnoteref_2">2</a>. In principle, of course, it is also possible to run the system on a laptop. The severe drawback would be that reminders were lost if the laptop were not running at the scheduled time of a reminder. One could use tools like anacron instead of cron. This would mitigate the risk of losing reminders, but the time they are sent would then depend on when the laptop is running (which may differ greatly from the intended time of sending). <a href="#_footnoteref_2">↩</a>
</div>
<div class="footnote" id="_footnotedef_3">
<a href="#_footnoteref_3">3</a>. Man page of the OpenBSD version: <a href="https://man.openbsd.org/date.1">date(1)</a>. <a href="#_footnoteref_3">↩</a>
</div>
</div>https://thorstenzoeller.com/mail-reminder2023-02-10T00:00:00+01:00A Simple E-Mail Reminder System Based on cron and at2023-02-10T00:00:00+01:002023-02-10T00:00:00+01:00<h1>Relay Mail to a Remote SMTP Server With <code>smtpd</code></h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>2022-03-27</p>
</div>
<div class="paragraph">
<p>Configure <a href="https://man.openbsd.org/smtpd.8">smtpd(8)</a> to relay outgoing mail to a
remote SMTP server as follows:</p>
</div>
<div class="paragraph">
<p>Create the file <code>/etc/mail/secrets</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ doas touch /etc/mail/secrets
$ doas chmod 640 /etc/mail/secrets
$ doas chown root:_smtpd /etc/mail/secrets
$ doas echo "<i>label</i> <i>username</i>:<i>password</i>" > /etc/mail/secrets</code></pre>
</div>
</div>
<div class="paragraph">
<p><code><em>username</em></code> and <code><em>password</em></code> are the credentials for accessing the remote SMTP
server, and <code><em>label</em></code> is an identifier for the username-password combination. It
can be chosen arbitrarily and is used in <code>smtpd.conf</code> (see below). Since the
credentials are stored in plain text, restrictive permissions are set for the
<code>secrets</code> file.</p>
</div>
<div class="paragraph">
<p>Replace the default content of <code>/etc/mail/smtpd.conf</code> with the following:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>table aliases file:/etc/mail/aliases
table secrets file:/etc/mail/secrets
listen on lo0
action "local" mbox alias <aliases>
action "relay" relay host smtp+tls://<em>label</em>@<em>smtp-server</em>:<em>port</em> auth <secrets>
match for local action "local"
match for any action "relay"</code></pre>
</div>
</div>
<div class="paragraph">
<p><code><em>label</em></code> is the corresponding label from the <code>secrets</code> file, <code><em>smtp-server</em></code> is
the URL of the remote SMTP server, and <code><em>port</em></code> is the mail submission port
(default: 587).</p>
</div>
<div class="paragraph">
<p>Verify that the configuration is syntactically correct:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ doas smtpd -n
<strong>configuration OK</strong></code></pre>
</div>
</div>
<div class="paragraph">
<p>Restart <code>smtpd</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ doas rcctl restart smtpd
<strong>smtpd(ok)
smtpd(ok)</strong></code></pre>
</div>
</div>
<div class="paragraph">
<p>Test the configuration by sending an e-mail using
<a href="https://man.openbsd.org/mail">mail(1)</a>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ echo "<em>body</em>" | mail -s "<em>subject</em>" <em>email-address</em></code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_references">References</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="https://man.openbsd.org/smtpd.conf">smtpd.conf(5)</a></p>
</li>
<li>
<p><a href="https://rgz.ee/openbsd/smtpd-forward.html">Forward outgoing mail to a remote
SMTP server</a> by Roman Zolotarev.</p>
</li>
</ul>
</div>
</div>
</div>https://thorstenzoeller.com/smtpd-relay2022-03-27T00:00:00+01:00Relay Mail to a Remote SMTP Server With smtpd2022-03-27T00:00:00+01:002022-03-27T00:00:00+01:00<h1>Multiple-Click Selections in xterm</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>{date}</p>
</div>
<div class="paragraph">
<p>It is possible to configure in detail which portion of the screen – a
word, a line, etc. – is selected in
<a href="https://man.openbsd.org/xterm.1">xterm(1)</a> on rapid successive mouse clicks.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_what_is_a_word_in_xterm_after_all">What is a Word in xterm, After All?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>In <code>xterm</code>, words can be selected by double-clicking on any character in the
respective word. This will highlight the word, and it is then in the primary
selection of the X Window System and can be pasted elsewhere.</p>
</div>
<div class="paragraph">
<p>Characters are grouped into <em>character classes</em>. Words are defined in <code>xterm</code> as
strings of characters belonging to the same character class. Therefore, what
<code>xterm</code> interprets as a word depends on the mapping of characters to character
classes.</p>
</div>
<div class="paragraph">
<p>In the default mapping, alphanumeric characters and the underscore belong to one
character class, space and tab belong to another character class, and all other
characters have their own character class. This definition works well when
dealing mostly with prosaic texts, since it more or less corresponds to the
usual definition of a word (i.e. certain characters separated by whitespace). In
other cases, it is less convenient though. For instance, it is not possible to
select a path consisting of several directories by double-clicking on it, since
directories are separated by a slash, which belongs to a different character
class than alphanumeric characters and the underscore.</p>
</div>
<div class="paragraph">
<p>Interestingly, the mapping can be changed via a certain <code>xterm</code> resource called
<code>charClass</code>. Its value is a list of key-value pairs, where the key is either a
single character code or a range of character codes, and the value is a
character class. A given key-value pair then defines that the character(s)
specified by the key belong to the character class specified by the value.</p>
</div>
<div class="paragraph">
<p>Character classes are identified by numbers (which in turn correspond to the
character code of a representative of that character class). The default mapping
of characters to character classes is given in the
<a href="https://man.openbsd.org/xterm.1#CHARACTER_CLASSES">respective section of the
manpage</a>. In the default mapping, alphanumeric characters and the underscore
belong to character class 48 (the character code of the character <code>0</code>), and
space and tab belong to character class 32 (the character class of <code>space</code>).</p>
</div>
<div class="paragraph">
<p>Therefore, in order to add e.g. the characters <code>!</code> (character code 33) and <code>:</code>
(character code 58) to character class 48, add the following line to
<code>~/.Xresources</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>xterm*charClass: 33:48,58:48</code></pre>
</div>
</div>
<div class="paragraph">
<p>To add all “regular” characters to character class 48, add the following line
to <code>~/.Xresources</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>xterm*charClass: 33-126:48</code></pre>
</div>
</div>
<div class="paragraph">
<p>Activate the change:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ xrdb -merge ~/.Xresources</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_xterm_knows_more_than_just_words">xterm Knows More Than Just Words</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Words are just one kind of character grouping in <code>xterm</code>. The full list is:</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1"><code>word</code></dt>
<dd>
<p>As defined above.</p>
</dd>
<dt class="hdlist1"><code>line</code></dt>
<dd>
<p>The entire line to which the character under the pointer belongs to.</p>
</dd>
<dt class="hdlist1"><code>group</code></dt>
<dd>
<p>Basically the paragraph the character under the pointer belongs to,
i.e. all lines above and below up to the next blank line. Does not extend
outside the current page.</p>
</dd>
<dt class="hdlist1"><code>page</code></dt>
<dd>
<p>All visible lines on the current page.</p>
</dd>
<dt class="hdlist1"><code>all</code></dt>
<dd>
<p>All lines, including i.e. saved lines.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>Even that is not all there is, though. On top of that, it is even possible to
define custom groupings via regular expressions (basically, all other predefined
groupings are just shortcuts; they could just as well be defined via a
corresponding regular expression). Also, there is the pseudo-grouping <code>none</code>
which specifies that no selection should occur in the respective case.</p>
</div>
<div class="paragraph">
<p>So it is possible to specify in a very fine-grained way what will be in the
primary selection when double-clicking on some character. But it can be
specified just as well what happens when clicking multiple (i.e. more than two)
times in rapid succession. This is useful since one may be interested in
selecting different character groupings depending on the respective case. For
instance, in the default configuration, triple-clicking usually selects the
entire line. Which character grouping is selected when clicking 2, 3, 4 and 5
times in rapid succession is specified by assigning one of the character
groupings defined above to the <code>xterm</code> resources <code>on2Clicks</code>, <code>on3Clicks</code>,
<code>on4Clicks</code> and <code>on5Clicks</code>, respectively.</p>
</div>
<div class="paragraph">
<p>As an example, in order to specify that double-clicking should select words
defined as a string consisting of alphanumeric characters, the underscore, the
exclamation mark and the colon, that triple-clicking should select words defined
as a string consisting of all regular characters except whitespace (defined via
a corresponding regular expression), and that clicking four times in rapid
succession should select the entire line, add the following lines to
<code>~/.Xresources</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>xterm*charClass: 33:48,58:48
xterm*on2Clicks: word
xterm*on3Clicks: regex [^[:space:]]+
xterm*on4Clicks: line</code></pre>
</div>
</div>
<div class="paragraph">
<p>Even when using the mouse sparingly, it is very convenient to be able to specify
what gets selected on multiple clicks in <code>xterm</code>, and it certainly does save
some time.</p>
</div>
</div>
</div>https://thorstenzoeller.com/xterm-sel2000-01-01T00:00:00+01:00Multiple-Click Selections in xterm2000-01-01T00:00:00+01:002000-01-01T00:00:00+01:00<h1>Taking Screenshots on OpenBSD</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>2022-01-30</p>
</div>
<div class="paragraph">
<p>I rarely need to take screenshots, but occasionally it is convenient to be able
to do so. The method described here uses
<a href="https://github.com/naelstrof/maim">maim</a>, <a href="https://man.openbsd.org/cwm.1">cwm(1)</a>
and <a href="https://man.openbsd.org/ksh.1">ksh(1)</a>. I use it on OpenBSD, but it should
work in a very similar way on all Unix-like operating systems.</p>
</div>
<div class="paragraph">
<p>Here is how it works:</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_preparation">Preparation</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Install <code>maim</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ doas pkg_add maim</code></pre>
</div>
</div>
<div class="paragraph">
<p>Create a script with the following content and save it to <code>~/bin/screenshot</code>
(assuming <code>~/bin</code> is in the user’s <code>PATH</code>):</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>#!/bin/sh
maim -s | xclip -selection clipboard -t image/png</code></pre>
</div>
</div>
<div class="paragraph">
<p>All this script does is invoking <code>maim</code> to prompt the user to select the region
of the screen he wants to take a screenshot of, upon which <code>maim</code> will create a
PNG image of the region, which is then copied to the clipboard.</p>
</div>
<div class="paragraph">
<p>Make the script executable:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ cd ~/bin
$ chmod u+x screenshot</code></pre>
</div>
</div>
<div class="paragraph">
<p>Define a keybinding in <code>~/.cwmrc</code> for invoking <code>screenshot</code> via the key
combination <code>Alt + s</code> (of course, any other combination works as well):</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>bind-key M-s "bin/screenshot"</code></pre>
</div>
</div>
<div class="paragraph">
<p>Define an alias in <code>~/.kshrc</code> for pasting the image from the clipboard to a
file:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>alias clip2file='xclip -selection clipboard -o >'</code></pre>
</div>
</div>
<div class="paragraph">
<p>That’s it.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_taking_a_screenshot">Taking a Screenshot</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Then, to take a screenshot, do the following:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Press <code>Alt + s</code>.</p>
</li>
<li>
<p>Select the region of the screen you want to take a screenshot of.</p>
</li>
<li>
<p>Go to a terminal and type:</p>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ clip2file <file>.png</code></pre>
</div>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>The resulting screenshot will be saved to <code><file>.png</code>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_see_also">See Also</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="https://romanzolotarev.com/bin/screenshot">Another script</a> for taking
screenshots by <a href="https://romanzolotarev.com/">Roman Zolotarev</a>.</p>
</li>
<li>
<p><a href="https://dataswamp.org/~solene/2021-07-19-simple-scripts.html#_Screenshot_of_a_region_and_upload">Another
script</a> for taking screenshots by <a href="https://dataswamp.org/~solene/">Solène
Rapenne</a>.</p>
</li>
</ul>
</div>
</div>
</div>https://thorstenzoeller.com/screenshots-on-openbsd2022-01-30T00:00:00+01:00Taking Screenshots on OpenBSD2022-01-30T00:00:00+01:002022-01-30T00:00:00+01:00<h1>Installation and Setup of the RainLoop Webmail Client on OpenBSD</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>2021-12-22</p>
</div>
<div class="paragraph">
<p><a href="https://www.rainloop.net/">RainLoop</a> is a modern, simple and rather lightweight
webmail client. This article describes its installation and setup on a local
OpenBSD machine and the configuration necessary for accessing a
<a href="https://posteo.de/en">Posteo</a> e-mail account.</p>
</div>
<div class="paragraph">
<p>Tested with OpenBSD 6.9, PHP 8.0 and RainLoop 1.16.0.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_prerequisites">Prerequisites</h2>
<div class="sectionbody">
<div class="paragraph">
<p>On a default OpenBSD installation, only a few things are required in order to
get RainLoop set up and running:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><strong>Web server</strong>. Since we are on OpenBSD, we will be using
<a href="https://man.openbsd.org/httpd.8">httpd(8)</a>.</p>
</li>
<li>
<p><strong>PHP</strong>. In addition to the extensions contained in the base installation, only
PHP-cURL is required, and optionally PHP-PDO for contacts.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>No database is required for the core functionality; it is only needed for
storing contacts, which is optional.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_installation_and_setup">Installation and Setup</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_httpd">httpd</h3>
<div class="paragraph">
<p>Create an entry in <code>/etc/httpd.conf</code> for a HTTP server listening on
<code>localhost:8080</code> (of course, any other port can be specified):</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>server "default" {
listen on "127.0.0.1" port 8080
log {
access "default-access.log"
error "default-error.log"
}
root "/rainloop"
directory index index.php
location "/data/*" { block }
location "*.php" {
fastcgi socket "/run/php-fpm.sock"
}
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>Here, it is assumed that RainLoop will be installed in <code>/var/www/rainloop</code>,
which therefore needs to be set as the document root for the server. Also, web
access to the <code>data</code> subdirectory must be blocked.</p>
</div>
<div class="paragraph">
<p>Start <a href="https://man.openbsd.org/httpd.8">httpd(8)</a> unless it is already running:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ doas rcctl enable httpd
$ doas rcctl start httpd</code></pre>
</div>
</div>
<div class="paragraph">
<p>Otherwise, simply restart it:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ doas rcctl restart httpd</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_php">PHP</h3>
<div class="paragraph">
<p>Install <a href="https://man.openbsd.org/php.1">php(1)</a> unless already done:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ doas pkg_add php</code></pre>
</div>
</div>
<div class="paragraph">
<p>Start the PHP FastCGI Process Manager (PHP-FPM):</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ doas rcctl enable php80_fpm
$ doas rcctl start php80_fpm</code></pre>
</div>
</div>
<div class="paragraph">
<p>Install the PHP-cURL extension and make it known to PHP:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ doas pkg_add php-curl
$ doas ln -sf /etc/php-8.0.sample/curl.ini /etc/php-8.0/</code></pre>
</div>
</div>
<div class="paragraph">
<p>Optionally, install the corresponding PHP-PDO extension for the database to be
used (in this case SQLite; other options are MySQL and PostgreSQL) and make it
known to PHP:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ doas pkg_add php-pdo_sqlite
$ doas ln -sf /etc/php-8.0.sample/pdo_sqlite.ini /etc/php-8.0/</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_rainloop">RainLoop</h3>
<div class="paragraph">
<p>Create a directory for RainLoop under <code>/var/www</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ doas mkdir /var/www/rainloop</code></pre>
</div>
</div>
<div class="paragraph">
<p>Get the latest version of the
<a href="https://www.rainloop.net/repository/webmail/rainloop-community-latest.zip">RainLoop
Community edition</a> and unzip it in <code>/var/www/rainloop</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ doas mkdir /var/www/rainloop
$ cd /var/www/rainloop
$ doas ftp https://www.rainloop.net/repository/webmail/rainloop-community-latest.zip
$ doas unzip rainloop-community-latest.zip
$ doas rm rainloop-community-latest.zip</code></pre>
</div>
</div>
<div class="paragraph">
<p>Set the owner of the <code>data</code> subdirectory to “www”:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ doas chown -R www data</code></pre>
</div>
</div>
<div class="paragraph">
<p>Finally, copy <code>/etc/resolv.conf</code> to <code>/var/www</code> (otherwise, the domain names of
the mail servers may not get resolved to their corresponding IP addresses):</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ mkdir -p /var/www/etc
$ doas cp /etc/resolv.conf /var/www/etc/resolv.conf</code></pre>
</div>
</div>
<div class="paragraph">
<p>RainLoop can then be accessed via the URL <code>localhost:8080</code>, and it can be
configured in the admin panel which can be accessed via <code>localhost:8080?admin</code>.</p>
</div>
</div>
<div class="sect2">
<h3 id="_accessing_a_posteo_e_mail_account">Accessing a Posteo E-Mail Account</h3>
<div class="paragraph">
<p>Access to a <a href="https://posteo.de/en">Posteo</a> e-mail account can be set up by
creating the file
<code>/var/www/rainloop/data/_data_/_default_/domains/posteo.de.ini</code> with the
following contents:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>imap_host = "posteo.de"
imap_port = 993
imap_secure = "SSL"
imap_short_login = Off
sieve_use = Off
sieve_allow_raw = Off
sieve_host = ""
sieve_port = 4190
sieve_secure = "None"
smtp_host = "posteo.de"
smtp_port = 587
smtp_secure = "TLS"
smtp_short_login = Off
smtp_auth = On
smtp_php_mail = Off</code></pre>
</div>
</div>
<div class="paragraph">
<p>Alternatively, the account can be set up via the admin panel.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_references">References</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="https://www.rainloop.net/docs/">Documentation on the RainLoop website</a></p>
</li>
<li>
<p><a href="https://dev.to/nabbisen/rainloop-webmail-on-openbsd-installation-1hfg">Rainloop
Webmail on OpenBSD: Installation</a></p>
</li>
<li>
<p><a href="https://brank.me/rainloop-OpenBSD.html">Rainloop And OpenBSD</a></p>
</li>
</ul>
</div>
</div>
</div>https://thorstenzoeller.com/rainloop-on-openbsd2021-12-22T00:00:00+01:00Installation and Setup of the RainLoop Webmail Client on OpenBSD2021-12-22T00:00:00+01:002021-12-22T00:00:00+01:00<h1>Pretended Intentionality</h1>
<div class="paragraph">
<p>2021-10-21</p>
</div>
<div class="paragraph">
<p>I have recently become aware of an interesting – and somewhat concerning
– behavior of mine in relation to my phone: In those spare moments when I
am waiting for something, for instance, and the inevitable compulsion to check
my phone arises, I often do manage to resist that urge. But after that first
little victory over myself, something interesting happens: My mind, unable to
accept that it is denied the diversion it so much craves, is trying to come up
with suggestions for things that would be worth doing with my phone while
waiting:<sup class="footnote">[<a id="_footnoteref_1" class="footnote" href="#_footnotedef_1" title="View footnote.">1</a>]</sup></p>
</div>
<div class="paragraph">
<p><em>What was it again that makes Ridge A such a special place? Now would be a good
time to head over to Wikipedia and check it out – after all, there is not
much else you can do right now anyway!</em></p>
</div>
<div class="paragraph">
<p><em>Which city in the world has the longest subway system, actually? Well, why not
figure it out quickly?</em></p>
</div>
<div class="paragraph">
<p><em>Let’s check openbsd.org to find out whether the new OpenBSD release is already
available.</em></p>
</div>
<div class="paragraph">
<p>My mind <em>knows</em> that I am trying to control myself in order not to compusively
check my phone for no obvious reason whatsoever. And therefore, recognizing that
just letting things run will not suffice this time, it becomes creative: Knowing
that I am trying hard to act intentionally instead of compulsively and
reflexive, it <em>makes me believe that I do in fact act intentionally</em> by
rationalizing using my phone.</p>
</div>
<div class="paragraph">
<p>And thus my mind gets hold of me. It’s the monkey mind at work. But just like a
real monkey, it is not just jumping around like crazy; it is also very clever
and inventive.</p>
</div>
<div class="paragraph">
<p>What is so perfidious about it is that my mind is tricking me into the very
behavior I am trying to avoid by <em>convincing me that I am in fact avoiding it</em>.
Yet, this is all just another, albeit clever, strategy of my mind to run away
from the slightest sign of boredom and instead indulge in distractions; that
everlasting endeavor of the mind of not having to cope with the truly important
things in life – or, at the least, of not having to
<a href="https://zenhabits.net/alone/">sit alone in a quiet empty room</a>.</p>
</div>
<div class="paragraph">
<p>The good thing is: Once you become aware of something you want to change, it
becomes possible to actually change it.</p>
</div>
<div id="footnotes">
<hr>
<div class="footnote" id="_footnotedef_1">
<a href="#_footnoteref_1">1</a>. I am mostly using the terms <em>me</em> and <em>my mind</em> here to refer to the conscious and subconscious parts of myself, respectively. <a href="#_footnoteref_1">↩</a>
</div>
</div>https://thorstenzoeller.com/pretended-intentionality2021-10-21T00:00:00+02:00Pretended Intentionality2021-10-21T00:00:00+02:002021-10-21T00:00:00+02:00<h1>Derek Sivers: “Useful Not True”</h1>
<div class="paragraph">
<p>2025-07-06</p>
</div>
<div class="paragraph">
<p><a href="https://sive.rs/u">Useful Not True</a> is another gem by Derek Sivers. Whenever he
publishes a new book, I order it immediately, no matter what it is about. I know
from experience that everything he writes is packed with wisdom and insights I
don’t want to miss.</p>
</div>
<div class="paragraph">
<p>Let me start with the form of the book (I am referring to its physical version
here): It is short, as Derek’s books usually are. Most chapters are one or two
pages at most, very few are longer. The font size is pretty large, as well as
the distance between lines, and the lines are rather narrow, which makes the
reading a very pleasant experience. This is in contrast to many other books
which look as if they were laid out with the goal to pack as many words as
possible on each page. With Derek’s books, it is the exact opposite, with
respect to both form and content: They look as if the goal was to use as <em>few</em>
words as possible (and it was!). They are a perfect example for James Altuchers'
maxim “<del>To</del> increase the value of <del>your</del> words, make them
<del>as</del> few <del>as possible</del>.”</p>
</div>
<div class="paragraph">
<p>The content of the book perfectly matches its form: It is distilled to the bare
minimum of what is necessary to convey its point. Nothing is superfluous; every
word serves a purpose. One could certainly easily inflate the books' content to
1000 pages, but it would not be possible to reduce it to fewer pages without
losing content.</p>
</div>
<div class="paragraph">
<p><em>Useful Not True</em> is a book about perspective. Everything is relative; nothing
is absolute. There is no “right” or “wrong”, just “useful” or “useless”.
While reading it, so many associations popped up in my mind:</p>
</div>
<div class="paragraph">
<p>To Zen Buddhism with its belief that everything is made up by the mind alone and
its seeking for looking at things as how they are, without making up things
about them in our mind.</p>
</div>
<div class="paragraph">
<p>To phenomenology and its concept of <em>epoché</em> (and similar concepts in Stoicism
and other philosophies), a method for refraining from subjective judgements of
things or situations.</p>
</div>
<div class="paragraph">
<p>And even to physics and mathematics, in different aspects: In gauge theories,
there are intrinsic unphysical degrees of freedom. By fixing the gauge, those
unphysical degrees of freedom can be removed. And this can be done in different
ways, depending on what is most useful in the respective situation.</p>
</div>
<div class="paragraph">
<p>Also, physical theories are formulated as models which describe (physical)
reality. They never do it perfectly, though, because they cannot capture every
aspect of reality. And yet, good models are extremely useful (and a good model
is not necessarily one that describes reality most accurately; it may be
perfectly sufficient to describe a very particular aspect of reality with a
certain coarseness if it still captures the relevant physical mechanisms). As
George E. P. Box put it: “Essentially, all models are wrong, but some are
useful.”</p>
</div>
<div class="paragraph">
<p>The importance of the book lies in the fact that, while its statement seems
perfectly plausible, we very often tend to ignore it. Ask two people standing
opposite each other where the river is. The one says: “On the left.” The other
says: “On the right.” Who is right? It is remarkable how firm our belief is
that there is “right” and “wrong”, while it is so obvious that this is
usually not true, if we just looked at things as they are. While the
consequences may be trivial as in the example above, they can be arbitrarily
grave in other situations.</p>
</div>
<div class="paragraph">
<p>So, on the one hand, recognizing there are no absolutes can prevent us from
making mistakes in judging situations. But there is another aspect, which is
hinted at in the title of the book: We can turn this realization to our
advantage. You can face a wall, or you can turn around and look at a serene
beach. Both perspectives are `"right`" or valid. Why not choose the one you like
better? There lies power in not being confronted with the one “true”
perspective, but instead being able to choose ones preferred perspective, and
this power can be harnessed – provided we know that we can simply turn
around.</p>
</div>
<div class="paragraph">
<p>I will end with my usual recommendation of Derek’s books: Buy it, read it, and
digest its content as fully as possible! It is worth every word.</p>
</div>https://thorstenzoeller.com/sivers-useful-not-true2025-07-06T00:00:00+02:00Derek Sivers: “Useful Not True”2025-07-06T00:00:00+02:002025-07-06T00:00:00+02:00<div class="paragraph">
<p><a href="https://www.openbsd.org/69.html">OpenBSD 6.9</a> released – the 50th
OpenBSD release!</p>
</div>https://thorstenzoeller.com/stream/#_2021_05_01_12021-05-01T00:00:00+02:00[Stream] 2021-05-012021-05-01T00:00:00+02:002021-05-01T00:00:00+02:00<div class="paragraph">
<p>Switched from Vim to nvi. Vim started to feel too bloated.</p>
</div>https://thorstenzoeller.com/stream/#_2021_05_02_12021-05-02T00:00:00+02:00[Stream] 2021-05-022021-05-02T00:00:00+02:002021-05-02T00:00:00+02:00<div class="paragraph">
<p>Yes – <a href="https://dailystoic.com/this-is-the-mindset-for-life/">This is the
Mindset For Life</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2021_05_06_12021-05-06T00:00:00+02:00[Stream] 2021-05-062021-05-06T00:00:00+02:002021-05-06T00:00:00+02:00<div class="paragraph">
<p><a href="https://www.idler.co.uk/article/73979-how-to-write/">How to Write: why
jotting things into notebooks improves your writing</a> – I fully agree.</p>
</div>https://thorstenzoeller.com/stream/#_2021_05_14_12021-05-14T00:00:00+02:00[Stream] 2021-05-142021-05-14T00:00:00+02:002021-05-14T00:00:00+02:00<div class="paragraph">
<p>A good habit to form: Reading in <em>A Calendar of Wisdom</em> by Leo Tolstoy every
day.</p>
</div>https://thorstenzoeller.com/stream/#_2021_05_23_12021-05-23T00:00:00+02:00[Stream] 2021-05-232021-05-23T00:00:00+02:002021-05-23T00:00:00+02:00<div class="paragraph">
<p>New website is live! <a href="new.html">Here’s</a> why.</p>
</div>https://thorstenzoeller.com/stream/#_2021_06_20_12021-06-20T00:00:00+02:00[Stream] 2021-06-202021-06-20T00:00:00+02:002021-06-20T00:00:00+02:00<div class="paragraph">
<p>Slowly getting used to using the <a href="https://github.com/fcambus/spleen">Spleen</a>
font in the terminal.</p>
</div>https://thorstenzoeller.com/stream/#_2021_06_28_12021-06-28T00:00:00+02:00[Stream] 2021-06-282021-06-28T00:00:00+02:002021-06-28T00:00:00+02:00<div class="paragraph">
<p>Acting yourself into motivation is much more effective than thinking
yourself into motivation or waiting for motivation to occur.</p>
</div>https://thorstenzoeller.com/stream/#_2021_07_04_12021-07-04T00:00:00+02:00[Stream] 2021-07-042021-07-04T00:00:00+02:002021-07-04T00:00:00+02:00<div class="paragraph">
<p>Installed <a href="https://www.openbsd.org/69.html">OpenBSD 6.9</a>. A big thanks to the
developers for what so far looks like another great release!</p>
</div>https://thorstenzoeller.com/stream/#_2021_07_11_12021-07-11T00:00:00+02:00[Stream] 2021-07-112021-07-11T00:00:00+02:002021-07-11T00:00:00+02:00<div class="paragraph">
<p>What does it mean to be a leader?
<a href="https://dailystoic.com/do-you-make-others-better/">Leaders make people
better.</a> Applies to leading yourself as well.</p>
</div>https://thorstenzoeller.com/stream/#_2021_07_30_12021-07-30T00:00:00+02:00[Stream] 2021-07-302021-07-30T00:00:00+02:002021-07-30T00:00:00+02:00<div class="paragraph">
<p>Every completed Ashtanga practice is a little victory.</p>
</div>https://thorstenzoeller.com/stream/#_2021_08_03_12021-08-03T00:00:00+02:00[Stream] 2021-08-032021-08-03T00:00:00+02:002021-08-03T00:00:00+02:00<div class="paragraph">
<p>The renovated <a href="http://www.ryanleidner.com/twin-gable-house">Twin Gable House</a>,
designed by Ryan Leidner, is truly amazing with its light-flooded,
minimalist interior and beautiful inner courtyard.</p>
</div>https://thorstenzoeller.com/stream/#_2021_08_04_12021-08-04T00:00:00+02:00[Stream] 2021-08-04 (1/2)2021-08-04T00:00:00+02:002021-08-04T00:00:00+02:00<div class="paragraph">
<p>In recent years, I have become increasingly aware of the profound effects of
walking. Many ideas occur to me while walking, and to me, walking –
especially in solitude in nature – is a very calming and contemplative
activity.
<a href="https://www.openculture.com/2015/07/how-walking-fosters-creativity.html">How
Walking Fosters Creativity: Stanford Researchers Confirm What Philosophers
and Writers Have Always Known</a> is another interesting article on this
subject, focusing on the connection between walking and creativity.
In particular, it cites the wonderful book “A Philosophy of
Walking” by Frédéric Gros.</p>
</div>https://thorstenzoeller.com/stream/#_2021_08_04_22021-08-04T00:00:00+02:00[Stream] 2021-08-04 (2/2)2021-08-04T00:00:00+02:002021-08-04T00:00:00+02:00<div class="paragraph">
<p>Once again, I find myself fascinated by the miracles and history of the
<a href="https://en.wikipedia.org/wiki/Laoco%C3%B6n_and_His_Sons">Laocoon Group</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2021_08_06_12021-08-06T00:00:00+02:00[Stream] 2021-08-062021-08-06T00:00:00+02:002021-08-06T00:00:00+02:00<div class="paragraph">
<p>Two very convenient shell aliases for copying the primary X selection to the
system clipboard and vice versa:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>alias primary2clip='xsel -p | xsel -i -b'
alias clip2primary='xsel -b | xsel -i -p'</code></pre>
</div>
</div>
<div class="paragraph">
<p>Alternatively, using <em>xclip</em> instead of <em>xsel</em>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>alias primary2clip='xclip -o -selection primary | xclip -i -selection clipboard'
alias clip2primary='xclip -o -selection clipboard | xclip -i -selection primary'</code></pre>
</div>
</div>
<div class="paragraph">
<p>See <a href="https://shallowsky.com/blog/linux/x-selection.html">X is for the X
Selection: Copy and Paste on Linux (Shallow Thoughts)</a> for more information.</p>
</div>https://thorstenzoeller.com/stream/#_2021_08_08_12021-08-08T00:00:00+02:00[Stream] 2021-08-08 (1/2)2021-08-08T00:00:00+02:002021-08-08T00:00:00+02:00<div class="paragraph">
<p>Rediscovering the joy of cycling.</p>
</div>https://thorstenzoeller.com/stream/#_2021_08_08_22021-08-08T00:00:00+02:00[Stream] 2021-08-08 (2/2)2021-08-08T00:00:00+02:002021-08-08T00:00:00+02:00<div class="quoteblock">
<blockquote>
Life is not lost by dying; life is lost minute by minute, day by dragging
day, in all the thousand small uncaring ways.
</blockquote>
<div class="attribution">
— Stephen Vincent Benét
</div>
</div>https://thorstenzoeller.com/stream/#_2021_08_29_12021-08-29T00:00:00+02:00[Stream] 2021-08-292021-08-29T00:00:00+02:002021-08-29T00:00:00+02:00<div class="quoteblock">
<blockquote>
Man alone measures time. Man alone chimes the hour. And, because of this,
man alone suffers a paralyzing fear that no other creature endures. A fear
of time running out.
</blockquote>
<div class="attribution">
— Mitch Albom<br>
<cite>The Time Keeper</cite>
</div>
</div>
<div class="paragraph">
<p>(Related recent article by Chris Guillebeau:
<a href="https://chrisguillebeau.com/time-anxiety/">Time Anxiety Is the Most Pressing
Problem of Our Age</a>)</p>
</div>https://thorstenzoeller.com/stream/#_2021_09_06_12021-09-06T00:00:00+02:00[Stream] 2021-09-062021-09-06T00:00:00+02:002021-09-06T00:00:00+02:00<div class="paragraph">
<p><a href="https://seths.blog/2021/09/instead-2/">Instead</a> by Seth Godin. A few
additions:</p>
</div>
<div class="paragraph">
<p>Instead of overeating, stop when still feeling slightly hungry.</p>
</div>
<div class="paragraph">
<p>Instead of exclaiming “I knew it!”, remain silent.</p>
</div>
<div class="paragraph">
<p>Instead of rushing to the next to-do, sit still for a few moments.</p>
</div>https://thorstenzoeller.com/stream/#_2021_09_07_12021-09-07T00:00:00+02:00[Stream] 2021-09-07 (1/2)2021-09-07T00:00:00+02:002021-09-07T00:00:00+02:00<div class="paragraph">
<p>Can we <em>please</em> establish a universal code of conduct stating that no
smartphones are to be used at the dining table?</p>
</div>https://thorstenzoeller.com/stream/#_2021_09_07_22021-09-07T00:00:00+02:00[Stream] 2021-09-07 (2/2)2021-09-07T00:00:00+02:002021-09-07T00:00:00+02:00<div class="paragraph">
<p>Beautiful article: <a href="https://craigmod.com/ridgeline/111/">Long, Boring Walks</a>
by Craig Mod.</p>
</div>https://thorstenzoeller.com/stream/#_2021_09_08_12021-09-08T00:00:00+02:00[Stream] 2021-09-08 (1/2)2021-09-08T00:00:00+02:002021-09-08T00:00:00+02:00<div class="paragraph">
<p>Wise advice:
<a href="https://dailystoic.com/make-sure-you-write-down-everything-interesting-that-you-find/">Make
Sure You Write Down Everything Interesting That You Find</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2021_09_08_22021-09-08T00:00:00+02:00[Stream] 2021-09-08 (2/2)2021-09-08T00:00:00+02:002021-09-08T00:00:00+02:00<div class="quoteblock">
<blockquote>
My advice (for what it’s worth) for success and happiness: Compete with
yourself and root for everybody else.
</blockquote>
<div class="attribution">
— Candice Millard<br>
<cite><a href="https://twitter.com/candice_millard/status/1383508127442608141" class="bare">https://twitter.com/candice_millard/status/1383508127442608141</a></cite>
</div>
</div>https://thorstenzoeller.com/stream/#_2021_09_13_12021-09-13T00:00:00+02:00[Stream] 2021-09-132021-09-13T00:00:00+02:002021-09-13T00:00:00+02:00<div class="paragraph">
<p><a href="https://craigmod.com/roden/059/">Roden 059 – Stupid Life Tricks</a> by
Craig Mod contains a thoughtful piece on the ever-present distractions of
our phones and their consequences – a pressing and, in my opinion,
still underrated issue of our time. In particular, it cites an expressive
passage from the recent article
<a href="https://www.newyorker.com/culture/photo-booth/picturing-the-humanity-and-dread-of-the-infinite-scroll">Picturing
the Humanity and Dread of the Infinite Scroll</a> by Jia Tolentino, and refers
to an interesting Aziz Ansari interview,
<a href="https://www.gq.com/story/aziz-ansari-gq-style-cover-story">Aziz Ansari on
Quitting the Internet, Loneliness, and Season 3 of <em>Master of None</em></a>.
Finally, it mentions two great articles by Craig himself,
<a href="https://www.wired.com/story/six-weeks-100s-miles-hours-glorious-boredom-japan/">The
Glorious, Almost-Disconnected Boredom of My Walk in Japan</a> and
<a href="https://www.wired.com/2017/01/how-i-got-my-attention-back/">How I Got My
Attention Back</a> – both must-reads.</p>
</div>https://thorstenzoeller.com/stream/#_2021_09_23_12021-09-23T00:00:00+02:00[Stream] 2021-09-232021-09-23T00:00:00+02:002021-09-23T00:00:00+02:00<div class="paragraph">
<p>High school and university students have designed and built a
<a href="https://build-your-own-particle-detector.org/models/alice-lego-model/">LEGO
model</a> of the detector of the <a href="https://alice.cern/">ALICE</a> experiment at
<a href="https://home.cern/">CERN</a>, consisting of about 16,000 LEGO bricks –
highly impressive!</p>
</div>https://thorstenzoeller.com/stream/#_2021_10_03_12021-10-03T00:00:00+02:00[Stream] 2021-10-032021-10-03T00:00:00+02:002021-10-03T00:00:00+02:00<div class="paragraph">
<p>“…​which components of what aspects of the many things making up our lives
at any point are worth noting in some external fashion, and which can be
left undocumented?” – The question <a href="https://colin.io/">Colin Wright</a> is
asking in his newsletter article
<a href="https://www.getrevue.co/profile/colinwright/issues/documentation-819300">Documentation</a>,
and a question I am pondering as well.</p>
</div>https://thorstenzoeller.com/stream/#_2021_10_21_12021-10-21T00:00:00+02:00[Stream] 2021-10-212021-10-21T00:00:00+02:002021-10-21T00:00:00+02:00<div class="paragraph">
<p>I love beautiful hand-crafted web sites. Examples:
<a href="https://sive.rs/">sive.rs</a>, <a href="http://mlaine.sdfeu.org/">mlaine.sdfeu.org</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2021_11_13_12021-11-13T00:00:00+01:00[Stream] 2021-11-13 (1/2)2021-11-13T00:00:00+01:002021-11-13T00:00:00+01:00<div class="paragraph">
<p>Finished reading <a href="https://sive.rs/m">Your Music and People</a> by
<a href="https://sive.rs/">Derek Sivers</a> and loved it, though I am not even a musician
myself!</p>
</div>https://thorstenzoeller.com/stream/#_2021_11_13_22021-11-13T00:00:00+01:00[Stream] 2021-11-13 (2/2)2021-11-13T00:00:00+01:002021-11-13T00:00:00+01:00<div class="paragraph">
<p>Rediscovered two good posts by Zach Holman (and, well,
<a href="https://zachholman.com/">Zach Holman</a> himself):
<a href="https://zachholman.com/posts/keeping-a-journal/">Keeping a Journal</a> and
<a href="https://zachholman.com/posts/my-favorite-tweet">My Favorite Tweet</a>. Also,
<a href="https://zachholman.com/2010/11/text-snippets-boom/">Text Snippets. Boom.</a></p>
</div>https://thorstenzoeller.com/stream/#_2021_12_18_12021-12-18T00:00:00+01:00[Stream] 2021-12-182021-12-18T00:00:00+01:002021-12-18T00:00:00+01:00<div class="paragraph">
<p>I hate Ashtanga Yoga. And I love it.</p>
</div>https://thorstenzoeller.com/stream/#_2021_12_20_12021-12-20T00:00:00+01:00[Stream] 2021-12-202021-12-20T00:00:00+01:002021-12-20T00:00:00+01:00<div class="paragraph">
<p><a href="https://www.taschenhirn.de/">Taschenhirn.de</a>: Knowledge database containing
lots of interesting data in the form of lists organized into different
categories (German only).</p>
</div>https://thorstenzoeller.com/stream/#_2022_01_09_12022-01-09T00:00:00+01:00[Stream] 2022-01-092022-01-09T00:00:00+01:002022-01-09T00:00:00+01:00<div class="paragraph">
<p><a href="https://seths.blog/2022/01/harder-easier-and-more-convenient/">Harder, easier
and more convenient</a> by Seth Godin – the aspiration to ever more
convenience is often faulty.</p>
</div>https://thorstenzoeller.com/stream/#_2022_01_16_12022-01-16T00:00:00+01:00[Stream] 2022-01-16 (1/2)2022-01-16T00:00:00+01:002022-01-16T00:00:00+01:00<div class="paragraph">
<p>Just finished reading <a href="https://sive.rs/n">Hell Yeah or No</a> by Derek Sivers and
enjoyed it at least as much as <a href="https://sive.rs/m">Your Music and People</a>.
Great collection of articles, including some of my favorites by Derek, like
<a href="https://sive.rs/arv">Actions, not words, reveal our real values</a>,
<a href="https://sive.rs/subtract">Subtract</a>, <a href="https://sive.rs/dc">Disconnect</a>,
<a href="https://sive.rs/my-fault">Everything is my fault</a>, <a href="https://sive.rs/horses">My
favorite fable</a>, <a href="https://sive.rs/pa">Parenting : Who is it really for?</a>, and
<a href="https://sive.rs/slow">I’m a very slow thinker</a>, among others.</p>
</div>https://thorstenzoeller.com/stream/#_2022_01_16_22022-01-16T00:00:00+01:00[Stream] 2022-01-16 (2/2)2022-01-16T00:00:00+01:002022-01-16T00:00:00+01:00<div class="paragraph">
<p>A worthy prompt:
<a href="https://dailystoic.com/just-for-a-moment-lets-be-still/">Just For A Moment,
Let’s Be Still</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2022_01_24_12022-01-24T00:00:00+01:00[Stream] 2022-01-242022-01-24T00:00:00+01:002022-01-24T00:00:00+01:00<div class="paragraph">
<p>“Just in case” – One of the most common justifications for letting
clutter accrue.</p>
</div>https://thorstenzoeller.com/stream/#_2022_01_29_12022-01-29T00:00:00+01:00[Stream] 2022-01-292022-01-29T00:00:00+01:002022-01-29T00:00:00+01:00<div class="paragraph">
<p>New note: <a href="screenshots-on-openbsd.html">Taking Screenshots on OpenBSD</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2022_01_30_12022-01-30T00:00:00+01:00[Stream] 2022-01-302022-01-30T00:00:00+01:002022-01-30T00:00:00+01:00<div class="paragraph">
<p>I had long been looking for a keyboard alternative to clicking the middle
mouse button for pasting the primary selection. Recently I learned that
pressing <code>Shift + Insert</code> will do it – very convenient!</p>
</div>https://thorstenzoeller.com/stream/#_2022_02_05_12022-02-05T00:00:00+01:00[Stream] 2022-02-052022-02-05T00:00:00+01:002022-02-05T00:00:00+01:00<div class="paragraph">
<p>I didn’t know that carrot greens are edible and so delicious when
stir-fried!</p>
</div>https://thorstenzoeller.com/stream/#_2022_02_11_12022-02-11T00:00:00+01:00[Stream] 2022-02-112022-02-11T00:00:00+01:002022-02-11T00:00:00+01:00<div class="paragraph">
<p>New note: <a href="xterm-sel.html">Multiple-Click Selections in xterm</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2022_02_12_12022-02-12T00:00:00+01:00[Stream] 2022-02-122022-02-12T00:00:00+01:002022-02-12T00:00:00+01:00<div class="paragraph">
<p>Finished reading <a href="https://sive.rs/h">How to Live</a> by <a href="https://sive.rs/">Derek
Sivers</a>. A definite must-read: Extremely dense and to the point, packed with
wisdom – in a word: stunning!</p>
</div>https://thorstenzoeller.com/stream/#_2022_02_13_12022-02-13T00:00:00+01:00[Stream] 2022-02-132022-02-13T00:00:00+01:002022-02-13T00:00:00+01:00<div class="paragraph">
<p><a href="https://www.jeder-mensch.eu/informationen/?lang=en">Jeder Mensch</a> –
Initiative for six new fundamental rights for Europe which take the major
developments and problems of the recent decades into account.</p>
</div>https://thorstenzoeller.com/stream/#_2022_02_20_12022-02-20T00:00:00+01:00[Stream] 2022-02-202022-02-20T00:00:00+01:002022-02-20T00:00:00+01:00<div class="paragraph">
<p>Apparently, there was an inscription on the temple of the Oracle of Delphi
which read:</p>
</div>
<div class="verseblock">
<pre class="content">Know thyself
Nothing to excess</pre>
</div>
<div class="paragraph">
<p>Maxims to be taken to heart.</p>
</div>https://thorstenzoeller.com/stream/#_2022_02_23_12022-02-23T00:00:00+01:00[Stream] 2022-02-232022-02-23T00:00:00+01:002022-02-23T00:00:00+01:00<div class="paragraph">
<p><a href="https://xkcd.com/1179/">xkcd: ISO 8601</a> – Exactly.</p>
</div>https://thorstenzoeller.com/stream/#_2022_03_04_12022-03-04T00:00:00+01:00[Stream] 2022-03-04 (1/4)2022-03-04T00:00:00+01:002022-03-04T00:00:00+01:00<div class="paragraph">
<p>I fully agree with practically everything stated in
<a href="https://sive.rs/plaintext">Write plain text files</a> by Derek Sivers as I have
come to the same conclusions myself. Another one of Derek’s articles which
can hardly be cited too often.</p>
</div>https://thorstenzoeller.com/stream/#_2022_03_04_22022-03-04T00:00:00+01:00[Stream] 2022-03-04 (2/4)2022-03-04T00:00:00+01:002022-03-04T00:00:00+01:00<div class="paragraph">
<p>I have never really seen coding the way described in
<a href="https://craigmod.com/essays/healing_code/">The Healing Power of Code</a> by
Craig Mod, but I can definitely relate to much of what is being said in the
article.</p>
</div>https://thorstenzoeller.com/stream/#_2022_03_04_32022-03-04T00:00:00+01:00[Stream] 2022-03-04 (3/4)2022-03-04T00:00:00+01:002022-03-04T00:00:00+01:00<div class="paragraph">
<p>Base64-encode a string from the command line using
<a href="https://man.openbsd.org/uuencode">uuencode(1)</a>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ echo -n <string> | b64encode '' | sed '1d;$d' | tr -d '\n'</code></pre>
</div>
</div>https://thorstenzoeller.com/stream/#_2022_03_04_42022-03-04T00:00:00+01:00[Stream] 2022-03-04 (4/4)2022-03-04T00:00:00+01:002022-03-04T00:00:00+01:00<div class="verseblock">
<pre class="content">Where is the wisdom we have lost in knowledge?
Where is the knowledge we have lost in information?</pre>
<div class="attribution">
— T.S. Eliot<br>
<cite>The Rock</cite>
</div>
</div>https://thorstenzoeller.com/stream/#_2022_03_06_12022-03-06T00:00:00+01:00[Stream] 2022-03-06 (1/2)2022-03-06T00:00:00+01:002022-03-06T00:00:00+01:00<div class="paragraph">
<p>As the title of <a href="https://craigmod.com/ridgeline/139/">Ridgeline: 139 –
Walk for the Boredom of it All</a> by Craig Mod implies, the topic of this
newsletter article is boredom, and since it is Craig Mod, specifically the
boredom while walking. Actually, it mostly references a recent interview
with him, citing some passages from it and featuring his comments to them.
In particular, he further stresses the importance of boredom in his remarks.</p>
</div>
<div class="paragraph">
<p>Boredom is an issue I also find highly interesting, and I am convinced
– as Craig is – that it is really important to experience
boredom and to be able to stand it and cope with it, and that we currently
live in an age where we are trying very hard to do everything we can to not
be bored, mostly by resorting to various kinds of ever more intricate and
sophisticated (and not so sophisticated) distractions and diversions.</p>
</div>https://thorstenzoeller.com/stream/#_2022_03_06_22022-03-06T00:00:00+01:00[Stream] 2022-03-06 (2/2)2022-03-06T00:00:00+01:002022-03-06T00:00:00+01:00<div class="paragraph">
<p><a href="https://www.nytimes.com/2018/02/16/opinion/sunday/tyranny-convenience.html">The
Tyranny of Convenience</a> by <a href="http://www.timwu.org/">Tim Wu</a> – an
important article to which I was pointed by the article
<a href="https://seths.blog/2022/01/harder-easier-and-more-convenient/">Harder, easier
and more convenient</a> by Seth Godin. Both articles emphasize the importance
of doing things which are <em>not</em> convenient, in the face of the general trend
towards ever more convenience in practically all areas of life. The last
paragraph of Tim Wu’s article provides a good summary:</p>
</div>
<div class="quoteblock">
<blockquote>
So let’s reflect on the tyranny of convenience, try more often to resist its
stupefying power, and see what happens. We must never forget the joy of
doing something slow and something difficult, the satisfaction of not doing
what is easiest. The constellation of inconvenient choices may be all that
stands between us and a life of total, efficient conformity.
</blockquote>
</div>https://thorstenzoeller.com/stream/#_2022_03_26_12022-03-26T00:00:00+01:00[Stream] 2022-03-262022-03-26T00:00:00+01:002022-03-26T00:00:00+01:00<div class="paragraph">
<p>Just rediscovered this impressive depiction of depths:
<a href="https://xkcd.com/1040/">xkcd: Lakes and Oceans</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2022_03_27_12022-03-27T00:00:00+01:00[Stream] 2022-03-272022-03-27T00:00:00+01:002022-03-27T00:00:00+01:00<div class="paragraph">
<p><a href="https://www.nature.com/articles/d41586-022-00453-4">Turning off my phone
improved my science</a> – insightful article by PhD student Adam Weiss.
How much would our all lives be improved if we stopped using our phones all
the time?</p>
</div>https://thorstenzoeller.com/stream/#_2022_04_02_12022-04-02T00:00:00+02:00[Stream] 2022-04-022022-04-02T00:00:00+02:002022-04-02T00:00:00+02:00<div class="paragraph">
<p><a href="https://kk.org/thetechnium/103-bits-of-advice-i-wish-i-had-known/">103 Bits
of Advice I Wish I Had Known</a> by Kevin Kelly: Full of insights and invaluable
advice.</p>
</div>
<div class="paragraph">
<p>Note to myself: Reread at least once per month.</p>
</div>
<div class="paragraph">
<p><strong>Update 2025-09-28:</strong> No longer available online. The advice is now contained
in a book titled “Excellent Advice for Living”.</p>
</div>https://thorstenzoeller.com/stream/#_2022_05_08_12022-05-08T00:00:00+02:00[Stream] 2022-05-082022-05-08T00:00:00+02:002022-05-08T00:00:00+02:00<div class="paragraph">
<p><a href="https://neo.gsfc.nasa.gov/view.php?datasetId=SEDAC_POP">Population density
world map</a> by <a href="https://neo.gsfc.nasa.gov/">NASA Earth Obervations (NEO)</a>
(contains various other interesting maps of the world).</p>
</div>https://thorstenzoeller.com/stream/#_2022_08_17_12022-08-17T00:00:00+02:00[Stream] 2022-08-172022-08-17T00:00:00+02:002022-08-17T00:00:00+02:00<div class="paragraph">
<p>The <a href="https://sammlung.staedelmuseum.de/en">digital collection</a> of the
<a href="https://www.staedelmuseum.de/en">Städel Museum</a> contains more than 24,000
images of artworks in the public domain.</p>
</div>https://thorstenzoeller.com/stream/#_2022_08_29_12022-08-29T00:00:00+02:00[Stream] 2022-08-292022-08-29T00:00:00+02:002022-08-29T00:00:00+02:00<div class="paragraph">
<p>The
<a href="https://www.un.org/en/about-us/universal-declaration-of-human-rights">Universal
Declaration of Human Rights</a> is certainly one of the great achievements of
mankind (in spite of the – in many cases entirely insufficient –
degree to which human rights are respected throughout the world). Yet, with
rights also come responsibilities.
<a href="https://www.interactioncouncil.org/publications/universal-declaration-human-responsibilities">A
Universal Declaration of Human Responsibilities</a> is a proposal by the
<a href="https://www.interactioncouncil.org/">InterAction Council</a> for human
responsibilities that come along with the human rights.</p>
</div>https://thorstenzoeller.com/stream/#_2022_09_04_12022-09-04T00:00:00+02:00[Stream] 2022-09-042022-09-04T00:00:00+02:002022-09-04T00:00:00+02:00<div class="paragraph">
<p>The <a href="https://minimalism.com/manifesto">Minimalism Life Manifesto</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2022_11_03_12022-11-03T00:00:00+01:00[Stream] 2022-11-032022-11-03T00:00:00+01:002022-11-03T00:00:00+01:00<div class="paragraph">
<p>Since yesterday was Friday, the 13th, I was wondering how often the 13th day
of a month is a Friday. Instead of trying to come up with a proper
derivation, I approached the question by employing brute force (i.e. by
writing a small script on the computer which counts such occurrences).</p>
</div>
<div class="paragraph">
<p>The result: On average, there are approximately 1.72 occurrences of Friday,
the 13th, per year.</p>
</div>
<div class="paragraph">
<p>(Of course, if one were less lazy than me, one could also just
<a href="https://qr.ae/pv3YyL">do the math</a>, or if one were even more lazy than me,
one could just <a href="https://en.wikipedia.org/wiki/Friday_the_13th#Frequency">look
it up</a>.)</p>
</div>https://thorstenzoeller.com/stream/#_2023_01_14_12023-01-14T00:00:00+01:00[Stream] 2023-01-142023-01-14T00:00:00+01:002023-01-14T00:00:00+01:00<div class="paragraph">
<p>A great example of seeing things from a different point of view: The short
story “The House of Asterion” by Jorge Luis Borges.</p>
</div>https://thorstenzoeller.com/stream/#_2023_02_09_12023-02-09T00:00:00+01:00[Stream] 2023-02-092023-02-09T00:00:00+01:002023-02-09T00:00:00+01:00<div class="paragraph">
<p>New note: <a href="mail-reminder.html">A Simple E-Mail Reminder System Based on
cron and at</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2023_02_10_12023-02-10T00:00:00+01:00[Stream] 2023-02-102023-02-10T00:00:00+01:002023-02-10T00:00:00+01:00<div class="paragraph">
<p>New text: <a href="day.html">The Melancholy of the Day</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2023_02_11_12023-02-11T00:00:00+01:00[Stream] 2023-02-11 (1/2)2023-02-11T00:00:00+01:002023-02-11T00:00:00+01:00<div class="paragraph">
<p>“Gibs auf” (“Give it up!”): Fascinating (and, well, very Kafkaesque)
<em>very</em> short story by Franz Kafka.</p>
</div>https://thorstenzoeller.com/stream/#_2023_02_11_22023-02-11T00:00:00+01:00[Stream] 2023-02-11 (2/2)2023-02-11T00:00:00+01:002023-02-11T00:00:00+01:00<div class="paragraph">
<p>The importance of editing texts and refactoring code can hardly be
overestimated.</p>
</div>https://thorstenzoeller.com/stream/#_2023_02_12_12023-02-12T00:00:00+01:00[Stream] 2023-02-122023-02-12T00:00:00+01:002023-02-12T00:00:00+01:00<div class="paragraph">
<p>We have lost the ability to just be. We know how to do, but not how to be.</p>
</div>https://thorstenzoeller.com/stream/#_2023_03_12_12023-03-12T00:00:00+01:00[Stream] 2023-03-122023-03-12T00:00:00+01:002023-03-12T00:00:00+01:00<div class="paragraph">
<p>New article: <a href="anki-xephyr.html">Running Anki inside Xephyr</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2023_02_26_12023-02-26T00:00:00+01:00[Stream] 2023-02-26 (1/2)2023-02-26T00:00:00+01:002023-02-26T00:00:00+01:00<div class="paragraph">
<p>There are few things which are as humbling as practicing Ashtanga Yoga
regularly.</p>
</div>https://thorstenzoeller.com/stream/#_2023_02_26_22023-02-26T00:00:00+01:00[Stream] 2023-02-26 (2/2)2023-02-26T00:00:00+01:002023-02-26T00:00:00+01:00<div class="paragraph">
<p>New article: <a href="sivers-how-to-live.html">Derek Sivers: “How to Live”</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2023_03_05_12023-03-05T00:00:00+01:00[Stream] 2023-03-052023-03-05T00:00:00+01:002023-03-05T00:00:00+01:00<div class="paragraph">
<p>Simply beautiful: <a href="https://www.youtube.com/watch?v=nK3q01mta2o">BEING</a> by
Michael Torke. Found it via
<a href="https://c.im/@jwsgeek@glod.org/109996126447093296">c.im/@jwsgeek@glod.org/109996126447093296</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2023_03_10_12023-03-10T00:00:00+01:00[Stream] 2023-03-102023-03-10T00:00:00+01:002023-03-10T00:00:00+01:00<div class="paragraph">
<p>Ashtanga Yoga is not about progress. It’s about perseverance.</p>
</div>https://thorstenzoeller.com/stream/#_2023_03_11_12023-03-11T00:00:00+01:00[Stream] 2023-03-11 (1/2)2023-03-11T00:00:00+01:002023-03-11T00:00:00+01:00<div class="paragraph">
<p>3 good things:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Meditated for 20 minutes – first time in a rather long time.</p>
</li>
<li>
<p>Played two rounds of the fantastic game “Ganz schön clever” with my son.</p>
</li>
<li>
<p>Got some fresh air in the afternoon.</p>
</li>
</ol>
</div>https://thorstenzoeller.com/stream/#_2023_03_11_22023-03-11T00:00:00+01:00[Stream] 2023-03-11 (2/2)2023-03-11T00:00:00+01:002023-03-11T00:00:00+01:00<div class="paragraph">
<p>I’ll admit it: I usually have way too many browser tabs open. Every now and
then, I lose my open tabs upon restarting the browser (because it could not
fully recover from a previous crash or for whatever other reason). And each
and every time, I somehow feel relieved when that happens. I don’t miss any
of the tabs I previously considered too valuable to close; usually, I cannot
even remember most of them.</p>
</div>
<div class="paragraph">
<p>Which reminds me that I should really adjust my browser preferences such
that tabs will <em>not</em> be reopened upon starting…​</p>
</div>https://thorstenzoeller.com/stream/#_2023_03_15_12023-03-15T00:00:00+01:00[Stream] 2023-03-15 (1/2)2023-03-15T00:00:00+01:002023-03-15T00:00:00+01:00<div class="paragraph">
<p>Good article by Bradley Taunt: <a href="https://bt.ht/webfonts/">Stop Using Custom Web
Fonts</a> (also good: <a href="https://manuelmoreale.com/a-rant-on-web-font-licenses">A
rant on web font licenses</a> by Manu Moreale, referenced in Bradley’s
article).</p>
</div>https://thorstenzoeller.com/stream/#_2023_03_15_22023-03-15T00:00:00+01:00[Stream] 2023-03-15 (2/2)2023-03-15T00:00:00+01:002023-03-15T00:00:00+01:00<div class="paragraph">
<p><a href="https://www.quantamagazine.org/the-unpredictable-abilities-emerging-from-large-ai-models-20230316">The
Unpredictable Abilities Emerging From Large AI Models</a>: At the same time
startling, intriguing, and uncanny.</p>
</div>https://thorstenzoeller.com/stream/#_2023_03_16_12023-03-16T00:00:00+01:00[Stream] 2023-03-162023-03-16T00:00:00+01:002023-03-16T00:00:00+01:00<div class="paragraph">
<p>A set of guidelines for designing command-line programs based on Unix
principles: <a href="https://clig.dev/">Command Line Interface Guidelines</a></p>
</div>https://thorstenzoeller.com/stream/#_2023_03_26_12023-03-26T00:00:00+01:00[Stream] 2023-03-262023-03-26T00:00:00+01:002023-03-26T00:00:00+01:00<div class="paragraph">
<p><a href="https://seths.blog/2023/03/avoid-unnecessary-amplifiers/">Avoid unnecessary
amplifiers</a> by Seth Godin.</p>
</div>https://thorstenzoeller.com/stream/#_2023_03_27_12023-03-27T00:00:00+02:00[Stream] 2023-03-272023-03-27T00:00:00+02:002023-03-27T00:00:00+02:00<div class="paragraph">
<p><a href="https://samestuffdifferentday.net/importance-of-journaling/">Thoughts on
journaling: Answering common questions</a> by Michael Eaton.</p>
</div>https://thorstenzoeller.com/stream/#_2023_03_28_12023-03-28T00:00:00+02:00[Stream] 2023-03-282023-03-28T00:00:00+02:002023-03-28T00:00:00+02:00<div class="paragraph">
<p><a href="https://neal.fun/space-elevator/">Space Elevator</a>: Really fun, not just for
kids.</p>
</div>https://thorstenzoeller.com/stream/#_2023_04_27_12023-04-27T00:00:00+02:00[Stream] 2023-04-27 (1/2)2023-04-27T00:00:00+02:002023-04-27T00:00:00+02:00<div class="paragraph">
<p><a href="https://www.nature.com/immersive/d41586-022-04372-2/">The best science images
of 2022</a>: Stunning!</p>
</div>https://thorstenzoeller.com/stream/#_2023_04_27_22023-04-27T00:00:00+02:00[Stream] 2023-04-27 (2/2)2023-04-27T00:00:00+02:002023-04-27T00:00:00+02:00<div class="paragraph">
<p>Nice article about Turing machines:
<a href="https://www.quantamagazine.org/alan-turings-most-important-machine-was-never-built-20230503/">The
Most Important Machine That Was Never Built</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2023_05_03_12023-05-03T00:00:00+02:00[Stream] 2023-05-032023-05-03T00:00:00+02:002023-05-03T00:00:00+02:00<div class="paragraph">
<p>Simple way to rename a hash key in Ruby:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-ruby" data-lang="ruby">hash[new_key] = hash.delete(old_key)</code></pre>
</div>
</div>
<div class="paragraph">
<p>This employs the fact that the <code>delete</code> method returns the value associated
with the key to be deleted. Therefore, it is equivalent to:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-ruby" data-lang="ruby">hash[new_key] = hash[old_key]
hash.delete(old_key)</code></pre>
</div>
</div>
<div class="paragraph">
<p>Note: If <code>old_key</code> is not guaranteed to exist, the case that it does not
exist needs to be handled.</p>
</div>https://thorstenzoeller.com/stream/#_2023_06_16_12023-06-16T00:00:00+02:00[Stream] 2023-06-162023-06-16T00:00:00+02:002023-06-16T00:00:00+02:00<div class="paragraph">
<p>I first became aware of Johann Sebastian Bach’s genius when I read <em>Gödel,
Escher, Bach: An Eternal Golden Braid</em> by Douglas Hofstadter, one of my
favorite non-fiction books of all time, more than two decades ago. The
question posed by Tyler Cowen,
<a href="https://marginalrevolution.com/marginalrevolution/2023/09/is-bach-the-greatest-achiever-of-all-time.html">Is
Bach the greatest achiever of all time?</a>, therefore seems fully reasonable to
me.</p>
</div>https://thorstenzoeller.com/stream/#_2023_09_09_12023-09-09T00:00:00+02:00[Stream] 2023-09-092023-09-09T00:00:00+02:002023-09-09T00:00:00+02:00<div class="paragraph">
<p><a href="https://www.npr.org/sections/health-shots/2023/11/14/1212908276/can-little-actions-bring-big-joy-researchers-say-micro-acts-can-boost-well-being">Can
little actions bring big joy? Researchers find 'micro-acts' can boost
well-being</a> (via
<a href="https://mastodon.social/@Robinbonhomme/111449193672309445">https://mastodon.social/@Robinbonhomme/111449193672309445</a>)</p>
</div>https://thorstenzoeller.com/stream/#_2023_11_21_12023-11-21T00:00:00+01:00[Stream] 2023-11-212023-11-21T00:00:00+01:002023-11-21T00:00:00+01:00<div class="paragraph">
<p><a href="https://plaintextjournal.com/">The Plaintext Journal</a>: An open project
created by <a href="https://geffreyvanderbos.com/">Geffrey van der Bos</a> about the
importance of plain text for digital communication. Articles can be
contributed and edited by anyone by making pull requests on a
<a href="https://github.com/Geffreyvanderbos/geffre">GitHub Repository</a>. As the
website states: <em>We believe in the timeless essence of plain text.</em> Yes, we
do!</p>
</div>https://thorstenzoeller.com/stream/#_2023_11_26_12023-11-26T00:00:00+01:00[Stream] 2023-11-262023-11-26T00:00:00+01:002023-11-26T00:00:00+01:00<div class="paragraph">
<p>So true: <a href="https://www.theminimalists.com/insecurity/">Store-Brand Insecurity</a>
by Joshua Fields Millburn of <a href="https://www.theminimalists.com/">The
Minimalists</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_06_07_12024-06-07T00:00:00+02:00[Stream] 2024-06-072024-06-07T00:00:00+02:002024-06-07T00:00:00+02:00<div class="paragraph">
<p><a href="https://www.theguardian.com/lifeandstyle/2019/nov/29/dopamine-fasting-tech-fad-might-work">Dopamine
fasting is a tech fad that sounds silly – but might just work</a> by
<a href="https://www.oliverburkeman.com/">Oliver Burkeman</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_06_23_12024-06-23T00:00:00+02:00[Stream] 2024-06-232024-06-23T00:00:00+02:002024-06-23T00:00:00+02:00<div class="paragraph">
<p>Nice article about the wonderful <a href="https://math.ucr.edu/home/baez/">John Baez</a>:
<a href="https://alum.mit.edu/slice/mathematician-aims-keep-it-simple">Mathematician
Aims to Keep It Simple</a></p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112740830368723120">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_07_06_12024-07-06T00:00:00+02:00[Stream] 2024-07-062024-07-06T00:00:00+02:002024-07-06T00:00:00+02:00<div class="paragraph">
<p>Read (and watch) <em>The Walking Man</em> by Jiro Taniguchi. Why?
<a href="https://craigmod.com/">Craig Mod</a> explains it much better than I could in
<a href="https://craigmod.com/ridgeline/158/">Ridgeline Transmission 158</a> (which is
worth reading in its own right). Just like Craig, it took me a year of two
to actually buy and read it (since – just like Craig – I am not
a big comics reader), but it was on my list ever since I read Craig’s
review. It may not be for everyone, but if you can relate to the theme, it
is definitely worth it.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112744197228377688">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_07_07_12024-07-07T00:00:00+02:00[Stream] 2024-07-07 (1/4)2024-07-07T00:00:00+02:002024-07-07T00:00:00+02:00<div class="paragraph">
<p>And for those interested in a more philosophical elaboration of the subject
of walking, <em>A Philosophy of Walking</em> by Frédéric Gros might be for you (as
well as basically everything <a href="https://craigmod.com/">Craig Mod</a> writes, of
course).</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112744245928443818">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_07_07_22024-07-07T00:00:00+02:00[Stream] 2024-07-07 (2/4)2024-07-07T00:00:00+02:002024-07-07T00:00:00+02:00<div class="paragraph">
<p><a href="https://unvarnishedgeek.github.io/2020/11/25/plain-text-one.html">The
Elegance of Plain-Text Writing</a></p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112744466345050045">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_07_07_32024-07-07T00:00:00+02:00[Stream] 2024-07-07 (3/4)2024-07-07T00:00:00+02:002024-07-07T00:00:00+02:00<div class="paragraph">
<p>It’s a pity that most undergraduate physics students today are still not
properly being taught about the geometrical nature of tensors. While tensors
are at the foundation of much of the mathematics of physics today, they are
still not usually being introduced and taught as the geometrical objects
they are. Sure, when working in a space which is endowed with sufficient
structure, many objects can be transformed to either vectors or scalars, but
that completely conceals their true geometrical nature.</p>
</div>
<div class="paragraph">
<p>It is really remarkable (in a sad way) that the focus of teaching today is
so much on what is likely considered to be some kind of pragmatism or
practicality. This may make it easier to quickly get enabled to calculate
stuff, but this ease comes at the expense of developing a real
understanding. I think this is a very shortsighted approach.</p>
</div>
<div class="paragraph">
<p>Furthermore, and just as important in my opinion, students are deprived of
experiencing the full beauty of these objects in favor of providing them
with a mere tool whose sole purpose it is to be able to somehow obtain
correct results (not that this is not important, but it is only one aspect).</p>
</div>
<div class="paragraph">
<p>So what to do about this? For beginning undergraduate students, I recommend
reading <em>Geometrical Vectors</em> by Gabriel Weinreich (which basically contains
no formulae at all and instead completely focuses on conveying a grasp of
the objects themselves). When I first read <em>Geometrical Vectors</em> sometime
during my undergraduate studies, it did not speak to me at all (I guess I
was already too much indoctrinated by the traditional, orthodox way of
teaching vectors and tensors). The second time I read it, however, was a
profound experience, almost like an epiphany.</p>
</div>
<div class="paragraph">
<p>After having developed a basic understanding of these matters, <em>Gauge
fields, knots and gravity</em> by John Baez and Javier P. Muniain is a great
resource (it contains much more and advanced material though).
<a href="https://math.ucr.edu/home/baez/">John Baez</a> is a master of conveying physical
and mathematical ideas, and I would recommend basically everything he
writes.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112745177106216414">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_07_07_42024-07-07T00:00:00+02:00[Stream] 2024-07-07 (4/4)2024-07-07T00:00:00+02:002024-07-07T00:00:00+02:00<div class="verseblock">
<pre class="content">Human beings used to witness
25,000 sunrises during their lifetime.
Have you seen 25 in the last year?
Or were you too busy?</pre>
<div class="attribution">
— The Minimalists<br>
<cite><a href="https://www.theminimalists.com/unbusy/">Unbusy</a></cite>
</div>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112773291187369088">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_07_12_12024-07-12T00:00:00+02:00[Stream] 2024-07-122024-07-12T00:00:00+02:002024-07-12T00:00:00+02:00<div class="paragraph">
<p><a href="https://medium.com/the-art-of-software-development/why-functional-programming-matters-63e92ac959ca">Why
Functional Programming Matters</a> by Minh Quang Tran.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112786034522255176">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_07_14_12024-07-14T00:00:00+02:00[Stream] 2024-07-14 (1/2)2024-07-14T00:00:00+02:002024-07-14T00:00:00+02:00<div class="paragraph">
<p>Finished reading <em>Der Zen-Affe und die Lotusblume</em> (<em>The Zen Monkey and the
Lotus Flower</em>). Although the many beautiful Buddhist stories and parables
appear a little corny and naive at times, they convey timeless insights and
wisdom and are pleasant to read. I could have done without the explanations
after each story, though.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112786628060203131">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_07_14_22024-07-14T00:00:00+02:00[Stream] 2024-07-14 (2/2)2024-07-14T00:00:00+02:002024-07-14T00:00:00+02:00<div class="quoteblock">
<blockquote>
In the case of climate, we are not the dinosaurs. We are the meteor. We are
not only in danger. We are the danger. But we are also the solution.
</blockquote>
<div class="attribution">
— António Guterres, UN Secretary-General
</div>
</div>
<div class="paragraph">
<p>Source: Special address on climate action, <em>A Moment of Truth</em>, to the
American Museum of Natural History in New York on 2024-06-04
(<a href="https://press.un.org/en/2024/sgsm22255.doc.htm">https://press.un.org/en/2024/sgsm22255.doc.htm</a>).</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112819232371377882">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_07_20_12024-07-20T00:00:00+02:00[Stream] 2024-07-202024-07-20T00:00:00+02:002024-07-20T00:00:00+02:00<div class="paragraph">
<p>Best statement about patriotism I have ever heard:</p>
</div>
<div class="quoteblock">
<blockquote>
No, no. I don’t love states. I love my wife; that’s it.
</blockquote>
<div class="attribution">
— Gustav Heinemann, former President of Germany
</div>
</div>
<div class="paragraph">
<p>(German original: “Ach was, ich liebe keine Staaten, ich liebe meine Frau;
fertig!”)</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112837109104329310">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_07_23_12024-07-23T00:00:00+02:00[Stream] 2024-07-232024-07-23T00:00:00+02:002024-07-23T00:00:00+02:00<div class="paragraph">
<p>Note to self: Instead of impulsively checking the phone in idle moments and
mindlessly browsing the web (which includes mindlessly browsing Mastodon),
do a few rounds of mindful breathing instead.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112926080188215306">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_08_12024-08-08T00:00:00+02:00[Stream] 2024-08-08 (1/2)2024-08-08T00:00:00+02:002024-08-08T00:00:00+02:00<div class="paragraph">
<p>An ability of utmost importance – and becoming ever more important: To
be able to focus, to not easily get distracted, to withstand the constant
fight for one’s attention.</p>
</div>
<div class="paragraph">
<p>A true superpower.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112926666783165196">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_08_22024-08-08T00:00:00+02:00[Stream] 2024-08-08 (2/2)2024-08-08T00:00:00+02:002024-08-08T00:00:00+02:00<div class="paragraph">
<p>First Ashtanga Yoga practice in a while this morning. Was a tough one (even
more so than usual). Right knee hurt a lot, as was to be expected. Sweated
like crazy in the tropical heat of Nha Trang, Vietnam (in spite of the early
morning hours).</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112932411655457973">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_09_12024-08-09T00:00:00+02:00[Stream] 2024-08-092024-08-09T00:00:00+02:002024-08-09T00:00:00+02:00<div class="paragraph">
<p>Went to see the current exhibition
<a href="https://www.gasometer.de/en/exhibitions/planet-ozean">Planet Ocean</a> in the
<a href="https://www.gasometer.de/en">Gasometer Oberhausen</a> when I visited my hometown
a couple of weeks ago. Another great exhibition in this really cool
location; thinking about going a second time later this year.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112952936997604369">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_13_12024-08-13T00:00:00+02:00[Stream] 2024-08-13 (1/4)2024-08-13T00:00:00+02:002024-08-13T00:00:00+02:00<div class="paragraph">
<p>Beautiful restaurant with many vegan options in Nha Trang, Vietnam, not far
from the beach: <a href="https://www.oinhatrang.com/english">Ơi Nha Trang</a></p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112955104125394373">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_13_22024-08-13T00:00:00+02:00[Stream] 2024-08-13 (2/4)2024-08-13T00:00:00+02:002024-08-13T00:00:00+02:00<div class="quoteblock">
<blockquote>
You never know what worse luck your bad luck has saved you from.
</blockquote>
<div class="attribution">
— Cormac McCarthy
</div>
</div>
<div class="paragraph">
<p>A very stoic and true quote.</p>
</div>
<div class="paragraph">
<p>Also see: <a href="https://sive.rs/horses">My favorite fable</a> by
<a href="https://sivers.rs">Derek Sivers</a>.</p>
</div>
<div class="paragraph">
<p>Read on <a href="https://exquisite.social/@thorstenzoeller/112955259444931346">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_13_32024-08-13T00:00:00+02:00[Stream] 2024-08-13 (3/4)2024-08-13T00:00:00+02:002024-08-13T00:00:00+02:00<div class="paragraph">
<p>A little vegan gem in Đà Lạt, Vietnam: “Quán Chay Hằng Thiện”.
The vegan lẩu (hot pot) is excellent.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112955142600434853">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_13_42024-08-13T00:00:00+02:00[Stream] 2024-08-13 (4/4)2024-08-13T00:00:00+02:002024-08-13T00:00:00+02:00<div class="paragraph">
<p>Richard Rogler, one of the great German political satirists
(“Kabarettist”), died at age 74.</p>
</div>
<div class="paragraph">
<p>May you rest in peace.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112959405527896980">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_14_12024-08-14T00:00:00+02:00[Stream] 2024-08-142024-08-14T00:00:00+02:002024-08-14T00:00:00+02:00<div class="paragraph">
<p>Eating fresh mangosteens – what a joy!</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112966298154262445">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_15_12024-08-15T00:00:00+02:00[Stream] 2024-08-152024-08-15T00:00:00+02:002024-08-15T00:00:00+02:00<div class="paragraph">
<p>Note to self: Spend more time squatting.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112971101696113912">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_16_12024-08-16T00:00:00+02:00[Stream] 2024-08-162024-08-16T00:00:00+02:002024-08-16T00:00:00+02:00<div class="paragraph">
<p>Just had my first sugar apple (or sweetsop?) in years – so delicious!</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112987454777447110">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_19_12024-08-19T00:00:00+02:00[Stream] 2024-08-192024-08-19T00:00:00+02:002024-08-19T00:00:00+02:00<div class="paragraph">
<p>Perspectives are not right or wrong. They are useful or not useful.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/112999266170125927">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_21_12024-08-21T00:00:00+02:00[Stream] 2024-08-212024-08-21T00:00:00+02:002024-08-21T00:00:00+02:00<div class="paragraph">
<p>Words uttered far too rarely: “I don’t know.”</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113032625560747505">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_27_12024-08-27T00:00:00+02:00[Stream] 2024-08-27 (1/3)2024-08-27T00:00:00+02:002024-08-27T00:00:00+02:00<div class="paragraph">
<p>The best booster for creativity: Being in motion.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113032661721698806">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_27_22024-08-27T00:00:00+02:00[Stream] 2024-08-27 (2/3)2024-08-27T00:00:00+02:002024-08-27T00:00:00+02:00<div class="paragraph">
<p>Always take the stairs.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113033406794793849">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_27_32024-08-27T00:00:00+02:00[Stream] 2024-08-27 (3/3)2024-08-27T00:00:00+02:002024-08-27T00:00:00+02:00<div class="paragraph">
<p>Repeating things over and over again creates strong habits with time.</p>
</div>
<div class="paragraph">
<p>We are aware of this and make use of it when we deliberately try to form
new, beneficial habits.</p>
</div>
<div class="paragraph">
<p>But it is just as true for all the things we repeat unconsciously all the
time. It is worth trying to become aware of these as well and asking
ourselves if they create habits which serve us or habits which hinder
– or even harm – us.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113040603684307782">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_28_12024-08-28T00:00:00+02:00[Stream] 2024-08-28 (1/2)2024-08-28T00:00:00+02:002024-08-28T00:00:00+02:00<div class="paragraph">
<p>The wonderful and timeless text <a href="https://justinjackson.ca/words.html">Words</a>
by <a href="https://justinjackson.ca/">Justin Jackson</a> actually quite perfectly
captures the essence of what the Gemini protocol was made for.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113040713329181637">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_28_22024-08-28T00:00:00+02:00[Stream] 2024-08-28 (2/2)2024-08-28T00:00:00+02:002024-08-28T00:00:00+02:00<div class="paragraph">
<p>Two really great (and completely unrelated) documentaries I watched a while
back on a flight:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://en.wikipedia.org/wiki/The_Alpinist">The Alpinist</a> about climber
Marc-André Leclerc.</p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/The_Way_I_See_It_(film)">The Way I See It</a>
about Pete Souza, former Chief Official White House Photographer.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Both are highly recommended!</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113051011067781516">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_08_30_12024-08-30T00:00:00+02:00[Stream] 2024-08-302024-08-30T00:00:00+02:002024-08-30T00:00:00+02:00<div class="paragraph">
<p>I have created a Gemini capsule out of curiosity:
<a href="gemini://thorstenzoeller.com">thorstenzoeller.com</a>.</p>
</div>
<div class="paragraph">
<p>It is hosted on <a href="https://openbsd.amsterdam/">OpenBSD Amsterdam</a> (just like
this website) and served by <a href="https://gmid.omarpolo.com/gmid.8.html">gmid(8)</a>
by <a href="https://www.omarpolo.com/">Omar Polo</a>. Setting it up was really simple!</p>
</div>
<div class="paragraph">
<p>Thanks to OpenBSD Amsterdam for hosting my website as well as my Gemini
capsule, and thanks to Omar for having written the gmid server!</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113063232664092219">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_01_12024-09-01T00:00:00+02:00[Stream] 2024-09-01 (1/2)2024-09-01T00:00:00+02:002024-09-01T00:00:00+02:00<div class="paragraph">
<p>Just started reading <a href="https://mwl.io/nonfiction/tools#ed">Ed Mastery</a> by
<a href="https://mwl.io/">Michael W Lucas</a>, and it’s great fun (and very instructive
as well).</p>
</div>
<div class="paragraph">
<p>I’m starting to feel a little whimpy as a vi user, though…​</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113063375087210080">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_01_22024-09-01T00:00:00+02:00[Stream] 2024-09-01 (2/2)2024-09-01T00:00:00+02:002024-09-01T00:00:00+02:00<div class="paragraph">
<p>Installed <a href="https://aerc-mail.org/">aerc</a> today and quite like it at first (and
second) glance.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113074968165376764">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_03_12024-09-03T00:00:00+02:00[Stream] 2024-09-032024-09-03T00:00:00+02:002024-09-03T00:00:00+02:00<div class="paragraph">
<p>Today’s featured article on the German Wikipedia is about
<a href="https://de.wikipedia.org/wiki/Caspar_David_Friedrich">Caspar David
Friedrich</a>, one of my favorite painters. Worth reading (I guess the English
version as well)!</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113084224520458460">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_05_12024-09-05T00:00:00+02:00[Stream] 2024-09-05 (1/3)2024-09-05T00:00:00+02:002024-09-05T00:00:00+02:00<div class="paragraph">
<p>Above 30 °C in Frankfurt right now. Might well be the hottest day here in
the remaining year (although in previous years, we had days with
temperatures around 30 °C as late as mid-October).</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113085200335729013">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_05_22024-09-05T00:00:00+02:00[Stream] 2024-09-05 (2/3)2024-09-05T00:00:00+02:002024-09-05T00:00:00+02:00<div class="paragraph">
<p>Practiced meditation for 20 minutes yesterday and today morning. First time
in a while…​</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113085536734693313">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_05_32024-09-05T00:00:00+02:00[Stream] 2024-09-05 (3/3)2024-09-05T00:00:00+02:002024-09-05T00:00:00+02:00<div class="paragraph">
<p>I love the pictures of the Scottish Highlands by
<a href="https://mastodonapp.uk/@GetCarter">Steve Carter</a>. They not only capture the
beautiful rough Highlands landscape, sometimes displaying scattered tr aces
of mankind, sometimes not, but – and this is why they are so appealing
to me &ndahs; they often create a really dense atmosphere which I find
captivating.</p>
</div>
<div class="paragraph">
<p>Highly recommended!</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113089575133379700">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_06_12024-09-06T00:00:00+02:00[Stream] 2024-09-06 (1/3)2024-09-06T00:00:00+02:002024-09-06T00:00:00+02:00<div class="paragraph">
<p>So why does the behavior of <a href="https://man.openbsd.org/dc">dc(1)</a> and
<a href="https://man.openbsd.org/bc">bc(1)</a> differ with respect to the <code>-e</code>
command-line parameter?</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ bc -e <expr></code></pre>
</div>
</div>
<div class="paragraph">
<p>evaluates <code><expr></code> and then enters the REPL, while</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>$ dc -e <expr></code></pre>
</div>
</div>
<div class="paragraph">
<p>evaluates <code><expr></code> and then exits.</p>
</div>
<div class="paragraph">
<p>The advantage of the <a href="https://man.openbsd.org/bc">bc(1)</a> behavior is that one
can easily define an alias which e.g. sets the scale before doing
calculations:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>alias bc="bc -e 'scale = 2'"</code></pre>
</div>
</div>
<div class="paragraph">
<p>while defining an alias with the equivalent expression for
<a href="https://man.openbsd.org/dc">dc(1)</a>,</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>alias dc="dc -e '2 k'"</code></pre>
</div>
</div>
<div class="paragraph">
<p>does not make a lot of sense.</p>
</div>
<div class="paragraph">
<p>Am I missing something?</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113091245818176226">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_06_22024-09-06T00:00:00+02:00[Stream] 2024-09-06 (2/3)2024-09-06T00:00:00+02:002024-09-06T00:00:00+02:00<div class="paragraph">
<p>Again practiced meditation for 20 minutes this morning.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113091572776498187">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_06_32024-09-06T00:00:00+02:00[Stream] 2024-09-06 (3/3)2024-09-06T00:00:00+02:002024-09-06T00:00:00+02:00<div class="paragraph">
<p>Foggy morning in Frankfurt. Probably going to be another warm day before the
temperature drops somewhat.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113094694273794649">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_07_12024-09-07T00:00:00+02:00[Stream] 2024-09-07 (1/5)2024-09-07T00:00:00+02:002024-09-07T00:00:00+02:00<div class="paragraph">
<p>Practiced meditation for 30 minutes this morning.</p>
</div>
<div class="paragraph">
<p>And yeah, I am fully aware of the irony that I am already back to social
media…​</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113094986378781510">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_07_22024-09-07T00:00:00+02:00[Stream] 2024-09-07 (2/5)2024-09-07T00:00:00+02:002024-09-07T00:00:00+02:00<div class="paragraph">
<p>Creating a Gemini capsule (in particular when approached with the mindset of
creating a web page) is another proof for the fact that constraints often
foster creativity and focus on what is really important.</p>
</div>
<div class="paragraph">
<p>In short: Not being able to do everything is often a good thing.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113095346365960056">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_07_32024-09-07T00:00:00+02:00[Stream] 2024-09-07 (3/5)2024-09-07T00:00:00+02:002024-09-07T00:00:00+02:00<div class="paragraph">
<p>I always felt like being too much of a mathematician for being a physicist,
and too much of a physicist for being a mathematician – like sitting
between two chairs.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113096235494842086">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_07_42024-09-07T00:00:00+02:00[Stream] 2024-09-07 (4/5)2024-09-07T00:00:00+02:002024-09-07T00:00:00+02:00<div class="paragraph">
<p>Did some gardening work in the evening, enjoyed vegan overnight oats made
with oat milk – time to close the day.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113097966719201467">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_07_52024-09-07T00:00:00+02:00[Stream] 2024-09-07 (5/5)2024-09-07T00:00:00+02:002024-09-07T00:00:00+02:00<div class="paragraph">
<p>Practiced meditation for 30 minutes this morning.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113100924297618031">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_08_12024-09-08T00:00:00+02:00[Stream] 2024-09-08 (1/2)2024-09-08T00:00:00+02:002024-09-08T00:00:00+02:00<div class="paragraph">
<p>Got some more gardening work done before the rain starts.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113101584681201584">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_08_22024-09-08T00:00:00+02:00[Stream] 2024-09-08 (2/2)2024-09-08T00:00:00+02:002024-09-08T00:00:00+02:00<div class="paragraph">
<p>Practiced meditation for 30 minutes this morning.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113106692777137940">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_09_12024-09-09T00:00:00+02:00[Stream] 2024-09-092024-09-09T00:00:00+02:002024-09-09T00:00:00+02:00<div class="paragraph">
<p>One of the things I really like about the geminiprotocol is that Gemini
capsules lend themselves to being viewed with a text-based Gemini client in
a terminal (although there are great GUI Gemini clients as well, notably
<a href="https://gmi.skyjake.fi/lagrange/">Lagrange</a>).</p>
</div>
<div class="paragraph">
<p>While there are text-based browsers for web pages as well (like lynx, links
or w3m), to me they always felt more like workarounds, since the web is very
much m ultimedia-oriented these days (in spite of its origins).</p>
</div>
<div class="paragraph">
<p>On the contrary, since the geminiprotocol is text-oriented, text-based
Gemini clients feel completely natural to me.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113118256355673345">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_11_12024-09-11T00:00:00+02:00[Stream] 2024-09-112024-09-11T00:00:00+02:002024-09-11T00:00:00+02:00<div class="paragraph">
<p>Practiced meditation for 30 minutes this morning.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113140534392551079">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_15_12024-09-15T00:00:00+02:00[Stream] 2024-09-15 (1/3)2024-09-15T00:00:00+02:002024-09-15T00:00:00+02:00<div class="paragraph">
<p>I love the poem “Small Kindnesses” (see
<a href="https://www.danushalameris.com/poems">www.danushalameris.com/poems</a>) by
<a href="https://www.danushalameris.com/">Danusha Lameris</a>, an ode to kindness and
compassion. It is not about big, heroic actions, but rather about small,
everyday acts often performed almost unconsciously. Yet those small
kindnesses are so important for our living together that they deserve
attention and awareness.</p>
</div>
<div class="paragraph">
<p>It is a beautiful elaboration on the Dalai Lama’s famous statement “My
religion is kindness”.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113140618198918445">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_15_22024-09-15T00:00:00+02:00[Stream] 2024-09-15 (2/3)2024-09-15T00:00:00+02:002024-09-15T00:00:00+02:00<div class="paragraph">
<p>Thinking differentiates the world, meditation integrates it.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113140629205062097">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_15_32024-09-15T00:00:00+02:00[Stream] 2024-09-15 (3/3)2024-09-15T00:00:00+02:002024-09-15T00:00:00+02:00<div class="paragraph">
<p>A simple demonstration of the monkey mind in action I find startling every
time I am experiencing it:</p>
</div>
<div class="paragraph">
<p>When something comes to your mind which you must not or do not want to
forget, do not write it down (or otherwise persist it) immediately, but
instead try to keep it in your mind for a couple of minutes.</p>
</div>
<div class="paragraph">
<p>Sounds easy, but most of the times when something I need to or want to
remember comes to my mind while brushing my teeth, for instance, I have
forgotten it by the time I am finished because my mind has already jumped to
the next subject(s) it happens to find interesting.</p>
</div>
<div class="paragraph">
<p>Time and again I am thinking to myself in such situations: “Come on, it is
impossible that you forget <thought so and so> until you are done with
<activity so and so> just repeat the thought in your mind all the time.”
And often, the thought is forgotten within a fraction of a minute.</p>
</div>
<div class="paragraph">
<p>Of course, oftentimes I will remember my thought again after a while;
usually it is not completely forgotten and gone. The point is that this
shows that it is really hard to focus your mind on a single thing even for a
short period of time.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113180584278325946">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_22_12024-09-22T00:00:00+02:00[Stream] 2024-09-222024-09-22T00:00:00+02:002024-09-22T00:00:00+02:00<div class="paragraph">
<p>Finished reading <a href="https://mwl.io/nonfiction/tools#ed">Ed Mastery</a> by
<a href="https://mwl.io/">Michael W Lucas</a>. Review will be coming shortly.</p>
</div>
<div class="paragraph">
<p>Looking forward to getting <a href="https://mwl.io/nonfiction/tools#ryoms">Run Your
Own Mail Server</a> next.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113221101059196296">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_29_12024-09-29T00:00:00+02:00[Stream] 2024-09-29 (1/2)2024-09-29T00:00:00+02:002024-09-29T00:00:00+02:00<div class="paragraph">
<p>Here’s my review of <a href="ed-mastery.html">Michael W Lucas: “Ed Mastery”</a>.</p>
</div>
<div class="paragraph">
<p>Make sure to read the
<a href="https://nxdomain.no/~peter/ed_mastery_is_a_must_for_real_unix_person.html">review
by Peter N. M. Hansteen</a> as well (might be a little more factual than
mine…​)!</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113221282968575539">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_09_29_22024-09-29T00:00:00+02:00[Stream] 2024-09-29 (2/2)2024-09-29T00:00:00+02:002024-09-29T00:00:00+02:00<div class="paragraph">
<p>A nice – if somewhat explicit – companion to
<a href="https://justinjackson.ca/words.html">Words</a> by <a href="https://justinjackson.ca/">Justin
Jackson</a>:</p>
</div>
<div class="paragraph">
<p><a href="http://motherfuckingwebsite.com/">Motherfucking Website</a></p>
</div>
<div class="paragraph">
<p>And another reason for the <a href="https://geminiprotocol.net/">Gemini protocol</a>, for
that matter.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113419983860033300">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_11_03_12024-11-03T00:00:00+01:00[Stream] 2024-11-03 (1/2)2024-11-03T00:00:00+01:002024-11-03T00:00:00+01:00<div class="paragraph">
<p>The “Día de Muertos” is a really beautiful tradition (and yes, I know I’m
a little late…​). It is so contrary to the way death is dealt with in most
European cultures (and in particular in German culture), where it is usually
attempted to avoid thinking of death as much as possible.</p>
</div>
<div class="paragraph">
<p>To me, it seems that the “Día de Muertos” is a very healthy way of coping
with death and acknowledging that there is no live withouth death –
<em>memento mori</em>.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113420090159088618">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_11_03_22024-11-03T00:00:00+01:00[Stream] 2024-11-03 (2/2)2024-11-03T00:00:00+01:002024-11-03T00:00:00+01:00<div class="paragraph">
<p>Sharath Jois, director of the <a href="https://sharathyogacentre.com/">Sharath Yoga
Centre</a> in Mysore, India, and lineage holder of the Ashtanga Yoga system,
dies at age 53.</p>
</div>
<div class="paragraph">
<p>A sad reminder that all of our lives, no matter how healthy and strong we
may seem, hang by a thread and can end at any one moment. <em>Memento mori</em>!</p>
</div>
<div class="paragraph">
<p>May you rest in peace.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113471284116455086">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_11_12_12024-11-12T00:00:00+01:00[Stream] 2024-11-122024-11-12T00:00:00+01:002024-11-12T00:00:00+01:00<div class="paragraph">
<p>Reading <em>The Wizard of Oz</em> for the first time in my life, in preparation for
watching it in theater over Christmas with my son and parents.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113651923556478005">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_12_14_12024-12-14T00:00:00+01:00[Stream] 2024-12-142024-12-14T00:00:00+01:002024-12-14T00:00:00+01:00<div class="paragraph">
<p>I rarely spend time just sitting there and looking out of the window into
the garden, for instance, but it is always worth it. Taking time for
becoming calm, doing “nothing”, not being “productive”, enjoying
stillness is so important and necessary.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113657445870798546">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2024_12_15_12024-12-15T00:00:00+01:00[Stream] 2024-12-152024-12-15T00:00:00+01:002024-12-15T00:00:00+01:00<div class="paragraph">
<p>Started reading <em>A System for Writing</em> by <a href="https://bobdoto.computer/">Bob
Doto</a> (got it after heaving read the great
<a href="https://writingslowly.com/2024/07/14/a-system-for.html">review</a> by Richard
Griffiths). Haven’t read much of it so far, but it already looks very
primising!</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113879360659006522">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2025_01_03_12025-01-03T00:00:00+01:00[Stream] 2025-01-032025-01-03T00:00:00+01:002025-01-03T00:00:00+01:00<div class="paragraph">
<p>Interesting:
<a href="https://www.mrporter.com/en-us/journal/lifestyle/life-lessons-people-tokyo-japan-style-food-24538500">33
Ways To Improve Your Life, Japanese Style</a> (via
<a href="https://www.recomendo.com/p/33-life-tipssecret-museum-of-mankindsmall">Recomendo
- issue #449</a>)</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/113975307523337737">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2025_02_09_12025-02-09T00:00:00+01:00[Stream] 2025-02-092025-02-09T00:00:00+01:002025-02-09T00:00:00+01:00<div class="paragraph">
<p>The importance of being able to focus and concentrate and to withstand
distractions and immediate gratifications can hardly be overstated.</p>
</div>
<div class="paragraph">
<p>It is one of the most powerful abilities in today’s world, and it will be
even more so in the future when methods to catch the attention of people
will get ever more refined.</p>
</div>
<div class="paragraph">
<p>While in the past people were able to focus entire days on writing or
thinking (provided they could afford it), today someone who is able to
concentrate on a single task for an extended period of time has almost
become an exception.</p>
</div>
<div class="paragraph">
<p>We live in an age of distraction and diversion, of minimal attention spans
and of scattered, fragmented and erratic minds.</p>
</div>
<div class="paragraph">
<p>This is no new insight, but worth remembering.</p>
</div>
<div class="paragraph">
<p>Being able to focus is a true superpower.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/114014953374000490">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2025_02_16_12025-02-16T00:00:00+01:00[Stream] 2025-02-162025-02-16T00:00:00+01:002025-02-16T00:00:00+01:00<div class="paragraph">
<p>Forgot my mobile phone in the car when I got home yesterday and only noticed
it 3 hours later.</p>
</div>
<div class="paragraph">
<p>Pretty happy about that (well, not necessarily about my mental presence, but
about my ability to live without a phone for short periods of time).</p>
</div>
<div class="paragraph">
<p>And no, I didn’t sleep during those 3 hours.</p>
</div>
<div class="paragraph">
<p>And yes, I’m fully aware of how ridiculous it is to be proud of that.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/114132708860817209">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2025_03_09_12025-03-09T00:00:00+01:00[Stream] 2025-03-092025-03-09T00:00:00+01:002025-03-09T00:00:00+01:00<div class="paragraph">
<p>Read <a href="https://craigmod.com/essays/how_i_got_my_attention_back/">How I Got My
Attention Back</a> by <a href="https://craigmod.com/">Craig Mod</a> for the second or third
time. It is a wonderful piece which is more relevant and timely than ever
(even with respect to the political allusions – now, eight years after
it was first published).</p>
</div>
<div class="paragraph">
<p>It is eloquently written and full or relevant observations and insights.
Also, it reminds me of how much I like Craig’s writing style and that I
should really read more from him (in particular his great newsletters!).</p>
</div>
<div class="paragraph">
<p>In fact, I think one can see the piece as an excellent elaboration on the
central proposition “All of humanity’s problems stem from man’s inability
to sit quietly in a room alone” by Blaise Pascal, which is quoted in the
piece (and which has long been one of my favorite quotes). But while man was
not able to sit quietly in a room alone already several hundred years ago,
in our times it has become incomparably harder – knowing that the much
sought-after distraction – and thereby salvation – from his
aloneness is not waiting somewhere outside his empty room, but beckoning
right next to his fingertips.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/114145031336183336">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2025_03_11_12025-03-11T00:00:00+01:00[Stream] 2025-03-112025-03-11T00:00:00+01:002025-03-11T00:00:00+01:00<div class="paragraph">
<p>Finished reading <em>A System for Writing</em> by <a href="https://bobdoto.computer/">Bob
Doto</a> (yes, I’m a very slow reader…​). My first impression was confirmed by
the rest of the book, which is very well written and devised. I learned
quite a bit from the book, and it definitely renewed my interest in the
Zettelkasten method.</p>
</div>
<div class="paragraph">
<p>I highly recommend this book to anyone interested in PKM in general, the
Zettelkasten method in particular, and/or writing which is supported by the
use of a Zettelkasten.</p>
</div>
<div class="paragraph">
<p>Hat tip to Richard Griffiths for pointing me to the book via his
<a href="https://writingslowly.com/2024/07/14/a-system-for.html">review</a>!</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/114156353991326165">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2025_03_13_12025-03-13T00:00:00+01:00[Stream] 2025-03-132025-03-13T00:00:00+01:002025-03-13T00:00:00+01:00<div class="paragraph">
<p>I have several files (mostly related to the logging of tasks, events etc.)
where (some) lines start with a date. Since the current date is usually not
at the very beginning or very end of the file, a convenient shortcut in
<a href="https://www.vim.org/">Vim</a> or <a href="https://neovim.io/">Neovim</a> (or other Vim-like
editors) to jump to the current date is:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>nnoremap <C-G> /^<C-R>=strftime('%Y-%m-%d')<CR><CR>:noh<CR></code></pre>
</div>
</div>
<div class="paragraph">
<p>This assumes that the date is given in the <em>strftime</em> format <code>%Y-%m-%d</code> (the
only true date format), and it maps the command to the key combination
<code><Ctrl>+G</code> (of course it can be mapped to any other key or key
combination).</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/114173427831371500">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2025_03_16_12025-03-16T00:00:00+01:00[Stream] 2025-03-16 (1/2)2025-03-16T00:00:00+01:002025-03-16T00:00:00+01:00<div class="paragraph">
<p>Our perception is fully compatible with the assumption that everything,
including all our memories, was created an instant (or any other time) ago.</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/114173436832712104">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2025_03_16_22025-03-16T00:00:00+01:00[Stream] 2025-03-16 (2/2)2025-03-16T00:00:00+01:002025-03-16T00:00:00+01:00<div class="paragraph">
<p>Started reading <em>Lev Shestov: Philosopher of the Sleepless Night</em> by Matthew
Beaumont and am very curious about it.</p>
</div>
<div class="paragraph">
<p>I hadn’t known Lev Shestov before reading <em>The Myth of Sisyphos</em> by Albert
Camus, in which he is mentioned several times and which got me interested in
him in the first place. What caught my attention most is Shestov’s deep
belief that reality cannot be pressed into a (philosophical or any other
kind of) system and that humans are fundamentally irrational beings.</p>
</div>
<div class="paragraph">
<p>Let’s see what the book has in store about this largely unknown thinker…​</p>
</div>
<div class="paragraph">
<p>Read on
<a href="https://exquisite.social/@thorstenzoeller/114184589473620152">Mastodon</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2025_03_18_12025-03-18T00:00:00+01:00[Stream] 2025-03-182025-03-18T00:00:00+01:002025-03-18T00:00:00+01:00<div class="paragraph">
<p>My <a href="sivers-useful-not-true.html">review</a> of <a href="https://sive.rs/u">Useful Not
True</a> by Derek Sivers.</p>
</div>https://thorstenzoeller.com/stream/#_2025_07_06_12025-07-06T00:00:00+02:00[Stream] 2025-07-062025-07-06T00:00:00+02:002025-07-06T00:00:00+02:00<div class="paragraph">
<p>Having a lot of fun playing Pickleball in Vietnam. There are so many
Pickleball courts here – in contrast to Germany, where there are still
very few courts unfortunately…​</p>
</div>https://thorstenzoeller.com/stream/#_2025_08_13_12025-08-13T00:00:00+02:00[Stream] 2025-08-13 (1/2)2025-08-13T00:00:00+02:002025-08-13T00:00:00+02:00<div class="paragraph">
<p>Finished reading “The Worst Ship in the Fleet” a couple of days ago, the
first part of <a href="https://www.skylerramirez.com/">Skyler Ramirez</a>' “Dumb Luck
and Dead Heroes” series. I had bought a copy of it after having read about
it more or less by chance on <a href="https://nathanlowell.com/">Nathan Lowell’s
website</a> (hat tip to Nathan Lowell).</p>
</div>
<div class="paragraph">
<p>It is a quick read and rather fast paced, and I enjoyed it a lot. There are
certainly inconsistencies and logical hiccups, but I didn’t really care (in
contrast to pretty much everything outside of fiction, where I would
typically care a lot). The story is captivating, but what is probably most
compelling are its two main characters. I am really curious about how their
relationship will be developing in the course of the series.</p>
</div>
<div class="paragraph">
<p>Looking forward to reading part two, “The Worst Spies in the Sector”.</p>
</div>https://thorstenzoeller.com/stream/#_2025_08_13_22025-08-13T00:00:00+02:00[Stream] 2025-08-13 (2/2)2025-08-13T00:00:00+02:002025-08-13T00:00:00+02:00<div class="paragraph">
<p>Finished reading “Lev Shestov – Philosopher of the Sleepless Night”
by Matthew Beaumont yesterday. I wanted to read more about Shestov ever
since I first read about him in “The Myth of Sisyphos” by Albert Camus.
Unfortunately, he is mostly forgotten these days, and it is hard to get hold
of copies of his original works.</p>
</div>
<div class="paragraph">
<p>With his rather short, but very dense book, Beaumont offers a lot of
information about this elusive and highly unique thinker, focusing on one of
his central themes or motives, sleeplessnessand watchfulness in the face of
the horrors of our world.</p>
</div>
<div class="paragraph">
<p>There is much to say about this book, and I plan to elaborate on it in a
longer review.</p>
</div>https://thorstenzoeller.com/stream/#_2025_08_15_12025-08-15T00:00:00+02:00[Stream] 2025-08-152025-08-15T00:00:00+02:002025-08-15T00:00:00+02:00<div class="paragraph">
<p>Last day in Hanoi, Vietnam, before heading back to Germany tonight. Had a
great time as usual; in particular my first visit to Danang was memorable.</p>
</div>https://thorstenzoeller.com/stream/#_2025_08_16_12025-08-16T00:00:00+02:00[Stream] 2025-08-162025-08-16T00:00:00+02:002025-08-16T00:00:00+02:00<div class="paragraph">
<p>Delicious lunch: Stir-fried dandelion leaves with rice (yes, that <em>is</em> a
full-fledged meal!).</p>
</div>https://thorstenzoeller.com/stream/#_2025_08_27_12025-08-27T00:00:00+02:00[Stream] 2025-08-27 (1/2)2025-08-27T00:00:00+02:002025-08-27T00:00:00+02:00<div class="paragraph">
<p>Getting really interested in Solarpunk and looking for good fiction to read.</p>
</div>https://thorstenzoeller.com/stream/#_2025_08_27_22025-08-27T00:00:00+02:00[Stream] 2025-08-27 (2/2)2025-08-27T00:00:00+02:002025-08-27T00:00:00+02:00<div class="paragraph">
<p>New article <a href="how-i-use-vim.html">How I Use Vim</a>, a contribution to the
first <a href="https://lazybea.rs/vim-carnival-202509/">Vim Carnival</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2025_08_30_12025-08-30T00:00:00+02:00[Stream] 2025-08-30 (1/2)2025-08-30T00:00:00+02:002025-08-30T00:00:00+02:00<div class="paragraph">
<p>Finally got an <a href="https://codeberg.org/thorstenzoeller">account</a> on
<a href="https://codeberg.org/">Codeberg</a>. Feels good!</p>
</div>https://thorstenzoeller.com/stream/#_2025_08_30_22025-08-30T00:00:00+02:00[Stream] 2025-08-30 (2/2)2025-08-30T00:00:00+02:002025-08-30T00:00:00+02:00<div class="paragraph">
<p><a href="https://ploum.net/2025-09-03-calendar-txt.html">How I fell in love with
calendar.txt</a>: Interesting article about the
<a href="https://terokarvinen.com/2021/calendar-txt/">calendar.txt</a> format for a
text-file-based calendar.</p>
</div>https://thorstenzoeller.com/stream/#_2025_09_04_12025-09-04T00:00:00+02:00[Stream] 2025-09-042025-09-04T00:00:00+02:002025-09-04T00:00:00+02:00<div class="paragraph">
<p>Life is an acceleration run towards death.</p>
</div>
<div class="paragraph">
<p>This is not morbid, but a matter of fact – our time on earth runs out
quicker than we would like to believe, no matter what our stage in life.</p>
</div>https://thorstenzoeller.com/stream/#_2025_09_05_12025-09-05T00:00:00+02:00[Stream] 2025-09-05 (1/2)2025-09-05T00:00:00+02:002025-09-05T00:00:00+02:00<div class="paragraph">
<p>Haiku attempt:</p>
</div>
<div class="verseblock">
<pre class="content">Vast sky opens
behind the window.
The honey bee cannot escape.</pre>
</div>
<div class="paragraph">
<p>Critique welcome.</p>
</div>https://thorstenzoeller.com/stream/#_2025_09_05_22025-09-05T00:00:00+02:00[Stream] 2025-09-05 (2/2)2025-09-05T00:00:00+02:002025-09-05T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Haiku attempt (prompt
“Laughter”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">Nightshades falling
over silent meadows –
faint laughter in the distance.</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_07_12025-09-07T00:00:00+02:00[Stream] 2025-09-072025-09-07T00:00:00+02:002025-09-07T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Willow”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">the old willow bends
ailingly over the pond
a brown duck swims by</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_08_12025-09-08T00:00:00+02:00[Stream] 2025-09-082025-09-08T00:00:00+02:002025-09-08T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Harvest”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">fields stretching golden
beneath the evening sun –
harvest in the cart</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_09_12025-09-09T00:00:00+02:00[Stream] 2025-09-092025-09-09T00:00:00+02:002025-09-09T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Grave”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">on a weathered grave
rotten oak leaves are covered
by branches and snow</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_10_12025-09-10T00:00:00+02:00[Stream] 2025-09-102025-09-10T00:00:00+02:002025-09-10T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Puddle”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">gusts of wind hitting
the puddle’s quiet blue surface –
the full moon is gone</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_11_12025-09-11T00:00:00+02:00[Stream] 2025-09-112025-09-11T00:00:00+02:002025-09-11T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Harvest”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">fruits, nuts, cereal –
the ample harvest delights
mice and men alike</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_12_12025-09-12T00:00:00+02:00[Stream] 2025-09-122025-09-12T00:00:00+02:002025-09-12T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Pumpkin”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">the hollow pumpkin
shining dimly from within
grins maliciously</pre>
</div>
<div class="paragraph">
<p>And an alternative version:</p>
</div>
<div class="verseblock">
<pre class="content">the hollow pumpkin
contemplating its grim fate
grins maliciously</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_13_12025-09-13T00:00:00+02:00[Stream] 2025-09-132025-09-13T00:00:00+02:002025-09-13T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt
“Chrysanthemums”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">between the debris
a patch of chrsyanthemums
defies the wasteland</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_14_12025-09-14T00:00:00+02:00[Stream] 2025-09-14 (1/2)2025-09-14T00:00:00+02:002025-09-14T00:00:00+02:00<div class="paragraph">
<p>I love it when the sun breaks through gloomy clouds. Magnificient play of
light!</p>
</div>https://thorstenzoeller.com/stream/#_2025_09_14_22025-09-14T00:00:00+02:00[Stream] 2025-09-14 (2/2)2025-09-14T00:00:00+02:002025-09-14T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Deer”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">behind a large tree
in the snow-covered forest
a shy deer peeks out</pre>
</div>
<div class="paragraph">
<p>And another one:</p>
</div>
<div class="verseblock">
<pre class="content">the young deer wanders
around in fear, its mother
gone without a trace</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_15_12025-09-15T00:00:00+02:00[Stream] 2025-09-152025-09-15T00:00:00+02:002025-09-15T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Orchids”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">in a steep rock face
a wee grassy ledge harbors
two purple orchids</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_16_12025-09-16T00:00:00+02:00[Stream] 2025-09-162025-09-16T00:00:00+02:002025-09-16T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Lotus”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">on a mountain top
the monk, sitting in lotus
meditates deeply</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_17_12025-09-17T00:00:00+02:00[Stream] 2025-09-172025-09-17T00:00:00+02:002025-09-17T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Morning”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">morning dew pearling
from a daffodil, sunbeams
scattered by the drops</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_18_12025-09-18T00:00:00+02:00[Stream] 2025-09-182025-09-18T00:00:00+02:002025-09-18T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Glow”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">a faint glow appears
behind the dark horizon –
morning approaches</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_19_12025-09-19T00:00:00+02:00[Stream] 2025-09-19 (1/2)2025-09-19T00:00:00+02:002025-09-19T00:00:00+02:00<div class="paragraph">
<p>Finished reading “Aufzeichnungen aus dem Kellerloch” (“Notes from the
Underground”) by Fyodor Dostoevsky. Deeply fascinating psychological study
of a social outsider, an "underground man" – disturbing and
uncomfortable.</p>
</div>https://thorstenzoeller.com/stream/#_2025_09_19_22025-09-19T00:00:00+02:00[Stream] 2025-09-19 (2/2)2025-09-19T00:00:00+02:002025-09-19T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Cascade”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">amidst wild waters
cascading down the mountain
a lone tree persists</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_20_12025-09-20T00:00:00+02:00[Stream] 2025-09-20 (1/3)2025-09-20T00:00:00+02:002025-09-20T00:00:00+02:00<div class="paragraph">
<p>The joy I get out of tweaking a minimal detail of the layout of my website
or from refactoring a tiny piece of code – even if it has no visible
effect and just makes things a bit nicer under the hood – is
completely irrational, yet very real.</p>
</div>https://thorstenzoeller.com/stream/#_2025_09_20_22025-09-20T00:00:00+02:00[Stream] 2025-09-20 (2/3)2025-09-20T00:00:00+02:002025-09-20T00:00:00+02:00<div class="paragraph">
<p>Started reading <em>The Worst Spies in the Sector</em> by
<a href="https://www.skylerramirez.com/">Skyler Ramirez</a> – part 2 of his <em>Dumb
Luck and Dead Heroes</em> series.</p>
</div>
<div class="paragraph">
<p>Really looking forward to it after the fun I had reading the first part!</p>
</div>https://thorstenzoeller.com/stream/#_2025_09_20_32025-09-20T00:00:00+02:00[Stream] 2025-09-20 (3/3)2025-09-20T00:00:00+02:002025-09-20T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Somber”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">in the depth of night
the stars shine faintly above
in somber silence</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_21_12025-09-21T00:00:00+02:00[Stream] 2025-09-21 (1/3)2025-09-21T00:00:00+02:002025-09-21T00:00:00+02:00<div class="paragraph">
<p>I would be really willing to give <a href="https://tuta.com/">Tuta</a> a try –
almost everything about them looks really good.</p>
</div>
<div class="paragraph">
<p>There is one thing, though, which is a complete no-go for me: Being
locked-in to a specific piece of software (even if it is open source) in
order to be able to send/receive mail, and in particular not being able to
use a terminal-based email client like mutt or aerc which e.g. allow me to
use a decent text editor for writing mails.</p>
</div>
<div class="paragraph">
<p>Any suggestions? Am I missing something?</p>
</div>https://thorstenzoeller.com/stream/#_2025_09_21_22025-09-21T00:00:00+02:00[Stream] 2025-09-21 (2/3)2025-09-21T00:00:00+02:002025-09-21T00:00:00+02:00<div class="paragraph">
<p><a href="#_2024_07_23">I have said it before</a>, and I will say it again: The quote
“I don’t love my country; I love my wife!” by former German president
Gustav Heinemann (freely translated by myself) is the best statement about
patriotism I have ever come across.</p>
</div>
<div class="paragraph">
<p>Note: You can replace “wife” by anything you like – as long as it is
a human being.</p>
</div>https://thorstenzoeller.com/stream/#_2025_09_21_32025-09-21T00:00:00+02:00[Stream] 2025-09-21 (3/3)2025-09-21T00:00:00+02:002025-09-21T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Chilly”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">a pale sun’s light rays
breaking through the chilly fog –
autumn has arrived</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_22_12025-09-22T00:00:00+02:00[Stream] 2025-09-222025-09-22T00:00:00+02:002025-09-22T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Salmon”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">a flock of salmon
pushing up the steep river
flanked by lush forests</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_23_12025-09-23T00:00:00+02:00[Stream] 2025-09-232025-09-23T00:00:00+02:002025-09-23T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt
“Footsteps”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">footsteps in the snow
barely visible by now
washed away by rain</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_24_12025-09-24T00:00:00+02:00[Stream] 2025-09-242025-09-24T00:00:00+02:002025-09-24T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Walnuts”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">in the bowl full of
walnuts, almonds and pecans,
a single raisin</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_25_12025-09-25T00:00:00+02:00[Stream] 2025-09-252025-09-25T00:00:00+02:002025-09-25T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Dapple”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">orange dappled floor –
painting the wall was only
a partial success</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_26_12025-09-26T00:00:00+02:00[Stream] 2025-09-262025-09-26T00:00:00+02:002025-09-26T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Sea Bass”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">the dark silhouette
of a sea bass swimming past
in troubled waters</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_27_12025-09-27T00:00:00+02:00[Stream] 2025-09-272025-09-27T00:00:00+02:002025-09-27T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Eaves”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">droplets dripping down
the eaves, falling towards their
destiny, soon gone</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_28_12025-09-28T00:00:00+02:00[Stream] 2025-09-282025-09-28T00:00:00+02:002025-09-28T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Laughter”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">deep solemn silence
all of a sudden broken
by jarring laughter</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_29_12025-09-29T00:00:00+02:00[Stream] 2025-09-292025-09-29T00:00:00+02:002025-09-29T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “High
Tide”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">the small isle, swallowed
by the high tide, waiting to
re-rise from the sea</pre>
</div>https://thorstenzoeller.com/stream/#_2025_09_30_12025-09-30T00:00:00+02:00[Stream] 2025-09-30 (1/4)2025-09-30T00:00:00+02:002025-09-30T00:00:00+02:00<div class="paragraph">
<p>Finally added an Atom feed to my website: <a href="atom.xml">/atom.xml</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2025_09_30_22025-09-30T00:00:00+02:00[Stream] 2025-09-30 (2/4)2025-09-30T00:00:00+02:002025-09-30T00:00:00+02:00<div class="paragraph">
<p>About a week ago, I had the great pleasure to be on the
<a href="https://lazybea.rs/overunder/">Over/Under</a> series from
<a href="https://lazybea.rs/">Hyde</a>. You can read the questions I was asked and my
answers, along with Hyde’s answers to the same questions,
<a href="https://lazybea.rs/ovr-034/">here</a>. It was a lot of fun – thanks to
Hyde for having me!</p>
</div>
<div class="paragraph">
<p>Also, don’t forget to follow Hyde on <a href="https://lazybear.social/@hyde">Mastodon</a>
if you don’t already do!</p>
</div>https://thorstenzoeller.com/stream/#_2025_09_30_32025-09-30T00:00:00+02:00[Stream] 2025-09-30 (3/4)2025-09-30T00:00:00+02:002025-09-30T00:00:00+02:00<div class="paragraph">
<p>Learned about <a href="https://typst.app">Typst</a> today (hat tip to
<a href="https://mastodon.art/@RussSharek">Russ Sharek</a> for pointing me to it –
had for some reason never heard of it before). It is a typesetting system
for creating documents which has a lot of features, including advanced
facilities for typesetting mathematical formulae. I have only started diving
into it, but it looks <em>really</em> promising, and as far as I can tell so far,
it may even have the potential to replace LaTeX (though it is probably a
little early to assess).</p>
</div>
<div class="paragraph">
<p>Currently, I use
<a href="https://docs.asciidoctor.org/pdf-converter/latest/">Asciidoctor PDF</a> for
simpler documents and LaTeX for more complex documents, in particular
documents involving mathematical formulae (though this happens rarely these
days). <em>Typst</em> might very well be able to satisfy both these use cases. And
there is even an OpenBSD package for it!</p>
</div>https://thorstenzoeller.com/stream/#_2025_09_30_42025-09-30T00:00:00+02:00[Stream] 2025-09-30 (4/4)2025-09-30T00:00:00+02:002025-09-30T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Hunter’s
Moon”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">hunter’s moon shining
brightly over reddish woods –
autumn time has come</pre>
</div>https://thorstenzoeller.com/stream/#_2025_10_01_12025-10-01T00:00:00+02:00[Stream] 2025-10-012025-10-01T00:00:00+02:002025-10-01T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Grain”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">heaps of grain filling
the storage chambers, a mouse
delights in its share</pre>
</div>https://thorstenzoeller.com/stream/#_2025_10_02_12025-10-02T00:00:00+02:00[Stream] 2025-10-022025-10-02T00:00:00+02:002025-10-02T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Frost”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">frost-covered meadows
let fall in oblivion
a summer long gone</pre>
</div>https://thorstenzoeller.com/stream/#_2025_10_03_12025-10-03T00:00:00+02:00[Stream] 2025-10-032025-10-03T00:00:00+02:002025-10-03T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Yellow
Leaves”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">yellow leaves dancing
wildly in the air, stirred up
by harsh autumn wind</pre>
</div>https://thorstenzoeller.com/stream/#_2025_10_04_12025-10-04T00:00:00+02:00[Stream] 2025-10-042025-10-04T00:00:00+02:002025-10-04T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Flour”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">no trace of the mouse –
except footsteps in the flour
scattered on the floor</pre>
</div>https://thorstenzoeller.com/stream/#_2025_10_05_12025-10-05T00:00:00+02:00[Stream] 2025-10-052025-10-05T00:00:00+02:002025-10-05T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Night
Chill”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">as the moon rises
on a starry sky, autumn’s
night chill slowly spreads</pre>
</div>https://thorstenzoeller.com/stream/#_2025_10_06_12025-10-06T00:00:00+02:00[Stream] 2025-10-06 (1/2)2025-10-06T00:00:00+02:002025-10-06T00:00:00+02:00<div class="paragraph">
<p>Thanks to <a href="https://adam.omg.lol/">Adam Newbold</a>, today I learned that one’s
<a href="https://social.lol/@adam/115328017911416358">Mastodon posts are automatically
published via an RSS feed</a>, where the URL of the feed is obtained by simply
appending “.rss” to the URL of one’s Masotodon account (so, for instance,
my feed is available under <a href="https://exquisite.social/@thorstenzoeller.rss" class="bare">https://exquisite.social/@thorstenzoeller.rss</a>)
– <a href="https://sive.rs/obvious">Obvious to others. Amazing to me</a>.</p>
</div>https://thorstenzoeller.com/stream/#_2025_10_06_22025-10-06T00:00:00+02:00[Stream] 2025-10-06 (2/2)2025-10-06T00:00:00+02:002025-10-06T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Avoid”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">flocks of birds flying
towards the south to avoid
the cold of winter</pre>
</div>https://thorstenzoeller.com/stream/#_2025_10_07_12025-10-07T00:00:00+02:00[Stream] 2025-10-072025-10-07T00:00:00+02:002025-10-07T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Ghost”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">in deep autumn fog
a raven slowly descends
like a somber ghost</pre>
</div>https://thorstenzoeller.com/stream/#_2025_10_08_12025-10-08T00:00:00+02:00[Stream] 2025-10-082025-10-08T00:00:00+02:002025-10-08T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Geese”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">the sky is mirrored
in the lake; at its far end
a flock of geese rest</pre>
</div>https://thorstenzoeller.com/stream/#_2025_10_09_12025-10-09T00:00:00+02:00[Stream] 2025-10-092025-10-09T00:00:00+02:002025-10-09T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Straw”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">a straw is dancing
on the meadows, blown around
by petulant winds</pre>
</div>https://thorstenzoeller.com/stream/#_2025_10_10_12025-10-10T00:00:00+02:00[Stream] 2025-10-10 (1/2)2025-10-10T00:00:00+02:002025-10-10T00:00:00+02:00<div class="paragraph">
<p>A must-read: <a href="https://www.thetinywisdom.com/the-slow-decline-of-joy/">The slow
decline of joy</a></p>
</div>https://thorstenzoeller.com/stream/#_2025_10_10_22025-10-10T00:00:00+02:00[Stream] 2025-10-10 (2/2)2025-10-10T00:00:00+02:002025-10-10T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Vivid”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">created by my
vivid imagination:
a world united</pre>
</div>https://thorstenzoeller.com/stream/#_2025_10_11_12025-10-11T00:00:00+02:00[Stream] 2025-10-11 (1/2)2025-10-11T00:00:00+02:002025-10-11T00:00:00+02:00<div class="paragraph">
<p>In <a href="https://www.ruby-lang.org/en/">Ruby</a>, transforming a hash of the form</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>h = {key_1 => arr_1, ..., key_n => arr_n}</code></pre>
</div>
</div>
<div class="paragraph">
<p>into an array of the form</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>[
[key_1, arr_1.first],
...,
[key_1, arr_1.last],
...,
[key_n, arr_n.first],
...,
[key_n, arr_n.last]
]</code></pre>
</div>
</div>
<div class="paragraph">
<p>can be achieved as follows:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>h.flat_map { |key, arr| arr.map { |elem| [key, elem] } }</code></pre>
</div>
</div>
<div class="paragraph">
<p>Example: With</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>h = {"a" => [1, 2, 3], "b" => [4, 5, 6]}</code></pre>
</div>
</div>
<div class="paragraph">
<p>one thus obtains:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>[["a", 1], ["a", 2], ["a", 3], ["b", 4], ["b", 5], ["b", 6]]</code></pre>
</div>
</div>https://thorstenzoeller.com/stream/#_2025_10_11_22025-10-11T00:00:00+02:00[Stream] 2025-10-11 (2/2)2025-10-11T00:00:00+02:002025-10-11T00:00:00+02:00<div class="paragraph">
<p><a href="https://mastodon.world/@dailyhaikuprompt">Daily haiku (prompt “Crunch”)</a>:</p>
</div>
<div class="verseblock">
<pre class="content">pebbles crunch under
the cart’s heavy wheels, drowning
out tired panting</pre>
</div>https://thorstenzoeller.com/stream/#_2025_10_12_12025-10-12T00:00:00+02:00[Stream] 2025-10-122025-10-12T00:00:00+02:002025-10-12T00:00:00+02:002025-10-12T00:00:00+02:00