Dhirendra (@cmd_dj221) header
Dhirendra (@cmd_dj221) profile picture

Senior Backend Engineer | curious about low-level systems

Bengaluru, India
Joined April 2025
Photo by Dhirendra (@cmd_dj221)Photo by Dhirendra (@cmd_dj221)Photo by Dhirendra (@cmd_dj221)Photo by Dhirendra (@cmd_dj221)Photo by Dhirendra (@cmd_dj221)Photo by Dhirendra (@cmd_dj221)Photo by Dhirendra (@cmd_dj221)Photo by Dhirendra (@cmd_dj221)Photo by Dhirendra (@cmd_dj221)Photo by Dhirendra (@cmd_dj221)
Final Part of Python + SQlite series In the last part, we saw how Python interacts with the SQLite engine, and how the journey goes all the way from Django ORM operations to the raw SQL queries executed by SQLite
5
8
46
2,093
An Important Note for Freshers: I've reviewed quite a few resumes over the past few days, many of them belonging to freshers. One thing I've noticed, and have advised candidates to remove, is listing Class Representative (CR) as an achievement. Being a CR isn't an achievement, highlighting on a technical resume. Companies are primarily interested in your skills, projects, problem-solving abilities to the role. I understand that as a fresher, filling up your resume can be challenging. But adding unrelated college responsibilities just for the sake of adding something can dilute your actual strengths. The same goes for mentioning memberships in communities or clubs that have no meaningful connection to the role you're applying for. Even if an AI tool suggests keeping these things, use your own judgment. If someone tells you that being a Class Representative or a member of some college community automatically demonstrates leadership, communication, or some other impressive professional skill, honestly, it doesn't. A designation doesn't prove a skill. Your actions and actual contributions do. It's a little harsh, but here's some food for thought: Don't fill your resume just to make it longer. Make every line earn its place.
8
1
26
1,204
Dhirendra retweeted
Yo, it's my first article so the writing might not be quite up to the mark. And yes, I did take AI's help to polish the writing, but I can guarantee it'll give you a fresh perspective. Check out : "You're Not Happy Because You Haven't Cultivated It" medium.com/@hisarthak2002/yo…
10
7
41
936
The philosophy of Jeet Kune Do is adaptability. It says, Don't become a prisoner of one technique. The same applies to tech. Don't become a prisoner of one language, one framework, or one way of thinking. Adapt to the situation and its demands. Adaptability doesn't mean abandoning everything you know whenever something new appears. It means understanding your fundamentals well enough to change your approach when the situation demands it. As Bruce Lee famously said, "Be water, my friend." Water takes the shape of its vessel. "Learn to adapt without losing your essence" Not just in your career, but in life itself
2
1
7
118
A system design interview should be like a conversation between interviewer and interviewee, not a monologue. There’s no one-size-fits-all answer to a design problem. The right solution depends on the requirements and trade-offs. Instead of trying to guess the “perfect” answer, try to involve interviewer in your thought process. Ask questions, discuss trade-offs, and explore possible solutions together. Try to collaborate not just present
9
23
597
After a long break, finally managed to spend some time working on my Go backend project. Small update of what all I added: - Implemented database transactions. - Used FOR NO KEY UPDATE in sql query to help avoid unnecessary locking conflicts - Added a Go function to maintain a consistent transaction execution order and reduce the risk of deadlocks. - Tested with 5 and 10 goroutines. All tests passed, with approx 60% code coverage so far Passing tests with 5 and 10 goroutines is a like a checkpoint, but honestly its not a proof that every deadlock scenario is eliminated. But I’m trying to follow standard development practices and make the project more robust as I go. I’ll keep extending it whenever I can find the time
I've started building a small banking application in Go. But this time, I'm not just trying to make the application work, instead i m trying to structure it the way a real production level Go backend service can be built. So far I have completed few things: > PostgreSQL running through Docker > SQL Queries through sqlc and schema files > CRUD operations for accounts > Unit testing with go test + Testify Next is: > Database transactions > Isolation levels > Deadlocks > GitHub Actions Whenever I get time, I keep extending it with authentication, HTTP/gRPC APIs, async workers and Redis. My previous Go projects were mostly about learning the language by building things, but this one is about learning how to build the production type backend in Go
8
1
79
2,576
Dhirendra retweeted
last time i completed the BitTorrent handshake and my client started speaking the peer protocol. past 2 days i went deeper and stated building the actual peer communication flow tcp -> handshake -> interested -> bitfield/Have -> unchoke -> request -> piece after tcp connection and handshake my client now sends INTERESTED and reads the message coming back. i added handling for bitfield, have, choke and unchoke along with maintaining peer's state. bitfield tells us which pieces a peer has , with some bit manipulation magic i can check whether a piece is available or not . and the peer sent a HAVE message finally then came UNCHOKE part , which means peer is allowing us to request pieces. also got blasted with lots of bugs cause i thought the messages would arrive in exact order but these protocols don't care about me so i had to make the client keep processing incoming messages and maintains its states properly. also before i even realized my main.go had become a complete mess cause i threw every fucking thing logic into it lol. now made everything separate .feels good :) next ? request -> piece lots of more bugs incoming lol
last time i completed bitTorrent handshake, now my client can actually speak peer protocol what does a BitTorrent message actually look like on wire ? -> length (4 bytes) : how many bytes after length field -> id : what does it mean -> payload : optional data there are 9 main message id's : choke, unchoke, interested, uninterested, have, bitfield, request, piece, cancel . each of length 1 byte there are 2 operations happening : 1) serialize message -> length+ID+payload -> []byte -> tcp 2) ReadMessage tcp -> read message -> extract id and payload -> message and connected everything. now my client sends : interested : to peer and the peer responded with : have : message next step ? bitfields -> figure out exactly which pieces the peer have and requesting pieces gud nyt :)
9
6
1
33
1,151
introducing getcta.store 🎉 an ai teleprompter that lives in your  mac's notch, right under the camera. → follows your voice as you speak → invisible on zoom, meet & obs → speech stays on your mac → ai writes your script from notes, notion or drive free forever. pro is $9/mo.
we got our first pre-launch sale of the Pro subscription & extra credits 😭😭
101
56
20
220
18,952
Implemented a Custom Dynamic List in C from scratch. previous implementation was able to store only int values. I’ve now extended it into a heterogeneous list that can hold int, float, char, and string values at the same time, similar to Python list. It can be initialized and used with a simple list API: list(list_name) To implement this, I had to learn about tags and unions in C and use them to represent different types within the same data structure. This was actually a good and fun exercise I’m calling the project done for now. In the future, I may add threading support and make the list thread safe, but for now, moving on to the next thing.
Built a basic Dynamic Array in C, basically tried to implement a Python style list, instead of using a typical C array. I wanted to experiment with an API like: list(lst) which internally creates something like lst=[] append(lst, value) which will add values dynamically at the end and also print list in python style only like [1,2,3]. Currently it supports only integers. Next thing is, I want to make it heterogeneous which should be able to hold int, float, char, and strings, similar to Python lists
4
48
1,247
Dhirendra retweeted
Built Limitra my own API rate limiter from scratch. Implemented three rate limiting algorithms: > Fixed Window > Sliding Window > Token Bucket Used Redis as the state engine, leveraging INCR, EXPIRE, ZSET, and HASH operations, with Lua scripts for atomic state updates. Also added concurrency testing, rate limit headers, Docker support, and automated tests.
21
14
1
53
1,381
Small update: Increased the nos of goroutines from 5 to 15 to see how the application behaves under higher concurrency, but so far, all tests passed with 59% code coverage as of now Also Added a test command to the Makefile to make running the test suite easier and run tests just by typing "make test"
I've started building a small banking application in Go. But this time, I'm not just trying to make the application work, instead i m trying to structure it the way a real production level Go backend service can be built. So far I have completed few things: > PostgreSQL running through Docker > SQL Queries through sqlc and schema files > CRUD operations for accounts > Unit testing with go test + Testify Next is: > Database transactions > Isolation levels > Deadlocks > GitHub Actions Whenever I get time, I keep extending it with authentication, HTTP/gRPC APIs, async workers and Redis. My previous Go projects were mostly about learning the language by building things, but this one is about learning how to build the production type backend in Go
4
23
725
I've started building a small banking application in Go. But this time, I'm not just trying to make the application work, instead i m trying to structure it the way a real production level Go backend service can be built. So far I have completed few things: > PostgreSQL running through Docker > SQL Queries through sqlc and schema files > CRUD operations for accounts > Unit testing with go test + Testify Next is: > Database transactions > Isolation levels > Deadlocks > GitHub Actions Whenever I get time, I keep extending it with authentication, HTTP/gRPC APIs, async workers and Redis. My previous Go projects were mostly about learning the language by building things, but this one is about learning how to build the production type backend in Go
20
6
1
204
8,614
Switching between C++ and Go is causing me some serious syntax fatigue. These days, I'm constantly switching between the two for problem-solving and development both, and sometimes I literally end up writing Go syntax in C++ and vice versa. So I created this basic cheat sheet with some common syntax and methods that I can quickly look up when needed. Nothing extraordinary, but it saves me time and brain bandwidth, helping me focus on solving the actual problem instead of fighting the syntax. If you also have to switch between the two,then, this might come in handy
11
3
2
76
1,881
Designed Google Maps from scratch. Map tiles, Contraction Hierarchies, HMM map matching, Flink traffic aggregation, bidirectional routing on 500M nodes. Full HLD breakdown.
9
29
1
205
9,977
Built a basic Dynamic Array in C, basically tried to implement a Python style list, instead of using a typical C array. I wanted to experiment with an API like: list(lst) which internally creates something like lst=[] append(lst, value) which will add values dynamically at the end and also print list in python style only like [1,2,3]. Currently it supports only integers. Next thing is, I want to make it heterogeneous which should be able to hold int, float, char, and strings, similar to Python lists
7
1
35
1,983
Did you know Redis stands for REmote DIctionary Server?
6
2
33
665
Launching mascofast.com 🎉🎉 text to animted mascots in minutes !!!
Wait, @mascoFast never officially launched? We never even made a launch video? Time to make one. 🚀
31
17
9
106
14,393