Bash is the best tool for the job
An article defending Bash as a crucial, often misunderstood tool for backend and DevOps engineers, explaining its best use cases and limitations.
Ian Lewis is a software engineer based in Tokyo who writes about containers, Kubernetes, DevOps, and programming practices. His blog covers real-world engineering topics, career reflections, and practical tooling insights from working with cloud-native systems.
148 articles from this blog
An article defending Bash as a crucial, often misunderstood tool for backend and DevOps engineers, explaining its best use cases and limitations.
Analyzes the rise of AI-powered IDEs, questioning their necessity versus existing extensions and exploring their features and motivations.
Bluesky introduces a new decentralized account verification system, analyzing its design, differences from X/Twitter, and potential impact.
Explains zero-copy reading in Go using slices, bytes.Reader, and bufio.Reader to avoid unnecessary data copying for performance.
Explores building lightweight, static APIs using Python and Protocol Buffers, inspired by static site generation for easy deployment.
A developer's first impressions of Rust's error handling system, comparing it to Go while working through Advent of Code puzzles.
A reflection on Python's evolution over 12 years, focusing on its decline in server-side development due to performance and concurrency challenges.
A Google Cloud Developer Relations engineer reflects on his 10-year career at Google, his projects, and his reasons for leaving.
Explains GitHub's new Artifact Attestations feature for securing software supply chains, covering its architecture and SLSA compliance.
Explains the limitations of code signing for software security and introduces software provenance as a more robust alternative.
Tips for designing robust and user-friendly Go APIs, focusing on proper use of Context and goroutine lifecycle management.
Explains Kubernetes Container Runtimes and the Container Runtime Interface (CRI), detailing how runtimes like containerd integrate with Kubernetes.
Explains high-level container runtimes, their role in image management and orchestration, and compares examples like Docker and containerd.
Explains the core functions of low-level container runtimes, focusing on Linux namespaces and cgroups for container isolation and resource management.
Explains what container runtimes are, why they are confusing, and introduces different types of runtimes in the first of a four-part series.
Explains the purpose and function of the 'pause' container in Kubernetes pods, detailing its role in namespace sharing and zombie process reaping.
A tutorial on implementing blue/green deployments in Kubernetes for legacy applications that don't support rolling updates.
Explains Kubernetes Pods by demystifying Linux containers, namespaces, and cgroups in a beginner-friendly way.
A guide on using Google Container Builder for CI/CD to build and optimize Go applications, separating build and run steps for efficient Docker images.
Part 4 of a series on reducing Docker image size by using statically compiled binaries to eliminate dependencies.