A guide to set up a modern Python development environment using uv, the fast all-in-one tool from Astral that replaces pyenv, virtualenv, and Poetry.
Read articleAll Posts
Most env-var validation checks that values exist. That catches missing config but misses the worse case - a value that is present, valid in shape, and silently wrong. Here is the asymmetric pattern for separating loud failures from silent ones in a Next.js server.
Read articleWhen one Go struct legitimately serves multiple consumer roles - producer, service, admin - declare three interfaces and let DI cache the singleton at the wide type while each consumer holds only the methods it can call. Same shape as io.ReadWriteCloser in the stdlib.
Read articleMost SQS idempotency guides reach for Redis dedupe keys or dedupe tables. If your worker's job ends in a terminal state-machine transition, the row's own status column is already the lock - and one UPDATE statement is the entire safety story.
Read articleA talk I gave to the Airvet engineering org on working with AI coding agents - the mental model, context engineering, and the Research → Plan → Implement loop that ties them together.
Read articleLearn how to configure MCP (Model Context Protocol) servers globally for Claude Code, making them available across all your projects.
Read articleA talk I gave to the Airvet engineering org as a primer on AI - what GPT and RAG actually are, how neural networks, tokens, and embeddings fit together, and why the difference matters.
Read articleA guide to the upcoming changes in ESLint v9 regarding TypeScript integration, including migration notes.
Read articleHow to solve one of the most frustrating UX issues in chat applications: ensuring automatic scrolling works correctly when images load asynchronously.
Read articleWhy useRef alone is insufficient for dynamic measurements, and how to combine it with ResizeObserver and useState for responsive UI.
Read articleSolving Firebase Auth redirect issues on Vercel by implementing a proxy solution to handle SAML SSO authentication and resolve missing initial state errors.
Read articleUnderstanding the Go idiom of accepting interfaces and returning concrete types to write flexible, reusable, and maintainable code.
Read articleUnderstanding memory allocation in Go, including stack vs heap allocation, escape analysis, and how Go handles pointer returns from functions.
Read articleUnderstanding Go methods, the difference between value and pointer receivers, embedding for composition, and how interfaces work with methods.
Read articleUnderstanding Go slices, their underlying array structure, creation and modification mechanics, and the implications when passing slices to functions.
Read articleA guide to JSON serialization and deserialization in Go, covering type mappings, HTTP responses, and practical examples with the net/http package.
Read articleHow Go passes function arguments by value and the implications for different data types: integers, pointers, slices, strings, and structs.
Read articleFixing VSCode warnings for Tailwind CSS directives by creating custom CSS data configuration files for proper syntax recognition.
Read articleA comprehensive cheatsheet for Node Version Manager (NVM) commands including installation, version switching, aliasing, and management.
Read articleA guide to understand Go interfaces through a power socket and electrical device analogy, covering duck typing and interface implementation.
Read articleHow to recover from an accidental git push --force by using git reflog to find the previous commit and restore the branch to its original state.
Read articleFixing TypeScript ESLint errors when using SVGs with Next.js 11 by creating custom module declarations and configuring TypeScript properly.
Read articleUnderstanding Go data structures and their memory layout including integers, floats, arrays, pointers, structs, strings, and slices.
Read articleHow to find and kill processes running on specific ports like 3000 on macOS using lsof and kill commands.
Read articleUnderstanding the difference between indexing strings as bytes versus runes in Go, and when to use each approach for proper Unicode handling.
Read articleAutomatically format and lint code with Git hooks using Husky, Prettier, ESLint, precise-commits and lint-staged for pre-commit and pre-push workflows.
Read articleA practical guide to working with JavaScript Promises - from basic chaining and resolve/reject behavior to .catch, Promise.all fail-fast handling, and async/await error patterns.
Read articleUnderstanding the io.Reader and io.Writer interfaces in Go, and how accepting an io.Writer parameter makes your code flexible across files, HTTP responses, stdout, and in-memory buffers.
Read articleDeploying a Go service to a single AWS EC2 instance as a hardened systemd service - cross-compiling the binary, copying it across, creating a non-root service user, configuring systemd with the right hardening directives, and handling graceful shutdown.
Read articleSetting up ESLint to parse and lint a mixed JavaScript and TypeScript codebase using overrides configuration for different file types.
Read articleA guide to access and utilize Material-UI theme objects within Emotion styled components and CSS props, with practical implementation examples.
Read articleA detailed guide to setting up automated email billing alerts in AWS using CloudWatch metrics and SNS notifications for cost monitoring.
Read articleA guide to implement authentication and authorization in AWS API Gateway, covering Cognito User Pools, IAM roles, and API keys with practical examples.
Read articleA step-by-step guide to setting up and using breakpoints for local debugging of AWS Lambda functions, improving serverless development workflow.
Read articleBridging CloudFormation-generated runtime values - DynamoDB table names, API Gateway URLs, ARNs that do not exist until deployment - into a local .env file using the serverless-export-env plugin.
Read articleA detailed guide to using Serverless Framework pseudo parameters for referencing Lambda functions and other AWS resources in your serverless applications.
Read articleLearn how to set up VS Code to properly recognize and validate custom YAML tags used in Serverless Framework configuration files.
Read articleHow the browser turns CSS changes into pixels - the five stages of the render pipeline, why some CSS properties trigger the full pipeline and others skip most of it, and how to avoid jank by understanding which path your changes take.
Read articleThere are two caching strategies on the web: fingerprinted-immutable URLs and server-revalidated mutable content. Pick one per resource. Most caching confusion comes from conflating no-cache, no-store, and must-revalidate.
Read articleA closure is a function bundled with the lexical environment it was created in. That environment survives because the closure holds a reference to it - which is why each call to a function factory returns an independent counter.
Read articleHow JavaScript actually shares methods between objects - the prototype chain, what `new` really does, and how ES6 class syntax maps onto the same underlying machinery.
Read articleA mental model for useEffect — moving past the lifecycle (mount/update/unmount) mindset to thinking about effects as a way to synchronize side effects with React state and props.
Read articleWhen to reach for useReducer over useState, and why. The Dan Abramov framing: dispatch tells the reducer what happened, the reducer decides how state changes - so the component never needs to know the update logic.
Read articleA guide to set up and switch between multiple AWS profiles when working with AWS CLI and Serverless Framework projects.
Read articleExploring effective programming education through mental models, with practical strategies for building conceptual understanding and improving outcomes.
Read articleA single-rule mental model for JavaScript's `this` - everything desugars to `Function.prototype.call(thisValue, ...args)`. Walks through bare calls, method calls, detachment, `.call` / `.apply` / `.bind`, the `new` operator, arrow functions, strict mode, and how to implement `.bind` from scratch.
Read articleA detailed guide to implementing dynamic locale selection in Gatsby using Contentful, GraphQL variables, and React Context for internationalized content.
Read articleA guide to using TypeScript type guards for runtime type checking and type narrowing in your TypeScript applications.
Read articleA guide to properly handling array map operations with union types in TypeScript, including type inference and type safety considerations.
Read articleA guide to managing Python environment variables using dotenv, including best practices for configuration and security.
Read article