engineering leadership

Stanford Compilers

Posted on June 05, 2016

Welp, still on the journey down to the hardware. Now that I’ve got the nand2tetris class on building a computer from nand gates out of the way, its time to dive into compilers. Update 2019: Looks like this coursera link is dead, I’m sure the course can be found though! I’ve decided to take Stanford’s Coursera offering, though I’ve got a few reservations about it. First, it focuses quite a lot on formal definitions of languages and grammars.

Building a computer from nand gates 🔨

Posted on June 04, 2016

Course: My Computer (hdl): My Hack Assembler (rust): So I was able to build a baby computer in a hardware simulator. I learned quite a bit about how CPU’s are designed and how they interact with machine code and assembly language. Finished this 6 week course in 5 days due to binge (🌙). I was able to write an assembler in about 500 lines of code including some static lookup tables.

Minimal tmux dev

Posted on June 03, 2016

If you are currently in a anti-IDE frame of mind (which I cycle into from time to time), tmux can be a useful way to use vim and also retain the ability to look at several pieces of output … without a bunch of floating terminal windows hitting C-z and typing fg over and over. Current Setup I went through a period on intense tool customization, but I find it pretty hard to pick back up on all the little customizations if I walk away from a toolset for a while.

The Elements of Computing Systems

Posted on May 29, 2016

Coursera: Original Site: The Elements of Computing Systems This course is run by some guys from the Hebrew University of Jerusalem. Its about building a computer from nand gates in a hardware simulator, building an assembler, programming language and a kernel from first principles. So far its been very interesting and informative - I’ve made it through to the third project in about 2 days or so of work.

fork() is weird

Posted on May 27, 2016

Update 2019: Coursera killed every course permalink. ??? I was working through lecture 59 of the UW hardware software interface course and got interested in the origin of the fork-exec model for process management. In case you didn’t know, fork is a way of creating a process in Unix-like systems. I have known this for a long time. I never really thought about how it works, though. It turns out, what it does is create a ‘copy’ (optimized to copy-on-write later on) of the existing program and returns the new process id for the child.