it's pudding time!

Atlas Van Lines, 2023-01-23
Luther Rd. Natural Area, Springwater Corridor
Portland, OR

A trailer with the red logo “Atlas Van Lines” sits abandoned on a hill next to a tree.

#portland #pdx #SpringwaterCorridor #LutherRoadNaturalArea #photography


Coffee Walk, 2023-01-25
Springwater Trail, Foster Floodplain Natural Area
Lents, Portland, OR

Stopped through the Feral Cat Cove skate park on the way to the floodplain this morning.

Felix the Cat cartoon character painted onto the concrete of a skate bowl.

A cat walks through a concrete skate bowl, an orange grafitti cat seems to look down on it.

A tall, dead tree over a scrubby floodplain, brown in winter.

Cargo containers are stacked up in front of  a misty mountain, under a gray sky.

#portland #pdx #FosterFloodplain #photography 


I left out the salmon I caught this morning, so here they are.

A bicyclist in yellow rides in the wrong direction in a bike lane in front of a building with a sign that reads “Mt. Scott Bark Mulch”


Coffee Walk, 2023-01-24
Foster Road, Mt. Scott
Portland, OR

#portland #pdx #MtScott #FosterRoad #photography

A bicyclist is blurred in motion, surrounded by cars and a truck.

Pale morning light on a simple painting of a yellow  flower painted onto the side of a white building. Other flowers are in shadow.

A wooden carving of the “See no evil …” monkeys with birds perched atop their shoulders.

A wooden garage with aquamarine paint and a bright orange garage door, shadows of a tree in the early morning sun.


About

Hi, I’m Mike Hall. I live in Portland, OR. Here are some things I like: Movies! If I had to list five to give you an idea of my tastes: In the Mood for Love: Heartbreaking every time. The Godfather Part II: Yes, I love the original, but Pt II just feels bigger and more lush. Jackie Brown: I was ready to give up on Quentin Tarantino and then he made this.


Colophon

The site it built with Hugo, a static site generator. The theme is hugo-simple-css. hugo-simple-css depends on SimpleCSS, a classless CSS framework. The color scheme is Catppuccin Source is hosted on GitHub The site is hosted on Cloudflare Pages.


Haircut Loitering, 2023-01-23
Downtown Portland, OR

My barber was running late so I drank a pineapple thing and milled around.

An orange plastic chair sits by a white table in front of a white brick wall with a stylized plastic black and white droplet.

A steel panel box mounted on a wooden wall has exposed conduit, graffiti and cigarette butts inside.

A barber seen through a window works on a man’s hair while a security guard leans on a wall outside.

A pair of orange plastic chairs sit in front of a wall with a mural painted to look as if the viewer is looking into a room with tumbling, orthogonal planes.

#pdx #Portland #downtown


Haircut Day, 2023-01-23
Downtown Portland, OR

Downtown for lunch with a former colleague and a haircut/beard trim.

A red brick building with a bright yellow sign with brown lettering that can only partially be read as “Cameron’s. Portland’s oldest used … cash for good used …"

Urban canyon. An old red brick building with an elaborate facade contrasts with a modern concrete skyscraper

A bar faces the street with a bright green and red neon sign that reads ‘Kelly’s Olympian.'

Two wheatpasted signs advertising Denmark and Danish vodka under a weathered yellow piece of signage on yellow paint that reads “Buy & Sell Good”

#portland #pdx #downtown


Coffee Walk, 2023-01-23
Foster Road, Mt. Scott/Arleta
Portland, OR

A coffee shop with blue wooden siding in the early morning.

Two kids walk in front of a building with a sign reading “Mt. Scott Bark Mulch”

A bicyclist in orange rides in front of a building with a sign reading Mt. Scott Bark Mulch Co.

A round white sticker with international symbol style illustrations of the ills of gentrification under the word ‘Sorry.'

#FosterRoad #Portland #pdx #fujifilm #photography


Working on my homepage. Wanted to get the branding right for each social network.

A screenshot of a web browser showing a page of social media icons. The Twitter icon is colored gray and turned upside down.


My first swing at overriding the basic palette for SimpleCSS was overdone. This pulls in catppucin’s palette and overrides the basic variables in SimpleCSS with catppucin variables. Much simpler.

gist.github.com/pdxmph/70…


📺 The Wire (2002) - ★★★★★

Doing a rewatch. Wonder how the last season will land this time.

The Wire poster


omg it's a weekly update (2023-01-21)

Week of 2023-01-20

📷 Photography

Most of my photography energy went to workflow stuff. I finished up the minimum useful version of imgup, a little Sinatra app that lets me upload images to my SmugMug account, then grab little snippets ready to be pasted into a blog post or whatever.

It's part of a bigger thing I'm trying to do around my photo workflows in general, consolidating around SmugMug as my sort of presentational home, then take advantage of all the affordances it offers, with a little layer of automation to make things less clicky and make for fewer stops along the way from capture to edit to publish to share.

More on this below.

A woman in a long puffy coat carries a child and waits for the traffic to pass. In the background is a building with a sign reading

✏️ Writing

Most of my writing this week is invisible to the outside world.

Early in the year I established a practice of writing about how I do things that are important to me. Whenever I think about a big change that will require a new tool or new way of doing things I pull out my notes from last time and review, then usually start with a prompt like "what problem are you trying to solve?"

This week I did some writing about my journaling practice, my web presence, and my RSS practices.

Journaling

Since my last day at Puppet I've been keeping a small daily journal in DayOne. I don't usually put much: Just the highlights and maybe a general impression. I try to include an image of some kind. It has been a little perfunctory and detached. I found myself going back and adding days so I could keep a streak going. I didn't like how that felt.

I also revived my Daily Pages practice. That's just a simple lookahead thing:

  • What do you want to get done today?
  • What's making you happy?
  • What's making you nervous?
  • How could you have improved today.

That has the disadvantage of sort of mixing up a few goals: An opportunity for introspection with a more straightforward "what the hell needs to happen today" kind of thing.

So long and short I'm just going to make my daily page a todo thing and my daily journal something more introspective. One is amenable to handling tasks in my Obsidian kanban boards, one is better suited for entering things in Day One as a normal journal.

📚 Reading

I finally finished Kim Stanley Robinson's Aurora this week. I think I'll just repeat about it what I said when I was closing in on the home stretch:

 It’s like KSR woke up one morning and said “someone needs to warn the future about generation ships, but if they’re posed as engineering nightmares it’ll only make people try harder. I know. I’ll write a novel and let the people who care about ethics and stuff have something to chew on, AND break down for them how these things would be engineering nightmares.”

I don't read enough science fiction anymore to make broad generalizations about how modern hard-ish SF handles the idea of generation ships, so maybe there's more skepticism about them these days. Certainly we have stuff like Adrian Tchaikovsky's Children Of Time that don't make them sound like clean utopias with matching jumpsuits.

Anyhow, I liked it a lot. Would recommend. Parts of it are haunting.

⚙️ Organization

You know, what's the routine look like?

I added a weekly look-ahead to my daily pages routine. Sunday night is for sitting down with the calendar and a list of standing items:

  • Searching job listings
  • Applying for jobs
  • A major household project
  • Structured writing time
  • Reviewing finances

I make sure I understand how my social calendar will line up with the prosaic stuff I have to get done so I can make sure I'm picking the times that are most likely to help me succeed when I schedule the time to do those things.

... and I pick the big objective for the week: The thing I most want to make some progress on. I try to keep it strategically valuable, but last week I had a major household thing to do that I knew I simply did not want to touch, so I made that the big objective.

It feels very structured, but I've been thinking a lot about how time moves and feels during this current period of unemployment. It would be very easy to just put things off and stay absorbed in stuff I just enjoy doing. With a little bit of structured time -- in the end we're talking about maybe 20 hours out of the week, I know I'm keeping things up that need to be kept up, making progress on things that matter, and keeping what I described to my counselor as "a fundamental level of tension" in the system.

No so much that I'm stressed out or trying to recreate work conditions, but enough to know I can look back on the week and say "you kept everything up."

🫥 How are you feeling?

You know, pretty good?

I had an interesting moment this week when I was filling out my daily page and got to the "what are you most happy about prompt" and found myself writing "I'm me."

By which I meant that in the middle of a pretty uncertain time with a lot of variables, I like how I'm handling that, and I like how I am gradually recovering a feeling of personal fun -- a sense of unselfconscious play -- I had lost touch with.

Usually I write things like "finances solid," or "stuff is getting done" or whatever. I never really say things like "I'm okay." Felt pretty good.


A darkened barbershop with three old-school barber chairs and a leg that looks like a woman’s leg. An orange broom is propped on the lamp table.

#FensterFreitag #WindowFriday #photography #LeicaQ2 


Added a "recents" page to imgup's SmugMug branch

Screenshot of a web page with image thumbnails and corresponding text areas with Markdown markup ready for copying/pasting.

Last night I finished up the /recent page for imgup’s SmugMug version.

It provides the last 20 uploaded images along with their title and caption metadata wrapped up in a Markdown image link. The caption is pulling duty as my alt text.

Having this in place gives me a way to process and upload images to SmugMug from Lightroom in bulk, then visit imgup to get the markup for sharing. Work put into adding metadata, titles, etc. can happen in one place, and I can easily amend it in the SmugMug organizer if needed. It saves me a little clicking around and manual editing.

Probably seems small, but I hated all the file shuffling I was doing and realized that some images I posted on my microblog over the past few years weren’t compressed/scaled very well. This gives me a tool for quickly rehabbing blog post images by finding them again in Lightroom, re-uploading them, and grabbing them out of imgup to update blog posts over time.

Todo

  • Go ahead and pull the trigger on adding oAuth tokens to a config file.
  • Make an images Atom feed.
  • Make a UI to select target albums for upload. Right now the album is hard-coded.

📺 The Last of Us (2023) - ★★★★

Hope it keeps up the standard set in E1. Also hope it doesn’t go full puzzlebox or bog down. Never played the game so it’s all new to me.

The Last of Us poster


omg it's a weekly update (2023-01-21)

Week of 2023-01-20

📷 Photography

Most of my photography energy went to workflow stuff. I finished up the minimum useful version of imgup, a little Sinatra app that lets me upload images to my SmugMug account, then grab little snippets ready to be pasted into a blog post or whatever.

It's part of a bigger thing I'm trying to do around my photo workflows in general, consolidating around SmugMug as my sort of presentational home, then take advantage of all the affordances it offers, with a little layer of automation to make things less clicky and make for fewer stops along the way from capture to edit to publish to share.

More on this below.

A woman in a long puffy coat carries a child and waits for the traffic to pass. In the background is a building with a sign reading

✏️ Writing

Most of my writing this week is invisible to the outside world.

Early in the year I established a practice of writing about how I do things that are important to me. Whenever I think about a big change that will require a new tool or new way of doing things I pull out my notes from last time and review, then usually start with a prompt like "what problem are you trying to solve?"

This week I did some writing about my journaling practice, my web presence, and my RSS practices.

Journaling

Since my last day at Puppet I've been keeping a small daily journal in DayOne. I don't usually put much: Just the highlights and maybe a general impression. I try to include an image of some kind. It has been a little perfunctory and detached. I found myself going back and adding days so I could keep a streak going. I didn't like how that felt.

I also revived my Daily Pages practice. That's just a simple lookahead thing:

  • What do you want to get done today?
  • What's making you happy?
  • What's making you nervous?
  • How could you have improved today.

That has the disadvantage of sort of mixing up a few goals: An opportunity for introspection with a more straightforward "what the hell needs to happen today" kind of thing.

So long and short I'm just going to make my daily page a todo thing and my daily journal something more introspective. One is amenable to handling tasks in my Obsidian kanban boards, one is better suited for entering things in Day One as a normal journal.

📚 Reading

I finally finished Kim Stanley Robinson's Aurora this week. I think I'll just repeat about it what I said when I was closing in on the home stretch:

 It’s like KSR woke up one morning and said “someone needs to warn the future about generation ships, but if they’re posed as engineering nightmares it’ll only make people try harder. I know. I’ll write a novel and let the people who care about ethics and stuff have something to chew on, AND break down for them how these things would be engineering nightmares.”

I don't read enough science fiction anymore to make broad generalizations about how modern hard-ish SF handles the idea of generation ships, so maybe there's more skepticism about them these days. Certainly we have stuff like Adrian Tchaikovsky's Children Of Time that don't make them sound like clean utopias with matching jumpsuits.

Anyhow, I liked it a lot. Would recommend. Parts of it are haunting.

⚙️ Organization

You know, what's the routine look like?

I added a weekly look-ahead to my daily pages routine. Sunday night is for sitting down with the calendar and a list of standing items:

  • Searching job listings
  • Applying for jobs
  • A major household project
  • Structured writing time
  • Reviewing finances

I make sure I understand how my social calendar will line up with the prosaic stuff I have to get done so I can make sure I'm picking the times that are most likely to help me succeed when I schedule the time to do those things.

... and I pick the big objective for the week: The thing I most want to make some progress on. I try to keep it strategically valuable, but last week I had a major household thing to do that I knew I simply did not want to touch, so I made that the big objective.

It feels very structured, but I've been thinking a lot about how time moves and feels during this current period of unemployment. It would be very easy to just put things off and stay absorbed in stuff I just enjoy doing. With a little bit of structured time -- in the end we're talking about maybe 20 hours out of the week, I know I'm keeping things up that need to be kept up, making progress on things that matter, and keeping what I described to my counselor as "a fundamental level of tension" in the system.

No so much that I'm stressed out or trying to recreate work conditions, but enough to know I can look back on the week and say "you kept everything up."

🫥 How are you feeling?

You know, pretty good?

I had an interesting moment this week when I was filling out my daily page and got to the "what are you most happy about prompt" and found myself writing "I'm me."

By which I meant that in the middle of a pretty uncertain time with a lot of variables, I like how I'm handling that, and I like how I am gradually recovering a feeling of personal fun -- a sense of unselfconscious play -- I had lost touch with.

Usually I write things like "finances solid," or "stuff is getting done" or whatever. I never really say things like "I'm okay." Felt pretty good.


imgup (now with SmugMug as the image upload backend)

I finished up the initial SmugMug version of imgup today.

There are some things I’d like to add, but it’s good enough to stick in Docker and run locally as a drop-in replacement for the Cloudflare edition I’ve been using.

The basic workflow of the tool is:

  • You make a private (but not secret) album.
  • You upload images to it.
  • During the upload process you can set the title and caption properties. The caption goes on to be the alt-text.
  • Once uploaded, you get a page back with text areas that have basic Markdown and HTML for copying/pasting, like this:
![this is alt text, which will show up for people using screen-readers](https://photos.smugmug.com/photos/i-g2xggWq/0/20655d2f/X2/i-g2xggWq-X2.jpg)

Why? Because I get better control of the quality of images I share (SmugMug wants them to look nice at a variety of sizes and compresses/resizes accordingly), I’d like to move to having permanent URLs for images in posts (and I think I’m a SmugMug lifer now), and I’d eventually like to save the messy scattering of copies of images made just for sharing then discarded.

Because SmugMug has a pretty nice ecosystem of plugins, uploaders, and apps, there’s more I mean to do. For instance, it’s possible to just shoot an image straight from Lightroom CC on an iPad to SmugMug. There’s also a good desktop Mac uploader that can snarf up things saved to a specific folder. So if I just pick up the habit of adding title and caption metadata in Lightroom, it’ll show up in anything else I do with imgup. Uploading, ultimately, will not be something I do a lot with this tool as I build the parts where I can get back recent uploads and get easy sharing snippets.

Still on the list of things to do with this:

  • Make an Atom feed to automate dropping pictures into my socials.
  • Make a “Recent Uploads” page that provides pre-made Markdown snippets.
  • Make post this buttons for micro.blog, Mastodon, etc.
  • Get rid of the manual step of editing a .env file to save tokens. I could just dump that into a file, look for it, and spare the manual uncommenting of code.

In the process of debugging oAuth, I ended up building a manual solution to the problem of keeping an oAuth session alive after restarting the app: Once you do a SmugMug auth with the app, there’s a /tokens page that tells you enough to stick your oAuth access token and secret in an environment variable. In the development environment it pulls this stuff from a .env file. You can use the app without doing this at all, at the cost of having to re-auth the app with SmugMug each time you restart it.

Previously:


🎵 I Told You So - Delvon Lamarr Organ Trio

brain.fm has been fine, but honestly I think this is just as good, if “motivational, vocals-free” is the agenda.

I Told You So - Delvon Lamarr Organ Trio poster


Currently reading: Aurora by Kim Stanley Robinson 📚

In the home stretch. It’s like KSR woke up one morning and said “someone needs to warn the future about generation ships, but if they’re posed as engineering nightmares it’ll only make people try harder. I know. I’ll write a novel and let the people who care about ethics and stuff have something to chew on, AND break down for them how these things would be engineering nightmares.”


Coffee Walk, 2023-01-19
Foster Road, Portland, OR

Bonus self portrait.

A woman in a long puffy coat carries a child and waits for the traffic to pass. In the background is a building with a sign reading “Mt. Scott Bark Mulch."

A bicyclist in an orange jacket is blurred in motion as he passes in front of a building with a sign that reads “Mt. Scott Bark Mulch."

A brown plant sits in a planter in front of a blue building with tinted blue glass garage doors. It’s wet.

A Cadillac hubcap. The tire has a bright yellow stripe. You can see the photographer’s feet reflected in the hubcap’s chrome.


oAuth, rubocop, a Drupal recollection, and the value of play

A screenshot of a nicely formatted web page showing neatly indented JSON

oAuth is sort of a pain. Now that I sort of know how to plumb it in – enough that I’m going to make myself a little repo with a reference application – it has opened up a lot of interesting possibilities.

The whole experience reminded me of when I was doing Drupal development for a job I took to get into tech and out of pure editorial. We needed to do some work migrating a bunch of content between sites. My predecessor, who’d established the site on a previous version of Drupal, had done a similar task with a certain plugin, so working from his notes I installed and learned – that it wasn’t a clickable GUI thing with a wizard anymore – it was now a content migration “framework,” which meant I was going to spend some time learning its API and writing my own PHP plugin to support our particular needs, or … nothing. Ask for money for the outside guys, I guess, because I’d been hired to get better at PHP, not know it. I ended up hobbling through, and I still remember hopping around my office when the damn migration just ran on our 800,000+ user database.

So this weekend I was shopping around for a library to help me get oAuth plumbed in. OmniAuth presented itself right away, and seemed to have a SmugMug “strategy” – their word for “module” or “plugin” – so my eyes lit up. Then reality set in: The strategy was for an older version, and it targeted the old SmugMug API. Okay, fine, I was feeling industrious so what even was a strategy? I looked at a few and my eyes glazed because I had a nodding understanding of how all this worked, but not enough to sit down and implement a plugin for my specific problem.

I think that’s probably okay. I set OmniAuth aside and went with the vanilla Ruby oAuth gem and a reference Sinatra app someone wrote that did a really nice job of creating routes that recreated the oAuth dance. I had found a few other examples, but they were less systematic and harder to peel apart. By the time I was done fiddling with it to get it to work with SmugMug’s particular oAuth endpoints, I felt a lot more confident on how the protocol actually works.

So, do I “know oAuth?” No, I do not. Asked to implement an oAuth signin process from scratch, I could not just implement it. But I do know, more or less, the vocabulary, the steps in the process, and what it’s doing behind the scenes. Using standard libraries is a repeatable task. Good enough.

What else?

I was a little more forward-thinking this time around and picked up dotenv to manage API tokens. I might even be over-using it a little, because it can use the variables you store in it to make other variables. It just makes the core app a little less busy at the expense of having a .env file to consult if something seems to come from nowhere.

I have never been a big linter person, so I decided to give rubocop a shot. I appreciate it as an education tool. There are a lot of things about good Ruby style I never learned, so it was a little alarming at first. Sort of like I’d been made to code in a small room with a large speaker on the wall that was fed by a room full of the most earnest Ruby style pedants monitoring me from a hidden camera.

I ended up turning off a few things it wanted to complain about for … reasons … (like shebangs) but did learn a few things and did find that by paying attention and accepting the corrections I no longer guiltily run a beautifier before every commit because things are at least consistent and tidy. Plus it complains about a few things that are at least potentially problematic.

What else?

Not much. I think I’m feeling voluble because juggling oAuth’s needs with what I wanted to accomplish was a pain in the neck, and SmugMug maintains a separate API for uploading that is harder to interact with than the one I will need to use for the rest of the project. I don’t even really need the uploading API because their own uploaders and tools are great. Cloudflare was simple to figure out, hence alluring, but using my normal stuff (e.g. Lightroom) I can also get titles, keywords, exif data, etc. and do more interesting things without having to build out a database of some kind, or building special UIs to get that stuff. But anyhow, adding then managing the complexity of oAuth feels like an accomplishment. I don’t know how many little ideas I’ve bounced off of because the API I would have needed to touch had moved on from simpler approaches.

And I am feeling good because I realized at some point over the past couple of weeks that I am doing all this because it is playing. I used to do a lot of little utility scripts and silly gadgets because it was fun and absorbing, not because it was hugely practical or efficient. It was just playing. I stopped playing for a long while. It feels good to play again.


I found a lab result on the Kaiser website from 2012 I never opened. I often struggle to remember the dates of the five days I was nearly killed by $1 sushi & could only lie in bed watching all the existing eps of Sons of Anarchy on an iPad, praying for death, so that was nice.

I do remember that watching, like, three seasons of that show continuously when not explosively voiding or slipping into fevered, tortured sleep did nothing to increase my desire to live. But part of me was, like, “you’re dumb enough to eat $1 sushi, you deserve this, too.”


Shortcut: upload stuff to Cloudflare Images service

I made a shortcut that pretty much does what imgup does, except from an iPhone (or Mac, I guess, if you want to pick an image from Photos instead of sending it via an iPhone/iPad share sheet.

It just squirts an image up to the Cloudflare Images API, gets back a URL, and copies some pre-made Markdown to your clipboard suitable for pasting somewhere. Pretty simple to add a step to send it to a Drafts draft, etc.

Cloudflare doesn’t do ProRaw, and I’ve got my phone set to default to that, so the shortcut converts image input into 90% JPEGs (both to make them acceptable as a filetype and to compress them down under the Cloudflare file size limit. Generally I share from Lightroom anyhow, and that shares out however you choose and at whatever quality level.

I like sticking stuff up in Cloudflare Images because I get some dynamic options for presentation, quality, etc. that I don’t get when I’m sending things to micro.blog. Any automation I build against that API can eventually enjoy some reuse for the ideas I have around an image feed. If I need to abandon ship, it’s a simple API I can use to retrieve things.

I’m still plugging away at Smugmug automation, though. Cloudflare is fun to play with, doesn’t cost a ton, and is giving me some practice/learning opportunities. Ideally, though, I’ve had some kind of relationship with Smugmug for a very long time, I trust them, and would prefer to use them as the resting place for “seemed worth sharing” content.

I’m also curious about Adobe’s API.

What I’m ultimately interested in is whichever of these will let me layer in some basic metadata in the form of descriptions, etc. then retrieve it programatically for different re-presentation.


Coffee Walk (No Coffee, Just Doctors Edition), 2023-01-17
Mt. Scott Medical Clinic
Happy Valley, OR

Routine checkup day for the first time in a while.

A medical clinic waiting area with high ceilings sculpted in a wave pattern and orange vinyl seats.

A doorway in a medical clinic. An orange/brown vinyl chair sits next to it.