- /
- Archive/
Archive
Browse all technical articles organized by year
Archive (142)
2025 (35)
- 12-26 GitHub AI Terminology Explained—Copilot, Agents, Models to MCP, Who is Who?
- 12-04 py-eol — You Might Be Using 'Expired Python' Without Realizing It
- 12-01 To Save Everyone Two Lines of Commands—I Packaged Gnuplot into an Out-of-the-Box Python Package
- 11-30 The Truth About Software Development—Adding Two People Won't Make a Project Three Times Faster
- 11-27 Tired of Jenkinsfile Errors Only After Committing—Try This Pre-check Tool!
- 10-13 Commit Check v2.0.0 Released—TOML Config Support, Simplified CLI & Hooks, Rebuilt Validation Engine!
- 10-01 Jenkins Explain Error Plugin Now Supports Ollama! 🤖
- 09-30 The Cpp Linter Used by Microsoft and NASA Finally Has an Official Website!
- 09-16 Conventional Branch Specification One-Year Anniversary — From Zero to Global Developer Adoption
- 08-24 Blog Bilingual Publishing Made Easy — GitHub Actions + Gemini API in Practice
- 08-22 Four Years of Open Source —— Three Unexpected Rewards
- 08-17 DevOps Maturity — From Reflection to Open Source Practice
- 08-10 Eight Years Later, I Finally Revamped My Blog
- 08-03 Jenkins Explain Error Plugin Now Supports Google Gemini! 🤖
- 07-29 Jenkins Plugin Center Didn't Have an AI Plugin Yet? I Wrote One! 🤖
- 07-13 A Year Abroad — Not Everyone Is Cut Out for Europe
- 06-23 How to Fix Shields.io Badges Not Displaying in Jenkins
- 06-12 Enhancing Code Traceability — Automatically Including PR Descriptions in Git Commits
- 06-04 How to Change abortPrevious Value in Jenkins?
- 06-02 CI/CD—Not a One-Time Project, but a Continuously Evolving System
- 05-29 asdf-clang-tools — A New Way to Install Clang Tools Using asdf
- 05-14 Still Using Wiki/Confluence? You Might Be Producing Garbage
- 05-05 Still using pip and venv? You're outdated! Try uv!
- 04-29 Full Record|PyCon LT 2025 Day Three - Can AI Replace You?
- 04-24 Full Record|PyCon LT 2025 Day Two - Charmed by Several Female Developers
- 04-23 Full Record|PyCon LT 2025 Day One - My Experiences at an International Python Conference
- 04-16 Returning Home for Vacation — Reflections on a Beijing Night
- 04-15 Microsoft and NASA Use It? My 4-Year-Old Side Project Hit 100 Stars
- 04-13 My Patience with Accessing GitHub is Wearing Thin
- 04-12 Setting up Sphinx + ReadTheDocs from Scratch - Rapidly Deploying Automated Documentation
- 04-11 Markdown — Not So Great Anymore? Why More and More Python Projects Use RST?
- 03-12 Why Are More and More Enterprise Users Abandoning VMware?
- 02-14 Why I chose to review for EuroPython 2025
- 02-05 gitstats Upgrade Arrives—JSON Output, Cross-Platform Compatibility, and Code Refactoring!
- 01-25 How to use Jenkins Docker Cloud
2024 (14)
- 12-28 2024 Year-End Summary
- 12-28 My Daughter
- 11-28 Reviving GitStats — Breathing New Life into Git History Analysis
- 11-26 pip vs pipx Differences
- 11-18 PowerShell is not recognized as an internal or external command
- 10-25 What Optimizations I Made During the Jenkins Upgrade
- 09-27 Choices — Often More Important Than Effort
- 09-18 Conventional Branch Specification Released!
- 07-09 I Remember
- 06-28 Farewell Rocket China — A Decade's Journey and a New Beginning
- 06-10 Code Signing — GaraSign
- 04-29 Code Signing
- 03-25 Must-Know GitHub Action Feature - Reusable Workflows
- 02-17 cpp-linter-action—Latest Version Now Supports Pull Request Review Functionality 👏
2023 (14)
- 12-31 2023 Year-End Summary
- 12-27 How to Automatically Categorize GitHub Release Notes by New features, Bug Fixes…
- 12-15 How to make Jenkins pipeline not fail if a specific error occurs
- 12-02 How to adopt Supply Chain Security for GitHub and Non-GitHub projects
- 11-30 Witness and SLSA 💃
- 10-08 Problems and solutions when upgrading XLC from 10.1 to IBM Open XL C/C++ for AIX 17.1.0
- 09-11 Resolving Jenkins Artifactory Plugin Artifact Upload Failure "unable to find valid certification path to requested target"
- 08-29 Upload artifacts failed to Artifactory from AIX
- 08-25 Creating a NuGet Organization — Pitfalls Encountered
- 07-17 Docker Buildx Bake—A Powerful Tool for Accelerating Builds and Managing Multi-platform Images
- 06-10 Understanding SBOM - Definition, Relationships, Differences, Best Practices, and Generation Tools
- 05-09 Programmer's Self-Cultivation — Git Commit Message and Branch Creation Conventions (Tools)
- 03-23 The SLSA Framework and Software Supply Chain Security Protection
- 02-06 Why is my Jenkins Controller getting slower—Possible mistakes you might be making...
2022 (16)
- 12-28 2022 Year-End Summary
- 10-09 How to implement [skip ci] for Jenkins multi-branch pipeline
- 09-27 How to fix "Temporary Failure in name resolution" in WSL
- 09-16 Restrict others from login your important Linux machine
- 08-23 C/C++ Code Formatting and Static Analysis—A One-Stop Workflow with Cpp Linter
- 07-28 How to create GPG keys and add to GitHub
- 04-19 Developing on Windows Just Got Awesome using WSL + VS Code + Docker Desktop - Worth a Try
- 03-29 Docker, containerd, CRI, CRI-O, OCI, runc Explained and How They Work Together
- 03-15 How to enable, configure and disable Jenkins LDAP
- 03-09 Reliably Unforking a GitHub Repository Without Deletion and Reconstruction
- 03-02 Resolved - The Pip Inspector tree parse failed to produce output
- 02-21 From QA to DEV to DEVOPS — Five Years of Coding and Writing
- 02-14 Vagrant vs. Docker —— Which One Should You Choose?
- 02-11 What is Vagrant? Differences Between Vagrant and VirtualBox
- 01-18 What is Go? Advantages, Current Status, and Choosing Between Python and Go for Beginners
- 01-12 You Must Know These 17 Docker Best Practices!
2021 (26)
- 11-06 2021-22 World Quality Report (WQR)
- 10-24 Polaris - Static Code Analysis
- 09-18 How does SonarQube Community Edition integrate with the project
- 09-07 Run lcov failed "Can't locate JSON/PP.pm in @INC ..."
- 08-05 SonarQube installation and troubleshootings
- 07-27 How to fix "hidden symbol `__gcov_init' in ../libgcov.a(_gcov.o) is referenced by DSO"
- 07-25 Add or update Bitbucket build status with REST API
- 07-14 About Code Coverage
- 07-11 Code coverage testing of C/C++ projects using Gcov and LCOV
- 06-24 How to make Jenkins job fail after timeout? (Resolved)
- 06-20 Solving Two Git Clone Failure Issues on AIX
- 06-17 Resolving Git Large Repository Download Failures on AIX by Removing File Resource Limits
- 06-16 Regarding Extremely Slow and Occasional Upload Failures to Artifactory — A Case Study
- 06-07 Resolved problem that ESlint HTML report is not displayed correctly in Jenkins job
- 05-13 Branch Naming Convention
- 05-04 How to download the entire folder artifacts when Artifactory "Download Folder functionality is disabled"?
- 04-22 Why Windows Installer pop up? (Resolved)
- 03-28 Is Your Python Code Pythonic Enough?
- 03-24 Different branches have different default parameters in Jenkins
- 03-20 Thoughts and Practices Based on Google's Code Review Principles
- 02-11 Jenkins upgrade issue "Windows agents won't start" workaround
- 01-14 What's the difference between result and currentResult in Jenkins?
- 01-12 How to open port 22 and make it listening on Windows
- 01-12 These settings in Bitbucket/GitHub recommends enable
- 01-11 git sparse-checkout enable and disable
- 01-06 Resolving the Unavailable Code Sign Default Timestamp Server http://timestamp.verisign.com/scripts/timstamp.dll
2020 (20)
- 12-31 2020 Year-End Summary
- 11-24 How to backup Jenkins
- 10-04 For Those Who Want to Use JFrog Artifactory to Manage Artifacts
- 09-24 Programmer's Self-Cultivation — Git Commit Message and Branch Creation Conventions
- 09-13 Publishing a Python Project on GitHub — Things to Note
- 08-30 About Python pip install and versioning
- 08-17 Update Jira server account avatar with rest API
- 08-10 Fixed "Remote session was disconnected because there are no Remote Desktop client access licenses available"
- 08-07 Daily Notes
- 08-07 Obtaining Bitbucket Repository Events in Real Time via the generic-webhook-trigger Plugin
- 07-22 Jenkins—Executing Shell Scripts—Handling Non-Zero Return Codes
- 07-16 How to fix ".NET Framework 2.0 or later is required on this computer to run a Jenkins agent as a Windows service"
- 07-03 Jenkins Top 3 best practice
- 05-30 Beyond Coding - The Importance of Writing for Programmers
- 05-23 How to Ensure No Syntax Errors Before Submitting a Jenkins Pipeline
- 05-09 How to use JMeter to do Performance Testing
- 04-24 Bitbucket Webhooks Configuration
- 04-20 Three Ways to Solve the Jenkins Declarative Pipeline "Method code too large" Exception
- 03-21 How to Slim Down Your Git Repository
- 02-16 A Free C/C++ Static Code Analysis Tool—Cppcheck—Integrated with Jenkins
2019 (12)
- 12-28 2019 Year-End Summary
- 12-17 Git History Statistics Generator
- 12-01 Beijing 48 Hours — A DevOps Training Camp Experience
- 11-10 Getting Started with JFrog Artifactory
- 09-10 How to Set Up NFS Sharing and Mount on Different Platforms—Windows/Linux/Unix
- 09-01 Resolving the "Could not read from remote repository" Issue
- 08-20 Git Commit Squash
- 06-25 Jenkins Multibranch Pipeline
- 05-21 A Code Coverage Tool - Squish Coco use examples
- 05-21 Code Coverage tools of C/C++
- 05-12 Jenkins Linux agent configuration
- 05-12 Jenkins Windows agent configuration