Steve Simkins

/now

Partly Sunny 53°FPortland, OR

What I'm up to recently

Last updated: Jun 21st, 2026

Updates

The irresistible urge to buy an old Thinkpad as a backup machine in the soon to be hardware-pocalypse

iykyk

Get in loser

distro-hopping.png

A meme I sent to my buddy Matthias after getting NixOS pilled. Here’s where I’m at so far:

  • I liked the idea of using NixOS for the ability to programmatically render my setup with 100% certainty.

  • Currently my home server runs on Arch (btw) which has been great, but after the massive AUR worm, I’m wondering if something more specific is the better route.

  • One day I’d like to go full time Linux and downgrade my phone to a dumb phone. Will that ever happen? Hard to say, but I kinda want to have a system that will be dirt easy to install on a new machine.

  • I don’t have any spare hardware other than a Raspberry Pi which has been noted not the best way to get started with NixOS, so I’m currently doing some experimenting with VirtualBox.

  • The plan is to recreate my Arch home server setup on this virtual machine as much as possible over the next month or so. It should give me a good idea if I want to continue with this kind of setup or if I should stick to a classic symlink dot files approach. However I will say I’m already having my eyes opened and it is freaking sweet.

Anyway that is partly why I’ve been so quiet. I also started reading The Count of Monte Cristo so maybe see you in a few months lol.

Without books, a society dies

Wallpaper Drop - The Course of Empire

I’ve always enjoyed paintings in some form or another, but it wasn’t until I met my wife that I was introduced to world of art history. Since then it’s been a fascinating subject, and while I’m a complete noob, I love finding paintings that strike a cord with me and learning as much as I can from them. One of those series is The Course of Empire by Thomas Cole.

I highly recommend checking out that link and learning more about them, but in short, its a series of 5 paintings that represent the rise and fall of a civilization. Again, that is a crude and short summary so please go learn more about them for yourself. I’ve enjoyed these so much lately that I had the idea to use them as wallpapers. It just so happens that I use 5 MacOS spaces, so this setup works out great.

CleanShot 2026-06-09 at 21.38.55@2x.png

To make these I downloaded the raw scans of each painting, added them to figma, resize them to 4K resolution, then added a slight matte overlay to help reduce the saturation and brightness. I’m a huge fan of how they turned out!

CleanShot 2026-06-09 at 22.52.37@2x_compressed.jpg

For those interested I’ve provided a zip file you can download with the link below, but you will enjoy them more if you learn the messages they carry!

course-of-empire.zip

Seriously considering making a Neovim config video in the year of our AI overlords 2026

I mean, some people still care about this stuff, right? If thats you then tell me you’re interested!

CleanShot 2026-06-09 at 19.45.03@2x_compressed.jpg

Updated git.stevedylan.dev

kepler-demo-2.png

For quite a while now I’ve been running a Soft Serve instance that mirrors some of my GitHub repos, working as a backup in case GitHub goes down or if for any reason I want to switch to a self hosted setup. While it has been great and I’ve thoroughly enjoyed browsing via ssh (try it now ssh git.stevedylan.dev), I have found myself longing for a web view. So last night I whipped on up.

Kepler is a read-only git web view that works similar to cgit and other tools in this category. All it needs is a few environment variables for where to look at the local git repos and its good to go! Currently running on a $5 VPS from Digital Ocean, this thing is lean and simple. I just love it.

Feel free to check it out with the link below!

git.stevedylan.dev

Hand Crafted Weather

now-weather.png

This weekend I found myself itching to code something, but not with AI. I’ve been slowly trudging through a course where you build HTTP from TCP in Go, which has been good, but lacks the drive that small project brings. I still wanted to do something in Go, and then I remembered a small little feature I wanted to bring to Posts; a little weather badge inspired by Vrypan. It’s a small and rather useless feature, but I like it so ¯_(ツ)_/¯

Overall this was not that complicated; just basic DB operations and API calls, but the act of writing it all out and thinking through each piece was so cathartic. Everything from breaking down the UX, finding the right API, writing the table migrations, all of it just made me slow down and really think through every section that needed updating. I thoroughly enjoyed each piece.

Could AI have done this much faster? Absolutely, but I would have missed out on a relaxing little puzzle to solve. I still have to use AI regularly on the job, but on the weekends, it’s fun to set a little challenge that brings a small piece of life to your website.

For those interested, here are some details on the approach I took:

  • My Posts app works a lot like bearblog, and I wanted the weather to be something like a frontmatter attribute that could be customized or auto-populated via an API request.

  • Went with a pretty basic CSV pattern: {conditions},{temperature},{city},{state}. This made the DB entry a single string, and parsing pretty straight forward.

  • I used api.weather.gov for the cases where the field was not manually entered. While not the most ergonomic, the API is free which I will not complain about. Does take a little parsing to get what I wanted into the CSV value.

  • Since all my Posts data is accessed via API on my /now page, I was able to add another simple attribute and parsing method for icons to build a nice little widget on both individual posts with the attribute, but also the index /now page.

As usual, all the code is open source

Would highly recommend taking some time to build with your hands in the age of fast paced AI. Unplug, slow down, and grow.

Field Notes Pocket

I’ve recently switched back to good old Field Notes as my pocket notebook of choice, however there was one thing I missed from my Travelers Journal: the Kraft paper pocket. It sits on the inside of the cover and lets you store things like small notes, stickers, cards, you name it. I found it really handy, and I wanted something similar to add into my Field Notes. One popular hack is taping an index card to the inside, but I really didn’t like the visual appearance of tape all over the cover. Instead I found a way to use library book card holders, and the result is much more inline with what I was looking for.

DSCF8193_compressed.jpg

It’s really easy to put together; just cut the edge closet to the spine, then on the top layer cut up and to the corner, finally glue it to the inside cover.

Untitled-2026-01-20-2204_compressed.jpg

This was such a happy little discovery and I’m delighted to have these on my Field Notes now!

Bubbles.town

I’m a frequent visitor of Hacker News, but I often find myself looking for more personal blogs. Was deleted to rediscover Bubbles which works exactly like a HN for personal blogs. Would highly recommend it!

The other part of knowing something

In a chapter of Mary Oliver’s Upstream, she recounts a memory of keeping an injured gull alive. Near the end of its life she said the following.

He was, of course, a piece of the sky. His eyes said so. This is not fact; this is the other part of knowing something, when there is no proof, but neither is there any way toward disbelief. Imagine lifting the lid from a jar and finding it filled not with darkness but with light. Bird was like that. Startling, elegant, alive.

A beautiful visual of belief.

RSS for Small Business

Perhaps one of the most frustrating things about leaving social medias like Instagram or Facebook is missing out on small updates from local businesses. For example, my family is planning on visiting our favorite new bookstore, but we don’t know if they’re open due to Memorial Day. Now here’s the breakdown of their online presence:

  • Website/Email - Hosted on Wordpress and has an email newsletter/posts page with all the emails they send. In theory this could work for small updates like the example above, but it could result in quite a bit of spam going to someone’s inbox.

  • Instagram/Facebook - This is where the owner puts the majority of their updates, anything from special hours or new deals. The format makes it easier for them to post a lot without overwhelming someone’s inbox.

I don’t fault them for this approach at all. In the world of small businesses it makes sense; the hustle is real and you gotta meet people where they’re at. With that said, my hope is that more businesses might switch to a simpler and more open format like RSS. Even a platform like sourcefeed could be an option right now. The only downside for the owner is yet another platform to keep track of.

There is a tough balance between trying to meet small businesses where they’re at, while also encouraging small businesses to meet customers where they’re at. With that said, my wife and I have a pretty good relationship with the owner and I might bring it up to see what they think. It does make me wonder if there is still a need for a dedicated app for small business owners to make this a reality.

/ai

After posting my brief thoughts on How to Hate AI I thought it would be appropriate to setup a /ai page on my site to explain some of my philosophy and details around using AI tooling. I like the idea of using it to help spark some dialog and get more conversations going around the state of AI and how humanity moves forward.

Recycle?

Just watched this video and oof

Crazy to see how much we don’t know, and perhaps more terrifying the future that might lay ahead of us. I’m convinced there’s probably nothing more important than finding a sustainable energy source so good that it dismantles the oil industry.

On the fly OPML in Feeds

I’ve recently enjoyed following Terry on his quest to make RSS more accessible through thoughtful products. One of the latest is Sourcefeed, an RSS only publishing platform. You make an RSS feed, and instead of seeing a list of posts on that person’s page, you just get a link to the RSS feed. This way you can write content directly to someone else’s reader as long as they’re following you.

One of the recent updates was an OPML file for all of Sourcefeed’s users. For those who don’t know, OPML is a file format to help transport a list of different RSS feeds you can follow. I really wanted to view some of the posts from these feeds without subscribing to all of them just yet. I already have a feature in Feeds which does something similar where I can add ?url=https://someperson.com/rss.xml to the hosted instance of my feeds app and preview that feed of posts without subscribing directly.

IMG_6820.jpeg

I decided to add the same thing with OPML, although this was a bit more complicated. I needed to fetch the list of feeds, fetch a few posts from each feed, then pipe them into an order list of posts so I could preview them. If the list gets pretty long, then I could be waiting a hot minute before it would be ready due to how many requests my server is making to grab each feed. Thankfully, there’s a pretty sick solution.

Feeds was recently migrated to Go instead of Rust (more on that in a future post), and one cool feature that’s super accessible is Go routines. These enable concurrency for multiple tasks, and the ability to craft how they are completed and managed. In my use case of needing to fetch all the feeds in the OPML file, Go can fetch them all at once and then organize the results. The code looks something like the following.

func previewURLs(ctx context.Context, urls []string, perFeed int, log *slog.Logger) []FeedPreviewItem {
	var wg sync.WaitGroup
	var mu sync.Mutex
	items := []FeedPreviewItem{}
	for _, raw := range urls {
		feedURL := strings.TrimSpace(raw)
		if feedURL == "" {
			continue
		}
		wg.Add(1)
		go func() {
			defer wg.Done()
			res, err := fetchFeed(ctx, feedURL, "", "")
			if err != nil {
				log.Warn("preview fetch failed", "url", feedURL, "err", err)
				return
			}
			feedTitle := res.Title
			local := make([]FeedPreviewItem, 0, len(res.Entries))
			for _, entry := range res.Entries {
				if perFeed > 0 && len(local) >= perFeed {
					break
				}
				author := feedTitle
				if entry.Author != "" && feedTitle != "" {
					author = feedTitle + " - " + entry.Author
				} else if entry.Author != "" {
					author = entry.Author
				}
				local = append(local, FeedPreviewItem{Title: entry.Title, Link: entry.Link, Author: author, Published: entry.PublishedAt})
			}
			mu.Lock()
			items = append(items, local...)
			mu.Unlock()
		}()
	}
	wg.Wait()
	slices.SortFunc(items, func(a, b FeedPreviewItem) int {
		switch {
		case a.Published > b.Published:
			return -1
		case a.Published < b.Published:
			return 1
		default:
			return 0
		}
	})
	return items
}

The result is being able to preview an OPML file with 45 feeds in less than a second; not bad!

Really happy with how this turned out and how these little programs continue to grow. If you’re interested in the source code you can find it here!

Tailscale has Mullvad Exit Nodes

Last night I was wondering if there was a way I could use Mullvad as my privacy VPN while also using Tailscale to connect to other devices. A quick Kagi search later, I found out that Tailscale has a beta where you pay the exact same price as Mullvad and you get their exit nodes integrated directly into your existing Tailscale setup! Seriously this find made my day; one VPN to rule them all!

IMG_6768.jpeg

Gopher vs Crab

Having a bit of an existential crisis (not really). I wrote a bunch of personal apps in Rust as part of a collection called Andromeda. Rust seemed like a good choice at the time; it satisfied the low memory consumption that I wanted on my home server. The feedback loop of the compiler was great.

However, today I started thinking (dangerous stuff), and there are two things I can’t shake:

Readability

Let’s be honest: Rust looks… rough. It’s not intuitive, and I don’t like that. I want to read the code and know what it does. In the moment this is doable, but coming back to it after a while is not great.

Dependencies

Doing anything in Rust usually requires downloading a huge number of crates/dependencies. While Creates ecosystem seems pretty solid, I don’t think it would take much for it to succumb to a supply chain attack. It’s not NPM for sure, but it could be.

All of this has me wondering if Go might be a better choice. It has a much more robust standard library that can handle most of my needs, which will greatly reduce my dependencies. I’ve got way more experience writing go and it just looks so much better.

Just for fun I used Pi + GPT 5.4 to rewrite feeds in Go. The memory consumption was about the same if not lower than the Rust companion. It worked right out of the box. My apps are so simple that I’m less convinced I need Rust for these.

Perhaps, just maybe, I will embrace the Gopher.

Adapted Lenses

Almost a decade ago I was shooting with a Sony A7 with a lens adapter so I could shoot with my film camera lenses. Was limited with manual focus, but tbh it was worth it. The character and sharpness out of the Minolta 50mm/f2 was insane.

8616DF6F-29D9-413E-BE63-AC237A0539F2.jpeg

8A6D3697-18F0-4DFD-A0D3-2AF6E7F0053B.jpeg

Bring Back Trades and Guilds

My wife and I watched on of our favorite YouTubers tonight and their video on Gen Z’s return to traditionalism highlighted how so many people are moving towards buying vintage clothing or furniture due to the rapid enshittificaiton of everyday objects. I thought, how wild would it be if this progress continues and everyone starts making their own stuff instead of buying a crappy version of it? What if the corporations slowly die out, and instead people return to being artisans and gardeners. Your neighbor helps repair your boots in exchange for a new stool. You join a trade guild that mimics early Europe where they set the standard of goods, ensured fair pay, and train new craftsmen. With modern technology in the age of information it would almost seem solar punk.

Of course I’m being over optimistic and I’m not sure I see it going that far, but I do think we will see more people pick up tools and do stuff themselves. We already are with food, clothing, and furniture. If anything it’s refreshing to see more people care about quality.

Social media is still social media

The thesis of this article was pretty interesting: the public majority of social media isn’t toxic. It pushes for a “Community Check” which is a polling system that helps people see what the majority of people think on any given topic.

The problem is that social media is still social media. I kicked all of my social media accounts to the curb last year, but stayed on Bluesky to remained plugged into atproto development. After a few months of only using the following feed, I felt the same way I did on X. There is just something about a feed with likes, replies, and reposts that brings the worst out of all of us. It forces people to take complex issues and reduce them to 320 characters or make a horrible string of posts. Controversy is king. Users aren’t perceived as real people. The format itself is hostile to honest and productive discussion.

At least in my experience, the answer lies with older technology: blogs and RSS feeds.

  • Write however much you want, to a point where it makes you think through your arguments and question yourself
  • Follow only the people you’re interested in
  • If you want to reply to someone, open up your email and think long and hard if it’s worth sending

This slowing down helps us pause, reflect, and act in a way that is far more helpful than any kind of social media. While I appreciate the ambition and motive behind community checks, social media is still social media.

Easel - An Open Source Art Calendar

easel

Over the past few years I’ve grown an appreciation for art history (mostly due to my beautiful wife). I thoroughly enjoy art museums and watching analysis videos of artists and painters. I wanted to bring that side of my interests to my website but I wasn’t sure of the best path forward. I realized that the Art Institute of Chicago had a fantastic, free, and open API that could be used in many different ways. Started out with a “art a day” page on my side that would fetch from the API on each request with a random painting each day, but I decided I wanted to turn it more into a calendar.

Shortly after, Easel was born! It’s a new addition to my Andromeda stack that will fetch a new artwork each day and store the information in the database. You have the option to backfill a set number of days, select certain subjects or mediums, and more. Includes an API which can be accessed through other sites, including my new /art-calendar page. And of course, it has RSS :)

Love slowly adding little pieces of software that make my website just a bit sweeter.

Lowercase D starts with a doughnut

One of the worse curses on my life is having a consistent flow of band names that I’ll never use.

Today’s comes from my son’s language arts book that had quite the slip up:

book

Lowercase D starts with a doughnut

This is just the tip of the iceberg of what enters my head on any given day.

This is my burden to bear.

Built with AI, not by AI

Really loved these lines from a post I just read:

Build with AI.

AI is just a tool.

You need to do the thinking, the instructing, the checking.

It’s a tough topic with loads of nuance, but I think there’s something to be said about intention, purpose, and design behind a project when using AI. If we need to learn to adapt in this new world, let’s not leave behind our humanity like we wade the waters.

Bullets

https://files.stevedylan.dev/bullets-demo.png

Yeah, I made another RSS TUI to add to the heap; sorry.

Problem is I honestly tried a lot of the other solutions out there, but all of them were full blown readers that needed feeds to track and download. What I really wanted was something to parse a raw RSS/Atom XML file. I already have a backend aggregating my feeds, I just want the option to view it in the terminal vs my web browser. The result was Bullets: a minimal RSS/Atom feed browser.

I call it a feed browser because it’s not technically a reader. You can only open links in a web browser, following a philosophy I heavily believe in that posts should be read in their original context. Since it’s just parsing raw URLs, there’s no read/unread tracking. Just a list of posts. That’s exactly how I consume content on my current Feeds app, and now I can just consume the forwarded feed in my terminal.

bullets feeds.stevedylan.dev/feeds.xml

I can also pass in most websites and grab their RSS automatically

bullets news.ycombinator.com

If you’re interested in trying it out yourself check out the repo and the installs page.

Attention is the beginning of devotion

Teach the children. We don’t matter so much, but the children do. Show them daisies and the pale hepatica. Teach them the taste of sassafras and wintergreen. The lives of the blue sailors, mallow, sunbursts, the moccasin flowers. And the frisky ones—inkberry, lamb’s quarters, blueberries. And the aromatic ones—rosemary, oregano. Give them peppermint to put in their pockets as they go to school. Give them the fields and the woods and the possibility of the world salvaged from the lords of profit. Stand them in the stream, head them upstream, rejoice as they learn to love this green space they live in, its sticks and leaves and then the silent, beautiful blossoms.

Attention is the beginning of devotion.

— Mary Oliver, Upstream

One of my favorite things to do with my personal website is hide little Easter eggs for people to find. Since you happen to be viewing this post, you get a direct link to the latest one:

/murmurations

Best enjoyed with sound

Just changed my /edc page to /uses which I’m pretty excited about! Added Hardware/Gear and Software sections in addition to the EDC pieces I had before.

Also updated the /about page to include “About This Site” that goes into some of the details of how my personal website is built and hosted. Check them both out if you’re interested!

Hello from Posts! Over the past day or so I’ve migrated my /now updates to this setup instead of using my PDS. Kinda a long story, but TLDR is simplifying my stack a bit and reducing friction. Will likely be treating this more like a micro blog with short posts. For more info check out posts here.

Anyway just watch The Lorax with my kids for the first time in forever and bawled my eyes out

Unless someone like you cares a whole awful lot, nothing is going to get better. It’s not.

Deep Green

image

It rained last night, after weeks of draught. Rained a bit this morning too, but it was mostly just cool, grey, and damp. During the Spring when all the trees and flowers bloom, it’s these kinds of days that are extra special. The deep green seen everywhere that is hard to describe. You can smell the faint sweetness of mountain flowers. Standing outside you feel a soft breeze and hear nothing but the rustle of trees. It’s these deep green moments that I hold onto dearly, and from time to time, share them.

Captains Log 1776383078

Updates from the bridge:

  • My best friend sent me this and I still can’t get over it intertapes.net

  • I might be getting into a Casio watch hobby/addiction so please send your thoughts and prayers

  • Been enjoying some of the best Spring weather here in Tennessee. Going to miss it in a few months when it turns into a sweltering hell hole.

  • Spending a lot of my spare time on building personal and self hosted software in Rust. More on that soon in a future blog post.

  • Ordered a Parker Jotter. They’ve never peaked my interest before, but after learning more about history and cultural references, I gotta try one.

  • I need more blogs to follow. If you’ve been following mine and haven’t said hi yet, please do!

Until next time 🫡