I have now spent many hours reading about Kirby and watching videos. I've learned a great deal. I even built a barebones site with blog posts and camera information and a full-blown panel for managing content and uploading images. I've tried both the empty and the full-blown starter kits. I dig how Kirby works and I quite like managing content via the control panel, but still being able to just edit text files, etc. After all that, I'm stopping for now. There's just too much left to do and I'm out of energy for it this weekend. I'll keep it nearby, and maybe once Kirby 4 is released I'll feel motivitated to finish. You see, I don't know what it's for. I don't know that I have the energy to replace baty.net and move all the content and redirect the URLs and and and. I might make a photo-centric blog with it. Mostly, I started this whole thing as a way to play with Kirby. I've done that. I get it. Now what?
Saturday, October 07, 2023
I spent some of the morning writing a new function for generating posts in Hugo. Then, I spent the rest of the morning building out a scaffolding in Kirby. This can't end well.
Creating new Hugo posts using Emacs but with an option to use bundles
I create two disinct types of posts here: Regular posts and Journal posts. Each has its own set of metadata and different formats for filenames, so I have two similiar-but-different lisp functions for creating new posts using Emacs. This works fine.
Journal posts take advantage of Hugo's page bundle features, so they go in a bundle like so:

Regular posts, though, either go in a bundle or can be just standalone Markdown files if there are no images in the post. This means that each time I create a new post, I have to choose whether is should be in new-post.md or /new-post/index.md.
Now, I usually have no qualms about copying and pasting code when it's easier and unlikely to cause issues down the road. As Rob Pike said, "A little copying is better than a little dependency." In this case, though, it felt wrong to simply duplicate the function in order to only change the file name.
My brain doesn't get along with Lisp, but I'm using Emacs so that's what I have to work with. My solution was to add a yes-or-no prompt asking if the new post should be a Bundle, and then create the file based on the response. I fumbled around with this for at least an hour before finally finding something that worked. I have no idea if it's the best way to do this. Or even if it's a good way to do it, but here it is[1].
;; Create new hugo post
;; h/t Jeremy Friesen https://takeonrules.com/2021/05/20/emacs-function-to-rename-hugo-blog-post/
(defun jab/hugo-new-post (title &optional)
"Create new blog post for TITLE."
(interactive "sTitle: ")
(let* ((slug (s-dashed-words title))
(default-directory (concat "~/sites/blog/content/posts/"
(format-time-string "%Y/%m-%B/")))
(fpath (if (y-or-n-p "Make Bundle?")
;; If y create directory using slug and add index.md to path
(progn
(make-directory (concat default-directory (format-time-string "%Y-%m-%d-") slug "/"))
(concat default-directory (format-time-string "%Y-%m-%d-") slug "/index.md"))
;; Otherwise just use the slug for the filename
(progn
(concat default-directory (format-time-string "%Y-%m-%d-") slug ".md")))))
(write-region (concat
"---"
"\ntitle: '" title "'"
"\ndate: " (format-time-string "%Y-%m-%d %H:%M:%S %z")
"\nslug: " slug
"\ncategories: [\"\"]"
"\ntags: [\"\"]"
"\nsummary: "
"\ndraft: true"
"\n---\n")
nil (expand-file-name fpath) nil nil nil t)
(find-file (expand-file-name fpath))))
This is all heavily based on code written by Jeremy Friesen ↩︎
Images in Hugo RSS feeds
By default, when showing full content in Hugo's RSS feeds, image links from posts using page bundles don't work. If that means nothing to you, maybe skip this one.
I've "solved" the same broken image problem at least 3 times when moving my blog to Hugo, so I thought I'd write it down for once.
The problem begins with the fact that Hugo's built in RSS template uses the post's Summary rather than its Content. The only way around this is to override the built-in template with a version that replaces...
<description>{ { .Summary | html } }</description>
with...
<description>{ { .Content | html } }</description>
Seems like that should be doable out of the box, but nope, so I copy/paste/edit.
For posts with images, especially if they have more than one, I like to use Hugo's page bundles features. This offers advantages such as the ability to use relative paths for images. If I put a "portrait.jpg" file in the post's folder, I can reference it using src="portrait.jpg" and Hugo figures it all out. Except in the RSS feeds. The image URLs end up relative, which make no sense in RSS. To fix this, I create my own short code for "figure". To differentiate it from any built-in or theme-specific figure short codes, I named mine "bfigure" (mnemonic: "bundle figure"). It's cobbled together from a dozen old forum and blog posts (that I didn't record, sorry), and it looks like this:
{ { $imgname := .Get "src" } }
{ { $title := .Get "title" } }
{ { $caption := .Get "caption" } }
{ { $alttext := default $caption (.Get "alt") } }
{ { $width := .Get "width" } }
{ { $height := .Get "height" } }
{ { $img := $.Page.Resources.GetMatch $imgname } }
{ { $class := .Get "class" } }
<figure>
<img src="{ { $img.Permalink } }"
alt="{ { $alttext } }"
{ { with $width } } width="{ { $width } }"{ { end } }
{ { with $height } } height="{ { $height } }"{ { end } }
{ { with $class } } class="{ { $class } }"{ { end } }/>
{ { with $caption } }<figcaption>
{ { with $title } }<strong>{ { $title } }</strong>{ { end } }
{ { with $caption } }<p>{ { $caption } }</p>{ { end } }
</figcaption>{ { end } }
</figure>
Call it like this (spaces added so it renders here correctly):
{ { < figure src="photo.jpg" caption="This is a caption" > }}
This covers everything I might need for rendering a figure element. I almost always include a caption, but sometimes get lazy and forget the Alt attribute (sorry!), so I've made this so that if I don't include Alt, it gets set to the caption.
Here's a test. If you can see this via RSS you'll know it worked.
[!NOTE] I removed it We're not on Hugo as of October 1, 2024, so this test is meaningless
This does not do srcsets, so I'll have to get to that later.
If y'all know of a cleaner way to do this, I'm all ears.
Friday, October 06, 2023
I've been having thoughts of more Linux. I've got MINT running on the little MacBook Air, but also glanced at the ThinkPad Carbon running Pop_OS that's sitting on a shelf. It would be fun to play with, but then I remembered that the most productive move I've ever made was to stick with running one OS on one computer. Some day that may be Pop_OS on a Thinkpad, but right now it's macOS on a MacBook Pro.
Related to the above, I'm convinced that another good move was to circle my publishing wagons around this single blog. It goes against my natural tendencies to explore and, let's admit it, boredom, but imagine how much energy I could save while sticking with one thing for a minute.

31 posts here have old image markup from some WordPress migration or another in the source files and they render poorly. I'm going to fix them, by hand, one at a time. Why do I change things all the time? What a hassle.
Thursday, October 05, 2023
Look, I know I keep waffling on where to post things, and I’m sorry about that. There are simply too many good, viable options for writing things and putting them online.
Earlier today I wrote about using Tinderbox for blogging. Now, I’m writing this in WordPress Hugo, using its Gutenberg editor Emacs, which I very much dislike love. Thing is, WordPress is a good answer to the question, “If one was forced to choose a single tool for publishing all of my writing, what should it be?” It’s probably the best answer, but hoo-boy, how disappointing.
WordPress has everything one could need for publishing. It works well enough for anything. It has search, comments, stats, a massive ecosystem of plugins and information, good hosting options, etc. But dammit it’s still WordPress. It’s still overwrought. It continues to drift further from its blogging roots (full-site editing, blech!). And I swear, if I see one more “Upgrade to Premium!” notice in the dashboard I’m going to (╯°□°)╯︵ ┻━┻.
For grins, suppose that I just talked myself out of WordPress. What are my options?
- Hugo. Powerful, fast, flexible, well-supported, and I have lots of experience with it. Lots of themes. Currently running baty.net. Free.
- Tinderbox. Weird and wonderful. Infinitely flexible. Expensive (but I’ll pay for it whether I use it for blogging or not, so moot). Markdown is possible but requires swimming upstream. Difficult and fragile for blogging (at least for me it is). No themes or ecosystem around blogging to speak of. I’m on my own.
- Blot.im. Simple. Super easy posting. Depends on Dropbox (or some other sync tool). Inexpensive. Well-supported by the developer (but only one developer). Can be slow. I’m not in control of the hosting environment.
- Micro.blog. Great service. Easy to post. Sometimes unreliable. Nice set of tangential services. Uses Hugo under the hood, but I’m not in control over the server environment. Posts end up in the Micro.blog timeline, and I sometimes don’t want that. Great cross-posting. The editor is too basic, making longer posts less fun to write.
- Kirby. Probably great, but I’m not going there yet.
After writing all this, it became obvious. I'm going back all-in with Hugo here at baty.net. I'm even going to try once again to post my daily notes here. Imagine what I can do if stop having to maintain multiple systems and just make writing and publishing baty.net as seamless as possible.
Check out all these fantastic old manuals. (via Kottke)
Tinderbox for blogging?
As much as I love Tinderbox, I'm wondering if it will continue to make sense long-term as a blogging engine. I get along great with most of Tinderbox's features, but export is one that has eluded me for going on 20 years. I can muddle my way through, but it's always a challenge.
This blog's export templates have become complex enough that I don't want to touch anything, for fear of breaking something. The HTML/CSS is aging and janky, but the thought of updating it is daunting. I mean, look at this thing...

I kind of want to pick a theme and tweak a few things and be done with it.
Thing is, I like how this site works. I like the collected daily posts and I even like how it looks and reads. If I could stop overthinking things we wouldn't even be having this conversation.
But, I also want to consolidate and reduce the number of things I need to be "" at in order to get things done. I'm already good enough with Hugo and Blot and WordPress for blogging. If I could pick one or two of those and then just write, I feel like I'd be better off.
I want search and tag clouds and a consistent writing environment.
Still noodling.
Originally posted at daily.baty.net but copied it here for safe-keeping.
Grand Haven Pier (Oct 1, 2023)
A few snapshots from our walk on the pier in Grand Haven this afternoon. The weather was beautiful and so was the waterfront.






Links that look like links
I still resent that at some point capital-D “Design” trumped usability on web pages. The most egregious example is link colors. Blue and purple links were deemed too “ugly” and were replaced by barely distinguishable variants. This blog’s theme, for example, removes colors from links by default. I’ve fixed that. It’s not as pretty, but at least you can easily tell where the links are (and which ones have been :visited).
Ok, technically I didn’t change every link. Only the ones within the posts. Otherwise, nearly everything would be blue and purple and even I can’t abide that much visual clutter.
You’re welcome.
An attempt at file management
I keep a lot of files in a lot of folders, but I’m inconsistent in how I organize them. This means I too frequently have trouble finding things, so I’ve made another attempt at fixing the problem.
I’ve tried all the popular “systems”. From PARA to ACCESS to Johnny Decimal, but everything has felt either too prescriptive or too loose. And they all felt like I was living in someone else’s space. I don’t want to memorize or check the “rulebook” to figure out where I should put something.
The systems that work best for me are the ones that fit my brain naturally. My brain works with digital files the same way it works with physical files. It likes folders. I use five six top-level buckets:
- Inbox – New stuff that needs to be filed. Can come from anywhere, but I know it should be kept and saved somewhere.
- Desk – This is where I keep my working files. Current projects, temporary stuff, and anything else I want within easy reach.
- File Cabinet – When I’m finished with a project, I move things here. Anything I don’t need day-to-day, but may need to look up reasonably quickly. Recent receipts, software serial numbers, etc.
- The Attic – Things I’ll probably not need, but one never knows, so I put them in the Attic. The Attic is for long-term storage of things I want to keep. Tax papers, auto maintenance records for cars I no longer have, etc.
- Deep Space – This is new. Deep Space is where I put things I’m sure I’ll never need but can’t bring myself to throw away. My gas bill from 2007? It’s waiting out there in Deep Space. A letter I wrote to some company 10 years ago? Same. It’s a just-in-case for just in case.
- Library – This is for things other people have written: Blog posts, ebooks, research articles, quotes, clippings, etc.
I keep everything except Deep Space files in DEVONthink. I use three distinct DEVONthink databases: “Jack” (because I couldn’t come up with a better name), which holds my Inbox, Desk, and File Cabinet files. I keep “The Attic” and “Library” as separate libraries because they tend to grow forever and it’s easier to sync, backup, and manage them separately.

Deep Space files are kept in a folder on my Mac Mini file server. Everything is backed up as part of my My Personal Backup System.
Within each of the folders, I use whatever organization scheme that makes sense.
“01 Desk” contains a “Projects” folder and some loose bits I want quick access to.
“02 File Cabinet” uses a simple version of Johnny Decimal, but I break the rules all the time.
“Library” is full of topic-based folders like “Environment”, “Technology”, “Politics”, and “Photography”.
“The Attic” and “Deep Space” are jumbled messes of folders and crap, just like a real attic.
It’s been pointed out that this is very PARA-esque. This is true, there’s a similar “flow” to things. My Archive is deeper, maybe. Maybe I should give it a catchy name and sell courses and ebooks! 😆.
Anyway, this structure is a slightly refined version of what I’ve always done naturally, before getting sucked into “Productivity YouTube”. I’ve formalized it a bit, but it’s what makes sense, so perhaps I’ll stick with it this time.
RSS as security risk?
While looking for a way to enable xmlrpc in this Siteground-hosted WordPress installation, I ran into this:

RSS continues to struggle with maintaining traction, and this doesn’t help.
The analog equivalent of having too many blogs

We all know that I have too many blogs. What’s less obvious is that I use too many different notebooks. Here’s what’s currently in rotation:
- A yellow legal pad. It’s nice to just throw stuff on the top page without thinking.
- Leuchtturm 1917 A5 Notebook (lined). This is my sort-of bullet journal. I keep lists and notes here, mostly.
- Hobonichi Techo. This is my calendar/planner. I keep appointments and important dates here. I also try to jot down a quick summary of the day or a small drawing representing something that happened.
- Field Notes “Dime Novel” edition. I recently found this on a shelf and thought it too pretty to ignore. This is likely to become my next journal, even though I’ve cheated and started writing in it already.
- Midori MD Notebook (lined). This is only for journaling. I like the paper and the 7mm lines.
- Index cards. I can’t decide what goes on index cards, but I keep them everywhere, just in case. Usually, I write quotes on them so I can pin them to my bulletin board. I also have maintained a half-assed Zettelkasten on the cards, but that’s mostly died on the vine.
Is this too many? I don’t know. Some days it feels like a huge mess and I worry that I’m writing something in the “wrong” place. Other days, it’s perfect and I like having the options.
So, a lot like blogging, then :).
Grab the weather forecast using weatherapi.com
I like to record the weather in my journals. For several years, I’ve used https://wttr.in via curl. Recently, wttr is often unreachable or throws errors, so I took a look at weatherapi.com
Designed for developers by developers, Weather API is the ultimate weather and geolocation API
The free account limits are generous, so I created an account. The default JSON results are very thorough. I created a little shell script that uses jq to parse the JSON and returns only the high/low temps and a text summary of the forecast:
#!/bin/sh
# Jack Baty, 2023 (https://baty.net)
jq=/opt/homebrew/bin/jq
weatherfile=`mktemp`
curl -s "https://api.weatherapi.com/v1/forecast.json?key=MYAPIKEY&q=MYZIPCODE&days=1&aqi=no&alerts=no" > $weatherfile
condition=`${jq} -r .forecast.forecastday[0].day.condition.text ${weatherfile}`
high=`${jq} -r .forecast.forecastday[0].day.maxtemp_f ${weatherfile}`
low=`${jq} -r .forecast.forecastday[0].day.mintemp_f ${weatherfile}`
echo "Low ${low}, High ${high} - ${condition}"
The output looks like this:
Low 52.1, High 72.6 – Patchy rain possible
Easy enough. I wrote a small lisp function that calls the script and inserts the weather in Emacs:
(defun jab/insert-forecast ()
"Use weatherapi.com to insert the weather forecast at point"
(interactive)
(let ((w (shell-command-to-string "~/bin/getweather")))
(insert w)))
RSS feeds as emails using Notmuch and rss2email
I’m all-in with Emacs after once again failing to get along with Obsidian.
I’d stopped using Notmuch in Emacs for email, but I brought it back after re-reading Paul Ford’s article in Wired: I Finally Reached Computing Nirvana.
Could I too start storing things as email and find them later using Notmuch?
So far, I’ve solved RSS feeds. Rather than reading feeds in NetNewsWire or Elfeed, I’m using rss2email to convert RSS feeds to emails and reading them in Notmuch.
A good reference for getting started with rss2email is LinuxBabe’s How to Install and Use rss2email on Ubuntu
The tricky part of rss2email is actually sending the emails. I eventually got things working using msmtp, which would have been fine, but it’s a lot of extra hoohah. If only I could save the RSS items directly into Notmuch. Guess what, I can!
rss2email supports writing to Maildir files. It was as easy as adding the following to my rss2email config:
email-protocol = maildir
maildir-path = ~/Mail
maildir-mailbox = Feeds
rss2email supports importing OPML files, but I decided to clean things up and add feeds one at a time, like this:
r2e add BatyBlog https://baty.blog/feed.rss
Then, when I want to read my feeds I run r2e run and everything ends up right in Notmuch. I don’t want them tagged with “inbox” along with my real email, so I added a filter to the post-new hook in Notmuch.
notmuch tag +feed -inbox -- '(from:jack+rss@baty.net)'
I have the rss2email sender configured as jack+rss@baty.net so it’s easy to filter just those messages. With that hook, new RSS feed items do not appear in the inbox, but I can easily read them in Notmuch by searching for tag:feed AND tag:unread.
So there, I’ve moved my RSS feeds into emails and manage them via Notmuch.
Hiding scheduled TODO items in Org-mode
Many of my TODO items in Org-mode include a SCHEDULED property, which lets me ignore them until a specified date in the future. This keeps my Org agenda nice and tidy.
Something that always bugged me is that this worked fine in the Agenda, but not the global TODO list. It finally bothered me enough that I went looking for a solution, which I found in like twenty seconds:
(setq org-agenda-tags-todo-honor-ignore-options t)
Now, my global TODO lists don’t include future items. This is great.
One other thing I learned is that some of the ignore options take a numeric value. This means that I can set org-agenda-todo-ignore-deadlines to something like 7 and those items with a deadline more than a week out, don’t show up in global TODO lists.
org-agenda-skip-scheduled-if-done t
org-agenda-skip-deadline-if-done t
org-agenda-todo-ignore-scheduled 'future
org-agenda-todo-ignore-deadlines 7
Org-mode is cool.
SetApp apps I use

During frequent bouts of Subscription Fatigue, I always glance sideways at SetApp, thinking that I could cancel my subscription. Then I look at the apps I have installed via SetApp (see above) and once again realize that it might be the most useful $10/month subscription I have. So it stays.
Film photography as late-stage Burning Man

I’ve never been to Burning Man, but for years I really wanted to go. I mean c’mon, a bunch of normies heading out to the beach (at first, but later, the desert) to do drugs, walk around half (or fully) naked, and opt out of society for a while. A place to really hippie it up for a week or so. I think I would have loved it.
Today, I wouldn’t go to Burning Man if you paid me. Best I can tell, it’s become a giant, corporate, Silicon Valley tech-bro networking event. A place to “cut loose” but also maybe find some VC money while we’re at it. Something like LinkedIn on Dirty Joke Day, but in the desert (if LinkedIn had a Dirty Joke Day, that is).
Earlier today I was going through YouTube and my RSS feeds, which are very film-photography heavy, and I became disenchanted with the whole film photography bubble. The comparison is weak, I know, but somehow following the online film photography gang is starting to feel like I imagine recent Burning Man events have felt. Everyone is a Brand™. YouTubers mention each other like some Influencer circle jerk. Everyone is all “OMG Cinestill makes these neon signs look amazing!” and “10 reasons why you SHOULDN’T buy a Leica.” Boring, is what it is. I’ve probably just become oversaturated with it all. I can only imagine what’s happening on TikTok.
My current mood really got rolling after I found a list of recommended photographers and many of them were film photographers. Normally, this would be cool, but I noticed that many of them introduced themselves something like this:
I’m a film photographer based in London.
Yuck. If you have to lead with the “film” part, I can’t help but be skeptical about the “photographer” portion[1].
I’ve been shooting film since the 80s, so maybe I’ve seen so much of this for so long that I’m easily annoyed when some wannabe Influencer acts like they personally discovered Tri-X.
I’m too old for Burning Man and there are too many people there anyway. Harrrumph!
Some were actually quite good, but my point stands. ↩︎
Org-journal stays

I’ve been keeping a journal using Org-journal in Emacs since 2016. I’ve got the writing process nailed. I’ve configured it so that with just a few keystrokes I can export it to a nice PDF file every month for archiving and printing. I have no complaints.
The looming problem is that I can feel myself pulling away from using Emacs for everything. Org-mode uses the most powerful markup language and tooling there is, but I haven’t been feeling the need for such powerful features. I just want simple, uncomplicated tooling that doesn’t lend itself to endless fiddling. Emacs is the granddaddy of endless fiddling.
Org-mode does task management better than anything, but I’m perfectly happy with Things or OmniFocus or even Apple Reminders. Email is cool and fun to play with in Emacs, but it’s not easy and definitely too much work.
Objectively, Org-mode’s markup is superior in nearly every way, but if I’m being honest I get along fine with Markdown. As we all know, Markdown’s VHS beat Org-mode’s Beta in the mindshare race, so everything works with Markdown while almost nothing works with Org files1
My latest experiment with Obsidian for notes is going better than with earlier attempts, so one of my heaviest uses of Org-mode, note-taking, is at risk.
But nothing I’ve found is as good at journaling as Org-journal. Day One is pretty and is probably more appropriate, but I don’t like writing in it. I could use Obsidian’s daily notes feature, but I already use that for more of a lab notebook. I just really like using Org-journal, is the thing.
For now, then, my use of Emacs has been reduced to writing my journal and for when a note would benefit from a longer outline format.
At my analog desk

I still call this my “analog” desk. It’s for reading real books and articles. It’s for journaling. It’s for painting and drawing. It’s for sitting and staring out the window, even if the view is only that of a cul-de-sac in a boring middle-class suburb.
I sat here for a good portion of two days during a recent power outage. It was refreshing and mentally invigorating.
But that was last week. Now I’m once again staring at my computer in the basement office, letting the internet think for me.
Silver is better
Back in photo.net’s and rangefinderforum.com’s prime, there was a gruff, opinionated, brilliant, and helpful forum member and photographer named Al Kaplan. He helped me a great deal after I got my first Leica.
When he died in 2010, his family sold mugs and T-shirts to raise money. I’ve kept the mug on my desk ever since.

Silver is better, indeed.