Systems Programming with Rust

Writing an operating system is no easy feat, but it is extremely rewarding and helps polish the skills of even the most accomplished programmer. Operating systems are beautiful and complex, and understanding them is merely the first step to implementing them. In this class, we learned how to write an operating from scratch on the popular handheld computer Raspberry Pi. Previous courses at Stanford like CS107 and CS110 teach topics like processes, memory, and file systems, but this class delves deeper by teaching you how to implement these features from the ground up. In addition, this class does this using the Rust programming language. A major goal of this class is to understand the inner workings of an operating system: to not only know which gears it contains but to also understand how to turn those gears. Let’s take a closer look at the mechanics of the operating system we built in this class.

The Color Of Your Eyes

You’ve never taken me to dinner But you know how I taste You can name all of my flavors From my mouth down to my waist I know the satin of your skin And the strength of your thighs But one thing I don’t know Is the color of your eyes

A New Christmas Toy: Digital Sketching with the Slate 2

Happy Holidays, everyone! Although I'm not home in Florida for Christmas this year, my family sent me enough presents for me to feel like I was home. :) There is one gift in particular that I love so much that I had to blog about it. My mom got me an awesome gift that is officially my new favorite gadget: the Slate 2+. The Slate is a drawing pad that allows you to draw sketches on paper while getting a digital version made via an app in live time. It's incredible! 

Pipes, Forks, & Dups: Understanding Command Execution and Input/Output Data Flow

I'm currently enrolled in a systems programming class at Stanford (CS110: Principles of Computer Systems). It is the second systems class I've taken (the first was CS107 which teaches C and focuses on understanding pointers and memory management). This class focuses mainly on the inner workings of the operating system, using C and C++ to teach us concepts like process management, program execution, and handling data. While I enjoyed and quickly grasped the concepts taught in CS107, I've had a harder time understanding the material in CS110. The class itself is extremely interesting and well-taught, but my main pain point has been understanding the way processes share data and how input and output work across commands entered in the terminal. In the last few days, however, I finally found clarity when I started creating diagrams to model process behavior and the path that data takes as it travels from one command to another. I'd like to share what I've learned with you. In this post, we'll go over how Unix commands pass data to each other via pipes and input/output redirection and I'll illustrate what actually happens to the flow of data when a command is executed.

Fun with Fractals

There is an interesting intersection between math, computer science, and art that has fascinated me for years, but I didn’t realize how strong the math and computer science components are until my studies at Stanford. The topic represents some of the most beautiful and mathematically sound forms of digital art and nature itself: fractals.