Guru Das Srinagesh

Nand2Tetris - Project 6 (Assembler)

13 Oct 2024

I wrote a two-pass assembler for the Hack assembly language!

This is the sixth and final project of the first half (Hardware) of the Nand2Tetris course. In Project 6, the task is to write an assembler for the Hack assembly language. Unlike the previous projects which could only be written using the custom hardware description language (HDL) used by the ... → Continue reading

Nand2Tetris - Projects 4 to 5

28 Aug 2024

Continuing from where I left off in my Nand2Tetris journey, I went ahead and completed Projects 4 (Machine Language) and Project 5 (Computer Architecture) and I now have "built" my very own Hack computer from scratch!

Follow my progress on Github here: guru-das-s/nand2tetris.

Project 4: Machine Language

This project introduces the Hack instruction set architecture (ISA) and assembly language ... → Continue reading

Build your own shell - Codecrafters style

28 Jul 2024

I created my own shell in Rust using the Codecrafters Build your own shell challenge.

As part of my ongoing efforts to learn by doing, I came across the course on LinkedIn and resolved to try it out using Rust, another goal of mine. Here's my experience of completing the challenge, and also my thoughts on the Codecrafters platform as ... → Continue reading

Nand2Tetris - Projects 1 to 3

13 Apr 2024

Nand2Tetris is a very interesting "learning by doing" free and open-source course that enables one to learn how a computer is designed from the ground up, and also how it is programmed from the very lowest of levels. It is a fantastic course offered in two parts (first building the hardware for the computer, and then the software) and is ... → Continue reading

Fun with git rebase --interactive

02 Dec 2023

This is the second in a series of blog posts related to some powerful features of git I've used over the years. Previously, I wrote about git rebase --onto which you can read here.

git offers many powerful features, and one such feature I have used extensively in kernel development is git rebase --interactive. Here is what the man page ... → Continue reading

How I used git rebase --onto

09 Nov 2023

On one of my daily trawlings of Hacker News, I came across Julia Evans' blogpost on confusing git terminology that lists git rebase --onto as one such confusing command. I had never used this --onto flag before and her description didn't really help me visualize the problem or the solution.

I shrugged and let it go, not thinking much of ... → Continue reading

Learning Go

19 Sep 2023

I recently had to learn Go. I was on a tight timeline of just about 4 or 5 days. I am familiar with learning Rust, and Rust by Example, so I found Go by Example. I found the format wanting for the absolute beginner level I was at, so I found the absolutely beautiful A Tour of Go instead. It ... → Continue reading

Configuring the Visual Studio Code vim extension

01 Sep 2023

I just installed Visual Studio Code (VS Code) on my Arch Linux machine, and one of the first things I did was to install the vim extension.

I love vim and so I needed its keybindings in VS Code. But it was missing a couple of features I wanted, so I enabled them.

The shortcut to summon the Settings page ... → Continue reading

Script to add maintainers to a Linux kernel patch

16 Aug 2023
Introducing add-maintainer.py

I worked on adding a new script to improve the workflow of developers contributing patches to the Linux kernel. Here it is:

[PATCH v2 0/1] Add add-maintainer.py script - Guru Das Srinagesh

Its fate is yet to be decided - it's only at v2 now, and looks like there is already a mature tool named b4 that ... → Continue reading

How I generate gurudas.dev

07 Jun 2023
Beginnings

I've always wanted my own website. Like, forever. Not Wordpress-like, but my own, written from scratch. I figured out that this meant that I would have to use a static site generator. This post is all about how I bought my first domain, chose a hosting provider, set up DNS correctly, generated my website's content, and set up auto-deploy ... → Continue reading