<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>sef.kloninger.com</title><link>https://sef.kloninger.com/</link><description>None</description><atom:link href="https://sef.kloninger.com/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Thu, 16 Apr 2026 17:05:04 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>"It's Overwriting, Not Appending"</title><link>https://sef.kloninger.com/posts/ai-mediation/</link><dc:creator>Sef Kloninger</dc:creator><description>&lt;p&gt;I like the command line. But more and more I find myself &lt;strong&gt;mediating those tasks through a chat&lt;/strong&gt;, which surprises me because I used to find chat frustrating. But Claude is just so darn helpful.&lt;/p&gt;
&lt;p&gt;Here's an example. I've been working on a typical scrape-and-loader for election data. It does one election cycle at a time to split up the work and give you a chance to inspect. After the first download, I verified the data which looked good. I asked Claude to get all the rest. It dutifully constructed a loop ("&lt;code&gt;for i in 2000, 2002&lt;/code&gt;...") and started working down the list, which would take hours. Before heading to bed, I checked in.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screenshot of a Claude chat finding a bug" src="https://sef.kloninger.com/f/claude-finds-a-bug.png"&gt;&lt;/p&gt;
&lt;p&gt;Of course throwing away the data as we go isn't what I wanted.&lt;/p&gt;
&lt;p&gt;What's fascinating is that I didn't ask for this check. Claude checked to make sure the job &lt;em&gt;made sense&lt;/em&gt; and warned me when it didn't. Delightful!&lt;/p&gt;</description><category>AI</category><category>Tech</category><guid>https://sef.kloninger.com/posts/ai-mediation/</guid><pubDate>Thu, 16 Apr 2026 15:00:00 GMT</pubDate></item><item><title>I Built This: Leafletter</title><link>https://sef.kloninger.com/posts/leafletter/</link><dc:creator>Sef Kloninger</dc:creator><description>&lt;p&gt;&lt;img style="float:right" class="postimage" src="https://sef.kloninger.com/f/leafletter-icon-large.png" alt="Leafletter app icon" width="60%"&gt;&lt;/p&gt;
&lt;p&gt;I'd like to discuss an app I just wrote. Not so much the app itself, but
how I made it and why.&lt;/p&gt;
&lt;p&gt;You can try it out yourself. The web version is &lt;a href="https://leafletter.app/"&gt;Leafletter.app&lt;/a&gt; and there's
an iPhone app available on the &lt;a href="https://apps.apple.com/us/app/leafletter/id6760505256"&gt;Apple App Store&lt;/a&gt;. The &lt;a href="https://leafletter.app/about/"&gt;about page&lt;/a&gt; has a
short description of what it does. There are a couple of test campaigns where
you can log a pretend leaflet distribution trip. Give it a try, that's what
those test campaigns are for!&lt;/p&gt;
&lt;p&gt;The two main use cases are: volunteers who distribute these leaflets need to
know what neighborhoods have already been covered; workers can report in so
others don't double up their efforts.&lt;/p&gt;
&lt;p&gt;Most of the interaction is through the "worker view". There you have a map
showing what's already been done and a button for logging your own trip. There
are web and iOS versions, although the iOS one is mostly just a webview.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screenshot of Leafletter App's worker view" src="https://sef.kloninger.com/f/leafletter-worker-screenshot.png"&gt;&lt;/p&gt;
&lt;h3&gt;Why?&lt;/h3&gt;
&lt;p&gt;I built this app for a few reasons.&lt;/p&gt;
&lt;p&gt;First was to help my wife. She's been working with &lt;a href="https://indivisiblemp.org/"&gt;Indivisible Mid-Peninsula&lt;/a&gt;
here in the SF Bay Area to organize &lt;a href="https://nokings.org"&gt;No Kings&lt;/a&gt; protests, and needed something
like this.&lt;/p&gt;
&lt;p&gt;There are existing apps out there for organizing campaigns, but they all cost
money and are much more heavyweight than what we need here. Their target markets
are people hiring and managing gig workers to distribute things, which means a
lot of workflow to keep track of inventory and tracking work (GPS, photos). You
wouldn't want all those flyers just in a trashcan somewhere. Instead, my goal
was something simple, with a main interface that was easy to use and low
friction -- no accounts!&lt;/p&gt;
&lt;p&gt;Second, this was the capstone project in the Vibe Coding class I took this
quarter. I spent a few more weeks tweaking it, making it more robust, and adding
features, but the basics were working in that week I spent on it in class.&lt;/p&gt;
&lt;p&gt;Third, it was just plain fun to do. I learned a ton living in Claude Code. The
overall experience was joyful. While I'd like for this to get some use, the fun
was in the making.&lt;/p&gt;
&lt;h3&gt;What I Learned&lt;/h3&gt;
&lt;p&gt;I liked managing things mostly through GitHub Issues. I have a nice workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;File a bug describing what I wanted&lt;/li&gt;
&lt;li&gt;"Let's fix issue #100"&lt;/li&gt;
&lt;li&gt;Simple things just got coded up right then, harder things would go through
   planning&lt;/li&gt;
&lt;li&gt;Local testing&lt;/li&gt;
&lt;li&gt;"Commit it and close the bug"&lt;/li&gt;
&lt;li&gt;I do the git push&lt;/li&gt;
&lt;li&gt;Infra notices and does its build and push&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I did this for issues big and small -- at this writing that means &lt;a href="https://github.com/sefk/leafletter-app/issues?q=is%3Aissue"&gt;over 100
issues&lt;/a&gt;. The bugs were a good way to have Claude capture its plan, or a
good place to capture work-in-progress for later.&lt;/p&gt;
&lt;p&gt;I recorded a two-minute &lt;a href="https://youtu.be/gyJbiEwGMoU"&gt;screencast&lt;/a&gt; showing my workflow in action. This one
was adding a little navigation &lt;a href="https://github.com/sefk/leafletter-app/issues/100"&gt;feature&lt;/a&gt;, a request from my sister.&lt;/p&gt;
&lt;p&gt;I also found it helpful to set up some personas that I could delegate tasks to.
A &lt;em&gt;Developer&lt;/em&gt; to do most of the work, adhering to some rules I put in for good
coding practices ("always run tests"). And then two others that were rarely
used, on demand: a &lt;em&gt;Project Manager&lt;/em&gt; to debug GitHub and a &lt;em&gt;UX Engineer&lt;/em&gt; to
review and make suggestions ("Great, please open bugs for all of those").&lt;/p&gt;
&lt;p&gt;The tricky part was managing the download of the street data and stitching it
together into something manageable. It's a fair amount of data, and the
OpenStreetMap backend isn't very reliable. Retries and long-running operations
needed a queue and worker. The screenshots below show the organizer interface
with one event still being processed, and the ops console showing the
different servers.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Leafletter list of campaigns" src="https://sef.kloninger.com/f/leafletter-campaigns.png"&gt;
&lt;img alt="Leafletter ops console on railway" src="https://sef.kloninger.com/f/leafletter-railway.png"&gt;&lt;/p&gt;
&lt;p&gt;I'm using Railway for hosting for the moment, which has been OK. Their storage
setup is a bit wonky (&lt;a href="https://github.com/sefk/leafletter-app/issues/102"&gt;#102&lt;/a&gt;) and it might prove to be expensive -- we'll see.&lt;/p&gt;
&lt;p&gt;I did all of this easily within my $20/month Claude Code token budget. The
biggest expense was the $100 fee to have the privilege of putting something up
on Apple's App Store (boo).&lt;/p&gt;
&lt;h3&gt;Future work&lt;/h3&gt;
&lt;p&gt;Mobile still could use some work.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I tried an iOS native interface for a while, but could never get it to perform
  well enough. But that'd still probably give a better experience.&lt;/li&gt;
&lt;li&gt;I'd like to do an Android app too. I don't have a dev phone, but I imagine I
  could buy one from a friend at some point.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And then a ton of features: organization views and ACLs, correlating streets
with household demographics, better UX for selecting streets, etc. If you have
feedback please &lt;a href="https://github.com/sefk/leafletter-app/issues"&gt;file a bug&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;I'm looking forward to getting this in the hands of some real users soon and
getting some feedback.&lt;/p&gt;</description><category>AI</category><category>Engineering</category><guid>https://sef.kloninger.com/posts/leafletter/</guid><pubDate>Wed, 25 Mar 2026 05:00:00 GMT</pubDate></item><item><title>"Hey Claude, What's Interesting In This Dataset?"</title><link>https://sef.kloninger.com/posts/claude-dataviz/</link><dc:creator>Sef Kloninger</dc:creator><description>&lt;p&gt;&lt;span style="float:right; width:60%; display:block; margin: 0 0 1em 1em; outline: 1px solid #ddd; box-shadow: 0 4px 12px rgba(0,0,0,0.15);"&gt;&lt;img style="display:block; width:100%; padding:0;" class="postimage" src="https://sef.kloninger.com/f/tweetskb-dash.png" alt="TweetsKB EDA Dashboard"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This week I used Claude as my pipeline engineer and data analyst. I had a ton of
fun and figured I'd write about it.&lt;/p&gt;
&lt;p&gt;I've been taking a Data Visualization class at Stanford Continuing Studies (TECH
26, Winter 2026). I needed a final project. There's this data set I've always
wanted to play with, &lt;a href="https://data.gesis.org/tweetskb/"&gt;TweetsKB&lt;/a&gt;. Researchers took the Twitter Firehose data from
2013-23, back when it was &lt;a href="https://www.reddit.com/r/DataHoarder/comments/10rj691/twitter_will_remove_free_access_to_the_twitter/"&gt;more available&lt;/a&gt;, and ran it through entity extraction
and sentiment analysis. They made the dataset available for others to work with.
It's well documented and a reasonable size, about 500GB. I figured there'd be
something interesting in there.&lt;/p&gt;
&lt;p&gt;The cool part didn't turn out to be the analysis itself. I did find and graph
some trends, like Wordle hitting the scene in Feb 2022 and then falling off;
contrast that with K-Pop, which we all know has been much more durable. You can
see those in the &lt;a href="https://docs.google.com/presentation/d/1foF5n95BJadZ3fQEziQO697c3KwIVdSr7Vd2XcmAElg/edit"&gt;presentation&lt;/a&gt; I did for the class, and I included some charts
below.&lt;/p&gt;
&lt;p&gt;But the main thing is this was just plain &lt;strong&gt;fun&lt;/strong&gt;.&lt;/p&gt;
&lt;h4&gt;What I (We) Did&lt;/h4&gt;
&lt;p&gt;What I spent the week doing was chatting with Claude interspersed with running
pipelines, bringing up and down jobs, etc. What it felt like though was having
my own junior engineer working hard for me, doing whatever I asked, and doing it
well and without complaint.&lt;/p&gt;
&lt;p&gt;This section has more of the details of how it went. Consider skipping if you
don't want to get in the weeds.&lt;/p&gt;
&lt;p&gt;We started with &lt;strong&gt;ETL pipelines&lt;/strong&gt;. File format conversion, multiprocessing,
scaling to fit RAM and processor limitations, progress bars and
interruption/restart logic.&lt;/p&gt;
&lt;p&gt;Yikes, this is full of offensive stuff! I &lt;a href="https://github.com/sefk/tweetskb-analysis/blob/main/session_prompts.md#14-2026-02-24-0130-utc"&gt;asked&lt;/a&gt; for &lt;strong&gt;redaction&lt;/strong&gt; with
stable terms and it found and used a nice &lt;a href="https://pypi.org/project/better-profanity/"&gt;off-the-shelf library&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When I didn't trust what I was seeing, I &lt;a href="https://github.com/sefk/tweetskb-analysis/blob/main/session_prompts.md#64-2026-02-25-1158-utc"&gt;asked&lt;/a&gt; for &lt;strong&gt;end-to-end data
quality tests&lt;/strong&gt;. Claude wrote them and then found and fixed a double counting
bug. Nice!&lt;/p&gt;
&lt;p&gt;When I wanted to wander around in the data I &lt;a href="https://github.com/sefk/tweetskb-analysis/blob/main/session_prompts.md#21-2026-02-24-1559-utc"&gt;asked&lt;/a&gt; for an &lt;strong&gt;EDA
dashboard&lt;/strong&gt; and got one. EDA is the term of art I learned in class, "exploratory
data analytics". The idea is something where you can click around, slice and
scrub, looking for interesting things like correlations and trends.&lt;/p&gt;
&lt;p&gt;You can see this in the screenshot at the top of this post. Essentially I got
the "Overview" and "Slice by Entity" tabs in one shot. How do you do EDA with it?
For example, the default view is two baseball teams. See the peaks when the
Red Sox won championships in 2013 and 2018? But the Astros peak was higher in
2017, presumably because of the &lt;a href="https://en.wikipedia.org/wiki/Houston_Astros_sign_stealing_scandal"&gt;scandal&lt;/a&gt;. Fun, right?&lt;/p&gt;
&lt;p&gt;I then iterated on that dashboard quite a bit. Instead of a normal notebook or
colab-style workflow I was used to, I iterated around the dashboard. I'd
ask Claude to add or update charts in the dashboard ("annualize the last data
point"), it'd reload, test and repeat. I did fall back to python or a notebook
when I had to look at the raw data, but just in throwaway mode. I found this to
be a really fast way to work.&lt;/p&gt;
&lt;p&gt;But I still had a hard time finding something interesting in the dataset. So I
just &lt;a href="https://github.com/sefk/tweetskb-analysis/blob/main/session_prompts.md#110-2026-02-26-0009-utc"&gt;asked&lt;/a&gt; an open-ended question, basically "&lt;strong&gt;find interesting stuff&lt;/strong&gt;"
and it produced &lt;a href="https://github.com/sefk/tweetskb-analysis/tree/main/analysis"&gt;five analysis scripts&lt;/a&gt;. Most of what's in the "Analysis" came
from this one query, except for "Democrats vs. Republicans", which I did on my
own and didn't prove too insightful.&lt;/p&gt;
&lt;p&gt;And yes, when I had ops issues Claude fixed those for me too, see screenshot
below. Sure, I &lt;em&gt;could&lt;/em&gt; tune workers vs. threads and manage PID files, but who
wants to? And yes, when it came time to write the &lt;a href="https://docs.google.com/presentation/d/1foF5n95BJadZ3fQEziQO697c3KwIVdSr7Vd2XcmAElg/edit"&gt;presentation&lt;/a&gt;, Claude wrote
that for me too. Well, most of it.&lt;/p&gt;
&lt;p&gt;You can play with the &lt;a href="http://home.kloninger.com:8050/?tab=analysis"&gt;dashboard&lt;/a&gt; yourself. It's hosted on an underpowered
server at my home, so if it doesn't work, let me know or try again later. All
the code is &lt;a href="https://github.com/sefk/tweetskb-analysis"&gt;in GitHub&lt;/a&gt; and there are &lt;a href="https://github.com/sefk/tweetskb-analysis/issues"&gt;known issues&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;At some point I felt it was helpful to define "personas" for Claude to better
describe the goals of each prompt. Then I started a prompt with "hey dashboard
engineer, I'd like to...". Tough to tell how much that helped.&lt;/p&gt;
&lt;h4&gt;Some Thoughts&lt;/h4&gt;
&lt;p&gt;Let's not give AI too much credit. Pulling entity mentions out of tweets is
something that data scientists and journalists have been doing for years. And
this particular dataset probably has been around for a while and might very well
have been used and written about, by undergrads. The story here might very well
not be "gee whiz, looks at how smart AI is" and more "look at how AI has scooped
up and repackaged years of everyone else's work."&lt;/p&gt;
&lt;p&gt;The speed of accomplishing these dev/debug tasks was remarkable. I felt like I
had a coworker. And at remarkably low cost, too. This was all using the Claude
$20/month plan. This past week was the time I poked above the token cap. I
happily paid $5 more to keep on going.&lt;/p&gt;
&lt;p&gt;Is this programming? I think so, at least it felt that way when I was doing it.
I was very much using the same parts of my brain as when I'm writing all the
code myself. Indeed for years most of us have been "programming" mostly via
Google and Stack Overflow. It's like that but fast.&lt;/p&gt;
&lt;h4&gt;Charts&lt;/h4&gt;
&lt;p&gt;Here are three charts that fell out. Again, don't focus so much on the insights
but how these came from a high-level, open ended prompt.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Chart of COVID posts and sentiment" src="https://sef.kloninger.com/f/tweetskb-covid.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Chart showing the Crypto bubble" src="https://sef.kloninger.com/f/tweetskb-crypto.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Two charts showing pop culture moments" src="https://sef.kloninger.com/f/tweetskb-popculture.png"&gt;&lt;/p&gt;
&lt;h4&gt;Some Screenshots&lt;/h4&gt;
&lt;p&gt;Maybe some people would like to see what this looked like when I was doing it.
Here's a screenshot during pipeline development. On the left is Claude adding
some logging; the top right is &lt;code&gt;tail -f&lt;/code&gt; on a log file, and the bottom right
shows the progress bars churning through the data. &lt;/p&gt;
&lt;p&gt;&lt;img alt="Screenshot of pipeline development" src="https://sef.kloninger.com/f/tweetskb-pipeline.png"&gt;&lt;/p&gt;
&lt;p&gt;My modest Mac has 8 performance cores, hence 8 workers. &lt;/p&gt;
&lt;p&gt;And this screenshot is kind of fun. Look at how Claude explained a worker crash
issue that I asked it to debug: "You already flagged it, the UI literally
says..." 😀&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screenshot of Claude debugging an ops problem" src="https://sef.kloninger.com/f/tweetskb-ops.png"&gt;&lt;/p&gt;
&lt;p&gt;Claude made the adjustment and saved its suggestions in a &lt;a href="https://github.com/sefk/tweetskb-analysis/issues/2"&gt;Github issue&lt;/a&gt; in
case I want to revisit it later.&lt;/p&gt;</description><category>AI</category><category>Tech</category><guid>https://sef.kloninger.com/posts/claude-dataviz/</guid><pubDate>Sat, 28 Feb 2026 15:00:00 GMT</pubDate></item><item><title>AI Is Good At Janitorial Work</title><link>https://sef.kloninger.com/posts/gemini-claude-cleanup/</link><dc:creator>Sef Kloninger</dc:creator><description>&lt;p&gt;&lt;img style="float:right" class="postimage" src="https://sef.kloninger.com/f/gemini-claude-cleanup.png" alt="Claude Code on the left, Gemini on the right" width="60%"&gt;&lt;/p&gt;
&lt;p&gt;It's been nice having AI tools at the ready for cleanup work. You know, those
tasks that require a little program or script. Sure you can write it yourself,
but it won't be fun, and it'll take some time, so instead you just don't bother
and it doesn't get done.&lt;/p&gt;
&lt;p&gt;Instead of just knocking this out I decided this would be a fun one to try with
the two tools I'm using the most these days, &lt;strong&gt;Gemini&lt;/strong&gt; and &lt;strong&gt;Claude&lt;/strong&gt;. I can't
really call this a proper bakeoff, since it's just those two and it's not an
especially hard task.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;And the result? Both did well but Gemini did a little better.&lt;/strong&gt; Gemini got it
right on the first try; Claude had two bugs that were easy to find and fix.
Claude was a little nicer to work with and produced a nicer description of the
solution. Aside from that, the end product was identical.&lt;/p&gt;
&lt;h3&gt;The Task&lt;/h3&gt;
&lt;p&gt;I wanted to clean up some of the old files backing this blog. I migrated the
site from Wordpress to Nikola in 2013. Even back then I &lt;a href="https://sef.kloninger.com/posts/switching-to-static.md"&gt;complained
about&lt;/a&gt; the crufty file format, but couldn't be
bothered to fix it then.&lt;/p&gt;
&lt;p&gt;The prompt describes in a fair bit of detail what I wanted done. Probably too
much detail. It's down at the bottom of this post.&lt;/p&gt;
&lt;p&gt;The best way to see what they did is to just look at the resulting commits:
&lt;a href="https://github.com/sefk/sefk.github.io/commit/4a91a57dc965b1e77c05fafbc05fa14f1a293c7f"&gt;Gemini&lt;/a&gt; and &lt;a href="https://github.com/sefk/sefk.github.io/commit/78cee0789d98677c5298df543e895d7e2002ff72"&gt;Claude&lt;/a&gt;. They're pretty similar. I asked both to save
their work in a &lt;code&gt;migration_scripts&lt;/code&gt; subdirectory, including its own summary
of the work and full log.&lt;/p&gt;
&lt;p&gt;For both tools I pay the $20/month that gives me access to reasonable token
limits and good production models -- Gemini 3 and Sonnet 4.6.&lt;/p&gt;
&lt;h3&gt;Thoughts on Claude&lt;/h3&gt;
&lt;p&gt;I didn't describe the problem as "Wordpress-style naming" but Claude sussed that
out. Honestly I'd forgotten that was the source of the problem. Nice!&lt;/p&gt;
&lt;p&gt;I like that Claude inserted comments in the configuration file without being
asked to.&lt;/p&gt;
&lt;p&gt;Despite being told to test, there were two bugs that I had to find.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Some of the redirects were broken. I pointed the problem out and it did more thorough
  testing using &lt;code&gt;curl&lt;/code&gt; and found the problem. The new format was what Gemini
  came up with in the first pass (luck? smarts?).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A missing newline between the metadata and the body caused the hero images
  to be dropped.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="side by side view showing bug" src="https://sef.kloninger.com/f/cleanup-missing-hero.png"&gt;&lt;/p&gt;
&lt;h3&gt;Thoughts on Gemini&lt;/h3&gt;
&lt;p&gt;I haven't used the Gemini CLI as much by this point. It seems to have borrowed
much of its UI and flow from Claude Code (slash commands, asking questions as
it goes) so it's familiar. It's really nice to use, just a smidgen less mature
and polished than Claude Code.&lt;/p&gt;
&lt;p&gt;I preferred Claude's writeup a little so I went with that one. But Gemini wins
the prize for nailing the task on the first try!&lt;/p&gt;
&lt;h3&gt;Usage&lt;/h3&gt;
&lt;p&gt;I really liked how Claude shows how much of its context window is used via the
&lt;code&gt;/context&lt;/code&gt; command. I had a harder time getting this kind of thing out of
Gemini, and even when I did it was harder to grok.&lt;/p&gt;
&lt;p&gt;I couldn't tell with either if I'm getting close to any global usage limits. I
should hope not, this wasn't a very big job.&lt;/p&gt;
&lt;h5&gt;Claude &lt;code&gt;/context&lt;/code&gt; Output&lt;/h5&gt;
&lt;p&gt;&lt;img alt="Claude context window usage" src="https://sef.kloninger.com/f/claude-context.png"&gt;&lt;/p&gt;
&lt;h5&gt;Gemini &lt;code&gt;/stats model&lt;/code&gt; Output&lt;/h5&gt;
&lt;p&gt;&lt;img alt='Gemini "stats for nerds"' src="https://sef.kloninger.com/f/gemini-context.png"&gt;&lt;/p&gt;
&lt;h3&gt;Prompt&lt;/h3&gt;
&lt;p&gt;Both started with this:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;First read DEV.md for context about this web site.

In the posts subdirectory are many files that follow an old 
naming convention.  Please convert them all to the new file
naming convention.

The old convention has files of the format YYYYMM&amp;lt;slug&amp;gt;.SUFFIX,
where YYYY is the year, MM is the month, and SUFFIX is html or
meta. &amp;lt;slug&amp;gt; is the short form of the the title, and should match
the "slug" field in the metadata

To convert to the new convention

1. Drop the YYYYMM file prefix

2. Combine the "html" and "meta" files into one markdown file
   with a "md" suffix. The contents of "meta" are at the top of
   the file as an HTML comment

3. Add redirects so the old names can still be served. Add tuples
   in the REDIRECTIONS of conf.py

Use the `nikola build` and `nikola serve` commands to test your
work. Make sure all old URL's still function. Make sure pages
look the same. Make sure tags still work.

Do not commit changes. Do not push to production.
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I also checked in a &lt;a href="https://github.com/sefk/sefk.github.io/blob/dev/DEV.md"&gt;&lt;code&gt;DEV.md&lt;/code&gt;&lt;/a&gt; file that described the purpose, directory
layout, and some constraints. Again, maybe overkill, but I figured this isn't
the last time I'll be asking one of these tools to help me futz with this site.&lt;/p&gt;</description><category>AI</category><category>Tech</category><guid>https://sef.kloninger.com/posts/gemini-claude-cleanup/</guid><pubDate>Wed, 18 Feb 2026 19:00:00 GMT</pubDate></item><item><title>Yeah, I Did Some Vibe Coding Too</title><link>https://sef.kloninger.com/posts/daleks/</link><dc:creator>Sef Kloninger</dc:creator><description>&lt;p&gt;This is a story about my recent experience Vibe Coding. The work itself isn't
impressive and this writeup isn't different than the many gee-whiz posts you see
these days. I didn't do &lt;a href="https://mastodon.social/@stroughtonsmith/116014270900193494"&gt;three apps in a day&lt;/a&gt;. But I wanted to write up my
experience, mostly to give me an excuse to tell an old tyme programming story
from the 1900's.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sef.kloninger.com/daleks"&gt;
&lt;img style="float:right" class="postimage" src="https://sef.kloninger.com/f/daleks-2026.png" alt="Screenshot of my recent Daleks game" width="50%"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Today, 2026&lt;/h3&gt;
&lt;p&gt;While I'm &lt;a href="https://sef.kloninger.com/posts/leaving-google/"&gt;on a break&lt;/a&gt; I'm taking a &lt;a href="https://continuingstudies.stanford.edu/courses/detail/20252_TECH-42"&gt;Vibe Coding class&lt;/a&gt;. It's a fun excuse to
play with some new toys, and it's well taught, and I like doing things with my
friend Jane.&lt;/p&gt;
&lt;p&gt;One interesting tidbit: the first day of class, February 3, 2026, was one year
and one day after "vibe coding" itself was coined via &lt;a href="https://x.com/karpathy/status/1886192184808149383?lang=en"&gt;tweet&lt;/a&gt;. That name seems
to have stuck, for the time being at least. On &lt;a href="https://atp.fm/678"&gt;last week's ATP&lt;/a&gt; they said that
by this time next year this will probably just be called "coding" and I bet
they're right.&lt;/p&gt;
&lt;p&gt;Anyway our week one assignment was to code up a game. &lt;strong&gt;In about two hours and
$10&lt;/strong&gt; I had a something up and running. I spent another couple of hours futzing
with version control, documentation, and hosting. But that's it! &lt;/p&gt;
&lt;p&gt;It's pretty basic, and not all that much fun, but you can &lt;a href="https://sef.kloninger.com/daleks"&gt;play it here&lt;/a&gt;. It's
hosted on Github pages, just like this blog. The code and construction notes are
in &lt;a href="https://github.com/sefk/daleks"&gt;checked in&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This was my first experience with &lt;a href="https://replit.com/"&gt;Replit&lt;/a&gt;. It's impressive and fun. This was
what was recommended for the class and the good folks at Replit were nice enough
to give us all $30 in credits, which I had plenty to spare. Most of my comrades
presented apps that were fancier than mind with 3d graphics, sound, and more
interactive game play. some also said though that they ended up spending much
more than I did, so YMMV on costs.&lt;/p&gt;
&lt;p&gt;One interesting part was dealing with integration. To get their code deployed
onto my personal website site required wiring up a GitHub workflow, which I'd
never done before. No problem, Replit took care of that too. Then I asked
&lt;a href="https://geminicli.com/"&gt;Gemini&lt;/a&gt; to get local hosting running. When I hit a permissions problem and a
crash I had to resist the urge to copy paste the error messages into a search
boxes and Stack Overflow, like I've done for years. Instead I asked Gemini to
debug and sort this out for itself and it did straight away. Pretty great.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.macintoshrepository.org/3913-daleks"&gt;
&lt;img style="float:right" class="postimage" src="https://sef.kloninger.com/f/daleks-1984.jpeg" alt="Original Daleks game from 1984" width="45%"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Forty Years Ago, 1985&lt;/h3&gt;
&lt;p&gt;Why'd I pick this weird old &lt;a href="http://en.wikipedia.org/wiki/Robots_%28BSD_game%29"&gt;chase game&lt;/a&gt;? Well, that's the more fun and
nostalgic part of the story.&lt;/p&gt;
&lt;p&gt;When I was fourteen years old, I spent the summer hand-coding a video game. I'd
gone to a family gathering and my older cousin Erik brought his Mac from
college. It was the first I'd seen a Mac and fell in love. I thought the
Daleks game he had running on it was so cool. The screenshot on the right
is from that Classic Mac website of that game that I found online, and is
exactly how I remember it looked.&lt;/p&gt;
&lt;p&gt;Upon return to Fresno I got to work. I spent most of the rest of that summer
writing a clone of Daleks on my Apple //e. All hand-coded 6502 opcodes and twos
complement math for branch offsets by hand (I didn't have an assembler), in
pencil on graph paper. The hardest part was getting smooth animation working,
since the Apple //e "hi res" &lt;a href="https://en.wikipedia.org/wiki/Apple_II_graphics"&gt;graphics system&lt;/a&gt; was super quirky.&lt;/p&gt;
&lt;p&gt;It took about two months to get it working. It's the first time I can remember
being in a flow state and I loved it. It was my first "real program" and began
my lifelong love of computers.&lt;/p&gt;</description><category>AI</category><category>Tech</category><category>War Stories</category><guid>https://sef.kloninger.com/posts/daleks/</guid><pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Thanks, Daisy Disk</title><link>https://sef.kloninger.com/posts/daisy-disk/</link><dc:creator>Sef Kloninger</dc:creator><description>&lt;p&gt;&lt;img style="float:right" class="postimage" src="https://sef.kloninger.com/f/daisy-disk-full.png" alt="Screenshot of Daisy Disk with a disk nearly full" width="50%"&gt;&lt;/p&gt;
&lt;p&gt;Recently I've been beguiled by my local disk being almost full. This is on my
everyday M3 MacBook Air running the latest Tahoe 26.2.&lt;/p&gt;
&lt;p&gt;For years I've used &lt;a href="https://daisydiskapp.com/"&gt;Daisy Disk&lt;/a&gt; to debug space issues like this, it's great.
In this case it showed the problem, but wasn't able to narrow down what the
problem was nor remove it.&lt;/p&gt;
&lt;p&gt;Not have any success through the normal means ("Googling around"), I wrote the
developer of Daisy Disk, &lt;a href="https://daisydiskapp.com/about/"&gt;Oleg&lt;/a&gt;. They explained the problem and suggested a
workaround. It worked like a champ! I included the explanation below and
screenshots showing before and after.&lt;/p&gt;
&lt;p&gt;I want to say thanks to Oleg for their help. And this is a nice opportunity to
say thank you to indie developers in general who are often so helpful sharing
their expertise. What a wonderful and important part of our community.&lt;/p&gt;
&lt;hr&gt;

&lt;p&gt;Oleg's explanation:&lt;/p&gt;
&lt;ul&gt;
&lt;p&gt;
This error has recently been reported by a few other users as well, and our
investigation shows that it's caused by a new bug in macOS, introduced in one
of its recent updates. (It didn't happen before). The symptom is exactly like
in your case - a Time Machine snapshot becomes damaged for unknown reason, and
it cannot be deleted in the normal way - not only in DaisyDisk, but also not
in Terminal, using the tmutil command-line tool. Moreover, the tmutil tool
doesn't even list the damaged snapshot. It becomes almost entirely lost, while
it still consumes disk space.
&lt;/p&gt;

&lt;p&gt;
We have found the following workaround solution. Please launch the system's Disk
Utility (/Applications/Utilities/Disk Utility.app) and in the left sidebar,
select your data volume, likely called "Macintosh HD - Data". Note that there
will also be another volume called "Macintosh HD" (without "Data"), but you
should select specifically "Macintosh HD - Data". Then select the View \&amp;gt; Show
APFS Snapshots menu command. In the lower part of the window, you will see the
damaged Time Machine snapshot in the list. Please select it and then click the
"-" (minus) button at the bottom to delete it.
&lt;/p&gt;
&lt;/ul&gt;

&lt;p&gt;And screenshots showing the before and after. Note the two broken snapshots in
the list below.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Disk utility showing disk almost full" src="https://sef.kloninger.com/f/daisy-disk-before.png"&gt;&lt;/p&gt;
&lt;p&gt;After&lt;/p&gt;
&lt;p&gt;&lt;img alt="Disk utility showing disk back to normal" src="https://sef.kloninger.com/f/daisy-disk-after.png"&gt;&lt;/p&gt;
&lt;hr&gt;

&lt;p&gt;&lt;em&gt;Postscript&lt;/em&gt;: Oleg put me on the &lt;a href="https://sef.kloninger.com/f/daisy-disk-media.png"&gt;Daisy Disk media page&lt;/a&gt;, neat!&lt;/p&gt;</description><category>Appreciation</category><category>Tech</category><guid>https://sef.kloninger.com/posts/daisy-disk/</guid><pubDate>Tue, 10 Feb 2026 16:00:21 GMT</pubDate></item><item><title>Data Is Worth Preserving</title><link>https://sef.kloninger.com/posts/data-preservation/</link><dc:creator>Sef Kloninger</dc:creator><description>&lt;p&gt;&lt;img style="float:right" class="postimage" src="https://sef.kloninger.com/f/drp-logo.jpg" alt="Logo for the Data Rescue Project" width="30%"&gt;&lt;/p&gt;
&lt;p&gt;Governments should produce &lt;a href="https://en.wikipedia.org/wiki/Public_good"&gt;public goods&lt;/a&gt;, like navigation aids and roads. That
seems like a reasonable thing to expect of a functioning government, right?&lt;/p&gt;
&lt;p&gt;I consider data a public good too. We all benefit from accurate maps,
thorough measurements of the natural world, and trustworthy economic data.&lt;/p&gt;
&lt;p&gt;Which is why it was I was so upset when I heard how the the current US
administration has been on a tear to &lt;strong&gt;actually remove data&lt;/strong&gt;. All through 2025,
websites were taking down and datasets were taken offline. This &lt;a href="https://en.wikipedia.org/wiki/2025_United_States_government_online_resource_removals"&gt;Wikipedia page&lt;/a&gt;
catalogs what's been happening, and this report by the &lt;a href="https://www.amstat.org/policy-and-advocacy/the-nation's-data-at-risk-meeting-american's-information-needs-for-the-21st-century"&gt;American Statistical
Association&lt;/a&gt; goes into more depth about what's been happening and its
implications.&lt;/p&gt;
&lt;p&gt;In response the &lt;a href="https://www.datarescueproject.org/"&gt;Data Rescue Project&lt;/a&gt; sprang into action. They're a group of
concerned academics, librarians, and citizens who have been copying and
cataloging datasets so they aren't lost. The &lt;a href="https://www.datarescueproject.org/press/"&gt;project's press page&lt;/a&gt; has links to
many articles and presentations that describe their work and its impact. Last
November I saw a call for volunteers for DRP on a mailing list of ex-Googlers
and was eager to help.&lt;/p&gt;
&lt;h4&gt;Homeland Infrastructure Foundation-Level Data (HIFLD)&lt;/h4&gt;
&lt;p&gt;It's worth describing a bit about the particular dataset I actually worked on:
Homeland Infrastructure Foundation-Level Data (HIFLD). It's a good case study.&lt;/p&gt;
&lt;p&gt;HIFLD is a collection of maps. Maps of basic stuff, like roads, levees, river
depth charts, locations of military bases. Beyond just being good maps, a big
part of HIFLD's value is helping to make sure everyone uses &lt;em&gt;the same maps&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;So HIFLD is mostly curating data. Most of the data comes from other agencies
(USGS, Army Corps of Engineers, Census Bureau) and HIFLD brings it together and
provides it in a trustworthy, central place. Well, I should say "provided"
because in September the &lt;a href="https://www.reddit.com/r/gis/comments/1lkol3s/sad_news_hifld_open_to_be_discontinued_by_sept_30/"&gt;government stopped providing it&lt;/a&gt;. The story is well
told in this good &lt;a href="https://projectgeospatial.org/geospatial-frontiers/the-rise-power-and-uncertain-future-of-americas-open-infrastructure-data"&gt;article on Project Geospatial&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is where the Data Rescue Project comes in. DRP volunteers immediately
scooped up the data and kept in temporary storage. Then they organized a bucket
brigade of volunteers to categorize and put &lt;a href="https://www.datalumos.org/datalumos/search/studies?q=hifld%20open"&gt;snapshots&lt;/a&gt; into long-term storage.
Importantly, this was coupled with metadata to ensure they're findable later.
That's the part I worked on, uploading and entering metadata. We met our goal of
getting all of HIFLD "rescued" by year's end. &lt;a href="https://libguides.brown.edu/prf.php?account_id=276524"&gt;Frank Donnelly&lt;/a&gt;, the project
manager, wrote up a nice &lt;a href="https://www.datarescueproject.org/hifld-data-saved/"&gt;summary&lt;/a&gt; of what we did and how. For my piece I relied
on a nice Selenium driver, written by another volunteer, to create over a
hundred projects (&lt;a href="https://youtu.be/dVadwqbJoSs"&gt;screen recording&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;This is just one of many DRP efforts. Check out their &lt;a href="https://www.datarescueproject.org/data-rescue-tracker/"&gt;tracker&lt;/a&gt; to see the
breadth of work.&lt;/p&gt;
&lt;p&gt;While I'm proud of this project, I keep reminding myself that we're playing
defense. Having a one-time snapshot isn't nearly as good as having the
government actually do its job. Which is why we need to keep demanding better
leadership and a return to effective government. Assert your rights and
&lt;a href="https://www.nokings.org/"&gt;protest&lt;/a&gt;!   ❌ 👑.&lt;/p&gt;</description><category>Civics</category><category>Life</category><category>Tech</category><guid>https://sef.kloninger.com/posts/data-preservation/</guid><pubDate>Sun, 04 Jan 2026 23:00:00 GMT</pubDate></item><item><title>Rob Reiner: "Whatever you like to do, do a lot of it. Do it every day."</title><link>https://sef.kloninger.com/posts/rob-reiner/</link><dc:creator>Sef Kloninger</dc:creator><description>&lt;p&gt;&lt;img style="float:right" class="postimage" src="https://sef.kloninger.com/f/rob-reiner.jpg" alt="Photo of Rob Reiner from Wikipedia, source Neil Grabowsky / Montclair Film Festival" width="30%"&gt;&lt;/p&gt;
&lt;p&gt;I was fortunate to have met and shared a meal with Rob Reiner some years back. I
wanted to take a moment to share this story on the sad occasion of his death
this week.&lt;/p&gt;
&lt;p&gt;It was 2003 or so. I lived and worked for Akamai in Boston. I had been going
back and forth to San Mateo office a fair bit that year, often taking a red eye
home from San Jose. Back then the San Jose airport was smaller than it is now,
and was especially quiet at the evenings. Not a lot of dinner options, so
McDonald's it was.&lt;/p&gt;
&lt;p&gt;That day I was surprised to recognize Rob Reiner in line right in front of me!
He was traveling with some assistant-type person, patiently waiting. I tend to
not bother celebrities in public, but I was moved to say something.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sef&lt;/strong&gt;: Hello Mr. Reiner. Forgive me but I just wanted to say how much I enjoy
your work. I'm a really big fan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rob Reiner&lt;/strong&gt; (big grin): Hi! What's your name? Thanks for introducing
yourself. What have I done that you like?&lt;/p&gt;
&lt;p&gt;I think he genuinely wanted to know. I knew his big films pretty well —
&lt;em&gt;When Harry Met Sally&lt;/em&gt; was the most popular, &lt;em&gt;A Few Good Men&lt;/em&gt; had been up for
Best Picture, &lt;em&gt;Spinal Tap&lt;/em&gt; is well, Spinal Tap. These are all really great
films.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sef&lt;/strong&gt;: &lt;em&gt;The Princess Bride&lt;/em&gt;, hands down. I love the story and I love what you
did with it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rob Reiner&lt;/strong&gt;: I'm glad you said that. That's my favorite too.&lt;/p&gt;
&lt;p&gt;Hearing that was more than I'd hoped for. I thanked him and begged off so he
could order his burger and have dinner in peace. But no, in that New Yorker
voice and with a big smile he said, "C'mon, let's have cheeseburgers!" The three
of us all sat.&lt;/p&gt;
&lt;p&gt;We had a nice talk over dinner. He asked questions and seemed genuinely
interested in what I did -- work, family. But the highlight was toward the end.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rob Reiner&lt;/strong&gt;: What else can I answer for you?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sef&lt;/strong&gt;: What would you tell someone early in their career?&lt;/p&gt;
&lt;p&gt;At this point I was about thirty years old, so hardly &lt;em&gt;that&lt;/em&gt; early in my own
career, but I was asking in a genuine way. He answered straight away.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rob Reiner&lt;/strong&gt;: &lt;mark&gt;Whatever you like to do, do a lot of it. Do it every
day.&lt;/mark&gt; Me, I like writing so I try to do that of it every day if I can.
That's how you get good.&lt;/p&gt;
&lt;p&gt;He then told a few stories about people he'd met who don't do this. I guess when
you're someone like him, people ask you frequently for jobs or if you'd produce
their movie or whatnot. He said he asks what was the last thing they'd written,
or what they were working on now, or what'd they'd written today. And he could
tell if they did it often and did it for fun. If they didn't do it often, then
how good a writer were they likely to be?&lt;/p&gt;
&lt;p&gt;I was struck by what a nice and interesting, and interested, person Rob Reiner
was. It was incredibly generous for him to spend time with a fanboy when he
could be off duty and just enjoying his cheeseburger. What a gem.&lt;/p&gt;</description><category>Appreciation</category><category>Life</category><category>Media</category><guid>https://sef.kloninger.com/posts/rob-reiner/</guid><pubDate>Wed, 17 Dec 2025 07:00:00 GMT</pubDate></item><item><title>No More Blog Comments</title><link>https://sef.kloninger.com/posts/enshittification/</link><dc:creator>Sef Kloninger</dc:creator><description>&lt;div style="float:right; align:right; width:30%; font-size:150px"&gt;
  &lt;p align="center"&gt;💩&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;I turned off comments on this site today. The good people at &lt;a href="https://disqus.com/"&gt;Disqus&lt;/a&gt; had
provided me with a free service for commenting that had worked for ten-plus
years. But they appear to have gone down the &lt;a href="https://en.wikipedia.org/wiki/Enshittification"&gt;enshittification&lt;/a&gt; path and
started running a bunch of link-spam right above the comment box on all my
pages. Of course they did. I captured a &lt;a href="https://sef.kloninger.com/f/disqus-enshittified.png"&gt;screenshot&lt;/a&gt; if you want to see. Boo.&lt;/p&gt;
&lt;p&gt;Shame on me for entrusting a company to handle content for my personal site in
the first place. Isn't controlling things the whole point of this old-school
blog business? Not a big loss, nobody had posted a comment in a long time. But
still.&lt;/p&gt;</description><category>Technology</category><guid>https://sef.kloninger.com/posts/enshittification/</guid><pubDate>Thu, 04 Dec 2025 00:15:00 GMT</pubDate></item><item><title>Three Months</title><link>https://sef.kloninger.com/posts/three-months/</link><dc:creator>Sef Kloninger</dc:creator><description>&lt;p&gt;I've been &lt;a href="https://sef.kloninger.com/posts/leaving-google"&gt;off work&lt;/a&gt; for about three months now. It's a
good occasion to take stock of how that's going. In a word, it's been &lt;strong&gt;great&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img style="float:right" class="postimage" src="https://sef.kloninger.com/f/activities.jpeg" alt="Meme from the movie \" step brothers\" showing men playing in a bedroom with the caption \"we have so much room for activities.\"" width="50%"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;I'm surprised how much lighter my mood is. It feels like a weight that I've
  been carrying around for some time is no longer there. It's different than
  being on vacation, better actually. I didn't appreciate how stressful
  tech management has been all these years.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I'm taking a ton of pleasure in simple things. I go grocery shopping almost
  every day, I'm doing a ton of cooking.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It feels good to get healthier. I had knee surgery and am recovering from that
  just fine. I exercise nearly every day. On days that I don't go to &lt;a href="https://www.bayclubs.com/clubs/redwoodshores"&gt;the
  gym&lt;/a&gt; I do thirty minutes on the bike.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It's great to have flexibility. I hadn't planned to see my Dad on his 80th
  birthday because we'd on a bigger group thing later. But on a whim I drove
  down and took him out for breakfast on his actual birthday, because why not.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If I didn't want to do it before, I still don't want to do it. The closet
  hasn't gotten cleaned out; neither has the garage.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My friend Rachel Grey has a three month head start leaving Google. Her
writing this resonates with me. Especially this from recent LinkedIn post
(&lt;a href="https://www.linkedin.com/posts/rachel-grey-b69319_after-six-months-out-of-tech-my-primary-ugcPost-7383907826374582272-yCCs"&gt;private, sorry&lt;/a&gt;): "one month off per year of service is a good rule of
thumb; after six of them, I'm still feeling like a sailor who just barely
managed to swim to shore." Maybe that's still where I'm at too.&lt;/p&gt;
&lt;p&gt;So what have I been doing?  I'm prioritizing friends and family — I'm
lucky to have a lot of people I care about. I'm embarrassed that I haven't
always been good about staying in touch, but I can fix that now. And fun stuff
like &lt;a href="https://planet-bridge.org/index.php"&gt;bridge lessons&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Beyond that, I'm getting involved with a couple of small projects but nothing
serious yet. When I find something interesting, I'll write about it here.&lt;/p&gt;</description><category>Life</category><guid>https://sef.kloninger.com/posts/three-months/</guid><pubDate>Wed, 19 Nov 2025 22:00:00 GMT</pubDate></item></channel></rss>