Timeline GitLab Predefined Variables in Practice (Part 2): The Pipeline "Orchestration Signals" — Trigger Source, Parent-Child Pipelines, Runner and Environment 2026-06-21 GitLab Predefined Variables in Practice (Part 1): The Pipeline's "Identity" — Branch, Tag, Commit, and MR 2026-06-20 MCP vs. CLI: The Two Paths for Agents to Call Tools, and Who Is Eroding Whom? 2026-06-13 An Agent's "Code of Conduct" — the Essence of Skill and the Common Misconceptions 2026-06-07 The Hands and Feet of an Agent: Tool Capability Boundaries and Their Evolution 2026-06-06 Hermes Memory Provider and Mem0: An Overlooked Memory Abstraction Layer That Lets Agents Share Knowledge 2026-05-24 Hermes Profile — Multiple Agent Personas, One Set of Tools Does It All 2026-05-23 LiteLLM: A Unified LLM Gateway — From API Key Chaos to Enterprise AI Infrastructure 2026-05-16 Local LLM in Practice (Part 6): Hermes Agent — a Self-Evolving AI Agent with Memory and Learning 2026-05-09 Local LLMs in Practice (Part 5): OpenClaw — A Local Agent Gateway That Gives LLMs "Digital Hands and Feet" 2026-05-02 Local LLM in Practice (Part 4): OpenHands — The Ideal and the Reality of an AI Full-Stack Software Engineer 2026-04-25 Local LLM in Practice (Part 3): Cline — the Open-Source Coding Agent in VS Code 2026-04-18 Local LLM in Practice (Part 2): OpenCode — The Open-Source AI Coding Assistant in Your Terminal 2026-04-11 Local LLMs in Practice (Part 1): Building Your AI Infrastructure on the Intranet 2026-03-07 Monitoring Musings (Part 5): Tracing — When One Request Crosses 20 Microservices, How Do You Trace What It Went Through 2026-02-08 Monitoring Musings (Part 4): Alert Design — Why Your Alerts Make People "Numb" 2026-02-07 Monitoring Musings (Part 3): Metrics Monitoring — Numbers Don't Lie, but Your Dashboard Does 2026-02-01 Monitoring Musings (Part 2): Log Collection — Your First-Hand Material for Troubleshooting, Yet Often Missing When You Need It Most 2026-01-31 Monitoring Musings (Part 1): Monitoring Is Nothing Fancy — It's Just the System's “Health Check Report” 2026-01-25 Vibe Coding (Part 4): How to Make AI Truly Understand Your Project 2026-01-24 Vibe Coding (Part 3): AI-Generated Code — Doubt First, Trust Later 2026-01-17 Vibe Coding (Part 2): Treating the AI as a New Intern 2026-01-10 Vibe Coding (Part 1): You're Not Writing Code, You're Describing Requirements 2026-01-03 DevOps Methodology Musings (Part 6): The Tasteful Developer Does DevOps — Not Just "Can It Run" but "Does It Look Good" 2025-12-21 DevOps Methodology Musings (Part 5): What a DevOps Engineer Needs to Know — An Unconventional Competency Model 2025-12-20 DevOps Methodology Musings (Part 4): Toolchain Thinking — What Should Be in Your Arsenal 2025-12-14 DevOps Methodology Musings (Part 3): Which Major Suits DevOps — How Your Professional Background Shapes Your Starting Point 2025-12-13 DevOps Methodology Musings (Part 2): The DevOps Loop — End-to-End Software Delivery 2025-12-07 DevOps Methodology Musings (Part 1): Culture Comes First — Why We Start with Culture 2025-12-06 Understanding AI (5): Embedding — How AI Understands Semantics 2025-11-29 Understanding AI (Part 4): Temperature and Top-P — the AI Creativity Knob 2025-11-23 Understanding AI (Part 3): Context Windows — How Short-Term Memory Works in AI 2025-11-22 Understanding AI (Part 2): What Is a Token? — How AI Reads and How Tokenisation Works 2025-11-16 Understanding AI (Part 1): What Is AI Actually Learning? — From Probability to Language Models 2025-11-15 Jira Efficiency: A Guide to Common Keyboard Shortcuts 2025-11-15 Jira Query Power Tools: JQL and Filters 2025-11-09 Jira Scrum Agile Boards in Practice 2025-11-08 Jira Issue Management and Workflow Design 2025-11-02 Jira, the Requirements Management Power Tool: An Overview and Core Concepts 2025-11-01 Unpacking AssetBundles — Extracting Unity Assets with AssetStudio 2025-07-11 How to Fix GitHub Access Problems Without a VPN 2025-06-26 Learn Vue and Become a Full-Stack Web Developer! 2025-05-10 Civilization and Strength 2025-01-07 Release Engineering (Part 7): Tool Comparison and Artifact Cleanup Strategies 2024-08-17 Release Engineering (6): JFrog Artifactory — Enterprise-Grade Artifact Management 2024-08-10 Release Engineering (Part 5): Harbor — The Container Image Registry 2024-08-03 Release Engineering (Part 4): Nexus — Java Private Repository and General-Purpose Artifact Repository 2024-07-27 Release Engineering (Part 3): Changelog and Release Notes — Making Every Version Traceable 2024-07-20 Release Engineering (Part 2): Version Number Conventions — SemVer and CalVer 2024-07-13 Release Engineering (Part 1): What Is a Release — The Starting Point of the Artifact's Full Life Cycle 2024-07-06 Cloud-Native Deployment (Part 10): Health Checks and Zero-Downtime Deployment 2024-06-30 Cloud-Native Deployment (Part 9): K8s Package Management — Helm from Getting Started to Real-World Practice 2024-06-29 Cloud-Native Deployment (Part 8): K8s Storage — Volume, PV, PVC and StorageClass 2024-06-23 Cloud-Native Deployment (Part 7): K8s Network Model — CNI and Service Discovery 2024-06-22 Cloud-Native Deployment (Part 6): K8s Core Concepts — Pod, Deployment, Service, ConfigMap and Secret 2024-06-16 Cloud-Native Deployment (Part 5): Kubernetes Architecture Core — Master, Node and etcd 2024-06-15 Cloud-Native Deployment (Part 4): Container Image Registry — Docker Hub and a Self-Hosted Harbor Registry 2024-06-09 Cloud-Native Deployment (Part 3): Dockerfile Instructions in Detail and Multi-Stage Builds 2024-06-08 Cloud-Native Deployment (Part 2): Docker Basics — Images, Containers and the Principle of Layering 2024-06-02 Cloud-Native Deployment (Part 1): The Evolution from Physical Machines to Containers 2024-06-01 Game Build: Unreal Builds (Part 4): The Shader Compilation Nightmare — Why Does Every Update Make Players Wait Twenty Minutes? 2024-05-11 Game Builds: Unreal Build (Part 3): Pak Files — How Unreal Wraps Its Assets 2024-05-04 Game Build: Unreal Builds (Part 2): What Is Cook? Why Does Every Build Have to "Do the Cooking"? 2024-04-20 Game Builds: Unreal Build (Part 1): How Does a .uproject Become an .exe? 2024-04-13 Game Build: Unity Build (Part 5): IL2CPP and Cross-Platform — How Does "Develop Once, Ship Everywhere" Actually Work? 2024-04-06 Game Build: Unity Build (Part 4): Addressables — a "Correct Answer" That Changes Far More 2024-03-30 Game Build: Unity Build (Part 3): Scriptable Build Pipeline — Minimum Change, Maximum Cache Gain 2024-03-23 Game Build: Unity Build (Part 2): Two Generations of the AssetBundle Interface — From Hand-Written Packaging to Automatic Dependencies, What Happened Along the Way? 2024-03-16 Game Builds: Unity Build (Part 1): After You Click Build, How Much Does Unity Do For You? 2024-03-09 Game Build Musings (Part 0): From Java to Unity/Unreal, How I Came to Understand the Word "Build" All Over Again 2024-01-13 Feedback System Musings (Part 5): Notification Strategy Design — When to Notify Whom 2023-09-09 Feedback Systems Miscellany (Part 4): Instant Messaging Notifications — Webhook Connects Everything 2023-09-02 Feedback System Musings (Part 3): SMS Notifications — the Ultimate Fallback for Emergencies 2023-08-26 Feedback Systems (Part 2): Email Notifications — The Oldest and Most Reliable Channel 2023-08-19 Feedback System Musings (Part 1): From "Seeing the Problem" to "Triggering Action" 2023-08-12 Build Tools (11): Build System Panorama — How to Choose from make to Bazel 2023-08-05 Build Tools (10): Getting Started with Bazel — A Build System at Google's Level 2023-07-30 Build Tools (Part 9): Ninja — The Flash of the Build World 2023-07-29 Build Tools (Part 8): Cross-Compilation — Compiling ARM Programs on Your x86 Computer 2023-07-23 Build Tools (Part 7): Organizing CMake in a Multi-Directory Project — Managing Code Like Building Blocks 2023-07-22 Build Tools (Part 6): The Way of Modern CMake — target_* and Interface Propagation 2023-07-16 Build Tools (Part 5): Getting Started with CMake — Why Your Project Needs a CMakeLists.txt 2023-07-15 Build Tools (Part 4): pkg-config — The Key That Solves Dependency Hell 2023-07-09 Build Tools (Part 3): Static Libraries vs Dynamic Libraries — What Exactly Is the Difference Between .a, .so and .dylib 2023-07-08 Build Tools (Part 2): The Four Stages of GCC Compilation — What Your .c File Actually Goes Through 2023-07-02 Build Tools (Part 1): From Typing gcc by Hand to the Makefile — The First Evolution of Build Tools 2023-07-01 Git Branching Models (Part 4): Trunk-Based Development 2023-06-18 Git Branching Models (Part 3): GitLab Flow 2023-06-17 Git Branching Models (Part 2): GitHub Flow 2023-06-11 Git Branching Models (Part 1): Git Flow 2023-06-10 Gradle Incremental Builds and Build Cache Optimization 2023-06-03 Gradle Custom Plugins — Comparing Three Approaches 2023-05-28 Gradle Wrapper: A Unified Build Environment for the Team 2023-05-27 Building a Gradle Multi-Module Project 2023-05-21 Gradle Tasks in Detail: Custom Tasks and Task Dependencies 2023-05-20 Maven Repository Configuration: settings.xml in Detail 2023-05-14 Maven Profiles — Different Configurations for Different Environments 2023-05-13 A Look at Common Maven Plugins — compiler, surefire, jar, assembly 2023-05-07 Maven Dependency Management: scope, Transitive Dependencies and Exclusions 2023-05-06 Maven Lifecycle and Common Commands Quick Reference 2023-04-30 Ant Custom Tasks — Writing Inline Scripts in Groovy/JavaScript 2023-04-29 Executing External Commands and Scripts with Ant 2023-04-23 Conditionals in Ant — Using if/unless and condition 2023-04-22 Common Ant File Operations — Copy, Move, Delete, Rename 2023-04-16 Loading and Using Property Files in Ant 2023-04-15 SVN Reverting and Undo — What to Do When Something Goes Wrong 2023-04-09 SVN Conflict Resolution in Detail — Say Goodbye to Merge Phobia 2023-04-08 SVN Branching and Merging — The Right Way to Develop on the Trunk 2023-04-02 Git Bisect — Quickly Locating the Problem Commit with Binary Search 2023-04-01 Git Rebase — Make Your Commit History More Elegant 2023-03-26 Git Stash — Temporarily Shelving Changes in the Working Tree 2023-03-25 2 Lines of Code to Automate HTML-to-Image Conversion! 2023-03-18 Distinguishing the Three Different Levels of Dependencies in Gradle 2023-03-18 Invalid cookie header Invalid 'expires' attribute 2023-03-12 Automated Deployment with GitHub Actions — from push to live 2023-03-11 Configuring the UE4 Android NDK, SDK and JDK Without Opening the Editor 2023-03-11 Why the sun.misc.BASE64Encoder Class-Not-Found Error Happens and How to Fix It 2023-03-09 Installing a Linux Distribution in Windows 10 WSL2 Fails with Error 0x800701bc 2023-03-06 The Shared Path Cannot Be Modified During Visual Studio Installation 2023-03-04 GitHub Actions FAQ Collection (Part 1) 2023-03-04 An Introduction to the Files Involved in a gradle Build 2023-02-26 The Relationship Between kotlin, kotlin-plugin, gradle and kotlin-gradle-plugin 2023-02-25 Using the Latest Version of a Dependency in Gradle 2023-02-19 GitHub Actions — GitHub's Native Automation Workflow 2023-02-18 .Net Runtime Types 2023-02-18 Running JavaScript Code from Python 2023-02-12 Python WeChat bot 2023-02-11 How to print the current directory in a Windows bat file (like pwd on Linux) 2023-02-09 Gitlab CI Variables and Environments — Bringing Your Pipeline to "Life" 2023-02-04 GitLab CI FAQ Collection (Part 1) 2023-01-21 How to Upload an Empty Folder to Git 2023-01-16 Direct Download Links for the International Version of UnityHub 2023-01-14 Measuring the Execution Time of Ant Targets 2023-01-09 Gitlab CI — the CI/CD Power Tool Built into Gitlab 2023-01-07 Decompiling Python-compiled pyc files back into py files 2023-01-04 Disabling the Gradle Daemon 2022-12-14 Visual Studio SVN Plugin 2022-11-18 Adding a Startup Item on Windows via the Registry 2022-10-02 GeForce Experience Requires Login and Registration Keeps Failing: How to Bypass or Disable Login 2022-09-19 Fixing the wget “unable to verify xxx’s certificate issued by xxxx: the certificate has expired” error when downloading files 2022-08-13 What Is a D-pad? 2022-07-03 Temporarily and Permanently Disabling SELinux 2022-06-10 Temporarily and permanently disabling firewalld 2022-06-10 Viewing the system boot time in Windows 2022-05-10 Compiling Unreal Engine from Source (UE4/UE5) 2022-04-14 Installing UI Toolkit in Unity 2022-04-07 The Typical Workflow for Using Assets in Unity 2022-04-07 Quickly Extract the Audio from a Video on Mac 2022-03-06 Setting Up 3D Audio in Unity 2022-03-03 Enabling Anonymous Access for Windows File Sharing 2022-02-26 Enabling Long Path Support on Windows 10 2022-02-24 Is Node.js a Programming Language? 2022-02-20 Building Unity ABs While Keeping the Hash Unchanged 2022-02-07 What Does the BuildAssetBundleOption.DisableWriteTypeTree Option Do, and Should You Turn It On? 2022-01-07 Debugging Unity Code in Visual Studio 2022-01-06 How to Configure svn:ignore to Ignore Multiple Files/Folders 2022-01-04 Getting the current revision of a local SVN repository 2022-01-04 How do I ignore files in certain SVN directories so they stay unchanged? 2022-01-03 What the FTP passive Parameter Does 2021-12-28 How to Fix Method Navigation in Unity Project Scripts Opened in Visual Stuido 2021-12-27 Configuring nginx to automatically redirect http to https 2021-12-25 How Do You Copy Files in a Windows Batch File? What Is the Windows Equivalent of Linux's cp Command 2021-12-24 How to Fix the log4j2 Remote Code Execution Vulnerability CVE-2021-44228 2021-12-23 iOS build signing fails with "unable to build chain to self-signed root for signer" and CodeSign failed with a nonzero exit code — how to fix it 2021-12-22 The Differences Between armv6, armv7, armv7s, armv8 and arm64 2021-12-22 The Difference Between Android App Bundle (AAB) and APK 2021-12-21 Using Batch Commands to Kill Processes on Windows 2021-12-20 Free Front-End CSS and JS CDN Acceleration Sites in China 2021-05-09 Fix for the Windows administrator User Not Having Administrator Rights 2021-04-24 Unity Android build error: Android SDK does not include your Target SDK of 28 — cause and fix 2021-04-22 How to Do an OR with the grep Command 2021-03-11 Using a Windows batch script to get the list of changed SVN files 2021-02-07 Deleting Untracked Files from the Git Working Directory 2021-01-17 Improving the Styling of the Domain's Public Security Filing Information 2020-11-07 Installing PHP on CentOS 7 2020-10-24 Installing Nginx on CentOS 7 2020-10-24 Installing MariaDB on CentOS 7 2020-10-24 Jenkins FAQ Collection (Part 8) 2020-05-20 Jenkinsclient Tutorial Series: Viewing Basic Information (Part 2) 2020-05-17 Jenkinsclient Tutorial Series: Introduction and Installation (Part 1) 2020-05-17 A Process Started by Jenkins Always Exits after the Build? Use the keepRunning Step for an Elegant Fix 2020-05-04 The Automation Revolution and DevOps 2020-04-20 Jenkinsclient 1.0 Released: A Powerful, Open-Source, Cross-Platform Jenkins Command-Line Client, Licensed Under the Domestic Mulan Open Source License 2020-04-17 How to Host a Python Package on PyPI 2020-04-12 Jenkins Plugin Update Center Address Changer: One-Click Switch to a Domestic Mirror 2020-04-06 How to Use the Jenkins Declarative Pipeline 2020-03-31 How to Fix Kubernetes Stuck in the starting State in Docker Desktop on macOS 2020-03-07 Groovy Syntax Tutorial Series: Collections (6) [Final] 2020-02-29 Groovy Syntax Tutorial Series: Booleans (Part 5) 2020-02-28 Groovy Syntax Tutorial Series: Numbers (Part 4) 2020-02-22 Groovy Syntax Tutorial Series: Strings (Part 3) 2020-02-21 Groovy Syntax Tutorial Series: Keywords and Identifiers (Part 2) 2020-02-16 One Article to Sort Out How rake, Rakefile, gem, gemspec, bundler, bundle and Gemfile Relate to Each Other 2020-02-15 Groovy Syntax Tutorial Series: Comments (Part 1) 2020-02-15 Octicons, an Open-Source and Extensible Icon Set 2020-02-08 Blog Adds a New Page: "Reference Books" 2020-02-07 Starting from a Small Problem: A Word on the Mindset of Problem Solving 2020-02-04 New Year, New Look — The Site Has a New Theme! 2020-02-03 The Problem of Escaping Chinese Characters in JavaScript 2020-02-03 Jenkins Architecture 2020-01-26 I Obtained the Certified Jenkins Engineer Certification and Certificate 2020-01-18 The Spear and Shield of Innocence 2019-11-16 Why Do People Tell "Beautiful Lies"? 2019-11-15 Luo Yonghao: The Typical Case of "Lower Virtue Not Losing Virtue, Therefore Having No Virtue" 2019-11-06 How to Set Up a Local Jekyll Environment on macOS 2019-11-02 Writing a Blog with Git and Markdown Is a Great Experience! 2019-10-28 The Unity and Plurality of Chinese Values 2019-10-27 GitHub Pages FAQ (Part 1) - 404 Not Found after adding categories and tages 2019-10-27 How to Build a Personal Blog with GitHub Pages 2019-10-26 Jenkins FAQ Collection (Part 7) 2019-08-14 Jenkins——the thing which auto everything 2019-08-06 Jenkins FAQ Collection (Part 4) 2019-08-05 Jenkins FAQ Collection (Part 3) 2019-08-03 Jenkins FAQ Collection (Part 2) 2019-08-02 Jenkins FAQ Collection (Part 1) 2019-08-01 The Tale of Nezha — Thoughts on Watching "Ne Zha: Birth of the Demon Child" 2019-07-29 Programming Is a Very Literary Affair! 2019-07-18 Life Has No Meaning to Begin With 2019-01-21 Java Code Coverage (Part 2): JaCoCo in Practice, from Getting It Running to Reading the Report 2018-09-08 Java Code Coverage (Part 1): From Emma to JaCoCo, What Coverage Really Is 2018-09-02 Java Unit Testing (Part 3): Isolating External Dependencies with Mockito 2018-09-01 Java Unit Testing (Part 2): Getting Hands-On with JUnit 5 2018-08-26 Java Unit Testing (Part 1): What Is a Unit Test and Why Write One 2018-08-25 Java Static Code Analysis (6): Building a Continuous Code Quality Platform with SonarQube 2018-08-19 Java Static Code Analysis (Part 5): SpotBugs — the Successor to FindBugs 2018-08-18 Java Static Code Analysis (Part 4): FindBugs — the Bytecode-Level Bug Hunter 2018-08-12 Java Static Code Analysis (Part 3): Finding Bad Practices with PMD 2018-08-11 Java Static Code Analysis (Part 2): Enforcing Code Style with Checkstyle 2018-08-05 Java Static Code Analysis (Part 1): What Is Static Analysis 2018-08-04 When Heaven Is About to Bestow a Great Task, It First Denies You What You Wish For 2018-08-02 Heart and Object 2018-07-17 Thoughts on Seeing the Moon at Mid-Autumn 2015-09-27