<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>blog.tripu.info</title>
        <link>https://blog.tripu.info/</link>
        <description>tripu's blog</description>
        <lastBuildDate>Thu, 25 Jun 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en-GB</language>
        <item>
            <title><![CDATA[Salvar vidas]]></title>
            <link>https://blog.tripu.info/salvar-vidas</link>
            <guid>https://blog.tripu.info/salvar-vidas</guid>
            <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Se calcula que entre 2015 y 2021 Amancio Ortega donó unos 600 o 700 millones de euros en total]]></description>
            <content:encoded><![CDATA[<p>Se calcula que entre 2015 y 2021 <strong>Amancio Ortega</strong> donó unos 600 o 700 millones de euros en total
a la sanidad española, específicamente en detección temprana y terapias contra el cáncer y en
<a href="https://www.faortega.org/es/proyectos/programa-para-la-implantaci%C3%B3n-de-la-protonterapia-en-el-sistema-p%C3%BAblico-de-salud-de-espa%C3%B1a/" target="_blank" rel="noopener noreferrer" class="">equipamiento avanzado para protonterapia</a>, a través de programas con varios sistemas de salud autonómicos
y hospitales concretos.</p>
<p>Desgraciadamente, no existen estimaciones públicas del número de vidas que se esperan salvar
con estos regalos; solo hay valoraciones cualitativas.
<a href="https://www.gipuzkoagaur.com/2021/10/20/la-fundacion-amancio-ortega-dona-280-millones-para-comprar-10-equipos-de-protonterapia/" target="_blank" rel="noopener noreferrer" class="">Según la propia Fundación Amancio Ortega</a>,</p>
<blockquote>
<p><em>«[se podrán] <strong>salvar cientos de vidas cada año</strong> que ahora se truncan y ofrecer a miles de pacientes
una alternativa de curación con tratamientos más cortos, mucho menos agresivos y con una mejora
muy sustancial en su calidad de vida.
[Se podrá] <strong>incrementar la esperanza y el bienestar de miles de pacientes y de sus familias</strong>.»</em></p>
</blockquote>
<p>En cualquier caso, no hace falta ser un experto para esperar razonablemente que este despliegue de medios
vaya a mantener con vida cada año a decenas o incluso a cientos de españoles que morirían en el contrafactual.
En España, el <a href="https://es.wikipedia.org/wiki/Valor_de_la_vida" target="_blank" rel="noopener noreferrer" class="">valor estadístico de la vida</a>
(el coste marginal de evitar la muerte de una persona)
<a href="https://www.ief.es/docs/destacados/publicaciones/revistas/hpe/181_Art2.pdf" target="_blank" rel="noopener noreferrer" class="">se estimaba, hace dos décadas, entre 2 y 2'7 millones de euros</a>.
Redondeando hacia arriba el valor de una vida (3.000.000 €) y hacia abajo el monto de las donaciones
(600.000.000 €) para hacer la estimación más conservadora, podemos estimar que los recursos donados
por el empresario terminarán evitando la muerte de al menos doscientos pacientes.</p>
<p><img decoding="async" loading="lazy" src="https://upload.wikimedia.org/wikipedia/commons/5/5a/Mevions250i.jpg" alt="Proton therapy" class="img_ev3q"></p>
<p>Imaginemos que todos los hospitales beneficiados llevasen un registro minucioso, durante años,
de todos los pacientes que hacen uso de estos equipos; incluidas sus prognosis, su evolución en el tiempo,
y el resultado que habría sido más probable de no haber contado con estos medios.
Imaginemos también que Amancio Ortega viviese lo suficiente como para ver el grueso del impacto de su
donación (no parece probable; tiene noventa años).
Imaginemos por último que hacia el final de la vida de Ortega, los hospitales contactasen con las
personas concretas que siguiesen vivas gracias a los equipos donados, y las invitasen a un evento con él.
Amancio Ortega podría estrechar la mano de esas doscientas personas.</p>
<p>¿Sería justo y acertado decir que «Amancio Ortega, a través de sus decisiones personales y de sus
propios recursos, salvó indirectamente la vida de unas doscientas personas»?</p>
<p>Ahora imaginemos un universo alternativo en el que el filántropo murió al día siguiente de firmar
el último de estos programas de salud, en 2021.
Las mismas doscientas personas se juntan, años después, en un evento (que, esta vez, es de homenaje póstumo).
La única diferencia es que esta vez su benefactor no pudo conocer sus nombres ni puede darles
la mano.</p>
<p>¿Todavía sería cierto que «Amancio Ortega, a través de sus decisiones personales y de sus
propios recursos, salvó indirectamente la vida de unas doscientas personas»?</p>
<p>En otro universo alternativo, Amancio Ortega vive muchos años, pero por algún motivo la lista de
doscientos nombres nunca es conocida.
Quizá los hospitales no mantienen un buen registro, o quizá la Fundación Amancio Ortega declina
tener acceso a esa información.
Así que nunca se llega a celebrar esa reunión de pacientes salvados.
Las mismas doscientas personas siguen viviendo, repartidas por España, pero nadie llega a saber
nunca cuántas exactamente ni quiénes son.</p>
<p>¿Diríamos entonces que «Amancio Ortega, a través de sus decisiones personales y de sus
propios recursos, salvó indirectamente la vida de unas doscientas personas»?</p>
<p>En el siguiente universo paralelo, la única diferencia es que por algún motivo la Fundación Amancio
Ortega decidió invertir esos 600 millones de euros en hospitales de Nueva Zelanda.
Siendo Nueva Zelanda un país con un nivel de vida parecido al de España, imaginemos que son
también unos doscientos los neozelandeses que evitan una muerte por cáncer, o que prolongan
significativamente su esperanza de vida, gracias a esas donaciones.
En este otro universo, Amancio Ortega no solo no llega a conocer nunca el número exacto, ni los
nombres de los beneficiados, sino que jamás puso un pie en Nueva Zelanda ni sabe apenas nada
del país, habiendo delegado todo el trabajo en personal de su fundación.</p>
<p>¿Aceptaríamos que «Amancio Ortega, a través de sus decisiones personales y de sus
propios recursos, salvó indirectamente la vida de unas doscientas personas»?</p>
<p>En otro universo posible, no es la Fundación Amancio Ortega sino otra institución sin ánimo
de lucro la que dona esos 600.000.000 € a la misma causa.
Esta organización se financia enteramente a través de voluntarios con recursos; en concreto,
fueron doscientas personas ricas, a razón de tres millones de euros cada una, las que hicieron
posible estos programas de salud.
Berta fue una de ellas.</p>
<p>¿Sería correcto afirmar que «Berta, a través de sus decisiones personales y de sus
propios recursos, salvó indirectamente la vida de una persona»?</p>
<p>En otro universo, esta misma institución decide donar la misma cantidad, pero allí donde
el valor estadístico de la vida es menor y a la causa más urgente.
Encuentran que en varios países africanos
<a href="https://ayudaefectiva.org/como-calculamos-impacto#medicacion-preventiva" target="_blank" rel="noopener noreferrer" class="">3.500 euros dedicados a medicación contra la malaria consiguen, estadísticamente, salvar la vida de una persona</a>
(a menudo, un niño).
Con el mismo gasto que antes, se consigue salvar a unas 171.000 personas.
Berta donó los mismos tres millones de euros.</p>
<p>Ahora, ¿sería cierto que «Berta, a través de sus decisiones personales y de sus
propios recursos, salvó indirectamente la vida de unas 855 personas»?</p>
<p><img decoding="async" loading="lazy" src="https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Anopheles_claviger.jpg/1280px-Anopheles_claviger.jpg" alt="Mosquito" class="img_ev3q"></p>
<p>En el universo alternativo 769.1B/3Z (que, casualmente, es justo el nuestro),
la misma organización filantrópica consigue muchos pequeños donantes.
Marco es un español de clase media acostumbrado a irse de vacaciones con su familia dos veces al año.
Después de reflexionar sobre el coste de oportunidad de esos viajes de placer,
decide empezar a viajar solamente una vez al año, o bien viajar a destinos más cercanos
y contratar actividades más baratas.
Gracias a ese cambio, a lo largo de dos décadas Marco y su familia ahorran 70.000 euros,
y los donan a
<a href="https://ayudaefectiva.org/helen-keller-intl#cifras-clave" target="_blank" rel="noopener noreferrer" class="">la mejor campaña de suplementación de vitamina A para niños pequeños</a>.
Con ese dinero, más de 7.000 niños reciben suficiente vitamina A durante sus
primeros cinco años de vida.
El problema de la deficiencia de esta vitamina es tan agudo en algunos países africanos,
y sus consecuencias tan severas, que, estadísticamente, ese tratamiento acabará salvando
la vida de unos veinte niños.</p>
<p>¿Sería justo y acertado decir que «Marco y su familia, a través de sus decisiones personales
y de sus propios recursos, salvaron indirectamente la vida de unas veinte personas»?</p>
<p>Si estabas de acuerdo con la primera afirmación sobre Amancio Ortega y el impacto de
sus donaciones, pero no estás de acuerdo con esta última frase sobre Marco, ¿en qué momento
de esta cadena de escenarios ficticios crees que se rompe la equivalencia entre las distintas
situaciones descritas, y por qué?</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>Proton therapy equipment: <a href="https://commons.wikimedia.org/wiki/File:Mevions250i.jpg" target="_blank" rel="noopener noreferrer" class="">Wikimedia user Romina.cialdella (Creative Commons)</a>.<br>
<!-- -->Anopheles mosquito: <a href="https://commons.wikimedia.org/wiki/File:Anopheles_claviger.jpg" target="_blank" rel="noopener noreferrer" class="">Павлик Лисицын, Wikimedia (Creative Commons)</a>.</p></div></div>]]></content:encoded>
            <category>in-Spanish</category>
            <category>effective-altruism</category>
            <category>philosophy</category>
        </item>
        <item>
            <title><![CDATA[There really is no Theory of Everything in the social sciences]]></title>
            <link>https://blog.tripu.info/theory-of-everything</link>
            <guid>https://blog.tripu.info/theory-of-everything</guid>
            <pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[1. The illusion]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-the-illusion">1. The illusion<a href="https://blog.tripu.info/theory-of-everything#1-the-illusion" class="hash-link" aria-label="Direct link to 1. The illusion" title="Direct link to 1. The illusion" translate="no">​</a></h2>
<p>A few days ago, one of my libertarian friends shared
<a href="https://x.com/brivael/status/2056052974602830217" target="_blank" rel="noopener noreferrer" class="">this X post (in French)</a>
on a common Signal group.
Here is an automatic translation into English of some parts of it:</p>
<blockquote><em><p>“The whole thing comes down to 5 axioms.
Humanity has been hoodwinked by making itself seem complicated.
The social sciences, economics, political philosophy.
Thousands of pages, dissertations, schools of thought, movements, counter-movements.
To what end?
A muddled mess in which nobody knows what is true any more.
When in fact the whole thing comes down to 5 axioms.”</p></em></blockquote>
<p><img decoding="async" loading="lazy" src="https://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/Skein_-_Museo_Egizio_%28Turin%29_S_7791_p01.jpg/960px-Skein_-_Museo_Egizio_%28Turin%29_S_7791_p01.jpg" alt="A mess" class="img_ev3q"></p>
<p>And then:</p>
<blockquote><em><p>“Axiom 1 — You own yourself.
Your body, your time, your mind, your labour.
Nobody else does.
Anything that contradicts this is a form of slavery.</p><p>Axiom 2 — What you produce belongs to you.
If you own yourself, you own what comes from you.
Your labour, your ideas, your accumulated capital.</p><p>Axiom 3 — You have no right to initiate violence.
Neither physical violence, nor violence by proxy through the State.
You may defend yourself.
You may not aggress.</p><p>Axiom 4 — Free exchange is positive by definition.
If A and B exchange voluntarily, it is because each values what they receive more than what they give.
Otherwise they would not do it.</p><p>Axiom 5 — The rule of law exists to protect 1, 2, 3, and 4.
Not to violate them.
The legitimate role of the law: to enforce contracts, punish aggression, protect property.
Full stop.
Everything beyond that remit is a deviation.</p><p>That is all.”</p></em></blockquote>
<p>And when this guy says “that is all”, <em>he really means it</em>:</p>
<blockquote><em><p>“No need for 800 pages of Piketty. No need for a sociology professor. No need for Bourdieu, Habermas, or Stiglitz.
These 5 axioms are sufficient to analyse any economic, political, or social discourse (sic).”</p></em></blockquote>
<p>Five axioms is all we need.
How?</p>
<blockquote><em><p>“The test is simple: when someone talks about economics or politics, check whether their reasoning respects these 5 premises.
If they say ‘we must redistribute’ → they are violating Axiom 2.
If they say ‘we must regulate this market’ → they are violating Axiom 4.
If they say ‘the State must decide on your behalf, for your own good’ → they are violating Axiom 1.
If they say ‘property is theft’ → they are undermining the entire foundation.
If they contradict these axioms, they are urinating in your brain.”</p></em></blockquote>
<p>Because, to reiterate:</p>
<blockquote><em><p>“Humanity is simple.
It is the intellectual parasites who have an interest in making you believe it is complicated.”</p></em></blockquote>
<p>There you have it.
How come nobody had thought of that before?</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-falsifying-the-illusion">2. Falsifying the illusion<a href="https://blog.tripu.info/theory-of-everything#2-falsifying-the-illusion" class="hash-link" aria-label="Direct link to 2. Falsifying the illusion" title="Direct link to 2. Falsifying the illusion" translate="no">​</a></h2>
<p>I wrote very recently about
<a class="" href="https://blog.tripu.info/my-only-axiom">the temptation to reduce all of human complexity to a single theory that could explain everything</a>.
Libertarianism is certainly liable to this,
but in general any <em>‐ism</em> has a strong tendency to fall into this trap, because whatever comes
before “ism” is by definition given disproportioned relevance and is therefore a strong candidate
to be considered the fundamental force or the guiding principle above everything else.</p>
<p>Libertarians (I mean anarcho-capitalists here) put their Non-Aggression Principle (NAP) on a pedestal
(axiom 3 above).
And by all means, that is a sensible heuristic to navigate life.
But even the most innocent-looking and benign of “axioms” fall short or have to be modulated or
contradicted, sometimes.</p>
<p>For instance, issuing credible threats of violence against specific targets is a punishable offence in most
developed countries, and for good reasons.
If someone is sufficiently likely to imminently attack someone else, the right thing to do may be to take
their resources or weapons from them (against Axiom 2) or to detain them (against Axiom 1).
“Initiating violence” (or expropriating private goods) may be the moral response to <em>mere
acts of speech</em>, under some conditions.</p>
<p>Also, sometimes violence has to be initiated against someone who is <em>not</em> being violent against ourselves:
if someone is attacking (or threatening to attack) someone else, sometimes the right thing to do is to intervene
to (physically) prevent the aggressor from causing (more) harm, <em>even if we were not threatened or damaged ourselves</em>.
That intervention may include restraining their freedom (against Axiom 1) or being violent towards them (against
Axiom 3).</p>
<p>To this, the clever libertarian could respond:</p>
<blockquote><p><em>“Ah!
Of course we must help those who are being abused.
But what would happen in such scenario is that the actual or potential victim would ask me to help them,
that call for help would be our free ‘contract’, and therefore by attacking the attacker
I'm merely fulfilling my contract with the victim and technically not</em> initiating <em>violence myself, but</em>
defending <em>the victim</em> by proxy.
<em>No contradicting any of the axioms here.”</em></p></blockquote>
<p>To which I would reply:</p>
<p>First of all, notice that, according to you, “violence by proxy through the State” being bad is
a corollary of Axiom 3 and no justification for that is given, but violence by proxy through
something-other-than-a-State being bad is not.
Why?
What if that something-other-than-a-State is a group of individuals, all agreeing freely to collectively defend
a potential victim through violence?
What if it's a corporation?
What if it's all the inhabitants of some territory?
What if just 57% of those inhabitants want to use violence to defend that victim in some other territory,
but at the same time all inhabitants of the land have an ongoing compact by which they pool together some
resources long-term (call that a “military”), decide to use those resources collectively, and agree
to delegate some decision-making to a temporary body of institutions or special individuals (call that
a “democracy”)?
Perhaps Axiom 3 isn't sufficient, and we need a clear way to distinguish the evil State from other forms
of collective action that look very similar to it?</p>
<p>But most importantly&nbsp;—&nbsp;and even if we granted the distinction between being violent as a State
(forbidden) and being violent as a free collective of individuals to defend a victim (good)&nbsp;—&nbsp;the
“free contract” and the “victim defending themselves by proxy” provisions do not hold, either.</p>
<p>A victim may lack the knowledge, the resources, or the capacity to formally ask for help.
By the victim's own worldview or framework, they may not even know that they are being subject to violence,
or being kept down by an implicit threat of violence.
The victim may not know what is theirs to keep in the first place, or that a different state of affairs is possible
(think colonialism, extractive institutions, illiteracy, status quo bias).
The victim may not know that we exist, what resources we have, or that we would be willing to help them.
So waiting for the victim, or potential victim, to send us that e-mail with their plea for help and the attached term
sheet before we lift a finger to defend them may be unrealistic and immoral.</p>
<p>The victim, as a group of individuals (call that a “country”), may be so damaged by the aggressor already
that they lack the coordination resources (institutions, infrastructure) to discuss their situation, delegate to
special individuals, broadcast a call for help, and negotiate the terms of that “contract for help”
with another country.
That country may be in such a dire situation that surviving another day always take precedence over deploying
the resources needed to hold a referendum to elect the Axiom 3 National Comittee and then summon it to discuss
whether and how to ask other countries for help.</p>
<p>But this “framework” can't contain all of (good) economics, either.
“We must regulate this market” is sometimes a legit proposition, even if it “violates Axiom 4”.
Air would be polluted and fisheries would be depleted in libertarian utopia, too.
Externalities need regulation.</p>
<p>Abusive monopolies need forces external to the market to be prevented, too.
Even under perfect competition and perfect symmetry of information (and those conditions are rarely, if ever, met),
monopolies can arise as a consequence of chance, first-mover advantage, network effects, or coordination problems.
Bad monopolies have to be broken.
Not even <strong>Peter Thiel</strong> (perhaps <a href="https://en.wikipedia.org/wiki/Zero_to_One" target="_blank" rel="noopener noreferrer" class="">the most staunch defender of monopolies</a>)
is in favour of <em>all</em> monopolies
(<a href="https://www.startuparchive.org/p/peter-thiel-explains-why-monopolies-are-not-always-bad" target="_blank" rel="noopener noreferrer" class="">“if you told me there was a monopoly that was going to stop all innovation and squash everybody
for the next 100 years, that's probably a pretty unhealthy dynamic.
[…]
I would be disturbed if you had a permanent
monopoly”</a>).</p>
<p>Let's see other ways this particular “framework” is very far from being “sufficient to analyse any
economic, political, or social discourse”.
Think of the following scenarios.</p>
<p>According to the framework, self-defence is permitted, private property is sacred, assets such as land and weapons
can be traded freely.
From this follows that I can store a knife, or a collection of rifles, in my house.
What if I'm worth <a href="https://www.forbes.com/real-time-billionaires/" target="_blank" rel="noopener noreferrer" class="">in the vicinity of a trillion monetary units</a>,
acquire archipelagos across the planet, and decide to manufacture or store a nuclear arsenal and the most potent
biological weapons in those islands?
Which of the axioms prevents someone from doing that?
(If your answer is: “none of them, and that is fine”, then this is where I leave the debate.
I have used this “nukes in the shed” thought experiment in the past to evaluate objectivists and
anarchists I met, and it proved very efficient in telling serious thinkers and dogmatists apart.)</p>
<p>What if another restless billionaire (or a few million rich people pooling their resources together) decide to buy
the most cherished cultural artefacts in the world and use them to fuel a bonfire, for fun?
After all, Leonardo da Vinci's Codex Leicester, many paintings by Rembrandt, the rights to all the songs by
The Beatles or to One Hundred Years of Solitude&nbsp;—&nbsp;those are all private property, right?
No problem vaporising every trace of The Lord of the Rings and all associated cultural products from the
surface of the Earth.
This comprehensive framework would sanction our naughty billionaire's pet project.
(And since I dare to object to this, I must be “urinating in your brain”.)</p>
<p>How does the libertarian pentalogue help us adjudicate fair historical reparations for people spread across disputed
lands for generations?
How does it illuminate the tensions between the autonomy of infants or other dependants versus their tutors'?
How exactly does it solve the trolley problem, unambiguously, in all its variants?
How does it settle, once and for all, capital punishment, the ticking-bomb scenario, abortion,
population ethics, guns versus butter, Omelas?</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-consent-and-the-social-contract">3. Consent and the social contract<a href="https://blog.tripu.info/theory-of-everything#3-consent-and-the-social-contract" class="hash-link" aria-label="Direct link to 3. Consent and the social contract" title="Direct link to 3. Consent and the social contract" translate="no">​</a></h2>
<p>At this point, the clever libertarian may point out that even if some of the above interventions and exceptions
to the axioms may yield benefits to society, and even if he may agree that they are the ethical thing to do,
they are vitiated as long as they are <em>imposed</em> on people without their explicit consent.
States are imposed on us, citizens don't consent to them, and the social contract is a fraud.</p>
<p>That clever libertarian is not wrong.
As libertarian-adjacent myself, I am sympathetic to those arguments.
And yet.</p>
<p>The vast majority of us, disgruntled with “the system” as we are, nevertheless opt to live within it.
It's true that we do not choose to be born into a specific jurisdiction, but it's also true that most people
don't move to a different one.
Why?</p>
<p>The majority of people don't become hermits or rebels: instead, they own cars, pursue degrees, sign mortgages,
use passports, are tied to phone numbers, request public subsidies, drink water from the tap,
and call emergency services when they are needed.
Ugly as it sounds, as long as we participate in and gain something from society, we owe society <em>something</em>,
implicitly.</p>
<p>Even if you think you owe only your parents, they in turn benefitted from so many others
(your parents were no hermits, either).
Besides, nobody's a true hermit.
Even if you retired to a mountaintop, you'd travel there by paths and roads opened by many others, and
ultimately rely on resistant crops, useful animal breeds, batteries, water purification, antibiotics and
so many other things discovered or invented generations before your time.
At some level, it's wrong to think that one doesn't owe anything to the human species as a whole simply
because one already pays for all the goods and services they consume.</p>
<p>If nothing else, you benefit from accumulated culture and language.</p>
<p>Yes, in theory you could change the social contract.
But in theory you could also change English to replace the word “partisanship” with “xuf”,
which is shorter and therefore easier to type, and would thus benefit everyone.
Or you could have everyone switch at once to using Finnish (which is one of the most information-dense and least
ambiguous natural languages) to be more efficient in our communication.
Yet you're stuck with “partisanship” (and probably with English too) because: tradition, individual tastes,
coordination problems.</p>
<p>We all owe something to society, if only because there are matches to make fire, because there's the Pantheon, and
because there are thousands of libraries, each preserving thousands of useful ideas from the past, all at our disposal.</p>
<p>Dogmatic libertarians ignore that there are <em>implicit</em> contracts, across time and across space.
Contracts that we don't sign (that we <em>couldn't</em> sign), but have to be honoured nevertheless.
Across space, for instance, because a victim may live on the other side of the planet, ignore that we exist and that
we can help, and never communicate with us.
Across time, because people who are long dead decided to donate to us Indo-European languages, the Encyclopedia,
markets, institutions, a forest, the town square, the metric system, musical notation… so much that we benefit
from.</p>
<p>What's our end of the bargain in those contracts that we did not sign?
Respect that inheritance, enrich it even further, pass it along to future generations, and help those in need.
In more specific terms, it may be: help maintain that forest, produce more music to contribute to the commons,
take care of others, preserve the past, advance scientific discoveries for the common good (either directly or by
funding scientific institutions), give away a chunk of our wealth to keep the compact alive.
That's what all those other signatories of the “contract” from centuries ago would have asked from us
in return, had we had the opportunity to actually negotiate with them.</p>
<p>If you object to this framing, and regard implicit contracts as vacuous nonsense to defend statism, consider this
other thought experiment.</p>
<p>You are hiking alone, high up in the snowy mountains, when a storm breaks.
You spend hours battling the icy weather, completely lost in the blizzard, and after a day or two you are exhausted
and about to collapse and die.
Suddenly, you see a refuge in the rock.
Being such a good libertarian, the first thing you do is try to recall if you own a cabin in the mountain, notice
that you do not, and from that infer that this cabin is someone else's sacrosanct private property.
You wouldn't dare forcing the door to the cabin, but you peer at the window and can see through the misty glass a
medical kit, blankets, fuel, matches, canned food, batteries, a radio, an SOS flare… in sum, everything
that would save your life.
This is clearly an emergency shelter that someone built and equipped for themselves or for others.</p>
<p><img decoding="async" loading="lazy" src="https://upload.wikimedia.org/wikipedia/commons/a/a7/Cabin_in_the_snow%2C_Yukon_Territory%2C_between_1903_and_1906_%28AL%2BCA_7084%29.jpg" alt="Lifesaver" class="img_ev3q"></p>
<p>A dogmatist we-signed-no-contract-here libertarian would have to curl at the door of the cabin and resign to die,
unable to accept neither obligations nor privileges towards someone else's property&nbsp;—&nbsp;no matter how
dire the situation.
Someone who believed in implicit contracts, on the other hand, would recognise the situation as an implicit contract,
and <em>agree</em> to the reasonable terms of the deal.</p>
<p>The deal, in this case, could take different forms.
Perhaps the refuge was truly intended for its owner only, the door was locked, and the hiker had to break in to
save his life.
Perhaps the door was unlocked and the hiker found a note on the table welcoming him to enter and to make use of
everything, for free.
Or perhaps the builder of the shelter asks on his note for something in return.
Like, pay him some sum for the service when the hiker is back to safety.
Or, return in the future to restock the shelter and leave it ready for the next mountaineer in distress.
Or, sacrifice your eldest and devote the rest of your life to worshipping Loki.
Whatever the particulars, the right thing to do in this situation is to recognise the implicit contract in front
of your eyes, and agree to it, in full or in part.</p>
<p>What is a State, if not an implicit contract across time and space, with all those who made it possible for us
to be alive in the first place and with the resources to complain about it?</p>
<p>Remember how I said that our ancestors passed along to us libraries, inventions, institutions and ideas, all
useful things at our disposal for free?
Well, it's bigger than that: our ancestors decided to leave us <em>an entire planet full of stuff</em>, when they
were not obligated to leave behind <em>anything at all</em>.</p>
<p>Think about it.
If you so believe in private property, you have to admit that twenty or thirty generations ago, the entire
world belonged to a few million human beings.
After all, there was no-one else around, so whose else would it be?
Opting to leave behind some of that (let alone <em>most</em> of that) for distant descendants that they would never meet
(let alone for the descendants of <em>others</em>)&nbsp;—&nbsp;instead of hunting, eating, burning, defacing,
burying, blowing it all up&nbsp;—&nbsp;is the ultimate implicit contract with the future.
You can call that contract “humanity”,  “culture”, “nation”,
“State”… it does not change the fact that we owe at least some loyalty to it.</p>
<p>Modern nation-states, imperfect and unjust as they may be, are the Schelling point our species devised to
solve civilisation long-term.
And they are pretty decentralised: limited geographically and historically, always in flux,
competing against each other for the best model.
To abolish the State overnight is no less an act of dangerous social engineering than to expand its reach
towards totalitarianism.</p>
<p>Note that this reasoning does <em>not</em> defend that all implicit contracts are fair (or that all States are always
justified in their actions).
If the State imposes abusive laws, or burdens that are too onerous, of course the right options (after having
fought to change that via the State's own mechanisms) are voting with our feet, black markets, civil disobedience,
boycott, and ultimately revolution.</p>
<p>When the owner of the refuge demanded that you kill your first-born and waste the rest of your life,
you were justified in agreeing to an <em>amended</em> version of his original contract.
If you trespassed to save your life and there was no welcome note on the table, you are bound by an implicit
contract to sufficiently compensate the owner for the troubles you caused him (and the owner is bound by
the same contract to be satisfied with that).
The ancestors of your nation condemned all albinos, or all women, or all Christians, to a life of misery?
Of course that implicit contract is null and void.</p>
<p>(If you are now wondering what is The One Missing Axiom to adjudicate whether an implicit contract is
fair or not, the next section is for you.)</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-its-complicated">4. It's complicated<a href="https://blog.tripu.info/theory-of-everything#4-its-complicated" class="hash-link" aria-label="Direct link to 4. It's complicated" title="Direct link to 4. It's complicated" translate="no">​</a></h2>
<p>Perhaps the author's reaction to all this is to say:</p>
<blockquote><em><p><em>“Well, of course.
For the sake of brevity, I left out the provision that using violence to defend a third party is also acceptable.
And I concede that I forgot this or that edge case.
We can amend that to avoid ambiguity.
But the five Axioms work, in essence.”</em></p></em></blockquote>
<p>Our answer should be: no, but that proves that the whole project is misguided in the first place.
You don't get it.
It's not one or two special cases.
It's not about polishing the five Axioms, or realising that a sixth one is needed.
It's that <em>humanity is all edge cases and ambiguity, from end to end, all day long</em>.
That's why totalising efforts like this one are doomed to fail, every time.</p>
<p>Every attempt to reduce any of the social sciences to a simple set of principles is doomed to fail.
In moral philosophy, in political philosophy, in economics, in sociology.</p>
<p>Here's a good heuristic that support discarding by default any Theory of Everything: there are many books.
Like, <em>many, many books</em> (“thousands of pages, dissertations, schools of thought, movements,
counter-movements”).
The best minds over millennia poured themselves into those thorny questions.
Is all that “a muddled mess in which nobody knows what is true any more”?
Not quite.
Most of those thinkers were truly onto something, and we have built collectivelly on top of their insights.
And yet random freshmen with a penchant for <strong>Ayn Rand</strong> think they have figured it all out.</p>
<p>Apart from that, that post included many other red flags:
“the whole thing comes down to…”,
“the test is simple”,
“that is all”,
“no need for [insert influential books, thinkers or disciplines]”.
And, worst of all: “humanity is simple”.
That last sentence alone should invalidate any discourse.</p>
<p>This is not meant to be a critique of libertarianism per se.
<a href="https://slatestarcodex.com/2017/02/22/repost-the-non-libertarian-faq/" target="_blank" rel="noopener noreferrer" class="">Others have written that post much better than I could dream.</a>
And besides, like I said, I generally like the libertarian impulse (at least in prosperous welfare societies, the fight for
smaller States, more individual autonomy and privacy, and lower taxes is directionally correct).</p>
<p>If I have a conclusion, it's that all of us naturally rebel against the messiness of human nature, and of the universe at large.
That includes the best minds of the last three thousand years.
It is statistically unlikely that anyone of us is better than all of them.</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>AI tools were used only for research and for syntax checking.<br>
<em>Yarn ball</em>: <a href="https://commons.wikimedia.org/wiki/File:Skein_-_Museo_Egizio_(Turin)_S_7791_p01.jpg" target="_blank" rel="noopener noreferrer" class="">Wikimedia (Creative Commons)</a>.<br>
<em>Cabin in the snow</em>: <a href="https://commons.wikimedia.org/wiki/File:Cabin_in_the_snow,_Yukon_Territory,_between_1903_and_1906_(AL%2BCA_7084).jpg" target="_blank" rel="noopener noreferrer" class="">Wikimedia (public domain)</a>.</p></div></div>]]></content:encoded>
            <category>in-English</category>
            <category>philosophy</category>
            <category>economics</category>
            <category>politics</category>
        </item>
        <item>
            <title><![CDATA[April 2026, second fortnight]]></title>
            <link>https://blog.tripu.info/2026-april-2</link>
            <guid>https://blog.tripu.info/2026-april-2</guid>
            <pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[(&larr; See the first fortnight)]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>daily-photo</category>
        </item>
        <item>
            <title><![CDATA[April 2026, first fortnight]]></title>
            <link>https://blog.tripu.info/2026-april-1</link>
            <guid>https://blog.tripu.info/2026-april-1</guid>
            <pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[For the nineteenth year in a row,]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>daily-photo</category>
        </item>
        <item>
            <title><![CDATA[2026 resolutions Q1 checkpoint]]></title>
            <link>https://blog.tripu.info/2026-q1-checkpoint</link>
            <guid>https://blog.tripu.info/2026-q1-checkpoint</guid>
            <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[This year, the oracles advised me thus:]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>personal</category>
        </item>
        <item>
            <title><![CDATA[My only axiom]]></title>
            <link>https://blog.tripu.info/my-only-axiom</link>
            <guid>https://blog.tripu.info/my-only-axiom</guid>
            <pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[By the time 12 [sic] Rules for Life became a well-known book worldwide, Jordan Peterson]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>philosophy</category>
        </item>
        <item>
            <title><![CDATA[Microrrelato en ≤140 palabras con dos palabras requeridas]]></title>
            <link>https://blog.tripu.info/microrrelato</link>
            <guid>https://blog.tripu.info/microrrelato</guid>
            <pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Nos hablaba con pasión de un futuro radiante y por eso le hicimos nuestro guía.]]></description>
            <content:encoded><![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:encoded>
            <category>in-Spanish</category>
            <category>writings</category>
        </item>
        <item>
            <title><![CDATA[New year's resolutions for 2026]]></title>
            <link>https://blog.tripu.info/2026-resolutions</link>
            <guid>https://blog.tripu.info/2026-resolutions</guid>
            <pubDate>Mon, 12 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The answer to the question &ldquo;should I use an LLM for that?&rdquo; is increasingly]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>personal</category>
        </item>
        <item>
            <title><![CDATA[2025 resolutions recap]]></title>
            <link>https://blog.tripu.info/2025-recap</link>
            <guid>https://blog.tripu.info/2025-recap</guid>
            <pubDate>Thu, 01 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[This is my eval of the resolutions I made for 2025]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>personal</category>
            <category>literature</category>
            <category>Japanese</category>
            <category>sport</category>
        </item>
        <item>
            <title><![CDATA[Pluribus]]></title>
            <link>https://blog.tripu.info/pluribus</link>
            <guid>https://blog.tripu.info/pluribus</guid>
            <pubDate>Wed, 03 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Rhea Seehorn in the show]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>TV</category>
            <category>culture</category>
        </item>
        <item>
            <title><![CDATA[Clueless about computers]]></title>
            <link>https://blog.tripu.info/clueless</link>
            <guid>https://blog.tripu.info/clueless</guid>
            <pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[I want to share two stories of embarrassing ignorance about computers and the internet.]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>personal</category>
            <category>tech</category>
        </item>
        <item>
            <title><![CDATA[Giving up on the electric car?]]></title>
            <link>https://blog.tripu.info/electric-car</link>
            <guid>https://blog.tripu.info/electric-car</guid>
            <pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[We bought our electric car in April 2022.]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>personal</category>
        </item>
        <item>
            <title><![CDATA[React 19 with JSX, pure client (no build)]]></title>
            <link>https://blog.tripu.info/react-19</link>
            <guid>https://blog.tripu.info/react-19</guid>
            <pubDate>Thu, 31 Jul 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[I love simplicity when it comes to software, and for web development I try to get rid of servers]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>work</category>
            <category>programming</category>
        </item>
        <item>
            <title><![CDATA[2025 resolutions mid-year checkpoint]]></title>
            <link>https://blog.tripu.info/2025-checkpoint</link>
            <guid>https://blog.tripu.info/2025-checkpoint</guid>
            <pubDate>Sun, 06 Jul 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[(More than) half of the year is over already, and I thought I should update you on my]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>personal</category>
        </item>
        <item>
            <title><![CDATA[“The Man from the Future: The Visionary Ideas of John von Neumann”]]></title>
            <link>https://blog.tripu.info/von-neumann</link>
            <guid>https://blog.tripu.info/von-neumann</guid>
            <pubDate>Thu, 03 Jul 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[⭐⭐⭐]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>book-review</category>
            <category>science</category>
        </item>
        <item>
            <title><![CDATA[Should I focus on trying to retire?]]></title>
            <link>https://blog.tripu.info/retire</link>
            <guid>https://blog.tripu.info/retire</guid>
            <pubDate>Wed, 25 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Two years ago I realised for the first time that I end up making]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>personal</category>
        </item>
        <item>
            <title><![CDATA[Map of knowledge (1/∞): initial nodes (individuals)]]></title>
            <link>https://blog.tripu.info/knowledge-1</link>
            <guid>https://blog.tripu.info/knowledge-1</guid>
            <pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Thinkers]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>knowledge</category>
        </item>
        <item>
            <title><![CDATA[April 2025, last week]]></title>
            <link>https://blog.tripu.info/2025-april-4</link>
            <guid>https://blog.tripu.info/2025-april-4</guid>
            <pubDate>Wed, 30 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[(&larr; See the third week)]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>daily-photo</category>
        </item>
        <item>
            <title><![CDATA[Time Regained]]></title>
            <link>https://blog.tripu.info/proust-7</link>
            <guid>https://blog.tripu.info/proust-7</guid>
            <pubDate>Mon, 28 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[⭐⭐ for the entire work; ie, the seven volumes.]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>literature</category>
            <category>book-review</category>
            <category>TGB</category>
        </item>
        <item>
            <title><![CDATA[April 2025, third week]]></title>
            <link>https://blog.tripu.info/2025-april-3</link>
            <guid>https://blog.tripu.info/2025-april-3</guid>
            <pubDate>Fri, 25 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[(&larr; See the second week)]]></description>
            <content:encoded><![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:encoded>
            <category>in-English</category>
            <category>daily-photo</category>
        </item>
    </channel>
</rss>