Weekly notes #15

On origins of LISP, getting from NAND gates to Tetris, and building Ruby extensions in Rust.

Ruby

Helix - allows writing native Ruby extensions in Rust. So far supports the basics, but still can be useful for offloading small bits & pieces of perf-critical code to Rust. Supports building/deployment via rake tasks and Heroku buildpack. More complex features are on the roadmap.

An Introduction to GraphQL via the GitHub API - describes pros of using GraphQL, exploring and querying data, and features as such variables and fragments.

Articles

Tout est Terrible - timezones, UNIX epoch vs. UTC, flow of time, number, money, strings, UUID representations, JSON format - all contain subtle twists and gotchas that can bring an app or a system down. This transcription of a talk gives a great overview.

Videos

Let's Build a Computer! - from NAND gates to tetris. A 30 minute, fast paced talk on building logic elements, then adders, muxes/demuxes and finally memory from NANDs, then putting it together to get a Tetris game. Based on ‘The Elements of Computing Systems’ book. (Which looks very similar in structure to ‘Code: The Hidden Language of Computer Hardware and Software’).

New Problems, New Paradigms - I thought that LISP was based on lambda-calculus. This talk from computer historian Mark Priestley describes history of how LISP actually emerged as a combination of techniques used to solve problems like playing chess and theorem proving, and ideas taken from Fortran. Based on this, he then generalizes that techniques for solving existing problems are ‘codified’ or ‘packaged’ into languages, and later a computational model - a new paradigm - is invented to underpin them (ILP, LISP, OO).

Tools

minitest-bisect - a minitest plugin for tracking down order-dependent test failures.