<?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>Linux on Andrew Quinn&#39;s TILs</title>
    <link>https://til.andrew-quinn.me/tags/linux/</link>
    <description>Recent content in Linux 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-us</language>
    <lastBuildDate>Thu, 26 Jun 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://til.andrew-quinn.me/tags/linux/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Save your disk, write files directly into RAM with /dev/shm</title>
      <link>https://til.andrew-quinn.me/posts/save-your-disk-write-files-directly-into-ram-with-dev-shm/</link>
      <pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/save-your-disk-write-files-directly-into-ram-with-dev-shm/</guid>
      <description>&lt;p&gt;Given my interest in extending the life of my SD cards and hard drives
as much as possible,
I&amp;rsquo;m surprised I haven&amp;rsquo;t come across &lt;code&gt;/dev/shm&lt;/code&gt; before.
In a word
it&amp;rsquo;s a world-accessible RAM scratchpad, which seems baked right into POSIX,
so that virtually every &lt;del&gt;Unix&lt;/del&gt; EDIT: &lt;em&gt;Linux&lt;/em&gt;
system already has it mounted as a
&lt;code&gt;tmpfs&lt;/code&gt; by default:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;
&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-1&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-1&#34;&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-2&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-2&#34;&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ mount | grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/dev/shm&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tmpfs on /dev/shm type tmpfs &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;rw,nosuid,nodev,inode64&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://xkcd.com/1053/&#34;&gt;Today&amp;rsquo;s lucky 10,000, indeed&lt;/a&gt;.
It gets mentioned often in Hacker News comments, but surprisingly I couldn&amp;rsquo;t
find any actual articles talking about it.
The existence of &lt;code&gt;/dev/shm&lt;/code&gt; is a boon for me mostly because it means I never
have to worry about whether &lt;code&gt;/tmp&lt;/code&gt; is &lt;em&gt;really&lt;/em&gt; RAM-based again.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>LLMs make Perl great again</title>
      <link>https://til.andrew-quinn.me/posts/llms-make-perl-great-again/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/llms-make-perl-great-again/</guid>
      <description>&lt;p&gt;Perl 5 went through a long nadir of unpopularity due in large part to its
deserved &amp;ldquo;Write Once, Read Never&amp;rdquo; reputation. So I was surprised to find out
not only is it
&lt;a href=&#34;https://til.andrew-quinn.me/posts/what-programming-languages-come-out-of-the-box-on-debian-12/&#34;&gt;installed by default on Debian&lt;/a&gt;,
it&amp;rsquo;s installed nearly &lt;em&gt;everywhere&lt;/em&gt; by default.
It&amp;rsquo;s even the non-shell scripting language of choice on
&lt;a href=&#34;https://marc.info/?l=openbsd-misc&amp;amp;m=159041121804486&amp;amp;w=2&#34;&gt;OpenBSD&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Perhaps the only thing more impressive than Perl&amp;rsquo;s utter ubiquity is its
longevity. The latest major version of Perl was first released in
&lt;a href=&#34;https://en.wikipedia.org/wiki/Perl_5_version_history&#34;&gt;&lt;em&gt;1994&lt;/em&gt;&lt;/a&gt;. It came into
existence on this planet less than a year after I did. It&amp;rsquo;s even arguably more
portable than the median shell script - different Unices might use Bash, Zsh,
Ksh, or even something newfangled like
&lt;a href=&#34;https://fishshell.com/&#34;&gt;Fish&lt;/a&gt;,
but for the most part a Perl 5 program is a Perl 5 program is a Perl 5 program.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Things you should never do: Use Expect to autotype SSH passwords in scripts</title>
      <link>https://til.andrew-quinn.me/posts/things-you-should-never-do-use-tcl-expect-to-type-in-ssh-passwords/</link>
      <pubDate>Wed, 26 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/things-you-should-never-do-use-tcl-expect-to-type-in-ssh-passwords/</guid>
      <description>&lt;p&gt;Before I moved to Finland, I spent some time in the
Hobbesian war of all against all that is
&lt;a href=&#34;https://gutenberg.org/cache/epub/1156/pg1156-images.html#CHAPTER_I&#34;&gt;Wisconsin&lt;/a&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;.
Men were &lt;em&gt;men&lt;/em&gt; back in that less civilized age,
and &amp;ldquo;cybersecurity&amp;rdquo; a ninny-word dreamt up by
social harmony types who honestly
thought they had anything worth stealing in their
servers. For those of us doing &lt;em&gt;real&lt;/em&gt; work, which
I must emphasize &lt;em&gt;you should never do&lt;/em&gt;,
we had
&lt;a href=&#34;https://core.tcl-lang.org/expect/index&#34;&gt;Expect&lt;/a&gt;.
And to SSH automatically into servers
where we didn&amp;rsquo;t have fancy accoutrements like
&amp;ldquo;keys&amp;rdquo; or &amp;ldquo;audit requirements&amp;rdquo;, we did stuff like&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Common-sense security for SSH on a new Debian server</title>
      <link>https://til.andrew-quinn.me/posts/common-sense-security-for-ssh-on-a-new-debian-server/</link>
      <pubDate>Tue, 24 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/common-sense-security-for-ssh-on-a-new-debian-server/</guid>
      <description>&lt;p&gt;Last night I went to DigitalOcean and spun up a tiny new, $4/month droplet &amp;ndash;
on my own dime! It sounds crazy, but I&amp;rsquo;ve never actually wanted to pay for
hosting myself before. But I have a fun little web app cooking up, one that
might eventually pay that $4/month back with interests, and I decided, why not,
it&amp;rsquo;s time to finally put some of my &lt;em&gt;own&lt;/em&gt; skin in the game with this whole
sysadmin thing.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Enforce GPL compliance by offering bounties?</title>
      <link>https://til.andrew-quinn.me/posts/enforce-gpl-compliance-by-offering-bounties/</link>
      <pubDate>Sat, 21 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/enforce-gpl-compliance-by-offering-bounties/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Epistemic status:&lt;/strong&gt; Very unclear, also I Am Not A Lawyer This Is Not Legal
Advice Get Off My Lawn&lt;/p&gt;
&lt;p&gt;(N.B.: I&amp;quot;m using &amp;ldquo;GPL&amp;rdquo; with broad strokes here, to point at &amp;ldquo;open source
licenses it&amp;rsquo;s straightforward to run afoul of&amp;rdquo;.)&lt;/p&gt;
&lt;p&gt;Policing is always hard in a world of limited resources. Especially when one
is targeting sophisticated, well-monied criminal organizations, it can take an
awful lot of time and effort merely to &lt;em&gt;credibly reveal&lt;/em&gt; that wrongdoing has
taken place. Would it surprise you if I said the average criminal software
organization is probably, on the margin, more sophisticated than the average
criminal organization? If so, you should probably expect that the former&amp;rsquo;s
crimes are brought to life even less often than the latter&amp;rsquo;s.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>What I would recommend to teens in 2024 who want to get into development</title>
      <link>https://til.andrew-quinn.me/posts/what-i-would-recommend-to-teens-in-2024-who-want-to-get-into-development/</link>
      <pubDate>Sun, 08 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/what-i-would-recommend-to-teens-in-2024-who-want-to-get-into-development/</guid>
      <description></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>
    
    <item>
      <title>I&#39;m turning 30 so naturally I&#39;m switching to OpenBSD</title>
      <link>https://til.andrew-quinn.me/posts/i-m-turning-30-so-i-m-switching-to-openbsd/</link>
      <pubDate>Sat, 04 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/i-m-turning-30-so-i-m-switching-to-openbsd/</guid>
      <description>&lt;p&gt;&lt;em&gt;I&amp;rsquo;m kidding&lt;/em&gt;, I&amp;rsquo;m switching to OpenBSD because I like security or code
quality or something.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s totally not because the inexorable march of aging is starting to show its
effects on my ability to down necessary-evil trivia like me and my friends
used to down forties in &lt;a href=&#34;https://arboretum.harvard.edu/&#34;&gt;the Ahhhnald&lt;/a&gt; after dark,
and so I&amp;rsquo;d like to settle down with a software ecosystem I can study in real
depth &lt;em&gt;once&lt;/em&gt; without feeling like 20% of what I absorb in year X will be
deprecated by year X+10.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>PHP is Web Shell</title>
      <link>https://til.andrew-quinn.me/posts/php-is-web-shell/</link>
      <pubDate>Mon, 29 Apr 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/php-is-web-shell/</guid>
      <description>&lt;p&gt;One of the cooler things about working in a firm founded
and run by a lot of dyed-in-the-wool Linux hackers like
my current place is that there is &lt;em&gt;a lot&lt;/em&gt; of Bash lying
around, accumulated over a good 25 years or so. For all
their faults, pure shell solutions still set the silver
standard for programs which appear almost entirely
immune to bit rot.&lt;/p&gt;
&lt;p&gt;But you know what? &lt;em&gt;So does vanilla PHP.&lt;/em&gt;
That pink stuff that was made from the ground up to get you
from zero to working dynamic web page as fast as possible.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Vagrant lets you wrap VDI images</title>
      <link>https://til.andrew-quinn.me/posts/vagrant-lets-you-wrap-vdi-images/</link>
      <pubDate>Tue, 05 Dec 2023 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/vagrant-lets-you-wrap-vdi-images/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://teleste.com/&#34;&gt;At work&lt;/a&gt; I&amp;rsquo;m currently experimenting with using &lt;a href=&#34;https://www.vagrantup.com/&#34;&gt;Vagrant&lt;/a&gt; to automate getting an entire local network of our tiny embedded Linux systems running all on my local box.&lt;/p&gt;
&lt;p&gt;Alas! One of our devices uses a custom Yocto distribution! But wait, we have scripts to run these as VDI images, and apparently that&amp;rsquo;s enough for Vagrant to get to work!&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;
&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-1&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-1&#34;&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vagrant package --base my-virtual-machine
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Further reading materials for future me: &lt;a href=&#34;https://developer.hashicorp.com/vagrant/docs/boxes/base&#34;&gt;Creating a Base Box&lt;/a&gt;, and the &lt;a href=&#34;https://developer.hashicorp.com/vagrant/docs/boxes/format&#34;&gt;Box File Format&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>traceroute uses UDP by default, not ICMP</title>
      <link>https://til.andrew-quinn.me/posts/traceroute-uses-udp-by-default-not-icmp/</link>
      <pubDate>Wed, 29 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/traceroute-uses-udp-by-default-not-icmp/</guid>
      <description>&lt;p&gt;At least on Linux.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t believe me? Run &lt;code&gt;tcpdump -nn -i &amp;lt;interface&amp;gt; &#39;host example.com&#39;&lt;/code&gt; in one shell and &lt;code&gt;traceroute example.com&lt;/code&gt; in another. &lt;code&gt;tcpdump&lt;/code&gt; will pick up all 3 of {ICMP, UDP, TCP}, and on my machine the pattern is clear:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;
&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-1&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-1&#34;&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-2&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-2&#34;&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-3&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-3&#34;&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-4&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-4&#34;&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-5&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-5&#34;&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-6&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-6&#34;&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-7&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-7&#34;&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-8&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-8&#34;&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-9&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-9&#34;&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-10&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-10&#34;&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-11&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-11&#34;&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-12&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-12&#34;&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-13&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-13&#34;&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-14&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-14&#34;&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-15&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-15&#34;&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-16&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-16&#34;&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-17&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-17&#34;&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-18&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-18&#34;&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-19&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-19&#34;&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187086 IP 1.2.3.4.41369 &amp;gt; 93.184.216.34.33434: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187160 IP 1.2.3.4.39830 &amp;gt; 93.184.216.34.33435: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187190 IP 1.2.3.4.43467 &amp;gt; 93.184.216.34.33436: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187221 IP 1.2.3.4.50462 &amp;gt; 93.184.216.34.33437: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187254 IP 1.2.3.4.35842 &amp;gt; 93.184.216.34.33438: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187285 IP 1.2.3.4.44146 &amp;gt; 93.184.216.34.33439: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187318 IP 1.2.3.4.50311 &amp;gt; 93.184.216.34.33440: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187346 IP 1.2.3.4.34388 &amp;gt; 93.184.216.34.33441: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187375 IP 1.2.3.4.43703 &amp;gt; 93.184.216.34.33442: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187405 IP 1.2.3.4.35304 &amp;gt; 93.184.216.34.33443: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187448 IP 1.2.3.4.50157 &amp;gt; 93.184.216.34.33444: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187474 IP 1.2.3.4.58392 &amp;gt; 93.184.216.34.33445: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187503 IP 1.2.3.4.45918 &amp;gt; 93.184.216.34.33446: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187530 IP 1.2.3.4.38313 &amp;gt; 93.184.216.34.33447: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187556 IP 1.2.3.4.41520 &amp;gt; 93.184.216.34.33448: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.187582 IP 1.2.3.4.55240 &amp;gt; 93.184.216.34.33449: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.225929 IP 1.2.3.4.60724 &amp;gt; 93.184.216.34.33450: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.225970 IP 1.2.3.4.43648 &amp;gt; 93.184.216.34.33451: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:58:47.226016 IP 1.2.3.4.52561 &amp;gt; 93.184.216.34.33452: UDP, length 32
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;I have no idea why. Performance? Getting around sysadmins who unwitting block all ICMP packets? It surprised me, at least.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>One problem with user-scoped `systemd` timers</title>
      <link>https://til.andrew-quinn.me/posts/one-problem-with-user-scoped-systemd-timers/</link>
      <pubDate>Sun, 26 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/one-problem-with-user-scoped-systemd-timers/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve discovered one big downside of [putting &lt;code&gt;systemd&lt;/code&gt; times into &lt;code&gt;~/.config/systemd/user/&lt;/code&gt;][1]: They stop running when you log out.&lt;/p&gt;
&lt;p&gt;Two ways around this problem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Bite the bullet, and install the timers into &lt;code&gt;/etc/systemd/&lt;/code&gt;. This means giving up &lt;a href=&#34;https://www.chezmoi.io/&#34;&gt;chezmoi version control&lt;/a&gt;, making the overall system more snowflake-y. I&amp;rsquo;m not crazy about it.&lt;/li&gt;
&lt;li&gt;Remote in with &lt;code&gt;tmux&lt;/code&gt;, instead of ever logging out, just use &lt;code&gt;C-b d&lt;/code&gt; to detach from the session.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&amp;rsquo;m going with #2. The lead developer of &lt;code&gt;ktty&lt;/code&gt; is known not to like &lt;code&gt;tmux&lt;/code&gt;, so there&amp;rsquo;s probably a way to detach long-running SSH sections inside of &lt;code&gt;kitty&lt;/code&gt; itself &amp;ndash; but I haven&amp;rsquo;t found it yet. Have you?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>A good place to symlink local builds</title>
      <link>https://til.andrew-quinn.me/posts/a-good-place-to-symlink-local-builds/</link>
      <pubDate>Sat, 18 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/a-good-place-to-symlink-local-builds/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been a big fan of both &lt;a href=&#34;https://gwern.net/spaced-repetition&#34;&gt;spaced repetition&lt;/a&gt; in general and the &lt;a href=&#34;https://github.com/ankitects/anki&#34;&gt;Anki spaced repetition system&lt;/a&gt; in particular for a long time now. So today, after a fresh new install and &lt;a href=&#34;https://github.com/hiAndrewQuinn/shell-bling-ubuntu&#34;&gt;blinging out&lt;/a&gt; of Ubuntu 23.10, I decided to take the next step, as I often do with programs I use a lot, and try to build and compile it myself.&lt;/p&gt;
&lt;p&gt;This turned out to be pretty easy! The &lt;a href=&#34;https://github.com/ankitects/anki/blob/main/docs/development.md#running-anki-during-development&#34;&gt;docs&lt;/a&gt; warn that &lt;code&gt;./run&lt;/code&gt; is slower than the non-optimized build, but I don&amp;rsquo;t notice much of a difference on my machine. It did however leave me with the question: Where should I put the &lt;code&gt;anki&lt;/code&gt; symlink to &lt;code&gt;./run&lt;/code&gt;?&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
