Fade in A showreel in four acts
Act I
The field
Meters, serial lines, a legacy system nobody could explain, and 113 grids.
01 Ext. Feeder meters · Dawn
From a meter on a feeder to a row in Oracle.
AMR-DAS is the .NET 8 system I built to read feeder meters over RS-485 and Modbus, through Moxa NPort device servers and virtual COM ports, into Oracle for grid energy audits.
- Feeder metersOEM-specific protocols
- RS-485serial bus
- Moxa NPort5150 / 5650 device servers
- Virtual COM portsSerialPort per COM
- .NET 8 AMR appModbus · meter logic · JSON staging
- Oraclestored procedures · batching
- Grid energy auditmeter and feeder data
02 Int. Legacy server room · Night
Five programs. Three meter makes. No source code.
- Servers could hang in the middle of meter reading.
- No source code and no documentation.
- Troubleshooting could take days.
- Grid energy audit data could be missed.
- Reverse-engineer
- HLD
- LLD
- New architecture
- Testing
- Migration
03 Ext. Delhi · South and West
113 grids moved from GEMS to EXIS.
The rollout covered 67 grids in South and 46 in West. Testing started on live meters at the Nehru Place grid.
04 Int. Device manager · Late
Where does COM73 go missing?
A virtual COM port disappeared. I followed it down the Windows device chain one layer at a time. I take the same approach to network problems, like a VPN-to-TeamViewer path that wouldn't connect.
- Windows
Device Manager · Ports (COM & LPT) - Registry
HKLM\HARDWARE\DEVICEMAP\SERIALCOMM - PnP device
device instance · driver version - Driver
nptdrv2.sys - Virtual COM
COM73 · COM99 - Moxa NPort
NPort Administrator mapping - Physical meter
RS-485 line
05 Int. Server room · Day
850+ serial ports. One careful remap.
Serial-over-IP configuration for ~116 Moxa NPort 8-port device servers, split across two Windows servers.
I audited the INI-based serial-over-IP configs on both Windows servers: ~116 device servers and 850+ port mappings.
Act II
The data
Stored procedures, one stray byte, and transformers ranked by risk.
06 Int. Oracle schema · Night
A demand-processing procedure, rebuilt from the inside.
The stored procedure that processes meter demand data. I kept working on it, one bottleneck at a time, and I review the PL/SQL around it.
- Replaced row-by-row loops with set-based operations staged through a global temporary table.
- Collapsed redundant analytic sort passes.
- Fixed an exception handler that was silently swallowing errors.
- Tuned indexes to line up with interval range partitioning on
READ_DATE. - Iterated through versions to settle aliasing, rounding and log reconciliation.
07 Int. DDL review · Late
The bug was one invisible space.
A one-letter code goes into a CHAR(2) column.
Oracle pads it to full width with a trailing space.
Next to the same value without padding, it stops matching, and the change-detection logic broke on it.
I caught it in a DDL review of the demand table, along with a redundant index.
08 Ext. Distribution network · Day
Which transformer should the field team visit first?
Predictive maintenance for distribution transformers. I combined smart meter and sensor data with AMR, SCADA, GIS, outage and maintenance records, and developed and integrated in-house ML models that score each transformer's health and risk.
- Integrate
- Score
- Rank
- Decide
The output is hotspot leads for the field team, with a decision for each one: maintain the transformer, or move to higher capacity?
Act III
The interfaces
APIs, other people's protocols, a shared server, and the plan that held a project together.
09 Int. API gateway · Midnight
An API that checks every request at the door.
PRAVAH serves demand data from Oracle. Every call goes through JWT authentication, role-based authorization and rate limiting, and every failure comes back with a specific state.
- Client
- Authenticate
- Authorize
- Rate limit
- Demand API
- Oracle
Response states
Five explicit states, so a caller always knows what went wrong.
10 Int. Integration lab · Day
Speaking other people's protocols.
EVLinq · OCPI 2.2.1 · .NET 8
SAP · SOAP 1.1 · document/literal/wrapped
- WSDL + XSD
- SPROXY
- ABAP proxy
- SOAMANAGER
- Logical port
- SOAP service
11 Int. Shared Linux server · Night
Ship mine. Break nobody else's.
I deployed a Next.js app to an Ubuntu server that already hosted other people's applications. Nginx routes each path prefix to its own app, and a basePath keeps my static assets and API routes inside my prefix.
Toolchains with mise
12 Int. Project kickoff · Morning
A scope document became 120 tasks anyone can track.
VOLT is a GIS-based platform for monitoring a utility network. I turned its scope document into a structured Excel tracker, generated with Python and openpyxl.
Act IV
After hours
Side projects and local AI tooling.
13 Int. Home desk · After hours
A resume generator that isn't allowed to make things up.
A full-stack side project. It writes ATS-ready LaTeX resumes for a specific job description with a multi-agent LLM pipeline, run by a deterministic state-machine orchestrator.
State-machine orchestrator
- Job descriptionplus your real history
- Resume Writerdrafts bullets toward the role
- ATS Scorerscores keyword coverage like a screener
- Reviewercritiques the draft
- Humaniserrewrites it for a human reader
- Tectoniccompiles LaTeX in a sandbox on a Jake's Resume base
Claims ledger
Every line has to trace back to something real. Truthfulness guardrails block anything else.
Model routing · LiteLLM
- Ollamalocal default
- OpenAI-compatible APIs
- Anthropic Claude
In the editor
- Per-bullet editing
- Keyword highlight overlay
- Versions per application
My local AI setup
- OpenCode
- KoboldCpp
- OpenAI-compatible endpoints
- Context-length tuning
14 Montage · The toolkit
Backend
- C# with OOP and design principles
- .NET Framework 4.7.2 to .NET 8
- ASP.NET MVC and REST APIs
- Dapper
- JWT auth and rate limiting
- Swagger / OpenAPI and Serilog
Data
- Oracle PL/SQL
- SQL performance tuning
- Partitioning and indexing strategy
- MERGE and set-based processing
- DDL review
- Python, openpyxl and Excel automation
Field and integration
- Modbus over RS-485
- Moxa NPort 5150 / 5650
- Virtual COM ports and SerialPort
- OCPI 2.2.1
- SOAP 1.1, WSDL and XSD
- SAP SPROXY and SOAMANAGER
Frontend
- React
- Next.js
Infrastructure
- Ubuntu and WSL
- Nginx reverse proxy
- mise toolchains
- Windows drivers and registry
- INI and config management
- VPN and remote access
Data and AI
- ML for predictive maintenance
- Health and risk scoring
- LiteLLM and multi-agent pipelines
- Local models with KoboldCpp and OpenCode
- LaTeX
15 Montage · The questions changed
- How do I implement X?
- Why is X failing?
- How should X be architected?
- How do I replace this legacy system?
- How do I migrate 113 grids without disrupting operations?
- How do I combine AMR, SCADA, GIS and maintenance data to predict failures?
Layers, not ranks
- DeveloperC#, SQL, React, .NET
- ApplicationAPIs and business apps
- BackendOracle, Dapper, JWT, concurrency
- IntegrationModbus, Moxa, OCPI, SAP
- SystemsCOM ports, drivers, networking
- ArchitectureHLD, LLD, migration
- Industrialmeters, SCADA, GIS
- Data and AIpredictive maintenance
- DeploymentLinux, Nginx, proxies
- AI toolinglocal LLMs, AI integration
Software + utility domain + integration + IoT + data and AI
16 Voice-over · How I work
I change as little as I can and leave working things where they are. I look for the edge cases first, and I confirm them before I act. I ship a version, take the feedback, and ship a better one . And I make the result easy to read at a glance .
17 Next scene
Luxembourg. Or a product team in Pune.
I'm looking for software engineering roles. Say hello:
- Written and directed by
- Ankit
- Backend
- C# · .NET 8 · Dapper
- Field communications
- Modbus · RS-485 · Moxa NPort
- Legacy archaeology
- GEMS → EXIS
- Grids migrated
- 113
- Database performance
- Oracle PL/SQL
- Predictive maintenance
- Distribution transformers
- Security
- JWT · Roles · Rate limiting
- Integrations
- OCPI 2.2.1 · SAP SOAP
- Deployment
- Ubuntu · Nginx
- Spreadsheet effects
- Python · openpyxl
- Language models
- LiteLLM · Ollama · Claude · KoboldCpp
- Typesetting
- LaTeX · Tectonic
- Filmed on location
- Delhi · Pune
No claims were fabricated in the making of this film.
Fin.