About
Howdy I’m Ben,
I love learning, problem solving, having fun with my peers and making great software. Some of my current interests include Rust, Linux internals and Kubernetes.
I’ve been professionally crafting software since the early 2000’s. Mostly in enterprise environments and a few startups. I grew up in the age of the web and Java. Thanks to years of consulting I’ve worn many hats in many fields including frontend, devops, backend, software architecture, distributed systems, databases, message queues and buses, data streaming, data analytics, machine learning and service-based architectures.
Academically I hold 3 university degrees in this space and a decent pile of certifications. One of the most satisfying things I’ve done as a software engineer is nand2tetris by the Hebrew University of Jerusalem, which involves building a CPU and general purpose 16-bit computer literally from the NAND gates up to the OS. Thanks to Ben Eater I soon followed this up by making my own physical 8-bit CPU out of hundreds of TTL logic gates and breadboards. This pilgrimage has led me into the wonderful world of low-level topics including OS internals, binary reversing and exploit development which I enjoy studying.
I live and breath my craft as a software maker and technologist. After visiting Japan in 2014 I was relieved to discover a culture that embraces taking one’s craft seriously. At a Soba noodle bar I was shocked to discover the family business had been making Soba noodles for over 5 generations. Depth, focus and complete commitment to a craft is the norm in Japan. My Japan trip helped me realise its okay to embrace my craft.
Other ways to find me⌗
- Email: ben at bencode dot io
- https://github.com/bm4cs
- https://www.linkedin.com/in/bm4cs
- https://keybase.io/bm4cs
- https://x.com/bm4cs
PGP public key⌗
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=4sMn
-----END PGP PUBLIC KEY BLOCK-----
Rubik’s cube algo⌗
- Form a daisy (a white plus with a yellow center)
- For each white petal match its side color to its matching color on the middle row, then strip the petal with a half turn. You should now have a white plus.
- Its time to fill any missing white corners. Chase the white dogs. Get any white squares on the bottom row (the dogs) and chase them around the bottom, until its paired color matches the middle of that side. For example a white/green needs to end up on the green side. Spin the top down and scoop up the dog. You should now a completely filled out white side.
- Match center rows (none yellow squares). Now we work with the bottom layer to patch the middle row up. On the bottom layer find a cell that has no yellow on it (e.g. an orange/blue). It will either need to shift to the left or right. Here’s the recipe: turn it away from the destination (e.g. if it needs to go left, turn it right), bottom layer go the same direction (e.g. right), the matching column goes down (e.g. right column down), middle layer turns the direction (e.g. to the right), turn the matching column up (e.g. the right column), then rematch the whites again. Rinse and repeat until the middle layer colors all match up.
- Yellow plus (FUR-RUF = front, up, right, right, up, front)
- Feed the yellow fish (clock, clock, counter then clock, clock, flip, counter)
- Match top corners (counter, clock, counter, flip, clock, counter, counter, flip, flip)
- Finish it (flip, clock x 3, counter x 5, clock, counter)