Blog

14 June 2017

My (former) roommate is a big fan of the Alien series, especially the classic
first movie, and the really awesome video game, Alien: Isolation (I guess you
could say I’m a fan too!). As a goodbye gift, I thought I’d create a really odd
e-card: a bootable Linux flash drive with the same boot splash as computers from
the movie, sound effects from the movie and game, and programs that look like
the ones in the game. Everything turned out much better than I hoped, and so I
thought I’d share the method and the result in a blog post!

24 April 2017

Confession time: I’m vain. While I write a blog because I like to write and
share things, I’d be lying if I said that I didn’t enjoy the occasional
publicity resulting from a successful post on Hacker News or Reddit. I get to
open up a Google Analytics tab and watch visitors enter my site. How cool is
that?

21 April 2017

Kernel development offers a set of challenges that are very different than the
ones you would encounter in other types of programming. When you’re new to
kernel dev, you hear from lots of sources that you’re gonna have a hard time.
But for me, after some initial culture shock, I didn’t feel that uncomfortable.
It still felt like user-space C programming. But a few days ago, I finally
encountered that bug that made me realize, we’re not in Kansas anymore, Toto.

12 April 2017

14 March 2017

I was a curious child. I spent hours on the family computer, exploring every
menu in Windows 95, and later XP. My exploration sometimes ended badly, like the
time when I changed our computer’s language to Portuguese, or the time I set the
foreground and background colors of the menus to lime green[^1]. Exploring and
learning about computers has never failed to put that elated, soaring feeling in
my chest.

08 March 2017

For the past week I’ve been struggling with a very particular issue in the Linux
kernel. I seriously doubt that anyone else will have this issue, but if they do,
perhaps a bit of luck and SEO will bring them to this page.

08 March 2017

A little while ago I wrote a post about creating a Linux system call.
In it, I explained how to create a virtual machine, get the Linux source, modify
it, build it, and boot your custom kernel. This is a totally valid way to do
kernel development, but it can be a bit inconvenient. For one, the code was
stored within the VM, so all editing and compiling was done in a VM too. For
another, there was a pretty complex process to build an “initrd” in order for
Arch Linux to boot properly. And finally, the kernel configuration we used was
pretty massive, resulting in longer build times for extra features and device
support to be compiled into the kernel.

19 February 2017

11 December 2016

Over the summer I wrote about my hackathon project, an app that
virtually swaps BART tickets in order to reduce fares. This was a purely
academic exercise, to apply some concepts I had learned from my “Advanced
Algorithms” course to a problem in the real world. I described how you could
model this problem as an (integer) linear program, and I guessed that the
problem is, in fact, totally unimodular. However I offered no proof of this, and
due to hackathon time constraints I was forced to use a slow, somewhat
half-baked greedy algorithm to solve the problem.

14 November 2016

A while back, I wrote about writing a shell in C, a task which lets you
peek under the covers of a tool you use daily. Underneath even a simple shell
are many operating system calls,
like read, fork, exec, wait, write, and chdir (to name a
few). Now, it’s time to continue this journey down another level, and learn just
how these system calls are implemented in Linux.