Weekly notes #1
Ruby, systems, performance, and programming links from last week.
Videos
RubyConf 2016 - Methods of Memory Management in MRI by Aaron Patterson - YouTube
How Ruby generational incremental GC works, what are some of the challenges in doing that correctly with respect to pointers across generations and how write barriers solve that. Some GC and heap inspection tricks in the last 10 minutes and work Aaron is doing at GitHub on inspecting and reducing heap fragmentation,
LoneStarRuby 2015 - My Dog Taught Me to Code by Dave Thomas - YouTube
Dave Thomas shares some points on writing maintainable code. I don’t agree with some of those imperatives, but hey, whatever works for him.
Systems we love
How Apollo Guidance Computer works. Real-time computer from the 60’s. Uses core rope memory a.k.a LOL memory, has interrupts, several programmable clocks with different precision and some funny trade-offs and bugs!
Less Ado About NTP An excellent overview of how NTP and algorithm that drives it works. There’s a consensus protocol in there, from before it was cool!
Man, ‘splained - 40+ years of man page history. Interesting to see that the UNIX manual started as an actual dead-trees book. Here’s a blog post written to support that talk.
Articles
Kent Beck’s guidelines for managing time, information and risk while problem solving (IMHO not just programming). Mostly about deconstructing problems, and juggling them in time and space until it’s easy to make a change that solves them. And measuring the state before and after. Interesting point about 80/15/5 rule.
Eval any JS code using six chars. Can you do better and break the wall-of-six?
Next Generation Linux Tracing With BPF - DZone Performance
Linux bcc/BPF Node.js USDT Tracing
With extended Berkeley packet filter (eBPF) and bcc
toolkit, DTrace-like
kernel and user space tracing is finally getting into Linux. Yay! Now is the time
to push tools like ply, so that developers and sysadmins
do not have to write tracing programs in bcc
. Another front to tackle is the ability to
add BPF probes in userspace applications, effectively enabling runtime tracing
of (Ruby) code.