<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://lukas-prokop.at/feed.xml" rel="self" type="application/atom+xml" /><link href="https://lukas-prokop.at/" rel="alternate" type="text/html" /><updated>2026-04-10T12:54:37+02:00</updated><id>https://lukas-prokop.at/feed.xml</id><title type="html">Lukas’ weblog</title><subtitle>My weblog about life, languages, culture and technology</subtitle><author><name>Lukas Prokop</name></author><entry xml:lang="en"><title type="html">Nova Gorica in Izola</title><link href="https://lukas-prokop.at/articles/2026-04-09-nova-gorica-and-izola" rel="alternate" type="text/html" title="Nova Gorica in Izola" /><published>2026-04-09T22:00:00+02:00</published><updated>2026-04-10T03:10:09+02:00</updated><id>https://lukas-prokop.at/articles/2026-04-09-nova-gorica-and-izola</id><content type="html" xml:base="https://lukas-prokop.at/articles/2026-04-09-nova-gorica-and-izola"><![CDATA[<div class="sect1">
<h2 id="context">Context</h2>
<div class="sectionbody">
<div class="paragraph">
<p>I spent the previous weekend in Nova Gorica. With friends, we also got to Izola.</p>
</div>
<div class="paragraph">
<p>Nova Gorica is interesting. Just to cite some random facts:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>The Austrian-Hungarian Empire reached to Nova Gorica which you identify by looking at the architecture.</p>
</li>
<li>
<p>Nova Gorica borders Italy. In <a href="https://en.wikipedia.org/wiki/Treaty_of_Paris_between_Italy_and_the_Allied_Powers">1947</a>, Gorizia was assigned to Italy and the Slovenian population started building Nova Gorica on the Yugoslavian side of the border. The border essentially follows along the train tracks.</p>
</li>
<li>
<p>A friend from central Slovenia claimed that Slovenian people consider it as one of the most remote regions because it is so much in the West.</p>
</li>
<li>
<p>The Slovenian border awkwardly does not reach <a href="https://www.openstreetmap.org/node/13414132863#map=10/45.8508/13.5805">the sea if you travel to the south</a>, because Trieste is assigned to Italy. The Slovenian harbors with the Adriatic Sea can be found in cities like Piran, Izola, and Koper. We also went to Izola for one day in Southern Slovenia.</p>
</li>
<li>
<p>I accept the wording “Balkan” only in a geographical context at this point. Nova Gorica is north of Triest and thus not considered to be part of the “Balkan” peninsula.</p>
</li>
</ol>
</div>
</div>
</div>
<div class="sect1">
<h2 id="pictures">Pictures</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="nova-gorica">Nova Gorica</h3>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-03_gorizia_border.jpg"><img src="../assets/img/2026-04-03_gorizia_border.jpg" alt="A street is shown with parking lots and a border sign with Italia and Gorizia is shown in the center" width="50%"></a>
</div>
<div class="title">Figure 1. EU border sign towards Gorizia/Italy (on purpose with exaggerated contrast)</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-03_Rožna_Dolina.jpg"><img src="../assets/img/2026-04-03_Rožna_Dolina.jpg" alt="A photo towards the horizon down from a hill shows many red-colored roofs between plenty of plants" width="50%"></a>
</div>
<div class="title">Figure 2. Another look towards Gorizia from the ground of the monastery</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-03_Frančiškanski_samostan_Kostanjevica.jpg"><img src="../assets/img/2026-04-03_Frančiškanski_samostan_Kostanjevica.jpg" alt="A Christian monastery on top of a hill is shown with a white facade and brown-blue windows" width="50%"></a>
</div>
<div class="title">Figure 3. Monastery Frančiškanski samostan Kostanjevica</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-04_merkator_supermarket.jpg"><img src="../assets/img/2026-04-04_merkator_supermarket.jpg" alt="A random scene in a supermarket where elderly search for items and the picture shows the aisles to left and right" width="50%"></a>
</div>
<div class="title">Figure 4. Supermarket ‘Merkator’</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-04_bridges_in_solkan.jpg"><img src="../assets/img/2026-04-04_bridges_in_solkan.jpg" alt="A river is shown in the lower center of the picture and a large bridge in the center connects elevated parts of the surrounding mountains" width="50%"></a>
</div>
<div class="title">Figure 5. Solkan (Northern Nova Gorica) with the river Soča</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-04_solkan_bridge.jpg"><img src="../assets/img/2026-04-04_solkan_bridge.jpg" alt="a metallic bridge is similar with few people passing over" width="50%"></a>
</div>
<div class="title">Figure 6. A bridge crossing river Soča for bicycles and pedestrians in Solkan</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-06_vila_rafut.jpg"><img src="../assets/img/2026-04-06_vila_rafut.jpg" alt="An abandoned villa is shown which combines arabic egyptian and european architectural elements but the facade is mostly lost and only bricks are shown" width="100%"></a>
</div>
<div class="title">Figure 7. Vila Rafut</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-06_vila_rafut_tower.jpg"><img src="../assets/img/2026-04-06_vila_rafut_tower.jpg" alt="the center tower of villa Rafut is shown and it is made of stone" width="25%"></a>
</div>
<div class="title">Figure 8. Tower</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-06_vila_rafut_balcony.jpg"><img src="../assets/img/2026-04-06_vila_rafut_balcony.jpg" alt="wooden balcony of the villa" width="50%"></a>
</div>
<div class="title">Figure 9. Balcony</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-06_rafutski_park_bamboo.jpg"><img src="../assets/img/2026-04-06_rafutski_park_bamboo.jpg" alt="many bamboo branches reach into the image center creating a purely green image" width="50%"></a>
</div>
<div class="title">Figure 10. Bamboo in the forest next to Vila Rafut</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-06_rafutski_park_artwork_by_visitors.jpg"><img src="../assets/img/2026-04-06_rafutski_park_artwork_by_visitors.jpg" alt="In the middle of the sandy pedestrian area someone placed branches and rocks in a circle to create a mystical symbol" width="50%"></a>
</div>
<div class="title">Figure 11. Artwork created by visitors</div>
</div>
</div>
<div class="sect2">
<h3 id="izola">Izola</h3>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-05_izola_city.jpg"><img src="../assets/img/2026-04-05_izola_city.jpg" alt="From an elevated point a picture shows the brick- or red-colored roofs of Izola" width="50%"></a>
</div>
<div class="title">Figure 12. Izola city</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-05_izola_towards_koper.jpg"><img src="../assets/img/2026-04-05_izola_towards_koper.jpg" alt="Another photo from an elevated point which follows along the roof of the building where the picture is taken and the horizon now shows sea but a peninsula enters from the right" width="50%"></a>
</div>
<div class="title">Figure 13. Photo from Izola towards Koper</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-05_izola_harbor.jpg"><img src="../assets/img/2026-04-05_izola_harbor.jpg" alt="A harbor is shown with a large amount of sailing boats and one motorboat is passing by in front of the camera" width="50%"></a>
</div>
<div class="title">Figure 14. Izola harbor</div>
</div>
</div>
<div class="sect2">
<h3 id="funny-or-artistic">Funny or artistic</h3>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-04_spring_flowers.jpg"><img src="../assets/img/2026-04-04_spring_flowers.jpg" alt="A tiny garden between the pavement is shown with many flowers of different kind and colors" width="50%"></a>
</div>
<div class="title">Figure 15. Spring made some flowers flourish</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-06_tree_tops.jpg"><img src="../assets/img/2026-04-06_tree_tops.jpg" alt="A picture straight up into the sky is shown and tops of five trees point towards the center" width="50%"></a>
</div>
<div class="title">Figure 16. Tree tops</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-06_bee_hives.jpg"><img src="../assets/img/2026-04-06_bee_hives.jpg" alt="Two wooden bee hives are shown with many bees passing through a slid to enter their bee hive" width="50%"></a>
</div>
<div class="title">Figure 17. Bees and their behaviour is so interesting</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-06_pathway.jpg"><img src="../assets/img/2026-04-06_pathway.jpg" alt="an unmaintained pathway is shown which is still recognizable because individual stones are placed as flat surface and stones are elevated on the side to create a path boundary" width="50%"></a>
</div>
<div class="title">Figure 18. Pathway</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-06_maze.jpg"><img src="../assets/img/2026-04-06_maze.jpg" alt="The picture shows bamboo tied together to create a wall that pedestrians have to follow" width="50%"></a>
</div>
<div class="title">Figure 19. A maze is creating by tying bamboo together</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-04_pig-shaped_meat"><img src="../assets/img/2026-04-04_pig-shaped_meat.jpg" alt="some meat paste presented in the supermarket is shaped into the head of a pig" width="50%"></a>
</div>
<div class="title">Figure 20. Amuzingly presented meat product in the shape of a pig</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-05_badly-drawn"><img src="../assets/img/2026-04-05_badly-drawn-dog-illustration.jpg" alt="A sign in the field indicates that dogs must not defecate here but the dog has long neck appearing like a lama" width="50%"></a>
</div>
<div class="title">Figure 21. Exceptionally bad drawn dog on a sign appearing like a lama</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="summary">Summary</h2>
<div class="sectionbody">
<div class="paragraph">
<p>So the title of the blog post is Slovenian, because we stayed majorily in Slovenia. “in” is Slovenian for “and”. In general, there are not many sightseeing points, but the people are so relaxed and friendly. It is very reachable from Austria by train and perfect to relax and stroll around. Unlike common cities in Austria, the pedestrian areas are not completely sealed, but many trees provide shade and contribute a greener city image.</p>
</div>
</div>
</div>]]></content><author><name>Lukas Prokop</name></author><category term="life" /><category term="media" /><summary type="html"><![CDATA[Context]]></summary></entry><entry xml:lang="en"><title type="html">Esperanto verbs, the curious case of igi/iĝi, and (in)transitiveness</title><link href="https://lukas-prokop.at/articles/2026-04-02-esperanto-verbs" rel="alternate" type="text/html" title="Esperanto verbs, the curious case of igi/iĝi, and (in)transitiveness" /><published>2026-04-02T12:00:00+02:00</published><updated>2026-04-09T00:38:48+02:00</updated><id>https://lukas-prokop.at/articles/2026-04-02-esperanto-verbs</id><content type="html" xml:base="https://lukas-prokop.at/articles/2026-04-02-esperanto-verbs"><![CDATA[<div class="paragraph">
<p><strong>Update 2026-04-05:</strong> I put the examples into a table instead of bullet points for improved comprehension.<br>
<strong>Update 2026-04-09:</strong> I added references to the Akademio-de-Esperanto articles.</p>
</div>
<div class="sect1">
<h2 id="motivation">Motivation</h2>
<div class="sectionbody">
<div class="paragraph">
<p>One aspect of Esperanto grammar I am still struggling with, is verbs. I am by no means the only one. I do remember almost 3 years ago, I went back from the Universala kongreso in Turin after taking my B1 exam and being confused about the semantics of igi/iĝi suffixes. During the multi-hour ride, my friend and I built up a basic understanding along common explanation practices. About one year ago, I mentioned that I want to sum it up in a blog post and another Esperantist told me to share it, because they get confused about it as well. I do believe the accusative case and transitiveness are the two most common issues Esperantists struggle with. Unlike the former, I found the latter cannot be explained easily and to some extent they are intertwined.</p>
</div>
<div class="paragraph">
<p>Let&#8217;s dive into the topic of “how do Esperanto verbs operate?”</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="verbs">Verbs</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Fundamentally, verbs in a language describe actions or relations between entities. “I love you” yields a (at least unidirectional) love between ‘I’ and ‘you’. “I became an Aikido trainer” yields that ‘I’ attained a certain property (or relation) ‘being an Aikido trainer’.</p>
</div>
<div class="sect2">
<h3 id="linguistic-concepts">Linguistic concepts</h3>
<div class="paragraph">
<p>If we look at other languages, there are various associated concepts. I am going to use languages I am familiar with here.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>In German, one can say “Ich backe einen Kuchen” (en. “I bake a cake” or “I am baking a cake”). In my elementary school, one of the biggest deals was understanding that ‘Ich’ is a <em>subject</em> and ‘einen Kuchen’ is an <em>object</em>. The concept of subject/object is fundamental, but my favorite linguist taught me that this concept is language-specific and easily misunderstood. But we are going to stick to it here. In this German sentence, the nominative element is unambiguously ‘Ich’ (accusative would be ‘mich’) and the accusative element is ‘einen Kuchen’ (nominative would be ‘ein Kuchen’). So we just define that the subject is the element in nominative case and the object is in the accusative case. And in Esperanto we can use the same terminology, since every accusative element is distinguishable from the nominative element by the -n suffix.</p>
</li>
<li>
<p>In German, I can turn around the sentence and hide the subject: “Ein Kuchen wird gebacken” (en. “A cake is baked” or “A cake is being baked”). Here, we have no accusative. Recognize that the <strong>object</strong> in the previous example is the <strong>subject</strong> in this example. This form is what is called <em>passive voice</em>. There is no similar concept like this in Esperanto.</p>
</li>
<li>
<p>The previous examples showed an interesting concept: there is an <em>acting</em> entity (‘Ich’) and some entity <em>acted upon</em> (‘Kuchen’). Linguists call it <a href="https://en.wikipedia.org/wiki/Agent_(grammar)">agent</a> and <a href="https://en.wikipedia.org/wiki/Patient_(grammar)">patient</a>. This is semantic property and does not change by the example sentence structures. In both cases, the cake is the patient and the agent is I (even if it is only implicit in the second example). The sentence “I moved the pen to the table edge” has more than two entities. ‘I’ am acting on ‘the pen’ and the final entity ‘table edge’ might need another thematic role besides agent or patient. More semantic roles need to be defined. <a href="https://amor.cms.hu-berlin.de/~h2816i3x/Lehre/2006_VL_Typologie/Typologie_06_Aktantenmarkierung.pdf">Manfred Krifka lists more roles for German</a> like an instrument or a locator. Whereas the agent/patient model is basic and easy to explain, advanced models require explanations beyond what we try to achieve here.</p>
</li>
<li>
<p>Christer O. Kiselman wrote an elaborated text <a href="https://user.it.uu.se/~cki26691/transitiv.pdf">“Transitivaj kaj netransitivaj verboj en Esperanto”</a> covering the topic of this blog post. He uses the word <em>valento</em> (en. valence). The verb is enriched by one, two, or more entities. By sentence structure and their convention, you know how those entity relate to each other. Whereas the agent/patient/… model assigns semantics to each element, the valence-model only counts and does not necessarily assign anything. So to understand Esperanto verbs better, I suggest to study its thematic roles as well.</p>
</li>
<li>
<p>I just claimed “the verb is enriched by one, two or more entities”. Does Esperanto have verbs without entities? Does Esperanto have complete sentences only with one verb? Yes. Esperanto defines that weather-related sentences may skip the subject. “Pluvas” means “It is raining” and skips the generic ‘It’, we find an English.</p>
</li>
<li>
<p>When breaking it down like Kiselman, one could claim that verbs have a valence of one or two, but this is missing crucial information. We neither specify the semantics (e.g. agent/patient) nor is it a complete model (i.e. covers verbs with zero entities). So I oppose explanations of verbs which emphasize whether the verb is transitive (has valence 2) or intransitive (has valence 0 or 1).</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>To conclude:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Esperanto verbs require zero, one, two, or more entities.</p>
</li>
<li>
<p>Some people might argue that valence zero does not exist because valence zero just means ‘ĝi is implicit’. That&#8217;s okay. I consider a different model here.</p>
</li>
<li>
<p>{agent/patient, agent/patient or more, valence, (in-)transitive} are models to explain how entities relate to the verbs</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="the-curious-case-of-igiiĝi">The curious case of igi/iĝi</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Well, various verbs take an -igi or -iĝi suffix. More specifically, the following statements are true:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Some verbs only exist in their pure form (e.g. aparteni).</p>
</li>
<li>
<p>Some verbs only exist with an -igi suffix (e.g. listigi).</p>
</li>
<li>
<p>Some verbs only exist with an -iĝi suffix (e.g. ellitiĝi).</p>
</li>
<li>
<p>Some verbs exist in the forms {pure, -igi} (e.g. ŝajni, ŝajnigi).</p>
</li>
<li>
<p>Some verbs exist in the forms {pure, -iĝi} (e.g. levi, leviĝi).</p>
</li>
<li>
<p>Some verbs exist in the forms {-igi, -iĝi} (e.g. publikigi, publikiĝi).</p>
</li>
<li>
<p>Some verbs exist in the forms {pure, -igi, -iĝi} (e.g. koncentri, koncentrigi, koncentriĝi).</p>
</li>
</ol>
</div>
<div class="paragraph">
<p>Let me sum it up: All combinations are possible.
But I won&#8217;t claim that all dictionaries agree. Whereas the previous items might have slight differences between dictionaries, the last one is uncommon. The words koncentri, koncentrigi, and koncentriĝi exist in PReVO and reta-vortaro which use the same dataset (but apparently different versions because differences can be found in e.g. publiki), but <a href="https://vortaro.net">PIV</a> and <a href="https://glosbe.com/eo/en/koncentrigi">glosbe</a> deny the existence of -igi.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="sources">Sources</h2>
<div class="sectionbody">
<div class="paragraph">
<p>When mentioning dictionaries, I refer to these four:</p>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-02_piv.png"><img src="../assets/img/2026-04-02_piv.png" alt="Screenshot of the PIV dictionary page vortaro.net showing an explanation of the verb montri" width="24%"></a>
</div>
<div class="title">Figure 1. <a href="https://vortaro.net">PIV</a> is <em>the</em> reference for Esperanto words and their usage</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-02_prevo.png"><img src="../assets/img/2026-04-02_prevo.png" alt="Screenshot of the PReVo mobile app showing an explanation of the verb montri" width="24%"></a>
</div>
<div class="title">Figure 2. PReVo by Neil Roberts is a convenient mobile app</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-02_retavortaro.png"><img src="../assets/img/2026-04-02_retavortaro.png" alt="Screenshot of the website reta-vortaro.de showing an explanation of the verb montri" width="24%"></a>
</div>
<div class="title">Figure 3. <a href="https://reta-vortaro.de/">reta vortaro</a> is maintained by mostly German-speaking volunteers</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-02_glosbe.png"><img src="../assets/img/2026-04-02_glosbe.png" alt="Screenshot of the glosbe.com dictionary page translating montri to English" width="24%"></a>
</div>
<div class="title">Figure 4. <a href="https://glosbe.com/">glosbe</a> is a pure translation dictionary</div>
</div>
<div class="paragraph">
<p>As you can see, the first two dictionaries mention whether verbs are transitive (abbreviated as <em>tr</em>) or intransitive (abbr. <em>ntr</em>). So you have some clue about its valence. I chose ‘montri’ specifically, because it is an example verb which can be used transitive <em>and</em> intransitive.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="esperanto-examples">Esperanto examples</h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 12.5%;">
<col style="width: 12.5%;">
<col style="width: 12.5%;">
<col style="width: 12.5%;">
<col style="width: 12.5%;">
<col style="width: 12.5%;">
<col style="width: 12.5%;">
<col style="width: 12.5%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">verb</th>
<th class="tableblock halign-left valign-top">exists</th>
<th class="tableblock halign-left valign-top">example</th>
<th class="tableblock halign-left valign-top">En. translation</th>
<th class="tableblock halign-left valign-top">En. meaning</th>
<th class="tableblock halign-left valign-top">Model instance</th>
<th class="tableblock halign-left valign-top">valence</th>
<th class="tableblock halign-left valign-top">transitive?</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">levi</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">“Mi levas la libron”</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">to lift</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">I lift the book</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">I = agent, book = patient</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">transitive</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">leviĝi</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">“La birdo leviĝas”</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">to rise</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The bird rises.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Birdo = patient</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">intransitive</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">levigi</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">no</p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ĝeni</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">“Mi ĝenas mian edzinon”</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">to bother</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">I am an inconvenience to my wife.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">I = agent, edzino = patient</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">transitive</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ĝeniĝi</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">“Mi ĝeniĝas”</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">to be bothered<sup class="footnote" id="_footnote_canbe">[<a id="_footnoteref_1" class="footnote" href="#_footnotedef_1" title="View footnote.">1</a>]</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">I am bothered (‘by whom’ is unknown).</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">I = patient</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">intransitive</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pravi</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">“Vi pravas”</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">to be right</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">You are right.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">you = patient</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">intransitive</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pravigi</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">“Nun vi pravigu vian kalkulrezulton”</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">declare/show to be right</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">You should show that your calculation result is right</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">you = agent, kalkulrezulto = patient</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">transitive</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">praviĝi</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">“Per eraro la faro ne praviĝas”</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">to be corrected/turned right<sup class="footnoteref">[<a class="footnote" href="#_footnotedef_1" title="View footnote.">1</a>]</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">With the help of an error, the happening cannot be turned right</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">faro = patient</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">intransitive</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enliti</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">no</p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enlitigi</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">only in globse</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">“La patro enlitigas la filinon”</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">to put to bed</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The father put the daughter to bed</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">father = agent, daughter = patient</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">transitive</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enlitiĝi</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">“Adam frue enlitiĝis pro la laboro”</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">to go to bed</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Adam early went to bed because of work</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Adam = patient</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">intransitive</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">aparteni</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">“La gratuloj apartenas al la partoprenantoj”</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">to belong</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The wishes belong to the participants</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">(does not fit - wishes is not an ‘agent’)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">(does not fit)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">(does not fit)</p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>The interesting thing about the last example is that ‘aparteni’ may not be used without preposition ‘al’. So there is no object, but a compulsory preposition. So if your intuition is that all prepositional phrases are optional, this example is a counterexample. Does this compulsory preposition increment valence by one? If your answer is yes, then the valence is two and ‘aparteni’ is transitive. If your answer is no, then the valence is one and ‘aparteni’ is intransitive.</p>
</div>
<div class="paragraph">
<p>The following universal statements can be made:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Given a verb, the -igi suffix adds another entity to the sentence structure. The additional entity increases the valence by one.</p>
</li>
<li>
<p>Given a transitive verb, the -iĝi suffix removes some entity because the transitive sentence structure ‘agent verb patient’ corresponds to ‘patient verb-iĝi’. It decreases the valence by one.</p>
</li>
<li>
<p>Weather-related verbs never have -igi or -iĝi forms.</p>
</li>
<li>
<p>Any description with valence or transitiveness breaks once we encounter a verb like aparteni which requires a subject <em>and</em> a pri-preposition. Valence 2 usually means subject-and-object, but here it means something different.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The following incomplete statements or ideas can be expressed:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>For igi-verbs, the additional entity has the notion of “initiating/instigating an action”. In English, the -igi verb would be expressed as “to be made to” or “to be instigated to”. But this English explanation does not fit e.g. for ‘pravigi’ where the subject does not <em>instigate</em> the object but the subject has to <em>show</em> the object.</p>
</li>
<li>
<p>If some transitive verb describes that the agent performs an act using the patient, the verb with -iĝi describes that the patient is in the state of the described act. In English, this is similar to passive voice.</p>
</li>
<li>
<p>If some verb and its counterpart with prefix mal- exist<sup class="footnote">[<a id="_footnoteref_2" class="footnote" href="#_footnotedef_2" title="View footnote.">2</a>]</sup>, they are usually used with the same structure. This is rarely true for other affixes.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="how-verbs-shall-be-taught-in-my-opinion">How verbs shall be taught in my opinion</h2>
<div class="sectionbody">
<div class="paragraph">
<p>I do believe I am interested in the topic, because I just learned verbs in the wrong way autodidactically. Whereas English teachers in high school showed me patterns how to use verbs, I mostly studied translations for Japanese and Esperanto. In Anki, I can find plenty of examples:</p>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2026-04-02_ankidroid.png"><img src="../assets/img/2026-04-02_ankidroid.png" alt="AnkiDroid screenshot which only shows the words ‘to annoy’ and ‘ĝeni’" width="24%"></a>
</div>
<div class="title">Figure 5. AnkiDroid screenshot for studying a verb</div>
</div>
<div class="paragraph">
<p>In summary, there are verbs used like …</p>
</div>
<div class="ulist">
<ul>
<li>
<p>‘verb’ which is limited to weather-related statements in Esperanto.</p>
</li>
<li>
<p>‘A verb’ where A is <a href="https://en.wikipedia.org/wiki/Agent_(grammar)">an agent</a> followed by optional ‘preposition C’ patterns in any ordering.</p>
</li>
<li>
<p>‘A verb B’ where A is <a href="https://en.wikipedia.org/wiki/Patient_(grammar)">a patient</a> followed by optional ‘preposition C’ patterns in any ordering.</p>
</li>
<li>
<p>‘A verb B’ followed by optional ‘preposition C’ patterns in any ordering.</p>
</li>
<li>
<p>‘A verb preposition B’ followed by optional ‘preposition C’ patterns where preposition phrases have any ordering. Unlike C, B is required.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Now it would be completely wrong to claim that the semantics of the verb together with the sentence structure exists equivalently in every other language. Hence it does not suffice to study its translation alone. It neither suffices to know which valence a verb has or more trivially whether it is transitive or intransitive. Instead I should study a verb together with examples for the sentence structures which exist in Esperanto. This way one should be able to engrave into one&#8217;s brain the structures a verb may be used with.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="official-statements-regarding-igi-and-iĝi">Official statements regarding igi and iĝi</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The Fundamento does not clarify the aforementioned details. In general, the Fundamento avoids linguistic clarifications and presents the language by examples. Specifically, igi is presented the following way:</p>
</div>
<div class="quoteblock">
<blockquote>
<div class="paragraph">
<p><strong>ig</strong> faire…; ex. <strong>pura</strong> pur, propre ― <strong>purigi</strong> nettoyer; <strong>morti</strong> mourir ― <strong>mortigi</strong> tuer (faire mourir) | cause to be; e.g. <strong>pura</strong> pure ― <strong>purigi</strong> purify; <strong>sidi</strong> sit ― <strong>sidigi</strong> seat | zu etwas machen, lassen; z.B. <strong>pura</strong> rein ― <strong>purigi</strong> reinigen; <strong>bruli</strong> brennen (selbst) ― <strong>bruligi</strong> brennen (etwas) | дѣлать чѣмъ нибудь, заставить дѣлать; напр. <strong>pura</strong> чистый ― <strong>purigi</strong> чистить; <strong>bruli</strong> горѣть ― <strong>bruligi</strong> жечь | robić czemś; np. <strong>pura</strong> czysty ― <strong>purigi</strong> czyścić; <strong>bruli</strong> palić się ― <strong>bruligi</strong> palić.</p>
</div>
</blockquote>
<div class="attribution">
&#8212; https://www.akademio-de-esperanto.org/fundamento/ekzercaro.html#ekzerco13
</div>
</div>
<div class="paragraph">
<p>… and iĝi is introduced with the following examples:</p>
</div>
<div class="quoteblock">
<blockquote>
<div class="paragraph">
<p><strong>iĝ</strong> se faire, devenir&#8230;&#8203;; ex. <strong>pala</strong> pâle ― <strong>paliĝi</strong> pâlir; <strong>sidi</strong> être assis ― <strong>sidiĝi</strong> s’asseoir | to become; e. g. <strong>pala</strong> pale ― <strong>paliĝi</strong> turn pale; <strong>sidi</strong> sit ― <strong>sidiĝi</strong> become seated | zu etwas werden, sich zu etwas veranlassen; z. B. <strong>pala</strong> blass ― <strong>paliĝi</strong> erblassen; <strong>sidi</strong> sitzen ― <strong>sidiĝi</strong> sich setzen | дѣлаться чѣмъ нибудь, заставить себя; напр. <strong>pala</strong> блѣдный ― <strong>paliĝi</strong> блѣднѣть; <strong>sidi</strong> сидѣть ― <strong>sidiĝi</strong> сѣсть | stawać się czemś; np. <strong>pala</strong> blady ― <strong>paliĝi</strong> blednąć; <strong>sidi</strong> siedzieć ― <strong>sidiĝi</strong> usiąść.</p>
</div>
</blockquote>
<div class="attribution">
&#8212; https://www.akademio-de-esperanto.org/fundamento/ekzercaro.html#ekzerco23
</div>
</div>
<div class="ulist">
<ul>
<li>
<p>The Akademio de Esperanto has published two remarks about the reflexive form which is a special case of our discussed topic: <a href="https://www.akademio-de-esperanto.org/aktoj/aktoj2/konsultoj.html#prilauzodelarefleksivoj">‘Pri la uzo de la refleksivoj’ (1971)</a> and its sequel <a href="https://www.akademio-de-esperanto.org/aktoj/aktoj2/rekomendoj.html#prilarefleksivo">‘Pri la refleksivo’ (1976)</a>.</p>
</li>
<li>
<p>One official information clarifies how to annotate agents in the context of participles: <a href="https://www.akademio-de-esperanto.org/decidoj/aganto_komplementa.html">‘Esprimo de la aganto en komplementa funkcio’ (1986)</a>.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="conclusion">Conclusion</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Dictionaries do not agree about usages of verbs. I do believe because first, it is difficult to cover how people use language (e.g. is “Ich ende” a valid sentence in German?) and second, the very strong multilingual influence for Esperanto leads to new (often superfluous) patterns all the time.</p>
</li>
<li>
<p>Subject and objects are implicit arguments for a verb. Other arguments are provided with explicit prepositions which already give a hint how they relate to the verb.</p>
</li>
<li>
<p>The concepts of valence and (in)transitiveness and do not cover the true complexity of verb usage.</p>
</li>
<li>
<p>Verbs in -igi forms usually mean that the subject instigates the action. Verbs in -iĝi form usually mean that the subject is passively in a state and it does not state who is acting upon the subject.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Finally, I understood this topic good enough!</p>
</div>
</div>
</div>
<div id="footnotes">
<hr>
<div class="footnote" id="_footnotedef_1">
<a href="#_footnoteref_1">1</a>. This is my own translation and not from some dictionary.
</div>
<div class="footnote" id="_footnotedef_2">
<a href="#_footnoteref_2">2</a>. mal- in Esperanto inverts the meaning in Esperanto: ‘pravi’ (to be right) and ‘malpravi’ (to be wrong).
</div>
</div>]]></content><author><name>Lukas Prokop</name></author><category term="Esperanto" /><category term="reflection" /><summary type="html"><![CDATA[Update 2026-04-05: I put the examples into a table instead of bullet points for improved comprehension. Update 2026-04-09: I added references to the Akademio-de-Esperanto articles.]]></summary></entry><entry xml:lang="en"><title type="html">Some ways to approach focus in life</title><link href="https://lukas-prokop.at/articles/2025-12-31-how-to-approach-focus-in-life" rel="alternate" type="text/html" title="Some ways to approach focus in life" /><published>2025-12-31T15:00:00+01:00</published><updated>2026-01-01T17:27:22+01:00</updated><id>https://lukas-prokop.at/articles/2025-12-31-how-to-approach-focus-in-life</id><content type="html" xml:base="https://lukas-prokop.at/articles/2025-12-31-how-to-approach-focus-in-life"><![CDATA[<div class="sect1">
<h2 id="motivation">Motivation</h2>
<div class="sectionbody">
<div class="paragraph">
<p>It is a repeating pattern for me, I am craving for: In some quiet minutes after work days, I am sufficiently good at getting projects done. Once leisure time (holidays / vacation) reaches me, I am craving for the moment to sit down, revisit the current state of affairs and plan ahead what the next steps are. I like that moment. It needs a lot of mental freedom, but I like it so much, that I make sure to get such a moment from time to time.</p>
</div>
<div class="paragraph">
<p>The most high-level question one can answer in this moment is “What do I want to focus on in my life?”. I am lucky enough, that I am not in existential mode all the time. At Aikido in Graz recently, I met a person coming from <a href="https://en.wikipedia.org/wiki/Odesa">Odesa</a> to Graz one month prior. We had a longer chat and that person obviously only had one focus in mind: ‘SURVIVE’. I am fortunate enough to be able to focus on other topics as well like digital typesetting or languages.</p>
</div>
<div class="paragraph">
<p>In this post, I want to present three frameworks which can help to identify what one wants to focus on.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="framework-1-maslowss-pyramid-of-needs">Framework 1: Maslows&#8217;s pyramid of needs</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The categories are taken over from the <a href="https://en.wikipedia.org/w/index.php?title=Maslow%27s_hierarchy_of_needs&amp;oldid=1327776047">famous pyramid</a> whereas the notes next to it, are my personal ones. It is my personal goal to have some projects in each category. If I have many projects in the category ‘Esteem’, but few projects in ‘Physiological Needs’, I am lowering the priority of ‘Esteem’ projects and increasing the priority of ‘Physiological Needs’ projects.</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p><em>Self-Actualisation (most sophisticated need)</em>: get bored to initiate creativity intentionally; implement new approaches/ideas; defining goals for your next 1/5/10 years in life; spread profound knowledge you gained by long-term efforts</p>
</li>
<li>
<p><em>Esteem</em>: interact/discuss matters with loved ones to reinforce ideas/concepts and dismantle prejudices; do something consciously which was once difficult in your life, but is now trivial; give talks; engage in a podcast episode; implement a difficult project having a good strategy at your avail</p>
</li>
<li>
<p><em>Love &amp; Belonging</em>: plan ahead how/when you can meet friends/family to prevent neglect; strengthen your romantic relationships; organize communal events; invite someone over; talk to the neighbors; give tiny gifts or small-talk to people you know but you are not familiar with</p>
</li>
<li>
<p><em>Safety needs</em>: physical exercise; think through fallback options, if personal belongings get lost; discuss insurance options; declare assuring thresholds for income versus expenses limits; invest into physical or digital security</p>
</li>
<li>
<p><em>Physiological needs</em>: plan ahead food supplies; have emergency food in your storage; take care of your household and workplace; buy new clothes <em>before</em> the old ones are falling apart; get enough sleep</p>
</li>
</ol>
</div>
<div class="paragraph">
<p>I am pretty sure my notes are a bit of a stretch. Some might be miscategorized w.r.t Maslow and many may not apply to your idea of ‘projects’. But it should give you an idea of my approach: look at each category, write down notes, and attach my (mostly existing) projects to the notes. After this process, I might recognize that my current projects are egocentric. Or that I could share my new knowledge in a certain talk.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="framework-2-time-dimension">Framework 2: time dimension</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Another approach can be to have projects in all of these three categories:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p><em>past</em>: finish an old project which still makes sense, but had too little value to be finished; revisit old responsibilities which are usually self-initiated but should be done (→ volunteering work); renew friendships; summarize past experiences</p>
</li>
<li>
<p><em>present</em>: finish work-in-progress projects; answer inquiries; review pull requests</p>
</li>
<li>
<p><em>future</em>: plan ahead schedules; think through what would improve your life; consider in which way this new technology could improve your life</p>
</li>
</ol>
</div>
</div>
</div>
<div class="sect1">
<h2 id="framework-3-four-necessities">Framework 3: four necessities</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This is a list of categories which I came up with personally. It is a list which makes it easier for me to achieve a uniform distribution of projects (e.g. 10 current projects in each category).</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p><em>mental</em>: walks in nature; listening to thoughts of other people (face-to-face or in podcasts); implement creativity projects; expand knowledge; learn new skills</p>
</li>
<li>
<p><em>social</em>: host friends; engage in local clubs &amp; events; discuss life with people from other cultures; understand how society works on a local/regional/national/international level; build relationships &amp; friendships</p>
</li>
<li>
<p><em>physical</em>: stretching exercises; exercises for strength; running; bicycling; ball games; martial arts</p>
</li>
<li>
<p><em>representational</em>: report project status; publish your knowledge; micro-blog; write blog posts</p>
</li>
</ol>
</div>
</div>
</div>
<div class="sect1">
<h2 id="conclusion">Conclusion</h2>
<div class="sectionbody">
<div class="paragraph">
<p>I am fully aware that my blog post has many assumptions. I have a very broad definition of project (“any TODO which takes more than 1 day of work”) and I consider it in a flat structure (umbrella projects and subprojects are treated alike). It does not help many people to ‘even out’ projects in certain categories. But if this blogpost helped you to regain a high-level perspective what you are focusing on in life, this blogpost was worth it writing it down.</p>
</div>
</div>
</div>]]></content><author><name>Lukas Prokop</name></author><category term="life" /><category term="reflection" /><summary type="html"><![CDATA[Motivation]]></summary></entry><entry xml:lang="en"><title type="html">U([0, 1)) → U([0, 1])</title><link href="https://lukas-prokop.at/articles/2025-12-28-mapping-same-measure-sets" rel="alternate" type="text/html" title="U([0, 1)) → U([0, 1])" /><published>2025-12-28T10:00:00+01:00</published><updated>2026-01-01T17:10:36+01:00</updated><id>https://lukas-prokop.at/articles/2025-12-28-mapping-same-measure-sets</id><content type="html" xml:base="https://lukas-prokop.at/articles/2025-12-28-mapping-same-measure-sets"><![CDATA[<div class="sect1">
<h2 id="motivation">Motivation</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Given a sampler for a uniform distribution in [0,1), can one attain a sampler for a uniform distribuition in [0,1] (i.e. the value 1 is possible as well)?</p>
</div>
<div class="paragraph">
<p>First, a disclaimer: the question itself is ridiculous and a purely mathematical thought experiment. I also don&#8217;t have an solution here. But it was fun to think it through. It is ridiculous, because either you need it in practice on a computer. Then you need to consider the realities of IEEE 754 with its incapability to represent a continuous interval. Then you need completely different approaches than represented here. Or you consider the mathematically continuous range [0,1) in ℝ. In this case, measure theory tells you that the measures of [0,1) and [0,1] are equal and thus the question becomes boring in all mathematical contexts.</p>
</div>
<div class="paragraph">
<p>Ok, so we can sample values from a uniform distribution U([0, 1)) and need an algorithm with returns one value more with the same probability.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="first-idea">First idea</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Let \(s ∈ U([0,1))\).</p>
</div>
<div class="stemblock">
<div class="content">
\[ u(s) := \frac{1}{1-s} \]
</div>
</div>
<div class="paragraph">
<p>So with \(f(x) = 1-x\) I can map \(U([0,1))\) to \(U((0,1\))] (sorry, the markup language parser screws up the braces). Function \(f(x) = 1/x\) is fun, because it gets arbitrarily close to 0, but does not reach it. The argument 0 itself is disallowed in ℝ (c.f. <a href="https://en.wikipedia.org/wiki/Partial_function">partial function</a>). We use this mechanism in the way that 1 is never returned by the sampler \(U([0,1))\). However, the idea fails because it completely distorts the uniform probability and value 0 cannot be attained.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="second-idea">Second idea</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Let \(s ∈ U([0,1))\) and \(t ∈ U([0,1))\).</p>
</div>
<div class="stemblock">
<div class="content">
\[ u(s, t) := \frac{s+(1-t)}{2} \]
</div>
</div>
<div class="paragraph">
<p>Now the idea is to sample twice. We use one value in [0,1) (namely \(s\)) and one value in (0,1] (namely \(1-t\)). Since we now apply addition, we don&#8217;t distort the probability. Division by 2 just maps the sum from interval (0, 2) to (0, 1). Oh right, we already know the reason why this result is invalid: values 0 and 1 are excluded.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="third-idea">Third idea</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Now I started integrating the idea of rejection sampling. Draw a sample and test it. Check it, potentially reject it and do something else.</p>
</div>
<div class="paragraph">
<p>Let \(s ∈ U([0,1))\) and \(t ∈ U([0,1))\).</p>
</div>
<div class="stemblock">
<div class="content">
\[ u(s, t) := \begin{cases}
  s      &amp; \text{if } s &lt; 0.5 \\
  1-t    &amp; \text{else}
\end{cases} \]
</div>
</div>
<div class="paragraph">
<p>Due to the case distinction, we either pick a value in [0, 0.5) or (0, 1]. With set union, this makes [0, 1] which is our desired interval. However, did we preserve the properties of a uniform distribution? It immediately looks suspicious if the intervals of the two cases overlap, because this distorts the probability. Value 0.3 might be returned due to case 1 or 2 whereas value 0.7 can only result from case 2. Hence, the values in (0, 0.5) are twice as likely as the values [0.5, 1].</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="fourth-idea">Fourth idea</h2>
<div class="sectionbody">
<div class="paragraph">
<p>So let us align the intervals.</p>
</div>
<div class="paragraph">
<p>Let \(s ∈ U([0,1))\) and \(t ∈ U([0,1))\).</p>
</div>
<div class="stemblock">
<div class="content">
\[ u(s, t) := \begin{cases}
  s              &amp; \text{if } s &lt; 0.5 \\
  1-\frac{t}{2}  &amp; \text{else}
\end{cases} \]
</div>
</div>
<div class="paragraph">
<p>Now the two cases cover the intervals [0, 0.5) and (0.5, 1]. So we miss value 0.5 … damn.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="fifth-idea">Fifth idea</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Does it help if we make the condition independent of the returned value?</p>
</div>
<div class="paragraph">
<p>Let \(r, s, t ∈ U([0,1))\).</p>
</div>
<div class="stemblock">
<div class="content">
\[ u(r, s, t) := \begin{cases}
  s      &amp; \text{if } r &lt; 0.5 \\
  1-t    &amp; \text{else}
\end{cases} \]
</div>
</div>
<div class="paragraph">
<p>The two cases cover the intervals [0, 1) and (0, 1]. Its set union is [0, 1] which covers our desired interval. However, value 0 can only be created if the first case applies whereas 1 can only be reach through the second case. All other values can be returned from either case. So values {0, 1} are less likely than other values.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="fifth-idea-2">Fifth idea</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Ok, can we introduce a special handling for the one value we want to extend upon?</p>
</div>
<div class="paragraph">
<p>Let \(s, t ∈ U([0,1))\).</p>
</div>
<div class="stemblock">
<div class="content">
\[ u(s, t) := \begin{cases}
  \begin{cases}
    0       &amp; \text{if } t &lt; 0.5 \\
    1       &amp; \text{else}
  \end{cases} &amp; \text{if } s = 0 \\
  s         &amp; \text{else}
\end{cases} \]
</div>
</div>
<div class="paragraph">
<p>If we start to create two return values for one value, we obviously split the probability into two. Thus we don&#8217;t create a uniform distribution, because values {0, 1} are half as likely.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="sixth-idea">Sixth idea</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Ok, let us get back to previous ideas. If we don&#8217;t use less-than but less-than-or-equal in the condition, we can get a closed interval. This way, we can design our desired interval.<br>
Now, I need to use a loop to express the process:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>forever</p>
<div class="olist loweralpha">
<ol class="loweralpha" type="a">
<li>
<p>Let \(s, t ∈ U([0,1))\).</p>
</li>
<li>
<p>if \(s\) ≤ 0.5, then return \(s\)</p>
</li>
<li>
<p>if \(t\) ≤ 0.5, then return \(1-t\)</p>
</li>
</ol>
</div>
</li>
</ol>
</div>
<div class="paragraph">
<p>So we either return a value from the interval [0, 0.5] or from [0.5, 1]. Because we neglect the cases when the condition is not true, it is difficult for me to quantify the probability distribution in this case. I think the fact that value 0.5 occurs in both cases makes it more likely than other values. However, I think this approach is also bad, because we have no guarantee of termination. We cannot guarantee that we always get a sampled value.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="conclusion">Conclusion</h2>
<div class="sectionbody">
<div class="paragraph">
<p>I looked at different ideas to extend U([0,1)) to U([0,1]), but failed at finding a mathematically beautiful solution. I am neither a probability theorist nor did any literature research. I wrote down the question several years ago during my studies as a note and discussed it with work colleagues recently. The brainstorming lead to what I wrote into the disclaimer. Finally, I think combining a function and its inverse (functions \(10^x\) and \(\log_{10}(x)\)) might be a viable approach, but I lacked creativity to combine them usefully. Facts like \(1/x \neq 0\), \(10^x \neq 0\), \(\log_{10}(x) \neq 0\) and \(10^0 = 1\) can include/exclude the missing value. But all of it is just food for thought.</p>
</div>
</div>
</div>]]></content><author><name>Lukas Prokop</name></author><category term="math" /><category term="probability-theory" /><summary type="html"><![CDATA[Motivation]]></summary></entry><entry xml:lang="eo"><title type="html">Raporto de la eŭropa tago de lingvoj</title><link href="https://lukas-prokop.at/articles/2025-10-11-raporto-de-la-e%C5%ADropa-tago-de-lingvoj" rel="alternate" type="text/html" title="Raporto de la eŭropa tago de lingvoj" /><published>2025-10-11T00:00:00+02:00</published><updated>2025-10-19T12:58:36+02:00</updated><id>https://lukas-prokop.at/articles/2025-10-11-raporto-de-la-e%C5%ADropa-tago-de-lingvoj</id><content type="html" xml:base="https://lukas-prokop.at/articles/2025-10-11-raporto-de-la-e%C5%ADropa-tago-de-lingvoj"><![CDATA[<div class="paragraph">
<p><strong>Ĝisdatigo 2025-10-19:</strong> Amiko sendis korektadon al mi pro miaj eraroj. Mi ĝisdatigis ĉi tiun artikolon.</p>
</div>
<div class="sect1">
<h2 id="enkonduko">Enkonduko</h2>
<div class="sectionbody">
<div class="paragraph">
<p>La Esperanta klubo de Graz partoprenis en la eŭropa tago de lingvoj.
Mi ĉeestis kaj helpis ĉe la stando antaŭ la ŝtuparo de Schlossberg.
Amiko demandis artikolon pri la sperto. Voilá!</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="eŭropa-tago">Eŭropa tago</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Je la 26-a de septembro, la eŭropa tago de lingvoj okazis je la 25-a fojo. Ĉi tiu tago festas la diversecon de eŭropaj lingvoj kaj konektas homojn kiuj interesiĝas pri aliaj lingvoj. Graz estas la 2-a plej granda urbo de Aŭstrio kaj havas multajn lingvajn influiĝojn. Slovenio estas sufiĉe proksima kaj multaj slavlingvaj parolantoj loĝas en Graz aŭ vizitas la urbon. Lernantoj kutime elektas inter latinidaj lingvoj kiel la itala, la hispana, la franca, aŭ la latina mem. Plie Graz havas multajn universitatojn. Eksterlandaj studentoj studas en Graz por unu aŭ pluraj semestroj kaj oni povas havi bonan sperton lerni pri aliaj kulturoj malproksime de Aŭstrio. Mi mem interagis kun homoj de Kolombio, Sud-afriko, Ĉinio, kaj Japanio. Konklude, Graz havas realan sperton pri la temo kaj la festo ekokazis je la 9-a horo en la urbocentro ĉe Schlossbergplatz.</p>
</div>
<div class="imageblock center">
<div class="content">
<img src="../assets/img/2025-10-11_tendo.jpg" alt="Tendoj de la eŭropa tago de lingvoj je la 26-a de septembro 2025" width="50%">
</div>
</div>
<div class="paragraph">
<p>Dum la tago multaj prezentaĵoj rilate al lingvoj okazis. Je 10:45, Muhammed Dumanli prezentis siajn Poetry-Slam-tekstojn fokusitajn al kulturaj aspektoj. Je 13:15, dancogrupo organizis komunan ‘linian’ dancon. Ĉiu partoprenanto rajtis danci laŭ la instruo de organizantoj kaj la usonana kontrea muziko. Je 14:30, oni povis aŭskulti anglan teatraĵon. Je 15:45, Simon Ošlak-Gerasimov legis sian tekston pri la slovena aspekto de Graz. Memoru ke Graz baziĝas sur la slovena vorto ‘gradec’ esperante ‘malgranda kastelo’.</p>
</div>
<div class="imageblock center">
<div class="content">
<img src="../assets/img/2025-10-11_afiŝo.jpg" alt="Afiŝo kun programeroj de tago de lingvoj" width="50%">
</div>
</div>
<div class="paragraph">
<p>La organizantoj de la festa tago preparis tri centrojn en la urbo. Unue, la proksima museo de Graz ofertis komunan urbopromenon pri lingvoj. Ili ankaŭ ofertis prezentaĵon pri la 30-jara membreco de Aŭstrio en la Eŭropa Unio. Due, multaj institucioj (p.e. urba biblioteko, pedagogia universitato de Stirio) ofertis specialan programon pri lingvoj en siaj domoj. Trie, oni starigis tri tendojn ĉe Schlossbergplatz. Diversaj grupoj havis standojn en ĉi tiuj tendoj. ‘Institut culturel franco-autrichien’ klopodas pri pli bona rilato inter Francio kaj Aŭstrio. Ili ofertas franclingvajn kursojn. Aparte la ‘Integrationsreferat der Stadt Graz’ (urba institucio por integrado) kaj la Eŭropa Komisiono en Aŭstrio prezentis sin. ‘deutsch in graz’ ofertas germanlingvajn kursojn por eksterlandanoj kaj prezentis ilin. Inter tiuj grupoj, ses esperantistoj subtenis la Esperantan standon. Esperanto havis plenumitan tablon de libroj kaj lingvajk afiŝoj.</p>
</div>
<div class="imageblock center">
<div class="content">
<img src="../assets/img/2025-10-11_festo.jpg" alt="Tendo kun Esperanta grupo apud sia stando" width="50%">
</div>
</div>
<div class="paragraph">
<p>La interago kun interesuloj tre plaĉis al mi. Se oni mencias Esperanton, diversaj kategorioj de respondoj ekzistas. Viro ne konis Esperanton. Familioj kutime tuj klopodas instrui infanojn pri la elparolado de bazaj vortoj. Virino tuj respondis ‘estis bona ideo, ĉu ne? Sed ne funkciis, ĉu ne?’. Kiam ni interagis kun homoj de Indonezio, ni serĉis komunajn ecojn de niaj lingvoj.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="konkludo">Konkludo</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Estis amuza tago por mi kaj taŭgis ke ni reprezentis Esperanton publike en ĉi tiu evento.</p>
</div>
</div>
</div>]]></content><author><name>Lukas Prokop</name></author><category term="life" /><category term="Austria" /><category term="languages" /><category term="Esperanto" /><summary type="html"><![CDATA[Ĝisdatigo 2025-10-19: Amiko sendis korektadon al mi pro miaj eraroj. Mi ĝisdatigis ĉi tiun artikolon.]]></summary></entry><entry xml:lang="en"><title type="html">Review: Vienna Coffee Festival 2025</title><link href="https://lukas-prokop.at/articles/2025-09-13-vienna-coffee-festival" rel="alternate" type="text/html" title="Review: Vienna Coffee Festival 2025" /><published>2025-09-13T20:00:00+02:00</published><updated>2025-11-19T23:55:30+01:00</updated><id>https://lukas-prokop.at/articles/2025-09-13-vienna-coffee-festival</id><content type="html" xml:base="https://lukas-prokop.at/articles/2025-09-13-vienna-coffee-festival"><![CDATA[<div class="sect1">
<h2 id="motivation">Motivation</h2>
<div class="sectionbody">
<div class="paragraph">
<p>A friend of mine invited me to attend the Vienna Coffee Festival together. So we did for one day. I wanted to write a summary, what I experienced and learned.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="the-event">The event</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The <a href="https://www.viennacoffeefestival.cc/">Vienna Coffee Festival</a> (edition 2025) takes place from Friday (yesterday) to Sunday (tomorrow). The entrance poster mentions “11 years”. So I assume it takes place the eleventh time. It is an event for coffee lovers where coffee brewers, coffee machine producers, cup and mug producers, coffee roasters, coffee baristas, and latte artists come together to share thoughts, ideas, and let people experience different kinds of coffee. We got “Super early bird tickets” in April and paid 13€ whereas the ticket on-site costs 25€. Upon entry, you get a mug for 1€ which is paid back when you leave and bring back the mug. The core idea is that you visit various booths and they brew coffee for you; for free. So you can taste various flavors and roasts. However, there are also booths where people present talks about the economic side of coffee, explain the differences in cultures, or just play music. There was also the Austrian competition for baristas going on during our attendance.</p>
</div>
<div class="imageblock text-center">
<div class="content">
<img src="/assets/img/2025-09-13_vienna-coffee-festival_coffee-mug.jpg" alt="I am holding a coffee mug in front of me with a classic heart in latte art style" width="60%">
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="the-venue">The venue</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Karl-Marx hall is used as venue for the festival. In the front, your ticket is checked and you can get your refund mug. Many coffee brewing booths come first and some talk- or music-related booths can be found in between. Not the entire hall is filled. The final third cannot be reached and the rear part is used for food stands. We got some Indian vegan lunch, but they also offer Thai or more Austrian/Czech style cuisine. Water supply and toilets are available in the north and well-maintained.</p>
</div>
<div class="imageblock text-center">
<div class="content">
<img src="/assets/img/2025-09-13_vienna-coffee-festival_venue.jpg" alt="A large hall serves a venue of the festival with many people standing at booths" width="80%">
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="what-i-learned">What I learned</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Markus from <a href="https://gota.coffee/">gota coffee</a> was so kind to present us a lot of details about coffee making. He showed us the <a href="https://www.ikawacoffee.com/">ikawa coffee roasting machine</a>. This machine allows you to define a profile, which defines the temperature curve the machine is following during the roasting process. Curves are shared between roasting aficionada on their website. Markus points out that the level of uniformity in the roasting process achieved by the machine is pretty good which makes results more predictable. The issue with coffee roasting is that commonly you get coffee beans in sacks of 5 kg. Thus it is not easy to try many different coffee beans with the same curves on a hobby level.</p>
</div>
<div class="imageblock text-center">
<div class="content">
<img src="/assets/img/2025-09-13_vienna-coffee-festival_roasting-machine-profile.jpg" alt="A man is holding up his smartphone showing some curve on the screen and some Ikawa machine and some roasted and fresh coffee beans are in the front" width="60%">
</div>
</div>
<div class="paragraph">
<p>By the way, <a href="https://www.myhomeroast.com/">MyHomeRoast</a> was also present at the festival. A sales woman introduced us to their approach. It seemed like MyHomeRoast has limited configurability (compared to ikawa), but they also seem to work in different price ranges. Whereas MyHomeRoast machines cost about 700€, the prices of ikawa machines are not even listed on their website.</p>
</div>
<div class="paragraph">
<p>Katharina from gota coffee made us some cascara tea. This is some herbal tea made from the dried skins and pulp of coffee cherries. She mentioned that one uses about 4g of cascara for 100ml hot water. Cascara was considered a waste product in Europe, but tea was made at plantation sites since the early days. It contains a small amount of coffee and we loved it. <a href="https://gota.coffee/blogs/news/austrian-aeropress-championship-2024-a-memorable-day-on-the-danube">Katharina also introduced us to AeroPress</a>, an <a href="https://gota.coffee/collections/equipment/AeroPress">Espresso equipment</a> which uses air and human strength to build up the pressure.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="competitions">Competitions</h2>
<div class="sectionbody">
<div class="paragraph">
<p>On Saturday, there were three people competing in “Latte Art” in the morning and five people competing in “Barista” in the afternoon. It is not easy to present your coffee (origin, date of roasting, flavor characteristics, …) and brewing approach (temperature, duration) while actually making the coffee in time. Each participant seemed to finish off explaining their signature drink. We observed a recognizable difference between first-time participants and experienced competitors. The jury watched each step, but recognizably only one judge was allowed to be in the vicinity of the examinee. It felt like the style of presentation, hygiene, timing, and taste were taken into account.</p>
</div>
<div class="imageblock text-center">
<div class="content">
<img src="/assets/img/2025-09-13_vienna-coffee-festival_jury.jpg" alt="A woman is presenting her barista skills in front of a four-person jury" width="80%">
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="conclusion">Conclusion</h2>
<div class="sectionbody">
<div class="paragraph">
<p>What a fun experience. It seems to be a growing community and all people have been kind to us. I am a coffee drinker and made coffee with different equipments, but what I do, is far from the professional level. It was nice to learn some stuff from a different field.</p>
</div>
</div>
</div>]]></content><author><name>Lukas Prokop</name></author><category term="life" /><category term="Austria" /><category term="reflection" /><summary type="html"><![CDATA[Motivation]]></summary></entry><entry xml:lang="en"><title type="html">A card game, I learned during high school</title><link href="https://lukas-prokop.at/articles/2025-08-17-cardgame" rel="alternate" type="text/html" title="A card game, I learned during high school" /><published>2025-08-17T20:00:00+02:00</published><updated>2025-08-17T22:28:28+02:00</updated><id>https://lukas-prokop.at/articles/2025-08-17-cardgame</id><content type="html" xml:base="https://lukas-prokop.at/articles/2025-08-17-cardgame"><![CDATA[<div class="sect1">
<h2 id="motivation">Motivation</h2>
<div class="sectionbody">
<div class="paragraph">
<p>At high school, we got bored at 10-minute breaks between classes. So my friends taught me a card game. I remember it thoroughly, but I cannot tell its origin. Technically, we called it “stress”, but looking at <a href="https://de.wikipedia.org/wiki/Stress_(Kartenspiel)">the German Wikipedia article</a>, I only recognize different rules.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="the-rules">The rules</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="distribution-of-cards">Distribution of cards</h3>
<div class="ulist">
<ul>
<li>
<p>Each player gets 4 cards to be placed face-down in front.</p>
</li>
<li>
<p>Each player gets 4 cards to be placed on top of face-down cards face-up.<br></p>
</li>
<li>
<p>Each player gets 4 cards to be held in hands and only the player himself/herself may see the card.</p>
</li>
<li>
<p>The remaining cards are put into a stack in the center of all players face-down (<em>drawing stack</em>).</p>
</li>
<li>
<p>One card is removed from the drawing stack and placed face-up. This card initiates the <em>game stack</em>.</p>
</li>
<li>
<p>The card cementery is the final stack. Once a card is moved there, it cannot be played anymore.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Each player is allowed to exchange cards from one&#8217;s hand with the cards placed face-up. The strategic goal is to have your most valuable cards as face-up cards to your avail. What signifies “valuable” follows from the next section.</p>
</div>
</div>
<div class="sect2">
<h3 id="the-value-of-a-card">The value of a card</h3>
<div class="paragraph">
<p>Players take turns counter-clockwise.</p>
</div>
<div class="paragraph">
<p>They have to play a card to <em>react</em> to the top card on the game stack. Suits do not matter. In order to react, one must place one or more cards on top of the game stack; commonly a card of same or higher value (the order from lowest to highest is <code>2 3 4 5 6 7 8 9 10 J Q K A</code>).</p>
</div>
<div class="ulist">
<ul>
<li>
<p>If and only if you have several cards of the same value, you may place them on the game stack in one turn.</p>
</li>
<li>
<p>However, some cards have special semantics:<br></p>
<div class="dlist">
<dl>
<dt class="hdlist1">2</dt>
<dd>
<p>may be played at any point in time, a card of any value may be placed on top.</p>
</dd>
<dt class="hdlist1">3</dt>
<dd>
<p>may be played at any point in time, this card is ‘invisible’ and thus the value of the top card below matters (if there is none, it acts like a ‘2’).</p>
</dd>
<dt class="hdlist1">8</dt>
<dd>
<p>the next player has to skip.</p>
</dd>
<dt class="hdlist1">9</dt>
<dd>
<p>the next card to be played must have a value less-than nine.</p>
</dd>
<dt class="hdlist1">10</dt>
<dd>
<p>the entire game stack is moved to the cemetery. The same player starts a new game stack with any card.</p>
</dd>
</dl>
</div>
</li>
<li>
<p>If you fail to provide a card, you have to pick up the entire game stack. All those cards now constitute your cards in your hands to react with (recognize: having many cards available, can provide an advantage in your strategy to react as well). The next player continues and begins a new game stack with any card.</p>
</li>
</ul>
</div>
<div class="imageblock center">
<div class="content">
<img src="../assets/img/2025-08-11_cardgame.jpg" alt="Cardgame scenario" width="70%">
</div>
<div class="title">Figure 1. A game situation in the card game. I have some cards in my hand, four cards are placed face-up, and face-down each. I have many high cards (Ace) or special cards (8, 10) in my two decks which might make me lucky. But my opponent has some special cards (3, 9) in the face-up deck as well. The game stack is visible in the middle, and the drawing stack is barely visible on the far-right. The cemetery is not visible.</div>
</div>
</div>
<div class="sect2">
<h3 id="who-wins-the-game">Who wins the game</h3>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>First, you may only play the cards in your hands. If you have less than 4 cards, you need to draw one card from the drawing stack as long as some are available.</p>
</li>
<li>
<p>If you have no “cards in your hands” left anymore, you have to play with the four faced-up cards in front of you. Recognize: it is an advantage for other players to know your values now. They can slow down your progress with the last remaining cards.</p>
</li>
<li>
<p>If you have no “faced-up cards” left anymore, you have to play with the four faced-down cards now. Since no-one can see the value of the cards (not even the selecting player), the player picks an arbitrary one and hopes to provide an admissible card. Even if you fail four times, each turn one faced-down card was removed and thus the selecting player makes progress.</p>
</li>
</ol>
</div>
<div class="paragraph">
<p>If all cards in one&#8217;s hands, faced-up, and faced-down have been placed admissibly on the game stack, the player has finished. The player which finished the fastest, has won.</p>
</div>
</div>
</div>
</div>]]></content><author><name>Lukas Prokop</name></author><category term="cs" /><category term="software-development" /><summary type="html"><![CDATA[Motivation]]></summary></entry><entry xml:lang="en"><title type="html">Guidelines for the design of file formats</title><link href="https://lukas-prokop.at/articles/2025-08-05-guidelines-for-design-of-fileformats" rel="alternate" type="text/html" title="Guidelines for the design of file formats" /><published>2025-08-05T18:00:00+02:00</published><updated>2025-11-19T23:56:51+01:00</updated><id>https://lukas-prokop.at/articles/2025-08-05-guidelines-for-design-of-fileformats</id><content type="html" xml:base="https://lukas-prokop.at/articles/2025-08-05-guidelines-for-design-of-fileformats"><![CDATA[<div class="paragraph">
<p><strong>Update 2025-10-19:</strong> I added edn as mentioned file format.</p>
</div>
<div class="sect1">
<h2 id="motivation">Motivation</h2>
<div class="sectionbody">
<div class="paragraph">
<p>I don&#8217;t think I am an expert on this topic, but I feel like there are some simple guidelines which don&#8217;t get retold often enough. I designed some file formats myself and have some frustrating experiences with recurring file format definition errors. Academically, I think there should be more interest in this topic instead of the common “I parsed PDF files using machine learning” papers. Anyhow, I hope some academics find some more answers to open questions, but for now let us summarize those guidelines.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="prior-art">Prior art</h2>
<div class="sectionbody">
<div class="paragraph">
<p>I listed the entries by my own rating of “contributes to the topic at hand” from most to least significant:</p>
</div>
<div class="ulist bibliography">
<ul class="bibliography">
<li>
<p><a id="paperDSL"></a>[paperDSL] <a href="http://arxiv.org/abs/1409.2378">paper “Design Guidelines for Domain Specific Languages”</a> (2014) by Karsai, Krahn, Pinkernell, Rumpe, Schindler, and Völkel</p>
</li>
<li>
<p><a id="talk38c3"></a>[talk38c3] <a href="https://youtu.be/zUVYvE9tLBM?si=7ocAZMJrDK02DvBT&amp;t=2278">talk “38C3 - Fearsome File Formats”</a> (2024-12-30) by Ange Albertini</p>
</li>
<li>
<p><a id="articleKOMPPA"></a>[articleKOMPPA] <a href="https://solhsa.com/oldernews2025.html#ON-FILE-FORMATS">article “On File Formats”</a> (2025-05-19) by Jari Komppa</p>
</li>
<li>
<p><a id="paperLITTLE"></a>[paperLITTLE] <a href="https://doi.org/10.1145/6424.31569">paper “Little Languages”</a> (1986) by Jon Bentley</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="paper-design-guidelines-for-domain-specific-languages">Paper “Design Guidelines for Domain Specific Languages”</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This paper from 2014 <a href="#paperDSL">[paperDSL]</a> lists 26 guidelines in various five categories. Without discussing them in detail, I am going to list their names here:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Language Purpose</p>
<div class="ulist">
<ul>
<li>
<p><em>Guideline 1:</em> Identify language uses early</p>
</li>
<li>
<p><em>Guideline 2:</em> Ask questions</p>
</li>
<li>
<p><em>Guideline 3:</em> Make your language consistent</p>
</li>
</ul>
</div>
</li>
<li>
<p>Language Realization</p>
<div class="ulist">
<ul>
<li>
<p><em>Guideline 4:</em> Decide carefully whether to use graphical or textual realization</p>
</li>
<li>
<p><em>Guideline 5:</em> Compose existing languages where possible</p>
</li>
<li>
<p><em>Guideline 6:</em> Reuse existing language definitions</p>
</li>
<li>
<p><em>Guideline 7:</em> Reuse existing type systems</p>
</li>
</ul>
</div>
</li>
<li>
<p>Language Content</p>
<div class="ulist">
<ul>
<li>
<p><em>Guideline 8:</em> Reflect only the necessary domain concepts</p>
</li>
<li>
<p><em>Guideline 9:</em> Keep it simple</p>
</li>
<li>
<p><em>Guideline 10:</em> Avoid unnecessary generality</p>
</li>
<li>
<p><em>Guideline 11:</em> Limit the number of language elements</p>
</li>
<li>
<p><em>Guideline 12:</em> Avoid conceptual redundancy</p>
</li>
<li>
<p><em>Guideline 13:</em> Avoid inefficient language elements</p>
</li>
</ul>
</div>
</li>
<li>
<p>Concrete Syntax</p>
<div class="ulist">
<ul>
<li>
<p><em>Guideline 14:</em> Adopt existing notations domain experts use</p>
</li>
<li>
<p><em>Guideline 15:</em> Use descriptive notations</p>
</li>
<li>
<p><em>Guideline 16:</em> Make elements distinguishable</p>
</li>
<li>
<p><em>Guideline 17:</em> Use syntactic sugar appropriately</p>
</li>
<li>
<p><em>Guideline 18:</em> Permit comments</p>
</li>
<li>
<p><em>Guideline 19:</em> Provide organizational structures for models</p>
</li>
<li>
<p><em>Guideline 20:</em> Balance compactness and comprehensibility</p>
</li>
<li>
<p><em>Guideline 21:</em> Use the same style everywhere</p>
</li>
<li>
<p><em>Guideline 22:</em> Identify usage conventions</p>
</li>
</ul>
</div>
</li>
<li>
<p>Abstract Syntax</p>
<div class="ulist">
<ul>
<li>
<p><em>Guideline 23:</em> Align abstract and concrete syntax</p>
</li>
<li>
<p><em>Guideline 24:</em> Prefer layout which does not affect translation from concrete to abstract syntax</p>
</li>
<li>
<p><em>Guideline 25:</em> Enable modularity</p>
</li>
<li>
<p><em>Guideline 26:</em> Introduce interfaces</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>As can be seen from the list, it considers it from a very abstract level and thus really contributes to the field. It applies generically if you want to design a file format. But it also applies in a specific context; for example if you want to redesign how mathematicians write their formulas. It is the only set of guidelines which also talks about notations.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="talk-38c3-fearsome-file-formats">Talk “38C3 - Fearsome File Formats”</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Ange Albertini <a href="#talk38c3">[talk38c3]</a> has built up a lot of expertise on file formats over the last decade and gives an overview in this talk about how file formats can be abused and repurposed. In this talk, I want to focus only on one slide in particular which lists recommendations how to design a “good file format”:</p>
</div>
<div class="imageblock center">
<div class="content">
<img src="/assets/img2025-08-05_ange-albertini_ten-commandments.png" alt="“Commandments of a good file format”" width="80%">
</div>
</div>
<div class="paragraph">
<p>In text, the ten commandments are:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Magic at offset zero (fast identification, no bypass)</p>
</li>
<li>
<p>Clear chunk structure (forward compatibility, easy parsing/cleanup)</p>
</li>
<li>
<p>Version number (forward thinking)</p>
</li>
<li>
<p>No duplicity (duplicitly → discrepency)</p>
</li>
<li>
<p>No “constant” variables (ossification → hardcoding)</p>
</li>
<li>
<p>Up-to-date specs (reflect reality)</p>
</li>
<li>
<p>Samples set (Theory isn&#8217;t enough)</p>
</li>
<li>
<p>Extensibility (your format will evolve in unknown ways)</p>
</li>
<li>
<p>Keep the spirit (don&#8217;t reuse formats for different intent without trivial distinction)</p>
</li>
<li>
<p>Perfect is the enemy of good (shortcuts will be taken to avoid over-complexity)</p>
</li>
</ol>
</div>
</div>
</div>
<div class="sect1">
<h2 id="article-on-file-formats">Article “On File Formats”</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Rather recently, Jari Komppa wrote an article <a href="#articleKOMPPA">[articleKOMPPA]</a> on the design of file formats (<a href="https://news.ycombinator.com/item?id=44049252">HackerNews discussion</a>). He lists the following recommendations:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Does a file format exist for this yet?</p>
</li>
<li>
<p>Does it need to be human readable?</p>
</li>
<li>
<p>Chunk your binaries.</p>
</li>
<li>
<p>Allow partial parsing.</p>
</li>
<li>
<p>Version your formats.</p>
</li>
<li>
<p>Document your format.</p>
</li>
<li>
<p>Don&#8217;t include fields just in case.</p>
</li>
<li>
<p>Consider the target hardware.</p>
</li>
<li>
<p>Compression.</p>
</li>
<li>
<p>On filename extensions (i.e. consider four letters, but three letters are mostly allocated).</p>
</li>
</ol>
</div>
</div>
</div>
<div class="sect1">
<h2 id="paper-little-languages">Paper “Little languages”</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The paper by Jon Bentley <a href="#paperLITTLE">[paperLITTLE]</a> is by far the oldest. I do believe the notion of domain-specific languages was not sufficiently developed at that time and he coined the notion of <em>little languages</em>. The most prominent example from the paper is <a href="https://en.wikipedia.org/wiki/AWK">awk</a> as little language. The idea is that domain-specific languages shall be developed and tools like awk help for the first step. He recites “an old rule of thumb” that “the first 10% of programming effort provide 90% of the functionality”. Only if the language evolves sufficiently, developers should consider using parsing tools like lex and yacc. Regarding the design of such languages, the paper lists the following recommendations:</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Orthogonality</dt>
<dd>
<p>keep unrelated features unrelated.</p>
</dd>
<dt class="hdlist1">Generality</dt>
<dd>
<p>use an operation for many purposes.</p>
</dd>
<dt class="hdlist1">Parsimony</dt>
<dd>
<p>delete unneeded operations.</p>
</dd>
<dt class="hdlist1">Completeness</dt>
<dd>
<p>can the language describe all objects of interest?</p>
</dd>
<dt class="hdlist1">Similarity</dt>
<dd>
<p>make the language as suggestive as possible.</p>
</dd>
<dt class="hdlist1">Extensibility</dt>
<dd>
<p>make sure the language can grow.</p>
</dd>
<dt class="hdlist1">Openness</dt>
<dd>
<p>let the user ”escape” to use related tools.</p>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect1">
<h2 id="discussion">Discussion</h2>
<div class="sectionbody">
<div class="paragraph">
<p>I want to start this discussion with a definition. Technically, there is no notion of a “binary file” and a “text file”. In practice, the distinction helps because we can immediately align our expectation whether we need a text editor (text file) or a specialized software (binary file) to handle the file. What is the distinction?</p>
</div>
<div class="sect2">
<h3 id="text-files-versus-binary-files">Text files versus binary files</h3>
<div class="paragraph">
<p>Fundamentally, text means that some serialization format or character set exists to encode text. The famous <a href="https://en.wikipedia.org/wiki/ASCII">ASCII</a> (American Standard Code for Information Interchange) standard covers 128 characters and other sets are not considered ASCII these days. The other famous text encoding is <a href="https://en.wikipedia.org/wiki/Unicode">Unicode</a> which has taken up the tremendous effort to cover all used writing systems of the world in one encoding. To serialize Unicode scalars into actual bytes, different character sets can be chosen. <a href="https://en.wikipedia.org/wiki/UTF-16">UCS-2 and UTF-16</a> are deprecated, but <a href="https://en.wikipedia.org/wiki/UTF-32">UTF-32</a> can be still found. Unlike UTF-32, <a href="https://en.wikipedia.org/wiki/UTF-8">UTF-8</a> has the advantage of backwards-compatibility to ASCII and even <a href="https://en.wikipedia.org/wiki/ISO/IEC_8859-1">ISO 8859-1</a>. Furthermore it uses less space to serialize text in common languages like English. Since each character uses one up to 4 four bytes, the same text encoded in UTF-32 usually longer, but cannot be indexed by codepoint in constant time. To summarize: there is a long history of character sets including <a href="https://en.wikipedia.org/wiki/EBCDIC">EBCDIC</a>, <a href="https://en.wikipedia.org/wiki/Mac_OS_Roman">Mac OS Roman</a>, <a href="https://en.wikipedia.org/wiki/Windows-1252">Windows-1252</a>, <a href="https://en.wikipedia.org/wiki/Shift_JIS">Shift-JIS</a>, <a href="https://en.wikipedia.org/wiki/Cork_encoding">Cork</a>, and <a href="https://en.wikipedia.org/wiki/UTF-8#Surrogates">WTF-8</a>. But with a current adoption above 98% within the World Wide Web, UTF-8 is the de-facto standard (backed by manifestos like <a href="https://utf8everywhere.org/">UTF-8 Everywhere</a>) and commonly picked as character set for new text file formats. And someone how thinks Unicode is unnecessary for English text, must be considered a bit naïve.</p>
</div>
<div class="paragraph">
<p>Going back to the question of binary versus text, the result is that some file formats declare that only byte sequences according to the declared character set are considered admissible files; namely text files. This is put into contrast to binary files where any sequence of bytes is admissible per default. Recognize that file formats like <a href="https://html.spec.whatwg.org/multipage/semantics.html#charset:content-type-2">HTML require you to declare the character set</a>, formats like <a href="https://en.wikipedia.org/wiki/PDF#Text">PDF allow you to switch character encoding in the file as often as desired</a>, and formats like <a href="https://www.rfc-editor.org/rfc/rfc8187">HTTP headers are so complex that custom RFCs were written</a>. One counterexample is the <a href="https://toml.io/en/">TOML file format</a> which declares that “a TOML file must be a valid UTF-8 encoded Unicode document” and therefore is a genuine text file format.</p>
</div>
</div>
<div class="sect2">
<h3 id="what-a-text-encoding-contributes">What a text encoding contributes</h3>
<div class="paragraph">
<p>One notorious problem with file format definitions is that people think that terms like “whitespace”, “hyphen”, or “line break” are universal, unambiguous names for characters. No, no, and no. Instead the notion of <a href="https://en.wikipedia.org/w/index.php?title=Unicode_character_property&amp;oldid=1295132189">whitespace</a> (more specifically <em>Unicode scalars with Whitespace property</em>), hyphen (more specifically <em>U+002D - HYPHEN-MINUS</em>), and line break (more specifically <em>Mandatory break according to <a href="https://www.unicode.org/reports/tr14/">UAX#14</a></em>) specifically come from text encodings like Unicode.</p>
</div>
<div class="paragraph">
<p>If you don&#8217;t specify the text encoding, I don&#8217;t know what those words mean. For Unicode encodings like UTF-8 or UTF-16, I clarified the meaning. If you use ASCII instead of Unicode, everyone understands that “whitespace” means 0x20, the space character as only representative of this group. If you mention hyphen, it is even more unambiguous than the Unicode case, because the less common <a href="https://en.wikipedia.org/w/index.php?title=Soft_hyphen&amp;oldid=1305884138">U+00AD SOFT HYPHEN</a> exists (among others). In the case of ASCII, “hyphen” means 0x2D unambiguously. But in ASCII there is no line break definition at all. Is 0x0A (“line feed”) a line break? Is 0x0D (“carriage return”) a line break? Both? Conventionally, 0x0A is a line break on Linux machines and the sequence 0x0A &amp; 0x0D is a line break on Windows machines. But why is 0x0C (“page break”) not a line break? If you define a page break, you necessarily contribute a line break?! We are never going to know this, because ASCII does not define what a line break is.</p>
</div>
<div class="paragraph">
<p>If you actually decide to use a well-thought through standard like Unicode, you can answer difficult questions quickly in a standardized way as well: Is <a href="https://www.unicode.org/reports/tr15/">Unicode normalization</a> semantically meaningful?</p>
</div>
<div class="paragraph">
<p>If you don&#8217;t specify the text encoding, I literally know nothing about the content. I don&#8217;t know what a whitespace character is. I don&#8217;t even know what a character is, because I don&#8217;t know how many bytes constitute a character.</p>
</div>
</div>
<div class="sect2">
<h3 id="regarding-syntax-escaping">Regarding syntax escaping</h3>
<div class="paragraph">
<p>Some binary file formats and most text file formats have some requirement like “arbitrary user content follows”. In this setting, you really don&#8217;t know when the user content is finished. As a result, you are going to need some byte sequence which tells “user content finishes here” which is not interpreted as user content itself. You need to escape the “user content syntax”.</p>
</div>
<div class="paragraph">
<p>I wrote <a href="/articles/2022-07-17-concept-of-syntax-escaping">an article about syntax escaping some time ago</a>, but the gist is this: syntax escaping can be avoided by a length specifier which is only practical for binary files (never let a user count bytes or Unicode codepoints). Otherwise, you can decide to declare one byte sequence to be “escaping”. If you repeat this byte sequence, it regains its original meaning, but otherwise some escaping sequence is started which might signify something like “user content stops here”.</p>
</div>
<div class="paragraph">
<p>The worst thing, you can do is to ignore the problem. If you allow arbitrary user content, but don&#8217;t declare an escaping mechanism, you either open up yourself to ambiguities or violate the requirement “<strong>arbitrary</strong> user content”. My personal opinion is that XML&#8217;s escaping mechanism is simple and extensible compared to other approaches.</p>
</div>
</div>
<div class="sect2">
<h3 id="regarding-file-extensions">Regarding file extensions</h3>
<div class="paragraph">
<p>File extensions give the operating system a clue which application might be capable of interpreting a file. For historic reasons, they tend to be short (2 to 4) sequences of Latin characters. They are an incomplete concept leading to unintended collisions. For example all kinds of markup syntaxes are declared as <code>.md</code> file these days. Historically <code>.txt</code> used to be full of collisions. But it still makes sense to align all users upon one file extension.</p>
</div>
<div class="paragraph">
<p>What I would like to stress here as well is the MIME type. It is equally helpful to align all users upon one MIME type. The <code>x-</code> prefix opens up MIME types to custom standards. So <code>text/x-foobar</code> would be a valid choice.</p>
</div>
</div>
<div class="sect2">
<h3 id="regarding-magic-numbers">Regarding magic numbers</h3>
<div class="paragraph">
<p>One might think that magic numbers are unnecessary boilerplate. If the specified structure is unique for your file format anyhow, why should a magic number be necessary? The answer is simple: Not all tools want to look at the entire document structure to determine whether a file follows a certain file format. If it only has to read some leading bytes (namely the so-called <em>magic number</em>), they are much quicker to determine whether the file is interesting <sup class="footnote">[<a id="_footnoteref_1" class="footnote" href="#_footnotedef_1" title="View footnote.">1</a>]</sup></p>
</div>
</div>
<div class="sect2">
<h3 id="regarding-version-numbers">Regarding version numbers</h3>
<div class="paragraph">
<p>The simple argument pro version numbers is “implementors can easily dispatch interpretation”. If your document follows the specification 1.0, the source code for 1.0 interprets your file. If your document follows the specification 2.0, the source code for 2.0 interprets your file. This way you can easily introduce backwards-incompatible version changes.</p>
</div>
</div>
<div class="sect2">
<h3 id="design-requires-re-re-re-iteration">Design requires re-re-re-iteration</h3>
<div class="paragraph">
<p>File format design is design. Every design needs iteration for perfection and consistency. Please finish the draft version in a straight-forwards, usecase-centered manner. But be open to improve upon your design in subsequent versions. Iterate and iterate and iterate. And re-iterate again. And ask your target audience about their opinion. Then you mastered the art.</p>
</div>
</div>
<div class="sect2">
<h3 id="about-the-general-approach-to-design">About the general approach to design</h3>
<div class="paragraph">
<p>One thing, I would like to point out which comes from programming language design is that design should go from specific cases to generality. What is meant that one can specify very extensible elements in your syntax. But you should define those elements for their specific cases and disallow others. In subsequent versions, you might understand which other cases exist and which cases make sense. Under these circumstances, you might open up that element for more (or more general) cases.</p>
</div>
<div class="paragraph">
<p>Let me illustrate this with a trivial example: You might have 10 specific cases to distinguish, but you have to use one byte as discriminant. Therefore 256 cases can be distinguished, but you only need 10 cases. Now the general approach to design can be done in the following <em>wrong</em> way:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Specify the 10 cases</p>
</li>
<li>
<p>Declare 246 cases to be “implementor-defined”</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Instead the following <em>correct</em> way can be taken:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Specify the 10 cases</p>
</li>
<li>
<p>Disallow 246 cases</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The point of the latter approach is not that “implementor-defined is always stupid”. If you are certain please specify (for example) 10 cases for the desired cases, 20 cases for “implementor-defined” usecases, but be aware that disallowing some values opens up extensibility in future versions. You should restrict your design tightly. Once you gained experience and feedback, you should open up to other cases. Being restricted in the beginning enables the necessary extensibility for later.</p>
</div>
</div>
<div class="sect2">
<h3 id="a-generic-approach-for-defining-binary-file-formats">A generic approach for defining binary file formats</h3>
<div class="paragraph">
<p>There is a simple design which can model any binary data model unambiguously. It is called TLV (<a href="https://en.m.wikipedia.org/wiki/Type%E2%80%93length%E2%80%93value">Type-Length-Value</a>).</p>
</div>
<div class="paragraph">
<p>The file format has to follow the general recommendations first. Introduce a magic number. Introduce a version number. Put your metadata in a header. And then let us write down the data in the body of the file.</p>
</div>
<div class="paragraph">
<p>The body is a sequence of entries. Every entry consists of a type, a length, and a value.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>A type is a discriminator (thus, of fixed width) telling what kind of data you are supposed to expect in the value. For example, byte <code>0x13</code> might identify value to an unsigned integer in big endian. <code>0x13</code> is one instance of this type.</p>
</li>
<li>
<p>A length specifies how many bytes the value constitutes of. It needs to be of fixed width as well and common choices include 16 or 32 bits. For example, bytes <code>0x00 0x04</code> might identify length 4 and thus our example value is expected to be an unsigned integer in big endian of 4 bytes.</p>
</li>
<li>
<p>The value is a sequence of bytes. Because of the previous values, you know exactly how many bytes you are supposed to read to understand the value. Furthermore, we attached some semantics through the type discriminator. The specification is now supposed to specify how to interpret those bytes of this type.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>You have to encode a boolean value? Designate a type, length one should always be required, and specify which two values are admissible. Done.<br>
You have to encode Unicode text? Designate a type, the length can be adjusted to the actual byte length, and specify which encoding you require in the value. Done.</p>
</div>
<div class="paragraph">
<p>This design is very simple and very generic. Does it solve all problems and do all binary files become instances of the TLV design? No. TLV is generic and a very good guideline. However, it applies only to binary files (no human wants to think through a three-step process all the time and particularly count bytes) and binary files mainly exist because they optimize some requirements over text files. Binary files might optimize parsing performance or space usage. As a result, designers start to skip fields. For example, if an entry of type <code>0x42</code> is always preceeded by an entry of type <code>0x41</code>, space-optimizing designers might claim that the type byte <code>0x42</code> must be left out. Indeed, position-defined entries do not need a type if it can be derived from the position index. But in this very moment, the TLV design principle is violated and TLV remains only as “general rule of thumb”.</p>
</div>
<div class="paragraph">
<p>Everyone should be familiar with TLV and follow it for binary files, if ambiguity-freedom cannot be guaranteed for the entire design. A similar design where values usually represent <em>chunks</em> is the <a href="https://en.wikipedia.org/wiki/Interchange_File_Format">Interchange File Format</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="target-hardware-and-endianness">Target hardware and endianness</h3>
<div class="paragraph">
<p>When it comes to binary files, endianness is necessary to be specified. Usually deciding upon this value directly leads to the question of target hardware platforms. Endianness can be defined arbitrarily. Big endian or little endian? It is trivial. Just pick one. But the only <em>meaningful</em> way to pick the best value is thinking about the target platform. Does it target Intel machines? Then little endian makes more sense. Are humans going to look at the values from time to time? Big endian might be more convenient, but less optimized for desktop computer hardware.</p>
</div>
<div class="paragraph">
<p>You should know your target domain, your target audience, and common hardware platforms. But don&#8217;t optimize prematurely.</p>
</div>
<div class="paragraph">
<p>If you start cramming all data into <a href="https://en.wikipedia.org/wiki/Bit_array">bitvectors</a> to save a few bytes to optimize space, you neglect that machines are optimized to operate on bytes and cache lines. Extracting individual bits is a time-consuming operation. You might be better off adding a few unused bits exchanging space for time.</p>
</div>
<div class="paragraph">
<p>In the end, benchmarking your prototype parsing implementation reveals the actually interesting parts to optimize. This becomes especially important, if you plan to apply compression on parts of your data.</p>
</div>
</div>
<div class="sect2">
<h3 id="syntax-and-semantics">Syntax and semantics</h3>
<div class="paragraph">
<p>My final point would be that syntax and semantics are two different concepts. You need to be aware of it. You may be able to use the syntax of an existing standard and define custom semantics on top of it. One example would be <a href="https://www.w3.org/TR/2006/REC-xml11-20060816/">XML</a> (syntax) and <a href="https://www.w3.org/2002/mmi/ink">InkML</a> (semantics). You may also define a new syntax like <a href="https://en.wikipedia.org/w/index.php?title=Simple_Outline_XML&amp;oldid=1280830136">Simple Outline XML</a> for existing semantics like XML.</p>
</div>
<div class="paragraph">
<p>I gave examples for text files here, but this also applies to binary files. The only problem is that binary files usually have a very specific data model which differs to other formats. But generic binary file standards include <a href="https://en.wikipedia.org/w/index.php?title=ASN.1&amp;oldid=1305031387">ASN.1</a>, <a href="https://github.com/edn-format/edn">edn</a>, and postcard (<a href="https://www.youtube.com/watch?v=HtBFvTH5ZKE">introductory talk on youtube</a>).</p>
</div>
<div class="paragraph">
<p>If you are able to split syntax and semantics, you end up in one of two scenarios:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>you can use an established, proven-in-practice standard for one of two components. The necessary tools do not need to be written again.</p>
</li>
<li>
<p>you get the possibility to remove one component and exchange it for something else, if you recognize a mistake. Programming languages like <a href="https://en.wikipedia.org/wiki/Dylan_(programming_language)#Syntax">Dylan</a> just removed their LISP-style syntax and introduced something new.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Not too bad, right?</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="decision-list">Decision list</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Finally, I want to contribute a decision list where items to consider are listed:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Are you sure the effort of defining a new file format is worth it? If no, stop. If yes, proceed.</p>
</li>
<li>
<p>Split syntax and semantics. Can you reuse syntax (e.g. XML, S-expressions, JSON, YAML, …) or semantics (eg. JSON, YAML, ASN.1, postcard, …) of existing ones?</p>
</li>
<li>
<p>The following holds true for text and binary files:</p>
<div class="ulist">
<ul>
<li>
<p>No duplicity (duplicitly → discrepency)</p>
</li>
<li>
<p>Add a version number. No exceptions. Consider <a href="https://semver.org/">versioning schemes</a> to communicate users which expectations regarding compatibility / upgrade necessity are given.</p>
</li>
<li>
<p>Ask for feedback regarding syntax (text files) and data model (text files and binary files)</p>
</li>
<li>
<p>Avoid unnecessary generality. It is easier to permit features later on than standardizing elements later when they are in use already</p>
</li>
<li>
<p>Ask a domain expert for feedback and iterate.</p>
</li>
<li>
<p>Increment the version number and release.</p>
</li>
<li>
<p>Which interfaces to embed content for other file formats do you provide?</p>
</li>
<li>
<p>Revise which elements provide modularity and extensibility in your file format.</p>
</li>
</ul>
</div>
</li>
<li>
<p>Is it going to be a text file?</p>
<div class="ulist">
<ul>
<li>
<p>Declare the character set (UTF-8 is recommended)</p>
</li>
<li>
<p>Unicode is utilized by the U-notation: <code>U+002C COMMA</code>. Other character sets commonly use plain hexadecimal notation like <code>0x2C</code>. If you refer to a character, get used to this notation and use it exclusively.</p>
</li>
<li>
<p>Depending on your character set, you may use words like ‘whitespace’ now to describe your file format</p>
</li>
<li>
<p>Do you want to base your syntax on existing concepts and notation? Remember that any existing technology exists, because it has some valuable benefits. But you are designing something new, because it does satisfy your requirements. Comprehend the benefits, integrate them into your design, and reiterate multiple times to achieve consistency.</p>
</li>
<li>
<p>Define the syntax escaping mechanism if arbitrary user content is allowed</p>
</li>
<li>
<p>Discuss punctuation versus keywords. Punctuation is a small set of characters and thus brief. But only programmers are used to use them in various contexts. Keywords are longer and extensible, but you have to discuss questions like casing and singular versus plural (depending on the writing system and language).</p>
</li>
<li>
<p>Discuss whether you want to include comments (elements which carry no semantics, but provide an opportunity for documentation to the author)</p>
</li>
<li>
<p>Discuss whether you want to allow trailing separators (e.g. <code>["item1", "item2",]</code> if comma is your separator)</p>
</li>
</ul>
</div>
</li>
<li>
<p>Is it going to be a binary file?</p>
<div class="ulist">
<ul>
<li>
<p>Add a magic number at offset zero</p>
</li>
<li>
<p>Declare: are multi-byte values encoded in little endian or big endian?</p>
</li>
<li>
<p>Declare and illustrate the big picture structure of your file format (e.g. header/body/footer). It is easy to get lost in details (or <em>bore the hell out of the reader</em>) when describing binary file formats.</p>
</li>
<li>
<p>Enable parsers to skip structural parts of your file format (e.g. the entire body, because its length is declared)</p>
</li>
<li>
<p>Follow the TLV design. Declare the semantics of values in the file.</p>
</li>
<li>
<p>If you don&#8217;t follow the TLV design, define the escaping mechanism (length declaration is recommended)</p>
</li>
</ul>
</div>
</li>
<li>
<p>Publication:</p>
<div class="ulist">
<ul>
<li>
<p>Provide example files.</p>
</li>
<li>
<p>Provide a specification document. Specify where people can direct their feedback to. Specify the version this document documents.</p>
</li>
<li>
<p>Develop tools to read, write, analyze, and fix files in this format.</p>
</li>
<li>
<p>Suggest a file extension for files. Suggest a MIME type for files.</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="conclusion">Conclusion</h2>
<div class="sectionbody">
<div class="paragraph">
<p>File format definition is a difficult art. And hopefully I summarized some guidelines for you. If you succeed, people are going to enjoy writing parsers for it. If you fail, your file format is going to suffer from fragmentation and limited adoption. Good luck!</p>
</div>
</div>
</div>
<div id="footnotes">
<hr>
<div class="footnote" id="_footnotedef_1">
<a href="#_footnoteref_1">1</a>. For UNIX users, a simple scenario is <code>grep</code> which has to decide whether a file is binary (to be ignored) or text (to be searched in).
</div>
</div>]]></content><author><name>Lukas Prokop</name></author><category term="cs" /><category term="software-development" /><summary type="html"><![CDATA[Update 2025-10-19: I added edn as mentioned file format.]]></summary></entry><entry xml:lang="eo"><title type="html">Revjuo: Aŭstria Esperanto-Kongreso 2025</title><link href="https://lukas-prokop.at/articles/2025-05-18-revjuo-a%C5%ADstria-esperanto-kongreso" rel="alternate" type="text/html" title="Revjuo: Aŭstria Esperanto-Kongreso 2025" /><published>2025-05-18T10:00:00+02:00</published><updated>2025-05-25T12:06:57+02:00</updated><id>https://lukas-prokop.at/articles/2025-05-18-revjuo-a%C5%ADstria-esperanto-kongreso</id><content type="html" xml:base="https://lukas-prokop.at/articles/2025-05-18-revjuo-a%C5%ADstria-esperanto-kongreso"><![CDATA[<div class="sect1">
<h2 id="enkonduko">Enkonduko</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Ekde la 2-a ĝis la 4-a de Maio 2025, la <a href="https://aek2025.esperanto-graz.at/">unua Aŭstria Esperanto Kongreso</a> okazis ĉe Graz. Graz estas la dua plej granda urbo de Aŭstrio kaj mia eksloĝurbo. Lastatempe Ewald iĝis estro de la Aŭstria Esperanto klub (post sia tempo kiel Stiria estro) kaj li revis pri ĉi tiu evento. Afablaj Esperantistoj de pluraj landoj helpis realigi ĝin. Persone, mi ne kontribuis ĉar mi translokiĝis dum la organiztempo kaj mi nur prelegis.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="evento">Evento</h2>
<div class="sectionbody">
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2025-05-09_progresanta-kongreso.jpg"><img src="../assets/img/2025-05-09_progresanta-kongreso.jpg" alt="La bildo montras grandan ĉambron kun diversaj Esperantaj flagoj kaj aŭskultaro" width="100%"></a>
</div>
</div>
<div class="paragraph">
<p>Dum tri tagoj, pluraj prelegoj okazis. Inter la prelegoj estis sufiĉe da tempo ĉar entute nur 14 prelegoj okazis. Nan ankaŭ kontribuis du sesionojn kun ekzercado de ĉigongo. Vendrede kaj sabate vespere okazis muzikeventon. Ĝenerale la prelegoj temis pri kulturoj kaj lingvoj. La kongresejo estis la partidomon de la urbestrino.</p>
</div>
<div class="paragraph">
<p>Mi mencios nur kelkajn prelegojn:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>En “Sopiro je Senco”, Norina kaj Philipp klarigis kiel ili retrovas logoterapion en la Esperanto komunumo.</p>
</li>
<li>
<p>En “Unuiĝintaj Nacioj, kiel la reprezentantoj de UEA laboras tie”, Mireille raportis ŝian sperton kun reprezento de Esperanto en la UN.</p>
</li>
<li>
<p>La prelego “Gravaj sciencistoj de Graz kaj Stirio” estis mojoza ĉar mi certas ke ĉiu aŭskultinto lernis ion pri sciencistoj de Graz. Ŝi prezentis biografion de sciencistoj kaj iliaj gravaj rezultoj.</p>
</li>
<li>
<p>Mi lernis ke la preleganto Viŝnja nur lernis Esperanton por unu jaro nun kaj ŝi jam perfekte prezentis la temon “La vera genio: Spomenka Štimec”. Estis tre interesa prelego ĉar mi lernis pri la literaturo de multaj aŭtoroj kaj ŝi ankaŭ menciis la rilaton inter Esperanto monumento ĉe Graz kaj Zagreb. Mi tute ne sciis; mi pardonpetas.</p>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2025-05-10_monumento-ĉe-graz-kaj-zagreb.jpg"><img src="../assets/img/2025-05-10_monumento-ĉe-graz-kaj-zagreb.jpg" alt="La bildo montras lumbildon de du monumentoj trovaĝante en Zagreb kaj Graz" width="100%"></a>
</div>
</div>
</li>
<li>
<p>En la prelego “Esperanto kaj Rumantsch Grischun”, mi lernis pri la Rumantsch Grischun lingvo parolante en Svislando. Mi tute ne sciis pri la lingvo.</p>
</li>
<li>
<p>Uli komparis diverslingvajn tradukojn de “La eta princo” de Antoine de Saint-Exupéry Statistika en sia prelego. Mi ne diras ke ĉiu statistiko estis interesa (ofte nur estis rezulto de la skribsistemo) sed li bone klopodis kolekti statistikajn rezultojn kaj plaĉis al mi.</p>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2025-05-11_ulrich-parolas-pri-tradukoj-de-eta-princo.jpg"><img src="../assets/img/2025-05-11_ulrich-parolas-pri-tradukoj-de-eta-princo.jpg" alt="Ulrich dekstre prezentas la lumbildon maldekstre kiu montras statistikon pri la nombro de signojn per traduko" width="100%"></a>
</div>
</div>
</li>
<li>
<p>Amuze en la tria prelego, Mireille prezentis fotojn de diversaj landoj montre banoj, duŝoj, vestolavadoj, kaj necesejoj.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Mia <a href="https://lukas-prokop.at/talks/2025-05-10_alireblo/lumbildoj.pdf">propra prelego</a> funkciis akceptable. Mi prelegis pri alireblo en cifereca kompostado. Mi volis paroli pri etiketataj PDF dosieroj, sed mi eksciis ke la temo estus tro teknika. Do mi plilongigis la enkondukon pri ciferecaj programoj. Antaŭ la prelego mi komprenis ke la kvar programoj ne taŭgas por 30 minutoj. Mi forigis miajn lumbildoj de du programoj kaj ekprezentis. Mi tre ŝatis miajn finajn lumbildojn sed ankoraŭ trovis akuzativan eraron dum la prelego. Finfine mi perfekte trafis la 30 minutojn sed mia parolo estis malbone. Mi konis la vortojn sed mi ne sufiĉe flue parolis pri la temo. Klopodu, Luko!</p>
</div>
<div class="paragraph">
<p>Mi ne parolis pri la diversaj interagoj de homoj. Mi parolis kun diversaj afablaj homoj. Tre plaĉis al mi ke diversaj Esperantistoj organizis libroservon, muzikon, sesion kun korpa ekzercado, kaj helpis realigi la eventon.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="konkludo">Konkludo</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Estis malgranda evento de proksime 70 partoprenintoj. La organizo ne estis tiel bone, sed bone taŭgis por la partoprenaro. Dankon por la kontribuoj, Esperantistoj!</p>
</div>
</div>
</div>]]></content><author><name>Lukas Prokop</name></author><category term="languages" /><category term="Esperanto" /><category term="reflection" /><summary type="html"><![CDATA[Enkonduko]]></summary></entry><entry xml:lang="en"><title type="html">Review: RustWeek 2025</title><link href="https://lukas-prokop.at/articles/2025-05-17-rustweek2025-review" rel="alternate" type="text/html" title="Review: RustWeek 2025" /><published>2025-05-17T09:00:00+02:00</published><updated>2025-05-25T12:06:15+02:00</updated><id>https://lukas-prokop.at/articles/2025-05-17-rustweek2025-review</id><content type="html" xml:base="https://lukas-prokop.at/articles/2025-05-17-rustweek2025-review"><![CDATA[<div class="sect1">
<h2 id="motivation">Motivation</h2>
<div class="sectionbody">
<div class="paragraph">
<p>My company was generous and sent me to <a href="https://2025.rustweek.org/">RustWeek 2025</a> organized by RustNL in Utrecht, Netherlands. RustWeek is a conference for rust developers and especially many core contributors can be found there. So this was a nice opportunity to get some educational input for the programming language. I visited the conference together with a work colleague.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="travelling">Travelling</h2>
<div class="sectionbody">
<div class="paragraph">
<p>We left Vienna by night train towards Amersfoort on Sunday. Arriving late on Monday, we went to our hotel. Unpacking our stuff, we got our conference badges, headed for lunch, and started our day of work very late. Getting the first impressions of Utrecht, I concluded this is a very nice place for me. The people are nice and expectedly I love the bicycling infrastructure. The canal Merwedekanaal benoorden de Lek gave me sea-style vibes (sure, as Austrian my understanding of seas is very limited).</p>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2025-05-12_netherlands-windmill.jpg"><img src="../assets/img/2025-05-12_netherlands-windmill.jpg" alt="The picture shows a scene from the Netherlands in the afternoon with a windmill in the center" width="100%"></a>
</div>
<div class="title">Figure 1. The Netherlands are famous for their windmills</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2025-05-12_netherlands-pavement.jpg"><img src="../assets/img/2025-05-12_netherlands-pavement.jpg" alt="A street in Utrecht where pedestrians can walk on the left and right side of the street on a pavement and cars are parked next it it. The center allows cars to pass through the street and many trees make the street very green" width="100%"></a>
</div>
<div class="title">Figure 2. A common street situation in Utrecht (pavement made of bricks and many green trees)</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="conference-venue">Conference venue</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The conference took place at Kinepolis Jaarbeurs (cinema of the conference center). <a href="https://hachyderm.io/@Mara/114502378870262985">Mara</a> turned this into a wonderful experience by subtly replacing the cinema promotional posters by rust-tailored ones. Splendid!</p>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2025-05-13_cinema-posters.jpg"><img src="../assets/img/2025-05-13_cinema-posters.jpg" alt="Several rust-themed cinema posters referring to well-known movies like Indiana Jones but calling it &quot;Raiders of the Lost Arc&lt;_&gt;&quot; instead" width="100%"></a>
</div>
<div class="title">Figure 3. Subtile rust cinema posters</div>
</div>
<div class="paragraph">
<p>Even though the conference essentially took place the entire week, we only had tickets for the two conference days with talks.</p>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2025-05-13_rustweek2025-my-badge"><img src="../assets/img/2025-05-13_rustweek2025-my-badge.jpg" alt="My badge showing my name with a cinema room in the blurred background" width="50%"></a>
</div>
<div class="title">Figure 4. My conference badge</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="conference">Conference</h2>
<div class="sectionbody">
<div class="paragraph">
<p>On 2025-05-13, the talks started. The intro was very popular. It showed a giant ferris orbitting the earth with the final title “RustWeek” in the style of the Universal Studios intro. They mentioned it took them three days to create it including one day for rendering. Its duration is less than 30 seconds, if I remember correctly.</p>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2025-05-13_rustweek2025-ferris-intro"><img src="../assets/img/2025-05-13_rustweek2025-ferris-intro.jpg" alt="A photo of the RustWeek intro showing a giant ferris in front of Earth" width="100%"></a>
</div>
<div class="title">Figure 5. Rendered intro</div>
</div>
<div class="paragraph">
<p>There were some very interesting talks for me and I am not finished with watching all <a href="https://www.youtube.com/@rustnederlandrustnl">recordings</a> yet. But I am going to lose some words about the following talks:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://rustweek.org/talks/alex">Alex Crichton on the question “10 Years of Rust: Why?”</a> gave a really suitable keynote for the event. He gave a rationale for the steps taken and tried to analyze what was necessary to reach 10 years of developing the language.</p>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2025-05-13_rustweek2025-alex-rust"><img src="../assets/img/2025-05-13_rustweek2025-alex-rust-10y.jpg" alt="Alex Crichton is seen on the right presenting his keynote inside the cinema and the slides on the left show the number of his git commits over time which decreased since he focused on wasmtime contributions" width="50%"></a>
</div>
</div>
</li>
<li>
<p>Due to my personal interest in digital typesetting, I am very grateful to Raph Levien and his work. <a href="https://rustweek.org/talks/raph/">Raph spoke about “Faster, easier 2D vector rendering”</a> and spoke about one algorithm to improve rendering of fonts. He tried to reason about the use of GPUs for font rendering and explained which rust crates come into play.</p>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2025-05-13_rustweek2025-raph-glyphs"><img src="../assets/img/2025-05-13_rustweek2025-raph-glyphs.jpg" alt="Raph Levien is shown at the right presenting his talk and on the left the slide showing a capital R glyph in a grid structure" width="50%"></a>
</div>
</div>
</li>
<li>
<p>I once wrote <a href="https://lukas-prokop.at/articles/2023-03-25-icu4x">a blog article about icu4x 1.0</a> when I started using it. I am using icu4x in the <a href="https://github.com/typho/opstr">opstr project</a>. <a href="https://rustweek.org/talks/shane/">Shane spoke about Beyond ICU4X 2.0 and future goals</a>. I promised him to provide a review of icu4x 2.0 as well. Stay tuned at this blog!</p>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2025-05-13_rustweek2025-shane-icu4x"><img src="../assets/img/2025-05-13_rustweek2025-shane-icu4x.jpg" alt="Shane on the right of the picture is pointing towards the slides on the left and the slides say “i18n is portable lightweight and secure”" width="50%"></a>
</div>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>There are so many more talks to talk about. And simultaneously it is important to talk to the people. So many nice people with aspirations and dreams for the programming language. And I did not mention how much I enjoyed to resolve some rust issues in my head during the conference. A lot of kudos to my work colleague who is following core development efforts and helped me out several times. By the way, I have identified 4 Austrians in total at the conference.</p>
</div>
<div class="paragraph">
<p>On the day after the talks, <a href="https://blog.rust-lang.org/2025/05/15/Rust-1.87.0/">rust 1.87 was released live from Utrecht</a>. As I mentioned, we only participated on the two days and I left by night train towards Linz on Thursday evening.</p>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2025-05-14_rustweek2025-community.jpg"><img src="../assets/img/2025-05-14_rustweek2025-community.jpg" alt="the picture shows a conference venue hall filled with about 80 people chatting to each other" width="100%"></a>
</div>
<div class="title">Figure 6. Conference venue hall</div>
</div>
<div class="imageblock center">
<div class="content">
<a class="image" href="../assets/img/2025-05-14_rustweek2025-final-photo"><img src="../assets/img/2025-05-14_rustweek2025-final-photo.jpg" alt="RustWeek organizers gathered at the front stage in a cinema room to take a final conference photo together" width="100%"></a>
</div>
<div class="title">Figure 7. Final photo by the RustWeek organizers</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="conclusion">Conclusion</h2>
<div class="sectionbody">
<div class="paragraph">
<p>I absolutely enjoyed Utrecht. I absolutely enjoyed the conference. I was astonished how well-organized the conference was by the RustNL community. So I want to thank them a lot and hope for a wonderful conference for them in 2026 as well!</p>
</div>
</div>
</div>]]></content><author><name>Lukas Prokop</name></author><category term="work" /><category term="reflection" /><category term="community" /><category term="rustlang" /><summary type="html"><![CDATA[Motivation]]></summary></entry></feed>