<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Worse-Is-Better on Andrew Quinn&#39;s TILs</title>
    <link>https://til.andrew-quinn.me/tags/worse-is-better/</link>
    <description>Recent content in Worse-Is-Better on Andrew Quinn&#39;s TILs</description>
    <image>
      <title>Andrew Quinn&#39;s TILs</title>
      <url>https://til.andrew-quinn.me/papermod-cover.png</url>
      <link>https://til.andrew-quinn.me/papermod-cover.png</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Sat, 29 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://til.andrew-quinn.me/tags/worse-is-better/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>&#34;Courage to quit&#34; matters more for seniors, less for juniors</title>
      <link>https://til.andrew-quinn.me/posts/courage-to-quit-matters-more-for-seniors-less-for-juniors/</link>
      <pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/courage-to-quit-matters-more-for-seniors-less-for-juniors/</guid>
      <description>&lt;p&gt;As a teenager first getting into computers in the late 2000s I spent a lot of
time reading old
revered tomes like
&lt;a href=&#34;https://www.catb.org/~esr/writings/taoup/html/&#34;&gt;ESR&amp;rsquo;s &lt;em&gt;The Art of Unix Programming&lt;/em&gt;&lt;/a&gt;
and
&lt;a href=&#34;https://mitp-content-server.mit.edu/books/content/sectbyfn/books_pres_0/6515/sicp.zip/index.html&#34;&gt;SICP&lt;/a&gt;
.
If present-day me were to isekai back in time and lose all of the technical
knowledge I had but retain my current instincts, however, I would have left
all of this on the table and just built a terrible new automation tool for
&lt;a href=&#34;https://www.kingdomofloathing.com/login.php?loginid=09ca9334301941af8f94438812a5e6f0&#34;&gt;the surprisingly scriptable MMORPG I was into&lt;/a&gt;
in PHP 5, with as much disregard for clean code and security practices
that I could muster[^1].
Then I would have put that tool online, continued to add new features to the
ball of mud, and kept it running for 5-10 years before my first post-college
interview. And then the vibe that would come across is less &amp;ldquo;He&amp;rsquo;s an egghead,
and we like that, but we really need someone who actually does things&amp;rdquo; and
more &amp;ldquo;He&amp;rsquo;s a meathead, but inside of that meathead is an egghead waiting to
be revealed. We need this kind of junior dev yesterday.&amp;rdquo;
I would have done this even though
&lt;a href=&#34;https://github.com/kolmafia/kolmafia&#34;&gt;an objectively far superior tool&lt;/a&gt;
had already existed for quite some time,
making this project &amp;ldquo;feel like&amp;rdquo; dead weight in the wide world of software!
But why?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>LLM, JavaScript, GitHub Pages, localStorage: A recipe for free apps anyone can use</title>
      <link>https://til.andrew-quinn.me/posts/llm-javascript-github-pages-localstorage-a-recipe-for-free-apps-anyone-can-use/</link>
      <pubDate>Wed, 18 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/llm-javascript-github-pages-localstorage-a-recipe-for-free-apps-anyone-can-use/</guid>
      <description>&lt;p&gt;Earlier today on Hacker News
&lt;a href=&#34;https://pontus.granstrom.me/scrappy/&#34;&gt;Scrappy made the rounds&lt;/a&gt;,
with the explicit tagline &amp;ldquo;make little apps for you and your friends&amp;rdquo;.
I always like to see new projects in this vein.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s why I&amp;rsquo;d like to outline my alternative approach, which&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Works cross-platform and on mobile devices by default,&lt;/li&gt;
&lt;li&gt;Doesn&amp;rsquo;t require any app store tomfoolery,&lt;/li&gt;
&lt;li&gt;Has great uptime built in,&lt;/li&gt;
&lt;li&gt;Gives you just enough data persistence to not get in your way, and&lt;/li&gt;
&lt;li&gt;Is owned by you, forever.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is the stack I used to build
&lt;a href=&#34;https://hiandrewquinn.github.io/diet-checklist/&#34;&gt;my diet checklist&lt;/a&gt;,
which I keep as a little icon on my phone&amp;rsquo;s home page.
Here it is:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Create multi-stage Anki card answers with HTML&#39;s &lt;details&gt; tag</title>
      <link>https://til.andrew-quinn.me/posts/create-multi-stage-anki-card-answers-with-html-s-details-tag/</link>
      <pubDate>Sat, 07 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/create-multi-stage-anki-card-answers-with-html-s-details-tag/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://github.com/user-attachments/assets/1df394d2-5590-46a0-a125-633a5dfe20fa&#34; alt=&#34;image&#34;  /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This works as of, at least, Anki 24.06.3.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;According to the
&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/details&#34;&gt;Mozilla Developer Network&lt;/a&gt;,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The &amp;lt;details&amp;gt; HTML element creates a disclosure widget in which information is
visible only when the widget is toggled into an open state.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In standard web browsers, absent any CSS to the contrary, a &amp;lt;details&amp;gt; tag
starts &lt;em&gt;closed&lt;/em&gt; until further notice. Since Anki is basically a local web
browser on top of a timer, this also works there.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Cross-platform TUIs are easier than cross-platform GUIs</title>
      <link>https://til.andrew-quinn.me/posts/cross-platform-tuis-are-easier-than-cross-platform-guis/</link>
      <pubDate>Tue, 20 May 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/cross-platform-tuis-are-easier-than-cross-platform-guis/</guid>
      <description>&lt;p&gt;Below is a GIF of
&lt;a href=&#34;https://github.com/hiAndrewQuinn/tsk&#34;&gt;&lt;code&gt;tsk&lt;/code&gt;, my pocket Finnish-to-English dictionary&lt;/a&gt;,
running in my terminal emulator of choice under Linux.
It&amp;rsquo;s what the kids call a
&lt;a href=&#34;https://github.com/rothgar/awesome-tuis&#34;&gt;TUI&lt;/a&gt;,
a graphical program that just happens to drive its graphics
using terminal graphics instead of graphics-graphics.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Insert GIF here.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You can probably tell that this program fits neatly into the
&lt;a href=&#34;https://bradfrost.com/blog/link/an-app-can-be-a-home-cooked-meal/&#34;&gt;&amp;ldquo;home-cooked meal&amp;rdquo;&lt;/a&gt;
clade of programs. There is a very straightforward problem I want solved -
fast, single-executable-portable dictionary lookup, with a few conveniences
for the busy language learner layered on top. I am quite happy with &lt;code&gt;tsk&lt;/code&gt; in
its current iteration and don&amp;rsquo;t plan to add much more to it anytime soon.
It would still save me a lot of time and hassle if I were the only person who
could use it.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Vibe coding and complementary goods</title>
      <link>https://til.andrew-quinn.me/posts/vibe-coding-and-complementary-goods/</link>
      <pubDate>Wed, 12 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/vibe-coding-and-complementary-goods/</guid>
      <description>&lt;p&gt;Peanut butter and jelly are
&lt;a href=&#34;https://en.wikipedia.org/wiki/Complementary_good&#34;&gt;complementary goods&lt;/a&gt;,
as are cars and gasoline,
newer cars and electricity,
electricity and basically everything else.&lt;/p&gt;
&lt;p&gt;We don&amp;rsquo;t normally think of, say,
Docker and Kubernetes as
complementary goods in software engineering,
because you can get both for the low price
of free. Or can you? You still have to
invest &lt;em&gt;time&lt;/em&gt; in learning both, and
as the famous saying goes&amp;hellip;&lt;/p&gt;
&lt;p&gt;Say it takes X hours to learn Docker
adequately. If Docker suddenly becomes
easier to learn, such that it now takes
only X / 2 hours, it&amp;rsquo;s reasonable to assume
Kubernetes will become more popular in tandem,
because one of its complements now costs
less and is hence supplied in greater
quantities anyway. You don&amp;rsquo;t
want a peanut butter only sandwich, do you?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Binary search isn&#39;t about search II. Loop invariant of leftmost element search</title>
      <link>https://til.andrew-quinn.me/posts/binary-search-isn-t-about-search-ii-loop-invariant-of-leftmost-element-search/</link>
      <pubDate>Sat, 08 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/binary-search-isn-t-about-search-ii-loop-invariant-of-leftmost-element-search/</guid>
      <description>&lt;p&gt;In the first
&lt;a href=&#34;https://til.andrew-quinn.me/posts/binary-search-isn-t-about-search/&#34;&gt;&amp;ldquo;Binary search isn&amp;rsquo;t about search&amp;rdquo;&lt;/a&gt;
post, we spoke about
&lt;a href=&#34;https://til.andrew-quinn.me/posts/binary-search-isn-t-about-search/#hl-2-5&#34;&gt;using &lt;code&gt;assert&lt;/code&gt; statements to enforce your loop invariants&lt;/a&gt;.
Our plain old everyday binary search invariant can be summarized as such:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;For all x in &lt;code&gt;L[0:l]&lt;/code&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, x is &lt;em&gt;strictly&lt;/em&gt; less than &lt;code&gt;T&lt;/code&gt;, the element we are searching for.&lt;/li&gt;
&lt;li&gt;For all y in &lt;code&gt;L[r:len(L)]&lt;/code&gt;&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;, y is &lt;em&gt;strictly&lt;/em&gt; greater than &lt;code&gt;T&lt;/code&gt;, the element we are searching for.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Or, if we want to be even terser, we could note this as simply&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>SQLite is learnable</title>
      <link>https://til.andrew-quinn.me/posts/the-learnability-of-sqlite/</link>
      <pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/the-learnability-of-sqlite/</guid>
      <description>&lt;p&gt;This is a response to
&lt;a href=&#34;https://pid1.dev/posts/siren-call-of-sqlite-on-the-server/&#34;&gt;pid1.call&amp;rsquo;s &amp;ldquo;Siren Call of SQlite on the Server&amp;rdquo;&lt;/a&gt;,
which itself is a response to articles like
&lt;a href=&#34;https://blog.wesleyac.com/posts/consider-sqlite&#34;&gt;Wesley Aptekar-Cassels&amp;rsquo;s &amp;ldquo;Consider SQLite&amp;rdquo;&lt;/a&gt;
espousing SQLite as a server-side technology.
Cards on the table, I both love SQLite &lt;em&gt;and&lt;/em&gt;
think pid1 has the more correct take here.&lt;/p&gt;
&lt;p&gt;When I decided on a dime after college to move countries
and be with my wife, part of the package deal was that
I had to throw away my dreams of easing into the software
industry by resting on the laurels of my
&lt;a href=&#34;https://www.northwestern.edu/&#34;&gt;strong, but not MIT-level-known-worldwide-strong, alma mater&lt;/a&gt;
(sorry Wildcats).
Electrical engineering was just not going to be
feasible for a then-monolingual
English speaker in Finland, and besides,
I majored in it 90% out of curiosity anyway. I always intended
to return to my once and future home, the shell, after my
&lt;a href=&#34;https://en.wikipedia.org/wiki/Rumspringa&#34;&gt;Rumspringa with electrons&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>PHP, Go, and Braindead Deployment</title>
      <link>https://til.andrew-quinn.me/posts/php-go-and-braindead-deployment/</link>
      <pubDate>Mon, 16 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/php-go-and-braindead-deployment/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;ve been
&lt;a href=&#34;,./php-is-web-shell/&#34;&gt;following my posts&lt;/a&gt;
recently, you might have noticed that I&amp;rsquo;ve been working more and more with PHP
lately. As someone who was curiously allergic to
web dev as a teenager, it has been
&lt;a href=&#34;../php-and-web-dev-phobia/&#34;&gt;a strangely healing experience&lt;/a&gt;
for me.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d like to say it&amp;rsquo;s because my experiments with
&lt;a href=&#34;https://laravel.com/&#34;&gt;Laravel&lt;/a&gt;,
the only OSS work of which I can point to is testing
&lt;a href=&#34;https://github.com/hiAndrewQuinn/shell-bling-ubuntu?tab=readme-ov-file#where-else-does-this-work&#34;&gt;the Homestead VM&amp;rsquo;s compatibility for Shell Bling Ubuntu&lt;/a&gt;,
convinced me. But no &amp;ndash; Laravel is &lt;em&gt;pretty sweet&lt;/em&gt;, but so is
&lt;a href=&#34;https://www.djangoproject.com/&#34;&gt;Django&lt;/a&gt;, but Django
has the advantage of using an underlying language that&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>The highest personal ROI program I have written so far</title>
      <link>https://til.andrew-quinn.me/posts/the-highest-personal-roi-program-i-have-written-so-far/</link>
      <pubDate>Tue, 30 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/the-highest-personal-roi-program-i-have-written-so-far/</guid>
      <description>&lt;p&gt;It would have to be
&lt;a href=&#34;https://github.com/hiAndrewQuinn/finstem&#34;&gt;finstem&lt;/a&gt;,
a simple command-line program I wrote to
reduce Finnish words down to their root form.&lt;/p&gt;
&lt;p&gt;Finnish is a lot like Latin or Russian in that its words
often become lumbering behemoths of rewritten consonants,
suffixes upon suffixes, and this makes it hard to look up
in a dictionary &amp;ndash; that is, until you factor in its
very regular orthography and the phenomenal
efforts of the Finnish programming industry: &lt;code&gt;finstem&lt;/code&gt; is
basically a very specialized UI for
&lt;a href=&#34;https://voikko.puimula.org/&#34;&gt;the OpenOffice spell checker&lt;/a&gt;,
and I have no shame in admitting that.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Valuable software is about letting people do new things</title>
      <link>https://til.andrew-quinn.me/posts/valuable-software-is-about-doing-new-things/</link>
      <pubDate>Fri, 21 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/valuable-software-is-about-doing-new-things/</guid>
      <description>&lt;p&gt;Today I released a dump of
&lt;a href=&#34;https://github.com/Selkouutiset-Archive/selkokortti/releases/tag/summer-2024&#34;&gt;six months of flashcards&lt;/a&gt;
I autogenerated from
&lt;a href=&#34;../lessons-learned-from-6-months-of-operating-a-teensy-tiny-news-archive/&#34;&gt;my tiny Finnish news archive&lt;/a&gt;
to make the lives of my fellow language learners easier.
The actual code which generates this archive is
&lt;a href=&#34;https://github.com/Selkouutiset-Archive/selkokortti/blob/main/main.py&#34;&gt;about 300 lines of Python&lt;/a&gt;
.
The basic value add for the user:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;What you want&lt;/strong&gt;: Better fluency in Finnish.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What you need&lt;/strong&gt;: Practice. Lots of it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What this gives you&lt;/strong&gt;: GOTO 2.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is emphatically &lt;em&gt;not&lt;/em&gt; the kind of product, or use case,
I would stumble upon as a brain-in-the-vat developer. It is
a niche offering, one I only found because I actually
got out into the world and tried to &lt;em&gt;do something hard&lt;/em&gt;.
In so doing, I recognized the possibility of building a tool
that could help me in this &lt;em&gt;non-programming&lt;/em&gt; endeavour.
So I built it. And I&amp;rsquo;m proud of it.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Quickstarts and Slowstarts</title>
      <link>https://til.andrew-quinn.me/posts/quickstarts-and-slowstarts/</link>
      <pubDate>Tue, 04 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/quickstarts-and-slowstarts/</guid>
      <description>&lt;p&gt;A while back I stirred up some controversy on Hacker News
by talking about why I liked it when
&lt;a href=&#34;https://news.ycombinator.com/item?id=39882810&#34;&gt;tutorials take you from clean VM to working, installed software&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve since taken to calling this the &amp;ldquo;tutorial-in-a-box&amp;rdquo; method.
When I write them myself, I usually put them under the
header &lt;strong&gt;Slowstart&lt;/strong&gt;, a riff on the proverbial Quickstart.
Two examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://andrew-quinn.me/reposurgeon&#34;&gt;A gentle introduction to &lt;code&gt;reposurgeon&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://github.com/Selkouutiset-Archive/selkokortti?tab=readme-ov-file#slowstart&#34;&gt;Slowstart&lt;/a&gt; for &lt;code&gt;selkokortti&lt;/code&gt;, some flashcard generating software based around &lt;a href=&#34;https://hiandrewquinn.github.io/selkouutiset-archive/&#34;&gt;my Finnish language news archive&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The point of a Slowstart is to make it so that &lt;em&gt;even absolute beginners&lt;/em&gt;
can start to pick up some pointers about how people &amp;ldquo;in the know&amp;rdquo; of
your chosen software ecosystem actually get things done. Instead of a
Dockerfile or a shell script, you take them by the hand, spin up a
&lt;em&gt;totally fresh&lt;/em&gt; virtual machine from the ground up using something like
&lt;a href=&#34;https://www.vagrantup.com/&#34;&gt;Vagrant&lt;/a&gt;
or
&lt;a href=&#34;https://developer.fedoraproject.org/tools/virt-builder/about.html&#34;&gt;virt-builder&lt;/a&gt;,
and walk them through &lt;strong&gt;each and every command&lt;/strong&gt; they need to execute
in order to get to a working install.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>tmux is worse is better</title>
      <link>https://til.andrew-quinn.me/posts/tmux-is-worse-is-better/</link>
      <pubDate>Thu, 23 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/tmux-is-worse-is-better/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tmux/tmux/wiki&#34;&gt;tmux&lt;/a&gt;
(short for &amp;ldquo;terminal mux&amp;rdquo; (short for &amp;ldquo;multiplexer&amp;rdquo;))
is
&lt;a href=&#34;https://i3wm.org/&#34;&gt;i3&lt;/a&gt;
for your terminal.
Oh, it&amp;rsquo;s so much more than that, and I recently discovered with
some joy that it is installed by default on
&lt;a href=&#34;https://www.openbsd.org/&#34;&gt;OpenBSD&lt;/a&gt;,
but its fundamental value add to any programmer who has to
SSH into servers more than once a week is it allows you to
split your screen up into multiple independent shells
&lt;em&gt;without needing a graphical environment at all&lt;/em&gt;.
If you want to walk the path of true digital minimalism,
&lt;a href=&#34;https://www.vim.org/&#34;&gt;vanilla Vim&lt;/a&gt;
and tmux or its spiritual grandfather
&lt;a href=&#34;https://www.gnu.org/software/screen/&#34;&gt;screen&lt;/a&gt;
are all you need.&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
