Brandon Rohrer

@brandonrohrer.com

Robotics and Reinforcement Learning tinkerer. brandonrohrer.org Wrangler of algorithms. Eater of bread. Sipper of whisky. Reports to a Shih Tzu.

There are several command line incantations that I have had to look up at least a dozen times. Finding a string in Python files grep -r --include \*.py 'string I am looking for' . Find files by name find . -name '*partial_name*'

Heads up ruff users - with the release of 0.16.0 this week the number of default rules went up from 59 to to 413. This means that if you're ruff version auto updates, your CI pipelines might start failing on you all of a sudden.

Simon Willison@simonwillison.net · 2w ago

Ruff 0.16.0 - Astral's fast Python linter - came out a few days ago and increased the number of default-enabled rules from 59 to 413, which highlighted all sorts of problems across my projects (1618 in sqlite-utils alone) simonwillison.net/2026/Jul/25/...

Living small is part of the artisanal process. The constraints are not a barrier to the final product. They are an important shaping force. You can't come in at the end and magically shrink it. You can only build small if you start small and work with what you've got as you go. brandonrohrer.org

Book Project: Artisanal Language Models
Chapter 1: Artisanal Language Models
Chapter 2: Build a custom tokenizer
Chapter 3: Define a task and write evals
Chapter 4: Build an end-to-end prototype
Chapter 5: ALM v2, First-order Markov model
Chapter 6: ALM v3, Second-order Markov model
Chapter 7: ALM v6, Sparse second-order Markov model
Chapter 8: ALM v14, The Search for Data

The earliest Large Language Models were Markov models (a.k.a. Markov chains). They are like LLMs with a context window of 1 token. As you might guess, they are OK at some things but not awesome.

Look, there’s only so much I can do. Any effort I put into my appearance comes out of something else. I’ve decided to adopt the practice of looksminning. I now identify as an erudite bog-goblin.

Coding Hobgoblins Consistent style makes code easier to read and helps bugs to be more visible. I aim to keep my code mostly consistent and mostly in line with the recommendations of PEP 8, but if I have good reason to deviate I don't hesitate.

in fantasy stories I've seen a recurring theme of naming things. A true name of a thing has great power and is inconveniently long. Ents in Lord of the Rings. Wolves in Wheel of Time. Sorcery in A Wizard of Earthsea. This is how I like to name my Python variables.