Blog

Articles, guides, and notes on software engineering.

How to Split a Commit in Git
Application 2021-06-01

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.

#Git

Recent Posts

Algorithm Encyclopedia Revised Edition: 33 Algorithms Illustrated
Algorithms and Data Structures 2021-05-16

Algorithm Encyclopedia Revised Edition: 33 Algorithms Illustrated

Algorithm Encyclopedia Revised Edition: 33 Algorithms Illustrated

#Algorithms#Book Review#Data Structures
Docker CLI Now Supports Docker Compose
Infrastructure 2021-05-06

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.

#Docker#Docker Compose
Building a Kubernetes Environment with Terraform and Ansible
Infrastructure 2021-04-06

Building a Kubernetes Environment with Terraform and Ansible

A journey of setting up a Kubernetes environment using Terraform and Ansible.

#Ansible#Kubernetes#Terraform#kubeadm
Database Migration for Spanner Using golang-migrate
Application 2021-03-17

Database Migration for Spanner Using golang-migrate

Migrate databases using golang-migrate with Google Spanner. Execute SQL migrations in Docker with GCP authentication management.

#Google Cloud Platform#Golang#Spanner
Trying Managed Kubernetes on DigitalOcean
Infrastructure 2021-03-07

Trying Managed Kubernetes on DigitalOcean

Exploring the use of managed Kubernetes on DigitalOcean for personal development and learning.

#Kubernetes#VPS#DigitalOcean
Stuck with ReadOnlyTransaction in Go's Spanner Client
Application 2021-02-08

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.

#Google Cloud Platform#Spanner#Tips
Reflection on 2020 and Resolutions for Next Year
Poetry 2021-01-03

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.

#Reflection and Resolutions
Building a VPS with Terraform and Ansible
Infrastructure 2020-12-20

Building a VPS with Terraform and Ansible

Implement VPS infrastructure with Terraform and Ansible on ConoHa, combining IaC resource management and server configuration automation.

#Ansible#VPS#OpenStack#Terraform
Environment Variables Specified in docker-compose.yml Not Accessible During Container Build
Infrastructure 2020-11-14

Environment Variables Specified in docker-compose.yml Not Accessible During Container Build

Fix environment variables in docker-compose.yml being unavailable during Docker image build. Use ARG in Dockerfile and build.args in docker-compose.yml to pass values at build time.

#Docker#Docker Compose#Tips
Basics of Authentication and Authorization
Application 2020-11-05

Basics of Authentication and Authorization

Learn authentication and authorization fundamentals: identification, RBAC, ABAC, credential types, SSO, SAML 2.0, OAuth 2.0, and OpenID Connect with practical context.

#FIDO#IAM#LDAP#OAuth#OpenID Connect#SAML#SSO#Authorization#Authentication
Summary of Network Terms
Network 2020-11-02

Summary of Network Terms

A compilation of network-related terms with unclear knowledge.

#IP#Load Balancer
Reading Kubernetes Documentation - Summary of Concepts
Infrastructure 2020-10-20

Reading Kubernetes Documentation - Summary of Concepts

Learn Kubernetes core concepts including cluster architecture, container orchestration, service discovery, and load balancing essentials.

#Docker#Container#Kubernetes
Implementing In-Memory Cache in Golang
Application 2020-09-29

Implementing In-Memory Cache in Golang

Build a lightweight in-memory cache in Go with TTL expiration and thread-safe access using sync.Map. Covers design requirements, expiration logic, and trade-offs vs. library solutions.

#Golang#Cache
Summary of Go CodeReviewComments
Application 2020-09-15

Summary of Go CodeReviewComments

Improve Go code quality with essential code review guidelines: receivers, error handling, goroutines, and naming conventions.

#Golang#Code Review
The Agile Samurai
Development Process 2020-09-12

The Agile Samurai

The Agile Samurai

#Agile#Scrum#Book Review
What is JWT? JSON Web Tokens Explained for Secure API Authentication
Application 2020-09-11

What is JWT? JSON Web Tokens Explained for Secure API Authentication

Learn how JSON Web Tokens (JWT) work—header, payload, signature structure—how to use JWTs for stateless API authentication, and common security pitfalls to avoid.

#JWT
What is gRPC? A Practical Introduction to gRPC with Go
Application 2020-09-08

What is gRPC? A Practical Introduction to gRPC with Go

Learn what gRPC is, how Protocol Buffers work, and how to build a gRPC server and client in Go. Includes comparison with REST and when to choose gRPC.

#Golang#gRPC#Microservices#HTTP/2#RPC
SCRUM BOOT CAMP THE BOOK: Revised Edition - Agile Development with Scrum Teams
Development Process 2020-09-07

SCRUM BOOT CAMP THE BOOK: Revised Edition - Agile Development with Scrum Teams

SCRUM BOOT CAMP THE BOOK: Revised Edition - Agile Development with Scrum Teams

#Agile#Scrum#Book Review
Differences Between Little Endian, Big Endian, Middle Endian, and Bi-endian
Computer Architecture 2020-08-25

Differences Between Little Endian, Big Endian, Middle Endian, and Bi-endian

Understand byte ordering: Little Endian, Big Endian, Middle Endian, Bi-endian, and memory arrangement across systems.

#Memory