Blog
Programming, software engineering and computer science, explained from the ground up. Each article starts free to read; the rest needs a free account.
- Security5 min read
OpenID Connect explained
The identity layer on top of OAuth 2.0: what OIDC adds, the ID token and its claims, the discovery document and JWKS, scopes like openid and email, and how "Sign in with" buttons actually prove who you are.
- Java and Spring3 min read
Optional in Java
Use Optional to make "there may be no value" explicit instead of returning null: creating Optionals, orElse vs orElseGet, map and flatMap, ifPresentOrElse, where Optional belongs and where it does not, and the anti-patterns to avoid.
- System design5 min read
Pagination done right
How to page through large result sets in APIs and databases: why offset pagination slows down and skips rows, keyset (cursor) pagination with stable ordering and opaque cursors, page size limits, total counts, infinite scroll versus numbered pages, and API response formats.
- Security5 min read
Passkeys and WebAuthn
How passkeys replace passwords: public-key credentials created with WebAuthn, why they cannot be phished, registration and sign-in step by step, synced and device-bound passkeys, what the server stores, and how to roll them out without locking people out.
- Python and JavaScript4 min read
pip and packages
How Python packages work: PyPI, installing with pip and python -m pip, version specifiers, requirements files, upgrading and uninstalling, why system Python refuses installs, and keeping dependencies safe and reproducible.
- DevOps5 min read
Pods, deployments and services
The three Kubernetes objects behind almost every application, in depth: what a pod really is, how a deployment manages replica sets and rolling updates, how a service finds pods by label, and how they connect, with YAML and the kubectl commands to inspect them.
- Networking5 min read
Ports explained
What network ports are and how they work: how an IP address plus a port identifies one application, well-known, registered and ephemeral ports, the ports every developer should know, listening on localhost versus all interfaces, finding which program uses a port, firewalls, and Docker port mapping.
- Databases5 min read
PostgreSQL for beginners
Get started with PostgreSQL: installing it with Docker or natively, connecting with psql, creating databases, users and tables, essential data types, inserting and querying data, indexes, constraints, JSONB, backups, and the psql commands you will use every day.
- Careers5 min read
Product vs service companies
The difference between product and service companies in Indian tech: how each makes money, what the work and growth look like, hiring processes, pay patterns, learning and stability, the in-between options such as startups and global capability centres, and how to choose and switch.
- Python and JavaScript5 min read
Promises explained
JavaScript promises from the ground up: the three states, creating and consuming promises, chaining with then, error handling with catch and finally, Promise.all, allSettled, race and any, converting callbacks, async and await on top, and the common mistakes.
- Networking6 min read
Proxies and VPNs
The difference between proxies and VPNs: forward and reverse proxies, HTTP and SOCKS proxies, how a VPN tunnel works, protocols such as WireGuard and IPsec, corporate VPNs and split tunnelling, zero trust alternatives, what each actually hides, and how developers configure them.
- Python and JavaScript4 min read
Python decorators
How the @ syntax wraps a function: functions as values, writing a decorator step by step, functools.wraps, decorators with arguments, timing, logging, retries and caching, class decorators, and the decorators you already use.
- Python and JavaScript4 min read
Python generators
How yield turns a function into a lazy sequence: generator functions and expressions, how they save memory on large data, iterators and next(), pipelines of generators, infinite sequences, yield from, and the one-pass catch.
- Python and JavaScript4 min read
Python virtual environments
Why every Python project needs its own environment, creating and activating one with venv on Windows, macOS and Linux, installing packages, recording them in requirements.txt, and how uv and Poetry fit in.
- System design4 min read
RabbitMQ explained
How RabbitMQ routes messages: producers, exchanges, bindings and queues, the four exchange types, acknowledgements, durability and prefetch, dead-lettering, a working Python example, and how RabbitMQ differs from Kafka.
- Security5 min read
RADIUS authentication explained
How RADIUS checks who may join a Wi-Fi network or a VPN: the NAS, the server and the shared secret, the four messages, accounting, 802.1X with EAP, the protocol's weaknesses and how RadSec fixes them.
- Networking5 min read
Rate limiting
Rate limiting from both sides of the wire: why APIs limit requests, how limits are expressed, the 429 status and Retry-After and RateLimit headers, handling limits as a client with backoff and jitter, quotas and concurrency limits, limiting at Nginx and gateways, and choosing what to key limits on.
- Security5 min read
RBAC vs ABAC
Two models for deciding who can do what: role-based access control with users, roles and permissions, its strengths and role explosion, attribute-based access control with policies over user, resource, action and context, relationship-based access (ReBAC), implementing checks in code, policy engines such as OPA and Cedar, and how to choose.
- Python and JavaScript5 min read
React for beginners
Learn React from the ground up: creating a project with Vite, components and JSX, props, state with useState, events, rendering lists with keys, conditional rendering, forms, side effects and data fetching with useEffect, lifting state up, and where to go next with routing and frameworks.
- Databases7 min read
Reading a query plan
How to read EXPLAIN and EXPLAIN ANALYZE output to find out why a query is slow: plan trees, sequential and index scans, index-only and bitmap scans, nested loop, hash and merge joins, estimated versus actual rows, buffers, sorting and memory, and a step-by-step method for fixing slow queries in PostgreSQL and MySQL.