<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://foldr.org/~vs/blog/feed.xml" rel="self" type="application/atom+xml" /><link href="https://foldr.org/~vs/blog/" rel="alternate" type="text/html" /><updated>2026-01-04T21:50:07+01:00</updated><id>https://foldr.org/~vs/blog/feed.xml</id><title type="html">Volker Stolz</title><subtitle>Volker&apos;s Private Ramblings</subtitle><entry><title type="html">Martin Steffen (1965-2025)</title><link href="https://foldr.org/~vs/blog/2025/11/18/MSteffen.html" rel="alternate" type="text/html" title="Martin Steffen (1965-2025)" /><published>2025-11-18T07:00:00+01:00</published><updated>2025-11-18T07:00:00+01:00</updated><id>https://foldr.org/~vs/blog/2025/11/18/MSteffen</id><content type="html" xml:base="https://foldr.org/~vs/blog/2025/11/18/MSteffen.html"><![CDATA[<p>Am 31.10.2025 ist unser Kollege, Co-Autor und Freund <a href="https://martinsteffen.github.io">Martin Steffen</a> unerwartet plötzlich in Oslo, Norwegen von uns gegangen.</p>

<p>Martin war seit über 15 Jahren Professor am Institut für Informatik der Universität in Oslo. Er unterrichtete im Laufe der Zeit viele Veranstaltungen im Bereich Programmiersprachen, Statische Analyse und Compilerbau, Nebenläufigkeit und Verifikation, sowohl für Masterstudenten als auch für Doktoranden. Ich hatte das große Glück, während meiner Zeit in Oslo einige dieser Kurse mit ihm zusammen geben zu dürfen. Martins sorgfältige Vorbereitung auch von schwierigstem Material führte meistens dazu, dass ich häufig trotz der Aufteilung des Kurses unter uns beiden auch an seinen Vorlesungen “teilnahm”. Aber das war eigentlich auch die Regel, da er selbst auch zu meinem Teil kam. Falls die Studenten uns unsere gelegentlich abschweifende Diskussion technischer Details untereinander übel genommen haben, haben sie es jedenfalls nicht in den regelmäßigen Umfragen zur Kursqualität erwähnt. Dort wurde Martin stets als hervorragend vorbereitete und motivierte Lehrkraft geschildert.</p>

<p>Seine Doktorand:innen sind heute erfolgreich in Industrie und Wissenschaft unterwegs, und einige seiner Masterstudenten haben erfolgreich Promotionsstellen – auch international – angetreten.</p>

<p>Martin war ein aktives Mitglied der GI Fachgruppe Programmiersprachen und Rechenkonzepte und nahm wenn möglich gerne an den Fachgruppen-Treffen in Bad Honnef teil. Er war neben seinen wissenschaftlichen Beiträgen auch Mitherausgeber der Tagungsbände der Jahre 2018 &amp; 2019.</p>

<p>Zusammen mit seinen Angehörigen haben wir Martin am 13.11. auf dem Ostfriedhof in Oslo unter großer Anteilnahme beigesetzt. Er hinterläßt seine Frau und ihre drei Kinder. Martin wurde nur 60 Jahre alt.</p>

<p>Trackback: <a href="https://mastodon.social/@fm_volker/115569972513638921">Mastodon</a></p>]]></content><author><name></name></author><category term="CompSci" /><summary type="html"><![CDATA[Am 31.10.2025 ist unser Kollege, Co-Autor und Freund Martin Steffen unerwartet plötzlich in Oslo, Norwegen von uns gegangen.]]></summary></entry><entry><title type="html">Building x86-things in VSCode on an M1</title><link href="https://foldr.org/~vs/blog/2025/10/09/VSCodeARM86.html" rel="alternate" type="text/html" title="Building x86-things in VSCode on an M1" /><published>2025-10-09T21:00:00+02:00</published><updated>2025-10-09T21:00:00+02:00</updated><id>https://foldr.org/~vs/blog/2025/10/09/VSCodeARM86</id><content type="html" xml:base="https://foldr.org/~vs/blog/2025/10/09/VSCodeARM86.html"><![CDATA[<blockquote>Irgendwas mit Gartenbau...</blockquote>

<p>So in our latest little project, we have dependencies left and right,
and BOTH agree that <code class="language-plaintext highlighter-rouge">arm64</code> and <code class="language-plaintext highlighter-rouge">aarch64</code> are not something that they
need to support, because they’ve never heard of it.</p>

<p>The insulting bit is that that build is explicitly made to trip in
the shared-library loader/<code class="language-plaintext highlighter-rouge">cmake</code> respectively, <em>because they didn’t want to figure out which
host-tuple/triple to use</em>! <strong>The code compiles just fine!</strong></p>

<p>Because life is too short (I have a <a href="https://github.com/Oaz/Femyou/pull/13">pull-request for the
<em>left</em>-dependency</a>, but still need to figure out what to do on the
<a href="https://github.com/OpenModelica/OpenModelica">right</a>), I decided that the Apple M1 Ultra should be juicy enough to do full
emulation in a VS Code DevContainer of a <code class="language-plaintext highlighter-rouge">linux/amd64</code>.</p>

<p>Turns out there are 2 1/2 strings you need to pull to get this to work:</p>

<ol>
  <li>Tell VSCode to <strong>build</strong> an <code class="language-plaintext highlighter-rouge">amd64</code> Docker image</li>
  <li>Tell VSCode to <strong>launch</strong> an <code class="language-plaintext highlighter-rouge">amd64</code> Docker container because it’s
apparently bad at listening</li>
  <li>Tell VSCode in the container that, no, you really don’t want
<code class="language-plaintext highlighter-rouge">aarch64</code> binaries for the host that you’re running on, but indeed
<code class="language-plaintext highlighter-rouge">x86</code> will do just fine, thank you.</li>
</ol>

<p>For (1) &amp; (2), you need a Dockerfile like this:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{
    "name": "AMD64",
    "build": { "dockerfile": "Dockerfile",
    "context": "../SmartNode",
    "options": ["--platform", "linux/amd64"]
    },
    "runArgs": ["--platform", "linux/amd64"],
    "customizations": {
        "vscode": {
            "extensions": ["ms-dotnettools.csdevkit"]
        }
    }
}
</code></pre></div></div>

<p>“Why (3)?” you ask? Well:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ uname -m
x86_64
$ dotnet run --project Project.csproj
Using launch settings from Project/Properties/launchSettings.json...
Unhandled exception: An error occurred trying to start process '/workspaces/Project/bin/Debug/net8.0/Project' with working directory '/workspaces/Project'. No such file or directory
$ file /workspaces/Project/bin/Debug/net8.0/Project
/workspaces/Project/bin/Debug/net8.0/Project: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1 ...
</code></pre></div></div>
<p>So you actually want/need:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ dotnet run -a x64 ...
</code></pre></div></div>

<p>Oh, and for some reason (probably for the same reason I need the <code class="language-plaintext highlighter-rouge">-a x64</code>), the IDE is really b0rked; I guess not all VSCode-subcomponents running inside the container got the memo.</p>

<p>Hack the planet!</p>

<p>Trackback: <a href="https://mastodon.social/@fm_volker/115346404401003901">Mastodon</a></p>]]></content><author><name></name></author><category term="it" /><summary type="html"><![CDATA[Irgendwas mit Gartenbau...]]></summary></entry><entry><title type="html">The 🚙-Trolls on Kanalveien</title><link href="https://foldr.org/~vs/blog/2025/07/06/Kanalveien.html" rel="alternate" type="text/html" title="The 🚙-Trolls on Kanalveien" /><published>2025-07-06T09:00:00+02:00</published><updated>2025-07-06T09:00:00+02:00</updated><id>https://foldr.org/~vs/blog/2025/07/06/Kanalveien</id><content type="html" xml:base="https://foldr.org/~vs/blog/2025/07/06/Kanalveien.html"><![CDATA[<p><img src="/~vs/blog/assets/img/Minde%20HVL%201.png" alt="Map of Kanalveien" style="float: right; width: 50%; padding-left: 5px;" /></p>

<p>I have a little axe to grind with the general design of the urban bike-architecture around <a href="https://www.openstreetmap.org/#map=16/60.36574/5.34561">Kanalveien in Bergen</a>, which is part of my morning commute. The dedicated bike path coming from the south swings nicely via Kronstad X around the campus in case I want to get to the bike cage (top-left to (1) top-right)– it’s not a straight line, it adds a bit of uphill, but it’s still acceptable since it’s so nicely done! In fact I can hardly remember how it used to be a few years ago! Only caveat is the roundabout top-left, one of the two places in town where bikes actually have priority over cars, and you just have to anticipate that Driver McDriveface doesn’t yield. (In fact I just added the “Yield”-signs in OpenStreetMap, maybe this eventually percolates down into route-planners with an appropriate warning…)</p>

<p>In case I want to directly head to my “block” on campus or the carpark with the changing rooms (2), there’s a short er path from (3) either via the Posten-terminal, or if I’m on the acoustic bike, quickly carrying it up a flight of stairs and getting directly to the campus.</p>

<p>However, this variation requires me to cross Minde Allée, and oh boy does this get the blood pressure going.</p>

<ul>
  <li>
    <p>if I want to cross on the right-hand side (3b), I can use a zebra-crossing to get onto Kanalveien and pretend to be a car. Due to the eventually planned construction, there’s no sidewalk continuing in this direction.
If I want to bike straight through the intersection, the detector-controlled traffic-light doesn’t register my bike :-/</p>
  </li>
  <li>
    <p>if I stay on the left-hand side bike path (3a), I have to beg at the traffic light for green light.  The traffic light with the button is placed so close to the road, that your wheel basically dangles into the lane.</p>
  </li>
</ul>

<p>The tram is also crossing here, and wouldn’t it be nice if the (parallel) pedestrian/bike-crossings would have green when cars have red due to the tram (right-turns not withstanding)?</p>

<h2 id="lets-call-the-rule-lawyer">Let’s call the rule-lawyer</h2>

<p>So I thought I’d do some digging in the regulations, and – lo! – it seems both cases are a bit fishy: detectors should detect bikes, and buttons <del>must</del> should be positioned not too close to the road. I think I saw something similar about the detector.</p>

<p>The latter is a clear concern (it’s a SHOULD, not MUST) in <a href="https://www.vegvesen.no/fag/publikasjoner/handboker/vegnormalene/n303/">“Trafikksignalanlegg Håndbok N303 / 4.5.2 Detaljplassering av signaler”, web</a>:</p>

<blockquote>
  <p>Avstand fra kjørebanen</p>

  <p>Signaler som monteres ved siden av kjørebanen, bør ha en avstand på minst 0,5 meter fra nærmeste kjørebanekant.</p>
</blockquote>

<p>There’s also a note in the draft <a href="https://www.vegvesen.no/globalassets/fag/horinger/2013/2013033341-hb233-frist-20130430/hb233-sykkelhandboka-hoeringsutg.pdf">“Sykkelhandboka V122”, PDF</a>:</p>
<blockquote>
  <p>6.4 Skilt, trafikklyssignaler og belysning</p>

  <p>Trykknapp bør heller ikke plasseres så nær kryssende kjørebane at det er fare for at forhjulet &gt; på sykkelen kommer ut på skulder/kjørebanekant når syklisten skal betjene knappen.</p>
</blockquote>

<p>This SHOULD (“bør”) means that there should be accompanying documentation with the Fylkeskommune why they thought it’d be okay.</p>

<h2 id="wherein-someone-else-has-opinions">Wherein someone else has opinions</h2>

<p>So in preparation for the “FOI”-request for this supporting documentation, I dug around on what’s already on file for Kanalveien, and I found this beauty of a request to the <em>kommune</em> from someone who obviously drives car way too much too often through said roundabout top-left:</p>

<blockquote>
  <p>Sykkelvei krysser vei. Burde vært trafikklys.</p>

  <p>I nordenden av Kanalveien i Bergen krysser en sykkelvei (vei nr 39) fylkesveien
like ved en rundkjøring. For dem som kommer kjørende sørfra er det svært
vanskelig å se syklistene som kommer rundt en sving i stor fart. Dette er også
den eneste overgangen i Bergen der syklistene ikke må gå av sykkelen og der
det heller ikke er lysregulert. Jeg har sett flere nestenulykker i dette krysset, og
for sjåfører som ikke er lokalkjent, er det nesten umulig å vite at overgangen
også gjelder syklister og at de dermed kommer i stor fart. Håper det går an å få
lysregulert denne overgangen før noen blir påkjørt!</p>
</blockquote>

<figure style="float: right; width: 50%; padding-left: 5px;">
  <img src="/~vs/blog/assets/img/Kanalveien%20Yield.png" alt="Aerial pic of roundabout" />
  <figcaption>Aerial pic of the roundabout on northern Kanalveien, showing where the bike-path intersects Fv.5328 right at the roundabout.</figcaption>
</figure>

<p>I’m paraphrasing this official message to the council which just drips of privilege:</p>
<ul>
  <li>“There should be a traffic-light” – and we can presume that the correspondent doesn’t mean it’s perma-green for bikes unless a car comes, <em>ikke sant</em>?</li>
  <li>“The only bike-crossing in Bergen where bikers don’t have to push their bike across.” – no, I think it’s one of two and where are my blood pressure pills again?!</li>
  <li>“If you’re from out of town, you can’t know that bikes have priority” – oh sweet child, if we’d only have signs and road-markings. Oh, wait we do, see aerial photo in Exhibit B :-)</li>
</ul>

<p>Maybe I should just suck it up and bike the long way round and try not to get bumped at the roundabout. I haven’t finished min-maxing my commute yet, anyways, gotta get the GPS-traces off the phone and see how much the different paths … differ. Wouldn’t be surprised if it’s mostly a psychological thing. Oh, and do note: the bike-path is already a ca. 1.4km detour (6.6km vs. 8km) versus the direct line biking on roads from Nesttun.</p>

<p>Anyway, next time I bike (<strong>almost</strong> holidays here!), I’ll measure the distance between pole and  road and see if this needs some more digging.</p>]]></content><author><name></name></author><category term="norsk," /><category term="bikes," /><category term="cars," /><category term="Bergen" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Proof that GitHub doesn’t love you</title><link href="https://foldr.org/~vs/blog/2025/07/04/GithubDoesntLoveYou.html" rel="alternate" type="text/html" title="Proof that GitHub doesn’t love you" /><published>2025-07-04T09:00:00+02:00</published><updated>2025-07-04T09:00:00+02:00</updated><id>https://foldr.org/~vs/blog/2025/07/04/GithubDoesntLoveYou</id><content type="html" xml:base="https://foldr.org/~vs/blog/2025/07/04/GithubDoesntLoveYou.html"><![CDATA[<p>Recently I wanted to check the list of contributors to an open source repository hosted on GitHub.com,
<a href="https://github.com/ott-lang/ott/graphs/contributors">https://github.com/ott-lang/ott/graphs/contributors</a> concretely,
to avoid embarrassing myself with a potentially silly question at <a href="https://2025.ecoop.org/home/plss-2025">PLSS</a>.</p>

<p>Turns out that the “Contributors”-view on GitHub.com doesn’t tell you much. Below is an excerpt:</p>

<p><img src="/~vs/blog/assets/img/github-no-love.png" alt="GitHub screenshot from Contributors-UI" /></p>

<p>They only show the GitHub user-names, which is less than helpful – I have no clue who “bacam” is/could be.
Of course GitHub knows, as the image above shows when hovering over the avatar.
I guess someone should open a ticket at GitHub HQ…</p>]]></content><author><name></name></author><category term="open-source," /><category term="ecoop" /><summary type="html"><![CDATA[Recently I wanted to check the list of contributors to an open source repository hosted on GitHub.com, https://github.com/ott-lang/ott/graphs/contributors concretely, to avoid embarrassing myself with a potentially silly question at PLSS.]]></summary></entry><entry><title type="html">MyCloud NAS &amp;amp; IPv6</title><link href="https://foldr.org/~vs/blog/2025/01/19/MyCloudMy-N-AS.html" rel="alternate" type="text/html" title="MyCloud NAS &amp;amp; IPv6" /><published>2025-01-19T08:00:00+01:00</published><updated>2025-01-19T08:00:00+01:00</updated><id>https://foldr.org/~vs/blog/2025/01/19/MyCloudMy%5BN%5DAS</id><content type="html" xml:base="https://foldr.org/~vs/blog/2025/01/19/MyCloudMy-N-AS.html"><![CDATA[<blockquote>Irgendwas mit Gartenbau...</blockquote>

<p>So we had “non-deterministic” issues connecting to our Western Digital MyCloud NAS on the home network…until I started drilling down into it.
Our workaround was typing in its local IPv4 address instead of <code class="language-plaintext highlighter-rouge">nas.local</code>. Which is of course annoying. So the non-determinism was whether we were running
with IPv6 enabled or not on the laptops, which changes a bit, since I’m using a tunnel to <a href="https://tunnelbroker.net">HE.net</a> which terminates in Sweden and
messes up the occassional geo-ip.</p>

<p>It turns out it started breaking when I turned on IPV6, since the management interface listens on <code class="language-plaintext highlighter-rouge">*:80</code>, but on IPv6 you only get 403s:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>% curl -v -o /dev/null http://192.168.10.2
* Connected to 192.168.10.2 (192.168.10.2) port 80
&gt; GET / HTTP/1.1
&gt; Host: 192.168.10.2
&gt; User-Agent: curl/8.7.1
&gt; Accept: */*
&gt; 
&lt; HTTP/1.1 200 OK

% curl -v -o /dev/null http://nas.local   
* IPv6: 2001:470:...
* IPv4: 192.168.10.2
*   Trying [2001:470:...]:80...
* Connected to vnest.local (2001:470:...) port 80
&gt; GET / HTTP/1.1
&gt; Host: nas.local
&gt; User-Agent: curl/8.7.1
&gt; Accept: */*
&gt; 
&lt; HTTP/1.1 403 Forbidden

</code></pre></div></div>

<p>Well done, Western Digital, well done.</p>

<p>There <strong>is</strong> a configuration file on the NAS in <code class="language-plaintext highlighter-rouge">/etc/nasAdmin.toml</code> which defines listening <em>ports</em>, but not addresses,
and I’m not getting paid for reverse-engineering their crap.</p>

<p>So any IPv6 connections to port 80 are now terminated by OPNSense, which at least helps clients on the wifi, though not necessarily the
…<em>checks notes</em>… single computer connected to the Ethernet.</p>]]></content><author><name></name></author><category term="it,ipv6" /><summary type="html"><![CDATA[Irgendwas mit Gartenbau...]]></summary></entry><entry><title type="html">AMP – Asynchronous Programming Models Workshop (Torino/IT)</title><link href="https://foldr.org/~vs/blog/2024/10/02/AMP.html" rel="alternate" type="text/html" title="AMP – Asynchronous Programming Models Workshop (Torino/IT)" /><published>2024-10-02T09:00:00+02:00</published><updated>2024-10-02T09:00:00+02:00</updated><id>https://foldr.org/~vs/blog/2024/10/02/AMP</id><content type="html" xml:base="https://foldr.org/~vs/blog/2024/10/02/AMP.html"><![CDATA[<!--
  Opening: https://cloud.elang.de/s/DW2aZJnacQBjps2
	https://cloud.elang.de/apps/files_sharing/publicpreview/DW2aZJnacQBjps2?file=/&fileId=465025&x=3352&y=1884&a=true&etag=11f2a95a7e394ac9d7516eed4ff049c2
  Paola: https://cloud.elang.de/s/9nKtYkmJfWCtKw9
	https://cloud.elang.de/apps/files_sharing/publicpreview/9nKtYkmJfWCtKw9?file=/&fileId=465026&x=3352&y=1884&a=true&etag=500d8efdf67940ae4a36fba77f09923d
  Einar: https://cloud.elang.de/s/JTSJinmz8rMRZxW
	https://cloud.elang.de/apps/files_sharing/publicpreview/JTSJinmz8rMRZxW?file=/&fileId=465117&x=3352&y=1884&a=true&etag=1767b296892ca8ae02179711746d2e23
  Audience: https://cloud.elang.de/s/JQsqdmMRkErJHNJ
	https://cloud.elang.de/apps/files_sharing/publicpreview/JQsqdmMRkErJHNJ?file=/&fileId=465034&x=3352&y=1884&a=true&etag=6386581b161657ab9f286c274c3c3f9b
-->

<p>Ferruccio Damiani is hosting this year’s <a href="https://edkamb.github.io/APM_24/">Asynchronous Programming Models workshop</a> in Torino!</p>

<p>All things around <em>active objects</em> from PhD students, post-docs and faculty, with plenty of room for discussions and figuring out where to go next and making new collaborations.</p>

<div style="width:100%;">
  <figure>
	<img src="https://cloud.elang.de/apps/files_sharing/publicpreview/DW2aZJnacQBjps2?file=/&amp;fileId=465025&amp;x=3352&amp;y=1884&amp;a=true" style="max-width:100%;" />
	<figcaption>Ferruccio Damiani opening the workshop; Mariangiola Dezani-Ciancaglini with first talk on <q>Asynchronous Multiparty Sessions with Internal Delegation</q></figcaption>
  </figure>
  <figure>
	<img src="https://cloud.elang.de/apps/files_sharing/publicpreview/9nKtYkmJfWCtKw9?file=/&amp;fileId=465026&amp;x=3352&amp;y=1884&amp;a=true" />
	<figcaption>Paola Giannini on <q>Global Types for Agent Interaction Protocols</q></figcaption>
  </figure>
  <figure>
	<img src="https://cloud.elang.de/apps/files_sharing/publicpreview/JTSJinmz8rMRZxW?file=/&amp;fileId=465117&amp;x=3352&amp;y=1884&amp;a=true" />
	<figcaption><a href="https://mastodon.social/@ebjohnsen@types.pl">Einar Broch Johnsen</a> on <q>Proving Correctness of Parallel Implementations of Transition System Models</q>. This is the outcome of a multi-year research effort, finally paying off only recently in a TOPLAS-publication. Head over to <a href="https://ebjohnsen.org/publication/">Einar's</a> or <a href="https://violet.foldr.org/publication/">Violet's site</a> for the preprint.</figcaption>
  </figure>
  <figure>
	<img src="https://cloud.elang.de/apps/files_sharing/publicpreview/JQsqdmMRkErJHNJ?file=/&amp;fileId=465034&amp;x=3352&amp;y=1884&amp;a=true" />
	<figcaption>Partial shot of the audience at AMP in the Mathematics building of U.Torino</figcaption>
  </figure>
</div>

<p>Unfortunately I missed a session and wasn’t always in a good spot to take photos.</p>]]></content><author><name></name></author><category term="science" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">JEMP! Or: European Heritage Days</title><link href="https://foldr.org/~vs/blog/2024/09/24/jemp.html" rel="alternate" type="text/html" title="JEMP! Or: European Heritage Days" /><published>2024-09-24T09:00:00+02:00</published><updated>2024-09-24T09:00:00+02:00</updated><id>https://foldr.org/~vs/blog/2024/09/24/jemp</id><content type="html" xml:base="https://foldr.org/~vs/blog/2024/09/24/jemp.html"><![CDATA[<p><img src="https://cloud.elang.de/apps/files_sharing/publicpreview/dNBsgpKebgwWF64?file=/&amp;fileId=463335&amp;x=1676&amp;y=942&amp;a=true" width="20%" alt="bikes" style="float: right;" /></p>

<p>So for the <a href="https://www.europeanheritagedays.com">JEMP</a> (as they say here in Rennes) I got myself a city-bike for the weekend (10 EUR/day) at the <a href="https://www.star.fr/se-deplacer/velo/maison-du-velo">Maison du vélo</a> next to the train station to explore the city a bit. Weather forecast was favourable-ish, with the usual disclaimer about this being Britanny and all that.</p>

<div style="clear: both;" />

<p>First stop: the Jacques-Cartier prison. Closed in the early naughties, a bit in a state of disrepair. Apparently it was super-popular, I had to queue 45 mins in the drizzle – for about a 30 min visite. Probably more “fun” for kids, though the historic panopticon design is eye-catching.</p>

<div align="center">
  <img src="https://cloud.elang.de/apps/files_sharing/publicpreview/t3xa6MmHt5eSTt4?file=/&amp;fileId=463280&amp;x=2560&amp;y=1440&amp;a=true" width="20%" />
  <img src="https://cloud.elang.de/apps/files_sharing/publicpreview/GAZNi3fZgZM5MZA?file=/&amp;fileId=463279&amp;x=2560&amp;y=1440&amp;a=true" width="20%" />
  <img src="https://cloud.elang.de/apps/files_sharing/publicpreview/cB67NqbLR8qBKej?file=/&amp;fileId=463276&amp;x=2560&amp;y=1440&amp;a=true" width="20%" />
<br />
<p>Prison Break! Fortunately they left the doors open in Jacques-Cartier.</p>
</div>

<p><img src="https://cloud.elang.de/apps/files_sharing/publicpreview/b8oopeH5AcTWaoY?file=/&amp;fileId=463294&amp;x=2560&amp;y=1440&amp;a=true" width="20%" alt="Vilaine river with boats" style="float: right;" /></p>

<p>After that I cruised out to the <em>etangs</em>, and the long way back along the Vilaine right into the heart of the city, through and out the other and to the <a href="https://www.terre.defense.gouv.fr/musee-transmissions">Musée des Transmissions</a>. Mostly military, but they have two Enigmas and some other interesting gear.</p>

<p>On the second day, Brittany was very Brittany in the morning, so I didn’t bike out the 10km to the Sunday market in Betton (why would I, given that the Rennes Saturday market is the second biggest in France!) and didn’t get out until the afternoon guided tour at the Centre Hospitalier Guillaume Régnier, a huge psychiatrique complex. I was a bit worried that they wouldn’t let me out again…Not much historic buildings, and a bit too much French and medical history. Included a stint at <a href="https://metropole.rennes.fr/bois-perrin-un-nouveau-quartier-bas-carbone">Bois Perrin</a>, the historic childrens’ section that will be revamped into a low-carbon quarter.</p>

<div align="center">
  <img src="https://cloud.elang.de/apps/files_sharing/publicpreview/n52gccjigCkKanD?file=/&amp;fileId=463306&amp;x=2560&amp;y=1440&amp;a=true" alt="garden with chapel" width="20%" />
  <img src="https://cloud.elang.de/apps/files_sharing/publicpreview/fNtiPb9B8f9qYHa?file=/&amp;fileId=463304&amp;x=2560&amp;y=1440&amp;a=true" alt="tiles" width="20%" />
<br />
<p>Impressions at Centre Hospitalier Guillaume Régnier.</p>
</div>

<p>Weather looking nice, I biked out across the Rochade to the <a href="https://www.ecomusee-rennes-metropole.fr">Écomusée de la Bintinais</a>, a historic farm with animals, guerilla cooking and a museum. Ironic that you’d have the constant hum of the highway in the background, and the “thermal power-plant” (vulgo: waste incinerator) in the background.</p>

<figure>
  <img src="https://cloud.elang.de/apps/files_sharing/publicpreview/HoW8PDRKjs9WBNB?file=/&amp;fileId=463311&amp;x=2560&amp;y=1440&amp;a=true" width="40%" alt="meadow with cows" />
  <figcaption><q>La Vache Qui Rit</q> somewhere on the horizon at Bintinais</figcaption>
</figure>

<p>Dropped off the bike an hour early back at the train station, which was the right choice since it started piXXing down not much later.</p>

<div align="center">
  <img src="https://cloud.elang.de/apps/files_sharing/publicpreview/3rF5bAas4a44t5t?file=/&amp;fileId=463310&amp;x=2560&amp;y=1440&amp;a=true" alt="Construction on Pleine de Baud" width="20%" />
  <img src="https://cloud.elang.de/apps/files_sharing/publicpreview/rKyFY5FWp6ixLyY?x=2560&amp;y=1440&amp;a=true" alt="Rennes train station" width="20%" />
<br />
<p>Dramatic weather at Plaine de Baud and the train station.</p>
</div>

<p>9/10, would do again, but probably spend more time adjusting the bike/height of the saddle. Also I think I finally get the hang of NextCloud photo management, but more automation is needed…</p>]]></content><author><name></name></author><category term="tourism" /><category term="rennes" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">🏰 ¡Losing is fun!</title><link href="https://foldr.org/~vs/blog/2024/07/03/losing-is-fun.html" rel="alternate" type="text/html" title="🏰 ¡Losing is fun!" /><published>2024-07-03T09:00:00+02:00</published><updated>2024-07-03T09:00:00+02:00</updated><id>https://foldr.org/~vs/blog/2024/07/03/losing-is-fun</id><content type="html" xml:base="https://foldr.org/~vs/blog/2024/07/03/losing-is-fun.html"><![CDATA[<p>Found out about “Whisky” on MacOS and … well, that happened: <a href="https://www.reddit.com/r/dwarffortress/comments/16tv5nh/dwarf_fortress_for_mac_is_finally_possible_and/">Dwarf Fortress for Mac is finally possible - and easy to set up!</a>.</p>

<p>Remember: <a href="http://www.bay12games.com/dwarves/">¡Losing is fun!</a> I’m glad I didn’t see this post earlier in the semester 😆</p>

<p>Now I just have to understand the library-overrides and see if there’s a way to fix “Mørkredd” (trips on OpenGL).</p>

<h1 id="update-2024-07-07">Update 2024-07-07</h1>

<p>Oh wow, the developers nuked the keyboard-commands and there are now essential parts in Dwarf Fortress that are mouse-only, for example the job-orders.
Scheduling a full set of leather armor with all the components now takes like … IDK, couldn’t be bothered to click all of this in yet.</p>

<p>Naturally, fans of the original are not amused (discussion on <a href="https://steamcommunity.com/app/975370/discussions/0/3709307511569514976/">Steam</a>, on <a href="https://www.reddit.com/r/dwarffortress/comments/146tqga/missing_keyboard_only/">Reddit</a>).</p>

<p>Folks may complain about the accessibility of the original, but there was probably no need to break it while adding an alternative (unless the architecture really makes it impossible).</p>]]></content><author><name></name></author><category term="dwarffortress" /><category term="games" /><summary type="html"><![CDATA[Found out about “Whisky” on MacOS and … well, that happened: Dwarf Fortress for Mac is finally possible - and easy to set up!.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://foldr.org/~vs/blog/assets/img/df_icon.jpg" /><media:content medium="image" url="https://foldr.org/~vs/blog/assets/img/df_icon.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Es gibt Brot!</title><link href="https://foldr.org/~vs/blog/2024/07/01/brot.html" rel="alternate" type="text/html" title="Es gibt Brot!" /><published>2024-07-01T09:31:46+02:00</published><updated>2024-07-01T09:31:46+02:00</updated><id>https://foldr.org/~vs/blog/2024/07/01/brot</id><content type="html" xml:base="https://foldr.org/~vs/blog/2024/07/01/brot.html"><![CDATA[<p>Endlich ist es mal was geworden! Mjamm!</p>

<div>
<img src="https://cloud.elang.de/s/wF6p2asnLmJCx2B/download/24-07-01%2008-19-41%207942.jpg" alt="Brot (a)" width="45%" />
<img src="https://cloud.elang.de/s/dTtpd2cAA4Y3Eqj/download/24-07-01%2008-20-23%207943.jpg" alt="Brot (b)" width="45%" />
</div>

<p>TODO: How to strip location-data from Nextcloud-pics…And why are these links so weird?</p>]]></content><author><name></name></author><category term="brot" /><category term="todo" /><summary type="html"><![CDATA[Endlich ist es mal was geworden! Mjamm!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cloud.elang.de/s/dTtpd2cAA4Y3Eqj/download/24-07-01%2008-20-23%207943.jpg" /><media:content medium="image" url="https://cloud.elang.de/s/dTtpd2cAA4Y3Eqj/download/24-07-01%2008-20-23%207943.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">In Hot Water</title><link href="https://foldr.org/~vs/blog/2024/06/30/in-hot-water.html" rel="alternate" type="text/html" title="In Hot Water" /><published>2024-06-30T11:11:46+02:00</published><updated>2024-06-30T11:11:46+02:00</updated><id>https://foldr.org/~vs/blog/2024/06/30/in-hot-water</id><content type="html" xml:base="https://foldr.org/~vs/blog/2024/06/30/in-hot-water.html"><![CDATA[<p>I still have a pretty long to-do list for my home-automation with <a href="https://www.home-assistant.io">Home Assistant</a>, mostly related to “peak-shaving”.</p>

<p>One obstacle that I needed 15 mins of free mental cycles for was figuring out how to correctly control if the hot water tank should be running or not based on a time interval. A quick hack with HA’s built-in scripting turned out to be … meh: I want to have an interval with start- and end-time (which I’m setting based on electricity spot-price), and I hadn’t figured out how to handle the corner-case of a wrap around (e.g., start: 23:00, end 06:00) correctly, because the simple logic available (<code class="language-plaintext highlighter-rouge">start &lt; now &lt; end</code>) doesn’t work in that case, and would need severe, repeated, special-casing in the HA automation.</p>

<p>So I decided to end this once and for all with yet another <code class="language-plaintext highlighter-rouge">template</code>-sensor that tells me if we’re within the interval or not:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> (now() &gt; today_at(states.input_datetime.water_on.state) and
      ((today_at(states.input_datetime.water_on.state) &lt; today_at(states.input_datetime.water_off.state) and now() &lt; today_at(states.input_datetime.water_off.state))
   or (today_at(states.input_datetime.water_on.state) &gt; today_at(states.input_datetime.water_off.state))))
   or (today_at(states.input_datetime.water_on.state) &gt; today_at(states.input_datetime.water_off.state) and now() &lt; today_at(states.input_datetime.water_off.state))
</code></pre></div></div>

<p>It’s still mind-boggingly convoluted, but seems about right; could probably be simplified.</p>

<p>TODO: why does the code need a scroll-bar…</p>]]></content><author><name></name></author><category term="homeautomation" /><category term="todo" /><summary type="html"><![CDATA[I still have a pretty long to-do list for my home-automation with Home Assistant, mostly related to “peak-shaving”.]]></summary></entry></feed>