Wednesday, February 05, 2025

JFC, I don't even want to be around the Good Guys anymore.


You Can’t Post Your Way Out of Fascism

You Can’t Post Your Way Out of Fascism:

If there’s one thing I’d hoped people had learned going into the next four years of Donald Trump as president, it’s that spending lots of time online posting about what people in power are saying and doing is not going to accomplish anything. If anything, it’s exactly what they want.

and...

We don’t need any more irony-poisoned hot takes or cathartic, irreverent snark. We need to collectively decide what kind of world we actually do want, and what we’re willing to do to achieve it.

Everyone keeps trying to post their way out of it, though. Seems like.

As for me, I don't post about it. I donate, I write letters, I sign petitions. It's not much, but I'm certain it's better than pointing and yelling at people on social media.

Tuesday, February 04, 2025

Writing Desk (2025). Nikon FM2n. HP5 @800.

Let's test the idea of continuing with daily journal posts as separate "things".


I've subscribed to a year of Wired Magazine. For $6/year, including the print edition(!), it's a pretty good deal.


Another one from today's roll. I used a (manual) flash and shot at ISO 800, but I think it's a fun look.

Lincoln. Nikon FM2n. HP5+ @800.

Hello again, Hugo

You'll notice that baty.net is back to using Hugo[1]. I really like Kirby, but every time I use a platform that's not fully static, I get twitchy, and I got twitchy.

I'm using a new theme, Anubis2, which I find to be easy to read and just the right amount of boring. It doesn't have all the features of the PaperMod theme I was using, but it's simpler, and simpler is what I was after.

I copied over all of the original Journal posts, but I don't know if I'll continue to treat those separately. I'm kind of digging how everything is just a post here. We'll see.

For years, I've been dragging around old broken images and image folders from various platforms, so I took the opportunity to fix as many of those as I could find. That was tedious, but felt good.

It was refreshing posting at copingmechanism.com for a few days, without years of baggage tagging along. In the end, though, baty.net is my home on the web. It's established. (A few) people know it and follow it. Better not to throw it all out on a whim, just because I was uneasy about it not being fully static.

Anyway, we're back. 👋


  1. For those keeping score, I was with Kirby for 34 days. ↩︎

Permalink #

Prevent Org-todo from messing with windows

When I have two Emacs windows split side-by-side in a frame, calling org-todo opened a full-width window at the bottom of the frame. This would be fine, but then when dismissing the selection window, it would wipe my previous window layout and I'd be left with a single giant window.

I found this to work:

(setq org-use-fast-todo-selection 'expert)

The default, I think, is "auto"

Permalink #

Self care

Sometimes what looks like selfishness is really just self care.

Permalink #

Sunday, February 2, 2025

I wasn't planning to put journal posts here. I don't like how they fill up the archives with a list of dates. Yet, here I am.


The news and my feeds have become a stream of terrible things. I don't know how to stop it, or how to help, or even how to survive it all. I feel helpless.


As much as I like how Kirby manages baty.net, I still can't get confortable not having a fully static website. I know it doesn't actually matter. Millions of blogs run on WordPress, Ghost, whatever. It's fine, but it bothers me and that low-grade annoyance takes a toll. That's probably why I'm here in Hugo again today.


I'm planning to leverage Flickr a bit more when posting to social media. My Mastodon posts aren't forever, so relying on a 3rd-party image hosting service is no big deal. Plus, I've been using Flickr since 2004, so I'm counting on Mr. Lindy[1].



  1. There is no Mr. Lindy, but that's what I'm calling the Lindy Effect here :). ↩︎

Permalink #

Zoxide and Fish Shell

I'm happy using Fish for my shell. One thing I'd not gotten around to after switching is finding a good directory jumper. The original z doesn't work well with Fish. I used to use fasd and autojump, but thought I'd look around for something new.

For some reason, I'd never heard of zoxide: A smarter cd command. Combined with zoxide.fish: Tab completion and initialization for zoxide in fish shell, zoxide does the job nicely.

Installing zoxide on macOS is simple: brew install zoxide.

Then I installed zoxide.fish using Fisher. fisher install icezyclon/zoxide.fish.

zoxide.fish automatically aliases cd as z so my muscle memory is still useful.

That's it. Now I can more easily jump around the file system in a terminal.

Permalink #

When everything is a Post

I've spent a lot of time over the past couple years forcing various blogging platforms to behave the way I want them to. That is: Daily notes grouped by day, with stand-along posts scattered between.

With this new blog and Hugo theme, I've forced myself to leave things alone (other than some CSS tweaks). It's a relief.

Everything is a Post, here.

If I want to publish something, it's a new post. I don't get to (or have to) decide where it fits. It's a Post. Short or long...it's a Post.

It's kind of liberating. I'll tire of it, but for now I'm enjoying the constraint.

Permalink #

Adding Pagefind search to Hugo

Pagefind makes me happy. It is a static search library that is so easy to configure and use that I can hardly believe it. Here's a quick summary of how I implemented Pagefind search here in the Anubis2 Hugo theme[1].

I first created content/search.md as content for the search page. In that document I pasted the default code from the Getting Started with Pagefind docs...

<link href="/pagefind/pagefind-ui.css" rel="stylesheet">
<script src="/pagefind/pagefind-ui.js"></script>
<div id="search"></div>
<script>
    window.addEventListener('DOMContentLoaded', (event) => {
        new PagefindUI({ element: "#search", showSubResults: true });
    });
</script>

To build the search index, I run it via NodeJS like so:

npx -y pagefind --site public

That's it! That's all that is technically necessary. Running the indexer creates the index and puts the necessary support (css/js) files in public/pagefind/. Just deploy the site[2] and visit /search.

By default, Pagefind indexes everything in the <body> element. That's too much, so I added data-pagefind-body to the element containing only the post content in the "single.html" template.

<div data-pagefind-body class="content e-content">
   {{ .Content }}
</div>

For titles I needed data-pagefind-meta="title" in the <H1> element:

<h1 data-pagefind-meta="title" class="p-name post-title{{ if .Params.favorite }} favorite{{end}}{{ if .Params.draft }} draft{{end}}">{{ trim .Title  " " | markdownify }}</h1>

I put a little search icon in the navigation.All this took me less than 30 minutes. It's crazy.

I'm sure I'll tweak things further, but the out-of-box experience is pretty great.

Try it yourself.


  1. Pagefind works with any static website. I'm using Hugo here. ↩︎

  2. I also added the indexing step to my deployment script so that the index is always up to date. ↩︎

Permalink #

Links browser

Twibright Labs: Links

It's a Lynx-like web browser. I don't quite understand why I would want to use it for everyday browsing, but it's fun to see what sites look like without all the hubbub. Here's this site in links:

copingmechanism.com viewed in links
Permalink #

Book: Gaslit ★☆☆

An absolutely gripping psychological thriller packed with a twist you won't see coming

Do you know why I didn't see it coming? Because the narrator is not only unreliable, he's a liar. Also, things like, and I'm (barely) paraphrasing here, "Does she like me? I think she likes me!" What is he, 15? I was bored.

Rating: ★☆☆

Permalink #

Unplatform

I wish I could quit social media. This seems like a good cause:

The definitive guide for escaping social media (and joining the indie web.)

Unplatform

Permalink #

Erin Kissane on social networks

The evidence of the past decade and a half argues strongly that platform corporations are structurally incapable of good governance, primarily because most of their central aims (continuous growth, market dominance, profit via extraction) conflict with many basic human and societal needs.

source: Bad shape

Permalink #

Moving to Hugo?

I came this close to moving my blog at baty.net back to Hugo. Even worse, I considered archiving all the content and starting fresh. I mean, completely fresh. No more dragging around years of images and posts that have been converted to and from several Markdown formats for various blogging engines. I still may, but I've given myself a reprieve this morning. Sort of.

Instead of doing that, I've fired up a brand new Hugo blog here. I'm calling it "Coping Mechanism". Mostly because I still own the domain and it was right there.

I've chosen a new theme, arubis2, which is the just the right amount of boring. We'll see if it sticks. It doesn't support featured images, which I'm counting as a positive, since every Hugo theme handles them differently, and most don't do it well. If I want a featured image, I'll put it at the top. Cover images for decoration are a blight, anyway.

So here we go, I guess. A new playground. For now.

Permalink #

Fixing my duplicate email fiasco with rmlint in Maildir

Remember my recent email fiasco, during which I ended up with tens of thousands of duplicate emails? I remember it. After storming off and ignoring the problem for a week, I decided I should do something about it.

Today, I fixed it!

Actually, a post from Edd Salkield fixed it: Removing duplicate emails from an mbsync maildir.

Basically, the duplicate email files aren't exact duplicates. Each has a unique X-TUID header line. So we remove that line on every file in a copy of the mail store so we can use rmlint to find the duplicates. rmlint generates a script for removing the duplicate files. We run the script on the original mail store, which still has the X-TUID headers intact.

My Steps:

  • cp -r ~/Mail ~/Mail_backup # Make a full backup, just in case
  • cp -r ~/Mail ~/Mail-workingcopy # Make another copy to work with
  • cd ~/Mail-workingcopy
  • find ./ -type f -exec gsed -i -e '/X-TUID/d' {} \; # Strip the X-TUID header, which is the only differing line in otherwise duplicate files (Needed gsed on my Mac)
  • rmlint -g --types="defaults -ed -dd" # Run rmlint on working copy
  • Check the generated rmlint.sh file to confirm paths are absolute (mine were)
  • gsed -i -e 's/-workingcopy//g' rmlint.sh # Find and remove working copy suffix, making it the "real" path
  • mv rmlint.sh ../Mail/ # move the script into the real mail store
  • cd ~/Mail # get ready to de-dupe
  • ./rmlint.sh -x -n # Do a dry run of the script
  • ./rmlint.sh -x # Go!
  • mbsync -a # Sync with server (be sure that --expunge-far is set)

It worked for me. I may give it a second before trying the whole muchsync thing again, but it's good to know that if I foul things up, there's a way out of it.

Permalink #

Bringing Apple Passwords into Pass

I have a soft spot for Pass: The Standard Unix Password Manager, but Apple's new Passwords app has been working fine. I use Safari, so the whole thing is very convenient.

Sometimes I get twitchy about having things in only one place, so today I decided I'd like to import my Apple Password passwords into Pass. It took me a minute, so I'm jotting down some notes here, for next time.

First, install pass-import. Pass-import is "A pass extension for importing data from most existing password managers". There's a lot of Python going on, which always seems to trip me up, but thankfully there's a Homebrew recipe, so...brew install pass-import.

pass-import supports many password apps out of the box. It doesn't yet support Apple Passwords, apparently. It handles Keychain exports, but that's not what I needed. I used the generic CSV option.

I exported the passwords to a CSV file (pass.csv) from Passwords.app.

I ran a test pass import foo.csv command but got an error. The pass command didn't recognize the import option. After some digging, I learned that the Homebrew recipe installs a script named pimport. Confusing, but OK fine.

After much trial and error, this is finally the command that worked.

pimport  -o .password-store/ \   # where to import to
             pass \                  # destination format
             csv \                   # Source format
             pass.csv \              # Source csv file
             --cols=title,url,login,password,comments,otpauth \  # Map columns
             -p apple-import/        # put in subfolder .password-store/apple-import

Now I have a backup. I don't know of a way to do this incrementally, so I suppose I'll just delete the apple-import/ folder and redo the export/import once in a while to catch up.

Permalink #