<rss xmlns:source="http://source.scripting.com/" version="2.0">
  <channel>
    <title>Unravioli</title>
    <link>https://www.unravioli.com/</link>
    <description></description>
    
    <language>en</language>
    
    <lastBuildDate>Mon, 02 Mar 2026 07:49:36 -0500</lastBuildDate>
    <item>
      <title></title>
      <link>https://www.unravioli.com/2026/03/02/touchscreen-macbook-pro-to-be.html</link>
      <pubDate>Mon, 02 Mar 2026 07:49:36 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2026/03/02/touchscreen-macbook-pro-to-be.html</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.macrumors.com/2026/03/02/touchscreen-macbook-pro-touch-friendly/&#34;&gt;Touchscreen MacBook Pro to Be &amp;lsquo;Touch-Friendly, Not Touch-First&amp;rsquo;&lt;/a&gt; 🔗&lt;/p&gt;
&lt;p&gt;Tim Hardwick, Macrumors:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Apple is said to be taking a conservative approach to touch-based input, offering it more as a &amp;ldquo;bonus&amp;rdquo; than a prominent feature.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I don&amp;rsquo;t see the point of a product like this unless the screen folds all the way back like the Framework 12.&lt;/p&gt;
</description>
      <source:markdown>[Touchscreen MacBook Pro to Be &#39;Touch-Friendly, Not Touch-First&#39;](https://www.macrumors.com/2026/03/02/touchscreen-macbook-pro-touch-friendly/) 🔗

Tim Hardwick, Macrumors:

&gt; Apple is said to be taking a conservative approach to touch-based input, offering it more as a &#34;bonus&#34; than a prominent feature.

I don&#39;t see the point of a product like this unless the screen folds all the way back like the Framework 12.
</source:markdown>
    </item>
    
    <item>
      <title>Creating a Zip &amp; Encrypt Quick Action for macOS</title>
      <link>https://www.unravioli.com/2026/03/01/creating-a-zip-encrypt-zip.html</link>
      <pubDate>Sun, 01 Mar 2026 11:24:23 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2026/03/01/creating-a-zip-encrypt-zip.html</guid>
      <description>&lt;p&gt;It&amp;rsquo;s easy enough to right-click a file in Finder and compress it into a zip archive, but if you&amp;rsquo;ve ever wanted to password protect that archive, you need to either use an application or jump into Terminal to run a command. Neither of those approaches matches the speed and simplicity of just right-clicking a file and hitting the &amp;ldquo;Compress&amp;rdquo; button. Here&amp;rsquo;s how I went about trying to make something similar possible.&lt;/p&gt;
&lt;h2 id=&#34;the-goal&#34;&gt;The Goal&lt;/h2&gt;
&lt;p&gt;I wanted a Quick Action in Finder&amp;rsquo;s right-click menu that would:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prompt for a password&lt;/li&gt;
&lt;li&gt;Create an encrypted zip archive&lt;/li&gt;
&lt;li&gt;Drop the archive in the same folder as the original file or folder&lt;/li&gt;
&lt;li&gt;Work on both files and folders&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Simple enough, right?&lt;/p&gt;
&lt;h2 id=&#34;attempt-1-apple-shortcuts&#34;&gt;Attempt 1: Apple Shortcuts&lt;/h2&gt;
&lt;p&gt;I &lt;em&gt;really&lt;/em&gt; wanted to accomplish this with the Shortcuts app. Shortcuts supports Quick Actions in Finder, has a &amp;ldquo;Run Shell Script&amp;rdquo; action, and it looked like exactly the right tool for the job.&lt;/p&gt;
&lt;h3 id=&#34;setting-up-the-shortcut&#34;&gt;Setting Up the Shortcut&lt;/h3&gt;
&lt;p&gt;The basic plan was:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Configure the shortcut to receive files and folders as input&lt;/li&gt;
&lt;li&gt;Prompt for a password using &amp;ldquo;Ask for Text&amp;rdquo; actions&lt;/li&gt;
&lt;li&gt;Pass the file path and password into a shell script that calls &lt;code&gt;zip -er&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The shell script itself was straightforward:&lt;/p&gt;
&lt;div class=&#34;highlight&#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&#34;&gt;&lt;code class=&#34;language-zsh&#34; data-lang=&#34;zsh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/zsh
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;INPUT&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
INPUT&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;INPUT%/&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
PARENT_DIR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;dirname &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$INPUT&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
BASE_NAME&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;basename &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$INPUT&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
OUTPUT&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;PARENT_DIR&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;BASE_NAME&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.zip&amp;#34;&lt;/span&gt;
zip -er --password &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;«Password»&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$OUTPUT&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$INPUT&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;problem-1-empty-archives&#34;&gt;Problem 1: Empty Archives&lt;/h3&gt;
&lt;p&gt;The shortcut ran without errors, but the resulting zip file was empty. Adding debug logging revealed the culprit:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;adding: Users/me/Downloads/secrettext.txt
zip warning: could not open for reading: Users/me/Downloads/secrettext.txt
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Two things stood out: &lt;code&gt;zip&lt;/code&gt; was stripping the leading &lt;code&gt;/&lt;/code&gt; from the path, treating it as relative rather than absolute, and there was an &amp;ldquo;Operation not permitted&amp;rdquo; error suggesting a permissions problem. Switching to &lt;code&gt;cd &amp;quot;$PARENT_DIR&amp;quot; &amp;amp;&amp;amp; zip ... &amp;quot;$BASE_NAME&amp;quot;&lt;/code&gt; fixed the leading-slash issue by making the path relative on purpose — but the permissions error persisted.&lt;/p&gt;
&lt;h3 id=&#34;problem-2-sandbox-permissions&#34;&gt;Problem 2: Sandbox Permissions&lt;/h3&gt;
&lt;p&gt;Even after I granted Shortcuts &lt;strong&gt;Full Disk Access&lt;/strong&gt; in System Settings, the shell script still couldn&amp;rsquo;t read files from the Downloads folder. The error was consistent:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;zip warning: Operation not permitted
zip warning: could not open for reading: secrettext.txt
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is a known macOS sandbox restriction: Shortcuts&#39; &amp;ldquo;Run Shell Script&amp;rdquo; action runs in a sandbox that can block file reads from TCC-protected directories like Downloads, regardless of what permissions you grant in System Settings.&lt;/p&gt;
&lt;h3 id=&#34;attempted-workarounds&#34;&gt;Attempted Workarounds&lt;/h3&gt;
&lt;p&gt;I tried several approaches to get around the sandbox:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Writing to &lt;code&gt;/tmp&lt;/code&gt; first&lt;/strong&gt; — By having the script write the zip to &lt;code&gt;/tmp&lt;/code&gt; and then move it to the destination, I got past the write permission issue. But the &lt;em&gt;read&lt;/em&gt; permission problem remained — the script still couldn&amp;rsquo;t open the source file.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Base64 encoding&lt;/strong&gt; — I used Shortcuts&#39; native &amp;ldquo;Base64 Encode&amp;rdquo; action to read the file, encode it as a string, and pass the string into the shell script to decode back into a file in &lt;code&gt;/tmp&lt;/code&gt;. Unfortunately, it seemed like the Base64 Encode action in Shortcuts couldn&amp;rsquo;t pipe its output subsequent actions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Passing via stdin&lt;/strong&gt; — Configuring &amp;ldquo;Run Shell Script&amp;rdquo; to receive input as stdin rather than arguments causes Shortcuts to read the file itself and pipe the contents in, bypassing the shell script&amp;rsquo;s read restriction. This didn&amp;rsquo;t work reliably either.&lt;/p&gt;
&lt;p&gt;After exhausting these options, the sandboxing issues made Shortcuts seem like a dead-end. So I ended up abandoning Shortcuts, and trying an app I&amp;rsquo;ve never used before.&lt;/p&gt;
&lt;h2 id=&#34;attempt-2-automator&#34;&gt;Attempt 2: Automator&lt;/h2&gt;
&lt;p&gt;Automator is older and less flashy than Shortcuts, but it has more permissive file access and its Quick Actions integrate into Finder just as well.&lt;/p&gt;
&lt;h3 id=&#34;basic-setup&#34;&gt;Basic Setup&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open Automator and create a new &lt;strong&gt;Quick Action&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Set &amp;ldquo;Workflow receives current&amp;rdquo; to &lt;strong&gt;files or folders&lt;/strong&gt; in &lt;strong&gt;Finder&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Add a &amp;ldquo;Run Shell Script&amp;rdquo; action&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;problem-the-pipeline-interruption&#34;&gt;Problem: The Pipeline Interruption&lt;/h3&gt;
&lt;p&gt;The first Automator attempt was similar to what I&amp;rsquo;d been trying to do with Shortcuts—It used an &amp;ldquo;Ask for Text&amp;rdquo; action to collect the password, followed by a &amp;ldquo;Run Shell Script&amp;rdquo; to do the zipping. The script received the password as &lt;code&gt;$1&lt;/code&gt; but the file paths were gone:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;PASSWORD: astrongpassword
Number of files: 0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Automator&amp;rsquo;s actions form a linear pipeline, and &amp;ldquo;Ask for Text&amp;rdquo; consumes the input. By the time the shell script runs, the file paths have been replaced by the password string.&lt;/p&gt;
&lt;p&gt;Restructuring the workflow to capture file paths first didn&amp;rsquo;t cleanly solve the problem either, because passing them through subsequent actions got messy.&lt;/p&gt;
&lt;h3 id=&#34;the-solution-osascript-for-the-password-dialog&#34;&gt;The Solution: &lt;code&gt;osascript&lt;/code&gt; for the Password Dialog&lt;/h3&gt;
&lt;p&gt;The cleanest fix was to skip Automator&amp;rsquo;s &amp;ldquo;Ask for Text&amp;rdquo; action entirely and use a single &amp;ldquo;Run Shell Script&amp;rdquo; action that shows a native password dialog using &lt;code&gt;osascript&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#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&#34;&gt;&lt;code class=&#34;language-zsh&#34; data-lang=&#34;zsh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/zsh
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# Show a native password dialog&lt;/span&gt;
PASSWORD&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;osascript &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Tell application &amp;#34;System Events&amp;#34; to display dialog &amp;#34;Enter encryption password:&amp;#34; default answer &amp;#34;&amp;#34; with hidden answer&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;text returned of result&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;

&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; INPUT in &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$@&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
    INPUT&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;INPUT%/&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
    PARENT_DIR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;dirname &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$INPUT&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
    BASE_NAME&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;basename &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$INPUT&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
    TMPOUT&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tmp/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;BASE_NAME&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.zip&amp;#34;&lt;/span&gt;
    FINALOUT&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;PARENT_DIR&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;BASE_NAME&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.zip&amp;#34;&lt;/span&gt;

    cd &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$PARENT_DIR&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; zip -r -e --password &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$PASSWORD&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$TMPOUT&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$BASE_NAME&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
    mv &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$TMPOUT&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$FINALOUT&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This approach:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uses &lt;code&gt;osascript&lt;/code&gt; to show a proper native macOS dialog with a hidden (password-style) input field&lt;/li&gt;
&lt;li&gt;Keeps everything in a single action, so the file paths arrive cleanly as &lt;code&gt;$1&lt;/code&gt;, &lt;code&gt;$2&lt;/code&gt;, etc. via &lt;code&gt;&amp;quot;$@&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Writes the zip to &lt;code&gt;/tmp&lt;/code&gt; first (sidestepping any write permission quirks) then moves it to the final destination&lt;/li&gt;
&lt;li&gt;Loops over all inputs, so it works if you select multiple files at once&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;installation&#34;&gt;Installation&lt;/h3&gt;
&lt;p&gt;Save this Automator workflow via &lt;strong&gt;File → Save&lt;/strong&gt;, give it a name, and then it&amp;rsquo;ll be saved automatically to &lt;code&gt;~/Library/Services/&lt;/code&gt;. It appears immediately in Finder&amp;rsquo;s right-click &lt;strong&gt;Quick Actions&lt;/strong&gt; menu, there&amp;rsquo;s no additional configuration needed.&lt;/p&gt;
&lt;h2 id=&#34;lessons-learned&#34;&gt;Lessons Learned&lt;/h2&gt;
&lt;p&gt;The Shortcuts sandbox is still too restrictive when it comes to shell scripts accessing files in TCC-protected directories like the Downloads folder—More restrictive than I&amp;rsquo;d expected given that I had granted Full Disk Access to Shortcuts. For a Quick Action that needs to read arbitrary files from the filesystem, Automator is the better choice. Shortcuts excels at chaining native macOS actions, but the moment you need a shell script to touch files, you&amp;rsquo;ll likely hit a wall.&lt;/p&gt;
&lt;p&gt;Automator&amp;rsquo;s pipeline model has its own quirks (the &amp;ldquo;Ask for Text&amp;rdquo; interruption problem being a good example), but &lt;code&gt;osascript&lt;/code&gt; is a powerful escape hatch that lets you show native UI from within a shell script, keeping the entire workflow in a single action and avoiding pipeline issues altogether.&lt;/p&gt;
&lt;p&gt;Despite this being my first time using Automator, the final workflow was quick to set up. Shortcuts clearly seems to be the direction that Apple is moving in, but given it&amp;rsquo;s shortcomings, let&amp;rsquo;s hope they don&amp;rsquo;t get rid of Automator any time soon.&lt;/p&gt;
</description>
      <source:markdown>It&#39;s easy enough to right-click a file in Finder and compress it into a zip archive, but if you&#39;ve ever wanted to password protect that archive, you need to either use an application or jump into Terminal to run a command. Neither of those approaches matches the speed and simplicity of just right-clicking a file and hitting the &#34;Compress&#34; button. Here&#39;s how I went about trying to make something similar possible.

## The Goal

I wanted a Quick Action in Finder&#39;s right-click menu that would:

- Prompt for a password
- Create an encrypted zip archive
- Drop the archive in the same folder as the original file or folder
- Work on both files and folders

Simple enough, right?

## Attempt 1: Apple Shortcuts

I *really* wanted to accomplish this with the Shortcuts app. Shortcuts supports Quick Actions in Finder, has a &#34;Run Shell Script&#34; action, and it looked like exactly the right tool for the job.

### Setting Up the Shortcut

The basic plan was:

1. Configure the shortcut to receive files and folders as input
2. Prompt for a password using &#34;Ask for Text&#34; actions
3. Pass the file path and password into a shell script that calls `zip -er`

The shell script itself was straightforward:

```zsh
#!/bin/zsh
INPUT=&#34;$1&#34;
INPUT=&#34;${INPUT%/}&#34;
PARENT_DIR=$(dirname &#34;$INPUT&#34;)
BASE_NAME=$(basename &#34;$INPUT&#34;)
OUTPUT=&#34;${PARENT_DIR}/${BASE_NAME}.zip&#34;
zip -er --password &#34;«Password»&#34; &#34;$OUTPUT&#34; &#34;$INPUT&#34;
```
### Problem 1: Empty Archives

The shortcut ran without errors, but the resulting zip file was empty. Adding debug logging revealed the culprit:

```
adding: Users/me/Downloads/secrettext.txt
zip warning: could not open for reading: Users/me/Downloads/secrettext.txt
```
Two things stood out: `zip` was stripping the leading `/` from the path, treating it as relative rather than absolute, and there was an &#34;Operation not permitted&#34; error suggesting a permissions problem. Switching to `cd &#34;$PARENT_DIR&#34; &amp;&amp; zip ... &#34;$BASE_NAME&#34;` fixed the leading-slash issue by making the path relative on purpose — but the permissions error persisted.

### Problem 2: Sandbox Permissions

Even after I granted Shortcuts **Full Disk Access** in System Settings, the shell script still couldn&#39;t read files from the Downloads folder. The error was consistent:

```
zip warning: Operation not permitted
zip warning: could not open for reading: secrettext.txt
```
This is a known macOS sandbox restriction: Shortcuts&#39; &#34;Run Shell Script&#34; action runs in a sandbox that can block file reads from TCC-protected directories like Downloads, regardless of what permissions you grant in System Settings.

### Attempted Workarounds

I tried several approaches to get around the sandbox:

**Writing to `/tmp` first** — By having the script write the zip to `/tmp` and then move it to the destination, I got past the write permission issue. But the *read* permission problem remained — the script still couldn&#39;t open the source file.

**Base64 encoding** — I used Shortcuts&#39; native &#34;Base64 Encode&#34; action to read the file, encode it as a string, and pass the string into the shell script to decode back into a file in `/tmp`. Unfortunately, it seemed like the Base64 Encode action in Shortcuts couldn&#39;t pipe its output subsequent actions.

**Passing via stdin** — Configuring &#34;Run Shell Script&#34; to receive input as stdin rather than arguments causes Shortcuts to read the file itself and pipe the contents in, bypassing the shell script&#39;s read restriction. This didn&#39;t work reliably either.

After exhausting these options, the sandboxing issues made Shortcuts seem like a dead-end. So I ended up abandoning Shortcuts, and trying an app I&#39;ve never used before.

## Attempt 2: Automator

Automator is older and less flashy than Shortcuts, but it has more permissive file access and its Quick Actions integrate into Finder just as well.

### Basic Setup

1. Open Automator and create a new **Quick Action**
2. Set &#34;Workflow receives current&#34; to **files or folders** in **Finder**
3. Add a &#34;Run Shell Script&#34; action

### Problem: The Pipeline Interruption

The first Automator attempt was similar to what I&#39;d been trying to do with Shortcuts—It used an &#34;Ask for Text&#34; action to collect the password, followed by a &#34;Run Shell Script&#34; to do the zipping. The script received the password as `$1` but the file paths were gone:

```
PASSWORD: astrongpassword
Number of files: 0
```
Automator&#39;s actions form a linear pipeline, and &#34;Ask for Text&#34; consumes the input. By the time the shell script runs, the file paths have been replaced by the password string.

Restructuring the workflow to capture file paths first didn&#39;t cleanly solve the problem either, because passing them through subsequent actions got messy.

### The Solution: `osascript` for the Password Dialog

The cleanest fix was to skip Automator&#39;s &#34;Ask for Text&#34; action entirely and use a single &#34;Run Shell Script&#34; action that shows a native password dialog using `osascript`:

```zsh
#!/bin/zsh

# Show a native password dialog
PASSWORD=$(osascript \
  -e &#39;Tell application &#34;System Events&#34; to display dialog &#34;Enter encryption password:&#34; default answer &#34;&#34; with hidden answer&#39; \
  -e &#39;text returned of result&#39;)

for INPUT in &#34;$@&#34;; do
    INPUT=&#34;${INPUT%/}&#34;
    PARENT_DIR=$(dirname &#34;$INPUT&#34;)
    BASE_NAME=$(basename &#34;$INPUT&#34;)
    TMPOUT=&#34;/tmp/${BASE_NAME}.zip&#34;
    FINALOUT=&#34;${PARENT_DIR}/${BASE_NAME}.zip&#34;

    cd &#34;$PARENT_DIR&#34; &amp;&amp; zip -r -e --password &#34;$PASSWORD&#34; &#34;$TMPOUT&#34; &#34;$BASE_NAME&#34;
    mv &#34;$TMPOUT&#34; &#34;$FINALOUT&#34;
done
```
This approach:

- Uses `osascript` to show a proper native macOS dialog with a hidden (password-style) input field
- Keeps everything in a single action, so the file paths arrive cleanly as `$1`, `$2`, etc. via `&#34;$@&#34;`
- Writes the zip to `/tmp` first (sidestepping any write permission quirks) then moves it to the final destination
- Loops over all inputs, so it works if you select multiple files at once

### Installation

Save this Automator workflow via **File → Save**, give it a name, and then it&#39;ll be saved automatically to `~/Library/Services/`. It appears immediately in Finder&#39;s right-click **Quick Actions** menu, there&#39;s no additional configuration needed.

## Lessons Learned

The Shortcuts sandbox is still too restrictive when it comes to shell scripts accessing files in TCC-protected directories like the Downloads folder—More restrictive than I&#39;d expected given that I had granted Full Disk Access to Shortcuts. For a Quick Action that needs to read arbitrary files from the filesystem, Automator is the better choice. Shortcuts excels at chaining native macOS actions, but the moment you need a shell script to touch files, you&#39;ll likely hit a wall.

Automator&#39;s pipeline model has its own quirks (the &#34;Ask for Text&#34; interruption problem being a good example), but `osascript` is a powerful escape hatch that lets you show native UI from within a shell script, keeping the entire workflow in a single action and avoiding pipeline issues altogether.

Despite this being my first time using Automator, the final workflow was quick to set up. Shortcuts clearly seems to be the direction that Apple is moving in, but given it&#39;s shortcomings, let&#39;s hope they don&#39;t get rid of Automator any time soon.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2026/02/26/the-misuses-of-the-university.html</link>
      <pubDate>Thu, 26 Feb 2026 21:05:58 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2026/02/26/the-misuses-of-the-university.html</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.publicbooks.org/the-misuses-of-the-university/&#34;&gt;The Misuses of the University&lt;/a&gt; 🔗&lt;/p&gt;
&lt;p&gt;François Furstenberg, Public Books:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Everyone thinks universities have to do what donors want because they pay the bills. But that gets it backward, and not just at Hopkins. Giant donations, he’s come to realize, often increase the university’s bills, generating new operating expenses for projects that may have only tenuous links to the university’s core mission. The new fixed costs cannibalize existing funding streams, increasing pressure to grow revenue. He remembers the quip from a former dean: “The endowment is the gift that keeps on taking.”&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      <source:markdown>[The Misuses of the University](https://www.publicbooks.org/the-misuses-of-the-university/) 🔗

François Furstenberg, Public Books:

&gt; Everyone thinks universities have to do what donors want because they pay the bills. But that gets it backward, and not just at Hopkins. Giant donations, he’s come to realize, often increase the university’s bills, generating new operating expenses for projects that may have only tenuous links to the university’s core mission. The new fixed costs cannibalize existing funding streams, increasing pressure to grow revenue. He remembers the quip from a former dean: “The endowment is the gift that keeps on taking.”
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2026/02/24/finished-reading-the-way-of.html</link>
      <pubDate>Tue, 24 Feb 2026 18:35:03 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2026/02/24/finished-reading-the-way-of.html</guid>
      <description>&lt;img src=&#34;https://cdn.micro.blog/books/9780765376671/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;
&lt;p&gt;Finished reading: &lt;a href=&#34;https://micro.blog/books/9780765376671&#34;&gt;The Way of Kings&lt;/a&gt; by Brandon Sanderson. A real slow burn, with an incredible payoff at the end. I’ll have a hard time waiting very long to read the next one📚&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.micro.blog/books/9780765376671/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;

Finished reading: [The Way of Kings](https://micro.blog/books/9780765376671) by Brandon Sanderson. A real slow burn, with an incredible payoff at the end. I’ll have a hard time waiting very long to read the next one📚
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2026/01/08/the-party-told-you-to.html</link>
      <pubDate>Thu, 08 Jan 2026 19:54:09 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2026/01/08/the-party-told-you-to.html</guid>
      <description>&lt;p&gt;&amp;ldquo;The Party told you to reject the evidence of your eyes and ears. It was their final, most essential command.&amp;rdquo; -GO&lt;/p&gt;
</description>
      <source:markdown>&#34;The Party told you to reject the evidence of your eyes and ears. It was their final, most essential command.&#34; -GO
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2025/12/11/finished-reading-alien-earths-by.html</link>
      <pubDate>Thu, 11 Dec 2025 09:01:18 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2025/12/11/finished-reading-alien-earths-by.html</guid>
      <description>&lt;img src=&#34;https://cdn.micro.blog/books/9781250283641/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;
&lt;p&gt;Finished reading: &lt;a href=&#34;https://micro.blog/books/9781250283641&#34;&gt;Alien Earths&lt;/a&gt; by Dr. Lisa Kaltenegger 📚&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.micro.blog/books/9781250283641/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;

Finished reading: [Alien Earths](https://micro.blog/books/9781250283641) by Dr. Lisa Kaltenegger 📚
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2025/10/21/i-never-quite-understood-why.html</link>
      <pubDate>Tue, 21 Oct 2025 17:47:31 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2025/10/21/i-never-quite-understood-why.html</guid>
      <description>&lt;p&gt;I never quite understood why multiview was important to sports fans, but here I am watching a city council meeting with the county legislature meeting playing in a PiP window.&lt;/p&gt;
</description>
      <source:markdown>I never quite understood why multiview was important to sports fans, but here I am watching a city council meeting with the county legislature meeting playing in a PiP window.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2025/09/27/finished-reading-the-grapes-of.html</link>
      <pubDate>Sat, 27 Sep 2025 15:44:00 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2025/09/27/finished-reading-the-grapes-of.html</guid>
      <description>&lt;img src=&#34;https://cdn.micro.blog/books/9781417670352/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;
&lt;p&gt;Finished reading: &lt;a href=&#34;https://micro.blog/books/9781417670352&#34;&gt;The Grapes of Wrath&lt;/a&gt; by John Steinbeck 📚&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.micro.blog/books/9781417670352/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;

Finished reading: [The Grapes of Wrath](https://micro.blog/books/9781417670352) by John Steinbeck 📚
</source:markdown>
    </item>
    
    <item>
      <title>System Data and OmniDiskSweeper</title>
      <link>https://www.unravioli.com/2025/07/27/system-data-and-omnidisksweeper.html</link>
      <pubDate>Sun, 27 Jul 2025 16:36:19 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2025/07/27/system-data-and-omnidisksweeper.html</guid>
      <description>&lt;p&gt;Recently when checking my Mac’s storage usage, I noticed that the System Data category had ballooned to over 250GBs. Even with 1TB of storage, this seemed excessive and I wanted to get the the bottom of what was taking up so much space.&lt;/p&gt;
&lt;p&gt;After some research online, I learned that I had many prior versions of Xcode simulators sitting around that were no longer available to be used. These were easily pruned, and doing so freed up a dozen or so gigabytes of space, but not nearly enough to make much of a difference in the reported amount of of disk space belonging to System Data.&lt;/p&gt;
&lt;p&gt;Next, I took a look at local Time Machine snapshots. I didn’t really want to mess with these, but I did find that deleting some large and no longer needed files that were sitting on my drive also helped reduce the size of these snapshots. Nevertheless, I still had over 200GB devoted to System Data.&lt;/p&gt;
&lt;p&gt;I continued by looking through my &lt;code&gt;~/Library&lt;/code&gt; folder and its many subdirectories, convinced that the reason for the bloat must be found there, but the numbers just weren’t adding up. Finally, I tried installing OmniDiskSweeper after seeing it recommended a few times during my online searches. I ran it and within a few minutes it had indexed all of my directories and organized them more or less by size.&lt;/p&gt;
&lt;p&gt;At first I wasn’t sure what to do with this information, because I still didn’t know what was safe to delete. But soon I saw something that I hadn’t before—OmniDiskSweeper was showing a hidden &lt;code&gt;com.apple.podcasts&lt;/code&gt; directory within my &lt;code&gt;~/Library&lt;/code&gt; folder. That directory in turn had a &lt;code&gt;tmp&lt;/code&gt; folder with many snippets of previously-streamed podcast episodes. Over 100GB worth of snippets, in fact.&lt;/p&gt;
&lt;p&gt;I know enough about stream buffering to know that generally speaking, the way it works is that small 15 second or so pieces of a larger stream are downloaded ahead of time. The snippets I found were undoubtably of this nature, which is why they were found in such an obscure location. What still isn’t clear to me, however, is why over a year&#39;s worth of these segments were kept on my disk well after the episodes they belonged to had been listened to, deleted from the podcasts app, and otherwise forgotten.&lt;/p&gt;
&lt;p&gt;I deleted all 100GB of these old podcast snippets and restarted my Mac. I’m happy to report that after doing so, I&#39;m now consistently only seeing ~90GB devoted to System Data. That still feels like more than necessary, but it’s a major improvement.&lt;/p&gt;
</description>
      <source:markdown>&lt;p&gt;Recently when checking my Mac’s storage usage, I noticed that the System Data category had ballooned to over 250GBs. Even with 1TB of storage, this seemed excessive and I wanted to get the the bottom of what was taking up so much space.&lt;/p&gt;
&lt;p&gt;After some research online, I learned that I had many prior versions of Xcode simulators sitting around that were no longer available to be used. These were easily pruned, and doing so freed up a dozen or so gigabytes of space, but not nearly enough to make much of a difference in the reported amount of of disk space belonging to System Data.&lt;/p&gt;
&lt;p&gt;Next, I took a look at local Time Machine snapshots. I didn’t really want to mess with these, but I did find that deleting some large and no longer needed files that were sitting on my drive also helped reduce the size of these snapshots. Nevertheless, I still had over 200GB devoted to System Data.&lt;/p&gt;
&lt;p&gt;I continued by looking through my &lt;code&gt;~/Library&lt;/code&gt; folder and its many subdirectories, convinced that the reason for the bloat must be found there, but the numbers just weren’t adding up. Finally, I tried installing OmniDiskSweeper after seeing it recommended a few times during my online searches. I ran it and within a few minutes it had indexed all of my directories and organized them more or less by size.&lt;/p&gt;
&lt;p&gt;At first I wasn’t sure what to do with this information, because I still didn’t know what was safe to delete. But soon I saw something that I hadn’t before—OmniDiskSweeper was showing a hidden &lt;code&gt;com.apple.podcasts&lt;/code&gt; directory within my &lt;code&gt;~/Library&lt;/code&gt; folder. That directory in turn had a &lt;code&gt;tmp&lt;/code&gt; folder with many snippets of previously-streamed podcast episodes. Over 100GB worth of snippets, in fact.&lt;/p&gt;
&lt;p&gt;I know enough about stream buffering to know that generally speaking, the way it works is that small 15 second or so pieces of a larger stream are downloaded ahead of time. The snippets I found were undoubtably of this nature, which is why they were found in such an obscure location. What still isn’t clear to me, however, is why over a year&#39;s worth of these segments were kept on my disk well after the episodes they belonged to had been listened to, deleted from the podcasts app, and otherwise forgotten.&lt;/p&gt;
&lt;p&gt;I deleted all 100GB of these old podcast snippets and restarted my Mac. I’m happy to report that after doing so, I&#39;m now consistently only seeing ~90GB devoted to System Data. That still feels like more than necessary, but it’s a major improvement.&lt;/p&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2025/07/19/finished-reading-apple-in-china.html</link>
      <pubDate>Sat, 19 Jul 2025 12:52:36 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2025/07/19/finished-reading-apple-in-china.html</guid>
      <description>&lt;img src=&#34;https://cdn.micro.blog/books/9781668053393/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;
&lt;p&gt;Finished reading: &lt;a href=&#34;https://micro.blog/books/9781668053393&#34;&gt;Apple in China&lt;/a&gt; by Patrick McGee 📚Every bit as fascinating as I’d been led to believe.&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.micro.blog/books/9781668053393/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;

&lt;p&gt;Finished reading: &lt;a href=&#34;https://micro.blog/books/9781668053393&#34;&gt;Apple in China&lt;/a&gt; by Patrick McGee 📚Every bit as fascinating as I’d been led to believe.&lt;/p&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2025/07/06/ken-burns-on-face-the.html</link>
      <pubDate>Sun, 06 Jul 2025 19:58:36 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2025/07/06/ken-burns-on-face-the.html</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=DNKG4WhvHwg&#34;&gt;Ken Burns, on &lt;em&gt;Face The Nation&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The pursuit of happiness is not the acquisition of things in a marketplace of objects, but lifelong learning in a marketplace of ideas. That&amp;rsquo;s what the founders said. To be virtuous, to live a virtuous life, to continually educate yourself is what was required to sustain this republic. And I think that&amp;rsquo;s what we&amp;rsquo;ve gotten away from. Everything is sort of all individualized. We&amp;rsquo;re all free agents. We don&amp;rsquo;t realize that freedom, the thing that we tout is not just what I want, but also that&amp;rsquo;s in tension with what we need. And I think what happens is that when we study these words, we can go back to the sense of newness and freshness that they represented and rededicate ourselves. And that means me for me and you for you to this idea that the pursuit of happiness is about lifelong learning. It&amp;rsquo;s about becoming ever more educated to the responsibility of citizenship. And that&amp;rsquo;s a huge, huge responsibility.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      <source:markdown>[Ken Burns, on *Face The Nation*](https://www.youtube.com/watch?v=DNKG4WhvHwg):

&gt; The pursuit of happiness is not the acquisition of things in a marketplace of objects, but lifelong learning in a marketplace of ideas. That&#39;s what the founders said. To be virtuous, to live a virtuous life, to continually educate yourself is what was required to sustain this republic. And I think that&#39;s what we&#39;ve gotten away from. Everything is sort of all individualized. We&#39;re all free agents. We don&#39;t realize that freedom, the thing that we tout is not just what I want, but also that&#39;s in tension with what we need. And I think what happens is that when we study these words, we can go back to the sense of newness and freshness that they represented and rededicate ourselves. And that means me for me and you for you to this idea that the pursuit of happiness is about lifelong learning. It&#39;s about becoming ever more educated to the responsibility of citizenship. And that&#39;s a huge, huge responsibility.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2025/06/13/finished-reading-a-study-in.html</link>
      <pubDate>Fri, 13 Jun 2025 08:36:42 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2025/06/13/finished-reading-a-study-in.html</guid>
      <description>&lt;img src=&#34;https://cdn.micro.blog/books/9780198856047/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;
&lt;p&gt;Finished reading: &lt;a href=&#34;https://micro.blog/books/9780198856047&#34;&gt;A Study in Scarlet&lt;/a&gt; by Arthur Conan Doyle 📚Being the first Sherlock Holmes story, I was surprised that nearly half of it ended up being about Mormons in Utah. Coincidentally there were many parallels with &lt;em&gt;Riders of the Purple Sage&lt;/em&gt;, which I happened to have read earlier this year.&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.micro.blog/books/9780198856047/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;

Finished reading: [A Study in Scarlet](https://micro.blog/books/9780198856047) by Arthur Conan Doyle 📚Being the first Sherlock Holmes story, I was surprised that nearly half of it ended up being about Mormons in Utah. Coincidentally there were many parallels with *Riders of the Purple Sage*, which I happened to have read earlier this year.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2025/06/11/finished-reading-guns-germs-and.html</link>
      <pubDate>Wed, 11 Jun 2025 11:04:58 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2025/06/11/finished-reading-guns-germs-and.html</guid>
      <description>&lt;img src=&#34;https://cdn.micro.blog/books/9780393069228/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;
&lt;p&gt;Finished reading: &lt;a href=&#34;https://micro.blog/books/9780393069228&#34;&gt;Guns, Germs, and Steel: The Fates of Human Societies&lt;/a&gt; by Jared Diamond 📚In college I minored in anthropology, so naturally I enjoyed this one. I found the discussion of oligarchy and big man theory in this context to be especially interesting.&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.micro.blog/books/9780393069228/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;

Finished reading: [Guns, Germs, and Steel: The Fates of Human Societies](https://micro.blog/books/9780393069228) by Jared Diamond 📚In college I minored in anthropology, so naturally I enjoyed this one. I found the discussion of oligarchy and big man theory in this context to be especially interesting.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2025/06/11/its-happening-here.html</link>
      <pubDate>Wed, 11 Jun 2025 07:58:48 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2025/06/11/its-happening-here.html</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://youtu.be/pXQQNUeb4Sw&#34;&gt;Governor Newsom, addressing not only the L.A. protests, but also the situation the U.S. finds itself in&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;California may be first, but it clearly will not end here. Other states are next. Democracy is next. Democracy is under assault right before our eyes, this moment we have feared has arrived. He’s taking a wrecking ball, a wrecking ball to our founding fathers’ historic project: three coequal branches of independent government.&lt;/p&gt;
&lt;p&gt;There are no longer any checks and balances. Congress is nowhere to be found. Speaker Johnson has completely abdicated that responsibility. The rule of law has increasingly been given way to the rule of Don.&lt;/p&gt;
&lt;p&gt;The founding fathers didn’t live and die to see this kind of moment. It’s time for all of us to stand up.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      <source:markdown>[Governor Newsom, addressing not only the L.A. protests, but also the situation the U.S. finds itself in](https://youtu.be/pXQQNUeb4Sw):

&gt; California may be first, but it clearly will not end here. Other states are next. Democracy is next. Democracy is under assault right before our eyes, this moment we have feared has arrived. He’s taking a wrecking ball, a wrecking ball to our founding fathers’ historic project: three coequal branches of independent government.
&gt;
&gt; There are no longer any checks and balances. Congress is nowhere to be found. Speaker Johnson has completely abdicated that responsibility. The rule of law has increasingly been given way to the rule of Don.
&gt;
&gt; The founding fathers didn’t live and die to see this kind of moment. It’s time for all of us to stand up.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2025/05/11/after-weeks-of-rain-it.html</link>
      <pubDate>Sun, 11 May 2025 07:24:47 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2025/05/11/after-weeks-of-rain-it.html</guid>
      <description>&lt;p&gt;After weeks of rain it finally feels like spring.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2025/image-20250511-082442-171ca426.jpg&#34; alt=&#34;A view of a lake on a sunny day.&#34;&gt;&lt;/p&gt;
</description>
      <source:markdown>After weeks of rain it finally feels like spring.

![A view of a lake on a sunny day.](https://cdn.uploads.micro.blog/99296/2025/image-20250511-082442-171ca426.jpg)
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2025/05/08/what-time-is-it.html</link>
      <pubDate>Thu, 08 May 2025 17:48:55 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2025/05/08/what-time-is-it.html</guid>
      <description>&lt;p&gt;Tony (or possibly his brother Dan) Gilroy, writing for the character Mon Mothma on &lt;em&gt;Andor&lt;/em&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I believe we are in crisis. The distance between what is said and what is known to be true has become an abyss. Of all the things at risk, the loss of an objective reality is perhaps the most dangerous. The death of truth is the ultimate victory of evil. When truth leaves us, when we let it slip away, when it is ripped from our hands, we become vulnerable to the appetite of whatever monster screams the loudest.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      <source:markdown>Tony (or possibly his brother Dan) Gilroy, writing for the character Mon Mothma on _Andor_:

&gt; I believe we are in crisis. The distance between what is said and what is known to be true has become an abyss. Of all the things at risk, the loss of an objective reality is perhaps the most dangerous. The death of truth is the ultimate victory of evil. When truth leaves us, when we let it slip away, when it is ripped from our hands, we become vulnerable to the appetite of whatever monster screams the loudest.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2025/05/03/carl-sagan-in-cosmos-if.html</link>
      <pubDate>Sat, 03 May 2025 09:18:32 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2025/05/03/carl-sagan-in-cosmos-if.html</guid>
      <description>&lt;p&gt;Carl Sagan, in &lt;a href=&#34;https://bookshop.org/p/books/cosmos-carl-sagan/6779746?ean=9780345539434&amp;amp;next=t&#34;&gt;Cosmos&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If I finish a book a week, I will read only a few thousand books in my lifetime, about a tenth of a percent of the contents of the greatest libraries of our time. The trick is to know which books to read.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I continue to struggle with prioritizing what books to read. My list is longer than I care to count, and I&amp;rsquo;m always trying to balance the tension between reading things that I feel I &amp;ldquo;should&amp;rdquo; read vs. reading what I want to read. I certainly read more, and more quickly, if I&amp;rsquo;m reading a book that I&amp;rsquo;m genuinely compelled toward. Maybe as long as I&amp;rsquo;m working in little bits of the stuff that&amp;rsquo;s good for me, like vegetables, then whatever else keeps me reading is good enough.&lt;/p&gt;
</description>
      <source:markdown>Carl Sagan, in [Cosmos](https://bookshop.org/p/books/cosmos-carl-sagan/6779746?ean=9780345539434&amp;next=t):

&gt; If I finish a book a week, I will read only a few thousand books in my lifetime, about a tenth of a percent of the contents of the greatest libraries of our time. The trick is to know which books to read.
 
I continue to struggle with prioritizing what books to read. My list is longer than I care to count, and I&#39;m always trying to balance the tension between reading things that I feel I &#34;should&#34; read vs. reading what I want to read. I certainly read more, and more quickly, if I&#39;m reading a book that I&#39;m genuinely compelled toward. Maybe as long as I&#39;m working in little bits of the stuff that&#39;s good for me, like vegetables, then whatever else keeps me reading is good enough.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2024/12/23/happy-th-birthday-to-this.html</link>
      <pubDate>Mon, 23 Dec 2024 11:55:01 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2024/12/23/happy-th-birthday-to-this.html</guid>
      <description>&lt;p&gt;Happy 4th birthday to this pup! It was too cold to go to the dog park, but he at least got a sheep toy, the stuffing from which is now spread all through the house.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/img-5901.jpeg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;&#34;&gt;
</description>
      <source:markdown>Happy 4th birthday to this pup! It was too cold to go to the dog park, but he at least got a sheep toy, the stuffing from which is now spread all through the house.

&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/img-5901.jpeg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;&#34;&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2024/09/23/my-favorite-part.html</link>
      <pubDate>Mon, 23 Sep 2024 17:40:47 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2024/09/23/my-favorite-part.html</guid>
      <description>&lt;p&gt;My favorite part of Porchfest 2024 (oh, sure, the music was good too). Ithaca’s is the original, and probably the best.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/841e40fe13.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A dog with its head out a window containing a sign that reads “Free dog petting.” &#34;&gt;
</description>
      <source:markdown>My favorite part of Porchfest 2024 (oh, sure, the music was good too). Ithaca’s is the original, and probably the best.

&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/841e40fe13.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A dog with its head out a window containing a sign that reads “Free dog petting.” &#34;&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2024/07/02/new-door-day.html</link>
      <pubDate>Tue, 02 Jul 2024 18:53:49 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2024/07/02/new-door-day.html</guid>
      <description>&lt;p&gt;New door day! Which is also my way of saying, after all the work we’ve done for the last several months, we finally moved into our new house three weeks ago! Big projects are done (for now), but there will still be plenty of small ones.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/7a5f744154.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A new exterior door, from inside of a house, with a large window.&#34;&gt;
</description>
      <source:markdown>New door day! Which is also my way of saying, after all the work we’ve done for the last several months, we finally moved into our new house three weeks ago! Big projects are done (for now), but there will still be plenty of small ones.

&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/7a5f744154.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A new exterior door, from inside of a house, with a large window.&#34;&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2024/05/18/new-fence-same.html</link>
      <pubDate>Sat, 18 May 2024 11:46:51 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2024/05/18/new-fence-same.html</guid>
      <description>&lt;p&gt;New fence, same dog.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/fc05c2b5e2.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A brown dog in front of a maple tree and a wooden fence.&#34;&gt;
</description>
      <source:markdown>New fence, same dog.

&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/fc05c2b5e2.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A brown dog in front of a maple tree and a wooden fence.&#34;&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2024/05/17/were-done-finishing.html</link>
      <pubDate>Fri, 17 May 2024 05:54:06 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2024/05/17/were-done-finishing.html</guid>
      <description>&lt;p&gt;We’re done finishing our floors. Now we’re just reattaching (and in some cases repairing) the trim, painting some smaller spots, and cleaning up before we finally start moving in!&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/84644cae41.jpg&#34; width=&#34;392&#34; height=&#34;600&#34; alt=&#34;Newly finished wood floors.&#34;&gt;
</description>
      <source:markdown>We’re done finishing our floors. Now we’re just reattaching (and in some cases repairing) the trim, painting some smaller spots, and cleaning up before we finally start moving in!

&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/84644cae41.jpg&#34; width=&#34;392&#34; height=&#34;600&#34; alt=&#34;Newly finished wood floors.&#34;&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2024/05/04/while-weve-started.html</link>
      <pubDate>Sat, 04 May 2024 12:46:48 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2024/05/04/while-weve-started.html</guid>
      <description>&lt;p&gt;While we&amp;rsquo;ve started finishing our floors, the fence builders we hired removed our old chain link fence and have begun installing a new wooden one. The old fence was 2.5 feet high, and our dog has jumped it to chase rabbits. The new one will keep him in and help make our side yard feel like an oasis.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/img-0300.jpeg&#34; width=&#34;600&#34; height=&#34;449&#34; alt=&#34;A framed out wooden fence surrounding a yard.&#34;&gt;
</description>
      <source:markdown>While we&#39;ve started finishing our floors, the fence builders we hired removed our old chain link fence and have begun installing a new wooden one. The old fence was 2.5 feet high, and our dog has jumped it to chase rabbits. The new one will keep him in and help make our side yard feel like an oasis.

&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/img-0300.jpeg&#34; width=&#34;600&#34; height=&#34;449&#34; alt=&#34;A framed out wooden fence surrounding a yard.&#34;&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2024/04/28/the-walls-are.html</link>
      <pubDate>Sun, 28 Apr 2024 11:44:59 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2024/04/28/the-walls-are.html</guid>
      <description>&lt;p&gt;The walls are all painted and we&amp;rsquo;ve nearly finished sanding the floors. The lighter look of the wood brings a greater sense of light and spaciousness to the rooms in our house that was lacking before, so we&amp;rsquo;re going to forgo staining and get right on to finishing once we clean everything up.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/img-3180.jpeg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A partially sanded wood floor.&#34;&gt;
</description>
      <source:markdown>The walls are all painted and we&#39;ve nearly finished sanding the floors. The lighter look of the wood brings a greater sense of light and spaciousness to the rooms in our house that was lacking before, so we&#39;re going to forgo staining and get right on to finishing once we clean everything up.

&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/img-3180.jpeg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A partially sanded wood floor.&#34;&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.unravioli.com/2024/04/14/weve-primed-all.html</link>
      <pubDate>Sun, 14 Apr 2024 15:44:13 -0500</pubDate>
      
      <guid>http://unravioli.micro.blog/2024/04/14/weve-primed-all.html</guid>
      <description>&lt;p&gt;We’ve primed all the walls in the house, next comes a couple coats of paint to finish things. For the rest of the house, we picked the same shade of white as the kitchen, since it worked out so well. We’ve started to zero in on some accent color choices for a few spots too.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/9dab7e3eaa.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A wall with paint primer on it, an archway, and a floor covered in painting supplies.&#34;&gt;
</description>
      <source:markdown>We’ve primed all the walls in the house, next comes a couple coats of paint to finish things. For the rest of the house, we picked the same shade of white as the kitchen, since it worked out so well. We’ve started to zero in on some accent color choices for a few spots too.

&lt;img src=&#34;https://cdn.uploads.micro.blog/99296/2024/9dab7e3eaa.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A wall with paint primer on it, an archway, and a floor covered in painting supplies.&#34;&gt;
</source:markdown>
    </item>
    
  </channel>
</rss>
