Incremental Gain, Monumental Pain

A common paradigm of software engineering is making progress continuously rather than discretely. By this, I mean that given an ideal, most would prefer to make small edits that get them closer to the ideal rather than a large change all at once. This means that the workflow for change looks like the following:

  1. There is a realization that something is locally wrong.
  2. The root of the problem is identified.
  3. A change is implemented that fixes the problem.

Read On →




The Horror That is Airport Delays

As a matter of existence, airport delays have always been relegated to the domain of news. They were always in the camp of things that existed but happened to other people. That is, I suppose, until it happened to me. After spending a night at the airport, I’m now an Expert on Airports and thus more than qualified to write my full thoughts on the Horror that is Airport Delays.

Read On →




On Alternatives

“The only constant in life is change.”

- Heraclitus

Read On →




NBA 2022 Analysis

I’ve never really been a big sports guy, but my brother somehow dragged me into watching the NBA Playoffs. It’s been pretty fun! The series is intense and close, and naturally, I’ve been itching to see if I can wrangle some numbers out of the mess called basketball. Here, I talk a bit about what I did to try to get information out of these numbers, but it’s also a dive into my experience with PyMC3 and Turing.jl.

Read On →




Options Analysis

Anyone studying options for long enough begins to wonder about how the Greeks interact. Like, sure, an option’s delta approaches 0 or 1 (depending on its moneyness) as it gets closer to expiration, but what happens to its gamma, as it gets closer to expiration? Does that depend on its delta? Natenburg goes a bit into this with a plethora of graphs in his textbook. The unfortunate thing about books is that they’re all 2D and noninteractive.

Read On →




Learning, Learning to Learn, and Teaching

I’ve taught for several semesters in Berkeley now, and I think it’s high time I wrote some thoughts down before my knowledge on teaching fades away.1 So here’s a collection of thoughts: we begin with a light theory of how people acquire knowledge through inquiry, followed by a quick meta-analysis of learning to learn, ending with teaching.

  1. It’s a pipe dream, but someday I’d love to be a teaching 

Read On →




Winter Break Project Review #1: DIY Mechanical Keyboard

My initial motivation to learn Computer Science came from doing side projects. It was through doing these projects that I realized how little I knew and how much there was left to learn (and how much there would always be to learn!). Sometime in the past year, I’ve come to realize that the bulk of my time has shifted from doing these side projects to laboring away on problem sets. This is not intrinsically a bad thing! However, as the classes become more and more advanced, the theory I’m learning has become more and more disconnected from the practical usefulness I wanted to get out of college. As a result, I’ve been losing motivation to learn concepts.

Read On →




A Skip, a Hedge, and a Leap of Faith

“If I may ask, where are you planning to work at full-time? Is it for evil or for good?”

Read On →




Unintuitive Probability: Machine Repairs

The more classes I take in probability, the more I realize how often my intuition breaks for these problems, especially when the Exponential distribution is involved. Today I’ll be explaining a homework problem for Stat150 (Stochastic Processes) showcasing unintuitive behavior regarding exponential distributions. Furthermore, I’ll also show a simulation that backs up these results, along with the code used to generate the simulation.

Read On →




I’ll Take My Quarterback, Thanks

Many things in life don’t have a clear estimate at a first glance – many times, 10% will seem like an underestimate, and 100% will seem like an overestimate. In these situations, I’ve learned that it’s actually pretty good to take the geometric mean of the two as a ballpark estimate: ~30%, or roughly something like 1/4 ~ 1/3.

Read On →




Remarkable + Tailscale

Background

Tailscale is a pretty cool technology that allows devices to access each other across any network by automatically punching holes through networks. (Long gone are the days of ssh -L 8000:localhost:8000 server to do development! Now we can just go to http://server:8000 directly!) Its setup process is fairly simple for both Windows and Linux, but it doesn’t have detailed solutions for embedded devices (such as the Remarkable). This blogpost details the steps I took to get Tailscale working on my Remarkable.

Read On →




Blogs I Read

(and podcasts I listen to)

Read On →




Installing Windows Alongside Existing NixOS

Background

I use NixOS as my main OS in everything (from personal laptop to my server), but I was beginning to miss Windows for gaming. (WINE won’t cut it here.) As a result, I went searching for installing Windows alongside an existing NixOS installation, but I couldn’t find one anywhere. I decided to just dive in, and it worked! Here is a high-level list of the steps I took. For reference, I am installing this on an XPS 9550, with EFI.

Read On →




Homelab: Part 2

The hard drives finally came, so in this post, I’ll be documenting RAID (mdadm) and LVM (with lvmcache). I have a Samsung 970 EVO NVMe SSD which already has 3 partitions in this order: boot, root, swap (without LVM). In this post, we will be adding 4x 3TB Seagate Barracuda drives in RAID10 with mdadm, and with LVM top. We will then move the root partition to the RAID10 array.

Read On →




Covid-19 and Game Theory

With the Coronavirus, tissue paper and supplies are flying out of stores. Some argue that it’s a natural human reaction best explained by Game Theory. In this essay, I will explore these claims, as well as how several countries have responded differently, and how their policies can be explained by Game Theory.

Read On →




Homelab with NixOS, Jupyter, and More

For half a year (and more), I’ve been thinking about building a computer to learn and train ML models on, as well as to host my web applications on. Over this past half month, I finally bit the bullet, opting for a Ryzen 3700X paired with an Nvidia 1080 Ti. The full parts list can be found here. I chose to install NixOS, a declarative operating system, and this post outlines the full software-side process, including several hurdles I came across.

Read On →




P/NP and Game Theory

In light of the recent changes of UC Berkeley’s grading scheme to P/NP, it’s quite interesting to examine the problem of grading through a Game Theoretic perspective. Lots of students have proposed that the change to an online format encourages cheating, and that the curves for this semester will change drastically as a result. In this essay, I hope to explore this claim and test its validity.

Read On →




Random Fact #4

Today’s Fact: Foot On Water

Andi came up with an insane question: How wide does a human foot have to be for a human to stand on water? Of course, he came up with something insane, reproduced here.

Read On →




Random Fact #3

Today’s Fact: Linear Discriminant Analysis

Linear Discriminant Analysis, or LDA for short, is an ML model used in classification. Specifically, for a model of d features and n training points, it assumes that the d features are all distributed Normally (Gaussian), with the same variance. More formally, taken from my professor’s cs189 notes, we get:

Read On →




Random Fact #2

Today’s Fact: Temperature, Defined Statistically

TODO

Read On →




Random Fact #1

Today’s Fact: Market for Lemons

Fact 1 Source: Stat 155 Textbook, Game Theory by Anna R. Karlin and Yuval Peres

Read On →




Elixir Deployments and CPU Usage

Background

For the past semester, I have deployed a custom shortlinker service and my personal website on a Google Cloud Compute Free Instance. The custom shortlinker is a rewrite of the CS61A Shortlinker in Elixir, which was a good way for me to learn the new language. Upon deploying the Elixir version, however, I noticed that CPU usage hovered around a constant 100%, even the system was idling. I left it alone for a while, noting that it was responding to requests fairly quickly, leaving me to think that it was likely the BEAM that was idling.

Read On →




EE375: A Coffee Chat

Introduction

Hello! This is a talk I gave at EE375, an introduction to teaching techniques class required at UC Berkeley for first-time TAs. The content is largely based on James Hoffman’s techniques, with inspiration from other famous figures. Since the talk was limited to 3 minutes, I skipped a lot of (quite lengthy) discussions, including coffee grind sizes, water ratios, and water temperature. If you have any questions about the material, feel free to email me!

Read On →




Summer/Fall 2019: Netskope

Background

From May 2019 to January 2020, I worked at Netskope on the Data/Infra team, both in Santa Clara and in San Francisco. I learned a lot – both academically and professionally. I redesigned and partially rewrote a core part of their infrastructure, which eventually broke out into its own component that would be scaled up over time. This infrastructure was written in Go to replace their aging infrastructure in Python.

Read On →