Blog
Articles, guides, and notes on software engineering.
Sharding vs Partitioning: Key Differences and When to Use Each
Understand the difference between database sharding and partitioning. Learn horizontal and vertical strategies, sharding trade-offs, and when each approach makes sense.
Recent Posts
Notes on GCP
Miscellaneous notes taken while studying for the Google Cloud Certified Associate Cloud Engineer exam.
Is the Light On? The Human Science of Problem Discovery
A review of Are Your Lights On? A classic that, through memorable anecdotes, argues the core idea that problems are harder to find than to solve. It reminds you of something obvious yet easily forgotten: the importance of identifying the right problem.
The Secrets of Unicorn Companies: Software Development and Work Culture Learned from Spotify
A review of The Secrets of Unicorn Companies. A book for learning the organizational theory and culture of unicorn companies, based on experience at Spotify. Its real theme is the culture and qualities that sustain growth regardless of methodology, prompting thought about what lies beyond Scrum.
Continuous Profiling with Pyroscope
Explore continuous profiling with Pyroscope. Learn server setup, pull-based profiling, retention configuration, and Grafana integration methods.
Service Downtime Due to File System Capacity Shortage
Investigate and resolve service outages caused by filesystem capacity exhaustion, Docker log accumulation, and disk space management.
Full-Text Search with MySQL
Implement MySQL full-text search with FULLTEXT INDEX, ngram parsing, and MATCH...AGAINST query patterns.
How to Use pprof Without DefaultServeMux
A note on how to use Go's net/http/pprof with a custom router instead of the DefaultServeMux. It covers the common pitfall that a blank import alone won't work, and shows how to register handlers such as pprof.Index on your own router so you can still profile performance.
Prevent URL Encoding in Go's html/template
Learn why Go html/template auto-encodes URLs and how to use template.URL to pass raw URLs in templates without triggering automatic HTML encoding. Includes a minimal working example.
Cross-Compiling Go Application Images with buildx
Learn Docker buildx multi-architecture compilation for Go apps. Build cross-platform images for Linux AMD64 and ARM64 targets.
Exploring NewSQL Resources
A roundup of the various resources I read while researching NewSQL. I originally set out to compare several NewSQL databases, but since I needed to understand the technologies used under the hood, the collection also includes many articles on the related underlying technologies.
Encountering 'the input device is not a TTY' When Running Docker Command with Cron
Fix the input device is not a TTY error when running docker exec via cron. The cause is the -it flags: cron has no TTY, so remove -t and -i and use plain docker exec.
Current Status of FuelPHP as of March 2023
A rough summary of the current status of FuelPHP as of March 2023, based on my own research. It organizes development and release activity and community trends, as a note for those still using FuelPHP in an era dominated by Laravel.
Data-Oriented Application Design
A review of Data-Oriented Application Design. Known as a classic on distributed system design, it systematically covers the foundational technologies behind reliable, scalable applications, such as data storage and retrieval, distribution, and consistency. It is substantial and rewards repeated rereading.
Fundamentals of Software Architecture
A review of Fundamentals of Software Architecture. A book that explains how to evaluate software architecture and covers architecture patterns. Grasping the idea of architectural characteristics and the representative patterns, it helps you build a foundation for design decisions.
Software Architecture Hardparts
A review of Software Architecture: The Hard Parts. Centered on the hard decisions in distributed systems, it organizes ways of thinking and approaches for restructuring architecture. Reading Fundamentals of Software Architecture and Building Evolutionary Architectures first makes it easier going.
System Design Interview
A review of System Design Interview. The Japanese translation of the popular System Design Interview. Through interview scenarios, it concretely teaches how to design scalable systems. Books of this kind in Japanese are rare, making it one worth keeping on hand.
Devoured System Design Resources
A link-collection-style roundup of the various resources I read while studying system design. Along with the motivation behind why I dug into the topic, it organizes articles, books, and other resources I found helpful for learning system design.
Stress-Free Mastery
A review of Stress-Free Mastery. A book that teaches how to cope with stress. You can learn good mindsets, ways of thinking, and concrete actions. Since building a healthy relationship with stress raises the quality of your time, it is worth recommending to anyone living in a stressful society.
Notes on Datadog Continuous Testing
Configure Datadog continuous testing with no-code E2E browser tests. Master test recorder, assertions, and self-healing capabilities.