Simulating the ocean
Acerola makes a bunch of great graphics programming videos. In this one, he tries to simulate the ocean without tiling
Reading 50 year old rope core memory
Mike Steward decided to recover the original Apollo guidance computer programs that landed man on the Moon in the 1960’s. Unfortunately some of them seem to have been lost to history.
It turns out, chunks of the original hardware still exist – such as the rope core memory which contained the programs. The next question is, how do you read these programs off 50 year old rope core memory hardware? This video below tells you how he did it!
He even wrote a web app that simulates how core memory works. We do a decent job recording history’s events, but I think it’s extremely cool that this kind of historical technical information is not being lost to the ages.
You can also check out the many other videos about the Apollo guidance computer in the other parts of his videos – or a previous article which has a super-awesome description of how Apollo computers work by Robert Wills.
Perfect code vs perfect products
For one-shot things like games – focus on the experience above all else.
Update 2024/01: More proof that technical limits have little impact for making great games. Slay the Spire’s graphical glitches were there because the author only had two $70 monitors that were so bad he literally didn’t see the issues.
Maze-solving mice
Veritasium does a great overview of maze-solving robots. He goes over the different algorithms as well as optimizations that weren’t optimal, but were faster because the mechanics of the path made it faster for the physics of the robots. There were also unique optimizations that take advantage of diagonals, gyroscopes, suction to make 6G turns, and other ideas.
It’s a reminder that even when something seems solved, there is likely huge optimizations still waiting to be discovered.
But then again, you can go the other direction and try to build the most unskilled robot. Hebocon celebrates unskilled robot builders – even penalizing those who try too hard or using proper technology.
Write your own NES emulator
-Me (inspired by Joel Spolsky)
“There is almost no reason to re-write a huge software codebase from scratch. If anything, evaluate wrapping it with an emulator that can filter for the things you want to change before a re-write.”
javidx9 walks us through his 3 month adventure writing a NES emulator in C++. He does a great job walking through the topics with beginner friendly explanations and good production values of diagrams and coding.
Other resources:
Accurate portrayal of an Emacs enthusiast
Emacs takes a lifetime to learn. So the sooner you start, the longer it will take.
The Story of Mel
Are you a programmer’s programmer? A man among men? Have people written epic poems about your coding? If not, maybe you should be as cool as ‘The Story of Mel‘.
The stories of Melvin Kaye have become part of programming folklore. Little is actually known of him beyond the fact he did lots of interesting programming with a very early Royal McBee LGP-30. He eschewed optimizing compilers and hand-crafted his code to take advantage of the most esoteric hardware quirks – such as using the LGP-30’s drum memory rotation speed to write delay loops in his code.
Maybe give one of his be-fabled stories a read. Or perhaps one of his other stories.
GPU Shader art
Kishimisu walks you through the fascinating realm of writing programmable shader art and offers helpful insights and guidance to assist you to make your own creations.
RAII: Resource Acquisition is Initialization
This is a great little video from the Back to Basics series offered by CppCon. They even have their slides and code on github.
CppCon has a bunch of other great ‘Back to Basics’ videos that cover a whole host of great topics: safe exception handling, move semantics, type erasure, lambdas, and a bunch of other critical but oft misunderstood elements of C++
In this video, you get a refresher on RAII.
“Resource Allocation is Initialization is one of the cornerstones of C++. What is it, why is it important, and how do we use it in our own code?”