Blog
Articles, guides, and notes on software engineering.
Go Interfaces Explained: How to Write Flexible, Testable Go Code
A practical guide to Go interfaces. Learn implicit implementation, interface composition, using interfaces for dependency injection, and common design pitfalls.
Recent Posts
Go Pointers Explained: When to Use Them and Common Pitfalls
Understand Go pointers clearly—when to use pointer receivers vs value receivers, how pointers affect memory and performance, and the most common mistakes to avoid.
Summary of Variable Definitions and Declarations in Golang
Learn Go variable declaration patterns: var syntax, short declarations, type inference, and visibility rules for identifiers.
Setting Up Elasticsearch and Kibana with Docker
Set up an Elasticsearch and Kibana environment using Docker Compose. Covers what ES clusters and nodes are, a working docker-compose.yml configuration, and initial connectivity setup.
Creating a Custom Report in Google Analytics
Build custom Google Analytics reports to track metrics relevant to your site and refine marketing strategy based on data.
About Golang Functions - Function Values / Callback Functions / Anonymous Functions
Understand Go functions: function values, callbacks, anonymous functions, and closures with practical implementation patterns.
Getting Started with JavaScript Testing using Jest
Learn JavaScript testing with Jest, including ES module configuration, babel setup, and practical test file patterns.
SSH Connection Setup Memo
Implement secure SSH key-based authentication with proper sshd configuration and permission management for remote servers.
Setting Up Resource Monitoring with Prometheus and Grafana
Implement resource monitoring using Prometheus and Grafana with node_exporter for comprehensive infrastructure dashboards.
Basics of Pointers in Golang
Learn the basics of Go pointers: address operators (&), dereferencing (*), pass by value vs. reference, nil pointers, and when to use pointer receivers. Includes practical Go examples.
Evolving Architecture: Supporting Continuous Change
Evolving Architecture: Supporting Continuous Change
Addressing Slow Mounting Issues in Docker for Mac
Resolve slow Docker for Mac volume mount performance caused by the macOS filesystem API. Workarounds: delegated/cached mount options, docker-sync, or using a Linux-based VM.
Output PHPUnit Code Coverage with CircleCI 2.0
Generate PHPUnit code coverage reports on CircleCI 2.0 using phpdbg and Docker for HTML coverage artifacts.
Approaches to Table Design for Many-to-One Relationships with Multiple Tables
Learn how to handle a table related to multiple tables in many-to-one relationships. Compares polymorphic associations (SQL anti-pattern, no FK constraints) with cross/pivot tables.
Learning Software Structure and Design from Clean Architecture Experts
Learning Software Structure and Design from Clean Architecture Experts
Types of Relationships in ER Diagrams
Understand the three types of ER diagram relationships: dependent (parent-child, solid line), independent (dotted line), and many-to-many. Includes SQL table design examples for each.
How to Read and Set Linux Permissions
An overview of Linux permissions
MySQL JOIN vs UNION: Differences, Use Cases, and Examples
Learn the difference between MySQL JOIN and UNION with practical SQL examples. Covers INNER JOIN, LEFT JOIN, FULL OUTER JOIN, and how to combine result sets correctly.
Starting Algorithms with JavaScript
Master fundamental JavaScript algorithms including linear and binary search, plus selection and bubble sort implementations.
Understanding System Performance Through Illustrations
Understanding System Performance Through Illustrations