Are you Sure your Linux PID is the Process ID?
Linux PID vs TID vs TGID: how threads show up in /proc and tools like htop
Linux PID vs TID vs TGID: how threads show up in /proc and tools like htop
SSH key auth and proxy jumps: keygen, key distribution, and practical config patterns
Autoencoders vs VAEs: latent compression, KL regularization, and reparameterization
Where syscalls live, why UNIX has a ‘narrow waist’, and what read/write really mean
fork() explained: process duplication, return values, zombies, and shell process flow
Floyd–Warshall all-pairs shortest paths: DP recurrence, intuition, and Python example
Dijkstra’s algorithm: relaxation, invariants, and priority-queue runtime tradeoffs
A compact Big-O cheat sheet for core Java Collections Framework operations
Huffman coding: prefix-free codes, greedy merging, and heap-based runtime analysis
Fractional knapsack: value-density greedy strategy and why it differs from 0-1 knapsack
DP vs greedy through activity selection: optimal substructure, greedy choice, pseudocode
DP practice set: Fibonacci, max-subarray, 0-1 knapsack, and LCS intuition
Rod-cutting as DP: brute force vs memoization vs bottom-up, plus solution reconstruction
AVL trees: balance invariants, rotations, and why height stays O(log n)
Binary search trees: core operations, successors, insertion, and deletion via transplant
Tree terminology, traversals, and a few practical iterative traversal tricks
Hash tables from direct addressing to chaining and open addressing, with probe analysis
Doubly linked lists with and without sentinels, plus search/insert/delete pseudocode
Priority queue via max-heap: extract-max, increase-key, insert, and heapify mechanics
Stack and circular queue pseudocode with overflow/underflow checks and wrap-around logic
Bucket sort for roughly uniform inputs, with insertion sort per bucket and runtime notes
Radix sort from least-significant digit upward, and why stability is required
Decision trees for comparison sorts, and why comparison sorting needs Ω(n log n)
Stable counting sort in Θ(n+k), with pseudocode and Scala/Python implementations
Randomized quicksort: random pivots to avoid adversarial inputs and worst-case splits
Quicksort partitioning intuition, loop invariants, and best/average/worst-case analysis
Heap sort explained with max-heapify intuition, CLRS notes, and sample implementations
Merge sort via divide-and-conquer, with sentinels, recursion tree analysis, and code
Iterative + recursive insertion sort, with complexity notes and Python/Scala examples
Floyd–Warshall all-pairs shortest paths: DP recurrence, intuition, and Python example
Dijkstra’s algorithm: relaxation, invariants, and priority-queue runtime tradeoffs
A compact Big-O cheat sheet for core Java Collections Framework operations
Huffman coding: prefix-free codes, greedy merging, and heap-based runtime analysis
Fractional knapsack: value-density greedy strategy and why it differs from 0-1 knapsack
DP vs greedy through activity selection: optimal substructure, greedy choice, pseudocode
DP practice set: Fibonacci, max-subarray, 0-1 knapsack, and LCS intuition
Rod-cutting as DP: brute force vs memoization vs bottom-up, plus solution reconstruction
AVL trees: balance invariants, rotations, and why height stays O(log n)
Binary search trees: core operations, successors, insertion, and deletion via transplant
Tree terminology, traversals, and a few practical iterative traversal tricks
Hash tables from direct addressing to chaining and open addressing, with probe analysis
Doubly linked lists with and without sentinels, plus search/insert/delete pseudocode
Priority queue via max-heap: extract-max, increase-key, insert, and heapify mechanics
Stack and circular queue pseudocode with overflow/underflow checks and wrap-around logic
Bucket sort for roughly uniform inputs, with insertion sort per bucket and runtime notes
Radix sort from least-significant digit upward, and why stability is required
Decision trees for comparison sorts, and why comparison sorting needs Ω(n log n)
Stable counting sort in Θ(n+k), with pseudocode and Scala/Python implementations
Randomized quicksort: random pivots to avoid adversarial inputs and worst-case splits
Quicksort partitioning intuition, loop invariants, and best/average/worst-case analysis
Heap sort explained with max-heapify intuition, CLRS notes, and sample implementations
Merge sort via divide-and-conquer, with sentinels, recursion tree analysis, and code
Iterative + recursive insertion sort, with complexity notes and Python/Scala examples
Queueing theory for latency: Little’s Law, utilization knee, Erlang-C, and variability
Linux PID vs TID vs TGID: how threads show up in /proc and tools like htop
Survival analysis for systems: censoring, KM curves, log-rank tests, and Cox models
SSH key auth and proxy jumps: keygen, key distribution, and practical config patterns
Where syscalls live, why UNIX has a ‘narrow waist’, and what read/write really mean
fork() explained: process duplication, return values, zombies, and shell process flow
Bayesian priors as regularizers: Laplace→L1 (Lasso) and Gaussian→L2 (Ridge)
Autoencoders vs VAEs: latent compression, KL regularization, and reparameterization
A rolling list of books I enjoyed, with short notes on why they stuck
A rolling log of TED takeaways on conversation, self-control, imposters, and memory
A candid PhD application postmortem: interviews, visits, and decision-making