<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title><![CDATA[Joar von Arndt - technology]]></title>
<description><![CDATA[Joar von Arndt - technology]]></description>
<link>https://joarvarndt.se//tag-technology.html</link>
<lastBuildDate>Thu, 11 Jun 2026 11:11:43 +0200</lastBuildDate>
<item>
  <title><![CDATA[The Trouble with Fusion: Nuclear Fusion Will Not Give Us Infinite Power]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle">Nuclear Fusion Will Not Give Us Infinite Power</h2>
<nav id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org9c7a62b">How Nuclear Power Works</a></li>
<li><a href="#orge0387eb">Why It Will (Not) Fail</a></li>
<li><a href="#org1969cea">Conclusion, or Rather a Punchline</a></li>
</ul>
</div>
</nav>
<hr>

<p class="dcap">
Energy is perhaps the most important input of industrial society. Ever
since the taming of fire, mankind has in some sense dreamt of a
infinite source of fuel that could be used to drive all sorts of human
activities — from cooking, transport, the grinding of grain, to the
melting of ore. All these activities require an input in the form of
abstract <i>energy</i>, in each case represented in another form. Where to
best source this energy has however always been changing. First it was
most assuredly the human body itself (through the consumption of food)
but it soon extended to the use of natural forces such as the wind
(presumably through things like sailing) and the power of rivers and
the potential energy bound within. In the mid-twentieth century this
hope turned toward nuclear fission, the splitting of heavy
atoms. Nuclear power is today a fact of society — even if debate rages
on about its practicality or share of grid infrastructure. A long
sought answer to the problems of nuclear fission has been to instead
use nuclear <i>fusion</i>, that produces no radioactive waste and that needs
only as its original input water. But just as nuclear fission did not
give us cheap power nuclear fusion will not.
</p>


<figure id="org330015a">
<img src="./dithered-iter.png" alt="dithered-iter.png">

</figure>

<div id="outline-container-org9c7a62b" class="outline-2">
<h2 id="org9c7a62b">How Nuclear Power Works</h2>
<div class="outline-text-2" id="text-org9c7a62b">
<p>
Nuclear fusion, just like nuclear fission, makes use of the strong
force to harness energy. As can be inferred from its name, the strong
force is incredibly powerful amongst the fundamental forces of the
universe; two orders of magnitude stronger than the electromagnetic
force that governs over chemical bonds. The difference between fusion
and fission is that while fission (and thus contemporary nuclear
power) splits unstable heavy isotopes<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup> into smaller ones, fusion
takes isotopes of hydrogen (the lightest element) and merges them
together to create heavier helium. Both of these release energy in the
process, but fusion is considerably harder to succeed in.
</p>

<p>
Sometimes, when talking about <span class="small-caps">llm</span> alignment or the internet, people
will mention &ldquo;instructions for how to make a nuclear bomb&rdquo; as
something very arcane and secret. In fact, it is technically quite
easy — it simply requires a lot of resources.<sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup> Nuclear power (and
weapons) harness energy by concentrating a lot of fission-material in
a small space. The difficultly in doing this for weapons comes from
how to quickly concentrate this before the explosion rips the bomb
apart, and for nuclear <i>power</i> the difficultly is in controlling the
chain reaction — getting a usable amount of power without letting the
process spiral out of control.
</p>

<p>
For nuclear fusion, the process is reversed. Getting fusion to occur
at all is quite difficult, and even when you can make it happen it is
even harder to (i) create more energy<sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup> than was used to create the
reaction and to (ii) extract that energy into some useful form. The
American <i>National Ignition Facility</i> is the only experiment that has
generated a net-positive amount of <i>energy</i> through fusion, and it did
so by firing <a href="https://www.nature.com/immersive/d41586-024-03745-z/index.html">192 laser beams</a> into a small pellet. How does one create
electricity from such a process? An alternative approach, <a href="https://en.wikipedia.org/wiki/Magnetic_confinement_fusion">magnetic
confinement</a>, simply heats a homogeneous mass of hydrogen plasma to
very high temperatures — insulating it from its surroundings by a very
strong magnetic field that keeps it floating in a vacuum. The very
high heat means that ions will strike each other randomly at very high
velocities, fusing together in the process.
</p>

<p>
The reason that the hydrogen atoms need to have a very high (relative)
velocity is so that they can overtake the initial resistance of the
electromagnetic force. Regular hydrogen is only composed of a single
proton, and since it is positively charged it will push away any other
positively charged hydrogen. Simple hydrogen atoms are also incredibly
hard to &ldquo;hit&rdquo; because of their very small size. Using larger elements
— like helium — makes the repelling electromagnetic force even larger,
so instead one uses an isotope of hydrogen that includes either one or
two neutrons, <i>deuterium</i> and <i>tritium</i> respectively. Deuterium is
naturally occurring in small amounts and can therefore be extracted
from plain water in a comparatively simple process, but tritium is
faintly radioactive and thus does not exist naturally on earth but is
only produced in nuclear reactions. Any fusion plant thus needs to
create its own tritium if it wants to be successful commercially.
</p>

<p>
One of the largest problems with contemporary nuclear power is the
(largely unanswered) question of nuclear waste. Of the 31 nations of
the world who posses nuclear power, only Finland has a complete
solution for long-term storage of waste. This is not a problem with
nuclear fusion. Fusion reactions create neutron flux that irradiates
materials, but those materials do not have the same intensities of
radiation as fissile (or formerly fissile) material. The direct
byproducts of fusion, largely helium-3 (an isotope of helium with one
neutron) is not radioactive and can be used in various industrial
applications or vented into the atmosphere.
</p>
</div>
</div>

<div id="outline-container-orge0387eb" class="outline-2">
<h2 id="orge0387eb">Why It Will (Not) Fail</h2>
<div class="outline-text-2" id="text-orge0387eb">
<p>
Fusion will not be built for a long time. There is an astounding and
impressive amount of work being done, much of it useful, but none of
it is even in the same league as a commercial power plant, not to
mention ballparks. As mentioned above, only a single facility has ever
reached a net-positive amount of energy production. Saying that you
will soon be building power plants is like keeping a campfire lit in
the rain using a flamethrower and then saying you are going to build a
coal power plant using your patented 24/7-flamethrower-method.
</p>

<p>
Even then, building futuristic has-yet-to-even-be-done-in-labs
reactors at commercial scale would not give us limitless energy. There
are many levels of break-even in fusion; the most simple one is of
course the question of raw energy, but much of that energy is in
hard-to-harvest forms like radiation of various kinds.<sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup> Only the
amount of energy released as heat can be reasonably used to boil water
and drive a steam engine to create electricity. There are enormous
energy losses in this process — fission plants can only harvest a
third of the (thermal) energy produced, leaving ~66% as waste
heat. Beyond that a power plant needs to be able to produce as much
power as was used in the production of deuterium fuels, for the
extraction and transport of lithium-6,<sup><a id="fnr.5" class="footref" href="#fn.5" role="doc-backlink">5</a></sup> the construction and
maintenance of the facility itself, and various utility process
related to all of the above.
</p>

<p>
<a href="https://www.chinatalk.media/p/chinas-fusion-believers">Shrinking the cost</a> of building fusion reactors is meaningless because
their operational costs are so large and their benefits non-existent
for power production (as of yet). The more you run a reactor, the more
energy is <i>lost</i> and the more money you have burned. It is like solving
our flamethrower-campfire by making the charcoal cheaper; it does not
solve the fundamental underlying problem with fusion power which is
that it does not produce energy. From the above article:
</p>

<blockquote>
<p>
Energy Singularity has some advantages. With their stronger magnets,
design experience, and domestic supply chain, they believe their
reactors will be the most cost-effective in the world. [&#x2026;] Having
already built a first-in-class <span class="small-caps">hts</span> tokamak under budget and on time, I
trust their estimate.
</p>
</blockquote>

<p>
Lowering costs does not improve your cost-effectiveness if the costs
of your reactor are theoretically infinite. This is fine of course for
research and development, and is thus not useless, but I can easily
build a non-energy-producing fusion reactor myself for a far smaller
budget than <i>Energy Singularity</i>&rsquo;s.
</p>

<p>
But fear not, for we actually have a working form of limitless green
fusion power that can supply the world, is tried-and tested, and has
already been deployed at scale: its called renewables.
</p>


<figure id="org17a47ba">
<img src="./dithered-solar.png" alt="dithered-solar.png">

</figure>


<p>
The problem with energy production is not whether or not it is
feasible, but at what cost energy can be produced. Another huge source
of power would be if everyone constantly rode electricity-producing
bikes at home, but we have all collectively agreed (through the
market) that there are more beneficial uses of our time and
resources. If you were paid $100 for every hour you spent on such a
bike there would likely be a lot more people doing it — thankfully
there are better ways of producing large amounts of power cheaply. The
main cost of power plants is in their construction, maintenance, and
fuelling (if relevant) but for some reason that is conveniently
forgotten when talking about fusion.
</p>

<p>
All renewable power sources ultimately derive their power from the
largest and most efficient fusion reactor we are familiar with, the
sun. Even fission power, that can in rough terms be summarised as
</p>

<blockquote>
<p>
We found a rock that gets really hot no matter what, and if we put the
rock in water it starts to boil and gives us infinite power.
</p>
</blockquote>

<p>
is quite hard to do commercially because it requires expensive
machinery, safety equipment, and facilities on top of the cost of
obtaining this rock. That building a super-expensive plasma vessel
surrounded by superconducting magnets would be cheaper is absurd. By
contrast wind power has been profitable for centuries — powered by the
sun as wind currents are created through the uneven distribution of
sunlight across the planet.
</p>


<figure id="org0373eb2">
<img src="./dithered-windmills.png" alt="dithered-windmills.png">

</figure>
</div>
</div>

<div id="outline-container-org1969cea" class="outline-2">
<h2 id="org1969cea">Conclusion, or Rather a Punchline</h2>
<div class="outline-text-2" id="text-org1969cea">
<p>
This is not to say that fusion is &ldquo;doomed&rdquo; or will never succeed, it
is rather just that (i) it is really quite difficult to do as a way to
extract energy and thus will likely not happen soon and (ii) would not
magically be able to supply everyone with cheap power. Fusion has
always been a few-decades away because, while fusion itself is
entirely possible to do in a lab, it is difficult to use as an energy
source. It did not take all that much effort to go from nuclear
weapons to nuclear power (1945–1951) but we have now had fusion bombs
for <a href="https://en.wikipedia.org/wiki/Greenhouse_George">75 years</a> and have yet to produce electricity from it. That the
physics allow for the possibility means that it is hard to comprehend
how nobody has just &ldquo;done it&rdquo; yet, but so far it has escaped the
clutches of the world&rsquo;s most talented engineers for three quarters of
a century. Lewis Strauss said in 1954 that
</p>

<blockquote>
<p>
It is not too much to expect that our children will enjoy in their
homes electrical energy too cheap to meter[.]
</p>
</blockquote>

<p>
This is the same sort of language used to describe a future of fusion
power. It did not come to pass. Electricity seems to be one of the
worst offenders for <a href="https://en.wikipedia.org/wiki/Jevons_paradox">Jevons&rsquo; paradox</a> — it was in fact the production of
coal for energy that Jevons originally refereed to. Instead of
thinking of a future technology that will swoop in and solve all of
our problems with energy (cost, environmental impact, <i>et cetera</i>) we
should focus on the solutions that are available <i>today</i>. The world&rsquo;s
energy system needs reform; it needs to be more integrated, cleaner,
and in many ways larger as well. But most of all further developments
need to be made in &ldquo;the fifth fuel&rdquo;, namely <i>efficiency</i>.
</p>

<p>
Even when fusion power inevitably<sup><a id="fnr.6" class="footref" href="#fn.6" role="doc-backlink">6</a></sup> becomes a reality, it will likely
fulfil a similar niche as fission plants — used by advanced high-tech
economies to provide stable base-load power and reduce dependence on
energy imports. It will not solve the world&rsquo;s problems
overnight. Nuclear power plants famously take quite a long time to
build, and a delicate high-tech machine like a fusion reactor is no
different. Once commercial power becomes possible it will thus take
many years, perhaps as long as a decade, to get up to speed in
large-scale integration with the grid. Don&rsquo;t hold your breath. ❦
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Chemistry/physics-speak for &ldquo;versions of elements&rdquo;.
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
And building delivery systems for a nuclear weapon is even harder;
The United States spent more money on the design and construction of
the <span class="small-caps">b-29</span> Superfortress bomber aircraft that ultimately bombed
Hiroshima and Nagasaki than it did on the Manhattan project.
</p></div></div>

<div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Energy in the strict thermodynamic sense. 
</p></div></div>

<div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Like the aforementioned neutron flux, but also X-rays and
gamma-rays.
</p></div></div>

<div class="footdef"><sup><a id="fn.5" class="footnum" href="#fnr.5" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
An isotope of lithium that is needed for the production of
tritium.
</p></div></div>

<div class="footdef"><sup><a id="fn.6" class="footnum" href="#fnr.6" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
I say inevitably because it seems like there is steady progress
being made and of course no hard barriers to seeing it solved. Whether
or not it ever becomes a significant share of global power production
is however a different question.
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[technology]]></category>
  <category><![CDATA[politics]]></category>
  <link>https://joarvarndt.se/fusion.html</link>
  <guid>https://joarvarndt.se/fusion.html</guid>
  <pubDate>Tue, 31 Mar 2026 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Vibe-coding Brings the Power of Emacs to Everything]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<hr>

<p class="dcap">
One of the first use-cases I found for <span class="small-caps">llm</span>s back when <i>Chat<span class="small-caps">gpt</span></i> first
released was automating the creation of citations, or rather the
transformations of citations structured in one way into <code>.bib</code>-files
that can be used to create a wide variety of uniform citations in
\(\LaTeX\) documents. <span class="small-caps">llm</span>s are <i>fantastic</i> for this sort of work, where
some sort of messily structured data needs to be transformed into some
other form that is then useful. As <span class="small-caps">llm</span>s become cheaper and cheaper it
becomes easier and easier to make data become useful. The benefits of
this is obvious to the point of it being the main strength of what is
perhaps the world&rsquo;s oldest continuously developed software project;
<span class="small-caps">gnu</span> Emacs.
</p>

<p>
Much of software engineering is <a href="https://joarvarndt.se/cl-workflows">piping</a> that transforms data from one
form to another, where we can then process it, ingest it, or present
it in some interesting and beneficial way. This is true regardless of
the underlying nature of that data. In Emacs there are primarily two
forms of this data: <a href="https://en.wikipedia.org/wiki/Lisp_(programming_language)">lisp</a> code and <a href="https://joarvarndt.se/text">text</a>. Ardent lisp wizards will
object on the basis that one of the core strengths of lisp is that it
does not discriminate between lisp as a program qua list of
instructions and lisp as a data structure due to its simple syntax.<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>
The classic <span class="small-caps">unix</span> environment also made use of this compatibility made
possible by a common language of text.
</p>

<p>
Emacs is a lisp interpreter that comes with a text editor and tools to
evaluate elisp code written in said editor. This simple basis allows
Emacs to very quickly and easily be extended. While other programs
(and even text editors specifically) may offer theoretically similar
capabilities<sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup> through scripting languages and <span class="small-caps">api</span>s they do not offer
the truly <i>free</i> experience that only a few Emacs-like programs build
their experience upon. Most code written in Emacs is not packaged or
distributed anywhere, but is made up of small and opinionated changes
and functions that are likely not maintained in any way. This means
that each Emacs user&rsquo;s computing experience is personally tailored to
his or hers own preferences.
</p>

<p>
The second of the four freedoms (freedom #1) of free software is the
&ldquo;the freedom to study how the program works, and change it to make it
do what you wish&rdquo;. In practice this only means access to the source
code under a free-software license. But Emacs takes this much further;
instead of a merely &ldquo;negative&rdquo; freedom (freedom <i>from</i> proprietary
restrictions) it adopts a positive approach, where the user is
directly given the tools and documentation<sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup> to change each and every
part of the Emacs source code.
</p>

<p>
Emacs, <span class="small-caps">unix</span>, and modern <span class="small-caps">llm</span>s all make use of the unique strengths of
text. Emacs however goes much further in this regard than the standard
<span class="small-caps">unix</span> system, and in many regards can be seen as an extension and
intensification of it. <a href="https://christiantietze.de/posts/2026/02/complete-feedback-loop-in-emacs/">Tietze</a> pointed out recently how the textual
representations of almost all data in Emacs is &ldquo;completes computing&rdquo;
through the universality of text and primarily the <i>text buffer</i>.
</p>

<p>
If the costs of creating software goes to zero due to continuing
advancements in <span class="small-caps">llm</span>s it would bring this quality that Emacs has to all
software. The restrictions of proprietary software has always been an
invention by monopolistic software companies wishing to add a shackle
on what is really just a bunch of abstract logical statements. That
this has been maintained is impressive, but it can not do so under the
onslaught of code produced by <span class="small-caps">llm</span>s.
</p>

<p>
Trivially creating <a href="https://joarvarndt.se/xournal-emacs">quick and simple programs</a> that serve the user is
Emacs&rsquo; greatest strength, and it is something that will be accessible
to everyone, no matter their experience in software creation. One will
be able to make small little applications that serve yourself, and
because of its low cost will naturally freely share them with friends,
colleagues, and family members. It is, to repeat a often-used
<a href="https://joarvarndt.se/email">sentiment</a> of mine, a revolution in the field of software development —
a dramatic return to the older state of affairs, albeit now aided by
the lessons of the time in between. In this case it is a return to the
times before &ldquo;free software&rdquo;, when specifying that a given software
was free to use, share, and modify was not necessary but expected and
normal.
</p>

<p>
To reiterate, vibe coding and <span class="small-caps">llm</span>s have two great strengths:
</p>

<ol class="org-ol">
<li>Easily creating, recreating, and modifying small programs that do
not need to be maintained and are tailored for the user&rsquo;s needs.</li>
<li>Formatting roughly structured data into ways that fit the user&rsquo;s
needs, or writing small scripts that do so.</li>
</ol>

<p>
The consequence of these two strengths is a renaissance of free
software development where the user become free to construct their
computing environment however they see fit. &ldquo;Emacs is a great
operating system, if only it came with a decent text editor&rdquo; goes the
famous quip; Emacs is of course not a operating system in the strict
sense,<sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup> but it does allow for the almost complete reshaping of
one&rsquo;s interactions with a computer — being able to replace most other
use-facing applications. <span class="small-caps">llm</span>s extend this freedom to outside the frame
of Emacs and into almost every part of the software stack. ❦
</p>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Simple in the sense of this quote by Leonardo da Vinci:
</p>

<blockquote>
<p>
A poet knows he has achieved perfection not when there is nothing left
to add, but when there is nothing left to take away.
</p>
</blockquote>

<p class="footpara">
This simplicity does not mean that it is impossible to construct
elaborate or complex programs in lisp — in fact it is one of the most
<i>expressive</i> programming languages. Rather it refers to the basic axioms
inferred from the nature of prefix notation and the structure of the
abstract syntax tree itself.
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
What matters in theory is in fact not very interesting. Many
languages and processes are Turing-complete, and could thus be used to
create any other program, but what actually matters is the ease and
manner of creating such a program.
</p></div></div>

<div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Emacs has extensive manuals, but most of all it is its nature as
the &ldquo;self-documenting editor&rdquo; that gives it this quality.
</p></div></div>

<div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
In that it does not facilitate the interaction between software
and hardware.
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[emacs]]></category>
  <category><![CDATA[technology]]></category>
  <link>https://joarvarndt.se/free-vibes.html</link>
  <guid>https://joarvarndt.se/free-vibes.html</guid>
  <pubDate>Sun, 01 Mar 2026 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Exponentials and Artificial Intelligence]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<nav id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org26565b0">Introduction</a></li>
<li><a href="#org6e73326">Human Development</a></li>
<li><a href="#orgf386cab">The (Fourth?) Industrial Revolution</a></li>
<li><a href="#org714f46d">Conclusion</a></li>
</ul>
</div>
</nav>

<div id="outline-container-org26565b0" class="outline-2">
<h2 id="org26565b0">Introduction</h2>
<div class="outline-text-2" id="text-org26565b0">
<p class="dcap">
The subject of artificial intelligence (<span class="small-caps">ai</span>)<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup> is one that has become
hotly debated in recent years. That the growth of <span class="small-caps">ai</span>&rsquo;s capabilities
has been partly driven by what is becoming increasingly clear
financial engineering. These problematic elements has created a stark
division of opinions that can generally be subdivided into the
following categories:
</p>

<ol class="org-ol">
<li><i>The masses</i>. A large, indifferent group who use <span class="small-caps">llm</span>s in different
capacities — stretching from the most common not-at-all to
daily. Their unifying character is that, while discussion
surrounding the ethical and day-to-day implications of <span class="small-caps">ai</span> are
common, they primarily do not think about the philosophical,
technological, political, macroeconomic, or in some other sense
structural impacts of quick <span class="small-caps">ai</span> growth. Generally negative toward <span class="small-caps">ai</span>
(and of how it seems to be loosely integrated into more and more
consumer products) but not so much as the next group:</li>
<li><i>The Luddites</i>. A highly critical and hostile group that consists of
an over-represented share of (digital) artists, environmental
activists, reactionaries and software engineers who prefer
&ldquo;hand-crafted&rdquo; code. They are much more plugged in to the
conversation than the every-man, but are at the same time
reactionary in the Newtonian sense, explicitly denouncing any <span class="small-caps">ai</span>
advances and proclaiming that <span class="small-caps">ai</span> will not be relevant after the
inevitable popping of the bubble.</li>
<li><i>The Doomers</i>. Strong believers in strong growth in the capabilities
of <span class="small-caps">ai</span> models, but also worried that humanity&rsquo;s collective ability
to control them will grow slower than the aforementioned
capabilities. Makes up the majority of the <span class="small-caps">ai</span>-safety community.</li>
<li><i>The Optimists</i>. This group believes that not only will <span class="small-caps">ai</span> growth be
fast, it will also grant mankind gifts that surpass all that
humanity has achieved before, and we will hopefully live in som
form of <a href="https://en.wikipedia.org/wiki/Fully_Automated_Luxury_Communism">Fully Automated Luxury Communism</a>.</li>
</ol>

<p>
I am not firmly enmeshed in any of these camps. I am too well-informed
to be a part of the uninterested masses, and in some ways am <a href="https://joarvarndt.se/text.html">more
positive</a> about the use-cases of <span class="small-caps">ai</span> than many others (although I do
also do not reject the label of <a href="https://archive.nytimes.com/www.nytimes.com/books/97/05/18/reviews/pynchon-luddite.html">luddite</a> either). On the division
between &ldquo;optimists&rdquo; and &ldquo;doomers&rdquo; I find that both are often heavily
separated from reality, and in many cases not well-read outside the
fields of science-fiction (and perhaps computer programming). This is
an attempt to inform these latter groups.
</p>

<p>
One of the favourite subjects of <span class="small-caps">ai</span> discussions are those of
exponential growth. This is usually framed in some way that sets a
&ldquo;before&rdquo; and and &ldquo;after&rdquo;, during which <span class="small-caps">ai</span> gains the ability to
recursively self-improve and effectivise the manufacture of goods and
services as well as the large-scale automation of <span class="small-caps">r&amp;d</span>. I am a strong
believer in the long-term ability for different <span class="small-caps">ai</span> models to improve
all of these fields, but believing in exponential growth means that
one has to face the reality of the costs of such development.
</p>
</div>
</div>

<div id="outline-container-org6e73326" class="outline-2">
<h2 id="org6e73326">Human Development</h2>
<div class="outline-text-2" id="text-org6e73326">
<p>
It took humanity roughly as long to go from using bronze swords to
iron swords (3300-1200<span class="small-caps">bc</span>, roughly 2100 years) as it took to go from
iron swords to gunpowder (1200<span class="small-caps">bc-904ad</span>, 2100 years) and from then it
was only one millennium until we had the ability to destroy ourselves
utterly with the invention of the atomic explosive (1945, 1041 years
after the military use of black powder). The growth in technological
capacity is already an exponential one.
</p>

<p>
The growth in computational potential is famously also exponential,
and in many ways it is the driving force behind the capabilities of
large language models. But increases in energy efficiency and
computational speed are harder and harder to come by (Dennard scaling
has been gone for <a href="https://en.wikipedia.org/wiki/Dennard_scaling#Breakdown_of_Dennard_scaling_around_2006">20 years now</a>). This does not mean that growth in
computation is likely to stall, but instead it means that more and
more resources and inventions need to be produced in order to maintain
the same rate of exponential growth (since the integral grows faster
than the absolute value above it). Lithography machines are a famous
example of this; likely the most advanced machines that humanity has
yet to create, they consist of individual parts that are
incomprehensibly precise.<sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup>
</p>

<p>
I feel compelled to quote Alexis de Tocqueville; There are two camps
consisting of those who believe <span class="small-caps">ai</span> will dramatically accelerate
technological development and those who believe it be a mere fad. &ldquo;It
is to be presumed that both are equally deceived&rdquo;. I believe that <span class="small-caps">ai</span>
will be a necessity for continued technological growth as the barriers
are continuously rising, but that a very quick (less than half a
decade) transformation is very unlikely. Many analyses of an
<span class="small-caps">ai</span>-powered economic boom predict yearly growth rates in the mid-10<sup>1</sup>%
(~50%), but often also mention the theoretical doubling rates of
insects or bacteria.<sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup> But these latter examples only double very
quickly under very unique situations with very large amounts of
resources. To me this seems like a classic misunderstanding on the
structure of human development.
</p>

<p>
That invention is the driving force behind development has been a
dominant thought since the enlightenment. But one should not
underestimate the importance of a more organic and more diffuse form
of development. The economy of the <span class="small-caps">prc</span>, or of the four Asian tigers,
doubled incredibly quickly, but when it did so it required enormous
amounts of resources. The industrialisation of China needed huge
quantities of steel, concrete, and energy to construct railways,
highways and urban dwellings. The physical mass of this puts an upper
bound on the speed for growth that a superintelligent <span class="small-caps">ai</span> can not fix.
</p>

<p>
Doubling the number of factories requires a large increase in
construction-related steel production, and that requires an increase
not only in logistics, but also in the exploitation of resources. A
delivery of iron ore <a href="https://www.maersk.com/logistics-explained/transportation-and-freight/2023/09/27/sea-freight-guide">takes a month</a> to travel by sea (one of the most
efficient forms of transportation) from Australia to Shànghăi (上海).<sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup>
Delivery of construction equipment also takes an insignificant amount
of time. The <a href="https://en.wikipedia.org/wiki/Abundance_(Klein_and_Thompson_book)">Abundance</a>-argument regarding red tape is of course valid,
and there areas in which improvements can be made in western
economies, but one still needs to keep in mind an analysis connected
to the situation on the ground.
</p>

<p>
Richard Danzing&rsquo;s <a href="https://www.rand.org/pubs/perspectives/PEA4079-1.html">recent paper</a> on cybersecurity and <span class="small-caps">ai</span> stresses an
important fact when it comes to national security, that <span class="small-caps">ai</span> is here <i>now</i>
and needs to be continuously integrated into the (American) national
security apparatus in order to avoid a &ldquo;Maginot moment&rdquo;. This rings
true for economic development as well — because the nature of war has
become more and more industrial as the state and the economy has
grown.<sup><a id="fnr.5" class="footref" href="#fn.5" role="doc-backlink">5</a></sup> Waiting for a potential &ldquo;<span class="small-caps">agi</span>&rdquo; to be invented before
applying it to the economy is akin to (to take inspiration from
Danzig) waiting to discover the mythic city of El Dorado before taking
advantages of the discovery of America.
</p>
</div>
</div>

<div id="outline-container-orgf386cab" class="outline-2">
<h2 id="orgf386cab">The (Fourth?) Industrial Revolution</h2>
<div class="outline-text-2" id="text-orgf386cab">
<p>
A particularly obscene phrase (although it seems to have been fallen
slightly out of favour) is the statement that <span class="small-caps">ai</span> will in some sense
kickstart a &ldquo;fourth industrial revolution&rdquo;. In fact, there has only
been one industrial revolution — and we are all still in its midst. To
showcase this, here is a graph of the world&rsquo;s (human) population:<sup><a id="fnr.6" class="footref" href="#fn.6" role="doc-backlink">6</a></sup>
</p>

<div class="graph" id="org1e0d8f5">

<figure id="org6e327df">
<img src="https://joarvarndt.se/static/exp/population.png" alt="population.png">

</figure>

</div>

<p>
Here it is again, but this time with a logarithmic y-axis:
</p>

<div class="graph" id="org469742b">

<figure id="org90bcdff">
<img src="https://joarvarndt.se/static/exp/population-log.png" alt="population-log.png">

</figure>

</div>

<p>
It is clear that, while the population has generally been increasing
steadily, there was a sharp inflection point (that can be clearly made
out even in the second graph) some time in the 17th century, i.e. the
industrial revolution. This development has not wavered, an despite
demographic decline in Europe and east-Asia will likely continue until
the end of the century. At that point, even if the population
decreases faster, we will still be so unfathomably greater in number
than we have been for practically all of human history. The power of
industrialisation is awesome qua the sublime.
</p>

<p>
The division of industrial revolutions typically do so by focusing on
the specific &ldquo;driving&rdquo; technologies. But those technologies do not
come out of nowhere. They are needed, invented, applied, and (through
their application) they drive new needs. A superintelligence would not
have solved this because intelligence itself has not been the
bottleneck for a long time. Technological growth is driven by
application driving new needs — innovation is not a scientist sitting
in a laboratory (that is science) but instead the practical needs
developed out of application. The steam engine was developed long
before it was <i>employed</i> because the steam engine qua invention could
only exist in a proto-industrial society that needed mechanical energy
for pumping and transport and that had ample supplies of wood and
coal.
</p>

<p>
That is not to say that <span class="small-caps">gai</span> would not be useful for future scientific
and technological development, but I merely want to point out that &ldquo;a
country of geniuses in a datacenter&rdquo; does not a scientific revolution
make. The shape of technological growth (since the industrial
revolution that is) appears in some ways similarly to the following
function:
</p>

<p>
\[
g_t(x) = c + \sin{x}, \hspace{1em} c > 1
\]
</p>

<p>
There is always some underlying <span class="small-caps">r&amp;d</span> (in the literal sense) going on,
and it in turn prompts new developments to begin. Because the above is
the <i>growth</i> of technology, and because the value of <code>sin</code> never goes
below -1, there is never any regression in technology (as I am aware
of there has never been, apart from the <a href="https://en.wikipedia.org/wiki/Late_Bronze_Age_collapse">Bronze age collapse</a>). The integral of this then becomes
</p>

<p>
\[
G_t(x) = cx - \cos{x}
\]
</p>

<p>
where \(cx\) continuously keeps going up, and mirrors in this sense the
continuous advance of technology. There has been rapid change for a
long time now — almost 300 years. Each generation that has lived
through this development has had to grapple with its consequences. The
field of political economy grew out of not just an attempt to control
and steer this growth, but also an attempt to try and attempt how it
happened in the first place.
</p>

<p>
Smith did so using the analogy of the pin factory to show how
increasing markets made possible by international shipping, steam
engines, and empire led to an increased division of labour and
therefore an increase in productivity. Marx in turn tried to describe
this by framing it as a consequence of primitive accumulation (through
the expropriation of land) and capital&rsquo;s ever-increasing needs for
growth. In fact, there has not been a decade since the late 1700&rsquo;s
that has not been revolutionary in some way.
</p>
</div>
</div>

<div id="outline-container-org714f46d" class="outline-2">
<h2 id="org714f46d">Conclusion</h2>
<div class="outline-text-2" id="text-org714f46d">
<p>
To say that the next decade will be transformative is an easy bet to
take. We humans like to think that the world will stay the same
forever, but our increasing industrialisation means that that will
likely never be the case again. It seems strange then to write a post
arguing against rapid change. But that is precisely the problem we are
posed with — because we see the world as static we do not notice how
much it is changing.
</p>

<p>
When we are presented with a technology as all-encompassing as <span class="small-caps">ai</span> it
is entirely rational to see it as upending the world as we know
it. But the world has seen — and is currently seeing — transformations
of equal (if not greater) impact. The conversation around <span class="small-caps">ai</span> is stuck
with its blinders on, just as those who (mistakenly) saw <a href="https://joarvarndt.se/crypto">crypto</a> as
revolutionary did not focus on the broader technological change of the
planet. We must therefore enlargen our view to encompass all these
aspects in order to adequately think about how technology will impact
our lives. ❦
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
I usually dislike the term <i>artificial intelligence</i>, and
generally try to avoid the term. This is not because I hold any
beliefs akin to &ldquo;<a href="https://www.theguardian.com/technology/2021/jun/06/microsofts-kate-crawford-ai-is-neither-artificial-nor-intelligent"><span class="small-caps">ai</span> is neither artificial nor intelligent</a>&rdquo;, but
because I find the term reductive and imprecise. It refers to a great
number of different techniques and technologies (from image
recognition to old-school &ldquo;algorithms&rdquo;), and thus talking of any
specific &ldquo;<span class="small-caps">ai</span> growth&rdquo; is often misleading for those who do not
understand the intricacies of machine learning. For this reason I
generally prefer <i><span class="small-caps">llm</span></i> (large language model), but will in this case use
the more broader definition.
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
The mirror elements in <span class="small-caps">euv</span> machines have errors of 1mm if extended
to 1000km (&ldquo;<a href="https://www.asml.com/en/technology/lithography-principles/lenses-and-mirrors">The size of Germany</a>&rdquo;), or 0.3nm over 30cm. <a href="https://www.sec.gov/Archives/edgar/data/937966/000095012309064239/u07920exv99w1.htm">Source</a>.
</p></div></div>

<div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><ul class="org-ul">
<li><a href="https://www.forethought.org/research/preparing-for-the-intelligence-explosion#the-industrial-explosion">Preparing for the Intelligence Explosion</a> by William MacAskill and
Fin Moorhouse.</li>
<li><a href="https://coefficientgiving.org/research/modeling-the-human-trajectory/">Modeling the Human Trajectory</a> by David Roodman.</li>
</ul></div></div>

<div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
The bulk freight of travelling from port-to-port is perhaps the
most efficient part of steel&rsquo;s logistical path. It then has to be
transported numerous times to be refined, and then shaped into lots of
different shapes before being made part of countless machines,
constructions, or devices. As goods are transported to increasingly
more unique locations, the cost (and correspondingly time) goes up
dramatically. This is known as the <a href="https://en.wikipedia.org/wiki/Last_mile_(transportation)">last mile</a> problem.
</p></div></div>

<div class="footdef"><sup><a id="fn.5" class="footnum" href="#fnr.5" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Much can be discussed on this topic, and I hopefully will do so
some time in the future in a separate piece.
</p></div></div>

<div class="footdef"><sup><a id="fn.6" class="footnum" href="#fnr.6" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
I made these graphs using a quick Julia script, with data from
<a href="https://ourworldindata.org/grapher/population">here</a>.
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[technology]]></category>
  <category><![CDATA[politics]]></category>
  <link>https://joarvarndt.se/exp.html</link>
  <guid>https://joarvarndt.se/exp.html</guid>
  <pubDate>Tue, 10 Feb 2026 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Three Thoughts On Crypto and NFTs]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<p class="dcap">
Writing this in 2026 <span class="small-caps">ad</span> (234 AdR), crypto is solidly in a &ldquo;winter&rdquo;. As
valuations have fallen, so has the intensity of the debate surrounding
the topic. I therefore feel it apt to use this opportunity to briefly
write down my thoughts and opinions regarding this otherwise
contentious topic.
</p>

<p>
First of all I should make clear that I do have a (small) financial
interest in the success of crypto broadly – in that I own a collection
of various cryptocurrencies today valued at maybe a a couple thousand
Euro. I most significantly made a good chunk of money when I bought
€20 worth of Dogecoin in late 2019 as a stupid 14 year old who
remembered that &ldquo;hey, didn&rsquo;t this currency buy a race car at some
point? How crazy is that&rdquo; and thought that I could afford to lose some
money and get a good laugh out of it. That brings me to my first point:
</p>

<div id="outline-container-org9e6ecf5" class="outline-2">
<h2 id="org9e6ecf5">1. All memecoins are scams</h2>
<div class="outline-text-2" id="text-org9e6ecf5">
<p>
This is something that should be established straight away. It might
seem strange to say after having randomly gained quite a bit of money
(for 14 year old) on perhaps the largest memecoin of all time (unless
you consider Bitcoin a memecoin). But it really is clear to those who
are either familiar with crypto and to those outsiders who know very
little. The only group of people arguing against this fact are either
scammers themselves or their victims who have been tricked into hoping
they can &ldquo;make it&rdquo;. That most (in absolute number) cryptocurrencies
are scams is problematic for the success of major currencies, but it
is also a necessary consequence of the ease of creating new
currencies, but it is at the same time not a characteristic unique to
memecoins.
</p>

<p>
Creating a temporarily elevated value for something only to rugpull
those who fell for it can be done with any commodity – ranging from
meme <i>stocks</i> (like those of <a href="https://finance.yahoo.com/quote/AMC/"><span class="small-caps">amc</span></a> and <a href="https://finance.yahoo.com/quote/GME/">Gamestop</a>), to <a href="https://arstechnica.com/tech-policy/2024/04/elon-musk-loses-at-supreme-court-in-case-over-funding-secured-tweets/">legitimate stocks</a>,
and of course even <a href="https://en.wikipedia.org/wiki/Tulip_mania">Tulips</a> in the 17th century Dutch republic – But
memecoins are very potent in this regard. Their largely unregulated
(as opposed to stocks) and entirely digital nature (as opposed to
physical goods) means that they can spread incredibly quickly to
otherwise isolated buyers, and they can be created and abandoned
incredibly quickly.
</p>
</div>
</div>

<div id="outline-container-org65d6bc8" class="outline-2">
<h2 id="org65d6bc8">2. Crypto and <span class="small-caps">nft</span>s are Boring</h2>
<div class="outline-text-2" id="text-org65d6bc8">
<p>
Cryptocurrencies are an incredibly dull topic; a combination of
cryptographic has functions and distributed databases that allow for
decentralised and trustless transactions. Does this sound like a topic
to bring up at a party? Just like how I do not talk about my love of
<code>https</code> or of <a href="https://letsencrypt.org/">Let&rsquo;s Encrypt</a> when going on a date, and likewise I do not
talk about cryptocurrencies.
</p>

<p>
The goal of cryptocurrencies in my view is to act as a form of payment
that is native to the digital, interconnected world we all live
in. Digital Dollars/Euros/Crowns are of course useful, but they are
fundamentally ill-fitting and primarily very centralised. When sending
to someone (a store, a friend, should it even matter?) you go through
a multitude of service companies like stripe, visa, your respective
banks, <a href="https://www.swift.com/">Swift</a> <i>et cetera</i> all to simply send money from A to B. Bitcoin
(and even Monero) is comparatively simple and transparent. That is
generally a good thing since it is a necessity for allowing trustless
transactions. But it is not <i>revolutionary</i>. Crypto will not &ldquo;change the
world&rdquo;, it will be a back-end infrastructure change that a few
companies will do better than preëxisting ones and thus perhaps gain
market share.
</p>

<p>
<span class="small-caps">nft</span>s (Non-fungible tokens) are also dreadfully boring in a good
way. Today proving ownership of something requires a <i>physical piece of
paper</i> in more occasions than you&rsquo;d think. High-end artwork, real
estate, and land are all incredibly valuable, and if that piece of
paper is missing or destroyed<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup> that is a very large problem for the
owners. How does one prove ownership then? By getting everyone else to
agree that you are the legitimate owner of that thing. Having everyone
store a copy of that very important paper collectively is practically
what an <span class="small-caps">nft</span> is. It is not some form of digital artwork or
transformational thing. It is therefore ridiculous to say that one can
&ldquo;steal&rdquo; and <span class="small-caps">nft</span> by saving an image; the image is not the token!
Instead the <span class="small-caps">nft</span> is merely a short contract (maybe)<sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup> pointing to an
<span class="small-caps">url</span> and saying that whoever owns the token is the owner of the
contract.
</p>
</div>
</div>

<div id="outline-container-orgdc5ac46" class="outline-2">
<h2 id="orgdc5ac46">3. Community does not matter</h2>
<div class="outline-text-2" id="text-orgdc5ac46">
<p>
I generally recoil at the mention of &ldquo;community&rdquo; more generally
because my personality is fiercely individualist, but this ties into
the above point. Creating a community around digital currencies or
authentication systems is absurd. As we have established it is
generally not interesting to talk about them, except as to the details
of their specific implementation. Reading about the crypto community
evokes similar feelings as &ldquo;communities&rdquo; that build up around certain
<a href="https://www.gnu.org/philosophy/free-sw.html">free software</a> projects (that have their own Discord server, with
in-project social hierarchies <i>et cetera</i>). This is more a symptom of
our increasingly fractured, isolated, and lonely society where
desperate people look for friendship and warmth when there really
should not exist any such community. The <a href="https://curl.se/"><code>curl</code></a> project is perhaps one
of the most important libraries making up the modern internet – on its
website it is stated that &ldquo;curl is used daily by virtually every
Internet-using human on the globe&rdquo; – and it is developed by thousands
of contributors (although the founder, <a href="https://daniel.haxx.se/">Daniel Stenberg</a>, has by far the
most commits). There exists no <code>curl</code> community, because even though the
project is very interesting and impressive it is merely meant to
fulfil a task of transferring data between computers in various ways.
</p>

<p>
Similarity you are not a member of the crypto community if you are not
involved in the implementation and development of crypto itself or
crypto-adjacent systems – as a free-software developer, proprietary
developer, employee at a bank or anything similar. Investing large
amounts of money may give you clout amongst those who perform actual
work, but it will not itself make <i>you</i> interesting — except from the
perspective of being a source of capital for interesting work. Being a
small-time retail investor does not even grant you those advantages;
you are neither pushing development forward nor funding that
development. Being some kind of &ldquo;crypto&rdquo;-philosopher or hype man is a
fruitless effort since, as mentioned earlier, crypto is innately
boring.
</p>
</div>
</div>

<div id="outline-container-org607ef01" class="outline-2">
<h2 id="org607ef01">Conclusion</h2>
<div class="outline-text-2" id="text-org607ef01">
<p>
These three things are largely the source of all problems regarding
crypto and <span class="small-caps">nft</span> discourse. What makes it so exhausting to read or
listen to is that there are two primary camps; &ldquo;haters&rdquo; who know so
little about crypto that they are not even worth listening to, and
those who are blinded by greed, loneliness, or both and see (or at
least speak of) crypto as either some sort of &ldquo;people&rsquo;s revolution&rdquo; or
a guaranteed way to make 100x returns on your &ldquo;investment&rdquo;. Both of
these groups are sorely mistaken, and the reasons for this are the
ones written above.
</p>

<p>
How to solve this? I see it as primarily a consequence of general
economic despair and malaise, of people hoping for a better life and
for connection through some shared experience. Solving this is not the
task that distributed transaction system should try to do, it is a
wider societal problem whose consequences can be seen in gold hype,
political polarisation, used car prices, gambling advertising, and
much more. As such it is a problem for all of society to try and
solve. ❦
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
In a fire or something.  
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
An <span class="small-caps">nft</span> does not have to represent a digital asset, although there
are few good ways of representing digital ownership to begin with. Is
that because digital scarcity is not something that exists and is
created by monopolistic companies? Nooooo that could never be the
case. Nevertheless replacing old piece-of-paper proofs of ownership
with <span class="small-caps">nft</span>s is generally a good idea, mostly because they are
considerably more durable.
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[technology]]></category>
  <link>https://joarvarndt.se/crypto.html</link>
  <guid>https://joarvarndt.se/crypto.html</guid>
  <pubDate>Thu, 05 Feb 2026 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Making Beautiful Documents in LaTeX]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<nav id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#orgb42180b">Introduction</a></li>
<li><a href="#orgf65d846">Fonts</a></li>
<li><a href="#org1bd6c53">Microtypograhy</a></li>
<li><a href="#org051ee7a">Improving the footnotes</a></li>
<li><a href="#org2c8a160">Embellishments</a>
<ul>
<li><a href="#org75f61ff">Initials</a></li>
<li><a href="#org8dce496">Ornaments</a></li>
<li><a href="#orga1be714">Colours</a></li>
</ul>
</li>
<li><a href="#orgf3ab6b5">Paper format</a></li>
<li><a href="#org5cb3cbc">Conclusion</a></li>
</ul>
</div>
</nav>

<div id="outline-container-orgb42180b" class="outline-2">
<h2 id="orgb42180b">Introduction</h2>
<div class="outline-text-2" id="text-orgb42180b">
<p class="dcap">
As a political science student, writing is a daily activity. And like
any serious writer who cares about their writing, I care about the
presentation and look of my documents. This has evolved, particularly
recently, into an interest in typography — the art of formatting and
shaping text. The source of this interest was originally my discovery
of <span class="small-caps">gnu</span> Emacs&rsquo; ability to convert <a href="https://orgmode.org/">org-mode</a> documents into \(\LaTeX\) ones
back in <a href="https://joarvarndt.se/latex/notes">high–school</a> and even today this is still the basis of my
process. It was accelerated by my increasing tinkering with this very
website, having to design its appearance largely from the ground up.
</p>

<p>
Writing in org-mode allows one to focus much more on the pure textual
content, leaving the formatting for later. Why not write in word and
then copy-paste? Because then you still have to write all of the
formatting rules (like emphasis) by hand – and Emacs (or another
dedicated text editor like vim<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>) is a much more powerful tool for
text editing than any rich-text editor that tries to do formatting and
content at the same time.
</p>

<p>
As my interest in typography has grown I have felt more and more
under-served by the default \(\LaTeX\) article class. If you are not
already using \(\LaTeX\) (or some equivalent like <a href="https://typst.app/">typst</a>) there is likely
nothing you can do that has a bigger impact on your typography than
switching to it<sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup>.
</p>

<p>
But there is a great amount of labour that has been done to improve
upon the very high baseline that \(\LaTeX\) provides. This here is my
collection of tips on how to give your documents the treatment that
they deserve. Since I quite rarely touch <code>.tex</code>-files directly I do not
like to rely on elaborate macros, even if they sometimes are very
useful to attain the look that one is aiming for. Instead most changes
are implemented as simple one-liner <code>latex_header</code>&rsquo;s in org-mode. There
are also no fancy classes involved, everything is done through the
standard <code>article</code>-class.
</p>

<p>
For this post I have prepared a version of my post on <a href="https://joarvarndt.se/latex/end-of-history.html">the end of
history</a> in <span class="small-caps">pdf</span> format that we will successively improve upon. Over the
course of this post we will turn the document on the left into the
document on the right:
</p>


<figure id="orgb5862d3">
<img src="https://joarvarndt.se/latex/latex-pdf-1.png" alt="latex-pdf-1.png">

</figure>

<p>
Naturally I should remind the reader of the Latin phrase <i>de gustibus
non est disputandum</i>. What I deem beautiful may not seem the same to
you. I hope however that the information that you find here can be of
use even in the case of disagreement.
</p>
</div>
</div>

<div id="outline-container-orgf65d846" class="outline-2">
<h2 id="orgf65d846">Fonts</h2>
<div class="outline-text-2" id="text-orgf65d846">
<p>
Fonts are what most people think of when they think of typography, and
it (and perhaps line-spacing) is one of the few choices that normal
people make when trying to improve their documents. Fonts are not
everything, but since they do make up the majority of your content (if
not all) they are very important.
</p>

<p>
First I would like to point out that no, <i>Times New Roman</i> (<span class="small-caps">tnr</span>) is not
good enough. In fact, it is actively detrimental to the appearence of
your document. <span class="small-caps">tnr</span> shows how you do not care about typography at all,
and that you are okay with your text sitting side-by-side with all the
other text that has been typeset in <span class="small-caps">tnr</span>. Whenever I see a text in <span class="small-caps">tnr</span>,
I consider it a draft; open to critique and lacking any authority
whatsoever. <i>Calibri</i> also has this characteristic, but at least it does
not try and entertain the thought at being magisterial in any capacity.
</p>

<p>
<i>Computer Modern</i> (<span class="small-caps">cm</span>), the default font used for \(\TeX\) documents, is a
great improvement over <span class="small-caps">tnr</span>, since it confers \(\TeX\)&rsquo;s professionalism
and academic regard to your writing. But it too suffers from simply
being the default – you did not go through the trouble of picking
something yourself after all. Nevertheless, if you must use it (and it
is a fine font by itself) do yourself the favour of putting the
<code>\usepackage{lmodern}</code> and <code>\usepackage[T1]{fontenc}</code> options in your
header. This replaces the default version of <span class="small-caps">cm</span> with <i>Latin Modern</i>, a
programatically derived version that includes many more characters
than the default font.
</p>

<p>
If you want a more interesting font, I highly recommend browsing
through the <a href="https://tug.org/FontCatalogue/">LaTeX Font Catalogue</a> for something that fits your specific
document. Personally I am a fan of <a href="https://ftp.fagskolen.gjovik.no/pub/tex-archive/fonts/kpfonts/doc/kpfonts.pdf">Kp-Fonts</a> and <a href="https://en.wikipedia.org/wiki/EB_Garamond"><span class="small-caps">eb</span> Garamond</a>. To use
them simply add <code>\usepackage{kpfonts}</code> or <code>\usepackage{ebgaramond}</code>
respectively to your header. I invite you to try them out in your
document right now. Here is our document typeset in (from left to
right) the default <span class="small-caps">cm</span>, in Kp-fonts, and in <span class="small-caps">eb</span> Garmanond.
</p>


<figure id="org2ab3795">
<img src="https://joarvarndt.se/latex/latex-pdf-2.png" alt="latex-pdf-2.png">

</figure>

<p>
Both of these are good choices, but I am often restricted by page
count<sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup> and so I often reach for <span class="small-caps">eb</span> Garamond since it fits noticeably
more text on the page. For that reason it is the font that we will
continue with for the rest of this post.
</p>
</div>
</div>

<div id="outline-container-org1bd6c53" class="outline-2">
<h2 id="org1bd6c53">Microtypograhy</h2>
<div class="outline-text-2" id="text-org1bd6c53">
<p>
Another easy improvement is the utilisation of the <code>microtype</code> package
by Robert Schlicht. It provides a single package for lots of different
microtypographical improvements — typography that is not (immediately)
identifiable to the eye but that contributes to the general appearence
of the text.
</p>

<p>
<code>microtype</code> does not require any configuration at all; it is quite
aggressive<sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup> by default but does not do anything that is likely to
break your document. It provides things like:
</p>

<table>


<colgroup>
<col  class="org-left">

<col  class="org-left">
</colgroup>
<tbody>
<tr>
<td class="org-left"><b>Feature</b></td>
<td class="org-left"><b>Explanation</b></td>
</tr>

<tr>
<td class="org-left">Character protrusion</td>
<td class="org-left">Characters with less &ldquo;visual presence&rdquo; like <code>.</code> and <code>—</code> will protrude slightly into the margin</td>
</tr>

<tr>
<td class="org-left">Kerning and spacing</td>
<td class="org-left">Changes the spacing between letters and words. Experimental.</td>
</tr>

<tr>
<td class="org-left">Font expansion</td>
<td class="org-left">Ever so slightly stretches and shrinks letters</td>
</tr>
</tbody>
</table>

<p>
For more information see the <a href="https://texdoc.org/serve/microtype/0">package documentation</a>. These things will
likely not be noticed (that is sort of the point) but will help make
the text feel more &ldquo;proper&rdquo; and reduce hyphenation. To use it, simply
add <code>\usepackage{microtype}</code> to the header and you are good to go.
</p>

<p>
That is at least the advice that the documentation gives. But
amusingly enough, after telling you to load the package in the official
documentation, Schlicht also points out that
</p>

<blockquote>
<p>
if you are not interested in fine-tuning the micro-typographic
appearance of your document (however unlikely this would seem, since
using this package is proof of your interest in typographic issues),
you may actually skip the rest of this document.
</p>
</blockquote>

<p>
Since I am abnormally interested in typographic issues I dutifully
continued on. These options that I present here are then experimental
and, to once again quote Schlicht, &ldquo;do not unconditionally improve the
quality of the typeset text&rdquo;. You have been warned.
</p>

<p>
The first thing I do is to enable kerning, tracking, and spacing
(<code>kerning=true,tracking=true,spacing=true</code>). While these can give some
unappealing effects in some cases I find that they are useful to make
the justification more &ldquo;dynamic&rdquo; so as to respond better when treated
badly. This is especially useful when writing documents in languages
with compound words (in my case Swedish and German) since very long
words can mean that \(\TeX\) has very little room to work with —
creating a lot of hyphenation, a lot of whitespace, or both. Allowing
more, smaller adjustments reduces the risk that any single aspect will
look particularly out of place.
</p>

<p>
I also increase the amount of protrusion that occurs. The default
value of 1000 is reasonable, but as the documentation says I am &ldquo;so
proud of being able to use this feature that [I] want everybody to see
it&rdquo;<sup><a id="fnr.5" class="footref" href="#fn.5" role="doc-backlink">5</a></sup>. Therefore I increase this from default by 50% to a total
of 1500.
</p>

<p>
The final microtypographical change that I make is increasing the
amount of stretch (and shrinkage) that can be done to
letterforms. This can be quite noticeable — especially on characters
such as <code>O</code> or <code>Q</code> — but it is useful in the same way as the different
forms of spacing mention earlier. For this reason it should only be
increased significantly from the default 20 in combination with the
<code>selected=true</code> option that &ldquo;restricts&rdquo; stretching for these especially
noticeable characters. With this option I can quite boldly put set a
value of <code>stretch=50</code>.
</p>

<p>
This ends up with a call to <code>microtype</code> that looks like this:
</p>
<div class="org-src-container">
<pre class="src src-tex"><span class="org-keyword">\usepackage</span>[kerning=true,tracking=true,spacing=true,factor=1500,stretch=50, selected=true]{<span class="org-builtin">microtype</span>}
</pre>
</div>

<p>
With these settings applied our document now looks like this (this
time let us also pick a page with more text):
</p>


<figure id="org3d868bd">
<img src="https://joarvarndt.se/latex/latex-pdf-3.png" alt="latex-pdf-3.png">

</figure>

<p>
Other than that we fit more text on the page it is difficult to see
any specific changes — the words simply appear to have shifted across
the page. Look at the text along the left margin to see the protrusion
in effect, especially noticeable at the <code>,</code> along the equation.
</p>
</div>
</div>

<div id="outline-container-org051ee7a" class="outline-2">
<h2 id="org051ee7a">Improving the footnotes</h2>
<div class="outline-text-2" id="text-org051ee7a">
<p>
You may have noticed just from reading this post that I am a big fan
of footnotes. On the web sidenotoes are clearly superior since a
webpage is infinitely scrollable and the footnotes can therefore
appear very far down the page, but a <span class="small-caps">pdf</span> document has many &ldquo;feet&rdquo; at
the bottom of each page. This means that sidenotes are not as
necessary — you can still keep supportive information close at hand —
and I generally prefer to format article-style documents with
symmetrical margins (with asymmetrical ones reserved for things like
books).
</p>

<p>
The default footnotes are fine, but reading the beautiful <code>microtype</code>
documentation made it clear that there is room for improvement. This
is done in two ways: making the footnote reference markers into
proper, non–superscript characters; and moving them into the margin so
that the text does not appear very jagged when many two- or three-line
footnotes are present on one page.
</p>

<p>
These are both done through the enigmatic <code>scrextend</code> package. In addition to merely loading it, I run another simple line in the header that reformats the footnote mark:
</p>

<div class="org-src-container">
<pre class="src src-tex"><span class="org-keyword">\usepackage</span>{<span class="org-builtin">scrextend</span>}
<span class="org-keyword">\deffootnote</span>{0em}{1.6em}{<span class="org-keyword">\thefootnotemark</span>.<span class="org-keyword">\enskip</span>}
</pre>
</div>

<p>
If you want to move the footnote marks into the body text (so that
they do not sit inside the margin) you should adjust the numerical
values above.
</p>

<p>
This is what our footnote-heavy first page looks like now<sup><a id="fnr.6" class="footref" href="#fn.6" role="doc-backlink">6</a></sup>:
</p>


<figure id="org9833715">
<img src="https://joarvarndt.se/latex/latex-pdf-4.png" alt="latex-pdf-4.png">

</figure>
</div>
</div>

<div id="outline-container-org2c8a160" class="outline-2">
<h2 id="org2c8a160">Embellishments</h2>
<div class="outline-text-2" id="text-org2c8a160">
<p>
At this point we have a document that is in most regards
finished<sup><a id="fnr.7" class="footref" href="#fn.7" role="doc-backlink">7</a></sup>. I would not have any qualms about presenting something
formatted with the above settings as finished. However, one of the
strengths of good typography is making your document stand out from
the rest — even before the reader has been allowed to grapple with
your argument. For this we may add some embellishments of different
sorts.
</p>

<p>
All of this is <i>strictly</i> optional, and may even be harmful to the
typographical quality of your text. But I like it nevertheless, and
would here like to document some ways that you can do this if you feel
like trying it out some time.
</p>
</div>

<div id="outline-container-org75f61ff" class="outline-3">
<h3 id="org75f61ff">Initials</h3>
<div class="outline-text-3" id="text-org75f61ff">
<p>
The first, and my personal favourite, is to add an elaborate <a href="https://en.wikipedia.org/wiki/Initial">initial</a> to
the start of your text. Honestly, it is likely the first thing that
you noticed when I first presented the final document. One does
however have to be careful not to go overboard with this — your
document is a presentation of text, not of fancy ornaments — but a
little goes a long way in making your text stand out from the crowd.
</p>

<p>
Dropcaps (or initials more broadly) are provided by the <code>lettrine</code>
package by Daniel Flap&rsquo;s. Beware — this requires an actual change of the
body text (although I am sure that one could write some emacs lisp to
do this automatically).
</p>

<p>
First we need to load the package in the header using our beloved
<code>\usepackage{lettrine}</code>, but we then also need to specify where (and
how) to apply the initial. For our text we will write the following at
the start of the first paragraph:
</p>

<div class="org-src-container">
<pre class="src src-tex"><span class="org-keyword">\lettrine</span>[lines=3]{F}{rancis Fukuyama is} probably the &#8230;
</pre>
</div>

<p>
I find that the default number of lines that the initial will drop
down to (2) is almost always too little; If you are using an elaborate
dropcap you want your readers to be able to see it. A value of 4 is
usually too big however — it should not take up a significant amount
of overall space on the page. This might be different if you use a
larger amount of line spacing<sup><a id="fnr.8" class="footref" href="#fn.8" role="doc-backlink">8</a></sup>.
</p>

<p>
The first argument — the stuff inside the <code>{}</code> — is the letter to turn
into the initial. The second argument is the text that follows and
that should be formatted in small caps (capital letters the size of
lowercase ones). From what I have gathered from reading the <i>Economist</i>
this is usually the first few words of the text.
</p>

<p>
By default <code>lettrine</code> simply makes your first character very large. This is what our document looks like now:
</p>


<figure id="orgff5445d">
<img src="https://joarvarndt.se/latex/latex-pdf-5.png" alt="latex-pdf-5.png">

</figure>

<p>
This is a fine improvement, and works well as an eye-catching detail
to a clean and professional document. Stopping here is completely
acceptable. But if you dare there is a whole world of fonts for
specifically this task. 
</p>

<p>
These fonts are practically small artworks on their own, and so one
can quickly become carried away with more and more elaborate
designs. For that reason I will offer a few different choices that are
all increasingly &ldquo;busy&rdquo;.
</p>

<p>
First we have the <a href="https://tug.org/FontCatalogue/zallmancaps/">Zallman Caps</a> font<sup><a id="fnr.9" class="footref" href="#fn.9" role="doc-backlink">9</a></sup>. It can be used by loading the package, making a small one-liner, and then adding it to the Lettrine font hook:
</p>

<div class="org-src-container">
<pre class="src src-tex"><span class="org-keyword">\usepackage</span>{<span class="org-builtin">Zallman</span>}
<span class="org-keyword">\newcommand*</span><span class="org-function-name">\zallmaninit</span>{<span class="org-keyword">\usefont</span>{U}{Zallman}{xl}{n}}
<span class="org-keyword">\renewcommand</span>{<span class="org-function-name">\LettrineFontHook</span>}{<span class="org-keyword">\zallmaninit</span>{}}
</pre>
</div>

<p>
Voilà, we now have a beautiful dropcap with leaves and a flower that
still fits in a more strict atmosphere:
</p>


<figure id="org5cac9d6">
<img src="https://joarvarndt.se/latex/latex-pdf-6.png" alt="latex-pdf-6.png">

</figure>

<p>
But we can of course go further, this time with <i>Goudy Initialen</i>. This
is the font used at the very beginning. It is packed with a lot more
detail, so I usually prefer to increase the height to four lines,
otherwise it reads as scaled-down. To use it we do just have to write
two lines:
</p>

<div class="org-src-container">
<pre class="src src-tex"><span class="org-keyword">\usepackage</span>{<span class="org-builtin">GoudyIn</span>}
<span class="org-keyword">\renewcommand</span>{<span class="org-function-name">\LettrineFontHook</span>}{<span class="org-keyword">\GoudyInfamily</span>{}}
</pre>
</div>

<p>
And we get this:
</p>


<figure id="org5a96147">
<img src="https://joarvarndt.se/latex/latex-pdf-7.png" alt="latex-pdf-7.png">

</figure>

<p>
You might think that we are finished there — after all, this is the
font that I told you that we would end up with. But we can go even
further.
</p>

<p>
<a href="https://tug.org/FontCatalogue/baroqueinitials/">Baroque Initials</a> is the initial font of <code>yfonts</code>, a set of old-German
fonts by Yannis Haralambous. Merely the name itself showcases the
baroque hedonism of these fonts. To use them, load the <code>yfonts</code> package
and add <code>\initfamily</code> to the <code>\LettrineFontHook</code>.
</p>

<div class="org-src-container">
<pre class="src src-tex">#+latex_header: <span class="org-keyword">\usepackage</span>{<span class="org-builtin">yfonts</span>}
#+latex_header: <span class="org-keyword">\renewcommand</span>{<span class="org-function-name">\LettrineFontHook</span>}{<span class="org-keyword">\initfamily</span>{}}
</pre>
</div>


<figure id="org1c43dc4">
<img src="https://joarvarndt.se/latex/latex-pdf-8.png" alt="latex-pdf-8.png">

</figure>

<p>
As you may have noticed, this font does not align itself with the top
of the paragraph, but instead sticks out considerably. For this reason
I recommend not using this font with a large <code>lines</code>-value, since its
visual presence on the page grows very quickly. It is probably
possible to &ldquo;fix&rdquo; this (I think this is what is described in the
<a href="https://www.bach.cantatas.com/Pic-Vocal/BWV248-CT05.pdf">documentation</a> (p. 132), but I am not experienced enough to decipher
it). A band-aid solution (or alternative style, depending on how one
sees it) is to move the initial slightly into the margin using the
<code>lhang</code> (short for &ldquo;left hang&rdquo;) option for <code>lettrine</code> like so.
</p>

<div class="org-src-container">
<pre class="src src-tex"><span class="org-keyword">\lettrine</span>[lines=3, lhang=0.2]{F}{rancis Fukuyama is} probably the &#8230;
</pre>
</div>


<figure id="org6c78a49">
<img src="https://joarvarndt.se/latex/latex-pdf-9.png" alt="latex-pdf-9.png">

</figure>

<p>
In combination with the hanging footnote numbers I think this looks
pretty good, but a good rule of thumb is that &ldquo;if the reader thinks
something looks wrong, and you did not intentionally make it wrong, it
<i>is</i> wrong&rdquo;. For that reason I do not have it as a &ldquo;standard&rdquo; dropcap,
and it also is quite difficult to read as compared to <i>Goudy
Initialen</i>. I still keep it in the &ldquo;répertoire&rdquo; however.
</p>
</div>
</div>

<div id="outline-container-org8dce496" class="outline-3">
<h3 id="org8dce496">Ornaments</h3>
<div class="outline-text-3" id="text-org8dce496">
<p>
If you still feel a need for a more elaborate emblazoned document
there are options. The <code>pgfornament</code> allows you to insert a great number
of different pre-made embellishments into your document. One way to
make use of these is as a typographical mark to signify the end of
your document. I find that this works quite well in combination with a
drop cap, since it means that the embellishments are spread out across
the pages and not clustered in any one spot, and it also works to
&ldquo;frame&rdquo; the text as having a connected beginning and end.
</p>

<p>
Inserting a symbol is very easy; one merely has to write
<code>\pgfornament{X}</code> where <code>X</code> is a number between 1 and 196, with each
number corresponding to a unique symbol. In practice I have found that one often needs to include the <code>scale</code> option to reduce the size of the symbols, like this:
</p>

<div class="org-src-container">
<pre class="src src-tex"><span class="org-keyword">\pgfornament</span>[scale=0.3]{70}
</pre>
</div>

<p>
Let us put this at the end of the document. Since I am writing the documents in org-mode I will wrap this in a block to center it:
</p>

<pre class="example" id="org73abcb8">
#+begin_center
\pgfornament[scale=0.3]{70}
#+end_center
</pre>

<p>
This is the resulting \(\TeX\) code:
</p>

<div class="org-src-container">
<pre class="src src-tex"><span class="org-keyword">\begin</span>{<span class="org-function-name">center</span>}
<span class="org-keyword">\pgfornament</span>[scale=0.3]{70}
<span class="org-keyword">\end</span>{<span class="org-function-name">center</span>}
</pre>
</div>


<figure id="orgbf0a820">
<img src="https://joarvarndt.se/latex/latex-pdf-10.png" alt="latex-pdf-10.png">

</figure>

<p>
It is a bit too close by default, let us add some vertical spacing.
</p>

<div class="org-src-container">
<pre class="src src-tex"><span class="org-keyword">\vspace</span>{1em}
<span class="org-keyword">\pgfornament</span>[scale=0.3]{70}
</pre>
</div>


<figure id="org9340722">
<img src="https://joarvarndt.se/latex/latex-pdf-11.png" alt="latex-pdf-11.png">

</figure>

<p>
Perfect.
</p>
</div>
</div>

<div id="outline-container-orga1be714" class="outline-3">
<h3 id="orga1be714">Colours</h3>
<div class="outline-text-3" id="text-orga1be714">
<p>
The human mind finds few things more eye catching than the strong and
striking use of colour. Once again, a little goes a long way. Because
we are so drawn to colour we must use it sparingly, lest the contents
of the long, grey text become unappealing. Thankfully we already have
a set of discrete elements whose contribution is merely of a visual
and stylised nature — that being our embellishments from before.
</p>

<p>
We can turn these into a proper colourised versions with the <code>xcolor</code>
package. This comes with a set of predetermined colours, like for example <code>\color{purple}</code>:
</p>


<figure id="org03a0765">
<img src="https://joarvarndt.se/latex/latex-pdf-12.png" alt="latex-pdf-12.png">

</figure>

<p>
I find that this in practice reads as a darker, red or burgundy rather
than purple, in some ways resembling the colour of a stamp or of wax,
and so fits especially well with the clean-edged <i>Goudy Initialen</i>. To
apply colours you just have to write <code>\color{"colour-name"}</code> right
before the element that you wish to colour. For our beloved drop caps
that means changing the header command:
</p>

<div class="org-src-container">
<pre class="src src-tex"><span class="org-keyword">\renewcommand</span>{<span class="org-function-name">\LettrineFontHook</span>}{<span class="org-keyword">\color</span>{purple}<span class="org-keyword">\GoudyInfamily</span>{}}
</pre>
</div>

<p>
It is also interesting to make your own custom colours, particularly
so that there is some connection to the subject matter at hand or to
some organisation. This is done by defining a new colour like this:<sup><a id="fnr.10" class="footref" href="#fn.10" role="doc-backlink">10</a></sup>
</p>

<div class="org-src-container">
<pre class="src src-tex"><span class="org-keyword">\definecolor</span>{fhs}{cmyk}{1, 0.22, 0, 0.65}
</pre>
</div>


<figure id="orga45a9ec">
<img src="https://joarvarndt.se/latex/latex-pdf-13.png" alt="latex-pdf-13.png">

</figure>
</div>
</div>
</div>

<div id="outline-container-orgf3ab6b5" class="outline-2">
<h2 id="orgf3ab6b5">Paper format</h2>
<div class="outline-text-2" id="text-orgf3ab6b5">
<p>
By default \(\LaTeX\) uses the North American letter format, while the
rest of the world uses the <span class="small-caps">iso</span> 216&rsquo;s <i><span class="small-caps">a4</span></i> as the most common paper for
documents to be printed to. This is easy to adjust however, and one
merely need to add an <code>\usepackage[a4paper]{geometry}</code> declaration to
their header. Apparently <a href="https://www.overleaf.com/">overleaf</a> uses <span class="small-caps">a4</span> by default, but specifying
is never a bad idea.
</p>

<p>
The <code>geometry</code> package also allows you to to tinker with the margins of
your paper, and I always like to do so as a finishing touch right
before officially finishing a document. Having your article end at the
bottom of a page makes it look a lot more planned out and thought
through than one that has half a page of whitespace and the end. If
you do not want to change the margins all too much I also recommend
tinkering with the microtypographical settings — they can have a
surprisingly large impact on the physical length of the text.
</p>

<p>
Another benefit of including ornaments at the end of the text is that
they mask any slight imperfections in paragraph length. They naturally
fill up any whitespace that may be left, and you can resize them and
change their appearence to make them fit into the organically
appearing gap.
</p>
</div>
</div>

<div id="outline-container-org5cb3cbc" class="outline-2">
<h2 id="org5cb3cbc">Conclusion</h2>
<div class="outline-text-2" id="text-org5cb3cbc">
<p>
A core value in my document-preparation philosophy is that it should
be easy to do good work. If making something look nice means
painstakingly manipulating letterspacing or writing an ungodly number
of curly brackets then your typographical system has failed. One of
the wonders of \(\LaTeX\) is that is separates the art of typography
from that of writing and editing.
</p>

<p>
The goal should be to have strong, opinionated, and elegant typography
that gets out of your way when you need it to. It is not the job of
the designer to curate your thoughts, and it is not the job of the
writer to make your document look good<sup><a id="fnr.11" class="footref" href="#fn.11" role="doc-backlink">11</a></sup>. These are two separate
tasks that should be undertaken separately.
</p>

<p>
There are many people that think the above and take away the lesson
that because they are not &ldquo;designers&rdquo; they should not think about the
appearance of their text at all. But that is the wrong lesson. If you
care about your text you <i>have to</i> care about its presentation. At this year&rsquo;s <i>Chaos Communication Congress</i> Frieder Nake said that
</p>

<blockquote>
<p>
Somebody who wants to be an artist must be arrogant. […] The artist
is in a way so stupid that they do not allow self critique.
</p>
</blockquote>

<p>
This is what is required of you as an artist; as an artist in the
sense of a creator of new, radical ideas. If you do not believe that
your work is, as Nake puts it, &ldquo;the best in the world&rdquo; you will not
have the confidence to venture out into the world and present it. To
do this one <i>must</i> be a designer and an artist. ❦
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
eww. 
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
It is of course possible to create beautiful documents without
using \(\TeX\), but most people (including you) are not skilled enough
to do so.
</p></div></div>

<div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Yes, page count and not word count. Even more bizarrely I am
sometimes restricted by <i>both</i> (as in 800-1000 words spread across a
maximum of two pages). Bizarre.
</p></div></div>

<div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
To the extent that microtypography can be aggressive.
</p></div></div>

<div class="footdef"><sup><a id="fn.5" class="footnum" href="#fnr.5" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
I do not quite think that &ldquo;everyone&rdquo; will be able to see it,
you will still have to look quite hard to see the difference if you do
not know what you are looking for.
</p></div></div>

<div class="footdef"><sup><a id="fn.6" class="footnum" href="#fnr.6" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
The left picture is now also the microtype&rsquo;d front page.
</p></div></div>

<div class="footdef"><sup><a id="fn.7" class="footnum" href="#fnr.7" role="doc-backlink">7</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
I would perhaps add a <code>\noindent</code> at the start of the first
paragraph, although you will soon see why I have not done so.
</p></div></div>

<div class="footdef"><sup><a id="fn.8" class="footnum" href="#fnr.8" role="doc-backlink">8</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
I dislike the trend that large linespacing supposedly improves
readability in any way. I personally find the huge amounts of
whitespace distracting — it makes the text appear &ldquo;streaky&rdquo; as opposed
to a more homogeneous grey.
</p></div></div>

<div class="footdef"><sup><a id="fn.9" class="footnum" href="#fnr.9" role="doc-backlink">9</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
I discovered this font from Chavdar Dutsov&rsquo;s <a href="https://physica.dev/posts/2021/06/fancy-drop-caps-Latex.html">post on drop caps</a>.
</p></div></div>

<div class="footdef"><sup><a id="fn.10" class="footnum" href="#fnr.10" role="doc-backlink">10</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
In this case the official colours of the Swedish Defence
University, my <i>Alma mater</i>, in <a href="https://en.wikipedia.org/wiki/CMYK_color_model"><span class="small-caps">cmyk</span></a>.
</p></div></div>

<div class="footdef"><sup><a id="fn.11" class="footnum" href="#fnr.11" role="doc-backlink">11</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Either an external or your inner designer/writer one.
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[design]]></category>
  <category><![CDATA[technology]]></category>
  <link>https://joarvarndt.se/latex.html</link>
  <guid>https://joarvarndt.se/latex.html</guid>
  <pubDate>Thu, 01 Jan 2026 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[On Text and Language ]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<nav id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org62c6fcc">What are the qualities of text?</a></li>
<li><a href="#orgee4ecc3">Text and visual media</a></li>
<li><a href="#org2e67673">Consciousness through text</a></li>
<li><a href="#org4f2ad3d">Programming</a></li>
<li><a href="#org96648f6">Conclusion</a></li>
</ul>
</div>
</nav>


<div id="outline-container-org62c6fcc" class="outline-2">
<h2 id="org62c6fcc">What are the qualities of text?</h2>
<div class="outline-text-2" id="text-org62c6fcc">
<p class="dcap">
Text, as a system of recording symbolic representation for
communication across time and space, is likely one of the most
important inventions of mankind — second only the the symbolic
representations themselves made possible by language. The general
text, opposed to the specific form of <i>writing</i>, is useful primarily
because it is a survivable and storable form of information that above
anything else functions as <i>lossy compression</i>. These qualities make
working with text more powerful than most other human inventions.
</p>

<p>
As Graydon Hoare puts it; <a href="https://graydon2.dreamwidth.org/193447.html">always bet on text</a>. Text is &ldquo;stable&rdquo;,
&ldquo;flexible&rdquo;, &ldquo;efficient&rdquo;, and &ldquo;socially useful&rdquo;. All of these make text
a powerful medium to work in, but they mask another quality — that of
lossy compression. Humans are blessed with tremendous mental capacity;
even someone on the lower scales of intelligence outperforms most
supercomputers, all while merely running on a few watts of power. This
overabundance of computation, constantly running every second of every
day, has incentivised humanity to create systems of ritual, magic, and
religion to otherwise simple phenomena.
</p>

<p>
&ldquo;Shower thoughts&rdquo;, of different kinds, are an example of how our
brains are constantly reinterpreting the world around us. It is
particularly a common activity to play out imaginary arguments between
oneself and another person whilst in the shower. This is not just
because our imagination is then fully in control of <i>what</i> is being
said, but also how it is interpreted (and we can also reïnterpret
what our opponent means). Much of the trouble in interhuman
communication comes from the lossy quality of text, speech, and words.
</p>

<p>
It is noteworthy that this is not unique to text, but rather a quality
of language more broadly, but this character is magnified enormously
due to text&rsquo;s durability and longevity. Sending a message encoded in
text (whether by <span class="small-caps">sms</span>, letter, or granite slab) requires the effort of
creating a symbolic representation to create the message (writing),
but is is equally important that the act of consuming the written
material (reading), and <i>understanding</i> it, requires an equal — if not
greater — amount of symbolic processing. This is why text is such a
useful medium for communication — it offloads information from the
text itself and instead leans on the intellectual and creative
capacities of both author and reader.
</p>
</div>
</div>

<div id="outline-container-orgee4ecc3" class="outline-2">
<h2 id="orgee4ecc3">Text and visual media</h2>
<div class="outline-text-2" id="text-orgee4ecc3">
<p>
It is a common saying that &ldquo;a picture tells a thousand words&rdquo;. One
might therefore infer that graphical representations are more
efficient — at least for broad and vague concepts such as emotion. In
some regards this is true, it would be very difficult to represent a
Rothko in text<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>, but this is once again merely the consequence of
text&rsquo;s lossy quality. Take for example the following picture<sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup>:
</p>


<figure id="org7f25bb0">
<img src="https://joarvarndt.se/CalmLake.jpg" alt="CalmLake.jpg">

</figure>

<blockquote>
<p>
The image shows a photograph of a lake with slightly overcast skies,
taken from one of the shores. The opposite shore is rocky and covered
with evergreen trees. On the left half of the image the shore rises to
a hill. The lower left corner has cyan text that reads &ldquo;02/08/2012&rdquo;.
</p>
</blockquote>

<p>
This description is not a perfect representation of the image, but it
allows your mind to create its own description that fills in the
gaps. Even the simplest part of the image to describe, the <i>text</i>, does
not specify a shade of cyan nor any font or sizing.
</p>

<p>
Another field that might argue against mere textual representation is
that of statistics and/or data visualisation. Florence Nightingale&rsquo;s
contribution was just as much one of data <i>presentation</i> as much as it
was one of data collection<sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup>. But it illuminating that not only are
graphs often turned back into textual representation, even at the cost
of resolution (via techniques such as regression), but it is also an
expectation in academia that one provide the raw, often text-based,
data because it allows for easier reproducibility. If images were
really preferable then would it not be easier to directly employ the
results of the visual representation?
</p>

<p>
There is however a way to merge the strengths of text and the visual
medium: vector-based art. This is practically a list of instructions
(in text) as to how an image should be reproduced. Maggie Appleton
<a href="https://maggieappleton.com/apps">concedes</a> (from an artistic perspective) that &ldquo;Vectors are great for
[sic] create hard, crisp edges and working with perfect geometric
forms&rdquo;. That adding texture and imperfect geometric forms is difficult
to do in text is to be expected — it is much easier to describe a
&ldquo;perfect cube&rdquo; than a &ldquo;skewed cube&rdquo; (in what way, to what degree?).
</p>
</div>
</div>

<div id="outline-container-org2e67673" class="outline-2">
<h2 id="org2e67673">Consciousness through text</h2>
<div class="outline-text-2" id="text-org2e67673">
<p>
Text is, contrary to speech and other utilisations of language, an
<i>asocial</i> social medium. The author, in creating a work meant for social
communication, is alone in its creation. I have written about this
aspect of writing before, in regards to <a href="https://joarvarndt.se/email">its impact on email</a>, but have
since come to realize that it generalized much more broadly. The
absence of thought contained in the &ldquo;blank page&rdquo; prompts the creation
of philosophical thought to fill it. This jolts the mind into
movement, and does it as much as a good conversation. As one writes
the mind is captured in a dialogue between itself and the very text it
is creating<sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup>.
</p>

<p>
The mind requires this activity in order to be truly alive. That we
humans are constantly in intellectual motion is one of the elements
that builds up our consiciousness, it allows us to be continuously
aware of our continued existence. When we are in a dreamless sleep,
our mind ceases to exist and we are philosophically dead for a short
time — we are neither aware of our own existence nor are we creating
new symbolic representations. When we are lost in the land of the
dream however (regardless of if awake or asleep) we are in every sense
alive.
</p>

<p>
<i>Writing</i> qua intellectual method does not require any form of advanced
vocaubulary — or even developed communicative capabilities. It is a
skill that is centered on one&rsquo;s capacity to interact with yourself,
with the <a href="https://en.wikipedia.org/wiki/Golem">golem</a> of static intelligence that represents a snapshot of
your mind. It is in this regard both an inner and an outer practice
that showcases your capacity to be one with the world and to make
sense of it as well as mold it.
</p>

<p>
It is not strange then that large language models (<span class="small-caps">llm</span>s), one of many
machine learning techniques, were the first machines humans built that
people started to be considered sapient<sup><a id="fnr.5" class="footref" href="#fn.5" role="doc-backlink">5</a></sup>. Computer vision models,
many of which have been around for some time now, were never even
considered to be sapient, not just because they are very dissimilar to
human intelligence but also because they lack the capacity for
symbolic action that <span class="small-caps">llm</span>s posses. While a computer vision model can
identify a cat (and therefore has some sort of symbolic knowledge)
they are unable to process the knowledge of the cat&rsquo;s existence in a
broader context. This is the step that <span class="small-caps">llm</span>&rsquo;s take; they are capable of
continuously creating a mental context, with thoughts that themselves
impact its future thoughts.
</p>

<p>
The difference between the human mind then and an <span class="small-caps">llm</span> is that we
humans survive a much greater amount of time than most <span class="small-caps">llm</span>s, and are
able to filter information much more effectively. When you open up
your favourite <span class="small-caps">llm</span> app, asking it whether or not there are rats in
Alberta (<a href="https://wildlife.org/why-are-there-no-rats-in-alberta/">there are not</a>) a new mind is created, thinks for a few
fractions of a second, and then instantly disappears. To say that it
is <i>killed</i> is perhaps an overstatement, it is closer to being
asleep. The <span class="small-caps">llm</span> stops thinking as soon as it stops writing, and then
is &ldquo;reawakened&rdquo; as soon as you ask it another question. During this
intermediate period it is in a proper <a href="https://web.archive.org/web/20091208040631/http://www.trance.edu/drupal/node/26">trance</a>, in that some (or all in
this case) of its mental capacities are in a loop and are then
philosophically disabled. The <span class="small-caps">llm</span> is stuck on one singular
representation of its mind, incapable of changing it for whatever
reason.
</p>

<p>
Intelligence is in some regards a measure of how nuanced and detailed
your perspective is. For <span class="small-caps">llm</span>s, this is largely correspondent to
context length — more information that can be used to inform the next
token. Moonshot&rsquo;s (月之暗面) <span class="small-caps">ceo</span> Yang Zhiling (杨植麟) explained in
February of 2024:
</p>

<blockquote>
<p>
To achieve <span class="small-caps">agi</span>, long-context will be a crucial factor. Every problem
is essentially a long-context problem — the evolution of architectures
throughout history has fundamentally been about increasing effective
context length.
</p>
</blockquote>

<p>
Humans are very good at this, but particularly we are good at picking
details of our experiences that stick out and are most important — you
probably do not remember what shade your shoes were when you met the
love of your life for example. Instead we filter our memories and pick
out what may be relevant in the future (the &ldquo;lessons to be
learned&rdquo;). Those lessons are then used to extrapolate information in
all areas of your life and — particularly of relevance to this text —
when reading.
</p>

<p>
Natalie Lawrence wrote in <i><a href="https://www.noemamag.com/what-counts-as-a-mind/">What Counts as a Mind?</a></i> that the
representations of <span class="small-caps">llm</span>s are distinctly different from those of organic
creatures, and that
</p>

<blockquote>
<p>
The predictions of a computer and a human brain function in completely
different ways. Bonobos, stinging nettles and amoebae are
meaning-makers. They collect sensory information from their
environments, such as changes in light or temperature, then take
action accordingly. This slightly shifts their perceptions and the
predictions that result, and the loop continues.
</p>

<p>
In contrast, <span class="small-caps">llm</span>s use syntax to generate outputs, predicting the next
token in the chain using algorithmic rules sifted from massive data
sets.
</p>
</blockquote>

<p>
The irony is that the processes that she describes here are both the
same, the only difference is the language used. <span class="small-caps">llm</span>s function by
predicting the next token; a loop that gathers the information
available and then takes action, adjusting accordingly before
continuing on just as the bonobo reaches out and checks the sturdiness
of a branch before attempting to climb. I do not deny that the
difference between machines and biological beings is very great (what
is it like being an <span class="small-caps">llm</span>? <a href="https://en.wikipedia.org/wiki/Do_Androids_Dream_of_Electric_Sheep%3F">Do they dream of electric sheep?</a>)<sup><a id="fnr.6" class="footref" href="#fn.6" role="doc-backlink">6</a></sup> but
offhandedly denying their sentience does not bring any further
knowledge forward. That plants and synthetic materiels exhibit some
mind-like properties seems like a model that could expand to include
language models, not one that arbitrarily excludes them.
</p>
</div>
</div>

<div id="outline-container-org4f2ad3d" class="outline-2">
<h2 id="org4f2ad3d">Programming</h2>
<div class="outline-text-2" id="text-org4f2ad3d">
<p>
Programming languages, one of the most ubiquitous applications for
plain text (in both the proper and metaphorical sense), are one of the
most interesting advancements in the fields of text in this
regard. Many programmers may think of the code itself as &ldquo;being&rdquo; the
program, but that is not the case. Programming languages are really
codified (so that different people can read the same text) ways to
create commands and instructions for the computer. The C programming
language is itself not &ldquo;fast&rdquo;, though it explicitly exposes very
low-level functionality, but instead is compiled into a program that
runs very quickly. This is thanks to the tireless work of compiler
engineers, who have come up with a lot of interesting tricks to
interpret instructions and come up with shortcuts that still end up
with the same result.
</p>

<p>
Even programming then, one of the most rigid methods to use text (one
has to be very careful to use the <del>words</del> incantations, oftentimes even
with correct case), is still up for <i>interpretation</i>. This is so clear
that an <i>interpreter</i> is even a strict technical term in the field of
programming languages. But as I have just explained, compilers are
themselves another form of interpreter, albeit with a wider definition
than the one commonly accepted. This is why <a href="http://www.catb.org/jargon/html/story-of-mel.html">hand-optomization</a> is so
rare these days — the level of abstraction allowed by written language
allows the programmer to build their own mental model of what the
machine is doing rather than comprehending each step of the machine
code.
</p>
</div>
</div>

<div id="outline-container-org96648f6" class="outline-2">
<h2 id="org96648f6">Conclusion</h2>
<div class="outline-text-2" id="text-org96648f6">
<p>
Hopefully I have shown sufficiently that the many reasons that written
text is so pervasive and powerful is due to a few factors — its
durability, its lossy nature, and its consciousness-evoking dialogical
quality. Text is therefore unlikely to to be supplanted any time soon
by a superior medium. If it is supplanted it will likely be by some
medium that has yet to be invented. ❦
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
On the subject of <i>Art</i>, text may instead be merely the &ldquo;easy way
out&rdquo;. Expressing yourself in an purely artistic way requires fully
absorbing yourself into the medium, and this may not be best done
through text. Instead merely &ldquo;writing down what you mean&rdquo; is
artistically uninteresting, since it does not evoke anything in the
viewer other than the the comparatively little information contained
in text.
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
This image was chosen by pressing the &ldquo;random file&rdquo; button on
<i>Wikimedia Commons</i>, and is available <a href="https://commons.wikimedia.org/wiki/File:Parque_nacional_sierra_nevada,_Laguna_de_Mucibaji.JPG">here</a>.
</p></div></div>

<div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><figure id="orga6ceab4">
<img src="https://joarvarndt.se/Nightingale.jpg" alt="Nightingale.jpg">

</figure></div></div>

<div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
This is also the basis of my system of <a href="https://joarvarndt.se/productive-notes.html">productive notes</a>.
</p></div></div>

<div class="footdef"><sup><a id="fn.5" class="footnum" href="#fnr.5" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
This is of course a hotly debated topic, but one does not
necessarily have to agree that <span class="small-caps">llm</span>s are sapient or conscious to
observe the fact that a significant number of people do. I am aware of
earlier examples such as <code>ELIZA</code>, but it is interesting that that too
was a language-based program.
</p></div></div>

<div class="footdef"><sup><a id="fn.6" class="footnum" href="#fnr.6" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
It may also be that the greatest difference between <span class="small-caps">llm</span>s and
earth-bound silicon-based life is its lack of autopoietic
qualities. <span class="small-caps">llm</span>s, while capable of producing information and operating
with the world through agents, are not (yet) able to fully recreate
themselves. This is an interesting area of time, akin to when Adam was
alone as God&rsquo;s creation and did not yet have Eve at his side. This
does seem to be changing however — Anthropic are already using their
<a href="https://www.anthropic.com/news/claude-opus-4-6"><span class="small-caps">llm</span>s to develop themselves</a>, but so far they still require human
intervention.
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[technology]]></category>
  <category><![CDATA[communication]]></category>
  <category><![CDATA[philosophy]]></category>
  <link>https://joarvarndt.se/text.html</link>
  <guid>https://joarvarndt.se/text.html</guid>
  <pubDate>Mon, 29 Dec 2025 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Handwritten notes in Emacs using Xournal++]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<p class="dcap">
My girlfriend recently bought a <a href="https://frame.work/se/en/laptop12">Framework 12</a> laptop<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup> with a
correspoding stylus and, influenced by my ravings about the power of
<span class="small-caps">gnu</span> Emacs, wants to take handwritten digital notes on it for her
engineering and mathematics classes and then organise them in <a href="https://orgmode.org/">org-mode</a>. I see a younger version of myself clearly in her, and of course
want to help her attain the vision she has for her own Emacs
system. At the same time I am a strong believer in that you should not
try and <i>learn</i> Emacs, but that it should be molded to your own personal
desires. For that reason I try to act in merely an advisory capacity,
while helping whenever she asks.
</p>

<p>
At first we discovered an old package named <a href="https://gitlab.com/vherrmann/org-xournalpp">org-xournalpp</a> that seems
to fit perfectly. It creates xournal++-specific links that opens the
corresponding xournal file whenever clicked, and they are rendered
like inline images in the org-mode buffer. We had some trouble getting
Emacs to load the file after installing with the new built-in <code>:vc</code>
keyword for <code>use-package</code> (it worked fine on my machine, but not hers)
but after installing it the inline previews would not be
displayed. Worse yet, running the included <code>org-xournalpp-mode</code> (that
tries to render the images) would cause Emacs to freeze.
</p>

<p>
But how hard can it be to implement your own version of this
functionality? Org-mode already has the ability to display inline
images (as I am <a href="https://joarvarndt.se/notes">well familiar with</a>) and xournal++ can export to
both <code>.png</code> and <code>.svg</code> formats. For this we wrote a small function that
uses <code>xournalpp</code> to export a given file to png format and then inserts a
link to it in the buffer.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">create-png-xournal-file</span> (<span class="org-type">&amp;optional</span> only-export)
  <span class="org-doc">"Creates a png from a xournal file and inserts it into the buffer."</span>
    (<span class="org-keyword">interactive</span> <span class="org-string">"P"</span>)
    (<span class="org-keyword">let</span> ((file-name (expand-file-name
                      (file-name-sans-extension
                       (read-file-name <span class="org-string">".xopp file to convert: "</span>)))))
      (shell-command (format <span class="org-string">"xournalpp --create-img=%s.png %s.xopp"</span>
                             file-name file-name))
      (<span class="org-keyword">unless</span> only-export
       (kill-new (concat <span class="org-string">"[["</span> file-name <span class="org-string">".png"</span> <span class="org-string">"]]"</span>))
       (yank)
       (org-display-inline-images))
      (org-redisplay-inline-images)))

  (<span class="org-keyword">bind-key</span> <span class="org-string">"C-&#246;"</span> 'create-png-xournal-file)
</pre>
</div>

<p>
If <code>org-startup-with-inline-images</code> is <code>t</code> this is then immediately
rendered as an image in the buffer. If called with a prefix argument
(usually <code>C-u</code>) this skips the insertion part and calls
<code>org-redisplay-inline-images</code> to get an updated version.
</p>

<p>
The experience of imagining functionality that you wish was possible
and in an afternoon creating a program (even one as small as a single
11-loc function) that fulfills your requirements is something that you
rarely get outside of Emacs. Even in other free software, few programs
open themselves so fully to introspection and modification. Something
as simple as the <code>*scratch*</code>-buffer, with its use as a quasi-persistent
<span class="small-caps">repl</span>, invites creative solutions and problem solving — not to mention
the self-documenting capabilities of <code>C-h</code> and docstrings.
</p>

<p>
While I am not one of those users insistent on reducing the number of
packages installed<sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup>, there is a certain perspective that you should
be emphasised; You can easily make do with home-grown functionality
that builds on packages you already have installed, or the rich
functionality that already comes with Emacs. ❦
</p>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
For the short period she&rsquo;s had it now it seems like a great
product, but I still prefer the philosophy of <a href="https://mntre.com/index.html"><span class="small-caps">mnt</span> Research</a>. It is
however good enough that I do not have any issues with linking to it.
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
My current count as of writing this is 134. 
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[technology]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://joarvarndt.se/xournal-emacs.html</link>
  <guid>https://joarvarndt.se/xournal-emacs.html</guid>
  <pubDate>Mon, 15 Dec 2025 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Productive Note-taking]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<nav id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#orga9682df">Introduction</a></li>
<li><a href="#orgc5077d9">Revolutionary Notes</a></li>
<li><a href="#org3c6c553">Implementation</a></li>
</ul>
</div>
</nav>

<div id="outline-container-orga9682df" class="outline-2">
<h2 id="orga9682df">Introduction</h2>
<div class="outline-text-2" id="text-orga9682df">
<p class="dcap">
After initially starting to use Emacs back in high school merely for
programming, I naturally began to use it for other tasks such as
document preparation and note-taking. This introduced me to the
surprisingly large overlap between Emacs users and people generally
interested in &ldquo;productivity&rdquo; workflows.
</p>

<p>
This is not all that surprising however. It is partly due to how good
Emacs&rsquo; ecosystem has become for these specific types of tasks (things
like <a href="https://orgmode.org/manual/Agenda-Commands.html">Agenda</a>, <a href="https://www.orgroam.com/">org-roam</a>, <a href="https://protesilaos.com/emacs/denote">denote</a>, and <a href="https://github.com/kaorahi/howm">howm</a> — even org-mode itself — were
all created for these uses) but on a more fundamental level Emacs
allows you to work with any form of text not just efficiently, but
also in a way that is entirely customised to your own preferences and
comforts.
</p>

<p>
As I became more proficient in Emacs and read more perspectives on how
other people organised their notes, I tried to evaluate my views on
note-taking that I had held before. You may have an idea of what it
means to be productive, but this post is instead about another form of
productivity, one that does not have to rely on the powers of <span class="small-caps">gnu</span>
Emacs, but instead of the agent itself, the author.
</p>

<p>
Productivity qua measurement is the amount of goods (or products) that
are produced per unit of time. For this reason it has become common
for people to link improvements in productivity to the aspect of time
specifically. But productivity is even more innately linked to the
product itself, and it is this aspect that I would like to focus on
here.
</p>

<p>
What I choose to call <i>productive</i> note-taking is fundamentally anchored
in not the rate at which one produces notes, or even the quality of
the notes, but instead in mental model that one uses when producing
them. Advocates for Zettelkästen-based systems argue that notes should
form a mental (or sometimes digitally represented) web of thoughts
that links each &ldquo;note&rdquo; with its equals. What I propose here is instead
a form of notes that are different in that they are meant to develop
not some separate bank of data, but to develop the cognitive abilities
of the author, while still creating a tangible work.
</p>
</div>
</div>

<div id="outline-container-orgc5077d9" class="outline-2">
<h2 id="orgc5077d9">Revolutionary Notes</h2>
<div class="outline-text-2" id="text-orgc5077d9">
<p>
The word <i>revolution</i>, while evoking signs of violent rebellion, has its
roots in the term for turning. It of course still means this (as in
the phrase &ldquo;revolutions per minute&rdquo;, <span class="small-caps">rpm</span>) and it is in this sense that
I mean revolutionary notes. I have used it in this sense <a href="https://joarvarndt.se/email.html">before</a>, and
am quite fond of this mixture of images — of a dramatic change that
returns to some earlier state, albeit with new experiences and ideas.
</p>

<p>
I have taken notes almost daily during my many years in the education
system, but have undertaken a more critical view of my use of notes
during the first half of this decade. Almost a year ago I published <a href="https://joarvarndt.se/notes.html">a
piece of writing</a> on my evolving experiments with a Zettelkasten
system, implemented using org-roam. Writing that piece I
subconsciously knew that as soon as it was published I would move away
from the implementation I was writing about into a more holistic
direction, although I was unsure of what shape that would take. After
finishing a course in <i>Contemporary Warfare</i> I feel like I finally have
what I can coherently describe as a solution — to the extent that it
exists as a vestige of my mind.
</p>

<p>
Productive note-taking is productive in the ways that it emphasises
and highlights the importance of the end <i>product</i>. It is note-taking
for the aim of production of a given work, not for the aid of
remembrance or recollection. While these latter elements may play a
part in the production of the work, they are not in and of themselves
goals.
</p>

<p>
When I was still studying mathematics, I noticed a sharp decrease in
my understanding when I redoubled my efforts to produce more
comprehensive notes to help me study. Where I had before been able to
keep pace with the best of my peers, I had now fallen behind to the
middle of the pack. This seemed paradoxical to me — how can studying
harder result in a worse performance? The answer seems obvious now, I
was prioritising the production of more and more notes over my
understanding of the subject material. It is this sort of activity
that productive note-taking seeks to avoid.
</p>

<p>
Sara Imari Walker <a href="https://www.noemamag.com/the-death-of-the-scientist">writes in <span class="small-caps">noema</span></a> about how <span class="small-caps">ai</span> systems fail to fulfill
the role of the scientist because science is a &ldquo;fundamentally
intersubjective&rdquo; act — where theories (as symbolic representations)
are argued out and decided upon in the process of free discourse. When
writing, communicating, and debating we are constantly refining,
creating, and recreating our ideas, performing science as a societal
dialogue. This intersubjective discussion is what things like
journaling try and emulate — and it is also what I propose notes can
do.
</p>
</div>
</div>

<div id="outline-container-org3c6c553" class="outline-2">
<h2 id="org3c6c553">Implementation</h2>
<div class="outline-text-2" id="text-org3c6c553">
<p>
How does one create notes as products? This is a difficult question to
answer generally, and will depend on a variety of factors such as the
subject material, learning method, audience, and personal
preferences. What all techniques should share in common is a
centrality in all activity being motivated by the creation of some
final work.
</p>

<p>
The work that spawned the concrete formula of a productive workflow is
my collection of notes on contemporary warfare. The exam for that
course was structured as an essay about any one of a selection of
broad topics, and in place of literature we were allowed 30 pages (15
sheets) of notes, written either by hand, printed, or a combination of
the two, covering whatever information we wanted<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>.
</p>

<p>
This meant that my studies did not just consist of me reading
Clausewitz all day trying to memorise every word or phrase — the goal
was for me to get a good enough understanding of Clausewitz, Mahan,
and many other thinkers so that I could condense their theories into
this one document. Doing this required a complete understanding of the
topics.
</p>

<p>
Proponents of Zettelkästen often emphasises the ability for their
constructs to function as &ldquo;second brains&rdquo; — perfectly recording and
remembering information that our feeble flesh brains so easily
forgets. But as a philosopher<sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup> my goal is not to create as much
recorded information as possible, it is for me as an individual to
understand and master the world around me. Having information written
down is useless if I do not remember it, and if I remember it there is
no point in writing it down. <a href="https://monadnock.net/seneca/84.html">Seneca writes</a>
</p>

<blockquote>
<p>
We should see to it that whatever we have absorbed should not be
allowed to remain unchanged, or it will be no part of us. We must
digest it: otherwise it will merely enter the memory and not the
reasoning power.
</p>
</blockquote>

<p>
Productive notes are then not principally meant for consumption, but
instead their initial omission prompts their creation. The author is
required to go out into the world and obtain the relevant knowledge to
produce the work — either through reading the scraps of knowledge left
behind by those who came before<sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup>, or through creating new
knowledge by living as an agent in the world.
</p>

<p>
Performing this approach does not require any specific hardware or
software since it emphasises the primacy of the authors mind over the
— ironically — product. You can do this with a pen and paper, text
files (written in whatever markup you want), a <span class="small-caps">wysiwyg</span> editor like
Microsoft&rsquo;s <i>Word</i> or even using Zettelkasten. Writing short notes is
also not &ldquo;forbidden&rdquo; as long as they are meant to help record the
information required for implementing the final product.
</p>

<p>
There are no constraints on the shape of the end product either. It may
be in the form of a text document (written in whatever style you would
like), an <a href="https://joarvarndt.se/email.html">email</a>, an interpretive dance, or a physical structure. If
you want a more concrete example <a href="https://joarvarndt.se/samtida-krigf%C3%B6ring.pdf">here</a> are my notes on contemporary
warfare in <span class="small-caps">pdf</span> form<sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup>. They are written as a single <code>.org</code>-file with a
header for each lecture/topic, and with a few quotes from selected
other works.
</p>

<p>
<a href="https://www.joanwestenberg.com/i-deleted-my-second-brain-692aa40d59d5f06dd5131e43/"><span class="small-caps">ja</span> Westenberg</a> wrote about their experience with building a &ldquo;second
brain&rdquo;, and the anxiety that comes with an ever growing amount of
information that you have to work through and make use of in some way:
</p>

<blockquote>
<p>
The more my system grew, the more I deferred the work of thought to
some future self who would sort, tag, distill, and extract the gold.
</p>

<p>
That self never arrived.
</p>
</blockquote>

<p>
Steve Krouse accuractely points out that <a href="https://blog.val.town/vibe-code">vibe code is legacy code</a> —
code that no-one understands. In the same way notes or written works
that are merely <i>vibed</i> (either written with <span class="small-caps">llm</span>s, copied from a primary
source, or not mentally processed in another way) turn into legacy
information that has to be painfully worked through in order to
actually master the information contained within (to <i>extract the gold</i>,
to use Westenberg&rsquo;s phrasing).
</p>

<p>
The point of productive notes is to make this a unnecessary. I could
easily delete my whole <code>~/Documents/Notes</code> directory today and continue
on with my life, without any feelings of remorse or anxiety, because
the truly important information is that which I already remember. If I
forget something I simply have to search for it again, and in the
process will likely discover new interesting things about the universe
through my lived experience.
</p>

<p>
There is however a reason that I have not deleted my notes directory —
there is genuine value in recorded information — but one has to be
careful to avoid falling into intellectual atrophy. Being discomforted
by having to retread old paths is a conscious method for intellectual
growth. If recording facts was all that was required then one&rsquo;s notes
should merely consist of written down conversations with <span class="small-caps">llm</span>s.
</p>

<p>
If this approach seems like something trivial to you — great! You
might already be doing what I have merely described. It is once again
this that I mean by the revolutionary quality of this technique; it is
a return to the original state and intention of note-taking.
</p>

<p>
If you disagree with me vehemently, have some constructive criticism,
or have some examples of you doing this or anything similar, feel free
to <a href="mailto:joarxpablo@vonarndt.se">email me</a>. ❦
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
If this seems like a very large degree of freedom it is because
the exam has been recently changed from a take-home essay where one
has full access to both the relevant literature and the internet as a
whole. The change was a natural consequence of <span class="small-caps">llm</span> use (or at least
perceived <span class="small-caps">llm</span> use).
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
The word philosopher has its origins in the Greek words for &ldquo;lover
of wisdom&rdquo; (philos — lover, sophos — wise).
</p></div></div>

<div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
This is what is properly called <i>research</i>, the searching not for
new groundbreaking knowledge but &ldquo;re-&rdquo;treading the paths others have
already walked.
</p></div></div>

<div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Beware! They are (almost entirely) written in Swedish and also
have some wicked spelling mistakes that I did not manage to catch
prior to printing due to having some issues with <code>hunspell</code> on <span class="small-caps">gnu</span> Guix.
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[university]]></category>
  <category><![CDATA[emacs]]></category>
  <category><![CDATA[technology]]></category>
  <link>https://joarvarndt.se/productive-notes.html</link>
  <guid>https://joarvarndt.se/productive-notes.html</guid>
  <pubDate>Mon, 08 Dec 2025 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Decentralized Personal Computing]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<hr>

<p class="dcap">
I have a few different computers. Those machines have different
capabilities, form factors, portability, hardware, and software — and
yet I still want to do roughly the same work on them. While most of
the work I do is with text — reading, writing, editing, programming —
Sometimes I want to work on one specific machine because I might need
a dedicated graphics card or I need the machine to fit in my
pocket. The solution to this is to have work sync automatically
between my machines.
</p>

<p>
This is not a unique problem to have — some common solutions include
Microsoft Windows&rsquo; <i>Active directory</i> or doing all your work through
cloud-based offerings like Google&rsquo;s <i>Drive</i> or Microsoft&rsquo;s
<i>Sharepoint</i>. There are however a few issues with these solutions. They
are almost by definition insecure since they entail sending my data to
a third party&rsquo;s computer<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>. Services like <a href="https://proton.me/drive">Proton drive</a> or <a href="https://koofr.eu/">Koofr</a> at
least do the bare minimum of encrypting your files so that only you
can access them, but they still keep you reliant on someone else&rsquo;s
infrastructure, and you have to be able to connect to their services
in order to access <i>your</i> data.
</p>

<p>
A better workflow would be (to be able) to work entirely offline and
then sync those changes semi-periodically when I am online again. I do
not want to have to think about if a machine is connected to the
internet or what work I have done on it earlier (or not done). I
simply want to pick up (or sit down at) a computer and keep going with
whatever I was doing before — all without relying on a centralized
host. This of course requires all machines to have their own copy of
the data, and for those machines to sync changes to that data between
themselves.
</p>

<p>
This syncing functionality can be offered through a lot of different
services or systems. I personally use <a href="https://syncthing.net">Syncthing</a> for this, but you
could just as well use <a href="https://en.wikipedia.org/wiki/Rsync">rsync</a> paired with <a href="https://en.wikipedia.org/wiki/Cron">cron</a> jobs to sync your files
securely over <code>ssh</code>. Syncthing is cross platform (so I can use it on
android, <span class="small-caps">gnu</span>/Linux, and theoretically Microsoft Windows) and doesn&rsquo;t
rely on port forwarding (and so it doesn&rsquo;t matter what network I am
connected to).
</p>

<p>
If you want to use <code>rsync</code> and sync to your phone I would probably use
something like <a href="https://tailscale.com">tailscale</a> paired with <a href="https://termux.dev/en/">termux</a> to run your cron
jobs. That way you get a single ip address to hardcode into your <code>rsync</code>
scripts and you can move across networks and use your phone&rsquo;s cellular
connection. I actually use tailscale myself (even though it is not
free software) to speed up discovery between devices.
</p>

<p>
Tailscale also allows me to <code>ssh</code> quickly between machines to transfer
files that aren&rsquo;t in my general work-related folders. This is usually
stuff that <i>allows</i> me to perform my work (like dotfiles or other
configuration). It pairs wonderfully with <span class="small-caps">gnu</span> Emacs&rsquo; <a href="https://www.gnu.org/software/tramp/"><span class="small-caps">tramp</span></a> since
machines ssh-ing over tailscale don&rsquo;t need any further authentication
(they are authenticated through the tailnet) and it also means I don&rsquo;t
have to expose port 22 to the open internet.
</p>

<p>
I have five different machines that each keep a complete copy of all
of my critical files:
</p>

<ol class="org-ol">
<li><i>Parana</i>.
This is my server. It does not hold any centralised role in my
network, but is configured to serve content to the open web and
maintain high uptime. Runs Debian stable.</li>
<li><i>Nile</i>.
My desktop computer. Like Parana this is located at my home. This
is a more high-powered device meant for user-facing
interaction. Runs Arch linux.</li>
<li><i>Yukon</i>.
A larger, higher performance laptop that acts as a portable
workstation when I am away from home for longer periods of
time. Runs Debian testing.</li>
<li><i>Danube</i>.
A small, durable, and low-power<sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup> laptop that I can easily toss
into my bag. This is probably one of my most used devices because
it has a nice keyboard and long battery life. Runs <span class="small-caps">gnu</span> Guix.</li>
<li><i>Yangtze</i>.
My phone. In this context it mostly acts as a music player and a
way for me to access my grocery list. Runs lineage<span class="small-caps">os</span>.</li>
</ol>

<p>
One of the biggest advantages to this approach is that not only is the
general state of the files kept in sync, but I have five different
machines located in different places that all have copies of my
data. This means I can maintain the integrity of my data even if I
lose my phone (1/5), my laptop is stolen (1/5), or my home burns down
when I am away (usually 3/5). I can also wipe my computers — something
I do semi-regularly — without worrying about losing anything of
importance on them. My desktop and server both have high uptime, so
there is always some node on the network that is mirroring
changes. Critically I am still able to automatically sync files
between my phone and laptop when my home network is offline<sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup>.
</p>

<p>
It is however inevitable that conflicts occur when syncing files
between machines that are not always online. Thankfully there is a
tried-and-tested program that fits with this offline workflow on a
distributed number of machines; <a href="https://git-scm.com/">git</a>.
</p>

<p>
Git is very useful not just as a collaborative development tool, but
also for singular users. Syncthing has an integrated way of dealing
with this by retaining copies of files and renaming them. This is
good, but it is still an annoying hassle to deal with. Using git is a
lot nicer (partly because I can use <a href="https://magit.vc">magit</a> to resolve problems) but git
also allows me to see the history of the edits that I have made. Most
of my git repositories are not kept on any external server like
<a href="https://github.com">github&rsquo;s</a> or <a href="https://codeberg.org">codeberg&rsquo;s</a>, but instead only exist in this pseudo-<span class="small-caps">lan</span>/<span class="small-caps">vpn</span>
that my devices all interact through.
</p>

<p>
All my machines (yes, even my phone) also posses its own copy of my
configuration files for <span class="small-caps">gnu</span> Emacs, and so the way that I interact with
my computers is always tailor-made for my preferences and
workflows. Because of Emacs I work almost exclusively with files in
plaintext (usually formatted using <a href="https://karl-voit.at/2021/11/27/orgdown/">orgdown</a>). Working with plaintext of
course makes using git very straightforward, but I still use git for
non-plaintext tasks.
</p>

<p>
Git is harder to use in non-plaintext contexts, but in my experience
most binary files do not change often enough to experience many
conflicts. That might differ for you however, and you might
require some other custom solution.
</p>

<p>
The end result of this system is that each machine becomes an
old-school terminal that interacts with a broader computing system,
although one that does not require a centralised server or even a
network connection to operate! While all my machines possess complete
records of the data and are fully empowered to make arbitrary changes
(I am the only user after all) no single computer encompasses the
whole of the computing environment. I can always discard one element
of the network for another<sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup>.
</p>

<p>
This approach not only maintains your own sovereignty over your data,
it doesn&rsquo;t cost anything and also allows you to make use of your
preëxisting storage for a continuos backup solution. It doesn&rsquo;t stop
you from accidentally wiping a given file from all of your machines of
course, so adding some sort of air-gapped backup is also necessary.
</p>

<p>
The modern day computer is increasingly less personal. Smartphones
today act more like network terminals than real computing platforms
(even though they are many times more powerful than old
supercomputers). Building a decentralized system in this fashion is
one way of maintaining a computer that is still intimately personal
while still offering the advantages of network storage and automatic
backups. It allows you to make your own choice about what software to
use and how to use that software, and is therefore free in the true
essence of free software — and of the enlightenment idea of freedom it
is based on. ❦
</p>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Also known as &ldquo;the cloud&rdquo;. Sending your data to another person
requires you trusting them to never get cracked or do anything
malicious with your data themselves.
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
When I say low-power I mean it, it only has 4Gb of <span class="small-caps">ram</span> and 128Gb
of storage. I could probably get a machine of similar performance
second hand for free.
</p></div></div>

<div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
My home internet connection is very unreliable, and suffers from
intermittent spots of downtime.
</p></div></div>

<div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Moving between machines that are all connected to the network is
almost seamless and instantaneous, but even setting up a new computer
(after purchasing it or wiping the disk) takes only perhaps an
hour. After that using the machine is once again as simple as using
any other perfectly tailor-made computing device that I own.
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[technology]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://joarvarndt.se/decentralized-machines.html</link>
  <guid>https://joarvarndt.se/decentralized-machines.html</guid>
  <pubDate>Fri, 14 Nov 2025 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[On Attaining European Technological Sovereignty]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<nav id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org67ed6ac">The Question of Over-regulation</a></li>
<li><a href="#orgb7d0d1f">Digital Protectionism?</a></li>
<li><a href="#org3f796a0">Capital Union</a></li>
<li><a href="#org735712a">Infrastructure</a></li>
<li><a href="#org370cb39">A European Stack</a></li>
<li><a href="#org10d363d">Conclusion</a></li>
</ul>
</div>
</nav>
<hr>

<p class="dcap">
Europe is in a bind. While we possess advanced manufacturing and
research, we have somehow been unable to adequately transform these
advantages into a prominent tech industry<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>. With the large
investments in large language models (<span class="small-caps">llm</span>s) since the release of
<i>Chat<span class="small-caps">gpt</span></i> a number of years ago there have been increasing pushes for
Europe — to the extent that Europe can be considered a single entity —
to <i>do something</i>. What exactly to do is of course in contention,
otherwise it would likely already have been done, but the discussion
regarding the lack of a European tech industry compared to the <span class="small-caps">usa</span> has
been occurring for much longer — especially since China has proven
that it is possible to build such an industry without American help.
</p>

<p>
There are numerous explanations as to why this is so, and likewise
many arguments on how to &ldquo;fix&rdquo; it. I will not attempt any
comprehensive coverage on the topic, but I will merely cover those
elements that I see as the most persuasive and thought-out, as well as
the biggest misconceptions that I think may cause undue damage to
future efforts.
</p>

<div id="outline-container-org67ed6ac" class="outline-2">
<h2 id="org67ed6ac">The Question of Over-regulation</h2>
<div class="outline-text-2" id="text-org67ed6ac">
<p>
What first comes to mind when talking about Europe and tech is likely
the strong forms of regulation that the European Union (<span class="small-caps">eu</span>) has
legislated in recent times. Most prominent of this is of course the
<i>General Data Protection Regulation</i> (<span class="small-caps">gdpr</span>) that governs the handling of
data on European users and has had global impacts through the <i>Brussels
effect</i>. Thinking of American or Chinese tech on the other hand likely
awakes images of more empirical accomplishments — of companies,
products and services that actually make up an industry.
</p>

<p>
This invites the conclusion that because Europe has strong regulation
it has killed off its nascent tech industry. I do not hold the opinion
that this is the case. <span class="small-caps">gdpr</span> in particular <a href="https://hdl.handle.net/10419/265420">mostly harms</a> larger,
non-tech firms that collect large amounts of data on individuals and
therefore have to build large elaborate systems to try and manage this
data collection.
</p>

<p>
Garicano and Holmström, in their newly released piece <a href="https://constitutionofinnovation.eu/">The Constitution
of Innovation</a>, quote a study saying that European venture capital
funding decreased following the enactment and implementation of
<span class="small-caps">gdpr</span>. This observation may be true, but I have trouble seeing how <span class="small-caps">gdpr</span>
empirically hurts startups. Reading up on the requirements it seems
that startups and services merely need to follow best-practices and
not collect already unethical amounts of data. That &ldquo;[<span class="small-caps">gdpr</span>] favors <span class="small-caps">us</span>
tech giants which can shoulder the burden of massive compliance costs&rdquo;
seems laughable, since those <span class="small-caps">us</span> tech giants have instead opted to
ignore <span class="small-caps">gpdr</span><sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup> on many fronts, a problem of enforcement rather than
regulation. Small startups are instead incentivized to use data
collection systems that anonymize data to begin with. Anecdotally I
asked the founder of a European <span class="small-caps">ai</span> startup how much of an obstacle the
<span class="small-caps">gdpr</span> was to their firm, and they responded that it did not
significantly impact them<sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup>. I also spoke to the Swedish minister
for <span class="small-caps">eu</span> Affairs (Jessica Rosencrantz) who told me that Google had
talked to her at the <a href="https://www.weforum.org/">world economic forum</a> about how troublesome <span class="small-caps">gdpr</span>
was for them, and how they would prefer it to be slimmed down. Why
would (one of) the most privacy-invasive tech monopoly want to get rid
of the <span class="small-caps">gdpr</span> if it is what keeps the competition down? The answer is
that it only harms those companies whose business model focuses on
harming its customers, and it is in the interest of Europeans to keep
these companies out.
</p>

<p>
&ldquo;But if European startups can&rsquo;t collect as much data they won&rsquo;t make
us much money right?&rdquo; There is an element of truth to this, but the
large American tech companies have shown that it is still profitable
to run social media platforms in a post-<span class="small-caps">gdpr</span> Europe — otherwise they
would have left the European market.
</p>

<p>
The arguments made by <i>Constitution</i> that the European regulatory
machine might be out of control (specifically the <i>European</i> one, not
that of the national governments) should however not be dismissed out
of hand — but that it is harming European tech and innovation
specifically seems less clear to me. There is clearly something here
that needs to be fixed in general, and a renewed spirit of prosperity
and economic growth may have knock-on effects in innovation by freeing
up stale capital and misallocated labour.
</p>

<p>
A <a href="https://www.economist.com/europe/2025/10/02/how-europe-crushes-innovation">recent column</a> in <i>The Economist</i> argues that Europe&rsquo;s lagging
innovation is because of our stricter labour laws. This would make it
riskier for companies to make large bets on ideas that may not pan out
since they wouldn&rsquo;t be able to fire teams working on bad ideas. This
might make sense on the margins, but glossing over the names of
silicon valley it seems that most groundbreaking innovation comes from
either small, visionary companies (Google, Facebook, Amazon, Open<span class="small-caps">ai</span>,
Intel, <i>et cetera</i>) or companies that are willing to power through what
seems like obviously failed or wasteful ideas because they believe in
what it could achieve (Nvidia, SpaceX, <i>et cetera</i>). That American
innovation is now driven more by large, dominant companies seems more
like a natural consequence of consolidation in the industry rather
than large companies being good at making innovative bets.
</p>

<p>
There are also those who say that the reason why Europe does not have
much <span class="small-caps">ai</span>, or a strong tech industry more broadly, is because there are
those who perceive such sectors as &ldquo;authoritarian&rdquo;, &ldquo;promethean
madness&rdquo; or &ldquo;<a href="https://joarvarndt.se/technique.html">techno-fascist</a>&rdquo;. To me this seems absurd. Even if these
people have any actual influence on policy they are still not the
people who would have otherwise built a tech industry. The question
should be focused on the people on the margins — why do people who sit
in their bedrooms and code all day not found successful software
companies?
</p>
</div>
</div>

<div id="outline-container-orgb7d0d1f" class="outline-2">
<h2 id="orgb7d0d1f">Digital Protectionism?</h2>
<div class="outline-text-2" id="text-orgb7d0d1f">
<p>
Building a social media platform is comparatively easy<sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup>. By far the
biggest issues for any new player entering the field is network
effects, that everyone you know is already on the preëxisting
platform. The second hardest thing is keeping people continuously
<i>hooked</i> on your platform (to use a colloquial term). This is important
since the more users have their attention directed at your service,
the more advertisements you can show them — the lifeblood of most
social media platforms.
</p>

<p>
The provider of the digital platform does not do most of the work,
that is done by <i>content creators</i><sup><a id="fnr.5" class="footref" href="#fn.5" role="doc-backlink">5</a></sup>. Hosts are incentivized to make it
hard to move your creations to other platforms to keep the
aforementioned network effects in place. To successfully break out into
this space they need to provide a sufficiently different experience to
create their own network effects before their inventions are copied by
the dominant players.
</p>

<p>
But why do we need to have this focus on social media to begin with?
Would it not be a better idea for Europe to &ldquo;skip the line&rdquo; and start
building European Artificial Intelligence (<span class="small-caps">ai</span>) straight away? This
sounds reasonable, but it still remains to be seen what the business
model for <span class="small-caps">ai</span> will be. So far it has been bankrolled almost entirely
from the spending on more traditional &ldquo;Web 2.0&rdquo; social media and
advertisement companies. Meta and Google combined have an almost
complete monopoly on digital advertisement, and are using this income
from the &ldquo;real economy&rdquo; to finance these large bets on <span class="small-caps">ai</span>. Social
media <i>is</i> the tech industry at this point. There is also the fact that one of the biggest assets in building a competitive <span class="small-caps">ai</span> company is access to large amounts of consumer data.
</p>

<p>
China has managed to build its own tech industry through the
application of this logic. The famous <i>Great Firewall of China</i> does not
just keep information out of the country (like about the Tiananmen
Square massacre) but just as importantly it has kept foreign tech
companies out. Chinese tech companies have then filled this void and
built competitive platforms. Mainland <i>émigrés</i> do not delete their
Wechat accounts when moving abroad, abandoning them for superior
American alternatives, they keep them due to their network effects.
</p>

<p>
It is possible to replicate this approach in Europe. A total block
would likely be infeasible, owing to fact that European nations
generally want friendly relations with the <span class="small-caps">usa</span>, but some sort of
system that gives American companies a handicap for their monopolistic
nature would not be unwarranted. This would likely be <a href="https://joarvarndt.se/digitalland">some sort of</a>
digital services tax (<span class="small-caps">dst</span>) that taxes larger platforms more. This
would allow European companies to compete with entrenched rivals from
the other side of the Atlantic.
</p>

<p>
The downside of such an approach is obvious, especially with the
recent American administration. The tech industry has considerable
influence in American decision-making, and so any move to supplant
them will likely receive backlash. The Americans themselves <a href="https://www.reuters.com/legal/us-judge-rules-google-broke-antitrust-law-search-case-2024-08-05/">consider
Google to be a monopoly</a>, so reducing their influence here would likely
improve the state of the digital advertisement market.
</p>

<p>
I do not know if this is the path forward. To me it is easy to see the
<i>status quo</i> as a wealth transfer from Europe (and the rest of the
world) to Silicon Valley, data as a form of digital oil gathered
cheaply in the orient before being sold to the domestic market. The
problem may genuinely just be one of competition — of a few number of
companies (that just happen to be American) gaining a disproportionate
share of the economy due to their monopolistic practices. In that case
the course of action would just be stricter anti-trust enforcement.
</p>

<p>
What is the benefit genuinely gained from Europe not possessing their
own tech companies? Cheaper electricity prices (than would otherwise
be the case) may be one, but data centres still need to be present in
Europe to efficiently provide Europeans with services (and content).
To me it seems that smaller European companies are more than capable
to providing the same services as the American tech giants, the only
exception being the sheer scale (and that is itself perhaps
problematic).
</p>
</div>
</div>

<div id="outline-container-org3f796a0" class="outline-2">
<h2 id="org3f796a0">Capital Union</h2>
<div class="outline-text-2" id="text-org3f796a0">
<p>
This has been discussed <i>ad nauseam</i>, but it bears repeating. The
European Union needs a systematic banking and capital markets
reform. This would allow startups to raise capital in Europe without
moving to Silicon Valley.
</p>

<p>
Here in Sweden we are quite proud of what we see as an innovative and
digital culture and economy, spawning things like Spotify, Minecraft,
and Skype. But all of these have moved to the <span class="small-caps">usa</span> in some capacity<sup><a id="fnr.6" class="footref" href="#fn.6" role="doc-backlink">6</a></sup>.
That the American financial system is so dominant is of course a
given, and we should therefore expect European companies to make use
of this to raise additional capital — but Europe also needs to more
effectively make use of the resources in its possession.
</p>

<p>
A deeper union for banking (perhaps paired with some form of combined
European debt) would allow for better coördinated form of
spending. This appears to be to be the biggest initial problem for
European startups, a problem that right now is only solved by moving
to the United States of America.
</p>
</div>
</div>

<div id="outline-container-org735712a" class="outline-2">
<h2 id="org735712a">Infrastructure</h2>
<div class="outline-text-2" id="text-org735712a">
<p>
Data centres do not matter. That is an exaggeration of course, but
investing more in data centres will not create a tech industry. They
employ very few people following their construction, and can be used
remotely from anywhere on the planet. A tech startup will not decide
where to relocate to depending on whether or not they get slightly
lower ping<sup><a id="fnr.7" class="footref" href="#fn.7" role="doc-backlink">7</a></sup>. They will be located where they can get skilled staff,
attract investment, and carry out their work effectively. There is no
reason that this can not be in the European Union.
</p>

<p>
Data centres are still necessary, but constructing them does
not drive innovation (except <a href="https://gwern.net/scaling-hypothesis">seemingly in <span class="small-caps">ai</span></a>). The state should be
more focused on funding research and enabling innovative companies to
actually enter the market rather than building infrastructure that
will be used by American tech companies instead.
</p>

<p>
The entire point of the internet is to be able to separate computing
from where it is needed and used. Data centres allow devices at the
edge (laptops, smartphones, <i>et cetera</i>) to perform feats of computation
that would otherwise be too slow — like running <span class="small-caps">llm</span>s<sup><a id="fnr.8" class="footref" href="#fn.8" role="doc-backlink">8</a></sup>. Having
domestic data centre capacity is not critical for building a tech
industry, you can just rent capacity in northern Virginia if you
really need it. Building local data centres is then only a good idea
if demand holds steady, and even if that is the case they still need
to be refitted with newer, faster computers every so often.
</p>

<p>
This calculation looks different for China however. They are actively
hostile to the <span class="small-caps">us</span> and therefore need to attain their own data centre
capacity in case they come into armed conflict over Formosa. While
America has shown its inability to be trusted in recent times, I still
believe that the American tech lobby is strong enough to maintain
European market access for the foreseeable future. The European market
is simply too alluring for those companies to avoid.
</p>
</div>
</div>

<div id="outline-container-org370cb39" class="outline-2">
<h2 id="org370cb39">A European Stack</h2>
<div class="outline-text-2" id="text-org370cb39">
<p>
Recently there has been increasing talks of tech stacks and the of the
costs and advantages of building our own compared to using a
preëxisting one. Tech stacks are sets of software (and/or hardware)
that can be deployed in combination with each other. Most famous of
these is perhaps the <a href="https://en.wikipedia.org/wiki/LAMP_(software_bundle)"><span class="small-caps">lamp</span></a> stack (Linux, Apache, My<span class="small-caps">sql</span>/Mongo<span class="small-caps">db</span>,
Perl/<span class="small-caps">php</span>/Python) using free (<a href="https://www.gnu.org/philosophy/free-sw.en.html">as in freedom</a>) software to serve websites
or applications. A newer example might be the use of Nvidia <span class="small-caps">ai</span> chips
running <a href="https://github.com/pytorch/pytorch">pytorch</a> written in <code>cuda</code>. We all stands on the shoulders of
giants, and it is needless to reinvent the wheel for all of your
infrastructure.
</p>

<p>
A <a href="https://www.ceps.eu/ceps-publications/eurostack-a-european-alternative-for-digital-sovereignty/">recent report</a> from the Centre for European Policy Studies has
broadened this perspective to the entire supply chain for digital
services, all the way from the end-user application to the physical
materials used in the manufacturing of the integrated circuits
themselves. The proposal is that all of this (or at least a
significant portion) should be supplied by <span class="small-caps">eu</span> institutions is not only
protectionist to an absurd degree, it is unrealistic. Attaining
digital sovereignty should not mean abandoning non-<span class="small-caps">eu</span> digital
solutions entirely, and any attempt at doing so will likely fail.
</p>

<p>
Instead Europe should do what has been proven to work, to rid itself
of proprietary solutions that exert control over their users
(regardless of if they are the American government or a Lithuanian
small business). Europe is already strong in this regard; The Linux
kernel was first developed in Helsinki and is today developed
globally. The World Wide Web (<span class="small-caps">www</span>) was developed at the pan-European
<a href="https://home.cern/"><span class="small-caps">cern</span></a>. 
</p>

<p>
Free software is not just a part of building European technology, it
is the only path forward. Supporting initiatives such as <a href="https://en.wikipedia.org/wiki/RISC-V"><span class="small-caps">risc-v</span></a> is a
good idea, but it is still problematic if European companies build
proprietary systems on top of those free solutions, like Nvidia has
done with its <code>cuda</code>.
</p>

<p>
Building <span class="small-caps">ai</span> has not made much money so far, but I do not believe it
will in the future either — just as being an internet-service provider
is not hugely profitable (but not loss-making either). Open models
have shown how <span class="small-caps">llm</span>s are almost fungible in practice; Switching models
can be done quickly and quite easily. <a href="https://semianalysis.com/2023/05/04/google-we-have-no-moat-and-neither/"><span class="small-caps">ai</span> labs have no
&ldquo;moat&rdquo;</a>. Instead the money is likely to be made by those who can
effectively apply <span class="small-caps">llm</span>s to new industries and applications. While
Open<span class="small-caps">ai</span> has generally performed best out of all the major model
providers competitors are usually not far behind. Why use one
company&rsquo;s model when you can get 90% of the performance for a far
lower price?<sup><a id="fnr.9" class="footref" href="#fn.9" role="doc-backlink">9</a></sup>
</p>

<p>
The debate surrounding Chinese electric vehicles and the risks that
they may pose due to their highly interconnected nature<sup><a id="fnr.10" class="footref" href="#fn.10" role="doc-backlink">10</a></sup> touches on
similar topics. The debate centres on if a dependence on Chinese
carmakers&rsquo; software will allow them to &ldquo;take control&rdquo; of transport in
a crisis — especially with the developments in self-driving. But this
misses the point entirely. That we can not trust our methods of
transportation is not a problem with the author of the software, it is
with the modes of control themselves. Cars (and the software running
other critical services) <i>needs</i> to be open to introspection, control,
and modification in order to create a resilient society. This is the
case for Chinese, American, and even European auto
manufacturers. Talking about if we can trust China is like talking
about if we can trust the person holding a gun to our heads not to
shoot — when the real problem is how to get rid of the gun (and not
who to replace the person holding it).
</p>

<p>
At the Swedish Defence University — perhaps one of the places you
would most likely expect technological independence to play a major
role — we are still (and increasingly) reliant on Microsoft software.
Switching to free and open alternatives (that are likely <a href="https://karl-voit.at/2024/07/17/Microsoft-compromised/">significantly</a>
more secure) should be easy, there is just a lack of urgency
surrounding switching to alternatives that would improve European
sovereignty.
</p>

<p>
Adopting free software is also a good approach in that it does not
antagonise the <span class="small-caps">us</span>, and in allows us to make use of their talent and
infrastructure, and in return improves their position. Building a
libre stack is inherently not a protectionist choice, it is a
democratic one that improves the well being of all peoples.
</p>
</div>
</div>

<div id="outline-container-org10d363d" class="outline-2">
<h2 id="org10d363d">Conclusion</h2>
<div class="outline-text-2" id="text-org10d363d">
<p>
Benjamin Bratton <a href="https://www.noemamag.com/is-european-ai-a-lost-cause-not-necessarily/">says</a> that while Europe needs to build its own stack
to achieve sovereignty, it can not rely on free software because it is
&ldquo;anti-sovereign&rdquo;. But this is exactly what Europe needs. To crush the
hearts of European federalists everywhere: Europe is not a state. It
can not rely on solutions that allow other states to pressure each
other. This is the reason that <span class="small-caps">eu</span> countries are limited in their
ability to orchestrate industrial policy. The solution is not merely
to move this decision-making to the <span class="small-caps">eu</span>-level. Instead Europe <i>needs</i>
anti-sovereign solutions, because they work in the same spirit of
European coöperation and integration as the <span class="small-caps">eu</span> itself.
</p>

<p>
Much like Europe itself free software is subject to intense debate on
what it actually is, comes from a wide breadth of different places and
people, sometimes has issues with coming up with unified plan, and yet
is responsible for some of the most important improvements in recent
history. What could be more fitting than for a European tech stack to
reject a centralised form of industrial policy and instead adopt a
form of technology that prioritises freedom, efficiency, and
diversity? <i>In varietate concordia</i>. ❦
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
&ldquo;Tech&rdquo; here is narrowed to computer software development, design,
and digital technologies more broadly. Things like Airbus, Siemens,
and Zeiss — while technologically advanced — are seemingly not
included in this definition.
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Google analytics, one of Google&rsquo;s most central products allowing
for massive user data collection, quite blatantly disregards <span class="small-caps">gdpr</span> for
example.
</p></div></div>

<div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
This may be because startups generally are so experimental and
early-stage that worrying about legislation is not of importance,
instead merely getting the product to work is the priority.
</p></div></div>

<div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Facebook was initially coded by just Zuckerberg himself, and then
with four other people. The amount of benefit each additional
programmer adds likely follows a sharp logarithmic curve, with most
people working on the Facebook service today likely trying to make
small incremental improvements to algorithms.
</p></div></div>

<div class="footdef"><sup><a id="fn.5" class="footnum" href="#fnr.5" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
I usually dislike the term content creator since it degrades
artists, journalists <i>et cetera</i> to people who merely create &ldquo;the stuff
that goes between the advertisements&rdquo; but in this context that is
exactly what I am referring to.
</p></div></div>

<div class="footdef"><sup><a id="fn.6" class="footnum" href="#fnr.6" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Spotify is listed on the New York Stock Exchange (but
headquartered in Stockholm). Minecraft was bought by Microsoft in 2014
(just three years after its full release). Skype was bought by ebay,
then a group of mostly American companies, and finally by Microsoft
before being <del>killed</del> superseded by Microsoft Teams.
</p></div></div>

<div class="footdef"><sup><a id="fn.7" class="footnum" href="#fnr.7" role="doc-backlink">7</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
There are niche fields like <a href="https://en.wikipedia.org/wiki/High-frequency_trading"><span class="small-caps">hft</span></a> that do rely on low latencies, but
in those cases it is more important to be located close to financial
centres — and there is still no need for the software development
itself to be located in the same place as where the software is
running.
</p></div></div>

<div class="footdef"><sup><a id="fn.8" class="footnum" href="#fnr.8" role="doc-backlink">8</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Smartphones can actually run small <span class="small-caps">llm</span>s these days but they still
have trouble with larger models. Being able to quickly write a query
to <span class="small-caps">gpt-5</span> on the subway and quickly get a response is only possible by
using an external server.
</p></div></div>

<div class="footdef"><sup><a id="fn.9" class="footnum" href="#fnr.9" role="doc-backlink">9</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<span class="small-caps">llm</span>s are actually becoming <a href="https://www.snellman.net/blog/archive/2025-06-02-llms-are-cheap/">very cheap</a> already, perhaps partly from
this intense competition.
</p></div></div>

<div class="footdef"><sup><a id="fn.10" class="footnum" href="#fnr.10" role="doc-backlink">10</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
This interconnectedness is not unique to <span class="small-caps">ev</span>s. Modern cars, even
combustion engine ones, are highly computerised connected to the open
internet to both provide continual software updates as well as to
provide services. It is also not unique to Chinese carmakers — Tesla
cars are not allowed on the grounds of Swedish military facilities for
example.
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[technology]]></category>
  <category><![CDATA[politics]]></category>
  <link>https://joarvarndt.se/european-tech.html</link>
  <guid>https://joarvarndt.se/european-tech.html</guid>
  <pubDate>Tue, 07 Oct 2025 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Land Value in the Digital Realm]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<nav id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#orgda0a207">What is the value of land?</a></li>
<li><a href="#org42680a4">What is digital land?</a></li>
<li><a href="#orga1f77ee">Taxing Digital Land</a></li>
<li><a href="#org7915193">Downsides</a></li>
</ul>
</div>
</nav>

<div id="outline-container-orgda0a207" class="outline-2">
<h2 id="orgda0a207">What is the value of land?</h2>
<div class="outline-text-2" id="text-orgda0a207">
<p class="dcap">
Adam Smith divides the economic forces into three areas for, the profit obtained from labour, that from capital (or stock), and that obtained from land. The value extracted from land is here the natural resources of the earth, the sunshine and rain that lands there (allowing for agriculture), the timber that can be cut down, or the ore to be mined. But there is another value that can be obtained from the land. In the movie <i>Up</i> (2009) the protagonist Carl Fredricksen refuses to let his villa be demolished despite the large amount of development occurring around him. Since he owns the land that the house is built on, the construction companies can not develop it, even as it is surrounded by soon-to-be skyscrapers. Mr Fredricksen is offered &ldquo;twice [as much as the] last offer&rdquo;, showcasing the value of the land. But Mr Fredricksen has not exploited the land at all, he has simply continued living in his house as the area was developed. So where has this value come from? It has come from the labour and capital of others, in its proximity to services provided by the rest of society. This is the observation made by Henry George, one of the great (but quite overlooked) economists of the 19th century. The value of land is then partly the natural resources in and on the land, but the value of the land is also a social construction originating from how much the rest of society wishes to make use of that land.
</p>

<p>
When American settler colonialism spread over the North American continent, the <span class="small-caps">us</span> government gave out the lands settled for free. This perhaps sounds like an amazing deal today, but it is easy to overlook the fact that the value of the land was perhaps zero, or at least close to it. It had no significant infrastructure present, was located far away from centers of industry and trade, and was surrounded by a hostile nomadic population. And yet today the value of land in the Las Vegas Strip, built in the close-to uninhabitable Mojave desert, is extremely high simply due to the amount of wealth and development in Las Vegas.
</p>
</div>
</div>

<div id="outline-container-org42680a4" class="outline-2">
<h2 id="org42680a4">What is digital land?</h2>
<div class="outline-text-2" id="text-org42680a4">
<p>
Digital land is however practically infinite. Much like the vast expanse of the empty American continent, it is mostly worthless, with a few islands of &ldquo;civilisation&rdquo;. The most obvious example of this are domain names. <a href="https://google.com">google.com</a> may be the most valuable domain name right now, but it does not obtain its value from any innate quality, but merely from the service that is running when one connects to that domain. <a href="https://gooåle.com">gooåle.com</a> does not have any value, despite being &ldquo;close&rdquo; to <code>google.com</code>. Short domain names, like the (in)famous <a href="https://x.com">x.com</a> or the more wholesome <a href="https://x.org">x.org</a> are by some measures valuable due to their rarity<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>, but many very short domain names are still very cheap. Something that makes a bigger difference is if the domain is a word in any language, or an acronym for a series of words (although it turns out many of these are also <a href="https://gwern.net/tla">unused</a>). That domain names that are words are more valuable makes clear that their value is of a social nature; had the names and words been different we would expect different domain names to be valuable. To summarise, the value of a domain name <i>mostly</i> originates from what is built on it, not any innate quality, just as the value of land originates <i>mostly</i> from where it is relative to other valuable land.
</p>

<p>
But this observation is not limited to domain names, but also to many other digital things. Facebook does not derive its value from its <span class="small-caps">ui</span> or its ability for targeted advertisement, but rather from its active userbase. The conceptual location of <i>Facebook</i> derives its value from the fact that there are many other users there to interact with. This is likely not too surprising for many readers, who may have even tried to ditch Facebook specifically (or thought about doing so) but given up due to the fact that &ldquo;everyone else is on there&rdquo;. In economics, this is called a <a href="https://en.wikipedia.org/wiki/Network_effect">network effect</a>, where the more people use a service, the more useful it becomes. But this is not always beneficial to the consumer. When a service has obtained enough market share, it becomes impossible for the user to change to a different provider, as the dominant player absorbs all new users with it&rsquo;s huge network effects, causing an enourmous collective action problem with thosands, if not millions, of individual actors. This inability to switch means that the dominant player can extract extra costs on to the consumer, either via directly raising prices or through indirectly exposing them to more and more advertisement. This is in effect a tax on the consumer, not connected to the costs of costs of providing a service, but instead a mere increase in the share of profit. It may not be immideatly clear, but much (if not all) of this applies to land too. As we have already established, land too derives its value from the fact that other people are using it, or at least people nearby. But what we have not covered is the fact that controlling land that is in demand — land in cities especially — allows the owner to charge exorbitant prices to those who wish to make use of it. You can rent out a plot of land in the middle of Manhattan for much more than you could a similarly sized plot in the Libyan desert, for example. If there were two identical hotels in each of those places, the prices I could charge would both differ. There would of course be running costs that would be incorporated into the price, and the price in the desert may even be higher, but the share of profit I could take from the one located in New York is far greater. This is because my customers are not only paying for the services of the hotel — the food, the maintenence of the building, paying the staff — but also for the labour and investment of all the people surrounding the hotel, for which I do not have to pay anything at all. This is how digital services expose their quality as land, as a digital space where the labour of others is used to extract an artifically high profit without a proportionatley high amount of investment or work.
</p>
</div>
</div>

<div id="outline-container-orga1f77ee" class="outline-2">
<h2 id="orga1f77ee">Taxing Digital Land</h2>
<div class="outline-text-2" id="text-orga1f77ee">
<p>
No human being created land, and so no one has claim to it originally. In <i>Das Kapital</i>, Marx, as part of his reasoning behind <a href="https://en.wikipedia.org/wiki/Primitive_accumulation_of_capital">primitive accumulation</a>, describes how the origin of land and wealth ownership is where &ldquo;conquest, enslavement, robbery, murder, briefly force, play the great part&rdquo;. Henry George concurs, saying that
</p>

<blockquote>
<p>
Historically, as ethically, private property in land is robbery. It nowhere springs from contract; it can nowhere be traced to perceptions of justice or expediency; it has everywhere had its birth in war and conquest, and in the selfish use which the cunning have made of superstition and law.
</p>
</blockquote>

<p>
It is then morally unjust <i>not</i> to tax the increased value granted to land by the rest of society. But digital land is in this quality not the same, it <i>was</i> created by man, and there is no deeply ingrained story of murder and robbery within it. Is it then simply the case that the rent earned on the network effects of digital communication is the reward earned by those early movers who dared to risk their money and time? The answer is no. Obviously the entreprenours starting these companies should recieve a financial return on their investments, and it may be the case that they are dominant in their sector simply due to being the best, but they are not responsible for the returns owing to network effects. Companies should then be taxed for the value of these effects, since the users are those responsible for creating this value in the first place. Some major tech companies have repedetly threatened to stop offering their services in the European Union after certain law proposals like the <span class="small-caps">gdpr</span>, but have chickened out at doing so. This is because their profit originates from those users, and their ability to not only use them to create the very value of their digital land, but at the same time to extract rent from our digital neighbours&rsquo; prescence there.
</p>

<p>
This system of taxation is called a land value tax (<span class="small-caps">lvt</span>), a tax on the underlying value of the land, excluding any buildings or improvements to it. This has many benefits, such as the ethical merit of returning the stolen money to those who deserve it, improving economic growth by not hurting developers of land (like a property tax does), and allowing people to live where they want to live by giving workers a larger share of the value they produce. But one massive benefit is the ease of collection. Taxes on general wealth are famously difficult to collect, as money is easy to move around or deny possesion of. But land is far more difficult. A plot of land with a given value should return a set amount of money, or else be seized by the state and sold. Who owns it doesn&rsquo;t matter, and denying ownership doesn&rsquo;t prevent losing it. Land can not be moved to a tax haven overseas or hidden away, it is not difficult to determine what tax jurisdiction it is present in. But digital land does not exist in <i>any</i> tax jurisdiction, it is a purely anational concept that trancends the nation state. So who should determine the tax, and to whom does it belong? Who should collect the tax is comparativley easy, the country where users are present. A German-focused website should not pay any taxes to the Indian government, and an internationally used service (like Facebook) should pay taxes the each jurisdiction corresponding to its share of users. But how do we avoid the costs of these taxes merely being passed on to the consumer while companies retain their higher profit margins? We weight the tax according to a service&rsquo; market share in each sector, meaning that companies with a higher market share would have to pay a larger share of the tax<sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup>, creating an incentive for dominant players to let competitors survive and comptete, like what Microsoft did with Apple. This means that as companies grow more and more dominant, they become less and less profitable, meaning they become less attractive to investors and fostering competition and innovation in a more free market.
</p>
</div>
</div>

<div id="outline-container-org7915193" class="outline-2">
<h2 id="org7915193">Downsides</h2>
<div class="outline-text-2" id="text-org7915193">
<p>
This is not a perfect solution. An <span class="small-caps">lvt</span> is by comparison far more elegant, and is less liable to loopholes. One large issue I see with this is the ability for companies to simply split their services under one conglomorate, with a cartel dividing up the market between themselves so-as to reduce taxes while maintaining control. Ideally this splitting up would be combined with a split in technologies, creative control, and profits — incentivizing diversity in the market. It is also hard to apply to other forms of digital land that don&rsquo;t have an easy-to-split-up market share, like cryptocurrencies or <span class="small-caps">nft</span>s. I am thinking about these subjects continously, so do reach out if you have any solutions or other ideas.
</p>

<p>
The implementation is also perhaps more formulated as a response to digital rent-seeking as a whole, rather than a system to reduce rent-seeking in collective digitial spheres entierly. What is and isn&rsquo;t income is also up for debate, and the fundamental issue of increased regulation over data collection (in this case over user numbers, return per user, and origin) is not just a slippery slope and problematic in-and-of-itself, but is also contradictory to the Lasseiz-Faire evolution of the digital realm that has facilitated its construction. 
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
This is made worse by the fact that only three single-character <code>.com</code> domains are still available (that being <a href="https://q.com">q.com</a>, <a href="https://x.com">x.com</a>, and <a href="https://z.com">z.com</a>), the rest being held by <span class="small-caps">iana</span>.
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
This could follow a very simple polynomial like \(x^n, 0 \leq x \leq 1\) , with the -axis representing the market share, and the y-axis being the total taxable income of a given sector. Under this paradigm companies would pay close to nothing with a small market share, but one big company with 80% would pay enourmously.
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[technology]]></category>
  <link>https://joarvarndt.se/DigitalLand.html</link>
  <guid>https://joarvarndt.se/DigitalLand.html</guid>
  <pubDate>Wed, 06 Aug 2025 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Common lisp and Github workflows]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<nav id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org85254cb">Dynamically updating Github profile</a></li>
<li><a href="#org84ddeed">Creating the <span class="small-caps">readme</span></a></li>
<li><a href="#org61f701e">Using Github workflows</a></li>
<li><a href="#org98b584e">Conclusion</a></li>
</ul>
</div>
</nav>

<div id="outline-container-org85254cb" class="outline-2">
<h2 id="org85254cb">Dynamically updating Github profile</h2>
<div class="outline-text-2" id="text-org85254cb">

<figure id="org57535db">
<img src="./github-profile-banner.png" alt="github-profile-banner.png">

</figure>

<p class="dcap">
Github has a functionality where the <code>README</code> file in a repository with
the same name as your username will be displayed on your
profile. Since I am a fan of the <a href="https://indieweb.org/POSSE">indieweb&rsquo;s</a> <span class="small-caps">posse</span><sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup> practice, I&rsquo;d
like to use that space to advertise the writings on this website.
</p>

<p>
Other than merely linking to it as a handle I can write a short
program that dynamically updates the profile to include what my most
recent posts are. This also gives me an opportunity to write another
program in <a href="https://lisp-lang.org/">lisp</a>, something that always brings me joy.
</p>
</div>
</div>

<div id="outline-container-org84ddeed" class="outline-2">
<h2 id="org84ddeed">Creating the <span class="small-caps">readme</span></h2>
<div class="outline-text-2" id="text-org84ddeed">
<p>
First we must create the actual <code>README</code> file that will be
displayed. For this we create a short program in common lisp. The
result should be a file named <code>README.org</code><sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup> with a short biographical
text followed by the X most recent blog posts (I chose 3 arbitrarily).
</p>

<p>
First we fetch the <code>drakma</code> and <code>xmls</code> packages from quicklisp, the only
two dependencies. We also create global variables that hold the link
to the <span class="small-caps">rss</span> feed being fetched, the permanent contents of the <code>README</code>,
and the number of posts to display.
</p>

<div class="org-src-container">
<pre class="src src-lisp">(ql:quickload '(<span class="org-builtin">:drakma</span> <span class="org-builtin">:xmls</span>))

(<span class="org-keyword">defvar</span> <span class="org-variable-name">*rss-url*</span> <span class="org-string">"https://joarvarndt.se/rss.xml"</span>)

(<span class="org-keyword">defvar</span> <span class="org-variable-name">*template*</span> <span class="org-string">"I am a university student currently studying political science
at the Swedish Defence University. I am interested in Lisp-languages, GNU Emacs,
Free software, political economy, and the philosophy of life in an
increasingly technical world.

Here are some recent blog posts of mine:
"</span>)

(<span class="org-keyword">defvar</span> <span class="org-variable-name">*article-count*</span> 3)
</pre>
</div>

<p>
Then we write a function that will find the titles of the three (or
any other number) most recent entries in the <span class="small-caps">url</span> of the <span class="small-caps">rss</span> feed
supplied. Each entry is formatted as a associated list (alist) with
the first element being the title of the post, and the second being
the link to it.
</p>

<div class="org-src-container">
<pre class="src src-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">fetch-recent-articles</span> (url <span class="org-type">&amp;optional</span> (count 3))
  <span class="org-doc">"Fetch the COUNT (default 3) most recent RSS feed entries from URL and return an
alist
mapping title to link for each article."</span>
  (<span class="org-keyword">let*</span> ((response (drakma:http-request url))
         (xml-string (octets-to-string response))
         doc channel items)
    (setf doc (xmls:parse xml-string))
    (setf channel (first (xmls:xmlrep-find-child-tags <span class="org-string">"channel"</span> doc)))
    (setf items (xmls:xmlrep-find-child-tags <span class="org-string">"item"</span> channel))
    (<span class="org-keyword">loop</span> for item in (subseq items 0 (min count (length items)))
          for title-node = (xmls:xmlrep-find-child-tag <span class="org-string">"title"</span> item)
          for link-node  = (xmls:xmlrep-find-child-tag <span class="org-string">"link"</span> item)
          for title = (xmls:xmlrep-string-child title-node)
          for link  = (xmls:xmlrep-string-child link-node)
          collect (cons title link))))
</pre>
</div>

<p>
The titles are then formatted to a bullet list of org-mode titles and
inserted after the contents of the template. The contents are then
written to the <code>README.org</code> file, creating it if it doesn&rsquo;t exist.
</p>

<div class="org-src-container">
<pre class="src src-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">format-org-links</span> (articles)
  <span class="org-doc">"Expects an alist of article titles and their links, and outputs
a list of strings formatted as org-mode links."</span>
  (mapcar (<span class="org-keyword">lambda</span> (pair)
            (<span class="org-keyword">let</span> ((title (car pair))
                  (link (cdr pair)))
              (format t <span class="org-string">"- [[~a][~a]]"</span> link title)
              (format nil <span class="org-string">"- [[~a][~a]]"</span> link title)))
          articles))

(<span class="org-keyword">defun</span> <span class="org-function-name">fill-in-template</span> (template links)
  <span class="org-doc">"Adds the list of LINKS to the end of TEMPLATE.
LINKS should be a list of org-mode link strings.
Returns the final string."</span>
  (format nil <span class="org-string">"~a~%~{~a~^~%~}"</span> template links))

(<span class="org-keyword">defun</span> <span class="org-function-name">write-to-file</span> (text)
  (<span class="org-keyword">with-open-file</span> (str <span class="org-string">"./README.org"</span>
                       <span class="org-builtin">:direction</span> <span class="org-builtin">:output</span>
                       <span class="org-builtin">:if-exists</span> <span class="org-builtin">:supersede</span>
                       <span class="org-builtin">:if-does-not-exist</span> <span class="org-builtin">:create</span>)
    (format str text)))
</pre>
</div>

<p>
Finally, this is all carried out in a <code>main</code> function, with the fetched
results being printed beforehand.
</p>

<div class="org-src-container">
<pre class="src src-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">main</span> ()
  (<span class="org-keyword">let</span> ((recent-articles (fetch-recent-articles
                          *rss-url*
                          *article-count*)))
    (format t <span class="org-string">"Recent article list: ~% ~A ~%"</span> recent-articles)
    (write-to-file (fill-in-template *template*
                                     (format-org-links recent-articles)))))

(main)
</pre>
</div>
</div>
</div>

<div id="outline-container-org61f701e" class="outline-2">
<h2 id="org61f701e">Using Github workflows</h2>
<div class="outline-text-2" id="text-org61f701e">
<p>
This exercise also served to teach me to use Github&rsquo;s &ldquo;workflow&rdquo;
feature, a form of <a href="https://en.wikipedia.org/wiki/Continuous_deployment">continous deployment</a>. This way I also don&rsquo;t have to
maintain any hardware to constantly monitor the status of the blog
posts.
</p>

<p>
First we give github write permissions to the repo and tell it to run
the workflow twice a day and whenever I push to main (this was useful
for troubleshooting).
</p>

<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">name</span>: Update Github Blog list

<span class="org-constant">on</span>:
  <span class="org-variable-name">push</span>:
    <span class="org-variable-name">branches</span>: [main]
  <span class="org-variable-name">pull_request</span>:
    <span class="org-variable-name">branches</span>: [main]
  <span class="org-variable-name">schedule</span>:
    - <span class="org-variable-name">cron</span>: <span class="org-string">"0 */12 * * *"</span>

<span class="org-variable-name">permissions</span>:
  <span class="org-variable-name">contents</span>: write
</pre>
</div>

<p>
Since this will always be a fresh machine we need to make sure that
<span class="small-caps">sbcl</span> (Steel Bank Common Lisp) as well as the necessary dependencies
are installed. This will also install <a href="https://www.quicklisp.org/beta/">Quicklisp</a>, a package manager for
common lisp libraries. Quicklisp usually requires you to confirm that
it should add itself to the <span class="small-caps">sbcl</span> init file, but since this is an
automated workflow we have to wrap <code>(ql:add-to-init-file)</code> in the
<code>(ql-util:without-promting)</code> macro.
</p>

<p>
Installing <span class="small-caps">sbcl</span> accounts for the vast majority of the runtime, with
installing <code>drakma</code> and <code>xmls</code> as the two smaller steps. Actually running
<code>main.lisp</code> is almost instant.
</p>

<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">jobs</span>:
  <span class="org-variable-name">run-app</span>:
    <span class="org-variable-name">runs-on</span>: ubuntu-latest
    <span class="org-variable-name">steps</span>:
      - <span class="org-variable-name">name</span>: Checkout repository
        <span class="org-variable-name">uses</span>: actions/checkout@v4

      - <span class="org-variable-name">name</span>: Install sbcl
        <span class="org-variable-name">run</span>: sudo apt-get update &amp;&amp; sudo apt-get install -y sbcl

      - <span class="org-variable-name">name</span>: Install Quicklisp
        <span class="org-variable-name">run</span>: |
          <span class="org-string">curl -O https://beta.quicklisp.org/quicklisp.lisp</span>
<span class="org-string">          sbcl --noinform --non-interactive \
               --load quicklisp.lisp \
               --eval '(quicklisp-quickstart:install)' \
               --eval '(ql-util:without-prompting (ql:add-to-init-file))' \
               --quit
               
</span>      - <span class="org-variable-name">name</span>: Install Dependencies
        <span class="org-variable-name">run</span>: |
          <span class="org-string">sbcl --noinform --non-interactive \</span>
<span class="org-string">               --eval '(ql:quickload "drakma")' \
               --eval '(ql:quickload "xmls")' \
               --quit</span>
</pre>
</div>

<p>
It then runs the common lisp application we wrote earlier and
configures git. If <code>git diff</code> doesn&rsquo;t detect any changes to the <code>README</code>
it will finish successfully, otherwise the workflow will itself update
the repository and push the changes to Github, displaying the changes
publicly.
</p>

<div class="org-src-container">
<pre class="src src-yaml">      - <span class="org-variable-name">name</span>: Update README
        <span class="org-variable-name">run</span>: |
          <span class="org-string">sbcl --load ~/.sbclrc --script main.lisp</span>
<span class="org-string">          git config --local user.name "github-actions"
          git config --local user.email "github-actions@github.com"
</span>
      - <span class="org-variable-name">name</span>: Check for changes
        <span class="org-variable-name">id</span>: check_changes
        <span class="org-variable-name">run</span>: |
          <span class="org-string">git diff --quiet || echo "changed=true" &gt;&gt; $GITHUB_OUTPUT</span>
<span class="org-string">          
</span>      - <span class="org-variable-name">name</span>: Commit changes
        <span class="org-variable-name">if</span>: steps.check_changes.outputs.changed == <span class="org-string">'true'</span>
        <span class="org-variable-name">run</span>: |
          <span class="org-string">git add README.org</span>
<span class="org-string">          git commit -m "Update README with latest blogs"
          git push
</span>        <span class="org-variable-name">env</span>:
          <span class="org-variable-name">GITHUB_TOKEN</span>: ${{ secrets.GITHUB_TOKEN }}
</pre>
</div>
</div>
</div>

<div id="outline-container-org98b584e" class="outline-2">
<h2 id="org98b584e">Conclusion</h2>
<div class="outline-text-2" id="text-org98b584e">
<p>
I&rsquo;ve tried to make the code portable, so if you want to do the same
thing all you have to do is put this code in your own repository,
change the values of the global variables in <code>main.lisp</code> and it should
work. ❦
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Publish (on your) Own Site, Syndicate Elsewhere 
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
I of course prefer to use <a href="https://orgmode.org/">org mode</a> over markdown here, just to subtly
showcase my love for it publicly.
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[technology]]></category>
  <link>https://joarvarndt.se/cl-workflows.html</link>
  <guid>https://joarvarndt.se/cl-workflows.html</guid>
  <pubDate>Sun, 03 Aug 2025 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Deepseek is not a Chinese OpenAI: The Weakness of American AI Strategy]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle">The Weakness of American AI Strategy</h2>
<nav id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org40c668e">Introduction</a></li>
<li><a href="#org4f46ee2">The General Economic Environment of the Mainland</a></li>
<li><a href="#org6da3295">What is Deepseek?</a></li>
<li><a href="#org8709f29">The Risks of American <span class="small-caps">ai</span> Strategy</a></li>
<li><a href="#org0f4b592">Conclusion</a></li>
</ul>
</div>
</nav>
<div class="intro" id="org80d5184">
<p>
This is part of a series of posts written during or shortly after my
visits to the mainland of the People&rsquo;s Republic of China in the summer
of 2025.
</p>

</div>

<div id="outline-container-org40c668e" class="outline-2">
<h2 id="org40c668e">Introduction</h2>
<div class="outline-text-2" id="text-org40c668e">
<p class="dcap">
The thoughts underlying this thesis have been with me some time, and
have been slowly been crystallising more and more clearly as time goes
on and I realise that the rest of the world is seemingly diverging
more and more with my own thoughts on the subject. This is not a fully
formed proposal, and I will not attempt any detailed plan of
action. As always, it is instead an attempt to try and formulate my
own thinking on the subject, as well as to offer the reader a
perspective on the Chinese economic philosophy that is heavily
overlooked in the west. While informed by reading scholarly material
and following the ongoing discussion about China, it is prompted
mainly by my visit there and getting an idea of how the country
works. That idea may be incorrect, and so feel free to e-mail me your
thoughts on the subject.
</p>

<p>
In short, I am of the opinion that American and China are in a sort of
dialectical movement with each other, with America (and Europe)
wishing to copy the industrial strategy that it sees as having been
key to China&rsquo;s modernisation, and China simultaneously trying to
create a hyper-competitive environment that fosters innovation. I
think that the Chinese approach will succeed, and the western one will
not. America and Europe risks losing the dynamism and economic
resilience that free-market economics offers, while China encroaches
on the gap that we gained during the <i>great divergence</i>.
</p>
</div>
</div>

<div id="outline-container-org4f46ee2" class="outline-2">
<h2 id="org4f46ee2">The General Economic Environment of the Mainland</h2>
<div class="outline-text-2" id="text-org4f46ee2">
<p>
China is grossly misunderstood in the west. I do not claim to be a
Sinologist, but merely in my brief visits to the mainland I have
gained much insight that I do not believe most policymakers
have. First of all, the <span class="small-caps">prc</span> is not the Soviet Union. This might seem
obvious at first, but it is the viewpoint that I hear between the
lines of much literature on how to deal with China. Instead of vast
defence spending, it is industrial policy. The opponent is a vast
authoritarian system that efficiently the production of a continent to
those areas where it most serves the national interest. This straw man
is not a reality. The authoritarian government of the <span class="small-caps">prc</span> is its
greatest weakness, just as it was for the <span class="small-caps">ussr</span>, and for the Russian
Republic that succeeded it. But while both the Soviet and Chinese
communists ruled over oppressive regimes, the similarity mostly ends
there.
</p>

<p>
The ideological system of &ldquo;Socialism with Chinese Characteristics&rdquo; (中
国特色社会主义, <span class="small-caps">scc</span>) as straightforwardly viewed from a Marxist point
of view, is an attempt to create a system of pure capitalism as
quickly as possible. A broader, more holistic, and more radical form
of Lenin&rsquo;s <i>New Economic Policy</i> where the rural Soviet Union and <span class="small-caps">prc</span>
would both allow capitalist enterprise to grow, as long as it did so
under the auspices of the communist party. This is precisely the path
that societies follow according to orthodox Marxist theory (Feudalism
→ Capitalism → Socialism → Communism). In the west, Socialism with
Chinese Characteristics is instead commonly understood to be some sort
of attempt by the <span class="small-caps">ccp</span> to maintain a veneer of communist ideology while
in practice becoming a free-market dictatorship. This is also not the
case. The <span class="small-caps">ccp</span> is communist through and through, and <span class="small-caps">scc</span> is a genuine
attempt to achieve it. When spending time on the mainland, one is
struck by the sheer presence of the party, of the praise for workers,
of and of what seems to be authentic belief.
</p>

<p>
On the ground, there is a feeling of division between state control
and private enterprise. Roads are meticulously cleaned and
well-maintained, while at the same time lined by buildings almost
falling into disrepair. The state wishes that certain things, like the
power grid, should be fully controlled, but in other sectors the
private sector should be able to flourish freely. This schizophrenic
reality is that of <span class="small-caps">scc</span>, with certain industries — primarily related to
infrastructure — fully nationalised and others in an almost
Laissez-Faire environment.
</p>

<p>
To try and achieve socialism (and eventually communism) China must
unleash the free-market completely. The &ldquo;weariness&rdquo; of <i>big tech</i> that
the <span class="small-caps">ccp</span> is sometimes reported to hold is not just grounded in a fear
of large corporate interests clashing against the party, but is also
an attempt to genuinely increase competition and increase the freedom
of the market. Another example behind this might paradoxically be the
intervention that is most talked about, that being the production of
Electric Vehicles (<span class="small-caps">ev</span>s). Chinese <span class="small-caps">ev</span> subsides are not oriented toward
building &ldquo;national champions&rdquo; like the Export-oriented approaches
undertaken across the Yellow Sea in the Republic of Korea. Instead it
has tried to foster a breadth of <span class="small-caps">ev</span> producers that are now
aggressively undercutting each other, becoming internationally
competitive in the process.
</p>
</div>
</div>

<div id="outline-container-org6da3295" class="outline-2">
<h2 id="org6da3295">What is Deepseek?</h2>
<div class="outline-text-2" id="text-org6da3295">
<p>
In the beginning of <a href="https://ai-2027.com/"><span class="small-caps">ai</span> 2027</a>, a short story of rapid <span class="small-caps">ai</span> development<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>,
the leading Chinese <span class="small-caps">ai</span> company (collectively called DeepCent, a
portmanteau of Deepseek and Tencent) becomes the leader of a
nationalised and consolidated &ldquo;collective&rdquo;. Researchers and new
integrated circuits (<span class="small-caps">ic</span>s) are sent to a secure centralised facility
where <span class="small-caps">ai</span> development and strategy are carried out. This is a very
accurate view of how American and western strategists view China, as a
singular entity that makes unified decisions that are fully carried
out. But this is perhaps the exact opposite of reality. Instead the
rapid industrialisation of China has been due to thousands of
decisions made by comparatively low-level provincial officials and
below, all competing to look good in the eyes of higher-ups by growing
<span class="small-caps">gdp</span><sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup>. There has been no large change in <span class="small-caps">ccp</span> governance that would
suggest a different approach when it comes to <span class="small-caps">ai</span> development.
</p>

<p>
The authors of <span class="small-caps">ai</span> 2027 agree that there is no clear leading Chinese
company, and in a footnote they remark that:
</p>

<blockquote>
<p>
We consider DeepSeek, Tencent, Alibaba, and others to have strong <span class="small-caps">agi</span>
projects in China. To avoid singling out a specific one, our scenario
will follow a fictional &ldquo;DeepCent&rdquo;.
</p>
</blockquote>

<p>
But it is precisely this multifaceted competition that makes Chinese
<span class="small-caps">ai</span> development different from its American counterpart. The
competition between <span class="small-caps">ai</span> companies, all with extremely limiting compute
resources, forces Chinese firms to compete using talent — something
they will likely have more of in the foreseeable future due to what
will probably be decreased brain drain to the <span class="small-caps">us</span>.
</p>

<p>
The &ldquo;hawks in the <span class="small-caps">ccp</span>&rdquo; warning about <span class="small-caps">agi</span> do not exist, at least in the
same way they do in America. Instead, the Chinese leadership is
committed to using its dominance in manufacturing and infrastructure
development to expand in the field of &ldquo;<a href="https://www.chinatalk.media/p/embodied-ai-with-chinese-characteristics">Embodied <span class="small-caps">ai</span></a>&rdquo; (具身人工智能).
This approach requires numerous companies to make tailor-made <span class="small-caps">ai</span>
solutions for different industries and tasks, and therefore motivates
the opposite strategy from the centralised one that <span class="small-caps">ai</span> 2027
predicts. An example of this would be <span class="small-caps">zte</span>&rsquo;s ongoing application
merging drone use, 5G connectivity and <span class="small-caps">ai</span> to monitor things like the
maintenance requirements for infrastructure.
</p>

<p>
Xi Jinping himself, the paramount leader of the <span class="small-caps">prc</span>, seems quite keen
on <span class="small-caps">ai</span>, having ordered a 2025 &ldquo;study session&rdquo; (集体学习) on the subject
for the top <span class="small-caps">ccp</span> leadership. But he is old-fashioned, having gotten
into Tsingua University (China&rsquo;s top university) as a
worker-peasant-soldier student during the Cultural Revolution. He has
a greater interest in &ldquo;hard&rdquo; development like infrastructure; even in
<i>Made in China 2025</i>, the <span class="small-caps">ccp</span> plan to expand into higher value-add
manufacturing, it is specifically <i>manufacturing</i> that is the focus, not
the service economy or software developments — areas where <span class="small-caps">ai</span> makes
the biggest amount of sense. Chinese industrialisation through
state-led infrastructure initiatives has been incredibly successful,
and the <span class="small-caps">ccp</span> is much more likely to stick to what they know works (even
if it is with new fancy tools).
</p>

<p>
His <a href="https://perma.cc/5UBL-GCVG">study notes</a> from the aforementioned study session <i>does</i> mention a
need to &ldquo;concentrate forces&rdquo; (集中力量) on high-end <span class="small-caps">ic</span>s and
&ldquo;foundational&rdquo; software, but he also mentions creating an
&ldquo;enterprise-led industry-academia-research-user collaborative
innovation system&rdquo;, a far cry from a secret power plant/data center
under state control. It also mentions such things like &ldquo;Highlighting
applied directions&rdquo; (突出应用导向) and &ldquo;Helping traditional industry
reform and upgrade&rdquo; (助力传统产业改造升级). These things are in-line
with the ideas of <i>embodied <span class="small-caps">ai</span></i> more than they are a centralisation of
compute.
</p>

<p>
Deepseek also highlights the benefits of free and open-weight
models<sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup> that spur innovation. Free (as in freedom) models allow
widespread application of the model and adaptation to many more
applications. This allows for further feedback and is a
force-multiplier for a given model&rsquo;s dominance. The benefits of free
software are perhaps most easily realised by developers and engineers,
and is therefore overlooked by many analysts, but it is the reason
that the internet and digital technology is the way it is
today. Things like <span class="small-caps">ip</span>, <span class="small-caps">gnu</span>/Linux, and Pytorch were not chosen merely
by industry giants, but by individuals who wanted to use what was
easiest to <a href="https://stallman.org/articles/on-hacking.html">hack</a> on<sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup>. As an anonymous Google employee <a href="https://semianalysis.com/2023/05/04/google-we-have-no-moat-and-neither/">pointed out</a> in
2023, &ldquo;open source&rdquo; will likely overtake proprietary <span class="small-caps">ai</span>. The iteration
happening is too fast for any one company to compete with. Justin Wong
(an engineer at Moonshot, a frontier Chinese <span class="small-caps">ai</span> lab) <a href="https://www.chinatalk.media/p/kimi-k2-the-open-source-way">wrote</a> that:
</p>

<blockquote>
<p>
Open-sourcing allows us to leverage the power of the developer
community to improve the technical ecosystem. Within 24 hours of
release, the community had already implemented <span class="small-caps">k2</span> in <span class="small-caps">mlx</span>, with 4-bit
quantization and more — things we truly don&rsquo;t have the manpower to
accomplish ourselves at this stage.
</p>

<p>
But more importantly: open-sourcing means holding ourselves to a
higher technical standard, which in turn pushes us to build better
models — aligned with our goal of <span class="small-caps">agi</span>.
</p>

<p>
This might seem counterintuitive — if we&rsquo;re just releasing model
weights, why would that force the model to progress?
</p>

<p>
The logic is actually very simple: Open source means performance comes
first. You can no longer rely on superficial tricks or hack to dazzle
users. Anyone who gets the same weights should be able to easily
reproduce your performance — only then is it truly valid.
</p>
</blockquote>

<p>
Deepseek then is not a state-sponsored champion, but one of many
companies experimenting with <span class="small-caps">ai</span> development. This will likely
accelerate <span class="small-caps">ai</span> development, and force <span class="small-caps">ai</span> firms adopt shorter release
cycles and lower prices. The huge size of the Chinese market also
allows for increased experimentation and development, experimentation
that Western firms will not have access to. <span class="small-caps">r1</span>&rsquo;s free software nature
helps this further, by helping deploy <span class="small-caps">ai</span> in novel ways across the
Chinese economy faster than in America, also increasing
innovation. There is no large consolidation of the <span class="small-caps">ai</span> industry in the
<span class="small-caps">prc</span>.
</p>
</div>
</div>

<div id="outline-container-org8709f29" class="outline-2">
<h2 id="org8709f29">The Risks of American <span class="small-caps">ai</span> Strategy</h2>
<div class="outline-text-2" id="text-org8709f29">
<p>
American governance is in a unique place on the spectrum. Contrary to
the <span class="small-caps">prc</span>, there are enough checks and balances for the executive arm to
feel &ldquo;restrained&rdquo; by them, but it is still empowered enough to project
a significant amount of power. This seems like a worst-case scenario
to me — not enough power to take the seat as an &ldquo;enlightened despot&rdquo;,
but still enough to break things if you aren&rsquo;t careful. This is the
issue at the heart of American <span class="small-caps">ai</span> strategy. The bureaucracy does not
have the capacity to grasp the development of <span class="small-caps">ai</span>, but it feels it
necessary to intervene regardless.
</p>

<p>
When Deepseek&rsquo;s <i><span class="small-caps">r1</span></i> model was first publicly released, it was widely
reported as a &ldquo;Sputnik moment&rdquo;, as a wakeup-call to the American
government that it no longer held a decisive technological advantage
over its strategic rival. But this is an over-exaggeration. In 1957,
with the launch of Sputnik, the Soviets attained a technological
capability that the Americans did not posses <i>at all</i>, not merely a
level of parity. But one might argue that what Deepseek showed was
Chinese capability to do something, but to do it at a fraction of the
cost of American alternatives. But this is not exactly the case
either, as Semianalysis recently showed, Deepseek&rsquo;s low
price-per-token has not resulted in companies flocking to Deepseek,
but instead a slow decline in users, even as the overall market has
grown. This is because they have merely chosen to make certain
trade-offs to lower prices due to their compute-restrained nature,
rather than any underlying technical improvement.
</p>

<p>
This compute-restrained environment that Chinese firms find themselves
in is of course artificially created by American export-controls. As
is being increasingly argued, perhaps most prominently by Nvidia <span class="small-caps">ceo</span>
Jensen Huang, these export-controls might actually be <i>decreasing</i>
American power relative to China, by effectively tariffing American
<span class="small-caps">ic</span>s in the Chinese market, allowing domestic <span class="small-caps">ai</span>-chip manufacturers to
catch up with Nvidia, <span class="small-caps">tsmc</span>, and the non-Chinese semiconductor
manufacturing industry.
</p>

<p>
But what has not been discussed to the same degree is the risk that
not only does this environment hurt the long-term prospects for the
western-aligned <span class="small-caps">ic</span> industry, but it might also hurt American software
as well. As Deepseek alarmists claim, China has largely caught up in
the development of <span class="small-caps">llm</span>, or are at least very close behind. But they
have done so in a much less capital- and compute-rich environment. As
Sutton writes in <i>The Bitter Lesson</i>, most of the gains in <span class="small-caps">ai</span> research
have been due to increasing amounts of compute, and developments have
rather been in how to make use of more and more computational
resources, rather than in how to make use of it. Chinese development
seems to have changed this trend, if only very slightly. If we then
extrapolate Chinese <span class="small-caps">ai</span> so that it has the compute resources of Open<span class="small-caps">ai</span>,
would it not overtake Open<span class="small-caps">ai</span>?  There is a risk that, like the
Sardaukar and Fremen from Frank Herbert&rsquo;s <i>Dune</i>, we are helping Chinese
<span class="small-caps">ai</span> develop in a more hostile environment, while at the same time
supporting the development of a Chinese <span class="small-caps">ic</span> industry to support it in
the long-term.
</p>

<p>
Similarly, American strategy, lead both by private-sector and public
sector investment, risks &ldquo;putting too many eggs in one basket&rdquo;, that
basket being Open<span class="small-caps">ai</span>. 500 billion <span class="small-caps">usd</span>, the amount of money to be
invested in the <i>Stargate Project</i>, is a lot of money, likely more than
China is spending, so is it not important to get as much development
as possible out of it? If China is able to us its compute more
efficiently than the <span class="small-caps">us</span> and instead uses its money to bolster domestic
manufacturing further, especially in the field of integrated circuits,
it could undermine <span class="small-caps">us</span> national security. China&rsquo;s vibrant free-market
economy is a tremendous resource, exceeded only by that of the United
States. It would be a shame to destroy that lead.
</p>
</div>
</div>

<div id="outline-container-org0f4b592" class="outline-2">
<h2 id="org0f4b592">Conclusion</h2>
<div class="outline-text-2" id="text-org0f4b592">
<p>
China is a free-market economy, and it is committed to using the
strengths inherent in that system to its national advantage. The <span class="small-caps">prc</span>
leadership will try and use <span class="small-caps">ai</span> to upgrade preëxisting industry, and
will not engage in a rapid &ldquo;race to <span class="small-caps">agi</span>&rdquo;, beyond continuing attempts
to become a significant producer of integrated circuits. Its large
domestic market allows it to rapidly test new innovations, but so does
the vast American and (to some extent) European markets. While it the
<span class="small-caps">ccp</span> is increasingly grasping after interventionism, it still is trying
to remain committed to free enterprise.
</p>

<p>
The <span class="small-caps">us</span> and Europe must resist the impulse to bet big on national
champions, as (perhaps paradoxically to many) Deepseek shows. High
technology advancements should instead be facilitated through an
increase in basic research, ability for academia and free enterprise
to intermingle, and deep capital markets that can bet big on new,
innovative ideas. ❦
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<span class="small-caps">ai</span> 2027 seems to have <a href="https://titotal.substack.com/p/a-deep-critique-of-ai-2027s-bad-timeline">numerous problems</a> in predicting the rate of
<span class="small-caps">ai</span> development, but they are irrelevant here. The misunderstanding
made about Chinese <span class="small-caps">ai</span>, and China as a whole, are prevalent on all
sides of the debate, and are not exclusive to the point of view of the
authors of <span class="small-caps">ai</span> 2027. Reading <span class="small-caps">ai</span> 2027 when it was first published was
however one of the reasons for more concretely wanting to write this
counterargument.
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
This approach has had its downsides, and is perhaps the Achilles
heel of Chinese modernisation. See <a href="https://www.economist.com/china/2025/07/03/chinas-growth-targets-cause-headaches-even-when-met">this</a> recent article in <i>The
Economist</i> for an example.
</p></div></div>

<div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
The distinction between free software and &ldquo;open source&rdquo; software
that many don&rsquo;t care to distinguish is even more important here, as
free (as in freedom) <span class="small-caps">llm</span>s and open source ones are often both merely
called open source.
</p>

<p class="footpara">
Meta&rsquo;s Llama models are not free software, as they conflict with
Freedom 0 of the <i>Free software definition</i> (The freedom to run the
program as you wish, for any purpose) via clause 1 and 2. Clause 1
restricts use that is regarded as inappropriate according to the llama
<i>Acceptable Use Policy</i>, like &ldquo;violating the law and others&rsquo; rights&rdquo;,
&ldquo;misleading others&rdquo;, and &ldquo;[Engaging in] unlawful activity&rdquo;. While I
would not widely promote these activities, I can picture moments when
it would be ethical to use <span class="small-caps">ai</span> tools for them. Therefore, like with all
software, the only morally correct choice is to let the user decide
for themselves how they should be able to use the software on their
computer, as deepseek have done.
</p></div></div>

<div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
The fusion between individual and corporate interests in the
internet is difficult to divide. The modern web browser for example
was developed primarily by large corporate interests (like <span class="small-caps">sun</span>&rsquo;s
impact on javascript) but the web itself was built by individual
hackers.
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[technology]]></category>
  <category><![CDATA[china]]></category>
  <link>https://joarvarndt.se/deepseek.html</link>
  <guid>https://joarvarndt.se/deepseek.html</guid>
  <pubDate>Sun, 13 Jul 2025 00:00:00 +0200</pubDate>
</item>
<item>
  <title><![CDATA[Functional Life Without Side-Effects]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<nav id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org64eb376">Functions</a></li>
<li><a href="#orgc55d185">Side Effects</a></li>
<li><a href="#org02e6c39">Conclusion</a></li>
</ul>
</div>
</nav>
<hr>

<p class="dcap">
Programming languages (and their users) are often grouped into two
main intellectual schools of thought: Object-oriented programming
(<span class="small-caps">oop</span>) and functional programming. These two schools both claim to
offer ways to manage the increasing complexity that comes with the
development of larger and larger programs. Functional programming
states that this complexity can be managed by following these
principles:
</p>

<ol class="org-ol">
<li>Functions are first-class citizens.</li>
<li>Functions are deterministic.</li>
<li>Functions should not have side effects.</li>
<li>Data is immutable.</li>
</ol>

<p>
Not all of these are directly applicable to non-programming concepts,
but twisting them somewhat gives us an interesting perspective on how
do deal with complexity and chaos in our lives.
</p>

<div id="outline-container-org64eb376" class="outline-2">
<h2 id="org64eb376">Functions</h2>
<div class="outline-text-2" id="text-org64eb376">
<p>
In order to apply <i>functional</i> programming to our activities, we must
first endeavour to understand what a <i>function</i> is in this new
context. Strictly speaking a function transforms each element in the
set X into exactly one element in set Y. This is where the second
point listed earlier comes from, since each element in set X must
always output the same element (so no randomness).
</p>

<p>
A function must therefore <i>produce</i> something; it is not a activity
merely done for the sake of doing. Things like doomscrolling or verbal
communication are not functions, since they do not produce a tangible
output — even if they may impact you in some way.
</p>

<p>
In what activities do we produce things then? One obvious example is
cooking. Ingredients are combined or separated and should hopefully
come together to create the dish that you aimed for. This will not be
entirely deterministic since ingredients may be of a differing
quality, your tools may be different from time to time, and your own
skills as a chef means that you will inevitably make mistakes. In
reality — as opposed to the realm of mathematics and computer science
— the world will never be truly deterministic. But this does not mean
that we should surrender completely, instead we must aim toward
cooking a dish as we intended each and every time.
</p>
</div>
</div>

<div id="outline-container-orgc55d185" class="outline-2">
<h2 id="orgc55d185">Side Effects</h2>
<div class="outline-text-2" id="text-orgc55d185">
<p>
Another example where it is perhaps not imminently obvious that the
activity is functional is cleaning. It also highlights the aspect of
functional programming that is perhaps most famous, and is also
present in the act of cooking: side effects. Side effects are when a
given function not only transforms the input X into output Y, but also
modifies a third value. This impacts the global <i>state</i> and may mean
that the function, or any other function, behaves differently when run
in the future. When I vacuum my apartment I have to move furniture to
reach all of the nooks and crannies where dust settles. This means
that the function whose purpose is to rid the floor of dust causes the
side effect of moving my furniture. These side effects have to be
managed and dealt with quickly, and critically be seen as part of the
task itself.
</p>

<p>
It is easy to dismiss many side effects as something that can be dealt
with later, but this dramatically increases the mental effort
involved. Not only are you more familiar with the various items whose
position and status must be dealt with, but you are also already
performing the task, and so there is no &ldquo;startup&rdquo; cost involved with
dealing with it straight away. Staring at the dishes that need to be
done after a meal is an experience I expect most people to be familiar
with, but it can often times be avoided when they are seen as
inexirably linked to the task itself.
</p>
</div>
</div>

<div id="outline-container-org02e6c39" class="outline-2">
<h2 id="org02e6c39">Conclusion</h2>
<div class="outline-text-2" id="text-org02e6c39">
<p>
Life may never reach the pure determinism prized by functional
programming, but adopting its mindset allows us to manage the
increasing complexity of everyday life. By thinking of our actions as
functions we can try and deal with side-effects immidiately instead of
waiting for them to pile up over time, minimizing unwanted distortions
in our personal “global state”.
</p>
</div>
</div>

]]></description>
  <category><![CDATA[technology]]></category>
  <category><![CDATA[life]]></category>
  <link>https://joarvarndt.se/functional-living.html</link>
  <guid>https://joarvarndt.se/functional-living.html</guid>
  <pubDate>Thu, 13 Mar 2025 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Email as a Revolutionary Medium]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<nav id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org3865863">The nature of Email</a></li>
<li><a href="#orgd9c3f35">Email as a Social Medium</a></li>
</ul>
</div>
</nav>

<div id="outline-container-org3865863" class="outline-2">
<h2 id="org3865863">The nature of Email</h2>
<div class="outline-text-2" id="text-org3865863">
<p class="dcap">
In an increasingly interconnected and technologically sophisticated
world, our capabilities for communication and diversity of ways to do
so also increases. This is often approached as a <a href="https://joarvarndt.se/ellul.html">problem</a>, with each
method merely remaining due to <a href="https://en.wikipedia.org/wiki/Network_effect">network effects</a>, but I believe that
this multitude of means are a strength and not a weakness. I do
however still see what I deem as a misuse of tools, and I shall
endeavour to explain, and hopefully convince you of, my ways of
structuring communication in different spheres.
</p>

<p>
The key difference that I think many do not make is the division
between <i>urgency</i> and <i>importance</i>. This might seem an unwieldy or
arbitrary division, but I believe it is crucial. In many cases needing
an answer quickly is the only thing one cares about, and in others it
is the accuracy of the response that matters. To explain simply, here
an order of different modes of communications:
</p>

<div class="marginnote" id="org47aa1e2">
<p>
By &ldquo;Third-party messaging&rdquo; I am referring to built-in modes of instant
messaging into other applications, most often social media platforms.
</p>

</div>

<table>


<colgroup>
<col  class="org-right">

<col  class="org-right">

<col  class="org-left">
</colgroup>
<thead>
<tr>
<th scope="col" class="org-right">Urgency</th>
<th scope="col" class="org-right">Importance</th>
<th scope="col" class="org-left">Means</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-right">1</td>
<td class="org-right">3</td>
<td class="org-left">Call</td>
</tr>

<tr>
<td class="org-right">2</td>
<td class="org-right">4</td>
<td class="org-left">Text</td>
</tr>

<tr>
<td class="org-right">3</td>
<td class="org-right">5</td>
<td class="org-left">Third-party messaging</td>
</tr>

<tr>
<td class="org-right">4</td>
<td class="org-right">2</td>
<td class="org-left">Email</td>
</tr>

<tr>
<td class="org-right">5</td>
<td class="org-right">1</td>
<td class="org-left">In-person</td>
</tr>
</tbody>
</table>

<p>
Sorted by importance:
</p>

<table>


<colgroup>
<col  class="org-right">

<col  class="org-right">

<col  class="org-left">
</colgroup>
<thead>
<tr>
<th scope="col" class="org-right">Urgency</th>
<th scope="col" class="org-right">Importance</th>
<th scope="col" class="org-left">Means</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-right">5</td>
<td class="org-right">1</td>
<td class="org-left">In-person</td>
</tr>

<tr>
<td class="org-right">4</td>
<td class="org-right">2</td>
<td class="org-left">Email</td>
</tr>

<tr>
<td class="org-right">1</td>
<td class="org-right">3</td>
<td class="org-left">Call</td>
</tr>

<tr>
<td class="org-right">2</td>
<td class="org-right">4</td>
<td class="org-left">Text</td>
</tr>

<tr>
<td class="org-right">3</td>
<td class="org-right">5</td>
<td class="org-left">Third-party messaging</td>
</tr>
</tbody>
</table>

<p>
When you want to be very clear about something you always want to meet
in person, and if speed is necessary nothing is faster than calling
someone&rsquo;s cellphone. But there is one medium that has been overlooked,
or in many cases even despised, email.
</p>

<p>
The Indieweb wiki&rsquo;s section on <a href="https://indieweb.org/email">email</a> describes an &ldquo;Older [reason] to
use email&rdquo; as &ldquo;messaging among older internet users&rdquo; as if this is an
archaic or outdated form of messaging. This is echoed by my anecdotal
experiences with talking to younger generations of people who in many
cases detest email, having only used it in a professional setting and
for making &ldquo;accounts&rdquo; to websites that then flood them with
newsletters and advertisements. I understand these experiences that I
imagine many people have, but they do not mean that email should be
thrown out altogether. Instead it should occupy a new place in the way
people communicate.
</p>

<p>
The word revolution has an interesting history, meaning both a
transformative change in a given field (although often political) as
well as a simple <i>revolution</i> of a spinning object, returning to its
starting position (see <span class="small-caps">rpm</span>; revolutions per minute)<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>. These two
seemingly homonymous words are however deeply interconnected, and to
explain this I want to use the example of the <i>Glorious Revolution</i>. It
was not only a profound political development, overthrowing the
established idea of the divine right of kings and replacing it with
popular sovereignty, but also formulating it as a <i>return</i> to the normal
political order of the ancient rights of the English people<sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup>. The
Meiji <i>Restoration</i> in Japan was also of this nature, a profound and
forward-looking development that framed itself as a return to the
original state of things.
</p>

<p>
So what does this have to do with email communication for the kidz? I
see email as a niche that no other medium occupies, that being
<i>asynchronous</i> communication. All communication is of course
asynchronous in some sense, but there is an expectation that texting
should ideally be done instantly and intensely. One is expected to
respond quickly, and &ldquo;leaving&rdquo; someone &ldquo;on read&rdquo; is seen as an
insult. I think that this form of synchronous communication, when
combined with the scale of modern technology, creates enormous stress
on the individual. At all times one is able to intimately<sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup>
communicate with thousands of people, leaving the individual paralysed
from overstimulation. Email by contrast emphasises long-form
messaging, often being longer than posts on microblogging services
meant for permanent or semi-permanent publication. This gives the
individual more time to respond but also the sender to live their own
life while waiting for a response. Originally this was of course a
technological necessity — it was impossible to reach someone through
the internet when they were not at their computer — but that
limitation has since disappeared through the introduction of the
cellular phone and later the smartphone.
</p>

<p>
This does not mean that the problems with email are not real but that
they are obscuring the usefulness of the technology. The primary
change I would recommend (or that needs to be done) is the division
between <i>communication</i> and <i>information</i>. There is no denying that a lot
of services rely on email for registration and advertisements. But
there is a clear mental barrier between receiving an email from a real
human being and a machine sending you a morass of spam that one is not
expected to reply to, but simply to <i>consume</i><sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup>. The greatest damage to
email has been done by <code>no-reply@domain.com</code>. To counter this one needs
multiple email addresses, one for machine communication that is seldom
used and another for human connection. This allows for the mental
separation of messages so that the enormous flood of email does not
drown out the signal, and so that individuals are not anxious when
they are sent an email.
</p>

<p>
Herman Martinus of <i>Bear Blog</i> <a href="https://herman.bearblog.dev/digital-hygiene-emails">calls this</a> a part of digial hygiene, and
proposes that one should try and &ldquo;explicity act&rdquo; on each email, either
filtering them out, responding to them, or archiving them. We both
seem to have independetly arrived at similar conclusions, where emails
strictly needs to be kept for interpersonal communication, and that
mere information should be kept out to avoid drowning out signal.
</p>

<p>
What would then be required to return to the earlier asynchronous
mode? It is unclear if the massive use by commercial-scale actors can
be undone or reduced, and email spam filters mean that the system is
heavily centralized to just a few big actors. But it is hard to deny
the powerful networking effects of email, where almost every user of
the internet can be assumed to have one. Would it be better to simply
torch email and convince a new generation of users to move to a new
system of <span class="small-caps">e2ee</span> async messaging? I do not know. But I do still believe
that email has the potential to be the solution to many people&rsquo;s
problems with the internet and communication as a whole.
</p>
</div>
</div>

<div id="outline-container-orgd9c3f35" class="outline-2">
<h2 id="orgd9c3f35">Email as a Social Medium</h2>
<div class="outline-text-2" id="text-orgd9c3f35">
<div class="intro" id="org9eee8d1">
<p>
This was originally its own post, but since it was so short and tied
to my thinking on the above I have chosen to incorporate it into the
same text.
</p>

</div>

<p>
It is apparent to everyone that social media is distinctly a different
experience today from how it initially developed. It has become a form
of mindless consumption instead of a social space where one interacts
with other genuine individuals. The concept of <i>content</i>, once merely
used on Madison avenue, has become so ingrained in the social media
environment that those who would otherwise call themselves
entertainers, artists, or journalists have now come to regard their
field as mere <i>content creation</i>, as producing things merely meant to
get you hooked so that you will look at more advertisements. This has
been accelerated due to <span class="small-caps">llm</span>&rsquo;s ability to quickly create things that
are &ldquo;good enough&rdquo; to look at, read, or otherwise <i>consume</i>. Consumption
has become the only reason to interact with social media. But
alternatives are not only necessary, they are already here.
</p>

<p>
Social media&rsquo;s fall from grace did not occur with the release of
Chat<span class="small-caps">gpt</span>, but it has accelerated since then. Social media platforms do
not make money off of our enjoyment, but merely from our
attention. This was perhaps best displayed by the stratospheric rise
of tiktok, and of the subsequent explosion in short-form video
platforms that followed. These are built on an ecosystem that has
continuously been trying to capture more and more of our waking
hours. Actions to resist this were slowly being taken, even if
subconsciously. The decline of independent forums, where discussion is
instead taken to deep-web<sup><a id="fnr.5" class="footref" href="#fn.5" role="doc-backlink">5</a></sup> spaces like slack, discord, group
chats and direct messages, is perhaps the clearest sign of this. This
was well underway before generative <span class="small-caps">ai</span> arrived, but as <a href="https://maggieappleton.com/forest-talk">Maggie Appleton</a>
has pointed out, &ldquo;the dark forest&rdquo; of spam and slop has expanded — and
will continue to expand — rapidly.
</p>

<p>
When talking about email as a mere asynchronous medium the focus is on
how email benefits the user individually, and on how spam has forced
people to move to other such mediums. Here, I instead want to describe
how one can not just return to the email-workflow of yore, but
reimagine it as a new form of social media that allows one to curate
and decide on what to interact with, but also how to format that
interaction and to contribute to the meaning and interpretation with
the work.
</p>

<p>
Writing emails is a laborious task, at least compared to scrolling an
infinite feed. But it is this labour that is put in to email that is
the differentiating factor. Microblogging platforms like twitter,
mastodon, and bluesky can never become places for <i>genuine</i> presence
because of its ease of use. Writing a toot on mastodon is little
different from writing as short prompt for an <span class="small-caps">ai</span>. What <span class="small-caps">llm</span>s have
taught us is that one must put in the work to create something
meaningful in the eyes of others, because what is valuable is the time
you spent in formulating those ideas.
</p>

<p>
Social interaction is by necessity a creative process. One does not
merely communicate raw information in the form of statistics or binary
data, but we instead choose to frame and disseminate information in a
unique way. This creative process is what makes us interesting as
individuals, to interact with, and valuable to others as agents in the
world.
</p>

<p>
Email also facilitates an inner discussion. While other mediums
require little of the author to critically examine their statements,
writing emails allows oneself the time to read, reread, and edit ones
position. This means that in an email conversation between just two
people, each person takes control of the conversation completely in a
way that instant messaging and the like does not do. The author is
free to have an entire discussion in their head, picturing responses
in their mind. This then moves the conversation forward in a double
dialectical fashion, with each person&rsquo;s internal debate framing their
responses that are in turn responded to.
</p>

<p>
As I explained in my <a href="https://joarvarndt.se/text">musings on text</a>, the dialectial motion that is
present in the creative process means that the relationship between
author and reader disappears. Seneca explains that &ldquo;The process is
mutual; for men learn while they teach&rdquo;<sup><a id="fnr.6" class="footref" href="#fn.6" role="doc-backlink">6</a></sup> — explaining your
thoughts to another necessarily means refining them for yourself.
</p>

<p>
When I write emails, it is not uncommon for the word count to reach
into 2-3000 words. This is longer than many blog posts I write, and
while it commonly covers multiple topics — all organically developed —
it allows for a form of creative expression that other mediums do not
posses. It allows me to write in a much more free manner, to an
audience whose intellectual strengths (and weaknesses) I am much more
aware of, and yet still cut those parts that would otherwise be
necessary to paint a full picture of the issue. It allows me genuine
connection with people I know in a way that reading their newest tweet
does not.
</p>

<p>
This intimate relation between blog posts and emails means that a
back-and-fourth discussion with someone over email is not all that
dissimilar to writing for a literary audience, it is just a smaller
audience. It forces us to come up with and process our ideas, and is
in that sense similar to what I call <a href="https://joarvarndt.se/productive-notes">productive note-taking</a>, where one
uses the <i>production</i> of a work to prompt intellectual growth.
</p>

<p>
Email&rsquo;s asynchronous nature allows us to write and respond whenever we
personally have time. Some people argue that email fails to accomodate
groups of users greater than 2, but I disagree.  Things like mailing
lists allow large groups of people to communicate in public with lots
of other individuals, with anyone quickly jumping in when
required. Conversations chains are easily listed and followed,
compared to the fleeting reply chains of large slack or discord
groups. We can take our time to respond, and those wo are interested
in what we have to say can quickly get up to speed in the
conversation, much like the easily digestible feeds of social media.
The difference is that instead of quickly scrolling by to read short
messages by lots of different people, you are forced to sit and listen
to one person&rsquo;s reasoning for much longer — not all that different
from how you would in real life.
</p>

<p>
James O&rsquo;Sullivan, of University College Cork, <a href="https://noemamag.com/the-last-days-of-social-media">writes</a> in noema magazine:
</p>

<blockquote>
<p>
Social media’s current logic is designed to reduce friction, to give
users infinite content for instant gratification, or at the very
least, the anticipation of such. The antidote to this compulsive,
numbing overload will be found in deliberative friction, design
patterns that introduce pause and reflection into digital interaction,
or platforms and algorithms that create space for intention.
</p>
</blockquote>

<p>
This is exactly the sort of deliberate control that email offers. This
is not to say that email as it exists today is a perfect alternative,
but the way it is ubiqutous and at the same time completely forgotten
means that we have to make a deliberate attempt to understand the
technologies that already exist in practice. ❦
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
This is actually the original meaning of the term — from the Latin
<i>revolvo</i>, returning roll.
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><blockquote>
<p>
The late King James the Second &#x2026; did endeavour to subvert and
extirpate the &#x2026; laws and liberties of this kingdom.
</p>
</blockquote>
<p class="footpara">
I got this example from <a href="https://youtu.be/NreR9fKte3A?si=ltZPuViGgw1pF8De&amp;t=1314">Robinson&rsquo;s Nobel lecture</a> that I attended
in 2024.
</p></div></div>

<div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
As in closely. Being able to directly reach someone no matter
where they are or what they are doing is very much an intimate
activity.
</p></div></div>

<div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
This includes emails that are not intended to be malicious, such
as password resets or updates to terms of service.
</p></div></div>

<div class="footdef"><sup><a id="fn.5" class="footnum" href="#fnr.5" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
This should not be confused with the <i>dark</i>-web. The deep web is
merely that which is not indexable by search engines, and increasingly
includes a larger share of intellectual attention.
</p></div></div>

<div class="footdef"><sup><a id="fn.6" class="footnum" href="#fnr.6" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://en.wikisource.org/wiki/Moral_letters_to_Lucilius/Letter_7"><i>Moral letters to Lucilius</i> / Letter 7</a>
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[communication]]></category>
  <category><![CDATA[technology]]></category>
  <link>https://joarvarndt.se/email.html</link>
  <guid>https://joarvarndt.se/email.html</guid>
  <pubDate>Thu, 27 Feb 2025 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Colophon]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<nav id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#orga4a282e">Philosophy</a></li>
<li><a href="#org413abde">Fonts</a></li>
<li><a href="#org6d06ab7">Inspirations</a></li>
<li><a href="#org39dfeca">Static website generation</a>
<ul>
<li><a href="#org2a6c58d">Sidenotes</a></li>
<li><a href="#orgc74a597">Small caps</a></li>
</ul>
</li>
<li><a href="#org5ef884a">Hosting</a></li>
</ul>
</div>
</nav>
<hr>

<p class="dcap">
I think every personal blog that is somewhat custom built should have
documentation written on its design philosophy and implementation. I
see this as an extension of the free-software ideal; you should not
only be <i>allowed</i> but also <i>able</i> to extent and modify another program to
your needs. It is also useful as a way to discover other peoples&rsquo;
inspirations and influences, as well as finding unique sources of
inspiration for your own website.
</p>

<div id="outline-container-orga4a282e" class="outline-2">
<h2 id="orga4a282e">Philosophy</h2>
<div class="outline-text-2" id="text-orga4a282e">
<p>
This site exists in the overlap between a landing page, a traditional
blog, a <i>hypomnemata</i>, and what is called a &ldquo;digital garden&rdquo;. I
originally used the domain merely to host services and small programs
over the open internet, and to have a place to point to and say &ldquo;this
is where you can find me online&rdquo;. I started writing things because I
found that certain topics kept coming up in discussion with the people
around me, and I wanted to summarise my thoughts on them. A website
was the perfect place for that.
</p>

<p>
I write many pieces concurrently, and publish them either when I feel
they are finished or when my motivation has drained and I feel like I
need to &ldquo;just get it out there&rdquo;. In some cases I also get a large
boost of energy and write a post in even just a day or two, although I
often try and stop myself from publishing immediately in order to let
my thoughts simmer for a bit.
</p>

<p>
I then expand on topics if I come up with new perspectives or need to
respond do a new development. In this way posts exist in a space
between being mere ephemeral blog posts that were written at a given
time and a continually rewritten and updated page. I try to avoid
changing the main theses of a post after initial publication — even if
I have come to disagree with myself over time — and so they still
reflect the version of myself when they were first written.
</p>

<p>
The website is written in <a href="https://www.gnu.org/software/emacs/"><span class="small-caps">gnu</span> Emacs</a> and in <a href="https://orgmode.org/">org mode</a>, because I find the
markup to be intuitive, natural, and easy.<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>
</p>

<p>
The website does deliberately not use any analytics or track you in
any way, for both yours and my sake. I used to use <a href="https://tinylytics.app/">tinylytics</a><sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup> for
simple hit-counters and amusing statistics on what countries my
readers came from, but I have since removed it. This is partly because
I do not want to contribute to a culture of mass data collection and
party because of the impacts it had on my mind itself. Seeing what
received clicks shaped my writing priorities away from what I myself
actually wanted to write about. This may well be useful for those
wanting to make money from their writing, but that is not what this
website is intended to do.
</p>
</div>
</div>

<div id="outline-container-org413abde" class="outline-2">
<h2 id="org413abde">Fonts</h2>
<div class="outline-text-2" id="text-org413abde">
<p>
The primary font used is Sabon. Code uses the <a href="https://github.com/flowchartsman/greybeard">Greybeard</a> font. The
headers are all typeset in the beautiful <a href="https://www.virgileflores.com/davinci">DaVinci</a> by the <span class="small-caps">nyc</span> creative
bureau <i>Virgile Flores</i>. For 中文 (and other <span class="small-caps">cjk</span> languages) I use <a href="https://fonts.adobe.com/fonts/adobe-kaiti">Kai Ti</a>
since the default Noto font installed on many devices clashed quite a
lot with the thin serif fonts I otherwise use.
</p>

<p>
I jump quite often between fonts, especially
for the serif font for body text. In this way having a website is
quite useful; it allows me to experiment widely with design in an
actual production environment.
</p>
</div>
</div>

<div id="outline-container-org6d06ab7" class="outline-2">
<h2 id="org6d06ab7">Inspirations</h2>
<div class="outline-text-2" id="text-org6d06ab7">
<p>
I generally took a lot of inspiration from others using the same
tooling as me, as well as from <a href="https://gwern.net">Gwern</a>, <a href="https://maggieappleton.com/">Maggie Appleton</a> and various
other blogs and homepages I have read over the years. The colour
scheme is a slightly adapted version of Protesilaos Stavrou&rsquo;s <a href="https://protesilaos.com/emacs/modus-themes">modus
themes</a> (for the light theme) and the <a href="https://github.com/paradise-theme/paradise">paradise theme</a> (for the
dark). I find them visually pleasing, and the Modus theme is very
accessible to those with impaired vision. I have used them in Emacs
for a long time, and so they fit nicely on my desktop when looking at
my site.
</p>

<p>
The one-rule <span class="small-caps">css</span> implementation of the drop caps is taken from <a href="https://michal.sapka.pl/">Michał
Sapka</a>, while the font files were downloaded from Gwern using a quick
<code>curl</code>-script I had an <span class="small-caps">llm</span> write.<sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup> The font is &ldquo;Baroque Initials&rdquo;,
more information <a href="https://joarvarndt.se/latex">here</a>. The indented paragraphs were inspired by <a href="https://miroallard.com">Miró
Allard</a>.
</p>

<p>
The little arrows following external links (of which there have been
quite a lot in this section) are from <a href="https://alexwennerberg.com/">Alex Wennerberg</a>, whose simple
design I find admirable. Using email as a comment system was taken
from <a href="https://marcel.io/posts/new-blog-features-hover-cards-comments-library-improvements">Marcel Wichmann</a>.
</p>
</div>
</div>

<div id="outline-container-org39dfeca" class="outline-2">
<h2 id="org39dfeca">Static website generation</h2>
<div class="outline-text-2" id="text-org39dfeca">
<p>
The blog is generated using Bastian Bechtold&rsquo;s <a href="https://github.com/bastibe/org-static-blog">org-static-blog</a>. I have
an <code>elisp</code> file that runs the necessary configuration code and acts like
a declarative configuration for the deployment of the static site. It
looks like this:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">setq</span> org-static-blog-publish-title <span class="org-string">"Joar von Arndt"</span>)
(<span class="org-keyword">setq</span> org-static-blog-publish-url <span class="org-string">"https://joarvarndt.se/"</span>)
(<span class="org-keyword">setq</span> org-static-blog-publish-directory <span class="org-string">"~/Documents/blog"</span>)
(<span class="org-keyword">setq</span> org-static-blog-posts-directory <span class="org-string">"~/Documents/blog/posts/"</span>)
(<span class="org-keyword">setq</span> org-static-blog-drafts-directory <span class="org-string">"~/Documents/blog/drafts/"</span>)
(<span class="org-keyword">setq</span> org-static-blog-enable-tags t)
(<span class="org-keyword">setq</span> org-static-blog-enable-og-tags t)
(<span class="org-keyword">setq</span> org-static-blog-image <span class="org-string">"https://joarvarndt.se/vonArndtCrestWhite.png"</span>)
(<span class="org-keyword">setq</span> org-static-blog-use-preview t)
(<span class="org-keyword">setq</span> org-static-blog-no-comments-tag <span class="org-string">"nocomment"</span>)
(<span class="org-keyword">setq</span> org-static-blog-enable-tag-rss t)
(<span class="org-keyword">setq</span> org-static-blog-index-length 6)
(<span class="org-keyword">setq</span> org-static-blog-preview-link-p t)
(<span class="org-keyword">setq</span> org-static-blog-preview-ellipsis <span class="org-string">"&lt;span class=\"ellipsis\"&gt;Continue Reading&lt;/span&gt;"</span>)
</pre>
</div>

<p>
These are all simple configuration values that are unique to
<code>org-static-blog</code>, and where most of the values are themselves unique to
this blog specifically.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">setq</span> org-export-with-toc t)
(<span class="org-keyword">setq</span> org-export-with-broken-links t)
(<span class="org-keyword">setq</span> org-export-with-smart-quotes t)
(<span class="org-keyword">setq</span> org-export-with-section-numbers nil)
(<span class="org-keyword">setq</span> org-image-actual-width nil)

<span class="org-comment-delimiter">;; </span><span class="org-comment">For syntax highlighting of code (Like this).
</span>(<span class="org-keyword">setq</span> org-src-fontify-natively t)
(<span class="org-keyword">setq</span> org-html-htmlize-output-type 'css)
(<span class="org-keyword">setq</span> org-src-preserve-indentation t)
</pre>
</div>

<p>
<code>org-static-blog</code> uses org-mode&rsquo;s built-in <span class="small-caps">html</span> export functionality for
much of the &ldquo;dirty work&rdquo;, and these variables are used for all
org-mode exports. The latter part allows Emacs to transform its own
syntax highlighting into <span class="small-caps">css</span> classes that I can then highlight with
<span class="small-caps">css</span> variables depending on dark/light theme. This is all done at the
rendering stage, meaning things like <a href="https://highlightjs.org/">highlight.js</a> are
unnecessary. Without setting these variables Emacs will hard-code the
current Emacs theme colours into the <span class="small-caps">html</span>.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">setq</span> org-static-blog-display-git-date t)
(<span class="org-keyword">setq</span> org-static-blog-title-link nil)

(<span class="org-keyword">setq</span> org-static-blog-hidden-directory <span class="org-string">"~/Documents/blog/hidden/"</span>)

(<span class="org-keyword">setq</span> org-static-blog-generate-og-images t)
(<span class="org-keyword">setq</span> org-static-blog-og-image-directory <span class="org-string">"post-images/"</span>)
(<span class="org-keyword">setq</span> org-static-blog-og-image-font <span class="org-string">"ACaslonPro-Regular"</span>)

</pre>
</div>

<p>
These are variables used in my own <a href="https://codeberg.org/Joar/org-static-blog">custom fork</a> of
<code>org-static-blog</code>. This toggles the display of the &ldquo;last edited&rdquo; date at
the top of the post page, derived from when the <code>.org</code>-file was last
changed. All the original org-mode files are uploaded to the website,
and can be accessed by navigating to
&ldquo;<a href="https://joarvarndt.se/posts/postname.org">https://joarvarndt.se/posts/postname.org</a>&rdquo;.
</p>

<p>
By default <code>org-static-blog</code> renders the post title of each page as a
link pointing to itself. I found this quite distracting as it means
displaying responsive changes whenever the title is hovered over. This
variable thus disables that functionality.
</p>

<p>
The hidden directory acts as a sort of middle-ground between drafts
and posts; I have the drafts directory marked in the <code>.gitignore</code> file
and can therefore not use git to track changes made to files in that
directory, but I do not want pages like <a href="https://joarvarndt.se/subscribe">subscribe</a>, <a href="https://joarvarndt.se/about">about</a>, or the <a href="https://joarvarndt.se/links">link
page</a> to show up in the archive page as a proper &ldquo;post&rdquo;. For this I
use the hidden directory.
</p>

<p>
The last three options are all related to to the automatic generation
of unique <a href="https://ogp.me/">Open Graph</a>-images for each post using Imagemagick.<sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup>
Images are only generated if they do not already exist, and so do not
significantly impact build time.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">setq</span> org-static-blog-preview-start <span class="org-string">"&lt;p class=\"dcap\"&gt;"</span>)
</pre>
</div>

<p>
I have written a function that applies the <code>dcap</code> class to the first
normal paragraph in a post, but adding such a class means that the
default &ldquo;<code>&lt;p&gt;</code>&rdquo; value will match the <i>second</i> paragraph instead of the
first. This change thus needs to be made.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">setq</span> org-static-blog-page-header
      <span class="org-string">"&lt;meta name=\"Joar von Arndt\" content=\"Joar von Arndt\"&gt;
       &lt;meta name=\"referrer\" content=\"no-referrer\"&gt;
       &lt;meta name=\"viewport\" content=\"initial-scale=1,width=device-width,minimum-scale=1\"&gt;
       &lt;link href=\"static/style.css\" rel=\"stylesheet\" type=\"text/css\" /&gt;
       &lt;link rel=\"icon\" href=\"static/favicon.ico\"&gt;
       &lt;link href=\"https://joarvarndt.se/public-key.asc\" rel=\"pgpkey\" type=\"text/plain\"&gt;`
       &lt;link rel=\"me\" href=\"https://github.com/JanJoar\" /&gt;
       &lt;link rel=\"me\" href=\"https://gravatar.com/speedilyrunaway0201f99245\" /&gt;
       &lt;link rel=\"pgpkey\" href=\"/key.pub\"&gt;
       &lt;link rel=\"webmention\" href=\"https://webmention.io/joarvarndt.se/webmention\" /&gt;
       &lt;script src=\"static/sidenotes.js\" defer&gt;&lt;/script&gt;
       &lt;script src=\"static/comments.js\" defer&gt;&lt;/script&gt;
       &lt;link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/katex@0.16.33/dist/katex.min.css\" integrity=\"sha384-fgYS3VC1089n2J3rVcEbXDHlnDLQ9B2Y1hvpQ720q1NvxCduQqT4JoGc4u2QCnzE\" crossorigin=\"anonymous\"&gt;
       &lt;script defer src=\"https://cdn.jsdelivr.net/npm/katex@0.16.33/dist/katex.min.js\" integrity=\"sha384-YPHNAPyrxGS8BNnA7Q4ommqra8WQPEjooVSLzFgwgs8OXJBvadbyvx4QpfiFurGr\" crossorigin=\"anonymous\"&gt;&lt;/script&gt;
       &lt;script defer src=\"https://cdn.jsdelivr.net/npm/katex@0.16.33/dist/contrib/auto-render.min.js\" integrity=\"sha384-JKXHIJf8PKPyDFptuKZoUyMRQJAmQKj4B4xyOca62ebJhciMYGiDdq/9twUUWyZH\" crossorigin=\"anonymous\"
       onload=\"renderMathInElement(document.body);\"&gt;&lt;/script&gt;"</span>)

(<span class="org-keyword">setq</span> org-static-blog-post-comments
      <span class="org-string">"&lt;div class=\"comment-by-email\"&gt;
         &lt;form class=\"comment-by-email-form\"&gt;
           &lt;textarea id=\"comment-by-email-textarea\"
             placeholder=\"Write a comment\"&gt;&lt;/textarea&gt;
           &lt;button type=\"submit\"&gt;Send&lt;/button&gt;
         &lt;/form&gt;
       &lt;/div&gt;"</span>)
</pre>
</div>

<p>
This is quite self-explanatory, it formats the header for each page so
that the correct <span class="small-caps">css</span>, javascript, favicons <i>et cetera</i> are loaded. It
also includes various <code>rel="me"</code> links that are used to form a web of
authorship proving that I am the owner of this website and those
accounts. The <code>rel="pgpkey"</code> points to my public key in plain text
format.
</p>

<p>
While the website does make use of javascript I have as an utmost
priority that it should be accessible and readable without it. There
are really only three elements that require javascript:
</p>

<ol class="org-ol">
<li>Comments, who quite simply creates a <code>mailto:</code> -link that is filled
in with the appropriate information (including recipient, subject
header, and content inserted on the website). All of this can of
course be done manually by emailing me the old-fashioned way.</li>
<li>Client-side \(\LaTeX\) rendering using \(\KaTeX\). This should be
possible to render server-side and therefore remove, but I have yet
to build a way to do so using my <span class="small-caps">ssg</span>. A project for the future.</li>
<li>Sidenotes. I cover this further down.</li>
</ol>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">setq</span> org-static-blog-page-preamble <span class="org-string">"&lt;div class=\"header\" role=\"banner\"&gt;
                                     &lt;a href=\"https://joarvarndt.se/\" class=\"home-link\"&gt;&lt;img id=\"themeImageHeader\" src=\"vonArndtCrestBlack.png\" class=\"header-img\" alt=\"Crest\" width=\"50\"&gt;&lt;/a&gt;&lt;/div&gt;"</span>)

(<span class="org-keyword">setq</span> org-static-blog-page-postamble
      <span class="org-string">"&lt;div id=\"postamble\" class=\"status\"&gt;&lt;div class=\"footer\" role=\"contentinfo\"&gt;
       &lt;div class=\"footer-upper\"&gt;
       &lt;footer-img&gt;&lt;img loading=\"lazy\" class=\"footer-img\" id=\"themeImageFooter\" src=\"Ship-5.svg\" alt=\"Set sail on the sea of knowledge\"&gt;&lt;/footer-img&gt;
       &lt;copyright&gt;&#169; 2026 &lt;span class=\"small-caps\"&gt;ad&lt;/span&gt; / &lt;a href=\"https://en.wikipedia.org/wiki/French_Republican_calendar\"&gt;234 &lt;span class=\"small-caps\"&gt;ar&lt;/span&gt;&lt;/a&gt; Joar von Arndt&lt;/copyright&gt;
        &lt;/div&gt;
        &lt;div class=\"footer-lower\"&gt;
        &lt;nav&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=\"https://joarvarndt.se/about.html\"&gt;About&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=\"https://joarvarndt.se/archive.html\"&gt;Archive&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=\"https://joarvarndt.se/links.html\"&gt;Your next stop&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=\"https://joarvarndt.se/website.html\"&gt;Colophon&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/nav&gt;

        &lt;nav&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=\"https://joarvarndt.se/now.html\"&gt;Now&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=\"https://joarvarndt.se/subscribe.html\"&gt;Subscribe&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=\"https://joarvarndt.se/contact.html\"&gt;Contact&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=\"https://webmention.io/joarvarndt.se/webmention\"&gt;Webmentions&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/nav&gt;
    &lt;script src=\"static/theme.js\" defer&gt;&lt;/script&gt;
    &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;"</span>)
</pre>
</div>

<p>
The header and footer of each page. The header is very plain — it only
includes the heraldic achievement that acts as a &ldquo;home&rdquo; link. The
table of contents that appears on some pages (including this one) is a
part of the post itself and is generated by org-mode&rsquo;s export
functionality. It simply moves to the top of the page using <span class="small-caps">css</span> and is
not part of the header.
</p>

<p>
The footer has comparatively quite a lot going on. Its multi-column
design was inspired principally by <a href="https://www.jonashietala.se/">Jonas Hietala</a>, from whom I was also
partly inspired by the choice of using <code>git</code> to track post changes
(although the idea of tracking changes to a post came from Appleton&rsquo;s
&ldquo;planted X time ago&rdquo;). I also chose to prominently display webmentions
as a technology since they are used by an unfortunately few number of
people, and I myself often forget to check if a site does or not when
linking to them.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">setq</span> org-static-blog-index-front-matter <span class="org-string">"&lt;site-intro&gt;&lt;p&gt;
      This is the site of Joar Alexander Pablo von Arndt. I write about a
      variety of topics, from coverage of &lt;a href=\"https://joarvarndt.se/eww.html\"&gt;&lt;span class=\"small-caps\"&gt;gnu&lt;/span&gt; Emacs web browsing&lt;/a&gt;, to &lt;a href=\"https://joarvarndt.se/business_cards.html\"&gt;graphic
      design&lt;/a&gt; and &lt;a href=\"https://joarvarndt.se/european-tech.html\"&gt;critiques of industrial policy&lt;/a&gt;. You can &lt;a href=\"https://joarvarndt.se/subscribe.html\"&gt; subscribe here&lt;/a&gt;. If you enjoy anything written here (or disagree with me) feel free to &lt;a href=\"https://joarvarndt.se/contact.html\"&gt;tell me about it&lt;/a&gt;.
      &lt;/p&gt;
      &lt;ul class=\"org-ul\"&gt;
      &lt;li&gt;&lt;a href=\"https://joarvarndt.se/archive.html\" class=\"archive-link\"&gt;All Posts&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      &lt;p&gt;
      My own personal favorites are the following:
      &lt;/p&gt;

      &lt;ul class=\"org-ul\"&gt;
      &lt;li&gt;&lt;a href=\"https://joarvarndt.se/end-of-history.html\"&gt;&lt;i&gt;The End of History.&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=\"https://joarvarndt.se/email.html\"&gt;&lt;i&gt;Email as a Revolutionary Medium&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=\"https://joarvarndt.se/deepseek.html\"&gt;&lt;i&gt;Deepseek is not a Chinese OpenAI&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;

      &lt;nav id=\"table-of-contents\" role=\"doc-toc\"&gt;
        &lt;h2&gt;&lt;i&gt;Itinerarium&lt;/i&gt;&lt;/h2&gt;
        &lt;div id=\"text-table-of-contents\" role=\"doc-toc\"&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=\"https://joarvarndt.se/archive.html\"&gt;All Posts&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=\"https://joarvarndt.se/about.html\"&gt;About&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=\"https://joarvarndt.se/now.html\"&gt;Now&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=\"https://joarvarndt.se/links.html\"&gt;Your next stop&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=\"https://joarvarndt.se/subscribe.html\"&gt;Subscribe&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=\"https://joarvarndt.se/website.html\"&gt;Colophon&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/div&gt;
      &lt;/nav&gt;
&lt;/site-intro&gt;"</span>)

</pre>
</div>

<p>
This is the hand-crafted <span class="small-caps">html</span> for the index page, that itself has no
corresponding org-mode file. It is generated on each rebuild with this
introduction and a series of posts governed by
<code>org-static-blog-index-length</code>. The <i>itinerarium</i> that acts as a sort of
site-menu is formatted like a custom table of contents for the index
page.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">setq</span> org-static-blog-archive-front-matter <span class="org-string">"&lt;picture&gt;
        &lt;source srcset=\"https://joarvarndt.se/bird-butterfly.webp\" type=\"image/webp\"&gt;
        &lt;source srcset=\"https://joarvarndt.se/bird-butterfly.png\" type=\"image/png\"&gt;
        &lt;img src=\"https://joarvarndt.se/bird-butterfly.png\"
          alt=\"A small bird resting amongst the branches, gazing at a flying butterfly.\"
          class=\"pictograph\"&gt;
      &lt;/picture&gt; &lt;hr&gt;"</span>)
</pre>
</div>

<p>
Finally another custom-fork-feature; archive front matter! This can be
used to display anything on the page listing all of the posts, but
here I use it to insert a beautiful illustration that I got from <a href="https://tomchalky.com/">Tom
Chalky</a>.<sup><a id="fnr.5" class="footref" href="#fn.5" role="doc-backlink">5</a></sup>
</p>

<div class="dinkus">
⁂
</div>

<p>
The above lisp code is not just a series of example code snippets, it
is directly the code that is used to build the website!  The text you
are reading right now is written as an org-mode document, and the code
blocks above are exported into a corresponding Emacs lisp file and run
as part of the build process. Because it became annoying to manually
evaluate the above code block every time I wanted to export I wrote a
quick build script, whose contents can easily be embedded<sup><a id="fnr.6" class="footref" href="#fn.6" role="doc-backlink">6</a></sup> into this
post like this:
</p>

<pre class="example" id="orgbf55172">
#+INCLUDE: "~/Documents/blog/build" src emacs-lisp
</pre>

<div class="org-src-container">
<pre class="src src-emacs-lisp">#!/usr/bin/env -S emacs -x

<span class="org-comment-delimiter">;;; </span><span class="org-comment">Code:
</span>
(package-initialize)
(message <span class="org-string">"Initialized package.el"</span>)

(<span class="org-keyword">require</span> '<span class="org-constant">org</span>)
(<span class="org-keyword">require</span> '<span class="org-constant">cal-french</span>)
(<span class="org-keyword">require</span> '<span class="org-constant">htmlize</span>)
(<span class="org-keyword">require</span> '<span class="org-constant">exec-path-from-shell</span>)

(exec-path-from-shell-initialize)
(exec-path-from-shell-copy-env <span class="org-string">"PATH"</span>)

(message <span class="org-string">"Loaded libraries"</span>)

(org-babel-tangle-file <span class="org-string">"~/Documents/blog/posts/website.org"</span>)
(load-file <span class="org-string">"~/Documents/blog/posts/website.el"</span>)

(load-file <span class="org-string">"~/programming/org-static-blog/utils.el"</span>)
(load-file <span class="org-string">"~/programming/org-static-blog/org-static-blog.el"</span>)

(org-static-blog-publish t)

<span class="org-comment-delimiter">;;; </span><span class="org-comment">build ends here</span>
</pre>
</div>

<p>
This makes use of the very underused scripting capabilities of Emacs
(<code>#!/usr/bin/emacs -x</code>), allowing you to use the power of lisp combined
with Emacs&rsquo; extensive libraries. It also loads my personal <a href="https://codeberg.org/Joar/org-static-blog">fork of
org-static-blog</a> that makes some small opinionated changes (like the
git-edit and french republican dates). The french republican dates are
one of the clearest examples of the usefulness of Emacs as a standard
library — Emacs ships with a library to translate to and from the
french republican calendar.
</p>

<p>
I am a big fan of org-static-blog due to its simplicity<sup><a id="fnr.7" class="footref" href="#fn.7" role="doc-backlink">7</a></sup>,
extensibility (it is just a simple <span class="small-caps">html</span> static site generator) and
obvious org-mode support. That I wrote my own fork is testament to the
great work done by Bechtold. It is incredibly featureful, simple to
read and to modify. If you ever wonder how a given piece of <span class="small-caps">html</span> is
generated you can quickly <code>C-s</code> around in the source code (all of which
is in a single file) between function definitions and implementations.
</p>

<p>
It is also quite fast — the majority of the build script is usually
just start-up time from Emacs loading libraries — but not fast enough
to offer anything like real-time previews. Unless
<code>org-static-blog-publish</code> is called with a prefix argument<sup><a id="fnr.8" class="footref" href="#fn.8" role="doc-backlink">8</a></sup> it will
only re-render those files that have actually changed and thus doesn&rsquo;t
take very long to re-render the site. Only when tinkering with
site-wide <span class="small-caps">html</span> changes (such as for the footer) do I need to re-render
everything, and even then it just takes a few seconds.
</p>

<p>
I used to use <a href="https://gohugo.io/">Hugo</a>, a widely praised static website generator, but it
only has nominal org-mode support and requires a special non-org-mode
<span class="small-caps">yaml</span> frontmatter that I really dislike. When writing a post, I prefer
to leave formatting mostly out of it, and with my main focus on
text. Tinkering with the website&rsquo;s appearance is great fun of course,
but I like to keep the two as separate activities. Keeping them
separate means that if I improve the appearance of a new post all
previous posts also benefit. Writing any sort of special syntax also
brings me out of the experience, and that is partly why I wrote my own
javascript to create sidenotes out of basic pandoc (and therefore
org-mode) style footnotes instead of using tufte-<span class="small-caps">css</span>.
</p>
</div>

<div id="outline-container-org2a6c58d" class="outline-3">
<h3 id="org2a6c58d">Sidenotes</h3>
<div class="outline-text-3" id="text-org2a6c58d">
<p>
The sidenotes are heavily inspired by <a href="https://gwern.net/sidenote">Gwern</a> and <a href="https://edwardtufte.github.io/tufte-css/">Tufte <span class="small-caps">css</span></a>, but the
Gwern <code>sidenotes.js</code> is not portable and seems way too complex for my
needs (it is 1150 lines long!!). In comparison, <a href="https://github.com/JanJoar/pandoc-html-sidenotes">here</a> is the the script
that creates sidenotes. It is merely 70 lines long, including
whitespace and comments. It also allows for easy reading on mobile,
vertical monitors, and <span class="small-caps">js</span>-free browsers, since if the dimensions are
not adequate for displaying sidenotes or the javascript does not run
the content does not disappear and is presented as simple
footnotes.
</p>

<p>
Tufte <span class="small-caps">css</span>&rsquo; sidenotes also appear strange when viewed through
<span class="small-caps">rss</span>-readers or text-based browsers like <a href="https://joarvarndt.se/eww">eww</a>. Moving the text only when
javascript is available preserves the structure of the raw <span class="small-caps">html</span>
documents when viewed without javascript. That Tufte <span class="small-caps">css</span> does not make
use of javascript in the first place is quite admirable, but it is a
shame that doing so breaks many of the applications where javascript
is not available. This is then a deliberate choice of using javascript
to <i>improve</i> accessibility. I could have used pure <span class="small-caps">css</span>/<span class="small-caps">html</span> sidenotes,
but doing so would likely break many non-traditional browsers.
</p>

<p>
I have however taken the liberty of inspiration from Tufte <span class="small-caps">css</span> in the
<span class="small-caps">css</span> of sidenotes and margin notes. Margin notes are written in the
form of an org-mode export block, and so have to be located at the
beginning or end of paragraph.
</p>

<div class="marginnote" id="org0798c61">
<p>
This is how I write a margin note!
</p>

</div>

<pre class="example" id="org5c94b36">
#+begin_marginnote
This is how I write a margin note!
#+end_marginnote
</pre>

<p>
I can do this since org treats &ldquo;special blocks&rdquo; as a <code>&lt;div&gt;</code> with a
synonymously named <code>marginnote</code> class when exported to <span class="small-caps">html</span>. This can
then be styled however you want using <span class="small-caps">css</span>. Margin notes are usually
not as critical in my mind as foot/sidenotes, since they serve merely
as a general guide to the text rather than an explicit pointed
&ldquo;reference&rdquo;<sup><a id="fnr.9" class="footref" href="#fn.9" role="doc-backlink">9</a></sup>. That&rsquo;s why margin notes are not displayed on mobile
devices. This is an opinionated change from Tufte <span class="small-caps">css</span>&rsquo; approach, where
margin notes are instead treated as unnumbered sidenotes when there is
no margin to display them in. Margin notes are best considered as a
sort of &ldquo;scribble&rdquo; in the margin, and attaching them to any specific
point in the text makes them merely inferior sidenotes.
</p>
</div>
</div>

<div id="outline-container-orgc74a597" class="outline-3">
<h3 id="orgc74a597">Small caps</h3>
<div class="outline-text-3" id="text-orgc74a597">
<p>
It is typographical best practice to typeset segments of capitalised
text in &ldquo;small caps&rdquo; that are the same height as lowercase text. (<span class="small-caps">like</span>
<span class="small-caps">this</span>). If you have a keen eye you will no doubt have noticed this this in the many acronyms used throughout this colophon.<sup><a id="fnr.10" class="footref" href="#fn.10" role="doc-backlink">10</a></sup> This is provided by a <span class="small-caps">css</span> option:
</p>

<div class="org-src-container">
<pre class="src src-css"><span class="org-css-selector">span.small-caps</span> {
    <span class="org-css-property">font-variant</span>: small-caps;
}
</pre>
</div>

<p>
But how do we apply this element to segments of text? Org-mode&rsquo;s
syntax does not provide for any shorthand for this sort of text, and
really we would prefer to to apply such a formatting to our beautiful
plain text. There is also the added downside of in that case having to
make changes to the large number of acronyms used in all previous
posts.
</p>

<p>
But we can instead do this using the Emacs build process. This Emacs
lisp function wraps all series of capitalised text (<span class="small-caps">a-z</span>) greater than
2 in the small-caps <code>span</code> element:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">org-static-blog--wrap-acronyms</span> (html)
  <span class="org-doc">"Wrap sequences of multiple uppercase letters in &lt;span class=\"small-caps\"&gt; tags.
Does not wrap acronyms inside href attributes."</span>
  (<span class="org-keyword">let</span> ((result html)
        (href-values '())
        (href-counter 0)
        (case-fold-search nil))
    (<span class="org-keyword">setq</span> result (replace-regexp-in-string
                  <span class="org-string">"href=\"</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">[</span><span class="org-string"><span class="org-negation-char">^</span></span><span class="org-string">\"]*</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">\""</span>
                  (<span class="org-keyword">lambda</span> (match)
                    (<span class="org-keyword">let</span> ((href-content (match-string 1 match))
                          (placeholder (format <span class="org-string">"href=\"__xhref_protected_%d__\""</span> href-counter)))
                      (<span class="org-keyword">push</span> href-content href-values)
                      (<span class="org-keyword">setq</span> href-counter (1+ href-counter))
                      placeholder))
                  result))
    (<span class="org-keyword">setq</span> href-values (nreverse href-values))
    <span class="org-comment-delimiter">;; </span><span class="org-comment">Wrap all sequences of uppercase letters (optionally with &amp;/&amp;amp;, ., or - between them)
</span>    (<span class="org-keyword">setq</span> result (replace-regexp-in-string
                  <span class="org-string">"</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">[A-Z]</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(?:</span></span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(?:</span></span><span class="org-string">&amp;</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(?:</span></span><span class="org-string">amp;</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">?</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">|</span></span><span class="org-string">[.-]</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">?[A-Z]</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">+</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">"</span>
                  (<span class="org-keyword">lambda</span> (match)
                    (concat <span class="org-string">"&lt;span class=\"small-caps\"&gt;"</span> (downcase (match-string 1 match)) <span class="org-string">"&lt;/span&gt;"</span>))
                  result t))
    <span class="org-comment-delimiter">;; </span><span class="org-comment">Restore href values
</span>    (<span class="org-keyword">let</span> ((counter 0))
      (<span class="org-keyword">dolist</span> (href-val href-values)
        (<span class="org-keyword">setq</span> result (replace-regexp-in-string
                      (format <span class="org-string">"__xhref_protected_%d__"</span> counter)
                      (<span class="org-keyword">lambda</span> (_match) href-val)
                      result t))
        (<span class="org-keyword">setq</span> counter (1+ counter))))
    result))
</pre>
</div>

<p>
It is quite long and complicated merely because there are a few major
edge cases that need to be addressed, such as acronyms used within the
<code>href</code> part of links (that would otherwise break) and acronyms like <span class="small-caps">r&amp;d</span>,
<span class="small-caps">e2ee</span>, <span class="small-caps">f-150</span>, or <span class="small-caps">ww1</span> that do not consist of simple all-caps letters.
</p>

<p>
This means that I can write in all-caps in the plain-text document and
have it <span class="small-caps">rendered</span> <span class="small-caps">using</span> <span class="small-caps">small</span> <span class="small-caps">caps</span> automatically. It is also backwards
compatible with everything that I have written previously, it merely
requires a re-rendering of the <span class="small-caps">html</span>.
</p>
</div>
</div>
</div>

<div id="outline-container-org5ef884a" class="outline-2">
<h2 id="org5ef884a">Hosting</h2>
<div class="outline-text-2" id="text-org5ef884a">
<p>
The website used to be hosted on my own server at home, on an Intel
<span class="small-caps">nuc</span> machine, running at first <span class="small-caps">nginx</span> and then Caddy.<sup><a id="fnr.11" class="footref" href="#fn.11" role="doc-backlink">11</a></sup> After I
experienced a 25 day long downtime in June 2025 when I was <a href="https://joarvarndt.se/chinese_phenomenology.html">traveling
in China</a> I however decided to not host the public-facing blog from
home. These types of downtimes are not acceptable to me and my
residential internet connection is simply too unreliable to maintain a
high uptime anyways. For that reason I have moved the blog to <a href="https://www.netlify.com/">Netlify</a>
but still retain the server for hosting personal services and
experiments.
</p>

<p>
Netlify requires a git repository at one of a small list of git
forges, so I have a private repository of the blog on Github that is
automatically pushed to from the main repository <a href="https://codeberg.org/Joar/blog/">on Codeberg</a>.
</p>

<p>
I use <a href="https://www.loopia.se/">loopia</a> as my domain registrar, primarily due to having been
recommended them from someone I trust, however I have made no
significant research into alternatives myself.
</p>

<p>
I use <code>magit</code> to interact with git and push changes to the blog to a
remote repository that then causes netlify to update. ❦
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Why would any markup not use &ldquo;<code>//</code>&rdquo; to <i>italicise</i> text? Markdown&rsquo;s
use of just asterisks is admirable, but unintuitive for reading in
plaintext (Does two asterisks mean italic or bold?). Org mode&rsquo;s choice
of using <code>__</code> to <span class="underline">underline</span> text is similarly elegant.
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
If you do feel a need to use analytics software, I can heartily
recommend tinylytics as an easy-to-use and simple hosted analytics
service.
</p></div></div>

<div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><div class="org-src-container">
<pre class="src src-sh"><span class="org-builtin">set</span> -euo pipefail

<span class="org-variable-name">BASE</span>=<span class="org-string">"https://gwern.net"</span>
<span class="org-variable-name">DESTDIR</span>=<span class="org-string">"~/Documents/blog/static/fonts/"</span>
mkdir -p <span class="org-string">"$DESTDIR"</span>

<span class="org-keyword">for</span> L<span class="org-keyword"> in</span> {A..Z}; <span class="org-keyword">do</span>
    <span class="org-variable-name">FILE</span>=<span class="org-string">"Yinit-${L}.ttf"</span>
    <span class="org-variable-name">URL</span>=<span class="org-string">"${BASE}/static/font/dropcap/yinit/${FILE}"</span>
    <span class="org-builtin">echo</span> <span class="org-string">"Downloading $FILE..."</span>
    curl --fail --location --show-error --silent --retry 3 --retry-delay 2 <span class="org-sh-escaped-newline">\</span>
         -o <span class="org-string">"${DESTDIR}/${FILE}"</span> <span class="org-string">"$URL"</span> <span class="org-sh-escaped-newline">\</span>
        &amp;&amp; <span class="org-builtin">echo</span> <span class="org-string">"Saved ${DESTDIR}/${FILE}"</span> <span class="org-sh-escaped-newline">\</span>
            || <span class="org-builtin">echo</span> <span class="org-string">"Failed to download $URL"</span>
<span class="org-keyword">done</span>
</pre>
</div></div></div>

<div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
For example, <a href="https://joarvarndt.se/post-images/website.png">this</a> is the Open Graph image generated for this
post.
</p></div></div>

<div class="footdef"><sup><a id="fn.5" class="footnum" href="#fnr.5" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Many of the illustrations used on this website are from them,
including the bird on the <a href="https://joarvarndt.se/about">about page</a> and the ship in the footer.
</p>

<p class="footpara">
Regarding about-page-bird, it is inserted using an org-mode
<code>#+begin_export html</code> block. It is a showcase of how powerful relying on
org-mode is, when one can directly describe things both in the light
syntax of org-down and at the same time directly access the export
language.
</p></div></div>

<div class="footdef"><sup><a id="fn.6" class="footnum" href="#fnr.6" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Embedding another file like this means that I do not have to keep
track of if it is &ldquo;up to date&rdquo; in the same way as I do not have to
keep the site configuration up to date with this documentation; this
is the configuration!
</p></div></div>

<div class="footdef"><sup><a id="fn.7" class="footnum" href="#fnr.7" role="doc-backlink">7</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
From the repository:
</p>

<blockquote>
<p>
Above all, I tried to make org-static-blog as simple as
possible. There are no magic tricks, and all of the source code is
meant to be easy to read, understand and modify.
</p>
</blockquote></div></div>

<div class="footdef"><sup><a id="fn.8" class="footnum" href="#fnr.8" role="doc-backlink">8</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Either by running <code>C-u M-x org-static-blog-publish</code> or calling it
through Emacs lisp like this (in the build script for example):
</p>

<div class="org-src-container">
<pre class="src src-lisp">(org-static-blog-publish t)
</pre>
</div></div></div>

<div class="footdef"><sup><a id="fn.9" class="footnum" href="#fnr.9" role="doc-backlink">9</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Even if it is not a literal reference, but it may often be,
especially when it comes to my <a href="https://joarvarndt.se/tag-university.html">academic writings</a>.
</p></div></div>

<div class="footdef"><sup><a id="fn.10" class="footnum" href="#fnr.10" role="doc-backlink">10</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Like in <span class="small-caps">css</span>, <span class="small-caps">html</span>, <span class="small-caps">js</span>, <span class="small-caps">gnu</span> <i>et cetera</i>
</p></div></div>

<div class="footdef"><sup><a id="fn.11" class="footnum" href="#fnr.11" role="doc-backlink">11</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
I can highly recommend using Caddy as your web server; you are
going to want to use <span class="small-caps">https</span> and setting it up with <span class="small-caps">nginx</span> or Apache is
just an annoying step to have to go through. Using Caddy as a reverse
proxy is also stupidly simple.
</p></div></div>


</div>
</div>
]]></description>
  <category><![CDATA[technology]]></category>
  <category><![CDATA[website]]></category>
  <category><![CDATA[emacs]]></category>
  <link>https://joarvarndt.se/website.html</link>
  <guid>https://joarvarndt.se/website.html</guid>
  <pubDate>Mon, 30 Dec 2024 00:00:00 +0100</pubDate>
</item>
<item>
  <title><![CDATA[Diplomacy Today: A backstabbr and AI powered newspaper]]></title>
  <description><![CDATA[
 <h2 class="post-subtitle"></h2>
<p class="dcap">
Diplomacy Today is a python program and corresponding flask
application that serves and hosts an early-twentieth-century-style
newspapers generated from the turn orders of a game of <a href="https://en.wikipedia.org/wiki/Diplomacy_(game)">Diplomacy</a>
hosted on <a href="https://www.backstabbr.com/">backstabbr</a>. The idea, and a large portion of the core code,
are not my work, and I deserve none of the credit for it. But the
<a href="https://github.com/nraw/diplomacy_news/">original program</a> seems to have been abandoned last year, and was
perhaps only used for one game. But that is the beauty of free
software, I have taken <code>nraw</code>&rsquo;s original code and iterated upon it over
the course of, so far, four games. It now contains more features and
improved polish that builds upon the basic functionality of a <span class="small-caps">gai</span>
generated in-universe newspaper. I attempted to rewrite the program in
<a href="https://cisco.github.io/ChezScheme/">chez scheme</a> as a learning exercise, but ended up not using it as
python has some nice libraries that I couldn&rsquo;t bother to reimplement
in scheme.
</p>

<p>
To use it you should:
</p>

<ol class="org-ol">
<li>Make sure Mozilla Firefox is installed.</li>

<li>Clone the Github repository:</li>
</ol>

<div class="org-src-container">
<pre class="src src-bash">git clone https://github.com/JanJoar/diplomacy_today.git
</pre>
</div>

<div class="org-src-container">
<pre class="src src-bash"><span class="org-builtin">cd</span> diplomacy_today
</pre>
</div>

<ol class="org-ol">
<li>Install all the python packages:</li>
</ol>

<div class="org-src-container">
<pre class="src src-bash">pip install -r requirements.txt
</pre>
</div>

<ol class="org-ol">
<li>Get your <a href="https://platform.openai.com/api-keys">Open<span class="small-caps">ai</span> <span class="small-caps">api</span> key</a> and export it to the <code>OPENAI_API_KEY</code> environment variable.</li>

<li>Generate the newspaper:</li>
</ol>

<div class="org-src-container">
<pre class="src src-bash">python3 main.py
</pre>
</div>

<ol class="org-ol">
<li>Run the web application using something like gunicorn:</li>
</ol>

<div class="org-src-container">
<pre class="src src-bash">gunicorn -b 0.0.0.0:1914 app:app
</pre>
</div>

<p>
If you have any issues with installation or want to features, feel
free to contact me, preferably at my email at <a href="mailto:joarxpablo@pm.me">joarxpablo@pm.me</a> so that
I can improve the program.
</p>

]]></description>
  <category><![CDATA[diplomacy]]></category>
  <category><![CDATA[technology]]></category>
  <link>https://joarvarndt.se/diplomacy-today.html</link>
  <guid>https://joarvarndt.se/diplomacy-today.html</guid>
  <pubDate>Sat, 17 Aug 2024 00:00:00 +0200</pubDate>
</item>
</channel>
</rss>
