Paul Butler
@paulbutler.org
I build jamsocket.com and write digest.browsertech.com
Thanks! I think this is the one.
May 27, 2025 at 8:00 PM
Thanks! I think this is the one.
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”.
May 11, 2025 at 12:40 AM
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”.
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.
April 30, 2025 at 4:32 PM
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.
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!
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!
April 4, 2025 at 11:43 AM
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!
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!
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'!
E.g. the first character 'f' is 917846. Minus 917776 is 70. ASCII character 70 is... 'F'!
March 8, 2025 at 11:46 PM
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'!
E.g. the first character 'f' is 917846. Minus 917776 is 70. ASCII character 70 is... 'F'!
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!
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!
March 8, 2025 at 11:46 PM
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!
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!
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"
I've annotated the output it actually saw with the hidden message, "fun in the sun"
March 8, 2025 at 11:46 PM
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"
I've annotated the output it actually saw with the hidden message, "fun in the sun"
TIL Berkshire Hathaway is a trillion dollar Fortune 5 company because Buffet bought it for revenge in 1965.
en.m.wikipedia.org/wiki/Berkshi...
en.m.wikipedia.org/wiki/Berkshi...
February 20, 2025 at 10:21 AM
TIL Berkshire Hathaway is a trillion dollar Fortune 5 company because Buffet bought it for revenge in 1965.
en.m.wikipedia.org/wiki/Berkshi...
en.m.wikipedia.org/wiki/Berkshi...
Someone asked me about the difference between UTF-8 and Unicode, here's my explanation in case others find it helpful.
February 14, 2025 at 10:10 PM
Someone asked me about the difference between UTF-8 and Unicode, here's my explanation in case others find it helpful.
After my post on smuggling arbitrary messages through unicode, some people asked me if AI could decode it. Gemini Flash is pretty fast at it! Have had good luck with Claude too. So far no dice with OpenAI models.
This uses block.github.io/goose/ and forevervm.com
This uses block.github.io/goose/ and forevervm.com
February 13, 2025 at 12:49 AM
After my post on smuggling arbitrary messages through unicode, some people asked me if AI could decode it. Gemini Flash is pretty fast at it! Have had good luck with Claude too. So far no dice with OpenAI models.
This uses block.github.io/goose/ and forevervm.com
This uses block.github.io/goose/ and forevervm.com
People now trying to use it to get DeepSeek to give up secrets on meth making, I love putting new things into the world.
February 12, 2025 at 8:28 PM
People now trying to use it to get DeepSeek to give up secrets on meth making, I love putting new things into the world.
Two nice updates to foreverVM today thanks to @jakelazaroff.com:
- charts! If a Python call returns a matplotlib chart, we render it.
- new example buttons on forevervm.com
- charts! If a Python call returns a matplotlib chart, we render it.
- new example buttons on forevervm.com
January 30, 2025 at 10:29 PM
Two nice updates to foreverVM today thanks to @jakelazaroff.com:
- charts! If a Python call returns a matplotlib chart, we render it.
- new example buttons on forevervm.com
- charts! If a Python call returns a matplotlib chart, we render it.
- new example buttons on forevervm.com
The hardest part of working with model context protocol server is counseling Claude through his learned helplessness.
January 28, 2025 at 12:55 PM
The hardest part of working with model context protocol server is counseling Claude through his learned helplessness.
It doesn't take much, either!
January 26, 2025 at 1:55 PM
It doesn't take much, either!
You can hide arbitrary messages in one emoji character by abusing unicode variation selectors emoji.paulbutler.org
January 26, 2025 at 1:54 PM
You can hide arbitrary messages in one emoji character by abusing unicode variation selectors emoji.paulbutler.org
A little peek at something we're working on at @jamsocket.com
January 13, 2025 at 8:39 PM
A little peek at something we're working on at @jamsocket.com
I like how they lock some of the levels until you complete missions.
January 5, 2025 at 12:27 AM
I like how they lock some of the levels until you complete missions.
The next door apartment is blasting music and when you open up Spotify you see this, what’s your move?
December 14, 2024 at 10:48 PM
The next door apartment is blasting music and when you open up Spotify you see this, what’s your move?
oh I missed that update. This is why we should have caught up in London 😆
December 13, 2024 at 4:13 PM
oh I missed that update. This is why we should have caught up in London 😆
December 8, 2024 at 9:02 PM
AI is rapidly approaching the level of a junior developer: it can now stubbornly introduce its own favorite language to the codebase without being asked to.
December 6, 2024 at 8:34 PM
AI is rapidly approaching the level of a junior developer: it can now stubbornly introduce its own favorite language to the codebase without being asked to.
Here's the matching algorithm, if anyone is curious. add_cons comes from russcip, and adds a constraint to the model.
Essentially:
x[i][i] = 0
x[i][j] + x[j][i] <= 1
sum(x[i][..]) <= max_cards[i]
sum(x[i][..]) = sum(x[..][i])
Where x[i][j] = 1 iff participant i sends a card to participant j
Essentially:
x[i][i] = 0
x[i][j] + x[j][i] <= 1
sum(x[i][..]) <= max_cards[i]
sum(x[i][..]) = sum(x[..][i])
Where x[i][j] = 1 iff participant i sends a card to participant j
December 3, 2024 at 9:32 PM
Here's the matching algorithm, if anyone is curious. add_cons comes from russcip, and adds a constraint to the model.
Essentially:
x[i][i] = 0
x[i][j] + x[j][i] <= 1
sum(x[i][..]) <= max_cards[i]
sum(x[i][..]) = sum(x[..][i])
Where x[i][j] = 1 iff participant i sends a card to participant j
Essentially:
x[i][i] = 0
x[i][j] + x[j][i] <= 1
sum(x[i][..]) <= max_cards[i]
sum(x[i][..]) = sum(x[..][i])
Where x[i][j] = 1 iff participant i sends a card to participant j
One of the things I've learned about creating things on the internet is that when you get comments like this, don't picture what 354 people in a room would look like.
December 3, 2024 at 6:36 PM
One of the things I've learned about creating things on the internet is that when you get comments like this, don't picture what 354 people in a room would look like.
I wasn't going to beg for Product Hunt upvotes on here but we (Y-Sweet / @jamsocket.com) are tied with a friggin web3 thing so if you can find it in your heart I don't want to lose this one.
December 3, 2024 at 5:54 PM
I wasn't going to beg for Product Hunt upvotes on here but we (Y-Sweet / @jamsocket.com) are tied with a friggin web3 thing so if you can find it in your heart I don't want to lose this one.