<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>FIGBERT</title>
  <subtitle>world wide web benji-style</subtitle>
  <link href="https://figbert.com/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="https://figbert.com"/>
  <generator uri="https://www.getzola.org/">Zola</generator>
  <updated>2026-06-17T00:00:00+00:00</updated>
  <id>https://figbert.com/atom.xml</id>
  <entry xml:lang="en">
    <title>Google Refreshes Brand Icons to Make Them The Worst</title>
    <published>2026-06-17T00:00:00+00:00</published>
    <updated>2026-06-17T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://workspaceupdates.googleblog.com/2026/05/introducing-fresh-visual-identity-for-Google-Workspace-app-icons.html" type="text/html"/>
    <id>https://figbert.com/posts/google-workspaces-new-logos/</id>
    <content type="html">
      &lt;p&gt;I mostly don’t use the Google Suite—but when I stumbled on these through
Sheets, I genuinely thought there was a rendering error in Safari.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
      &lt;a href=&quot;https://figbert.com/posts/google-workspaces-new-logos/&quot;&gt;★&lt;&#x2F;a&gt;
    </content>
  </entry>
  <entry xml:lang="en">
    <title>Like Someone Who Actually Just Wants to Talk About the Settlements</title>
    <published>2026-06-03T20:00:00-07:00</published>
    <updated>2026-06-09T14:30:00-07:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/like-dreamers/" type="text/html"/>
    <id>https://figbert.com/reading/like-dreamers/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;Like Dreamers&lt;&#x2F;i&gt; by Yossi Klein Halevi. &lt;br&#x2F;&gt;
        Finished on May 22, 2026. &lt;br&#x2F;&gt;
        
        Rating: ★★★★★ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;&lt;em&gt;&lt;strong&gt;Update:&lt;&#x2F;strong&gt; I wrote my final paper for &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;explorecourses.stanford.edu&#x2F;search?q=POLISCI114&quot;&gt;POLISCI114&lt;&#x2F;a&gt; on this book, which
I’ve &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;like-dreamers&#x2F;essay.pdf&quot;&gt;uploaded for you to peruse&lt;&#x2F;a&gt; should you be interested. The
original, much shorter, and somewhat less formal review is preserved
below (with a tweak to the penultimate paragraph, which contains a new
direct quote).&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When I first picked out this book, I anticipated that “the story of the
Israeli paratroopers who reunited Jerusalem” would have a lot more to
do with the actual battles of the Six Day War. But as I now know: anyone
looking for that book should look elsewhere. &lt;em&gt;Like Dreamers&lt;&#x2F;em&gt; is about
these paratroopers and that war, but only insofar as Halevi believes the
war to have been the most pivotal moment in modern Israel’s history and
the paratroopers a useful example of engaged, elite citizens shaping the
national project.&lt;&#x2F;p&gt;
&lt;p&gt;Halevi instead focuses on the Six Day War as having introduced a
previously unthinkable issue in the Israeli discourse: that of “should”.
Israel fought a war and won—far surpassing the historic precedent of
merely surviving—meaning that for the first time the nation thought not
only of what it “could” have but what it “should” have. &lt;em&gt;Like Dreamers&lt;&#x2F;em&gt;
is about the ongoing adjudication of this issue. In essense, it tackles
the following question, lifted in this instance from the book’s inner
monologue written for Yisrael Harel:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;…what nation would turn its back on its ancestral heartland, won
in a defensive war against attempted genocide?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;My stance on this issue is pretty deduce-able. In our more settled
times (compared to ’67), my mental model of the country has always been
defined by the places I’ve actually been and where the vibrancy of the
country’s life is concentrated—so settlements are less important, to
the point that my pragmatism toward an eventual cessation of hostilities
means I would give them up in a heartbeat. That puts me somewhere
like “sympathetic to the above sentiment but it’s irrelevant.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; I
nevertheless enjoyed that &lt;em&gt;Like Dreamers&lt;&#x2F;em&gt; exposed me to a vast spectrum
of dialogue that I had not yet encountered.&lt;&#x2F;p&gt;
&lt;p&gt;In this book there is a secular, weed-smoking, kibbutznik musician
who builds an intense and personal relationship with God in a country
largely restricted to religious binaries. There is a religious Zionist
yeshiva-leading Rabbi who fiercely defends secular Israelis as Jewishly
righteous and condemns violations of secular laws in religious terms.
There is a man who fights for the kibbutzim, another for a free
market, and a third for the public to draw a line of descent between
the socialist communes and settler villages. Getting to know these
characters means constant engagement with the brilliant and bewildering
entanglement of Israeli society, all too recognizable to those who know
it well:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;His love for the land of Israel was inseperable from his famous love
for women: “There are those more beautiful than her &#x2F; but none as
beautiful in the way she is.”&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;As Israel’s ultra-religious population skyrockets and the country’s
long-standing conflicts with its neighbors seem ever more intractible,
effective solutions are going to have to get a lot weirder. That makes
a book like this all the more important. &lt;em&gt;Like Dreamers&lt;&#x2F;em&gt; resists simple
categorization—it is not an endorsement nor condemnation of the settler
cause. I mean, it even contends with one of my favorite wacky solutions
of all time: “keeping settlements intact under Palestinian sovereignty.”
If the solutions people came up with decades ago were viable they would
have worked decades ago. Only the weird ideas are going to work from
here on out. Just look how weird we’re already getting: sending &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.timesofisrael.com&#x2F;israel-sent-laser-system-to-uae-to-help-intercept-iranian-missiles-and-drones-report&#x2F;&quot;&gt;laser
defense systems&lt;&#x2F;a&gt; to a desert kingdom to fend of nuclear-addled Iranian
attacks, fighting terrorists &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.timesofisrael.com&#x2F;liveblog_entry&#x2F;israel-lebanon-agree-to-renew-truce-create-pilot-zones-where-hezbollah-is-banned&#x2F;&quot;&gt;hand-in-hand with the Lebanese&lt;&#x2F;a&gt;,
and witnessing the rebirth of a nation at the hands of al-Qaeda’s most
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.hoover.org&#x2F;&quot;&gt;Hoover&lt;&#x2F;a&gt;-pilled soldier. Is it that unfathomable to see a future where
Jewish religion and secularism &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;heb.hartman.org.il&#x2F;meir-ariel&#x2F;&quot;&gt;converge&lt;&#x2F;a&gt;? I am holding on to my hope
for an incredible future.&lt;&#x2F;p&gt;
&lt;p&gt;Like all good, focused book reviews, I will end with a tangent. &lt;em&gt;Like
Dreamers&lt;&#x2F;em&gt; formalized my conception of one of Israel’s most impactful
practices: “the IDF’s doctrine of preemption, of taking the war into
enemy territory.” In the United States this is not something one needs
to think about, as America’s enemies are oceans away. But in Israel it’s
a big deal—fighting on the (tiny and densely populated) home front means
untold Israeli civilian casualties. This doctrine’s impact is obvious
in the case of 1967, when a then-smaller Israel fought the Jordanians
in the West Bank (annexing Jerusalem), the Syrians in the Golan Heights
(now also annexed), and the Egyptians in Sinai (returned for peace).
But the doctrine is still very much relevant: just look at the maps of
the current conflicts in &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;like-dreamers&#x2F;gaza.webp&quot;&gt;Gaza&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;like-dreamers&#x2F;north.webp&quot;&gt;the North&lt;&#x2F;a&gt;. Despite what the
American zeitgest may imply, I do not believe that Israel is a radical
expansionist power in the Middle East. Rather, it’s implementing the
same doctrine as always. The West is just profoundly forgetful.&lt;&#x2F;p&gt;
&lt;p&gt;In any case, as you may have observed already, I quite liked this
book. I found it rather engaging: it managed to skip the part of most
Israel-oriented books where they start by trying to introduce you to the
conflict and then end before they can talk about anything else. Consider
giving &lt;em&gt;Like Dreamers&lt;&#x2F;em&gt; a read—and if you do, let me know your thoughts.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;The irrelevance of the above is especially true in a political
order that pretends borders are static—which maybe prevents war on net
(not in Ukraine?) but perpetuates long-standing injustices by ruling out
a whole class of problem-solving methodologies (see: Kurdistan)—and once
more when you factor in what I grew up calling “Ben Gurion’s triangle”
but from some research appears to be more commonly referred to as the
Israeli trilemma (aparrently coined at least in part by Tom Friedman,
whom I had the pleasure of hearing speak last year). &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>ME163*</title>
    <published>2026-04-18T18:00:00-07:00</published>
    <updated>2026-04-18T18:00:00-07:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/me163/" type="text/html"/>
    <id>https://figbert.com/projects/me163/</id>
    <content type="html">
      &lt;p&gt;In ME103 you build a “high-fidelity product or object… with the
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;productrealization.stanford.edu&#x2F;&quot;&gt;PRL’s&lt;&#x2F;a&gt; manufacturing resources.” I knew from the outset that I wanted
to make something a bit humorous but that I would actually use in my
day-to-day life. So in the funky spirit of &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;roll-call&#x2F;&quot;&gt;co-opting projects to do
things I want to do anyways&lt;&#x2F;a&gt;, I set out to learn something of what
I’m missing out on now that &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;productrealization.stanford.edu&#x2F;project-showcase&#x2F;me263&quot;&gt;ME263&lt;&#x2F;a&gt; is no more. Ultimately, I built
a beautiful piece of furniture: an artistic, layered stool with three
angled aluminum legs, six statues “struggling” to hold up your weight,
and dark walnut detailing throughout.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;me163&#x2F;hero.webp&quot; alt=&quot;The “hero shot” photo of the finished stool.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;While the stool may seem simple, there is a surprising amount of
complexity hidden beneath the surface. Most of those challenges have
something to do with scale: there are 49 drilled holes, 27 screws, 18
tapped holes, and 9 threaded inserts in the body. The structure is 14
inches across and 24 inches tall—near the limits of how large you can
make something in the PRL, and in many ways well over them, meaning
I had to pull quite a few tricks to get it all working.&lt;&#x2F;p&gt;
&lt;p&gt;The stool is made up of four major components, which are (from bottom to
top): the legs, the mount, the plate, and the statues. I’ll cover their
manufacture individually below.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;legs&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#legs&quot; aria-label=&quot;Anchor link for: legs&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Legs&lt;&#x2F;h3&gt;
&lt;p&gt;These were perhaps the simplest part of the project. I cut external
threads onto three sections of 1“ tubing and called it a day: even
though these insert into the mount at an angle, the tapped threads in
the mount are tilted at the same angle meaning that the legs themselves
don’t need to “know” about any of that complexity. That does mean that
the base of the legs is at angle to the floor, however—so I ended up
printing custom foot pads out of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;formlabs.com&#x2F;store&#x2F;materials&#x2F;elastic-50a-resin-v2&#x2F;&quot;&gt;flexible plastic&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;mount&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#mount&quot; aria-label=&quot;Anchor link for: mount&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Mount&lt;&#x2F;h3&gt;
&lt;p&gt;Offloading the complexity from the legs means it has to go somewhere,
and that’s here. How do you drill and tap 1“ holes on the mill at an
angle? I first tried the indexing head—which can tilt &lt;em&gt;and&lt;&#x2F;em&gt; rotate—but
found that it couldn’t hold anything near big enough. I thought of the
rotary table, but quickly realized that having to adjust the fixturing
of the piece after rotating it would negate the consistency of its
rotation. And all this was after I had split the mount and plate into
two parts from my original design in order to make it easier to work
with!&lt;&#x2F;p&gt;
&lt;p&gt;I decided that all my pondering was holding me back from actually
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=UFFa0QoHWvE&quot;&gt;getting my hands dirty&lt;&#x2F;a&gt;: I mounted a sharpie in the mill,
drew out the centers of the holes on the flat plane, and then moved the
part to a 15° tilt table and eyeballed the rotation. Drilling each hole
required a sequence of seven different tools to properly drill and tap.
Ultimately this worked.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;me163&#x2F;1.webp&quot; alt=&quot;A compilation of photos from my time working on the mill.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;plate&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#plate&quot; aria-label=&quot;Anchor link for: plate&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Plate&lt;&#x2F;h3&gt;
&lt;p&gt;This enormous disk marries the legs to the rest of the seat. It has two
sets of through-holes: three in the center which attach it to the mount
and twelve around the perimeter for the six statues. These sets are
countersunk in opposite directions. The central three holes were smooth
going, but working on the outer rings I quickly became familiar with
the range of motion of our mills—slightly over 11 inches, which becomes
even smaller when you factor in the overhang of the 14 inch disk itself
interfering with the movement. This was a problem.&lt;&#x2F;p&gt;
&lt;p&gt;You may begin to sense a theme here: I returned to my trusty eyeballing
strategy, calculating the coordinates of each holes, carefully keeping
half of the circle in-bounds, and then performing one risky rotation to
make the second set of six. I employed a clear, laser-cut jig on this
step to aid the accuracy of my rotation and get all 12 holes aligned.
Sensing another theme, this worked quite well.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;statues&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#statues&quot; aria-label=&quot;Anchor link for: statues&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Statues&lt;&#x2F;h3&gt;
&lt;p&gt;Inspired by Atlas, the videogame &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;384490&#x2F;NECROPOLIS_BRUTAL_EDITION&#x2F;&quot;&gt;Necropolis&lt;&#x2F;a&gt;, and Art Deco style, these
human figures are the crux of the stool’s humor. Lying on their back,
pushing up against you with braced arms and legs, one must imagine their
job as at least somewhat unpleasant. Similarly, making them I had to
leave &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.shapr3d.com&#x2F;&quot;&gt;my favorite CAD program&lt;&#x2F;a&gt; behind (it lacked a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Draft_(engineering)&quot;&gt;drafting&lt;&#x2F;a&gt;
feature) in favor of the more feature complete but thoroughly unpleasant
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.autodesk.com&#x2F;products&#x2F;fusion-360&#x2F;overview&quot;&gt;Fusion&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I ended up casting three times, starting first with a single test part
before upgrading to a family of three statues per pour. Filing and
polishing them was the worst thing ever, so I forced &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;vivekvivek.com&#x2F;&quot;&gt;Vivek&lt;&#x2F;a&gt; to help me,
and now they look nice and contrast beautifully with the darker colors
of the stool.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;me163&#x2F;2.webp&quot; alt=&quot;Two photos of the statue casting process, one of the rammed sand mold and one of all six statues stacked up before post-processing.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;After all this machining, I could see the finish line. I &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.flexcut.com&#x2F;home&#x2F;product&#x2F;kn12-cutting-knife&quot;&gt;whittled&lt;&#x2F;a&gt;
three covers for the leg joints, to give them more substance, and fixed
them in place against the legs with set screws. I planed down a seat
from the same enormous walnut board, and set six threaded inserts in it
to fix it on top of the statues. I became best friends with an orbital
sander—thanks Sam PW for that—before whipping out my trusty spray paint
to turn the polished aluminum matte black. And, all of a sudden, it
was done.&lt;&#x2F;p&gt;
&lt;p&gt;I’ve come away from my late nights and early mornings in the PRL with
a tremendous amount of technical knowledge and an intuition for working
with metal to make professional hardware. But the true purpose of ME103
is to get you to work on one totally unmanufacturable project so that
you get all your mistakes out of the way and never send a machinist
something ridiculous in the real world. I am happy to report that in
this regard I was beyond successful: I got a profound number of mistakes
out of the way over the course of this project. You’re welcome,
machinists.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;me163&#x2F;3.webp&quot; alt=&quot;A small highlight reel of the finishing process: woodworking, painting, and assembly.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;All the time I spent creating could really be divided into two
categories: exploration and implementation. Any time I approached
a process to realize an idea, the first time around was long and
arduous—and then repeating it to make additional components was quick
and easy. Further, I would make many, many mistakes in the exploration
phase. On its face,  this may seem like an endorsement of the prevailing
idea that ideas matter more than implementation: if I could only start
with the right idea, I would skip the hard part of messing up repeatedly
first. But I think this experience goes to show the exact opposite. At
the highest level, my idea was simply to build a stool. I could only
come up with the right sequence of “good ideas” to make that happen
through the feedback I got attempting my implementation over and over
again. My “mistakes” guided my solutions. Letting the process guide
you, as such, is a sort of humanity and craft that I hope to bring to
products I have a hand in long after I am no longer turning the wheels
on the mill myself.&lt;&#x2F;p&gt;
&lt;p&gt;I have never worked as hard as I worked on ME163* ever in my life. The
stress alone has taken years off my life, and that’s not even factoring
in the grease and aluminum shavings I’ve eaten. I was &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;airpods-and-thoughtspace&#x2F;&quot;&gt;alone with my
thoughts&lt;&#x2F;a&gt; machining, working out of a greasy paper notebook. And I made
&lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;tangible-deliverables&#x2F;&quot;&gt;something from nothing&lt;&#x2F;a&gt;. Now it lives happily in my dorm room.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Coconut Water</title>
    <published>2026-04-09T15:00:00-07:00</published>
    <updated>2026-04-09T15:00:00-07:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/coconut-water/" type="text/html"/>
    <id>https://figbert.com/posts/coconut-water/</id>
    <content type="html">
      &lt;p&gt;It took me two decades to learn that coconut water does not taste like
sweat. Rather, some bottles on the grocery store shelf are full of sweat
while others are not. I tried them all so now I can tell you which is
which.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;onceuponacoconut.com&#x2F;&quot;&gt;Once Upon a Coconut&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.drinkcoaqua.com&#x2F;&quot;&gt;Coaqua&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;harmlessharvest.com&#x2F;&quot;&gt;Harmless Harvest&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;These are the kings of coconut water. Somehow, they manage to taste
&lt;em&gt;toasted&lt;&#x2F;em&gt;. I don’t understand how you do that. Delicious.&lt;&#x2F;p&gt;
&lt;p&gt;Notes and caveats: Do not try the flavored versions. Good coconut
water is like good sushi—simple is better. Also Coaqua’s brand copy is
extremely cringe. And why is Harmless Harvest pink?&lt;&#x2F;p&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;drinkc2o.com&#x2F;&quot;&gt;C2O&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I really like the corrugated metal look but the flavor is, in my view,
unremarkable. Nageena’s favorite.&lt;&#x2F;p&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;Taste Nirvana, Parrot, etc.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I would rather have normal water than these, unless I’m feeling
desperate or it’s been a while.&lt;&#x2F;p&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;Vita Coco&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Do not buy under any circumstances. Despicable, vile drink.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Stanford Quarterly Reflection (Y3Q1)</title>
    <published>2026-03-30T15:45:00-07:00</published>
    <updated>2026-03-30T15:45:00-07:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/stanford-quarterly-reflection-06/" type="text/html"/>
    <id>https://figbert.com/posts/stanford-quarterly-reflection-06/</id>
    <content type="html">
      &lt;p&gt;Welcome back to our regularly scheduled programming! Junior year has
been downright blissful. Let me tell you about it.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;academics&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#academics&quot; aria-label=&quot;Anchor link for: academics&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Academics&lt;&#x2F;h2&gt;
&lt;p&gt;I discovered two important things about scheduling this quarter:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;If you plan things right—or just get lucky and stumble into it, I’ll
let you guess how I found out—you can have no finals at all. This may
be the consequence of a necessarily project-focused physical major,
but while we’re picking poisons I’m going to drink this one.&lt;&#x2F;li&gt;
&lt;li&gt;Advanced courses with low unit counts are the greatest! You cover
exciting and fresh material in a relaxed environment. Ideally every
class would work like that—one can dream.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;me102-foundations-of-product-realization&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#me102-foundations-of-product-realization&quot; aria-label=&quot;Anchor link for: me102-foundations-of-product-realization&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
ME102: Foundations of Product Realization&lt;&#x2F;h3&gt;
&lt;p&gt;This course was the cornerstone of my quarter. I learned heaps about
rapid manufacturing, interfacing between parts, how hardware—which
contextually, I have learned, basically means screws—works, and more.&lt;&#x2F;p&gt;
&lt;p&gt;Most importantly, though, it just got me making things. When &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;vivekvivek.com&#x2F;&quot;&gt;Vivek&lt;&#x2F;a&gt; and I
bought a couch but couldn’t get it flush against the wall because of an
inconveniently located pipe, we opened &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.shapr3d.com&#x2F;&quot;&gt;Shapr&lt;&#x2F;a&gt; and made new legs to lift
it over the obstacle and into the position we had initially imagined.
When the gear guard on my bike cracked and started stabbing my pant
legs, I rapidly iterated a replacement. This course helped reinforce for
me how malleable the world around us can be.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;stanford-quarterly-reflection-06&#x2F;bike.webp&quot; alt=&quot;Me posing alongside my bike and an array of 3D-printed parts.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Of course, the major &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;tangible-deliverables&#x2F;&quot;&gt;tangible outcomes&lt;&#x2F;a&gt; of this course were the projects:
I’ve posted about &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;vault&#x2F;&quot;&gt;both&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;ping-pong-launcher&#x2F;&quot;&gt;already&lt;&#x2F;a&gt; elsewhere on this
site. I’m proud of the results and how much I learned in making them.
Working with my design partners, Vivek and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;trunramteke.com&#x2F;&quot;&gt;Trun&lt;&#x2F;a&gt;, was a joy. But I do
expect the attitude change to be far more productive than any physical
output in the long run.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;design1-introduction-to-design&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#design1-introduction-to-design&quot; aria-label=&quot;Anchor link for: design1-introduction-to-design&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
DESIGN1: Introduction to Design&lt;&#x2F;h3&gt;
&lt;p&gt;I tried to avoid this course entirely, but the bureaucracy won out and
I enrolled. The first project centered on a PSA to induce impossible
behavioral change rather than addressing the root issue via a relatively
simple systemic change. The second project was decently fun: my
lovely group and I built an escape room entitled &lt;em&gt;Jank Ass Spaceship&lt;&#x2F;em&gt;,
designed at least one totally novel puzzle, and used &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.val.town&#x2F;x&#x2F;figbert&#x2F;jank-ass-spaceship&quot;&gt;a simple val&lt;&#x2F;a&gt;
to remote-control a laptop. The third project I commandeered to hang
an unauthorized photo collage of folks in the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;productrealization.stanford.edu&#x2F;&quot;&gt;PRL&lt;&#x2F;a&gt; outside of AMPS as a
means of community building. It’s still up! I may expand it soon.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;stanford-quarterly-reflection-06&#x2F;wall.webp&quot; alt=&quot;Top secret photo wall located somewhere on Stanford campus.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;polisci114d-democracy-development-and-the-rule-of-law&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#polisci114d-democracy-development-and-the-rule-of-law&quot; aria-label=&quot;Anchor link for: polisci114d-democracy-development-and-the-rule-of-law&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
POLISCI114D: Democracy, Development, and the Rule of Law&lt;&#x2F;h3&gt;
&lt;p&gt;The incomparable &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cddrl.fsi.stanford.edu&#x2F;people&#x2F;hesham_sallam&quot;&gt;Professor Sallam&lt;&#x2F;a&gt; described this course as “PoliSci
Coachella.” He wasn’t kidding: we learned about nationalism from &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;x.com&#x2F;fukuyamafrancis&#x2F;status&#x2F;1552497332960120833&quot;&gt;renown
motorcycle enthusiast Frank Fukuyama&lt;&#x2F;a&gt;, democracy and it’s tumult
from Larry Diamond, the unique case of Latin America from Alberto
Díaz-Cayeros, the international promotion of democracy from Mike McFaul,
and numerous other subjects from Didi Kuo and Sallam themselves. How
fortunate I am to be in a place where these are normal opportunities.
The sessions I enjoyed the most were, of course, case studies, and it
was generally wonderful to have an island of writing and analysis in my
otherwise technical quarter. Also, with the overlap in material and the
more engaging teaching style, I think this course should take the place
of POLISCI1.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bio81-introduction-to-ecology&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bio81-introduction-to-ecology&quot; aria-label=&quot;Anchor link for: bio81-introduction-to-ecology&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
BIO81: Introduction to Ecology&lt;&#x2F;h3&gt;
&lt;p&gt;Three good things came from this class:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;It satisfied the first third of my Domain Focus for the Design major.&lt;&#x2F;li&gt;
&lt;li&gt;I learned that palm trees are, in fact, a grass.&lt;&#x2F;li&gt;
&lt;li&gt;We had one awesome class where we talked about The Winds. I don’t
think anyone else in class was sufficiently appreciative of the fact
that the products of Hadley Cells and the Coriolis effect were the
stuff of myth, discussion by pirates, and the primary drivers of the
economy and globalism up until fairly recently.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;My general knowledge of natural ecosystems has increased by a
mild-to-notable amount, and I am now perhaps 0.5% more likely to read
&lt;em&gt;Braiding Sweetgrass&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;design160r-design-formation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#design160r-design-formation&quot; aria-label=&quot;Anchor link for: design160r-design-formation&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
DESIGN160R: Design Formation&lt;&#x2F;h3&gt;
&lt;p&gt;Portfolio building class! Awesome that there’s time carved out for this
in the program. It probably doesn’t need a teaching team of six. If,
however, it manages to get me a job at LoveFrom I will sing its praises
until the end of time.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;all-the-rest&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#all-the-rest&quot; aria-label=&quot;Anchor link for: all-the-rest&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
All the Rest&lt;&#x2F;h2&gt;
&lt;p&gt;I spent this quarter as the only president of JSA on-campus, which was
a rewarding endeavour. The community is thriving: Grupo Benji continues
to be the bane of the Coupa Cafe line, and Special Drake was not only
super fun but a widely congratulated theme for our Fall Quarter party
(surpassing my expectation that I would be the only person truly
enthused about it). We’ve also adopted &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;basecamp.com&#x2F;&quot;&gt;Basecamp&lt;&#x2F;a&gt;, which I hope will
help us stay organized, democratize participation even further, and
leave a trail of documentation for those that come after us to help them
take up the torch. The &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=f2flWFN3AAI&quot;&gt;formal establishment&lt;&#x2F;a&gt; of the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cddrl.fsi.stanford.edu&#x2F;israel&quot;&gt;Israel
Studies Program&lt;&#x2F;a&gt; this quarter has similarly helped to formalize the
legacy and continued existence&#x2F;stability of Jewish life on campus. I was
honored to be invited to its inauguration, and I’m excited for where the
program will go in the future.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;stanford-quarterly-reflection-06&#x2F;drake.webp&quot; alt=&quot;No party is complete without the Drake Cake.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I got up to plenty of shenanigens with my friends as well. Daniel’s
FLiCKS was yet again a raging success, with a screening of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=tvc_7QGnUFQ&quot;&gt;Austin
Powers&lt;&#x2F;a&gt; followed by an evening of discussion with Jay Roach himself.
Daniel also starred, along with Henry, Carter, Jack, Odin, and myself,
on The Quambos intramural indoor volleyball team. I don’t know that I’ve
ever had more fun than playing our first game, winning through spirit
rather than skill, and designing our preposterous kits. The league
will certainly fall to us next quarter. Living in French with Vivek
has been awesome: it seems it’s really as simple as liking the same
snacks (and perhaps videogames). And Nageena and I went on a whole host of
adventures—from &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nps.gov&#x2F;pore&#x2F;planyourvisit&#x2F;tomales-bay-boat-in-camping.htm&quot;&gt;kayak camping&lt;&#x2F;a&gt; in Point Reyes, to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.smugglerscovesf.com&#x2F;&quot;&gt;Smuggler’s Cove&lt;&#x2F;a&gt;
and the Little Red Window, to Tahoe with no snow.&lt;&#x2F;p&gt;
&lt;p&gt;Of course, many other people helped make this quarter so beautiful: my
family, Dani, Tommy, Lulu, Aaron, Yoni, Miles, Omry, and perhaps you,
dear reader, as well.&lt;&#x2F;p&gt;
&lt;p&gt;I love you all!&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Aspirational Surfing</title>
    <published>2026-02-09T11:51:00-08:00</published>
    <updated>2026-02-09T11:51:00-08:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/sweetness-and-blood/" type="text/html"/>
    <id>https://figbert.com/reading/sweetness-and-blood/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;Sweetness and Blood&lt;&#x2F;i&gt; by Michael Scott Moore. &lt;br&#x2F;&gt;
        Finished on February 01, 2026. &lt;br&#x2F;&gt;
        
        Rating: ★★★☆☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;A little over three years ago when I read &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;desert-and-the-sea&#x2F;&quot;&gt;The Desert and the Sea&lt;&#x2F;a&gt;, I
noted that &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;radiofreemike.net&#x2F;&quot;&gt;Michael Scott Moore&lt;&#x2F;a&gt; had also written a book about surfing.
As the life-long Californian that I am, the sport and its aesthetic
associations are familiar to me. But it took until a recent &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;onceuponacoconut.com&#x2F;&quot;&gt;tropical&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.smugglerscovesf.com&#x2F;&quot;&gt;obsession&lt;&#x2F;a&gt; to convince me to pick up the book and follow his winding
tale of “how surfing spread from Hawaii and California to the rest of
the world, with some unexpected results.”&lt;&#x2F;p&gt;
&lt;p&gt;I enjoyed his world tour and learned something everywhere we went. Some
of the locations did just seem like they were “strange” in that they
were poor, but others had more depth. The chapter on surfing in Israel
and Gaza was particularly interesting to me, of course: I’ve swum in
the shore breaks of Tel Aviv, and seen the confluence of people who
ride boards a short walk south in Yafo where the shore is unprotected.
Embarassingly, I had never heard of the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;he.wikipedia.org&#x2F;wiki&#x2F;%D7%97%D7%A1%D7%A7%D7%94&quot;&gt;hasake&lt;&#x2F;a&gt; before this book. I’ll
keep my eyes peeled next time I’m in the country. Cuba and São Tomé
and Príncipe were fascinating reads in the much same manner as Israel:
locales where surfing is really foreign, really out of place. And his
writing on Indonesia and Morocco made me want to bum there on the beach
when I have some time off.&lt;&#x2F;p&gt;
&lt;p&gt;When I was a kid I went to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bigdogsurfcamp.com&#x2F;&quot;&gt;surf camp&lt;&#x2F;a&gt; and was too scared to stand up on
the board. Since then, I have justified my non-surfing with the ocean’s
frigid temperature along the northern Californian coast.  The Germans in
Moore’s book put me to great shame by continuing on nonetheless:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Remember, we had no wetsuits!” Drath said. “My God, we froze!”…
Yet in those days, more people on Sylt went swimming… “Why?” I said.
Father and son, in unison, said, “Central heating.”&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;You can see the beginnings of Moore’s later work in this book. As
always, he weaves a larger narrative alongside his journalist’s personal
touch—telling a history of surfing as much as a story of a friend’s
cancer. I think there’s a lesson there in the ills of code switching:
Moore leaves no part of himself behind, and the book is better for it.&lt;&#x2F;p&gt;
&lt;p&gt;Curiously, it was challening to get my hands on the book. The physical
edition is not too common these days and I had trouble finding a digital
version. I’m not sure where the EPUB I found came from.&lt;&#x2F;p&gt;
&lt;p&gt;Perhaps, having finished the book, I’ll now find some time to actually
get out on the waves.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Recurse Center</title>
    <published>2026-01-03T20:20:00-08:00</published>
    <updated>2026-01-03T20:20:00-08:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/work/recurse/" type="text/html"/>
    <id>https://figbert.com/work/recurse/</id>
    <content type="html">
      &lt;small&gt;
        Began: 30 Jun 2025 &lt;br&#x2F;&gt;
        Concluded: 19 Sep 2025
      &lt;&#x2F;small&gt;
      &lt;p&gt;Many people say the job market is a mess. Fewer people find themselves
on a layover relocating for a job only to have the second leg of the
trip cancelled as &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.axios.com&#x2F;2025&#x2F;06&#x2F;13&#x2F;israel-strike-iran-trump-nuclear-talks&quot;&gt;a war broke out&lt;&#x2F;a&gt; mid-flight. This was the situation I
found myself in one evening in New York—and I began to form a new plan.
There was a mysterious place I had heard of, from &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;eieio.games&#x2F;&quot;&gt;internet celebrities&lt;&#x2F;a&gt;
and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;miles.land&#x2F;&quot;&gt;Stanford peers&lt;&#x2F;a&gt;, where programmers could go to build… things. It
wasn’t all that clear to me actually but everyone I knew who had done it
was very cool and I had yet to try living on the East Coast so I checked
the window for applications, saw there was about a week left before the
summer batch, and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.recurse.com&#x2F;apply&quot;&gt;the rest is history&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;work&#x2F;recurse&#x2F;company.webp&quot; alt=&quot;My batch gathered together celebrating Recurse’s birthday.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.recurse.com&#x2F;scout&#x2F;click?t=0d85c06dc14f97552f2130471d4e3086&quot;&gt;Recurse&lt;&#x2F;a&gt; gave me the resources—both technical and personal—to do the
best work I’ve ever done. I was able to hack on projects I had long
imagined but never had the time for, and pursue new ideas with wild
abandon. On my first day in the office I showed up to a hackathon
partner-less, and said that I was looking to make progress on a &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;ideating-tragit&#x2F;&quot;&gt;code
forge&lt;&#x2F;a&gt;. Someone else had shown up alone as well, and volunteered.
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wolfesoftware.com&#x2F;&quot;&gt;Josh&lt;&#x2F;a&gt;, fountain of &lt;code&gt;git&lt;&#x2F;code&gt; knowledge and the world’s premier &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;thejoshwolfe&#x2F;poaf&quot;&gt;ZIP
expert&lt;&#x2F;a&gt;, became a good friend.  On my last day in the office, I one-shot
a prototype &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;FIGBERT&#x2F;playspinz&quot;&gt;dreidel game&lt;&#x2F;a&gt; at a hackathon for the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;play.date&#x2F;&quot;&gt;Playdate console&lt;&#x2F;a&gt;. In
between these bookending coding sprints, I discovered that everyone at
the Recurse Center had arrived with their own profound specialties and
interests. I was no exception: some &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;roll-call&#x2F;#eight-months-later&quot;&gt;things&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;blind-date-a-book&#x2F;&quot;&gt;I&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;rapid-riter&#x2F;&quot;&gt;made&lt;&#x2F;a&gt;
&lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;cordially&#x2F;&quot;&gt;there&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;stickies&#x2F;&quot;&gt;have&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;cloudlab&#x2F;&quot;&gt;ended&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;two-pockets&#x2F;&quot;&gt;up&lt;&#x2F;a&gt; on this site.&lt;&#x2F;p&gt;
&lt;p&gt;Some notable occurences and accomplishments from my time at the
Recurse Center have yet to make their way into the public eye. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.frankchiarulli.com&#x2F;&quot;&gt;Frank&lt;&#x2F;a&gt;
nerd-sniped me into a hardware project of grand scale that I &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;figbert&#x2F;scrollthingy&quot;&gt;am still
working on&lt;&#x2F;a&gt;. When it’s done it may very well be my magnum opus. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;keithfrost.github.io&#x2F;&quot;&gt;Keith&lt;&#x2F;a&gt;
tricked me into learning &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;gleam.run&#x2F;&quot;&gt;Gleam&lt;&#x2F;a&gt;, and I have gone on to become a huge
fan of the language. I also picked up Ruby and Rust, though I didn’t end
up trying a Lisp as I had hoped. I met &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;filippo.io&quot;&gt;Filippo&lt;&#x2F;a&gt;, creator of  &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;age-encryption.org&#x2F;&quot;&gt;&lt;code&gt;age&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;,
and he mailed me stickers that are now on my bike. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wobblybits.blog&#x2F;&quot;&gt;David&lt;&#x2F;a&gt; planted the
idea in my mind that “project people” should have a truck, and four
months later I test-drove a Rivian R1T…&lt;&#x2F;p&gt;
&lt;p&gt;Working at Recurse is a high-agency playground. If you enjoy shooting
off on &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;tangible-deliverables&#x2F;&quot;&gt;productive tangents&lt;&#x2F;a&gt;—as I do—there are enough toys there to keep
you entertained for a long time. Apply yourself and you can turn the
3D printers, retro computers, ESP32s, and ultrawide monitors around you
into something wonderful. Or &lt;em&gt;somethings&lt;&#x2F;em&gt; wonderful! And while doing
so, you’ll pair with incredible folks, present your work to a large
audience, and hopefully become a better maker yourself. You are the only
one in charge and there is no guide. I enjoyed that. In many ways it
felt like a natural extension of the d. school’s philosophy of “learning
by doing.”&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;work&#x2F;recurse&#x2F;presentation.jpg&quot; alt=&quot;Me presenting at the Recurse Center&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I was chatting with a good friend of mine over summer, describing
Recurse, when she posed a good question: “How is this going to change
what you’re looking for in a career?” It’s true that I have yet to see
a job posting for &lt;em&gt;Person Who Builds Funky and Impactful Open-Source
Stuff and Eats at a New Restaurant Every Night&lt;&#x2F;em&gt;. But there are aspects
of Recurse that I will look for wherever I end up next. I enjoyed
the variety, the personal responsibility, the creative control, and
the balanced blend of impressive goals with relaxed attitude. These
qualities made the the work feel special. If you’re working on something
with purpose and you think you can provide the above, &lt;a href=&quot;mailto:figbert@figbert.com&quot;&gt;do reach out&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>The Fall of a Great Product</title>
    <published>2026-01-03T13:00:00-08:00</published>
    <updated>2026-01-03T13:00:00-08:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/fall-of-great-product/" type="text/html"/>
    <id>https://figbert.com/posts/fall-of-great-product/</id>
    <content type="html">
      &lt;p&gt;Many years ago, my family discovered a secret about the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.grandwailea.com&#x2F;&quot;&gt;Grand Wailea&lt;&#x2F;a&gt;:
amongst all their wonderful amenities, none managed to surpass the
quality of their in-room body wash. A good product and a great one are
worlds apart, and until recently, the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;shopatgrandwailea.com&#x2F;collections&#x2F;honey-mango&#x2F;products&#x2F;honey-mango-body-wash-1&quot;&gt;Honey Mango scrub&lt;&#x2F;a&gt; was one of
the best. I want to take a moment to appreciate what it was and honor a
beautiful work by observing its passing.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;fall-of-great-product&#x2F;old.webp&quot; alt=&quot;An image representative of the old body wash.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Three things made the body wash an excellent product: it smelled
phenomenal, it &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.merriam-webster.com&#x2F;dictionary&#x2F;lather#dictionary-entry-2&quot;&gt;lathered&lt;&#x2F;a&gt; well, and it had a shining amber color.
Combined, these qualities made the exclusive wash not just the best
in terms of performance—cleaning dirt and imbuing scent—but also in
terms of operation. It was fun. I have fond memories of carrying the
nuclear-orange bottle home from the package center and watching it glint
in the sun. I enjoyed smelling like Maui every day.&lt;&#x2F;p&gt;
&lt;p&gt;This was the deal—quality for inconvenience. For half a decade, we
would trade money (in literal cost) and time (in slow shipping to the
mainland) for a superior product from &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;shopatgrandwailea.com&#x2F;&quot;&gt;their online store&lt;&#x2F;a&gt;. We were
happy with the arrangement; not compromising on little, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;dp&#x2F;B07NDLKQC5&#x2F;&quot;&gt;day-to-day
experiences&lt;&#x2F;a&gt; compounds and happiness is a good deal at any price. I am
grateful for the years of excellent body wash in a way that most readers
will likely find ridiculous.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;fall-of-great-product&#x2F;new.webp&quot; alt=&quot;The new body wash.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It wasn’t to last. Last year, the product line suffered a refresh.
Each of its finest aspects was decimated: the smell was less sweet,
the lather unimpressive, and the color—now hidden behind dark blue
plastic—approached transparent. But the consultants who had made a
mockery of this wonderful soap did not stop there. They found new
insults. The 32oz size, the most economical option, was eliminated.
And the new pump was designed with a sharp edge that sliced my fingers
repeatedly. This last offense in particular seemed an omen. I conferred
with my dad, who revealed that he had also cut his fingers on a bottle
of the scrub, and we came to a solemn conclusion: it was time to move
on.&lt;&#x2F;p&gt;
&lt;p&gt;I do not expect I will find something quite as magical as the original
soap anytime soon. But I have found &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.treehutshea.com&#x2F;collections&#x2F;body-washes&#x2F;products&#x2F;coco-colada-foaming-gel-wash&quot;&gt;a replacement&lt;&#x2F;a&gt;: a lather as good—if
not better—than the original, a slightly inferior scent and color, and a
much improved retail experience. It will do.&lt;&#x2F;p&gt;
&lt;p&gt;A soap may seem too trivial a thing to memorialize. But what is a life
but a compendium of little wonders? This was one of mine.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Projectile Launcher</title>
    <published>2025-12-21T00:00:00+00:00</published>
    <updated>2025-12-21T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/ping-pong-launcher/" type="text/html"/>
    <id>https://figbert.com/projects/ping-pong-launcher/</id>
    <content type="html">
      &lt;p&gt;Flinging an object a distance is perhaps humanity’s oldest challenge—and
it’s one I faced with &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;vault&#x2F;&quot;&gt;my teammates&lt;&#x2F;a&gt; for the final project of &lt;em&gt;ME102:
Foundations of Product Realization&lt;&#x2F;em&gt;. Building a machine to achieve this
feat covers a fairly vast problem space: fortunately, we were provided
with some constraints. This narrowed our work to answering three
fundamental questions.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;How might we&lt;&#x2F;strong&gt; propel a ping pong ball eight feet into a
4“-diameter hole using springs?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;How might we&lt;&#x2F;strong&gt; reload after each shot (at least 5 times) without
touching the balls?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;How might we&lt;&#x2F;strong&gt; do each of these tasks consistently and smoothly?&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;After an exhausting week practically living in the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;productrealization.stanford.edu&#x2F;&quot;&gt;PRL&lt;&#x2F;a&gt;, we had our
answer:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;ping-pong-launcher&#x2F;hero.jpg&quot; alt=&quot;An angled shot of the finished prototype.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Our first three prototypes focused on the firing mechanism. Our designs
evolved from a simple tube and rod system into a hand-held ping pong
gun. We primarily iterated on the geometry of the barrel and housing
of the springs, developing many features that would be central to
our continued work: an octagonal shape, side-mounted modules, and an
ergonomic handle.&lt;&#x2F;p&gt;
&lt;p&gt;Though functional enough to be fun to shoot at each other, this version
didn’t quite satisfy the project requirements: our continued design
work focused on mounting the system. We were particularly interested in
ways that this new form could make its operation less manual and more
consistent. We bounced between gear systems, levers, cranks, and several
more automated release mechanisms that made the device more manual and
less consistent. Observing this perplexing result, we halved the number
of springs (down to four, which yielded identical results in terms of
distance while allowing us to simplify our launcher mechanically) and
returned to the functional firing system we began with.&lt;&#x2F;p&gt;
&lt;p&gt;Finishing the device necessitated a whole host of upgrades: a reload
system built from an inclined tube, heat-set inserts throughout the
chassis, and a reimagined stand manufactured on the laser cutter rather
than the 3D printer. The reservoir in the reload system has pivoting
guards above it which restrict  the movement of the balls within:
without the protection of the guards, our extremely light ammo would be
jolted out of the device by the recoil from each shot. Meanwhile, the
new stand boasts a guiding track which limits the wobble of the striking
rod, neutralizing the vertical and lateral variability that might
otherwise arise from a combination of human falliability and machined
tolerances.&lt;&#x2F;p&gt;
&lt;p&gt;Crucially, we dialed in the functionality through testing. This
experimentation involved firing (and sometimes losing) whole clips of
ping pong balls. We tweaked clamp and weight placements, varied the
angle of the barrel, and trained to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=uQPSfE46buY&quot;&gt;hold the handle&lt;&#x2F;a&gt; properly in order
to get a reproducible shot.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;ping-pong-launcher&#x2F;prototypes.jpg&quot; alt=&quot;Our prototypes evolving over time.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Part of what’s wonderful about working with a team you really enjoy,
as I had the great fortune of doing on this project, is that the work
itself becomes play. This is where real creativity surfaces. In the case
of the launcher, this meant that we wanted to go beyond simply making a
device that achieved the maximum performance score. We wanted something
that would make us proud: it needed style.&lt;&#x2F;p&gt;
&lt;p&gt;Our first addition to that end was the projectile iron sight. This small
etched acrylic circle—aligned with a small notch at the rear of the
reservoir—employs the parallax effect to give the operator a direct line
of sight along the ball’s trajectory. It was mostly a joke: like putting
a spoiler on a Prius. But it was actually pretty useful on testing day,
which was a welcome bonus!&lt;&#x2F;p&gt;
&lt;p&gt;Second, we designed the five-shot reload capability to approximate a
bolt action mechanism. The handle is located by the mouth of the barrel,
and physically prevents balls from descending from the reservoir in
its resting position. When retracted, one ball enters the barrel, and
a large chamfer on the front-facing side pushes any extra balls back
into the reservoir as you conclude the loading process by returning the
handle back to its extended state. The launcher is definitively
non-lethal, but you hardly feel that way when you’re slamming the bolt
around after a shot.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;ping-pong-launcher&#x2F;testing.jpg&quot; alt=&quot;Testing and assembling prototypes.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Looking at a complex machine, it can be challenging to grasp how all
of its minute components form the whole. In our CAD work for this
project, we developed a visceral understanding of how that understanding
might happen: piece by piece. A table-mounted ping pong cannon is too
big a problem to solve all at once. But chunk it up, and it becomes
approachable—a barrel is a cylinder, a handle is two perpendicular
rectangles, and so on. This sort of understanding is further facilitated
when you avoid over-engineering things. It is tempting to look down on
simple solutions. Yet these are often the most reliable! Our ultimate
product uses far more of these solutions than the complex, fallible
ideas we often start out with.&lt;&#x2F;p&gt;
&lt;p&gt;In iterating on the device further, we are curious about maximizing
precision and consistency and minimizing size. Though this could be
performed through experimentation, we want to give some attention
to prior art. We are keenly interested in reading materials on the
complex mechanisms we implemented (such as chambers and reloading,
striking&#x2F;launching projectiles, and springs in low-tolerance
environments), and will seek them out before making any improvements.&lt;&#x2F;p&gt;
&lt;p&gt;We also want Timotheé Chalamet to see it and use it in the promo for
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;letterboxd.com&#x2F;film&#x2F;marty-supreme&#x2F;&quot;&gt;his new movie&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;ping-pong-launcher&#x2F;celebration.jpg&quot; alt=&quot;My team celebrating the completion of the device (from right to left: Trun, Benji, Vivek).&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>I Think This Might Have Been Epistolary</title>
    <published>2025-12-15T00:00:00+00:00</published>
    <updated>2025-12-15T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/prince-of-persia/" type="text/html"/>
    <id>https://figbert.com/reading/prince-of-persia/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;The Making of Prince of Persia&lt;&#x2F;i&gt; by Jordan Mechner. &lt;br&#x2F;&gt;
        Finished on November 29, 2025. &lt;br&#x2F;&gt;
        
        Rating: ★★★★☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stripe.com&#x2F;&quot;&gt;Stripe&lt;&#x2F;a&gt; is bursting with side quests these days. In addition to
providing the “financial infrastructure to grow your revenue” that we
all &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;blind-date-a-book&#x2F;&quot;&gt;know and love&lt;&#x2F;a&gt;, they run &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;worksinprogress.co&#x2F;&quot;&gt;a print magazine&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;press.stripe.com&#x2F;&quot;&gt;a publishing
company&lt;&#x2F;a&gt;. Scrolling through the website of the latter and feeling
jealous of their stunning visuals, I stumbled on a book about
videogames. Or rather, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;press.stripe.com&#x2F;the-making-of-prince-of-persia&quot;&gt;one videogame&lt;&#x2F;a&gt; in particular. Having played
the first level of Aladdin on the SNES and enjoyed the movie adaptation
of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;letterboxd.com&#x2F;film&#x2F;prince-of-persia-the-sands-of-time&#x2F;&quot;&gt;Prince&lt;&#x2F;a&gt;, I thought I might give it a read.&lt;&#x2F;p&gt;
&lt;p&gt;The journal entry form made it an easy read, and the concision of each
note reminded me—for my own practice—that you don’t have to write a
novel for every entry to build a compelling narrative or get meaningful
content onto the page. I found Mechner’s attention to craft, especially
now in an era where the love of the game has dried up in the shadow of
grifters and generic fortune-seekers, inspirational. A random sample:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The PC version is maybe 50% of what it should be. I can’t even tell
these guys what to fix… it’s a million little things, and they’re just
not up to the hassle. That kind of attention to detail is why the
Apple version took me two years. This version is probably the best
I’ll ever get out of them. Oddly enough, this makes me more psyched to
do the new game. It reminded me why I’m good at this – of what I can
do that others can’t, or won’t.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;His discussions of money are bizarre and interesting. Either things are
very different now, or I have underappreciated the value of intellectual
property and the amount of work people will do for you with the promise
of an eventual commission. Likely both. In particular: he makes a chunk
of change selling the right to port his games to other platforms. Modern
game engines abstract away much of this process, and even without this
help there are only three desktop platforms and three consoles worth
thinking about—strictly less than in his day. But I will keep in mind
the value of an agent shopping your work around, should I ever decide to
do something like screenwriting, as well as the benefits and drawbacks
of working on a personal creative project within the bounds of a
corporate partner (as he does with Prince of Persia via Broderbund).&lt;&#x2F;p&gt;
&lt;p&gt;It’s a thoroughly Bay Area book as well. To interpolate a
seasonally-appropriate phrase: reading this, I am presented with a
narrative of events from his time but in &lt;em&gt;this place&lt;&#x2F;em&gt;. It’s trippy: he
eats at Marin Joe’s! I suppose I should have assumed from the general
vibe of that restaurant that it had been there forever. To top it all
off, there’s this lovely paragraph:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Man, it’s great to be back. When I got into my rented car and hit
Highway 280, I laughed out loud, I was so thrilled. The trees, the
colors, the quality of the sunlight… San Francisco is the most
beautiful city on the planet.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Should Mechner ever feel compelled to release a sequel from the period
in which Prince was being adapted to a feature film, I would immediately
give it a read. For someone so in love with both making games and
writing films, I’m sure it was a crowning acheivement.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Developments on the Git Forge Horizon</title>
    <published>2025-11-18T23:00:00-08:00</published>
    <updated>2025-11-18T23:00:00-08:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://steveklabnik.com/writing/i-see-a-future-in-jj/" type="text/html"/>
    <id>https://figbert.com/posts/steve-klabnik-future-in-jj/</id>
    <content type="html">
      &lt;p&gt;Steve Klabnik, as found on &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lobste.rs&#x2F;s&#x2F;ghdv6w&#x2F;i_see_future_jj&quot;&gt;Lobsters&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;some of my friends have started a new company, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ersc.io&#x2F;&quot;&gt;ERSC&lt;&#x2F;a&gt;, which is going to
be building a new platform for developer collaboration on top of &lt;code&gt;jj&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;GitHub delenda est. I &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;ideating-tragit&#x2F;&quot;&gt;currently&lt;&#x2F;a&gt; have no &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;cloudlab&#x2F;&quot;&gt;self-hosted solution&lt;&#x2F;a&gt;,
so I’m stranded in the digital bazaar. The above seems neat but far away.
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tangled.org&#x2F;&quot;&gt;Tangled&lt;&#x2F;a&gt; looks promising: it hits the self-hostable but accepting broad
constributions sans-account bullseye, and manages to do so without even
resorting to Drew DeVault’s insistence that email can work again. But
the frontend needs work and I don’t want to push via SSH.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
      &lt;a href=&quot;https://figbert.com/posts/steve-klabnik-future-in-jj/&quot;&gt;★&lt;&#x2F;a&gt;
    </content>
  </entry>
  <entry xml:lang="en">
    <title>Vault</title>
    <published>2025-11-13T11:30:00-08:00</published>
    <updated>2025-11-13T11:30:00-08:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/vault/" type="text/html"/>
    <id>https://figbert.com/projects/vault/</id>
    <content type="html">
      &lt;p&gt;For the second project of &lt;em&gt;ME102: Foundations of Product Realization&lt;&#x2F;em&gt;,
you are assigned a mechanism and instructed to build something with
it. My group was assigned a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;507movements.com&#x2F;mm_099.html&quot;&gt;19th-century spiral feed system&lt;&#x2F;a&gt;. We
reimagined this historical mechanism as part of a vault door locking
system, using the spiral’s gradual rotary-to-linear translation to
control four locking arms. This new use-case captures the physical
character of the original mechanism while taking it in an unexpected new
direction. And it looks fantastic:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;vault&#x2F;vault.jpg&quot; alt=&quot;An angled shot of the finished prototype.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Before any physical experimentation, we sketched and ideated a number of
possible mechanical arrangements and functions, with ideas ranging from
tidal and wind movement to drills and water wheels. Ultimately though,
the idea to transform the drill arm into a lock bolt came from a visit
to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;x.com&#x2F;jordanbpeterson&#x2F;status&#x2F;1633882580746653696&quot;&gt;a restroom in the Cantor Arts Museum&lt;&#x2F;a&gt;. There, we saw the horizontal
motion of the stall’s bolt directly creating a fixed rotational change
in the external signage (red&#x2F;green correlating with the stall’s occupied
status). Our mechanism performs that same transformation in reverse!&lt;&#x2F;p&gt;
&lt;p&gt;We made two prototypes over the course of the project. The first was a
2.5D laser-cut mock, which we used just to get an intuitive sense of the
mechanism. For our second iteration, we migrated to the 3D printer. This
version was our first vertical spiral, and the plastic significantly
reduced friction over the earlier wood model. It sported a wide base
for stability and a LEGO-inspired plus axel to latch the rotational arm
to the mechanism. After these two functional experiments, we refocused
our work toward building for a specific use-case: the vault.&lt;&#x2F;p&gt;
&lt;p&gt;Our final design built on the successes of our second prototype while
upgrading to mixed fabrication methods. This iteration combined a
3D-printed spiral and wheel components with laser-cut acrylic plates
and metal fasteners. The inclusion of real hardware allowed for smoother
motion, adjustable tolerances, and a sturdier overall assembly. This was
a professional device.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;vault&#x2F;in-progress.png&quot; alt=&quot;Two sets of sketches + shots of the final construction process.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Our final CAD model combines four different materials, three
manufacturing processes, and two complex joints in one digital source
of truth. The device just barely fits inside an 8“ cube (in case you
have one of those laying around).&lt;&#x2F;p&gt;
&lt;p&gt;Two interesting notes that might otherwise get missed:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;We designed our 3D printed parts in the center around the 2D
constraints of the laser-cut acrylic, which we stacked (0.236” per
layer) to create the transparent walls.&lt;&#x2F;li&gt;
&lt;li&gt;Embedded in a layer of the door’s acrylic and the plastic wall of the
safe body are a set of magnets! These add a subtle click that makes
the door quite satisfying to open and close.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This project built on a lot of the previous knowledge we had acquired
prototyping in ME102. For example, before cutting the final acrylic
parts to construct the wall, we performed a number of test cuts to
examine the tolerance. This made working with fasteners much easier, and
is a practice we adopted after our introduction to friction fits in the
first project.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;vault&#x2F;cad.png&quot; alt=&quot;Shots of CAD views and early prototypes.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Looking toward the horizon, we are of course interested in improvements
to security. That would mean replacing our plastic parts with metal—so
that you can’t defeat our vault using blunt force—as well as an actual
locking mechanism, which we deemed out of scope for this version.
Perhaps you’ll hear more about that from me and my incredible teammates
(&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;vivekvivek.com&#x2F;&quot;&gt;Vivek&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;trunramteke.com&#x2F;&quot;&gt;Trun&lt;&#x2F;a&gt;) at some point in the future.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;vault&#x2F;celebration.png&quot; alt=&quot;My team celebrating the completion of the device (from right to left: Vivek, Benji, Trun).&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>How to Format a micoSD Card for the Nintendo Switch</title>
    <published>2025-10-29T00:00:00+00:00</published>
    <updated>2025-10-29T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/nintendo-microsd/" type="text/html"/>
    <id>https://figbert.com/posts/nintendo-microsd/</id>
    <content type="html">
      &lt;p&gt;I burnt vastly too much time on this today, after having already figured
this out a week ago, so here it goes in writing. In one sentence: format
everything in exFAT and use the Master Boot Record partition scheme.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Spoiler for my Y3Q1 quarterly reflection: this year my dorm room is
awesome. One of the new goodies that we have is a TV, and so I brought
my basically unused Switch out of retirement to see if console gaming
might be entertaining now. It is! We’ve been playing the hits (Mario
Kart, Overcooked, etc.) and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.loversinadangerousspacetime.com&#x2F;&quot;&gt;some indies&lt;&#x2F;a&gt;. And as the Switch’s
popularity among my friends has grown, so has the demand for more games.&lt;&#x2F;p&gt;
&lt;p&gt;This, of course, presents an issue: games take up much space, and the
onboard storage of the Switch is not infinite. So I ponied up for an
upgrade to my existing external storage (8GB) and bought a 128GB microSD
card off Amazon. Of course, I had at this point forgotten how I set up
the first card.&lt;&#x2F;p&gt;
&lt;p&gt;I took a big, painful detour trying to create a disk image of the old
card with Disk Utility, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.shirt-pocket.com&#x2F;SuperDuper&#x2F;SuperDuperDescription.html&quot;&gt;SuperDuper&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bombich.com&#x2F;&quot;&gt;CCC7&lt;&#x2F;a&gt;, &lt;code&gt;hdiutil&lt;&#x2F;code&gt;, and &lt;code&gt;dd&lt;&#x2F;code&gt; before
realizing that I could just copy the data like any other files (Nintendo
conveniently puts everything in one top-level folder).&lt;&#x2F;p&gt;
&lt;p&gt;After that, the partition scheme was just trial and error.&lt;&#x2F;p&gt;
&lt;p&gt;I’m looking forward to the expansion: my first round of purchases
includes &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stray.iam8bit.com&#x2F;en&quot;&gt;Stray&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.factorio.com&#x2F;&quot;&gt;Factorio&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;interconnected.org&#x2F;home&#x2F;2025&#x2F;10&#x2F;23&#x2F;wholesome&quot;&gt;A Short Hike&lt;&#x2F;a&gt;. If the habit proves
more permanent, I’m sure my now-dormant &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;backloggd.com&#x2F;u&#x2F;figbert&#x2F;&quot;&gt;Backloggd&lt;&#x2F;a&gt; will make its way
onto my homepage.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Two Pockets</title>
    <published>2025-10-09T22:30:00-07:00</published>
    <updated>2025-10-09T22:30:00-07:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/two-pockets/" type="text/html"/>
    <id>https://figbert.com/projects/two-pockets/</id>
    <content type="html">
      &lt;p&gt;There is an ancient Jewish story told about a wise man who used to walk
around with two pieces of paper, one in each of his pockets. On one
piece of paper was written “the world was made for me” (Sanhedrin 4:5),
and on the other, “I am dust and ashes” (Bereshit 18:27). The ability to
hold on to two mutually contradictory truths equally tightly is a core
aspect of Judaism, in my mind, and a skill I find myself relying on more
than one might expect. As such, I wanted a physical reminder of this
ancient wisdom.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;two-pockets&#x2F;prototypes.jpg&quot; alt=&quot;A number of 3D-printed test models next to a floppy disk.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I modeled two bracelet charms in &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.shapr3d.com&#x2F;&quot;&gt;Shapr3D&lt;&#x2F;a&gt;, tweaking them until I was
satisfied. I printed out a number of tests at different scales at the
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.recurse.com&#x2F;scout&#x2F;click?t=0d85c06dc14f97552f2130471d4e3086&quot;&gt;Recurse Center&lt;&#x2F;a&gt;, which allowed me to play with the size on my wrists as
well as refine the text so that it wouldn’t come out a muddled mess.
None of the prototypes came out perfect, but I hoped that the increased
accuracy of resin printing would make the cast come out a smidge
cleaner—and in any case, I had resolved to make an attempt at realizing
the vision.&lt;&#x2F;p&gt;
&lt;p&gt;There are a number of print-on-demand services. The first one I
encountered was &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=42666190&quot;&gt;Sculpteo&lt;&#x2F;a&gt;—but I didn’t ended up using them, as my
choice was guided primarily by material options. I wanted something gold
(to match my existing jewelry) but without paying the hefty fee that
entails. This is seemingly a niche desire. So: plated silver and
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;castimize.com&#x2F;&quot;&gt;Castimize&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;two-pockets&#x2F;manufactured.jpg&quot; alt=&quot;A close-up of the cast models on my desk.&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;two-pockets&#x2F;gold.jpg&quot; alt=&quot;The bracelets in use.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The metal pieces are &lt;em&gt;perfect&lt;&#x2F;em&gt;—honestly I’m a bit surprised! They’re so
good that I’ve almost entirely left my watch behind, and picked up some
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;EUvgqItrt1c?si=xdPdIUWyPo5xJKg7&amp;amp;t=91&quot;&gt;new work on the side&lt;&#x2F;a&gt;. I’m not in love with the yarn bracelets: I’m
afraid that salt water and time will make them brittle and they’ll snap,
so I’m in the market for a good set of chains. But what I’m happiest
about is that I have made art for its own sake. And not just any art:
Judaica!&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Text Conversation, Transcribed</title>
    <published>2025-09-25T23:35:00-07:00</published>
    <updated>2025-09-25T23:35:00-07:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/counterlife/" type="text/html"/>
    <id>https://figbert.com/reading/counterlife/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;The Counterlife&lt;&#x2F;i&gt; by Philip Roth. &lt;br&#x2F;&gt;
        Finished on September 17, 2025. &lt;br&#x2F;&gt;
        
        Rating: ★★★☆☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;i just finished the counterlife&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Oh wow &lt;br&#x2F;&gt;
Thoughts? &lt;br&#x2F;&gt;
I honestly don’t remember it all that well anymore&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;i understand that the whole point is that the book was an interpolation
of the same story in many different interpretations&lt;&#x2F;p&gt;
&lt;p&gt;but it made it a very confusing read&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;What was the conflict between the brothers &lt;br&#x2F;&gt;
One of them was having an affair?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;they were both involved in various differing affairs&lt;&#x2F;p&gt;
&lt;p&gt;i would say that the main conflict is about conceptions of the “good
life”&lt;&#x2F;p&gt;
&lt;p&gt;the playboy vs the father, the jew and the heretic, the diaspora and the
independence&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;I should read more of the Zuckerman books&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>On the Recommendation of a Friend</title>
    <published>2025-09-25T23:30:00-07:00</published>
    <updated>2025-09-25T23:30:00-07:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/an-odyssey/" type="text/html"/>
    <id>https://figbert.com/reading/an-odyssey/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;An Odyssey&lt;&#x2F;i&gt; by Daniel Mendelsohn. &lt;br&#x2F;&gt;
        Finished on June 12, 2025. &lt;br&#x2F;&gt;
        
        Rating: ★★★★☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;I should really read the source material. But a touching journey
nonetheless, which I am glad the author has shared.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Cloudlab</title>
    <published>2025-09-25T17:20:00-07:00</published>
    <updated>2025-09-25T17:20:00-07:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/cloudlab/" type="text/html"/>
    <id>https://figbert.com/projects/cloudlab/</id>
    <content type="html">
      &lt;p&gt;In the vast apparatus of the internet, I have my own little hideaway: an
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.alpinelinux.org&#x2F;&quot;&gt;Alpine Linux&lt;&#x2F;a&gt; box hosted on &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.hetzner.com&#x2F;&quot;&gt;Hetzner&lt;&#x2F;a&gt;. The website you’re reading lives
on this very server, alongside numerous other personal services. Running
these myself allows me to be completely independent of major service
providers like Google, a choice with serious benefits for my privacy. It
has also helped me accrue real-world experience with system
administration—and &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;backups-update-internet-celebrity&#x2F;&quot;&gt;the crises&lt;&#x2F;a&gt; that occaisionally entails. Finally,
owning a fixed amount of hardware means that there is zero marginal cost
for additional services crammed into my alloted resources: this means
the monthly cost of running my many programs remains well below market
price.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;cloudlab&#x2F;things.png&quot; alt=&quot;Original todo item from Things.app&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;My server setup would historically have been best described as a rickety
shack, barely standing, upon which I would occaisionally try and
haphazardly tack new services while hoping the whole thing wouldn’t come
crashing down. This was sufficient for &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;i-wrote-this-three&#x2F;#self-hosting&quot;&gt;at least five years&lt;&#x2F;a&gt;. But at
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.recurse.com&#x2F;scout&#x2F;click?t=0d85c06dc14f97552f2130471d4e3086&quot;&gt;Recurse&lt;&#x2F;a&gt;, I became fed up with the status quo.&lt;&#x2F;p&gt;
&lt;p&gt;I explored a few radically different systems. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.frankchiarulli.com&#x2F;&quot;&gt;Frank&lt;&#x2F;a&gt; pointed me in the
direction of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.talos.dev&#x2F;&quot;&gt;Talos&lt;&#x2F;a&gt;, and I played around with setting up a one-machine
cluster. But &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wolfesoftware.com&#x2F;&quot;&gt;Josh&lt;&#x2F;a&gt; asked me if I really needed all that baggage, and
truth be told I didn’t. So I returned my focus to trusty &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;compose&#x2F;&quot;&gt;Docker
Compose&lt;&#x2F;a&gt;—and toward minimalism, pattern, and clear structure.&lt;&#x2F;p&gt;
&lt;p&gt;That structure employs a number of axioms: “All services are run in
containers” (&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;syncthing.net&#x2F;&quot;&gt;file storage&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tarsnap.com&#x2F;&quot;&gt;backups&lt;&#x2F;a&gt; having been the big exceptions
previously), “configuration and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;getsops.io&#x2F;&quot;&gt;secrets&lt;&#x2F;a&gt; get committed”, “no building
images on the server”… Really, I can’t say it better than &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;FIGBERT&#x2F;cloudlab&#x2F;commit&#x2F;cf37f4b3e0f4a7e014cb57e252d6e65860143469&quot;&gt;I already
did&lt;&#x2F;a&gt; during development, when I wrote long commit messages and thorough
documentation.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;cloudlab&#x2F;zulip.png&quot; alt=&quot;Me, feeling very confident in a Zulip check-in&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I also upgraded my server during this transition. I investigated a move
to the United States, but found that resources prices here vastly
outpaced the rest of the world. So I made a different move: to the ARM
architecture. Miraculously, I now get double my old resources at the
same price. More than enough for my email, calendar, websites, and
anything else I’ve thought of throwing at it over the years.&lt;&#x2F;p&gt;
&lt;p&gt;There is still room for improvement in this setup. As part of a renewed
commitment to elegance, I dropped my janky self-hosted &lt;code&gt;git&lt;&#x2F;code&gt; setup and
do not yet have &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;ideating-tragit&#x2F;&quot;&gt;a good alternative&lt;&#x2F;a&gt;. And getting the server prepared
entailed some minor setup work which should be controlled in a
declarative and versioned fashion alongside the rest. But &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;&quot;&gt;that rabbit
hole&lt;&#x2F;a&gt; seems too deep for even me at the moment… It will have to wait
until next summer.&lt;&#x2F;p&gt;
&lt;p&gt;Check out &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;figbert&#x2F;cloudlab&quot;&gt;the code&lt;&#x2F;a&gt; for your own self-hosting inspiration!&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Stickies</title>
    <published>2025-09-17T21:00:00-07:00</published>
    <updated>2025-09-17T21:00:00-07:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/stickies/" type="text/html"/>
    <id>https://figbert.com/projects/stickies/</id>
    <content type="html">
      &lt;p&gt;When Apple announced that visionOS 26 was bringing wall-mounted widgets
to their face-mounted headset, I was very excited. For one thing, I am
most interested in the device for its ability to create interactions
between the digital and the physical worlds—which this feature enhanced
in a particularly compelling way. But also, I was excited because as I
looked around at my walls I saw at minimum 100 sticky notes across every
previously-blank surface. It was time.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;stickies&#x2F;icon.jpg&quot; alt=&quot;Stickies’ app icon&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There were many peculiarities in its development, not the least of which
being that I don’t own a Vision Pro. By the time I tested it on-device
(thanks to generosity of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sweetfreak&quot;&gt;Jesse Sheehan&lt;&#x2F;a&gt;), the app was already feature
complete! In this phase, I ended up making significant adjustments to
accomodate what the radically different controls &lt;em&gt;actually&lt;&#x2F;em&gt; feel
like—your eyes are simply nothing like a mouse and keyboard. That sounds
obvious, but it’s a fun challenge to translate that into tangible design
choices.&lt;&#x2F;p&gt;
&lt;p&gt;Side note: the walls in the simulator don’t count for sticking widgets
on, and &lt;code&gt;.toolbar&lt;&#x2F;code&gt; is actually &lt;code&gt;.ornament&lt;&#x2F;code&gt; on visionOS. For anyone else
embarking down this road, I hope I’ve saved you a handful of hours
pouring over Apple’s documentation.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;stickies&#x2F;simulator.jpg&quot; alt=&quot;The app open on(-simulated)-device&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;With Stickies, you can create and edit boards of different sizes in the
app and pin them to your wall as widgets. This comes with a number of
benefits beyond being pretty cool to see: your notes will never come
unstuck, you can edit them infinitely, and perhaps most excitingly you
can pin the same board to multiple locations and keep them in sync.&lt;&#x2F;p&gt;
&lt;p&gt;Stickies is coming soon to an App Store near you! In the meantime, feel
free to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;figbert&#x2F;sticky&quot;&gt;check out the code&lt;&#x2F;a&gt; for yourself.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Cordially</title>
    <published>2025-09-17T20:11:00-07:00</published>
    <updated>2025-09-17T20:11:00-07:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/cordially/" type="text/html"/>
    <id>https://figbert.com/projects/cordially/</id>
    <content type="html">
      &lt;p&gt;The de-facto standard for event invitations at Stanford is &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;partiful.com&quot;&gt;Partiful&lt;&#x2F;a&gt;.
It’s a great platform: it looks cool and makes gathering RSVPs easy. But
what if you want less of a party vibe, and more of an air of mystery?
Less “join the herd” and more “you, individually, have been chosen.” For
that, you might need &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;FIGBERT&#x2F;palantir-cordially&quot;&gt;Cordially&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;cordially&#x2F;gatsby.jpg&quot; alt=&quot;The handwritten invitation from The Great Gatsby (2016).&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There was of course a time before Partiful, when &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.paperlesspost.com&#x2F;&quot;&gt;Paperless Post&lt;&#x2F;a&gt; was
dominent. And they got something right: you would receive a skeumorphic
envelope in your inbox, and there was a fancy letter-opening animation
on their website. That &lt;em&gt;felt&lt;&#x2F;em&gt; special. So, after throwing a handful of
parties myself and hand-writing an awful lot of invitations, I decided I
could take the best ideas from pop culture and these competing platforms
to make something better.&lt;&#x2F;p&gt;
&lt;p&gt;Then I decided to wait several years until I was at the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.recurse.com&#x2F;scout&#x2F;click?t=0d85c06dc14f97552f2130471d4e3086&quot;&gt;Recurse Center&lt;&#x2F;a&gt;
and staring at a deadline for the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;build.palantir.com&quot;&gt;Palantir Build Challenge&lt;&#x2F;a&gt;. And thus
naturally, I ended up building my fancy-shmancy invite platform in a mad
two-day sprint on top of a data platform best known for its
military-industrial use-case.&lt;&#x2F;p&gt;
&lt;p&gt;With the strict time constraints, I didn’t get to make Cordially the
visually stunning platform that I had initially envisioned. But I
learned loads: I built the app in Python’s &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fastht.ml&#x2F;&quot;&gt;FastHTML&lt;&#x2F;a&gt; as another waystop
on my roving quest to find a good web framework, and I was able to
concretize Palantir’s product in my mind, where otherwise it would just
be a swirling, intangible, mildly sinister idea in my head.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;cordially&#x2F;ontology.png&quot; alt=&quot;A screenshot of the Palantir foundry for Cordially.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;One day I may rewrite Cordially to be gorgeous and production-ready. But
for the time being, you will have to be satisfied with &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;FIGBERT&#x2F;palantir-cordially&quot;&gt;the code&lt;&#x2F;a&gt; and a
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=7Q7l3vdgEPE&quot;&gt;video walkthrough&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Rapid Riter</title>
    <published>2025-09-17T20:00:00-07:00</published>
    <updated>2025-09-17T20:00:00-07:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/rapid-riter/" type="text/html"/>
    <id>https://figbert.com/projects/rapid-riter/</id>
    <content type="html">
      &lt;p&gt;I enjoy many things. Two in particular are &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;roll-call&#x2F;&quot;&gt;alternative display
technologies&lt;&#x2F;a&gt; and using the right tool for the job. These combined in a
truly joyful project when I wrote a script for the Rapid Riter.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;rapid-riter&#x2F;device.jpg&quot; alt=&quot;The matrix display known as the Rapid Riter.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When I first walked into the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.recurse.com&#x2F;scout&#x2F;click?t=0d85c06dc14f97552f2130471d4e3086&quot;&gt;Recurse Center&lt;&#x2F;a&gt;, the large red
LED matrix mounted on the wall caught my eye immediately. I’ve been in a
good number of hacker spaces, all strewn with exciting toys in various
states of decay—this was the first space I’d experienced where the toys
&lt;em&gt;worked&lt;&#x2F;em&gt;. I knew then I would have to make something for it. This, as
you may have surmised by the label, is the Rapid Riter.&lt;&#x2F;p&gt;
&lt;p&gt;To get my program working, I orchestrated a series of tools in a
beautiful symphony. Or at least, that’s how I felt writing it at
midnight on a Saturday with wine glass full of water. The graphics are
written in &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;p5js.org&quot;&gt;p5.js&lt;&#x2F;a&gt;, an animation DSL, and uploaded directly to the Riter
through &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;greg.technology&#x2F;&quot;&gt;Greg’s&lt;&#x2F;a&gt; developer portal. The number is calculated via the
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zulip.com&quot;&gt;Zulip&lt;&#x2F;a&gt; API, and served from &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;val.town&quot;&gt;val&lt;&#x2F;a&gt;—which I had heard of as a long-time
follower of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;macwright.com&#x2F;&quot;&gt;Tom MacWright’s&lt;&#x2F;a&gt; blog but never used before. Writing little
type-safe scripts that are live instantly, with proper secrets
management? I loved it, and will be tucking it away for future projects.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;rapid-riter&#x2F;presentation.jpg&quot; alt=&quot;Me pointing to the Rapid Riter, which is displaying my script.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When my script was done, I presented it during demos at &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.recurse.com&#x2F;scout&#x2F;click?t=0d85c06dc14f97552f2130471d4e3086&quot;&gt;Recurse&lt;&#x2F;a&gt;.
You’re encouraged to send daily “check-ins” during your time there: the
final number I missed was much higher than the number above. If you want
to see how high, you’ll just have to apply!&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Night</title>
    <published>2025-06-21T20:15:00-04:00</published>
    <updated>2025-06-21T20:15:00-04:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/night/" type="text/html"/>
    <id>https://figbert.com/reading/night/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;Night&lt;&#x2F;i&gt; by Elie Wiesel. &lt;br&#x2F;&gt;
        Finished on June 20, 2025. &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      
    </content>
  </entry>
  <entry xml:lang="en">
    <title>Bad Book Good Ideas</title>
    <published>2025-02-22T15:15:00-08:00</published>
    <updated>2025-02-22T15:15:00-08:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/how-to-do-nothing/" type="text/html"/>
    <id>https://figbert.com/reading/how-to-do-nothing/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;How to Do Nothing&lt;&#x2F;i&gt; by Jenny Odell. &lt;br&#x2F;&gt;
        Finished on January 07, 2025. &lt;br&#x2F;&gt;
        
        Rating: ★★☆☆☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;I was assigned Jenny Odell’s &lt;em&gt;How to Do Nothing&lt;&#x2F;em&gt; as part of the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;college.stanford.edu&#x2F;three-books&#x2F;three-books-archive&quot;&gt;Three
Books&lt;&#x2F;a&gt; program. I didn’t take a COLLEGE course in &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;stanford-quarterly-reflection-01&#x2F;&quot;&gt;the fall&lt;&#x2F;a&gt;, so I have
relatively less of an idea if the program was taken seriously, but from
my perspective it was comprised of a) an email that told me it existed,
b) a free book that was—I think—presented to me on my arrival to campus,
and c) no further mention of it ever. A long while later I decided to
read it.&lt;&#x2F;p&gt;
&lt;p&gt;There are discussions of great merit in &lt;em&gt;How to Do Nothing&lt;&#x2F;em&gt;—but they are
both poorly executed and tied to other beliefs that I disagree with,
which ultimately has created a work that mirrors the program that
recommended it: a core of goodness enveloped in the overgrown vines of
bad.&lt;&#x2F;p&gt;
&lt;p&gt;To address the former portion of my critique, I will turn to the common
adage that the hallmark of true understanding is being able to explain
something simply. Jenny Odell has not done that here. This book is a
wandering text with no driving argument. Whatever tidbits of knowledge
are to be found within it are sprinkled throughout at random intervals,
and then repeated, each time as if she has forgotten about any previous
mention. I felt as if I was reading a first draft the entire time.&lt;&#x2F;p&gt;
&lt;p&gt;To the latter half of my critique, what arguments are articulated in
&lt;em&gt;How to Do Nothing&lt;&#x2F;em&gt; are themselves something of a mixed bag. There are
portions that I resonated with strongly:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;I am personally unsatisfied with untrained attention, which flickers
from one new thing to the next, not only because it is a shallow
experience, or because it is an expression of habit rather than will,
but because it gives me less access to my own human experience.&lt;br&#x2F;&gt;
&lt;em&gt;p. 119&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Poswolsky writes of their initial discovery: “I think we also found
the answer to the universe, which was, quite simply: just spend more
time with your friends.”&lt;br&#x2F;&gt;
&lt;em&gt;p. 34&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;But they are often followed up with just terrible addenda. I suspect it
comes down to the following fundamental disagreement between myself and
Odell:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;…I find existing things infinitely more interesting than anything I
could possibly make.&lt;br&#x2F;&gt;
&lt;em&gt;p. 5&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This is what leads her to follow up potentially interesting
suppositions:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The first half of “doing nothing” is about disengaging from the
attention economy; the other half is about reengaging with something
else.&lt;br&#x2F;&gt;
&lt;em&gt;p. xvii&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;With nonsensical conclusions:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;That “something else” is nothing less than…. bioregionalism…&lt;br&#x2F;&gt;
&lt;em&gt;p. xvii&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This exchange in particular is typical of a type of thinking in the book
that I do not understand in the slightest, which prizes non-humans over
our own species and asceticism over greatness. That stance smacks of a
particular branch of Christian thought that sees “lesser” states as
inherently more “pure.” The plant is prized over the person because it
is incapable of sin. The mendicant over the industrialist, because why
seek out anything in this world when the world to come is what matters.
This view does not move me. Let all of the righteous acts that Odell
proposes be done at scale as a testament to our glory.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;One thing I have learned about attention is that certain forms of it
are contagious. When you spend enough time with someone who pays close
attention to something… you inevitably start to pay attention to
some of the same things.&lt;br&#x2F;&gt;
&lt;em&gt;p. xxiii&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;There is no such thing as a clean break or a blank slate in this
world.&lt;br&#x2F;&gt;
&lt;em&gt;p. 53&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;“The explorer who will not come back or send back his ships to tell
his tale is not an explorer, only an adventurer.”&lt;br&#x2F;&gt;
&lt;em&gt;p. 55&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;There are no limits to what we are capable of. Attention is the tool by
which that potential is made manifest.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Blind Date A Book</title>
    <published>2025-01-19T17:20:00-08:00</published>
    <updated>2025-09-17T19:19:00-04:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/blind-date-a-book/" type="text/html"/>
    <id>https://figbert.com/projects/blind-date-a-book/</id>
    <content type="html">
      &lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blinddateabook.com&quot;&gt;Blind Date A Book&lt;&#x2F;a&gt; is part ecommerce website and part art project. I
first encountered its physical counterpart at a Barnes and Noble some
five years ago: I remember thinking to myself even then that it was a
perfect candidate for digitization. At long last, using the approach to
making I picked up &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;stanford-quarterly-reflection-05&#x2F;#academics&quot;&gt;in DESIGN11&lt;&#x2F;a&gt;, I’ve hacked together a boutique
version of this experience accessible for anyone with an internet
connection. And at the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.recurse.com&#x2F;scout&#x2F;click?t=0d85c06dc14f97552f2130471d4e3086&quot;&gt;Recurse Center&lt;&#x2F;a&gt;, I overhauled the site for a
more fun, correct, and cost-effective developer experience. This is the
story of how I became the proprietor of my very own bookshop.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;blind-date-a-book&#x2F;cafe.jpg&quot; alt=&quot;A table at SF’s Telescope Coffee covered in disguised books&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;At first I was confused by the lack of digital equivalent to the
physical stands. Surely ordering books online is a solved problem. I
mean, that’s what Amazon was founded for—and a custom frontend that just
displays things differently seems a trifling project.&lt;&#x2F;p&gt;
&lt;p&gt;Turns out it’s hard to buy things with code. So it actually came out a
bit more &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bsky.app&#x2F;profile&#x2F;andy.works&#x2F;post&#x2F;3lclb4jvle72u&quot;&gt;personal&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;A list of books chosen by people I care about.&lt;&#x2F;li&gt;
&lt;li&gt;Descriptions they hand-wrote.&lt;&#x2F;li&gt;
&lt;li&gt;A funky little website.&lt;&#x2F;li&gt;
&lt;li&gt;Me going to buy the real book and sending it you myself.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;More of a sensitive touch, perhaps.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;blind-date-a-book&#x2F;notebook.png&quot; alt=&quot;Early ideation of the website in my notebook&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The tech stack of the site bears further analysis. I’ve long puzzled
over the best way to go about building web projects, going so far in my
complaints-sans-solutions as to coin &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fosstodon.org&#x2F;@FIGBERT&#x2F;113683895559149910&quot;&gt;Benji’s Rule of Frameworks&lt;&#x2F;a&gt;. For
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;charm.sh&quot;&gt;CLIs&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.apple.com&#x2F;xcode&#x2F;swiftui&#x2F;&quot;&gt;iOS&#x2F;macOS&lt;&#x2F;a&gt; apps, the answers have been easy: but building
for the internet has always seemed more experimental.&lt;&#x2F;p&gt;
&lt;p&gt;In the first iteration of this project, I tried out a framework called
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;weborigami.org&quot;&gt;Web Origami&lt;&#x2F;a&gt; and ran the commerce via Shopify. It wasn’t all sunshine
and rainbows—the product was far too JavaScript-y for me—so I continued
poking around until eventually I found &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gleam.run&#x2F;&quot;&gt;Gleam&lt;&#x2F;a&gt;. Building in Gleam is
weird and exciting, which is exactly what I’m looking for! I like it so
much that I gave a talk about it at Recurse, the &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;blind-date-a-book&#x2F;for-profit-library.pdf&quot;&gt;slides and notes&lt;&#x2F;a&gt; for
which are available to read here.&lt;&#x2F;p&gt;
&lt;p&gt;I also moved from Shopify to Stripe, which has allowed me to a) have a
single source of truth by using key-value metadata in Stripe as a
database and b) save $500&#x2F;year by paying a percentage of profits instead
of a fixed and pricey subscription.&lt;&#x2F;p&gt;
&lt;p&gt;Check out &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blinddateabook.com&quot;&gt;the website&lt;&#x2F;a&gt; for yourself to find your
next read and explore &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;figbert&#x2F;bdab&quot;&gt;the code on GitHub&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>It&#x27;s Time to Build New Hardware</title>
    <published>2025-01-14T17:57:00-08:00</published>
    <updated>2025-01-14T22:05:00-08:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/time-to-build-new-hardware/" type="text/html"/>
    <id>https://figbert.com/posts/time-to-build-new-hardware/</id>
    <content type="html">
      &lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fosstodon.org&#x2F;@FIGBERT&#x2F;112674073244946013&quot;&gt;There is a feeling coursing through the populace.&lt;&#x2F;a&gt; It is just now
bubbling over, spilling through the cracks and taking its many shapes.
The world changed forever with the introduction of the iPhone in 2007—it
is a fool who thinks it can’t change again. I am a fool who thinks it is
going to change very imminently.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;blockquote&gt;
&lt;p&gt;Let’s be honest, making a new primary device is effectively
impossible. We probably won’t see a smartphone-killer or a
computer-killer ever.&lt;br&#x2F;&gt;
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lmnt.me&#x2F;blog&#x2F;primary-device.html&quot;&gt;Louie Mantia, Jr.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;These two sentences represent the prevailing wisdom on mobile computing.
Not just that consumer hardware is hard—it is, with even great successes
like &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@ericmigi&#x2F;why-pebble-failed-d7be937c6232&quot;&gt;Pebble&lt;&#x2F;a&gt; eventually collapsing—but that it’s not worth pursuing:
that we’ve already figured it out. It’s the most dominant form of
technology worldwide. Billions of people make their digital homes on
their phones. Surely that means the field is done.&lt;&#x2F;p&gt;
&lt;p&gt;To my mind, this has always sounded ignorant. Look at your phone: it’s a
rectangular screen. What is this optimized for? What does this form
factor make easy? The screen is a blank canvas. It enables Jobs’ vision
of a device that doesn’t need physical updates to gain new
functionality. But it’s also profoundly lazy. It is the lowest common
denominator of interfaces.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;A game for everyone is a game for no one.&lt;br&#x2F;&gt;
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.arrowheadgamestudios.com&quot;&gt;Arrowhead&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The screen is also uniquely condemnable for the way it inherently
hijacks our attention. Our brains are ill-prepared to encounter the
light of a thousand suns or colors more vibrant than any Amazonian tree
frog, but that’s what we see when we check our phones at 3am. Try and
have a conversation with a phone in your peripheral vision. Play a video
with the sound on mute: can you avoid distraction? Alternatively: could
you actually recognize the contours of your palm? The common turn of
phrase would suggest this to be the most familiar thing in the world. I
suspect we all know our home screen much better.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;*wakes up and looks at phone*&lt;br&#x2F;&gt;
ah let’s see what fresh horrors await me on the fresh horrors
device&lt;br&#x2F;&gt;
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;x.com&#x2F;missokistic&#x2F;status&#x2F;796870708412358657&quot;&gt;@missokistic&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;At the same time as I am thoroughly steeped in technology, I hate it. I
want to maximize the amount of time I spend present with the people I
love: my friends, my family, random kind and exciting people. The time I
spend “in” a device—the fact that such a turn of phrase even exists—is
despicable, in my eyes. And I’m not alone in this:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you’re looking at a phone more than someone’s eyes, you’re doing
the wrong thing!&lt;br&#x2F;&gt;
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=MU-SXaFpSts&amp;amp;t=1472s&quot;&gt;Tim Cook&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The status of this crusade, as it stands, is a bit of a mixed bag. On
the one hand, there are a metric ton of reasons to despair: there’s a
whole generation of “iPad kids” out there who have grown up breaking
Cook’s ironic axiom above. I myself just quit a Reels addiction. The
status quo is riddled with the ills of our devices, from the wasteland
of social media to the phantom notifications plaguing our pockets.
However, there is some cause for hope and excitement: that feeling I
mentioned earlier. People don’t just live amidst all the garbage—they’re
starting to feel it.&lt;&#x2F;p&gt;
&lt;p&gt;Some of these people are seeking to do something about it all.
Throughout the industry there are new takes on what the coming device
paradigm might look like: new minds finally tackling the question of
what it should look like to live alongside our technology. Obviously,
none of them have come close to supplanting the phone or the laptop or
the &lt;em&gt;screen&lt;&#x2F;em&gt; at all. Not just yet. But I hope they will, eventually, and
I want to be a part of that.&lt;&#x2F;p&gt;
&lt;p&gt;There are numerous significant and cool initiatives in this area these
days. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;humane.com&quot;&gt;Humane&lt;&#x2F;a&gt; has been universally panned but I’m extremely interested
in rapidly developing their laser display technology as an alternative
to traditional display panels. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;origamicomputing.com&quot;&gt;Origami Computing&lt;&#x2F;a&gt; is actually the
reason I’m writing this post, because I promised Sarvasv I would do so
over six months ago and I want to reply to his email. I steal his line
about the love-hate relationship we have with our devices all the time.
The &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.apple.com&#x2F;apple-vision-pro&#x2F;&quot;&gt;Apple Vision Pro&lt;&#x2F;a&gt; may initially seem like its going the exact
opposite direction of what I’m advocating in this post, but if you look
at it closely you realize that it too is seeking to eliminate the role
screens play in our lives today. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;thetinypod.com&quot;&gt;tinyPod&lt;&#x2F;a&gt; is such a compelling reason
to buy an Apple Watch that I might actually do it. I own the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;remarkable.com&#x2F;store&#x2F;remarkable-2&quot;&gt;reMarkable
2&lt;&#x2F;a&gt; and use it every day for school: for years it replaced all my paper
use, though I’ve built up a nasty habit of of sketching and journaling
on dead trees again. I met an angel investor in &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;daylightcomputer.com&quot;&gt;Daylight&lt;&#x2F;a&gt; on a flight
to New York—I’m most interested in their tablet because it runs full
Android, and there are good apps I use on my phone that I wish I could
use on an e-ink-ish display. I have similar feelings toward the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;shop.boox.com&#x2F;products&#x2F;palma&quot;&gt;Palma&lt;&#x2F;a&gt;.
I’m not sure that &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;getfreewrite.com&quot;&gt;Freewrite&lt;&#x2F;a&gt; belongs among this new wave, because
they’ve been around for a while, but it is yet another e-ink device that
I want to buy. Limitless’ &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.limitless.ai&#x2F;#pendant&quot;&gt;pendant&lt;&#x2F;a&gt; and Avi’s &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.friend.com&quot;&gt;friend&lt;&#x2F;a&gt; strike me as
products similiarly oriented around the question “what if a microphone
was maximally intelligent?” &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;spatialpixel.com&quot;&gt;Spatial Pixel&lt;&#x2F;a&gt; gives strong
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tldraw.dev&quot;&gt;tldraw&lt;&#x2F;a&gt;&#x2F;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.todepond.com&quot;&gt;todepond&lt;&#x2F;a&gt;&#x2F;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.inkandswitch.com&quot;&gt;Ink &amp;amp; Switch&lt;&#x2F;a&gt; vibes, as well as relying on cool
projection technology that we’ve previously established I’m a fan of.
The &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ouraring.com&quot;&gt;Oura Ring&lt;&#x2F;a&gt; is not as much of a general computing device as the rest
of these, but it has the great quality of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cloud.ouraring.com&#x2F;docs&quot;&gt;delivering utility&lt;&#x2F;a&gt; to me on
a daily basis while not having a screen, so it has won a spot. And
frankly: &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;roll-call&#x2F;&quot;&gt;Roll Call&lt;&#x2F;a&gt; was inspired by this very scene&#x2F;movement and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=42600100&quot;&gt;was
explicitly&lt;&#x2F;a&gt; an expirement in alternative display technology!&lt;&#x2F;p&gt;
&lt;p&gt;Gruber wrote the sharpest critique of these sorts of efforts two years
ago when the Ai Pin was first announced, in a post entitled &lt;em&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;2023&#x2F;04&#x2F;if_you_come_at_the_king&quot;&gt;If You
Come at the King&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;. In essence, he says that Humane’s founder, Imran
Chaudhri, may be right that our phone addictions are sad and
problematic. However, he points out, people don’t care. The objective
truth has no bearing on the fact that everyone &lt;em&gt;loves&lt;&#x2F;em&gt; their phone.
Addicts love their compulsions, even when they know they’re
self-destructive. I agree with Gruber. But I think that the need is too
dire to simply give up. We need a &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;marc-tarpenning-on-innovation&#x2F;&quot;&gt;Pareto improvement&lt;&#x2F;a&gt; in our mobile
devices: new digital companions that are not only healthier for us, but
that we love even more. People won’t change their behavior for abstract
concepts like well-being, but they will absolutely change their behavior
for &lt;em&gt;better&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;And something better is possible. We do not have to take the good with
the bad. A more humanistic future is out there: one with technology that
is helpful and ubiquitous but totally dissolved into the background of
our existence. We have designed our present, and we can design a future
with all of its benefits and none of its downsides. We must right our
priorities by building a better system on the back of the one that came
before. There is no area of more impact than hardware, and no better
time to &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;tangible-deliverables&#x2F;&quot;&gt;experiment&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;teenage.engineering&quot;&gt;wildly&lt;&#x2F;a&gt;. It is time to build new hardware. It is
time to turn our focus to the world we were given.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Chronological Sort Considered Positive</title>
    <published>2025-01-12T16:08:56-08:00</published>
    <updated>2025-01-12T16:08:56-08:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://robinrendle.com/notes/digital-gardening/" type="text/html"/>
    <id>https://figbert.com/posts/robin-rendle-digital-gardening/</id>
    <content type="html">
      &lt;p&gt;Robin Rendle, himself responding to another post on “digital gardening”:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;How many bangers on this here website are lost to the feed of new
stuff and are only hard to find because of the chronological list I’ve
slapped together? There’s so much stuff that I’d like to revise or
tweak or scratch out—but keep a record of that change of mind for the
future. Wouldn’t that be so neat? Going back over twenty years of work
and watching your thought process adapt over time?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;That record of evolution—of a minding shifting and evolving—is in fact
chronological sort’s &lt;em&gt;raison d’être&lt;&#x2F;em&gt;. If you change your mind about
something you’ve written, if you’ve grown in your thinking, or even if
your position has concentrated into a stronger version of what you
already believed: write another post. I would propose that contrasting
those posts over time will probably provide a better understanding of
one’s “process adapt[ing]” than just converting your personal website to
a wiki.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
      &lt;a href=&quot;https://figbert.com/posts/robin-rendle-digital-gardening/&quot;&gt;★&lt;&#x2F;a&gt;
    </content>
  </entry>
  <entry xml:lang="en">
    <title>Stanford Quarterly Reflection (Y2Q1)</title>
    <published>2025-01-04T00:00:00+00:00</published>
    <updated>2025-01-04T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/stanford-quarterly-reflection-05/" type="text/html"/>
    <id>https://figbert.com/posts/stanford-quarterly-reflection-05/</id>
    <content type="html">
      &lt;p&gt;Last year my friends would often pointedly remind me that I was a
freshman. So it’s been a little weird this quarter no longer holding
that title. However, as far as beginnings go, I’d say it’s off to a fine
start.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h3 id=&quot;academics&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#academics&quot; aria-label=&quot;Anchor link for: academics&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Academics&lt;&#x2F;h3&gt;
&lt;p&gt;This quarter is what Stanford is supposed to be. I learned. A ton. I was
enrolled in:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;MATH 21: Calculus&lt;&#x2F;li&gt;
&lt;li&gt;COMPLIT 37Q: Zionism and the Novel&lt;&#x2F;li&gt;
&lt;li&gt;SUSTAIN 345: Sustainable Societies Lab&lt;&#x2F;li&gt;
&lt;li&gt;DESIGN 11: Visual Thinking&lt;&#x2F;li&gt;
&lt;li&gt;CS 148: Introduction to Computer Graphics and Imaging&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The extent to which I was actually &lt;em&gt;in&lt;&#x2F;em&gt; MATH 21, despite my enrollment,
is somewhat questionable. I attended very few lectures, and I think
possibly two discussion sections. On balance, I think this was alright.
I obviously didn’t derive as much as I could have from the course (pun
intended), but I performed adequately and had more time to devote to
things that interested me far more. This is despite my liking the
professor: when I did manage to show up for lecture, I felt a bit like I
was participating in the mathematical world of yore. The class did
manage to have a statistically significant impact on my sleep though!
See if you can guess when the problem sets were due:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;stanford-quarterly-reflection-05&#x2F;sleep-graph.jpeg&quot; alt=&quot;A graph of my Oura Ring scores this past quarter, with a noticable dip on Tuesdays nights&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Zionism and the Novel was a real treat. The &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;stanford-quarterly-reflection-05&#x2F;syllabus.pdf&quot;&gt;syllabus&lt;&#x2F;a&gt; was
so interesting that I felt guilty any time I had to skip a reading, and
promised to catch up on it at a later date for my own good. I’m still
working on that. I also ended up sharing &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;illusion-of-return&#x2F;&quot;&gt;a lot&lt;&#x2F;a&gt; of &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;waking-lions&#x2F;&quot;&gt;my writing&lt;&#x2F;a&gt; from
the course on this site, which is a very nice plus.&lt;&#x2F;p&gt;
&lt;p&gt;The Sustainable Societies Lab continues to be a blast (I participated in
another incarnation of it &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;stanford-quarterly-reflection-03&#x2F;&quot;&gt;last spring&lt;&#x2F;a&gt;). We heard from a number of
deeply knowledgeable speakers from a broad range of fields. I was blown
away by Marc Tarpenning, which also made &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;marc-tarpenning-on-innovation&#x2F;&quot;&gt;its way&lt;&#x2F;a&gt; into &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;rocket&#x2F;&quot;&gt;some posts&lt;&#x2F;a&gt;
here. I also strongly disagreed with the founder of Beyond Meat, and
will attribute any future failure to his attitude and any future success
to pure luck. The latter half of that sentence is a joke.&lt;&#x2F;p&gt;
&lt;p&gt;DESIGN 11, my &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;stanford-quarterly-reflection-03&#x2F;&quot;&gt;old nemesis&lt;&#x2F;a&gt;, was possibly my favorite
class. It was certainly the most impactful—I think I will never look at
the world the same way after taking it. The class forced me to become
comfortable sitting in the liminal space of making things. There are
very few ventures that you can be sure of before embarking upon them.
Most entail some space in between, where each step from the start takes
you further toward your ultimate destination. Some steps are misplaced,
mistakes that you have to recognize and adapt to instead of abandoning
your progress and starting again from scratch. This process must feel
like home to you if you want to make something. The class instigates
this change in its students by forcing you to do the things you’re bad
at, over and over again. First the stakes are low: building little
one-off thingamajigs and prototypes. And then you’re thrown directly in
the fire and made to combine those little skills you didn’t even realize
you were learning to make something real. We did that three times:
carving and constructing an &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;sOnKN3TLwJ0&quot;&gt;automaton&lt;&#x2F;a&gt; from foam core, abusing &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.figma.com&quot;&gt;Figma&lt;&#x2F;a&gt;
to make a functional digital &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;aMlIcQ35QbA&quot;&gt;vending machine&lt;&#x2F;a&gt;, and the final open-ended
project that ultimately coalesced into &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;roll-call&#x2F;&quot;&gt;Roll Call&lt;&#x2F;a&gt;. I am grateful to
Patrick Fenton, who made this a comfortable place to grow, and to Vivek
for pushing me through the course when I needed an extra shove and
making building things a total blast. Also I sort of learned to draw:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;stanford-quarterly-reflection-05&#x2F;drawings.pdf&quot; alt=&quot;Pages from my workbook. We were tasked with outlining 50 “bugs” in the day-to-day lives of ourselves and others.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;CS 148 was another fun class—I took this one at Naama’s behest, and
found the &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;baymax-memory-lane&#x2F;&quot;&gt;final project&lt;&#x2F;a&gt; in particular a good opportunity to implement
the techniques for making that I had picked up in DESIGN 11. The class
was scheduled at the same time as DESIGN 11, so I never actually
attended a lecture, but I’m theoretically a fan of the professor because
he has two Oscars for inventing the math behind CGI and was a
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;physbam.stanford.edu&#x2F;~fedkiw&#x2F;&quot;&gt;professional bodybuilder&lt;&#x2F;a&gt; in his youth (scroll to the bottom of that
link). It had been a long time since I &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;i-wrote-this-two&#x2F;#making-a-doughnut-in-blender&quot;&gt;worked with Blender&lt;&#x2F;a&gt;, so it was
fun to get back at it! I felt a lot more confident building things
independently this time around, which I would attribute to my growth in
many contributing areas and skillsets—quite satisfying.&lt;&#x2F;p&gt;
&lt;p&gt;This quarter lacked a structured avenue for me to engage with political
thought. Zionism and the Novel came close, and I certainly engage
seriously on a myriad of political issues in discussions with my
friends, but I still felt something of a void. All of which is to say
that I declared a PoliSci minor on the International Relations track,
which will hopefully keep me entertained in this respect going foreword.
They also gave me a funky shirt when I declared, which Design didn’t, so
extra points to their department.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;personal&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#personal&quot; aria-label=&quot;Anchor link for: personal&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Personal&lt;&#x2F;h3&gt;
&lt;p&gt;This was the quarter of Junch and the Sleepoverers. Odin and my
membership in both groups means that we technically won the quarter.
Every week was marked by me getting progressively more excited until I
actually arrived at Junch and then seven days of comedown until the next
one arrived. Our more ambitious schedule for this upcoming quarter is
going to be epic; I just hope Naama and Jordan can keep up. The
Sleepoverers were my people for these past few months. If I had
downtime, I was with Nageena, Lulu, and Daniel. What a squad we were—the
half of our contingent that are going off to Paris this upcoming quarter
will be dearly missed.&lt;&#x2F;p&gt;
&lt;p&gt;My roommate this year is no longer random: I’m living with Vivek! Who
would have thought that we would be living together, four years after we
first met each other and thought the other one was super weird. Our room
is a total blast. It really is as simple as Vivek told my dad: “we like
the same snacks.” Here’s to next quarter, when my morning classes might
finally force me to adopt his sleep schedule.&lt;&#x2F;p&gt;
&lt;p&gt;I’ve created some clean delineations above for the sake of the post, but
of course reality is much messier. Jack and Zach, besides rhyming, are
pillars of my existence here at Stanford. I look forward to more GSB
library study sessions and rapid costume creation, respectively. Adri,
Deit, Reis, Kato, and Bradley welcome me back to the Phi Psi house like
a returning champ every time. Sophia is a boundless source of creative
energy for activities and I am very sorry for spreading the false rumor
that she broke her leg playing laser tag. Vedant and Hasan show up all
the time in such unexpected places—I look forward to the next time I’m
summoned. Nate continues to outlift me in the gym, and Trun continues to
do things with computers that shock and surprise me. I am routinely
impressed by Daniel’s FLiCKS.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;looking-forward-i-go-back-to-school-tomorrow&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#looking-forward-i-go-back-to-school-tomorrow&quot; aria-label=&quot;Anchor link for: looking-forward-i-go-back-to-school-tomorrow&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Looking Forward (I Go Back to School Tomorrow)&lt;&#x2F;h3&gt;
&lt;p&gt;This was a different quarter. I enjoyed it. This next quarter, I’m going
to build on the positive institutions that were seeded here—continuing
my perpetual search for &lt;em&gt;better&lt;&#x2F;em&gt; and &lt;em&gt;more&lt;&#x2F;em&gt;. Academically, I’m going
back to the basics with a lot of foundational requirements. I’m looking
forward to it. In the meantime, I’m going to go celebrate getting this
out on time.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Stanford Quarterly Reflection (Y1Q4)</title>
    <published>2024-12-25T00:00:00+00:00</published>
    <updated>2024-12-25T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/stanford-quarterly-reflection-04/" type="text/html"/>
    <id>https://figbert.com/posts/stanford-quarterly-reflection-04/</id>
    <content type="html">
      &lt;p&gt;I continue to set new records in how long-overdue something can be.
Nevertheless, I refuse to let this summery meditation slip away.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;I have written already at length about my &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;work&#x2F;envelope&#x2F;&quot;&gt;internship&lt;&#x2F;a&gt;. This can, for
the most part, take the place of the usual section on academics. Too
much time has passed for me to recall any other projects I pursued that
might be grouped in with my work to some alternative “productivity”
category. I met with &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Adam_Nash_(executive)&quot;&gt;Adam Nash&lt;&#x2F;a&gt;? But that wasn’t really work. It’s hard
to say.&lt;&#x2F;p&gt;
&lt;p&gt;I lived in two apartments. The first was in the Marina: it had a little
backyard that was wonderful to sit in, and heated floors in the bathroom
that made walking around in the early mornings significantly more
pleasant. The second was in Cow Hollow: it was masterfully decorated,
had the most excellent kitchen I’ve ever lived with, and was situated
literally one block from Union Street. I think I’ve come to witness,
within my lifetime, the fall of Union Street and the rise of Chestnut,
and now the rebirth of Union as Chestnut grows stale. Which is to say
that though both were lovely, the latter apartment was a far more lively
neighborhood.&lt;&#x2F;p&gt;
&lt;p&gt;Living somewhere, for the first time, on my own and with a kitchen, I
was able to participate in perhaps my favorite tradition: Shabbat. I
hosted about seven in all, dashing out of work early on Fridays to the
grocery store and then to the stove to throw together the week’s menu by
the time the guests would arrive. I had high-minded and silly
&lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;great-gatsby&#x2F;&quot;&gt;inspirations&lt;&#x2F;a&gt; in mind while throwing them, and they largely lived up to
those expectations. I placed an inordinate amount of weight on and thus
care toward crafting cover images and descriptions for each &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;partiful.com&quot;&gt;Partiful&lt;&#x2F;a&gt;
invitation. And I was honored that people came! To have had you eat of
my food and drink of my drink and be together in one place, laughing
late into the evening, was the greatest reward and made me quite happy.
I am also particularly fond of one story, in which Zach arrived an hour
late—he drove up from Stanford—and came through the door to hear,
“You’re just in time! We’re bringing out the food now. Come sit!” I was
not always the most punctual.&lt;&#x2F;p&gt;
&lt;p&gt;I also got away ever so briefly to New York, Oregon, and Mexico. I spent
the first running around seeing everyone who was available—which meant
quite a few people, given that Stanford basically splits in two between
San Francisco and New York for the summer. In Oregon I lived in lakes
and rivers, which was great because it might be impossible to have a bad
time in the water. In Mexico, I had costras de queso for the first time,
which was a life-changing experience I can highly recommend. The ant
larvae at La Gruta were a life-changing experience I am less
enthusiastic about.&lt;&#x2F;p&gt;
&lt;p&gt;Of course, people were the most influential in making my summer
wonderful. My whole family came to every Shabbat, baking the challot and
creating amusing Partiful personas. Daniel and Emily were on the couch
of my apartment waiting for me when I came back from my first day of
real work ever. Daniel also hosted me in New York—the city where we
first became friends—which was extraordinarily kind. Davita, Hasan, and
Zach were the most consistent Shabbat attendees and thus gave shape to
the most influential institution of those months. Odin crashed on my
couch for ten days during the one period in which I was working remote
and proceeded to induce The Most Fun and get me on creatine. Kelly and
Joven I will thank for foolishly jumping on a plane with me time and
time again, and Longhair for hosting us (and calmly weathering
anaphylaxis). Trun for our meal at Lavash. Vivek and Nate for tolerating
my god-awful tennis. Sophia for her rooftop DJ set, and Jordan and her
mother for a great Effy’s brunch. Guy the locksmith for his
locksmithing, though he will never ever read this post.&lt;&#x2F;p&gt;
&lt;p&gt;Now I will immediately begin writing the next reflection, so that I can
hopefully have it done before I return from winter break. If I’m lucky.&lt;&#x2F;p&gt;
&lt;p&gt;Great revelry awaits!&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Biting the Hand That Feeds You</title>
    <published>2024-12-24T00:00:00+00:00</published>
    <updated>2025-01-12T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://om.co/2024/12/21/dark-musings-on-media-ai/" type="text/html"/>
    <id>https://figbert.com/posts/musings-on-media-in-the-age-of-ai/</id>
    <content type="html">
      &lt;p&gt;Om, on his blog:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Unlike search engines, AI platforms are built on precision and
summaries. They’re unlikely to be a major source of traffic or
advertising revenue. What about getting paid for the summaries OpenAI
serves in response to prompts? These prompts will vary widely, as will
the responses, breaking the traditional mass-media revenue model. As I
explained in my “future of browser” article, information itself is
being atomized, which will likely upend the web and media as we know
them…. OpenAI, Anthropic, and Perplexity… won’t need the media for
long.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;What does it mean to not “need the media” anymore? Chatbots know nothing
of the observable universe—they are fed media, during and after
training. OpenAI et. al. do not experience events as they happen.
Reporters are on-site witnesses and produce original analyses that
comprise both the news we consume and the content AI is fed.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The internet was originally envisioned as a place for connection,
collaboration, and discovery. But over time, it has been distorted by
business models that prioritize engagement metrics over meaningful
interaction. Discovery has long been the open web’s greatest
challenge, with search engines turning it into an SEO game and social
platforms creating algorithmic echo chambers. AI platforms are making
discovery almost irrelevant.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This is because the greatest challenge has always, in fact, been
monetization. Before the internet, you could sell people the paper your
news was printed on to fund its production. When the internet first
arrived, it was a toy and money wasn’t a factor. When real people came
online, money made everything bigger and better but also introduced ads,
engagement, and the rest of that garbage fire because we’ve all agreed
that web pages are free.&lt;&#x2F;p&gt;
&lt;p&gt;If ChatGPT takes over the internet and we say that news companies can’t
make money through their existing channels anymore, they will need to
find yet another way to pay their staff. I hesitate to say that we are
running out of business models, but we are certainly burning through
them at an alarming rate. More importantly they all seem to suck.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;You stay still, but your AI agent goes out and fetches, distills, and
synthesizes the content and renders it in whatever format you want —
audio, video, or text. This is the future.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Not if there is no content to synthesize, because they have been driven
to bankruptcy. Mass media is an invention, not a necessary constant. If
AI obsoletes the news by providing people with a mouthpiece that they
prefer, without providing a backstop for the companies that produce its
sources, it will run out of material to synthesize.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
      &lt;a href=&quot;https://figbert.com/posts/musings-on-media-in-the-age-of-ai/&quot;&gt;★&lt;&#x2F;a&gt;
    </content>
  </entry>
  <entry xml:lang="en">
    <title>A Screed of the Old Style</title>
    <published>2024-12-19T13:36:42-08:00</published>
    <updated>2024-12-19T13:36:42-08:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/israel-alone/" type="text/html"/>
    <id>https://figbert.com/reading/israel-alone/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;Israel Alone&lt;&#x2F;i&gt; by Bernard-Henri Lévy. &lt;br&#x2F;&gt;
        Finished on December 19, 2024. &lt;br&#x2F;&gt;
        
        Rating: ★★★☆☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;I got this book (and had it signed) on Election Night. Lévy had come to
visit the Stanford Hillel, to philosophize with students and watch as
the votes were called. A student asked him at one point how he could be
so certain that the West and its allies would triumph over the rising
Axis of Resistance. I remember I was struck by his response: “Of course
they will. It is good against evil, the evil must lose. It will be
defeated. That is what happens.”&lt;&#x2F;p&gt;
&lt;p&gt;This book will do little to convince those who may disagree with what it
has to say. It presents few novel facts to those who share his
positions. It is a position piece: a statement, for anyone who is
interested, to read and comprehend the contours of Lévy’s beliefs.&lt;&#x2F;p&gt;
&lt;p&gt;Two further notes:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;However much of a conversational tone I believe myself to impart on
my writing, Lévy has vastly more.&lt;&#x2F;li&gt;
&lt;li&gt;I have never appreciated how vastly different the Francophone world
is from its Anglophone counterpart.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I would be interested in hearing how Lévy’s thoughts have evolved in the
time since the publication of &lt;em&gt;Israel Alone&lt;&#x2F;em&gt;. It is not quite that the
book is outdated, but with the pace of change in the Middle East today,
there is certainly much more to discuss.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Roll Call</title>
    <published>2024-12-17T14:52:00-08:00</published>
    <updated>2025-08-05T20:30:00-04:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/roll-call/" type="text/html"/>
    <id>https://figbert.com/projects/roll-call/</id>
    <content type="html">
      &lt;p&gt;Roll Call is a jury-rigged receipt printer that sits on my desk and
dictates my morning routine. Every morning, it prints out a briefing
of all the critical information I need to catapult me into the day that
awaits. Phones are great—but I don’t like checking mine when I wake up.
I want my brain fresh and undistracted.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;roll-call&#x2F;poster.png&quot; alt=&quot;Sexy advertisement for Roll Call&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I first ideated what would become Roll Call on a post-it note on the
wall of my dorm. When the final project of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;explorecourses.stanford.edu&#x2F;search?q=DESIGN11&quot;&gt;DESIGN11&lt;&#x2F;a&gt; rolled around and
they asked us to “fix a bug in our lives,” I knew I had to take
advantage of the opportunity.&lt;&#x2F;p&gt;
&lt;p&gt;After a flurry of on-paper ideation, I began with the software. It’s all
open-source: the bulk is &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;figbert&#x2F;roll-call&quot;&gt;a couple hundred lines&lt;&#x2F;a&gt; of bespoke Python,
supported by an iMessage library &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;figbert&#x2F;imessage_reader&quot;&gt;I customized&lt;&#x2F;a&gt; to allow me to determine
if a message was unread. I call out to a few &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hedgertronic&#x2F;oura-ring&quot;&gt;startlingly&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;thingsapi&#x2F;things.py&quot;&gt;good&lt;&#x2F;a&gt;
libraries to fetch the data that will go on the receipt: the day of the
week, the weather, my Oura Ring stats from the night before, unread
iMessages, my todo list, and my calendar events for the day. When that
was done, I called every single possible retailer in the Bay Area who
might sell me a receipt printer—no dice. I even asked a couple
restaurants that I was eating at if I could pawn theirs, which was
similarly unsuccessful. So I ordered one on Amazon (guided in my
purchase by &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;aschmelyun.com&#x2F;blog&#x2F;i-built-a-receipt-printer-for-github-issues&#x2F;&quot;&gt;this blog post&lt;&#x2F;a&gt;), married it to my code, and have been
using it every morning since.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;roll-call&#x2F;notebook.png&quot; alt=&quot;Early ideation of Roll Call in my notebook&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Roll Call is one experiment in my long crusade to replace the phone. Our
current era of mobile computing has brought benefits that are difficult
to fully comprehend. But they have come along with deep ills. The
combination of hardware and software in Roll Call has allowed me to
entirely eliminate my phone from this component of my daily routine. In
this slice of my life, I experience all the benefits of technology with
none of its downsides. However, this only works because I can still rely
on my phone during the rest of the day. I can replace my phone with a
receipt in the morning and feel better because of it, but later in the
day I still need to fall back to the harsh light of the screen to
respond to messages, mark todos as complete, and more.&lt;&#x2F;p&gt;
&lt;p&gt;What the Roll Call experiment allows us to do is free our minds to
imagine what removing the phone might look like from the rest of the
day. This part? It’s already taken care of. We’ve solved for this use
case, one that is normally solved with our phones. How can we solve for
the rest? We have an alternative way to read data, how can we rethink
writing? How do we redesign the rest of our phone-based experiences to
avoid falling into Instagram and a hundred other things that melt away
all the presence and the possiblity of our beautiful lives? This part of
the pressure is gone, now let’s deal with the rest.&lt;&#x2F;p&gt;
&lt;details&gt;
  &lt;summary&gt;
    &lt;i&gt;A theoretical, optional pitch that loses people but I think is
    conceptually neat and cool&lt;&#x2F;i&gt;
  &lt;&#x2F;summary&gt;
    Roll Call is paper, with a digital brain. Every morning I look at a
    slip of paper—for all intents and purposes the same piece of
    paper—and instead of remaining static it autonomosly reflects the
    changing state of the world around me. The state of the world exists
    in a Platonic ideal somewhere in conceptspace. Nowadays we represent
    all that information about our lives, that typically is just held in
    our heads, in various databases. That information is displayed back
    to us in our calendar apps, and todo lists, and all the rest. Those
    apps transform the database&#x27;s zeroes and ones, which are themselves
    representations of ideas, into a form that we view on our phones all
    the time. Roll Call&#x27;s receipts are equally valid transformations of
    those zeroes and ones.
&lt;&#x2F;details&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;roll-call&#x2F;receipt.jpg&quot; alt=&quot;An example Roll Call receipt from December 17, 2024&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As a last component of my time in DESIGN11, we made little
advertisements. You can check out mine &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=rNGusG71qD8&quot;&gt;here on YouTube&lt;&#x2F;a&gt;! Remind me
never to film when I have a stuffy nose ever again.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;eight-months-later&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eight-months-later&quot; aria-label=&quot;Anchor link for: eight-months-later&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Eight Months Later…&lt;&#x2F;h2&gt;
&lt;p&gt;Iteration continues. One random day at the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.recurse.com&#x2F;scout&#x2F;click?t=0d85c06dc14f97552f2130471d4e3086&quot;&gt;Recurse Center&lt;&#x2F;a&gt;, my friend
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.frankchiarulli.com&#x2F;&quot;&gt;Frank&lt;&#x2F;a&gt; brought in a small device that caught my attention—a receipt
printer, in miniature! After one glance at its cute cat visage I knew I
couldn’t pass up the opportunity.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;roll-call&#x2F;cat.jpg&quot; alt=&quot;The product of a long day’s testing&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This version of Roll Call &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;FIGBERT&#x2F;roll-call&#x2F;tree&#x2F;cat&quot;&gt;exists parallel&lt;&#x2F;a&gt; to the primary
implementation, and is interesting as a proof-of-concept of how extreme
portability might impact the device (it fits comfortably on top of my
MacBook Air trackpad). It ditches the cables in favor of Bluetooth—I
wrote a bespoke &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;FIGBERT&#x2F;bleprinter&quot;&gt;Python package&lt;&#x2F;a&gt; to render receipts and submit them for
printing using the device’s largely undocumented communication protocol.
Ultimately though, as entertaining as the new form factor may be
visually and as rewarding as it was to overcome the progamming
challenges in making it functional, I think this evolution of Roll Call
is likely a dead end.&lt;&#x2F;p&gt;
&lt;p&gt;There remain gaps in the current implementation worth exploring in
hypothetical future versions, however. Roll Call’s deep reliance on my
laptop, for iMessage and Contacts as well as to drive the printer, is a
flaw in my screen-free vision. Ideally, all this would be replaced by a
simple button-computer that could talk to a cloud macOS server as well
as the receipt printer. As it happens, I have six weeks left at Recurse
and a whole bag full of microcontrollers…&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>More from Tarpenning</title>
    <published>2024-12-16T19:40:00-08:00</published>
    <updated>2024-12-16T19:40:00-08:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/rocket/" type="text/html"/>
    <id>https://figbert.com/reading/rocket/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;Rocket&lt;&#x2F;i&gt; by Marc Tarpenning. &lt;br&#x2F;&gt;
        Finished on December 15, 2024. &lt;br&#x2F;&gt;
        
        Rating: ★★★☆☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;I stumbled onto &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;altamira.studio&quot;&gt;Altamira&lt;&#x2F;a&gt; during my usual daily web surfing, though
exactly how I can’t quite remember nor discern from my browser history.
What I do remember is that I was there for &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;altamira.studio&#x2F;store&#x2F;p&#x2F;itd&quot;&gt;In The Dark&lt;&#x2F;a&gt;. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;altamira.studio&#x2F;store&#x2F;p&#x2F;rocket&quot;&gt;Rocket&lt;&#x2F;a&gt; was a
delightful surprise. It’s not hard to discern from &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;marc-tarpenning-on-innovation&#x2F;&quot;&gt;my previous writing&lt;&#x2F;a&gt;
that I think Marc Tarpenning is a smart fellow. I was quite excited to
discover another opportunity to hear what he has to say. I’m also a
sucker for bespoke hardware, e-ink screens, and reading books by people
you’ve met.&lt;&#x2F;p&gt;
&lt;p&gt;After reading, I can affirm that &lt;em&gt;Rocket&lt;&#x2F;em&gt; is an altogether pleasant
experience. The fundamental insights about “measure twice, cut once”
that I have already written about apply just as well to NuvoMedia as
they did to early Tesla: Tarpenning writes that they “never varied the
plan” for what they were going to build. His focus on business
models—later important to proving that a market for high-end electric
vehicles might exist—is also present, reflected at NuvoMedia in the
discussion they had around the role of publishers and internet
distribution in the world of e-books.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Rocket&lt;&#x2F;em&gt; places a stronger emphasis on a specific method for narrowing
down addressable problem-space than the talk of his that I attended. The
methodology is described succinctly as follows:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Our thesis, if you will, was looking for products that didn’t exist,
that the technology was just getting good enough to enable.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The examples Tarpenning provides illuminate fun alternate histories that
never quite made it.&lt;&#x2F;p&gt;
&lt;p&gt;The form that this book takes is also quite notable: it is barely longer
than 50 pages in total, heavy in font but light and thin in the hand. It
would not be out of place as an article or a blog post somewhere on the
net. I am a strong proponent of the pamphlet as an art form, so I don’t
begrudge the physical manifestation of &lt;em&gt;Rocket&lt;&#x2F;em&gt;. I did not, however,
enjoy the layout: were the Federalist Papers written in interview
format?&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>What I&#x27;ve Learned from Stella Levi (So Far)</title>
    <published>2024-12-16T18:28:00-08:00</published>
    <updated>2024-12-17T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/one-hundred-saturdays/" type="text/html"/>
    <id>https://figbert.com/reading/one-hundred-saturdays/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;One Hundred Saturdays&lt;&#x2F;i&gt; by Michael Frank. &lt;br&#x2F;&gt;
        Finished on December 15, 2024. &lt;br&#x2F;&gt;
        
        Rating: ★★★★★ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;This is the most vibrant, imagery-inducing work that I may have ever
come upon. The first half of the book is dedicated to breathing life
into the long-since vanished world of Rhodes’ Juderia. I have always
been prone to feelings of nostalgia for times that I never
experienced.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; This book exploits that tendency to the greatest
degree, accentuated by stylized and interesting art interleaved within
the text. Since I first cracked open its cover, I have been thinking
ceaselessly about the structural features of the Juderia that induced
specific behaviors and tendencies, which of those I admire and which of
those I think are counter-productive, and how one would go about
recreating an idealized version of this sort of enclave. Certainly an
unexpectedly great book for people interested in the ways that urban
environments impact their residents. Or people who like cities that
sound like Acre or Jaffa.&lt;&#x2F;p&gt;
&lt;p&gt;Of course, it is also serious work about an issue of much import: that
of the total, intentional destruction of life in the Juderia and all
that that implicates. I used the word “vanished” above to describe what
happened to the world we witness in the first half of the book, but this
is wrong: it was annihilated. This makes the middle of &lt;em&gt;One Hundred
Saturdays&lt;&#x2F;em&gt; a rather heavier read than its beginning. It is also what
makes the book worthwhile—life is not a walk in the park, and there is
beauty in its challenges. This work would be incomplete as an analysis
of life in the Juderia without a discussion of its end. The two are
inseparable.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;One Hundred Saturdays&lt;&#x2F;em&gt; is not even actually about historical events, so
much as it is about Stella Levi herself. It is through her life—which so
remarkably intersects time and again with the greatest focal points of
change—that we learn about the shifting world. Stella is a woman of
unfathomable resilience. This book is a treatise to her, a shocking and
kind gesture from a close friend. The greatest gift one could divine
from these pages would be a fraction of her insight.&lt;&#x2F;p&gt;
&lt;p&gt;The book was also valuable to me in that it forced me to confront my own
biases. I am in many ways very anti-diaspora.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; &lt;em&gt;One Hundred
Saturdays&lt;&#x2F;em&gt; managed to challenge my anti-diasporic stance. Were I to
apply to it the same standards as I do elsewhere, I should have been far
more dismissive of life in the Juderia, Judeo-Spanish, and the culture
expressed in the book. Instead, I found myself enamored. This is
probably attributable to a combination of my unfamiliarity with
Sephardic history between the Inquisition and 1948, personal connections
and feelings of shame toward the Ashkenazi diasporic experience, and the
charisma that emanated from every page of this book. I think the
adjustment that I should take away is not a total reversal of my
stance—the fate of the Rhodeslis must ensure that—but a softening.&lt;&#x2F;p&gt;
&lt;p&gt;I would finally like to extend a huge thank you to my wonderful mom, who
recommended me this book.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EDIT:&lt;&#x2F;strong&gt; I sent this book to my TA from HISTORY81B &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;stanford-quarterly-reflection-01&#x2F;&quot;&gt;last year&lt;&#x2F;a&gt;, because
I vaguely remembered that her area of research was something to do with
Ottoman Jewry and thought she might be interested. Turns out she did all
the Ladino&#x2F;Judeo-Spanish transcription. Nutty.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;Or, for that matter, never existed, as is the case with my
feelings toward a whole host of Disney movies. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;This of course clashes with the fact that I live in America, but:
I recognize that what is correct for the individual on a case-by-case
basis may differ from the needs of the whole&#x2F;many, am not above the
hypocrisy of adjudicating myself as a special case, and also think that
the American acceptance of Jews does make it something of a special
case. It is worse than Israel, but it is better than everywhere else
where we are totally unwanted. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Baymax on Memory Lane</title>
    <published>2024-12-14T17:31:45-08:00</published>
    <updated>2024-12-14T17:31:45-08:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/baymax-memory-lane/" type="text/html"/>
    <id>https://figbert.com/projects/baymax-memory-lane/</id>
    <content type="html">
      &lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;baymax-memory-lane&#x2F;render.webp&quot; alt=&quot;Baymax staring inquisitively at a wall of memory orbs from Inside Out&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The above image was created as my final project for &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cs148.stanford.edu&quot;&gt;CS148&lt;&#x2F;a&gt;, under the
auspices of renown bodybuilder and occasional professor &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;physbam.stanford.edu&#x2F;~fedkiw&#x2F;&quot;&gt;Ron Fedkiw&lt;&#x2F;a&gt;.
Everything in the scene was made from scratch in Blender, while the
final image was rendered with the Cycles engine. All my work in the
class was done in collaboration with my good friend Naama.&lt;&#x2F;p&gt;
&lt;p&gt;The scene was inspired by the movie Inside Out, in particular when the
character Joy ventures into the annals of her host’s memory. We
appropriated the concept of a colorful shelf of memory orbs, and then
brought another charismatic Pixar character into the scene, Baymax. We
would like to think that he’s having a happy moment perusing good times
past.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;baymax-memory-lane&#x2F;alt.webp&quot; alt=&quot;An additional angle and a version without any textures&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The stars of the show when it comes to this 3D model are the memory
orbs. Most impressively, there’s actually only one canonical orb in the
scene! The rest are procedurally generated duplicates (same with the
shelves). There is some simple math to figure out how to place them, and
then a color is randomly selected from a weighted list of options:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;baymax-memory-lane&#x2F;geometry-nodes.png&quot; alt=&quot;Memory orb geometry nodes&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;baymax-memory-lane&#x2F;shader.png&quot; alt=&quot;Memory orb shader nodes&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The most notable benefit we get from ray tracing in our scene is once
again in the memory orbs lining the shelves. These orbs glow many
different colors: yellow, red, green, blue, and purple. However, the
light source for each orb is actually the same—a bright white light in
the center of the ball. The light source is surrounded by the material
of the orbs, which is transparent but tinted, and thus changes the color
of the light ray after emission and before it hits the camera. Other
benefits include the slight light penetration through Baymax’s
inflatable body as well as area and sky lighting.&lt;&#x2F;p&gt;
&lt;p&gt;On a more personal tack: making this scene vindicated a lot of the
philosophies that I’ve picked up in Stanford’s Design program. During my
&lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;i-wrote-this-two&#x2F;#making-a-doughnut-in-blender&quot;&gt;first forays into Blender&lt;&#x2F;a&gt;, I was paralyzed to the point of inaction by
the fear that any step I took—extruding a face, tweaking a texture—would
mess up what I’d built so far or would build going forward. I was
limited to following tutorials, which restored some of the structure I
was familiar with from programming to the complex world of modeling
things that looked good (technical term). But the d.school has &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fosstodon.org&#x2F;@FIGBERT&#x2F;113553595653702641&quot;&gt;changed
my perspective&lt;&#x2F;a&gt;. The will force you to spend hours and hours sitting in
the in-between phases, acting first and iterating, abandoning ideal
perfections to make something real. With practice, you get comfortable
in this space. That willingness to screw up and &lt;code&gt;CMD-Z&lt;&#x2F;code&gt; was crucial on
this project.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Waking the Public to Waking Lions</title>
    <published>2024-12-14T13:53:42-08:00</published>
    <updated>2024-12-14T15:48:19-08:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/waking-lions/" type="text/html"/>
    <id>https://figbert.com/reading/waking-lions/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;Waking Lions&lt;&#x2F;i&gt; by Ayelet Gundar-Goshen. &lt;br&#x2F;&gt;
        Finished on November 28, 2024. &lt;br&#x2F;&gt;
        
        Rating: ★★★★☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;&lt;strong&gt;Author’s Note:&lt;&#x2F;strong&gt; This review is an adaptation of the final paper I
wrote for Russell Berman’s wonderful &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;explorecourses.stanford.edu&#x2F;search?q=COMPLIT37Q&quot;&gt;Zionism and the Novel&lt;&#x2F;a&gt;. For
another artifact of my work in the class, check out my review of &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;illusion-of-return&#x2F;&quot;&gt;The
Illusion of Return&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;abstract&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#abstract&quot; aria-label=&quot;Anchor link for: abstract&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Abstract&lt;&#x2F;h2&gt;
&lt;p&gt;This paper seeks to investigate Ayelet Gundar-Goshen’s novel Waking
Lions as a work of engaged literature. A thorough analysis of her
writing is conducted to extract the specific political positions she
advocates. The analysis of the political commentary contained in her
fiction is then paired and contrasted with contemporary anthropological
scholarship on the issue of Eritrean migrants in Israel to build a
deeper understanding of the context in which the book was created and
where it now stands, approaching a decade after publication. The paper
ultimately claims that Gundar-Goshen’s writing opens a wide view into
the everyday strife and overlapping conflicts and harms of Israel’s
myriad communities and urges a remediation of the Eritrean migrant
crisis in Israel through integration and acceptance. The novel’s framing
places the issues at the core of the text beyond the scope of the
question of Zionism: rather, the continued implementation of Zionism is
what has given rise to the status quo, thus necessitating Gundar-Goshen
look beyond the philosophy—toward human values and compassion—to find
the source of the mandate to aid the Eritreans.&lt;&#x2F;p&gt;
&lt;p&gt;This dissection of Waking Lions is important precisely because the book
has been treated as an unimportant work by the scholarly community. The
text doesn’t touch the question of the Palestinians, and thus is
sidelined. But just as is seen with the communities in the book, nothing
is black and white: Israel is more than its conflict with the
Palestinians. Waking Lions’ unflinching spotlighting of the myriad
internal issues faced by the diverse Israeli polity make it one of the
most important texts to come out of the country in recent years.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-text-as-an-engaged-work&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-text-as-an-engaged-work&quot; aria-label=&quot;Anchor link for: the-text-as-an-engaged-work&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
The Text as an Engaged Work&lt;&#x2F;h2&gt;
&lt;p&gt;Waking Lions is not only engaged literature insofar as all texts are
engaged literature, dealing with subjects that are covered by the broad
tent of political opinion, but instead goes above and beyond in
provoking a political conversation around, and interrogating the
political ramifications and engagements of, the Eritrean refugee issue
in Israel. This is by design. Gundar-Goshen’s intention in creating this
work of fiction was to make her political lamentations appear more
compelling to a broader audience by disguising them in the contours of
characters with depth and dimension and emotion that readers can
recognize from their own lives. A political diatribe with specific
policy criticisms and recommendations will only be consumed by a very
specific subset of people. A work that engages more directly with the
universal instinct of storytelling can better evangelize its message.
This is how Waking Lions was crafted from its inception.&lt;&#x2F;p&gt;
&lt;p&gt;An important component of Waking Lions’ political engagement is the
length to which Gundar-Goshen goes to impress upon the reader the
physical realities of Eritrean migrants in Israel, seeking to highlight
their suffering through its personification in the character of Sirkit.
Sirkit, the Eritrean woman at the center of the novel, is a complex
figure—at once despised for her manipulations of Dr. Eitan Green and yet
seemingly using her Machiavellian abuses for the betterment of the lives
of overlooked refugees. It is only after forming a relationship with
Sirkit that the reader is introduced to the details of her living
conditions: a caravan, one cramped room filled with 8 mattresses and
dirty dishes, parked behind the gas station where its residents
work.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Sirkit herself scrubs floors during the day. None of the
Eritreans who cram themselves together into the caravan to sleep on the
floor night after night are paid the minimum wage nor given the
traditional benefits of employment. Additional emotionally difficult
information is held even further, with the reasons for Sirkit’s flight
from Eritrea hinted at only in the very last chapter of the novel. Here,
in her internal monologue, she refers to the African nation as “the land
of the dead children.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; She reflects on a “well near the village that
one day, simply had no more water,” on soldiers that stole their flour,
on the trek over land to Egypt, on abusive Bedouin smugglers, and on
Israel, the place where “she stopped. From [which] she would not
move.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-3-1&quot;&gt;&lt;a href=&quot;#fn-3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; The strategic delay in the delivery of this information is
done to counter the jaded desensitization of the receiving audience.
There is the age-old adage: “one death is a tragedy, a million is a
statistic.” By giving the physical conditions of the Eritreans a
familiar face in the form of Sirkit, the theoretical plight of a people
is turned into the tangible plight of a person.&lt;&#x2F;p&gt;
&lt;p&gt;Beyond the individual suffering, the systemization of the Eritrean
struggle in the Jewish State is given an embodied form in the text
through Eitan’s visit to the Holot Detention Center. Having come to
visit Sirkit, Eitan looks out across the vast desert yard and observes:
“Any one of those people could be Sirkit.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-4-1&quot;&gt;&lt;a href=&quot;#fn-4&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; This is an explicit
declaration of the above determination that Sirkit is a stand-in for the
plight of Eritreans in Israel more broadly—Gundar-Goshen states that
Sirkit is equivalent to the other Eritreans in Holot, and thus that all
the detainees are as human as the book has portrayed her to be. It is
also a further description of the dehumanization that Eritreans are
subjected to at the hands of the Israeli government. Eitan continues:
“They looked as alike as a herd of sheep. Of cows…. When he looked at
them together, a crowded collection of bodies, he felt that they had
lost every drop of selfhood, and all the small differences that made
each of them who they were had been eclipsed by that large mass of
identical flesh… the overcrowded space stripped them of their
personalities and made them a single entity—Eritrean women…. They were
Eritrean women waiting to be deported…”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-5-1&quot;&gt;&lt;a href=&quot;#fn-5&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; In his brief visit to the
Holot Detention Center, Eitan is used as a tool to convey the banal
brutality of the destruction of Eritrean individuality in the national
system.&lt;&#x2F;p&gt;
&lt;p&gt;The ultimate resolution of the book’s moral challenge through Sirkit and
Eitan’s deception reveals Gundar-Goshen’s preference for how to resolve
the political quandary of Eritrean migrants in Israel. The roiling truth
of the story behind the illegal hospital in the desert—Eitan’s initial
crime of vehicular manslaughter, Sirkit’s blackmail, the robbery of
hospital materials, peripheral involvement with the Bedouin criminal
underworld, hints of adultery, and everything else that ultimately
comprises the narrative of Waking Lions—is smoothed over. Sirkit does
this of her own initiative. Speaking with Eitan’s wife, Liat, she papers
over the reality of the situation that had brought his family and
marriage so close to collapse: “Before the Bedouins had surprised them,
Eitan had gone to treat her injuries. He’d left Yaheli’s bed and driven
two and a quarter hours to get there. Only an angel would do something
like that.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-6-1&quot;&gt;&lt;a href=&quot;#fn-6&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; With the full context Gundar-Goshen provided during the
action, the additional layers are revealed. Eitan drove down to perform
the surgery in part because of his romantic feelings toward Sirkit as
well as her continued power over him due to the potential for her
testimony. But in the end this is resolved—his service to the Eritreans
is simplified: “He felt guilty about the silence she had imposed on him
concerning Zakai’s bribes. He wanted to atone…. It was illegal. And
dangerous…. And [Liat] realized suddenly why he had been so interested
in the investigation of that Eritrean’s death. Those people weren’t just
a newspaper article for him. He knew them. He was helping them.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-7-1&quot;&gt;&lt;a href=&quot;#fn-7&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
Gundar-Goshen does briefly broaden the scope to include some of the
other narratives in Israeli discourse, describing a café scene after
Eitan and Sirkit’s revisionist story hits the news: “Several people
began arguing. We can’t have all of Africa coming here. If those
bleeding hearts have their way, we’ll end up without a country.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-8-1&quot;&gt;&lt;a href=&quot;#fn-8&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; But
this broadening is done primarily for the purpose of foregrounding the
opposite narrative—her narrative— as expressed by a woman who approaches
Eitan to say, “We need more people like you in this country.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-9-1&quot;&gt;&lt;a href=&quot;#fn-9&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
Through Liat’s acceptance of the morality of her husband’s actions and
the Israeli public’s endorsement, Gundar-Goshen lends her own voice to
the idea that Eritreans in Israel should be accepted, appeased, and
integrated. Her political preferences, expressed through these varied
characters, are paired with an additional pithy quip, a sort of
condemnation of the idea that the hard work her politics would mandate
can be ignored. It is the final line in the novel, and it comes from the
mind of Eitan Green, newly freed to return to his old life
and—apparently—bury his head in the sand: “How beautiful the earth is
when it moves properly. How pleasant to move with it. To forget that any
other movement ever existed. That a different movement is even
possible.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-10-1&quot;&gt;&lt;a href=&quot;#fn-10&quot;&gt;10&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;clashing-against-reality&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#clashing-against-reality&quot; aria-label=&quot;Anchor link for: clashing-against-reality&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Clashing Against Reality&lt;&#x2F;h2&gt;
&lt;p&gt;Gundar-Goshen’s political commentary through Waking Lions of course
exists in the context of Israeli reality. This has continued to evolve
quite rapidly in the seven years since the publication of her work of
engaged literature. As recently as last year, there was violence in the
streets of Tel Aviv between different Eritrean factions resulting in the
injury of over 100 individuals as well as significant arrests. The
conditions in Eritrea that led so many to choose “liminality in Israel
over forced conscription (often until death) in Eritrea or ethnic
cleansing by Arab groups in Darfur” are the same or worse as they were
at the time Gundar-Goshen released her novel to the world.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-11-1&quot;&gt;&lt;a href=&quot;#fn-11&quot;&gt;11&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Migrants
largely remain in limbo, governed under the conflicting mandates of the
Prevention of Infiltration Law and the 1951 Refugee Convention.&lt;&#x2F;p&gt;
&lt;p&gt;Aspects of Gundar-Goshen’s humanitarian ideology have received broader
adoption. The Holot Detention Center, a location that played a
significant role in the psyche of the Eritreans of Waking Lions, was
shuttered in 2018.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-12-1&quot;&gt;&lt;a href=&quot;#fn-12&quot;&gt;12&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; The Deposit Law, which mandated 20% of asylum
seekers’ salary be deposited in a bank account only accessible at the
airport when leaving the country, was struck down by the Israeli Supreme
Court in 2020.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-13-1&quot;&gt;&lt;a href=&quot;#fn-13&quot;&gt;13&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Eritreans have developed their own community
centers, educational structures, and institutions that “attest to the
agency of the… community in Israel.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-14-1&quot;&gt;&lt;a href=&quot;#fn-14&quot;&gt;14&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Migrants are building lives in
the country, living on visas that need renewal every 2-3 months.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-15-1&quot;&gt;&lt;a href=&quot;#fn-15&quot;&gt;15&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
This itself is a massive political victory for Gundar-Goshen’s school of
thought: as Waking Lions conveys, the daily lives “of Eritreans in
Israel are not apolitical.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-16-1&quot;&gt;&lt;a href=&quot;#fn-16&quot;&gt;16&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Their continued existence in Israel is
a testament to the political success of the ideology expressed in
Gundar-Goshen’s work of engaged literature.&lt;&#x2F;p&gt;
&lt;p&gt;In spite of these developments, Israeli society remains broadly hostile
to the presence of the Eritrean migrants in precisely the ways that
Gundar-Goshen opposed in Waking Lions. The country is governed by an
extreme right-wing coalition which harbors significant anti-Eritrean
sentiment, though internal and external factors have made continued
attempts to address the migrant crisis low on its list of priorities.
The anti-migrant position resulted in the Prime Minister reneging on a
negotiated settlement with the UN refugee agency to give permanent
status to around half of asylum seekers in Israel in exchange for
resettling the other half in other countries.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-17-1&quot;&gt;&lt;a href=&quot;#fn-17&quot;&gt;17&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Such a compromise was
perceived as too soft and harshly criticized. Integration of Eritrean
migrants as full members of the Israeli polity, as citizens, is
perceived as undesirable. Emigration is encouraged, and the mass
departure of Eritrean migrants remains the state’s preferred outcome.&lt;&#x2F;p&gt;
&lt;p&gt;The specific interplay of the international system in the Eritrean
refugee crisis in Israel is a particularly rich topic for dissection. In
many ways, the sovereign Israeli system is set up in direct opposition
to the presence of Eritrean migrants, but is countered by international
refugee law that exists “precisely because states are often inclined to
act differently than how the law prescribes.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-18-1&quot;&gt;&lt;a href=&quot;#fn-18&quot;&gt;18&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; The particularly
proactive role that international governance plays in the day-to-day
experience of Eritrean migrants in Israel is made greater by the
already-enhanced focus of the international community on the Jewish
nation—a fact which the community has at times used to its advantage.
Eritrean society is not traditionally organized around the concept of
race or color, but rather ethnolinguistic groups and tribal
affiliation.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-19-1&quot;&gt;&lt;a href=&quot;#fn-19&quot;&gt;19&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; In most migratory scenarios, individuals who may be
racialized as Black “attempt to highlight their immigrant background or
national origin to escape negative stereotypes” associated with this new
identity.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-20-1&quot;&gt;&lt;a href=&quot;#fn-20&quot;&gt;20&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; The Eritrean community in Israel has become an exception
to this trend, opting to make the strategic decision to self-identify as
“Black.” This particular language is intended to garner support from
abroad by contextualizing the experience of Eritrean migrants in Israel
in a foreign framework, so as to make it more intelligible in the
international arena and increase pressure on the Israeli state to halt
deportations. The role of nonnative forces in the Eritrean-Israeli
crisis goes largely undiscussed in Waking Lions, to its detriment.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusions&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusions&quot; aria-label=&quot;Anchor link for: conclusions&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Conclusions&lt;&#x2F;h2&gt;
&lt;p&gt;Ayelet Gundar-Goshen’s Waking Lions paints a colorful picture of a
pressing, contemporary Israeli issue, presenting the reader with a clear
call to action through its expert personification of the problem. The
narrative is thoroughly grounded in modern Israel, making the
intentional decision to place the question of Zionism squarely in the
past. The Jewish State already exists—Gundar-Goshen’s narrative
interprets the Eritrean migrant crisis within its borders as a question
to be answered by the generic State portion of the Zionist dream, not
the Jewish (and by extension Zionist) part. The novel implores its
audience to take action to embrace and integrate Eritreans into the
fabric of Israeli society. Its detailed description of the suffering of
the migrant community, in desperate poverty and constant fear of state
action, is gracefully described with its day-to-day complexities—its
members are not pure good, nor evil—while ensuring that it is clear that
such suffering is a moral failing of the state. Gundar-Goshen believes
this can be solved.&lt;&#x2F;p&gt;
&lt;p&gt;It is in turn a failing of the scholarly community that this is the
first paper to seriously engage with Waking Lions. The discussion of
international conflicts, and their portrayal in literature, is flashier.
Such analysis allows the author of a paper to connect with the oldest of
human traditions: myths of wars and conquests waged throughout the eons.
It is, bluntly, dramatic and fun. In the Israeli context in particular,
there is no shortage of conflicts and fictions about them to dissect;
the Palestinian issue in particular provides a sure and stable base for
study. It is, however, a poor academic that allows themselves to fall
prey to sampling bias. Israel is far more than its conflict with the
Palestinians. Indeed, for the Eritreans under constant threat of
deportation—and, for that matter, Dr. Eitan Green—the matters
highlighted in Waking Lions take precedence. The dialogue in this work
of engaged literature must be given space, instead of letting the
Palestinian issue take all the oxygen. With an opportunity to thrive, to
engage with and impact a large audience, Gundar-Goshen’s novel could
catalyze real progress on one of Israel’s most serious internal
conflicts.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;Ayelet Gundar-Goshen, &lt;em&gt;Waking Lions&lt;&#x2F;em&gt; (London: Pushkin Press,
2017), pt. 2 chap. 3. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;Ibid., pt. 2 chap. 16. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-3&quot;&gt;
&lt;p&gt;Ibid. &lt;a href=&quot;#fr-3-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-4&quot;&gt;
&lt;p&gt;Ibid. &lt;a href=&quot;#fr-4-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-5&quot;&gt;
&lt;p&gt;Ibid. &lt;a href=&quot;#fr-5-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-6&quot;&gt;
&lt;p&gt;Ibid., pt. 2 chap. 15. &lt;a href=&quot;#fr-6-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-7&quot;&gt;
&lt;p&gt;Ibid. &lt;a href=&quot;#fr-7-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-8&quot;&gt;
&lt;p&gt;Ibid., pt. 2 chap. 16. &lt;a href=&quot;#fr-8-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-9&quot;&gt;
&lt;p&gt;Ibid. &lt;a href=&quot;#fr-9-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-10&quot;&gt;
&lt;p&gt;Ibid. &lt;a href=&quot;#fr-10-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-11&quot;&gt;
&lt;p&gt;David Clinton Wills, “A Home at the End of the World: Eritrean
and Sudanese Asylum Seekers in Tel Aviv, Israel,” &lt;em&gt;Sanglap:
Journal of Literary and Cultural Inquiry&lt;&#x2F;em&gt; 3, no. 2 (2017):
321-349,
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sanglap-journal.in&#x2F;index.php&#x2F;sanglap&#x2F;article&#x2F;view&#x2F;223&quot;&gt;https:&#x2F;&#x2F;sanglap-journal.in&#x2F;index.php&#x2F;sanglap&#x2F;article&#x2F;view&#x2F;223&lt;&#x2F;a&gt;. &lt;a href=&quot;#fr-11-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-12&quot;&gt;
&lt;p&gt;Ibid. &lt;a href=&quot;#fr-12-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-13&quot;&gt;
&lt;p&gt;Itamar Dubinsky, “Digital Diaspora: Eritrean Asylum Seekers’
Cyberactivism in Israel,” &lt;em&gt;African Diaspora&lt;&#x2F;em&gt; 12, no. 1-2 (2020):
89-116: 10.1163&#x2F;18725465-bja10002 &lt;a href=&quot;#fr-13-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-14&quot;&gt;
&lt;p&gt;Ibid. &lt;a href=&quot;#fr-14-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-15&quot;&gt;
&lt;p&gt;Clinton Wills, “A Home at the End of the World” &lt;a href=&quot;#fr-15-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-16&quot;&gt;
&lt;p&gt;Dubinsky, “Digital Diaspora” &lt;a href=&quot;#fr-16-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-17&quot;&gt;
&lt;p&gt;James Yap, Hilina Fessahaie, and Enbal Singer, “Populism’s Global
Impact on Immigrants and Refugees: The Perspective of Eritrean
Refugees in Europe and Israel,” &lt;em&gt;Maryland Journal of
International Law&lt;&#x2F;em&gt; 35 (2020): 189-201 &lt;a href=&quot;#fr-17-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-18&quot;&gt;
&lt;p&gt;Dubinsky, “Digital Diaspora” &lt;a href=&quot;#fr-18-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-19&quot;&gt;
&lt;p&gt;Amanuel Isak Tewolde, “Becoming Black: Racial Formation of
Eritrean Migrants in Israel,” &lt;em&gt;African Diaspora&lt;&#x2F;em&gt; 13, no. 1-2
(2021): 183-203, 10.1163&#x2F;18725465-bja10006 &lt;a href=&quot;#fr-19-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-20&quot;&gt;
&lt;p&gt;Ibid. &lt;a href=&quot;#fr-20-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Marc Tarpenning on Innovation</title>
    <published>2024-12-01T00:00:00+00:00</published>
    <updated>2024-12-01T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/marc-tarpenning-on-innovation/" type="text/html"/>
    <id>https://figbert.com/posts/marc-tarpenning-on-innovation/</id>
    <content type="html">
      &lt;p&gt;I was very fortunate to have the opportunity to hear Marc Tarpenning,
cofounder of Tesla, speak at the beginning of this quarter. It was the
most exciting and impactful talk I’ve attended at Stanford thus far.
This is really saying something.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;In his talk, Tarpenning elucidated a theory of innovation and disruption
that feels to me to have been “lost to time.” It is a measured,
idea-first strategy that is totally foreign to the current generation of
startups and to a world in which “founder” is itself a career.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;profiles.stanford.edu&#x2F;sara-singer&quot;&gt;Sara Singer&lt;&#x2F;a&gt; condensed his theory into a wonderful diagram that I have
further developed into the following list (broad principles are bolded,
with the specific examples from Tarpenning’s time at Tesla in the normal
weight):&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Identify a real problem. Prove it exists with real-world data.
Narrow down your search area by taking the age-old wisdom seriously:
“if something can’t go on forever, it won’t.” Create the solution
that will replace it.&lt;&#x2F;strong&gt; At Tesla, Marc and his cofounder Martin
Eberhard wanted to help solve the issue of climate change. The DoE
projected in 2008 that over 70% of U.S. oil demand came from
the transportation sector, and others have calculated that
decarbonizing road transportation “could feasibly reduce global
emissions by 11.9%” (&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;thecarbonalmanac.org&quot;&gt;The Carbon Almanac&lt;&#x2F;a&gt;, pp. 67). Without any
action, climate change would end the world. The scenario they
identified thus fits the above model—a problem that exists and a
solution that must arrive eventually. So they set out to build a car
without emissions.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Evaluate your solutions. Prove that it will work, mathematically,
before you start building. Your product cannot be better along just a
single-axis if you want to change people’s behavior; make a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Pareto_efficiency&quot;&gt;Pareto
improvement&lt;&#x2F;a&gt;. Do the hardest thing first to learn if your solution is
possible.&lt;&#x2F;strong&gt; Marc and Martin evaluated two things: the technology and
the market. First, they exhaustively investigated possible power
sources before deciding that batteries had reached the right
power density and mass-producibility to be—provably—the most
effective alternative to gasoline. Even powered by coal generators,
an electric car is less polluting per mile than an ICE vehicle due to
the efficiency of the electric motor (significantly less energy
wasted as heat, thus more energy toward movement). On the market
front, they found that upper-class Americans were seeking out
environmentally-friendly vehicles as a status symbol—with the Prius
eating into Lexus sales, and GM having to physically claw back their
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;General_Motors_EV1&quot;&gt;EV1&lt;&#x2F;a&gt; from leasers. Without scale, their first car would be
expensive, but it being the only vehicle to truly satisfy this niche
meant if the tech worked they would find buyers. Finally, their
solution wasn’t just technically better for customers with its
radical efficiency: it was fun, sexy. The rise of electric cars has
made them feel normal, but Tarpenning described the “electric smile,”
a meme they threw around at Tesla in the early days to describe the
reaction that drivers had from the very first moment they pressed the
pedal and felt the instant torque.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Change the world. The shape of progress is not inevitable, we make
it. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;UF8uR6Z6KLc?feature=shared&amp;amp;t=269&quot;&gt;Success is assured only in retrospect.&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; Tarpenning
advocated for a goal of “sustainable abundance,” forged from a fusion
of technological advancement, government buy-in, and behavioral
change.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;A lot of software businesses have none of these qualities.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Daring Fireball on Love</title>
    <published>2024-11-01T17:28:15-07:00</published>
    <updated>2024-11-01T17:28:15-07:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/daring-fireball-on-love/" type="text/html"/>
    <id>https://figbert.com/posts/daring-fireball-on-love/</id>
    <content type="html">
      &lt;p&gt;A funky list of two for my own use mostly.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;linked&#x2F;2022&#x2F;10&#x2F;08&#x2F;facebook-horizon-sucks&quot;&gt;Facebook’s VR Platform ‘Horizon’ Sucks&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;2024&#x2F;09&#x2F;the_things_they_carried#fn5-2024-09-16&quot;&gt;The Things They Carried&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>The Novel of Palestinian Disillusionment</title>
    <published>2024-11-01T17:25:51-07:00</published>
    <updated>2024-12-14T15:09:50-08:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/illusion-of-return/" type="text/html"/>
    <id>https://figbert.com/reading/illusion-of-return/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;The Illusion of Return&lt;&#x2F;i&gt; by Samir El-Youssef. &lt;br&#x2F;&gt;
        Finished on October 23, 2024. &lt;br&#x2F;&gt;
        
        Rating: ★★★☆☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;&lt;strong&gt;Author’s Note:&lt;&#x2F;strong&gt; I write everything in a conversational tone, so I
doubt anybody reading this will notice much difference, but this review
was originally a presentation. It is one of two I gave in Russell
Berman’s wonderful &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;explorecourses.stanford.edu&#x2F;search?q=COMPLIT37Q&quot;&gt;Zionism and the Novel&lt;&#x2F;a&gt;. It was first written in &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ia.net&#x2F;presenter&quot;&gt;iA
Presenter&lt;&#x2F;a&gt;. The title I have given the review here on the website was
taken from our syllabus. For another artifact of my work in the class,
check out my review of &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;waking-lions&#x2F;&quot;&gt;Waking Lions&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;let-s-begin&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#let-s-begin&quot; aria-label=&quot;Anchor link for: let-s-begin&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Let’s begin&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;del&gt;Alright close your laptops and let’s do this for real.&lt;&#x2F;del&gt; To get you up
to speed, let me tell you succinctly everything you need to know about
the book.&lt;&#x2F;p&gt;
&lt;p&gt;Let us start with the fact that it’s semi-autobiographical. Though it is
a novel, and elements are fictionalized, the life of our protagonist
broadly echoes the trajectory of our author.&lt;&#x2F;p&gt;
&lt;p&gt;Which is a great intro to our&lt;&#x2F;p&gt;
&lt;h2 id=&quot;brief-list-of-characters&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#brief-list-of-characters&quot; aria-label=&quot;Anchor link for: brief-list-of-characters&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Brief List of Characters&lt;&#x2F;h2&gt;
&lt;p&gt;Beginning with our Author-Protagonist. He’s Palestinian, born in
Lebanon, and lives in London. He has no name! We do know a lot about him
though.&lt;&#x2F;p&gt;
&lt;p&gt;Ali has the same origin story, lives in the US, and is drug buddies with
the protagonist. Ali is the closest of the bunch to the protagonist,
because the other two basically thought that the protagonist wasn’t
mentally up to snuff.&lt;&#x2F;p&gt;
&lt;p&gt;Maher has the same origin story as well. He is also a Communist.&lt;&#x2F;p&gt;
&lt;p&gt;George is a Lebanese Christian, still in Lebanon as far as we know, and
a big fan of abstract philosophy (specifically Heidegger). He is the only non-Palestinian of the bunch.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;that-s-the-gang-of-four&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#that-s-the-gang-of-four&quot; aria-label=&quot;Anchor link for: that-s-the-gang-of-four&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
That’s the Gang Of Four&lt;&#x2F;h2&gt;
&lt;p&gt;In the prologue, we witness the protagonist approaching the fifteenth
anniversary of his departure from Lebanon. He gets a call from Ali, who
has a layover in London on his way from the US back to Lebanon, and he
wants to say hello. This throws the protagonist into a whirlpool of
emotions, as he had pretty much severed contact with his past up until
this point.&lt;&#x2F;p&gt;
&lt;p&gt;The real meat of the novel is narrated to us in a series of flashbacks
to the last night the gang of four spent together, revealing
progressively more and more about their overlapping lives and
relationships.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, in the prologue, we get to witness the discussion between the
protagonist and Ali in the Heathrow Airport and a little bit of the
latter’s perspective on things.&lt;&#x2F;p&gt;
&lt;p&gt;And, before we address the fun socio-political commentary of the novel,
we can take a small more-mundane dive into one of the big questions of
the course:&lt;&#x2F;p&gt;
&lt;h2 id=&quot;is-the-personal-political&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#is-the-personal-political&quot; aria-label=&quot;Anchor link for: is-the-personal-political&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Is The Personal Political?&lt;&#x2F;h2&gt;
&lt;p&gt;El-Youssef answers clearly that, whether we like it or not: yes.&lt;&#x2F;p&gt;
&lt;p&gt;The stories in this book are deeply tragic.&lt;&#x2F;p&gt;
&lt;p&gt;Our protagonist had a sister named Amina. Amina was physically abused by
her other brother Kamal, and ends up killing herself. The protagonist is
haunted by her memory, and his family refuses to even say her name.&lt;&#x2F;p&gt;
&lt;p&gt;Obviously, this is deeply tragic. It also exists in a political context!
Amina shoots herself after Kamal sees her kissing a man and threatens to
kill her himself for dishonoring the family. The freedom of women in
society—regretfully, a political issue. The man Amina was kissing was a
fellow member of a Palestinian resistance movement. Her family found her
membership in that deeply troublesome, primarily because of their
uniform of military fatigues. After her suicide, the movement covers up
the cause of her death and honors her for dying in the fight against
“the Zionist enemy.” All deeply political!&lt;&#x2F;p&gt;
&lt;p&gt;Ali’s had a brother Sameh. Sameh was gay, and because of this a faction
of Palestinian militants forced him into working for them as some form
of punishment&#x2F;conversion therapy (obviously political). Sameh is
eventually caught smuggling arms into Israel and shot. The IDF traced
his dead body and the van he was driving back to Ali in Lebanon, and
force Ali to become an informant. Super political! And of course, very
personally tragic! Ali and his brother are made pawns and stripped of
their agency. When his brother is eventually killed, Ali experiences a
mix of emotions—he is devastated, but also grateful because of the shame
that Sameh’s sexuality brought upon him. Super horrible!&lt;&#x2F;p&gt;
&lt;p&gt;You’ll also note that unlike the other three, Maher’s intro didn’t have
a note about what he’s currently up to. That’s because, on the night at
the cafe that we witness, Maher is kidnapped and murdered. He is
kidnapped and murdered in part for political reasons—he’s a
communist—but also for the personal implications that political fact has
created—his assailant is the bereaved son of a man who’s factory was
destroyed at the hands of a communist revolutionary Maher helped
radicalize.&lt;&#x2F;p&gt;
&lt;p&gt;George hides his personal struggles, for political reasons. His family
lives together, but he reveals to the protagonist on their walk home
from the cafe that his parents have been divorced since he was a child.
He has struggled with love for his whole life, having grown up in an
ice-cold household. But he can never reveal any of this, or stir up any
great troubles or emotions, because of his precarious position in the
community: a Christian amongst Muslims, a Lebanese amongst Palestinians,
a third party caught in a Judeo-Islamic war. Not seeking to anger any
dangerous people with guns, he lives a life disconnected from his
personal struggles.&lt;&#x2F;p&gt;
&lt;p&gt;In this book, and in real life, the personal world has profound
political implications and vice versa.&lt;&#x2F;p&gt;
&lt;p&gt;And now for the fun part.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;palestinianism&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#palestinianism&quot; aria-label=&quot;Anchor link for: palestinianism&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Palestinianism&lt;&#x2F;h2&gt;
&lt;p&gt;I made up this word, and its going to live on the screen while we talk
about what El-Youssef wants us to learn and believe. Because this book
is a commentary on the Palestinian right of return. There’s significant
and explicit commentary on it within the book—the protagonist wrote
(sort of) a thesis on the subject—including this lovely nod to the
audience:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;“‘It’s a one-way journey!’ he told me,” said Ali, “‘As for those who
claim to return to a place where they never were,’ said Bruno, ‘they
are simply confusing the symbolic and metaphorical with the possible
and actual.’…. [T]here is no such thing as the right of return… I
shall write [this] as an essay or a story, which I could call &lt;em&gt;The
Illusion of Return&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Now, last year, in a wonderful course that I do not really recommend
anybody take because it’s quite boring and not that wonderful called
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;explorecourses.stanford.edu&#x2F;search?q=HISTORY81B&quot;&gt;HISTORY81B: Making the Modern Middle East&lt;&#x2F;a&gt;, I read a book
called &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;war-of-return&#x2F;&quot;&gt;&lt;em&gt;The War of Return&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;. Unlike the course, this I highly
recommend. It was written by two prominent Israeli leftists and contains
an in-depth history that is largely unknown, and records some important
oddities related to the right of return and the issue of Palestinian
refugees.&lt;&#x2F;p&gt;
&lt;p&gt;History in 1948 must be judged within its context, and not against
modernity. Much was different back then, and population exchange and
territorial partition were viewed as legitimate ways of solving ethnic
conflicts in ways that they are perhaps not any longer. We can see this
happening all over the world and at a much larger scale than in the
Levant, such as in Greece and Turkey or India and Pakistan. So the
illegitimacy—or even unique nature—of the circumstances surrounding
Israel’s founding and the birth of the Palestinian refugee issue is
suspect from that perspective.&lt;&#x2F;p&gt;
&lt;p&gt;And beyond that, Palestinian refugees have been treated radically
differently from any other class of people. They are in fact not
governed by the UN committee that deals with refugees, but by their own
UNRWA—which you have likely heard about in the news recently. (As an
aside, it’s not incorrect to say “their own” in that sentence, as the
vast majority of UNRWA employees since its inception have been
Palestinians). They are hereditary where no other refugee group is,
creating 5 million refugees from an initial displacement of around 700K.
Their status is not surrendered when they gain citizenship to their new
host countries, leading to Jordan’s population being majority (~70%)
Palestinian refugees. The entire population of the West Bank and Gaza
have been considered refugees since 1948, despite living in territories
allocated for their own future state. The “refugee camps” that most of
them live in—and into which three of our four main characters were
born—look far from the camps of the standard Western imagination, but
are in fact fully built-out neighborhoods attached to or themselves
forming major cities (see: Beirut and Jenin, respectively).&lt;&#x2F;p&gt;
&lt;p&gt;Furthermore, attempts to resolve the refugee issue by traditional
means—resettlement, economic empowerment, and rehabilitation, as seen
elsewhere (including some of the UN’s most successful projects, such as
the reconstruction of Korea)—have been intentionally shuttered. Please
see these two quotes:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The refugee issue, claim Schwartz and Wilf, is cynically manufactured
and perpetuated by Arab leaders.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;And let’s face it… the Arab countries are not the most hospitable
places, especially for Palestinians.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This first quote is actually from &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;war-of-return&#x2F;&quot;&gt;a book report&lt;&#x2F;a&gt; I
wrote on &lt;em&gt;The War of Return&lt;&#x2F;em&gt;, and the latter from El-Youssef in &lt;em&gt;The
Illusion of Return&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The issue of Palestine can be resolved. States can be formed, and given
borders. But the right of return—this is crazy important, and something
I realized in reading &lt;em&gt;The War of Return&lt;&#x2F;em&gt;—does not refer to the ability
of Palestinians to immigrate to the future territory of a Palestinian
state (presumably in the contemporary West Bank and Gaza) but rather to
the whole territory that once comprised the British Mandate, including
the modern State of Israel!&lt;&#x2F;p&gt;
&lt;p&gt;This is the issue of Palestinians, not Palestine. And the broader Arab
world does not want to resolve it. Because resolving it means closure.
It means continuing forward in time. It means that Jews will have
sovereignty over a slice of the Middle East.&lt;&#x2F;p&gt;
&lt;p&gt;Our protagonist begins many things throughout the book, but never
finishes them. He also struggles with time and presence, doubting
whether the past really happened at all. His parents left Palestine for
Lebanon, and he left Lebanon for London—but try as he might he cannot
truly move on. The world around him forces this anti-closure upon him, a
relic of his past—Palestinian-Lebanese Ali—literally showing up on his
doorstep as he arrives at his anniversary of emigration.&lt;&#x2F;p&gt;
&lt;p&gt;But he is wise enough to know that you cannot undo the past.&lt;&#x2F;p&gt;
&lt;p&gt;Which! Brings us to:&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-jewish-question&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-jewish-question&quot; aria-label=&quot;Anchor link for: the-jewish-question&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
The Jewish Question&lt;&#x2F;h2&gt;
&lt;p&gt;Though not the one you’re familiar with. El-Youssef doesn’t believe in
return. The Jewish question I pose to you all now is thus: how can we
reconcile this position with the reality of Israel—a return that worked?
What, if anything, makes the case of the Jews different?&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>AirPods and Thoughtspace</title>
    <published>2024-11-01T16:34:57-07:00</published>
    <updated>2024-11-01T16:34:57-07:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/airpods-and-thoughtspace/" type="text/html"/>
    <id>https://figbert.com/posts/airpods-and-thoughtspace/</id>
    <content type="html">
      &lt;p&gt;I was walking around the other day, listening to the sounds of the
night, when I had a thought about AirPods. This is not the first time
this has happened: previously, I have wondered about the percentage of
sound I hear that comes filtered through Apple’s transparency software,
a number that is likely shockingly high. On this particular occasion, I
thought it merited a blog post, mostly because I invented a word and
that made me feel like &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;interconnected.org&#x2F;home&#x2F;&quot;&gt;Matt Webb&lt;&#x2F;a&gt;. The thought was: AirPods are bad
because the music invades thoughtspace.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Not in the way that all noise crowds out thoughtspace—external noise
impacts thoughtspace by allocating a relatively larger portion of
moment-in-time human compute toward world-processing as opposed to
thoughtspace. AirPods, on the other hand, project music and sound into
thoughtspace directly.&lt;&#x2F;p&gt;
&lt;p&gt;This is because the sound doesn’t interact with the outside world.
Instead, it comes through with the same clarity as your thoughts.&lt;&#x2F;p&gt;
&lt;p&gt;Perhaps this is a relatively easy fix then?&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Contra Shipping in Public</title>
    <published>2024-10-23T00:00:00+00:00</published>
    <updated>2025-01-12T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://mitchellh.com/writing/ghostty-is-coming" type="text/html"/>
    <id>https://figbert.com/posts/ghostty-is-coming/</id>
    <content type="html">
      &lt;p&gt;Mitchell Hashimoto, announcing the release of his new terminal emulator:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;…I am nostalgic for the days when software was released when it was
ready. I like to imagine that if stores like CompUSA still existed,
Ghostty 1.0 would be boxed, shrink-wrapped, and on the shelf ready for
purchase (but also free and open-source).&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;It’s a delicate balance. I could actually summon a hundred anecdotes on
the subject: “ship early and often,” the whole build-in-public movement,
the concept of an MVP, etc.&lt;&#x2F;p&gt;
&lt;p&gt;All of this is well and good, but it has taken some of the magic out of
release day. Shipping before we’re done means that we don’t have a
moment to point to where everything changed. No more “iPod, phone,
internet communicator.”&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
      &lt;a href=&quot;https://figbert.com/posts/ghostty-is-coming/&quot;&gt;★&lt;&#x2F;a&gt;
    </content>
  </entry>
  <entry xml:lang="en">
    <title>An Insight Tangential to Thorsten Ball&#x27;s Intention</title>
    <published>2024-09-27T00:00:00+00:00</published>
    <updated>2024-09-27T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://registerspill.thorstenball.com/p/skin-shedding-code" type="text/html"/>
    <id>https://figbert.com/posts/skin-shedding-code/</id>
    <content type="html">
      &lt;p&gt;Reading yesterday’s Register Spill post I got hooked on this sentence:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Is [the success of frequent and significant rewrites by the founders
of Zed] because they have been working on text editors for over a
decade and know the domain well and how things should work and how
they currently work is just a detail?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I love the idea of seeing something for how it should be with its
current workings as “just a detail.”&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
      &lt;a href=&quot;https://figbert.com/posts/skin-shedding-code/&quot;&gt;★&lt;&#x2F;a&gt;
    </content>
  </entry>
  <entry xml:lang="en">
    <title>I Am Amazed That This Exists</title>
    <published>2024-09-20T00:00:00+00:00</published>
    <updated>2024-09-20T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/unsong/" type="text/html"/>
    <id>https://figbert.com/reading/unsong/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;UNSONG&lt;&#x2F;i&gt; by Scott Alexander. &lt;br&#x2F;&gt;
        Finished on September 20, 2024. &lt;br&#x2F;&gt;
        
        Rating: ★★★★★ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;The overt meaning of UNSONG is “a book written by pseudonymous
rationalist blogger Scott Alexander published as a website in 2017.” The
kabbalistic meaning of UNSONG is “the nerdiest, most niche work one can
consume, whose physical size as a massive tome may make carrying it
around in a backpack across several countries more difficult and
contribute to zipper failure.” This we derive from my personal
experience. Both of these are discrete from the acronymic meaning of
UNSONG, which is of course “United Nations Subcommittee on Names of
God,” and thus illustrative of exactly why I enjoyed this book so
thoroughly.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;I had initially dismissed UNSONG as outdated. Surely this was an old and
abandoned creation of Scott’s, less important than his contemporary
contributions. I was also not hugely into the concept of website-books.
It was thus fortuitous that these two concerns were addressed with &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.astralcodexten.com&#x2F;p&#x2F;unsong-available-in-paperback&quot;&gt;an
updated physical edition&lt;&#x2F;a&gt;. “This was not a coincidence, because nothing
is ever a coincidence.”&lt;&#x2F;p&gt;
&lt;p&gt;This book exists at the most wonderful intersection of things that I
adore. I have already gifted a copy to a good friend, and intend to lend
mine out enthusiastically to anybody who will take it.&lt;&#x2F;p&gt;
&lt;p&gt;A selection of wonderful quotes:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Bizarre surrealist painter Salvador Dalí once said: “I do not do
drugs. I am drugs.” He was being silly. He wasn’t drugs. He was
Salvador Dalí.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;“Kissinger, are you sure this was a good idea?” &lt;br&#x2F;&gt;
“There is never any surety in politics, only probability.” &lt;br&#x2F;&gt;
“But you think it’s &lt;em&gt;probable&lt;&#x2F;em&gt; this was a good idea?” &lt;br&#x2F;&gt;
“Yes.” &lt;br&#x2F;&gt;
“What about our [expletive deleted] souls, Kissinger?” &lt;br&#x2F;&gt;
“I fail to see how they are relevant to geopolitics.” &lt;br&#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;My mother was a Hindu, but Hinduism passes through the paternal line.
My father, perhaps if he teaches me Torah then is Jewish. But Judaism
passes through the maternal line. I am nothing.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Somebody has to and no one else will.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I’ve also added &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kingjamesprogramming.tumblr.com&quot;&gt;King James Programming&lt;&#x2F;a&gt;, referenced occasionally in the
epigraphs of UNSONG, to my RSS reader and expect to extract a certain
amount of joy from that every day.&lt;&#x2F;p&gt;
&lt;p&gt;Some of the Hebrew in UNSONG is not fully intelligible. I have decided
to accept this as suboptimal transliteration done in good faith, so that
I can move on and love the rest of the book.&lt;&#x2F;p&gt;
&lt;p&gt;With all that said, they released a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;dp&#x2F;B0D84DLKZW&#x2F;&quot;&gt;Kindle version&lt;&#x2F;a&gt; shortly after I
bought the paperback and would absolutely recommend you get that one
instead as it really is quite something to carry around all the time.
But do get it.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Some of This and Some of That</title>
    <published>2024-09-19T00:00:00+00:00</published>
    <updated>2024-09-19T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/great-gatsby/" type="text/html"/>
    <id>https://figbert.com/reading/great-gatsby/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;The Great Gatsby&lt;&#x2F;i&gt; by F. Scott Fitzgerald. &lt;br&#x2F;&gt;
        Finished on July 04, 2024. &lt;br&#x2F;&gt;
        
        Rating: ★★★★★ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;I read this and imagined it contained in a small pocket-sized book, and
myself quite the intellectual, amused by quaint fictions. I sought to
divine from the tale of hedonism and grandeur exactly the line where one
crosses over from glory into excess. A selfish goal, to be sure.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;I &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;letterboxd.com&#x2F;figbert&#x2F;film&#x2F;the-great-gatsby-2013&#x2F;&quot;&gt;watched the movie&lt;&#x2F;a&gt; shortly after reading the book. I enjoyed the
adaptation greatly. I thought it did well in capturing the scale of the
parties implied in the novel. I was not a huge fan of the narration. I
enjoyed that they threw out any historical pretense and embraced a
radically modern soundtrack.&lt;&#x2F;p&gt;
&lt;p&gt;It is a young man’s interpretation of this book that defines it as a
source of inspiration, but I can’t help myself. I want to throw out my
arms and present to an audience the splendor and spectacle of my life
and tell them they can’t find anything quite like it anywhere else in
the world. Now ideally, I would be able to do as such without Gatsby’s
failings. I don’t think a warning about spoilers is required some
hundred years after publication: the book doesn’t end well for Gatsby.
Is it wrong to say this is due to his refusal to take the past as
immutable? His dissatisfaction with only controlling the future? These
seem remarkably solvable issues. I am surely missing many others.&lt;&#x2F;p&gt;
&lt;p&gt;For now, at least, I will try and fold what showmanship and generosity I
can from Gatsby into my own life. To give favors and gifts to those who
wash up on my shores. To unabashedly &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;x.com&#x2F;jordanbpeterson&#x2F;status&#x2F;1633882580746653696&quot;&gt;enjoy existence&lt;&#x2F;a&gt;. To fake it, as
they say, until you make it.&lt;&#x2F;p&gt;
&lt;p&gt;I dove into the world of Gatsby at the recommendation of Jack and his
family. My thanks go out to you.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Envelope</title>
    <published>2024-09-03T00:00:00+00:00</published>
    <updated>2024-09-14T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/work/envelope/" type="text/html"/>
    <id>https://figbert.com/work/envelope/</id>
    <content type="html">
      &lt;small&gt;
        Began: 17 Jun 2024 &lt;br&#x2F;&gt;
        Concluded: 06 Sep 2024
      &lt;&#x2F;small&gt;
      &lt;p&gt;YCombinator’s &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.workatastartup.com&quot;&gt;job board&lt;&#x2F;a&gt; has high signal to noise for interesting work,
but it’s not every day that their internship tab has as compelling a
phrase as “SwiftUI Engineer.” I’ve been in love with SwiftUI, Apple’s
modern app-building framework, &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;txtodo&#x2F;&quot;&gt;for a long time&lt;&#x2F;a&gt;. Something about its
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Declarative_programming&quot;&gt;declarative nature&lt;&#x2F;a&gt; just clicks with how I think. I sent in an
application, sat down for a live coding interview, and my summer plans
were sorted.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;envelopebudgeting.com&quot;&gt;Envelope&lt;&#x2F;a&gt; is a banking app. It serves as both your primary checking
account and your budgeting platform: the two are seamlessly integrated.
Every transaction that hits your bank is budgeted by default. Envelope
lowers the barrier to entry for your most important personal finance
habit: great budgeting.&lt;&#x2F;p&gt;
&lt;p&gt;It also helps that Envelope brings all the polish of a fancy Silicon
Valley company to banking, a field dominated by the jankiest apps known
to man.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tenure&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tenure&quot; aria-label=&quot;Anchor link for: tenure&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Tenure&lt;&#x2F;h2&gt;
&lt;p&gt;One bullet point in the job description claimed that I would have code
live in production starting from my first day. This was not true. But
it was close! In my first week at the company, I built out a new feature
shown—to every user, on the front page of the app—when assigning a
transaction to an envelope. It is now one of the most used pieces of UI
in the app.&lt;&#x2F;p&gt;
&lt;p&gt;Over the rest of the summer, I continued building and iterating on
practically every facet of the application. By my count we shipped nine
long-requested major features and redesigns, touching everything from
transactions and envelopes to onboarding and the organization of screens
within the app. I took a look on my last day at our improvised Figma
kanban board, and was happy and more than a little bit surprised to see
the done column overflowing with projects we’d shipped.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;work&#x2F;envelope&#x2F;github.png&quot; alt=&quot;40 commits, 12,205 added lines, 8,797 removed lines&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;One particularly fun piece of work that I’d like to immortalize here was
totally removed from feature development: we once spent two days
debugging the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stytch.com&quot;&gt;Stytch&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;html&#x2F;rfc7519&quot;&gt;JWT&lt;&#x2F;a&gt; that our app uses to authenticate users.
When we ultimately located the bug—a particularly nasty problem with
refreshing the token that rendered it invalid after using the app for
longer than five minutes at a time—we were able to fix it with one line.
We also got a DM from a co-founder of Stytch out of the whole
experience, and sent them some API design pointers that I sincerely hope
make it back to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;stytchauth&#x2F;stytch-ios&quot;&gt;their SDK&lt;&#x2F;a&gt; one day.&lt;&#x2F;p&gt;
&lt;p&gt;I’m excited to see Envelope grow, and for the additional features
that I didn’t have time to put in your hands to see the light
of day. From closer integration with external money sources, certain
additional banking tools, and some cool UI we couldn’t ship due to
dependency issues—I’ll be keeping an eye on the future of the features I
built out and the future of the whole enterprise.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;reflections&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#reflections&quot; aria-label=&quot;Anchor link for: reflections&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Reflections&lt;&#x2F;h2&gt;
&lt;p&gt;Josh, the CTO, is brilliant. I was the second engineer at the company—a
fun statement for me in its own right, but also formidable by
implication. Josh built out the entire backend, external integrations,
and SwiftUI application, and had been running them both as a serious
product for two years as the only technical person on the team. Josh is
deeply opinionated about how software should be developed and
maintained, employing a crazy effective philosophy breaking complex
problems down into distinct patterns. He is deeply talented, and I spent
a good part of my internship just trying to absorb some fraction of his
skill.&lt;&#x2F;p&gt;
&lt;p&gt;The realities of the job were also completely new to me. Working a 9-5
took some getting used to; at Stanford, I am surrounded by people doing
crazy and fun things from the moment I wake up until I pass out and in
class for maybe three hours of the day. In school, the day is for play
and work is confined to some fraction of the evenings, but at Envelope
this was flipped. I think I obviously appreciate the flexibility of how
work is done at Stanford over the more traditionally rigid hours. It’s
nice to have time to ponder, to be free to meet with people for lunch
and tea throughout the day. My work at Envelope also helped me
contextualize the sort of programming I want to do in the future. Pure
frontend work, devoid of context, is just making a hundred buttons a
day—and when you’ve made one button, you’ve really made them all.
However, working with data, building out new functionality, reshaping
and redesigning the user experience: that is deeply fulfilling. My time
at Envelope allowed me to touch on all of these aspects of development
and take a holistic approach to my work.&lt;&#x2F;p&gt;
&lt;p&gt;My time at Envelope was a blast and a privilege. Every change I made
went out to thousands of people using our app on a daily basis. What an
incredible opportunity it was to be able to shape something like that so
directly.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Beeper</title>
    <published>2024-09-02T00:00:00+00:00</published>
    <updated>2024-09-02T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/work/beeper/" type="text/html"/>
    <id>https://figbert.com/work/beeper/</id>
    <content type="html">
      &lt;small&gt;
        Began: 05 Jun 2023 &lt;br&#x2F;&gt;
        Concluded: 01 Sep 2023
      &lt;&#x2F;small&gt;
      &lt;p&gt;As the summer of 2023 rolled around, I found myself opening up a bunch
of tabs in Safari to check if any cool companies I had heard of on &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&quot;&gt;the
orange site&lt;&#x2F;a&gt; were hiring.&lt;&#x2F;p&gt;
&lt;p&gt;I remember being shocked and excited when I saw that &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.beeper.com&quot;&gt;Beeper&lt;&#x2F;a&gt; had a
listing. Their app was built on top of an open, secure, and
decentralized protocol called Matrix. I had used Matrix through the
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;element.io&quot;&gt;Element&lt;&#x2F;a&gt; app with some friends, and was aware of some of the cool
projects that took advantage of the network. I was also aware that most
of the code that deals with Matrix is open-source and written in Go—two
qualities shared by &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;mabel&#x2F;&quot;&gt;Mabel&lt;&#x2F;a&gt;, the terminal app I had just finished
working on. Beeper sat at the intersection of a lot of things I was and
am still crazy about. I sat down with &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Eric_Migicovsky&quot;&gt;Eric Migicovsky&lt;&#x2F;a&gt;, the CEO, and
came on as a contractor for the summer.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tenure&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tenure&quot; aria-label=&quot;Anchor link for: tenure&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Tenure&lt;&#x2F;h2&gt;
&lt;p&gt;Everything I encountered at Beeper was brand new to me. I had never even
been paid to code before, and the team was fully remote. Showing up to
the all-hands every Monday on Zoom felt pretty surreal. I started out
reverse engineering and documenting Snapchat to bring Beeper to the
platform, but was quickly moved to work on our hardware venture,
affectionately named (after Blackberry threatened legal action) Beepy.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;beepy.sqfmi.com&quot;&gt;Beepy&lt;&#x2F;a&gt; was intended to showcase Beeper’s flexibility. What has
changed fundamentally about messaging since &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;AIM_%28software%29&quot;&gt;AIM&lt;&#x2F;a&gt;? Not much. But Beeper,
with its foundations on the open Matrix protocol, could take any form
imaginable. So to set an example for developers, we brought in the big
guns from &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sqfmi.com&quot;&gt;SQFMI&lt;&#x2F;a&gt; to strap a keyboard and a black-and-white LCD screen
together to make something like a modern-day, common-noun
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;x.com&#x2F;ericmigi&#x2F;status&#x2F;1649179643763920896&quot;&gt;beeper&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;The software I built for the device came in two parts: a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;beeper&#x2F;beepycli&quot;&gt;setup utility&lt;&#x2F;a&gt;
and a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;beeper&#x2F;gomuks&#x2F;tree&#x2F;beepberry&quot;&gt;chat client&lt;&#x2F;a&gt;. The former got new Beepy users “from zero to
messaging,” taking advantage of users’ main computer to gather their
chat history and encryption details before copying all the data to the
Beepy. The latter was based on the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tulir&#x2F;gomuks&quot;&gt;gomuks&lt;&#x2F;a&gt; terminal app and redesigned
for the device’s smaller 1-bit display. Both of these programs were
wonderful opportunities to leverage the skills I had just learned
building Mabel.&lt;&#x2F;p&gt;
&lt;p&gt;A huge congratulations to the whole team on your &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=39980268&quot;&gt;new&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.beeper.com&#x2F;2024&#x2F;04&#x2F;09&#x2F;beeper-is-joining-automattic&#x2F;&quot;&gt;home&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;reflections&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#reflections&quot; aria-label=&quot;Anchor link for: reflections&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Reflections&lt;&#x2F;h2&gt;
&lt;p&gt;I nursed a pet project while I was at the company that I believe has
real potential: Beeper Rewind. How many messages did you send this year?
What was your daily average? Who was your most frequent contact? What
platforms did you use the most? The least? Who is most active in your
groupchats? This metadata is super fun to know, as a user, and totally
shareable. I would love to clown on the lurkers in my friend group, and
be able to quantify how crucial iMessage is to my daily life. Beeper is
the only entity in our digital lives that could provide these insights,
and generating a little viral image for your Instagram story could be
one way to exploit that position. Hesitating on this goes against some
of my core principles, and I should have pursued it further.&lt;&#x2F;p&gt;
&lt;p&gt;Speaking of positioning, I don’t think Beeper necessarily optimized its
business to be in line with its competitive advantage. We spent a lot of
time at the company trying to re-imagine the fundamentals of the
messaging experience—it’s probably no surprise that a lot of this
involved AI. I think this is all well and good, but ignores the fact
that we already had the ability to do something nobody else could, which
is to &lt;em&gt;send messages on every platform from one place&lt;&#x2F;em&gt;. I think we
should have been focusing on optimizing the mobile app to provide the
smoothest messaging experience possible while doing this. Polish,
polish, polish. Even beyond this, however, we should have explored the
B2B angle. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;humane.com&quot;&gt;Humane&lt;&#x2F;a&gt; launched their wearable with SMS messaging. How much
would their user experience improve if the Pin could talk to your
iMessage, WhatsApp, and Signal? How much is that functionality worth?
I’ll give you a hint: a lot, and we were the only people who could
provide it. I don’t think we ever considered this.&lt;&#x2F;p&gt;
&lt;p&gt;Lastly, on a technical note, the concept that underpins Beeper’s ability
to send messages across platforms—Matrix’s &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;spec.matrix.org&#x2F;v1.11&#x2F;application-service-api&#x2F;&quot;&gt;bridges&lt;&#x2F;a&gt;—is really cool. It
is perhaps worth pondering where else it could be applied: bots that
&lt;em&gt;observe&lt;&#x2F;em&gt; and &lt;em&gt;replicate&lt;&#x2F;em&gt; behavior across networks, to maximally
leverage your efforts. Adversarial interoperability! &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;r.town&#x2F;@vincent&quot;&gt;Vincent Cloutier&lt;&#x2F;a&gt;
is doing fun things in this space over on the fediverse. Summarized in a
sentence that sounds straight out of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;interconnected.org&#x2F;home&#x2F;&quot;&gt;Matt Webb&lt;&#x2F;a&gt;’s school of thought:
What happens when we ignore the borders between spaces and connect them
anyway?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;surprise-update-a-year-later&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#surprise-update-a-year-later&quot; aria-label=&quot;Anchor link for: surprise-update-a-year-later&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Surprise update a year later&lt;&#x2F;h2&gt;
&lt;p&gt;In the summer of 2024, I sat down to talk with a mentor of mine—a
successful startup founder, executive, and angle investor of some
renown—who presented me with the bluntly phrased perspective that people
simply don’t want message aggregation. Rather, he believes, distinct
messaging apps are actually a feature: they give you &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Separation_of_concerns&quot;&gt;separation of
concerns&lt;&#x2F;a&gt;. Having sat on this for a little while longer, it occurs to me
that the super-app that aggregates your different messaging platforms
may already exist, and it’s your operating system.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Stratchery on EU Antitrust</title>
    <published>2024-08-26T00:00:00+00:00</published>
    <updated>2024-08-26T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://stratechery.com/2024/friendly-google-and-enemy-remedies/" type="text/html"/>
    <id>https://figbert.com/posts/friendly-google-and-enemy-remedies/</id>
    <content type="html">
      &lt;blockquote&gt;
&lt;p&gt;I would also note that the behavior I am calling for — more innovation
and competition, not just from Google’s competitors, but Google itself
— is the exact opposite of what &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stratechery.com&#x2F;2024&#x2F;crashes-and-competition&#x2F;&quot;&gt;the European Union is pushing for&lt;&#x2F;a&gt;,
which is &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stratechery.com&#x2F;2024&#x2F;tech-ceos-on-trump-x-and-the-e-u-apple-settles-with-e-u-over-nfc&#x2F;&quot;&gt;product stasis&lt;&#x2F;a&gt;. I think the E.U. is mistaken for the exact
same reasons I think Judge Mehta is right.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Though I have more complex thoughts as to the actual anti-trust case
against Google itself, I do endorse this framing of the European
thinking on Big Tech regulation.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
      &lt;a href=&quot;https://figbert.com/posts/friendly-google-and-enemy-remedies/&quot;&gt;★&lt;&#x2F;a&gt;
    </content>
  </entry>
  <entry xml:lang="en">
    <title>Ideating Tragit</title>
    <published>2024-07-30T00:00:00+00:00</published>
    <updated>2024-07-30T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/ideating-tragit/" type="text/html"/>
    <id>https://figbert.com/posts/ideating-tragit/</id>
    <content type="html">
      &lt;p&gt;There are many, many &lt;code&gt;git&lt;&#x2F;code&gt; forges to pick from. I’m going to make
another one—but before I do, I’m going to do a little thinking out loud,
and outline the what and why of this side project I’m embarking upon.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Decentralization is hugely important for the long-term health of the
internet. Indeed, this quality has been fundamental to the network since
its inception. This is easy to forget, and hard to see, now. But email
was not always Gmail and &lt;code&gt;git&lt;&#x2F;code&gt; was not always GitHub.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A big reason that these protocols have become so centralized is because
the companies that offer these services have genuinely innovated on
form. Google &lt;em&gt;invented&lt;&#x2F;em&gt; effective, user-friendly webmail. They pioneered
email’s contemporary security features and user-facing advancements.
They were rewarded for that with users.&lt;&#x2F;p&gt;
&lt;p&gt;Nowadays, however, these capabilities no longer require the dedicated
engineering of whole teams of Google 10x-ers. With the mature and
effective tools and languages available to every developer, the
evolution of the open-source ecosystem, and the integration of big-corp
features into the open standards of the web, self-hosting does not have
to mean settling for less.&lt;&#x2F;p&gt;
&lt;p&gt;This has played out most clearly, again, with email. If you wanted to
email people, you used to have two choices: assemble the world’s largest
house of cards and hope the incantation you crafted from terrifying
words that make no sense like &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.dovecot.org&quot;&gt;dovecot&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mailcow.email&quot;&gt;mailcow&lt;&#x2F;a&gt;—which represent
interconnected services that do things you only sort of
understand—actually works with any meaningful consistency, or sell out
to the Oligarchs. No longer! Want one open-source binary to take care of
sending, receiving, security, accounts, redirects, and everything else?
It exists, and it’s called &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;maddy.email&quot;&gt;maddy&lt;&#x2F;a&gt;, and I’ve been using it to host my
email for years now with no effort.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;git&lt;&#x2F;code&gt;, on the other hand, is very much still in the first stage. You
can, of course, use &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&quot;&gt;GitHub&lt;&#x2F;a&gt;. It is a colossus, practically unavoidable
as a developer, and enabled my start as a programmer. The pull request
collaboration paradigm they created has totally supplanted the
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git-send-email.io&quot;&gt;email-based method&lt;&#x2F;a&gt; that preceded it. But if you want your code to live
outside of Microsoft’s proprietary claws, the process is far from
simple.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git.figbert.com&quot;&gt;My own setup&lt;&#x2F;a&gt; is representative of this problem, and quite janky. It’s
a delicate combination of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codemadness.org&#x2F;stagit.html&quot;&gt;&lt;code&gt;stagit&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; and the built-in &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git-scm.com&#x2F;docs&#x2F;git-daemon&quot;&gt;&lt;code&gt;git-daemon&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;,
running via Docker Compose, pointed at the home folder of a bespoke
&lt;code&gt;git&lt;&#x2F;code&gt; user. I push to the server over &lt;code&gt;ssh&lt;&#x2F;code&gt;, relying on some weird
nested home directory hack that makes me very uncomfortable in order to
have a nice destination string. To publish a repo I have to create two
separate magic files, &lt;code&gt;git-daemon-export-ok&lt;&#x2F;code&gt; and &lt;code&gt;stagit-export-ok&lt;&#x2F;code&gt;.
Metadata lives in aptly-named files like &lt;code&gt;description&lt;&#x2F;code&gt; and &lt;code&gt;owner&lt;&#x2F;code&gt;.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
I clone and pull with the daemon’s &lt;code&gt;git:&#x2F;&#x2F;&lt;&#x2F;code&gt; protocol. Any changes mean I
have to restart &lt;code&gt;stagit&lt;&#x2F;code&gt; so it will generate the relevant pages again.
Collaboration is allegedly facilitated over email with a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;crabmail.flounder.online&quot;&gt;crabmail&lt;&#x2F;a&gt;
instance, but it’s been broken since I first attempted to set it up.
The whole thing is rather delicate and rough around the edges, which is
maybe the worst combination of characteristics for an important service.&lt;&#x2F;p&gt;
&lt;p&gt;I think there’s a real opportunity here to build something that could
have an outsized impact on the self-hosted web. I don’t want my git
setup to evoke the same feelings as the word “modem.” I don’t want to
compromise. I want big tech capabilities in a small and efficient
package. So let’s leverage ecosystem advancements, think deeply about
how we can &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pr.pico.sh&quot;&gt;facilitate collaboration&lt;&#x2F;a&gt;, and make something.&lt;&#x2F;p&gt;
&lt;p&gt;Keep an eye out for some form of &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;tangible-deliverables&#x2F;&quot;&gt;tangible&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fosstodon.org&#x2F;@FIGBERT&#x2F;112734909021642855&quot;&gt;deliverable&lt;&#x2F;a&gt; in this area
sometime (hopefully) soon. I’m probably going to call it Tragit.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;I have met a profoundly depressing amount of young programmers who
cannot distinguish the latter two. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;The latter of which, of course, is purely aesthetic and has no
bearing on security or access rights. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Stanford Quarterly Reflection (Y1Q3)</title>
    <published>2024-07-18T00:00:00+00:00</published>
    <updated>2024-07-22T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/stanford-quarterly-reflection-03/" type="text/html"/>
    <id>https://figbert.com/posts/stanford-quarterly-reflection-03/</id>
    <content type="html">
      &lt;p&gt;This quarter was a radical departure from the previous two. It was
profoundly different and, at times, extremely difficult. Having now come
up for air on the other side, and looking at the great joys that I did
experience, I feel pretty positively about the whole affair. And the
change never stops, as I leave behind the great change of this year for
a whole new world: summer.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h3 id=&quot;academics&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#academics&quot; aria-label=&quot;Anchor link for: academics&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Academics&lt;&#x2F;h3&gt;
&lt;p&gt;I was in the lowest amount of units possible, a measly 12. These were:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;COLLEGE 110: The Spirit of Democracy&lt;&#x2F;li&gt;
&lt;li&gt;CS 107: Computer Organization and Systems&lt;&#x2F;li&gt;
&lt;li&gt;CS 12SI: Spatial Computing Workshop&lt;&#x2F;li&gt;
&lt;li&gt;SUSTAIN 132: Sustainable Societies Lab: Exploring Israel’s Innovation
Ecosystem in Human &amp;amp; Planetary Health&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;This significantly reduced courseload was a mistake. I felt unmoored
with so little work, attending to my classes by catching assignments
just before they fell off my metaphorical plate. I don’t believe this
was the most effective means of learning or academic growth. I ended up
in this situation because I was afraid to adapt my schedule to change,
and I could have avoided it by embracing risk and authoritative
decision-making. “Strong opinions, loosely held” feels like a phrase
that could be adapted here. I had structured my schedule around a
specific class (DESIGN 11) but ended up dropping the class in
exasperation after two weeks. I should have found a supplement (likely
DESIGN 1 or ARABLANG 21A), and reorganized my schedule to accommodate
it. The past being immutable, I will simply acknowledge that I believe
this would have been a better choice for me academically and, in certain
respects, emotionally as well.&lt;&#x2F;p&gt;
&lt;p&gt;Nevertheless, certain aspects of my academic experience during these ten
weeks deserve recognition. CS 107 introduced me to genuinely new aspects
of computer science—it forced me to engage with topics that I have
intentionally avoided in my own work, grapple with them, and come out
fully understanding them. These subjects include working in
memory-unsafe languages such as C, reading and interpreting x86_64
assembly, certain UNIX system details, and other topics in this orbit. I
received a relatively poor grade in this class! This was largely due to
my handling of the homework, and one assignment in particular which was
significantly late. It was still one of the most fulfilling learning
experiences of my engineering career.&lt;&#x2F;p&gt;
&lt;p&gt;The highlight of COLLEGE 110 was the opportunity it afforded me to
experience Larry Diamond in his element. We exist at a time of great
consequence, and his framing of the world, with its challenges and
opportunities, was enlightening. I feel very fortunate to have been able
to get to know the man. The events I attended with him that paralleled
the class were also remarkable. I met &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;events.stanford.edu&#x2F;event&#x2F;a-conversation-with-salam-fayyad-former-prime-minister-of-the-palestinian-authority&quot;&gt;Salam Fayyad&lt;&#x2F;a&gt;, and gained a new
two-truths-and-a-lie fact from our personal interactions. I also enjoyed
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.hoover.org&#x2F;events&#x2F;boiling-moat&quot;&gt;the Boiling Moat&lt;&#x2F;a&gt; panel on Taiwanese security, which I attended with my
friend &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jacobneplokh.com&quot;&gt;Jacob&lt;&#x2F;a&gt; while he was visiting. One panelist absolutely terrified
me, and I would like to work for him. The ebook is living on my Kindle,
and waits high up on my reading list.&lt;&#x2F;p&gt;
&lt;p&gt;CS 12SI and SUSTAIN 132 both represent the unparalleled latitude that
Stanford presents its community. A class exclusively diving into the
just-released Vision Pro, with real expert access and attention to each
student project, is an unbelievable offering. Like CS 40, CS 12SI was
new a little bumpy, but I can see it growing into something extremely
impressive and startup-accelerator-y, especially under &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gabriel-lipkowitz.com&quot;&gt;Gabriel’s&lt;&#x2F;a&gt;
excellent guidance. SUSTAIN 132 lives in such a cool niche of academic
study I am grateful that it exists at all—and it helped that the
teaching staff was cool on top of it all.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;personal&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#personal&quot; aria-label=&quot;Anchor link for: personal&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Personal&lt;&#x2F;h3&gt;
&lt;p&gt;Social engagement was without a doubt where my focus lay this past
quarter. My sleep schedule lurched around the clock, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ouraring.com&quot;&gt;Oura&lt;&#x2F;a&gt; be damned.
And pouring all of my energy into a complex web of human relationships
occasionally reminded me of the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theintrinsicperspective.com&#x2F;p&#x2F;the-gossip-trap&quot;&gt;gossip trap&lt;&#x2F;a&gt; theory of prehistory,
which was less than pleasant.&lt;&#x2F;p&gt;
&lt;p&gt;I should spare a moment to appreciate and bid a very depressing goodbye
to the seniors who made this year special for me, and will not be there
when I return. Losing you all really took me by surprise, and I will not
be the same without you. Emily, you’ve been there for me like no one
else and I cannot acknowledge that enough. I’m rooting for (and counting
on, honestly) your return. Ben, you changed the trajectory of my career.
I was honored to receive some of &lt;em&gt;your&lt;&#x2F;em&gt; reflections in my inbox, and do
hope to see that continue, if only for my own enrichment. Joven, we met
for the first time in earnest over spring break, but by the time we were
the last two people in London, enjoying blueberry muffins and sipping on
lattes on our way to the airport, we had hit our stride. No one else
will debate the finer points of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Caf%C3%A9_society&quot;&gt;café society&lt;&#x2F;a&gt; with me, and that is a
deficiency on their part. And of course, Sophia—I was perpetually amazed
at our relationship. You’re the best, and I have faith that there is
little that can stop you from continuing to be just that.&lt;&#x2F;p&gt;
&lt;p&gt;In a somewhat surprising turn of events, this quarter I joined the
fraternity Phi Kappa Psi. This unique aspect of American university life
played no role in my parents’ experience, and thus I was raised without
a great desire to participate in it when I went off to Stanford.
Nevertheless, as I met more and more Phi Psis, I was startled to realize
that I really enjoyed hanging out with them. I no longer find this
nearly as startling, having been to the ends of the Earth and back with
them (or at least, military bases, casinos, and watery watchtowers). To
the brothers that convinced me to join—Odin, Reisner, Lichu, Deveen,
Deitrich, Gareth, Farman, Santi, Milo—I owe you a great thanks, and
perhaps an apology as well for being so stubborn. I’ve wanted to be a
rapper for as long as I can remember, and you brought that out of me.
I’m extremely grateful. And to the fresh set of brothers—Bradley, Panos,
Arjin, Tiao—that I am a part of, you make me excited for the future.&lt;&#x2F;p&gt;
&lt;p&gt;I have not forgotten about the London gang, nor my promise to write
about the trip in this reflection. For those readers planning an outing
to the kingdom on which the sun never sets, I have only three important
notes—the white saffron hot chocolate at &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.darksugars.co.uk&quot;&gt;Dark Sugars&lt;&#x2F;a&gt; will change your
life, the chai at &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.dishoom.com&quot;&gt;Dishoom&lt;&#x2F;a&gt; is bottomless, and if you’re ever having too
much fun at an interactive performance of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bridgetheatre.co.uk&#x2F;whats-on&#x2F;guys-and-dolls&#x2F;&quot;&gt;Guys and Dolls&lt;&#x2F;a&gt; the dude to
your left will berate you. My deep thanks to the Danielpours for playing
host to us all, and welcoming us into your home for a lovely shabbat.
Everyone on this trip changed my life this year, and I love you all so
very much. In London and at Stanford, to have such friends is life’s
greatest joy. Many of you have made your way into this post already, but
I will descend into lists again for those that have not. Stella, you
built a home on campus in the Warehaus that did not have to exist, but
was for me a heaven of frosted flakes and late night antics. Zach, I’m
coming for your PRs and your creatine water bottle. You undoubtedly fill
out the commemorative London shirt the best of all of us. Daniel, you
inspire me consistently by moving to action when I’m standing still,
afraid. Name a more &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;open.spotify.com&#x2F;track&#x2F;4Flfb4fGscN9kXPOduQLrv&quot;&gt;iconic duo&lt;&#x2F;a&gt; than us. And Kelly—you are so
wonderful.&lt;&#x2F;p&gt;
&lt;p&gt;But these are not the only people at Stanford who are important to me.
Vivek, I cannot wait to live with you next year. Nate, you are simply
way better at tennis than I am. Trun, we are living the lives we have
always wanted. Jack, if there is anyone in my life who possesses the
magnetic people powers of Gatsby (which I say as someone who, at
present, admires the man with no qualms) it is you. Sam—to meet your
family was a great honor and I’m sorry they saw me give you a piggyback
ride right before. Vedant and Riya: just because we’re no longer all in
the great dorm of Crothers doesn’t mean tea at 3 in the morning has to
stop, and indeed I hope it doesn’t. Ryan, you’ve once again ended up a
key player in a crazy highlight-of-the-quarter evening and I can only
hope that this continues. Longhair, it didn’t work out this quarter, but
come fall you bet we will hit the Pyramid of Giza. And Naama: you are
the only person with whom I have a weekly scheduled meal.&lt;&#x2F;p&gt;
&lt;p&gt;I miss you all.&lt;&#x2F;p&gt;
&lt;p&gt;It occurs to me that turning the personal section of a reflection into
basically a list of thank-yous is perhaps not particularly reflective.
It’s somewhat hard to keep a journal in public. Perhaps this is just the
nature of things. Perhaps I have just once again waited too long to
finish writing and publish this post. Perhaps I shouldn’t be married to
the format I’ve used in previous posts. We shall see.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;a-year-complete&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-year-complete&quot; aria-label=&quot;Anchor link for: a-year-complete&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
A Year Complete&lt;&#x2F;h3&gt;
&lt;p&gt;I remain the person that I was when I began Stanford, but I happily
believe that have become an improved and refined version of that person.&lt;&#x2F;p&gt;
&lt;p&gt;I have aquired two new greenfield skills, in Arabic and assembly
language. I had no knowledge of the two before this year, and now I do.
These allow me to tangibly do things I could not do before.&lt;&#x2F;p&gt;
&lt;p&gt;The majority of my development, however, has been less tangible—but all
the more profound. Being at Stanford has placed me at the center of the
most incredible environment I could imagine; remarkable people surround
me at all hours of the day, and their effusive brilliance cannot help
but be impactful.&lt;&#x2F;p&gt;
&lt;p&gt;As the summer continues, and the community that comprises this small
Eden is dispersed, I have a hard time imagining that this year happened
at all. My time at Stanford was a short, recent burst. I’m now back in
San Francisco, and though I’ve maintained as large a sprinkling of
Stanford in my life as I can, it feels almost as if I have just awoken
from the most vivid, marvelous dream.&lt;&#x2F;p&gt;
&lt;p&gt;This summer will be exciting and hopefully rejuvenating as well. It will
also comprise its own Q4 reflection! But I’m not embarrassed to say that
I’m looking forward to returning to the Farm in the fall. I enjoyed
dreaming, and I have a feeling that it’s not over yet.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Running Out of Time Wallpaper</title>
    <published>2024-07-05T00:00:00+00:00</published>
    <updated>2024-07-05T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/running-out-of-time/" type="text/html"/>
    <id>https://figbert.com/projects/running-out-of-time/</id>
    <content type="html">
      &lt;p&gt;A minimalist macOS wallpaper to remind you that time is ticking.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;running-out-of-time&#x2F;preview.png&quot; alt=&quot;A canvas with the words “You are running out of time” written across it in all-caps&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;My little sister was listening to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;open.spotify.com&#x2F;track&#x2F;7qfoq1JFKBUEIvhqOHzuqX&quot;&gt;the Hamilton soundtrack&lt;&#x2F;a&gt; yesterday,
and as I was listening I got hung up on a particular line.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;How do you write like you’re running out of time?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I remember my older sister once told me a story that Steve Jobs had a
calendar on the wall with a circle for every week in the average
lifespan. At the end of every week, she said, Jobs would fill in a
circle. One down, a discrete and finite amount left to go. The &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Sands_of_time_(idiom)&quot;&gt;sands of
time&lt;&#x2F;a&gt;. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Memento_mori&quot;&gt;Memento&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.newsweek.com&#x2F;markiplier-youtube-end-unus-annus-have-courage-let-go-interview-1556047&quot;&gt;mori&lt;&#x2F;a&gt;. You are running out of time.&lt;&#x2F;p&gt;
&lt;p&gt;The wallpaper was made in Affinity Photo. It responds dynamically to
light and dark mode thanks to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;equinoxmac.com&quot;&gt;Equinox&lt;&#x2F;a&gt;. The font &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;displaay.net&#x2F;typeface&#x2F;tobias&#x2F;&quot;&gt;smells of sea foam&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;running-out-of-time&#x2F;wallpaper.heic&quot;&gt;Download it&lt;&#x2F;a&gt; for yourself!&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Caret</title>
    <published>2024-05-22T00:00:00+00:00</published>
    <updated>2024-05-22T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/caret/" type="text/html"/>
    <id>https://figbert.com/projects/caret/</id>
    <content type="html">
      &lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git.figbert.com&#x2F;caret&#x2F;&quot;&gt;&lt;strong&gt;Caret&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; is a command line tool for browsing Lobsters in your
terminal. It brings the Hacker News alternative just a few keystrokes
away in the environment that you’re probably already using.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;caret&#x2F;list.png&quot; alt=&quot;A view of the Lobsters homepage in Caret&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Caret is heavily inspired by the excellent &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bensadeh&#x2F;circumflex&quot;&gt;&lt;code&gt;circumflex&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. It
attempts to emulate much of the same functionality with a much simpler
implementation, using the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;charm.sh&quot;&gt;Charm&lt;&#x2F;a&gt; open-source libraries. Caret relies on
Lobsters’ unofficial JSON API, and will adjust to changes in this
potentially volatile source of data as needed.&lt;&#x2F;p&gt;
&lt;p&gt;Caret is debatably a &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;tangible-deliverables&#x2F;&quot;&gt;tangible deliverable&lt;&#x2F;a&gt;. I developed it before I
announced this intention, but the announcement has been long delayed, so
who knows.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;caret&#x2F;composite.png&quot; alt=&quot;Two side-by-side views of Caret in use&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Many programmers—myself included—practically live in the terminal. It’s
a fast-paced, information-dense environment. Caret brings Lobsters to
meet its readers where they are, and enables readers to navigate the
site quickly and effectively in a manner familiar to them.&lt;&#x2F;p&gt;
&lt;p&gt;Compile Caret from the source code &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git.figbert.com&#x2F;caret&#x2F;&quot;&gt;on my forge&lt;&#x2F;a&gt; and give it a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;go.dev&quot;&gt;go&lt;&#x2F;a&gt;
(no pun intended) in your terminal.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>CSS System Colors Dashboard</title>
    <published>2024-05-20T00:00:00+00:00</published>
    <updated>2024-05-20T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/css-system-colors/" type="text/html"/>
    <id>https://figbert.com/projects/css-system-colors/</id>
    <content type="html">
      &lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;systemcolors.xyz&quot;&gt;&lt;strong&gt;CSS System Colors Dashboard&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; is a website that gives
developers a visual preview of CSS’ underused &lt;code&gt;system-color&lt;&#x2F;code&gt; data type.
These colors are context-dependent, changing between operating systems
and browsers; the dashboard provides effective visualization of the
colors across environments.&lt;&#x2F;p&gt;
&lt;p&gt;I discovered native colors in CSS through &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.jim-nielsen.com&#x2F;2021&#x2F;css-system-colors&#x2F;&quot;&gt;Jim Nielsen&lt;&#x2F;a&gt;. These
colors are extremely useful for developing “along the grain” of a
platform. I now use them all the time! &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;systemcolors.xyz&quot;&gt;This new dashboard&lt;&#x2F;a&gt; lists
the available system colors and displays their value in context.&lt;&#x2F;p&gt;
&lt;p&gt;The dashboard is a &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;tangible-deliverables&#x2F;&quot;&gt;tangible deliverable&lt;&#x2F;a&gt;. It’s a simple, cute tool with
a lot of utility.&lt;&#x2F;p&gt;
&lt;p&gt;This project was developed in part as an experiment in learning Rust.
I used &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tokio-rs&#x2F;axum&quot;&gt;axum&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;djc&#x2F;askama&quot;&gt;askama&lt;&#x2F;a&gt; in building the site, selected for their
(aspirationally) intuitive interfaces and strong embrace of the type
system. However, I found the development experience in the language
overcomplicated and unergonomic. I still hope to enter the Rust
community—I am enthusiastic about the ideals of the language and its
potential—but will seek out other ways to do so.&lt;&#x2F;p&gt;
&lt;p&gt;Check out &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;systemcolors.xyz&quot;&gt;the live website&lt;&#x2F;a&gt; in your browser to explore your
system colors and view the source code &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git.figbert.com&#x2F;css-system-colors&#x2F;&quot;&gt;on my forge&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Stanford Quarterly Reflection (Y1Q2)</title>
    <published>2024-04-20T00:00:00+00:00</published>
    <updated>2024-04-20T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/stanford-quarterly-reflection-02/" type="text/html"/>
    <id>https://figbert.com/posts/stanford-quarterly-reflection-02/</id>
    <content type="html">
      &lt;p&gt;In this quarter, Stanford became my default. As such, my memory of my
time at Stanford has begun to take the blurry and general form I
associate with “real life.”&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h3 id=&quot;academics&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#academics&quot; aria-label=&quot;Anchor link for: academics&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Academics&lt;&#x2F;h3&gt;
&lt;p&gt;My workload increased this past quarter, as I left the one-unit courses
behind in favor of some required humanities courses and entertaining
medium-unit classes. I received my first A+, and also my first A-, in my
Stanford career. On balance, this lowered my GPA by 0.01, as the unit
counts were skewed in favor of the A-. I took five courses:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;ARABLANG 2A: Accelerated First-Year Arabic, Part II&lt;&#x2F;li&gt;
&lt;li&gt;CHEM 29N: Chemistry in the Kitchen&lt;&#x2F;li&gt;
&lt;li&gt;COLLEGE 102: Citizenship in the 21st Century&lt;&#x2F;li&gt;
&lt;li&gt;CS 40: Cloud Infrastructure and Scalable Application Deployment&lt;&#x2F;li&gt;
&lt;li&gt;PWR 1KAA: Writing &amp;amp; Rhetoric 1: Forward Momentum: Writing About
Movement(s)&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Arabic continued to be a positive staple of my week. It also expanded
its impact, when I took a late-night excursion into San Francisco with a
friend visiting from UChicago and we tried out a pizza place recommended
on the authority of Khaled. It was lovely! The proprietor remembered
Khaled from his days at USF. We also went on later that night to
discover a crepe place near where we went to high school, which was
surprising as we had not encountered it before and because restaurants
open past midnight are rare gems in San Francisco. I got back to
Stanford very late.&lt;&#x2F;p&gt;
&lt;p&gt;CHEM 29N was a total treat, if not particularly rigorous in either its
chemistry or its cooking. It is stuck in the classic funding limbo,
wherein the program is given little money due to its low output but
cannot increase its effectiveness until it receives more money. Still, I
got a lovely addition to my fledgling apron collection.&lt;&#x2F;p&gt;
&lt;p&gt;COLLEGE was aggressively mediocre. There is great value in the liberal
arts and indeed they are fundamental to Stanford as an institution. You
will, however, not find this value in COLLEGE 102. The class is a
compromise: primarily between those who want to require a liberal arts
core and those opposed as well as between those who want to overhaul the
Western canon and those who do not.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; The end result is boring.&lt;&#x2F;p&gt;
&lt;p&gt;CS 40 was a course super relevant to my day-to-day coding work and a
lovely introduction to the exciting world of 3-unit courses, but as it
was its first quarter running there were still some kinks to work out.
“Figure out programmatic declaration of self-hosted services” has been
on my todo list for quite a long time, so I was excited to both learn
how to do this and get school credit for it; however, instead, I just
spent a few weekends spray-and-praying AWS CDK gibberish at the screen.
I understand that they’re going to switch to Terraform or Ansible next
year, and I wish them luck with that (and myself luck with self-study of
the same). Ideally, I would have come away from the class with the
skills required to write cloud-agnostic declarative infrastructure, but
I have not. Unless you’re looking to hire me, in which case I absolutely
have.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;and-now-to-address-pwr&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#and-now-to-address-pwr&quot; aria-label=&quot;Anchor link for: and-now-to-address-pwr&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
And Now to Address PWR&lt;&#x2F;h4&gt;
&lt;p&gt;I am unable to imagine a more painful academic experience than PWR 1KAA.
To gather the world’s best and brightest—driven, talented youth—at great
expense in money, time, and effort, and then force them to divert
significant effort into this aimless toil feels criminal. It is astounding
that this has been allowed to occur. To absorb the material of this course
would be a detriment to your writing ability.&lt;&#x2F;p&gt;
&lt;p&gt;And though I suspect there would have been no PWR 1 courses that I would
have loved, it did not have to be a complete failure—for that, the
instructor is responsible. As explanation, and a means of
self-restraint, I will simply deliver the following anecdote: A very
good friend of mine, in a different PWR course, had scheduled a session
with a tutor to work on his final essay. His tutor canceled, and he was
assigned my PWR instructor in their stead. He left the meeting
astounded, with no actionable advice and significantly more confused. He
had some choice words, and told me genuinely that he felt sorry for me.&lt;&#x2F;p&gt;
&lt;p&gt;I pray, sincerely, that I never again encounter anything like this course
during my time here.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;personal&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#personal&quot; aria-label=&quot;Anchor link for: personal&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Personal&lt;&#x2F;h3&gt;
&lt;p&gt;I fear that I have waited too long, and have become too engrossed in the
day-to-day of this new quarter, to do this section as I would have
liked. But I will appreciate people nevertheless, and devour my camera
role repeatedly as I seek to return to the proper mental state.&lt;&#x2F;p&gt;
&lt;p&gt;I want to appreciate Nika and her illegal bunny. I want to appreciate
Daniel and Ryan for a raucous night of festivities; I admire Daniel
greatly for his ability to commit and his fearlessness in social
situations, and I am grateful to Ryan for his non-stop encouragement.
Huge love to Jack and Sam, who tried the Vision Pro with me and
got many a late-night Zareen’s. Kelly, for an even later Zareen’s,
failed attempts at glasses shopping, and lovely brownies besides—you are
a light. Vivek for climbing on the Shangri-La scaffolding. Nate for
hitting 195 before me.&lt;&#x2F;p&gt;
&lt;p&gt;The JSA Retreat stands out as a highlight of my experience this winter.
The chances of finding such a space as we created in that house are less
than one-in-a-million, and I am in awe that it exists here at Stanford.
I would not be the same without it, and I don’t think it an exaggeration
to say that it is &lt;em&gt;the&lt;&#x2F;em&gt; defining part of my Stanford experience. Diego’s
cooking was not half bad, and I love &lt;em&gt;I Love London&lt;&#x2F;em&gt;.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I was warned that winter would be dreary and horrible. I’m just not sure
what people are on about; this was my favorite quarter yet.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-3-1&quot;&gt;&lt;a href=&quot;#fn-3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;Let the record show that, on these fronts, my positions currently
stand as follows: I am opposed a required core at Stanford, and broadly
aligned with the idea of updating the Western core. To the former, I
think the increasing number of required courses is bad; the WAYS system,
in which you are required to study specific fields but have a great deal
of choice in how you do so, is significantly more aligned with the
spirit and culture of Stanford. If you want a core, and the specific
impacts that having such structure brings, look elsewhere—aforementioned
UChicago friend is thoroughly enjoying his time on the school’s intense
and rigid path. We should not attempt to backport this to Stanford. To
the latter issue, I am hopeful that we have advanced as a species since
much of the classics were written. I do not hold these texts sacred. I
do, however, hold excellence sacred—and don’t think updating this corpus
will be as easy as cutting a few pieces and throwing in a few modern
works from traditionally marginalized voices. This process needs to be
done well and by actual experts, which I do not believe has happened yet
in a curriculum I have encountered. It has certainly not happened in the
COLLEGE department, where courses are taught by brand-new “teaching
fellows” who agree upon a core curriculum but all refuse to teach it and
instead occasionally do and say things ranging from the abhorrent (see:
Ameer Loggins) to the casually wrong (my teacher suggested, and doubled
down on, a claim that China and the Iranian Revolutionary Guard are more
accountable to the citizenry of their nations than the United States
government). &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;Which, while we are on the subject: I’m saving my spring break
trip for my Q3 post. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-3&quot;&gt;
&lt;p&gt;Small sample size, but still. &lt;a href=&quot;#fr-3-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>A Lovely Read</title>
    <published>2024-04-20T00:00:00+00:00</published>
    <updated>2024-04-20T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/seaside-hotel/" type="text/html"/>
    <id>https://figbert.com/reading/seaside-hotel/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;The Seaside Hotel&lt;&#x2F;i&gt; by Michael Holt. &lt;br&#x2F;&gt;
        Finished on April 17, 2024. &lt;br&#x2F;&gt;
        
        Rating: ★★★★☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;I had the great privilege of studying under Michael Holt for two years.
When, two weeks ago, a friend forwarded me and a fellow student of
Holt’s &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sublunaryeditions.com&#x2F;products&#x2F;the-seaside-hotel-michael-holt&quot;&gt;the link to his new book&lt;&#x2F;a&gt;, the three of us immediately purchased
copies and instituted a haphazard book club.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;I think it is a very beautiful thing that I am able to read a physical
work written by a friend. Holt has done an incredible thing through the
creation of this tangible relic of his thought and conciousness. I find
it very inspiring. It makes me consider writing in a way more serious
than I ever have before.&lt;&#x2F;p&gt;
&lt;p&gt;The form of the book is independently notable. I am a proponent of
compact, purpose-built objects. I love &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;dp&#x2F;B08B495319&#x2F;&quot;&gt;my Kindle&lt;&#x2F;a&gt; because its existence
is limited to precisely what is necessary and nothing more. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;gp&#x2F;product&#x2F;B07NDLKQC5&#x2F;&quot;&gt;Any object&lt;&#x2F;a&gt;
can be similarly refined. &lt;em&gt;The Seaside Hotel&lt;&#x2F;em&gt; is such an object. Its
unique dimensions are subtly unsettling, subverting your assumptions to
break you into a concious focus. Less poetically: it is small and almost
square, light and fun in the hand.&lt;&#x2F;p&gt;
&lt;p&gt;I read the book sitting on a sunlit porch, and then tucked away
stretching out across the length of a light-brown couch. Though I am
concerned this says something about my current mental state, &lt;em&gt;The
Seaside Hotel&lt;&#x2F;em&gt; brought me a feeling of contentment. I recommend it to
all.&lt;&#x2F;p&gt;
&lt;p&gt;Though it almost certainly goes without saying, I am excited to see
where Holt goes in the coming years and will follow his works with great
interest.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>I Suppose This Is Modern Fiction And It&#x27;s Pretty Good</title>
    <published>2024-04-12T00:00:00+00:00</published>
    <updated>2024-04-12T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/seven-moons-of-maali-almeida/" type="text/html"/>
    <id>https://figbert.com/reading/seven-moons-of-maali-almeida/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;The Seven Moons of Maali Almeida&lt;&#x2F;i&gt; by Shehan Karunatilaka. &lt;br&#x2F;&gt;
        Finished on April 01, 2024. &lt;br&#x2F;&gt;
        
        Rating: ★★★★☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;When I started this book, I thought “ahh yes a book about the ghost of a
dead gay Sri Lankan photojournalist.” By the end, I was thinking “ahh
yes a book about the ghost of a dead gay Sri Lankan photojournalist!”
This paragraph makes more sense out loud, where the emphasis is clearer,
but the crux of my point is that at first I was bewildered by its
subject matter but by the end of the book I was thoroughly appreciative
of the work and in fact enjoyed it very much.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;I was looking for a book to get me out of my reading slump. I had
started several, and was making little headway through any of them. When
I began on this book I would not have thought it would be any different.
Yet it was! The world is fascinating and its mythology completely
original. Maali is complicated and, as such, makes me want to keep
unraveling his story.&lt;&#x2F;p&gt;
&lt;p&gt;I learned a lot about Sri Lanka through reading this. This has had
immediate payoff as I have been making niche jokes and references to my
Sri Lankan friend and really catching him off guard. I should probably
back this up with some actual historical research given the book’s
general lack of commitment to the nature of reality.&lt;&#x2F;p&gt;
&lt;p&gt;It was good to read some surrealist fiction. I haven’t done much of this
since last spring, when I was in a class on the subject. There are
actually cool things to come on that specific front, which I will try
and remember to link here when they come to fruition.&lt;&#x2F;p&gt;
&lt;p&gt;If you are looking for something to intrigue you and sort of make your
brain cells feel fuzzy, this might be the book for you.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Toward Tangible Deliverables</title>
    <published>2024-02-05T00:00:00+00:00</published>
    <updated>2024-02-05T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/tangible-deliverables/" type="text/html"/>
    <id>https://figbert.com/posts/tangible-deliverables/</id>
    <content type="html">
      &lt;p&gt;I would like to become the kind of person who consistently produces
discrete works.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;I am a big believer in compounding success. You can get used to
thriving, get used to a mindset of novel thought, get used to creating
rather than consuming. You can make it a habit.&lt;&#x2F;p&gt;
&lt;p&gt;We can game our psychology here. However productive you may be in
reality, it is hard to &lt;em&gt;feel&lt;&#x2F;em&gt; the progress being made without distinct
milestones. Chipping away at a project of amorphous and twisting scope
is quicksand for your time. Dividing up large goals is key to creating a
feeling of control and—critically—doing real work.&lt;&#x2F;p&gt;
&lt;p&gt;I admire the programmers and designers who throw off project after
project into the public eye. My Mastodon timeline is chock-full of
mockups and demos, people actually &lt;em&gt;shipping&lt;&#x2F;em&gt; all the time.&lt;&#x2F;p&gt;
&lt;p&gt;So, I’m working on it.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;This next part is for internal use, but browse at your leisure.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;In:&lt;&#x2F;strong&gt; blog posts, fun web projects, “mini apps” for Apple platforms,
microblogging but with images&#x2F;gifs, emailing other internet people,
&lt;code&gt;&#x2F;now&lt;&#x2F;code&gt; and &lt;code&gt;&#x2F;using&lt;&#x2F;code&gt;, videos, livestreaming, art, bamboo (any usage).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Out:&lt;&#x2F;strong&gt; project multitasking, not publishing, unclear distribution,
false productivity.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Links:&lt;&#x2F;strong&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;interconnected.org&#x2F;home&#x2F;&quot;&gt;Matt Webb&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;julian.digital&quot;&gt;Julian Lehr&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@neilsardesai&quot;&gt;Neil Sardesai&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;helvetiica&quot;&gt;Vinoth
Ragunathan&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nelson.co&quot;&gt;Gavin Nelson&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;daringfireball.net&quot;&gt;Daring Fireball&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;user&#x2F;caseyneistat&quot;&gt;Casey Neistat&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;marty&quot;&gt;Marty
of Poolsuite&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.todepond.com&quot;&gt;todepond&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;robinrendle.com&#x2F;notes&#x2F;if-it-doesnt-ship-then-it-doesnt-count&#x2F;&quot;&gt;Robin Rendle&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Stanford Quarterly Reflection (Y1Q1)</title>
    <published>2024-01-09T00:00:00+00:00</published>
    <updated>2024-01-09T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/stanford-quarterly-reflection-01/" type="text/html"/>
    <id>https://figbert.com/posts/stanford-quarterly-reflection-01/</id>
    <content type="html">
      &lt;p&gt;Life changes slowly and then all at once. I started at Stanford
University on September 19th, 2023, an “all at once” day that began the
rest of my life. It is no small thing to leave the home you’ve known all
your life for a place as strange as Stanford. I am profoundly grateful
for the opportunity to do so and for the people who have made that
possible. It turns out to be a wonderful kind of strange.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;This past quarter felt like being thrown onto a bucking horse, breaking
it, and immediately turning it toward the racetrack and joining a heat
that was already underway.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; It was immediately fun.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;general-philosophizing-on-the-subject-of-people&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#general-philosophizing-on-the-subject-of-people&quot; aria-label=&quot;Anchor link for: general-philosophizing-on-the-subject-of-people&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
General Philosophizing on the Subject of People&lt;&#x2F;h3&gt;
&lt;p&gt;People are supremely important. Having people you care about to eat with
when the evening comes—this one thing can make anywhere feel like home.
This is not a profound realization, but it is one that I have come to
through my time here.&lt;&#x2F;p&gt;
&lt;p&gt;I have been extremely lucky to be joined at Stanford by one of my best
friends from high school. It’s completely cheating: I am certain that
the transition would have been far more difficult on my own. To leave
home and be totally alone is an experience I still have not had: when I
moved to Stanford I had Vivek.&lt;&#x2F;p&gt;
&lt;p&gt;I have been further showered with folks who I am grateful for, new
friends that—as anyone who has gone off to college will tell you—I
already feel like I’ve known all my life. What I most want to say is
this: when I went off to college, it was my most sincere hope that I
would meet remarkable people. I have found this sort of person at
Stanford in abundance, and nowhere more than with you, my friends.&lt;&#x2F;p&gt;
&lt;p&gt;Thank you Jack, for welcoming me into your home—and giving me a potato
for my shelf. Thank you Josh, for debating with me the linguistic
intricacies of Hebrew curse words. Thank you Daniel, Riya, and Amalia,
for hanging out with me in far-flung cities; it’s remarkable to land
somewhere strange and have friends there to welcome you. And thank you
Kelly, for introducing me to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.corner.inc&#x2F;clouds&quot;&gt;Corner&lt;&#x2F;a&gt;, and more importantly being
everything for everyone in difficult times.&lt;&#x2F;p&gt;
&lt;p&gt;And to all those with whom I shared food, ran around in the cold, stayed
up into the wee hours of the night, and woke up for in the early morning
to go lift; it’s been a lifetime these few short months and I am amazed
I have been able to spend it with you.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;specific-commentary-on-the-subject-of-academics&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#specific-commentary-on-the-subject-of-academics&quot; aria-label=&quot;Anchor link for: specific-commentary-on-the-subject-of-academics&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Specific Commentary on the Subject of Academics&lt;&#x2F;h3&gt;
&lt;p&gt;I took six classes, which I found after a confused two-week sprint where
I picked up and quickly dropped, among others, a three-hour long
comparative literature class.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; My schedule eventually settled into
the following:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;CS 106B: Programming Abstractions&lt;&#x2F;li&gt;
&lt;li&gt;ARABLANG 1A: Accelerated First Year Arabic&lt;&#x2F;li&gt;
&lt;li&gt;HISTORY 81B: Contemporary Middle East&lt;&#x2F;li&gt;
&lt;li&gt;CS 7: Personal Finance for Engineers&lt;&#x2F;li&gt;
&lt;li&gt;PHYSICS 59: Frontiers of Physics Research&lt;&#x2F;li&gt;
&lt;li&gt;ECON 3: Big Ideas Lecture Series&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I loved this schedule, and am quite lucky to have stumbled into it.
Sean, my 106B professor, is wonderful and an endless well of millennial,
self-deprecating positive energy. I hope nothing ever stays that spirit.
My Arabic professor Khaled has an incredible tendency to launch off on
half-hour long tangents in the middle of a lesson. It was in his class
that I saw my name for the first time:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;stanford-quarterly-reflection-01&#x2F;benji.jpeg&quot; alt=&quot;بنجي&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;We had already learned the alphabet when Khaled used my name as an
example. I looked up at the chalkboard in amazement.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-3-1&quot;&gt;&lt;a href=&quot;#fn-3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; When did I
first see my name in English or Hebrew? This time, I snapped a picture.&lt;&#x2F;p&gt;
&lt;p&gt;HISTORY 81B fell into the trap of most Middle Eastern history courses:
it taught the same old Arab-centric narrative, depriving all characters
of agency and giving the state of the region an air of inevitability. I
took it to hang out with Vedant and Hassan—which I did! Our post-class
coffee routine caused me to be late to Arabic on many an occasion. I
also enjoyed our final project, which &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;war-of-return&#x2F;&quot;&gt;I published here&lt;&#x2F;a&gt;
as stylistic practice for an eventual submission to the ACX book review
contest.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-4-1&quot;&gt;&lt;a href=&quot;#fn-4&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The final three classes were all speaker series. Whenever I tell this to
upperclassmen, they universally respond with a shoulder pat and a
wistful gaze as they reflect back on when they were young and naive and
took speaker series. I hope I never come to adopt this position: I think
they’re the greatest. In PHYSICS 59 I heard the sound of a single atom
moving. CS 7 filled a huge gap in my knowledge and helped me
contextualize my finances.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-5-1&quot;&gt;&lt;a href=&quot;#fn-5&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; And ECON 3 is one of those classes that
can only exist with the unique resources found here.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;other-rattlings-of-the-mind&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#other-rattlings-of-the-mind&quot; aria-label=&quot;Anchor link for: other-rattlings-of-the-mind&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Other Rattlings of the Mind&lt;&#x2F;h3&gt;
&lt;p&gt;The observation of change is a difficult thing. I find it almost
impossible to embody the version of myself that was once living so
differently.&lt;&#x2F;p&gt;
&lt;p&gt;The blank slate of college is a canvas for personal change. I’m trying
to use it to live as intentionally as possible.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-6-1&quot;&gt;&lt;a href=&quot;#fn-6&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; When you are in
control of all the facets of your life, why not design it?&lt;&#x2F;p&gt;
&lt;p&gt;The amount of distinct events that occur each day in my life on this
campus is incredible. Perhaps one of the things I appreciate most about
Stanford is this compression of time and space. There are so many people
doing so many things here, that each day doesn’t truly feel complete
until something unique and memorable has occurred. Last night, for
example, I spontaneously dropped in on a class in the law school a
friend of mine is taking that just so happens to be taught by the father
of a high school friend.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-7-1&quot;&gt;&lt;a href=&quot;#fn-7&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; How glorious!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;looking-forward&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#looking-forward&quot; aria-label=&quot;Anchor link for: looking-forward&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Looking Forward&lt;&#x2F;h3&gt;
&lt;p&gt;The second quarter is already upon us. This time around there will be a
lot more writing of papers. And yet, I am sure it will be—as this last
quarter has been—genuinely exceptional.&lt;&#x2F;p&gt;
&lt;p&gt;עם ישראל חי&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;I have never done anything remotely like this. It is a metaphor.
Your horse-wrangling mileage may vary. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;&lt;em&gt;COMPLIT 214: Shipwrecks and Backlands&lt;&#x2F;em&gt;, mostly
inspired by an excellent course on surreal Latin American literature in
high school; thalassic Iberian literature seemed like a good next step.
Ultimately, I thought the discussion format combined with the extended
duration made it not a good fit for what I would like to do at Stanford.
I was also briefly in &lt;em&gt;SYMSYS 1: Minds and Machines&lt;&#x2F;em&gt;, but was
told that I would receive several zeroes on the first week’s work and my
grade would suffer. I believe that’s not how the shopping period is
supposed to work, so I dropped out in search of classes excited to have
me. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-3&quot;&gt;
&lt;p&gt;I know, right? Chalkboard! I’d never really seen one of those
before. Amusing that in the middle of Silicon Valley, the chalkboard is
alive and well in the depths of Main Quad. &lt;a href=&quot;#fr-3-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-4&quot;&gt;
&lt;p&gt;&lt;em&gt;War of Return&lt;&#x2F;em&gt; was not assigned specifically, we were just tasked
with writing a book review. The review I will eventually submit to the
ACX contest will likely have decreased usage of “Ibid.” &lt;a href=&quot;#fr-4-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-5&quot;&gt;
&lt;p&gt;Let it also be known that the lecturer, Adam Nash, is extremely
cool, has nice hair, and writes &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;adamnash.blog&quot;&gt;a blog of his own&lt;&#x2F;a&gt;. &lt;a href=&quot;#fr-5-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-6&quot;&gt;
&lt;p&gt;Sleep well, be jacked. &lt;a href=&quot;#fr-6-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-7&quot;&gt;
&lt;p&gt;Because, it seems, taking law school classes as an undergraduate
freshman is something you can do. If you’re insane. &lt;a href=&quot;#fr-7-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Epic Acid Science Fiction</title>
    <published>2023-12-26T00:00:00+00:00</published>
    <updated>2023-12-26T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/dune/" type="text/html"/>
    <id>https://figbert.com/reading/dune/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;Dune&lt;&#x2F;i&gt; by Frank Herbert. &lt;br&#x2F;&gt;
        Finished on December 25, 2023. &lt;br&#x2F;&gt;
        
        Rating: ★★★★☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;Really on a “very good, but not my favorite of all time” streak here.
Also, I am now setting the precedent that not all reviews will be
extremely in-depth. In some ways, these are less reviews and more a
reflective log with occasional critique. Regardless: &lt;em&gt;Dune&lt;&#x2F;em&gt; rocks.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;I first encountered this book as a wee lad when my older sister read the
series. I am happy to have finished the first book all these years
later. It’s such a cool world! I’m a sucker for the desert, and I think
this book does it very well. I would love to see Arrakis.&lt;&#x2F;p&gt;
&lt;p&gt;There are many different languages in Dune. The Atreides have a battle
language. Other families have their own secret languages. Fremen have
their own tongue, which incorporate words from another, third language.
I already speak a somewhat esoteric language that covers me in most
American contexts, but I would like to have my own secret language to
communicate in true privacy.&lt;&#x2F;p&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Super Humongous Spoilers&lt;&#x2F;strong&gt;&lt;&#x2F;summary&gt;
  The final battle nearly gave me a heart attack. Very stressful. Then
  it ended with no George R. R. Martin-esque twist, and instead Paul
  basically totally won against the entire universe. Perhaps
  intellectually disappointing, but very satisfying.
&lt;&#x2F;details&gt;
&lt;p&gt;&lt;em&gt;Dune&lt;&#x2F;em&gt; is long as hell. I took advantage of a cross-country flight to
knock out most of it. This will factor into my prioritization of
finishing the series. Then again, I’m flying back across the country at
the end of the week…&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>A Foray into Theology</title>
    <published>2023-12-20T00:00:00+00:00</published>
    <updated>2023-12-20T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/lonely-man-of-faith/" type="text/html"/>
    <id>https://figbert.com/reading/lonely-man-of-faith/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;The Lonely Man of Faith&lt;&#x2F;i&gt; by Joseph B. Soloveitchik. &lt;br&#x2F;&gt;
        Finished on December 17, 2023. &lt;br&#x2F;&gt;
        
        Rating: ★★★★☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;&lt;em&gt;The Lonely Man of Faith&lt;&#x2F;em&gt; was a birthday present from a dear friend. It
is written from a perspective that challenges my own, running quite
contrary in some aspects from the way in which I have chosen to live.
Indeed, this is what made it a fascinating book to read: the interaction
of differing opinions and views is where there is perhaps the most room
for growth. Furthermore, &lt;em&gt;The Lonely Man of Faith&lt;&#x2F;em&gt; is written at quite
an abstract level, and as such there are many things within its pages
that Rabbi Soloveitchik and I agree on and indeed within which we can
find shared meaning.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Now, assorted quotes and commentary:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The Halakhah believes that there is only one world—not divisible into
secular and hallowed sectors…&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Page 79&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This aligns with how I think of Jewishness. I am a Jew in every context,
not just those that may be considered “religious” by those on the
outside.&lt;&#x2F;p&gt;
&lt;p&gt;The dual-nature image of man proposed by Rabbi Soloveitchik is this
book’s central focus. At times I find this description becomes fairly
romantic:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;However, [the discovery of a companion], since it is part of the
redemptive gesture, must also be sacrificial. The medium of attaining
full redemption is, again, defeat. &lt;strong&gt;This new companionship is not
attained through conquest, but through surrender and retreat.&lt;&#x2F;strong&gt; “And
the eternal God caused an overpowering sleep to fall upon the man.”
Adam was overpowered and defeated—and in defeat he found his
companion.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Page 38&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The emphasis above is mine. There is something I enjoy about the framing
of deep human relationships being formed through mutual surrender.&lt;&#x2F;p&gt;
&lt;p&gt;If the Rabbi were to appraise my life, I am certain he would say that I
spend far too much time in the conquesting mode of his “Adam the first,”
and it may be beneficial for me to explore other ways of existing.
Perhaps there is value in this. I am certainly sympathetic to, and
involved myself with, the individual search for meaning. However: I do
think there is a vast chasm between that and not touching light switches
on Shabbat.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;The Lonely Man of Faith&lt;&#x2F;em&gt; is a book of philosophy—it is difficult to
draw from it hard conclusions. Much of the worth of these things comes
from the reading itself, and clashing with the ideas on the page. The
journey, not the destination, as it is said. The book is not long. I
enjoyed it.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Quotes from My Camera Roll</title>
    <published>2023-12-19T00:00:00+00:00</published>
    <updated>2023-12-19T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/camera-roll-quotes/" type="text/html"/>
    <id>https://figbert.com/posts/camera-roll-quotes/</id>
    <content type="html">
      &lt;p&gt;I have been collecting fun little writings in Photos with the intent of
distributing them here. Now I can delete them. This will lift a great
weight from my shoulders.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;blockquote&gt;
&lt;p&gt;It will all be gone soon enough and you know it, so look good and
close while the close lookin’s good.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;“Close lookin.”&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Musk, via email, would only say: “I have never lost money for those
who invest in me and I am not starting now.”&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;From an Axios article, in response to a question about X&#x2F;Twitter. Seems
ill-fated, but an impressive display of confidence.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Argentina, back in its familiar position of being a fiscal and
economic disaster zone…&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Funny, for me, far away from Argentina.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;This put him in position to try the Hitler Slingshot Maneuver…&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Hell of a maneuver.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The old mantra’s gotta go, even as it still rings in our ears and
echoes down deep caverns of the Web.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;A metaphor that makes the Web a physical place is good in my book.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;We’re imagination bottlenecked. There’s low-hanging fruit for the next
decade.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;A fun but frustrating concept. How to come up with radical ideas…&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The only other thing I will add is that I don’t think anyone needs to
justify asking for support through “hosting costs money” or the like.
Art is worth supporting, so even if the money I send goes to paying
for your truffle brownie habit, you do you.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;From Manu’s lovely &lt;em&gt;People and Blogs&lt;&#x2F;em&gt;, the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;manuelmoreale.com&#x2F;pb-brian-koberlein&quot;&gt;fourth edition&lt;&#x2F;a&gt;. A
philosophy I agree with, even if I am not huge on truffle brownies
myself.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Don’t avoid places with beautiful women in them, ignore who’s already
there and take a beautiful woman with you, or at least one who looks
beautiful in bistro lighting. Trust me, the food tastes better.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;From one of the most &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;marginalrevolution.com&#x2F;marginalrevolution&#x2F;2023&#x2F;08&#x2F;does-america-or-france-have-better-food.html?commentID=160646682&quot;&gt;bizarre and beautiful screeds&lt;&#x2F;a&gt; I’ve ever
encountered.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Let the coffee be hot, &amp;amp; the liquors chosen with special care.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;A local restaurant menu.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>A Review That I Should Probably Have Saved For Another, Less Contentious Time But Nevertheless Did and Ultimately Enjoyed</title>
    <published>2023-12-16T00:00:00+00:00</published>
    <updated>2023-12-16T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/war-of-return/" type="text/html"/>
    <id>https://figbert.com/reading/war-of-return/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;The War of Return&lt;&#x2F;i&gt; by Adi Schwartz and Einat Wilf. &lt;br&#x2F;&gt;
        Finished on December 03, 2023. &lt;br&#x2F;&gt;
        
        Rating: ★★★★☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      &lt;p&gt;&lt;em&gt;The War of Return&lt;&#x2F;em&gt; is a book written by two self-described “prominent
Israeli leftists” that makes a bold claim in its subtitle: “Western
Indulgence of the Palestinian Dream Has Obstructed the Path to
Peace.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; The book was originally published, in Hebrew, in 2018. The
English translation debuted two years after in 2020. Three years later,
and three months after the October 7th attacks, those who hope for peace
seem to have more reason for despair than ever. I read &lt;em&gt;War of Return&lt;&#x2F;em&gt;
hoping for a fresh perspective. So together, let’s turn to co-authors
Adi Schwartz—an Israeli journalist formerly at Haaretz, the country’s
largest left-wing newspaper—and Einat Wilf—a former Labor party
politician—to discuss “the single largest obstacle to lasting peace” and
how we might go about solving this seemingly intractable conflict
capturing the attention of the world.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;the-narrative-of-the-conflict-as-recounted-in-war-of-return&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-narrative-of-the-conflict-as-recounted-in-war-of-return&quot; aria-label=&quot;Anchor link for: the-narrative-of-the-conflict-as-recounted-in-war-of-return&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
The Narrative of the Conflict, as Recounted in &lt;em&gt;War of Return&lt;&#x2F;em&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;you-probably-think-you-know-what-the-arab-israeli-conflict-is&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#you-probably-think-you-know-what-the-arab-israeli-conflict-is&quot; aria-label=&quot;Anchor link for: you-probably-think-you-know-what-the-arab-israeli-conflict-is&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
You Probably Think You Know What the Arab-Israeli Conflict Is&lt;&#x2F;h3&gt;
&lt;p&gt;The Arab-Israeli conflict, stretching now for over seven decades and
continuing to impact the lives of millions of people throughout the
Middle East, has had numerous near misses with peace. This is because of
a fundamentally incorrect assumption often held by Israeli and Western
negotiators that “this [is] a territorial conflict that [can] be solved
by partitioning the land into two states, that the Palestinians only
[want] a state of their own in the territories, and that the Israeli
occupation and the settlements [are] the primary obstacle preventing
peace.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-3-1&quot;&gt;&lt;a href=&quot;#fn-3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-4-1&quot;&gt;&lt;a href=&quot;#fn-4&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; According to Schwartz and Wilf, they have misunderstood
the problem.&lt;&#x2F;p&gt;
&lt;p&gt;In reality, our favorite co-authors say, this is an ideological conflict
over the very existence of Israel. It is an absolute rejection of
minority sovereignty in a region dominated by the Arabs, and it is not
new: “…the belief that Zionism was an outrageous injustice predated the
war and caused the Arabs to violently oppose the Jewish national
liberation movement many decades earlier.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-5-1&quot;&gt;&lt;a href=&quot;#fn-5&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; The territorial framing
of the conflict is thus not conducive to a solution—no state, with any
borders, will appease a movement that feels like partition itself is an
injustice.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;…this was not a conflict between two national movements, each
seeking first and foremost its own independence, but rather about one
group (the Arabs) seeking first and foremost to foil the independence
of another (the Jews).&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-6-1&quot;&gt;&lt;a href=&quot;#fn-6&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;what-does-that-have-to-do-with-refugees&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-does-that-have-to-do-with-refugees&quot; aria-label=&quot;Anchor link for: what-does-that-have-to-do-with-refugees&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
What Does That Have to Do with Refugees?&lt;&#x2F;h3&gt;
&lt;p&gt;Palestinians’ claimed right of return, in the minds of Schwartz and
Wilf, is a deceptively named aspiration to negate Jewish
self-determination. There can be no democratic Jewish sovereignty where
Jews are a minority.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-7-1&quot;&gt;&lt;a href=&quot;#fn-7&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; It is thus that the Palestinian right of return
is “not merely about moving ten or twenty miles to homes left behind,
but primarily about returning to the time before the terrible defeat of
the Nakba and the establishment of the state of Israel,” by making Jews
a minority in their own homeland.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-8-1&quot;&gt;&lt;a href=&quot;#fn-8&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; In essence, it is about rewinding
history and undoing the creation of the Jewish state.&lt;&#x2F;p&gt;
&lt;p&gt;I myself misunderstood what was meant by “right of return” before
reading this book. As the phrase is used, the right of return is the
right of Palestinians to return not to a future Palestinian state in the
West Bank and Gaza—as I had believed, and supported—but in fact, to the
sovereign state of Israel. Return “could only be realized in the
territory of the state of Israel atop the ruins of the Jewish right of
self-determination.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-9-1&quot;&gt;&lt;a href=&quot;#fn-9&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; To mandate a right of return to Israeli
territory is to reject “the principle of territorial partition” and a
two-state solution.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-10-1&quot;&gt;&lt;a href=&quot;#fn-10&quot;&gt;10&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;War of Return&lt;&#x2F;em&gt; attributes the creation of the refugee issue to this
rejection of the two-state solution by the Arabs. They argue that if the
Arabs had accepted partition in 1948 and established a state of their
own, no one would have been displaced:&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-11-1&quot;&gt;&lt;a href=&quot;#fn-11&quot;&gt;11&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;…it is a fact that the departure of the Arabs was a result of the
war and only of the war. Before the Arabs waged war against partition,
they did not leave their homes. The Arab flight and the refugees from
the war were neither inevitable nor necessary nor inherent in
Zionism.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-12-1&quot;&gt;&lt;a href=&quot;#fn-12&quot;&gt;12&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The blame for the displacement of the refugees, they claim, is
unflinchingly on the shoulders of the Arabs, not the Jews. No one is
entitled to the status quo ante:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Those who wage war to eliminate another people, and to prevent their
achieving independence, cannot legitimately complain that “they
suffered an exceptional injustice” when they lose and flee the
land.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-13-1&quot;&gt;&lt;a href=&quot;#fn-13&quot;&gt;13&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Furthermore, according to Schwartz and Wilf, the legal right of return
simply does not exist: “No legal obligation or treaty existed that…
obliged Israel to let [Palestinians] return to its territory” in the
aftermath of the 1948 war.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-14-1&quot;&gt;&lt;a href=&quot;#fn-14&quot;&gt;14&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Flight and expulsions occurred
throughout the 20th century, including during this seminal war. Indeed,
unlike in Israel where an Arab minority remained after the war, “not a
single Jew remained in the areas conquered by Arab forces.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-15-1&quot;&gt;&lt;a href=&quot;#fn-15&quot;&gt;15&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;How can it be that the Palestinian refugee problem still exists 75 years
later, and at a greater scale than its start? “The answer to why the
Palestinian refugee problem still exists lies neither in the conditions
of its birth nor in its scale nor in the number of victims: nothing here
is unique. The answer must lie elsewhere.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-16-1&quot;&gt;&lt;a href=&quot;#fn-16&quot;&gt;16&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; That elsewhere, &lt;em&gt;War of
Return&lt;&#x2F;em&gt; posits, is in the refusal of the Arabs “to solve the [conflict]
by creating a new status quo in the Middle East” in which Jews and Arabs
could have exercised self-determination side-by-side—which was
accomplished through the political manipulation and exacerbation of the
Palestinian refugee issue.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-17-1&quot;&gt;&lt;a href=&quot;#fn-17&quot;&gt;17&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-tragic-ensuing-decades&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-tragic-ensuing-decades&quot; aria-label=&quot;Anchor link for: the-tragic-ensuing-decades&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
The Tragic Ensuing Decades&lt;&#x2F;h3&gt;
&lt;p&gt;Schwartz and Wilf argue that the critical issue is the Palestinians’
demand for return to Israel. Progress toward peace is made on all fronts
but return, the “one article that Israel [can] absolutely not agree to,
as it [entails] its very suicide.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-18-1&quot;&gt;&lt;a href=&quot;#fn-18&quot;&gt;18&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Return is instead silently
propped up by Arab support—all but guaranteeing a continued, violent
existence for Palestinians and all others in the region. Promising
initiatives to resettle hundreds of thousands of refugees in the
immediate aftermath of the 1948 war, in the Jordan Valley and the Sinai,
went nowhere. The “biggest rehabilitation project of the 1950s for
Palestinian refugees,” a farm run by Musa Alami (a prominent Palestinian
nationalist), employed thousands of Palestinians in the Jericho
area—with a specific focus on orphans of the war—and grew orchards and
productive crops over thousands of dunams, with export contracts to
Saudi Arabia, fifty wells, and a school.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-19-1&quot;&gt;&lt;a href=&quot;#fn-19&quot;&gt;19&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; It was leveled in 1955 by
Palestinians believing its existence would help “enable the resolution
of outstanding political disputes between the sides.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-20-1&quot;&gt;&lt;a href=&quot;#fn-20&quot;&gt;20&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The refugee issue, claim Schwartz and Wilf, is cynically manufactured
and perpetuated by Arab leaders. The long-term adoption of the position
that “improving the living conditions of a few hundreds of thousands of
refugees [is] less important than their war with Zionism” has led the
Arab world to the creation of a Palestinian refugee-hood that is
completely divorced from the experience of every other refugee
group.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-21-1&quot;&gt;&lt;a href=&quot;#fn-21&quot;&gt;21&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Indeed, Palestinian refugees are not governed by UNHCR, the
UN agency for refugees, but by their own temporary commission—UNRWA—the
regular extension of which “has become a quasi-automatic annual
tradition” at the United Nations.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-22-1&quot;&gt;&lt;a href=&quot;#fn-22&quot;&gt;22&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; &lt;em&gt;War of Return&lt;&#x2F;em&gt; devotes a great
amount of effort to describing how UNRWA “was transformed from being a
failed agency for refugee rehabilitation to a very successful
organization for” halting progress in the Middle East.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-23-1&quot;&gt;&lt;a href=&quot;#fn-23&quot;&gt;23&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; “For
decades,” Schwartz and Wilf say, “UNRWA has sustained a parallel world
of policy and executive decisions that serve the Palestinian narrative
alone,” and leave the Middle East in a radicalizing limbo that actively
works against peace.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-24-1&quot;&gt;&lt;a href=&quot;#fn-24&quot;&gt;24&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The list of UNRWA oddities is very, very long. Unlike all other groups,
UNRWA’s “Palestine refugee” status is hereditary—resulting in a
registered population of over 5 million people from an initial group of
approximately 700,000 displaced Palestinians (see chart below). Unlike
all other groups, refugee status is not surrendered when additional
citizenship is achieved; indeed, 2.2 million UNRWA-registered refugees
are citizens of Jordan, but they retain their “refugee” status.
Astoundingly, these refugees make up 70% of Jordan’s population: “It is
difficult, bordering on impossible, to get a consistent answer from
Jordanian officials to the question of how the Jordanian state sees its
own citizens.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-25-1&quot;&gt;&lt;a href=&quot;#fn-25&quot;&gt;25&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Another 2.2 million UNRWA-registered refugees live
in the West Bank and Gaza, territories allocated for the future
Palestinian state, making them refugees within their own future state.
An additional million are officially split between Syria and Lebanon,
territories where “most of them do not even reside… anymore.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-26-1&quot;&gt;&lt;a href=&quot;#fn-26&quot;&gt;26&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
Since the 1960s, “most of the [Palestinian] refugee camps were
neighborhoods of the Arab towns next to which they were built,” with
housing markets and daily realities entirely different from the Western
image of vast, impoverished tent cities.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-27-1&quot;&gt;&lt;a href=&quot;#fn-27&quot;&gt;27&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Within these
refugee-camps-that-are-cities, Western-funded UNRWA-run schools teach
students “a narrative of victimhood, based on a singular, striking
injustice,” which have resulted over time, Schwartz and Wilf believe, in
a direct connection between “the perpetuation of UNRWA for political
reasons to the emergence of” Palestinian terrorism.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-28-1&quot;&gt;&lt;a href=&quot;#fn-28&quot;&gt;28&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Thus, according
to Schwartz and Wilf, the purpose of the continued use and expansion of
refugee status in this situation is to perpetuate and reinforce the Arab
claim toward the right of return and its inherent goal of eliminating
Israel.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-29-1&quot;&gt;&lt;a href=&quot;#fn-29&quot;&gt;29&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;reading&#x2F;war-of-return&#x2F;refugees.png&quot; alt=&quot;A chart of Palestine refugees over time, increasing from 0 in 1948 to over 5 million in 2019&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;so-should-you-read-it&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#so-should-you-read-it&quot; aria-label=&quot;Anchor link for: so-should-you-read-it&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
So, Should You Read It?&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;em&gt;The War of Return&lt;&#x2F;em&gt; is worth reading, but is difficult to synthesize.
The book is disorganized: it has a message it wishes to impress upon
you, but is not sufficiently clear and driven in doing so. It is without
a doubt the most thoroughly cited book I have ever encountered. A full
third of its page count is dedicated to footnotes and bibliography
alone.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-30-1&quot;&gt;&lt;a href=&quot;#fn-30&quot;&gt;30&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; In an issue swimming in contentious Instagram infographics,
Schwartz and Wilf have brought the receipts.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-31-1&quot;&gt;&lt;a href=&quot;#fn-31&quot;&gt;31&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; In doing so, however,
they interweave theory, history, and proscribed solutions in a manner
that leaves the reader with a significantly improved understanding of
the conflict but great difficulty summing up this new knowledge. The
book desperately needs a more linear structure.&lt;&#x2F;p&gt;
&lt;p&gt;Additionally, assertions about Palestinian thought are found throughout
the book and can be difficult to prove true or false. How would one go
about assessing the claim that “the Palestinians’ commitment to the idea
that they are still refugees and also possess a right of return to the
state of Israel is deeply embedded in the Palestinian identity and its
collective ethos?”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-32-1&quot;&gt;&lt;a href=&quot;#fn-32&quot;&gt;32&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Schwartz and Wilf proffer that it “is an issue
on which no Palestinian political opposition or dissent exists,” which
is perhaps as good a proxy as you will find.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-33-1&quot;&gt;&lt;a href=&quot;#fn-33&quot;&gt;33&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; I don’t necessarily
doubt that it is correct that there is a cultural narrative of
“perpetual injustice” in the Palestinian camp, but I am cognizant of the
fact that it is difficult to prove definitively. The book’s arguments
are made weaker by their occasional reliance on alleged Palestinian
beliefs, as opposed to evidence of action.&lt;&#x2F;p&gt;
&lt;p&gt;Furthermore, the book’s critique of the West—which we are led to believe
by the subtitle will be severe—is, in essence, that it has failed to
sufficiently counter anti-Israel extremism in the Arab world. The book
makes a compelling argument that this is the case, and that
“geostrategic interests” (read: oil) have muddled what would otherwise
be clear opposition to an ideology that seeks to eliminate a UN member
state.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-34-1&quot;&gt;&lt;a href=&quot;#fn-34&quot;&gt;34&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Still, this strikes me as a somewhat confusing target for
criticism in this case when it may be more appropriate to condemn the
Arab extremists themselves.&lt;&#x2F;p&gt;
&lt;p&gt;With that said: this book managed to significantly change my thinking on
the conflict. As someone who thinks about this a fair amount, I would
consider that on its face to be a significant endorsement. If that’s not
enough of an endorsement, here’s another one: you should probably read
this book. I now realize that I did not at all understand the
Palestinian refugee issue before reading this book, and in its aftermath
feel confident and prepared in its discussion. Schwartz and Wilf did not
challenge my fundamental view of the conflict, but they gave me a much
clearer understanding of the refugee issue, which has profound
implications.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;The War of Return&lt;&#x2F;em&gt; has been a timely read ever since its publication.
Indeed, in the ensuing years, very few of the foundational facts and
conditions it addresses have experienced any shift; the Arab-Israeli
conflict had reached somewhat of a standstill.&lt;&#x2F;p&gt;
&lt;p&gt;It is the “fervent hope [of Schwartz and Wilf] that in writing this book
[they] contribute in a meaningful way to real and lasting peace.” As
such, their proposals need adjustment.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-35-1&quot;&gt;&lt;a href=&quot;#fn-35&quot;&gt;35&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; With the outbreak of the
Israel-Hamas War in the aftermath of October 7th, there is potential for
a serious shift in the history of the conflict.&lt;&#x2F;p&gt;
&lt;p&gt;After the war is over, there may be an opportunity—for the first time in
a long time—for meaningful change. The parties must move quickly to
final-status negotiations, to bring a conclusion to the violence that
has plagued our peoples for decades. We can no longer think about slow
change. Two states, for two peoples, as originally envisioned by the
United Nations in 1947 as “lawful, moral, and legitimate” solution.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-36-1&quot;&gt;&lt;a href=&quot;#fn-36&quot;&gt;36&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
In order for that to happen we must be guided, in part, by the book’s
total refusal of the right of return:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;When Palestinians complain that recognizing a Jewish state means
relinquishing the right of return, the response should be, “Yes, that
is exactly what it means.”&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-37-1&quot;&gt;&lt;a href=&quot;#fn-37&quot;&gt;37&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;If indeed we stand, surrounded by violence, on the precipice of
peace—the storm before the calm, if you will—then this book stands to be
more relevant than ever.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;In the interest of full transparency, I will admit here that the
subtitle begins with the word “How,” which I have not included in the
quotation for the purpose of sentence flow. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;Literal, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;literal.club&#x2F;book&#x2F;the-war-of-return-24grq&quot;&gt;“The War of Return”&lt;&#x2F;a&gt;. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-3&quot;&gt;
&lt;p&gt;Schwartz and Wilf, &lt;em&gt;The War of Return&lt;&#x2F;em&gt;, 55 &lt;a href=&quot;#fr-3-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-4&quot;&gt;
&lt;p&gt;As you read this review, you may find yourself confused, thinking:
“These citations seem to imply that &lt;em&gt;War of Return&lt;&#x2F;em&gt; has thousands of
pages. That seems unlikely.” You would be correct. I read &lt;em&gt;War of
Return&lt;&#x2F;em&gt; on a Kindle, and thus have had great difficulty finding stable
page numbers. Instead, I have provided a “location.” You may ask
yourself: “How do I use a location?” To which I respond, “This is a
question for Amazon.” For now, I will simply apologize in advance. &lt;a href=&quot;#fr-4-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-5&quot;&gt;
&lt;p&gt;Schwartz and Wilf, &lt;em&gt;The War of Return&lt;&#x2F;em&gt;, 131. &lt;a href=&quot;#fr-5-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-6&quot;&gt;
&lt;p&gt;Id. at 148. &lt;a href=&quot;#fr-6-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-7&quot;&gt;
&lt;p&gt;This is just definitional—you’d get outvoted. You can also look at
historical examples: there was no self-determination by Jews in Arab
countries, or the United States, or anywhere else that Jews lived. One
needs a majority. &lt;a href=&quot;#fr-7-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-8&quot;&gt;
&lt;p&gt;Schwartz and Wilf, &lt;em&gt;The War of Return&lt;&#x2F;em&gt;, 761. &lt;a href=&quot;#fr-8-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-9&quot;&gt;
&lt;p&gt;Id. at 2448. &lt;a href=&quot;#fr-9-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-10&quot;&gt;
&lt;p&gt;Id. at 2961. &lt;a href=&quot;#fr-10-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-11&quot;&gt;
&lt;p&gt;It is left unaddressed how fledgling Israel would have handled a
much larger Arab minority. In the modern day, Israeli Arabs make up
around 20% of the population. &lt;a href=&quot;#fr-11-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-12&quot;&gt;
&lt;p&gt;Schwartz and Wilf, &lt;em&gt;The War of Return&lt;&#x2F;em&gt;, 387. &lt;a href=&quot;#fr-12-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-13&quot;&gt;
&lt;p&gt;Id. at 436. &lt;a href=&quot;#fr-13-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-14&quot;&gt;
&lt;p&gt;Id. at 907. &lt;a href=&quot;#fr-14-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-15&quot;&gt;
&lt;p&gt;Id. at 416. &lt;a href=&quot;#fr-15-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-16&quot;&gt;
&lt;p&gt;Id. at 496. &lt;a href=&quot;#fr-16-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-17&quot;&gt;
&lt;p&gt;Id. at 1398. &lt;a href=&quot;#fr-17-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-18&quot;&gt;
&lt;p&gt;Id. at 2961. &lt;a href=&quot;#fr-18-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-19&quot;&gt;
&lt;p&gt;Id. at 1631. &lt;a href=&quot;#fr-19-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-20&quot;&gt;
&lt;p&gt;Id. at 1329. &lt;a href=&quot;#fr-20-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-21&quot;&gt;
&lt;p&gt;Id. at 1474. &lt;a href=&quot;#fr-21-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-22&quot;&gt;
&lt;p&gt;Id. at 1953. &lt;a href=&quot;#fr-22-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-23&quot;&gt;
&lt;p&gt;Id. at 2248. &lt;a href=&quot;#fr-23-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-24&quot;&gt;
&lt;p&gt;Id. at 3559. &lt;a href=&quot;#fr-24-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-25&quot;&gt;
&lt;p&gt;Id. at 3785. &lt;a href=&quot;#fr-25-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-26&quot;&gt;
&lt;p&gt;Id. at 3516. &lt;a href=&quot;#fr-26-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-27&quot;&gt;
&lt;p&gt;Id. at 2065. &lt;a href=&quot;#fr-27-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-28&quot;&gt;
&lt;p&gt;Id. at 2496. &lt;a href=&quot;#fr-28-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-29&quot;&gt;
&lt;p&gt;I would like to note, at this point, that there is a lot more to
say about UNRWA. In fact, there are probably several books worth of
things to be said about UNRWA. If you want to read one such book, you
should definitely read &lt;em&gt;War of Return&lt;&#x2F;em&gt;! There are comparisons of budget
details and staffing numbers between UNRWA and UNHCR, analysis of the
success of other major UN revitalization agencies like UNKRA and why
that didn’t happen with UNRWA, and more. But, for the purpose of this
review, we have to move on. Apologies. &lt;a href=&quot;#fr-29-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-30&quot;&gt;
&lt;p&gt;I love footnotes. I especially like when they are humorous,
instead of just page citations, which I realize this review—much like
&lt;em&gt;War of Return&lt;&#x2F;em&gt; itself—lacks. So here is one in compensation. &lt;a href=&quot;#fr-30-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-31&quot;&gt;
&lt;p&gt;Including but not limited to archives from the UN, Israel, US,
UK, and Al Jareeza’s Palestine Papers, interviews with high-ranking
Israeli politicians and military figures, and a wealth of books,
articles, reports, and position papers from throughout the conflict’s
long history. &lt;a href=&quot;#fr-31-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-32&quot;&gt;
&lt;p&gt;Schwartz and Wilf, &lt;em&gt;The War of Return&lt;&#x2F;em&gt;, 3246 &lt;a href=&quot;#fr-32-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-33&quot;&gt;
&lt;p&gt;Ibid. &lt;a href=&quot;#fr-33-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-34&quot;&gt;
&lt;p&gt;Id. at 1309. &lt;a href=&quot;#fr-34-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-35&quot;&gt;
&lt;p&gt;One such adjustment, if Schwartz and Wilf are taking suggestions,
would be to address the rise of the new Israeli right. Netanyahu’s
current government contains a minister with a conviction for terrorism;
their book was published before this latest example of extremism from
the Jewish side, and I would hope an updated version would address this. &lt;a href=&quot;#fr-35-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-36&quot;&gt;
&lt;p&gt;Schwartz and Wilf, &lt;em&gt;The War of Return&lt;&#x2F;em&gt;, 1006. &lt;a href=&quot;#fr-36-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-37&quot;&gt;
&lt;p&gt;Id. at 3408. &lt;a href=&quot;#fr-37-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>James Hoffmann x Bellwether Coffee</title>
    <published>2023-08-18T00:00:00+00:00</published>
    <updated>2023-08-18T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/hoffmann-bellwether/" type="text/html"/>
    <id>https://figbert.com/posts/hoffmann-bellwether/</id>
    <content type="html">
      &lt;p&gt;Today, I’m going to talk about &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=qV0bJHizJBA&quot;&gt;this video&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;A short time ago, I found myself on the Stanford University campus. I
grabbed a quick bite to eat at &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tootsiesbarn.com&#x2F;location&#x2F;tootsies&#x2F;&quot;&gt;Tootsies&lt;&#x2F;a&gt;. Against the wall, I noticed a
large black-and-white machine. It had an almost Apple-esque minimalism,
with brass details accentuating its design. I was fascinated, and
appreciatively took note of its &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bellwethercoffee.com&#x2F;&quot;&gt;Bellwether Coffee&lt;&#x2F;a&gt; insignia. I figured
it likely originated with one of the area’s indigenous startup fauna.&lt;&#x2F;p&gt;
&lt;p&gt;Not long after, I saw a video pop up in my YouTube subscriptions by one
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.jameshoffmann.co.uk&#x2F;&quot;&gt;James Hoffmann&lt;&#x2F;a&gt;. I’m not terribly engaged in the world of coffee, but
I do quite like James.&lt;&#x2F;p&gt;
&lt;p&gt;Lo and behold, the video began and James Hoffmann was sitting atop a
Bellwether Roaster! Glorious. I thoroughly enjoyed the video, drafted up
a blog post in appreciation of the gleeful coincidence, and here I am
half a year later publishing it.&lt;&#x2F;p&gt;
&lt;p&gt;If you haven’t seen the video yet, I beg you &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=qV0bJHizJBA&quot;&gt;give it a watch.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Here’s to serendipity.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Spies of No Country</title>
    <published>2023-07-28T00:00:00+00:00</published>
    <updated>2023-07-28T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/spies-of-no-country/" type="text/html"/>
    <id>https://figbert.com/reading/spies-of-no-country/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;Spies of No Country&lt;&#x2F;i&gt; by Matti Friedman. &lt;br&#x2F;&gt;
        Finished on July 28, 2023. &lt;br&#x2F;&gt;
        
        Rating: ★★★★☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      
    </content>
  </entry>
  <entry xml:lang="en">
    <title>The Thousand Crimes of Ming Tsu</title>
    <published>2023-03-09T00:00:00+00:00</published>
    <updated>2023-03-09T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/thousand-crimes-ming-tsu/" type="text/html"/>
    <id>https://figbert.com/reading/thousand-crimes-ming-tsu/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;The Thousand Crimes of Ming Tsu&lt;&#x2F;i&gt; by Tom Lin. &lt;br&#x2F;&gt;
        Finished on March 09, 2023. &lt;br&#x2F;&gt;
        
        Rating: ★★★★★ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      
    </content>
  </entry>
  <entry xml:lang="en">
    <title>Movies I Saw Other People Watching on the Plane</title>
    <published>2023-01-21T00:00:00+00:00</published>
    <updated>2023-02-18T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/people-watching-on-the-plane/" type="text/html"/>
    <id>https://figbert.com/posts/people-watching-on-the-plane/</id>
    <content type="html">
      &lt;p&gt;Everybody has to entertain themselves somehow on fifteen hour flights.
Some people watch movies. I watch people watch movies and make a list of
them to post on my blog.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Bullet Train&lt;&#x2F;strong&gt;&lt;&#x2F;summary&gt;
  I like this movie, good on you whoever you are.
&lt;&#x2F;details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Don&#x27;t Worry Darling&lt;&#x2F;strong&gt;&lt;&#x2F;summary&gt;
  Been on the periphery of my watchlist for a minute now. From my
  limited perspective watching without sound on a tiny plane screen made
  even smaller by the fact that it&#x27;s someone else&#x27;s sitting down the
  aisle, it has compelling visuals. Going to move it up on my list.
&lt;&#x2F;details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Mud, Sweat, and Beards&lt;&#x2F;strong&gt;&lt;&#x2F;summary&gt;
  Uhhh...
&lt;&#x2F;details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Lightyear&lt;&#x2F;strong&gt;&lt;&#x2F;summary&gt;
  I want to give this a try, but I&#x27;m fairly certain that I&#x27;m going to
  stop before I finish it because it&#x27;ll feel like a waste of my life.
&lt;&#x2F;details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;
    Stanley Tucci Searching for Italy
  &lt;&#x2F;strong&gt;&lt;&#x2F;summary&gt;
  This might actually be titled &lt;em&gt;Umbria&lt;&#x2F;em&gt;. Seems rather pleasant
  in any case.
&lt;&#x2F;details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Where The Crawdads Sing&lt;&#x2F;strong&gt;&lt;&#x2F;summary&gt;
  I feel like I&#x27;ve heard of this but I have no idea what it actually is.
&lt;&#x2F;details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;
    The Movie Where Idris Elba is a Sex Genie for the Older White Woman
  &lt;&#x2F;strong&gt;&lt;&#x2F;summary&gt;
  This movie is called &lt;em&gt;Three Thousand Years of Longing&lt;&#x2F;em&gt;. Tip of
  my tongue, I swear!
&lt;&#x2F;details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;
    The Movie Where Liam Neeson (I Think?) Makes the Classic Meme Phone
    Threat
  &lt;&#x2F;strong&gt;&lt;&#x2F;summary&gt;
  IGN says this is called &lt;em&gt;Taken&lt;&#x2F;em&gt;.
&lt;&#x2F;details&gt;
&lt;p&gt;The &lt;code&gt;&amp;lt;details&amp;gt;&lt;&#x2F;code&gt; element is really fun and I should use it more. Though
it does lead to a scary amount of &lt;code&gt;HTML&lt;&#x2F;code&gt; in my Markdown.&lt;&#x2F;p&gt;
&lt;p&gt;There are four hours left on this return flight and I’ve expended all
the blog post ideas that I came up with on the flight over. Going to
have to find something else to do now.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Naftali Bennett&#x27;s Inspirations</title>
    <published>2023-01-20T00:00:00+00:00</published>
    <updated>2023-01-20T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/naftali-bennett-inspirations/" type="text/html"/>
    <id>https://figbert.com/posts/naftali-bennett-inspirations/</id>
    <content type="html">
      &lt;p&gt;I recently had the opportunity to meet former Israeli prime minister
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Naftali_Bennett&quot;&gt;Naftali Bennett&lt;&#x2F;a&gt;. This was very fun and rather unexpected!&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;During my time with Bennett, he was asked about his “top three
inspirations as a leader.” A bit template-y of a question, but I found
his answer to be an interesting list—so I’ve recorded it here for
posterity:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;David Ben-Gurion&lt;&#x2F;li&gt;
&lt;li&gt;Anwar Sadat&lt;&#x2F;li&gt;
&lt;li&gt;Lee Kuan Yew&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Perhaps I should go into journalism.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Neuromancer</title>
    <published>2022-11-29T00:00:00+00:00</published>
    <updated>2022-11-29T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/neuromancer/" type="text/html"/>
    <id>https://figbert.com/reading/neuromancer/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;Neuromancer&lt;&#x2F;i&gt; by William Gibson. &lt;br&#x2F;&gt;
        Finished on November 29, 2022. &lt;br&#x2F;&gt;
        
        Rating: ★★★★★ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      
    </content>
  </entry>
  <entry xml:lang="en">
    <title>Who by Fire</title>
    <published>2022-11-22T00:00:00+00:00</published>
    <updated>2022-11-22T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/who-by-fire/" type="text/html"/>
    <id>https://figbert.com/reading/who-by-fire/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;Who by Fire&lt;&#x2F;i&gt; by Matti Friedman. &lt;br&#x2F;&gt;
        Finished on November 22, 2022. &lt;br&#x2F;&gt;
        
        Rating: ★★★★★ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      
    </content>
  </entry>
  <entry xml:lang="en">
    <title>Moonwalking with Einstein</title>
    <published>2022-11-20T00:00:00+00:00</published>
    <updated>2022-11-20T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/moonwalking-with-einstein/" type="text/html"/>
    <id>https://figbert.com/reading/moonwalking-with-einstein/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;Moonwalking with Einstein&lt;&#x2F;i&gt; by Joshua Foer. &lt;br&#x2F;&gt;
        Finished on November 20, 2022. &lt;br&#x2F;&gt;
        
        Rating: ★★★☆☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      
    </content>
  </entry>
  <entry xml:lang="en">
    <title>The Desert and the Sea</title>
    <published>2022-10-15T00:00:00+00:00</published>
    <updated>2022-10-15T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/reading/desert-and-the-sea/" type="text/html"/>
    <id>https://figbert.com/reading/desert-and-the-sea/</id>
    <content type="html">
      &lt;small&gt;
        &lt;i&gt;The Desert and the Sea&lt;&#x2F;i&gt; by Michael Scott Moore. &lt;br&#x2F;&gt;
        Finished on October 15, 2022. &lt;br&#x2F;&gt;
        
        Rating: ★★★★☆ &lt;br&#x2F;&gt;
        
      &lt;&#x2F;small&gt;
      
    </content>
  </entry>
  <entry xml:lang="en">
    <title>Pomegranate Seeds</title>
    <published>2022-09-29T00:00:00+00:00</published>
    <updated>2022-09-29T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/pomegranate-ux/" type="text/html"/>
    <id>https://figbert.com/posts/pomegranate-ux/</id>
    <content type="html">
      &lt;p&gt;Just before the start of Rosh Hashanah, I found myself standing over a
kitchen sink. To my left, two pomegranates sat next to a large stainless
steel knife atop a cutting board. Ahead of me, resting in the sink, was
a bowl brimming with water.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;To harvest the seeds of a pomegranate, you first cut the fruit into
quarters. These wedges are then submerged in water, where you basically
fidget with the fruit until the segments detach. The red,
semi-translucent seeds sink to the bottom of the bowl while the
white-brown excess floats to the top to be conveniently discarded.&lt;&#x2F;p&gt;
&lt;p&gt;On this particular afternoon, I was in a bit of a rush: I needed seeds
quickly. I threw a couple wedges into the bowl, and started working on
one of them. I finished the wedge and tossed the skin aside.&lt;&#x2F;p&gt;
&lt;p&gt;Without really looking around, I reached out, unfocused, into the waters
of the bowl. After a few seconds, I paused and stared down at the
pomegranate in my hands.&lt;&#x2F;p&gt;
&lt;p&gt;I hadn’t put any thought into the motion. I reached out my hand, and
must have been subconsciously tracking the movement of the wedge.
Completely on instinct, I had found a second wedge.&lt;&#x2F;p&gt;
&lt;p&gt;The experience was so seamless it left me mildly startled, observing it
after the fact.&lt;&#x2F;p&gt;
&lt;p&gt;Some keyboard-based programs give the feeling of interfacing directly
with technology, a near echo of the instinctive feeling of working with
your hands. VR and AR aren’t there yet, but the applications are fairly
self-evident.&lt;&#x2F;p&gt;
&lt;p&gt;Startlingly seamless is a good experience to aim for as developers.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Mabel</title>
    <published>2022-09-29T00:00:00+00:00</published>
    <updated>2022-09-29T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/mabel/" type="text/html"/>
    <id>https://figbert.com/projects/mabel/</id>
    <content type="html">
      &lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;smmr-software&#x2F;mabel&quot;&gt;&lt;strong&gt;Mabel&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; is a fancy BitTorrent client for the terminal. Programmed in
performant and memory-safe &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;go.dev&quot;&gt;Go&lt;&#x2F;a&gt;, the TUI is the torrenting
state-of-the-art on macOS and Linux (and anywhere UNIX-y).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;mabel&#x2F;default.png&quot; alt=&quot;Mabel downloading several Linux distros&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Keyboard-centric, terminal-based workflows provide developers with a
sense of focus and control unparalleled by the GUI. In my personal use
of such programs (like &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&quot;&gt;NeoVim&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;makeworld-the-better-one&#x2F;amfora&quot;&gt;Amfora&lt;&#x2F;a&gt;, and many others), I noticed a
distinct lack of functional torrent clients: existing options were
dated, spewed logs to &lt;code&gt;stdout&lt;&#x2F;code&gt;, and proved generally disappointing.
Mabel modernizes torrenting from the command line.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;mabel&#x2F;desert.png&quot; alt=&quot;Mabel inspecting the details of an active download&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Mabel builds on the excellent work of many others in the open-source
community, like &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;charm.sh&quot;&gt;Charm&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;anacrolix&#x2F;torrent&quot;&gt;anacrolix&lt;&#x2F;a&gt;. It’s the second public release
of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;smmr.software&#x2F;&quot;&gt;SMMR Software&lt;&#x2F;a&gt;, a collaboration between &lt;a href=&quot;&#x2F;&quot;&gt;FIGBERT&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jacobneplokh.com&#x2F;&quot;&gt;Jacob
Neplokh&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Mabel is available through a package manager near you. For more, explore
the source code &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;smmr-software&#x2F;mabel&quot;&gt;on GitHub&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Aggregation Theory, Virtuous Cycles, and Nitter</title>
    <published>2022-06-27T00:00:00+00:00</published>
    <updated>2022-06-27T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/aggregation-theory-nitter/" type="text/html"/>
    <id>https://figbert.com/posts/aggregation-theory-nitter/</id>
    <content type="html">
      &lt;p&gt;In 2015, Ben Thompson first proposed &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stratechery.com&#x2F;2015&#x2F;aggregation-theory&#x2F;&quot;&gt;Aggregation Theory&lt;&#x2F;a&gt; in an article
by the same name. He argues, in short, that the internet “has
fundamentally changed the plane of competition,” in that in our era,
“the most important factor determining success is the user experience.”
Why is it then, that YouTube and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ognjen.io&#x2F;reddits-disrespectful-design&#x2F;&quot;&gt;Reddit&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;annoying.technology&#x2F;posts&#x2F;e6901c0ea272f57d&#x2F;&quot;&gt;Twitter&lt;&#x2F;a&gt; all… suck?&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;The answer, I believe, lies just a sentence later in the article:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;… the best distributors&#x2F;aggregators&#x2F;market-makers win by providing
the best experience, which earns them the most consumers&#x2F;users, which
attracts the most suppliers, which enhances the user experience in a
virtuous cycle.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;When YouTube first launched in 2005, it provided users with a vastly
better experience than anything else available at the time. No longer
did you have to download videos via &lt;code&gt;BitTorrent&lt;&#x2F;code&gt; or &lt;code&gt;ftp&lt;&#x2F;code&gt; (or however
else one procured &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=jNQXAC9IVRw&quot;&gt;elephant videos&lt;&#x2F;a&gt; back in the day): now you could
stream them on the web.&lt;&#x2F;p&gt;
&lt;p&gt;17 years have passed since then, and the world is a much different
place. YouTube is the king of video on the internet. And yet, your
browser’s default &lt;code&gt;&amp;lt;video&amp;gt;&lt;&#x2F;code&gt; tag provides a way better experience than
the slow and clunky YouTube player.&lt;&#x2F;p&gt;
&lt;p&gt;The story is much the same for similar giants. Reddit was founded
alongside YouTube in 2005, Twitter a year later. Both websites are
slow, practically unusable on mobile, and heavily limited for those
without an account.&lt;&#x2F;p&gt;
&lt;p&gt;One would think that if success was truly predicated on a better user
experience, such glaring flaws would lead to other platforms “winning”
by simply providing a better UX. We can see glimpses of what this might
look like with alternative front-ends, like &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;teddit&#x2F;teddit&quot;&gt;teddit&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zedeus&#x2F;nitter&quot;&gt;Nitter&lt;&#x2F;a&gt;, which
wrap around the existing platforms while massively cutting down on bloat
– providing an objectively better UX. Nevertheless, YouTube and friends
remain on top.&lt;&#x2F;p&gt;
&lt;p&gt;The pivotal realization here lies in the second half of Thompson’s
paragraph quoted above: the idea that having a better UX grows the
initial userbase of an aggregator, and that &lt;em&gt;having those users&lt;&#x2F;em&gt;
enhances the experience for future users (who further improve the
experience, attracting more users, and so on and so on).&lt;&#x2F;p&gt;
&lt;p&gt;YouTube and Reddit and Twitter had a better UX than their competitors in
the early 2000s, and attracted millions of users in the ensuing decades.&lt;&#x2F;p&gt;
&lt;p&gt;Now the moat is too big for alternative platforms to overcome – no new
startups have yet built a user experience more attractive than YouTube’s
2.5 billion users.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>d3c3nt</title>
    <published>2022-02-19T00:00:00+00:00</published>
    <updated>2022-06-15T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/d3c3nt/" type="text/html"/>
    <id>https://figbert.com/projects/d3c3nt/</id>
    <content type="html">
      &lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;d3c3nt.figbert.com&quot;&gt;&lt;strong&gt;d3c3nt&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; is a simple, clean, and flexible theme for &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&quot;&gt;Zola&lt;&#x2F;a&gt;. The
theme evolved from use on my site, made with vanilla CSS and HTML – and
completely sans Javascript. All in all, it’s fairly… decent.&lt;&#x2F;p&gt;
&lt;p&gt;d3c3nt styles common HTML elements like headers, paragraphs, and lists;
plus semantic elements like blockquotes, tables, abbreviations, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;d3c3nt.figbert.com&#x2F;posts&#x2F;markdown-syntax&#x2F;&quot;&gt;and
more&lt;&#x2F;a&gt;. It also provides &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;d3c3nt.figbert.com&#x2F;posts&#x2F;rich-content&#x2F;&quot;&gt;custom shortcodes&lt;&#x2F;a&gt; to incorporate modern web
elements in your markdown.&lt;&#x2F;p&gt;
&lt;p&gt;To see the theme in action, poke around &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;d3c3nt.figbert.com&quot;&gt;the demo instance&lt;&#x2F;a&gt;
– and explore the source code &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git.figbert.com&#x2F;d3c3nt&#x2F;&quot;&gt;on my forge&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Privacy Redirect for Safari</title>
    <published>2021-08-14T00:00:00+00:00</published>
    <updated>2022-09-22T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/privacy-redirect-for-safari/" type="text/html"/>
    <id>https://figbert.com/projects/privacy-redirect-for-safari/</id>
    <content type="html">
      &lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;smmr-software&#x2F;privacy-redirect-safari&#x2F;&quot;&gt;&lt;strong&gt;Privacy Redirect for Safari&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; is a web extension that automatically
redirects sites to alternative front-ends like &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zedeus&#x2F;nitter&quot;&gt;Nitter&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;teddit&#x2F;teddit&quot;&gt;Teddit&lt;&#x2F;a&gt;.
These front-ends provide users with ways to access the content of
popular platforms, without exploiting your private information. Until
now, extensions that could redirect to these front-ends were limited to
users of Chrome and Firefox. Privacy Redirect for Safari expands this
functionality to Apple’s native browser.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;privacy-redirect-for-safari&#x2F;macos.jpg&quot; alt=&quot;Privacy Redirect for Safari running on MacOS Monterey&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Unlike other browsers, for many years Safari did not encourage the
development of extensions. However, recent updates from Apple have
signaled a change in direction, and useful extensions for Safari can
finally be developed. Privacy Redirect for Safari is one of the first of
this new wave of extensions.&lt;&#x2F;p&gt;
&lt;p&gt;Privacy Redirect for Safari is the first step in creating a wealth of
high-quality extensions for Safari. It’s built with the latest and
greatest in Apple technologies, like SwiftUI and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.apple.com&#x2F;documentation&#x2F;safariservices&#x2F;safari_web_extensions&quot;&gt;Safari Web
Extensions&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;privacy-redirect-for-safari&#x2F;twitter.jpg&quot; alt=&quot;Privacy Redirect for Safari next to a Safari window open to Nitter&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Privacy Redirect for Safari is a fork of Simon Brazell’s &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;SimonBrazell&#x2F;privacy-redirect&quot;&gt;Chrome and
Firefox extension&lt;&#x2F;a&gt;, porting the extension’s functionality to Safari.
It solves one of the most frustrating problems with front-ends like
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zedeus&#x2F;nitter&quot;&gt;Nitter&lt;&#x2F;a&gt; – the need to manually edit links – by having the browser
edit them for you.&lt;&#x2F;p&gt;
&lt;p&gt;Privacy Redirect for Safari is the first public release of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;smmr.software&#x2F;&quot;&gt;SMMR
Software&lt;&#x2F;a&gt;, a collaboration between &lt;a href=&quot;&#x2F;&quot;&gt;FIGBERT&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jacobneplokh.com&#x2F;&quot;&gt;Jacob Neplokh&lt;&#x2F;a&gt;. It’s
currently available for Mac, iPhone, and iPad.&lt;&#x2F;p&gt;
&lt;p&gt;Download the app &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.apple.com&#x2F;us&#x2F;app&#x2F;privacy-redirect&#x2F;id1578144015&quot;&gt;on the App Store&lt;&#x2F;a&gt;, and explore the source
code &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;smmr-software&#x2F;privacy-redirect-safari&#x2F;&quot;&gt;on GitHub&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>SimplyTranslate</title>
    <published>2021-07-02T00:00:00+00:00</published>
    <updated>2022-09-22T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/simply-translate/" type="text/html"/>
    <id>https://figbert.com/projects/simply-translate/</id>
    <content type="html">
      &lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;simple-web.org&#x2F;projects&#x2F;simplytranslate.html&quot;&gt;&lt;strong&gt;SimplyTranslate&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; is a collection of “translation scrapers with
interfaces for gemini and the web,” made by &lt;a href=&quot;gemini:&#x2F;&#x2F;metalune.xyz&quot;&gt;metalune&lt;&#x2F;a&gt;. In other words,
it’s a privacy-respecting front end for Google Translate, similar to
Twitter’s &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zedeus&#x2F;nitter&quot;&gt;Nitter&lt;&#x2F;a&gt;. Over the course of a couple days – and one
synchronous hacking session – I containerized the program to make it
easier to deploy on servers worldwide.&lt;&#x2F;p&gt;
&lt;p&gt;When I first found the program, I immediately wanted to add it to my
collection of self-hosted front ends. I had only one problem: I run my
services with Docker, and SimplyTranslate had no Dockerfile. I tried
slapping something together quickly, but curling from the container only
threw an error:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;curl: (52) Empty reply from server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I hopped onto the &lt;code&gt;#simple-web&lt;&#x2F;code&gt; IRC channel on &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;libera.chat&quot;&gt;Libera.Chat&lt;&#x2F;a&gt; and started
chatting with the devs. A couple days of back-and-forth later, we sat
down to debug together. After scouring the internet, we determined that
the application was binding to the wrong interface: &lt;code&gt;127.0.0.1&lt;&#x2F;code&gt;, which
is only accessible from the local machine, instead of &lt;code&gt;0.0.0.0&lt;&#x2F;code&gt;, which
is public.&lt;&#x2F;p&gt;
&lt;p&gt;I cooked up a pair of working Dockerfiles – the first running the app
directly and the second through &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.uvicorn.org&quot;&gt;uvicorn&lt;&#x2F;a&gt;. Metalune made a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;SimpleWeb&#x2F;SimplyTranslate-Docker&quot;&gt;repo for the
Dockerfiles&lt;&#x2F;a&gt;, and I sent in a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lists.sr.ht&#x2F;~metalune&#x2F;simplytranslate-devel&#x2F;patches&#x2F;23516&quot;&gt;patch via email&lt;&#x2F;a&gt;. It was
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;SimpleWeb&#x2F;SimplyTranslate-Docker&#x2F;commit&#x2F;4fc34e3503def3a8436dab4f84a1731070a715ba&quot;&gt;committed&lt;&#x2F;a&gt; within the hour.&lt;&#x2F;p&gt;
&lt;p&gt;This contribution was particularly interesting! We collaborated over IRC
and across timezones, and I ended up returning to git’s roots by
submitting the patch via &lt;code&gt;git send-email&lt;&#x2F;code&gt;. Compared to the GitHub
workflow, this feels very natural!&lt;&#x2F;p&gt;
&lt;p&gt;You can use SimplyTranslate over on metalune’s &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;simplytranslate.org&quot;&gt;hosted instance&lt;&#x2F;a&gt;, and
browse the source code &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;SimpleWeb&quot;&gt;on Codeberg&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>An Update on Bad Backups and Internet Celebrity</title>
    <published>2021-06-27T00:00:00+00:00</published>
    <updated>2022-06-15T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/backups-update-internet-celebrity/" type="text/html"/>
    <id>https://figbert.com/posts/backups-update-internet-celebrity/</id>
    <content type="html">
      &lt;p&gt;My recent post on the &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;wrong-way-to-switch-server-os&#x2F;&quot;&gt;Great Alpine Migration Tragedy&lt;&#x2F;a&gt; of 2021 garnered
some serious attention! I got a number of emails, a whole host of
feedback on &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lobste.rs&#x2F;s&#x2F;ofcfbq&#x2F;wrong_way_switch_operating_systems_on&quot;&gt;Lobste.rs&lt;&#x2F;a&gt;, and over &lt;strong&gt;100 points&lt;&#x2F;strong&gt; on &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=27562613&quot;&gt;Hacker News&lt;&#x2F;a&gt;! As I
understand it, that means I’m now a top internet celebrity (and eligible
for the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;10kbclub.com&quot;&gt;10 KB Club&lt;&#x2F;a&gt;). Still, I must remain humble even as I catapult
toward digital infamy and thus I am here to respond to feedback, answer
questions, and talk about what I’ve done to prevent something like this
from happening again.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;useful-tips-from-strangers&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#useful-tips-from-strangers&quot; aria-label=&quot;Anchor link for: useful-tips-from-strangers&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Useful Tips from Strangers&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;ctrl-c-is-not-a-debugging-tool&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ctrl-c-is-not-a-debugging-tool&quot; aria-label=&quot;Anchor link for: ctrl-c-is-not-a-debugging-tool&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Ctrl-C is Not a Debugging Tool&lt;&#x2F;h3&gt;
&lt;p&gt;That’s a good point: I’ve been advised to update my methods. Several
folks pointed me towards &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jvns.ca&#x2F;blog&#x2F;2021&#x2F;04&#x2F;03&#x2F;what-problems-do-people-solve-with-strace&#x2F;&quot;&gt;&lt;code&gt;strace&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. Sending the &lt;code&gt;SIGUSR1&lt;&#x2F;code&gt; or &lt;code&gt;SIGINFO&lt;&#x2F;code&gt;
signal to Tarsnap would also work. The &lt;code&gt;-v&lt;&#x2F;code&gt; flag could have been
helpful as well.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;don-t-wipe-prematurely&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#don-t-wipe-prematurely&quot; aria-label=&quot;Anchor link for: don-t-wipe-prematurely&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Don’t Wipe Prematurely&lt;&#x2F;h3&gt;
&lt;p&gt;A number of folks were confused as to why I didn’t keep the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lobste.rs&#x2F;s&#x2F;ofcfbq&#x2F;wrong_way_switch_operating_systems_on#c_sfwzdq&quot;&gt;old
machine&lt;&#x2F;a&gt; around during the transition. Others detailed their own
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=27596126&quot;&gt;migration strategies&lt;&#x2F;a&gt;. In general, it seems that folks agree
you should keep around your old machine until you’re totally certain
everything is up and running in your new setup.&lt;&#x2F;p&gt;
&lt;p&gt;As I mention briefly in the article, I’ve actually done this in the past
myself! This time, however, there was no second server. Everything was
done in-place. I cannot change this, as it occurred in the past. In the
future I will avoid this kind of migration.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;a-restore-system&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-restore-system&quot; aria-label=&quot;Anchor link for: a-restore-system&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
A Restore System&lt;&#x2F;h3&gt;
&lt;p&gt;A number of people took issue with my take-aways from the experience.
See:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Trying to address a lack of confidence by increasing the backup
frequency doesn’t make sense. The backup frequency is the most trivial
thing to adjust and doesn’t address deeper issues, like the fact that
you need to dump&#x2F;restore databases properly and shouldn’t copy files
from a live database.&lt;&#x2F;p&gt;
&lt;p&gt;by &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=27596126&quot;&gt;klodolph&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I’ll start by saying that that increasing backup frequency from zero to
anything greater than zero does, in fact, address a significant issue. I
now have backups where there were none before.&lt;&#x2F;p&gt;
&lt;p&gt;Still, the point stands. Without quality backups, and quality restore
strategies, the backups are not as useful as they could be.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;a-little-bit-of-gold-and-a-pager&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-little-bit-of-gold-and-a-pager&quot; aria-label=&quot;Anchor link for: a-little-bit-of-gold-and-a-pager&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
A Little Bit of Gold and a Pager&lt;&#x2F;h3&gt;
&lt;p&gt;There was some fun memeing in the Hacker News comments in response to me
being a teenager. Specifically, wildmanx said that they &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=27597216&quot;&gt;wouldn’t hire
me for their “company IT or devops or whatnot.”&lt;&#x2F;a&gt;. Several people
have a sense of humour:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Good idea to let him graduate from highschool before hiring him!&lt;&#x2F;p&gt;
&lt;p&gt;by &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=27597698&quot;&gt;nick__m&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I’ll add for further memery that in addition to the stress of my entire
server infrastructure burning, I had to deal with passing the
behind-the-wheel driver’s test. I’ve now been a licensed driver for
about a week and a half. Coincidentally, I got my server back running
the same day I passed the test.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-i-m-doing-backups&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#how-i-m-doing-backups&quot; aria-label=&quot;Anchor link for: how-i-m-doing-backups&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
How I’m Doing Backups&lt;&#x2F;h2&gt;
&lt;p&gt;I moved all the data in my self-hosting setup into a single directory.
The files were previously all lying about my home directory, which is
what led to the tragic “forgetting about &lt;code&gt;.env&lt;&#x2F;code&gt; amongst all my dotfiles”
incident.&lt;&#x2F;p&gt;
&lt;p&gt;I set up a cronjob that runs the backup script &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alexjurkiewicz&#x2F;acts&#x2F;&quot;&gt;&lt;code&gt;acts&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; daily, set to
back up the self hosting directory. It currently keeps a buffer of 31
daily and 12 monthly backups, and keeps around yearly backups forever.
It’s been running for a couple days now, and it’s all been smooth
sailing so far.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;to-infinity-and-beyond&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#to-infinity-and-beyond&quot; aria-label=&quot;Anchor link for: to-infinity-and-beyond&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
To Infinity and Beyond&lt;&#x2F;h2&gt;
&lt;p&gt;I’d also like to say thanks to a number of people who were especially
kind, and made this a fun experience:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Graham Percival, an employee at Tarsnap Backup Inc., reached out to
me directly – we had a fun and interesting email exchange.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lobste.rs&#x2F;s&#x2F;ofcfbq&#x2F;wrong_way_switch_operating_systems_on#c_b0zqnt&quot;&gt;hannu&lt;&#x2F;a&gt; was the first to write the later much-echoed sentiment that
reflecting on one’s mistakes is a useful and laudable thing to do
(see also &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=27597436&quot;&gt;abraae&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=27598224&quot;&gt;argomo&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I’m going to continue iterating my self-hosting setup. I’ve still got a
couple &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.firefly-iii.org&quot;&gt;new services&lt;&#x2F;a&gt; I might want to throw up there. I also can’t
forget about that &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;wrong-way-to-switch-server-os&#x2F;#bye-bye&quot;&gt;dedicated page&lt;&#x2F;a&gt; I promised…&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>The Wrong Way to Switch Operating Systems on Your Server</title>
    <published>2021-06-17T00:00:00+00:00</published>
    <updated>2022-06-15T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/wrong-way-to-switch-server-os/" type="text/html"/>
    <id>https://figbert.com/posts/wrong-way-to-switch-server-os/</id>
    <content type="html">
      &lt;p&gt;After &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;moving-to-hetzner-from-digitalocean&#x2F;&quot;&gt;moving my server to Hetzner&lt;&#x2F;a&gt;, I built up a large collection
of self-hosted services I use on a daily basis: from fun things like
an &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;miniflux.app&quot;&gt;RSS reader&lt;&#x2F;a&gt; and an &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;thelounge.chat&quot;&gt;IRC bouncer&lt;&#x2F;a&gt;, to critical services like my
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;maddy.email&quot;&gt;email&lt;&#x2F;a&gt;. I ran them all with &lt;code&gt;docker-compose&lt;&#x2F;code&gt; from a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.debian.org&quot;&gt;Debian&lt;&#x2F;a&gt; VPS. For
the last couple months, however, I’ve been meaning to move away from
Debian and towards something more minimal and clean. Over this last
weekend, I decided to move to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;alpinelinux.org&quot;&gt;Alpine Linux&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;the-plan&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-plan&quot; aria-label=&quot;Anchor link for: the-plan&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
The Plan&lt;&#x2F;h2&gt;
&lt;p&gt;The transition was supposed to be quick and dirty:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Shut down all the services running on my VPS&lt;&#x2F;li&gt;
&lt;li&gt;Make a backup of relevant files with &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tarsnap.com&quot;&gt;Tarsnap&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Mount Alpine Virtual ISO image and setup the OS&lt;&#x2F;li&gt;
&lt;li&gt;Restore files from Tarsnap backup&lt;&#x2F;li&gt;
&lt;li&gt;Bring everything back up&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;In a previous move between two servers, I simply &lt;code&gt;rsync&lt;&#x2F;code&gt;ed the
relevant files over to the new VPS. Here, where I’m just switching
operating systems on a single server, I figured I could make a backup
with Tarsnap, and be done within the day.&lt;&#x2F;p&gt;
&lt;p&gt;However, backups are much more complex than simply transferring files
from one server to another. My haphazard strategy resulted in three
days of stress and frustration as I clambered to restore a
self-hosting empire that I myself had reduced to ash.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;day-one&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#day-one&quot; aria-label=&quot;Anchor link for: day-one&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Day One&lt;&#x2F;h2&gt;
&lt;p&gt;I began my work on the transition full of optimism, if a bit stressed.
I had read through the Tarsnap online documentation a number of times,
and was ready to make my first attempt. I loaded my Tarsnap account up
with USD$10 and ran:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; tarsnap&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;c&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; backup-name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; docker-compose.yml&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;My terminal sat empty for hours. There were no changes – the process
was running, but there was no feedback. I was nervous.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;What if it failed silently?&lt;&#x2F;p&gt;
&lt;p&gt;How can I check?&lt;&#x2F;p&gt;
&lt;p&gt;What should I do?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I pressed &lt;code&gt;&amp;lt;Ctrl-C&amp;gt;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;To my horror, stats printed to the screen: the backup had been 90%
complete, and I had stopped it. Convinced I had ruined the backup
completely, I deleted the partial backup from Tarsnap and started
again from scratch.&lt;&#x2F;p&gt;
&lt;p&gt;This was my first, but not last, moment close to tears. I went to
sleep and let the backup run overnight.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;day-two&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#day-two&quot; aria-label=&quot;Anchor link for: day-two&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Day Two&lt;&#x2F;h2&gt;
&lt;p&gt;Day Two began well: I woke and the backup was finished! I wiped the
VPS, installed Alpine, and brought it up to spec. I created a regular
user, configured SSH, and decided to use &lt;code&gt;doas&lt;&#x2F;code&gt; instead of &lt;code&gt;sudo&lt;&#x2F;code&gt; for
a change. Alpine, so far, feels great to use. None of the cruft that
bothered me when using Debian.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;virgin-tarnsap&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#virgin-tarnsap&quot; aria-label=&quot;Anchor link for: virgin-tarnsap&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Virgin Tarnsap&lt;&#x2F;h3&gt;
&lt;p&gt;With Alpine set up, I started to restore the backup:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; doas&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; tarsnap&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; backup-name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Once again, after running all day it had not finished.&lt;&#x2F;p&gt;
&lt;p&gt;I opened up a new &lt;code&gt;tmux&lt;&#x2F;code&gt; window and poked around the filesystem. All
my files seemed like they were already there…&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;What if it failed silently?&lt;&#x2F;p&gt;
&lt;p&gt;How can I check?&lt;&#x2F;p&gt;
&lt;p&gt;What should I do?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I pressed &lt;code&gt;&amp;lt;Ctrl-C&amp;gt;&lt;&#x2F;code&gt;, cutting off the download, and tried to bring
everything back online:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; doas&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; docker-compose&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; up&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;d&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It errored out. All my environment variables were undefined. Then it
hit me: I forgot to back up the &lt;code&gt;.env&lt;&#x2F;code&gt; file. My eyes welled up.&lt;&#x2F;p&gt;
&lt;p&gt;Still, I was determined. I worked to reconstruct the &lt;code&gt;.env&lt;&#x2F;code&gt; file from
secrets I had stored in &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bitwarden.com&quot;&gt;Bitwarden&lt;&#x2F;a&gt; (my offline copy, because my vault
is self-hosted and was thus down).&lt;&#x2F;p&gt;
&lt;p&gt;I ran it again:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; doas&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; docker-compose&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; up&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;d&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;One of my services was missing a Dockerfile to build. I shouldn’t have
pressed &lt;code&gt;&amp;lt;Ctrl-C&amp;gt;&lt;&#x2F;code&gt;! I was a total moron.&lt;&#x2F;p&gt;
&lt;p&gt;I put on a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=I-sH53vXP2A&quot;&gt;sad song&lt;&#x2F;a&gt;. I was close to tears once again.&lt;&#x2F;p&gt;
&lt;p&gt;I gathered what was left of my resolve and trudged onwards. I searched
&lt;code&gt;tarsnap&lt;&#x2F;code&gt;’s manpages looking for something to speed up my download.&lt;&#x2F;p&gt;
&lt;p&gt;I found a number of flags that could have helped me &lt;em&gt;make&lt;&#x2F;em&gt; a backup
better the next time around, but nothing that would help me restore
the backup any faster. With nothing in the manpages, I went to look at
the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tarsnap.com&#x2F;helper-scripts.html&quot;&gt;helper scripts&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;chad-redsnapper&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#chad-redsnapper&quot; aria-label=&quot;Anchor link for: chad-redsnapper&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Chad Redsnapper&lt;&#x2F;h3&gt;
&lt;p&gt;That’s when I found it: &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;directededge&#x2F;redsnapper&quot;&gt;redsnapper&lt;&#x2F;a&gt;. A Ruby script that runs multiple
tarsnap clients at once to extract archives &lt;strong&gt;fast&lt;&#x2F;strong&gt;. Fucking
precisely. I wiped out the incomplete files I had restored, downloaded
Ruby and started restoring from the backup once again:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; doas&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; redsnapper&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; backup-name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I changed &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=gPOEBkcZHM4&quot;&gt;the song&lt;&#x2F;a&gt;, and watched the files fly by on my screen. I
went to sleep, confident I would wake to good news.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;day-three&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#day-three&quot; aria-label=&quot;Anchor link for: day-three&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Day Three&lt;&#x2F;h2&gt;
&lt;p&gt;The download had failed trying to download a large &lt;code&gt;.mkv&lt;&#x2F;code&gt; file.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;manual-exclusion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#manual-exclusion&quot; aria-label=&quot;Anchor link for: manual-exclusion&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Manual Exclusion&lt;&#x2F;h3&gt;
&lt;p&gt;I restarted &lt;code&gt;redsnapper&lt;&#x2F;code&gt;, explicitly excluding the &lt;code&gt;.mkv&lt;&#x2F;code&gt; it had
failed to download, and let it run until it came on another movie and
crashed again (an hour or so later). I excluded the second movie file
and sent it to run again.&lt;&#x2F;p&gt;
&lt;p&gt;This was a long, boring process. It sucked.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;an-afternoon-breakthrough&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#an-afternoon-breakthrough&quot; aria-label=&quot;Anchor link for: an-afternoon-breakthrough&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
An Afternoon Breakthrough&lt;&#x2F;h3&gt;
&lt;p&gt;Then I realized something. &lt;code&gt;redsnapper&lt;&#x2F;code&gt; kept crashing when it hit
movies I had stored in &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jellyfin.org&quot;&gt;Jellyfin&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;I don’t need Jellyfin at all. I’ve never watched a movie more than
once.&lt;&#x2F;p&gt;
&lt;p&gt;The movies take up massive storage on disk, and keep causing tarsnap
to crash. They don’t compress well either, so they take up a fuckton
of space in the archives.&lt;&#x2F;p&gt;
&lt;p&gt;I can always download the movies again if I want to give them
another go.&lt;&#x2F;p&gt;
&lt;p&gt;Why the fuck am I forcing myself to deal with this shit?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I stopped the download in the middle - the day’s third, after two
earlier attempts that ended after encountering movie files – and
changed the command slightly before rerunning. After a number of
errors I couldn’t explain, I realized my account was negative and
topped it up with another USD$25 before running:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; doas&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; redsnapper&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; backup-name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-exclude=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;*&#x2F;jellyfin&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I returned to my computer a couple hours later. &lt;code&gt;redsnapper&lt;&#x2F;code&gt; had
stopped, with a whole lot of files extracted and a couple errors at
the bottom about symlinks.&lt;&#x2F;p&gt;
&lt;p&gt;I figured, this time, it had probably done everything properly but
couldn’t create the symlinks (probably a flag missing somewhere). I
manually went through my files creating the symlinks, and then brought
everything up with docker-compose.&lt;&#x2F;p&gt;
&lt;p&gt;I checked the containers. All up.&lt;&#x2F;p&gt;
&lt;p&gt;I checked the logs – no immediate errors visible.&lt;&#x2F;p&gt;
&lt;p&gt;I opened &lt;a href=&quot;&#x2F;&quot;&gt;figbert.com&lt;&#x2F;a&gt; on my laptop. It appeared. Service was
restored. Hallelujah.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mistakes&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#mistakes&quot; aria-label=&quot;Anchor link for: mistakes&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Mistakes&lt;&#x2F;h2&gt;
&lt;p&gt;I made a lot of them. Here are a few:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;After shutting down my containers, I backed up my entire setup.
This included a number of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tarsnap.com&#x2F;tips.html#back-up-live&quot;&gt;“live” databases&lt;&#x2F;a&gt;, &lt;code&gt;.git&lt;&#x2F;code&gt; folders,
and other data that I either did not need or could reconstruct
once the move had been completed.&lt;&#x2F;li&gt;
&lt;li&gt;I didn’t back up the &lt;code&gt;.env&lt;&#x2F;code&gt; file I use to store secrets for use in
&lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;. I was luckily able to reconstruct it from
individual secrets I stored in my password manager.&lt;&#x2F;li&gt;
&lt;li&gt;A thorough read of the manpages before I started (rather than just
the online guides) would have revealed several helpful flags:
&lt;code&gt;-v&lt;&#x2F;code&gt; to see what files &lt;code&gt;tarsnap&lt;&#x2F;code&gt; is operating on,
&lt;code&gt;--aggressive-networking&lt;&#x2F;code&gt; to take advantage of the datacenter
internet speeds, and &lt;code&gt;--recover&lt;&#x2F;code&gt; to resume interrupted backups, to
name a few.&lt;&#x2F;li&gt;
&lt;li&gt;We already talked about Jellyfin. Even with very little content in
Jellyfin, the collection took up huge amounts of space on disk and
in the backup (especially because video files don’t compress
well), and sat entirely unused. It is now gone. Good riddance.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;future&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#future&quot; aria-label=&quot;Anchor link for: future&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Future&lt;&#x2F;h2&gt;
&lt;p&gt;What did I learn? Well, I’m still devising a plan to prevent things
like this from happening in the future. Here’s the plan currently:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;backups&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#backups&quot; aria-label=&quot;Anchor link for: backups&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Backups&lt;&#x2F;h3&gt;
&lt;p&gt;Back up everything every day. I’ll build a buffer of three “rolling”
backups, where backups collect up to a max of three and then, as new
backups are created, the older backups are removed.&lt;&#x2F;p&gt;
&lt;p&gt;The backup script will shut down the services, dump the databases
(i.e. convert as much content to plain-text, easily-compressible
formats as possible) and make a time-stamped backup (currently only
with Tarsnap, but perhaps in the future with a number of other
services).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;restoring&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#restoring&quot; aria-label=&quot;Anchor link for: restoring&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Restoring&lt;&#x2F;h3&gt;
&lt;p&gt;Simply having high-quality backups to restore will already be a huge
leap forward. I’m also &lt;em&gt;definitely&lt;&#x2F;em&gt; going to continue using
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;directededge&#x2F;redsnapper&quot;&gt;redsnapper&lt;&#x2F;a&gt;: the speed gains it gives on large backups are crucial.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;manpages&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#manpages&quot; aria-label=&quot;Anchor link for: manpages&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Manpages&lt;&#x2F;h3&gt;
&lt;p&gt;I really should read all the documentation before I try something new.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bye-bye&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bye-bye&quot; aria-label=&quot;Anchor link for: bye-bye&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Bye Bye&lt;&#x2F;h2&gt;
&lt;p&gt;I’ll write further about my self-hosting setup as it evolves, and
publish the backup script once its finished. I’ll also maintain a
dedicated page on my site describing my self-hosting setup as it
changes.&lt;&#x2F;p&gt;
&lt;p&gt;Also, I’m sure there are people more knowledgeable about Tarsnap than
I. That’s basically the point of this article. If you are one of these
people, please don’t hesitate to &lt;a href=&quot;mailto:figbert@figbert.com&quot;&gt;email me&lt;&#x2F;a&gt; if you’ve got corrections,
advice, or just want to flex that you know how to do backups better
than I do.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Tofu</title>
    <published>2021-04-07T00:00:00+00:00</published>
    <updated>2021-04-07T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/tofu/" type="text/html"/>
    <id>https://figbert.com/projects/tofu/</id>
    <content type="html">
      &lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;calleluks&#x2F;Tofu&quot;&gt;&lt;strong&gt;Tofu&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; is an easy-to-use, open-source, two-factor
authentication app designed specifically for iOS, made by
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.calleluks.com&quot;&gt;Calle Luks&lt;&#x2F;a&gt;. I adopted it after migrating from Authy,
and ended up overhauling its icon system.&lt;&#x2F;p&gt;
&lt;p&gt;It’s a really well designed app:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;tofu&#x2F;accounts.jpg&quot; alt=&quot;A screenshot of Tofu in action&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When I migrated to Tofu, it had a limited number of hand-designed
icons in one big &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;calleluks&#x2F;Tofu&#x2F;blob&#x2F;d6b4544f7a996fd2c7a4feaa77cdee7735240749&#x2F;IssuerIcons.sketch&quot;&gt;Sketch file&lt;&#x2F;a&gt;. Each icon was created and
exported manually. I set out to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;calleluks&#x2F;Tofu&#x2F;issues&#x2F;52&quot;&gt;simplify&lt;&#x2F;a&gt; the process, and
Calle &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;calleluks&#x2F;Tofu&#x2F;issues&#x2F;52#issuecomment-760989928&quot;&gt;proposed&lt;&#x2F;a&gt; we create a shell script to generate
icons on-demand from a folder of pngs.&lt;&#x2F;p&gt;
&lt;p&gt;I got my shell hat on and a week later, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;calleluks&#x2F;Tofu&#x2F;pull&#x2F;60&quot;&gt;my pull request&lt;&#x2F;a&gt;
was commited to upstream with a brand new bash script. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;calleluks&#x2F;Tofu&#x2F;blob&#x2F;master&#x2F;GenerateIssuerIconAssets.sh&quot;&gt;The
script&lt;&#x2F;a&gt; iterates over a given directory using &lt;code&gt;sed&lt;&#x2F;code&gt;
and &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;my-first-regex&#x2F;&quot;&gt;regex&lt;&#x2F;a&gt; to grab the names of each png inside and add
them to Xcode’s assets folder. It uses a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stackoverflow.com&#x2F;a&#x2F;2954835&quot;&gt;heredoc&lt;&#x2F;a&gt; as
a template for the new imageset’s JSON, and the &lt;code&gt;sips&lt;&#x2F;code&gt; cli to
generate properly sized icons for use in the app.&lt;&#x2F;p&gt;
&lt;p&gt;Contributing to open source projects is incredibly fun. If you’ve
got a free weekend, take some time to hack on your favorite codebase.
Big thanks to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.calleluks.com&quot;&gt;Calle&lt;&#x2F;a&gt; for creating such an awesome app – I
look forward to collaborating more in the future.&lt;&#x2F;p&gt;
&lt;p&gt;Download the app &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.apple.com&#x2F;app&#x2F;tofu-authenticator&#x2F;id1082229305&quot;&gt;on the App Store&lt;&#x2F;a&gt;, and explore the source
code &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;calleluks&#x2F;Tofu&quot;&gt;on GitHub&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>A Package in the Bush</title>
    <published>2021-03-19T00:00:00+00:00</published>
    <updated>2021-03-19T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/package-in-the-bush/" type="text/html"/>
    <id>https://figbert.com/posts/package-in-the-bush/</id>
    <content type="html">
      &lt;p&gt;A little more than a month ago, I noticed that my computer charger had
slightly yellowed at the ends. Though I’m unsure how, it seemed like
it had sustained some sort of heat damage. I went over to
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nytimes.com&#x2F;wirecutter&#x2F;&quot;&gt;Wirecutter&lt;&#x2F;a&gt; to pick one out, ordered it off Amazon, and… it
never came.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Checking the app, the package was marked as delivered. Checking my
front door said differently. I got a refund and ordered another,
which I’ve been using ever since (pretty good, only downside is that
it’s only 1m long, but it makes up for that in speed).&lt;&#x2F;p&gt;
&lt;p&gt;A couple days later – or maybe weeks, I’m not sure – I noticed an
Amazon package tossed midway into a bush by my front door. It wasn’t
the full box kind, made of cardboard. More like an envelope, I
suppose.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Huh, that’s neat.&lt;&#x2F;p&gt;
&lt;p&gt;There’s an Amazon package in the bush.&lt;&#x2F;p&gt;
&lt;p&gt;Wonder what it’s doing there.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;After several weeks of thinking this every time I exited my front door
(a fairly rare occurance, these days), I opened it. Wet from the rain,
I figured it was time to bring it inside.&lt;&#x2F;p&gt;
&lt;p&gt;It would appear as if the person who received my first charger order
delivered it to me, but couldn’t quite make it to the door.&lt;&#x2F;p&gt;
&lt;p&gt;Now I’ve got two chargers, for the price of one. One from Amazon.&lt;&#x2F;p&gt;
&lt;p&gt;One from the bush.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Some quality shitposting</title>
    <published>2021-02-10T00:00:00+00:00</published>
    <updated>2022-06-15T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/some-quality-shitposting/" type="text/html"/>
    <id>https://figbert.com/posts/some-quality-shitposting/</id>
    <content type="html">
      &lt;p&gt;I was doing my daily HN and Lobster trawling, when I stumbled on &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20210224202137&#x2F;https:&#x2F;&#x2F;www.boringcactus.com&#x2F;2021&#x2F;02&#x2F;09&#x2F;anti-rust-horseshit.html&quot;&gt;a
post&lt;&#x2F;a&gt; by &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.boringcactus.com&#x2F;&quot;&gt;boringcactus&lt;&#x2F;a&gt; which sounded somewhat familiar. About half way
through I realized it was a truly epic shitpost and genuinely burst out
laughing.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;The story begins on February 2, 2021, on Drew Devault’s blog, with a
post entitled &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;drewdevault.com&#x2F;2021&#x2F;02&#x2F;02&#x2F;Anti-Wayland-horseshit.html&quot;&gt;&lt;em&gt;I’m tired of this anti-Wayland horseshit&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;. It’s a good
read – Drew’s a smart guy (he makes &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sourcehut.org&#x2F;&quot;&gt;Sourcehut&lt;&#x2F;a&gt;). In it, he disparages
detractors of Wayland and says that much of the people who criticize it
haven’t given it a close enough look and should think about what they’re
saying before they go shitting on maintainers of an all-together pretty
dope project.&lt;&#x2F;p&gt;
&lt;p&gt;Seven days later he wrote &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;drewdevault.com&#x2F;2021&#x2F;02&#x2F;09&#x2F;Rust-move-fast-and-break-things.html&quot;&gt;&lt;em&gt;Rust: “Move fast and break things” as a
moral imperative&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, in which he criticizes the Rust Foundation’s
attitude toward stability and platform support. A fatal mistake. In one
fell swoop, and one &lt;code&gt;s&#x2F;Wayland&#x2F;Rust&lt;&#x2F;code&gt;, boringcactus ended this man’s
career. Check it out:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20210224202137&#x2F;https:&#x2F;&#x2F;www.boringcactus.com&#x2F;2021&#x2F;02&#x2F;09&#x2F;anti-rust-horseshit.html&quot;&gt;&lt;em&gt;I’m tired of this anti-Rust horseshit&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Quite the reMarkable Device</title>
    <published>2021-01-22T00:00:00+00:00</published>
    <updated>2021-08-10T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/remarkable-tablet/" type="text/html"/>
    <id>https://figbert.com/posts/remarkable-tablet/</id>
    <content type="html">
      &lt;p&gt;Lately, there’s been renewed interest in clean, simple technology
built to help us focus. Protocols like &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gemini.circumlunar.space&#x2F;&quot;&gt;Gemini&lt;&#x2F;a&gt; strip away
the chaos of the web. Hardware hackers fit screens in
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;onezero.medium.com&#x2F;smarter-mirrors-and-how-theyre-made-327997b9eff7&quot;&gt;mirrors&lt;&#x2F;a&gt; and build beautiful minimalist displays to
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;onezero.medium.com&#x2F;the-morning-paper-revisited-35b407822494&quot;&gt;read the news&lt;&#x2F;a&gt;, display data neatly in a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;onezero.medium.com&#x2F;meet-accent-352cfa95813a&quot;&gt;picture
frame&lt;&#x2F;a&gt;, or provide a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;healeycodes.com&#x2F;hacking-together-an-e-ink-dashboard&#x2F;&quot;&gt;daily summary&lt;&#x2F;a&gt;. Hidden amongst
these many awesome projects is the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;remarkable.com&#x2F;&quot;&gt;reMarkable 2&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;I’ve been using the reMarkable for the past month or so and it is a
seriously solid device. I use it mainly to take notes, at which it
excels. The e-ink display is the best I have ever seen, barely ever
refreshing the entire screen and almost entirely without the temporary
artifacts that plague similar devices. The pencil is comfortable to
use – slightly fuzzy – and, interestingly, entirely passive: it never
needs to charge. Given that it’s meant to replace your paper, it
shouldn’t be too surprising that the tablet’s also incredibly thin.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cornellnotes&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cornellnotes&quot; aria-label=&quot;Anchor link for: cornellnotes&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
cornellNotes&lt;&#x2F;h2&gt;
&lt;p&gt;In one of my classes, I’m required to take Cornell notes. On what may
be a related note, it’s a terrible class. Regardless, I need to get an
A and so notes I shall take. The reMarkable comes with a built-in
Cornell notes template. It’s slightly different than the format I’m
used to, but it fits the bill well enough.&lt;&#x2F;p&gt;
&lt;p&gt;It’s hard to describe the experience of using the device. I would
say that it feels shockingly natural. Using it to take notes feels
like writing on a clipboard with none of the usual annoyances – the
paper sliding, having finite pages; and all the benefits of a digital
device – sending files via email, OCR, a select-and-drag tool, etc.
It’s convenient, feels nice, and performs well. Most importantly, it
makes me &lt;em&gt;excited&lt;&#x2F;em&gt; to use it every time I turn it on.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;worksheet&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#worksheet&quot; aria-label=&quot;Anchor link for: worksheet&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
workSheet&lt;&#x2F;h2&gt;
&lt;p&gt;In another class, the instructor distributes worksheets every once in
a while to complete during class. Now that we’re in distance learning
due to COVID, these are &lt;code&gt;pdf&lt;&#x2F;code&gt;s – perfect for use with the reMarkable.&lt;&#x2F;p&gt;
&lt;p&gt;I download them onto my laptop, upload them through the app, and
voila. Look Mom, no scratch paper! I can write directly on the
worksheet. I’ve only started doing it this week, and it’s amazing.
Sure, there are programs on the computer that allow you to write
on a &lt;code&gt;pdf&lt;&#x2F;code&gt;, but doing math with a trackpad sounds like torture. With
the reMarkable, it’s enjoyable.&lt;&#x2F;p&gt;
&lt;p&gt;That’s the device’s biggest impact. I used to hate writing by hand.
I would beg my teachers to let me type assignments so I didn’t have
to use a pencil – what am I, a caveman? Now, my paper has superpowers.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;notkindle&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#notkindle&quot; aria-label=&quot;Anchor link for: notkindle&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
notKindle&lt;&#x2F;h2&gt;
&lt;p&gt;It’s also a suprisingly good reading device, with native support for
&lt;code&gt;epub&lt;&#x2F;code&gt;s and &lt;code&gt;pdf&lt;&#x2F;code&gt;s. It doesn’t have a backlight, but to be fair
neither do actual books so I’m not too bothered. The default font size
is quite large, and the UI is really minimal which makes for peaceful,
undistracted reading. I own two Kindles already, but I’ve taken to
using the reMarkable instead for a number of reasons:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;There’s no ads or tracking. On Kindle there’s an ad on the bottom
of the homescreen, which expands to the whole screen when you turn it
off – plus it sends every move you make to live forever with Big Papa
Bezos. Not so with the reMarkable.&lt;&#x2F;li&gt;
&lt;li&gt;The screen on the reMarkable is physically larger. Though sometimes
the compact size of my Kindle comes in handy, like when traveling,
having a nice big display is definitely an advantage. My Kindle is
closer to a large phone, and the reMarkable is definitely a tablet.&lt;&#x2F;li&gt;
&lt;li&gt;The reMarkable is a fairly open device. The Kindle, on the other
hand, is locked down and dripping with DRM (fairly easy to break but
still an encumberance).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The developers have also made a browser extension for Chromium-based
browsers called &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;chrome.google.com&#x2F;webstore&#x2F;detail&#x2F;read-on-remarkable&#x2F;bfhkfdnddlhfippjbflipboognpdpoeh&quot;&gt;Read on reMarkable&lt;&#x2F;a&gt;, which I would love to see
the insides of but is unfortunately closed-source. Basically, it takes
any webpage, turns it into an &lt;code&gt;epub&lt;&#x2F;code&gt;, and sends it off to your device.
I love it and use it near constantly: whenever I run into anything on
HN that is either really long, or I just want to save for later, I
hit a button and it sends it to the tablet. Again, just incredibly
convenient.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EDIT:&lt;&#x2F;strong&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vladimyr&quot;&gt;Dario Vladović&lt;&#x2F;a&gt; has pointed out to me that extensions
are unpackable, and thus though it’s not open source it is, by nature,
source available.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jailbreak&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#jailbreak&quot; aria-label=&quot;Anchor link for: jailbreak&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
jailBreak&lt;&#x2F;h2&gt;
&lt;p&gt;This section is titled “jailbreak,” which is actually a bit of
misnomer because the reMarkable runs Linux and you can &lt;code&gt;ssh&lt;&#x2F;code&gt; into it
with ease. It’s also not too fitting because I’m not just going to
talk about modifying the device, but also about official accessories.
My device came with a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;remarkable.com&#x2F;store&#x2F;remarkable-2&#x2F;folios&quot;&gt;Book Folio&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;remarkable.com&#x2F;store&#x2F;remarkable-2&#x2F;markers&quot;&gt;Marker&lt;&#x2F;a&gt; in the
box, which is pretty good value. I did find out while writing this
that they offer a “Marker Plus” that comes with a built-in eraser. It
is, unfortunately, out of stock currently but I plan on buying it once
it returns in “January 2021,” so supposedly sometime in the next week
or so.&lt;&#x2F;p&gt;
&lt;p&gt;Ok now time for the jailbreak-y stuff. There’s an active community on
Freenode, an unofficial &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;remarkablewiki.com&#x2F;&quot;&gt;wiki&lt;&#x2F;a&gt;, and an &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;reHackable&#x2F;awesome-reMarkable&quot;&gt;Awesome list&lt;&#x2F;a&gt;.
All of these are really great resources for cool stuff you can do with
your device, and I’m planning to begin experimenting with them in the
coming weeks. My first goal is to get &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;koreader&#x2F;koreader&quot;&gt;KOReader&lt;&#x2F;a&gt; running so I
can sync my extensive Calibre library to the device. I’m going to
avoid adding any &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;reHackable&#x2F;awesome-reMarkable#user-content-games&quot;&gt;games&lt;&#x2F;a&gt; so as not to add additional complexity
to a device that aims to remove distractions, and proceed slowly so I
don’t brick my fancy new toy. Stick around to see how that goes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ps&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ps&quot; aria-label=&quot;Anchor link for: ps&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
pS&lt;&#x2F;h2&gt;
&lt;p&gt;The recently published fairly viral &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;surma.dev&#x2F;things&#x2F;ditherpunk&#x2F;index.html&quot;&gt;Ditherpunk article&lt;&#x2F;a&gt;
by &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;surma.dev&#x2F;&quot;&gt;Surma&lt;&#x2F;a&gt; gives a really interesting overview of image
dithering. After reading the article, I noticed that the reMarkable
itself uses dithering to “fade off” your writing and make it look
like pencil. Neat.&lt;&#x2F;p&gt;
&lt;p&gt;Also, comparing the reMarkable to the Kindle makes me want to
jailbreak that too – I’ll find some time to look into that soon.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EDIT:&lt;&#x2F;strong&gt; I ended up jailbreaking one of my Kindles, which I now use
daily as my primary book-reading device (as opposed to the reMarkable,
which I think of as an article-reading device). I should write some
stuff about that.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>My First RegEx</title>
    <published>2021-01-21T00:00:00+00:00</published>
    <updated>2021-01-21T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/my-first-regex/" type="text/html"/>
    <id>https://figbert.com/posts/my-first-regex/</id>
    <content type="html">
      &lt;p&gt;&lt;code&gt;(?&amp;lt;=\.\&#x2F;IssuerIcons\&#x2F;).*(?=\.png)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;what-it-does&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-it-does&quot; aria-label=&quot;Anchor link for: what-it-does&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
What it does&lt;&#x2F;h2&gt;
&lt;p&gt;Let’s break it apart piece by piece. It’s meant to return the filename
from a given path in a specific format. When given
&lt;code&gt;.&#x2F;IssuerIcons&#x2F;Example.png&lt;&#x2F;code&gt;, the script should return &lt;code&gt;Example&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The first section is a positive lookbehind: &lt;code&gt;(?&amp;lt;=\.\&#x2F;IssuerIcons\&#x2F;)&lt;&#x2F;code&gt;.
This asserts that the selected portion must by preceeded by
&lt;code&gt;.&#x2F;IssuerIcons&#x2F;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The section section is a pattern match: &lt;code&gt;.*&lt;&#x2F;code&gt;. This matches all
characters, excluding newlines, of any length.&lt;&#x2F;p&gt;
&lt;p&gt;The third and final section is a positive lookforward: &lt;code&gt;(?=\.png)&lt;&#x2F;code&gt;.
This asserts that the selected portion must be followed by &lt;code&gt;.png&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;background&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#background&quot; aria-label=&quot;Anchor link for: background&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Background&lt;&#x2F;h2&gt;
&lt;p&gt;Yesterday, I wrote my first regular expression. I’ve always regarded
regex as an arcane art of true shell wizards – and for the most part,
I still do. Now though, I’ve gotten a glimpse of their world.&lt;&#x2F;p&gt;
&lt;p&gt;I wrote this expression for &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tofuauth.com&#x2F;&quot;&gt;Tofu&lt;&#x2F;a&gt;, an open-source 2FA app for
iOS. I had been thinking of making more “issuer icons” for the app
when I noticed that the icons were all designed in one Sketch file.
This could become a problem if two people were to edit the file at
one time, so I suggested a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;calleerlandsson&#x2F;Tofu&#x2F;issues&#x2F;52&quot;&gt;solution&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The author got back to me with another idea: ditch Sketch altogether,
and replace it with a shell script that generates icons from a
directory of &lt;code&gt;png&lt;&#x2F;code&gt;s. I &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;calleerlandsson&#x2F;Tofu&#x2F;pull&#x2F;60&quot;&gt;wrote it&lt;&#x2F;a&gt;. I’ve since refined it, with
help from &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ThinkChaos&quot;&gt;ThinkChaos&lt;&#x2F;a&gt;, to make it independent of any preceding
directories using &lt;code&gt;sed&lt;&#x2F;code&gt;: &lt;code&gt;sed -E &#x27;s:.+&#x2F;(.+)\.png:\1:&#x27;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It was a really fun experience – I’ve never written bash before! It
reminded me a lot of Drew DeVault’s post &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;drewdevault.com&#x2F;2020&#x2F;12&#x2F;12&#x2F;Shell-literacy.html&quot;&gt;Become shell literate&lt;&#x2F;a&gt;.
I work primarily from my terminal, and am slowly working my way up to
true mastery – I’m nowhere near close, but this was a step in the right
direction.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>SASS and Light Mode</title>
    <published>2021-01-02T00:00:00+00:00</published>
    <updated>2022-06-15T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/sass-style-update/" type="text/html"/>
    <id>https://figbert.com/posts/sass-style-update/</id>
    <content type="html">
      &lt;p&gt;I’m on a roll! A second blog post in less than a month! Crazy. Anyway,
as you may have noticed – depending on whether or not you read this
via RSS or on the main site – I changed the site styles. I got rid
of dark mode, added styles for code and keyboard blocks, and changed
the look of links to a new cool design. &lt;strong&gt;Update:&lt;&#x2F;strong&gt; I brought back dark
mode. Light mode gave me anxiety.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;It all started the other day when I was cruising through cyberspace
and noticed a rather unique looking link style. Instead of the
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.w3.org&#x2F;WAI&#x2F;WCAG21&#x2F;Techniques&#x2F;general&#x2F;G183&quot;&gt;traditional underline styling&lt;&#x2F;a&gt;, hyperlinks were
surrounded in square brackets (like Markdown). I thought it was a
really cool change, and made the site stand out – so I stole the
idea and implemented it here! Yay for stealing. &lt;del&gt;More on this in a
future post…&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;p&gt;However, when I went to add the new style to my site I noticed that my
&lt;code&gt;global.css&lt;&#x2F;code&gt; file had gotten rather lengthy and disorganized. Given
that &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt; comes with &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;documentation&#x2F;content&#x2F;sass&#x2F;&quot;&gt;built-in support&lt;&#x2F;a&gt; for
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sass-lang.com&#x2F;&quot;&gt;Sass&lt;&#x2F;a&gt;, I thought I might try it out. I found it easy enough to
pick up given that I already know CSS. I decided to use Sass’
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sass-lang.com&#x2F;documentation&#x2F;syntax&quot;&gt;indented syntax&lt;&#x2F;a&gt;, which required more work to convert
from my existing CSS but – in my humble opinion – looks much
cleaner.&lt;&#x2F;p&gt;
&lt;p&gt;Given that I was already tinkering with site styles, I decided to
implement a couple other changes. I abandoned the site’s dark mode,
as though I myself am an avid dark mode user, I couldn’t find a way to
implement it in a satisfying way. If I figure out a Sass-y way to do
so, I may add it back. I added a border around inline &lt;code&gt;code&lt;&#x2F;code&gt; blocks
&lt;del&gt;because I thought I already had done that&lt;&#x2F;del&gt;. Lastly, I added
StackExchange’s amazing &lt;kbd&gt;kbd&lt;&#x2F;kbd&gt; styling so I could write
&lt;kbd&gt;⌥&lt;&#x2F;kbd&gt; + &lt;kbd&gt;⌘&lt;&#x2F;kbd&gt; + &lt;kbd&gt;N&lt;&#x2F;kbd&gt; in &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;how-to-mirror-your-iphone-to-your-mac&#x2F;&quot;&gt;this article&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I’m pretty happy with the new styles, but I have no doubt I’ll
continue to tweak it as I find cool designs around the web.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks for dropping by: see you next time!&lt;&#x2F;p&gt;
&lt;p&gt;FIGBERT&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;&lt;strong&gt;PS:&lt;&#x2F;strong&gt; It’s interesting that Sass supports both of the two modern
syntax paradigms, both the indents and linebreaks camp and the
brackets and semicolons camp. I don’t really prefer one over the
other, but it’s an interesting divide.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>How to Mirror Your iDevice to your Mac</title>
    <published>2020-12-31T00:00:00+00:00</published>
    <updated>2022-06-14T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/how-to-mirror-your-iphone-to-your-mac/" type="text/html"/>
    <id>https://figbert.com/posts/how-to-mirror-your-iphone-to-your-mac/</id>
    <content type="html">
      &lt;p&gt;I recently found myself debugging a mobile game I’m working on (&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git.figbert.com&#x2F;sevivon&#x2F;&quot;&gt;sneak
peak&lt;&#x2F;a&gt;) with a friend over &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jitsi.org&#x2F;&quot;&gt;Jitsi&lt;&#x2F;a&gt;. I had no trouble sharing my &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;godotengine.org&#x2F;&quot;&gt;Godot&lt;&#x2F;a&gt;
window, Xcode console, or &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;thelounge.chat&#x2F;&quot;&gt;IRC bouncer&lt;&#x2F;a&gt;. But how were they going to view
the output on my phone?&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Well turns out it’s really easy, and requires no non-default software:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Open Quicktime&lt;&#x2F;li&gt;
&lt;li&gt;Press &lt;kbd&gt;File&lt;&#x2F;kbd&gt; -&amp;gt; &lt;kbd&gt;New Movie Recording&lt;&#x2F;kbd&gt; or
&lt;kbd&gt;⌥&lt;&#x2F;kbd&gt; + &lt;kbd&gt;⌘&lt;&#x2F;kbd&gt; + &lt;kbd&gt;N&lt;&#x2F;kbd&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Plug in your iDevice (I’ve only tested with an iPhone) via USB&lt;&#x2F;li&gt;
&lt;li&gt;Click the down caret by the red record button&lt;&#x2F;li&gt;
&lt;li&gt;Select your device as the Camera&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;That’s it! I didn’t even need to record anything, as I just used Jitsi’s
built-in Window Sharing feature to share the screen live.&lt;&#x2F;p&gt;
&lt;p&gt;If you want to record your phone with something more powerful than
Quicktime, you can use &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;obsproject.com&#x2F;&quot;&gt;OBS&lt;&#x2F;a&gt; and select your phone as a Video Capture
Device.&lt;&#x2F;p&gt;
&lt;p&gt;Hope you’ve enjoyed this post! I know it’s a bit shorter than normal,
but I’m hoping to post more frequently starting soon as a bunch of
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;remarkable.com&#x2F;&quot;&gt;interesting&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.cyberpunk.net&#x2F;&quot;&gt;things&lt;&#x2F;a&gt; are happening in and abouts my life.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>A Very Convincing Review of Terraria</title>
    <published>2020-11-16T00:00:00+00:00</published>
    <updated>2020-11-16T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/a-very-convincing-terraria-review/" type="text/html"/>
    <id>https://figbert.com/posts/a-very-convincing-terraria-review/</id>
    <content type="html">
      &lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;a-very-convincing-terraria-review&#x2F;terraria.jpg&quot; alt=&quot;“I have never hated a game more in my life, i would rather get the skin on my nuts ripped off than play this game for another hour.” – Dbama 57.028, played 2046.2 hrs at review time.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If I wasn’t certain I wanted this game before, I am now.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Moving To Hetzner Cloud from DigitalOcean</title>
    <published>2020-11-01T00:00:00+00:00</published>
    <updated>2020-11-01T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/moving-to-hetzner-from-digitalocean/" type="text/html"/>
    <id>https://figbert.com/posts/moving-to-hetzner-from-digitalocean/</id>
    <content type="html">
      &lt;p&gt;Since I began working on self-hosting, I’ve been using a
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;m.do.co&#x2F;c&#x2F;1f23d011ae24&quot;&gt;DigitalOcean&lt;&#x2F;a&gt; (affiliate link) VPS running &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.debian.org&#x2F;&quot;&gt;Debian 10&lt;&#x2F;a&gt;.
However, after investigating the alternatives in the space,
I’ll be moving to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.hetzner.com&#x2F;&quot;&gt;Hetzner Cloud&lt;&#x2F;a&gt; when my DigitalOcean
credits run out in six months. Here’s why.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;I went with DigitalOcean as my hosting platform primarily because
of the USD$50 credit included with &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;education.github.com&#x2F;pack&quot;&gt;Github Student&lt;&#x2F;a&gt;.
I’ve used USD$20 of that credit as of today, and the remaining money
should run out around April 2020, giving me almost a year of VPS
for free. Not a bad deal.&lt;&#x2F;p&gt;
&lt;p&gt;With that said, as my credits hit the half-way point, I’ve begun
to think about what’s to come. Namely, the fact that my current
server is running at a constant 80% memory usage – severely
limiting what I can self-host.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;money-talks&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#money-talks&quot; aria-label=&quot;Anchor link for: money-talks&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Money talks…&lt;&#x2F;h2&gt;
&lt;p&gt;I currently use the cheapest DigitalOcean VPS available. I have
1 vCPU, 1GB of RAM, 25GB of SSD, and 1TB of data transfer. All that
power is packed in a clean USD$5 per month. This is, as far as cloud
hosts go, pretty good bang for your buck. Hetzner &lt;strong&gt;blows that out of
the water&lt;&#x2F;strong&gt;. Take a look at this table:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;&lt;strong&gt;USD&#x2F;Month&lt;&#x2F;strong&gt;&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;&lt;strong&gt;vCPU&lt;&#x2F;strong&gt;&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Memory&lt;&#x2F;strong&gt;&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Storage&lt;&#x2F;strong&gt;&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Traffic&lt;&#x2F;strong&gt;&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Provider&lt;&#x2F;strong&gt;&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;$3.41&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;1&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2GB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;20GB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;20TB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Hetzner&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;$4.77&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2GB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;40GB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;20TB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Hetzner&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;$5.00&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;1&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;1GB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;25GB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;1TB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;DigitalOcean&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;$6.70&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4GB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;40GB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;20TB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Hetzner&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;$10.00&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;1&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2GB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;25GB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2TB&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;DigitalOcean&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Check out the math on that, seriously. Hetzner’s base tier offers
1 vCPU, 2GB of ram, 20GB of SSD, and 20TB of data transfer for
USD$3.41 per month. That’s double the ram and 20 times the transfer
for almost &lt;strong&gt;half the price&lt;&#x2F;strong&gt; of my current DigitalOcean droplet.
The fourth down in the table above, the one I plan on purchasing, costs
USD$1.70 more than DigitalOcean and has &lt;strong&gt;quadruple the performace&lt;&#x2F;strong&gt;
of my current VPS. That’s more than even &lt;em&gt;Docker&lt;&#x2F;em&gt; could need. Ok that
might be a slight exaggeration, but it’s still a lot.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;and-it-speaks-for-the-trees&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#and-it-speaks-for-the-trees&quot; aria-label=&quot;Anchor link for: and-it-speaks-for-the-trees&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
…and it speaks for the trees.&lt;&#x2F;h2&gt;
&lt;p&gt;Hetzner is a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thegreenwebfoundation.org&#x2F;directory&#x2F;&quot;&gt;green hosting provider&lt;&#x2F;a&gt;, as
certified by the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thegreenwebfoundation.org&#x2F;&quot;&gt;Green Web Foundation&lt;&#x2F;a&gt;. DigitalOcean is not.
Obviously, climate change is important. If we look at it objectively,
it’s one of the only extinction-level threats to human existence at
the moment. All that is to say that switching to a green hosting provider
is the only thing &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.websitecarbon.com&#x2F;website&#x2F;figbert-com&#x2F;&quot;&gt;I need to do&lt;&#x2F;a&gt; according to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.websitecarbon.com&#x2F;&quot;&gt;this online
website carbon calculator&lt;&#x2F;a&gt;, and you know I can’t resist
online website metrics.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;so-that-s-nice&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#so-that-s-nice&quot; aria-label=&quot;Anchor link for: so-that-s-nice&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
So that’s nice.&lt;&#x2F;h2&gt;
&lt;p&gt;Anyways, that’s a pretty good summary of my thoughts on the move. I’m
probably going to use the move to make a few other changes to my hosting
setup (i.e. &lt;code&gt;docker-compose&lt;&#x2F;code&gt; to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;k3s.io&#x2F;&quot;&gt;&lt;code&gt;k3s&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;umami.is&#x2F;&quot;&gt;&lt;code&gt;umami&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; to
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;plausible.io&#x2F;&quot;&gt;&lt;code&gt;plausible&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;). I’ll keep you all abreast of the latest updates
to my hosting in future posts.&lt;&#x2F;p&gt;
&lt;p&gt;Until then, this is FIGBERT signing off. I should make a more consistent outro.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>MacOS Control Center is Better</title>
    <published>2020-10-07T00:00:00+00:00</published>
    <updated>2020-10-07T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/mac-control-center-is-better/" type="text/html"/>
    <id>https://figbert.com/posts/mac-control-center-is-better/</id>
    <content type="html">
      &lt;p&gt;I’ve been using the macOS Big Sur Beta for a couple of months now. So
far it’s pretty fantastic, and a surprisingly smooth experience over
all. One brand new feature in this update is the introduction of the
Control Center. A close relation of its iOS counterpart, they differ in
one key way: Control Center on macOS actually turns off services.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;video autoplay loop muted playsinline&gt;
  &lt;source src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;mac-control-center-is-better&#x2F;cc.webm&quot; type=&quot;video&#x2F;webm&quot;&gt;
  &lt;source src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;mac-control-center-is-better&#x2F;cc.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
  Your browser doesn&#x27;t support the video tag, which I use in place of .gifs, and&#x2F;or the video formats in use here – sorry!
&lt;&#x2F;video&gt;
&lt;p&gt;Did you catch that? It’s pretty subtle. When you try and turn off
Bluetooth or Wifi on iOS, they aren’t actually turned off: they’re just
temporarily disabled. The interface still broadcasts, it just doesn’t
accept new connections. It’s one of my biggest pet peeves, and I’m glad
Apple got it right with macOS. Now if they could just port it to iOS…&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Going Full Static with Zola</title>
    <published>2020-08-22T00:00:00+00:00</published>
    <updated>2022-06-14T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/going-full-static/" type="text/html"/>
    <id>https://figbert.com/posts/going-full-static/</id>
    <content type="html">
      &lt;p&gt;Those of you who read &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;i-wrote-this-three&#x2F;#next-steps&quot;&gt;my last “I Wrote This” post&lt;&#x2F;a&gt; will know that I was
having some trouble with my website. My site was coded using &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sapper.svelte.dev&#x2F;&quot;&gt;Sapper&lt;&#x2F;a&gt;, a
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;svelte.dev&#x2F;&quot;&gt;Svelte&lt;&#x2F;a&gt;-based web-app framework I had been using for some time. I had
chosen to use Sapper because it allowed me to stay as close to the
web-metal as possible, while still letting me do some fancy things like
use components, scoped CSS, and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sapper.svelte.dev&#x2F;docs#Server_routes&quot;&gt;server routes&lt;&#x2F;a&gt;. However, after diving
deeper into website tests and statistics, I started noticing that my
“static” site had a lot more moving parts than I thought. The HTML was
crammed full of inline scripts and &lt;code&gt;blob:&#x2F;&#x2F;&lt;&#x2F;code&gt;s, tanking performance,
wreaking havoc on my &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;HTTP&#x2F;CSP&quot;&gt;CSP&lt;&#x2F;a&gt;, and breaking the site for people with
scripts disabled. I decided to move the site to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt;, a ludicrously
simple static site generator made in Rust. Feel free to check out the
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git.figbert.com&#x2F;figbert.com-website&#x2F;&quot;&gt;source code here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;npm-hell&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#npm-hell&quot; aria-label=&quot;Anchor link for: npm-hell&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
NPM Hell&lt;&#x2F;h2&gt;
&lt;p&gt;I decided I was going to rewrite my site &lt;del&gt;because I have a bad habit of
rewriting everything all the time&lt;&#x2F;del&gt; largely because of Sapper’s
underwhelming response to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sveltejs&#x2F;sapper&#x2F;issues&#x2F;1175&quot;&gt;this Github issue&lt;&#x2F;a&gt;, which proposes a “strict
export” for Sapper sites to remove inline scripts and use of &lt;code&gt;eval()&lt;&#x2F;code&gt;. I
think this is a great idea, but it unfortunately has not received much
attention (though it appears that as I’m writing this, it has been added
to a “Roadmap Triage” project board). I started a new branch and began
working to translate my site to Sapper’s main competitor, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;routify.dev&#x2F;&quot;&gt;Routify&lt;&#x2F;a&gt;.
Sapper and Routify are not the same thing, but for me they both would
serve well enough. After around two days, I had a working MVP of my site
in Routify.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EDIT:&lt;&#x2F;strong&gt; Sapper is being retired in favor of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kit.svelte.dev&quot;&gt;SvelteKit&lt;&#x2F;a&gt;, which has
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sveltejs&#x2F;kit&#x2F;issues&#x2F;93&quot;&gt;the same issue&lt;&#x2F;a&gt;. smh.&lt;&#x2F;p&gt;
&lt;p&gt;Then disaster struck: I got a bunch of emails from Github. A series of
high priority security vulnerabilities had been found in dependencies
used by basically all of my web projects. I spent a day force-updating
all the dependencies of my web projects – a bit of a pain because npm
refuses to natively upgrade breaking changes – and decided to stay
as far away from the Javascript ecosystem as possible. I hate that
when I install a JS framework, a fundamental tool of modern web
development, I install a million other dependencies that could, and
often do, have critical security vulnerabilities. I’m thankful that
Dependabot caught these ones, but it really killed my enthusiasm for
using any JS framework on my site – which means Routify was out of the
picture.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-last-dependency-standing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-last-dependency-standing&quot; aria-label=&quot;Anchor link for: the-last-dependency-standing&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
The Last Dependency Standing&lt;&#x2F;h2&gt;
&lt;p&gt;I decided to use a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.staticgen.com&#x2F;&quot;&gt;static site generator&lt;&#x2F;a&gt;. I’d heard of many of the big
boys in the past, like &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gohugo.io&#x2F;&quot;&gt;Hugo&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jekyllrb.com&#x2F;&quot;&gt;Jekyll&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.11ty.dev&#x2F;&quot;&gt;Eleventy&lt;&#x2F;a&gt;, but they all
had their own problems when I looked at them in the past. Hugo has
god-awful templating syntax, Jekyll is Ruby-based and I don’t know Ruby,
and Eleventy isn’t even an escape from Javascript! So I decided to use
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt;, a “one-stop static site engine.” Zola is made in Rust, so it’s
super fast, and it’s designed to be dead simple. Seriously: the CLI has
only five commands, everything is configured from one &lt;code&gt;.toml&lt;&#x2F;code&gt; file, and
your content is all written in “&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;documentation&#x2F;content&#x2F;shortcodes&#x2F;&quot;&gt;Augmented&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;documentation&#x2F;content&#x2F;linking&#x2F;&quot;&gt;Markdown&lt;&#x2F;a&gt;.”&lt;&#x2F;p&gt;
&lt;p&gt;The interesting thing is that there’s honestly not much more to the
story because of how easy and simple Zola is to use. All of my posts and
projects go into the &lt;code&gt;content&lt;&#x2F;code&gt; directory, my CSS, favicon, and
miscellaneous files (non-content related stuff like emojis and public
keys) go in the &lt;code&gt;static&lt;&#x2F;code&gt; directory, and templates and shortcodes go into
the &lt;code&gt;templates&lt;&#x2F;code&gt; directory. If I was using a theme, it’s files would go
into a &lt;code&gt;theme&lt;&#x2F;code&gt; directory.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;benefits&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#benefits&quot; aria-label=&quot;Anchor link for: benefits&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Benefits&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;My slow Python script to convert Markdown posts to Svelte (which was
perfect at first but I then packed full excess tests and sandboxing)
is gone. Zola handles that automatically.&lt;&#x2F;li&gt;
&lt;li&gt;I got rid of TailwindCSS, and replaced it with custom styles. It’s
actually pretty fun to write simple custom CSS, especially with modern
tools like variables.&lt;&#x2F;li&gt;
&lt;li&gt;Writing new posts is ludicrously easy now. I write a post in Markdown,
throw any images or videos used &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;documentation&#x2F;content&#x2F;overview&#x2F;#asset-colocation&quot;&gt;in the same directory&lt;&#x2F;a&gt;, and publish.&lt;&#x2F;li&gt;
&lt;li&gt;Zola comes with a whole bunch of features built-in that I didn’t have
before, like syntax highlighting and anchor links (the latter of which I
have yet to set up). Other things are just handled automatically, like
feed generation or i18n.&lt;&#x2F;li&gt;
&lt;li&gt;Build times are much faster. Exporting with Sapper wasn’t slow, but it
didn’t feel instant. Zola does.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;drawbacks&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#drawbacks&quot; aria-label=&quot;Anchor link for: drawbacks&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Drawbacks&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;You sacrifice a certain amount of control by using a static site
generator, like &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;getzola&#x2F;zola&#x2F;issues&#x2F;681&quot;&gt;link&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;getzola&#x2F;zola&#x2F;issues&#x2F;695&quot;&gt;properties&lt;&#x2F;a&gt;. You could solve this with
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;documentation&#x2F;content&#x2F;shortcodes&#x2F;&quot;&gt;shortcodes&lt;&#x2F;a&gt;, or by contributing to the project (which I plan
to do).&lt;&#x2F;li&gt;
&lt;li&gt;I mean that’s really it to be honest.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;EDIT:&lt;&#x2F;strong&gt; You can now add attributes like noreferrer to links
automatically with Zola… So I guess there’s no more drawbacks? Yeah
that feels right.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;to-infinity-and-beyond&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#to-infinity-and-beyond&quot; aria-label=&quot;Anchor link for: to-infinity-and-beyond&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
To Infinity and Beyond&lt;&#x2F;h2&gt;
&lt;p&gt;I’m really happy with using Zola, and I look forward to continuing to
work with it in the future. I want to publish my blog’s styles and
templates as a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;themes&#x2F;&quot;&gt;Zola theme&lt;&#x2F;a&gt;, but I have to iron out a few kinks (like
anchor links, which are still a bit finicky on my end) before that.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EDIT:&lt;&#x2F;strong&gt; I have since moved on from this theme on my own site, but you
can still use the theme as &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;d3c3nt.figbert.com&quot;&gt;d3c3nt&lt;&#x2F;a&gt;, a simple, clean, and flexible theme
for personal sites.&lt;&#x2F;p&gt;
&lt;p&gt;I also have yet to re-implement a bunch of the indie-web features and
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.goatcounter.com&#x2F;&quot;&gt;GoatCounter&lt;&#x2F;a&gt; analytics of my old site into this version. Overall
though, I think it’s been a really fun and productive experiment using
Zola, and I’d highly recommend using it for anybody looking for a great,
no-nonsense static site generator.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EDIT:&lt;&#x2F;strong&gt; I fixed anchor links, and I decided to forgo analytics
altogether. My site’s better off without JS.&lt;&#x2F;p&gt;
&lt;p&gt;Until next time, FIGBERT.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Problem Exists Between Keyboard and Chair: How I Spent 2 Days Chasing a Bug that Didn&#x27;t Exist</title>
    <published>2020-07-28T00:00:00+00:00</published>
    <updated>2022-06-14T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/pebkac-txtodo-rewrite/" type="text/html"/>
    <id>https://figbert.com/posts/pebkac-txtodo-rewrite/</id>
    <content type="html">
      &lt;p&gt;Post-&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20201105203007&#x2F;https:&#x2F;&#x2F;developer.apple.com&#x2F;wwdc20&#x2F;&quot;&gt;WWDC2020&lt;&#x2F;a&gt;, I decided to rewrite the backend of txtodo in SwiftUI
using the new &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.apple.com&#x2F;videos&#x2F;play&#x2F;wwdc2020&#x2F;10037&#x2F;&quot;&gt;App and Scene structure&lt;&#x2F;a&gt;. Rebuilding the app from scratch
may have not been the best choice, but during that process I have
massively simplified the app’s data structure, despaghettified some messy
UI code, and spent two full days trying to solve a problem that didn’t
exist. This is the story of that last bit.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;structural-changes&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#structural-changes&quot; aria-label=&quot;Anchor link for: structural-changes&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Structural Changes&lt;&#x2F;h2&gt;
&lt;p&gt;The new app, so far, was mostly the same as the old version but without
the &lt;code&gt;AppDelegate.swift&lt;&#x2F;code&gt; or &lt;code&gt;SceneDelegate.swift&lt;&#x2F;code&gt; files (using the new
XCode 12 multiplatform app template). I also combined the Core Data
&lt;code&gt;FloatingTask&lt;&#x2F;code&gt; and &lt;code&gt;DailyTask&lt;&#x2F;code&gt; entities into one &lt;code&gt;Task&lt;&#x2F;code&gt; entity. By this
point, everything was running well enough so I started to migrate more
code into the new codebase starting with the fetch request:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;swift&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;FetchRequest&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    entity&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; Task.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;entity&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sortDescriptors&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;        NSSortDescriptor&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;keyPath&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; \Task.&lt;&#x2F;span&gt;&lt;span&gt;completed&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;ascending&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;        NSSortDescriptor&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;keyPath&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; \Task.&lt;&#x2F;span&gt;&lt;span&gt;priority&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;ascending&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; false&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;        NSSortDescriptor&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;keyPath&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; \Task.&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;ascending&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; tasks:&lt;&#x2F;span&gt;&lt;span&gt; FetchedResults&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;Task&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;breaking-taskview&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#breaking-taskview&quot; aria-label=&quot;Anchor link for: breaking-taskview&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Breaking TaskView&lt;&#x2F;h2&gt;
&lt;p&gt;Tasks are displayed as &lt;code&gt;TaskView&lt;&#x2F;code&gt;s in a &lt;code&gt;ForEach&lt;&#x2F;code&gt; loop on the
homescreen, which is simple enough. The &lt;code&gt;TaskView&lt;&#x2F;code&gt; struct, however, is
relatively complicated. The purpose of &lt;code&gt;TaskView&lt;&#x2F;code&gt; is to represent and
manipulate a single &lt;code&gt;Task&lt;&#x2F;code&gt;. In the previous version of the app (I’m
going to call the original version 2.0 and the rewrite 3.0 from now on),
this involved passing a number of attributes individually to be
manipulated as the view’s &lt;code&gt;@State&lt;&#x2F;code&gt;. When migrating the view, I reduced
this to a single &lt;code&gt;@ObservedObject&lt;&#x2F;code&gt;. I also removed some of the text
styling, which I planned to port over after I got the UI functional.&lt;&#x2F;p&gt;
&lt;p&gt;I ran the app on my device, and this happened:&lt;&#x2F;p&gt;
&lt;video controls&gt;
  &lt;source src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;pebkac-txtodo-rewrite&#x2F;ascending-checkmarks-error.webm&quot; type=&quot;video&#x2F;webm&quot;&gt;
  &lt;source src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;pebkac-txtodo-rewrite&#x2F;ascending-checkmarks-error.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
  Your browser doesn&#x27;t support the video tag and&#x2F;or the video formats in use here – sorry!
&lt;&#x2F;video&gt;
&lt;p&gt;Well that was unexpected. Instead of checking off the tasks I selected,
tasks were checked off starting from the bottom and ascending –
obviously not the intended behavior! My first thought was that it was
caused by the use of &lt;code&gt;@ObservedObject&lt;&#x2F;code&gt; to declare the view’s task
property – I haven’t seen it used to manipulate a Core Data entity
before, but it’s worked fine so far in txtodo – so I rewrote the
variables to match version 2.0.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;swift&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; VERSION 3.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; TaskView&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; View&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;Environment&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;\.&lt;&#x2F;span&gt;&lt;span&gt;managedObjectContext&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; managedObjectContext&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;ObservedObject&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; task:&lt;&#x2F;span&gt;&lt;span&gt; Task&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;State&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; priority:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Int&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;State&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; private&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; config &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; TaskConfig&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;  &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; UI...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; VERSION 2.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; floatingTaskView&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; View&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;Environment&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;\.&lt;&#x2F;span&gt;&lt;span&gt;managedObjectContext&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; managedObjectContext&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;ObservedObject&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; task:&lt;&#x2F;span&gt;&lt;span&gt; FloatingTask&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;State&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; completed:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Bool&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;State&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; name:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; String&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;State&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; priority:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Int&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;State&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; deleted:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Bool&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;State&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; private&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; editingText:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Bool&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;State&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; private&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; editingPriority:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Bool&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;State&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; private&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; viewingNotes:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Bool&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;State&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; private&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span&gt; confirmingDelete:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Bool&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;  &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; UI...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Still no change. It was getting pretty late at this point, but I decided
to stick it out for just a bit longer. I rewrote the &lt;code&gt;TaskView&lt;&#x2F;code&gt; struct
from scratch &lt;em&gt;two more times&lt;&#x2F;em&gt; to no avail. Something was wrong, but I
had no idea where it was and there was no way I was going to figure it
out at two in the morning by coding it again the exact same way.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fantastic-bugs-and-where-to-find-them&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#fantastic-bugs-and-where-to-find-them&quot; aria-label=&quot;Anchor link for: fantastic-bugs-and-where-to-find-them&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Fantastic Bugs and Where to Find Them&lt;&#x2F;h2&gt;
&lt;p&gt;The next morning, I took a look at the code again. If the problem wasn’t
in &lt;code&gt;TaskView&lt;&#x2F;code&gt;, where was it? The only other thing in the UI was the
button to make a new task, which looked something like this:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;swift&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;Button&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;action&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span&gt; newTask &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Task&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;context&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; self&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;managedObjectContext&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    newTask.&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;test&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    newTask.&lt;&#x2F;span&gt;&lt;span&gt;priority&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    newTask.&lt;&#x2F;span&gt;&lt;span&gt;notes&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; NSObject&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    newTask.&lt;&#x2F;span&gt;&lt;span&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; UUID&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    newTask.&lt;&#x2F;span&gt;&lt;span&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; Date.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;init&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    newTask.&lt;&#x2F;span&gt;&lt;span&gt;daily&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    do&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;        try&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; self&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;managedObjectContext&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;save&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; catch&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;        print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;error.&lt;&#x2F;span&gt;&lt;span&gt;localizedDescription&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;    Text&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Add&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Some of you may have figured it out by this point. At the time, I was
still confused – this was the exact method I was using in my previous
app, but with preset values – how could it be broken? I modified the
generation slightly so I could tell the difference between tasks, and
hopefully get to the bottom of the issue:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;swift&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; newTask &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Task&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;context&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; self&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;managedObjectContext&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;newTask.&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; String&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;UUID&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;uuidString&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;prefix&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;Int&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;random&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;..&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;9&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;newTask.&lt;&#x2F;span&gt;&lt;span&gt;priority&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Int16&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;random&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;..&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;newTask.&lt;&#x2F;span&gt;&lt;span&gt;notes&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; NSObject&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;newTask.&lt;&#x2F;span&gt;&lt;span&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; UUID&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;newTask.&lt;&#x2F;span&gt;&lt;span&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; Date.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;init&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;newTask.&lt;&#x2F;span&gt;&lt;span&gt;daily&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Bool&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;random&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I ran the app again and saw this:&lt;&#x2F;p&gt;
&lt;video controls&gt;
  &lt;source src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;pebkac-txtodo-rewrite&#x2F;randomized-test-values.webm&quot; type=&quot;video&#x2F;webm&quot;&gt;
  &lt;source src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;pebkac-txtodo-rewrite&#x2F;randomized-test-values.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
  Your browser doesn&#x27;t support the video tag and&#x2F;or the video formats in use here – sorry!
&lt;&#x2F;video&gt;
&lt;h2 id=&quot;intentional-behavior&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#intentional-behavior&quot; aria-label=&quot;Anchor link for: intentional-behavior&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Intentional Behavior&lt;&#x2F;h2&gt;
&lt;p&gt;The tasks weren’t being marked off in ascending order. They were being
moved to the bottom automatically when marked as complete, which I
couldn’t see because a) all the tasks were identical and b) there were
no animations to indicate that was happening. They were sorted by the
&lt;code&gt;FetchRequest&lt;&#x2F;code&gt; with a &lt;code&gt;NSSortDescriptor&lt;&#x2F;code&gt;, to make sure that the
unfinished tasks are the first thing the user sees. The “glitch” I had
spent two days chasing down was entirely by design, and I had just
forgotten.&lt;&#x2F;p&gt;
&lt;p&gt;There were two main things I learned from this experience. First, it’s
incredibly important to be able to take breaks. The difference between
spending two days trying to fix a non-existent glitch and realizing it’s
a feature you implemented could be as simple as a nap – it was for me.
Secondly, your test and placeholder data is more significant than you
might think: &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Garbage_in%2C_garbage_out&quot;&gt;garbage in, garbage out&lt;&#x2F;a&gt; definitely applies here. If all
your test data is the same, your tests are not good tests.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wrap-up&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#wrap-up&quot; aria-label=&quot;Anchor link for: wrap-up&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Wrap-up&lt;&#x2F;h2&gt;
&lt;p&gt;To make the sorting more clear, I randomized the tasks’ priority, name,
and category (as seen above) and added an animation with
&lt;code&gt;.animation(.easeIn(duration: 0.25))&lt;&#x2F;code&gt;. The current prototype looks
something like this:&lt;&#x2F;p&gt;
&lt;video controls&gt;
  &lt;source src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;pebkac-txtodo-rewrite&#x2F;update-preview.webm&quot; type=&quot;video&#x2F;webm&quot;&gt;
  &lt;source src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;pebkac-txtodo-rewrite&#x2F;update-preview.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
  Your browser doesn&#x27;t support the video tag and&#x2F;or the video formats in use here – sorry!
&lt;&#x2F;video&gt;
&lt;p&gt;This has been a really fun blog post to write! A got a big laugh out of
this bug chase, and I hope you’ve enjoyed reading it.&lt;&#x2F;p&gt;
&lt;p&gt;Till next time, FIGBERT&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>I Wrote This #3</title>
    <published>2020-07-04T00:00:00+00:00</published>
    <updated>2022-06-14T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/i-wrote-this-three/" type="text/html"/>
    <id>https://figbert.com/posts/i-wrote-this-three/</id>
    <content type="html">
      &lt;p&gt;It appears I’m not that great at keeping a weekly schedule. Right after
I published my last post, I started a class on text adventures and have
been living and breathing in &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;inform7.com&#x2F;&quot;&gt;Inform7&lt;&#x2F;a&gt; ever since. I’ve also spent some
time working on this site – though I’ve got even bigger changes coming
in the future – learning a few new languages, and listening to a whole
lot of music. I think &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;techcrunch.com&#x2F;2020&#x2F;07&#x2F;15&#x2F;twitter-accounts-hacked-crypto-scam&#x2F;&quot;&gt;something happened in cybersec&lt;&#x2F;a&gt; too? Oh also I
learned how to drive.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;interactive-fiction&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#interactive-fiction&quot; aria-label=&quot;Anchor link for: interactive-fiction&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Interactive Fiction&lt;&#x2F;h2&gt;
&lt;p&gt;These past few weeks, my main work has been on interactive fiction as
part of a summer class for my school. The first week was spent learning
the history of text adventures (as I will refer to them for the rest of
the article, becuase calling them “interactive fiction” makes me sound
like &lt;del&gt;a dick&lt;&#x2F;del&gt; a snob). I gathered a collection of games to play in my
free time (if I ever have any more of that), from the very first of the
genre – Adventure – to modern ones like Lost Pig.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;i-wrote-this-three&#x2F;collection.png&quot; alt=&quot;My collection of text adventures: Adventure, Bronze, Counterfeit Monkey, Curses, Hitchhiker’s Guide to the Galaxy, Lost Pig, and Slouching Towards Bedlam&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In the second week, we all made our own text adventures. It was a really
interesting experience – drastically different than any other
programming I’ve done. The main thing I struggled with was the semi-NLP
style of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;inform7.com&#x2F;&quot;&gt;Inform7&lt;&#x2F;a&gt;. Rather than telling the computer what to do, I felt
like I was making suggestions. I also struggled with the editor a bit.
Inform7 isn’t open source, which means there’s only one IDE you can use
to program in the language. That would be fine if the IDE was high
quality, but I often found it &lt;del&gt;really bad and draining&lt;&#x2F;del&gt; mediocre. This
was made a little better after I changed the editor colors to be much
more vibrant &lt;del&gt;so I wouldn’t fall asleep&lt;&#x2F;del&gt;, but I still felt like it
needed some work. Regardless of any struggles along the way, the payoff
after the game was finished was huge. Watching my little sister play a
text adventure for the first time, &lt;em&gt;one I had made&lt;&#x2F;em&gt;, was awesome.&lt;&#x2F;p&gt;
&lt;p&gt;Without further ado, I present to you: &lt;em&gt;One Angry Wizard, or the
Tentacular Adventures of our Brave Hero through a World Most Strange and
Foreign&lt;&#x2F;em&gt;. You can download &lt;a href=&quot;&#x2F;files&#x2F;one-angry-wizard.gblorb&quot;&gt;the .gblorb here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;site-work&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#site-work&quot; aria-label=&quot;Anchor link for: site-work&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Site Work&lt;&#x2F;h2&gt;
&lt;p&gt;I made some changes that you guys can see, and some other ones behind
the scenes.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;joining-webrings&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#joining-webrings&quot; aria-label=&quot;Anchor link for: joining-webrings&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Joining Webrings&lt;&#x2F;h3&gt;
&lt;p&gt;I first encountered webrings &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=23549471&quot;&gt;on Hacker News&lt;&#x2F;a&gt;, where I find most of my
interesting internet things. From there, I decided to join both the
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;geekring.net&#x2F;&quot;&gt;geekring&lt;&#x2F;a&gt; and the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hotlinewebring.club&#x2F;&quot;&gt;Hotline Webring&lt;&#x2F;a&gt; – you can find links to the
webrings in the nav on every page. Joining the Hotline Webring was
designed to be supremely easy, but the geekring was a little more
complicated. I’ve never been a big IRC person (though not for lack of
trying), and I ended up joining via the HTML form and getting my key via
email. &lt;del&gt;I may or may not have confused my number with my private-ish
key, and had to use a little bit of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rtyley.github.io&#x2F;bfg-repo-cleaner&#x2F;&quot;&gt;bfg&lt;&#x2F;a&gt; magic to fix that.&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EDIT:&lt;&#x2F;strong&gt; I would now very much consider myself a big IRC person.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;self-hosting&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#self-hosting&quot; aria-label=&quot;Anchor link for: self-hosting&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Self-Hosting&lt;&#x2F;h3&gt;
&lt;p&gt;My site was previously hosted using a continuous deploy on &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.netlify.com&#x2F;&quot;&gt;Netlify&lt;&#x2F;a&gt;.
This was a pretty great system for me – all I had to do was commit my
code to the GitHub repo, which I was already doing, and the they would
take care of everything and serve a great site – here’s the kicker –
&lt;strong&gt;for free&lt;&#x2F;strong&gt;. This was working really well for me for a while, until I
decided to add security headers to the site. I tried doing this in two
different ways: using &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;helmetjs.github.io&#x2F;&quot;&gt;Helmet&lt;&#x2F;a&gt; as described &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sapper.svelte.dev&#x2F;docs#Security&quot;&gt;in the Sapper Docs&lt;&#x2F;a&gt; and
using Netlify &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.netlify.com&#x2F;routing&#x2F;headers&#x2F;&quot;&gt;_headers&lt;&#x2F;a&gt;. The Helmet middleware didn’t work with
Netlify, and I’m honestly not sure why – possibly because of how they
host the file server (I’m not sure what&#x2F;how they serve the site), or
maybe I just f*cked up somewhere idk JavaScript is hard. Using the
Netlify config didn’t work either because I’m not a paying subscriber,
which wasn’t too clear at first. This would probably be solved if I just
gave them money, but I’m not going to do that any time soon.&lt;&#x2F;p&gt;
&lt;p&gt;I decided to move to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.digitalocean.com&#x2F;&quot;&gt;DigitalOcean&lt;&#x2F;a&gt; and host the site myself (or I guess
not totally myself – I don’t feel comfortable running it on a Pi from my
house just yet) with &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;caddyserver.com&#x2F;&quot;&gt;Caddy&lt;&#x2F;a&gt;. I went with DigitalOcean partially because
of their dev-focused business model, but mostly because they’re cheap
(my droplet is USD$5&#x2F;month and I get $50 credit with them from the
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;education.github.com&#x2F;pack&#x2F;&quot;&gt;GitHub Student Developer Pack&lt;&#x2F;a&gt; – my first year of hosting for only
$10).&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, I didn’t quite run the transition too well. It definitely
wasn’t zero downtime – it was probably more like a-few-hours downtime. I
doubt this really affected anyone because of my small audience, but I
was still up late working on it. If it had happened a few days later, it
might have gotten mixed up with the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;techcrunch.com&#x2F;2020&#x2F;07&#x2F;17&#x2F;cloudflare-dns-goes-down-taking-a-large-piece-of-the-internet-with-it&#x2F;&quot;&gt;Cloudflare downtime&lt;&#x2F;a&gt; (I don’t use
Cloudflare).&lt;&#x2F;p&gt;
&lt;p&gt;My current setup uses a custom CaddyServer configuration to serve my
site, which I am absolutely loving so far: it is so much easier to run
advanced setups with Caddy than Apache or Nginx. I wanted to move away
from Javascript analytics (via &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.goatcounter.com&#x2F;&quot;&gt;GoatCounter&lt;&#x2F;a&gt;) to log-based analytics
(via &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;goaccess.io&#x2F;&quot;&gt;GoAccess&lt;&#x2F;a&gt;) but found that Caddy’s structured logs are not
supported natively. I’m hoping &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;allinurl&#x2F;goaccess&#x2F;issues&#x2F;1768#issuecomment-646674023&quot;&gt;they’ll add it&lt;&#x2F;a&gt; soon though! Also, I
stumbled on &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;alexmv12.xyz&#x2F;blog&#x2F;goaccess_caddy&#x2F;&quot;&gt;this article&lt;&#x2F;a&gt; while writing this, and may check that out.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;next-steps&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#next-steps&quot; aria-label=&quot;Anchor link for: next-steps&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Next Steps&lt;&#x2F;h3&gt;
&lt;p&gt;I’ve got two major todos for my site in the near future. The first thing
I want to do is Dockerize. Using Docker will significantly clean up my
current setup, and allow me to host more fun things on the same machine
(for example, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.plausible.io&#x2F;self-hosting&#x2F;&quot;&gt;my own analytics&lt;&#x2F;a&gt; and maybe &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.gitea.io&#x2F;en-us&#x2F;install-with-docker&#x2F;&quot;&gt;git&lt;&#x2F;a&gt;). With that said, I
probably should get a little better at Docker first… For beginners,
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;flaviocopes.com&#x2F;tags&#x2F;docker&#x2F;&quot;&gt;Flavio Copes’&lt;&#x2F;a&gt; has a few pretty great posts on the subject.&lt;&#x2F;p&gt;
&lt;p&gt;The second thing I want to do is a bit of a larger project, and one I’m
not yet sure how I’m going to solve. I’ve run into some problems with
the frameworks I use to develop &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;&quot;&gt;figbert.com&lt;&#x2F;a&gt;. Sapper generates inline
scripts and blobs, which tanks the security of my CSP. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sapper.svelte.dev&#x2F;docs#Security&quot;&gt;Their proposed
solution&lt;&#x2F;a&gt; is to inject nonces with JS middleware,
but this doesn’t work with CaddyServer. I would much rather Sapper
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sveltejs&#x2F;sapper&#x2F;issues&#x2F;1175&quot;&gt;avoid inline scripts&lt;&#x2F;a&gt; altogether, but this doesn’t seem likely. I
really like the freedom that writing static sites in Svelte provides me
versus other static site generators, but this could be a dealbreaker. I
might talk a look at &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;routify.dev&#x2F;&quot;&gt;Routify&lt;&#x2F;a&gt; and see if that’s any better. I’ve also
been reconsidering using TailwindCSS, however useful it is, after
reading &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;2020&#x2F;07&#x2F;etcd-or-why-modern-software-makes-me-sad&#x2F;&quot;&gt;these&lt;&#x2F;a&gt; three&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;johanronsse.be&#x2F;2020&#x2F;07&#x2F;08&#x2F;why-youll-probably-regret-using-tailwind&#x2F;&quot;&gt;articles&lt;&#x2F;a&gt;. I attempted to replicate the
current look of &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;&quot;&gt;figbert.com&lt;&#x2F;a&gt; without TailwindCSS, and failed. So I’m
probably going to rewrite the site again, though I’m not sure how.
Through iteration, we will arrive at a stable version – this one,
unfortunately, is not yet it. If I do leave Svelte, which is probably a
50&#x2F;50 chance at this point, I would probably go either back to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gohugo.io&#x2F;&quot;&gt;Hugo&lt;&#x2F;a&gt;
(with some variation of the incredible &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;athul&#x2F;archie&quot;&gt;archie&lt;&#x2F;a&gt; theme) or to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;real-world-updates&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#real-world-updates&quot; aria-label=&quot;Anchor link for: real-world-updates&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Real World Updates&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;cybersec&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cybersec&quot; aria-label=&quot;Anchor link for: cybersec&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
CyberSec&lt;&#x2F;h3&gt;
&lt;p&gt;So, some pretty crazy things have happened. For one, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;techcrunch.com&#x2F;2020&#x2F;07&#x2F;15&#x2F;twitter-accounts-hacked-crypto-scam&#x2F;&quot;&gt;Twitter got
hacked&lt;&#x2F;a&gt; by some people from OGUsers who
got access to some internal managment tools. This hack, though not
necessarily the most technical, was super high profile. There were a few
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fortenf.org&#x2F;e&#x2F;security&#x2F;2020&#x2F;07&#x2F;15&#x2F;twitter-hack.html&quot;&gt;really good articles&lt;&#x2F;a&gt; written about the hack, but I also noticed a few
people acting in ways that I thought were not appropriate. More
specifically, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;krebsonsecurity.com&#x2F;&quot;&gt;Brian Krebs&lt;&#x2F;a&gt;, who reacted to the hack by &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;krebsonsecurity.com&#x2F;2020&#x2F;07&#x2F;twitter-hacking-for-profit-and-the-lols&#x2F;&quot;&gt;repeatedly&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;krebsonsecurity.com&#x2F;2020&#x2F;07&#x2F;whos-behind-wednesdays-epic-twitter-hack&#x2F;&quot;&gt;doxxing&lt;&#x2F;a&gt; the hackers, many of whom are still teenagers. He’s received
relatively little &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=23865035&quot;&gt;criticism&lt;&#x2F;a&gt; for doing this, though it appears to be &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;itwire.com&#x2F;security&#x2F;infosec-researchers-slam-ex-wapo-man-krebs-over-doxxing.html&quot;&gt;a
pattern of behavior&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;There was also a brief mention of a new &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wired.com&#x2F;story&#x2F;new-mac-ransomware-thiefquest-evilquest&#x2F;&quot;&gt;macOS malware&lt;&#x2F;a&gt;, but judging by
the lack of further publicity it’s probably not that common in the wild.
That, or people don’t care because it’s spread mainly through torrenting
sites and they don’t want to protect people they perceived to be morally
beneath them – which is wrong, obviously.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;driving&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#driving&quot; aria-label=&quot;Anchor link for: driving&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Driving&lt;&#x2F;h3&gt;
&lt;p&gt;I learned how to drive! Or rather, I got kind-of licensed to drive a car
in the US. I’ve been driving around a lot lately as something fun I can
do to pass time in quarantine, and last week I finished my online
driver’s ed course and got my learner’s permit. It was a surprisingly
simple and COVID-friendly process! The most complicated&#x2F;least
COVID-friendly part was going to the DMV to take the written test, but I
wore a mask and gloves and glared at anybody who got remotely close to
me. The next steps are much more dangerous to do during a pandemic, but
we have a year to complete them so we’re going to delay them (some
in-person driver’s training and the driver’s test) for a bit. For now
though, I have a piece of paper that says I can learn to drive!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;better-platforms&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#better-platforms&quot; aria-label=&quot;Anchor link for: better-platforms&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Better Platforms&lt;&#x2F;h3&gt;
&lt;p&gt;I’ve also taken some time to focus on decentralization. I’ve had a
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fosstodon.org&#x2F;@figbert&quot;&gt;Mastodon account&lt;&#x2F;a&gt; for a while, but I rarely used it. I didn’t have a
mobile client, and I almost never use social media on my computers. To
help change my behaviour I downloaded &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.apple.com&#x2F;us&#x2F;app&#x2F;mast&#x2F;id1437429129&quot;&gt;Mast&lt;&#x2F;a&gt;, a paid Mastodon client for
the Apple ecosystem. I went with Mast mostly because it’s absolutely
&lt;em&gt;gorgeous&lt;&#x2F;em&gt; – and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tiagomartinho&#x2F;Mast2&quot;&gt;open source&lt;&#x2F;a&gt; – which is something I value in the apps
I use. Apps that look really nice are fantastic inspiration for my own
apps’ designs, and this one is no exception.&lt;&#x2F;p&gt;
&lt;p&gt;I’ve also started using three other apps much more heavily recently:
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;feedly.com&#x2F;&quot;&gt;Feedly&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.apple.com&#x2F;us&#x2F;app&#x2F;octal&#x2F;id1308885491&quot;&gt;Octal&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;element.io&#x2F;&quot;&gt;Element&lt;&#x2F;a&gt;. Feedly is a fantastic RSS reader,
which helps me keep track of all the interesting blogs that I find
online (I read somewhere about self-hosting an RSS reader, which sounds
pretty cool, but I forget what it was called). Octal is a HN client for
iOS, which is really handy for keeping up with my favorite tech news
when I’m away from my computer. Element (previously Riot), is the
first-party &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;&quot;&gt;Matrix&lt;&#x2F;a&gt; client that makes using a decentralized E2EE chat
service feel better than Discord. I love it. In an ideal world where I
could choose the tools I use to communicate with people, I would only
use Signal and Element&#x2F;Matrix (for replacing iMessage and Discord&#x2F;Slack,
respectively).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;music&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#music&quot; aria-label=&quot;Anchor link for: music&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Music&lt;&#x2F;h3&gt;
&lt;p&gt;Oh my god there’s so much new music.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=52CzYCmJFD8&quot;&gt;Jonny by Bar Tsabari&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=d60H5D9GefE&quot;&gt;Kukuriku by Eden Ben Zaken and Omer Adam&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=_Vs-1s2BtJA&quot;&gt;Ta’azri et Atzmech by Dekel Vaknin&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=ZTNmNJnvdzc&quot;&gt;Sivuvim by Eden Hason&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=2AWLqffzR9k&quot;&gt;Lecha Dodi by Moshe Peretz and others&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=NV3e7d1bELI&amp;amp;list=OLAK5uy_kMpEzEcDVrgK_muDGEoy2r-iTxWbCKet0&quot;&gt;Haravot BaPita (Album) by Peled&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=5_5PtfmoIQk&quot;&gt;Magevet BaAvir by Noroz&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=_wIkyNfJYYc&quot;&gt;Nadav_15 by Shekel&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=CjHiYZU1gJE&quot;&gt;Moshe by Narkis and Miri Mesikah&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=YQpuETX_tr0&quot;&gt;Tik Tok by Mohamed Ramadan and Super Sako&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=I9xBb3MDxgk&quot;&gt;Aliyato VeNiflato Shel Shem Tov Hevi by Tamir Bar&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=7VWBTxOEHoQ&amp;amp;list=OLAK5uy_lRWsEN-9ydoMrdEzkw7xySe1105vhZLYc&quot;&gt;Falafel Pop (Album) by Quarter to Africa&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=sZHSE6tyccQ&quot;&gt;Lama Kacha Atzuva by Idan Raichel and Stav Beger&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=1EZBnZRyjpc&quot;&gt;Kapara by Kevin Robin and Rotem Cohen&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=MADaEN_3N18&quot;&gt;Ehad HaAm by Aya Zahavi Fayglin&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;wrapup&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#wrapup&quot; aria-label=&quot;Anchor link for: wrapup&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Wrapup&lt;&#x2F;h2&gt;
&lt;p&gt;I hope you enjoyed reading this update! I know it’s much longer than
usual, and I’ll try and keep them shorter than this from now on. I plan
on writing more short, topic-focused articles rather than just updates,
but those will come soon. For now though, I need to focus on knocking
out some of the larger projects that I’m working on. I keep finding cool
and interesting things to do, and I need to work on finishing the ones
that I’ve already started!&lt;&#x2F;p&gt;
&lt;p&gt;Salamat, FIGBERT&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;This previously linked to
&lt;code&gt;https:&#x2F;&#x2F;edvinleander.com&#x2F;2020&#x2F;07&#x2F;15&#x2F;stop-the-overuse-copy-pasting-and-unecessary-libraries&#x2F;&lt;&#x2F;code&gt;,
but the site has been down for years now and I neglected to archive it. Such is the nature of the internet. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>How to Replace Keybase in 3 Easy Steps</title>
    <published>2020-07-03T00:00:00+00:00</published>
    <updated>2021-04-12T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/how-to-replace-keybase-in-three-easy-steps/" type="text/html"/>
    <id>https://figbert.com/posts/how-to-replace-keybase-in-three-easy-steps/</id>
    <content type="html">
      &lt;p&gt;Ever since &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;keybase.io&#x2F;blog&#x2F;keybase-joins-zoom&quot;&gt;Keybase was acquired by Zoom&lt;&#x2F;a&gt;, a
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;bugbountywriteup&#x2F;zoom-zero-day-4-million-webcams-maybe-an-rce-just-get-them-to-visit-your-website-ac75c83f4ef5&quot;&gt;company&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;theintercept.com&#x2F;2020&#x2F;03&#x2F;31&#x2F;zoom-meeting-encryption&#x2F;&quot;&gt;with&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;c1truz_&#x2F;status&#x2F;1244737672930824193&quot;&gt;a&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;protonmail.com&#x2F;blog&#x2F;zoom-privacy-issues&#x2F;&quot;&gt;very&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.axios.com&#x2F;zoom-closes-chinese-user-account-tiananmen-square-f218fed1-69af-4bdd-aac4-7eaf67f34084.html&quot;&gt;bad&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;nicoagrant&#x2F;status&#x2F;1268020841054269440&quot;&gt;history&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;citizenlab.ca&#x2F;2020&#x2F;04&#x2F;move-fast-roll-your-own-crypto-a-quick-look-at-the-confidentiality-of-zoom-meetings&#x2F;&quot;&gt;with&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;DanAmodio&#x2F;status&#x2F;1245329512889487361&quot;&gt;security&lt;&#x2F;a&gt;&#x2F;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Ouren&#x2F;status&#x2F;1241398181205889024&quot;&gt;privacy&lt;&#x2F;a&gt;,
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=23103386&quot;&gt;people wanted an alternative&lt;&#x2F;a&gt;. There have been a
few different alternatives proposed: this is &lt;del&gt;the best&lt;&#x2F;del&gt; mine.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;what-is-keybase&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-is-keybase&quot; aria-label=&quot;Anchor link for: what-is-keybase&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
What is Keybase?&lt;&#x2F;h2&gt;
&lt;p&gt;Before we talk about replacing &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;keybase.io&#x2F;&quot;&gt;Keybase&lt;&#x2F;a&gt;, we should have a
good idea of what Keybase actually is. It’s main features are as
follows (ordered as on the website):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;E2EE chats and messaging (people and teams).&lt;&#x2F;li&gt;
&lt;li&gt;Cryptographic identity verification from around the net.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.keybase.io&#x2F;docs&#x2F;files&quot;&gt;KBFS&lt;&#x2F;a&gt; (Public signed file hosting, private E2EE file storage
w&#x2F; sharing, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.keybase.io&#x2F;docs&#x2F;files#keybase-pub&quot;&gt;Static site hosting??&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Git repositories? Crypto? &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;saltpack.org&#x2F;&quot;&gt;An alternative to PGP?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;previous-attempts-to-replace-keybase&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#previous-attempts-to-replace-keybase&quot; aria-label=&quot;Anchor link for: previous-attempts-to-replace-keybase&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Previous Attempts to Replace Keybase&lt;&#x2F;h2&gt;
&lt;p&gt;I’m not the first person to try this, obviously. Some brave folks have
tried to build Keybase alternatives, such as &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;keys.pub&#x2F;&quot;&gt;keys.pub&lt;&#x2F;a&gt; and
the brand-new &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;&quot;&gt;Keyoxide&lt;&#x2F;a&gt;. I’ve tried both, but found that
though they both are good in their own right, they are not the
solutions that I am looking for.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ok-time-for-the-steps&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ok-time-for-the-steps&quot; aria-label=&quot;Anchor link for: ok-time-for-the-steps&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
OK Time for the Steps&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;step-1-chat-messaging&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-1-chat-messaging&quot; aria-label=&quot;Anchor link for: step-1-chat-messaging&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Step #1: Chat&#x2F;Messaging&lt;&#x2F;h3&gt;
&lt;p&gt;There are a few great pre-existing options for encrypted messaging:
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;signal.org&#x2F;&quot;&gt;Signal&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;beta.protonmail.com&#x2F;&quot;&gt;ProtonMail&lt;&#x2F;a&gt; if you want to go full
email, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;telegram.org&#x2F;&quot;&gt;Telegram&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.whatsapp.com&#x2F;&quot;&gt;WhatsApp&lt;&#x2F;a&gt;. However, they
all have their problems (though I use the first two on a daily basis).
Signal requires a phone number, and is more of an iMessage&#x2F;text
replacement than a Slack-style chat app. Protonmail is literally not
chat – it’s email. Telegram is (debatably) &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=6936539&quot;&gt;not&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;translate.google.com&#x2F;translate?hl=en&amp;amp;sl=ru&amp;amp;u=http:&#x2F;&#x2F;habrahabr.ru&#x2F;post&#x2F;206900&#x2F;&quot;&gt;secure&lt;&#x2F;a&gt;. If you use WhatsApp for security you
might be crazy – I only use it because it’s &lt;em&gt;the way&lt;&#x2F;em&gt; to communicate
with people in the Middle East and Africa.&lt;&#x2F;p&gt;
&lt;p&gt;Instead, I would recommend you use &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;&quot;&gt;&lt;strong&gt;Matrix&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;. Matrix is an
“open network for secure, decentralized communication,” and it’s the
perfect replacement for Keybase’s chat &lt;del&gt;and I would argue most other
chat apps too&lt;&#x2F;del&gt;. It utilizes E2E encrypted messaging, and can be
self-hosted as well &lt;del&gt;or if you’re cheap like me just get your friend
to host&lt;&#x2F;del&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;In addition to a Matrix server, you also need a client. For this, I
recommend &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;element.io&#x2F;&quot;&gt;&lt;strong&gt;Element&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; – though &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nio.chat&#x2F;&quot;&gt;Nio&lt;&#x2F;a&gt;, once stable,
will almost surely be my go-to. Element is a beautiful Matrix client
with a bunch of awesome features, including Slack-like integrations,
and apps for pretty much every major platform (Linux, MacOS, Windows,
iOS, Android, and a web client). &lt;del&gt;Plus it looks a lot like Discord.&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;step-2-identity-verification&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-2-identity-verification&quot; aria-label=&quot;Anchor link for: step-2-identity-verification&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Step #2: Identity verification&lt;&#x2F;h3&gt;
&lt;p&gt;Replacing Keybase’s &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20140322062148&#x2F;https:&#x2F;&#x2F;keybase.io&#x2F;&quot;&gt;original function&lt;&#x2F;a&gt; is probably
the most difficult part of this tutorial: cryptographically verified
identity proofs is a great and innovative idea. I would swap this out
with an &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;indieweb.org&#x2F;&quot;&gt;&lt;strong&gt;IndieWeb&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; profile – one &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;microformats.org&#x2F;wiki&#x2F;h-card&quot;&gt;part&lt;&#x2F;a&gt; of the
larger &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;microformats.org&#x2F;&quot;&gt;microformats&lt;&#x2F;a&gt; HTML structure. There are some
pretty great tutorials out there (I would recommend &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kevq.uk&#x2F;how-to-create-an-indieweb-profile&#x2F;&quot;&gt;this
one&lt;&#x2F;a&gt; by the fantastic &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kevq.uk&#x2F;&quot;&gt;Kev Quirk&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;randomgeekery.org&#x2F;post&#x2F;2020&#x2F;04&#x2F;indieweb-h-cards&#x2F;&quot;&gt;this
one&lt;&#x2F;a&gt; by &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;randomgeekery.org&#x2F;&quot;&gt;Brian Wisti&lt;&#x2F;a&gt;), so I won’t go into too
much detail about exactly how to do that. However, it’s important to
note that though Kev recommends hiding your h-card with the
&lt;code&gt;display: none;&lt;&#x2F;code&gt; property: &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;indieweb.org&#x2F;antipatterns#invisible_metadata&quot;&gt;don’t do that&lt;&#x2F;a&gt;. I just
merged my about and contact pages onto my homepage, and added the
microformats classes to my existing markup.&lt;&#x2F;p&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;how-to-replace-keybase-in-three-easy-steps&#x2F;h-card.png&quot; type=&quot;img&#x2F;png&quot;&gt;
  &lt;img src=&quot;h-card.png&quot; alt=&quot;My Indieweb h-card&quot;&#x2F;&gt;
&lt;&#x2F;picture&gt;
&lt;h3 id=&quot;step-3-file-storage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-3-file-storage&quot; aria-label=&quot;Anchor link for: step-3-file-storage&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Step #3: File Storage&lt;&#x2F;h3&gt;
&lt;p&gt;Replacing KBFS is easy to do, but hard to get right. Swapping to
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.google.com&#x2F;drive&#x2F;&quot;&gt;Google Drive&lt;&#x2F;a&gt; is probably the move that most people would
make, but that abandons the entire security&#x2F;encryption aspect of
Keybase. There’s also &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.dropbox.com&#x2F;&quot;&gt;Dropbox&lt;&#x2F;a&gt;, but that has the same
problems as above. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;ProtonMail&#x2F;status&#x2F;1278389663078768641&quot;&gt;ProtonDrive&lt;&#x2F;a&gt; has potential, but it’s
not out yet.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EDIT:&lt;&#x2F;strong&gt; ProtonDrive is now in beta for paying subscribers, but I am
shifting away from the Proton ecosystem for other reasons and do not
recommend it. More in a future blog post.&lt;&#x2F;p&gt;
&lt;p&gt;Enter &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;syncthing.net&#x2F;&quot;&gt;&lt;strong&gt;Syncthing&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;. &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tonsky.me&#x2F;blog&#x2F;syncthing&#x2F;&quot;&gt;Nikita Tonsky&lt;&#x2F;a&gt; wrote
one of my favorite posts of all time about Syncthing – go read it. One
reason Syncthing is so great is that it’s not the same thing as KBFS
or any of the other “Drive” solutions. Instead of being a file hosting
system, it’s a “continuous file synchronization program” – aka p2p.
You have no data limits other than your storage and no third-party to
worry about. Plus, sharing folders is also incredibly easy. Just read
the article.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bonus-step-4-video-calling&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bonus-step-4-video-calling&quot; aria-label=&quot;Anchor link for: bonus-step-4-video-calling&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Bonus Step #4: Video Calling&lt;&#x2F;h3&gt;
&lt;p&gt;It would be a shame to talk about text chat, or really any form of
communication, in this new pandemic age without talking about video
chat. After all, the whole reason I’m writing this article is because
the new videocalling giant &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zoom.us&#x2F;&quot;&gt;Zoom&lt;&#x2F;a&gt;. So, how have I replaced Zoom
and how does that relate to replacing Keybase? Well, Matrix happens to
have a fantastic &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jitsi.org&#x2F;&quot;&gt;Jitsi Meet&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;04&#x2F;06&#x2F;running-your-own-secure-communication-service-with-matrix-and-jitsi&quot;&gt;integration&lt;&#x2F;a&gt;.
Plus, the folks over at Jitsi are &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jitsi.org&#x2F;blog&#x2F;e2ee&#x2F;&quot;&gt;working on E2E encryption for their
calls&lt;&#x2F;a&gt;. I’ve integrated Jitsi Meet into my self-hosted
instance of Matrix, and now all my videocalls are just that – mine!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;summary&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#summary&quot; aria-label=&quot;Anchor link for: summary&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Summary&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Swapped chat to Matrix and Riot.&lt;&#x2F;li&gt;
&lt;li&gt;Swapped identity verification to Indieweb.&lt;&#x2F;li&gt;
&lt;li&gt;Swapped file storage&#x2F;sync to Syncthing.&lt;&#x2F;li&gt;
&lt;li&gt;Added videocalling to chat program via Jitsi.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Keybase is a great service, and the people who work there should be
really proud of what they’ve built. However, given Zoom’s aquisition
of the company, the stability and security of the product have been
called into question. So, ever one to hop on a hype train, I jumped
ship. I’m really happy with my solution, and I’d love to hear your
thoughts as well.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>Keybase Has an Onion Address</title>
    <published>2020-07-03T00:00:00+00:00</published>
    <updated>2022-06-15T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/keybase-hidden-address/" type="text/html"/>
    <id>https://figbert.com/posts/keybase-hidden-address/</id>
    <content type="html">
      &lt;p&gt;Little known fact about &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;keybase.io&#x2F;&quot;&gt;Keybase&lt;&#x2F;a&gt;: it has two onion addresses.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;The short &lt;code&gt;fncuwbiisyh6ak3i.onion&lt;&#x2F;code&gt; and the longer
&lt;code&gt;keybase5wmilwokqirssclfnsqrjdsi7jdir5wy7y7iu3tanwmtp6oid.onion&lt;&#x2F;code&gt;. Huh.&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>I Wrote This #2</title>
    <published>2020-06-27T00:00:00+00:00</published>
    <updated>2022-06-15T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/i-wrote-this-two/" type="text/html"/>
    <id>https://figbert.com/posts/i-wrote-this-two/</id>
    <content type="html">
      &lt;p&gt;Hi! So, I just started this series and I already missed a week. Oh well.
This week was a crazy week for Apple and their operating systems, as
they announced iOS 14 and macOS 11 Big Sur at this year’s &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20201105203007&#x2F;https:&#x2F;&#x2F;developer.apple.com&#x2F;wwdc20&#x2F;&quot;&gt;WWDC&lt;&#x2F;a&gt;. I’ve
also started working on a new game project, another little side project,
and finding a good alternative to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;keybase.io&#x2F;&quot;&gt;Keybase&lt;&#x2F;a&gt; now that it’s &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;keybase.io&#x2F;blog&#x2F;keybase-joins-zoom&quot;&gt;owned by
Zoom&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;jailbreaking-my-iphone&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#jailbreaking-my-iphone&quot; aria-label=&quot;Anchor link for: jailbreaking-my-iphone&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Jailbreaking my iPhone&lt;&#x2F;h2&gt;
&lt;p&gt;When I was a kid – or at least, a younger child than I am now – I had a
friend who jailbroke his phone. I thought it was super cool, and wanted
to do the same. At around the same time I was watching &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;TechSource&quot;&gt;TechSource&lt;&#x2F;a&gt;, I
got deep into those &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;results?search_query=top+ten+jailbreak+tweaks&quot;&gt;Top 10 Amazing Jailbreak Tweaks&lt;&#x2F;a&gt; compilations.
However, I wasn’t allowed to jailbreak my phone because my parents said
it wasn’t allowed, and that was the end of that.&lt;&#x2F;p&gt;
&lt;p&gt;Until last week, when I decided to jailbreak my iPhone 7 running iOS
13.5.1 using the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;checkra.in&quot;&gt;checkra1n&lt;&#x2F;a&gt; hardware exploit. To do this, I couldn’t
use my &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.apple.com&#x2F;shop&#x2F;product&#x2F;MM0A3AM&#x2F;A&#x2F;usb-c-to-lightning-cable-1-m&quot;&gt;USB-C to Lightning cable&lt;&#x2F;a&gt; due to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;checkra1n&#x2F;BugTracker&#x2F;issues&#x2F;1#issue-519574712&quot;&gt;a known issue&lt;&#x2F;a&gt; and instead
swapped to a USB-A to Lightning cable with a USB-A to USB-C adapter.
After jailbreaking the phone, I began to install a host of tweaks. One
of the most interesting things I learned about the jailbreaking
community is that charging upfront for apps is quite common for premium
and well-known tweaks, which stands in high contrast to the iOS App
Store’s ubiquitous freemium payment model (a free download followed by a
monthly subscription) especially in the light of the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hey.com&#x2F;apple&quot;&gt;Apple-Hey.com
controversy&lt;&#x2F;a&gt; of recent weeks.&lt;&#x2F;p&gt;
&lt;p&gt;All in all, I spent around USD$21 on tweaks, which is infinitely more
than I have spent on the App Store – so maybe charging upfront does
work. Huh.&lt;&#x2F;p&gt;
&lt;video autoplay loop muted playsinline&gt;
  &lt;source src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;i-wrote-this-two&#x2F;jailbreak.webm&quot; type=&quot;video&#x2F;webm&quot;&gt;
  &lt;source src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;i-wrote-this-two&#x2F;jailbreak.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
  Your browser doesn&#x27;t support the video tag, which I use in place of .gifs, and&#x2F;or the video formats in use here – sorry!
&lt;&#x2F;video&gt;
&lt;h2 id=&quot;updating-my-idevices-to-developer-betas&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#updating-my-idevices-to-developer-betas&quot; aria-label=&quot;Anchor link for: updating-my-idevices-to-developer-betas&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Updating my iDevices to Developer Betas&lt;&#x2F;h2&gt;
&lt;p&gt;Soon after completing the jailbreak, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20201105203007&#x2F;https:&#x2F;&#x2F;developer.apple.com&#x2F;wwdc20&#x2F;&quot;&gt;WWDC&lt;&#x2F;a&gt; happened and new developer
betas were released. Never one to miss jumping on a hype train, I
updated both of my main devices to the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.apple.com&#x2F;download&quot;&gt;new software&lt;&#x2F;a&gt;. These new betas
come with a whole host of bugs, as is to be expected, which I plan to
write about in a blog post coming soon. So far, however, I’m liking
these updates – the PiP on iOS is &lt;em&gt;incredible&lt;&#x2F;em&gt;, and the new design on
macOS is growing on me.&lt;&#x2F;p&gt;
&lt;p&gt;Some interesting resources:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Q2aaCDNjWEg&quot;&gt;An interview of Craig Federighi by MKBHD&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gnachman&#x2F;iterm2&#x2F;-&#x2F;issues&#x2F;8964&quot;&gt;These&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gnachman&#x2F;iterm2&#x2F;-&#x2F;issues&#x2F;8975&quot;&gt;three&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gnachman&#x2F;iterm2&#x2F;-&#x2F;issues&#x2F;8969&quot;&gt;issues&lt;&#x2F;a&gt; on GitLab for iTerm2 users&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;firefox&#x2F;comments&#x2F;hg6cy8&#x2F;gifs_and_video_on_reddit_wont_play_on_macos_big&quot;&gt;These&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=1647816&quot;&gt;two&lt;&#x2F;a&gt; posts for Firefox&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Homebrew&#x2F;brew&#x2F;issues&#x2F;7803&quot;&gt;This Github issue&lt;&#x2F;a&gt; for Homebrew users. &lt;del&gt;so basically everybody.&lt;&#x2F;del&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Interestingly, I was having a bunch of issues with brew (&lt;code&gt;curl&lt;&#x2F;code&gt; was
broken?) after updating to Big Sur but now it seems to be working
flawlessly. Very nice.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;making-a-doughnut-in-blender&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#making-a-doughnut-in-blender&quot; aria-label=&quot;Anchor link for: making-a-doughnut-in-blender&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Making a Doughnut in Blender&lt;&#x2F;h2&gt;
&lt;p&gt;For my next medium-large project, I’m going to need to make some 3D art
and models. One problem: I don’t know how to do that, or rather, I
didn’t. Thanks internet! I powered through the incredible &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;playlist?list=PLjEaoINr3zgEq0u2MzVgAaHEBt--xLB6U&quot;&gt;Blender
Beginner Tutorial Series&lt;&#x2F;a&gt; by the &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;channel&#x2F;UCOKHwx1VCdgnxwbjyb9Iu1g&quot;&gt;Blender Guru&lt;&#x2F;a&gt;. Here’s my final
animation:&lt;&#x2F;p&gt;
&lt;video autoplay loop muted playsinline&gt;
  &lt;source src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;i-wrote-this-two&#x2F;doughnut.webm&quot; type=&quot;video&#x2F;webm&quot;&gt;
  &lt;source src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;i-wrote-this-two&#x2F;doughnut.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
  Your browser doesn&#x27;t support the video tag, which I use in place of .gifs, and&#x2F;or the video formats in use here – sorry!
&lt;&#x2F;video&gt;
&lt;h2 id=&quot;replacing-keybase&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#replacing-keybase&quot; aria-label=&quot;Anchor link for: replacing-keybase&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Replacing Keybase&lt;&#x2F;h2&gt;
&lt;p&gt;Now that &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;keybase.io&#x2F;blog&#x2F;keybase-joins-zoom&quot;&gt;Keybase is compromised&lt;&#x2F;a&gt;, I thought it would be
good to seek out an alternative. Initially, I thought that &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;keys.pub&quot;&gt;keys.pub&lt;&#x2F;a&gt;
would be perfect – I thought it was a slightly-tweaked fork. However,
this does not appear to be the case. Instead, it seems kinda like garbo
– it doesn’t have the budget Keybase had, and as a result, is majorly
lacking in features. However, I’ve replaced Keybase completely, and am
happier with this setup than I ever was with Keybase. My new setup uses
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matrix.org&quot;&gt;Matrix&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;about.riot.im&quot;&gt;Riot&lt;&#x2F;a&gt; for messaging, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jitsi.org&quot;&gt;Jitsi&lt;&#x2F;a&gt; for video chat, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;syncthing.net&quot;&gt;Syncthing&lt;&#x2F;a&gt;
for file storage, and an &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;indieweb.org&quot;&gt;Indieweb&lt;&#x2F;a&gt; h-card for identity verification. I
plan on writing more about this at a later date, but I’m really pleased
with the results so far.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;future-projects&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#future-projects&quot; aria-label=&quot;Anchor link for: future-projects&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Future Projects&lt;&#x2F;h2&gt;
&lt;p&gt;I’ve got a few interesting projects in the pipeline at the moment, not
counting the few articles that I’ve already promised to write: &lt;em&gt;Glitches
in macOS Big Sur and How to Fix Them&lt;&#x2F;em&gt; and &lt;em&gt;How to Replace Keybase in 4
Easy Steps&lt;&#x2F;em&gt;. My next major project is a dreidel game&#x2F;simulator for
mobile devices – I plan to code it with &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;godotengine.org&quot;&gt;Godot&lt;&#x2F;a&gt;, make the models with
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.blender.org&quot;&gt;Blender&lt;&#x2F;a&gt;, and do any music&#x2F;sound stuff in &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.image-line.com&#x2F;flstudio&quot;&gt;FLStudio&lt;&#x2F;a&gt;. Naturally, I’ll
keep you all updated on any progress there.&lt;&#x2F;p&gt;
&lt;p&gt;I’m also working on a much smaller project that should take around a day
or two to complete. The working title is “howmanyisraels.com” –
essentially, it’s a website that takes the size of the State of Israel,
and compares it to the size of a given location and tells you how many
times Israel could fit inside it. All I need to do is find a suitable
mapping API (preferably not by Google) that will tell me the size of
different locations and I can whip it into a static site!&lt;&#x2F;p&gt;
&lt;p&gt;I’m also planning on revamping the txtodo macOS app with Mac Catalyst,
which I feel I haven’t properly explored. I’ve also discovered a bug in
the app that causes issues when tasks are modified by CloudKit instead
of the user, so I’m going to have to work on that as well. Shouldn’t be
hard!&lt;&#x2F;p&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;i-wrote-this-two&#x2F;rick-and-morty.jpg&quot; type=&quot;img&#x2F;jpg&quot;&gt;
  &lt;img src=&quot;rick-and-morty.jpg&quot; alt=&quot;Let&amp;#x27;s go. In and out. Twenty-minute adventure.&quot;&#x2F;&gt;
&lt;&#x2F;picture&gt;
&lt;h2 id=&quot;interesting-blog-tidbits&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#interesting-blog-tidbits&quot; aria-label=&quot;Anchor link for: interesting-blog-tidbits&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Interesting Blog Tidbits&lt;&#x2F;h2&gt;
&lt;p&gt;I’m not sure what tense to write my headers in – I currently write them
in &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Present_continuous&quot;&gt;present continuous&lt;&#x2F;a&gt; tense but I am considering writing them like I
do Git commits. Huh. I’m also committing to writing more non-update blog
posts (i.e. the two I mentioned above), but we’ll see how that goes.
Writing is hard, and you shouldn’t make false promises. I’m also working
on implementing webmentions to the site, which is a little difficult
with a static site but I’m going to give it a try. Lastly, I really need
to learn how to use vim but it’s so goddamn hard. I’m writing this blog
post with it but I’m definitely not using it to its full potential at
all.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;new-music&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#new-music&quot; aria-label=&quot;Anchor link for: new-music&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
New Music&lt;&#x2F;h2&gt;
&lt;p&gt;Wow, these have been a great two weeks for the Israeli music scene. In
no particular order, here are some good new songs (basically in the
order they appear on the trending tab):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=lYfrKmEYpdA&quot;&gt;Habib Albi – Static and Ben El&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=0WU9CXeJ5Mk&quot;&gt;Rak Banot – Itay Levi and Stephane Legar&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=zSsaDRNHWtk&quot;&gt;Shvuaim – Eden Hason&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=2g6dIytgOpc&quot;&gt;Yom Huledet – Eliad&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=FkC9jkgspZM&quot;&gt;Hatzi Madleket – Dudu Faruk&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=E6IGYJgw5SY&quot;&gt;Hayde – Peled&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=3jqID99mCyo&quot;&gt;Ze Mi She Ani – Peled&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I know music isn’t tech, but I like it and now it’s a recurring section.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wrapup&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#wrapup&quot; aria-label=&quot;Anchor link for: wrapup&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Wrapup&lt;&#x2F;h2&gt;
&lt;p&gt;So, that’s been this week’s update. I’m really enjoying writing updates
on this blog, and I hope you stick around. Until then, farewell!&lt;&#x2F;p&gt;
&lt;p&gt;–
FIGBERT&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>I Wrote This #1</title>
    <published>2020-06-13T00:00:00+00:00</published>
    <updated>2022-06-15T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/posts/i-wrote-this-one/" type="text/html"/>
    <id>https://figbert.com/posts/i-wrote-this-one/</id>
    <content type="html">
      &lt;p&gt;So, I’m FIGBERT – I wrote this. &lt;del&gt;nailed that intro.&lt;&#x2F;del&gt; I’m a
highschooler working in the tech world, currently stuck at home like
pretty much everybody else who’s not trying to die. I plan on using this
blog to writing mainly on my experiences in the tech world, either in
focused articles centered around one topic or more summary-style
roundups like this, the “I Wrote This” series.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;I’ve always found statements like that kind of funny in their
generalness, and was thinking the other day that if I ever made a game
studio I would name it “I Made This Game.” Then, when I was trying to
think of what to name this series (The Weekly Fig? Fig Talks?), I
thought it would be funny to do something similar. I plan to release
these once a week on Saturdays, if all goes to plan. Without further
ado, here’s a brief summary of interesting things that happened this
week.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;releasing-txtodo-v2-0&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#releasing-txtodo-v2-0&quot; aria-label=&quot;Anchor link for: releasing-txtodo-v2-0&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Releasing txtodo v2.0&lt;&#x2F;h2&gt;
&lt;p&gt;Some people reading this may be familiar with my most recent project,
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;txtodo.app&quot;&gt;txtodo&lt;&#x2F;a&gt; – you can read a full writeup of the project &lt;a href=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;txtodo&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;. The point
of txtodo was to create a todo list application without any feature
bloat I found in other competing solutions – &lt;em&gt;every task deletes at
midnight&lt;&#x2F;em&gt;. This week I launched the MacOS companion app for txtodo,
completing my long-term “cross-platform” goal for the app. I went from
not knowing SwiftUI at all to having two published apps that talk to
each other! Making computers talk to each other is, like, the hardest
thing you can do with computers! &lt;del&gt;Ok, technically a lot of it is just
Apple APIs but still, let me have this.&lt;&#x2F;del&gt; I think there is probably one
more major change I could make to the app (moving the tasks from an
&lt;code&gt;@State&lt;&#x2F;code&gt; variable to an &lt;code&gt;@EnvironmentObject&lt;&#x2F;code&gt;), but after that it’s
pretty much bugfixes and… the bank? I don’t know.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;signing-git-commits&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#signing-git-commits&quot; aria-label=&quot;Anchor link for: signing-git-commits&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Signing Git Commits&lt;&#x2F;h2&gt;
&lt;p&gt;I while back I saw that when I editing my project README.md using the
GitHub web app, it got a little green “verified” badge next to the
commit message. I looked into it for a bit today, and found &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.github.com&#x2F;en&#x2F;authentication&#x2F;managing-commit-signature-verification&quot;&gt;this GitHub
help article&lt;&#x2F;a&gt;. One GPG install and Protonmail-key-download later, now
all my commits have a green badge! Neat!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-meh-vimrc&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-meh-vimrc&quot; aria-label=&quot;Anchor link for: the-meh-vimrc&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
The Meh vimrc&lt;&#x2F;h2&gt;
&lt;p&gt;I made the switch from nano to vim a few months ago, but up until a few
days ago I was using the barebones default &lt;code&gt;macvim&lt;&#x2F;code&gt;. Not anymore! I
DuckDuckGo-ed “vim configuration,” and downloaded what is supposedly
“The ultimate Vim configuration.” from &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;amix&#x2F;vimrc&quot;&gt;amix&lt;&#x2F;a&gt;. It’s a pretty good
configuration out-of-the-box: I’m using the Awesome version with the
fantastic &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.jetbrains.com&#x2F;lp&#x2F;mono&#x2F;&quot;&gt;Jetbrains Mono&lt;&#x2F;a&gt; font. I’m still not that good at actually
using vim to its fullest potential but I’m confident that I’ll improve
with a little practice and ascend to elite vim status in no time.&lt;&#x2F;p&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;i-wrote-this-one&#x2F;chad.jpg&quot; type=&quot;img&#x2F;jpg&quot;&gt;
  &lt;img src=&quot;chad.jpg&quot; alt=&quot;The virgin classic developer vs the chad linux dev&quot;&#x2F;&gt;
&lt;&#x2F;picture&gt;
&lt;h2 id=&quot;maybe-rust&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#maybe-rust&quot; aria-label=&quot;Anchor link for: maybe-rust&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Maybe Rust?&lt;&#x2F;h2&gt;
&lt;p&gt;Speaking of elite programmers: Rust! I’ve been thinking about learning
the language for a while, and now that I have no main project (other
than maintain my finished apps and sites), it’s as good a time as any to
learn a new language. It’s idiomatic syntax combined with low-level
abilities makes Rust seem a little bit like Python+ to me. It also helps
that it’s skyrocketing in popularity – maybe I’ll do the cliche Rust
developer thing and post about how much I love the language on &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;&quot;&gt;the
orange site&lt;&#x2F;a&gt; once I learn it. &lt;del&gt;ok so I was planning on linking a bunch
of posts like that here, but when I looked for them on HN I actually
couldn’t find any, but I distinctly remember reading them so I stand by
this statement.&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;from-brave-to-firefox&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#from-brave-to-firefox&quot; aria-label=&quot;Anchor link for: from-brave-to-firefox&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
From Brave to Firefox&lt;&#x2F;h2&gt;
&lt;p&gt;I made the switch from &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;brave.com&#x2F;&quot;&gt;Brave&lt;&#x2F;a&gt; to &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;developer&#x2F;&quot;&gt;Firefox Developer Edition&lt;&#x2F;a&gt; this week,
after accumulating around 50 USD in BAT. I started using Brave almost
when it came out and loved it – the chromium feel with a powerful built
in adblocker? It sounded too good to be true – and perhaps it was: over
time the browsers performace began to slow down, they &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;davidgerard.co.uk&#x2F;blockchain&#x2F;2020&#x2F;06&#x2F;06&#x2F;the-brave-web-browser-is-hijacking-links-and-inserting-affiliate-codes&#x2F;&quot;&gt;hijacked links&lt;&#x2F;a&gt;,
launched a &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;together.brave.com&#x2F;&quot;&gt;weird Zoom competitor&lt;&#x2F;a&gt; with no fanfare or announcement, and
refuse to get rid of their &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;btc&#x2F;comments&#x2F;ck56zw&#x2F;privacy_focused_brave_browser_now_requires_kyc&#x2F;&quot;&gt;required KYC&lt;&#x2F;a&gt;. Anyways, I dropped it. Now my
dock is all blue!&lt;&#x2F;p&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;posts&#x2F;i-wrote-this-one&#x2F;dock.png&quot; type=&quot;img&#x2F;png&quot;&gt;
  &lt;img src=&quot;dock.png&quot; alt=&quot;My dock with all blue apps&quot;&#x2F;&gt;
&lt;&#x2F;picture&gt;
&lt;h2 id=&quot;new-music&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#new-music&quot; aria-label=&quot;Anchor link for: new-music&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
New Music&lt;&#x2F;h2&gt;
&lt;p&gt;On a non-tech-related note, a bunch of good new music came out recently.
In no particular order, here are some good new songs (largely out of the
Middle East):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=L3e4UryXDo0&quot;&gt;Coronavirus by Mohamed Ramadan&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=F2ZLege5wF8&quot;&gt;Zot Ani – Ela Li Lahv&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=oQbh5Kvet04&quot;&gt;Million Dollar – Noah Kirel and Shachar Saul&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=lcXUmCG-En8&quot;&gt;Naughty – Tzagay Boi&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=oNg3M9IJJlY&quot;&gt;TROLLZ – 6ix9ine &amp;amp; Nicki Minaj&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;wrapup&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#wrapup&quot; aria-label=&quot;Anchor link for: wrapup&quot;&gt;
  &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 50 41&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Wrapup&lt;&#x2F;h2&gt;
&lt;p&gt;So, that’s been this week’s update. I’ve got some exciting ideas for my
next posts, so I hope you stick around for what’s to come. Until then,
farewell!&lt;&#x2F;p&gt;
&lt;p&gt;–
FIGBERT&lt;&#x2F;p&gt;

    </content>
  </entry>
  <entry xml:lang="en">
    <title>txtodo</title>
    <published>2020-05-20T00:00:00+00:00</published>
    <updated>2022-06-14T00:00:00+00:00</updated>
    <author>
      <name>Benji Welner</name>
    </author>
    <link rel="alternate" href="https://figbert.com/projects/txtodo/" type="text/html"/>
    <id>https://figbert.com/projects/txtodo/</id>
    <content type="html">
      &lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;txtodo.app&#x2F;&quot;&gt;&lt;strong&gt;txtodo&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; is a minimalist open-source todo list app inspired by Jeff
Huang’s &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jeffhuang.com&#x2F;productivity_text_file&#x2F;&quot;&gt;&lt;em&gt;One File to Rule Them All&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;linked&#x2F;2020&#x2F;03&#x2F;20&#x2F;mac-assed-mac-apps&quot;&gt;Mac-assed Mac apps&lt;&#x2F;a&gt; like
&lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;iina.io&#x2F;&quot;&gt;IINA&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.sketch.com&#x2F;&quot;&gt;Sketch&lt;&#x2F;a&gt;, and Safari. It’s available for download on iOS and
macOS via the App Store.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;txtodo&#x2F;blank.jpg&quot; alt=&quot;txtodo on MacOS Big Sur, with no tasks&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;txtodo lists your immediate, short-term tasks to help you get things
done without overthinking it. At midnight, all tasks are discarded so
you can start fresh tomorrow. You can also create up to three long-term
tasks that “float” with you from day-to-day.&lt;&#x2F;p&gt;
&lt;p&gt;On 15 February 2020, I deleted my account with Trello. A solo developer,
I know my projects inside and out. I know what features need work, and
which graphics need a refresh. I don’t need a massive &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;catb.org&#x2F;jargon&#x2F;html&#x2F;C&#x2F;crudware.html&quot;&gt;crudware&lt;&#x2F;a&gt; suite
to keep track of every little move. I need something small.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;figbert.com&#x2F;projects&#x2F;txtodo&#x2F;simulator.jpg&quot; alt=&quot;txtodo on iOS 14, with no tasks&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A dead-simple UX and midnight expiration date prevents the overwhelming
buildup of tasks we delay over and over again, and helps you deal only
with tasks you can get done &lt;em&gt;that day&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Download the app &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.apple.com&#x2F;us&#x2F;app&#x2F;txtodo&#x2F;id1504609185&quot;&gt;on the App Store&lt;&#x2F;a&gt;, and explore the source code &lt;a rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git.figbert.com&#x2F;txtodo&#x2F;&quot;&gt;on my
forge&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

    </content>
  </entry>
</feed>
