Steve Simkins

/now

What I'm up to recently

Last updated: May 9th, 2026

Updates

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 🫡

Machines

Once, men turned their thinking over to machines in the hope that this would set them free. But that only permitted other men with machines to enslave them. – Dune

Migrating from lazy.nvim to vim.pack

Like many others who are upgrading to Neovim 0.12.0, I decided to give vim.pack a try by following the excellent guide by Evgeni Chasnovski. I did encounter a few bumps that I figured I would document here just in case others find themselves stuck.

  • Symlinks - Bit more of a dummy move on my part, but I wasn’t paying attention to my symlink setup that maps my git controlled repo ~/dotfiles/nvim to ~/.config/nvim and ended up missing some new folders I created. Re-linking helped fixed this, so if you have this kind of setup keep in mind to do this!

  • Multiple Folder Organization - Something I wanted to do originally is replicate the setup I had with lazy where each plugin was in it’s own file. This is possible vim.pack, but it requires using a plugin directory that is adjacent to your init.lua file. I have a slightly different structure where this style didn’t quite fit in, so I stuck with a single file setup instead.

  • Lazy Loading - The guide linked at the beginning has some great tips for how you can lazy load plugins based on different events, so I would highly recommend looking at which plugins don’t need to be loaded immediately or only need to be loaded while in insert mode. I was able to shave an extra 10ms off my startup time!

Overall this resulted in a lean one file config for plugins that is only 117 lines long and has an average startup time of 35ms.

-- ============================================================================
-- Colorscheme (must load at startup)
-- ============================================================================
vim.pack.add({
	"https://github.com/stevedylandev/compline-nvim",
  'https://github.com/echasnovski/mini.nvim',
})
vim.cmd.colorscheme('compline')

-- ============================================================================
-- Mini.nvim — startup modules
-- ============================================================================

local win_config = function()
  local height = math.floor(0.618 * vim.o.lines)
  local width = math.floor(0.618 * vim.o.columns)
  return {
    anchor = 'NW',
    height = height,
    width = width,
    row = math.floor(0.5 * (vim.o.lines - height)),
    col = math.floor(0.5 * (vim.o.columns - width)),
  }
end

require("mini.pick").setup({
  mappings = {
    choose_marked = '<C-y>',
    move_down     = '<C-j>',
    move_up       = '<C-k>',
  },
  window = { config = win_config }
})

vim.api.nvim_set_hl(0, "MiniPickMatchCurrent",
  { bg = vim.g.terminal_color_8
  })

require('mini.icons').setup()
vim.api.nvim_set_hl(0, 'MiniIconsAzure', { fg = vim.g.terminal_color_12 })
vim.api.nvim_set_hl(0, 'MiniIconsBlue', { fg = vim.g.terminal_color_4 })
vim.api.nvim_set_hl(0, 'MiniIconsCyan', { fg = vim.g.terminal_color_6 })
vim.api.nvim_set_hl(0, 'MiniIconsGreen', { fg = vim.g.terminal_color_2 })
vim.api.nvim_set_hl(0, 'MiniIconsGrey', { fg = vim.g.terminal_color_8 })
vim.api.nvim_set_hl(0, 'MiniIconsOrange', { fg = vim.g.terminal_color_3 })
vim.api.nvim_set_hl(0, 'MiniIconsPurple', { fg = vim.g.terminal_color_5 })
vim.api.nvim_set_hl(0, 'MiniIconsRed', { fg = vim.g.terminal_color_1 })
vim.api.nvim_set_hl(0, 'MiniIconsYellow', { fg = vim.g.terminal_color_11 })

require('mini.diff').setup({
  view = {
    style = vim.go.number and 'sign' or 'number',

    signs = {
      add = "+",
      change = "~",
      delete = "-",
      topdelete = "",
      changedelete = "▎",
      untracked = "+"
    },

    priority = 199,
  },
})
require('mini.statusline').setup()
require('mini.extra').setup()

-- ============================================================================
-- Deferred — loads right after startup via vim.schedule()
-- ============================================================================
vim.schedule(function()
  vim.pack.add({
    "https://github.com/christoomey/vim-tmux-navigator",
  })

  require("mini.comment").setup({
    mappings = {
      comment = 'gb',
      comment_visual = 'gb',
      textobject = 'gb'
    }
  })

  require('mini.surround').setup({
    mappings = {
      replace = 'cs', -- Replace surrounding
    },
  })

  require('mini.files').setup({
    mappings = {
      close      = '<ESC>',
      go_in_plus = '<CR>'
    }
  })
end)

-- ============================================================================
-- Lazy — loads on InsertEnter
-- ============================================================================
vim.api.nvim_create_autocmd('InsertEnter', { once = true, callback = function()
  require("mini.completion").setup({
    mappings = {
      scroll_down = '<C-j>',
      scroll_up = '<C-k>',
    },
  })

  local gen_loader = require('mini.snippets').gen_loader
  require('mini.snippets').setup({
    snippets = {
      gen_loader.from_lang(),
    },
  })
  MiniSnippets.start_lsp_server()
end })

All of my dotfiles can be found at github.com/stevedylandev/dotfiles!

A Case for Birding

image

More people should get into bird watching (aka “birding”)

Why

The reasons are pretty simple:

  • Low effort
  • Being outside
  • Relaxing
  • Fun

If you don’t enjoy any of these benefits I’m not sure what to tell you, other than somehow birding isn’t for you.

Get Started

If those benefits did resonate with you, here’s how easy it is to get started:

  1. Go outside
  2. Look at birds

Ok ok, here’s a few more layers that make it more enjoyable.

Reference

Perhaps this should be a requirement, but a good reference helps you greater appreciate what exactly you’re looking at. This could be a classic bird field guide you can get at a bookstore, or the Merlin Bird ID app. Being able to identify birds and the calls or sounds they make is a huge part of bird watching, and necessary for the next step.

Paper and Pen

Get yourself a small notebook and a pen or pencil, then write down the birds you see. Keep the date you saw them, highlight when you saw a new bird for the first time, describe birds you couldn’t identify fully, document the weather and the mood that day, sketch birds you enjoy, the list goes on and on. Over time these become your small books of bird collections, and they’re fun to flip through in the future.

Bird Feeders

If you have the place for one, a bird feeder can be one of the best investments you can make. Placing them in easy to view locations lets you watch birds often, making it easier to get familiar with the different kinds, their migration patterns, etc. Definitely get a bird feeder if you can!

Optics

Saved for last due to how expensive they can be. Optics like binoculars are not required, but they sure do step up the game. As you start looking for harder to find birds, optics will help you catch some that stay way too high or distant for your eyes. Even at closer distances they’re fun to use as you get to enjoy birds more.

Small Things in Dark Times

It’s no secret that we’re going through a rough patch. Fear and anxiety are on the doorstep of many. We get sucked into endless news loops, people on platforms saying our jobs will be taken by AI in six months, all while bombs drop and the price of food and gas climb. Despite feeling hopeless, you know what you can do? Put down the phone, step outside, and look at a bird.

The horrible things of this world won’t disappear, your problems don’t go away, however I wouldn’t label this break as an escape either. Humans aren’t designed to bear the weight of everything happening outside of their control. You can only do so much, and at least in my opinion, you’re meant to bear some of it in the context of time in nature and with community.

You can’t solve every problem, but you can step outside, breath some fresh air, and cast your gaze upon a Yellow Rumped Warbler. When it flies away, you’re left feeling a bit lighter, ready to take another day standing tall.

Go look at a bird.

Captains Log 1774231082

Updates from the bridge:

  • Been meaning to take more photos as Spring has started, added some of them to steve.photo

  • Did a lot of experimenting with keystroke dynamics as a way to authenticate human written content, but unfortunately I don’t think it will work out in the end. There were too many practical holes, like someone could just type out by hand what an AI created. Originally I was thinking it could be helpful for areas like education, to help keep the discipline of writing alive. Now I’m coming to terms that there’s not a lot we can do to stop people from using AI in these applications. Rather, time is better spent showing people why writing is a discipline that should be respected.

  • Had a small hiatus from my progress in the Rust book but plan to get back into it this week. I will not give up this time lol

  • Wanted to track my tea shipments, so I built something I’ve wanted for a long time: a package tracker.

  • Tea I’ve been trying has been all over the place, but of course the pu’er has been probably some of my favorite. Second might be some oolong and black teas.

  • Will probably do a blog post on kagi.com soon; known about them forever but just now really seeing the value they bring to the ecosystem. Great stuff.

Until next time 🫡

Native Treesitter in Neovim

As fate would have it, I make a blog post about returning to Neovim, and for some reason an update to nvim-treesitter breaks my ability to see syntax highlighting for nushell. A very small annoyance, but enough for me to replace it. I remember seeing this awesome post by boltless so I knew it was possible. Turned out to be super simple!

First I needed something to install the parsers. I ended up following boltless’ recommendation of using luarocks and making a small script to automate installing necessary parsers:

def tsi [parser: string] {
  let tree = $"($env.HOME)/.local/share/nvim/site"
  luarocks --lua-version=5.1 $"--tree=($tree)" install $"tree-sitter-($parser)"
}

Installing them is simple as tsi rust or whichever language I need to grab. Next I needed to add these parsers to my packpath, so I added a new treesitter.lua to core with the following contents.

-- Native treesitter parsers installed via luarocks
local rocks_path = vim.fn.stdpath("data") .. "/site/lib/luarocks/rocks-5.1"
for _, parser_dir in ipairs(vim.fn.glob(rocks_path .. "/tree-sitter-*/*/", true, true)) do
  vim.opt.runtimepath:prepend(parser_dir)
end

One of the last steps is an autocmd to start up tree sitter with the open buffer.

vim.api.nvim_create_autocmd("FileType", {
    callback = function(ev)
        pcall(vim.treesitter.start, ev.buf)
    end
})

A nice small bonus: adding the following to treesitter.lua lets me use folds with za.

vim.o.foldenable = true
vim.o.foldlevel = 99
vim.o.foldmethod = "expr"
vim.o.foldexpr = "v:lua.vim.treesitter.foldexpr()"

Now everything works how I expect it to, and I’ve learned more about how treesitter works! Would also highly recommend this post that goes way deeper into the subject. Nothing beats the rush of solving a small problem to make my dev env faster and smoother!

Keystroke Dynamics: My New Rabbit Hole

Did a dangerous thing today and started thinking too much. Now I have an idea that I can’t get out of my head.

My friend @iammatthias shared theamdash.com with me today, and while it came out last year, this was my first time seeing it. It’s been hard to tell if the idea behind am- was a joke, an artistic expression, an attempt at a solution to a real problem, or perhaps all of the above. Regardless, it got me thinking about what a real solution to determining AI vs Human created content in a digital world.

A lot of the initial ideas that came to mind just weren’t good enough. There’s so much AI can do to imitate what a person creates, and we’ve all experienced it. Then I started to think less about the end product, and more about the process. AI will spit something out in a few seconds, while human writing takes much more time and thought. That’s when my sites turned to Keystroke Dynamics.

When a person writes, there are natural pauses, breaks, or rhythms on the keyboard. These patterns actually become a source of identification, or in the field of keystroke dynamics, authentication. What if this was applied to provenance? What if there was a standard + essential libraries that make it possible to prove someone’s identity through their content on any platform?

Down the rabbit hole we go

Captains Log 1772509466

Some long overdue updates from the bridge:

  • Just finished Piranesi by Susanna Clarke; would highly recommend.

  • Started getting into loose leaf tea, specifically Chinese tea varieties thanks to a new local tea shop and YouTube. Current favorite is a Lapsang that smells like a campfire 🔥

  • Lots of thoughts after publishing my last blog post on the topics of AI and programming. Might share more later.

  • Got to watch a pair of Pileated Woodpeckers for about 15 mins straight this weekend and it was delightful. Crazy lookin birds.

  • Displeased to see Zed’s TOC changes today, so much so I might be making a voyage back to Neovim. Feel like there’s some Zed features I could either replicate or rebuild if I need to.

  • Slowly making it further through the Rust book, made it further than I have before 😅 Determined to finish it and build some projects without AI assisted coding. Trying to find that balance and keep my mind/skills sharp. Will also likely write more about that later.

Until next time 🫡

Sipp

cover

I rewrote Sipp in Rust for the following reasons:

  • Memes
  • Learning
  • Fun

As the project went on, the rabbit hole became deeper and deeper. The result is a single binary around ~13MB that runs a web server / site, CLI, and TUI. It’s everything I’ve wanted in a code sharing tool, and perhaps more. Learned a bunch while working on this and I think I might be rust pilled now. The server only takes anywhere from 2MB to 10MB of ram to run, which is much more minimal than the previous Bun version that was around 60MB. The tooling and DX building this was insane, and I’m definitely interested to see what else I can build with it.

Check out the repo here, and after installing it you can try running the TUI with the hosted instance:

sipp -r https://sipp.so

Cryptography Focused

Over the past few months I’ve been toying with what I should spend my free time on. My family always comes first, and then my day job. After that I generally have some left over curiosity and a desire to solve problems, hence my numerous side projects. Lately I’ve felt the weight of needing to solve bigger issues that have larger impact. I think a lot of my work on blogs, rss, and publishing on ATProto have some small value towards maintaining free speech and becoming less chronically online, but my sights are now turning towards cryptography.

The right to privacy has come under attack more than ever these days, and I feel compelled to put up a fight. I’m certainly not qualified to be a researcher, but I do enjoy piecing together preexisting parts of a system. Even if I don’t end up contributing anything, I enjoy learning about it, and I’ve got nothing else to do ¯_(ツ)_/¯

Will of course write about anything I end up working on as time goes on.

Pencils

image

I’ve been really into stationary lately, and my latest exploration is pencils. Current battle is between the Palomino Blackwing 602 and the Musgrave Pencil Company Tennessee Red.

The Blackwings are pretty well known and you can find a bunch of stuff online about them, so I won’t linger on them too long. With my testing so far they definitely live up to the hype (at least in my opinion).

The Tennessee Reds on the other hand seem to fly under the radar. The company is based out of Shelbyville TN (not too far from where I live) and they’re made out of Tennessee Red Cedar. The result is a pretty sturdy pencil that smells amazing when you sharpen it. The graphite looks similar to the Blackwings but I’m not sure I would say they write as well.

There is something wonderful about the tactile feel of the graphite on some good paper, the sound, and the motion of sharpening it as it dulls. I can’t say it will replace my daily writing pens, but I do plan to use them at my desk for meetings and perhaps for sketching if I get back into it.

Thanks for coming to my pencil talk 🤓

The Strangers Case

Grant them removed, and grant that this your noise
Hath chid down all the majesty of England;
Imagine that you see the wretched strangers,
Their babies at their backs and their poor luggage,
Plodding to the ports and coasts for transportation,
And that you sit as kings in your desires,
Authority quite silent by your brawl,
And you in ruff of your opinions clothed;
What had you got? I’ll tell you: you had taught
How insolence and strong hand should prevail,
How order should be quelled; and by this pattern

Not one of you should live an agèd man,

For other ruffians, as their fancies wrought,

With self same hand, self reasons, and self right,

Would shark on you, and men like ravenous fishes Would feed on one another. […] Say now the king,
As he is clement if th’offender mourn,
Should so much come too short of your great trespass
As but to banish you, whither would you go?

What country, by the nature of your error,

Should give you harbor? Go you to France or Flanders,

To any German province, to Spain or Portugal,

Nay, anywhere that not adheres to England,

Why, you must needs be strangers: would you be pleased

To find a nation of such barbarous temper,
That, breaking out in hideous violence,

Would not afford you an abode on earth,

Whet their detested knives against your throats,

Spurn you like dogs, and like as if that God

Owed not nor made not you, nor that the elements

Were not all appropriate to your comforts,

But chartered unto them, what would you think

To be thus used? This is the strangers’ case;

And this your mountainish inhumanity.

– William Shakespeare, Sir Thomas More

Ian McKellen Recital