Implementing Adaptive Cache Replacement (ARC) Policy in Python

I am currently working my way through the CMU’s Intro to Database Systems course , and one of the projects involves implementing the ARC Policy. This is not a solution to that project. I’m writing this to make it easier for me understand how the algorithm works without the cpp clutter, and hopefully in the process write something useful for the next person who tries to implement this. I will be following the original IBM paper. ...

September 5, 2026 · 24 min · Abhinav Omprakash

I Am Happier Writing Code by Hand

I felt the familiar feeling of depression and lethargy creep in while my eyes darted from watching claude-code work and my phone. “What’s the point of it all?” I thought, LLMs can generate decent-ish and correct-ish looking code while I have more time to do what? doomscroll? This was the third time I gave claude-code a try. I felt the same feelings every single time and ended up deleting claude-code after 2-3 weeks, and whaddyouknow? Every. Single. Time. I rediscovered the joy of coding. ...

February 7, 2026 · 4 min · Abhinav Omprakash

Yes you built that... but at what cost?

A thought Experiment You tighten the last screw on the bridge. Feeling triumphant you raise your hands and cheer. Your crew cheers. The bridge is five years too late but it is done. The people you started with are no longer with you. But they were traitors and disloyal people. “Tough times don’t last, tough people do” you utter to yourself, rationalizing the loss of your entire team. Was the bridge a success or a failure? Did you immediately jump to an answer? Do you have enough information to answer that question? Let’s assume you picked one of the two options. ...

February 16, 2025 · 13 min · Abhinav Omprakash

TIL: Creating tables without primary keys CAN cause updates and deletes to fail in Postgres

A long time ago, I read in a medical book that One can learn about a system when things go wrong. So diseases are a good way to learn more about how the human body functions. That sentence stuck with me and this is about a story where someone made a mistake and learned something (someone, not me, I don’t make mistakes). It was friday afternoon (why do all tech disaster stories start on friday? This one doesn’t start on friday) It was a less dramatic Wednesday afternoon, the smell of a freshly baked migration was in the air. I was rubbing my hands with joy, waiting to press merge once I got that LGTM. I had worked hard on the migration and I was quite proud that I thought a lot about the changes and data model. I was adding a new table, how hard can that be? ...

June 7, 2024 · 8 min · Abhinav Omprakash

What makes frontend development tricky

Preface This blogpost took over a month to write, it’s what I like to call exploratory writing where I explore some ideas that I have, or a new topic that I don’t know about and share it with you. It isn’t as polished as I’d like it to be. I also need to find a better way to present UI code, like having a live UI to interact with. The writing is quite long, there is a lot of code, but hopefully you’ll make it through. ...

September 17, 2023 · 29 min · Abhinav Omprakash

Petri Plates to Parentheses: How I Became a Clojure Engineer

Exactly a year ago (15th December 2021), I was sweating bullets because it was my first day at my first ever tech job. All I could think of was “They made a mistake and haven’t realized it, they’re going to find out that I can’t really code”. But wait, how did I get here? Just a year ago, I was in a lab, waiting for the autoclave to finish, so I could make my plates and go home (autoclaves are used to sterilize lab equipment). ...

December 15, 2022 · 11 min · Abhinav Omprakash

Learning to walk with Clojure

Introduction This is a blogpost on how to use clojure.walk. clojure.walk is incredibly powerful and definitely worth investing time into. We’ll first look at some simple examples to get a feel for the functions and then I’ll demonstrate its power by walking through a problem and showing two solutions, one without clojure.walk and one with. I know the title says ’learning to walk’, but by the end of the post you will know how to fly. That is how powerful clojure.walk is. ...

October 9, 2022 · 23 min · Abhinav Omprakash

ELI5: Clojure's Iteration function

I’m going to try to explain in the simplest way how clojure’s iteration function works. It’s hard to discern how it works by reading the documentation (atleast the first few times). One of the most common use cases for iteration is making paginated api calls. A paginated api call usually returns two important data points, the actual data and a cursor which is used to fetch the next set of data points from the sequence. ...

September 21, 2022 · 6 min · Abhinav Omprakash

How to run tests in clojurescript

This is a stupid simple guide to setting up clojurescript tests. This was written out of sheer frustration at the lack of a simple guide to run cljs tests. This will not be a guide about the various configurations you can run tests with, or the various ways to run cljs tests or any of the fancy stuff. This is a guide I wished I had when I was trying to setup clojurescript tests. This is a dumb, copy-paste kinda guide to get you up and running as fast as possible. Because once you’ve set it up for a dummy project, setting it up for bigger projects gets easier. ...

July 16, 2022 · 7 min · Abhinav Omprakash

Writing Transducer Friendly Code

Introduction Clojure Transducers are a thing of beauty. They maybe hard to wrap your head around the first time, but are a joy to work with when it clicks. I’m not going to cover Transducers in this post, you can watch Lamdba Island’s video on transducers. All that you need to know is transducers are FAST! With a small change in your code, you can get a performance boost for free. ...

June 4, 2022 · 7 min · Abhinav Omprakash