Thomas Cannon

Too Many Moves

Oh god, I just did the math and I’ve done at least 14 major infrastructure overhauls or moves in my career:

  • Rackspace single server
  • Rackspace fleet
  • Rackspace region swap
  • Ruby 1.8 => 2 fleet upgrade
  • Rackspace to Digital Ocean
  • Digital Ocean Ubuntu upgrade across fleet
  • Postgres failover setup
  • Postgres major version upgrade (9=>15 IIRC)
  • Rails 2.3 => 7
  • Heroku to Digital Ocean
  • Heroku to Render
  • Nightmare AWS beanstalk hellscape (literally inaccessible! Couldn’t SSH in for the life of me) to Render + Crunchy Bridge
  • Hetzner to Heroku
  • Heroku to FlightControl

I think I need to go lie down now

She doesn’t even know about AWS Managed IAM Identity Center SSO™️ or Heroku a Salesforce Company

A white dog, unbothered by the weight and inanity of technology, basking in the early morning sun

The truly astounding part of WWDC is that they made my nostalgic for iOS 7.0’s readability.

What are we doing here, y’all? This isn’t even 101-level design; I saw better stuff on boingboing & Envato’s design roundup listicles in 2010

An impressively unreadable notification banner for a traffic update of all things, in the year of our lord 2025, by the richest company in the world.

Figured out a neat way to quickly scaffold minimal test classes (great for concern testing):

require "test_helper"

class MyConcernTest < ActiveSupport::TestCase
  TestClass = Data.define(:user, :other_property) do
    include MyConcern
  end

  # ...
end

New category in Zotero unlocked

A screenshot from Zotero, a research collection app, with a sub collection titled 'All My Friends Hate Tailwind'

Friendship with Scrivener over

So I just had a ✨BAD TIME✨ with Scrivener, so I’m back to square 0. The editor is buggy and has some real jank, but I was willing to work around that until I was working on an image-heavy travel log (~3K words), and it hosed the exports in like…4 different ways:

  • External links were stripped out until I checked a box
  • Images with the same filename were silently overwritten
  • Sometimes the export would pick a totally incorrect image
  • The formatting for figure captioning was inconsistent

Not to mention that I was never a huge fan of its exporting toolkit. So, 2 after wasting 2 hours, I’m moving on.

I think I’m trying to get back to basics and avoid cramming everything into a single app, or always needing a network connection. A thought I had this morning was remembering that the filesystem is just another database.

This, of course, presupposes a few things:

  • Accepting that iPad & iOS don’t have good filesystem management
  • Because of the limitations of mobile devices, you still want to be “at the press” to publish anything of value
  • If you’re on the go, you’re mainly just trying to hammer out an idea while waiting in line or on the kids/pets/etc

Chewing on it more, this is the line of thinking I’m going to try out:

We have forgotten The Filesystem

Because we’ve neglected the filesystem for so long, we’ve forgotten how useful it is for organization. Plus, it has so many things backed in (quick previews, tagging, cross-references via symlinks, naming conventions). Scrivener’s sidebar is essentially a version of a filesystem, but proved to be too buggy

You need distinct tools for each phase of the writing process

These are all actually distinct tasks with different needs:

  • Collecting info: needs to not interrupt your current context/browsing
  • Drafting: You need to be able to dump words/images into a drafts folder, to pick up the pieces later
  • Editing: Wrangling all the disparate thoughts into something cohesive, which is where text editors/word processors come into play
  • Typesetting & publishing: Putting something “to press” is hard work that requires a computer of some sort (whether desktop or web)

As long as I have editors that get words into the appropriate places in a filesystem, drafting is workable.

Editing is about cleaning up those artifacts.

Typesetting is a bit trickier, the only universal format I see is HTML (However you get there, whether it’s original text in Markdown, or a Word doc exported as a scrubbed HTML).

You know you’re a programmer when you try out Obsidian

I’ve resisted it for years because TBH I didn’t want yet another tool to tinker with or subscription, but Obsidian looks like It’s the only tool that checks (most) of the boxes:

  • Since it’s Local First and relies on the filesystem, I get the benefits of the foundations of proper OSes
  • It lets me drop stuff whenever for drafting, then clean it up later
  • I can use whatever I want for the editing phase; such as iA Writer
  • Since it’s Markdown, I can export to HTML for the final typesetting. And if I truly wanted to punish myself, I could write a plugin to streamline the exporting process to keep things in Obsidian
  • For complex open-source collaboration like the (eventual) Practical Framework docs, I can use a git repo. This would have never been possible with Scrivener.

I did finally bite the bullet for Obsidian Sync, primarily to make it easier for the iOS/iPad apps to act as a draft pad.

Zotero for collecting info

Previously, I’ve been using a Notion DB to dump interesting links into, but it’s suffered the same fate as every other Notion DB.

I wanted to find a focused, cross-platform tool for collecting research info (which was one of the core appeals of Scrivener for me). Zotero is promising, being built specifically for academic research (so it has a level of rigor + organizational structure that I would have had to build out myself), and also supports common citation formats (something I want to get better at doing!)

Will report back!

I’ll report back, this is all very new (less than 24 hours), but I feel like the foundations are solid.

Also: don’t recommend any plugins to me! 😝 The last thing I need is to endlessly tinker; the most important thing is to write

Lookit this cute lil fella! qwerasd205.github.io/Annotatio…

I think that’s what I’m gonna use as the monospace font in Practical Computer’s design system

I picked a hell of a time to start my once a decade reread of Jurassic Park. Which, unsurprisingly, was the first “adult” book I read & checked out from my local library at like 10-11 years old

I know that the economy is actively in freefall right now, but I am glad that after 4-6 months of chewing on the problem; I’ve written an 8.2K word guide on overhauling the view layer for a Rails app. It should go live by the end of the week, still getting reviews on the first draft.

A screenshot of the stats for an upcoming guide in Scrivener. 8,334 words; approximately 30 minutes reading time A colorful illustration of a lab, with the text “Revamping an entire UI without freezing development” on a chalkboard in the center on the left: Buffy, a white dog, is looking at a bug under a microscope. A vest on Buffy reads “bug inspector.” To the right, a man frantically tries to explain a technical concept to a herding dog, Kira. There is a mishmash of technical ideas strewn about the cork board next to the man (who is holding a cigarette), most of which is hastily scribbled in.

I’ve figured out the atomic core of my next music project; which will be a full LP. I’m still hammering out the details, but I’m excited for its potential.

Just finished Citizen Sleeper 2 and what a beautifully profound work of art

I just glanced at someone’s screen to see what I think was a Canva doc open, with “GROWTH TARGETS” in Office 98 Word Art.

This feels on par with the infamous “BUSINESS” whiteboard scrawl

Never change, dynamic ad insertion

Later this week I’m going to recap this talk in a blog post to cement it in my mind, but it’s extremely good and you should go watch it youtu.be/vLzYhaMtp…

Today I learned that legacy computational chemistry can sometimes be written in FORTRAN

1 month of Musora

After a long stint with Melodics, researching alternatives, and trying out Yousician, I ultimately settled on Musora; which is a vastly different service! It’s not a gamified app, but instead an immense library of learning resources.

The main reasons it won out for me are:

Teaching a man to fish

The emphasis on learning methodology; notably unlocking the skills for improv, reading theory, and mechanical skills.

Musora not being app-based a-la Rock Band (which I love and was a foundational part of my musical journey) forces you to actually learn the pieces and skills to work outside the app. It’s a subtle but importance difference!

If you’re playing a game, you’re learning the skills to complete levels (songs/lessons, in this case). But if it’s a traditional class structure with assignments done “at home”, you’re learning the skills to perform, read music, improv. And you’re building the systems for how you develop those skills.

In essence, along with the nuts & bolts, Musora subtly makes you decide how you want to approach music. How much time & effort you devote to it; what your goals are; where you’re going to focus.

The breadth of material!

There’s quite literally years of solid, valuable material to learn from. The price/value proposition is ridiculous. And not just songs or the guided course, small mini-lessons about techniques, physiology to improve posture and avoid pain, style lessons for different levels of experience.

Their songs approach works better than covers

Musora takes a great approach for building out a song library: they embed YouTube videos with backing-tracks alongside digital sheet music, with custom playback & practice controls.

This means that rather than the sheer scaling problems Melodics, Yousician, etc. face of filling out their libraries; Musora has less work and cost by transcribing their music and relying on the real tracks. It makes practice much more dynamic and fun; and again, you’re learning the skills to read sheet music & practice through it for contemporary music!

Control is such an uneven game, but I love it. The random spawns, checkpointing, and overall progression system are a mess, making it sections randomly infuriating; but then you get a random superpower and it all becomes worth it

Y’all, I think Spotify Wrapped is done, as a concept

A screenshot of an email, with the subject: “Your 2024 in Review: What Type of Loom Personality Are You?”

Turned this on mainly to have background noise that wasn’t football so Kira wouldn’t get riled up by the dogs next door, but turns out it’s just a great documentary youtu.be/yjpYzFtxf…

14-year-old-me is chuckling

A screenshot of the GitHub app, for Little CRM, with 1,337 commits

Y’all, I can’t believe this is finally happening.

Little CRM’s initial alpha is finally live!

blog.practical.computer/2024/11/1…

Little CRM’s early alpha is almost ready! The plan!:

  1. Get this alpha ready to ship
  2. Write a blog post explaining what’s in the early alpha currently, and how it works

That way folks can see what the ethos is, and talk about signing up! So far the reaction has been excitement

The form for adding someone important to your account is coming along! I've been trying hard to add realistic, fun placeholder values. Hopefully it'll guide to less transactional convos. I want people to actually think about the people most important to their endeavors, and view them as people first & foremost, not a resource to extract

A screenshot of a prototype of the People form for Little CRM, showing how handles and basic contact info can be saved. Titles & placeholders help ground it, such as: Grace Hopper as the placeholder name,  “So howʼd you meet?” as a notes section, realistic placeholder values for notes (such as "They were at a neighborhood cleanup and we talked about the music we've been listening to")

Look at this astounding header illustration that Wren made!! I’m floored, it’s perfect

One of the thing I’ve prioritized with Practical Computer is making sure things look great. It’s important, because we have these displays that can truly show off beautiful work. That polish & care pushes you to make better stuff.

That’s why I work with Wren, who consistently knocks it out of the park! Truly some of the best investments my business has made.

A colorful illustration of a lab, with the text “Technical Writeup” on a chalkboard in the center on the left: Buffy, a white dog, is looking at a bug under a microscope. A vest on Buffy reads “bug inspector.” To the right, a man frantically tries to explain a technical concept to a herding dog, Kira. There is a mishmash of technical ideas strewn about the cork board next to the man (who is holding a cigarette), most of which is hastily scribbled in.

More proof of CableReady’s resilience

Mrujs and CableReady are so great together. After using Turbo 7 on both serious and hobby projects since it was released, I’m more and more finding out that it creates a lot more problems than it solves for me. Especially frames, which encourages bad controllers (imo), but drive too.

I haven’t used streams much, but from what I can gather I can recreate the features I want more elegantly with CableReady. I haven’t tried Turbo 8, but I don’t see the point as long as this combo exists. Mrujs has all I want, and the CableCar 🚡 integration is chef’s kiss.”

I saw this and dropped my networking stack guide, obviously.

thomascannon.me/guides/fi…

It’s funny, I’d researched if CableReady and mrujs would make a good stack for my project, and I’d just started when your post happened to came along the same day, as if by divine providence. I took the fact that someone who, unlike me, seems to know what the hell he’s doing chose the same stack as a sign that I was on the right track. I’ve read your post twice since then, thanks so much for writing it! ❤️