<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Tech on wid's blog</title><link>https://wid-blog.github.io/en/categories/tech/</link><description>Recent content in Tech on wid's blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 09 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://wid-blog.github.io/en/categories/tech/index.xml" rel="self" type="application/rss+xml"/><item><title>Microservices Architecture</title><link>https://wid-blog.github.io/en/posts/tech/architecture/microservices-architecture/</link><pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/architecture/microservices-architecture/</guid><description>MSA is a decision about which criterion to use to decompose the system. Domain boundary, data ownership, scale pattern, failure isolation — the chosen criterion creates the service boundaries, and those boundaries decide communication and data in turn.</description></item><item><title>Event Sourcing and CQRS</title><link>https://wid-blog.github.io/en/posts/tech/architecture/event-sourcing-and-cqrs/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/architecture/event-sourcing-and-cqrs/</guid><description>ES and CQRS address how a system&amp;rsquo;s source of truth is shaped and how its views are separated from it. Adoption cost spreads across the system, so I lean toward adopting only when the value can be stated explicitly.</description></item><item><title>Distributed Transactions</title><link>https://wid-blog.github.io/en/posts/tech/architecture/distributed-transactions/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/architecture/distributed-transactions/</guid><description>Distributed transactions are about how a single ACID transaction decomposes across services and how its pieces are reassembled. The roles and trade-offs of 2PC, Saga (Choreography vs Orchestration), and Outbox.</description></item><item><title>Claude Code Config in Four Layers</title><link>https://wid-blog.github.io/en/posts/tech/devenv/claude-code-config-layers/</link><pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/devenv/claude-code-config-layers/</guid><description>settings.json, CLAUDE.md, slash commands, subagents, hooks. Claude Code&amp;rsquo;s customization surface settles into four layers once you pick one axis: when does each one step in?</description></item><item><title>macOS Dev Environment: Dotfiles</title><link>https://wid-blog.github.io/en/posts/tech/devenv/macos-dev-environment/</link><pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/devenv/macos-dev-environment/</guid><description>alacritty + tmux + nvim + zsh + Claude Code in a single screen. The choices and structure behind a terminal-centric development environment.</description></item><item><title>JIRA Sprint Workflows and Git/GitHub Integration</title><link>https://wid-blog.github.io/en/posts/tech/devenv/jira-sprint-workflow/</link><pubDate>Tue, 30 Dec 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/devenv/jira-sprint-workflow/</guid><description>Looking at JIRA&amp;rsquo;s issues and workflows as a graph of work units — covering the Sprint lifecycle, issue hierarchy, Git/GitHub integration patterns, and automation flows.</description></item><item><title>GitHub Actions Fundamentals — Workflow, Job, Step</title><link>https://wid-blog.github.io/en/posts/tech/devenv/github-actions-fundamentals/</link><pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/devenv/github-actions-fundamentals/</guid><description>GitHub Actions seen as an event-driven automation engine — the three-layer abstraction of workflow / job / step, plus the operational details of triggers, runners, and secrets.</description></item><item><title>GitHub PRs and the Code Review Cycle</title><link>https://wid-blog.github.io/en/posts/tech/devenv/github-pr-and-code-review/</link><pubDate>Sun, 30 Nov 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/devenv/github-pr-and-code-review/</guid><description>Looking at GitHub PRs as a collaboration layer on top of Git&amp;rsquo;s change graph, and walking through the Code Review cycle, PR-level design, and merge strategies.</description></item><item><title>Git Workflow Basics — Commits, Branches, Merge vs Rebase</title><link>https://wid-blog.github.io/en/posts/tech/devenv/git-workflow-basics/</link><pubDate>Sat, 15 Nov 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/devenv/git-workflow-basics/</guid><description>Looking at Git as a graph of changes — and seeing how commit hygiene, branching strategy, and the merge-vs-rebase choice are all decisions about the shape of that graph.</description></item><item><title>Security Groups and NACLs</title><link>https://wid-blog.github.io/en/posts/tech/infra/vpc-security-fundamentals/</link><pubDate>Sat, 01 Nov 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/infra/vpc-security-fundamentals/</guid><description>How Security Groups (stateful, per-instance) and NACLs (stateless, per-subnet) form different layers of defense in a VPC, plus the common pitfalls each surface.</description></item><item><title>Connecting VPCs to Other Networks — Peering, VPN, Transit, PrivateLink</title><link>https://wid-blog.github.io/en/posts/tech/infra/vpc-connectivity-fundamentals/</link><pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/infra/vpc-connectivity-fundamentals/</guid><description>Comparing the four mechanisms that connect a VPC to other VPCs, on-premises networks, and external services — Peering, Transit Gateway, Site-to-Site VPN, and PrivateLink — across topology and cost.</description></item><item><title>VPC Traffic Flow with Route Tables</title><link>https://wid-blog.github.io/en/posts/tech/infra/vpc-routing-fundamentals/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/infra/vpc-routing-fundamentals/</guid><description>How Route Tables decide traffic paths inside a VPC, the role of Internet Gateway and NAT Gateway as external exits, and the actual meaning of Public/Private Subnet.</description></item><item><title>VPC and the Isolation Model</title><link>https://wid-blog.github.io/en/posts/tech/infra/vpc-isolation-fundamentals/</link><pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/infra/vpc-isolation-fundamentals/</guid><description>How VPC simulates a private network boundary by combining IP CIDR, Subnet, and Tenancy. Includes vendor naming map across AWS / GCP / Azure / Alibaba.</description></item><item><title>Zero-Downtime Data Transition Pattern</title><link>https://wid-blog.github.io/en/posts/tech/architecture/zero-downtime-data-transition/</link><pubDate>Tue, 15 Apr 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/architecture/zero-downtime-data-transition/</guid><description>A three-step pattern combining dual write and fallback read to transition data formats in live services without downtime.</description></item><item><title>Envelope Encryption</title><link>https://wid-blog.github.io/en/posts/tech/security/envelope-encryption/</link><pubDate>Tue, 01 Apr 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/security/envelope-encryption/</guid><description>How the CMK/DEK two-tier key structure in envelope encryption limits key leak impact and simplifies key rotation.</description></item><item><title>MLflow and the ML Lifecycle</title><link>https://wid-blog.github.io/en/posts/tech/ml/mlflow/</link><pubDate>Thu, 20 Feb 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/ml/mlflow/</guid><description>Which slot of the ML lifecycle each MLflow component fills, and which pieces a lightweight team can pick.</description></item><item><title>Circuit Breaker</title><link>https://wid-blog.github.io/en/posts/tech/design-pattern/circuit-breaker/</link><pubDate>Sat, 15 Feb 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/design-pattern/circuit-breaker/</guid><description>A Circuit Breaker&amp;rsquo;s trip trigger and recovery strategy must be designed together. Trip without recovery cuts the dependency permanently; recovery without a trip basis becomes meaningless cycling.</description></item><item><title>Rate Limiting</title><link>https://wid-blog.github.io/en/posts/tech/design-pattern/rate-limiting/</link><pubDate>Fri, 14 Feb 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/design-pattern/rate-limiting/</guid><description>Before choosing a rate limit algorithm, the protection layer decides which algorithms are even available. This post lays out how L4/L7/Application layers and Token/Leaky/Sliding/Fixed algorithms intersect.</description></item><item><title>Choosing a Model Training Framework: sklearn vs ONNX</title><link>https://wid-blog.github.io/en/posts/tech/ml/model-training-frameworks/</link><pubDate>Sat, 01 Feb 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/ml/model-training-frameworks/</guid><description>sklearn and ONNX aren&amp;rsquo;t competing at the same layer. Once you separate their roles, the real question becomes &amp;lsquo;do I need an ONNX layer at all?&amp;rsquo;</description></item><item><title>Revisiting Logistic Regression</title><link>https://wid-blog.github.io/en/posts/tech/ml/logistic-regression/</link><pubDate>Wed, 15 Jan 2025 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/ml/logistic-regression/</guid><description>The structure and characteristics of Logistic Regression, and why an old model still serves as the baseline in CTR prediction.</description></item><item><title>The Blind Spot in Deploy Change Verification — Campaign Cache Incident Retrospective</title><link>https://wid-blog.github.io/en/posts/career/dable/campaign-cache-miss-retrospective/</link><pubDate>Wed, 27 Nov 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/career/dable/campaign-cache-miss-retrospective/</guid><description>The deploy was two days old, and the metrics had been calm the whole time. The moment we turned off the cache refresh batch, ad serving stopped. A retrospective on the missing verification of what a deploy actually changed.</description></item><item><title>Kubernetes Fundamentals</title><link>https://wid-blog.github.io/en/posts/tech/infra/kubernetes-fundamentals/</link><pubDate>Wed, 10 Apr 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/infra/kubernetes-fundamentals/</guid><description>Container orchestration basics and what backend developers need to know: core objects, networking, scaling with HPA, and operational essentials.</description></item><item><title>Go Concurrency Model</title><link>https://wid-blog.github.io/en/posts/tech/language/go-concurrency-model/</link><pubDate>Fri, 05 Apr 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/language/go-concurrency-model/</guid><description>Go&amp;rsquo;s concurrency model builds on CSP, providing Goroutines and Channels as core tools. An overview of how each works and when to choose what.</description></item><item><title>MongoDB vs Redis — Same NoSQL, Different Roles</title><link>https://wid-blog.github.io/en/posts/tech/database/mongodb-vs-redis/</link><pubDate>Tue, 02 Apr 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/database/mongodb-vs-redis/</guid><description>Why MongoDB and Redis end up in different roles even under the same NoSQL umbrella. A comparison across data model, storage, schema, scaling, and use cases.</description></item><item><title>Spring WebFlux Fundamentals — Non-blocking I/O and the Reactive Stack</title><link>https://wid-blog.github.io/en/posts/tech/language/spring-webflux-reactive-stack/</link><pubDate>Mon, 25 Mar 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/language/spring-webflux-reactive-stack/</guid><description>Spring MVC assigns one thread per request. When I/O waits pile up, threads sit idle. WebFlux replaces this with an event loop-based non-blocking model. A summary of the structural differences from MVC, the Reactor pattern, and when to choose which.</description></item><item><title>HTTP/1.1 and HTTP/2</title><link>https://wid-blog.github.io/en/posts/tech/network/http1-vs-http2/</link><pubDate>Wed, 20 Mar 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/network/http1-vs-http2/</guid><description>HTTP/1.1 processes requests and responses sequentially. HTTP/2 changed this with multiplexing, binary framing, and header compression. A summary of the differences between the two protocols and gRPC, which runs on top of HTTP/2.</description></item><item><title>Docker Container Fundamentals</title><link>https://wid-blog.github.io/en/posts/tech/infra/docker-container-fundamentals/</link><pubDate>Fri, 15 Mar 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/infra/docker-container-fundamentals/</guid><description>Covers container concepts, the differences from VMs, Docker&amp;rsquo;s architecture, and the basics of Dockerfile and Docker Compose.</description></item><item><title>Horizontal vs Vertical Slicing</title><link>https://wid-blog.github.io/en/posts/tech/architecture/horizontal-vertical-slicing/</link><pubDate>Sun, 10 Mar 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/architecture/horizontal-vertical-slicing/</guid><description>The difference between splitting code by technical layers (horizontal) and by features or domains (vertical). Trade-offs and selection criteria for each approach.</description></item><item><title>Nest.js Fundamentals — DI and Module System</title><link>https://wid-blog.github.io/en/posts/tech/language/nestjs-di-module-system/</link><pubDate>Mon, 26 Feb 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/language/nestjs-di-module-system/</guid><description>Nest.js provides a DI container and Module system at the framework level in the Node.js ecosystem. A summary of its core design principles: IoC, DI, Module, and Provider.</description></item><item><title>Layered Architecture and Dependency Inversion</title><link>https://wid-blog.github.io/en/posts/tech/architecture/layered-architecture/</link><pubDate>Fri, 23 Feb 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/architecture/layered-architecture/</guid><description>Layered architecture separates code into horizontal layers by technical responsibility. A summary of the four-layer structure, dependency direction rules, and how DIP decouples layers.</description></item><item><title>Kafka Fundamentals and KRaft Mode</title><link>https://wid-blog.github.io/en/posts/tech/infra/kafka-fundamentals-kraft/</link><pubDate>Thu, 22 Feb 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/infra/kafka-fundamentals-kraft/</guid><description>Core Kafka concepts (topics, partitions, consumer groups, replication) and the background behind KRaft mode, which removes the ZooKeeper dependency.</description></item><item><title>Implementing Hexagonal Architecture in Go</title><link>https://wid-blog.github.io/en/posts/tech/architecture/go-hexagonal-architecture/</link><pubDate>Wed, 21 Feb 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/architecture/go-hexagonal-architecture/</guid><description>Core concepts of Hexagonal Architecture and its idiomatic implementation in Go using implicit interfaces and package structure for dependency direction control.</description></item><item><title>Builder</title><link>https://wid-blog.github.io/en/posts/tech/design-pattern/builder/</link><pubDate>Sun, 11 Feb 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/design-pattern/builder/</guid><description>Builder is the answer when three limits of constructors meet at once — many parameters, some optional, and step-wise validation. With fewer than all three, simpler tools suffice. When the language provides rich named/default parameters, the need for Builder shrinks as well.</description></item><item><title>Factory</title><link>https://wid-blog.github.io/en/posts/tech/design-pattern/factory/</link><pubDate>Sun, 04 Feb 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/design-pattern/factory/</guid><description>Factory&amp;rsquo;s shared intent is separating creation from use. The three variants — Factory Method, Abstract Factory, and Static Factory Method — split creation differently and suit different conditions. Static Factory Method is the variant most often encountered in practice, and DI containers absorb part of Factory&amp;rsquo;s explicit role.</description></item><item><title>Singleton</title><link>https://wid-blog.github.io/en/posts/tech/design-pattern/singleton/</link><pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/design-pattern/singleton/</guid><description>Singleton is one of the simplest patterns but the canonical anti-pattern debate. The decision to bundle single-instance guarantee with global access into one pattern causes tight coupling and test difficulty. DI is the general alternative that separates the two intents.</description></item><item><title>Dependency Injection — The Hierarchy of DIP, IoC, and DI</title><link>https://wid-blog.github.io/en/posts/tech/design-pattern/dependency-injection/</link><pubDate>Thu, 25 Jan 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/design-pattern/dependency-injection/</guid><description>DIP (principle), IoC (pattern), and DI (technique) sit at different levels of abstraction. The hierarchy must be clear before framework features and design principles can be told apart.</description></item><item><title>Incremental Cache Refresh Pattern</title><link>https://wid-blog.github.io/en/posts/tech/architecture/incremental-cache-refresh/</link><pubDate>Sat, 20 Jan 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/architecture/incremental-cache-refresh/</guid><description>A pattern for switching from full cache refresh to incremental refresh. Separating data by update frequency and applying change detection reduces network costs.</description></item><item><title>Cache Refresh Optimization Retrospective</title><link>https://wid-blog.github.io/en/posts/career/dable/ad-campaign-cache-optimization/</link><pubDate>Mon, 15 Jan 2024 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/career/dable/ad-campaign-cache-optimization/</guid><description>How I reduced network costs and enabled instance downscaling by switching from full cache refresh to incremental refresh for campaign configuration data.</description></item><item><title>What RDB Transaction ACID Actually Guarantees</title><link>https://wid-blog.github.io/en/posts/tech/database/rdb-transaction-acid/</link><pubDate>Fri, 01 Sep 2023 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/database/rdb-transaction-acid/</guid><description>What each of the four ACID properties actually guarantees in an RDB transaction. A/C/D are relatively clear guarantees, but only I has &amp;rsquo;levels&amp;rsquo; — the gateway to the correctness vs. concurrency trade-off.</description></item><item><title>TCP and UDP</title><link>https://wid-blog.github.io/en/posts/tech/network/tcp-udp/</link><pubDate>Tue, 01 Mar 2022 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/network/tcp-udp/</guid><description>Two transport protocols that backend developers encounter constantly. A summary of TCP and UDP — connection establishment, reliability guarantees, flow/congestion control mechanisms, and selection criteria.</description></item><item><title>Session Authentication and JWT</title><link>https://wid-blog.github.io/en/posts/tech/security/session-and-jwt/</link><pubDate>Sat, 20 Mar 2021 00:00:00 +0000</pubDate><guid>https://wid-blog.github.io/en/posts/tech/security/session-and-jwt/</guid><description>HTTP is stateless. Maintaining user authentication requires storing state somewhere. This post covers the structure, trade-offs, and storage strategies of server-side sessions and client-side JWT tokens.</description></item></channel></rss>