Skip to content

Dispatches

T.J.

Reflection

The post T.J. Came Running is a reflection on that afternoon on my Granddaddy's land and the silence that followed. This song took shape in late 2025, decades after that day, when the grief I still hold had to move through rhyme and meter.

Lyrics

T.J.

The bus brakes hissed on the county tar
Granny sat waiting in that idling car
A '78 Olds, painted midnight blue
Smelling like dust and dried morning dew
We tossed our bags on the back seat
And left downtown for the red-dirt heat
Just an afternoon ride, back to the farm
Before we knew that Granny could do so much harm

     You can pound on the glass till your knuckles go numb
     But the rubber don't care where the power comes from
     He was running on trust, just beating the air
     While she stared at the road like there was nobody there
     It’s a hell of a thing in the rearview pane
     To see heavy blue steel leave a red dirt stain

Crossed the cattle gap, and the suspension groaned
Entering the land that my granddaddy owned
T.J. came running down the long dirt track
With his ears flopped forward and then flying back
Just a happy fat beagle, brown and white
The softest thing running in the afternoon light
He thought he was greeting a friend at the gate
Not a two-ton machine marking his fate

     Repeat Chorus

The thump wasn’t loud, but it shook the frame
And the silence that followed didn't have a name
I looked out the back as the dust settled down
At a patch of red and brown on the clay ground
He was wide open on the homestead road
As I fell next to him

The thump wasn’t loud, but it shook the frame
And the silence that followed didn't have a name
I looked out the back as the dust settled down
At a patch of red and brown on the clay ground
He was wide open on the homestead road
As I fell next to him, under the load
The boy I was died right there in the grit
When the tires kept turning and my world just split

Granddaddy came out with a spade in his hand
Moving like a ghost across the bottomland
He didn't ask questions, he saw what she’d done
Just wiped his forehead in the sinking sun
We buried him deep where the tree line starts
With the sound of that Olds still revving in our hearts
I learned right then what I couldn't unlearn
That the people you love don’t always turn

I stood by the hole
Granddad handled the spade
The dog was broken
Two lives unmade
She went in the kitchen
And the red dirt dried
And a part of me stayed
Where a little soul died

Writer: J. Ryan Johnson (BMI)
Copyright: © 2026 J. Ryan Johnson. All rights reserved.
Phone: +1 (407) 902-5419
Email: hello [at] tenthirtyam [dot] org

Audio Disclaimer

Lyrics: Original | Audio: AI-Generated

I am a songwriter and a musician, but I am not the voice meant to inhabit these verses.

I've used AI to bridge the gap for the concept demos, crafted to serve as blueprints that capture the genre, tone, and weary soul I hear for each song.

They exist as an invitation, offered in the hope that these lyrics will eventually reach the hands of an artist and storyteller who can bring them fully into the light.

Until then, they remain as they were born: quiet reflections on the grit and grace found just north of the county line.

Setting up RDP on Ubuntu 26.04 LTS

I still use RDP when I want a remote desktop on another machine. On Ubuntu 26.04 LTS Desktop (Resolute Raccoon, April 2026) the built-in path is SettingsSystemRemote Desktop, matching what Canonical has documented since 24.04.

The steps below walk through the toggles, ufw, and how to connect with a client.

Procedure

Open Remote Desktop in Settings

  1. Open Settings.
  2. Navigate to System.
  3. Open Remote Desktop.

    Tip

    If you don't see it, click the search control at the top of Settings, type remote, and open the match under System.

    Settings System List with Remote Desktop

Select and Enable a Connection Method

You'll see two tabs that aren't interchangeable.

  • Desktop Sharing: View or control the desktop while you're logged in. Someone joins your live session. Resolution follows your local session, so the client can look a little soft.
  • Remote Login: Connect when the account isn't in use, closer to a headless workstation login. Resolution follows the client window, so it tends to look sharp. If you're already logged in locally, a remote user may get offered the nuclear option to end your session.

    Tip

    Generally, I use the Remote Login method.

  • Select the tab for the path you want.

  • Turn on the main toggle at the top of that tab.

    Tip

    You may need to click Unlock and enter your password before the toggle will stick.

Fast Local Checks, Trusted CI: Pre-commit and GitHub Actions for Go

For small Go projects, it's easy to tell yourself that gofmt, go mod tidy, and golangci-lint are habits, not policy. That usually works right up until a pull request fails because generated files changed, go.sum drifted, or a formatter was only run on one laptop.

The pattern I keep coming back to is simple: define the validation contract once, usually in a Makefile or Taskfile.yml, then let pre-commit provide fast local feedback and GitHub Actions enforce the same expectations for everyone else. Local hooks keep the loop short. CI keeps the rules shared, visible, and hard to accidentally bypass.

This isn't the only way to validate a Go repository, and it isn't always necessary. But for Go projects with generated code, multiple contributors, or public pull requests, it's a very practical baseline.

Dependabot vs. Renovate: Dependency Management on GitHub

Dependabot vs. Renovate Dependabot vs. Renovate

Dependency updates are easy to picture one repo at a time. They get political fast when the count is hundreds or thousands: security response, CI minutes, reviewer attention, repo standards, and how much supply-chain theater your org is willing to run.

Most organizations and users will start with Dependabot on GitHub. It's an obvious choice: first-party, no extra service to stand up. Plenty of teams still reach for Renovate when policy, monorepos, or odd manifests stop fitting Dependabot's mold.

Blunt matrix:

Capability Dependabot Renovate
GitHub integration First-party, tight dependency graph and advisory wiring Strong GitHub support, but you run it as an app, Action, or your own worker
Configuration model Simple repository-local YAML Layered policy model with presets and package rules
Custom dependency extraction Limited to supported ecosystems Strong, especially with custom regex managers
Monorepo handling Good for straightforward layouts Better for large, mixed, policy-heavy monorepos
Pull request grouping Useful but bounded Very granular by manager, package, path, dependency type, and update type
Automerge policy Usually implemented with GitHub Actions and branch protection First-class Renovate policy, still gated by GitHub rules
Security updates Best native GitHub Advisory Database integration More programmable, but integration depends on deployment model
Fleet-scale operations Low operational burden, fewer controls More operational burden, much more control

Out on Highway 84

Reflection

This song isn’t a true history, but it is rooted in a true place and the kind of hunger that only bites when you’re young, reckless, and willing to work.

My brother and I spent our summers hauling watermelons and cantaloupes off our Granddaddy’s farm, stacking them into a trailer hitched to an old Massey that had seen better decades. We’d sit for hours on the shoulder of the road under a hand-painted sign, watching the heat shimmer off the asphalt and dreaming the day away once the heavy lifting was done.

There was a jagged kind of freedom in those afternoons. It was the independence of cash in a pocket and the quiet pride of having something the world actually wanted during in the middle of a long, hot day.

This song takes that truth and stretches it until it’s a little more dangerous, landing somewhere in the haze between a memory and a myth. It’s a nod to a specific kind of freedom that you have to earn with your hands and a tribute to South Georgia in July, where the humidity makes the world feel like it’s liquefying around you and you’re just trying to white-knuckle the things that keep you moving.

Lyrics

OUT ON HIGHWAY 84

Asphalt’s bleeding tar, summer of ‘94
Crossed the dry county line on highway 84
Air’s thick as molasses, smell of diesel and pine
I’m perched on this tailgate, just killing off time

Got a hand-painted sign saying "Sweetest in the State"
Two bucks a sugar-baby, 'fore it’s too late
Cicadas are screaming like a choir in the heat
While that South Georgia sun bakes the soles of my feet

     It’s the Fourth of July and the blacktop’s steaming
     Heat off the hood has the whole highway dreaming
     Got a bed full of melons, green gold and deep red
     And a jar of lightning to keep my soul fed
     Let the law keep rolling, let the flags fly high
     Trading in sugar ‘neath the South Georgia sky

A man in a Caddy rolled through the grit
Kicking up the gravel like it owes him rent
I spat a black seed, looked him dead in the eye
Said, "The dirt gave me fruit; the Lord gave me sky"
He bought a thirty-pounder and left in a swirl
Of red clay and gravel at the edge of the world

     Repeat Chorus

Radio static or a preacher with the news
Talking ‘bout the Lord, get your asses in the pews
Deputy rolling, eyeballing the scene
Tip my tattered hat, Lord my record ain’t clean

     Repeat Chorus

Yeah, the summer of ‘94
Out on Highway 84

Writer: J. Ryan Johnson (BMI)
Copyright: © 2026 J. Ryan Johnson. All rights reserved.
Phone: +1 (407) 902-5419
Email: hello [at] tenthirtyam [dot] org

Audio Disclaimer

Lyrics: Original | Audio: AI-Generated

I am a songwriter and a musician, but I am not the voice meant to inhabit these verses.

I've used AI to bridge the gap for the concept demos, crafted to serve as blueprints that capture the genre, tone, and weary soul I hear for each song.

They exist as an invitation, offered in the hope that these lyrics will eventually reach the hands of an artist and storyteller who can bring them fully into the light.

Until then, they remain as they were born: quiet reflections on the grit and grace found just north of the county line.

Ghostty: The Terminal Emulator That Refuses to Compromise

Ghostty logo

Most terminal emulators ask you to make peace with an awkward tradeoff. You can have something fast but austere, polished but slow, powerful but painfully non-native. Ghostty, created by Mitchell Hashimoto, is interesting because it doesn't merely try to improve one side of that triangle. It tries to make the tradeoff smaller. The result is a terminal that is GPU-accelerated, deeply configurable, standards-aware, and designed to feel like a first-class citizen on the platform it runs on.

At the highest level, Ghostty is a modern terminal emulator for macOS and Linux. That sounds ordinary right up until you look at how it positions itself. The project is explicitly built around three goals:

  • Fast
  • Feature-rich
  • Native

The third goal is where the project gets interesting.

There are plenty of fast terminals. There are plenty of featureful terminals. There are also terminals that feel at home on a specific operating system. Very few try to be genuinely strong in all three categories at once, because that is much harder than slapping a fast renderer on a cross-platform UI toolkit and calling it a day.

Ghostty takes the harder path. On macOS, it uses real Apple frameworks. On Linux, it integrates with GTK4 and the surrounding desktop environment. Underneath those platform-specific shells is a shared Zig core that handles terminal emulation, rendering, and the heavy lifting that makes Ghostty feel so absurdly responsive.

If you spend a good chunk of your day in a shell, an editor, a multiplexer, or a remote session, that combination matters more than it may seem on paper.

GitHub Milestones as Release Payloads

Issues and pull requests accumulate quickly on any active project. Without structure, a repository becomes a flat list of work with no clear sense of what belongs together, what's blocking a release, or how close you're to shipping. Milestones give that structure: lightweight containers that define the payload of a release, track progress automatically, and surface what remains without requiring a separate project board or external tool.

This post covers how milestones work, how to name and manage them, how to operate them through the UI, the GitHub CLI, and the REST API, and how to automate the tedious parts with GitHub Actions. It's opinionated: these are the practices that work in production open source repositories, not a neutral survey of every option.

A milestone is a named container attached to a repository. It holds issues and pull requests, carries an optional description and due date, and displays a live progress bar computed from the ratio of closed to total items. Nothing more. That simplicity is the point.

How to Inspect Code in PyCharm and GoLand

Most developers first encounter JetBrains code inspections as red underlines and yellow warnings inside the editor. That live feedback is the same inspection engine behind Problems, batch runs, and shared profiles, even when the UI says "problem" in places. It's useful, but it isn't the real power move. Instead, learn how to run a deliberate inspection pass across a file, package, module, or whole project before you commit your changes and open a pull request.

That workflow lives in Problems, Project Errors, Code | Inspect Code, scope selection, and inspection profiles. Once you start using this, PyCharm and GoLand stop being fancy editors and become a code quality gate.

Applies Across JetBrains IDEs

My focus here is on PyCharm and GoLand because they're the tools I use most. The same inspection model also shows up across other JetBrains IDEs, though the exact inspection groups, plugins, and file-type support will vary by product and project setup.

By the time a problem reaches CI/CD, you've already paid the context-switch tax:

  • You wrote the code.
  • You staged it.
  • You pushed it.
  • You waited for the pipeline.
  • You reopened the work.

By contrast, when PyCharm or GoLand finds the issue locally, you can usually fix it while the code is still fresh in your head.

That's the value of leaning on inspections end to end. The IDE isn't only marking mistakes in the current file as you type. It can also run structured inspection passes against broader scopes of code and show you the results in one place, grouped, triaged, and ready to fix.

For a lot of Python and Go developers, that second part is the missing piece.

It also does something more subtle over time: It teaches you patterns.

If you keep paying attention to the same warnings, quick fixes, and inspection results, you start to internalize better habits before the IDE has to remind you.