<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://blog.tripu.info/</id>
    <title>blog.tripu.info</title>
    <updated>2026-04-30T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://blog.tripu.info/"/>
    <subtitle>tripu's blog</subtitle>
    <icon>https://blog.tripu.info/img/favicon.png</icon>
    <entry>
        <title type="html"><![CDATA[April 2026, second fortnight]]></title>
        <id>https://blog.tripu.info/2026-april-2</id>
        <link href="https://blog.tripu.info/2026-april-2"/>
        <updated>2026-04-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[(&larr; See the first fortnight)]]></summary>
        <content type="html"><![CDATA[<p>(← See the <a class="" href="https://blog.tripu.info/2026-april-1">first fortnight</a>)</p>
<figure><a href="https://blog.tripu.info/img/2026/april-16.jpeg"><img src="https://blog.tripu.info/img/2026/april-16.jpeg" alt="2026-04-16"></a><figcaption><p><strong>Thu 16<sup>th</sup></strong><br>
Loving my commute again (revising some <em>kanji</em>).</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-17.jpeg"><img src="https://blog.tripu.info/img/2026/april-17.jpeg" alt="2026-04-17"></a><figcaption><p><strong>Fri 17<sup>th</sup></strong><br>
Running in good weather (~6.1 km in ~36′).</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-18.jpeg"><img src="https://blog.tripu.info/img/2026/april-18.jpeg" alt="2026-04-18"></a><figcaption><p><strong>Sat 18<sup>th</sup></strong><br>
With my dad and my wife, sorting through some <em>bladder campion</em> (aka <em>maiden's tears</em>) that my dad picked from his garden.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-19.jpeg"><img src="https://blog.tripu.info/img/2026/april-19.jpeg" alt="2026-04-19"></a><figcaption><p><strong>Sun 19<sup>th</sup></strong><br>
130-km-long biking route.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-20.jpeg"><img src="https://blog.tripu.info/img/2026/april-20.jpeg" alt="2026-04-20"></a><figcaption><p><strong>Mon 20<sup>th</sup></strong><br>
Yearly MOT.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-21.jpeg"><img src="https://blog.tripu.info/img/2026/april-21.jpeg" alt="2026-04-21"></a><figcaption><p><strong>Tue 21<sup>st</sup></strong><br>
Reading in bed (<a href="https://www.goodreads.com/review/show/2203579681" target="_blank" rel="noopener noreferrer" class=""><em>The Three-Body Problem</em></a>).</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-22.jpeg"><img src="https://blog.tripu.info/img/2026/april-22.jpeg" alt="2026-04-22"></a><figcaption><p><strong>Wed 22<sup>nd</sup></strong><br>
Meetup with my <em>beautiful nerds</em> (as <strong>Roman Mars</strong> would say).</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-23.jpeg"><img src="https://blog.tripu.info/img/2026/april-23.jpeg" alt="2026-04-23"></a><figcaption><p><strong>Thu 23<sup>rd</sup></strong><br>
Dressed up and on wheels!</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-24.jpeg"><img src="https://blog.tripu.info/img/2026/april-24.jpeg" alt="2026-04-24"></a><figcaption><p><strong>Fri 24<sup>th</sup></strong><br>
High-speed train to Valladolid to spend the weekend with old friends.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-25.jpeg"><img src="https://blog.tripu.info/img/2026/april-25.jpeg" alt="2026-04-25"></a><figcaption><p><strong>Sat 25<sup>th</sup></strong><br>
The aforementioned old friends (we met twenty-four years ago, during our Erasmus stay).</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-26.jpeg"><img src="https://blog.tripu.info/img/2026/april-26.jpeg" alt="2026-04-26"></a><figcaption><p><strong>Sun 26<sup>th</sup></strong><br>
Back to Madrid.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-27.jpeg"><img src="https://blog.tripu.info/img/2026/april-27.jpeg" alt="2026-04-27"></a><figcaption><p><strong>Mon 27<sup>th</sup></strong><br>
Starting to cook dinner.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-28.jpeg"><img src="https://blog.tripu.info/img/2026/april-28.jpeg" alt="2026-04-28"></a><figcaption><p><strong>Tue 28<sup>th</sup></strong><br>
Lunch break with <strong>Pedro</strong>.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-29.jpeg"><img src="https://blog.tripu.info/img/2026/april-29.jpeg" alt="2026-04-29"></a><figcaption><p><strong>Wed 29<sup>th</sup></strong><br>
Afternoon snack straight after school with the kids.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-30.jpeg"><img src="https://blog.tripu.info/img/2026/april-30.jpeg" alt="2026-04-30"></a><figcaption><p><strong>Thu 30<sup>th</sup></strong><br>
Breakfast with friends.</p></figcaption></figure>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="daily-photo" term="daily-photo"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[April 2026, first fortnight]]></title>
        <id>https://blog.tripu.info/2026-april-1</id>
        <link href="https://blog.tripu.info/2026-april-1"/>
        <updated>2026-04-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[For the nineteenth year in a row,]]></summary>
        <content type="html"><![CDATA[<p>For the <a href="https://www.flickr.com/photos/tripu/collections/72157616151140465/" target="_blank" rel="noopener noreferrer" class="">nineteenth year in a row</a>,
I'm taking one photo every day during the month of April.</p>
<p>Here is the first half of the month:</p>
<figure><a href="https://blog.tripu.info/img/2026/april-01.jpeg"><img src="https://blog.tripu.info/img/2026/april-01.jpeg" alt="2026-04-01"></a><figcaption><p><strong>Wed 1<sup>st</sup></strong><br>
The kids, playing near my parents'.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-02.jpeg"><img src="https://blog.tripu.info/img/2026/april-02.jpeg" alt="2026-04-02"></a><figcaption><p><strong>Thu 2<sup>nd</sup></strong><br>
Easter in Granada.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-03.jpeg"><img src="https://blog.tripu.info/img/2026/april-03.jpeg" alt="2026-04-03"></a><figcaption><p><strong>Fri 3<sup>rd</sup></strong><br>
Hiking around a Moorish castle from the 14<sup>th</sup> century in Jaén.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-04.jpeg"><img src="https://blog.tripu.info/img/2026/april-04.jpeg" alt="2026-04-04"></a><figcaption><p><strong>Sat 4<sup>th</sup></strong><br>
Driving back home.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-05.jpeg"><img src="https://blog.tripu.info/img/2026/april-05.jpeg" alt="2026-04-05"></a><figcaption><p><strong>Sun 5<sup>th</sup></strong><br>
Hiking in <em>La Pedriza</em>.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-06.jpeg"><img src="https://blog.tripu.info/img/2026/april-06.jpeg" alt="2026-04-06"></a><figcaption><p><strong>Mon 6<sup>th</sup></strong><br>
At the gym.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-07.jpeg"><img src="https://blog.tripu.info/img/2026/april-07.jpeg" alt="2026-04-07"></a><figcaption><p><strong>Tue 7<sup>th</sup></strong><br>
Annual check for my bike.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-08.jpeg"><img src="https://blog.tripu.info/img/2026/april-08.jpeg" alt="2026-04-08"></a><figcaption><p><strong>Wed 8<sup>th</sup></strong><br>
Picking up the kids from school.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-09.jpeg"><img src="https://blog.tripu.info/img/2026/april-09.jpeg" alt="2026-04-09"></a><figcaption><p><strong>Thu 9<sup>th</sup></strong><br>
A break at the office.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-10.jpeg"><img src="https://blog.tripu.info/img/2026/april-10.jpeg" alt="2026-04-10"></a><figcaption><p><strong>Fri 10<sup>th</sup></strong><br>
Grocery-shopping with <em>Miss Entropy</em>.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-11.jpeg"><img src="https://blog.tripu.info/img/2026/april-11.jpeg" alt="2026-04-11"></a><figcaption><p><strong>Sat 11<sup>th</sup></strong><br>
<a href="https://rufustf.com/" target="_blank" rel="noopener noreferrer" class="">Rufus T. Firefly</a> live at <em>La Riviera</em> with my wife.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-12.jpeg"><img src="https://blog.tripu.info/img/2026/april-12.jpeg" alt="2026-04-12"></a><figcaption><p><strong>Sun 12<sup>th</sup></strong><br>
Theatre for the kids.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-13.jpeg"><img src="https://blog.tripu.info/img/2026/april-13.jpeg" alt="2026-04-13"></a><figcaption><p><strong>Mon 13<sup>th</sup></strong><br>
Working from home.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-14.jpeg"><img src="https://blog.tripu.info/img/2026/april-14.jpeg" alt="2026-04-14"></a><figcaption><p><strong>Tue 14<sup>th</sup></strong><br>
Loving my commute.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2026/april-15.jpeg"><img src="https://blog.tripu.info/img/2026/april-15.jpeg" alt="2026-04-15"></a><figcaption><p><strong>Wed 15<sup>th</sup></strong><br>
Taking the kids to school.</p></figcaption></figure>
<p>(→ Continue to the <a class="" href="https://blog.tripu.info/2026-april-2">second fortnight</a>)</p>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="daily-photo" term="daily-photo"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[2026 resolutions Q1 checkpoint]]></title>
        <id>https://blog.tripu.info/2026-q1-checkpoint</id>
        <link href="https://blog.tripu.info/2026-q1-checkpoint"/>
        <updated>2026-04-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This year, the oracles advised me thus:]]></summary>
        <content type="html"><![CDATA[<p>This year, <a class="" href="https://blog.tripu.info/2026-resolutions">the oracles advised me thus</a>:</p>
<blockquote>
<p><em>“Set calendar reminders for April 1, July 1, and October 1 to review progress.
Adjust goals that aren't working rather than carrying them as dead weight all year.”</em></p>
</blockquote>
<p>And I decided it was a good idea.</p>
<p>So, here goes my quarterly review.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="reading">Reading<a href="https://blog.tripu.info/2026-q1-checkpoint#reading" class="hash-link" aria-label="Direct link to Reading" title="Direct link to Reading" translate="no">​</a></h2>
<p><strong>Read mostly short books</strong>:
👍
that's what I'm doing, for the most part.
Average book read in Jan–Mar: 140 pages long.</p>
<p><strong>Read eight physical books that I had selected</strong>:
👍
looking good; I have already read four of those.</p>
<p><strong>On Goodreads, read at least ten books</strong>:
👍
looking very good; I have already read eight (although three
of those were graphic novels) and I'm halfway through number nine.</p>
<p><strong>Download some long-form blog posts that I have been saving
over the years and read them on the reMarkable or the Kindle</strong>:
👍
I did that and read a bunch of articles, mostly by <strong>Scott Alexander</strong>.
I still have many for the rest of the year.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="writing">Writing<a href="https://blog.tripu.info/2026-q1-checkpoint#writing" class="hash-link" aria-label="Direct link to Writing" title="Direct link to Writing" translate="no">​</a></h2>
<p><strong>Finish the draft of my short story during the first quarter of the year</strong>:
☹️
I wrote quite a lot (for my meagre standards), and added some good pages.
I did so while commuting, and a few times at night in bed.
But I missed my self-imposed deadline.
So <strong>I'm granting myself an extension of one additional quarter</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="drawing-and-painting">Drawing and painting<a href="https://blog.tripu.info/2026-q1-checkpoint#drawing-and-painting" class="hash-link" aria-label="Direct link to Drawing and painting" title="Direct link to Drawing and painting" translate="no">​</a></h2>
<p>Nil.
(But there wasn't a proper resolution about this, anyway.)</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="nutrition">Nutrition<a href="https://blog.tripu.info/2026-q1-checkpoint#nutrition" class="hash-link" aria-label="Direct link to Nutrition" title="Direct link to Nutrition" translate="no">​</a></h2>
<p><strong>Be a better vegetarian, make a conscious effort to plan meals</strong>:
😐
Slight improvement over my baseline, but not as much as I had hoped for.</p>
<p><strong>Eat a little better, cut on bad food</strong>:
😐
I ate almost nothing of what I consider “bad” for almost a whole
quarter.
(The fact that I am now wearing clear aligners 24/7 except while eating, and
that I have to wash them properly after meals, was unexpected help:
it's easier to avoid snacks and to stick to regular meals that way.)
But I'm not giving myself a high mark because in the last week or two I had a
partial relapse.</p>
<p>On an impromptu, I stayed away from <strong>coffee</strong> for two or three months.
I never consumed much; but sometimes I have the occassional night when sleep doesn't
come easy, and I always wondered to what extent caffeine was messing with my
circadian rhythm.
One day in January I realised coffee falls into the “bad” category after
all, and I simply stopped taking it altogether.</p>
<p>The results?
I think I noticed fewer sleepy days and a bit less difficulty getting to sleep,
and I wish I could report significant improvements&nbsp;—&nbsp;but the truth
is it wasn't dramatic, and the positive effects I think I saw could be
caused entirely by autosuggestion, or by chance over such a short period of time.</p>
<p><strong>I'm reflecting about this whole  resolution now</strong>, because I'm not convinced the
benefits justify the sacrifices, and eating what I decided I want to eat doesn't
come as easy to me as, say, reading what I decided I want to read.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="exercise">Exercise<a href="https://blog.tripu.info/2026-q1-checkpoint#exercise" class="hash-link" aria-label="Direct link to Exercise" title="Direct link to Exercise" translate="no">​</a></h2>
<p><strong>Keep on running and weight-lifting, work out at the gym at least twice a week and do it better</strong>:
😐
The good is that I'm exercising roughly as often as I did in 2025 (once every three days),
that I'm going to the gym as often (once every five days), and that every time I work out I spend
more time than I used to (typically 55′, all exercises combined) and I push myself
a little more than I used to.
The bad is that I didn't achieve going to the gym twice a week or more (I fell short by
nine session in Q1).</p>
<p>No trace of a third sport, although this year I went <strong>skiing</strong> again
(two trips, five days of ski in total).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="work">Work<a href="https://blog.tripu.info/2026-q1-checkpoint#work" class="hash-link" aria-label="Direct link to Work" title="Direct link to Work" translate="no">​</a></h2>
<p><strong>Announce, by the end of February, my business project</strong>:
☹️
I underestimated how busy I would be with my new job.
And working on this side project is a task that is particularly difficult to
squeeze into my daily routine (as opposed to, say, reading or writing): it's
something I need to do at home, on my personal computer, in my spare time,
when family and chores do not distract me.
This is a clear “F”.
For this, too, <strong>I'm granting myself an extension of one additional quarter</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="philanthropy">Philanthropy<a href="https://blog.tripu.info/2026-q1-checkpoint#philanthropy" class="hash-link" aria-label="Direct link to Philanthropy" title="Direct link to Philanthropy" translate="no">​</a></h2>
<p><strong>Give away 10% of my gross income to charities working on poverty and global health</strong>:
👍
Done.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="private-resolutions">Private resolutions<a href="https://blog.tripu.info/2026-q1-checkpoint#private-resolutions" class="hash-link" aria-label="Direct link to Private resolutions" title="Direct link to Private resolutions" translate="no">​</a></h2>
<ul>
<li class="">#B daily: 👍 Most days I tick this box.</li>
<li class="">#D weekly: 👍 Done all weks.
This is both Good and Easy.</li>
<li class="">#F: ☹️ Nope.
This needs a little bit of preparation, which I haven't done yet.</li>
<li class="">#J: 👍 Achieved.</li>
<li class="">#P: 👍 Mostly achieved.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-changes-or-experiments">Other changes or experiments<a href="https://blog.tripu.info/2026-q1-checkpoint#other-changes-or-experiments" class="hash-link" aria-label="Direct link to Other changes or experiments" title="Direct link to Other changes or experiments" translate="no">​</a></h2>
<p><strong>Since March 10 or so, and for one month, I did not listen to any podcasts.</strong></p>
<p>I had not planned to do this, nor was it a new year's resolution.
One day I simply decided that my ears would benefit from fewer hours of
earbuds/earphones/headset, and on top of that I wanted to experiment
with being more “present”: too often I do not pay attention
to the environment or to what I am doing because I am focused on a podcast.
Sometimes at home doing household chores I do not hear a conversation
in some other room or my kids saying something to me because I am
plugged in to a podcast.
And walking on the street I rarely pay attention to life around me
or let my mind wander aimlessly because there is always some
voice in my ear.</p>
<p>A couple random nudges from life recently made me think again of the importance
of having time to think freely, moments when one is truly
“doing nothing” and thus open to inspiration and to
whimsical thoughts (and to rest).
And so I decided to cut on podcasts&nbsp;—&nbsp;radically, of course.</p>
<p>I have to say so far I am not missing them.
Every few days I check and I see that the queue of new episodes has grown
with lots of promising monologues and debates from some thinkers I love…
and I mercilessly delete them in bulk.</p>
<p>Perhaps podcasts were not such an integral part of my being up-to-date, of
my learning, after all.
Perhaps the distance between podcasts and toxic “news” is not
so great.
I have not made up my mind yet; I'll continue with the experiment and see.</p>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="personal" term="personal"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[My only axiom]]></title>
        <id>https://blog.tripu.info/my-only-axiom</id>
        <link href="https://blog.tripu.info/my-only-axiom"/>
        <updated>2026-02-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[By the time 12 [sic] Rules for Life became a well-known book worldwide, Jordan Peterson]]></summary>
        <content type="html"><![CDATA[<p>By the time <em>12 [sic] Rules for Life</em> became a well-known book worldwide, <strong>Jordan Peterson</strong>
was already showing the first signs of intellectual decline
(<a href="https://www.youtube.com/watch?v=CmakSLYutYk" target="_blank" rel="noopener noreferrer" class="">“I eat beef, and salt, and water. That's it. And I never cheat. Ever. Not even a little bit”</a>).
Or maybe not yet
(<a href="https://www.youtube.com/watch?v=OT1LOTyFBaY" target="_blank" rel="noopener noreferrer" class="">“There's no such thing as ‘climate’. ‘Climate’ and ‘everything’ are the same word”</a>).
The thing is, I never bothered to read the book.</p>
<p>Not because I thought there would be nothing valuable in it&nbsp;—&nbsp;I
had admired Peterson in the beginning, found myself in agreement with a lot of what
he said back then, and
<a href="https://www.jordanbpeterson.com/blog/" target="_blank" rel="noopener noreferrer" class="">the man is actually a good writer</a>.
But I considered myself sufficiently acquainted with his ideas, having discovered
his <a href="https://www.youtube.com/watch?v=-XvI6Y5Yq8o" target="_blank" rel="noopener noreferrer" class="">earlier public lectures</a>,
his <a href="https://www.youtube.com/watch?v=aMcjxSThD54" target="_blank" rel="noopener noreferrer" class="">first interviews</a>, etc. to
read the book.</p>
<p>After that, it got only worse (the MAGA apologetics, the Biblical nonsense,
the irritating ambiguity around the “God question”, the gratuitous attacks
on individuals), and I <em>definitely</em> did not read the book.</p>
<p><img decoding="async" loading="lazy" src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Jordan_Peterson_by_Gage_Skidmore.jpg/960px-Jordan_Peterson_by_Gage_Skidmore.jpg" alt="Jordan Peterson" class="img_ev3q"></p>
<p>But since
<a class="" href="https://blog.tripu.info/2026-resolutions#reading">I'm now going through old posts and essays that I had “saved for later”</a>,
the other day I finally read
<a href="https://slatestarcodex.com/2018/03/26/book-review-twelve-rules-for-life/" target="_blank" rel="noopener noreferrer" class=""><strong>Scott Alexander</strong>'s review of <em>12 Rules</em></a>,
where the following quotes from the book caught my attention:</p>
<blockquote>
<p><em>“<strong>What can I not doubt?
The reality of suffering.</strong>
It brooks no arguments.
Nihilists cannot undermine it with skepticism.
Totalitarians cannot banish it.
Cynics cannot escape from its reality.
<strong>Suffering is real, and the artful infliction of suffering on another, for its own sake, is wrong.
That became the cornerstone of my belief.</strong>
Searching through the lowest reaches of human thought and action, understanding my own capacity
to act like a Nazi prison guard or a gulag archipelago trustee or a torturer of children in a dungeon,
I grasped what it meant to ‘take the sins of the world onto oneself.’
Each human being has an immense capacity for evil.
Each human being understands, a priori, perhaps not what is good, but certainly what is not.
And <strong>if there is something that is not good, then there is something that is good.
If the worst sin is the torment of others, merely for the sake of the suffering
produced&nbsp;—&nbsp;then the good is whatever is diametrically opposed to that.
The good is whatever stops such things from happening.</strong>”</em></p>
</blockquote>
<p>And:</p>
<blockquote>
<p><em>“<strong>Consider then that the alleviation of unnecessary pain and suffering is a good.
Make that an axiom: to the best of my ability I will act in a manner that leads to
the alleviation of unnecessary pain and suffering.</strong>
You have now placed at the pinnacle of your moral hierarchy a set of presuppositions and
actions aimed at the betterment of Being.”</em></p>
</blockquote>
<p>This surprised me, because I wouldn't have expected “alleviation of suffering”
to be the pillar of Peterson's metaethics.
Knowing the guy, I would have bet on “God”, “the logos”,
“balance between order and chaos”, or even some off-the-shelf
answers such as “virtue” or “honesty”.
But never “stopping unnecessary pain”.
Peterson is definitely not a consequentialist, let alone a utilitarian.
(I suspect the majority of the population,
<a href="https://en.wikipedia.org/wiki/World_Values_Survey" target="_blank" rel="noopener noreferrer" class="">if asked about their root of morality</a>,
would <em>not</em> use “pain” or “suffering”, either.
They would rather appeal to opposites such as “goodness” or
“niceness”, or to their own version of
<a href="https://plato.stanford.edu/archives/sum2025/entries/moral-theory/#CommSensMora" target="_blank" rel="noopener noreferrer" class="">common-sense morality</a>.)</p>
<p>But not Jordan Peterson.
Apparently, in his core, he is all about “suffering”.
How to square that with the virtue ethics and the deontology he so fiercely defends,
it's a question I couldn't begin to answer.</p>
<p>In any case, and according to those passages above, I guess I can consider him
a fellow <a href="https://www.hedweb.com/negutil.htm" target="_blank" rel="noopener noreferrer" class="">negative utilitarian</a> now…?
Rejoice!</p>
<p>Peterson and I are <a href="https://forum.effectivealtruism.org/topics/negative-utilitarianism" target="_blank" rel="noopener noreferrer" class="">in good company</a>,
including the great <a href="https://www.utilitarianism.com/karl-popper.html" target="_blank" rel="noopener noreferrer" class=""><strong>Karl Popper</strong></a>
and contemporary thinkers such as <strong>David Pearce</strong>
(<a href="https://tripu.medium.com/the-mind-of-david-pearce-e718dd50f3f6" target="_blank" rel="noopener noreferrer" class="">“our overriding ethical obligation is to mitigate and prevent suffering
throughout the living
world”</a>).</p>
<p><img decoding="async" loading="lazy" src="https://upload.wikimedia.org/wikipedia/commons/4/43/Karl_Popper.jpg" alt="Karl Popper" class="img_ev3q"></p>
<p>If I have <em>one axiom</em> on which to base <em>everything else</em>, one belief <em>as close to
certitude</em> as possible, it is that: that suffering is bad, and therefore that
alleviating suffering is good.</p>
<p>Or, as <strong>Manu Herrán</strong> <a href="https://manuherran.com/about-me/" target="_blank" rel="noopener noreferrer" class="">summarises beautifully</a>:</p>
<blockquote>
<p><em>“Less suffering, more happiness, and more life in the Universe.
But in that order.”</em></p>
</blockquote>
<p>So much so, that I harbour the strong secret intuition that someone more intelligent
and more determined than me could (should) be able to reason from first
principles, starting from that single axiom, about the hairiest of moral problems,
and all the way down to the most mundane of decisions.
In other words, there's an unbroken logical chain linking the ethical imperative
to alleviate suffering (on one extreme), and the convenience or not of taking out the
rubbish tonight versus leaving that chore for tomorrow (on the other).
If I were more intelligent and more resolute, I would make that
<a href="https://vita.tripu.info/ethics" target="_blank" rel="noopener noreferrer" class="">a life project</a>.</p>
<p>But I am aware that everyone loves a good Theory of Everything&nbsp;—&nbsp;in
physics as in moral philosophy&nbsp;—&nbsp;and so we are biased in that direction.
The temptation is strong, and it's very easy to be fooled.</p>
<p>There, too, I am <a href="https://www.britannica.com/biography/Derek-Parfit" target="_blank" rel="noopener noreferrer" class="">in good company</a>.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><abbr title="Intellectual Property">IP</abbr>&nbsp;</div><div class="admonitionContent_BuS1"><p>Portrait of Peterson <a href="https://commons.wikimedia.org/wiki/File:Jordan_Peterson_by_Gage_Skidmore.jpg" target="_blank" rel="noopener noreferrer" class="">by Gage Skidmore</a>;
portrait of Popper with <a href="https://commons.wikimedia.org/wiki/File:Karl_Popper.jpg" target="_blank" rel="noopener noreferrer" class="">no known copyright restrictions</a></p></div></div>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="philosophy" term="philosophy"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Microrrelato en ≤140 palabras con dos palabras requeridas]]></title>
        <id>https://blog.tripu.info/microrrelato</id>
        <link href="https://blog.tripu.info/microrrelato"/>
        <updated>2026-01-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Nos hablaba con pasión de un futuro radiante y por eso le hicimos nuestro guía.]]></summary>
        <content type="html"><![CDATA[<p>Nos hablaba con pasión de un futuro radiante y por eso le hicimos nuestro guía.
Fue un estadista clarividente y el comandante que nos llevó a la victoria.
El mejor hombre al frente del mejor de los pueblos, el que supo ver la belleza
de nuestras armas.
Regaba con su sonrisa benefactora a nuestros hijos como regaba con racimos de
bombas a los hijos de los otros.
Nos enseñó que solo golpeando podíamos estar seguros, y que era mejor golpear
antes que ellos.
Los campos esterilizados al otro lado del océano y los colgajos de carne de
nuestros enemigos empapando la tierra fueron el dulce precio que compró
nuestra felicidad.
La mano que no tiembla.
El halcón perfecto.
El espejo en que aún hoy se mira nuestro pueblo.
Vaya este microrrelato en su honor, y sea larga su memoria.</p>
<p><img decoding="async" loading="lazy" alt="A Sora-generated illustration for this microstory" src="https://blog.tripu.info/assets/images/microrrelato-a610fb0cf9d1964ba70cfc36508bd421.jpeg" width="1536" height="1024" class="img_ev3q"></p>]]></content>
        <category label="in-Spanish" term="in-Spanish"/>
        <category label="writings" term="writings"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New year's resolutions for 2026]]></title>
        <id>https://blog.tripu.info/2026-resolutions</id>
        <link href="https://blog.tripu.info/2026-resolutions"/>
        <updated>2026-01-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The answer to the question &ldquo;should I use an LLM for that?&rdquo; is increasingly]]></summary>
        <content type="html"><![CDATA[<p>The answer to the question “should I use an LLM for that?” is increasingly
“hell yeah!”, for almost any given “that”.</p>
<p>In the last three or four weeks, as resolutions for the new year were slowly taking shape
in my head, it hadn't even crossed my mind to draw inspiration from a source other than
my own ideas (and from a few friends,
<a href="https://blog.fidelramos.net/personal/new-years-resolutions-2026" target="_blank" rel="noopener noreferrer" class="">like <strong>Fidel</strong></a>).
To be honest, I wasn't excited about the resolutions I was coming up with:
they felt narrow and a direct continuation of <a class="" href="https://blog.tripu.info/2025-resolutions">last year's</a>.
Then, three days ago, in the middle of the night, I suddenly realised that I am
so present on the interwebs, and I have shared so much information over the years about
interests, hobbies, accomplishments and failures of mine, that a chatbot should be
able to “think” about me and expand my boring set of 2026 goals with
some personalised suggestions that I could use!</p>
<figure><img src="https://blog.tripu.info/img/2026/tripu-hiking.jpeg" alt="tripu hiking yesterday"><figcaption>Yesterday's beautiful morning, hiking with the family not far from home</figcaption></figure>
<p>And so I told <strong>Claude</strong>, <strong>ChatGPT</strong>, <strong>Copilot</strong> and <strong>Gemini</strong>:</p>
<blockquote><em><p>“Help me come up with good new year's resolutions for 2026.</p><p>This is me: [demographics and personal information].
Use the information on my personal web page to find out more about me: <a href="https://tripu.info/" target="_blank" rel="noopener noreferrer" class="">https://tripu.info/</a></p><p>My resolutions for 2025 were these: <a href="https://blog.tripu.info/2025-resolutions" target="_blank" rel="noopener noreferrer" class="">https://blog.tripu.info/2025-resolutions</a> .
And this is how well I did on those resolutions at the end of the year: <a href="https://blog.tripu.info/2025-recap" target="_blank" rel="noopener noreferrer" class="">https://blog.tripu.info/2025-recap</a></p><p>These are the resolutions I have already decided for 2026: [short list of existing ideas].</p><p>Suggest other resolutions to complement these, based on who I am, my situation, and my hobbies.
Cover different aspects of life (health, finances, family life, learning, experiences, work, etc).
Suggest resolutions that align well with the ones I did last year and with the ones I've already
decided for this year -- but suggest also resolutions that are outside my usual ideas and that
might give me fresh perspectives, add variation to my routine, or expand my goals, experiences
or skills in some way.”</p></em></blockquote>
<p>The results were quite interesting, in general.
Gemini was the least helpful.
I give Claude the highest mark; it was the most thoughtful and accurate in its assessment.
These were some of its ideas:</p>
<ul>
<li class="">Claude decided, on its own, to read my site <a href="https://vita.tripu.info/" target="_blank" rel="noopener noreferrer" class="">Vīta</a>
“to understand more about [my] projects and interests”.
Very nice.</li>
<li class="">It understood my failure(s) to study Japanese and provided some useful ideas
(switch textbooks for daily Anki; aim at JLPT N4 in December, not July).</li>
<li class="">It told me to visit Japan, “if finances and family logistics allow”.
Sigh.
That is extremely unlikely this year, but spot-on as an aspiration for me.</li>
<li class="">“Your 2025 mid-year checkpoint was useful but came too late to course-correct. […]
Set calendar reminders for April 1, July 1, and October 1 to review progress.
Adjust goals that aren't working rather than carrying them as dead weight all year.”
So true.</li>
</ul>
<p>A few suggestions were offered by all, or most, of the models:</p>
<ul>
<li class="">Three out of four models told me that my kids are at the “golden age/window/years”
and that I should make the most of that; eg: go hiking with them more often (Gemini told me
they're “old enough to walk decently, young enough to still think hanging out with
you is cool”. Ouch!).</li>
<li class="">The models advised me to take up manual, tactile work or hobbies, for a change: woodwork,
bread baking, calligraphy, etc.</li>
<li class="">Participate in some event like Ludum Dare (“you have an account!”; that is right),
NaNoWriMo (now defunct, but they apparently don't know that), or Inktober
(<a href="https://blog.koalie.net/tag/inktober/" target="_blank" rel="noopener noreferrer" class="">like <strong>Koalie</strong></a>).</li>
<li class="">Complete a “deep dive” into some specific topic; eg: history of Madrid, Stoicism,
Japanese aesthetics.
Read two or three books, and write a synthesis post.</li>
</ul>
<p>Other good ideas:</p>
<ul>
<li class="">Contribute regularly to an open‑source project.</li>
<li class="">One screen-free day per week.
One no‑screens evening per week.</li>
<li class="">Declutter 100 items.
Optimise one system each month.</li>
<li class="">Meditate.</li>
<li class="">Stretch.</li>
</ul>
<p>In the end, incorporating some of those ideas, here go my resolutions for 2026.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="reading">Reading<a href="https://blog.tripu.info/2026-resolutions#reading" class="hash-link" aria-label="Direct link to Reading" title="Direct link to Reading" translate="no">​</a></h2>
<p>This year, for a change, I resolved to read <strong>mostly short books</strong>.</p>
<p>I have already collected eight physical books that I wanted to read for one reason or another
and that are ≤200 pages long.
I'll always find something lovely in the paper format, and these are books that I had already bought
or that were lying around at my parents', so €0,00 and no DRM crap.
I'm looking forward to reading a bit of original Italian again (<strong>Italo Calvino</strong>),
something I don't get to do often.</p>
<p><img decoding="async" loading="lazy" alt="Eight short books" src="https://blog.tripu.info/assets/images/short-books-08c7dc23c30b94a055982df335e8917c.jpeg" width="2312" height="1736" class="img_ev3q"></p>
<p>On Goodreads, I committed to reading <strong>at least ten books</strong> this year.</p>
<p>These are quite modest goals, given my track record.
They don't even feel like goals, more like indulgence.</p>
<p>I will probably also read a few more issues of
<a href="https://www.goodreads.com/series/146415-saga" target="_blank" rel="noopener noreferrer" class=""><em>Saga</em></a>, and I might start with some of the
heavy items on my to-read list, like <strong>Dostoevsky</strong> or <strong>Saint Augustine</strong>&nbsp;—&nbsp;but
I make no commitment to those this year.</p>
<p>I also decided that I'll download some <strong>long-form blog posts</strong> that I have been saving
over the years on <del>Pocket</del> Wallabag and read them <strong>on the reMarkable</strong>.
It's mostly long essays or complex explorations of some topic that really interest
me&nbsp;—&nbsp;but I don't like reading those on a computer screen, and so they keep
piling on.
It's mostly philosophy, economics, science, and <a href="https://www.astralcodexten.com/" target="_blank" rel="noopener noreferrer" class="">Astral Codex Ten</a>
posts or other similarly brilliant stuff from the rationality blogosphere.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="writing">Writing<a href="https://blog.tripu.info/2026-resolutions#writing" class="hash-link" aria-label="Direct link to Writing" title="Direct link to Writing" translate="no">​</a></h2>
<p>My unfinished short story will stay short, but it will stop being unfinished in 2026.
I made sure the latest draft is on my reMarkable and I'll use some of the slots I
usually dedicate to reading (commute time, bed time) to write by hand instead.</p>
<p>I reckon I've written more than half already, and my goal is to have the first version
ready to start requesting feedback and polishing it, so I intend to <strong>finish the draft
during the first quarter of the year</strong>.</p>
<p><img decoding="async" loading="lazy" alt="reMarkable 2 showing some document" src="https://blog.tripu.info/assets/images/remarkable-writing-f88c36af9d792f9c28d6caae00c64bd4.jpeg" width="844" height="1078" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="drawing-and-painting">Drawing and painting<a href="https://blog.tripu.info/2026-resolutions#drawing-and-painting" class="hash-link" aria-label="Direct link to Drawing and painting" title="Direct link to Drawing and painting" translate="no">​</a></h2>
<p>One of the presents I received from the family this Christmas is this sketchbook.</p>
<p><img decoding="async" loading="lazy" alt="Sketchbook" src="https://blog.tripu.info/assets/images/sketchbook-768e2e1b00685384f0ac9cf839f92bc6.jpeg" width="1736" height="2312" class="img_ev3q"></p>
<p>Last year, for some reason, I felt compelled to rescue this textbook from my parents'
(is it yours, brother?)</p>
<p><img decoding="async" loading="lazy" alt="Drawing textbook" src="https://blog.tripu.info/assets/images/drawing-textbook-dd9bd80a0a673b37162b89f1a09d485d.jpeg" width="1736" height="2312" class="img_ev3q"></p>
<p>I take those as signals.
Of Something.</p>
<p>I should <strong>take up drawing and painting again</strong>.
<a href="https://flickr.com/photos/tripu/albums/72157678315466382/" target="_blank" rel="noopener noreferrer" class="">I used to like it.</a>
Will I have this year the discipline, and the time?</p>
<p>(And does this hesitancy even count as a resolution?)</p>
<p><img decoding="async" loading="lazy" src="https://live.staticflickr.com/4173/34600209065_3aacc45cd0_c.jpg" alt="One of my old charcoals" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="nutrition">Nutrition<a href="https://blog.tripu.info/2026-resolutions#nutrition" class="hash-link" aria-label="Direct link to Nutrition" title="Direct link to Nutrition" translate="no">​</a></h2>
<p>I can't take <strong>Bryan Johnson</strong> seriously; I think he's either a clown, delusional, or a grifter.
But I appreciate
<a href="https://x.com/bryan_johnson/status/2005404233458442480" target="_blank" rel="noopener noreferrer" class="">this post of his</a>
that
<a href="https://blog.fidelramos.net/personal/new-years-resolutions-2026#dont-die" target="_blank" rel="noopener noreferrer" class=""><strong>Fidel</strong> shared</a>.
I like the sound of “don't die” better than the alternative.</p>
<p>In 2026 I'll try (<a class="" href="https://blog.tripu.info/2025-resolutions#nutrition">again</a>) to <strong>be a better vegetarian</strong> and</p>
<blockquote>
<p><em>“to <strong>make a conscious effort to plan meals</strong> more often, […] to eat a little better
[and] to <strong>cut on bad food</strong>.”</em></p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="exercise">Exercise<a href="https://blog.tripu.info/2026-resolutions#exercise" class="hash-link" aria-label="Direct link to Exercise" title="Direct link to Exercise" translate="no">​</a></h2>
<p><strong>Keep on running and weight-lifting</strong> throughout the year.
I want to work out at the gym <strong>at least twice a week</strong> (should be thrice),
and do it better this time.</p>
<p>I might sign up for a 10K or a 21K again, but it's not a goal.</p>
<p>It'd also be great if I take up a third sport, like swimming or rock-climbing.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="work">Work<a href="https://blog.tripu.info/2026-resolutions#work" class="hash-link" aria-label="Direct link to Work" title="Direct link to Work" translate="no">​</a></h2>
<p>I'm starting at a new company very soon and that'll keep me extra busy, at least for a while.</p>
<p>And yet, I hereby commit to <strong>announcing at last the business project I've been working on</strong> in
stealth mode for the past six months, intermittently.
I'll publish the web site, the material I've been working on, and its associated social media
accounts.</p>
<p>Since that's long overdue, and already close to completion, I'll do that <strong>by the end
of February</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="philanthropy">Philanthropy<a href="https://blog.tripu.info/2026-resolutions#philanthropy" class="hash-link" aria-label="Direct link to Philanthropy" title="Direct link to Philanthropy" translate="no">​</a></h2>
<p>This is not a new resolution, but
<a href="https://www.givingwhatwecan.org/about-us/members#lifetime-members-section" target="_blank" rel="noopener noreferrer" class="">an old one</a>:
in 2026 I'll give away 10% of my gross income to
<a href="https://www.givewell.org/charities/top-charities" target="_blank" rel="noopener noreferrer" class="">charities working on poverty and global health</a>.
It'll be my seventh or eighth year in a row.</p>
<p>In my case, that's usually an amount in the upper half of four figures.
Or, put another way, around
<strong><a href="https://ourworldindata.org/cost-effectiveness#how-much-does-it-cost-to-save-someone-s-life" target="_blank" rel="noopener noreferrer" class="">two lives saved per year</a></strong>.</p>
<p>In <a href="https://www.effectivealtruism.org/" target="_blank" rel="noopener noreferrer" class="">Effective Altruism</a> circles, being vocal about one's
impactful donations is not only not taboo, but even
encouraged&nbsp;—&nbsp;<a href="https://forum.effectivealtruism.org/posts/5d3td2YpuCiE8L7yr/to-inspire-people-to-give-be-public-about-your-giving" target="_blank" rel="noopener noreferrer" class="">and for good reasons</a>.
So here I am reminding my three regular readers that
<a href="https://www.givingwhatwecan.org/how-rich-am-i" target="_blank" rel="noopener noreferrer" class="">we are rich</a>,
that
<a href="https://www.givingwhatwecan.org/birth-lottery" target="_blank" rel="noopener noreferrer" class="">we're incredibly lucky</a>,
and that we ought to do a lot more to help the most unfortunate.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="private-resolutions">Private resolutions<a href="https://blog.tripu.info/2026-resolutions#private-resolutions" class="hash-link" aria-label="Direct link to Private resolutions" title="Direct link to Private resolutions" translate="no">​</a></h2>
<p>Promising a few more things to myself, privately.
I keep track of these codes elsewhere.
I may or may not report on results at the end of the year.</p>
<ul>
<li class="">#B daily</li>
<li class="">#D weekly</li>
<li class="">#F</li>
<li class="">#J</li>
<li class="">#P</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="discarded-ideas">Discarded ideas<a href="https://blog.tripu.info/2026-resolutions#discarded-ideas" class="hash-link" aria-label="Direct link to Discarded ideas" title="Direct link to Discarded ideas" translate="no">​</a></h2>
<ul>
<li class="">No <strong>Japanese-learning</strong> goal this year.
I should be realistic, and I have enough commitments already.</li>
<li class="">I will not even try to publish <strong>a webcomic about Effective Altruism and the Rationality community</strong>.
The idea sounded great in my head: a simple horizontal stripe with few panels, stick figure-style,
poking fun at some of the tenets and tropes treasured by my fellow nerds, published every other
week or so.
I would love to follow a webcomic like that myself.
But then I realised that, well, I actually had no good ideas or jokes.
I chatted with Claude a bit and I was disappointed by the storyboards it produced: either
utilitarianism and randomized controlled trials are incompatible with humour (that could be the
case), or it's harder than I expected to come up with good jokes.
(But then, how come <a href="https://www.smbc-comics.com/" target="_blank" rel="noopener noreferrer" class="">SMBC</a> is so good!?)</li>
</ul>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="personal" term="personal"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[2025 resolutions recap]]></title>
        <id>https://blog.tripu.info/2025-recap</id>
        <link href="https://blog.tripu.info/2025-recap"/>
        <updated>2026-01-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This is my eval of the resolutions I made for 2025]]></summary>
        <content type="html"><![CDATA[<p>This is my eval of the <a class="" href="https://blog.tripu.info/2025-resolutions">resolutions I made for 2025</a>
plus a recap of the year through some apps I use.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="books-goodreads--the-greatest-books">Books (Goodreads &amp; The Greatest Books)<a href="https://blog.tripu.info/2025-recap#books-goodreads--the-greatest-books" class="hash-link" aria-label="Direct link to Books (Goodreads &amp; The Greatest Books)" title="Direct link to Books (Goodreads &amp; The Greatest Books)" translate="no">​</a></h2>
<p>Finish reading <strong>all books in the top ten of <a href="https://thegreatestbooks.org/" target="_blank" rel="noopener noreferrer" class="">the universal list</a></strong>: ✔️ done.</p>
<p><img decoding="async" loading="lazy" alt="Top ten of books" src="https://blog.tripu.info/assets/images/2025-greatest-books-cefa713e65fc4b0bad2fa4d6514fa794.png" width="752" height="997" class="img_ev3q"></p>
<p>It's actually <em>seventeen</em> books (<em>In Search of Lost Time</em> is a seven-volume, and <em>Don Quixote</em> is two books).</p>
<p>Also, I have read already half of the next ten in the list (#11–#20).</p>
<p><strong>Read at least 14 books this year</strong>: ✔️ <a href="https://www.goodreads.com/user/year_in_books/2025/64930929" target="_blank" rel="noopener noreferrer" class="">done</a>.</p>
<p>I read a total of twenty “items” in 2025, but nine of those were comic books, thus
“easier” to read.
I'm weighting those ⅓ of a “normal” book.
So: 11 normal books + 9×⅓ = 14 books read.</p>
<p><img decoding="async" loading="lazy" alt="Goodreads summary of the year" src="https://blog.tripu.info/assets/images/2025-goodreads-summary-2f1a7f4148f399b1848b4e6d893509be.png" width="600" height="420" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="Goodreads summary of book lengths" src="https://blog.tripu.info/assets/images/2025-goodreads-length-d463f9f11f9be9f8635243e360c458f4.png" width="780" height="568" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="Goodreads: all books read" src="https://blog.tripu.info/assets/images/2025-goodreads-books-193ec3c346e58dae8b4de887f53bb53c.png" width="642" height="1895" class="img_ev3q"></p>
<p>This may have been the year I have read the most since my youth
(although these stats are not reliable because I only started tracking books
consistently around 2016):</p>
<p><img decoding="async" loading="lazy" alt="Goodreads: stats of books" src="https://blog.tripu.info/assets/images/2025-goodreads-stats-books-4628bc05a67756bb6a59a89fbc685047.png" width="882" height="967" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="Goodreads: stats of pages read" src="https://blog.tripu.info/assets/images/2025-goodreads-stats-pages-9f3d3475608f62bb41361519d843e90f.png" width="882" height="967" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="podcasts-antennapod">Podcasts (AntennaPod)<a href="https://blog.tripu.info/2025-recap#podcasts-antennapod" class="hash-link" aria-label="Direct link to Podcasts (AntennaPod)" title="Direct link to Podcasts (AntennaPod)" translate="no">​</a></h2>
<p>I made no new year resolution about podcasts specifically.
Throughout the year I struggled in the usual way to feed myself a
diet I consider <em>healthy</em> (science, work-related topics, software and
technology, in-depth news analyses, Japanese language, History) and to stay away from
<em>junk food</em> (“news”, petty or local topics, click-baity debates).</p>
<p>I don't know how, but in 2025 I managed to listen to <em>even more hours of podcasts</em>
than in previous years.
919 hours are too many hours of earbuds sounding deep into my ears; that's no good.</p>
<p><img decoding="async" loading="lazy" alt="AntennaPod stats: ranking" src="https://blog.tripu.info/assets/images/2025-podcasts-ranking-2ae75af562a5bab494b962ac16bb9f9b.png" width="1080" height="1915" class="img_ev3q"></p>
<p>Those above are hours listening.
Regarding number of episodes, there are a few podcasts with typically short episodes
that I have listened to a lot in 2025.
Some of those were <em>Monólogo de [Carlos] Alsina</em>, eldiario.es' <em>Un Tema al Día</em>
(those two I consider guilty pleasures), BBC's <em>The Interview</em>, Quanta's podcast,
<em>Nihongo con Teppei</em> (Japanese for beginners) and Aporia's podcast (those are
<em>healthier</em>).</p>
<p><img decoding="async" loading="lazy" alt="AntennaPod stats: years" src="https://blog.tripu.info/assets/images/2025-podcasts-years-e0394d7c64b3b4b3ccb6377b1fc62fad.png" width="1080" height="1475" class="img_ev3q"></p>
<p>Even so, I reached the end of the year with a queue of more than 100 episodes
to play, and a lag of more than a month!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="exercise">Exercise<a href="https://blog.tripu.info/2025-recap#exercise" class="hash-link" aria-label="Direct link to Exercise" title="Direct link to Exercise" translate="no">​</a></h2>
<p>These are my stats for the year:</p>
<ul>
<li class=""><strong>Weight-lifting</strong> at the gym: 57 times (once every 6 days)</li>
<li class=""><strong>Running</strong> outside: 50 times (once a week)</li>
<li class=""><strong>Hiking</strong> with family or friends: 19 times (once every 19 days)</li>
<li class=""><strong>Skiing</strong>: 3 days</li>
<li class=""><strong>Other</strong> (kayaking, callisthenics): 4 times</li>
<li class="">Total: 133 times (once every 3 days)</li>
</ul>
<p><img decoding="async" loading="lazy" alt="Exercise stats" src="https://blog.tripu.info/assets/images/2025-exercise-edaba1121a8b4c656456302d10953173.png" width="839" height="537" class="img_ev3q"></p>
<p>Compared with the previous year:</p>
<ul>
<li class=""><strong>Weight-lifting</strong>: 58% more</li>
<li class=""><strong>Running</strong>: 85% more</li>
<li class=""><strong>Hiking</strong>: 138% more</li>
<li class="">Total: 82% more</li>
</ul>
<p>Therefore, I consider I achieved my two goals (with caveats):</p>
<ul>
<li class=""><strong>Work out better and more often</strong>: ✔️ done.</li>
<li class=""><strong>Run a half marathon in 2025</strong>: ✔️ done.</li>
</ul>
<p>The caveats being:</p>
<ul>
<li class="">I worked out <em>more often</em> than in previous years… but <strong>not <em>better</em></strong>.
Around the second half of 2025 I got demotivated at the gym, stuck in a boring
cycle of work-outs, not appreciating any progress.
The first problem is: I do not go to the gym nearly as often as I should
(I go barely more than once a week).
It's almost impossible to notice results that way.
The second problem is: although I more or less know what exercises are
good for me, I do not push myself enough and I do not introduce
enough variation.
Third problem: appropriate nutrition (absolute lack thereof).</li>
<li class="">One day in November I did run 21 kilometres, 97 metres and 50 centimetres,
but <strong>I did it alone</strong> (ie, not in a popular race, as planned).
I had registered for a half marathon somewhere in Madrid in November, and
I had been training more or less regularly with that goal in sight.
As the date approached though, I realised I wanted to be elsewhere and I
would miss the event.
So I transformed my last “long run” (~19.3 km), exactly one
week before D-day, into a full-fledged 21K.
I ran it on my own, as any other training session, <strong>in 2h03′</strong>
(5′50″/km, or 10.3 km/h).
I would have liked to run the race, but I don't care much about this.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="japanese">Japanese<a href="https://blog.tripu.info/2025-recap#japanese" class="hash-link" aria-label="Direct link to Japanese" title="Direct link to Japanese" translate="no">​</a></h2>
<p><strong>Study “well” often</strong>: 👎 failed.</p>
<p><strong>Take (and pass) the JLPT N4</strong>: 👎 failed.</p>
<p>I studied a few times at the beginning of the year, but after that I just played
sporadically with the Japanese apps on my phone and with Anki; nothing consistent.
Not the slightest chance I would have been prepared to pass JLPT N4 this year.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="nutrition">Nutrition<a href="https://blog.tripu.info/2025-recap#nutrition" class="hash-link" aria-label="Direct link to Nutrition" title="Direct link to Nutrition" translate="no">​</a></h2>
<p><strong>Make a conscious effort to plan meals more often; eat a little better; cut on bad food</strong>: 👎 failed.</p>
<p>I behaved well in the first month or two; then slipped back into old habits and easy choices.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="finances">Finances<a href="https://blog.tripu.info/2025-recap#finances" class="hash-link" aria-label="Direct link to Finances" title="Direct link to Finances" translate="no">​</a></h2>
<p><strong>Save more money; review our balance sheet and reduce some expenses</strong>: 👎 failed.</p>
<p>To be honest, this was a weak resolution&nbsp;—&nbsp;almost an afterthought.
I never identified with this goal, because I don't feel in my gut that I should save
much more.</p>
<p>As I said <a class="" href="https://blog.tripu.info/2025-resolutions#finances">one year ago</a>:</p>
<blockquote>
<p><em>“Our family finances are in good shape overall, I think.
[…]
Some of the line items will be hard or impossible to streamline.
[…]
I suspect I'll have to work with much smaller line items.
[…]
Truth be told, I don't think I'll make much of a dent.”</em></p>
</blockquote>
<p>I think that's why I made zero progress here.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="writing">Writing<a href="https://blog.tripu.info/2025-recap#writing" class="hash-link" aria-label="Direct link to Writing" title="Direct link to Writing" translate="no">​</a></h2>
<p><strong>Finish the short story that I started writing a few years ago</strong>: 👎 failed.</p>
<p>I sat down to write only a few times throughout the year, and did not finish that short story.</p>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="personal" term="personal"/>
        <category label="literature" term="literature"/>
        <category label="Japanese" term="Japanese"/>
        <category label="sport" term="sport"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Pluribus]]></title>
        <id>https://blog.tripu.info/pluribus</id>
        <link href="https://blog.tripu.info/pluribus"/>
        <updated>2025-12-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Rhea Seehorn in the show]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" src="https://ychef.files.bbci.co.uk/1600x900/p0mf5070.webp" alt="Rhea Seehorn in the show" class="img_ev3q"></p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Spoilers <em>of the first episode only</em>; if you have watched that one, you're safe</div></div>
<p>I had high expectations for <a href="https://en.wikipedia.org/wiki/Pluribus_(TV_series)" target="_blank" rel="noopener noreferrer" class=""><em>Pluribus</em></a>
because I loved <em>Breaking Bad</em> (and I liked <em>Better Call Saul</em>, although I got bored and
gave up around season three).
But after five episodes I'm disappointed.
I was already disappointed after the first two or three, really.</p>
<p>It's too slow. Not much happens.</p>
<p>There are very few characters.
Why isn't <strong>Carol</strong> interested at all in what happened to her relatives and friends?
That is not believable.
The plot seems completely lineal: no parallel stories, no hint of what's to come,
no interesting connections across time or space.
So far, there are just two conflicts: that between Carol and the <em>body snatchers</em>,
and the one between Carol and the other immune people.
That's it.
Compare that with the rich cast of characters in <em>Breaking Bad</em>, their varied interests,
and all the clashes and twists in their relationships.</p>
<p>On top of that, Carol is arrogant, capricious and short-tempered.
And it irritates me that she seems so short on ideas.</p>
<p>I mean, what would <em>you</em> do in her situation?
Yes, you are “alone”, grieving, and very confused.
But you are safer than you have ever been, you have at your disposal an inexhaustible supply of
solicitous servants who adore you, you can have instantly any item you desire,
and you can tap the wisdom of the entire humanity.</p>
<p>How come she's not already headquartered at the local library (or at the Library of Congress,
or at the United Nations building), having arranged for all her bodily needs to
be automatically met, researching day and night with the help of a dozen individuals,
consulting with the best scientists on Earth, and holding daily conferences with all
the other immune to try to understand what happened??</p>
<p>Anyone in her situation would be bursting with important questions they would want answered.
Ask the <em>pod people</em> where all the hidden treasures of the world are, what the real state
of the economy is, what the weakest links in the nuclear risk chain are (and ask them to
fix that), whether there is still famine or torture anywhere…&nbsp;stuff like that.
And, of course, everything related to the incident that started it all: related research,
classified files, new messages received from the stars, how their hive mind works, and what
exactly it feels like to be one of them.
If nothing else, get answers to all your petty and morbid questions, for goodnes' sake:
did that girlfriend of mine actually cheat on me as I always suspected, show me the minutes
of that meeting where my boss decided to reject my promotion, who killed
<strong>Jeffrey Epstein</strong>, was the coronavirus engineered, who's <strong>Satoshi Nakamoto</strong>.</p>
<p>Also: get the best four or five vehicles in town to use in your excursions, get the best
food delivered to you on a fixed schedule, arrange for your trash to be picked up daily,
stock up on everything that could be useful (electronics, batteries, tools, manuals,
weapons), and set up news briefings to be delivered to you daily so that you stay
up-to-date on the state of the world.</p>
<p>That's what I would do <em>on day two</em>.
I think.</p>
<p>Instead, Carol wastes her days curled up on her sofa with a drink, roaming the city in
some crappy car to run stupid errands, and being bossy and nasty to everyone she
encounters&nbsp;—&nbsp;blissfully ignorant of what's going on in the rest of the planet.</p>
<p>The pod people, on the other hand, are (so far) helpful and peaceful.
The hive mind seems to be a
<a href="https://plato.stanford.edu/entries/rationality-normative-utility/" target="_blank" rel="noopener noreferrer" class="">utility maximiser</a>,
which is lovely.
What's not to like about
<a href="https://www.hedweb.com/" target="_blank" rel="noopener noreferrer" class="">a world without war, violence or cruelty</a>?
I think I know what the big reveal in the sixth episode is going to be, and if my suspicion
is correct, it'll be yet another reason to like the pod people and to boo Carol.</p>
<p>The production and the photography are superb.</p>
<p>But I am rooting for the body snatchers.</p>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="TV" term="TV"/>
        <category label="culture" term="culture"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Clueless about computers]]></title>
        <id>https://blog.tripu.info/clueless</id>
        <link href="https://blog.tripu.info/clueless"/>
        <updated>2025-09-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I want to share two stories of embarrassing ignorance about computers and the internet.]]></summary>
        <content type="html"><![CDATA[<p>I want to share two stories of <strong>embarrassing ignorance about computers and the internet</strong>.
Of <em>my own</em> ignorance, specifically.
In retrospect, I think these vignettes paint a revealing picture of:
a) how far we've come in software in thirty years or so; and
b) what it looks like to be clueless as a goldfish about some subject.</p>
<p><strong>At high school, around the mid-90's</strong>, some of us were discovering the
internet&nbsp;—&nbsp;in particular the web, IRC, and electronic mail.
(It's weird to think of it that way now, but the internet comprises, or enables,
a set of such services; such as Usenet, FTP, Gopher, or the World Wide Web.)
In those days I would go to an internet café, or visit a schoolmate who had
a dial-up modem at home, and use
<a href="https://www.mirc.com/about.html" target="_blank" rel="noopener noreferrer" class="">mIRC</a>
to explore random
<a href="https://freenode.net/" target="_blank" rel="noopener noreferrer" class="">Freenode</a>
channels,
or fire up Internet Explorer to visit the handful of web sites I knew about.
I didn't even have a mail account yet, but was starting to get acquainted
with that too.</p>
<p><img decoding="async" loading="lazy" alt="Old personal computer" src="https://blog.tripu.info/assets/images/old-personal-computer-1c85859bff932891784721ba878de426.jpeg" width="962" height="708" class="img_ev3q"></p>
<p>One day during recess I was chatting with my friend M.T.C. and we both
realised that <strong>we hadn't the faintest idea about “where” e-mail messages
“lived” while both the sender's and the recipient's computers where
switched off</strong>.
As in: an e-mail is travelling through the internet from computer A to
computer B; what if computer B happens to be off, or offline,
when the message “arrives”?
Wouldn't the message miss its target and be lost forever?
Perhaps messages can be transmitted only when both parties happen to be
connected simultaneously?
(but that didn't seem to be the case).
Or does e-mail live in some kind of vacuum until it can descend
upon the recipient?
What mysterious ether is that, anyway?
Where is it physically located?
Halfway in between both parties?
I remember how we puzzled over this for a while, and then shrugged it off.</p>
<p><strong>A few years later I was a computer science freshman</strong>, and a bit less ignorant.
But only a bit.
A few months into our five-year-long MSc degree, my classmates and I had
been introduced already to the foundations of information theory,
computation, electronics and digital
architectures&nbsp;—&nbsp;and we were programming in x86 assembly
and in C.
It was hard and mind-expanding, and we started to be confident about
the rudiments of imperative programming.
We had been told that computation was universal and we knew that this
Turing-complete C language had everything we would ever need
(namely, loops and jumps).
We knew how to read input, process, and show results.
I mean, what else is there anyway, right?
Classic Dunning-Kruger effect, we kind of assumed we could tackle
almost any problem handed to us, given sufficient time to “program it off”.</p>
<p>Then one day, talking to my friend A.C.C., it dawned on us that all
the programs we knew and used “did things on their own”, ie acted
asynchronously with user input.
Software wasn't all “wait for user to do something, compute stuff, spit
something back”.
In fact, almost everything that looked interesting or useful seemed
to happen following a clock of its own, or at the same time that
other things were happening: WinZip would notify us when an archive
finished uncompressing; StarCraft didn't stay idle at all while
we contemplated our next move; Winamp was decoding MP3 while
displaying visualisations while we were messing with its settings…
and, most important of all, all those programs would be running at the same time.
How on earth would one do that, no matter how many structs, matrices
or pointers?
<strong>Not only did we not know how to do parallel programming, multi-threading,
interruptions or event-driven interfaces&nbsp;—&nbsp;we hadn't even
realised those were a thing</strong>.</p>
<p><img decoding="async" loading="lazy" src="https://upload.wikimedia.org/wikipedia/en/f/ff/Winamp_5.666_media_player.png" alt="Winamp: it really whips the llama's ass" class="img_ev3q"></p>
<p>Aren't those anecdotes cute?</p>
<p>Looking back, it's clear I learnt so much in those formative years.
Not only about computers, but also about maths, physics, logic and other subjects.</p>
<p>I forgot an awful lot of that, and so I remain mostly ignorant.
And to make things worse, the number of areas I want to learn about has increased
with time: philosophy, economics, history, literature,
languages&nbsp;—&nbsp;to name a few.</p>
<p>What post will I be writing in twenty or thirty years from now?</p>
<p>What appalling gaps in my knowledge will I have filled a little by then?</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><abbr title="Intellectual Property">IP</abbr>&nbsp;</div><div class="admonitionContent_BuS1"><p>IBM PC 5150: <a href="https://commons.wikimedia.org/wiki/File:IBM_PC_5150.jpg" target="_blank" rel="noopener noreferrer" class="">Wikimedia (Creative Commons)</a><br>
<!-- -->Winamp 5.666 media player:
<a href="https://en.wikipedia.org/wiki/File:Winamp_5.666_media_player.png" target="_blank" rel="noopener noreferrer" class="">Wikimedia (copyrighted, fair use)</a></p></div></div>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="personal" term="personal"/>
        <category label="tech" term="tech"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Giving up on the electric car?]]></title>
        <id>https://blog.tripu.info/electric-car</id>
        <link href="https://blog.tripu.info/electric-car"/>
        <updated>2025-08-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We bought our electric car in April 2022.]]></summary>
        <content type="html"><![CDATA[<p>We bought our electric car <a href="https://pixelfed.de/p/tripu/423134706296358645" target="_blank" rel="noopener noreferrer" class="">in April 2022</a>.
It's a <a href="https://ev-database.org/car/1280/Skoda-Enyaq-iV-80" target="_blank" rel="noopener noreferrer" class="">Škoda Enyaq iV 80</a>.
Its battery has 77 KWh of usable capacity, and its range varies from less than
300 km (at 125 km/h on the highway, fully loaded, on the coldest day of the winter)
to 500 km or more (driving alone in the city with mild weather).
(Yes, it changes that much.)</p>
<p>I reckon we paid a premium of around €10,000 over a comparable small SUV with a combustion engine.
My back-of-the-envelope calculation back then suggested that cheaper fuel, simpler maintenance,
free parking in (and free access to) many city centres (definitely Madrid), and lower ownership taxes
would cancel out the extra cost after seven years or so.
Perhaps that was still an optimistic estimate because it ignored the higher depreciation of electric vehicles
in the second-hand market (batteries, which are the critical component and the most expensive one,
degrade significantly over time).</p>
<p>Importantly, this is our only car.
(I still think that is one car too many, but with two adults working and two small kids,
it seems impossible not to own one.)</p>
<p><a href="https://pixelfed.de/p/tripu/464386453145156541" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://pxlfdde.fsn1.your-objectstorage.com/public/m/_v2/163397574160683008/3c6c7d1ab-ede048/1dypsFtlDfPb/M7U3S46hxmYMRI5qTgUiRuZbhjNj2ue4hjnkaVqo.jpg" alt="Our car" class="img_ev3q"></a></p>
<p>There are many things to love about an electric car.
Really.
But we humans get used to the good quickly, and then take it for granted&nbsp;—&nbsp;while
the little annoyances keep on annoying us.
And, oh boy, is it annoying sometimes to use an electric car and the public charging networks in Spain, 2025.</p>
<p>Today I want to tell you about the last time I was seriously tempted to sell my sleek, quiet, powerful,
fragrant car&nbsp;—&nbsp;and buy a fricking Humvee.
That was two days ago.
Nothing special about that day, just another negative anecdote piling up.</p>
<p>To be clear, some of the <abbr title="user experience">UX</abbr> issues that follow
have more to do with my insistence on using free software (free as in “free speech”)
and preventing digital surveillance than with electric vehicles or charging stations per se.
And yet.</p>
<hr>
<p>Sunday morning.
As we're having family breakfast, a friend who is also a neighbour texts me to say they're about
to go with their kids to a farm school that is 70 km away, and then do a picnic.
We want in.</p>
<p>First issue: I check <a href="https://play.google.com/store/apps/details?id=cz.skodaauto.myskoda" target="_blank" rel="noopener noreferrer" class="">the crappy Škoda app</a>
on my phone and see that the car, which is parked in our communal garage, is at 32% charge.
Nothing strange: usually we don't plug in the car until <abbr title="State of charge">SoC</abbr> is below 30% or so.
The problem is this gives us a range or around 130 km only.
Last Sunday, that was not enough.
(Okay, this is easily preventable if one bothers to charge more often and always keep the car at least
half-charged.)</p>
<p>Second issue: our own charging station is AC and works at ~4 KW.
For our car, it takes almost two hours to charge 10%.
That is perfect to charge overnight (22:00&nbsp;→&nbsp;7:00, 30%&nbsp;→&nbsp;80%),
but too slow when in a hurry.
So we have to either stop along the way (possibly on the way back home) or find a fast public charging
station nearby and plug it in for ten minutes to give the car a quick shot.
So I check on my phone for chargers in town using
<a href="https://play.google.com/store/apps/details?id=com.enredats.electromaps" target="_blank" rel="noopener noreferrer" class="">the crappy Electromaps app</a>.
I discard the ones that would be too slow or seem unreliable (eg, the ones in supermarket parking space),
and conclude that there are two decent ones that I should be able to activate using the app.
While the family finishes breakfast and is getting ready to go, I drive to the nearest station
(a mere five minutes away), find both connectors available, and park near one of them.</p>
<p>Third issue: the crappy Electromaps app thinks that I'm still at home, and won't let me charge
because I'm not “sufficiently close” to the place.
On the map view, it's like I'm still one or two kilometres away.
I move around the map with my fingers, wait a moment for the GPS signal to catch on, and
walk out of the shade to have clear satellite view.
I open <a href="https://f-droid.org/packages/net.osmand.plus/" target="_blank" rel="noopener noreferrer" class="">OsmAnd~</a> and confirm that my location is
the right one on that application.
I stretch my arm towards the sky to surrender my phone to the gods above, to no avail.
I try killing the Electromaps process in Android, and starting it again.
Nothing.
I check the permissions of the app and grant it every stupid, colon-inspecting permission it wants,
including fine-grained location in the background, even when the application isn't “running”.
I stop the app and start it again.
Same thing.
Then I get in the car, drive out of the place, do a one-eighty at the nearest roundabout
(holding my phone in my hand with the app open; don't try this at home),
and get back to the same connector.
This time Electromaps understands where I am, and lets me tap its “charge now” button.
So I plug in the connector to the car in sweet anticipation.</p>
<p>Fourth issue: after a couple seconds, Electromaps shows a generic error message and informs me that
the charge cannot start.
This is one of my favourite features of our green sustainable future.
Discarding that error message to try again isn't easy either: <em>back</em>, <em>back</em>, <em>exit button</em>,
<em>exit button</em>, <em>tap outside the modal</em>, <em>tap outside the modal</em>, <em>back</em>, <em>back</em>, okay now I'm back.
I try again, with the same result.
I can never remember for the life of me if it's “tap button, then plug in” or
“plug in, then tap button” (and I suspect it isn't even consistent across apps and
charging networks), so I try plugging in first.
Doesn't work, so it must be the other way around; let's try again.
Same error.
I reach for the connector at the other side of the pole, which fortunately is long enough, and
try with that one.
Same error.
I give up, get in the car and drive to the other charging station, which is very close.
This one is empty too, and the spots painted on the pavement on both sides of the monolith
are very spacious, so I park the car head-first in one of them.</p>
<p>Fifth issue: when I get out and stretch one of the cables to plug it into my car,
I realise it is thirty centimetres too short.
I pull the connector taut for a moment like an idiot, looking at the chasm between male
and female, and I can almost hear the laugh track behind me.
I get in the car again, back up, turn, then park backwards in the other space.</p>
<p>Sixth issue: which connector is which?
On the pole there are two signs, one at each side, with their IDs; something like
<code>XJ429-3321</code> and <code>XJ429-3322</code>.
But on Electromaps I only see two identical connectors, with no codes.
I tap one at random.</p>
<p>Seventh issue: Electromaps won't let me charge here, either.
A few seconds of hope, then the car gives me a red light and the app an unhelpful error.
The good news is that I suspect I'm on the right connector because, according to the display
on the pole, the other one is much slower (and on Electromaps I've tapped on a fast one).
I try a couple of times (“tap button, then plug in” or
“plug in, then tap button”?).
I give up.
I call my wife on the phone, who uses
<a href="https://play.google.com/store/apps/details?id=es.iberdrola.recargaverde" target="_blank" rel="noopener noreferrer" class="">a slightly less crappy app</a>
that sometimes works when others don't.
I tell her the charging station I'm in, and that it's the connector ending in <code>3322</code>.
She does her thing and for some reason this time it works, and the car starts charging fast.</p>
<p>In less than ten minutes SoC is above 50%; more than enough.
I leave the place, pick up the family at home, and we drive to the farm school.
Although we got there a bit late, the day ends up very well and we have a great time
with our friends.</p>
<hr>
<p>Yes, half of those hiccups the other day had to do with one crappy app in particular.
But I could tell you similar horror stories when the culprits were <em>other</em> crappy apps,
the crappy software of the car, the crappy software of the charging station, unreliable charging
networks, the interaction between car and charging station, bad design decisions somewhere
along the chain, or a combination of the above.</p>
<p>And to reiterate: there are some great things about driving an electric car.</p>
<p>Some other day we'll talk about those.</p>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="personal" term="personal"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React 19 with JSX, pure client (no build)]]></title>
        <id>https://blog.tripu.info/react-19</id>
        <link href="https://blog.tripu.info/react-19"/>
        <updated>2025-07-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I love simplicity when it comes to software, and for web development I try to get rid of servers]]></summary>
        <content type="html"><![CDATA[<p>I love simplicity when it comes to software, and for web development I try to get rid of servers
whenever possible.
For all APIs, libraries or frameworks I use, I want to have a
<strong>minimalistic HTML page that instantiates and sets up the bare minimum for that tool to work,
and that I can load from <code>localhost</code>&nbsp;—&nbsp;no web server required</strong>.
Those files I use as boilerplate and reference, cloning them for whatever experiment I want to do.
Of course, web servers and build steps are great for all sorts of reasons,
but sometimes you just want to play around or develop a quick proof of concept.</p>
<p><img decoding="async" loading="lazy" alt="A fancy thumbnail I created with ChatGPT" src="https://blog.tripu.info/assets/images/react-babel-client-04e2d83374d1c2cea1e71bd961edf42d.png" width="1536" height="1024" class="img_ev3q"></p>
<p>React 19 is <a href="https://react.dev/blog/2024/12/05/react-19" target="_blank" rel="noopener noreferrer" class="">almost eight months old now</a>.
However, the
<a href="https://gist.githubusercontent.com/gaearon/0275b1e1518599bbeafcde4722e79ed1/raw/db72dcbf3384ee1708c4a07d3be79860db04bff0/example.html" target="_blank" rel="noopener noreferrer" class="">stand-alone HTML page</a>
suggested in the official documentation to
<a href="https://react.dev/learn/installation#try-react" target="_blank" rel="noopener noreferrer" class="">“try React locally on your computer”</a>
is <strong>still using version 18</strong>:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token doctype punctuation" style="color:rgb(199, 146, 234);font-style:italic">&lt;!</span><span class="token doctype doctype-tag" style="color:rgb(199, 146, 234);font-style:italic">DOCTYPE</span><span class="token doctype" style="color:rgb(199, 146, 234);font-style:italic"> </span><span class="token doctype name" style="color:rgb(199, 146, 234);font-style:italic">html</span><span class="token doctype punctuation" style="color:rgb(199, 146, 234);font-style:italic">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">html</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">head</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">meta</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">charset</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">UTF-8</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain">Hello World</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">src</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">https://unpkg.com/react@18/umd/react.development.js</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">src</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">https://unpkg.com/react-dom@18/umd/react-dom.development.js</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">src</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">https://unpkg.com/@babel/standalone/babel.min.js</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">head</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">div</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">id</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">root</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">text/babel</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      </span><span class="token script language-javascript keyword" style="font-style:italic">function</span><span class="token script language-javascript"> </span><span class="token script language-javascript function maybe-class-name" style="color:rgb(130, 170, 255)">MyApp</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">        </span><span class="token script language-javascript keyword control-flow" style="font-style:italic">return</span><span class="token script language-javascript"> </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token script language-javascript">h1</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token script language-javascript maybe-class-name">Hello</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"> world</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">!</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">/</span><span class="token script language-javascript">h1</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      </span><span class="token script language-javascript keyword" style="font-style:italic">const</span><span class="token script language-javascript"> container </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">=</span><span class="token script language-javascript"> </span><span class="token script language-javascript dom variable" style="color:rgb(191, 199, 213)">document</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript method function property-access" style="color:rgb(130, 170, 255)">getElementById</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">'root'</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      </span><span class="token script language-javascript keyword" style="font-style:italic">const</span><span class="token script language-javascript"> root </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">=</span><span class="token script language-javascript"> </span><span class="token script language-javascript maybe-class-name">ReactDOM</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript method function property-access" style="color:rgb(130, 170, 255)">createRoot</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token script language-javascript">container</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      root</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript method function property-access" style="color:rgb(130, 170, 255)">render</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token script language-javascript maybe-class-name">MyApp</span><span class="token script language-javascript"> </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">/</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">html</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<p>Naively, I copied-and-pasted the page, then removed both <code>@18</code> bits above so that
<a href="https://unpkg.com/" target="_blank" rel="noopener noreferrer" class="">Unpkg</a> would return <code>@latest</code> by default (in this case, React <code>19</code>).
But that URL failed.</p>
<p>What was happening?
After all, I had done <a href="https://gitlab.com/tripu.info/theming-poc" target="_blank" rel="noopener noreferrer" class="">something similar</a> in the past:
loading native JS modules dynamically on the client, those modules in turn importing React 18,
the whole thing working with no build steps…
I consulted with ChatGPT, but it lied to me and gave me a “solution” that could not work.</p>
<p>It turns out there were <strong>two issues</strong>.</p>
<p>First,
<a href="https://react.dev/blog/2024/04/25/react-19-upgrade-guide#umd-builds-removed" target="_blank" rel="noopener noreferrer" class=""><strong>UMD builds aren't provided any more</strong></a>:
starting with React 19, an “ESM-based CDN such as <a href="https://esm.sh/" target="_blank" rel="noopener noreferrer" class="">esm.sh</a>” is recommended instead.
<a href="https://peterkellner.net/2024/05/10/running-react-19-from-a-cdn-and-using-esm.sh/" target="_blank" rel="noopener noreferrer" class="">A blog post by <strong>Peter Kellner</strong></a>
gave me the hint.
At the time, <a href="https://www.npmjs.com/package/react/v/19.0.0" target="_blank" rel="noopener noreferrer" class=""><code>react@9.0.0</code></a> did not exist in <code>npm</code> yet, so Peter
used a beta build.
But today, we can fetch the production release.</p>
<p>And so the original boilerplate goes from this:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">src</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">https://unpkg.com/react@18/umd/react.development.js</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">src</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">https://unpkg.com/react-dom@18/umd/react-dom.development.js</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<p>to this:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">module</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript keyword module" style="font-style:italic">import</span><span class="token script language-javascript"> </span><span class="token script language-javascript imports maybe-class-name">React</span><span class="token script language-javascript"> </span><span class="token script language-javascript keyword module" style="font-style:italic">from</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/react?dev"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript">                </span><span class="token script language-javascript comment" style="color:rgb(105, 112, 152);font-style:italic">// ≡ latest ≡ 19</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript keyword module" style="font-style:italic">import</span><span class="token script language-javascript"> </span><span class="token script language-javascript imports maybe-class-name">ReactDOM</span><span class="token script language-javascript"> </span><span class="token script language-javascript keyword module" style="font-style:italic">from</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/react-dom/client?dev"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript">  </span><span class="token script language-javascript comment" style="color:rgb(105, 112, 152);font-style:italic">// ≡ latest ≡ 19</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<p>The second issue was that after this change, <strong><a href="https://react.dev/learn/writing-markup-with-jsx" target="_blank" rel="noopener noreferrer" class="">JSX</a>
support was broken</strong>, and thus the page didn't work as a fully-fledged, realistic React playground yet.
Indeed, both in my aforementioned “Theming PoC” experiments and in Peter's post above,
JSX syntax is conspicuously absent!
How come?</p>
<p>Turns out that Babel automatically transpiles <code>script</code> elements of <code>type="text/babel"</code>&nbsp;—&nbsp;and
only those.
Our JSX markup <em>needs</em> to be inside a <code>&lt;script type="text/babel"&gt;</code> tag.
At the same time, we <em>need</em> <code>type="module"</code> to be able to load React (v19) dependencies as ES modules…</p>
<p>After some tests and some thinking, I came up with this (ahem) <em>slightly controversial</em> solution:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">module</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript keyword module" style="font-style:italic">import</span><span class="token script language-javascript"> </span><span class="token script language-javascript imports maybe-class-name">React</span><span class="token script language-javascript"> </span><span class="token script language-javascript keyword module" style="font-style:italic">from</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/react?dev"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript keyword module" style="font-style:italic">import</span><span class="token script language-javascript"> </span><span class="token script language-javascript imports maybe-class-name">ReactDOM</span><span class="token script language-javascript"> </span><span class="token script language-javascript keyword module" style="font-style:italic">from</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/react-dom/client?dev"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript dom variable" style="color:rgb(191, 199, 213)">window</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript property-access">__tmp</span><span class="token script language-javascript"> </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">=</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"> </span><span class="token script language-javascript maybe-class-name">React</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"> </span><span class="token script language-javascript maybe-class-name">ReactDOM</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">text/babel</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript keyword" style="font-style:italic">const</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"> </span><span class="token script language-javascript maybe-class-name">React</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"> </span><span class="token script language-javascript maybe-class-name">ReactDOM</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"> </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">=</span><span class="token script language-javascript"> </span><span class="token script language-javascript dom variable" style="color:rgb(191, 199, 213)">window</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript property-access">__tmp</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript keyword" style="font-style:italic">delete</span><span class="token script language-javascript"> </span><span class="token script language-javascript dom variable" style="color:rgb(191, 199, 213)">window</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript property-access">__tmp</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript comment" style="color:rgb(105, 112, 152);font-style:italic">// &lt;YourJSXstuffGoesHere /&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<p>Yes: I am writing to the global scope from within a module; I am polluting <code>window</code>.
But hey, it's a super-quick exchange of data, all encapsulated into a single property, and I'm cleaning after myself!</p>
<p>Here is the final version, with <strong>the latest React and React DOM on the browser, with JSX support, no build needed</strong>:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token doctype punctuation" style="color:rgb(199, 146, 234);font-style:italic">&lt;!</span><span class="token doctype doctype-tag" style="color:rgb(199, 146, 234);font-style:italic">DOCTYPE</span><span class="token doctype" style="color:rgb(199, 146, 234);font-style:italic"> </span><span class="token doctype name" style="color:rgb(199, 146, 234);font-style:italic">html</span><span class="token doctype punctuation" style="color:rgb(199, 146, 234);font-style:italic">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">html</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">head</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">meta</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">charset</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">UTF-8</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain">Hello World</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">src</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">https://unpkg.com/@babel/standalone/babel.min.js</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">head</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">div</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">id</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">root</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">module</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      </span><span class="token script language-javascript keyword module" style="font-style:italic">import</span><span class="token script language-javascript"> </span><span class="token script language-javascript imports maybe-class-name">React</span><span class="token script language-javascript"> </span><span class="token script language-javascript keyword module" style="font-style:italic">from</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/react?dev"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      </span><span class="token script language-javascript keyword module" style="font-style:italic">import</span><span class="token script language-javascript"> </span><span class="token script language-javascript imports maybe-class-name">ReactDOM</span><span class="token script language-javascript"> </span><span class="token script language-javascript keyword module" style="font-style:italic">from</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/react-dom/client?dev"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      </span><span class="token script language-javascript dom variable" style="color:rgb(191, 199, 213)">window</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript property-access">__tmp</span><span class="token script language-javascript"> </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">=</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"> </span><span class="token script language-javascript maybe-class-name">React</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"> </span><span class="token script language-javascript maybe-class-name">ReactDOM</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">text/babel</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      </span><span class="token script language-javascript keyword" style="font-style:italic">const</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"> </span><span class="token script language-javascript maybe-class-name">React</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"> </span><span class="token script language-javascript maybe-class-name">ReactDOM</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"> </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">=</span><span class="token script language-javascript"> </span><span class="token script language-javascript dom variable" style="color:rgb(191, 199, 213)">window</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript property-access">__tmp</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      </span><span class="token script language-javascript keyword" style="font-style:italic">delete</span><span class="token script language-javascript"> </span><span class="token script language-javascript dom variable" style="color:rgb(191, 199, 213)">window</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript property-access">__tmp</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      </span><span class="token script language-javascript keyword" style="font-style:italic">function</span><span class="token script language-javascript"> </span><span class="token script language-javascript function maybe-class-name" style="color:rgb(130, 170, 255)">MyApp</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">        </span><span class="token script language-javascript keyword control-flow" style="font-style:italic">return</span><span class="token script language-javascript"> </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token script language-javascript">h1</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token script language-javascript maybe-class-name">Hello</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"> world</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">!</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">/</span><span class="token script language-javascript">h1</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      </span><span class="token script language-javascript keyword" style="font-style:italic">const</span><span class="token script language-javascript"> container </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">=</span><span class="token script language-javascript"> </span><span class="token script language-javascript dom variable" style="color:rgb(191, 199, 213)">document</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript method function property-access" style="color:rgb(130, 170, 255)">getElementById</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">'root'</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      </span><span class="token script language-javascript keyword" style="font-style:italic">const</span><span class="token script language-javascript"> root </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">=</span><span class="token script language-javascript"> </span><span class="token script language-javascript maybe-class-name">ReactDOM</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript method function property-access" style="color:rgb(130, 170, 255)">createRoot</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token script language-javascript">container</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">      root</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript method function property-access" style="color:rgb(130, 170, 255)">render</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token script language-javascript maybe-class-name">MyApp</span><span class="token script language-javascript"> </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">/</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">html</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<p>You can also use <a href="https://codepen.io/tripu/pen/ZYbLoro" target="_blank" rel="noopener noreferrer" class="">this equivalent CodePen</a>.</p>
<p>(Needless to say, this is <em>not</em> the set-up that you want to deploy your precious application
for end users!)</p>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="work" term="work"/>
        <category label="programming" term="programming"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[2025 resolutions mid-year checkpoint]]></title>
        <id>https://blog.tripu.info/2025-checkpoint</id>
        <link href="https://blog.tripu.info/2025-checkpoint"/>
        <updated>2025-07-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[(More than) half of the year is over already, and I thought I should update you on my]]></summary>
        <content type="html"><![CDATA[<p>(More than) half of the year is over already, and I thought I should update you on my
<a class="" href="https://blog.tripu.info/2025-resolutions">new year's resolutions for 2025</a>.</p>
<p>Put some pressure on me!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="books">Books<a href="https://blog.tripu.info/2025-checkpoint#books" class="hash-link" aria-label="Direct link to Books" title="Direct link to Books" translate="no">​</a></h2>
<p><strong>Read all books in my top ten</strong>: 👍 looking good; mostly accomplished already.</p>
<p>As I anticipated, <a href="https://thegreatestbooks.org/" target="_blank" rel="noopener noreferrer" class="">the list</a> has changed a bit
in the last months.
During the first semester of the year I did read two from the (old) top ten (the last volume
of <em>In Search of Lost Time</em> and <em>Anna Karenina</em>), but I just saw that <strong>William Faulkner</strong>
moved up the ranking, and now I'm still missing one:</p>
<ol>
<li class=""><del>Ulysses</del> ✔️</li>
<li class=""><del>In Search of Lost Time</del> (seven volumes) ✔️</li>
<li class=""><del>The Great Gatsby</del> ✔️</li>
<li class=""><del>The Catcher in the Rye</del> ✔️</li>
<li class=""><del>One Hundred Years of Solitude</del> ✔️</li>
<li class=""><del>Nineteen Eighty Four</del> ✔️</li>
<li class=""><del>Moby-Dick</del> ✔️</li>
<li class="">The Sound and the Fury</li>
<li class=""><del>Don Quixote</del> ✔️</li>
<li class=""><del>Anna Karenina</del> ✔️</li>
</ol>
<p>I'm chill about this, because: a) as I said, this goal is instrumental, and the “top
ten” will always change anyway; b) I have been dutifully reading what I thought I ought to
read for the past ten years, so I <em>know</em> I am good at this (public new year's resolutions or not);
and c) I still have six months to read <em>The Sound and the Fury</em> if I want to be really strict
about this goal.</p>
<p><strong>Read at least 14 books this year</strong>: 👍 looking okay.</p>
<p>I have read ten books in 2025 already (Goodreads says nine, but that's because I read one that is
missing from its database)… with a caveat: six of those were graphic novels, 150 pages long
on average.
I feel I should discount comics somehow because they tend to be shorter and easier to read.
Reading 14 comics in a year would be too easy.
So I'll count graphic novels as “half a regular book”.</p>
<p>With that, I've read four books plus six “half books”, so seven in total.
Which is exactly half of my goal for the year.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="japanese">Japanese<a href="https://blog.tripu.info/2025-checkpoint#japanese" class="hash-link" aria-label="Direct link to Japanese" title="Direct link to Japanese" translate="no">​</a></h2>
<p><strong>Study “well” often</strong>: ❌ failing miserably.</p>
<p>I sat down to study for a good while (with books, pen and paper) perhaps five or six times
around the beginning of the year&nbsp;—&nbsp;then never again.</p>
<p><strong>Take (and pass) the JLPT N4</strong>: ❌ quite unlikely.</p>
<p>I didn't bother to take the test in July (obviously); now there's only the exam in December.
That one being just five months away, I would probably not pass even if I had some momentum
studying (which I do not have).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="nutrition">Nutrition<a href="https://blog.tripu.info/2025-checkpoint#nutrition" class="hash-link" aria-label="Direct link to Nutrition" title="Direct link to Nutrition" translate="no">​</a></h2>
<p><strong>Make a conscious effort to plan meals more often; eat a little better; cut on bad food</strong>:
👎 not looking good.</p>
<p>I behaved very well for the first two months of the year or so, cutting back on some snacks,
ingredients and easy meal options that I want to avoid altogether, and eating more of the
good stuff I want.
Then I relapsed and went back to the old ways.
Man, it's amazing the willpower that is required to eat the things that System 2 wants to eat
and not eat the things that System 2 wants to avoid.
It makes me more humble when I'm too quick to judge people who are fat or eat very unhealthy.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="exercise">Exercise<a href="https://blog.tripu.info/2025-checkpoint#exercise" class="hash-link" aria-label="Direct link to Exercise" title="Direct link to Exercise" translate="no">​</a></h2>
<p><strong>Work out better and more often</strong>: 👍 looking very good.</p>
<p>These are my stats for the first semester of the year:</p>
<ul>
<li class=""><strong>Weight-lifting</strong> at the gym: 37 times (once every 5 days)</li>
<li class=""><strong>Running</strong> outside: 15 times (once every 12 days)</li>
<li class=""><strong>Hiking</strong> with family or friends: 11 times (once every 16 days)</li>
<li class=""><strong>Skiing</strong>: 3 days.</li>
</ul>
<p>Between January and June I hit the gym as many times as in all of 2024.
Similar result with hiking: more days out already as in all of 2024.
And at this pace, I'll end 2025 with as many running sessions as last year, or
a couple more.</p>
<p><strong>Run a half marathon in 2025</strong>: ❓ perhaps.</p>
<p>I have my eye on a couple half marathons in the Autumn.
I have not started training for that specific goal yet, but this year I ran
10 or 11 kilometres a couple of times as regular sessions,
and I know that when the temperature is not too high I can usually go to
12 Km or so without any preparation.
So I know I can get ready for 21 Km in a couple of months of training, once
the date of the event is set.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="finances">Finances<a href="https://blog.tripu.info/2025-checkpoint#finances" class="hash-link" aria-label="Direct link to Finances" title="Direct link to Finances" translate="no">​</a></h2>
<p><strong>Save more money; review our balance sheet and reduce some expenses</strong>:
❌ nothing done yet.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="writing">Writing<a href="https://blog.tripu.info/2025-checkpoint#writing" class="hash-link" aria-label="Direct link to Writing" title="Direct link to Writing" translate="no">​</a></h2>
<p><strong>Finish the short story that I started writing a few years ago</strong>: 👎 not looking good.</p>
<p>I sat down to write twice, then never again.</p>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="personal" term="personal"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[“The Man from the Future: The Visionary Ideas of John von Neumann”]]></title>
        <id>https://blog.tripu.info/von-neumann</id>
        <link href="https://blog.tripu.info/von-neumann"/>
        <updated>2025-07-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[⭐⭐⭐]]></summary>
        <content type="html"><![CDATA[<p><a href="https://www.goodreads.com/review/show/5239548955" target="_blank" rel="noopener noreferrer" class="">⭐⭐⭐</a></p>
<p>I am a bit embarrassed to notice that this may be the first “biography” I've ever read.
It probably is.
I'm not sure.</p>
<p>Perhaps due to that lack of experience on my part, I was expecting something
a bit different from <a href="https://wwnorton.com/books/the-man-from-the-future" target="_blank" rel="noopener noreferrer" class="">this book</a>.
I had decided I wanted to read it for one simple reason: to (try to) understand what it's like to be
really, really intelligent.
I had heard all kind of stories about <strong>John von Neumann</strong> and about his feats.
I wanted to delve into that, try to understand how exactly his brain was so different from a normal one.
What it meant for him to be so much smarter than almost everyone around him.
How he thought, what “extremely intelligent” actually means.</p>
<blockquote>
<p><em>“As a child, von Neumann absorbed Ancient Greek and Latin, and spoke French,
German and English as well as his native Hungarian.
He devoured a forty-five-volume History of the world and was able to recite whole chapters verbatim
decades later.”</em></p>
</blockquote>
<p><a href="https://wwnorton.com/books/the-man-from-the-future" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" alt="The cover of the book" src="https://blog.tripu.info/assets/images/von-neumann-cover-f281a35787ddd6875b2386daa14b6daa.jpeg" width="800" height="1200" class="img_ev3q"></a></p>
<p>Very intelligent people have interested me lately; not so much specific individuals, but in the abstract.
I think this curiosity arose mainly from my face-to-face interactions with
<a href="https://www.altruismoeficaz.es/" target="_blank" rel="noopener noreferrer" class="">local members of the Effective Altruism</a>
and Rationality communities in the last years: I now know quite well that feeling of struggling to keep up
with an impromptu exchange of arguments between two friends, of being the last one at the table
to see the ramifications of some new piece of information, of halting for a while to sweat the mental
arithmetic necessary to make sense of what has just been said&nbsp;—&nbsp;while others
seem capable of merrily bouncing data and ideas all along.</p>
<blockquote>
<p><em>“For […] two hours the men at Rand [Corporation] lectured,
scribbled on blackboards, and brought charts and tables back and forth.
Von Neumann sat with his head buried in his hands.
When the presentation was completed, he scribbled on a pad, […] then said,
‘Gentlemen, you do not need the computer.
I have the answer.’
While the scientists sat in stunned silence, von Neumann reeled off the various steps which
would provide the solution to the problem.
Having risen to this routine challenge, von Neumann followed up with a routine suggestion:
‘Let's go to lunch.’”</em></p>
</blockquote>
<p>But instead of a lineal account of the events in von Neumann's life plus his takes on them,
the author serves us a very wide survey of mathematics, physics, engineering and computer science
from the beginning of the past century up to today.
Almost everything is connected to von Neumann's work in one way or another, but sometimes the link
is distant (in time or in space): there are stretches of several pages discussing theories or
inventions by some renowned figure or another, and the name of von Neumann appears only to
acknowledge that the seeds of those discoveries can be traced back to a paper or a lecture by
him, decades earlier.</p>
<p>The book is great in its own way: many of its pages are captivating, as they tell the stories of
some of the most fascinating ideas in maths and physics.
Game theory, ideas of the infinite, quantum physics, universal computers, automata generating
complexity out of the ether, self-replicating machines and artificial life,
neural networks and artificial intelligence, or the shocking discovery that
<a href="https://en.wikipedia.org/wiki/G%C3%B6del's_incompleteness_theorems" target="_blank" rel="noopener noreferrer" class="">mathematics is neither complete nor consistent</a>.
The historical backdrop is equally extraordinary: the rise of Nazism and other totalitarianisms,
the exodus of European geniuses to the US (especially
<a href="https://en.wikipedia.org/wiki/The_Martians_(scientists)" target="_blank" rel="noopener noreferrer" class="">“Martians”</a>
such as von Neumann), the atomic bomb and the Cold War.</p>
<p>And the names!
I was delighted to see mentioned so many intellectuals that I admire or about whom I have read
a bit:
<strong>Hilbert</strong>, <strong>Gödel</strong>, <strong>Schelling</strong>, <strong>Schrödinger</strong>, <strong>Nash</strong>, <strong>Mandelbrot</strong>, <strong>Heisenberg</strong>,
<strong>Turing</strong>, <strong>Wolfram</strong>, <strong>Russell</strong>, <strong>Feynman</strong>, <strong>Dyson</strong>, <strong>Erdős</strong>, <strong>Conway</strong>, <strong>Penrose</strong>,
<strong>McCarthy</strong>, <strong>Minsky</strong>, etc.
One of the best things I take from the book is a renewed desire to read about science in general,
and about maths and philosophy of science in particular.</p>
<p>Although we get to know the person, his character and his political ideas well enough, we don't get a
precise timeline of von Neumann's domestic life and intimate thoughts.
Perhaps there aren't enough sources for that&nbsp;—&nbsp;and perhaps a proper biography in that
fashion would be boring after all.</p>
<p>There are several hundred footnotes, the majority bibliographical references.
But also funny anecdotes, additional explanations by the author and hyperlinks
to articles and videos online that provide context or additional depth.</p>
<p>In summary, the book is a bit all over the place, but the protagonist and his contemporaries are so
remarkable, the Twentieth Century so fruitful for science, and the author so compelling in his
writing, that I don't mind not having read a “proper biography”.</p>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="book-review" term="book-review"/>
        <category label="science" term="science"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Should I focus on trying to retire?]]></title>
        <id>https://blog.tripu.info/retire</id>
        <link href="https://blog.tripu.info/retire"/>
        <updated>2025-06-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Two years ago I realised for the first time that I end up making]]></summary>
        <content type="html"><![CDATA[<p>Two years ago <a class="" href="https://blog.tripu.info/late">I realised for the first time</a> that I end up making
the “right” moves in life, but often I make those changes later than
the average of my peers.</p>
<p>Owning a house, investing money, getting married, having kids…
It's not that I fail at those projects, or shun those life decisions: it's just that sometimes
I get to those places a few years later than would be desirable&nbsp;—&nbsp;judging
with the benefit (and the bias) of hindsight.</p>
<p>That was stating the obvious, I guess.
<em>Of course</em> you want to start earning money earlier rather than later.
<em>Of course</em> you want to travel soon, so that you'll have more time to visit more places in your life.
You'll probably end up marrying and having kids (like most people do), so why postpone it
unnecessarily?
And yet, for me, strangely, that was a novel realisation.</p>
<p><img decoding="async" loading="lazy" alt="tripu, retired on an alternate universe" src="https://blog.tripu.info/assets/images/retired-9b7501fd37a417e29299cd2f516ae3cb.gif" width="1024" height="1024" class="img_ev3q"></p>
<p>Armed with that silly “insight”, in 2023 I noted that</p>
<blockquote>
<p><em>“now that I've spotted a trend in my life trajectory,
it should be ‘easy’ for me to course-correct.
[…]
That means <strong>making an effort to identify the next life goals, and acting quicker to get there</strong>.
And so I have been wondering:<br>
<strong>What are people my age starting to do now?<br>
<!-- -->What will they be doing in a few years' time?</strong>”</em></p>
</blockquote>
<p>Well, in the last year or so I have had a few surprising conversations with
at least four friends (who are more or less my age and lead similar lives),
all pointing in the same direction:
<strong>their desire to retire asap from “work”&nbsp;—&nbsp;and
in some cases, even their ongoing efforts to do just that</strong>.</p>
<p>When that idea had popped up in only one or two casual chats, I didn't give it much import.
After all, there are always some people who find their work extra tiring, or feel stuck
in a career that bores them to the bone.
Those people may long for early retirement, or at least a sinecure
(here in Spain, that means joining the civil service or getting stable employment
at a very large company).</p>
<p>But this “I hope to retire in a few years' time” thing kept surfacing
with more friends I met.
What was going on?</p>
<p>To be fair, <a class="" href="https://blog.tripu.info/late#4-the-idea-lets-not-be-that-late-again">I kind of saw this one coming</a> two years ago, too:</p>
<blockquote>
<p><em>“Some people my age who can afford it […] even retire from work altogether.
What's not to like about that?
Of course I'd want that, too.”</em></p>
</blockquote>
<p><em>Would I</em>, though?</p>
<p>I am still confused about how to frame this, and so I keep on contradicting myself in conversations
(and in posts).
<strong>What does “retiring” mean?</strong></p>
<p>If “retiring” means <strong>“getting the same money you earn now but with no
obligation to work at all”</strong>, then <em>everybody</em> (including me) would like that, right?
After all, if one really likes their job, or derives a lot of meaning from it, or is the kind
of person who needs a job (<em>any</em> job) to rescue them from boredom or from the presence of a family
they don't like or from the angst of existence… well, one can always insist on going to
work “for free”.</p>
<p>If, on the other hand, “retiring” means <strong>“landing a job so comfy and so secure
that in practice one works very little and can stop worrying about money and about old age
altogether”</strong>, then I'm not so sure.
Barring aristocracy, diplomacy, high-end PR, the world of celebrities, etc, it is rare for
a job to be both very comfy <em>and</em> very secure.
Also, the logic of the market tells us that such positions, to the extent they exist at all,
have to score abysmally low in some other important dimension
(occupational hazards, social stigma, poor salary, negative externalities, soul-crushing nature)
or else they would be The Job That Absolutely Everybody Seeks.
Many of the typical public service jobs that seem so coveted in Spain are unappealing to
me&nbsp;—&nbsp;even if they often mean working 35 hours/week with no overtime,
a predictable stream of easy tasks, no stress, generous time off, and employment
virtually guaranteed for life.
Still, I have to admit that getting such a position may be objectively a good move, if you
can live only for the excitement derived from areas of life other than work and you are able
to put up with the tedium of bureaucracy and stagnation until (actual) retirement.</p>
<p>Finally, “retirement” to other people means <strong>“not being on a payroll,
not ‘having a boss’”</strong>.
Those people mostly are (or are trying to become) freelancers, contractors, self-employed,
artisans, artists, entrepreneurs, “content creators”, “influencers”, etc.
If they say they are “retired”, I think they are deluding themselves:
they are working, only not regular jobs.
So for the purpose of the discussion, I will exclude this definition.</p>
<p>Thinking of meaning #1 (ie, proper retirement), this is what I was thinking two years ago:</p>
<blockquote>
<p><em>“The question here, I guess, is whether it's important enough to put the effort and make
the sacrifices necessary to get there some day.
Retiring early is very tough.”</em></p>
</blockquote>
<p>So, is it worth it?</p>
<p>To try to understand this better, <strong>I thought about these four friends of mine</strong>.
This is roughly who they are (they are all male, Spaniards, married or in stable relationships):</p>
<ul>
<li class="">A bit younger than me, one kid, inheritance, sources of passive income,
recently joined an IBEX35-listed company.</li>
<li class="">A bit younger than me, two kids, engineer, employed, sources of passive income.</li>
<li class="">My age, two kids, side gig, more than a decade working at an IBEX35-listed company.</li>
<li class="">A bit older than me, two kids, two decades or more working at an IBEX35-listed company.</li>
</ul>
<p>Now, how do they plan to “retire”?</p>
<ul>
<li class="">One of my friends invested quite successfully years ago and now hopes to grow his portfolio
enough to actually stop working altogether and live off of it (meaning #1, proper retirement).</li>
<li class="">Two other friends have their eyes set on the very generous early retirement programmes
offered by their private employers (meaning #1, proper retirement).
They can't retire just yet, but it seems they could in the not-so-distant future
(a decade or more before
<a href="https://www.lavanguardia.com/mediterranean/20250101/10250593/legal-retirement-age-increase-66-years-8-months-2025-pension-spain-economy.html" target="_blank" rel="noopener noreferrer" class="">the standard retirement age of 67</a>).
And I think one of these two earns nearly as much from a side gig which occupies little of
his time as he gets from his full-time employment.</li>
<li class="">The last one doesn't expect to actually retire any time soon, but looks at his current employer
as the last career stop for him&nbsp;—&nbsp;for the job security, the work-life balance
and the ease of mind (meaning #2, the sinecure).
This one is also building significant wealth and alternate sources of income, so I see him
easily pivoting from #2 to #1 in the future.</li>
</ul>
<p>Here comes yet another very silly insight of mine: by looking at their individual
situations so dispassionately and trying to describe them in writing as I did here,
I noticed common patterns that should have been obvious to me from my conversations
with them.
(Yes, really.)</p>
<ul>
<li class="">Three of them work for one of the
<a href="https://en.wikipedia.org/wiki/IBEX_35" target="_blank" rel="noopener noreferrer" class="">thirty-five largest corporations in Spain</a>
(and two of them have been there for many years).</li>
<li class="">Three of them are benefiting from sheer luck (family inheritances, questionable investments
that worked great in the end) or from an extra shot of industriousness (working harder
than average, finding side gigs, being restless in their careers)&nbsp;—&nbsp;or
from both at the same time.</li>
<li class="">Three of them are the analytical type (number-oriented).</li>
<li class="">Two of them have been watering additional sources of income for years.</li>
<li class="">I know them well enough to say that at least two of them are for sure more intelligent
than me.
Probably the other two are more intelligent than me, too; I honestly don't know.
I'd say I'm in the same ballpark of IQ as the other two.
(I'm trying to be objective here, but at the same time I don't want to conclude that
they are all significantly smarter than me, because that would absolve me of
due introspection and of the responsibility to conduct myself better than I do!)</li>
</ul>
<p>So what are the conclusions of all this?</p>
<p>Conclusion number one: <strong>I guess I am late</strong>.
Again.</p>
<p>I don't feel like retiring.
But then, I didn't feel like settling down or buying an apartment&nbsp;—&nbsp;until I did.
Judging by my peers, I guess I'll be dying to retire in a few years' time, just like them.</p>
<p>Conclusion number two: strangely (I guess) I don't have any desire to <strong>work for a megacorp</strong> <em>today</em>.
I like my messy career of scrubby start-ups, beautiful non-profits that don't pay much,
small companies building a cool product, and so on.
I have switched jobs because I liked the tech, because it allowed me to move abroad (or to
return home), because it let me work from home with no schedule, because it paid well,
or because the organisation was (really)
<a href="https://www.youtube.com/watch?v=qZmpYxbBDQw" target="_blank" rel="noopener noreferrer" class="">making the world a better place</a>.
And yet this has happened to me before: the likes of Inditex, Santander, Repsol, etc. aren't especially
attractive to me <em>today</em>, but perhaps they <em>will</em> be in 2030 or 2035.
<strong>Shall I orient myself towards that goal already, just in case?</strong></p>
<p>Number three: ditto about <strong>a sinecure</strong>.
I do not want an “easy and secure job” <em>today</em>.
Even at a sinecure one needs to spend hours with a computer, answer to a boss,
(probably) commute to an office, ask for days off, justify absences and, well, <em>work</em>.
But, will I want an easy job between now and (actual) retirement?
<strong>Shall I pursue that?</strong></p>
<p>Number four: I should probably be more determined at work, more <strong>focused on long-term career growth</strong>.
Perhaps I should dedicate more time to position myself as one of those serious and reliable
old-time corporate employees, instead of looking for synonyms of “determined”
late at night for a post no-one will read.
Perhaps I should get industry certifications or other titles and work to be promoted within the
same org, instead of studying philosophy or literature for fun and letting myself get captivated
by cool tech or cool start-ups.
I like my job and I am reasonably good at it, but I like so many other things that in certain
areas my CV does not shine as it should.</p>
<p>Number five: I ought to find <strong>additional sources of stable income</strong>.
I already invest what little money I have sensibly enough, but I should work on passive
income and/or side gigs too.
Having that in the future will come handy, no matter how or when I retire.</p>
<p>If ever.</p>
<p>(What do you think?)</p>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="personal" term="personal"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Map of knowledge (1/∞): initial nodes (individuals)]]></title>
        <id>https://blog.tripu.info/knowledge-1</id>
        <link href="https://blog.tripu.info/knowledge-1"/>
        <updated>2025-06-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Thinkers]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="thinkers">Thinkers<a href="https://blog.tripu.info/knowledge-1#thinkers" class="hash-link" aria-label="Direct link to Thinkers" title="Direct link to Thinkers" translate="no">​</a></h2>
<p>I asked <strong>Claude</strong>, <strong>ChatGPT</strong>, <strong>Copilot</strong>, <strong>Gemini</strong> and <strong>Grok</strong>:</p>
<blockquote>
<p><em>“<strong>What are the ten most influential thinkers in human history?</strong>
What ten individuals made the most important contributions to philosophy?
They should all be real people who actually existed, about whom we have enough information,
who were original in their ideas, and who continue to be discussed and appreciated.
Consider philosophers, theologians, social scientists, authors, and any other kind of intellectual.”</em></p>
</blockquote>
<p>Results:</p>
<ul>
<li class="">Five mentions: <strong>Aristotle</strong>, <strong>Confucius</strong>, <strong>Immanuel Kant</strong> and <strong>Karl Marx</strong>.</li>
<li class="">Four mentions: <strong>Plato</strong>.</li>
<li class="">Three mentions: <strong>René Descartes</strong> and <strong>Jesus</strong>.</li>
<li class="">Two mentions: <strong>Thomas Aquinas</strong>, <strong>Augustine of Hippo</strong>, <strong>Avicenna</strong>, <strong>Charles Darwin</strong>,
<strong>Sigmund Freud</strong>, <strong>Friedrich Nietzsche</strong> and <strong>Socrates</strong>.</li>
<li class="">One mention (discarded): <del>Buddha</del>, <del>Laozi</del>, <del>John Locke</del>, <del>Muhammad</del>,
<del>John Stuart Mill</del> and <del>Mary Wollstonecraft</del>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="leaders">Leaders<a href="https://blog.tripu.info/knowledge-1#leaders" class="hash-link" aria-label="Direct link to Leaders" title="Direct link to Leaders" translate="no">​</a></h2>
<blockquote>
<p><em>“<strong>Who are the ten most influential leaders in human history</strong>,
ie the ten individuals who led the most people and changed the course of events most dramatically?
They should all be real people who actually existed, about whom we have enough information.
Consider heads of government, heads of state, politicians, activists, conquerors, warriors,
explorers, company executives, and any other kind of leadership position, formal or informal.
Consider both negative and positive impact in society.”</em></p>
</blockquote>
<p>Results:</p>
<ul>
<li class="">Five mentions: <strong>Alexander the Great</strong>, <strong>Genghis Khan</strong> and <strong>Mao Zedong</strong>.</li>
<li class="">Four mentions: <strong>Adolf Hitler</strong>, <strong>Julius Caesar</strong> and <strong>Napoleon</strong>.</li>
<li class="">Three mentions: <strong>Abraham Lincoln</strong>, <strong>Jesus</strong>, <strong>Mahatma Gandhi</strong>,
<strong>Martin Luther King, Jr.</strong> and <strong>Muhammad</strong>.</li>
<li class="">Two mentions: <strong>Winston Churchill</strong>.</li>
<li class="">One mention (discarded): <del>Christopher Columbus</del>, <del>Confucius</del>, <del>Buddha</del>,
<del>George Washington</del>, <del>Qin Shi Huang</del> and <del>Queen Elizabeth I</del>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="scientists">Scientists<a href="https://blog.tripu.info/knowledge-1#scientists" class="hash-link" aria-label="Direct link to Scientists" title="Direct link to Scientists" translate="no">​</a></h2>
<blockquote>
<p><em>“<strong>Who are the top ten scientists in human history</strong>,
ie the ten individuals who advanced science or technology the most?
They should all be real people who actually existed, about whom we have enough information,
and who made very influential discoveries, formulated very influential theories,
or invented very influential techniques or machines.
Consider scientists, engineers and inventors.
Consider all the sciences (formal sciences, natural sciences, social sciences).”</em></p>
</blockquote>
<p>Results:</p>
<ul>
<li class="">Five mentions: <strong>Albert Einstein</strong>, <strong>Charles Darwin</strong>, <strong>Galileo Galilei</strong>,
<strong>Isaac Newton</strong> and <strong>James Clerk Maxwell</strong>.</li>
<li class="">Four mentions: <strong>Archimedes</strong> and <strong>Marie Curie</strong>.</li>
<li class="">Three mentions: <strong>Alan Turing</strong>, <strong>Louis Pasteur</strong> and <strong>Nikola Tesla</strong>.</li>
<li class="">Two mentions: none.</li>
<li class="">One mention (discarded): <del>Ada Lovelace</del>, <del>Aristotle</del>,
<del>Carl Friedrich Gauss</del>, <del>Gregor Mendel</del>, <del>Johannes Gutenberg</del>,
<del>Johannes Kepler</del>, <del>Leonardo da Vinci</del> and <del>Thomas Edison</del>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="artists">Artists<a href="https://blog.tripu.info/knowledge-1#artists" class="hash-link" aria-label="Direct link to Artists" title="Direct link to Artists" translate="no">​</a></h2>
<blockquote>
<p><em>“<strong>Who are the ten most influential artists in human history</strong>,
ie the ten individuals who made the most important contributions to the arts?
They should all be real people who actually existed, about whom we have enough information,
and whose work continues to be discussed and appreciated.
Consider all the arts, all of human history, and all cultures and regions of the world.”</em></p>
</blockquote>
<ul>
<li class="">Five mentions: <strong>Michelangelo</strong>, <strong>Leonardo da Vinci</strong> and <strong>William Shakespeare</strong>.</li>
<li class="">Four mentions: <strong>Johann Sebastian Bach</strong> and <strong>Pablo Picasso</strong>.</li>
<li class="">Three mentions: <strong>Homer</strong> and <strong>Ludwig van Beethoven</strong>.</li>
<li class="">Two mentions: <strong>Akira Kurosawa</strong> and <strong>Murasaki Shikibu</strong>.</li>
<li class="">One mention (discarded): <del>Aretha Franklin</del>, <del>Bharata Muni</del>, <del>Charlie Chaplin</del>,
<del>Confucius</del>, <del>Dante Alighieri</del>, <del>Frank Lloyd Wright</del>, <del>Hokusai</del>, <del>Igor Stravinsky</del>,
<del>Imhotep</del>, <del>Kalidasa</del>, <del>Kukai</del>, <del>Li Bai</del>, <del>Rabindranath Tagore</del>,
<del>Rembrandt</del>, <del>Sergei Diaghilev</del>, <del>Wang Xizhi</del> and <del>the nameless cave painters</del>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="final-list">Final list<a href="https://blog.tripu.info/knowledge-1#final-list" class="hash-link" aria-label="Direct link to Final list" title="Direct link to Final list" translate="no">​</a></h2>
<p>Two names made it into <em>two</em> lists: <strong>Jesus</strong> (both a <em>thinker</em> and a <em>leader</em>) and
<strong>Charles Darwin</strong> (both a <em>thinker</em> and a <em>scientist</em>).
(Seems fitting and ironic that those two precisely should represent all of humanity!)
I will give both of them extra weight because of this.</p>
<p>All the rest will get the less weight the fewer mentions they got; eg, those with five mentions
are more relevant than those with four.</p>
<p>The plan is for other (less relevant) individuals to sprout all over the map when we start
pulling threads and zooming in on each concept and connection.
Therefore we need to be able to <em>decrease</em> weights indefinitely.
I'll start with weight <code>0</code> (top ones) and use sequential integers as we progress towards
more obscure individuals: <code>1</code>, <code>2</code>, <code>3</code>, etc.
That way, the actual relevance of a node with weight <em>w</em> can be computed as
something like <em>(10/9)<sup>-w</sup></em>, so that each “level” is 10% less relevant
than the previous one: <code>1.000</code>, <code>0.900</code>, <code>0.810</code>, <code>0.729</code>, etc.</p>
<p>And thus we get <strong>the first 43 nodes of the map of knowledge</strong>:</p>
<ul>
<li class="">Weight <code>0</code>:<!-- -->
<ul>
<li class=""><a href="https://www.wikidata.org/wiki/Q1035" target="_blank" rel="noopener noreferrer" class="">Darwin, Charles</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q302" target="_blank" rel="noopener noreferrer" class="">Jesus</a></li>
</ul>
</li>
<li class="">Weight <code>1</code>:<!-- -->
<ul>
<li class=""><a href="https://www.wikidata.org/wiki/Q8409" target="_blank" rel="noopener noreferrer" class="">Alexander the Great</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q868" target="_blank" rel="noopener noreferrer" class="">Aristotle</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q4604" target="_blank" rel="noopener noreferrer" class="">Confucius</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q762" target="_blank" rel="noopener noreferrer" class="">da Vinci, Leonardo</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q937" target="_blank" rel="noopener noreferrer" class="">Einstein, Albert</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q307" target="_blank" rel="noopener noreferrer" class="">Galilei, Galileo</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q720" target="_blank" rel="noopener noreferrer" class="">Genghis Khan</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q9312" target="_blank" rel="noopener noreferrer" class="">Kant, Immanuel</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q5816" target="_blank" rel="noopener noreferrer" class="">Mao Zedong</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q9061" target="_blank" rel="noopener noreferrer" class="">Marx, Karl</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q9095" target="_blank" rel="noopener noreferrer" class="">Maxwell, James Clerk</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q5592" target="_blank" rel="noopener noreferrer" class="">Michelangelo</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q935" target="_blank" rel="noopener noreferrer" class="">Newton, Isaac</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q692" target="_blank" rel="noopener noreferrer" class="">Shakespeare, William</a></li>
</ul>
</li>
<li class="">Weight <code>2</code>:<!-- -->
<ul>
<li class=""><a href="https://www.wikidata.org/wiki/Q8739" target="_blank" rel="noopener noreferrer" class="">Archimedes</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q1339" target="_blank" rel="noopener noreferrer" class="">Bach, Johann Sebastian</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q7186" target="_blank" rel="noopener noreferrer" class="">Curie, Marie</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q352" target="_blank" rel="noopener noreferrer" class="">Hitler, Adolf</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q1048" target="_blank" rel="noopener noreferrer" class="">Julius Caesar</a></li>
<li class=""><a class="" href="https://blog.tripu.info/Bonaparte">Napoleon</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q5593" target="_blank" rel="noopener noreferrer" class="">Picasso, Pablo</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q859" target="_blank" rel="noopener noreferrer" class="">Plato</a></li>
</ul>
</li>
<li class="">Weight <code>3</code>:<!-- -->
<ul>
<li class=""><a href="https://www.wikidata.org/wiki/Q9191" target="_blank" rel="noopener noreferrer" class="">Descartes, René</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q1001" target="_blank" rel="noopener noreferrer" class="">Gandhi, Mahatma</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q6691" target="_blank" rel="noopener noreferrer" class="">Homer</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q8027" target="_blank" rel="noopener noreferrer" class="">King, Martin Luther, Jr.</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q91" target="_blank" rel="noopener noreferrer" class="">Lincoln, Abraham</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q9458" target="_blank" rel="noopener noreferrer" class="">Muhammad</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q529" target="_blank" rel="noopener noreferrer" class="">Pasteur, Louis</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q9036" target="_blank" rel="noopener noreferrer" class="">Tesla, Nikola</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q7251" target="_blank" rel="noopener noreferrer" class="">Turing, Alan</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q255" target="_blank" rel="noopener noreferrer" class="">van Beethoven, Ludwig</a></li>
</ul>
</li>
<li class="">Weight <code>4</code>:<!-- -->
<ul>
<li class=""><a href="https://www.wikidata.org/wiki/Q8006" target="_blank" rel="noopener noreferrer" class="">Kurosawa, Akira</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q8018" target="_blank" rel="noopener noreferrer" class="">Augustine of Hippo</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q8011" target="_blank" rel="noopener noreferrer" class="">Avicenna</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q9358" target="_blank" rel="noopener noreferrer" class="">Nietzsche, Friedrich</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q81731" target="_blank" rel="noopener noreferrer" class="">Murasaki Shikibu</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q9215" target="_blank" rel="noopener noreferrer" class="">Freud, Sigmund</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q913" target="_blank" rel="noopener noreferrer" class="">Socrates</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q9438" target="_blank" rel="noopener noreferrer" class="">Thomas Aquinas</a></li>
<li class=""><a href="https://www.wikidata.org/wiki/Q8016" target="_blank" rel="noopener noreferrer" class="">Churchill, Winston</a></li>
</ul>
</li>
</ul>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="knowledge" term="knowledge"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[April 2025, last week]]></title>
        <id>https://blog.tripu.info/2025-april-4</id>
        <link href="https://blog.tripu.info/2025-april-4"/>
        <updated>2025-04-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[(&larr; See the third week)]]></summary>
        <content type="html"><![CDATA[<p>(← See the <a class="" href="https://blog.tripu.info/2025-april-3">third week</a>)</p>
<figure><a href="https://blog.tripu.info/img/2025/april-21.jpeg"><img src="https://blog.tripu.info/img/2025/april-21.jpeg" alt="2025-04-21"></a><figcaption><p><strong>Monday 21<sup>st</sup></strong><br>
No-school day: morning with the kids grocery-shopping, going to the public library, and playing in the park.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-22.jpeg"><img src="https://blog.tripu.info/img/2025/april-22.jpeg" alt="2025-04-22"></a><figcaption><p><strong>Tuesday 22<sup>nd</sup></strong><br>
Taking the kids to school in the morning.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-23.jpeg"><img src="https://blog.tripu.info/img/2025/april-23.jpeg" alt="2025-04-23"></a><figcaption><p><strong>Wednesday 23<sup>rd</sup></strong><br>
<a href="https://en.wikipedia.org/wiki/World_Book_Day" target="_blank" rel="noopener noreferrer" class="">World Book Day</a> (commemorating Cervantes' death date).
I went to <em>Miss Entropy</em>'s class to read them a book.
(The day after I went to <em>Breaker of Horses</em>' to do the same.)</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-24.jpeg"><img src="https://blog.tripu.info/img/2025/april-24.jpeg" alt="2025-04-24"></a><figcaption><p><strong>Thursday 24<sup>th</sup></strong><br>
Long-overdue chore: backing up some data from <a href="https://flickr.com/photos/tripu/316100460/" target="_blank" rel="noopener noreferrer" class="">my very old MacBook Pro</a>
to throw it away at last.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-25.jpeg"><img src="https://blog.tripu.info/img/2025/april-25.jpeg" alt="2025-04-25"></a><figcaption><p><strong>Friday 25<sup>th</sup></strong><br>
At the gym, doing (very few) pull-ups.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-26.jpeg"><img src="https://blog.tripu.info/img/2025/april-26.jpeg" alt="2025-04-26"></a><figcaption><p><strong>Saturday 26<sup>th</sup></strong><br>
Lunch in the sun again.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-27.jpeg"><img src="https://blog.tripu.info/img/2025/april-27.jpeg" alt="2025-04-27"></a><figcaption><p><strong>Sunday 27<sup>th</sup></strong><br>
Lovely weather, and the countryside looks gorgeous in these days.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-28.jpeg"><img src="https://blog.tripu.info/img/2025/april-28.jpeg" alt="2025-04-28"></a><figcaption><p><strong>Monday 28<sup>th</sup></strong><br>
Nation-wide total blackout for many hours (around eight and a half in our town):
neighbours gathered in the garden of our estate to chat and drink, while all the kids had a blast.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-29.jpeg"><img src="https://blog.tripu.info/img/2025/april-29.jpeg" alt="2025-04-29"></a><figcaption><p><strong>Tuesday 29<sup>th</sup></strong><br>
Morning run.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-30.jpeg"><img src="https://blog.tripu.info/img/2025/april-30.jpeg" alt="2025-04-30"></a><figcaption><p><strong>Wednesday 30<sup>th</sup></strong><br>
Haircut.</p></figcaption></figure>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="daily-photo" term="daily-photo"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Time Regained]]></title>
        <id>https://blog.tripu.info/proust-7</id>
        <link href="https://blog.tripu.info/proust-7"/>
        <updated>2025-04-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[⭐⭐ for the entire work; ie, the seven volumes.]]></summary>
        <content type="html"><![CDATA[<p>⭐⭐ for the entire work; ie, the seven volumes.</p>
<p>I've written about <strong><em>In Search of Lost Time</em></strong> before
(<a href="https://www.goodreads.com/review/show/1990712181" target="_blank" rel="noopener noreferrer" class="">book #1</a>,
<a href="https://www.goodreads.com/review/show/1990721620" target="_blank" rel="noopener noreferrer" class="">book #2</a>,
<a href="https://www.goodreads.com/review/show/1990721632" target="_blank" rel="noopener noreferrer" class="">book #3</a>,
<a class="" href="https://blog.tripu.info/proust-5">book #5</a>),
so I won't elaborate here.
Some of those volumes I liked (#5 and #6) while others I found quite boring (#3 and this last one, #7).</p>
<p><img decoding="async" loading="lazy" src="https://i0.wp.com/literariness.org/wp-content/uploads/2023/07/Benton-Proust-Writing.webp?resize=768%2C785&amp;ssl=1" alt="Proust, looking very casual" class="img_ev3q"></p>
<p>It has been quite a journey of five and a half years for me, and one that I'm glad I made.
I don't think I'll ever read another ~4,000 page-long novel with so many highs and lows, so many characters,
and sentences so long and convoluted.
OK, <strong>Proust</strong>: you're a genius.
I'll give you that.
Not sure if you could have made a better investment of your talent and the last years of your comfy life, though.
And I'm uneasy about your moral compass and your values, to be honest
(yes, I know it's fiction and that was <em>not</em> your life&nbsp;—&nbsp;<em>wink, wink</em>).</p>
<p>But you nailed time, memory, and the experience of a life.
I felt as if I had grown very old myself while reading the second half of the last volume.
Everyone around me had grown old too&nbsp;—&nbsp;or died.
The first episodes of the life of Marcel, those summer nights in Combray, I recall now almost as a personal memento.
I guess that point could not be made in a shorter novel.</p>
<p><img decoding="async" loading="lazy" src="https://i0.wp.com/literariness.org/wp-content/uploads/2023/07/8927bdb2-1053-4cbd-be09-e2055aca9884.jpeg?w=625&amp;ssl=1" alt="The book(s)" class="img_ev3q"></p>
<p>Was it worth it?
I don't know yet; it'll take time to find out (no pun intended).
But millions of readers and thousands of critics in the last hundred years think so.</p>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="literature" term="literature"/>
        <category label="book-review" term="book-review"/>
        <category label="TGB" term="TGB"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[April 2025, third week]]></title>
        <id>https://blog.tripu.info/2025-april-3</id>
        <link href="https://blog.tripu.info/2025-april-3"/>
        <updated>2025-04-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[(&larr; See the second week)]]></summary>
        <content type="html"><![CDATA[<p>(← See the <a class="" href="https://blog.tripu.info/2025-april-2">second week</a>)</p>
<figure><a href="https://blog.tripu.info/img/2025/april-14.jpeg"><img src="https://blog.tripu.info/img/2025/april-14.jpeg" alt="2025-04-14"></a><figcaption><p><strong>Monday 14<sup>th</sup></strong><br>
Kids in nature, and country life!</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-15.jpeg"><img src="https://blog.tripu.info/img/2025/april-15.jpeg" alt="2025-04-15"></a><figcaption><p><strong>Tuesday 15<sup>th</sup></strong><br>
My parents' garden near Granada, beautiful after some sunshower.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-16.jpeg"><img src="https://blog.tripu.info/img/2025/april-16.jpeg" alt="2025-04-16"></a><figcaption><p><strong>Wednesday 16<sup>th</sup></strong><br>
The family at a book shop in Granada.
I checked out <a href="https://www.goodreads.com/read_statuses/9299765197" target="_blank" rel="noopener noreferrer" class="">the next graphic novel I want to read</a>,
my wife bought <a href="https://en.wikipedia.org/wiki/The_Three-Body_Problem_(novel)" target="_blank" rel="noopener noreferrer" class=""><em>The Three-Body Problem</em></a>,
and the kids listened to a storyteller.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-17.jpeg"><img src="https://blog.tripu.info/img/2025/april-17.jpeg" alt="2025-04-17"></a><figcaption><p><strong>Thursday 17<sup>th</sup></strong><br>
Walking <a href="https://en.wikipedia.org/wiki/Caminito_del_Rey" target="_blank" rel="noopener noreferrer" class=""><em>Caminito del Rey</em></a>.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-18.jpeg"><img src="https://blog.tripu.info/img/2025/april-18.jpeg" alt="2025-04-18"></a><figcaption><p><strong>Friday 18<sup>th</sup></strong><br>
Holidays within holidays (ie, a couple of days without kids :)</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-19.jpeg"><img src="https://blog.tripu.info/img/2025/april-19.jpeg" alt="2025-04-19"></a><figcaption><p><strong>Saturday 19<sup>th</sup></strong><br>
Hiking
<a href="https://duckduckgo.com/?q=el+saltillo+bridge+canillas+de+aceituno&amp;iar=images&amp;iaf=size%3AWallpaper%2Ctype%3Aphoto" target="_blank" rel="noopener noreferrer" class=""><em>El Saltillo</em></a>.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-20.jpeg"><img src="https://blog.tripu.info/img/2025/april-20.jpeg" alt="2025-04-20"></a><figcaption><p><strong>Sunday 20<sup>th</sup></strong><br>
Driving back home.</p></figcaption></figure>
<p>(→ Continue to the <a class="" href="https://blog.tripu.info/2025-april-4">last week</a>)</p>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="daily-photo" term="daily-photo"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[April 2025, second week]]></title>
        <id>https://blog.tripu.info/2025-april-2</id>
        <link href="https://blog.tripu.info/2025-april-2"/>
        <updated>2025-04-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[(&larr; Start on the first week)]]></summary>
        <content type="html"><![CDATA[<p>(← Start on the <a class="" href="https://blog.tripu.info/2025-april-1">first week</a>)</p>
<figure><a href="https://blog.tripu.info/img/2025/april-07.jpeg"><img src="https://blog.tripu.info/img/2025/april-07.jpeg" alt="2025-04-07"></a><figcaption><p><strong>Monday 7<sup>th</sup></strong><br>
At the office, attending a weekly meeting.
This set-up is the best I've ever had: adjustable electric standing desk, two external monitors mounted
on articulated stands, and all peripherals (including the monitors) connected via a single USB cable.
Plus noise-cancelling headphones and my faithful reMarkable 2, this is the best for work.</p></figcaption></figure>
<p>No photo on <strong>Tuesday 8<sup>th</sup></strong> 😥</p>
<figure><a href="https://blog.tripu.info/img/2025/april-09.jpeg"><img src="https://blog.tripu.info/img/2025/april-09.jpeg" alt="2025-04-09"></a><figcaption><p><strong>Wednesday 9<sup>th</sup></strong><br>
Such a good weather already.
Both my wife and I worked from home, and I cooked this vegetable rice for lunch that we ate
on the patio in the sun.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-10.jpeg"><img src="https://blog.tripu.info/img/2025/april-10.jpeg" alt="2025-04-10"></a><figcaption><p><strong>Thursday 10<sup>th</sup></strong><br>
I met three old classmates from college at an Asian restaurant.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-11.jpeg"><img src="https://blog.tripu.info/img/2025/april-11.jpeg" alt="2025-04-11"></a><figcaption><p><strong>Friday 11<sup>th</sup></strong><br>
End of day.
Not much to report.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-12.jpeg"><img src="https://blog.tripu.info/img/2025/april-12.jpeg" alt="2025-04-12"></a><figcaption><p><strong>Saturday 12<sup>th</sup></strong><br>
Meeting my dear nerds from the effective altruism and rationality communities in <em>El Retiro</em> park.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-13.jpeg"><img src="https://blog.tripu.info/img/2025/april-13.jpeg" alt="2025-04-13"></a><figcaption><p><strong>Sunday 13<sup>th</sup></strong><br>
Driving to Granada.</p></figcaption></figure>
<p>(→ Continue to the <a class="" href="https://blog.tripu.info/2025-april-3">third week</a>)</p>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="daily-photo" term="daily-photo"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[April 2025, first week]]></title>
        <id>https://blog.tripu.info/2025-april-1</id>
        <link href="https://blog.tripu.info/2025-april-1"/>
        <updated>2025-04-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Like every month of April since 2008,]]></summary>
        <content type="html"><![CDATA[<p><a href="https://www.flickr.com/photos/tripu/collections/72157616151140465/" target="_blank" rel="noopener noreferrer" class="">Like every month of April since 2008</a>,
I'm taking one photo a day to document my routines and the state of my world for my future self
(and for some friends and family).</p>
<p>There's no particular theme or prompt in 2025&nbsp;—&nbsp;in the last years I consider it a success
if it doesn't get to midnight and I have forgotten to take at least one picture.</p>
<p>So, here goes my first week:</p>
<figure><a href="https://blog.tripu.info/img/2025/april-01.jpeg"><img src="https://blog.tripu.info/img/2025/april-01.jpeg" alt="2025-04-01"></a><figcaption><p><strong>Tuesday 1<sup>st</sup></strong><br>
Reading in bed, with my wife, before going to sleep.
I'm halfway through the seventh volume of <em>In Search of Lost Time</em>.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-02.jpeg"><img src="https://blog.tripu.info/img/2025/april-02.jpeg" alt="2025-04-02"></a><figcaption><p><strong>Wednesday 2<sup>nd</sup></strong><br>
With my wife, watching the finale of the first season of <em>Severance</em>.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-03.jpeg"><img src="https://blog.tripu.info/img/2025/april-03.jpeg" alt="2025-04-03"></a><figcaption><p><strong>Thursday 3<sup>rd</sup></strong><br>
My dad brought us three of his giant lettuces the other day.
Because they're as “organic” as they get, they sometimes host a number of
lovely insects and other creatures.
When we washed this one thoroughly, we found this little fellow.
We noticed that it had a hole on one side of its body only, and I decided to put ChatGPT
to the test: I uploaded this very (crappy) photo of it, and asked:
“What's this? And why does it have this dark hole on a side of its body?”
ChatGPT's answer:
</p><blockquote><em>“This is a slug, a type of terrestrial mollusk.
It's similar to a snail but without a shell.
The dark hole on the side of its body is called a pneumostome, and it's perfectly normal&nbsp;—&nbsp;that's the slug's breathing hole!
Slugs breathe through this opening, which connects to their lung (yes, they have a primitive one-chambered lung!).
The pneumostome is usually located on the right side of their body, and it can open and close.
Finding a slug on leafy greens like lettuce isn't too unusual, especially if the produce is organic or garden-grown&nbsp;—&nbsp;they love moist,
leafy environments.
Just make sure to wash your greens thoroughly next time!”</em></blockquote>
I'd give it an A!<p></p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-04.jpeg"><img src="https://blog.tripu.info/img/2025/april-04.jpeg" alt="2025-04-04"></a><figcaption><p><strong>Friday 4<sup>th</sup></strong><br>
Making pizza for dinner.</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-05.jpeg"><img src="https://blog.tripu.info/img/2025/april-05.jpeg" alt="2025-04-05"></a><figcaption><p><strong>Saturday 5<sup>th</sup></strong><br>
Theatre for kids plus family visit to the <em>Museo Arqueológico Nacional</em>
(and then, Italian lunch, walk, ice-creams, and book-shopping).</p></figcaption></figure>
<figure><a href="https://blog.tripu.info/img/2025/april-06.jpeg"><img src="https://blog.tripu.info/img/2025/april-06.jpeg" alt="2025-04-06"></a><figcaption><p><strong>Sunday 6<sup>th</sup></strong><br>
Family on wheels.</p></figcaption></figure>
<p>(→ Continue to the <a class="" href="https://blog.tripu.info/2025-april-2">second week</a>)</p>]]></content>
        <category label="in-English" term="in-English"/>
        <category label="daily-photo" term="daily-photo"/>
    </entry>
</feed>