<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>Terracrypt</title><id>https://www.terracrypt.net/feeds/tags/da2025.xml</id><subtitle>Tag: da2025</subtitle><updated>2026-03-01T20:46:16Z</updated><link href="https://www.terracrypt.net/feeds/tags/da2025.xml" rel="self" /><link href="https://www.terracrypt.net" /><entry><title>Email experiments: filtering out external images</title><id>https://www.terracrypt.net/posts/email-experiments-image-filtering.html</id><author><name>Jonathan Frederickson</name><email>jonathan@terracrypt.net</email></author><updated>2025-12-29T14:10:00Z</updated><link href="https://www.terracrypt.net/posts/email-experiments-image-filtering.html" rel="alternate" /><content type="html">&lt;p&gt;I had a realization the other day that, on almost every email in my inbox, my mail client has a &amp;quot;show external images&amp;quot; option. Most email I receive references externally loaded images via HTML. There are good reasons for this (not needing to send a copy of an image in every email on a newsletter) as well as nefarious reasons (the remote server can track where/when you load the image). So most mail clients I've used don't load them by default for obvious privacy reasons.&lt;/p&gt;&lt;p&gt;This got me thinking about the reverse, though: what email do I receive that does &lt;em&gt;not&lt;/em&gt; include external images? And the answer is, mostly, email sent manually by a real human! I'm fairly certain I've never sent an email to another person in my personal life with an externally loaded image in it. When I have, it's been work email with a standard corporate email signature (that I'm sure was being tracked, natch). Mostly, when sending images to someone, they're sent as attachments to the email.&lt;/p&gt;&lt;p&gt;So I had a realization that, if I wanted to naturally filter email that was sent by hand from email sent from an automated system, this might be a decent proxy for that. Here's the sieve rule I landed on for now:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;if body :regex &amp;quot;&amp;lt;img[^&amp;gt;]*src=\&amp;quot;https&amp;quot; {
  fileinto &amp;quot;Inbox.Automated&amp;quot;;
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(Yes, it's typically folly to regex on HTML. This is a simple enough match though that I hope it's fine!)&lt;/p&gt;&lt;p&gt;So far, after a day or so of usage, it's been shockingly effective. There's enough potentially important stuff in my Automated folder that I will need to check that fairly frequently, but the one email that's made it through this filter into my normal inbox is one sent by hand to a mailman list. Honestly, I'll take it! This makes the volume of email in my normal inbox much much more manageable, and I expect most mail that lands there will be things I actually do want to pay attention to.&lt;/p&gt;&lt;p&gt;Probably you'll want to have another rule that prevents you from running this for email from people in your contacts. I haven't done that yet, but that'll be a natural next step.&lt;/p&gt;&lt;p&gt;This is part of my &lt;a href=&quot;/posts/tags/da2025.html&quot;&gt;December Adventure 2025 series&lt;/a&gt;.&lt;/p&gt;</content></entry><entry><title>Horton persistence progress</title><id>https://www.terracrypt.net/posts/decadv-horton-persist-debugging.html</id><author><name>Jonathan Frederickson</name><email>jonathan@terracrypt.net</email></author><updated>2025-12-27T12:03:00Z</updated><link href="https://www.terracrypt.net/posts/decadv-horton-persist-debugging.html" rel="alternate" /><content type="html">&lt;p&gt;I've gotten some work done towards supporting persistence in guile-horton over the last week or so, but I've hit a bit of a roadblock. Writing this up in part to explain what I've been working on and in part to think through it some more.&lt;/p&gt;&lt;p&gt;To support persistence, I need to switch all the actors in the system over to use the &lt;code&gt;define-actor&lt;/code&gt; macro. The &lt;code&gt;admin&lt;/code&gt; actor was previously using &lt;code&gt;selfish-spawn&lt;/code&gt;, but &lt;code&gt;define-actor&lt;/code&gt; has a &lt;code&gt;#:self&lt;/code&gt; parameter that should serve the same purpose. And the old code was using an internal cell for the mutable name functionality, which needs to be changed.&lt;/p&gt;&lt;p&gt;However... running into one particular problem that I'm still having trouble figuring out. When I spawn an &lt;code&gt;admin&lt;/code&gt;, that new object also spawns a &lt;code&gt;profile&lt;/code&gt; with a reference to that &lt;code&gt;admin&lt;/code&gt;.  In order to support that, the &lt;code&gt;admin&lt;/code&gt; needs to have a reference to itself; as mentioned above, &lt;a href=&quot;https://codeberg.org/terracrypt/guile-horton/commit/434baa4f0f20d3b5edf81385149718b53afb77ed&quot;&gt;I think I should be able to use a parameter on define-actor for that&lt;/a&gt;. But for some reason, &lt;a href=&quot;https://codeberg.org/terracrypt/guile-horton/commit/bc815da726ef5b7a7d8969b54ebb33ade8513e78&quot;&gt;the self parameter gets set to #&amp;lt;unspecified&amp;gt; when I try that&lt;/a&gt;. It's not clear to me why this might be happening from the docs, so I think I might need to do some source spelunking to figure it out.&lt;/p&gt;&lt;p&gt;Once I work that out, it looks like I'll run into &lt;a href=&quot;https://codeberg.org/spritely/goblins/issues/256&quot;&gt;this issue&lt;/a&gt;. It sounds like I should be able to work around that with a second object constructor, though it might be a bit messy.&lt;/p&gt;&lt;p&gt;This is part of my December Adventure 2025 series, which I haven't been as consistent with as I had hoped but has nudged me to work on this some at least! My adventure log for this year is &lt;a href=&quot;/posts/tags/da2025.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</content></entry><entry><title>Making post tags actually visible</title><id>https://www.terracrypt.net/posts/visible-tags.html</id><author><name>Jonathan Frederickson</name><email>jonathan@terracrypt.net</email></author><updated>2025-12-21T11:22:00Z</updated><link href="https://www.terracrypt.net/posts/visible-tags.html" rel="alternate" /><content type="html">&lt;p&gt;I've got tags for all my blog posts, and tag-specific RSS feeds, but until now those tags/feeds haven't actually been visible unless you constructed the URL. So finally fixing that: now there's a list of tags at the top of each post, with a link to the tag-specific feed.&lt;/p&gt;&lt;p&gt;This isn't quite the ultimate behavior I was looking for - ultimately I'd like those links to go to human-readable tag-specific pages first, with a link to the RSS feeds from there. But I think that'll take a bit more work to get working. I have some machinery to generate human-readable tag pages for specific tags, but with the structure of my Haunt site it's a bit more complex to generate pages for &lt;em&gt;every&lt;/em&gt; tag. I can do it, it'll just take some more thought.&lt;/p&gt;&lt;p&gt;I do have a page to act as my adventure log for this year, though! That's at the &lt;a href=&quot;/posts/tags/da2025.html&quot;&gt;da2025&lt;/a&gt; tag. It's still on my TODO list to make the RSS feed link on that page go to the per-tag feed ^^;&lt;/p&gt;</content></entry><entry><title>Hacking on my blogging workflow</title><id>https://www.terracrypt.net/posts/blog-hacking.html</id><author><name>Jonathan Frederickson</name><email>jonathan@terracrypt.net</email></author><updated>2025-12-13T11:50:00Z</updated><link href="https://www.terracrypt.net/posts/blog-hacking.html" rel="alternate" /><content type="html">&lt;p&gt;Starting December Adventure off with a little meta this year (and a bit late, whoops!). Since setting up this blog, it's always felt like a little too much friction to start a new blog post. It's not &lt;em&gt;too&lt;/em&gt; bad, but it does involve creating a file in the &lt;code&gt;posts&lt;/code&gt; directory with a given name, manually typing out the timestamp.&lt;/p&gt;&lt;p&gt;I'm always writing my blog posts in emacs anyway, and emacs is the most hackable of editors. So I figured, why not have a template to make things easier?&lt;/p&gt;&lt;p&gt;I'm a heavy user of org-capture to quickly add entries to my TODO list. Although my blog posts are markdown rather than org-mode (for now?), org-capture seemed flexible enough to do the job. And sure enough, it was!&lt;/p&gt;&lt;p&gt;It felt a little gross to do this, but I ended up setting a global variable for the post slug. I tend to use the slug as the filename of each post file, and I didn't want to be prompted for the slug twice. Org-capture can accept a function that controls the file path to capture to; having that function prompt me and save the result seemed like an okay solution.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-scheme&quot;&gt;(defun jfred/capture-blog-post ()
  (interactive)
  (let ((name (read-string &amp;quot;Post slug: &amp;quot;)))
    (setq jfred-capture-blog--slug name)
    (expand-file-name (format &amp;quot;%s.md&amp;quot;
                              name) &amp;quot;~/src/website/posts&amp;quot;)))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After that, it was a matter of defining a plain org-capture template to start a new file when captured. I'll just show you all my capture templates so you have the new one in context:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-scheme&quot;&gt;(setq org-capture-templates
      '((&amp;quot;t&amp;quot; &amp;quot;Todo&amp;quot; entry (file &amp;quot;~/org/Inbox.org&amp;quot;)
         &amp;quot;* TODO %?\n  %a&amp;quot;)
        (&amp;quot;tn&amp;quot; &amp;quot;Todo - no link&amp;quot; entry (file &amp;quot;~/org/inbox.org&amp;quot;)
         &amp;quot;* TODO %?&amp;quot;)
        (&amp;quot;j&amp;quot; &amp;quot;Journal&amp;quot; entry (file+olp+datetree &amp;quot;~/org/journal.org&amp;quot;)
         &amp;quot;* %?\nEntered on %U\n  %i\n  %a&amp;quot;)
        (&amp;quot;b&amp;quot; &amp;quot;Blog post&amp;quot; plain (file jfred/capture-blog-post)
         &amp;quot;title: %^{title}
slug: %(format jfred-capture-blog--slug)
tags: 
date: %&amp;lt;%Y-%m-%d %H:%M:%S&amp;gt;
---
%?&amp;quot;)
        (&amp;quot;m&amp;quot; &amp;quot;Meeting Notes&amp;quot; entry (file+olp+datetree &amp;quot;~/org/meetings.org&amp;quot;)
         &amp;quot;* Meeting Notes - %?&amp;quot;)))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(As an aside, I just realized while looking at these that the &lt;code&gt;tn&lt;/code&gt; capture doesn't actually work and would be useful. Guess I'll fix that up soon!)&lt;/p&gt;&lt;p&gt;I can tell that the org-capture template system is really meant for templating org files, but it worked here. There's a template string representing a timestamp, but it defaults to the format that org-mode expects; if you want a timestamp in a specific format, you have to use more explicit formatting. But you &lt;em&gt;can&lt;/em&gt; do that!&lt;/p&gt;&lt;p&gt;That's all for today. Today's the first day of my holiday break, so I hope to have more time to work on side projects for the rest of the month. My goal this holiday season is to get &lt;a href=&quot;https://codeberg.org/terracrypt/guile-horton&quot;&gt;guile-horton&lt;/a&gt; finally supporting persistence. It's not very useful without it, but I did a few things that were perhaps a bit too clever when originally writing it, so it'll likely be annoyingly complicated to get that working. Fingers crossed!&lt;/p&gt;</content></entry></feed>