Blog
Articles, guides, and notes on software engineering.
Encountered 'Permission denied' Error When Starting MySQL Container on Ubuntu 20.04.2 LTS
Fix MySQL container permission denied errors on Ubuntu 20.04 by properly configuring docker-compose user UID/GID mappings.
Recent Posts
Cannot Start MySQL 8.0.17 Container on M1 Mac
Fix the MySQL container startup failure on Apple M1 Mac (failed to create new OS thread errno=22). Use MySQL 8.0.26+ with --platform=linux/amd64 in the Dockerfile for ARM architecture support.
Distributed System Design Patterns
A review of Distributed System Design Patterns. A book for learning container-based design patterns for distributed systems. It organizes established patterns such as sidecar and ambassador that combine multiple containers to improve reliability and scalability.
Comparison of New Relic and Datadog APM
An article summarizing a feature comparison made when considering switching from New Relic to Datadog APM. Centered on APM but also touching other areas, it organizes the differences in features and usability between the two in a table to inform a migration decision.
GCP Textbook II: Container Development Edition - Detailed Explanation of Kubernetes, GKE, Cloud Run, and Service Mesh
A review of GCP Textbook II: Container Development Edition. A book that clearly explains GCP's container-related services such as Kubernetes, GKE, Cloud Run, and service mesh. It also works as a study reference for the Associate Cloud Engineer exam.
GCP Textbook
A review of GCP Textbook. An introductory book that clearly organizes GCP's main services. Good for grasping an overview of each cloud service, it also helps as a study reference for the Associate Cloud Engineer exam.
Took the AWS Certified Solutions Architect Associate Exam
Documenting my efforts and experiences after passing the AWS Certified Solutions Architect Associate exam.
Reading Code of Golang HTTP Server
Master Go HTTP server internals: request routing, HandlerFunc casting, multiplexer design, and server configuration patterns.
Remembering AWS ARNs
Understand AWS ARN format structure with partition, service, region, account-id, and resource-id components for resource naming.
Types of AWS Services - AZ, Region, Global
Classify AWS services by deployment scope—Availability Zones, Regions, and Global services—with practical infrastructure examples.
Updated My Custom Router
Discover middleware support and optimizations in the goblin Go HTTP router with performance benchmarks and HTTP routing features.
System Failure Terms Starting with 'F'
Understand fail-safe, failover, fault-tolerance, and failback mechanisms for designing robust and reliable infrastructure.
How to Split a Commit in Git
Learn how to split Git commits using interactive rebase to create granular, organized commit history for cleaner code reviews.
Algorithm Encyclopedia Revised Edition: 33 Algorithms Illustrated
A review of the illustrated algorithm guide covering 33 algorithms including sorting and searching. It explains them clearly with diagrams at the center, letting you grasp their behavior intuitively and making it a reference worth keeping close.
Docker CLI Now Supports Docker Compose
Docker CLI gained native Compose support as a tech preview, rewritten in Go vs. the original Python docker-compose. Covers compatibility notes and the difference between docker compose and docker-compose.
Building a Kubernetes Environment with Terraform and Ansible
A journey of setting up a Kubernetes environment using Terraform and Ansible. Driven by the wish to run my own application on Kubernetes, it covers automating the setup and building master and worker nodes with kubeadm as a practical take on infrastructure as code.
Database Migration for Spanner Using golang-migrate
Migrate databases using golang-migrate with Google Spanner. Execute SQL migrations in Docker with GCP authentication management.
Trying Managed Kubernetes on DigitalOcean
Exploring the use of managed Kubernetes on DigitalOcean for personal development and learning.
Stuck with ReadOnlyTransaction in Go's Spanner Client
Fix session pool exhaustion caused by missing tx.Close() on Cloud Spanner ReadOnlyTransaction in Go. Learn proper transaction lifecycle management and issue detection with zagane.
Reflection on 2020 and Resolutions for Next Year
Personal reflection on 2020: highlights and learnings from a year shaped by the pandemic, plus goals and resolutions for 2021.