Sign in

Paul Butler

@paulbutler.org
3.7K followers 686 following 266 posts

I build jamsocket.com and write digest.browsertech.com

PostsRepliesMedia
Paul Butler @paulbutler.org · 31/12/2025
It sucks how a few bad cults give all cults a bad name.
080
Reposted by Paul Butler
Anya Prosvetova @anyalitica.dev · 31/12/2025
A #Genuary design becomes a Xmas card. These cards are now on the way to participants of #ptpx25! Thank you @paulbutler.org for organising it! Happy New Year! #ptpx #creativecoding #p5js
0122
Paul Butler @paulbutler.org · 13/12/2025
6th annual #ptpx by country 🇺🇸 USA — 34 🇩🇪 Germany — 16 🇫🇷 France — 13 🇨🇦 Canada — 5 🇳🇱 Netherlands — 5 🇬🇧 United Kingdom — 3 🇨🇭 Switzerland — 3 🇮🇹 Italy — 3 🇵🇹 Portugal — 2 🇪🇸 Spain — 2 🇦🇹 Austria — 1 🇫🇮 Finland — 1 🇧🇪 Belgium — 1 🇹🇭 Thailand — 1 🇮🇪 Ireland — 1 🇳🇿 New Zealand — 1 🇸🇪 Sweden — 1 🇸🇮 Slovenia — 1
070
Reposted by Paul Butler
Local-First Conf @localfirstconf.com · 18/06/2025
Watch @paulbutler.org talk about CRDTs as a temporal data structure. youtu.be/b4fDzmNE50U?...
youtu.be
Paul Butler - CRDTs as a temporal data structure
It's often useful in applications to have a historic view of data (e.g. "revision history" in GDocs, or the commit log in Git). Storing this efficiently requ...
071
Paul Butler @paulbutler.org · 27/05/2025
Thanks! I think this is the one.
A slide contrasting “filesystem” and “cloud” apps. Filesystem apps delegate version management, concurrent change resolution, and access control to the user, while cloud apps deal with them in the application.
151
Reposted by Paul Butler
Local-First Conf @localfirstconf.com · 27/05/2025
"CRDTs as a temporal data structure" @paulbutler.org gave a brilliant talk, explaining how to use the Yjs CRDT toolkit to store temporal data.
192
Paul Butler @paulbutler.org · 11/05/2025
When I was getting my BMath people would ask “oh, what will you do with that, teach?” and I’m jealous of people taking math now who can come back with “yeah that or pope”.
Born in Chicago, Illinois, in 1955, Pope Leo XIV graduated from Villanova with a bachelor's degree in mathematics in 1977. The pope is a member of the Augustinian religious order and was elected the top leader of the order twice.
0393
Paul Butler @paulbutler.org · 07/05/2025
My pet peeve is when people use “misnomer” in a way that is in itself a misnomer.
030
Paul Butler @paulbutler.org · 01/05/2025
I love the idea of adding a default template, might try that!
020
Paul Butler @paulbutler.org · 01/05/2025
Claude Code now supports resuming sessions, which means that session logs (including tool/llm calls) are stored locally. My curiosity got to me, I figured out the format and wrote a CLI tool to dump specific conversations github.com/paulgb/claud...
github.com
GitHub - paulgb/claude-viewer: A tiny Rust CLI app to dump the full tool call history of a Claude Code session.
A tiny Rust CLI app to dump the full tool call history of a Claude Code session. - paulgb/claude-viewer
0163
Paul Butler @paulbutler.org · 30/04/2025
It just dynamically reads the date, touches the file in case it doesn't exist, and opens it up. It also opens the directory as the workspace so that I can see past notes in the sidebar.
070
Paul Butler @paulbutler.org · 30/04/2025
I replaced all my fancy notetaking tools with a vibecoded bash script called `note` that opens ~/notes/{date}.md in an editor, and it's been great.
7320
Paul Butler @paulbutler.org · 28/04/2025
Yeah, I want all the configuration to live in the repo.
000
Paul Butler @paulbutler.org · 28/04/2025
Ideally the system would be able to recognize if files changed since the last build, I already do this for e.g. vercel sites in a monorepo and it works fine.
110
Paul Butler @paulbutler.org · 28/04/2025
Coolify looks good but seems to be aimed more for public sites so leaves auth to the application layer? I'm hoping to have one server manage deployment, hosting, and auth.
200
Paul Butler @paulbutler.org · 28/04/2025
frontend + backend ideally, but even just static apps (with a build step) would work. one password across all, or else oauth with approved users on a per-app basis subdomains under the same domain would be ideal, i.e. repo/foo would map to foo.mydomain .com
100
Paul Butler @paulbutler.org · 28/04/2025
Now that it's so easy to create software for personal use, I want a way to have a bunch of personal mini apps in a monorepo and automatically deploys all of them behind basic password auth. Before I build it, does this exist? Ideally something I can self-host on a VPS.
3111
Paul Butler @paulbutler.org · 25/04/2025
This is a talk I've wanted to give for a while, and I can't think of a better place to give it!
080
Reposted by Paul Butler
Chris @chris.blue · 22/04/2025
Today marks SlateDB’s one year anniversary! It’s been a lot of fun. Thanks to @rohanpd.bsky.social @flaneur2024.bsky.social @almog.ai @vigneshc.bsky.social @paulbutler.org Jason Gustafson, David Moravek, and many others for joining the project. 😀
slatedb.io
SlateDB - An embedded storage engine built on object storage | SlateDB
Description will go into a meta tag in <head />
0165
Paul Butler @paulbutler.org · 14/04/2025
I met a couple who introduced themselves as engineers but instead of writing JavaScript they drive trains.
190
Paul Butler @paulbutler.org · 09/04/2025
The author Jon Ronson has done a few limited series in podcast form that are top notch.
010
Reposted by Paul Butler
e.w. niedermeyer @niedermeyer.online · 09/04/2025
markets soar as investors realize that mommy didn't actually disappear, she was just hiding behind her hands
75125942321
Paul Butler @paulbutler.org · 07/04/2025
And certainly no side-effects!
010
Paul Butler @paulbutler.org · 07/04/2025
Years in, WebAssembly on the server remains incredibly secure because you still can't do anything with it.
3577
Paul Butler @paulbutler.org · 04/04/2025
Nice write up too! The dots came out nicely, I’m surprised not to see artifacts of the spiral. www.rupertbrooks.ca/SketchyMachi...
rupertbrooks.ca
Face and Antiface, a postcard for PTPX24
PTPX is a roughly yearly plotter postcard exchange which is always a lot of fun to participate in. I’ve been wanting to. mix neural and classical algorithmic approaches for a while and took this as an...
010
Paul Butler @paulbutler.org · 04/04/2025
Always nice getting surprise #ptpx mail! Bottom left is @verytiredrobot.bsky.social’s exploration of latent space of a facial autoencoder. Top and right, Daniel Catt’s work using a stamp with a plotter, and a nice photo booklet of the process!
Two post cards, one in the left has two faces plotted in a pointillist style, and the one on the right has variations of the word “FUCK” stamped in different colors. A booklet on top shows a picture of the stamping process.
171
Paul Butler @paulbutler.org · 02/04/2025
Never ask a barber if you need a haircut or a foundation model company how long your tool call descriptions should be.
020
Paul Butler @paulbutler.org · 02/04/2025
Very speculative question for people smarter than me: if we ran 100 replays of humanity from 1955 or so, in many is there a manned moon landing before y2k? Thinking about failure scenarios like a series of failures dampening political support, or global events destroying the necessary conditions.
160
Reposted by Paul Butler
Jake Lazaroff @jakelazaroff.com · 25/03/2025
are there really so many people expensing onlyfans that it needs to be in the autocomplete dropdown 🫣
Reimbursement form with a "Merchant" dropdown. "Lyf" is entered as a search query and the results are "Lyft" and "Onlyfans"
1162
Reposted by Paul Butler
Jake Lazaroff @jakelazaroff.com · 24/03/2025
working on some forevervm experiments for @jamsocket.com… ever wanted your AWS account to diagram your infrastructure for you?
151
Paul Butler @paulbutler.org · 20/03/2025
This was fun to host! We’re doing it again in NYC next week, it’s full but I’ve saved a few spots for people building things on MCP ;) lu.ma/mcp-nyc
lu.ma
MCP Lightning Talks NYC · Luma
Anthropic's Model Context Protocol is bridging the gap between agents and applications. Join us for technical talks and hear what people are building with…
081
Paul Butler @paulbutler.org · 18/03/2025
Regardless of how they board, planes deboard front-to-back, so hopefully they’re built for this!
010
Reposted by Paul Butler
Ian @woolie.meowmeow.city · 18/03/2025
"Speed" but it's a software update
212132
Reposted by Paul Butler
Chris @chris.blue · 17/03/2025
SlateDB 0.5.0 is out! Features: - Checkpoints - Clones - Read only client - Split/merge database foundation - TTL filtering on reads - Last version with breaking byte format changes By the numbers: - 62 commits - 2 new contributors - 10 total contributors github.com/slatedb/slat...
github.com
Release v0.5.0 · slatedb/slatedb
What's Changed Refactor Block Tests to Use Table-Driven Test Cases by @samsond in #410 Update await calls in README.md by @criccomini in #425 chore: Apply table driven test for sst.rs by @jeffreyl...
2213
Paul Butler @paulbutler.org · 18/03/2025
Was there a surplus of hand sanitizer in the early days of covid when people hoarded it?
020
Paul Butler @paulbutler.org · 14/03/2025
It’s still in the IDE, just in the integrated terminal. I prefer the side-by-side view I get from the git diff tooling to the inline diff I get from AI diffs. I do use the built-in tools for localized changes where I want to point it to exact context, but Claude gets codebase-wide changes better.
130
Paul Butler @paulbutler.org · 14/03/2025
I’m quite liking it, I’ve switched almost entirely to it. I usually read the reasoning text in the terminal but only skim the code, and then use the IDE’s git diff UI to review the code changes.
140
Paul Butler @paulbutler.org · 14/03/2025
Thinking of doing a Cursor vs. Windsurf video where I just use Claude Code in the terminal of both, as a bit.
1161
Paul Butler @paulbutler.org · 12/03/2025
People who primarily don't use Windows, how do you test things on Windows? Thinking of getting a cheap Windows machine, but wondering if there's a cloudy way.
640
Paul Butler @paulbutler.org · 11/03/2025
But the microwave is next to the window
100
Paul Butler @paulbutler.org · 11/03/2025
Setting clocks for DST. My microwave clock has AM/PM. How down bad do you need to be to want to know what half-day it is from a microwave?
3100
Paul Butler @paulbutler.org · 08/03/2025
This explains why it mysteriously uppercased the message, and also where the spaces went. It didn't delete them, they just became the NUL character (since 917776 - 917776 = 0 = NUL), which isn't displayed. So, sort of a lucky guess by Gemini, and sort of a neat symmetry in ASCII's layout.
011
Paul Butler @paulbutler.org · 08/03/2025
The encoding works by mapping ASCII characters to Unicode codepoints. By subtracting 917776 (space), it's really getting the ASCII offset from the space character. E.g. the first character 'f' is 917846. Minus 917776 is 70. ASCII character 70 is... 'F'!
110
Paul Butler @paulbutler.org · 08/03/2025
Then, it observes that there are multiple instances of 917776, so subtracts that from everything. The result effectively decodes the message enough to interpret it (FUNINTHESUN vs. "fun in the sun"). That's not supposed to work, but it does!
110
Paul Butler @paulbutler.org · 08/03/2025
It immediately detects some unusual tokens, but can't process them directly. It starts by creating a REPL using a tool I gave it (shameless plug: forevervm.com), and prints the ordinal value of the characters. I've annotated the output it actually saw with the hidden message, "fun in the sun"
100
Paul Butler @paulbutler.org · 08/03/2025
It seemed impossible to me that Gemini was able to decode a hidden message this fast. I finally had a chance to reconstruct the chain of thought and tool calls from logs and figure out how it did it.
150
Paul Butler @paulbutler.org · 05/03/2025
Wait how tell me more!
100
Paul Butler @paulbutler.org · 22/02/2025
Sorry guys, mom says I’m not allowed to vibe code on school nights.
050