<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Scott Berrevoets - til</title><link>https://scottberrevoets.com/</link><description/><atom:link href="https://scottberrevoets.com/feeds/til.rss.xml" rel="self"/><lastBuildDate>Fri, 24 Apr 2026 00:00:00 -0700</lastBuildDate><item><title>Objective-C enums can be string-backed... sort of</title><link>https://scottberrevoets.com/til/objective-c-enums-can-be-string-backed-sort-of/</link><description>&lt;p&gt;While looking at &lt;code&gt;AVAudioSessionErrorCode&lt;/code&gt; in Xcode, I noticed something
interesting in its definition:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;typedef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CF_ENUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AVAudioInteger&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AVAudioSessionErrorCode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;AVAudioSessionErrorCodeNone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;AVAudioSessionErrorCodeMediaServicesFailed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;msrv&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 0x6D737276, 1836282486&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;AVAudioSessionErrorCodeIsBusy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;act&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// 0x21616374, 560030580&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;AVAudioSessionErrorCodeIncompatibleCategory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;cat&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// 0x21636174, 560161140&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;AVAudioSessionErrorCodeCannotInterruptOthers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0x21696E74, 560557684&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;AVAudioSessionErrorCodeMissingEntitlement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;ent&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// 0x656E743F, 1701737535&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;AVAudioSessionErrorCodeSiriIsRecording&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;siri&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// 0x73697269, 1936290409&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;AVAudioSessionErrorCodeCannotStartPlaying&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;pla&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// 0x21706C61, 561015905&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;AVAudioSessionErrorCodeCannotStartRecording&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// 0x21726563 …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Scott Berrevoets</dc:creator><pubDate>Fri, 24 Apr 2026 00:00:00 -0700</pubDate><guid>tag:scottberrevoets.com,2026-04-24:/til/objective-c-enums-can-be-string-backed-sort-of/</guid><category>til</category></item><item><title>`Optional` has a `take()` function</title><link>https://scottberrevoets.com/til/optional-has-a-take-function/</link><description>&lt;p&gt;After the introduction of &lt;code&gt;Optional.toggle()&lt;/code&gt; back in 2018, I thought I had
learned everything there is to &lt;code&gt;Optional&lt;/code&gt;, but today I learned about another
method: &lt;code&gt;Optional.take()&lt;/code&gt;. As the [documentation] points out, it returns the
value of a mutable optional (if not &lt;code&gt;nil&lt;/code&gt;) and then resets the variable to …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Scott Berrevoets</dc:creator><pubDate>Sun, 05 Apr 2026 00:00:00 -0700</pubDate><guid>tag:scottberrevoets.com,2026-04-05:/til/optional-has-a-take-function/</guid><category>til</category></item><item><title>Claude can load files "lazily" or "greedily"</title><link>https://scottberrevoets.com/til/claude-can-load-files-lazily-or-greedily/</link><description>&lt;p&gt;Typically, markdown files can referenced other files by &lt;em&gt;linking&lt;/em&gt; to them: &lt;code&gt;[My
File](myfile.md)&lt;/code&gt;. Claude understands this syntax, making it a nicely
portable way to reference files. When prompting in Claude Code, referencing
other files works through the @-syntax: &lt;code&gt;@path/to/file&lt;/code&gt;. This loads the file
into Claude's context …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Scott Berrevoets</dc:creator><pubDate>Fri, 20 Mar 2026 00:00:00 -0700</pubDate><guid>tag:scottberrevoets.com,2026-03-20:/til/claude-can-load-files-lazily-or-greedily/</guid><category>til</category></item><item><title>macOS can remember SSH passphrases</title><link>https://scottberrevoets.com/til/macos-can-remember-ssh-passphrases/</link><description>&lt;p&gt;Having to type out my password every time in SSH into a machine got a little
tedious for me. Turns out macOS can save these passphrases to the Keychain to
save some typing each time you try to connect to a host over SSH.&lt;/p&gt;
&lt;p&gt;To enable this, make sure you're …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Scott Berrevoets</dc:creator><pubDate>Mon, 02 Mar 2026 00:00:00 -0800</pubDate><guid>tag:scottberrevoets.com,2026-03-02:/til/macos-can-remember-ssh-passphrases/</guid><category>til</category></item><item><title>git can tell you ignored files, and why</title><link>https://scottberrevoets.com/til/git-can-tell-you-ignored-files-and-why/</link><description>&lt;p&gt;Today I created a new file at &lt;code&gt;./Resources/Environment.xcconfig&lt;/code&gt;, but git didn't
pick up on the file and didn't show it in &lt;code&gt;git status&lt;/code&gt;. I suspected the file was
gitignored, but nothing in my &lt;code&gt;.gitignore&lt;/code&gt; was obviously excluding this file.
&lt;code&gt;git status --ignored&lt;/code&gt; adds a section in to the …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Scott Berrevoets</dc:creator><pubDate>Tue, 10 Feb 2026 00:00:00 -0800</pubDate><guid>tag:scottberrevoets.com,2026-02-10:/til/git-can-tell-you-ignored-files-and-why/</guid><category>til</category></item><item><title>There is a term for words like i18n and a11y</title><link>https://scottberrevoets.com/til/there-is-a-term-for-words-like-i18n-and-a11y/</link><description>&lt;p&gt;They're called &lt;strong&gt;numeronyms&lt;/strong&gt; and they're common terms in tech to refer to long
words like "internationalization" (i18n) and accessibility (a11y). However,
they're also used outside of tech: K9, 24/7, and gr8 are all numeronyms as well.&lt;/p&gt;
&lt;p&gt;The official definition, according to &lt;a href="https://en.wikipedia.org/wiki/Numeronym"&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A numeronym is a word, usually an …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Scott Berrevoets</dc:creator><pubDate>Tue, 27 Jan 2026 00:00:00 -0800</pubDate><guid>tag:scottberrevoets.com,2026-01-27:/til/there-is-a-term-for-words-like-i18n-and-a11y/</guid><category>til</category></item></channel></rss>