blog

What I'm thinking about

Welcome to my blog! This is mostly a link blog, where I share links to articles and websites that I would otherwise share with my IRL friends. From time to time, I also write my own posts and longer-form entries. You can also subscribe to this blog in an RSS feed reader.

Here are the topics I tend to cover. → Click on a tag to see all the posts about that topic.


Fine, I'll make my own music player!

originally shared here on

The most compelling use case I see for agentic programming is to enable home-cooked software on a scale like never before. As part of my burnout recovery, I noticed that I've been searching for years for a home-cooked meal I can sink my teeth into and build for myself.

I recently beta tested James Reeves' Spite. It's an exceptional, opinionated music player, targeted to fit James' vision for how he consumes music.

As I was playing around with it, it dawned on me: I could do this.

I have opinions. I have $20 per month. I have a decade of iOS development experience.

So I've decided I'm going to see how far I can push an agent to help me brew up a custom music player.

I'm calling it Lunara.

My requirements

I currently use Plexamp to achieve about 90% of what I would like to do with my music listening... but it's that 10% that I'm going to push on to see how weird I can make this app.

I want to build this in public.

I want to mostly use agentic tools. I'll drop into Xcode and help handle some of the quirks that LLMs can't handle yet, but for the most part, I'm gonna be hands off of the code itself. I will be more concerned about writing clear requirements up front, reviewing the unit tests that the agents will write, and dogfood the hell out of it.

The app will evolve to match my specific listening habits. As I outline in the project readme, I use Plex to manage my library. I've spent an embarrassing amount of time pruning my library, adding tags and high res album art and whatnot. I don't want to replace it; I want a new front end that integrates deeply with it.

I see my digital music garden as a large pool. I like to jump into my library and wade around, often hitting "shuffle" on my thousands of songs until something matches my current mood.

I never plan on releasing this thing to the App Store, by the way. If you want, you can absolutely download the repo and run it against your own Plex library. In fact, one of the dopest things that the agents have done so far is incorporate Plex's PIN login approach. I have a feeling I'll say this a lot, but I absolutely would not have gone that far had I been forced to write all of this myself.

Current progress

I've been obsessed with this idea for the last 24 hours. And in just 24 hours, I've been truly unbelievable progress.

Using gpt-5.2-codex-medium with the Codex app for macOS (since it gives me 2x tokens lol), here are a couple screenshots of what I've built:

This is the main page so far. It's a grid of album art. It's not very impressive, except for the fact that it's loading dynamically from an authenticated Plex session and none of this existed 24 hours ago.

Mobile app library screen showing a grid of music albums with cover art, titles, artists, and years, plus a Sign Out button


Here's the "album details" page. Again, nothing revolutionary yet... but isn't it cool?

Music app album screen showing Michael Jackson ā€œNumber Onesā€ cover art with track list including Don’t Stop ’til You Get Enough, Rock With You, Billie Jean, and Beat It


It also actually plays music from the library! Behold: Taco Grande in all it's glory.

Music app album details screen showing review text, genres Comedy/Spoken and Pop/Rock, rating 9.0, and currently playing track Taco Grande with progress bar

Next steps

I stayed up until midnight last night getting this far, and I'm afraid I'll get sucked into a deeper rabbit hole if I don't sign off for now. So here's my next steps:

  1. Offline media manager. I don't want to be streaming music across the internet if I can help it. I have a beefy drive on my phone, might as well use it.
  2. Queue manager. I want there to be a queue, should be able to insert albums into the bottom of the queue as needed.
  3. Now playing screen. I will mostly get close to what Plexamp does for a v1 but just need something in place for now.
  4. Caching artwork and library metadata. Right now, the app refreshes the library every time I launch the app. I don't update it that often, so I'd like it to do a one-time full sync of everything and then cache that.
  5. Hand-in-hand with that feature, I want to get a selective sync engine going which periodically detects and refreshes the local cache when there are changes remotely.
  6. Incorporate with the lock screen's now playing + remote control functionality.
  7. Get a basic settings screen in place.

Once that's done, I'm going to make this app my daily driver and go from there.

Okay if I don't just go to bed now I'll stay up for another six hours doing this. I haven't had this much fun on a computer in years. Even while writing this blog post I made some tweaks, like adding the track artist to its listing in the show album screen if it differs from the album artist.

Showing the current vol. 1 with track artists in the view


We mourn our craft


šŸ”— a linked post to nolanlawson.com » — originally shared here on

We’ll miss the feeling of holding code in our hands and molding it like clay in the caress of a master sculptor. We’ll miss the sleepless wrangling of some odd bug that eventually relents to the debugger at 2 AM. We’ll miss creating something we feel proud of, something true and right and good. We’ll miss the satisfaction of the artist’s signature at the bottom of the oil painting, the GitHub repo saying ā€œI made this.ā€

I don’t celebrate the new world, but I also don’t resist it. The sun rises, the sun sets, I orbit helplessly around it, and my protests can’t stop it. It doesn’t care; it continues its arc across the sky regardless, moving but unmoved.

If you would like to grieve, I invite you to grieve with me. We are the last of our kind, and those who follow us won’t understand our sorrow. Our craft, as we have practiced it, will end up like some blacksmith’s tool in an archeological dig, a curio for future generations. It cannot be helped, it is the nature of all things to pass to dust, and yet still we can mourn. Now is the time to mourn the passing of our craft.

Last night, I started work on a project I’m calling Lunara. It’s my own personal iOS client for my Plex music library.

I basically rattled off a whole bunch of wishlist items at an LLM and had it organize it into a README.

I decided my goals for the project are two-fold:

  1. Experiment mightily. Use unfamiliar technologies in a domain I am no longer actively being paid to be an expert in.
  2. Use the LLMs to teach me how to work with them.

So far, in perhaps 2 hours of work, I’ve got a shell of an app that can communicate with my Plex library. All it can do right now is list out the albums, but that would’ve taken me a week or two of diligent troubleshooting before having Codex.

These ā€œwoe is my craftā€ posts make sense to me when you view them through the lens of an engineer who truly cares about the code.

But as someone who has never really cared much about the code, these are tools of liberation. I can come up with a hairbrained idea that’ll work specifically for me and prototype something into existence in a couple days.

There’s time to lament what once was. But like my friend Carrie used to say after losing a big race: you have twenty-four hours to feel bad for yourself. Then, you gotta get back up and keep moving forward.

LLMs are here. They enable a completely different form of developer: the homebaked variety.

Did you watch all those AI commericals yesterday during the Super Bowl? Almost all of them featured people doing their normal, boring jobs, but they were able to get computers to do all the things we, as engineers, take for granted.

This does mean us engineers won’t be paid as well as we once were, but that’s okay. Now we can go out and solve more complex problems!

You can either adapt or be relegated to the other myriad forms of artistry that hang their hat on their craft. You can hire a master woodworker to build you a table or you can go to IKEA and buy a cheap one.

Figure out what your problem is first. Then find the right approach (and tools) to solve that problem.

Continue to the full article


My Taste Is Basic. So What?


šŸ”— a linked post to harpersbazaar.com » — originally shared here on

I can’t live in hell and make excuses for ravenously consuming a shitty reality show produced by a person I don’t know personally on a network I am unaffiliated with. You can use ā€œI like it!ā€ (the exclamation point is necessary) any time freaks question a regular-ass thing you enjoy, and it’ll swipe their legs out from under them every single time, and you can stand over their quivering body with your subpar tastes and laugh your face off.

Deploy it whenever you want, then sit back and watch judgmental friends splutter and try to choke out a response, because what people like that really want is to show off how much more cultured and evolved they are than you, and saying ā€œI like it!ā€ robs them of that opportunity.

Continue to the full article


Practice Guide for Computer

originally shared here on

Originally adapted from Ron Miller's Advanced Improv Practice Guide, and discovered at the bottom of jyn's incredible blog post titled "i'm just having fun", which is a must-read.

Before starting your daily practice routine, read and seriously consider the following:

A. DAILY AFFIRMATIONS

  1. How fortunate I am that in this life I am one who has been allowed to create beauty with computer.
  2. It is my responsibility to create peace, beauty, and love with computer.

B. I WILL BE KIND TO MYSELF

  1. IT IS ONLY COMPUTER
  2. No matter my level of development in computer, how good or bad I think I am, it is only computer and I am a beautiful person.
  3. I will not compare myself with my colleagues. If they do computer beautifully, I will enjoy it and be thankful and proud that I live in fellowship with them.
  4. There will always be someone with more abilities in computer than my own as there will be those with less.

C. REASONS TO DO COMPUTER

  1. To contribute to the world's spiritual growth.
  2. To contribute to my own self-discovery and spiritual growth.
  3. To pay homage to all the great practitioners of computer, past and present, who have added beauty to the world.

D. RID YOUR SELF OF THE FOLLOWING REASONS FOR BEING A PRACTITIONER OF COMPUTER

  1. To create self-esteem
  2. To be "hip"
  3. To manipulate
  4. To get rich or famous

The psychology of evil


šŸ”— a linked post to builders.genagorlin.com » — originally shared here on

When we fail to take active responsibility for our life, we tend to feel helpless, which breeds resentment of others—especially those who seem to be doing better than us and to be looking down on us. A passive person is easily hurt and so fixates on, exaggerates, or manufactures grievances. This then creates a felt need to expend energy on destroying perceived threats instead of creating and defending genuine values. This felt need takes the form of an unadmitted motivation that’s possible to all of us, and that we’ve all experienced in moments, but which is fundamentally different from the rational pursuit of values, and which can come to dominate and pervert a soul: the motivation to destroy.

When we see signs of it in our selves, our neighbors, or our nation, we can and need to recognize it for what it is, to isolate and disempower it—and to turn our attention toward building something better.

Continue to the full article


Monocle for macOS


šŸ”— a linked post to heyiam.dk » — originally shared here on

My buddy Paul1 sent me a link to this macOS app a few weeks ago, but I didn’t have a use case for it until yesterday.

I was reading a few different documents relating to a machine learning contract I just started, and I was getting overwhelmed by the mountains of text on my screen.

Monocle is a very simple utility for macOS that blurs out every app window that is not in the foreground. If you want to see everything, you can shake your mouse back and forth2. If you want it blurred again, you do the same shake gesture.

It’s the best $9 I’ve spent on software in years.


  1. Latest blog post was over a year ago?! Come on man, share some of those dope woodworking projects you’ve been working on! šŸ˜… 

  2. Which also triggers one of my favorite macOS features: making your mouse cursor super huge so you can find it on your screen. 

Continue to the full article


The Rise of Sanityware


šŸ”— a linked post to thatshubham.com » — originally shared here on

The most annoying thing about corporate surveillance to me is the arrogance of the prediction mechanisms. These algorithms build a model of me based on my clicks from three years ago and then try to trap me in that loop forever. They show me music they think I'll like, and news they think I'll engage with, and videos they think will enrage me enough to keep me hooked to their platforms. They are actively trying to flatten my personality into something easy to monetize.

As most people I've seen say out loud, "Privacy as a concept is way beyond hiding secrets. A part of it also means preserving your capacity to change. To be surprised. To be inconsistent." If I could tell every human one thing, it would be to actively refuse to be a predictable data point.

Mess up their metrics. In whatever way you are capable of.

Continue to the full article



Prompt caching: 10x cheaper LLM tokens, but how?


šŸ”— a linked post to ngrok.com » — originally shared here on

What's going on in those vast oceans of GPUs that enables providers to give you a 10x discount on input tokens? What are they saving between requests? It's not a case of saving the response and re-using it if the same prompt is sent again, it's easy to verify that this isn't happening through the API. Write a prompt, send it a dozen times, notice that you get different responses each time even when the usage section shows cached input tokens.

Not satisfied with the answers in the vendor documentation, which do a good job of explaining how to use prompt caching but sidestep the question of what is actually being cached, I decided to go deeper. I went down the rabbit hole of how LLMs work until I understood the precise data providers cache, what it's used for, and how it makes everything faster and cheaper for everyone.

After reading the Joan Westenberg article I posted yesterday, I decided I’m going to read more technical articles and focus my attention on them.

This post from the ngrok blog was very helpful in explaining how LLMs work up through the attention phase, which is where prompt caching happens.

It also got me to go down a rabbit hole to remember how matrix multiplication works. I haven’t heard the phrase ā€œdot productā€ since high school.

Continue to the full article


The Discourse is a Distributed Denial-of-Service Attack


šŸ”— a linked post to joanwestenberg.com » — originally shared here on

Every attempt to discuss the problem becomes another piece of content, another take, another entry in the engagement competition that makes the problem worse. I'm aware that this essay is doing exactly that. I'm aware that you, reading this, are spending cognitive resources on yet another analysis of the discourse when you could be spending those resources on something more important. I'm sorry. I'm not sure what else to do.

What I do know is that the feeling of being overwhelmed, of never being able to keep up, of having strong opinions about everything and confident understanding of nothing, is not a personal failing. It's a predictable response to an impossible situation. Your brain is being DDoS'd, and the fact that you're struggling to think clearly under that onslaught is evidence that your brain is working normally. The servers aren't broken. They're overloaded. And until we figure out how to reduce the load or increase the bandwidth, the best any of us can do is recognize what's happening and try, when possible, to step away from the flood long enough to do some actual thinking.

Find some topic you care about. Just one. Resist the temptation to have takes on everything else. Let the discourse rage without you while you spend weeks or months actually understanding something. Read books about it, not takes. Talk to experts, not pundits. Follow the evidence where it leads, even when it's uncomfortable. Change your mind when you find you were wrong. And when you finally have something to say, something you've actually earned through careful thought rather than absorbed from the tribal zeitgeist, say it clearly and then step back.

Continue to the full article