M
Marcus Buffett
mbuffett.com · Personal blog · on HN since 2014
Marcus Buffett, a programmer and chess player, writes about Rust, chess tooling, compression experiments, and personal projects.
What HN saysHN commenters point to his chess move compression posts, including the follow-up reaching 3.7 bits per move, and his Bevy snake tutorial.
27HN people shared it
11linked it in comments
48stories submitted
2.2Kstory points
12 months agolast shared
2014people per year2026
Most-shared posts
- 1Compressing Chess Moves Even Further, to 3.7 Bits per Move6 people · 6 points · first shared 2024 · discussion on HN
- 2How Much of the Hitchhiker's Guide to the Galaxy Can You Fit on a QR Code?4 people · 5 points · first shared 2021 · discussion on HN
- 3Making a Snake Clone with Bevy3 people · 61 points · first shared 2020 · 11 comments on HN
- 4The 2030 Rust Update3 people · 15 points · first shared 2024 · discussion on HN
- 5An Incomplete Explanation of the Proc Macro That Saved Me 4000 Lines of Rust3 people · 5 points · first shared 2021 · discussion on HN
- 6Thoughts on chess improvement, after gaining 600 points in 6 months2 people · 321 points · first shared 2021 · 188 comments on HN
- 7Unironically using Kubernetes for my personal blog2 people · 273 points · first shared 2021 · 227 comments on HN
- 8Compressing chess moves for fun and profit2 people · 180 points · first shared 2024 · 135 comments on HN
- 9A self-review of my last year building Chessbook2 people · 6 points · first shared 2024 · discussion on HN
- 10Improving in chess is hard. I built the most human-like chess AI to help me2 people · 5 points · first shared 2025 · 4 comments on HN
- 11Creating an optimized keyboard layout for the next generation of the Datahand2 people · 4 points · first shared 2024 · discussion on HN
- 12Programming as Tacit Knowledge2 people · 3 points · first shared 2020 · discussion on HN
- 13Processing 6B Chess Games in Less Than 2 Hours2 people · 3 points · first shared 2024 · discussion on HN
- 14Thoughts on Structured Editing: Breaking Away from Syntax2 people · 3 points · first shared 2020 · discussion on HN
- 15Abstractions are the best, abstractions are the worst2 people · 3 points · first shared 2024 · 1 comments on HN
What HN people wrote when they linked it
joshka · 2024-03-17
You might be interested in the author's follow up post where they reach 3.7 bits/move after compression. https://mbuffett.com/posts/compressing-chess-moves-even-further/
marcusbuffett · 2024-03-15
I mention Huffman in my follow-up post: https://mbuffett.com/posts/compressing-chess-moves-even-further/ , but chose arithmetic encoding instead.
ChrisArchitect · 2024-03-15
Related follow-up from same author:
Compressing Chess Moves Even Further, To 3.7 Bits Per Move
https://mbuffett.com/posts/compressing-chess-moves-even-further/
alserio · 2022-04-15
For everyone who's following this awesome tutorial has been updated:
https://mbuffett.com/posts/bevy-snake-tutorial/
unshavedyak · 2025-01-06
Oh, related in this space: https://mbuffett.com/posts/structured-editing-syntax/
I thought this blog post had an interesting idea too. Basically that a structural editor which truly knew the underlying AST could then alter the visual representation of the code entirely. Eg changing it to look like Python, or whatever insane thing.
Not advocating for that of course, but the idea that the editor could be effectively transpiling the code in real time is an interesting area to explore too. I imagine not for the purpose of "Write Python that becomes Rust" or w/e, but just in general customizing the experience. Perhaps reducing clutter, /shrug
maxmcd · 2024-05-13
huh, I originally thought this would create unusually long URLs, but if it's just the sequence of moves it could stay pretty small.
might more fun too, representing each state of play instead of just the board position.
Also easily compressible if size is an issue: https://mbuffett.com/posts/compressing-chess-moves
Would also mean all rules can be represented, and you'd be able to do cool things like highlight the previous move that was made.
Nice, ok, might try and add this.
andruby · 2024-03-15
That's exactly what the author seems to have done and describes in their subsequent post: https://mbuffett.com/posts/compressing-chess-moves-even-further/ (published yesterday)
thefourthchime · 2023-03-01
I liked these tips: https://mbuffett.com/posts/chess_improvement_thoughts/
eternalban · 2023-01-10
The Tacit Dimension, Michael Polanyi, 1966
https://press.uchicago.edu/ucp/books/book/chicago/T/bo6035368.html
Programming and Tacit Knowledge
https://mbuffett.com/posts/all-tacit-knowledge/
Tacit Knowledge blogpost series, Commoncog
https://commoncog.com/the-tacit-knowledge-series/
Acquiring and Sharing Tacit Knowledge in Software Development, 2013
https://www.researchgate.net/publication/264125152_Acquiring_and_Shari…
lelandbatey · 2022-04-30
> Cannot make a type in a foreign package implement an interface
I would only push back on this point, and this point alone. Sure, it would be very convenient for me, an author to be able to just extend the implementation of anything that I import. However, when I am not an author and am instead a reader of code, doing this is the number-one way to causally make code totally unreadable. By allowing anyone to extend a type anywhere, it makes it impossible to just read the code. If the package that declares a type is the sole controller of that type, then reading code is easier.
"Where is the definition of this method?" Answer: It's next to everything else for that type, in the package where that type is defined. However, if anyone can extend any other type, figuring out what methods even exist for a type becomes so difficult that you are forced to use a language-server (with all related dependencies installed) in order to use "go-to-definition". If someone wants to understand the code, requiring them to have a full-fledged IDE and/or development environment is pretty awful and quite onerous, and makes codebases tough to get into.
For example, take this line[0] from a tutorial[1] on creating a simple snake game using the Bevvy engine in Rust. The main() function wires up loads of entities, including a `snake_eating()` function. But it also calls a mysterious `.after()` method of the snake_eating() function. If you do a ctrl-f on the file, you won't find an .after() method…