Blog
-
Docker Compose Complete Guide | Multi-Container Apps
Full guide to multi-container apps with Docker Compose: services, networks, volumes, environment variables, and production settings—with practical.
-
Docker Compose Tutorial for Beginners
Docker Compose tutorial: services, networks, volumes, depends_on, and env files—run a Node app with MongoDB and Nginx from one docker-compose.yml.
-
Docker Multi-Stage Build Optimization
How to shrink Docker images by ~90% with multi-stage builds: separating build tools, layer caching, and distroless bases.
-
Elasticsearch Complete Guide | Search· Indexing
Hands-on Elasticsearch: indexing, queries, aggregations, analyzers, and performance tuning—with real examples for search, fuzzy match, and ELK-style.
-
Git reset vs revert — undo commits safely
git reset (--soft, --mixed, --hard) vs git revert, restore and checkout roles, interactive rebase, conflicts, force push risks, and reflog recovery.
-
Git Submodules in Practice | Add· Update
Git submodules: how to pull sub-repos, init/update/delete, CI caching, common pitfalls, and when to prefer a monorepo instead.
-
Go context: timeouts and cancellation
Use context.WithTimeout, WithCancel, and WithDeadline in Go to bound work and propagate cancellation. HTTP server and client examples and common mistakes.
-
Go in 2 Weeks #05
Go error handling vs C++ try/catch: multiple returns, if err != nil, defer, fmt.Errorf %w, errors.Is/As, panic/recover. Practical examples for production.
-
Go Interfaces Complete Guide — Polymorphism Without virtual,
Go interfaces vs C++ virtuals: implicit satisfaction, duck typing, io.Reader/Writer, any, type assertions, and small-interface design for production.
-
GraphQL Complete Guide | Schema· Resolver
Build efficient APIs with GraphQL: schema design, resolvers, queries, mutations, subscriptions, and Apollo Server/Client—with practical TypeScript.