Interesting post: REST = FIOH (F**k It, Overlord HTTP)

Interesting post on how REST got misappropriated! Too bad that this blog has stopped publishing. Here are some “least” accurate bits from this post. The post is richer than what I put here as clickbait ;-).

… in the mid-2000s, the people who were sick of SOAP and wanted to do something else needed their own four-letter acronym… Among this crowd, SOAP inspired contempt. Ruby-on-Rails dropped SOAP support in 2007…

If the get-shit-done crowd wasn’t going to use SOAP, they still needed some standard way of doing things. Since everyone was using HTTP, and since everyone would keep using HTTP at least as a transport layer because of all the proxying and caching support, the simplest possible thing to do was just rely on HTTP’s existing semantics. So that’s what they did. They could have called their approach Fuck It, Overload HTTP (FIOH), and that would have been an accurate name, as anyone who has ever tried to decide what HTTP status code to return for a business logic error can attest….

Luckily, there was this dissertation out there, written by a co-author of the HTTP/1.1 specification, that had something vaguely to do with extending HTTP and could offer FIOH a veneer of academic respectability. So REST was appropriated to give cover for what was really just FIOH.

Weekly Notes 2026/09

  • I took a trip to Pondicherry this weekend. It was a rare week when I didn’t open my work email at all! I managed to spend two days without feeling any “withdrawal symptoms.” It’s a bit funny that people are okay with someone spending a couple of days streaming Netflix, but find it concerning when someone works for a few days straight. If you have nothing better to do, you might as well spend time on your work!
  • March 2 is my first day at Veeam. I’m excited to meet my team at their Bengaluru office. The onboarding process has already started. For once, I’m happy to get back to work instead of doing interviews.
  • Many of my open-source projects are now slowly rotting. I find very little motivation to work on them. Most of them are now just a prompt away. But there are still places where AI isn’t welcome because it’s not very effective yet. Many kernel communities are wary of AI slop, and some have outright banned its use. Perhaps I should focus more on developing low-level stuff again!
  • I’ve been migrating slowly to Zoho. Most things work great out of the box. I kind of like Zoho workflows (perhaps it’s just the novelty).
    • I have mixed feelings about Zoho Notebook, though. I’ve started using it heavily now. It’s slow to open on mobile (especially compared to Google Keep). There are other rough edges that will probably go away after a few weeks of usage.
    • Maybe I’ll keep using Notion (free plan) as my personal knowledge-management system. Notion is even slower to open on mobile.
    • I still can’t find a good TODO app like Wunderlist.
  • I’m still looking for a great personal finance system that integrates with HDFC Bank. The current solution I use—Wallet from Budgetbacker—is not bad. I wrote about it earlier in Personal Accounting and Budgeting Apps. The HDFC Bank sync needs a refresh almost every week (maybe an HDFC issue?).
  • I watched a couple of cricket matches. South Africa thrashing India wasn’t very pleasing to watch, but I think a reality check would do the current management some good.
    • Somehow, I don’t like most of the players in the current team. Honestly, I don’t think I like any batsman other than KL Rahul, or any bowlers other than Bumrah, Varun, and Kuldeep.
    • The way Sri Lanka collapsed against New Zealand was equally disappointing.
    • England stole a win from New Zealand. England somehow does pretty well under pressure.
  • I bought a couple of smart plugs for home. One is from Tapo and the other is from BlackT. Tapo requires an app to view data, while BlackT has a built-in LCD display. I kind of like both!
    • The dishwasher uses roughly 1.3 kWh per use, i.e., about ₹8 per cycle. I’ll measure the geyser usage next.

A guy named Gandhi

What if I tell you that I know a guy who accidentally sliced his butt off like a mango? As they say, you can’t make this shit up!

When I was a kid, there was an older kid nicknamed Gandhi in my village. He was a simpleton, never used a curse word, always smiling, never seen angry, and often wore white khadi clothes. Hence the nick name.

The villain in our story is a fodder/chaff cutter or kutti katne ki machine. Here is a picture. Can you imagine using it to slice off your butts?

Kutti katne ki machine or chaff cutter. You can use it to slice your butt if you try really hard.

So one fine day in March, Gandhi took the blunt blades off the machine, got them sharpened at a nearby town Seohara. And then he put the blades back on. So far so good. To check the alignment, you rotate the wheel with blades and hear the swashing sound blades make when they move across the grass feeder opening. He enjoyed listening to metal sound and rotated the machines as vigorously as he could.

Legend has it that as he was picking tools from the ground, he stepped on a stone, lost his balance and fell back, butt extruded onto the rotating blades. The machine shown in the image is pretty high. Imagine a shorter one and imagine someone falling onto the blades butt first when the blades are rotating. The blades sliced his butts and he fell down unconscious.

Fortunately, his bhabhi saw his falling down. She ran towards him and shouted for help. It is said that the brave woman put the slices back on his buttocks .

He was rushed to a nearby hospital in a tractor and trolley. He was put in a charpai, face down of course. It was a 20 minute journey. He was barely conscious. The trolley was filled with well-wishers and family member, not less than 20 people!

He was driven to the closest hospital in Seohara. Hospitals in town typically have one doctor who sits in his room and patiently forms a line to see him. His relatives barged into the doctor’s room and shouted, “emergency hai doctor sahebm hamare admi ne apni gand kaat li hai!”. (Emergency, doctor. Our man has cut his ass!).

The doctor was too curious to know what happened. Instead of asking to bring patient to him, he walked out of his room to see the patient. Some of his patients were also equally fascinated, one of them still had a thermometer in their mouth. He saw him and chuckled. Strangest case of his life, he claimed and then he suddenly became serious.

“it is a police case. You tried to murder him”, he said, “I’ll report this to the Police first”. Gandhi’s father didn’t like the accusations. He found it almost idiotic. “Array doctor, marna hota to gardan katne, haath per katte, gand katte kya?” (Doctor, if we wanted to murder him, we would cut his throat or limbs, not his ass!). I am told he called the doctor chutiya too!

The doctor was convinced and perhaps a bit embarrassed at this own idiocy. Sure, no one would chop off someone butt a little to murder them and bring them to him for treatment. Gandhi was given sedatives and his butt slices were sewn back. For a few months, he was on a liquid diet else you know! He spend a whole month on a charpai listening to his favorite songs on radio.

Every time someone from my village visited this doctor, he would tell this story to all of his patients.  “In there village, there is a boy who chopped off his butts”, he would say. It wasn’t always appreciated but everyone used to get a good laugh.

Gandhi is married with a few kids. He is doing well. He uses his butts normally, just like you and me. He can ride a tractor and a bicycle too.

Personally, I’ve never seen his injury. I heard multiple version of this story with multiple types of masalas applied to it. He is shy. He doesn’t like to talk about it, let alone showing his injuries to anyone. I don’t know how big the slices were. There are rumors about the number of stitches the doctor needed to put.

A Trip to Pondicherry

    This week, we visited Pondicherry on a three days vacation.

    I started when Somya informed her plan to stay there for few weeks and she invited us to stay with her family. She informed dates in advance. I planned to visit this weekend. Later we got to know that Anjali was there as well during the weekend.

    We decided to drive by car. Ookie is now comfortable inside the car. The inflatable bed that I bought when Anu had plaster on her ankle is serving us really well on these trips. Kaalu sometimes gets pretty stressed and anxious inside car, especially during the day time traffic, so we tried calming tablets and they do wonders for her. I should use them during Diwali when the whole country turns into a loud gas-chamber!

    Driving car to Puducherry from Bengaluru wasn’t the most pleasant experience, especially in the late evening. Almost half of the route was two lane highway. Overtaking slow trucks or auto and avoiding overtaking cars and buses from the other side was also tricky. A lot of vehicles have very bright headlights these days, including small autos, which makes is very hard to see anything when these lights flash in your eyes. The roads were in good shape and except of a speed-breaker that I didn’t see, most of the travel was without any bad bump. We lost 30 mins inside Bengaluru traffic and 45 minutes in a sudden jam on highway. It took us more than 8 hours to reach Pondicherry!

    I think I got some “bio-fuel” (ethanol blended) on the way from a BP/Jio petrol pump. That made car pickup worse and it stinks.

    We reached at Somya place around 9pm and slept after having dinner. Next day, we went to a beach. Neither Ookie nor Kaalu enjoyed the beach. It was their first time and both were scared of big waves. Also, late February turns out to be a little too warm to be on the beach during day time. Unlike west coast (e.g. Mangalore, Mumbai), the beaches in Pondicherry are not shallow and waves are bigger, stronger and dangerous.

    Kaalu and Ookie didn’t like wave crashing near them! Kaalu liked the little crabs on the beach but fear of waves took the fun away. Ookie enjoyed playing in the sand though and Kaalu would dig some sand and lay on it.

    I got to meet old friends and more. Ookie enjoyed the night time at Pomegrade beach. Fortunately, city doesn’t allow vehicle on the beach road and it made all the difference. She walked freely on the beach road. We also bought a funny musical instrument from a road-side vendor. She also enjoyed playing with another toddler in the house who taught her how to jump down the bed!!

    (clockwise from top) Dilawar, Kaalu, Anjali, Somya, Anu, and Ookie

    I didn’t find Puducherry to be very exciting. But again, I don’t find cities to be very exciting. Food is good but food is usually good in all cities.

    The botanical garden was OK but has nothing worth really visiting. Great for toddlers though. It didn’t have any especial tree or plant to excite me. The flower garden was lame and poorly maintained — I’ve seen better personal garden. The aquarium was also pretty meh but much better than garden. Ookie enjoyed her time inside the aquarium. Sadly, the choo-choo train is broken and is just a show piece now. Perhaps we need the British back to ensure things work?

    Ookie and Me in a broken choo-choo train at Pondicherry botanical garden. It’s a shame that this train doesn’t work because they have pretty good track inside the park!

    Beaches are not as dirty as in Chennai but they are not clean either. Occasionally you see broken glass in the sad and put your sandals back on. Our civic senses needs to improve a lot! Also, streets are not walk-able in Puducherry as well, except for one street in Pomegrade beach where they don’t allow cars. I found too many bikes parked on the road most of the time. Bengaluru is definitely worse!

    The local food was very cheap and good and the tea was excellent. I am a great fan of tea making in both Tamilnadu and Kerala. Its a shame that Karnataka and rest of the country hasn’t adopt this method.

    While coming back, we left at 12:00pm. Diving was a pretty decent experience in late night. I didn’t feel sleepy since Anjali was awake in the car and we chatted whole way. By early morning, we were barely awake. It took us 5:30 hours to enter south Bangalore where we met with decent traffic at around 5:30am! It took me 45 minutes to reach home after we entered Bengaluru. Kaalu was pretty happy to see Jumbi and other friends.

Feb 21, 2026: Weekly Notes 2026/08

We celebrated Ookie’s second birthday on Feb 17. I found an excellent place for cake, Chiris Patisserie. Pretty costly, Rs. 1700 per kg but totally worth it! For birthday food, I ordered food from Chetty’s Corner from the neighborhood. Decent food. The kids loved the pizza and burgers. As expected, only folks who stay in the neighborhood showed up. Anu sent some gifts for daycare — rainbow pencils and pouches for kids. People shouldn’t send food to the daycare on birthdays especially chocolate or other sugary stuff. I don’t like Ookie eating chocolate at daycare at this age!

  • I had a mild runny nose the whole week! It was very hard to sit at the desk and do any work for a long time.
  • This Friday was my last day at Dognosis. I’ll probably engage with them as consultants occasionally. Before starting my next job, I’ll spend some days at Puducherry this week. I’ll be meeting Somya, her husband and possibly a few more friends. It will be the first time both Kaalu and Ookie will both see the beach and the sea.
  • I am collecting reading materials to prepare for my new job. Mostly about microservices, API design and related DevOps.
  • Someone from datameet group cleaned up data of the Periodic Labour Force Survey (PLFS). It is available at https://india-plf-survey.pages.dev/. The average earnings are still pretty bad <Rs 20,000 per month! Much touted IT/Software doesn’t even break into of professions that employ more than 0.3% of workforce.
Software/IT doesn’t even show up in the top contributor (>=0.3%) to employment in India.

Starting a New Job In March 2026

I’ll be starting a new job this March. At my new job, I’ll be working with distributed data, its security, and its resilience. I do hope that I get to write some Rust! I guess I also need to buy a few more books on distributed systems, microservices, and data engineering. And some pants to go to the office a few days a week.

I’ve made my peace with the fact that I need to specialize now — or rather have a specialized resume. That means saying goodbye to many things I’ve enjoyed indulging in the past, kernel and systems programming, numerical analysis, algorithm development, and more.

Most of my work experience has been in startups and academic labs. I co-founded one startup and spent six good years at it. It didn’t work out but I have no major complaints. I’ll probably try again someday when personal life is a bit less exciting. After that, I worked at another startup for almost a year. Each startup is entirely different and that makes them both exciting and dangerous. Exciting because you may encounter a totally new way of accomplishing something which you’ve never thought about. Dangerous because if something doesn’t work as well as you like, you have no easy escape. Unlike in large organizations where you can try to switch teams, at startups, you navigate the choppy waters or jump ship.

To me, equity and cutting-edge development or engineering work (in no particular order) are two good reasons to work at any startup. Though for every one unit of cutting-edge work you enjoy, there are typically nine to 999 units of drudgery involved. But that is totally fine. Being a professional doesn’t mean you have to like your job all the time to do it well.

So, after seven years in startups, I was looking for a more structured environment to specialize. I am perfectly fine being a small “specialized” cog in a giant machine where I could appreciate the satisfaction of a task well done. And it feels that the grass is greener on the other side? Reddit seems to agree.

Over the years, I’ve done many things: kernel components, patent filings, numerical simulators, web and Android apps, SDKs and libraries, DevOps, and people-ware such as hiring, designing office layouts, finding vendors, and fixing IKEA furniture. I speak Rust, C++, Python, C, PHP, and TeX fluently, and I’m passable in Haskell, Lua, Java, Kotlin, Scheme, and a few HDLs like Bluespec, Verilog, and VHDL. This makes for a good generalist profile, but no “specialized cog” in a giant machine needs most of that.

So, the first and the hardest problem was figuring out what I want to drop from my résumé so that a job application would actually invite interviews. I could see three to four specialised resumes in my current 12 YoE generalist resume with each having 3-6 YoE. I also need to consider the local economy and hiring patterns. Bengaluru isn’t a place where kernel or compiler developer jobs are easy to find compared to backend or app development roles. The former exist mostly in a few large organizations that follow very different hiring models from startups. I had to focus on my most recent experience and eventually settled on security, APIs, and Rust/C++ development work.

I started the process of writing a resume in late November 2025. Not out of ambivalence toward my current job but to prepare for the worst, and to build muscle memory. It took me more than three months of refining. I feel my résumé is in good shape. I’m not the most careful writer, so I need to reread my writing multiple times to ensure it’s readable. This becomes even more important for a résumé, which has to be succinct and speak clearly to a right audience. I worked on it at a slower pace: editing on weekdays, reading on weekends, and repeating the cycle. r/EngineeringResume has great advice on résumé writing. I also fed my résumé to ChatGPT and Gemini and asked for reviews. It was very useful early on—it helped refine things quite a bit and offered generic advice to tweak the résumé for specific job descriptions, which I rarely accepted. I found it very useful many times.

After a couple of months of reading, tweaking, and rereading my résumé, I felt confident enough to start applying more liberally. I shared my résumé with a few friends for referrals. I’m not always comfortable asking for help—I prefer to walk in through the front door.

I also started doing leetcode and enjoyed the challenge for a week. But soon I lost interest. I am never going to use those patterns at work. Earlier, I took courses in cybersecurity and project management and using a Coursera subscription, but only completed ones I genuinely enjoyed—for example, an excellent course in project management and a few others. I’m not sure if anyone ever looked at these certificates. These courses were a better time spent than streaming something on Netflix.

Things started picking up pace in late December. I got a few positive responses, which would fizzled out after I share my expected salary. Still, it gave me enough confidence to apply to larger organizations. In hindsight, I think I applied to Bunny CDN a bit too early with a weaker résumé—I would have loved to interview with them. Surprisingly, several places I thought would be interested never responded at all or responded very late.

In January, I received positive responses from some large or mid-to-large enterprises: Cloudflare, Toyota, Veeam, HPE, and AMD. Cloudflare, Veeam, and Toyota moved quickly. I missed Cloudflare’s second round but didn’t get another chance to reschedule. I’m still embarrassed about that mistake and also disappointed that Cloudflare didn’t respond to the request to reschedule. My interview experiences at Toyota and Veeam were the best. No one showed up for my scheduled interview at HPE (PS: They called again and promise to reschedule again but I didn’t get any email!)! I declined an interview with AMD after accepting the offer from Veeam. I’m still waiting to hear back from Toyota about the final offer. Things can suddenly move very slowly at large enterprises.

After receiving one offer, I stopped applying for similar role but thought of finishing the other ongoing interviews. How I prepared for interviews is another story. The short answer is, you can never over prepare and you must spend enough time preparing. There are some excellent resources on YouTube. I’ve nothing interesting to add here.

I wasn’t planning to resign from my current job even after receiving any offer. I had significant equity, and the founders are genuinely nice people. My issues were with the day-to-day work and the nature of the organization. I never felt like I was in an engineering org, but rather in a “science” org that think in terms of projects. I like to think in terms of “product” and the word “project” sounds almost philosophical to me (full disclaimer: I’ve a PhD in system biology so I know what “project” means.) While engineering is mostly about maintaining and refining a product or a working solution, academia is mostly about “publish and let it rot” (project). And that’s why I don’t get excited about the word “project”! To be fair, academic incentives are mostly “I was here first, don’t pee on this territory” kind and not “lets build a usable product so folks will pay us money” kind! A few minor developments nudged me to resign before having an offer in hand. I thought resigning will help me focus on the interview process. Fortunately, things worked out well for me and I got an offer after a couple of weeks of resigning. I wouldn’t recommend this route to everyone since interviews are social processes and things can go south very easily even when interviews look very promising.

I also interviewed at a few cybersecurity based startups in growing phase for IC roles. I was taken aback by the LeetCode-style questions for senior positions. I had expected discussions around real security problems they were hiring me to solve. Maybe I just hate LeetCode because I don’t do well in live interview settings and it’s easy to criticize what you’re not good at. I also posted on HN (the “Who Wants to Be Hired” thread). Surprisingly, someone from KLA Chennai responded positively. With KLA, I had the most energetic introduction and screening call ever. I felt that they are thinking very highly of me. I was disappointed that I didn’t perform well enough on their technical assessment (HPC, C/C++) to move forward.

There were also some funny—or irritating, depending on your perspective—experiences. At one European startup with an office in Bengaluru, I was interviewed for two different job descriptions in two separate rounds. I was also asked to write code in Google Docs! At another early-stage startup, they asked me for my high-school board and marks (founder worked at Byju’s!). I tried to keep a straight face. I guess it takes all kinds.

Feb 14, 2026: Weekly Notes 2026/07

  • My second round at Fortanix was a failure!
    • It was a medium leetcode question to be solved inside a browser. Yes, a leetcode for senior roles and that too in a browser! I mostly use vim with a buttload of plugins. Maybe I should start asking if leedcode in browser would be used for evaluation and just say no.
  • Review article of a very interesting book. Here is a mindmap from Reddit.
  • An old friend, Somya Mani and her husband John, came to visit Monday morning. Flight from Vienna to Bengaluru took almost half day and both of them super tired. Both slept after having breakfast. I got busy with office meeting and they went to their hotel. We may have dinner sometimes this week.
  • The engineering workflow that I designed for my current employer might get adopted this week. One of the founders is very interested in it and we refined it over the weekend. Tomorrow I need to sell it to the team. Ideally I should practice the presentation. I will if I get some time in the morning before I drop Ookie to the day care.
  • Many of the street lights in my neighborhood don’t have a proper switch. I’d loved a light sensor based but a manual one is also fine since labor is cheap. But the current way is monumentally bad and pretty dangerous. 
  • I opened account on to learn trading! My niece has been sending me screenshots of how much he is making every day. I made 2500 in half an hour from 10k investment and lost 8k next day. This platform requires constant attention which I don’t have. I’ll probably learn a few more things with very little amount of money and move on. Its not for me. It is pretty addictive though.

Using `otelcol` (open-telemetry collector) to collect docker logs and send to a self-hosted signoz

Assuming that your self hosted signoz is at http://signoz.example.com:4317 (gRPC) or at http://signoz.example.com:4138 (json), following is a docker compose setup to scrape logs from docker and send them to a self-hosted signoz. Prefer grpc since it is very efficient when it comes to sending logs.

Using Logspout, a log forwarder

I am going to use gliderlabs/logspout. It collects logs from running containers (using docker.sock) and make them available via a tcp socket for otel-collector to read. One can also use fluentd etc. I found this to be a simpler solution for my needs.

Set up the tcp receiver in your otel-collector-config.yaml to listen for logs. I am going to use port 2255.

otel-collector.yaml
YAML
receivers:
tcplog:
listen_address: "0.0.0.0:2255"
processors:
batch:
send_batch_size: 512
exporters:
debug:
verbosity: detailed
otlp:
endpoint: http://signoz.example.com:4317
tls:
insecure: true
service:
pipelines:
logs:
receivers: [tcplog]
processors: [batch]
exporters: [otlp]
extensions: []

Run the Log Forwarder

In the following docker compose file, a service logspout collects logs from docker containers and make them available on port 2255. We then use the above otel configuration files to read logs from the port 2255 and send it to self-hosted signoz.

compose.yaml
YAML
services:
logspout:
image: docker.io/gliderlabs/logspout
volumes:
- /etc/hostname:/etc/host_hostname:ro
- /var/run/docker.sock:/var/run/docker.sock
networks:
- otel
depends_on:
- otel-collector
command:
tcp://otel-collector:2255
otel-collector:
image: docker.io/otel/opentelemetry-collector-contrib
restart: unless-stopped
volumes:
- ./otel-config.yaml:/etc/otelcol-contrib/config.yaml
networks:
- otel
ports:
- 4317:4317 # OTLP gRPC receiver
- 4318:4318 # OTLP http receiver
- 2255:2255
networks:
otel:
driver: bridge

That’s it. Here is screenshot of collected logs.

Logs inside self-hosted signoz

 

Feb 07, 2026: Weekly Notes 2026/06

  • I am getting frustrated with a car mechanic for not fixing my Tata Nano’s gearbox. It has been with him for four months now. Unless I call him, he doesn’t provide any updates. I ended up pinging the person who recommended him who is a genuinely a very warm and nice guy!
    • Apparently (he told me), all car mechanics do this. They never proactively update you unless you ask.
    • He reassured me that the mechanic is very good at what he does and that the car should be fixed in a few more weeks.
    • I felt bad about involving him.
  • My impression of the mechanic is that he’s a good guy and understands what he’s doing, but he doesn’t keep me in the loop.
  • I’ve started migrating away from Notion to other open-source or self-hosted tools. For example, WordPress (this site) is now my platform for blogging. My notes are in Joplin now. I still need to find a good tool for to-do, web clippings, and task management—perhaps Zoho?!
  • Yesterday, we went to Aditya’s place to meet a common friend. The “Hound of Madurai” was in town and feeling extremely lovey-dovey about meeting old friends. Why not? It took only 90 minutes to drive 20 km.
    • Kaalu was so tired after the whole “meeting friends” affair that she slept the entire night in one position. Usually, she keeps changing her sleeping spots throughout the night!

20 km in just 90 minutes. Driving in Bengaluru!
  • I have interviews scheduled for a senior role early next week at Fortanix. I had a manager screening yesterday which I think went well. I felt alive talking about security and the SaaS services built around it. I liked that they started with manager screening for a senior role. So that we both could easily decide if we want to invest further time in the interview process. I had to say no to the HP Enterprise interview because they start with a technical interview first and I am not feeling motivated to prepare for it without knowing what their plans are!
  • I bought this saw for pruning branches. It’s a good saw—very sharp. The pole is quite long and the overall build is fine, but it could be much better. In particular, the grip on the loosening/tightening joints isn’t great. The saw also didn’t come with a safety cover.
  • I used it to cut most of the lantana trees growing in an empty plot next to my house and trimmed some branches from the mango and Jamun trees that were blocking light. My neighbor also enjoyed trimming branches that were blocking his security camera’s view. All in all, a good purchase.

Enumerate applications listening to a computer port

How to figure which application/process is already using a port?

For example, below apache is failing to start because port 80 is already taken by some other application.

Apr 11 21:08:13 ip-172-26-0-194 systemd[1]: Starting The Apache HTTP Server...
Apr 11 21:08:13 ip-172-26-0-194 apachectl[17997]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
Apr 11 21:08:13 ip-172-26-0-194 apachectl[17997]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80

Here is a script which can help you find this info.

application_port_list.sh
# list out the processes using a port.
# This script does not give the exact answer but potential solutions. It uses
# three tools one after another.
#
# - lsof
# - netstat
# - ss
set -e
PORT="$1"
echo "Looking for application using port $PORT"
if command -v lsof &> /dev/null
then
sudo lsof -i :$PORT
fi
if command -v netstat &> /dev/null
then
netstat -tulpn | grep ":$PORT"
exit;
fi
if command -v ss &> /dev/null
then
sudo ss -tulp | grep ":$PORT"
exit;
fi

Awesome papers (developer focused)

This summary is touched-up by AI.

On the Criteria to Be Used in Decomposing Systems into Modules

Paper: criteria_for_modularization

This paper introduced information hiding as the fundamental principle for modular design. Instead of breaking systems apart by what they do i.e. mapping a flowchart onto modules, it argues we should decompose them by what design decisions are likely to change i.e. one module per decision which is likely to change.

Impact: This idea underpins encapsulation, stable APIs, and modern system boundaries — from object-oriented design to microservices. Nearly every discussion about maintainability traces back here, whether explicitly or not.

A Note on Distributed Computing

note-distributed-computing

This paper explains why distributed systems are not just “local systems with a network.” It highlights hidden assumptions—like zero latency or perfect reliability—that break down immediately once computation is spread across machines.

Impact: It became a foundational text for distributed systems thinking. The ideas influenced RPC design, cloud architecture, and the now-famous fallacies of distributed computing.

The Next 700 Programming Languages

Landin66-next-700-languages

Rather than proposing a new language, this paper introduced a framework for describing programming languages using mathematical foundations. It showed that languages could be reasoned about formally, not just implemented ad hoc.

Impact:
This work shaped the field of programming language theory and semantics. Many modern functional and hybrid languages owe their conceptual clarity to ideas introduced here.

Can Programming Be Liberated from the von Neumann Style?

This paper critiques imperative, state-heavy programming and argues for a functional alternative built around composition and mathematical reasoning rather than mutable state.

Impact:
It helped legitimize functional programming as a serious alternative, influencing languages, compilers, and parallel programming models.

Reflections on Trusting Trust

This paper demonstrates how a compiler can be maliciously modified to insert backdoors—even when the compiler’s source code appears clean. It shows that trust in software cannot rely solely on source inspection.

Impact:
It permanently changed how we think about trust, compilers, and software supply chains. The ideas are still central to discussions about reproducible builds and secure toolchains.

Lisp: Good News, Bad News, How to Win Big

This essay reflects on why technically superior systems often lose to simpler, more pragmatic ones. It contrasts ideal design with real-world adoption pressures.

Impact:
It popularized the “worse is better” philosophy, influencing how engineers think about trade-offs, simplicity, and adoption.

An Experimental Evaluation of the Assumption of Independence in Multiversion Programming

This paper experimentally challenges the idea that independently developed software versions fail independently—a key assumption in fault-tolerant system design.

 

Abstract of “AN EXPERIMENTAL EVALUATION OF THE ASSUMPTION OF INDEPENDENCE IN MULTI-VERSION PROGRAMMING”

Impact:
It forced a reevaluation of N-version programming and influenced how safety-critical systems are designed, tested, and certified.

Arguments and Results

This paper reframes design patterns not as code recipes, but as arguments—ways to reason about design trade-offs and communicate intent.

Impact:
It shifted how patterns are taught and discussed, emphasizing design rationale over mechanical reuse.

A Laboratory for Teaching Object-Oriented Thinking

This paper advocates teaching object-oriented design through experimentation, feedback, and responsibility-driven design rather than rigid theory.

Impact:
Its ideas influenced OO pedagogy, agile practices, and test-driven development.

Programming as an Experience: The Inspiration for Self

This paper focuses on programming as a human experience, emphasizing simplicity, immediacy, and live exploration rather than static abstractions.

Impact:
It influenced IDE design, live programming environments, and dynamic languages that prioritize developer experience.

A dog is scratching himself in a sunny February day in Bengaluru, India

February 01, 2026 – Weekly Notes

  • I spent last month (Jan 2026) interviewing and job hunting. I have one offer that feels good, and I may receive another by the end of this week. I also have one interview left that starts next week.
  • I really enjoyed Veeam’s interview process. The Toyota interview went great as well. I was a bit disappointed with Cloudflare’s process—I was expecting them to reschedule after I missed the second round.
  • Kaalu is now officially overweight. She weighs 25 kg; her ideal weight is 20 kg. Dieting doesn’t work since the whole neighbourhood feeds her, and she eats competitively outside.
  • I’m thinking of migrating from Notion to WordPress. Notion is great at what it does, but the publishing options are less than ideal. I’m also reluctant to pay $12 per month for it. They should bring back the $5 personal plan! It feels like they’re moving more toward enterprise users.

Drainage Dogs

For the last few years, occasionally, I witness a curious behavior from some street dogs. When they see me, they don’t bark or wag tail (often both together) but quickly run away and hide in road side drainage. A bit like rats!

I think I know what’s going on.

The municipality has aggressively been neutering dogs in my locality. Road-side drainage provides an escape from the capture from neutering. Any strategy that helps dogs survive the neutering is being selected for.

Drainage in any Indian city are usually in bad shape, unkempt and usually not covered. Most days they do not have flowing water. Dogs can enter and exit these drainage easily, sleep inside them, and also raise their pups. A non-zero percentage of dogs that are now breeding heavily are using these drainage effectively.

No wonder that their pups have learnt this behavior. Instead of barking at me or interacting with me in more benign ways, they quietly run to their shelter like a rat when they see unknown humans approaching them. This keeps them safe from neutering from municipality staff to breed another day.

A black dog is resting in her bed

January 10, 2026: Weekly Notes 2026/02

  • I’m trying to set up an engineering workflow at Dognosis (my current employer). After brainstorming with ChatGPT, I ended up with a template: Engineering Workflow Rhythm for a 20–100 Person Startup.
  • I clearly spelled out what I was looking for in the prompt—and what I didn’t want:
    • The first thing in the week is a short meeting; everyone should know they’ll work independently for the rest of the week.
    • Every Friday, we review work, update status, and report to stakeholders.
    • During the week, no cat herding. Each engineer acts like a professional and is treated like one (I don’t ask for updates).
    • Write before talking. Every meeting must have a written agenda.
  • I did the same exercise with Gemini. The results were not to my liking. ChatGPT’s responses were short, pointed, and—most importantly—felt implementable. Gemini, on the other hand, used language I don’t usually hear from good engineers. It added phrases that would make a PHB from Dilbert proud.
  • You may also like this post:Small projects, clear scope | Swizec Teller, along with his other posts on related topics.
  • I used to think std::move was C++’s way of implementing Rust-like move semantics. Turns out it’s another confusing monstrosity created by the committee that doesn’t do what it sounds like (f**king RAII?). std::move doesn’t move anything: A deep dive into value categories. Academic-type people should never be in charge of a language—or anything used by many people. Get a few normal programmers onto the committee, you C++ 😡.
  • 💡 Suddenly there’s a lot of incoming interest in my resume. Either the job market is heating up, or my resume is finally making sense to people. I spent over three months tweaking it (revisiting once a week). Talking to AI about my resume helped a lot.
  • 💬 I gave a few interviews this week.
    🚗 Toyota Connected is almost done. It’s Rust + firmware + software-defined vehicle work, which I’m pretty excited about. The interview itself was very pleasant: the technical team asked relevant questions and were very friendly. I felt comfortable after the first five minutes and didn’t suffer from brain fog.
  • Another interview was with a seemingly good company working in the secure computation domain. Senior leadership described the role one way, while the interviewer described it differently. The interviewer was very focused on dotting i’s and crossing t’s on a LeetCode question—and asked me to write code in Google Docs! I’m not really sure what he wanted to see. You meet every kind.
  • I had a first round with Cloudflare. I applied for a zero-trust and data-protection–focused role. They have the network, they have the edge—I wouldn’t be surprised if they start offering secure enclaves and other services where “trust” is explicitly computed.
  • A few surprising moments in the first round: I wasn’t expecting a technical screening but rather a discussion about the role and engineering problems with a manager. It turned out I’m in their general hiring pipeline, which means a phone screen by a manager first. Perhaps I’ll talk to the relevant team later. Not great, but not a deal-breaker.
  • I went through the round and felt I did average. I said a few very dumb things and had some brain fog. We finished early, which I really liked. +1 to the manager for keeping the agenda tight and being professional. I wasn’t very surprised when I was moved to the next round.
  • After that, I did something embarrassing. I made an off-by-one error in real life and ended up missing my second round 😢. I scheduled it for early Saturday morning (00:00 hrs) but marked my desk calendar for Sunday morning. Strong DND settings on both my phone and desktop made it impossible to error-correct—there was no persistent notification. Very unprofessional on my part, though I’m not mad at DND at all.
  • I sent an apology to the interviewer and asked to reschedule, but I’m not sure if this error is recoverable. Let’s see.
  • Three more opportunities are in the pipeline—all incoming interest, and all pretty interesting: hardware/algorithm development for space satellites, Windows security kernel development, and a data backup and protection SaaS.

January 3, 2026: Weekly Notes 2026/01

December 27, 2025: Weekly Notes 2025/28

  • This will be the last weekly notes this year. I started writing them this year about 29 weeks ago.
  • I’ve been living by “If I am not doing it the rest of my life, I am doing it a few times” (professionally). Let’s see how it stands up to the midlife crisis I am supposed to get in a few years.
  • I had to drive to Hyderabad and back to Bangalore this week because of a semi medical emergency. Kaalu The Fifth did well in the car. My No access also did very well. It gave me ~19 km/l mileage on highway. Driving experience was much better this time. This time I drove 90-100 km/hr speed during night without any issue. Though I prefer day-time driving, but two-wheeler and auto-drivers make life miserable on the highway since they can come from any-side anytime.
  • 🏃🏾I missed three days of running because of driving, but I’ll manage to finish 1000km in a couple of days 🎉.
  • Three months ago, I won a 1 gram gold coin from Spinny when I bought a car from them. But it’s not enough motivation to drive to Tanishque store. I won’t be surprised if I won’t collect it in time. Why can’t these people just transfer the money! Who has time to run around for gold?
  • I used to complain to my co-founder about something similar a lot, who’d have preferred to hire someone “senior” who doesn’t use their hands on the code-base. It’s really sad how many “senior” folks you meet during interviews who really don’t really “work on” the project they “manage” or “lead”.

December 20, 2025: Weekly Notes 2025/27

Last week I did not write my weekly note December 13, 2025: Weekly Notes 2025/26

  • 🏃🏾 I am well on track to finish my 1000 km run this year.
  • Some good reads over last couple of weeks.
  • 📗 Misconceptions about rust lifetime was a good read.
  • I need to read Good conversations have lots of doorknobs a few more times.
  • Found author’s draft on domain driven design Microsoft Word _ Book_AfterFinal_doc – Evans03.pdf
    . Domain Driven Design brings team communication to the center. I am a sucker for any idea that improves communication across teams.
  • 🤯 TIL that you can use either public or private key to encrypt/decrypt message.
    I used to think only private key can be used for encryption. I know, I know, LOL indeed.
    Since certificates contain the public key of a CA, you can decrypt encrypted messages sent from them using it.

BackupOnDelete: A Windows Minifilter And User Space App

When a file is deleted by any means possible, you want to ensure a backup of the file before its get permanently deleted. This post describes a windows minifilter and a user-space app working in tandem with minifilter to implement a working solution.

It is not a tutorial. You can browse the code and check if the patterns I’ve used make sense for your project. Additionally, you may like to have a look at the build system, packaging (nsis based installer) and application code.

Later I rewrote the application in Rust but that is not part of this project’s GitHub Repository.

Architectural summary

  • The minifilter monitors certain events in filesystem that says ‘delete this file’ (on close!).
  • Instead of letting kernel delete the file, the minifilter ask the kernel to rename the file (move it to a temporary space) and hide it. For example, if file D:\MyDocuments\important.pdf is being deleted, it will be moved to C:\ProgramData\Minifilter\D:^^MyDocument^^__??important.pdf??__ and then marked hidden. Minifilter also ensures that new file is not renamed by anyone.
  • Original filepath is converted to a special valid filename (filename!) e.g. D:\MyDocuments\important.pdf to D__^^MyDocument^^??important.pdf?? . As long as you can recover the original filepath from new filename unambigously, we are good to go. You can also use base64 encoded paths as filename. I used a simpler scheme since decoding base64 encoded path inside a kernel minifilter was quite a lot of work.
  • The new path is sent to user-space application which backs it in a bucket and then send a message a kernel minifilter to delete the file.
  • When delete this file request come from the user-space application, the minifilter doesn’t modify the delete-file event and let is go down the kernel stack. The kernel delete the file for sure this time.

Minifilter

This kernel minifilter is a cmake based project that also create a nsis based installer and sign it using your personal key. Note that you need to get the minifilter signed by MS or MS approved vendors before you can publish it. To load the minifilter into your machine, you should follow the official guide https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/development-and-testing-tools

  • The minifilter captures required filesystem events:
    CONST FLT_OPERATION_REGISTRATION Callbacks[] = {
    { IRP_MJ_CREATE, 0, BackupOnDeleteShield, NULL },
    // IRP_MJ_SET_INFORMATION is sent whenever file is marked for deletion.
    { IRP_MJ_SET_INFORMATION,
    FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO,
    BackupOnDeleteShield,
    NULL },
    { IRP_MJ_OPERATION_END }
    };
  • See https://github.com/dilawar/minifilter-backup-before-delete/blob/e61e9c5fbfd9df51749d0de98acfbad7b7a6290b/minifilter/src/main.cpp#L396 for the definition of BackupOnDeleteShield function.
  • If the delete request has come from kenel mode application, let is pass. And if the user-space app is not connected with minifilter (more on it later), don’t do anything.

    if (Data->RequestorMode == KernelMode) {

    // if the requestor is kernel mode, pass the request on uninterrupted

    ret = FLT_PREOP_SUCCESS_NO_CALLBACK;

    goto CleanUp;

    }
        //
    // If no client is connected to create backups then there is no point using
    // the shield.
    //
    if (!IsUserAppConnected()) {
    DFLOG(ERROR, "Shield>" __FUNCTION__ ": No backup client connected.\n");
    ret = FLT_PREOP_SUCCESS_NO_CALLBACK;
    goto CleanUp;
    }
  • For an user-space app to talk to minifilter, the minifilter must create a channel to listen to. The port is opened by minifilter ‣. The channel is created using https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/fltkernel/nf-fltkernel-fltcreatecommunicationport

    PORT_STATE
    InitializeServerPort(IN PUNICODE_STRING CommunicationPortName,
    IN PFLT_FILTER Filter)
    {
    NTSTATUS status = STATUS_SUCCESS;

    gServerPortState = PORT_STATE::UnInitialized;

    PSECURITY_DESCRIPTOR SecurityDescriptor;
    OBJECT_ATTRIBUTES ObjectAttributes;

    PAGED_CODE();

    DFLOG(ERROR,
    "Shield>" __FUNCTION__ ": Trying opening port: '%wZ'.\n",
    CommunicationPortName);

    //
    // Create communication descriptor.
    //
    status = FltBuildDefaultSecurityDescriptor(&SecurityDescriptor,
    FLT_PORT_ALL_ACCESS);

    if (!NT_SUCCESS(status)) {
    DFLOG(
    ERROR,
    "Shield>" __FUNCTION__ " : Port is not initialized. Error "
    "FltBuildDefaultSecurityDescriptor - %X.\n",
    status);
    gServerPortState = PORT_STATE::UnInitialized;
    goto CleanUp;
    }

    InitializeObjectAttributes(&ObjectAttributes,
    CommunicationPortName,
    OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE,
    NULL,
    SecurityDescriptor);

    status = FltCreateCommunicationPort(
    Filter,
    &gServerPort,
    &ObjectAttributes,
    NULL,
    ShieldConnect, // Connect notify callback
    ShieldDisconnect, // Disconnect notify callback.
    ShieldMessage, // message notify callback.
    MAX_CLIENTS);

    if (!NT_SUCCESS(status)) {
    DFLOG(ERROR,
    "Shield>" __FUNCTION__ " : Port is not initialized. Error "
    "FltCreateCommunicationPort - %X.\n",
    status);
    gServerPortState = PORT_STATE::UnInitialized;
    goto CleanUp;
    }

    DFLOG(ERROR,
    "Shield>" __FUNCTION__ ": opened server port handle 0x%p.\n",
    gServerPort);

    gServerPortState = PORT_STATE::Initialized;

    CleanUp:
    if (SecurityDescriptor)
    FltFreeSecurityDescriptor(SecurityDescriptor);

    return gServerPortState;
    }

User-space app

How to connect a user-space app to communicate with minifilter? We opened a port with a name. Use the same name to connect to the port (minifilter). See the app directory in the repository.

C++
void
ShieldClient::connect()
{
port_ = INVALID_HANDLE_VALUE;
HRESULT hr = S_OK;
## ifdef COMMUNICATION_IN_SYNC_MODE
//
// port in sync mode. We don't have to use Overlapped structure here.
// TODO: Not sure about the performance.
//
PLOGI << "Connecting to " << portname_ << " in SYNC mode.";
hr = FilterConnectCommunicationPort(
portname_.c_str(), FLT_PORT_FLAG_SYNC_HANDLE, NULL, 0, NULL, &port_);
## else
// port in async mode. This is the preferred way. Use with completion port.
PLOGI << "Connecting to " << portname_ << " in ASYNC mode.";
hr = FilterConnectCommunicationPort(
portname_.c_str(), 0, NULL, 0, NULL, &port_);
## endif
if (FAILED(hr)) {
PLOGW << "Failed to connect to Shield: Error: 0x" << std::hex << hr;
connected_ = false;
goto MAIN_EXIT;
}
completion_port_ =
CreateIoCompletionPort(port_, NULL, 0, 2 /* 2 user threads */);
if (NULL == completion_port_) {
hr = HRESULT_FROM_WIN32(GetLastError());
PLOGW << "Error in creating completion port. Code: 0x" << std::hex
<< hr;
goto MAIN_EXIT;
}
PLOGI << " ... Successfully connected.";
connected_ = true;
MAIN_EXIT:
if (!connected_ && INVALID_HANDLE_VALUE != port_) {
CloseHandle(port_);
}
}

Messaging

To keep it simple,

  • Each messages has first two bytes of it designated as message code.
  • Next 4 bytes are the size of the message, and rest is the message.

December 6, 2025: Weekly Notes 2025/25

  • 💻I migrates some more code to HTMX — really enjoying working with HTMX.
  • 🔐I was curious if anyone is using Probably Approximately Correct Learning (PAC Learning,
    PAC: Valiant84.pdf ) in cyber-security. Its not yet mainstream but some folks have been proposing it as an alternative to classical ϵδ
    ϵδ-differential privacy
    [2210.03458] PAC Privacy: Automatic Privacy Measurement and Control of Data Processing (summary in
    Trip report: ‘CWI Lectures on Secure Computation’ (Amsterdam, NL) | Roseman Labs Tech Blog). I liked it! PAC gives you lower bounds for free so in many situation, you don’t have to assume or compute the worst-case scenario youself which are great for proving guarantees.
  • 🦀 I also bookmarked 🦀 Patterns for Defensive Programming in Rust | corrode Rust Consulting​
  • 📝Found a another good piece by No access E.W.Dijkstra Archive: The undeserved status of the pigeon-hole principle (EWD 1094)
  • 📕Beej has a new book Beej’s Guide to Learning Computer Science