Testing content migration from Hugo, just in case

Just to be clear, I don't have serious plans to migrate my main Baty.net (Hugo) blog to Pure Blog. That doesn't mean I won't explore the "But what if I converted baty.net to Pure Blog?" scenario.

Things will be wonky while I tinker. Probably don't link to anything here, since I'm almost certain the links will break.

Some things I've noticed:

  • Date formats in YAML are inconsistent with different SSGs. For example, Hugo wants date: 2026-02-05 05:29:52 -0500 and Pure Blog uses date: 2026-02-07 16:25 which throws an error in Hugo. Adding seconds to the date fixes it.
  • Quoted strings in YAML front matter are optional. Many of my Hugo posts do quote the title: attribute using either single or double quotes. Would need to be removed, because in Pure Blog, those quotes are included as part of the title, etc. Same goes for tags: ["Tag1","Tag2"] vs [Tag1,Tag2].
Permalink #

Managing Pure Blog updates using just

[!NOTE] This has been mostly superceded by the built-in upgrade mechanism introduced in version 1.5.0.

Since everything in Pure Blog is all in one folder, I needed some way to back things up and deploy updates to the code, independent of the content. I use just with a few basic recipies.

Available recipes:

  • default - Lists recipies (e.g. just --list)
  • backup-to-local - Pulls content, code, and custom config to a dated folder on my local machine
  • serve - Run local PHP version of the site
  • upgrade - Runs git pull locally
  • deploy - Send just the source php to the server

Here's my justfile so far:

SERVER_HOST := "myserver.com"
SERVER_USER := "myuser"
SERVER_DIR := "/server/path/to/blog"
LOCAL_DIR := "~/local/path/to/blog"
BACKUP_DIR := "~/local/path/to/backups"
BACKUP_DATE := `date +%Y-%m-%d`
PUBLIC_DIR := "{{LOCAL_DIR}}"
TARGET := "Server03"

default:
	just --list

serve:
  php -S localhost:8000

upgrade:
	git pull
	
backup-to-local:
	echo "Backing up to {{BACKUP_DIR}}/{{BACKUP_DATE}}"
	rsync -avz {{SERVER_HOST}}:{{SERVER_DIR}}/ \
    {{BACKUP_DIR}}/{{BACKUP_DATE}} \
	--delete

deploy: 
	@echo "\033[0;32mDeploying updates to {{TARGET}}...\033[0m"
	rsync -v -rz \
	--checksum \
	--delete \
	--no-perms \
	--exclude /content/ \
	--exclude /config/ \
	--exclude /assets/images/ \
	--exclude /assets/css/custom.css \
	--exclude justfile \
	{{LOCAL_DIR}} {{SERVER_USER}}@{{SERVER_HOST}}:{{SERVER_DIR}}

I threw all this together rather quickly, so I'm sure there's more to do. Maybe there's a better way to handle this?

Permalink #

Saturday, February 07, 2026

Kids in river and on small dock
Kids (2012). Leica M3 / Ektar 100.

We're celebrating a family birthday today, which means ice cream!


Have you ever thought about just not doing this being online thing any more? I do, sometimes. It passes quickly, but I do wonder what it would feel like to spend more time in the world. You know, the real one. And don't say, "BUt OnLInE Is tHE ReAl WOrlD noW!" because no it isn't. And it becomes less so every day.


If I were to start a new business, it would be entirely focused on offline activities. In-person is the thing I want, and I'll bet other people do, too.


Kev Quirk has created a new (php-based) blogging tool called Pure Blog. Of course I had to spin up one of my own: pure.baty.net. I'm just tinkering (for now).


Feishin music player for Linux

Screenshot of the feishin music player

I'm giving the Feishin music player a go on Linux. It's full-featured and very Roon-like, but streams from my Navidrome instance.

It's an Electron app, which some people can't stomach, but it doesn't bother me much. It's a minor ick to suffer for a music player I might actually enjoy using.

If it turns out to be too much, then there are dozens of other options. I learned about Feishin from the post, The state of Linux music players in 2026, which was linked to here which was linked to by Andreas' always interesting Link Dump.

Permalink #

Friday, February 06, 2026

Car with Don Martin character saying Hi drawn in snow
I used to leave messages for my daughter on her car (2013).

I posted to baty.photo, the Ghost blog I'd intended to use for focusing on my hobby. It's been months. Every time I think I want to have a dedicated blog for photography, I start a new one, then abandon it. Maybe I just wanted to tinker. Maybe I wanted a CMS to do things for me for a change. I don't know.


Most things I post online are me thinking out loud and are rightfully taken both with salt and with the knowledge that I'm usually just exploring how I feel about things or what I've noticed. Sometimes, I get pushback from people. That's fine. It doesn't make me wrong, though. Unless it does, and in that case I'll change.

I'm reminded, though, why I try to post only (or mostly) positive things online. Even the positive things can be taken in ways I never intended, and sometimes are. But I'm certain that if I were to use this space to vent about how shitty the world is right now (and it is very shitty), I'd be scolded for doing it wrong. I don't have the headspace for that. I'm not here to argue. Everyone else has that covered.

I've donated, I don't even know how much, but real money, to causes that I believe are doing good in the world. I don't talk about it, and I don't list them. It's my business. And again, I don't need to be told why I've chosen badly.

I get to choose what works for me here and what I write about. This is my space. I don't need approval. Neither do you. Isn't that awesome?!

I think I'll go shovel some snow.


Snow shoveled. Now what? Whine more about my hurt feelings when people criticize or poke fun at me? Nah, I'm playing with self-hosted music servers and streaming clients on Linux. Much more fun!


Thursday, February 05, 2026

Black and white photo of two dogs.
Dogs (2012). Leica M3.
  • STATUS: Futzing with my Emacs config. As one does.
  • TODO: Visit grandson!
  • WATCHING: Peter Hujar's Day (2025). Ira Sachs.

I should be taking more photos. One roll of film for the entire month of January is embarrassing. I have a new Leica Q2 to play with, and I've taken maybe 20 images with it so far. What's up with that?


I'm bored with all the performative quitting going on. What do you want, a medal?

Later: I don't think Dave cared for my comment about being bored. Fair enough. Sorry, Dave, you're excluded of course :). I wasn't "sub-posting" you or anyone else in particular. And I'm not bored with people quitting things that don't line up with their ethics or anything else. That's excellent. I'm bored with people talking about it in that particularly smug tone that social media brings out in people. Frankly, I'm so angry about just about everything happening righ now I can hardly think. I'll exercise my privilege by being bored by the tiresome discourse around so much of it.


Come to think of it, I'm bored by just about everything. I seem to have only two reactions to everything: anger or boredom.


Took the M3 loaded with a roll of HP5 over to my grandson's this morning. Shot the roll at ISO1600. Nothing very good to show for it, but at least I did something.

I wrote this on Feb 5, 2019:

I spend hours and hours getting some workflow or app or whatever JUST RIGHT, then stop using it the next day.

Never change, Jack.

Global org-capture shortcut in KDE

I like being able to create new Org mode tasks from anywhere, via a simple keyboard shortcut. This probably doesn't justify a whole post, but here's how I did it.

Create a script at ~/.local/bin/orgcapture.sh

Here's the script:

#!/bin/bash
emacsclient -c -F '((name . "capture") (width . 80) (height . 34))' -e '(progn (org-capture) (delete-other-windows))'

In my Emacs config, I have a hook that tidies up the new frame:

(defun my/org-capture-finalize-hook ()
  "Close frame after org-capture if it was opened for capture."
  (when (and (> (length (frame-list)) 1)  ; More than one frame
             (frame-parameter nil 'client)) ; Frame created by emacsclient
    (delete-frame)))

(add-hook 'org-capture-after-finalize-hook 'my/org-capture-finalize-hook)

In KDE's Settings, I added a new command in the Shortcuts settings that point to that script. I assigned it to F3.

Now I hit F3 any time and a small capture buffer pops up in a new frame. That's it. If there's a better method for doing this, let me know.

Permalink #

Wednesday, February 04, 2026

Black and white film photo of me sitting on the basement couch
Self-portrait (2024). Minolta Autocord.
  • STATUS: Linux, today, I think
  • TODO: Work on friend's website. Grocery shopping. Maybe car wash.
  • READING: Continued "Dungeon Crawler Carl"
  • LISTENING: Led Zeppelin, "Physical Graffiti"

I woke up thinking about why using Linux makes me feel good. It isn’t really an ethics thing or a Tim Cook’s Bad Behavior thing or even a Liquid Glass Sucks thing. It’s just a feeling I get with Linux that I no longer feel on macOS. It feels quieter. I feel like it’s just me and the computer. Like it’s mine, you know? It's a Linux kind of day, today.


Installing Fedora Workstation on the laptop

Fastfetch screenshot

My laptop has been running Fedora's KDE spin. I first tried the stock Fedora with Gnome, but since my desktop was running KDE, I figured I should standardize on that.

Standardization is boring. :)

I installed Fedora Workstation this morning. I'd taken notes from the last time, and those helped speed things along. Still, it was 2 hours from installer to a fully functional system. I'm typing this post in Emacs and will deploy using Hugo shortly.

For the record, here are my raw notes from the installation. I need to work on the order in which I do things, but this wasn't bad.

Installing Gnome on the Framework 2026-02-03

- sudo dnf install syncthing
- Settings
    - Trackpad -> Disable tap to click
- Install Gnome Tweaks
    - set caps lock to control
    - Emacs Input on
- sudo dnf install -y stow just fzf zoxide ripgrep
- Install Extension Manager (Flatpak)
- Installed Dash to Dock extension (via Extension Manager)
- Installed Clipboard Indicator extension (via Extension Manager)
- Installed starship curl -sS https://starship.rs/install.sh | sh
- stow bash
- stow pandoc
- sudo dnf install pandoc
- sudo dnf install texlive-scheme-full
- sudo dnf install neovim
- sudo dnf install rust cargo # (for eza, since eza is no longer in fedora repos)
- Build and install eza
    git clone https://github.com/eza-community/eza.git
    cd eza/
    cargo install --path .
- Add berkely-mono to ~/.local/share/fonts/berkeley-mono
- sudo dnf copr enable dejan/lazygit
- sudo dnf install lazygit
- Install Signal (Flatpak)
- stow auth
- stow git
- stow gnupg
- stow jrnl
- stow pass
- stow ssh
- stow aerc
- sudo dnf install aerc
- sudo dnf install emacs
- Configure emacs
    - git clone https://github.com/jamescherti/minimal-emacs.d.git ~/.config/emacs
    - git clone [my dotemacs repo] to ~/.config/emacs-mine
    - cp ~/.config/emacs-mine/pre-early-init.el ~/.config/emacs/
    - ln -s ~/Sync/emacs/manual-packages ~/.config/emacs-mine/
- sudo dnf install fastfetch
- Add "Start Syncthing" to Startup Applications in Gnome Tweaks app
- Install FireCode Nerd Font
- ...a nearly infinite number of little tweaks that I didn't record.

Since the laptop is meant to be a sort of satellite computer orbiting my desktop Mac Mini, I don't need everything installed. The above covers just the basics.

One day I should write a script that takes care of this for me.

Permalink #

I had an urge to give Gnome another go, so I installed Fedora Workstation over the KDE Fedora spin. It took two hours from installation to writing this post in Emacs. I'm getting better at it.

Monday, February 02, 2026

Two guys laying in the grass. Shot from ground-level.
Bob and I in Newaygo (1983)
  • STATUS: Suffering from a mild form of Abulia, I think.
  • TODO: Finish web site for friend's new business
  • LISTENING: "We Care" by Whale

Let's face it, I will never stop futzing with blogs. Yesterday I was all over the daily.baty.net blog, but was writing both in the Tinderbox and Kirby versions. Almost switched it back to Tinderbox, but chickened out. This morning, I started this post in Kirby, then decided I'd just put it here, because my dream is to have One True Blog™ and if that dream ever comes true baty.net will be that blog.


There are a few loose ends on the website I'm building for a friend's new business. I can't seem to make myself work on it. I enjoy the first 90% of every project, but struggle to get through the second 90%.


Still working through what goes in the daily journal posts and what goes in separate /notes. Diary-like stuff goes here. Things I share or statements I make go in notes. Maybe?


I become equally excited about moving out of Emacs for everything as I do deciding that I like using Emacs for everything. A week ago I left Emacs after a frustrating day of broken packages and configs. What a relief! This morning, I needed something from an old Org mode file so I launched Emacs and, well, now I'm back in it. What a great feeling!

See what I mean?

"Most people are other people. Their thoughts are someone else’s opinions, their lives a mimicry, their passions a quotation.”

— Oscar Wilde

Well that stings a little.

Thoughts about coding with AI - 82MHz:

Using AI can lead to impressive results in no time at all, but it leaves me feeling hollow and discontent. Satisfaction and happiness comes from doing something myself, even if it may be difficult and uncomfortable in the moment. But if I avoid doing everything that's hard and outsource all the thinking to AI, then I will pretty soon turn into a lazy and stupid blob who isn't capable of thinking for himself anymore, and that's a fate I want to avoid at all cost.

I understand the sentiment, but I don't worry that I'll become a "lazy stupid blob" if I use AI to do some gruntwork for me. I have Claude write me all sorts of helpful little shell scripts. It means I don't have to care about how to write things like regular expressions for use in sed or whatever. I used to find that sort of thing fun, but now I just want to get to the thing I wanted the script for in the first place. It's like, do I really want to do the long division by hand or should I just grab the calculator? Now, if learning long division is meaningful to you, then go for it.

Removing analytics from baty.net

There are people who claim not to care at all about how many people visit their site. I don't believe them.

I suppose if you have a tendency to write differently based on analytics, and you don't want that, then sure, get rid of them. But you care, at least a little, right?

I care. I like to see where people are coming from. I often find interesting blog posts that happen to mention me. It starts conversations. I've never changed what or how I write because of what analytics tells me, but I've learned about what people like and where they come from. I find it interesting.

This morning, however, I deleted analytics from all of my sites.

A few weeks ago, I noticed that traffic had increased tenfold to baty.net and 90% of that traffic was from China. It was all one or two views of every possible page on the site. AI bots, obviously.

I spent a few hours figuring out how to block IPs from China at the firewall. It worked, but the IP list changes regularly and needs updating. There are nearly 10,000 rules in my firewall.

When I looked today, 60% of my traffic is now from Singapore, with the same click-every-possible-link behavior. Sigh.

I thought that bots wouldn't register visits when the site's tracking scripts rely on JavaScript, but apparently that's not the case.

Web traffic is still processed on the server by GoAccess, so if I feel like digging, it's all there, but the simple "Who, and from where?" analytics are no longer worth it.

Permalink #

Monday, January 26, 2026

Kids feeding seagulls
My sister and I feeding seagulls on Sanibel Island (1975)
  • STATUS: Waffle waffle waffle waffle
  • TODO: Stop waffling
  • WATCHING: "Rivals" (TV)

Most of the time when I try new things, It's to see how those things feel. Software, hardware, cameras, workflow, all of it. I love experiencing new ways of doing things. Sometimes I end up "deciding" on a particular thing, and that's that. Except it never is, is it?


What I'd like is to show the current journal post, pinned on the home page. It should display the full content of the post. Then, below that, only show recent non-journal posts. I'm sure Hugo will resist and I'll end up hating the process and the results. I'd ask Claude for help, but that's a whole 'nuther can of worms and I'm not in the mood.


I'd like to spend my days reading, thinking, and making art but I can't tear myself away from the computer for more than 30 minutes, so I do none of those things. The computer used to be a creative environment for me. It's not anymore.


Do you ever get tired of people writing better than you, drawing better than you, thinking better than you, being better than you? I do.


What's with the irrational fear of databases?


I understand that I can seem unreliable, specifically around apps and tools and processes. Why would you invest time with me if I'll probably change everything tomorrow? I get it.

A Leica Q2 again

Leica Q2

Well the entire Leica SL2 kit has been sold, which left me with the GRIII as my only digital camera. I love the little Ricoh, but it doesn't scratch my "Go out and take photos" itch.

I've gone back to a Leica Q2. I have previously owned a Q, Q2, and Q2 Monochrom, but eventually sold them due to other urges (mostly for digital M cameras).

Lately I've been wanting something smaller for carrying everywhere. The SL2 is ginormous and heavy. The Q2 isn't exactly tiny, but it's much easier to have with me than the SL2. I could have gone smaller with something like a Fuji, or even the GRIII, but I decided to stick with the Leica. I'll still have the GRIII for when I don't feel like carrying a camera, but the Leica goes everywhere else.

28mm is challenging for me, but I'm unashamed to crop when needed, and the 47MP sensor gives me plenty of leeway. The 1.7 Summilux is a great lens. The clever macro switch is a joy to use. It's easy and intuitive to switch to manual focusing, which I do a lot. I can live with 28mm.

Add weather sealing, IBS, and super simple button/menu layouts, and it really is a great combination.

I admit being tempated by the newer Q3, but new ones cost $7,000, and even used copies are still twice what I paid for the Q2. I got a very good deal on my camera, so I'm happy with that.

I like not having to decide which digital camera or which lenses to bring every time I leave the house.

Permalink #

Saturday, January 24, 2026

  • STATUS: Freezing. It's -15°F out there.
  • PLANS: Solidifying my Linux setup. Emacs, mostly. Some Darktable.
  • READING: Half through "Anima Rising" by Christopher Moore
  • LISTENING: Tom Waits, probably.

It was -15°F while walking Alice this morning. I tried the doggy boots, but she wasn't having it, so we barefooted it. She must be tough, because I didn't see any signs of her feet bother her.


I don't know why I worry about what kinds of posts belong where or whether they belong at all. No one else cares, why should I? So yeah, these daily posts are going to stay here for the moment, until I decide I was wrong.


Oh, and fuck this entire administration.