it's pudding time!

I added some automation to my gallery setup. I don’t mind the thought of hand-editing a YAML file, but if I move that work upstream, I can enforce a good Lightroom habit where it’s easier because the image is just sitting there – no concerns about typos or crossing image name with description. Over the long haul my library’s metadata will improve, and if I keep my Smugmug account it’ll benefit presentation there.

The manual part:

  1. Pick your images in Lightroom

  2. Make sure each of them has a “Caption” property in the metadata

  3. Export them to JPEGs, making sure to preserve metadata at export.

  4. Do whatever compression. I am using Squash because it is fast, easy, and good.

  5. make a directory in _galleries/#{gallery_name}

  6. Copy the images into the directory

  7. Make an index.md that looks something like:

     ---
     title: "Office Day"
     layout: gallery
     description: "I took a Funleader 18 to the Puppet office's on a quiet day when few people were in."
     image: galleries/office-day/DSCF3262-2.jpg
     gallery: office-day
     ---
    

The automated part:

Run this ditty in the root of your Jekyll install using the target directory as an argument:

  • If there’s a data file for that gallery, it reads it in.
  • If there’s no data file, it makes a new hash
  • Loops through jpegs in the directory.
    • If the data for the current jpeg has a description, leave it alone
    • if the data for the current jpeg has no description, use the caption from EXIF data
  • Dumps the hash back out as YAML in the _data/galleries/#{gallery-name}.yml file

Things to consider:

  • I think I could do the image minification with RMagick, but I don’t know how to get the same results I’m getting from Squash.
  • Using keywords in Lightroom to introduce tags to galleries
  • Automate the generation of index.md for each gallery.

But Mike, whyyyyyyy?

I poked around in Smugmug a few days ago and really did not enjoy it. It has gallery embeds, but they’re slideshows instead of the responsive “wall of tiles” look I’ve got going. It’s also just sort of slow and fussy and clicky. It’s a very nice product for people who sell their work, but I am not one of those people. It takes me about five minutes to prep a batch of photos for a Jekyll gallery, and the end result is portable: YAML data describing the contents of each directory.

Also, “because it’s fun.” More on that later.


I really appreciate cheesy-gallery and switched out all my old galleries with it last night.

I woke up at 4 this morning, couldn’t manage to get back to sleep, so there was nothing to do but make some tea and do something relaxing. I went to bed feeling a little unhappy about my galleries not having alt values for screen readers, so I took the opportunity to learn about Jekyll site data to create a YAML hash of images in a gallery so I could include useful metadata at render.

I’ll just embed a gist to show how I set up the data file and used it in my gallery templates, because Liquid markup in a code block seems to be giving Hugo/micro.blog a case of the screaming fantods:

(For the record, David proposes a much more semantically correct way to structure the image markup. This is my v1, which amounted to using his gallery engine to drive my pre-existing templates. I want to go back and use his more thoughtful approach to this markup.)

It’s a little tedious editing YAML for the data file, but I’ve started a script to at least populate a some-gallery.yml file with the hashes for each image, and it’s not nearly as tedious as most web-based CMSes when it comes to asset management. And I could clean up the entire pipeline by being better about writing descriptions in Lightroom, then adding EXIF extraction to automating the data file creation.

Anyhow, the Lightbox plugin does you the favor of using your descriptions as captions if you put in the time to have descriptions, so the images display with that caption if there’s a key in the hash for the image, like this:

Gallery image with data-driven caption in the Lightbox display

So, an okay use of insomnia hours. Now I have a bunch of galleries to go make data for.


At the carnival


I made a first cut at automating gallery pages on Jekyll today using a frontmatter-driven technique I found. Not what I wish Smugmug would just do, but now it’s “dump images into dir, autogen the index, add alt & done.” https://mike.puddingtime.org/photos/spring-break-2022/


“How Do Anti-Theft Wheel Locks on Shopping Carts Know to Trip at the Edge of the Parking Lot?"

I prefer the elegance of the old-school magnet-and-pin implementation. The onboard processor business has no grace. 🛒


Attendant standing in front of a carnival hall of mirrors

Early Fastmail impressions:

I secured a new domain today that’s quite similar to but more easily pronouncable/understandable than puddingbowl.org. I’m rearranging ‘net presence stuff in a small hurry so I can turn my attention to actually using it.

All the shuffling offered a chance to ditch the hosted provider I’ve had for almost 20 years – the one I got after the server I had in the soon-to-be nursery threw a fan bearing and caught on fire in the closet. (Really nothing gets you out of the self-hosting business faster than nearly setting your soon-to-be-born child’s nursery on fire.)

Fastmail came so recommended by enough non-overlapping-social-circles people that I decided to just go for it after a few hours of poking around.

Stuff that impressed me:

  • I thought I’d have to live out of a few inboxes, and wasn’t looking forward to the rigamarole of multi-identity life. Fastmail seems to understand that’s just reality and makes it easy. I set up a sending identity for my old domain without realizing I’d done it.

That matters because my old provider became sort of horsey about forwarding addresses, refusing to leave SMTP open if you’ve got a forward only address and leaving you to trust an opaque forwarding filter system that guarantees you’d miss an edge case otherwise. Not really “hostile,” because it’s just sysadmins trying to provide a commodity to abusive cheapskates, and I am professionally obligated to side with the sysadmins over abusive cheapskates (even when they’re me), but neither is it friendly policy.

Anyhow, I label the mail from the old address and will be able to slowly migrate to the new identity over time and do it all from a single inbox.

  • Legacy mail import from vanilla IMAP and Gmail IMAP just worked and was sort of considerate: Just toss it all in the pot or segregate it.

  • Documentation was on hand specifically for Cloudflare DNS. Generic instructions would be fine for this kind of thing, but it’s nice to get something specific.

  • Choice of folders or labels for organization. (Chose labels. Google won.)

  • 1Password integration to generate single-use addresses. I’ve never bothered but now I might.

  • Account provisioning for iPhone and Mac: Really nicely done using a profile generator. You just run a little configurator, click on a profile file and load it from Settings, and your calendar, IMAP, and contacts are provisioned. No pecking in server names and ports, etc.

  • Super friendly failure when I tried to migrate my Sanemail account using my account credentials. A very polite automated mail landed in my inbox telling me what I’d done wrong and providing documentation to do it correctly with an app-specific password.

All in all, just a thoughtfully executed service with nice polish and pleasant affordances.


How to find a collection of photos in LR Classic using a CSV file. That you generated by finding through 2000+ Jekyll posts. Because something Cloudflare images something something tidy and clean. https://pic-time.kb.help/how-do-i-modify-a-csv-list-and-use-it-in-lightroom/


Last night I learned that if you’re getting the “pages in Safari tab groups open blank tabs instead of the expected content” problem (e.g. after a middle-click, or links within Google Drive) the workaround is to set your new tab preference to “Empty Page.”


I just set up a custom domain for email on iCloud and it was shockingly non-dramatic. I got a dialog box asking if I wanted Cloudflare to add the MX records and clicked “Sure, yeah.” Don’t think it’s a permanent thing. Just curious. Pretty smooth. Taking recos for mail providers.


… and flagged this as “military.” I’ll allow it.


screenshot of GraphicConverter telling me what's in a picture

Wow. I was downsampling an image in GraphicConverter, clicked the little lightbulb icon, and it told me what’s in the picture.


Misty morning on Vernonia Lake

I’ve never use the Finder for “work,” but faced with triaging 800 markdown files, the gallery view came in handy, especially with the QuickLook Markdown extension installed. Cursor arrows to flip through, ctrl 1-9 to tag.


Obsidian Things Link turns Obsidian pages into Things projects and Obsidian tasks into Things todos, with links back and forth between the two. Peanut butter and chocolate.


A bright orange hamburger stand in Cave Junction, OR A trophy mount at Oregon's premier lumberjack dining experience


Every 7-8 years I have to retrain myself to not over-filter email. Sanebox has been worth the license, but reinforcing it with a habit of only checking my email three times a day and letting it be a little fuzzy has let it shine. Need to re-look my initial review & reshare.


I tried out Secure ShellFish on my iPad to see how it compared to Blink. Wow. Logging in to a remote instance and using textastic foo.md to edit on the iPad, or quicklook bar.jpg to preview on the iPad. Plus baked in tmux support. Thanks @maique and @odd for the tip!


The Moonlander didn’t stick with me – too many devices to tolerate the difference in keyboard style. But ZSA doing a macro pad seems promising. An analog knob for Lightroom sliders would be pretty welcome, but looks like there are enough keys to just assign +/-.


Dawn at Harris Beach, OR

Forty is nice but doesn’t observe a few blog conventions, so last night’s fussing around involved a first whack at a bloggish posts page and adding a related posts feature (example at the bottom of this post. I’m going less for “blog” than “magazine,” I guess.


Mountain biker, Cape Blanco, OR Cliffs, Cape Blanco, OR

Camp breakfast, Cape Blanco Morning in camp, Cape Blanco, OR

Al on Southern Oregon Coast

Something good that came out of 2 months of refusing to do much on a topic until writing about it: Things lost their glamour. I’m left, for instance, wanting to use Obsidian because it’s a useful tool right now, not because someday I could use a Zettelkasten to write 63 books.


Three other learnings/reminders from the tool whirlwind over the weekend:

  1. GitHub pages doesn’t support LFS, so don’t bother.
  2. If you’ve been having problems with git pushes hanging at the end, it might be time to update your Mac’s git client (I just used the one in Homebrew and my problem was solved)
  3. There are cheaper ways, but GraphicConverter helped me solve the LFS thing by just chewing through the task of resizing and reducing the resolution of ~2000 images. From 2GB to ~350-good-enough-for-inline-display-on-a-microblog-MB in under a minute (Go, M1 Max, go!)