The Curious Engineer

All blogs / Software / engineering practice

Kevin Sookocheff

sookocheff.com

Kevin Sookocheff’s Personal Blog

Software / engineering practiceDevOps / SRE / infrastructureDistributed systems / cloudSecurity

Posts
319 from 1 Jan 2001 to 17 Aug 2026
Posting
monthly (7 in the last year)
Kind
personal blog
Feed
https://sookocheff.com/index.xml

2026 6

  1. Give your LLM memory with a personal knowledge base
  2. Building your own Tool Calling Agent
  3. The Seven Powers of Platform Teams
  4. Human in the Core, AI in the Shell
  5. Blogging in the Age of AI
  6. Controlling a Korg Volca with the Akai MPK Mini Plus

2025 15

  1. Cryptography for the Everyday Developer: Understanding RSA
  2. Cryptography for the Everyday Developer: Number Theory for Public Key Cryptography
  3. Why Three Replicas Are Better Than Two
  4. Cryptography for the Everyday Developer: Double Encryption and the Meet in the Middle Attack
  5. Cryptography for the Everyday Developer: Understanding AES - The Advanced Encryption Standard
  6. Cryptography for the Everyday Developer: Understanding DES - The Data Encryption Standard
  7. Cryptography for the Everyday Developer: Confusion, Diffusion, and Substitution-Permutation Networks
  8. Using V2 CloudFront Logs via CloudFormation
  9. Fixing display flicker for Dell monitors on Apple Silicon
  10. Cryptography for the Everyday Developer: Measuring Security in Bits
  11. Cryptography for the Everyday Developer: Modular Arithmetic
  12. Cryptography for the Everyday Developer: Random Number Generators
  13. Cryptography for the Everyday Developer: Security Goals
  14. Cryptography for the Everyday Developer: Encryption Basics with Classical Ciphers
  15. Clustering a DSM Using Simulated Annealing

2024 6

  1. In the Cloud, Cost is Everything
  2. The Developers Guide to FIPS 140 Compliance
  3. Near infinite scaling with the scale cube and cell-based architecture
  4. Developing an Aya-rs eBPF application using devcontainers
  5. Building a FIPS Compliant Kubernetes Cluster on AWS
  6. Surveying the eBPF Developer Ecosystem

2023 14

  1. Routing Users to a Login Page Based on Geolocation
  2. What is eBPF and Why is it Important?
  3. Disaster Recovery with DynamoDB Global Tables
  4. Supporting disaster recovery with a multi-region EKS deployment
  5. FSBench: A filesystem benchmarking utility
  6. Benchmarking AWS CSI Drivers
  7. Picking the right AWS CSI driver for your Kubernetes application
  8. Leveraging eBPF in the Kubernetes Networking Model
  9. Trust your users — they’re usually right
  10. Generating Large Test Files
  11. Generating JSON Web Token Assertions
  12. Tackling Technology Strategy with Portfolio Management
  13. Making Sense of Kubernetes Metrics
  14. Project Management for Software Engineers

2022 12

  1. Increased virtualization performance with the AWS Nitro System
  2. Using Neovim as a Java IDE
  3. Distributed System Models in the Real World
  4. Write-ahead logging and the ARIES crash recovery algorithm
  5. How to kill a process that is a using port on macOS
  6. Progress is a lake, not a line
  7. Why Systems Work So Well
  8. Java For The Experienced Beginner
  9. Behaviour Parameterization
  10. What complex systems can teach us about building software
  11. Hybrid Logical Clocks
  12. HybridTime

2021 13

  1. TrueTime
  2. Vector Clocks
  3. Lamport Clocks
  4. How Does NTP Work?
  5. Local Kubernetes Development with microk8s
  6. Why Foxes Make Better Decisions Than Hedgehogs
  7. Connecting Technology to the Needs of the Business
  8. The False Dichotomy of Design-First and Code-First API Development
  9. The Most Important Criteria for Choosing a Programming Language
  10. Augmenting Spring Data REST with Additional Endpoints
  11. Making Modular Monoliths Work
  12. Unpacking the eight fallacies of distributed computing
  13. Handling the rudder as an organization grows

2020 21

  1. The Cathedral, The Bazaar, and the API Marketplace
  2. Marrying RESTful HTTP with Asynchronous and Event-Driven Services
  3. Running a Dapr Application on Kubernetes
  4. Local Kubernetes Development with Tilt
  5. Local Kubernetes Development with kind
  6. There and Back Again: The Unexpected Journey of a Request
  7. Getting to know voltdb
  8. Understanding Spring's Environment Abstraction
  9. What is the OCaml toplevel?
  10. Building a Modern Java Web App with Spring Boot
  11. Inversion of Control, Dependency Injection, and the Spring IoC Container
  12. Starting a new OCaml project using Dune and Visual Studio Code
  13. A Tour Through OCaml with Project Euler
  14. Getting Started with opam, the OCaml Package Manager
  15. The OCaml Compiler Pipeline
  16. Above-the-line and below-the-line
  17. How Does DNS Work?
  18. Building Learning Communities
  19. Optimizing Processes Using a Design Structure Matrix
  20. Interdependence and Self-Reliance
  21. Improving Software Architecture Using a Design Structure Matrix

2019 20

  1. Using Little’s Law to Measure System Performance
  2. Why I’m not (too) worried about Python 2
  3. Riding the Architecture Elevator
  4. How Does WebRTC Work?
  5. How Does LTE Work?
  6. How Does WiFi Work?
  7. How Does Ethernet Work?
  8. Wireless Networks and Shannon’s Law
  9. Curate Don’t Dictate
  10. Tied to Machines Podcast — Architecture
  11. Principles of Architectural Leadership
  12. How Does UDP Work?
  13. Innovation with Constraints
  14. How Does TCP Work?
  15. How Do Websockets Work?
  16. The Zero Bug Policy
  17. How Does HTTP/2 Work?
  18. Vendor Management is a Core Competency
  19. Overambitious API gateways
  20. Putting the R in D

2018 24

  1. Fault-Tolerance and Data Consistency Using Distributed Sagas
  2. IaaS, PaaS, SaaS and Infrastructure
  3. Alpha Conversion
  4. Beta Reduction
  5. Building Stateful Services with Kubernetes
  6. Eta Reduction
  7. Testing in Production — Building Observable Distributed Systems
  8. Normal, Applicative and Lazy Evaluation
  9. Representing Pairs and Lists in Lambda Calculus
  10. Typed Lambda Calculus
  11. A Guide to the Kubernetes Networking Model
  12. Infrastructure in an Age of Commodities
  13. Recursive Lambda Functions the Y-Combinator
  14. Simplifying Lambda Syntax
  15. Introducing Lambda Calculus
  16. A Principled Approach to Architecture
  17. Range, Domain, and Codomain
  18. Functional Microservices
  19. A Functional Programming Learning Plan
  20. Practical Differences Between Functional and Imperative Programming
  21. Why Functional Programming? The Benefits of Referential Transparency
  22. Overcoming Optimism with a Premortem
  23. What is Functional Programming?
  24. Cloze Deletions

2017 34

  1. Improving Test Coverage Using Exploratory Outcomes
  2. Bulk Generating Cloze Deletions for Learning a Language with Anki
  3. Building Empathic Software Using Specification by Example
  4. How Fast Does it Need to be Anyways? The QUPER Model of Analyzing Non-Functional Requirements
  5. What is CQRS?
  6. Dissecting SQS FIFO Queues — Does Ordered and Exactly Once Messaging Really Exist?
  7. Learning a Language with Amazon Polly and a Serverless Chalice App
  8. Evolving Messaging For Microservices: A Retrospective from Building Workiva’s Messaging Platform
  9. How to create a functional VPC using CloudFormation
  10. Compiling private Java code from Leiningen
  11. Uploading Large Payloads through API Gateway
  12. Getting Started With TLA+
  13. Basic Math for TLA+
  14. First Musings on TLA+
  15. Paper Review: WebTables: Exploring the Power of Tables on the Web
  16. Paper Review: Combining Systems and Databases: A Search Engine Retrospective
  17. Publish-Subscribe Messaging Using Amazon SQS
  18. Paper Review: The Anatomy of a Large-Scale Hypertextual Web Search Engine
  19. Paper Review: Consistency Analysis in Bloom: a CALM and Collected Approach
  20. SQS or Kinesis? Comparing Apples to Oranges
  21. Software Architecture as Business Analysis
  22. Paper Review: The CQL continuous query language: semantic foundations and query execution
  23. Paper Review: BlinkDB: Queries with Bounded Errors and Bounded Response Times on Very Large Data
  24. Paper Review: Informix under CONTROL: Online Query Processing
  25. How Much is That Going to Cost Anyway? Calculating Cost of Goods Sold
  26. Paper Review: An Array-Based Algorithm for Simultaneous Multidimensional Aggregates
  27. Italics in Vim
  28. Comparing Swagger with Thrift or gRPC
  29. Being Good Enough
  30. Yet Another S3 Static Site
  31. Packaging a Custom Boomi Connector
  32. Creating a Custom Dell Boomi Connector
  33. Paper Review: Implementing Data Cubes Efficiently
  34. Getting Started With Dell Boomi

2016 53

  1. Optimistic Locking in a REST API
  2. Checking for null in an API Gateway transform
  3. Effective Cache Control
  4. Configuring REST-assured for Amazon API Gateway
  5. Paper Review: Robust Query Processing through Progressive Optimization
  6. Creating a Service Oriented Organization
  7. Understanding API Gateway Payload Mappings
  8. Securing a Swagger API with OAuth2
  9. How to deploy a Swagger specification to Amazon API Gateway using CloudFormation
  10. Designing a Swagger API
  11. What is OSGi? Microservices for the JVM
  12. Paper Review: The Volcano Optimizer Generator: Extensibility and Efficient Search
  13. Paper Review: Dynamo: Amazon’s Highly Available Key-value Store
  14. 0 to Message in 60 Seconds: Getting Started with Amazon SQS
  15. Paper Review: Cap Twelve Years Later: How the “Rules” Have Changed
  16. Integrating Applications: From RPC to Messaging
  17. Integrating Applications
  18. Tests are Never Enough
  19. The Problem with Point to Point Communication
  20. A Guided Tour Through Thrift
  21. Stability Anti-Patterns
  22. Metrics-Driven Development
  23. Testing a Producer-Consumer Design using a CyclicBarrier
  24. Paper Review: Generalized Isolation Level Definitions
  25. So you want to send a message using Apache Thrift?
  26. Paper Review: DryadLINQ: A System for General-Purpose Distributed Data-Parallel Computing Using a High-Level Language
  27. Paper Review: MapReduce: Simplified Data Processing on Large Clusters
  28. Paper Review: OLTP Through the Looking Glass, and What We Found There
  29. Getting Started with Amazon Flow Framework
  30. Paper Review: Hekaton: SQL Server’s Memory-Optimized OLTP Engine
  31. Paper Review: C-Store: A column-oriented DBMS
  32. Concurrency: A Primer
  33. Server-to-server OAuth with the Google OAuth Client Library for Java
  34. Paper Review: Transaction Management in the R Distributed Database Management System
  35. Paper Review: Concurrency Control Performance Modeling: Alternatives and Implications
  36. Paper Review: Granularity of Locks and Degrees of Consistency in a Shared Data Base
  37. Paper Review: ARIES: a transaction recovery method supporting fine-granularity locking and partial rollbacks using write-ahead logging
  38. Deploying a static website with rsync
  39. Thoughts On Google Cloud Platform Next
  40. Paper Review: Access Path Selection in a Relational Database Management System
  41. Paper Review: Eddies: Continuously Adaptive Query Processing
  42. Paper Review: The Gamma Database Machine Project
  43. Local Development with the Kinesis Client Library
  44. Paper Review: The Design of POSTGRES
  45. Paper Review: System R: Relational Approach to Database Management
  46. The Five Stages of NoSQL
  47. Paper Review: Architecture of a Database System
  48. Generating Java with JCodeModel
  49. Writing an Apache Beam Batch Sink
  50. Deploying a Druid Cluster with Ansible
  51. Paper Review: What Goes Around Comes Around
  52. Deploying Zookeeper with Exhibitor to AWS using Ansible
  53. Getting to Know Cloud Dataflow

2015 35

  1. Docker Step By Step: Containerizing Zookeeper
  2. Why Java? Tales from a Python Convert
  3. Including a local package as a Maven dependency
  4. Configuring an Upstream Remote
  5. Writing Repeated BigQuery records using the Java Client Library
  6. From JSON to a Google API Client Library object
  7. A Maven runner for vim-test
  8. Deploying Kafka to Google Compute Engine
  9. Kafka Quick Start Guide
  10. Kafka in a Nutshell
  11. Beginning Docker
  12. A Review of the Coursera Data Science Specialization
  13. Counting N-Grams with Cloud Dataflow
  14. N-gram Modeling With Markov Chains
  15. Modeling Natural Language with N-Gram Models
  16. Structuring an Application using Model View Controller
  17. Managed VMs and the Future of App Engine
  18. Introducing CloudPyPI
  19. App Engine Pipelines API - Part 6: The Pipeline UI
  20. App Engine Pipelines API - Part 5: Asynchronous Pipelines
  21. App Engine Pipelines API - Part 4: Pipeline Internals
  22. App Engine Pipelines API - Part 3: Fan In, Fan Out, Sequencing
  23. App Engine Pipelines API - Part 2: Connecting Pipelines
  24. App Engine Pipelines API - Part 1: The Basics
  25. Durabledict for App Engine
  26. Continuous Delivery Distilled
  27. Creating a BigQuery Table using the Java Client Library
  28. Deploying R Studio on Compute Engine
  29. Keeping App Engine Search Documents and Datastore Entities In Sync
  30. Halting Python unittest Execution on First Error
  31. Create a Google Cloud Dataflow Project with Gradle
  32. A pypiserver Deployment Script
  33. Downloading files from Google Cloud Storage with webapp2
  34. Querying App Engine Logs with Elasticsearch
  35. Parsing bash script options with getopts

2014 36

  1. Managing App Engine Dependencies Using pip
  2. App Engine MapReduce API - Part 7: Writing a Custom Output Writer
  3. The Bash String Operators
  4. App Engine MapReduce API - Part 6: Writing a Custom Input Reader
  5. Installing MySQL-Python on OS X Yosemite
  6. Automatically Resizing a Compute Engine Disk
  7. A Guided Tour of Google Compute Engine
  8. Extracting the Start Sector of a Disk with fdisk
  9. Packaging a Compute Engine Virtual Machine Image
  10. Using the Google Prediction API to Predict the Sentiment of a Tweet
  11. Suggested Searches with Google App Engine
  12. Composing Asynchronous Functions With Tasklets
  13. Working From Home: A Retrospective
  14. Converting an ndb model to a BigQuery schema
  15. Restoring an App Engine backup into a Big Query table
  16. Bypassing ndb hooks with the RawDatastoreInputReader
  17. Generating a C# client for an App Engine Cloud Endpoints API
  18. Using Basic Authentication with Google Cloud Endpoints
  19. Unit Testing Cloud Endpoints
  20. Creating RESTful APIs with App Engine Cloud Endpoints
  21. Running Multiple App Engine Modules Locally with dev_appserver.py
  22. Downloading directories of code from Github using the Github API
  23. How to bypass the auto_now property option during an ndb put
  24. App Engine MapReduce API - Part 5: Using Combiners to Reduce Data Throughput
  25. App Engine MapReduce API - Part 4: Combining Sequential MapReduce Jobs
  26. Installing lxml on OS X Mavericks
  27. App Engine MapReduce API - Part 3: Programmatic MapReduce using Pipelines
  28. App Engine MapReduce API - Part 2: Running a MapReduce Job Using mapreduce.yaml
  29. App Engine MapReduce API - Part 1: The Basics
  30. Understanding JSON Patch
  31. How to Version a REST API
  32. When to Use HTTP PUT and HTTP POST
  33. Stripe checkout opening in a new tab
  34. How REST Constraints Affect API Design
  35. On choosing a hypermedia type for your API - HAL, JSON-LD, Collection+JSON, SIREN, Oh My!
  36. Three questions that define an ideal customer

2013 7

  1. How to get accepted to a business plan competition
  2. Install node.js packages via npm with a Chef Cookbook
  3. Photos is the Killer Feature of Google+
  4. Apple has a Software Problem - Why I'll be Switching to Android
  5. Creating a new file or directory in Vim using NERDTree
  6. Submitting a Unity3d Game to the Mac App Store
  7. Copying from Vim to the OS X Mountain Lion clipboard

2012 2

  1. Showing a local webpage in Unity3d using the Prime[31] etcetera plugin.
  2. Using Unity3d with Version Control

2011 13

  1. Saving canvas data to an image file with JavaScript and PHP
  2. Using Leiningen behind a Windows proxy
  3. Date.now() in IE6
  4. The JavaScript click event and hidden input elements
  5. Dissecting jQuery's Fade Animation
  6. An Argument Against JavaScript Minification
  7. How to Display HTML5 Notifications
  8. Constants in JavaScript
  9. Understanding Closures in JavaScript
  10. Safely remove the header from the WordPress TwentyTen theme
  11. The future of mobile development
  12. A cheap home server
  13. And the winner is - Google Chrome!

2010 7

  1. How to install the real-time kernel in Ubuntu
  2. How to get Pulse Audio to recognize your Delta 44 (and other ICE1712 cards)
  3. Readability by Arc90
  4. Share multiple mt-daap libraries
  5. Mounting SAMBA shares from the command line
  6. How to forward root users mail to an external address
  7. How to monitor a RAID array in Ubuntu server

2001 1

  1. AI Ethics