<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Xianpeng Shen</title><link>https://shenxianpeng.dev/en/</link><description>Recent content on Xianpeng Shen</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>xianpeng.shen@gmail.com (Xianpeng Shen)</managingEditor><webMaster>xianpeng.shen@gmail.com (Xianpeng Shen)</webMaster><copyright>Copyright © 2017–2026 Xianpeng Shen. All rights reserved.</copyright><lastBuildDate>Wed, 09 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://shenxianpeng.dev/en/index.xml" rel="self" type="application/rss+xml"/><item><title>Keelhaven Releases New Version—This Time, Updates Come from Real User Feedback</title><link>https://shenxianpeng.dev/en/posts/2026/keelhaven-0-8-0/</link><pubDate>Wed, 09 Sep 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/keelhaven-0-8-0/</guid><description>Most updates in Keelhaven 0.8.0 come from real user feedback: new backup destinations, customizable backup parameters, backup preview, and only keeping the latest N snapshots.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/keelhaven-0-8-0/featured.jpg"/></item><item><title>mkdocs-ng v1.8.0 Released — Upstream Issues Fixed, Builds ~14% Faster</title><link>https://shenxianpeng.dev/en/posts/2026/mkdocs-ng-1.8/</link><pubDate>Thu, 13 Aug 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/mkdocs-ng-1.8/</guid><description>mkdocs-ng v1.8.0 is out, the first feature release since the fork. Built-in themes no longer copy the entire highlight.js distribution, making clean builds ~14% faster with ~440 fewer files per site. Search finally finds programming keywords like while and if. The next release will bring incremental builds to mkdocs serve.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/mkdocs-ng-1.8/featured.jpg"/></item><item><title>Open Delivery Spec update: AI code shouldn't just pass the gate — it should leave evidence</title><link>https://shenxianpeng.dev/en/posts/2026/open-delivery-spec-update/</link><pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/open-delivery-spec-update/</guid><description>Three weeks ago I introduced Open Delivery Spec (ODS), my side project for governing AI-assisted code in CI. Since then the CLI has shipped 5 releases and grown two new pillars: deterministic merge-confidence signals that answer &amp;ldquo;is this AI PR safe to merge?&amp;rdquo;, and an auto-generated, standards-based evidence document on every PR. As always, this post sticks to what actually ships — no hype.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/open-delivery-spec-update/featured.jpg"/></item><item><title>From Praising to Bashing—My Attitude Shift Towards GitHub Copilot</title><link>https://shenxianpeng.dev/en/posts/2026/goodbye-copilot/</link><pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/goodbye-copilot/</guid><description>Recently, my attitude towards GitHub Copilot has undergone a significant change: from &amp;ldquo;praising&amp;rdquo; to &amp;ldquo;bashing.&amp;rdquo; After comparing it with Claude Code, I&amp;rsquo;ve found that Copilot has clear deficiencies in cross-repository support and &amp;ldquo;senior engineer&amp;rdquo; awareness, to the point where I&amp;rsquo;m no longer willing to discuss problems with it.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/goodbye-copilot/featured.jpg"/></item><item><title>Open Delivery Spec—I Built a CI Quality Gate for AI-Generated Code</title><link>https://shenxianpeng.dev/en/posts/2026/open-delivery-spec/</link><pubDate>Fri, 17 Jul 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/open-delivery-spec/</guid><description>Over the past few months, I&amp;rsquo;ve been working on an open-source organization called Open Delivery Spec (ODS) in my spare time. The initiative stemmed from the increasing volume of AI-generated code and the lack of reliable governance mechanisms within teams. This article records the thought process, progress, and boundaries based on the project&amp;rsquo;s real-world status, without any exaggeration.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/open-delivery-spec/featured.jpg"/></item><item><title>Conventional Branch 1.1.0 Released—Official Support for AI Coding Agent Branch Prefixes</title><link>https://shenxianpeng.dev/en/posts/2026/conventional-branch-v1-1-0/</link><pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/conventional-branch-v1-1-0/</guid><description>The Conventional Branch specification receives its first major update. Version 1.1.0 adds support for AI Coding Agent branch prefixes (ai/, copilot/, cursor/, claude/, codex/), and provides a machine-readable spec.json and agent registry, making the specification useful not only for humans but also for tools.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/conventional-branch-v1-1-0/featured.jpg"/></item><item><title>Jenkinsfile Lint 1.5.0 Released— Standalone Mode Without a Jenkins Server</title><link>https://shenxianpeng.dev/en/posts/2026/jenkinsfilelint-standalone/</link><pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/jenkinsfilelint-standalone/</guid><description>Previously, jenkinsfilelint required connecting to an available Jenkins server for syntax validation. Now, v1.5.0 introduces a new standalone mode. With just Docker, you can launch a minimal Jenkins environment locally to validate Jenkinsfile syntax. This article details the implementation idea and usage of this mode.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/jenkinsfilelint-standalone/featured.jpg"/></item><item><title>Which Code in Your Repository is AI-Written—Now There's a Tool to Govern It</title><link>https://shenxianpeng.dev/en/posts/2026/commit-check-ai-attribution/</link><pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/commit-check-ai-attribution/</guid><description>AI tools like Claude Code by default embed signatures in commits, something many people don&amp;rsquo;t even notice. Commit Check v2.11.0 introduces AI Attribution Governance, allowing a single line of configuration to reject commits with AI signatures at the CI level. This article also discusses the boundaries of this feature and other pain points Commit Check has solved in the past six months.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/commit-check-ai-attribution/featured.jpg"/></item><item><title>Originally Just Wanted to Propose a Doc PR, Ended Up Moving the Project to the Official Jenkins Organization</title><link>https://shenxianpeng.dev/en/posts/2026/jenkinsfilelint/</link><pubDate>Tue, 09 Jun 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/jenkinsfilelint/</guid><description>I wrote a small tool to validate Jenkinsfiles, initially just wanting it to appear in Jenkins&amp;rsquo; official list of development tools. However, a Jenkins maintainer suggested: why not just transfer the project directly into the jenkinsci organization? This article records the complete process from PR to transfer to an official blog post, including an interesting pitfall encountered along the way.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/jenkinsfilelint/featured.jpg"/></item><item><title>From Demo to Production—8-Layer Architecture for Agentic Applications</title><link>https://shenxianpeng.dev/en/posts/2026/agentic-application-8-layers/</link><pubDate>Mon, 08 Jun 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/agentic-application-8-layers/</guid><description>This article breaks down an architectural approach for enterprise-grade Agentic Applications from eight dimensions: Agent boundary design, Tool Engineering, observability, evaluation framework, Memory layering, Human-in-the-Loop, cost control, and security.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/agentic-application-8-layers/featured.jpg"/></item><item><title>Conventional Branch Now Has Its Own Domain—conventionalbranch.org</title><link>https://shenxianpeng.dev/en/posts/2026/conventional-branch-domain/</link><pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/conventional-branch-domain/</guid><description>The Conventional Branch project website has officially migrated from conventional-branch.github.io to conventionalbranch.org. From last year&amp;rsquo;s user suggestion to this year&amp;rsquo;s final implementation, let&amp;rsquo;s talk about the hesitations, pitfalls, and reflections behind the domain migration.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/conventional-branch-domain/featured.jpg"/></item><item><title>cpp-linter-hooks: The Most Complete pre-commit Solution for C/C++ Projects</title><link>https://shenxianpeng.dev/en/posts/2026/cpp-linter-hooks/</link><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/cpp-linter-hooks/</guid><description>C/C++ tooling in the pre-commit ecosystem has long been limited. cpp-linter-hooks is currently the only pre-commit hook that supports both clang-format and clang-tidy, with built-in compilation database auto-detection, version pinning, and auto-fix capabilities.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/cpp-linter-hooks/featured.jpg"/></item><item><title>Conventional Branch Official Skill Is Here—Install with One Command</title><link>https://shenxianpeng.dev/en/posts/2026/conventional-branch-skill/</link><pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/conventional-branch-skill/</guid><description>A user opened an issue hoping Conventional Branch could provide an official Agent Skill, which I thought was a very reasonable request. I implemented it the same day, and now it can be downloaded and used with a single &lt;code&gt;npx skills add&lt;/code&gt; command. Coincidentally, the project also surpassed 100 Stars this week, so I&amp;rsquo;ll talk about that too.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/conventional-branch-skill/featured.jpg"/></item><item><title>mkdocs-ng Maintenance Progress — v1.7.x Fix Summary and Next Steps</title><link>https://shenxianpeng.dev/en/posts/2026/mkdocs-ng-update/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/mkdocs-ng-update/</guid><description>Since taking over mkdocs-ng maintenance, four versions have been released, over a dozen bugs fixed, and the mergedeep dependency removed. The upcoming v1.8.0 will be a feature release, planning to drop support for older Python versions, remove CDN dependencies from built-in themes, and provide a stable Python API.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/mkdocs-ng-update/featured.jpg"/></item><item><title>Building an AI Agent Inside Jira —— A Jira Copilot Implementation Guide</title><link>https://shenxianpeng.dev/en/posts/2026/jira-ai-agent/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/jira-ai-agent/</guid><description>Many people have asked how to build a GitHub Copilot-like AI Agent inside Jira. This post shares my hands-on experience building one — covering account setup, Jira Automation triggers, webhook integration, and a Skills-based capability system. The core philosophy: leverage existing infrastructure to get it running fast and cheap.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/jira-ai-agent/featured.jpg"/></item><item><title>DeepSeek V4—Bringing Down the Cost of Using Coding Agents</title><link>https://shenxianpeng.dev/en/posts/2026/deepseek-v4/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/deepseek-v4/</guid><description>Codex auto-renewed this month. I hadn&amp;rsquo;t really planned on continuing my subscription, but this renewal prompted me to re-evaluate the actual experience with Codex, DeepSeek V4 series, and Copilot. For me, the core difference among AI coding tools is no longer just model capability, but rather which one can help me write code more stably, affordably, and consistently.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/deepseek-v4/featured.jpg"/></item><item><title>RepoKeeper After a hundred commits in ten days, it can now develop itself</title><link>https://shenxianpeng.dev/en/posts/2026/repokeeper/</link><pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/repokeeper/</guid><description>Over the past ten days, I&amp;rsquo;ve made over a hundred commits to RepoKeeper, evolving it from a proof-of-concept to v1.2.0. It now boasts six modules, two backends, supports DeepSeek/OpenAI/Claude, and can even develop itself—this post will explain what it has evolved into.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/repokeeper/featured.jpg"/></item><item><title>Counter-intuitive Designs in the pi project — From AGENTS.md to "Just Close Your PR First"</title><link>https://shenxianpeng.dev/en/posts/2026/pi-contributing-philosophy/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/pi-contributing-philosophy/</guid><description>After reading Mario Zechner&amp;rsquo;s &amp;ldquo;I&amp;rsquo;ve sold out&amp;rdquo; and then reviewing AGENTS.md and CONTRIBUTING.md in the pi repository, I found that this project differs from common open-source collaboration methods in many ways. New contributors&amp;rsquo; issues and PRs are closed by default, no reviews on weekends, and don&amp;rsquo;t submit PRs if you don&amp;rsquo;t understand the code. It seems tough, but behind it is a serious attempt to address a problem: how open-source projects can avoid being bogged down by low-quality contributions in the AI era.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/pi-contributing-philosophy/featured.jpg"/></item><item><title>Explain Error Plugin Major Update — AI Auto-Fix, Usage Management, and More AI Providers</title><link>https://shenxianpeng.dev/en/posts/2026/explain-error-plugin-3/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/explain-error-plugin-3/</guid><description>The Explain Error Plugin has recently received several important updates: AI Auto-Fix for automatically creating fix PRs, usage statistics and quota management, and added support for four new AI providers: DeepSeek, Qwen, Azure OpenAI, and Custom Okta.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/explain-error-plugin-3/featured.jpg"/></item><item><title>Writing an Article for Twenty-Four Cents—My Experience Using Pi + DeepSeek as a Codex Backup Solution</title><link>https://shenxianpeng.dev/en/posts/2026/pi-deepseek/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/pi-deepseek/</guid><description>Codex&amp;rsquo;s $22 monthly subscription fee and usage limits prompted me to seek a cheaper, stable, and always-ready backup solution. After an unsuccessful attempt with OpenCode, I turned to the Pi + DeepSeek combination. The result was a bit unexpected: writing an entire blog post cost only 0.24 RMB.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/pi-deepseek/featured.jpg"/></item><item><title>AI Agent, or Automation?</title><link>https://shenxianpeng.dev/en/posts/2026/ai-agents-vs-automations/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/ai-agents-vs-automations/</guid><description>In today&amp;rsquo;s era of rapid AI technological advancement, many companies are chasing the AI wave. But do we truly understand the distinction between &amp;ldquo;Automation&amp;rdquo; and &amp;ldquo;AI Agent&amp;rdquo;? This article will explore, from a practical application perspective, in which scenarios deterministic automation should be used, and in which scenarios AI Agents should be introduced. Through comparative analysis, we hope to help readers make more informed technical choices in this &amp;ldquo;all-in-AI&amp;rdquo; era.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/ai-agents-vs-automations/featured.jpg"/></item><item><title>Python Supply Chain 'Nuclear Bomb' Attack Just Happened—A `pip install` Steals All Your Credentials!</title><link>https://shenxianpeng.dev/en/posts/2026/pipguard/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/pipguard/</guid><description>A Python supply chain attack has occurred, where a single &lt;code&gt;pip install&lt;/code&gt; can steal all your credentials. This post introduces how to use pipguard to intercept malicious packages before installation.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/pipguard/featured.jpg"/></item><item><title>A Three-Year Community Pain Point—I Put Hadolint on PyPI, Ending Manual Installation</title><link>https://shenxianpeng.dev/en/posts/2026/hadolint-pre-commit/</link><pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/hadolint-pre-commit/</guid><description>Hadolint&amp;rsquo;s pre-commit integration has long lacked an automatic installation solution, a problem that has plagued the community for three years. This article explains how, by packaging the Hadolint binary into a Python Wheel and publishing it to PyPI, pre-commit can integrate Hadolint with a single command, just like any Python tool, completely eliminating the burden of manual downloads and environment configuration.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/hadolint-pre-commit/featured.jpg"/></item><item><title>How to Claim the 'Lottery Ticket' of Open Source—Starting from thanks.dev's Operational Mechanism</title><link>https://shenxianpeng.dev/en/posts/2026/thanks-dev/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/thanks-dev/</guid><description>&lt;p&gt;In the previous article, I wrote about receiving a &lt;a href="https://shenxianpeng.dev/en/posts/2026/thanks-canonical/" &gt;donation&lt;/a&gt; from Canonical, and a reader asked: How did you get selected?&lt;/p&gt;
&lt;p&gt;At first, I didn&amp;rsquo;t fully understand it either. Later, after carefully studying thanks.dev&amp;rsquo;s operational mechanism, I finally figured out the underlying logic of the whole thing—and what kind of projects are more likely to be funded by downstream vendors.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/thanks-dev/featured.jpg"/></item><item><title>Thanks to Canonical’s Generous Donation—badgepy Continues as Free and Open Source</title><link>https://shenxianpeng.dev/en/posts/2026/thanks-canonical/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/thanks-canonical/</guid><description>Today, I unexpectedly discovered that Canonical has been donating to me via thanks.dev for four consecutive months to support the development of badgepy. Although the amount is small, this feedback means a lot to me. It made me realize that sometimes, if we just keep doing the right thing without worrying too much about rewards, the results might come back to us in a warm and unexpected way, from a place we never anticipated.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/thanks-canonical/featured.jpg"/></item><item><title>Job Search—Why the "Nuclear Weapon" Strategy Might Be the Winning Formula for 2026</title><link>https://shenxianpeng.dev/en/posts/2026/find-job/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/find-job/</guid><description>Today&amp;rsquo;s job market values practical skills and the ability to create value more than ever before, rather than just academic qualifications. This post shares the story of a high school dropout who successfully joined OpenAI through self-study and actively creating opportunities, and why directly showcasing your &amp;ldquo;nuclear weapon&amp;rdquo; achievements might be the most effective strategy for job searching.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/find-job/featured.jpg"/></item><item><title>GitStats 2.0—New UI and Chart Engine, Revitalizing Your Git Repository History Data</title><link>https://shenxianpeng.dev/en/posts/2026/gitstats-2.0/</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/gitstats-2.0/</guid><description>I recently undertook a major UI redesign for the open-source project GitStats, adding dark/light mode toggle, responsive adaptation, and a modernized visual design, making the reports look like a real product.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/gitstats-2.0/featured.jpg"/></item><item><title>Don't Learn OpenClaw—It Won't Last the Year</title><link>https://shenxianpeng.dev/en/posts/2026/openclaw/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/openclaw/</guid><description>OpenClaw is a great idea, but it won&amp;rsquo;t be a great solution. High costs, security risks, big tech competition, and a lack of user education—these four obstacles combined make it difficult to sustain a long-term prosperous ecosystem.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/openclaw/featured.jpg"/></item><item><title>2025 DevOps State of the Report—Skills are No Longer a Bonus, but a 'Must-Have'!</title><link>https://shenxianpeng.dev/en/posts/2026/state-of-devops/</link><pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/state-of-devops/</guid><description>The latest &amp;lsquo;2025 State of DevOps Report&amp;rsquo; reveals that DevOps skills have become an essential requirement for career survival. 40% of enterprises list them as &amp;ldquo;must-have,&amp;rdquo; with another 43% indicating they will soon be mandatory. Employers value practical experience more than training certifications. Despite the high popularity of AIOps and DevSecOps, their actual implementation is still in its early stages.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/state-of-devops/featured.jpg"/></item><item><title>Exploring Agentic DevOps—GitHub Agentic Workflow and Practical Observations of Continuous AI</title><link>https://shenxianpeng.dev/en/posts/2026/agentic-devops/</link><pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/agentic-devops/</guid><description>Recently, I encountered a related but more advanced concept—Agentic DevOps. After spending time reading Microsoft Azure&amp;rsquo;s introductions, GitHub&amp;rsquo;s latest documentation, and some open-source practices, I compiled these notes. The purpose is to document my learning process and provide reference for colleagues. The following content is based on publicly available information and my understanding, without any exaggerated predictions.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/agentic-devops/featured.jpg"/></item><item><title>Explain Error Plugin Adds Two Major Enterprise Features—Custom Context and Folder-Level Configuration</title><link>https://shenxianpeng.dev/en/posts/2026/explain-error-plugin-2/</link><pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/explain-error-plugin-2/</guid><description>The Explain Error Plugin introduces two significant updates: support for custom context information and folder-level AI provider configurations. These two features make the plugin more flexible and robust for use in enterprise environments.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/explain-error-plugin-2/featured.jpg"/></item><item><title>Explain Error Plugin Updated Again—Two Practical New Features from User Feedback</title><link>https://shenxianpeng.dev/en/posts/2026/explain-error-plugin/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/explain-error-plugin/</guid><description>Recently, I received some user feedback, and I immediately enhanced the Explain Error Plugin, adding two very practical features: support for specifying the language of the explanation content output and support for obtaining AI return values in Pipeline.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/explain-error-plugin/featured.jpg"/></item><item><title>What is AIOps—A Systematic Introduction to Intelligent Operations</title><link>https://shenxianpeng.dev/en/posts/2026/aiops/</link><pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2026/aiops/</guid><description>Today, with the widespread adoption of microservices, hybrid clouds, and containerized deployments, IT systems have become exceptionally complex. When thousands of alert messages flood in, traditional operations models struggle. AIOps (Artificial Intelligence for IT Operations), an AI-driven transformation, is emerging as the &amp;ldquo;lifeline&amp;rdquo; for IT operations management. This article combines key insights from IBM, ServiceNow, GitHub, and Red Hat to provide a comprehensive overview of AIOps.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2026/aiops/featured.jpg"/></item><item><title>One Month Back Home—I Didn't Do Anything 'Big'</title><link>https://shenxianpeng.dev/en/misc/2026-vacation-notes/</link><pubDate>Sat, 24 Jan 2026 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/2026-vacation-notes/</guid><description>A record of my thoughts and feelings during my visit home for Chinese New Year 2026.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/2026-vacation-notes/featured.jpg"/></item><item><title>2025 Year-End Summary</title><link>https://shenxianpeng.dev/en/misc/2025-summary/</link><pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/2025-summary/</guid><description>&lt;p&gt;Time flies quickly. At the end of each year, I write a running account to record my life and work from the past year. I hope my future self will still remember what happened this year.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/2025-summary/featured.jpg"/></item><item><title>GitHub AI Terminology Explained—Copilot, Agents, Models to MCP, Who is Who?</title><link>https://shenxianpeng.dev/en/posts/2025/github-ai/</link><pubDate>Fri, 26 Dec 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/github-ai/</guid><description>This article provides a detailed explanation of GitHub&amp;rsquo;s AI-related concepts and their hierarchical relationships through fact-based explanations and analogies, helping readers clarify the meaning and function of terms like Models, Agents, Spaces, and Spark.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/github-ai/featured.jpg"/></item><item><title>Backstage (Developer Portal)—What It Is, What It Solves, and What It Doesn't Solve</title><link>https://shenxianpeng.dev/en/posts/2025/backstage/</link><pubDate>Sun, 14 Dec 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/backstage/</guid><description>What is Backstage? Why has it become so important in the platform engineering domain? Sharing some insights and judgments on Backstage.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/backstage/featured.jpg"/></item><item><title>Understand DevOps in One Article—This is How Packer, Terraform, Docker, and K8s Divide Their Work!</title><link>https://shenxianpeng.dev/en/posts/2025/devops-tools/</link><pubDate>Wed, 10 Dec 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/devops-tools/</guid><description>In the world of DevOps, with so many tools, many people get confused about their responsibilities. Using a car industry analogy, this article helps you understand the positioning and collaboration of Packer, Terraform, Ansible, Docker, and Kubernetes all at once.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/devops-tools/featured.jpg"/></item><item><title>py-eol — You Might Be Using 'Expired Python' Without Realizing It</title><link>https://shenxianpeng.dev/en/posts/2025/py-eol/</link><pubDate>Thu, 04 Dec 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/py-eol/</guid><description>py-eol is a lightweight tool that helps you quickly determine if a Python version is expired or approaching EOL. It&amp;rsquo;s suitable for local use and can also be integrated into CI/CD for more reliable version management in projects.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/py-eol/featured.jpg"/></item><item><title>To Save Everyone Two Lines of Commands—I Packaged Gnuplot into an Out-of-the-Box Python Package</title><link>https://shenxianpeng.dev/en/posts/2025/gnuplot-wheel/</link><pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/gnuplot-wheel/</guid><description>As an open-source project maintainer, I deeply understand the pain of &amp;ldquo;installing dependencies&amp;rdquo;. To save users a couple of command lines, I spent time packaging gnuplot into an out-of-the-box Python package—gnuplot-wheel. This article shares the birth story and practical value of this little wheel.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/gnuplot-wheel/featured.jpg"/></item><item><title>The Truth About Software Development—Adding Two People Won't Make a Project Three Times Faster</title><link>https://shenxianpeng.dev/en/posts/2025/the-mythical-man-month/</link><pubDate>Sun, 30 Nov 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/the-mythical-man-month/</guid><description>In software development, Brooks&amp;rsquo;s Law states that &amp;ldquo;adding manpower to a late software project makes it later.&amp;rdquo; This post uses the analogies of roasted chicken and pregnant women to deeply explore the reasons behind this phenomenon and offers practical solutions.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/the-mythical-man-month/featured.jpg"/></item><item><title>Tired of Jenkinsfile Errors Only After Committing—Try This Pre-check Tool!</title><link>https://shenxianpeng.dev/en/posts/2025/jenkinsfilelint/</link><pubDate>Thu, 27 Nov 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/jenkinsfilelint/</guid><description>A magical local Jenkinsfile checker, uses API validation, perfectly supports pre-commit.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/jenkinsfilelint/featured.jpg"/></item><item><title>Commit Check v2.0.0 Released—TOML Config Support, Simplified CLI &amp; Hooks, Rebuilt Validation Engine!</title><link>https://shenxianpeng.dev/en/posts/2025/commit-check-v2/</link><pubDate>Mon, 13 Oct 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/commit-check-v2/</guid><description>After a month of intermittent development and testing, I have finally completed this major update. This is the biggest update Commit Check has received since its inception.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/commit-check-v2/featured.jpg"/></item><item><title>Jenkins Explain Error Plugin Now Supports Ollama! 🤖</title><link>https://shenxianpeng.dev/en/posts/2025/explain-error-plugin-support-ollama/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/explain-error-plugin-support-ollama/</guid><description>This article introduces the new feature of Jenkins Explain Error Plugin, which is the support for Ollama local models, helping users more efficiently analyze and resolve build errors.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/explain-error-plugin-support-ollama/featured.jpg"/></item><item><title>The Cpp Linter Used by Microsoft and NASA Finally Has an Official Website!</title><link>https://shenxianpeng.dev/en/posts/2025/cpp-linter-website/</link><pubDate>Tue, 30 Sep 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/cpp-linter-website/</guid><description>The official website for cpp-linter related projects and tools is now live at &lt;a href="https://cpp-linter.github.io/" target="_blank" rel="noreferrer"&gt;https://cpp-linter.github.io/&lt;/a&gt;. Everyone is welcome to visit and use it.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/cpp-linter-website/featured.jpg"/></item><item><title>Conventional Branch Specification One-Year Anniversary — From Zero to Global Developer Adoption</title><link>https://shenxianpeng.dev/en/posts/2025/conventional-branch-one-year-anniversary/</link><pubDate>Tue, 16 Sep 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/conventional-branch-one-year-anniversary/</guid><description>12K+ visits, multilingual translations, and global developer adoption—the journey of the Conventional Branch specification&amp;rsquo;s first year</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/conventional-branch-one-year-anniversary/featured.jpg"/></item><item><title>Blog Bilingual Publishing Made Easy — GitHub Actions + Gemini API in Practice</title><link>https://shenxianpeng.dev/en/posts/2025/auto-translate-post/</link><pubDate>Sun, 24 Aug 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/auto-translate-post/</guid><description>Discovered my blog has more English than Chinese readers? So I used GitHub Actions + Gemini API to automatically translate articles into English, saving time and effort.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/auto-translate-post/featured.jpg"/></item><item><title>Four Years of Open Source —— Three Unexpected Rewards</title><link>https://shenxianpeng.dev/en/posts/2025/why-open-source/</link><pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/why-open-source/</guid><description>Some say open source is useless, yielding neither profit nor time savings. But through four years of dedication, I&amp;rsquo;ve discovered three unexpected rewards: increased visibility for my work, connections with exceptional people and projects, and the accumulation of long-term value. These rewards are applicable to every developer.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/why-open-source/featured.jpg"/></item><item><title>DevOps Maturity — From Reflection to Open Source Practice</title><link>https://shenxianpeng.dev/en/posts/2025/devops-maturity/</link><pubDate>Sun, 17 Aug 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/devops-maturity/</guid><description>How to assess and improve your team&amp;rsquo;s DevOps maturity. Official release of the DevOps Maturity open source project, with assessment tools and practical guides.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/devops-maturity/featured.jpg"/></item><item><title>Eight Years Later, I Finally Revamped My Blog</title><link>https://shenxianpeng.dev/en/posts/2025/upgrade-blog-using-hugo/</link><pubDate>Sun, 10 Aug 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/upgrade-blog-using-hugo/</guid><description>This article records the process of revamping my blog after eight years, from migrating from Hexo to Hugo, to the functional and design improvements of the new blog.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/upgrade-blog-using-hugo/featured.jpg"/></item><item><title>Jenkins Explain Error Plugin Now Supports Google Gemini! 🤖</title><link>https://shenxianpeng.dev/en/posts/2025/explain-error-plugin-support-gemini/</link><pubDate>Sun, 03 Aug 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/explain-error-plugin-support-gemini/</guid><description>This article introduces a new feature of the Jenkins Explain Error Plugin that supports for Google Gemini model for error analysis. It provides configuration methods and an example video.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/explain-error-plugin-support-gemini/featured.jpg"/></item><item><title>Jenkins Plugin Center Didn't Have an AI Plugin Yet? I Wrote One! 🤖</title><link>https://shenxianpeng.dev/en/posts/2025/explain-error-plugin/</link><pubDate>Tue, 29 Jul 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/explain-error-plugin/</guid><description>Introducing my first Jenkins plugin: Explain Error Plugin. It automatically analyzes build failure log information and generates readable error explanations, helping developers locate and solve problems faster.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/explain-error-plugin/featured.jpg"/></item><item><title>A Year Abroad — Not Everyone Is Cut Out for Europe</title><link>https://shenxianpeng.dev/en/misc/run-or-not/</link><pubDate>Sun, 13 Jul 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/run-or-not/</guid><description>Who is suited to developing their career in Europe, and who might find it challenging? A programmer and father shares his experiences of life abroad.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/run-or-not/featured.jpg"/></item><item><title>How to Fix Shields.io Badges Not Displaying in Jenkins</title><link>https://shenxianpeng.dev/en/posts/2025/jenkins-show-badge/</link><pubDate>Mon, 23 Jun 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/jenkins-show-badge/</guid><description>How to temporarily fix it via the Script Console, and how to make it permanent by modifying Jenkins startup parameters. This method is suitable for internal Jenkins environments and has been tested on modern Jenkins installations.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/jenkins-show-badge/featured.jpg"/></item><item><title>Enhancing Code Traceability — Automatically Including PR Descriptions in Git Commits</title><link>https://shenxianpeng.dev/en/posts/2025/commit-message-template/</link><pubDate>Thu, 12 Jun 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/commit-message-template/</guid><description>Leverage Bitbucket&amp;rsquo;s Commit Message Templates feature to automatically write PR descriptions into Git commit messages, ensuring crucial information isn&amp;rsquo;t lost with tool changes.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/commit-message-template/featured.jpg"/></item><item><title>How to Change abortPrevious Value in Jenkins?</title><link>https://shenxianpeng.dev/en/posts/2025/jenkins-concurrent-build/</link><pubDate>Wed, 04 Jun 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/jenkins-concurrent-build/</guid><description>In Jenkins, the &lt;code&gt;disableConcurrentBuilds&lt;/code&gt; option is used to manage concurrent builds. This article explains how to conditionally set the &lt;code&gt;abortPrevious&lt;/code&gt; value based on the branch being built, allowing for more flexible build management.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/jenkins-concurrent-build/featured.jpg"/></item><item><title>CI/CD—Not a One-Time Project, but a Continuously Evolving System</title><link>https://shenxianpeng.dev/en/posts/2025/code-refactor/</link><pubDate>Mon, 02 Jun 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/code-refactor/</guid><description>In DevOps, CI/CD pipelines require continuous maintenance and refactoring. This article explores why CI/CD is not a one-time construction project, but a system that requires long-term investment and continuous evolution.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/code-refactor/featured.jpg"/></item><item><title>asdf-clang-tools — A New Way to Install Clang Tools Using asdf</title><link>https://shenxianpeng.dev/en/posts/2025/asdf-clang-tools/</link><pubDate>Thu, 29 May 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/asdf-clang-tools/</guid><description>asdf-clang-tools is an asdf plugin for installing and managing Clang Tools, such as clang-format, clang-tidy, clang-query, and clang-apply-replacements.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/asdf-clang-tools/featured.jpg"/></item><item><title>Still Using Wiki/Confluence? You Might Be Producing Garbage</title><link>https://shenxianpeng.dev/en/posts/2025/docs-and-code/</link><pubDate>Wed, 14 May 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/docs-and-code/</guid><description>In enterprises, documentation tools like Wiki and Confluence, if lacking unified management and review mechanisms, can lead to information chaos and knowledge sedimentation failure. This article explores how to avoid this situation and draws on the successful experiences of open-source communities.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/docs-and-code/featured.jpg"/></item><item><title>Still using pip and venv? You're outdated! Try uv!</title><link>https://shenxianpeng.dev/en/posts/2025/uv/</link><pubDate>Mon, 05 May 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/uv/</guid><description>uv is a Python package management tool developed by the Astral team. It replaces the functionality of pip, venv, and pip-tools, offering faster dependency resolution and a more modern project management approach.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/uv/featured.jpg"/></item><item><title>Full Record｜PyCon LT 2025 Day Three - Can AI Replace You?</title><link>https://shenxianpeng.dev/en/misc/pycon-lt-d3/</link><pubDate>Tue, 29 Apr 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/pycon-lt-d3/</guid><description>Today was the final day of PyCon LT 2025, themed AI and ML Day. It featured several excellent talks by female speakers and provided new insights into data science and AI.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/pycon-lt-d3/featured.jpg"/></item><item><title>Full Record｜PyCon LT 2025 Day Two - Charmed by Several Female Developers</title><link>https://shenxianpeng.dev/en/misc/pycon-lt-d2/</link><pubDate>Thu, 24 Apr 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/pycon-lt-d2/</guid><description>Today was Data Day at PyCon LT 2025, focusing on Dataframes, Databases, and Orchestration. While not deeply familiar with these areas, I was deeply impressed by several female speakers and gained a lot.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/pycon-lt-d2/featured.jpg"/></item><item><title>Full Record｜PyCon LT 2025 Day One - My Experiences at an International Python Conference</title><link>https://shenxianpeng.dev/en/misc/pycon-lt-d1/</link><pubDate>Wed, 23 Apr 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/pycon-lt-d1/</guid><description>Sharing my experiences, presentation content, and thoughts on the Python community from the first day of PyCon LT 2025.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/pycon-lt-d1/featured.jpg"/></item><item><title>Returning Home for Vacation — Reflections on a Beijing Night</title><link>https://shenxianpeng.dev/en/misc/one-night-in-beijing/</link><pubDate>Wed, 16 Apr 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/one-night-in-beijing/</guid><description>A single night in Beijing, catching up with university classmates, revealed the late working hours and the pressures and challenges of life in a big city.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/one-night-in-beijing/featured.jpg"/></item><item><title>Microsoft and NASA Use It? My 4-Year-Old Side Project Hit 100 Stars</title><link>https://shenxianpeng.dev/en/posts/2025/cpp-linter-action-milestone/</link><pubDate>Tue, 15 Apr 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/cpp-linter-action-milestone/</guid><description>cpp-linter-action is a GitHub Action that provides C/C++ code formatting and static analysis capabilities. It uses clang-format and clang-tidy, supporting various configurations and custom rules. Since its creation in 2021, the project has been used by several well-known organizations and open-source projects.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/cpp-linter-action-milestone/featured.jpg"/></item><item><title>My Patience with Accessing GitHub is Wearing Thin</title><link>https://shenxianpeng.dev/en/posts/2025/visit-github/</link><pubDate>Sun, 13 Apr 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/visit-github/</guid><description>Many programmers, especially those in China, are frustrated by access issues with GitHub. This article shares my personal experiences and reflections on network problems.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/visit-github/featured.jpg"/></item><item><title>Setting up Sphinx + ReadTheDocs from Scratch - Rapidly Deploying Automated Documentation</title><link>https://shenxianpeng.dev/en/posts/2025/sphinx-readthedoc/</link><pubDate>Sat, 12 Apr 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/sphinx-readthedoc/</guid><description>In open-source projects or team collaborations, Sphinx + ReadTheDocs provides an easy-to-maintain, automatically deployable documentation system. This article documents the configuration process and considerations.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/sphinx-readthedoc/featured.jpg"/></item><item><title>Markdown — Not So Great Anymore? Why More and More Python Projects Use RST?</title><link>https://shenxianpeng.dev/en/posts/2025/md-vs-rst/</link><pubDate>Fri, 11 Apr 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/md-vs-rst/</guid><description>Markdown and reStructuredText (RST) are two commonly used markup languages. This article compares their advantages and disadvantages and shares usage suggestions in different scenarios.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/md-vs-rst/featured.jpg"/></item><item><title>Why Are More and More Enterprise Users Abandoning VMware?</title><link>https://shenxianpeng.dev/en/posts/2025/nutanix/</link><pubDate>Wed, 12 Mar 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/nutanix/</guid><description>Following Broadcom&amp;rsquo;s acquisition of VMware, many enterprise users are seeking alternatives. Nutanix, as a hyper-converged infrastructure (HCI) solution, offers lower costs and a simpler management interface, making it a good option.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/nutanix/featured.jpg"/></item><item><title>Why I chose to review for EuroPython 2025</title><link>https://shenxianpeng.dev/en/posts/2025/euro-python-review/</link><pubDate>Fri, 14 Feb 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/euro-python-review/</guid><description>I haven&amp;rsquo;t contributed much code lately, focusing instead on reviewing proposals for EuroPython 2025.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/euro-python-review/featured.jpg"/></item><item><title>gitstats Upgrade Arrives—JSON Output, Cross-Platform Compatibility, and Code Refactoring!</title><link>https://shenxianpeng.dev/en/posts/2025/gitstats-update/</link><pubDate>Wed, 05 Feb 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/gitstats-update/</guid><description>After two months of continuous improvement, gitstats now supports JSON output, code refactoring, argparse replacing getopt, and full compatibility with Windows and macOS. Welcome to use and Star support!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/gitstats-update/featured.jpg"/></item><item><title>How to use Jenkins Docker Cloud</title><link>https://shenxianpeng.dev/en/posts/2025/jenkins-docker-cloud/</link><pubDate>Sat, 25 Jan 2025 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2025/jenkins-docker-cloud/</guid><description>This article explains how to use Jenkins Docker Cloud for building and deploying applications, including setting up a Docker host and creating custom Docker images.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2025/jenkins-docker-cloud/featured.jpg"/></item><item><title>2024 Year-End Summary</title><link>https://shenxianpeng.dev/en/misc/2024-summary/</link><pubDate>Sat, 28 Dec 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/2024-summary/</guid><description>&lt;p&gt;Time flies, and 2024 is coming to an end. If I don&amp;rsquo;t record what happened this year, it will be difficult to recall it after a while. As usual, this year-end summary is here on schedule.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/2024-summary/featured.jpg"/></item><item><title>My Daughter</title><link>https://shenxianpeng.dev/en/misc/my-daughter/</link><pubDate>Sat, 28 Dec 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/my-daughter/</guid><description>My daughter is two years and seven months old, and I haven&amp;rsquo;t written a separate article about her yet. Recording the bits and pieces of my life with my daughter.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/my-daughter/featured.jpg"/></item><item><title>Reviving GitStats — Breathing New Life into Git History Analysis</title><link>https://shenxianpeng.dev/en/posts/2024/gitstats/</link><pubDate>Thu, 28 Nov 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2024/gitstats/</guid><description>This post details the revival of the GitStats project, including its migration to Python 3, the creation of a modern CI/CD pipeline, publication to PyPI and Docker, and future improvement plans.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2024/gitstats/featured.jpg"/></item><item><title>pip vs pipx Differences</title><link>https://shenxianpeng.dev/en/posts/2024/pip-vs-pipx/</link><pubDate>Tue, 26 Nov 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2024/pip-vs-pipx/</guid><description>This article introduces the differences between pip and pipx, helping developers choose the right tool to manage Python packages and command-line tools.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2024/pip-vs-pipx/featured.jpg"/></item><item><title>PowerShell is not recognized as an internal or external command</title><link>https://shenxianpeng.dev/en/posts/2024/ansbile-playbook-issue/</link><pubDate>Mon, 18 Nov 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2024/ansbile-playbook-issue/</guid><description>Explaining a recent issue with Ansible playbook execution on Windows Server 2022, where PowerShell was not recognized, and how to resolve it.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2024/ansbile-playbook-issue/featured.jpg"/></item><item><title>What Optimizations I Made During the Jenkins Upgrade</title><link>https://shenxianpeng.dev/en/posts/2024/jenkins-upgrade/</link><pubDate>Fri, 25 Oct 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2024/jenkins-upgrade/</guid><description>This article discusses the optimizations made during the Jenkins upgrade, including using Docker Compose for deployment, refactoring the Jenkins Shared Library, introducing Windows Docker Containers, and more to enhance the efficiency and security of the CI/CD process.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2024/jenkins-upgrade/featured.jpg"/></item><item><title>Choices — Often More Important Than Effort</title><link>https://shenxianpeng.dev/en/misc/power-of-choice/</link><pubDate>Fri, 27 Sep 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/power-of-choice/</guid><description>Late at night, I often wonder how I ended up where I am today. It all stems from a series of choices I made after graduation!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/power-of-choice/featured.jpg"/></item><item><title>Conventional Branch Specification Released!</title><link>https://shenxianpeng.dev/en/posts/2024/conventional-branch/</link><pubDate>Wed, 18 Sep 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2024/conventional-branch/</guid><description>This article introduces the Conventional Branch specification, which provides a structured naming convention for Git branches to enhance readability and collaboration.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2024/conventional-branch/featured.jpg"/></item><item><title>I Remember</title><link>https://shenxianpeng.dev/en/misc/remember/</link><pubDate>Tue, 09 Jul 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/remember/</guid><description>Lately, I&amp;rsquo;ve been listening to Zhao Lei&amp;rsquo;s songs while driving, especially &amp;ldquo;I Remember.&amp;rdquo; This article records my graduation season at Rocket&amp;rsquo;s China branch and the well wishes from my colleagues.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/remember/featured.jpg"/></item><item><title>Farewell Rocket China — A Decade's Journey and a New Beginning</title><link>https://shenxianpeng.dev/en/misc/farewell/</link><pubDate>Fri, 28 Jun 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/farewell/</guid><description>June 28, 2024, marks my last day at Rocket&amp;rsquo;s China branch. Looking back on a decade&amp;rsquo;s journey and forward to a new chapter.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/farewell/featured.jpg"/></item><item><title>Code Signing — GaraSign</title><link>https://shenxianpeng.dev/en/posts/2024/garasign/</link><pubDate>Mon, 10 Jun 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2024/garasign/</guid><description>This article introduces the installation, usage, and verification methods of the GaraSign code signing tool, helping developers achieve secure code signing.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2024/garasign/featured.jpg"/></item><item><title>Code Signing</title><link>https://shenxianpeng.dev/en/posts/2024/code-signing/</link><pubDate>Mon, 29 Apr 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2024/code-signing/</guid><description>This article introduces the concept and importance of code signing, along with a comparison of two common code signing tools, emphasizing its role in software supply chain security.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2024/code-signing/featured.jpg"/></item><item><title>Must-Know GitHub Action Feature - Reusable Workflows</title><link>https://shenxianpeng.dev/en/posts/2024/reusable-workflows/</link><pubDate>Mon, 25 Mar 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2024/reusable-workflows/</guid><description>This article introduces the Reusable Workflows feature of GitHub Actions, helping developers and teams manage and reuse CI/CD processes more efficiently.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2024/reusable-workflows/featured.jpg"/></item><item><title>cpp-linter-action—Latest Version Now Supports Pull Request Review Functionality 👏</title><link>https://shenxianpeng.dev/en/posts/2024/cpp-linter-action/</link><pubDate>Sat, 17 Feb 2024 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2024/cpp-linter-action/</guid><description>This article introduces the new feature of cpp-linter-action Pull Request Review, allowing developers to directly submit code modification suggestions on GitHub, improving code quality and collaboration efficiency.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2024/cpp-linter-action/featured.jpg"/></item><item><title>2023 Year-End Summary</title><link>https://shenxianpeng.dev/en/misc/2023-summary/</link><pubDate>Sun, 31 Dec 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/2023-summary/</guid><description>&lt;p&gt;Time flies, and 2023 has passed in a flash. If I don&amp;rsquo;t record what happened this year, it will be difficult to recall what happened soon.&lt;/p&gt;
&lt;p&gt;Therefore, as usual, I will first review 2023 and then look forward to 2024.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/2023-summary/featured.jpg"/></item><item><title>How to Automatically Categorize GitHub Release Notes by New features, Bug Fixes…</title><link>https://shenxianpeng.dev/en/posts/2023/automatic-categorize-release-notes/</link><pubDate>Wed, 27 Dec 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2023/automatic-categorize-release-notes/</guid><description>This article shares two methods for automatically categorizing the content of GitHub Release Notes based on titles.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2023/automatic-categorize-release-notes/featured.jpg"/></item><item><title>How to make Jenkins pipeline not fail if a specific error occurs</title><link>https://shenxianpeng.dev/en/posts/2023/jenkins-catch-error/</link><pubDate>Fri, 15 Dec 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2023/jenkins-catch-error/</guid><description>Introducing the &lt;code&gt;catchError&lt;/code&gt; step in Jenkins pipeline to handle specific errors without failing the entire build, allowing for more flexible error management.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2023/jenkins-catch-error/featured.jpg"/></item><item><title>How to adopt Supply Chain Security for GitHub and Non-GitHub projects</title><link>https://shenxianpeng.dev/en/posts/2023/supply-chain-security/</link><pubDate>Sat, 02 Dec 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2023/supply-chain-security/</guid><description>This article introduces how to implement software supply chain security using SLSA and Witness for both GitHub and non-GitHub projects, enhancing the security of software development and deployment processes.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2023/supply-chain-security/featured.jpg"/></item><item><title>Witness and SLSA 💃</title><link>https://shenxianpeng.dev/en/posts/2023/witness-and-slsa/</link><pubDate>Thu, 30 Nov 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2023/witness-and-slsa/</guid><description>This article introduces the concept and working mechanism of Witness, and how to use Witness to generate and verify the provenance of software artifacts, emphasizing its importance in improving software supply chain security.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2023/witness-and-slsa/featured.jpg"/></item><item><title>Problems and solutions when upgrading XLC from 10.1 to IBM Open XL C/C++ for AIX 17.1.0</title><link>https://shenxianpeng.dev/en/posts/2023/upgrade-xlc-10-to-xlc-17.1/</link><pubDate>Sun, 08 Oct 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2023/upgrade-xlc-10-to-xlc-17.1/</guid><description>This article documents the problems encountered when upgrading from IBM XLC 10.1 to XLC 17.1 (IBM Open XL C/C++ for AIX 17.1.0) and how to fix the errors.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2023/upgrade-xlc-10-to-xlc-17.1/featured.jpg"/></item><item><title>Resolving Jenkins Artifactory Plugin Artifact Upload Failure "unable to find valid certification path to requested target"</title><link>https://shenxianpeng.dev/en/posts/2023/unable-to-find-valid-certification-path/</link><pubDate>Mon, 11 Sep 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2023/unable-to-find-valid-certification-path/</guid><description>This article describes how to resolve SSL certificate validation issues when uploading artifacts from a Jenkins agent to Artifactory, including generating a security certificate file and importing it into Java&amp;rsquo;s cacerts.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2023/unable-to-find-valid-certification-path/featured.jpg"/></item><item><title>Upload artifacts failed to Artifactory from AIX</title><link>https://shenxianpeng.dev/en/posts/2023/upload-artifacts-failed-on-aix/</link><pubDate>Tue, 29 Aug 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2023/upload-artifacts-failed-on-aix/</guid><description>This article explains how to resolve an SSL certificate verification issue on AIX when uploading artifacts to Artifactory via Jenkins, including updating Java’s cacerts file.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2023/upload-artifacts-failed-on-aix/featured.jpg"/></item><item><title>Creating a NuGet Organization — Pitfalls Encountered</title><link>https://shenxianpeng.dev/en/posts/2023/nuget/</link><pubDate>Fri, 25 Aug 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2023/nuget/</guid><description>This article documents the problems and solutions encountered when creating a NuGet Organization, especially regarding the use of corporate email addresses.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2023/nuget/featured.jpg"/></item><item><title>Docker Buildx Bake—A Powerful Tool for Accelerating Builds and Managing Multi-platform Images</title><link>https://shenxianpeng.dev/en/posts/2023/buildx-bake/</link><pubDate>Mon, 17 Jul 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2023/buildx-bake/</guid><description>This article introduces the concept, advantages, use cases, and how to use Docker Buildx Bake to accelerate the building and management of multi-platform images.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2023/buildx-bake/featured.jpg"/></item><item><title>Understanding SBOM - Definition, Relationships, Differences, Best Practices, and Generation Tools</title><link>https://shenxianpeng.dev/en/posts/2023/sbom/</link><pubDate>Sat, 10 Jun 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2023/sbom/</guid><description>This article introduces the definition of SBOM, its relationship and differences with SLSA and Black Duck, best practices, and available generation tools, helping readers better understand and apply SBOM.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2023/sbom/featured.jpg"/></item><item><title>Programmer's Self-Cultivation — Git Commit Message and Branch Creation Conventions (Tools)</title><link>https://shenxianpeng.dev/en/posts/2023/commit-check/</link><pubDate>Tue, 09 May 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2023/commit-check/</guid><description>This article introduces how to use the Commit Check tool to verify whether Git commit messages, branch names, committer usernames, and committer email addresses conform to specifications.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2023/commit-check/featured.jpg"/></item><item><title>The SLSA Framework and Software Supply Chain Security Protection</title><link>https://shenxianpeng.dev/en/posts/2023/slsa/</link><pubDate>Thu, 23 Mar 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2023/slsa/</guid><description>This article introduces the concept, purpose, and levels of the SLSA framework, and how to apply SLSA in the software supply chain to improve security. It helps readers understand the importance of SLSA in software development and deployment.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2023/slsa/featured.jpg"/></item><item><title>Why is my Jenkins Controller getting slower—Possible mistakes you might be making...</title><link>https://shenxianpeng.dev/en/posts/2023/jenkins-pipeline-best-practices/</link><pubDate>Mon, 06 Feb 2023 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2023/jenkins-pipeline-best-practices/</guid><description>This article introduces some best practices for Jenkins pipelines, aiming to help developers and operations personnel optimize Jenkins&amp;rsquo; performance and maintainability.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2023/jenkins-pipeline-best-practices/featured.jpg"/></item><item><title>2022 Year-End Summary</title><link>https://shenxianpeng.dev/en/misc/2022-summary/</link><pubDate>Wed, 28 Dec 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/2022-summary/</guid><description>&lt;p&gt;Time flies, another year has passed.&lt;/p&gt;
&lt;p&gt;This year, I want to write a summary to review the important events that happened to me in the past year.&lt;/p&gt;
&lt;p&gt;Since I didn&amp;rsquo;t write a year-end summary in 2021, my memories of 2021 have become blurry. I can only recall some things based on photos and diaries. It seems I cannot miss year-end summaries in the future.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/2022-summary/featured.jpg"/></item><item><title>How to implement [skip ci] for Jenkins multi-branch pipeline</title><link>https://shenxianpeng.dev/en/posts/2022/jenkins-skip-ci/</link><pubDate>Sun, 09 Oct 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/jenkins-skip-ci/</guid><description>This article explains how to implement [skip ci] functionality in Jenkins multi-branch pipelines, allowing you to skip builds based on commit messages.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/jenkins-skip-ci/featured.jpg"/></item><item><title>How to fix "Temporary Failure in name resolution" in WSL</title><link>https://shenxianpeng.dev/en/posts/2022/fix-wsl-networking-issue/</link><pubDate>Tue, 27 Sep 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/fix-wsl-networking-issue/</guid><description>This article explains how to resolve the &amp;ldquo;Temporary failure in name resolution&amp;rdquo; issue in WSL by configuring DNS settings and ensuring persistent changes.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/fix-wsl-networking-issue/featured.jpg"/></item><item><title>Restrict others from login your important Linux machine</title><link>https://shenxianpeng.dev/en/posts/2022/restrict-connect-server/</link><pubDate>Fri, 16 Sep 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/restrict-connect-server/</guid><description>This article explains how to restrict access to a critical Linux machine by modifying the &lt;code&gt;/etc/security/access.conf&lt;/code&gt; file, allowing only specific users to log in.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/restrict-connect-server/featured.jpg"/></item><item><title>C/C++ Code Formatting and Static Analysis—A One-Stop Workflow with Cpp Linter</title><link>https://shenxianpeng.dev/en/posts/2022/cpp-linter/</link><pubDate>Tue, 23 Aug 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/cpp-linter/</guid><description>This article introduces tools and workflows for C/C++ code formatting and static analysis, focusing on the use and integration of clang-tools.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/cpp-linter/featured.jpg"/></item><item><title>How to create GPG keys and add to GitHub</title><link>https://shenxianpeng.dev/en/posts/2022/git-create-gpg-keys/</link><pubDate>Thu, 28 Jul 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/git-create-gpg-keys/</guid><description>This article explains how to create GPG keys, export the public key, and add it to GitHub for signing commits.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/git-create-gpg-keys/featured.jpg"/></item><item><title>About</title><link>https://shenxianpeng.dev/en/about/</link><pubDate>Mon, 13 Jun 2022 20:55:37 +0100</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/about/</guid><description>&lt;ol class="border-s-2 border-primary-500 dark:border-primary-300 list-none"&gt;






&lt;li&gt;
 &lt;div class="flex"&gt;
 &lt;div
 class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5"&gt;
 &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"&gt;&lt;path fill="currentColor" d="M48 32H197.5C214.5 32 230.7 38.74 242.7 50.75L418.7 226.7C443.7 251.7 443.7 292.3 418.7 317.3L285.3 450.7C260.3 475.7 219.7 475.7 194.7 450.7L18.75 274.7C6.743 262.7 0 246.5 0 229.5V80C0 53.49 21.49 32 48 32L48 32zM112 176C129.7 176 144 161.7 144 144C144 126.3 129.7 112 112 112C94.33 112 80 126.3 80 144C80 161.7 94.33 176 112 176z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words"&gt;
 &lt;div class="flex justify-between"&gt;
 
 &lt;h2 class="mt-0"&gt;Hi! I&amp;#39;m Xianpeng Shen&lt;/h2&gt;
 
 
 &lt;h3 class=""&gt;
 &lt;span class="flex cursor-pointer"&gt;
 &lt;span
 class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400"&gt;
 Welcome
 &lt;/span&gt;
&lt;/span&gt;

 &lt;/h3&gt;
 
 &lt;/div&gt;
 
 &lt;h4 class="mt-0"&gt;
 Welcome to my personal site
 &lt;/h4&gt;
 
 &lt;div class="mb-6"&gt;
 
I write &lt;a href="../posts/"&gt;blog posts&lt;/a&gt;, develop &lt;a href="../portfolio/"&gt;open source software&lt;/a&gt;, and contribute to open source projects.

 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/li&gt;






&lt;li&gt;
 &lt;div class="flex"&gt;
 &lt;div
 class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5"&gt;
 &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M266.3 48.3L232.5 73.6c-5.4 4-8.5 10.4-8.5 17.1v9.1c0 6.8 5.5 12.3 12.3 12.3c2.4 0 4.8-.7 6.8-2.1l41.8-27.9c2-1.3 4.4-2.1 6.8-2.1h1c6.2 0 11.3 5.1 11.3 11.3c0 3-1.2 5.9-3.3 8l-19.9 19.9c-5.8 5.8-12.9 10.2-20.7 12.8l-26.5 8.8c-5.8 1.9-9.6 7.3-9.6 13.4c0 3.7-1.5 7.3-4.1 10l-17.9 17.9c-6.4 6.4-9.9 15-9.9 24v4.3c0 16.4 13.6 29.7 29.9 29.7c11 0 21.2-6.2 26.1-16l4-8.1c2.4-4.8 7.4-7.9 12.8-7.9c4.5 0 8.7 2.1 11.4 5.7l16.3 21.7c2.1 2.9 5.5 4.5 9.1 4.5c8.4 0 13.9-8.9 10.1-16.4l-1.1-2.3c-3.5-7 0-15.5 7.5-18l21.2-7.1c7.6-2.5 12.7-9.6 12.7-17.6c0-10.3 8.3-18.6 18.6-18.6H400c8.8 0 16 7.2 16 16s-7.2 16-16 16H379.3c-7.2 0-14.2 2.9-19.3 8l-4.7 4.7c-2.1 2.1-3.3 5-3.3 8c0 6.2 5.1 11.3 11.3 11.3h11.3c6 0 11.8 2.4 16 6.6l6.5 6.5c1.8 1.8 2.8 4.3 2.8 6.8s-1 5-2.8 6.8l-7.5 7.5C386 262 384 266.9 384 272s2 10 5.7 13.7L408 304c10.2 10.2 24.1 16 38.6 16H454c6.5-20.2 10-41.7 10-64c0-111.4-87.6-202.4-197.7-207.7zm172 307.9c-3.7-2.6-8.2-4.1-13-4.1c-6 0-11.8-2.4-16-6.6L396 332c-7.7-7.7-18-12-28.9-12c-9.7 0-19.2-3.5-26.6-9.8L314 287.4c-11.6-9.9-26.4-15.4-41.6-15.4H251.4c-12.6 0-25 3.7-35.5 10.7L188.5 301c-17.8 11.9-28.5 31.9-28.5 53.3v3.2c0 17 6.7 33.3 18.7 45.3l16 16c8.5 8.5 20 13.3 32 13.3H248c13.3 0 24 10.7 24 24c0 2.5 .4 5 1.1 7.3c71.3-5.8 132.5-47.6 165.2-107.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM187.3 100.7c-6.2-6.2-16.4-6.2-22.6 0l-32 32c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l32-32c6.2-6.2 6.2-16.4 0-22.6z"/&gt;&lt;/svg&gt;&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words"&gt;
 &lt;div class="flex justify-between"&gt;
 
 &lt;h2 class="mt-0"&gt;Based in Vilnius, Lithuania&lt;/h2&gt;
 
 
 &lt;h3 class=""&gt;
 &lt;span class="flex cursor-pointer"&gt;
 &lt;span
 class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400"&gt;
 Vilnius, Lithuania
 &lt;/span&gt;
&lt;/span&gt;

 &lt;/h3&gt;
 
 &lt;/div&gt;
 
 &lt;h4 class="mt-0"&gt;
 Explore · Learn · Share
 &lt;/h4&gt;
 
 &lt;div class="mb-6"&gt;
 
Languages I use daily: Chinese · English · Lithuanian (beginner)

 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/li&gt;






&lt;li&gt;
 &lt;div class="flex"&gt;
 &lt;div
 class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5"&gt;
 &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"&gt;
&lt;path fill="currentColor" d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z"/&gt;&lt;/svg&gt;&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words"&gt;
 &lt;div class="flex justify-between"&gt;
 
 &lt;h2 class="mt-0"&gt;Open Source&lt;/h2&gt;
 
 
 &lt;h3 class=""&gt;
 &lt;span class="flex cursor-pointer"&gt;
 &lt;span
 class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400"&gt;
 Open Source
 &lt;/span&gt;
&lt;/span&gt;

 &lt;/h3&gt;
 
 &lt;/div&gt;
 
 &lt;h4 class="mt-0"&gt;
 Contributions Welcome
 &lt;/h4&gt;
 
 &lt;div class="mb-6"&gt;
 

I maintain several open-source organizations and tools and they are widely used by developers and teams around the world.
All kinds of contributions and feedback are welcome. &lt;a href="../portfolio/"&gt;View Projects&lt;/a&gt;.


 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/li&gt;






&lt;li&gt;
 &lt;div class="flex"&gt;
 &lt;div
 class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5"&gt;
 &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;
&lt;path fill="currentColor" d="M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"/&gt;&lt;/svg&gt;&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words"&gt;
 &lt;div class="flex justify-between"&gt;
 
 &lt;h2 class="mt-0"&gt;Support Me&lt;/h2&gt;
 
 
 &lt;h3 class=""&gt;
 &lt;span class="flex cursor-pointer"&gt;
 &lt;span
 class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400"&gt;
 Donate
 &lt;/span&gt;
&lt;/span&gt;

 &lt;/h3&gt;
 
 &lt;/div&gt;
 
 &lt;h4 class="mt-0"&gt;
 Help keep this blog ad-free!
 &lt;/h4&gt;
 
 &lt;div class="mb-6"&gt;
 

This blog has always been ad-free — I want reading here to be a clean, distraction-free experience. Writing takes time, and your support means a lot. If you've found something useful here, consider buying me a coffee or sponsoring my work:

&lt;ul&gt;
 &lt;li&gt;🌟 &lt;a href="https://github.com/sponsors/shenxianpeng" target="_blank" rel="noopener"&gt;Sponsor me on GitHub Sponsors&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;💙 &lt;a href="https://thanks.dev/u/gh/shenxianpeng" target="_blank" rel="noopener"&gt;Support via Thanks.dev&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;☕ &lt;a href="https://buymeacoffee.com/shenxianpeng" target="_blank" rel="noopener"&gt;Buy Me a Coffee&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/li&gt;






&lt;li&gt;
 &lt;div class="flex"&gt;
 &lt;div
 class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5"&gt;
 &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z"/&gt;&lt;/svg&gt;&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words"&gt;
 &lt;div class="flex justify-between"&gt;
 
 &lt;h2 class="mt-0"&gt;Get in Touch&lt;/h2&gt;
 
 
 &lt;h3 class=""&gt;
 &lt;span class="flex cursor-pointer"&gt;
 &lt;span
 class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400"&gt;
 Let&amp;#39;s Connect
 &lt;/span&gt;
&lt;/span&gt;

 &lt;/h3&gt;
 
 &lt;/div&gt;
 
 &lt;h4 class="mt-0"&gt;
 Collaboration · Writing · Discussion
 &lt;/h4&gt;
 
 &lt;div class="mb-6"&gt;
 
xianpeng.shen@gmail.com

 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/li&gt;

&lt;/ol&gt;</description></item><item><title>Developing on Windows Just Got Awesome using WSL + VS Code + Docker Desktop - Worth a Try</title><link>https://shenxianpeng.dev/en/posts/2022/wsl/</link><pubDate>Tue, 19 Apr 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/wsl/</guid><description>This article introduces how to develop on Windows using WSL, VS Code, and Docker Desktop. It provides detailed installation and configuration steps, as well as the advantages and experience of using these tools.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/wsl/featured.jpg"/></item><item><title>Docker, containerd, CRI, CRI-O, OCI, runc Explained and How They Work Together</title><link>https://shenxianpeng.dev/en/posts/2022/container-ecosystem/</link><pubDate>Tue, 29 Mar 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/container-ecosystem/</guid><description>This article introduces the key components and standards in the container ecosystem, such as Docker, containerd, CRI, CRI-O, OCI, and runc, explaining their relationships and how they work together.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/container-ecosystem/featured.jpg"/></item><item><title>How to enable, configure and disable Jenkins LDAP</title><link>https://shenxianpeng.dev/en/posts/2022/jenkins-ldap-configuration/</link><pubDate>Tue, 15 Mar 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/jenkins-ldap-configuration/</guid><description>This article explains how to enable and configure LDAP authentication in Jenkins, including how to disable it temporarily if needed.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/jenkins-ldap-configuration/featured.jpg"/></item><item><title>Reliably Unforking a GitHub Repository Without Deletion and Reconstruction</title><link>https://shenxianpeng.dev/en/posts/2022/unfork-github-repo/</link><pubDate>Wed, 09 Mar 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/unfork-github-repo/</guid><description>This article describes how to separate a forked repository from its parent repository using GitHub Support, avoiding data loss from deletion and reconstruction, and helping developers better manage forked repositories.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/unfork-github-repo/featured.jpg"/></item><item><title>Resolved - The Pip Inspector tree parse failed to produce output</title><link>https://shenxianpeng.dev/en/posts/2022/blackduck-troubleshooting/</link><pubDate>Wed, 02 Mar 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/blackduck-troubleshooting/</guid><description>This article explains how to resolve the &amp;ldquo;The Pip Inspector tree parse failed to produce output&amp;rdquo; error in Black Duck Detect, including the root cause and solution.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/blackduck-troubleshooting/featured.jpg"/></item><item><title>From QA to DEV to DEVOPS — Five Years of Coding and Writing</title><link>https://shenxianpeng.dev/en/misc/from-qa-to-dev-to-devops/</link><pubDate>Mon, 21 Feb 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/from-qa-to-dev-to-devops/</guid><description>What have I gained from five years of coding, transitioning from software testing to development to DevOps? Sharing my career development and writing experience.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/from-qa-to-dev-to-devops/featured.jpg"/></item><item><title>Vagrant vs. Docker —— Which One Should You Choose?</title><link>https://shenxianpeng.dev/en/posts/2022/vagrant-vs-docker/</link><pubDate>Mon, 14 Feb 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/vagrant-vs-docker/</guid><description>This article compares Vagrant and Docker, analyzing their respective use cases and advantages to help readers choose the right tool for managing virtual machines or containers.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/vagrant-vs-docker/featured.jpg"/></item><item><title>What is Vagrant? Differences Between Vagrant and VirtualBox</title><link>https://shenxianpeng.dev/en/posts/2022/vagrant/</link><pubDate>Fri, 11 Feb 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/vagrant/</guid><description>This article introduces the concept and history of Vagrant, and how to use Vagrant to create and manage virtual machines, emphasizing the advantages of Vagrant over traditional virtual machines.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/vagrant/featured.jpg"/></item><item><title>What is Go? Advantages, Current Status, and Choosing Between Python and Go for Beginners</title><link>https://shenxianpeng.dev/en/posts/2022/what-is-go/</link><pubDate>Tue, 18 Jan 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/what-is-go/</guid><description>This article introduces the basic concepts, advantages, and ranking of the Go programming language. It also guides beginners on choosing between learning Python or Go, providing practical learning suggestions and resources.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/what-is-go/featured.jpg"/></item><item><title>You Must Know These 17 Docker Best Practices!</title><link>https://shenxianpeng.dev/en/posts/2022/docker-best-practice/</link><pubDate>Wed, 12 Jan 2022 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2022/docker-best-practice/</guid><description>This article shares some best practices to follow when writing Dockerfiles and using Docker, including suggestions on multi-stage builds, image optimization, and security.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2022/docker-best-practice/featured.jpg"/></item><item><title>2021-22 World Quality Report (WQR)</title><link>https://shenxianpeng.dev/en/posts/2021/world-quality-report/</link><pubDate>Sat, 06 Nov 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/world-quality-report/</guid><description>This article presents the key findings and trends from the 2021-22 World Quality Report (WQR), highlighting the impact of the COVID-19 pandemic on software quality and testing, and the crucial role of QA in Agile and DevOps.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/world-quality-report/featured.jpg"/></item><item><title>Polaris - Static Code Analysis</title><link>https://shenxianpeng.dev/en/posts/2021/what-is-polaris/</link><pubDate>Sun, 24 Oct 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/what-is-polaris/</guid><description>This article introduces the basic concepts of Polaris, the supported programming languages, how to use the SaaS platform, and how to configure and run Polaris for static code analysis. It also provides example YAML configuration files and how to view the analysis results.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/what-is-polaris/featured.jpg"/></item><item><title>How does SonarQube Community Edition integrate with the project</title><link>https://shenxianpeng.dev/en/posts/2021/sonarqube-integration/</link><pubDate>Sat, 18 Sep 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/sonarqube-integration/</guid><description>This article explains how to integrate SonarQube Community Edition with Maven, Gradle, and other projects, including the necessary configurations and Jenkins pipeline setup.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/sonarqube-integration/featured.jpg"/></item><item><title>Run lcov failed "Can't locate JSON/PP.pm in @INC ..."</title><link>https://shenxianpeng.dev/en/posts/2021/lcov-error/</link><pubDate>Tue, 07 Sep 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/lcov-error/</guid><description>This article explains how to resolve the &amp;ldquo;Can&amp;rsquo;t locate JSON/PP.pm in @INC &amp;hellip;&amp;rdquo; error when running lcov, including installing missing Perl modules.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/lcov-error/featured.jpg"/></item><item><title>SonarQube installation and troubleshootings</title><link>https://shenxianpeng.dev/en/posts/2021/sonarqube-setup/</link><pubDate>Thu, 05 Aug 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/sonarqube-setup/</guid><description>This article documents the steps to install SonarQube, configure LDAP, and set up PostgreSQL as the database. It also includes troubleshooting tips for common issues encountered during setup.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/sonarqube-setup/featured.jpg"/></item><item><title>How to fix "hidden symbol `__gcov_init' in ../libgcov.a(_gcov.o) is referenced by DSO"</title><link>https://shenxianpeng.dev/en/posts/2021/how-to-fix-gcov-hidden-symbol/</link><pubDate>Tue, 27 Jul 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/how-to-fix-gcov-hidden-symbol/</guid><description>This article explains how to resolve the &amp;ldquo;hidden symbol `__gcov_init&amp;rsquo; in ../libgcov.a(_gcov.o) is referenced by DSO&amp;rdquo; error when building a project with Gcov, including how to ensure symbols are not hidden.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/how-to-fix-gcov-hidden-symbol/featured.jpg"/></item><item><title>Add or update Bitbucket build status with REST API</title><link>https://shenxianpeng.dev/en/posts/2021/bitbucket-update-build-status/</link><pubDate>Sun, 25 Jul 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/bitbucket-update-build-status/</guid><description>How to add or update the build status of a specific commit in Bitbucket using its REST API. It includes a shell script example for updating the build status and provides context on when to use this functionality.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/bitbucket-update-build-status/featured.jpg"/></item><item><title>About Code Coverage</title><link>https://shenxianpeng.dev/en/posts/2021/code-coverage/</link><pubDate>Wed, 14 Jul 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/code-coverage/</guid><description>This article briefly introduces the concept, importance, common metrics, working principle, and mainstream tools of code coverage, emphasizing that code coverage metrics should not be over-relied upon.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/code-coverage/featured.jpg"/></item><item><title>Code coverage testing of C/C++ projects using Gcov and LCOV</title><link>https://shenxianpeng.dev/en/posts/2021/gcov-example/</link><pubDate>Sun, 11 Jul 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/gcov-example/</guid><description>This article shares how to use Gcov and LCOV to metrics code coverage for C/C++ projects. It explains the steps to compile, run tests, and generate coverage reports, including example commands and expected outputs.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/gcov-example/featured.jpg"/></item><item><title>How to make Jenkins job fail after timeout? (Resolved)</title><link>https://shenxianpeng.dev/en/posts/2021/jenkins-timeout/</link><pubDate>Thu, 24 Jun 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/jenkins-timeout/</guid><description>This article explains how to handle Jenkins job timeouts effectively by using &lt;code&gt;try&lt;/code&gt; and &lt;code&gt;catch&lt;/code&gt; blocks to ensure the job fails correctly when a timeout occurs.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/jenkins-timeout/featured.jpg"/></item><item><title>Solving Two Git Clone Failure Issues on AIX</title><link>https://shenxianpeng.dev/en/posts/2021/git-clone-failed-on-aix/</link><pubDate>Sun, 20 Jun 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/git-clone-failed-on-aix/</guid><description>This article documents two issues encountered when using Jenkins for Git clone on AIX and their solutions, including dependent library loading failure and SSH authentication failure.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/git-clone-failed-on-aix/featured.jpg"/></item><item><title>Resolving Git Large Repository Download Failures on AIX by Removing File Resource Limits</title><link>https://shenxianpeng.dev/en/posts/2021/aix-ulimit/</link><pubDate>Thu, 17 Jun 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/aix-ulimit/</guid><description>Resolving Git large repository download failures on AIX due to file size limits by modifying ulimit settings.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/aix-ulimit/featured.jpg"/></item><item><title>Regarding Extremely Slow and Occasional Upload Failures to Artifactory — A Case Study</title><link>https://shenxianpeng.dev/en/posts/2021/artifactory-slow-upload/</link><pubDate>Wed, 16 Jun 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/artifactory-slow-upload/</guid><description>Encountered slow upload speeds and occasional failures when uploading artifacts to JFrog Artifactory. This post shares the troubleshooting process and lessons learned.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/artifactory-slow-upload/featured.jpg"/></item><item><title>Resolved problem that ESlint HTML report is not displayed correctly in Jenkins job</title><link>https://shenxianpeng.dev/en/posts/2021/jenkins-eslint/</link><pubDate>Mon, 07 Jun 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/jenkins-eslint/</guid><description>This article explains how to resolve the issue of ESlint HTML report not displaying correctly in Jenkins jobs due to Content Security Policy restrictions, including the steps to configure Jenkins to allow the report to load properly.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/jenkins-eslint/featured.jpg"/></item><item><title>Branch Naming Convention</title><link>https://shenxianpeng.dev/en/posts/2019/git-branching-strategy/</link><pubDate>Thu, 13 May 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2019/git-branching-strategy/</guid><description>This article introduces the conventional branch naming specification, including the purpose of branch names, key points, and basic rules for naming branches in Git. It also provides examples of branch prefixes and their meanings.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2019/git-branching-strategy/featured.jpg"/></item><item><title>How to download the entire folder artifacts when Artifactory "Download Folder functionality is disabled"?</title><link>https://shenxianpeng.dev/en/posts/2021/artifactory-api-search/</link><pubDate>Tue, 04 May 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/artifactory-api-search/</guid><description>This article explains how to download the entire folder artifacts from JFrog Artifactory when the &amp;ldquo;Download Folder functionality is disabled&amp;rdquo;. It provides a workaround using Artifactory REST APIs to retrieve and download artifacts programmatically.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/artifactory-api-search/featured.jpg"/></item><item><title>Why Windows Installer pop up? (Resolved)</title><link>https://shenxianpeng.dev/en/posts/2021/why-windows-installer-pop-up/</link><pubDate>Thu, 22 Apr 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/why-windows-installer-pop-up/</guid><description>This article explains a common issue with Windows installers where a pop-up appears unexpectedly, and how to resolve it by correcting the build folder naming convention.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/why-windows-installer-pop-up/featured.jpg"/></item><item><title>Is Your Python Code Pythonic Enough?</title><link>https://shenxianpeng.dev/en/posts/2021/pythonic/</link><pubDate>Sun, 28 Mar 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/pythonic/</guid><description>This article introduces the concept of Pythonic code and demonstrates through examples how to write more concise and elegant Python code, helping developers improve code quality and readability.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/pythonic/featured.jpg"/></item><item><title>Different branches have different default parameters in Jenkins</title><link>https://shenxianpeng.dev/en/posts/2021/jenkins-dynamic-default-parameters/</link><pubDate>Wed, 24 Mar 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/jenkins-dynamic-default-parameters/</guid><description>This article explains how to set different default parameters for different branches in Jenkins multibranch pipelines, allowing for dynamic configuration based on the branch being built.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/jenkins-dynamic-default-parameters/featured.jpg"/></item><item><title>Thoughts and Practices Based on Google's Code Review Principles</title><link>https://shenxianpeng.dev/en/posts/2021/code-review/</link><pubDate>Sat, 20 Mar 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/code-review/</guid><description>This article introduces Google&amp;rsquo;s code review principles and shares practical experience on how to effectively implement code review in a team, including process control and automated checks.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/code-review/featured.jpg"/></item><item><title>Jenkins upgrade issue "Windows agents won't start" workaround</title><link>https://shenxianpeng.dev/en/posts/2021/jenkins-windows-agent-cannot-start/</link><pubDate>Thu, 11 Feb 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/jenkins-windows-agent-cannot-start/</guid><description>This article explains how to resolve the issue of Windows agents not starting after upgrading Jenkins, including the necessary steps to update the Windows Slaves plugin and modify configuration files.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/jenkins-windows-agent-cannot-start/featured.jpg"/></item><item><title>What's the difference between result and currentResult in Jenkins?</title><link>https://shenxianpeng.dev/en/posts/2021/jenkinsresult-vs-currentresult/</link><pubDate>Thu, 14 Jan 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/jenkinsresult-vs-currentresult/</guid><description>This article explains the difference between &lt;code&gt;result&lt;/code&gt; and &lt;code&gt;currentResult&lt;/code&gt; in Jenkins pipelines, including examples of how they behave in both declarative and scripted pipelines.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/jenkinsresult-vs-currentresult/featured.jpg"/></item><item><title>How to open port 22 and make it listening on Windows</title><link>https://shenxianpeng.dev/en/posts/2021/how-to-open-port-22/</link><pubDate>Tue, 12 Jan 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/how-to-open-port-22/</guid><description>This article explains how to open port 22 on Windows and ensure it is listening, which is necessary for SSH connections. It includes steps to install OpenSSH and configure the firewall.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/how-to-open-port-22/featured.jpg"/></item><item><title>These settings in Bitbucket/GitHub recommends enable</title><link>https://shenxianpeng.dev/en/posts/2021/git-repository-settings/</link><pubDate>Tue, 12 Jan 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/git-repository-settings/</guid><description>Provides a list of recommended settings for Bitbucket and GitHub repositories, including enabling force push rejection, branch protection, tag management, merge checks, and commit message standards.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/git-repository-settings/featured.jpg"/></item><item><title>git sparse-checkout enable and disable</title><link>https://shenxianpeng.dev/en/posts/2021/git-sparse-checkout/</link><pubDate>Mon, 11 Jan 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/git-sparse-checkout/</guid><description>This article explains how to enable and disable git sparse-checkout, including examples of how to configure sparse-checkout for specific directories and how to reset it.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/git-sparse-checkout/featured.jpg"/></item><item><title>Resolving the Unavailable Code Sign Default Timestamp Server http://timestamp.verisign.com/scripts/timstamp.dll</title><link>https://shenxianpeng.dev/en/posts/2021/verisign-server-not-working/</link><pubDate>Wed, 06 Jan 2021 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2021/verisign-server-not-working/</guid><description>This article describes how to resolve issues with the unavailable Verisign timestamp server, providing alternative timestamp server addresses to help developers successfully complete code signing.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2021/verisign-server-not-working/featured.jpg"/></item><item><title>2020 Year-End Summary</title><link>https://shenxianpeng.dev/en/misc/2020-summary/</link><pubDate>Thu, 31 Dec 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/2020-summary/</guid><description>&lt;p&gt;Time flies, and 2021 is just around the corner. It&amp;rsquo;s time to summarize my experiences and achievements this year.&lt;/p&gt;
&lt;p&gt;2020 was an extraordinary year. The COVID-19 pandemic affected everyone&amp;rsquo;s life and work.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/2020-summary/featured.jpg"/></item><item><title>How to backup Jenkins</title><link>https://shenxianpeng.dev/en/posts/2020/jenkins-backup/</link><pubDate>Tue, 24 Nov 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/jenkins-backup/</guid><description>This article explains how to backup Jenkins using the ThinBackup plugin and shell scripts, ensuring that your Jenkins configuration and build data are safely stored.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/jenkins-backup/featured.jpg"/></item><item><title>For Those Who Want to Use JFrog Artifactory to Manage Artifacts</title><link>https://shenxianpeng.dev/en/posts/2020/what-is-artifactory/</link><pubDate>Sun, 04 Oct 2020 20:43:46 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/what-is-artifactory/</guid><description>This article introduces the concepts, advantages, working principles, and best practices of JFrog Artifactory, helping readers understand how to use Artifactory to manage software artifacts.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/what-is-artifactory/featured.jpg"/></item><item><title>Programmer's Self-Cultivation — Git Commit Message and Branch Creation Conventions</title><link>https://shenxianpeng.dev/en/posts/2020/commit-messages-specification/</link><pubDate>Thu, 24 Sep 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/commit-messages-specification/</guid><description>This article introduces how to formulate and implement Git commit message and branch creation conventions to improve code quality and team collaboration efficiency.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/commit-messages-specification/featured.jpg"/></item><item><title>Publishing a Python Project on GitHub — Things to Note</title><link>https://shenxianpeng.dev/en/posts/2020/how-to-release-python-project/</link><pubDate>Sun, 13 Sep 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/how-to-release-python-project/</guid><description>This article introduces the important aspects to consider when publishing a Python project on GitHub, including project structure, dependency management, and version control.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/how-to-release-python-project/featured.jpg"/></item><item><title>About Python pip install and versioning</title><link>https://shenxianpeng.dev/en/posts/2020/pip-install-and-versioning/</link><pubDate>Sun, 30 Aug 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/pip-install-and-versioning/</guid><description>Explains the behavior of pip install commands with different versioning schemes, including how to handle beta versions and the implications of using &lt;code&gt;--upgrade&lt;/code&gt; with specific version numbers.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/pip-install-and-versioning/featured.jpg"/></item><item><title>Update Jira server account avatar with rest API</title><link>https://shenxianpeng.dev/en/posts/2020/jira-update-account-avatar-with-rest-api/</link><pubDate>Mon, 17 Aug 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/jira-update-account-avatar-with-rest-api/</guid><description>How to update the avatar of a Jira server account using the REST API, including examples in Python and Postman.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/jira-update-account-avatar-with-rest-api/featured.jpg"/></item><item><title>Fixed "Remote session was disconnected because there are no Remote Desktop client access licenses available"</title><link>https://shenxianpeng.dev/en/posts/2020/rdp-problem/</link><pubDate>Mon, 10 Aug 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/rdp-problem/</guid><description>Fix the RDP connection issue on Windows Server 2012 R2, where the error message indicates that there are no Remote Desktop client access licenses available.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/rdp-problem/featured.jpg"/></item><item><title>Daily Notes</title><link>https://shenxianpeng.dev/en/misc/daily/</link><pubDate>Fri, 07 Aug 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/daily/</guid><description>Starting August 7, 2020, I would like to start recording some daily/important things in English.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/daily/featured.jpg"/></item><item><title>Obtaining Bitbucket Repository Events in Real Time via the generic-webhook-trigger Plugin</title><link>https://shenxianpeng.dev/en/posts/2020/bitbucket-pull-request-event/</link><pubDate>Fri, 07 Aug 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/bitbucket-pull-request-event/</guid><description>This article describes how to use Jenkins&amp;rsquo; generic-webhook-trigger plugin to obtain real-time event information from a Bitbucket repository, such as the Pull Request ID.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/bitbucket-pull-request-event/featured.jpg"/></item><item><title>Jenkins—Executing Shell Scripts—Handling Non-Zero Return Codes</title><link>https://shenxianpeng.dev/en/posts/2020/jenkins-tips-3/</link><pubDate>Wed, 22 Jul 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/jenkins-tips-3/</guid><description>How to handle non-zero return codes from Shell commands in a Jenkins Pipeline to ensure the job shows a successful status even if a command fails.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/jenkins-tips-3/featured.jpg"/></item><item><title>How to fix ".NET Framework 2.0 or later is required on this computer to run a Jenkins agent as a Windows service"</title><link>https://shenxianpeng.dev/en/posts/2020/jenkins-windows-agent-connect-problem/</link><pubDate>Thu, 16 Jul 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/jenkins-windows-agent-connect-problem/</guid><description>Resolve the issue of Jenkins Windows agents not connecting due to missing .NET Framework, including steps to install .NET Framework 3.5 and set up the Jenkins agent service.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/jenkins-windows-agent-connect-problem/featured.jpg"/></item><item><title>Jenkins Top 3 best practice</title><link>https://shenxianpeng.dev/en/posts/2020/jenkins-best-practice/</link><pubDate>Fri, 03 Jul 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/jenkins-best-practice/</guid><description>Discusses three best practices for Jenkins: Configuration as Code, Shared Libraries, and Multi-Branch Pipeline, highlighting their benefits in terms of transparency, traceability, and self-service builds.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/jenkins-best-practice/featured.jpg"/></item><item><title>Beyond Coding - The Importance of Writing for Programmers</title><link>https://shenxianpeng.dev/en/posts/2020/programmers-read-and-write/</link><pubDate>Sat, 30 May 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/programmers-read-and-write/</guid><description>This article explores the importance of writing skills for programmers, highlighting the role of communication and expression in career advancement, and sharing personal experiences and insights on writing.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/programmers-read-and-write/featured.jpg"/></item><item><title>How to Ensure No Syntax Errors Before Submitting a Jenkins Pipeline</title><link>https://shenxianpeng.dev/en/posts/2020/jenkins-pipeline-linter-connector/</link><pubDate>Sat, 23 May 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/jenkins-pipeline-linter-connector/</guid><description>This article introduces two methods to ensure there are no syntax errors before submitting a Jenkins Pipeline using the REST API for syntax validation and using the VSCode plugin for syntax checking.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/jenkins-pipeline-linter-connector/featured.jpg"/></item><item><title>How to use JMeter to do Performance Testing</title><link>https://shenxianpeng.dev/en/posts/2020/jmeter-performance-testing/</link><pubDate>Sat, 09 May 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/jmeter-performance-testing/</guid><description>A guide on using JMeter for performance testing, including recording scripts, running tests in GUI and non-GUI modes, and integrating with Jenkins for automated testing.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/jmeter-performance-testing/featured.jpg"/></item><item><title>Bitbucket Webhooks Configuration</title><link>https://shenxianpeng.dev/en/posts/2020/bitbucket-webhooks/</link><pubDate>Fri, 24 Apr 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/bitbucket-webhooks/</guid><description>How to configure Bitbucket webhooks to trigger Jenkins builds for multi-branch pipelines, ensuring that Jenkins can automatically respond to events like pull requests and branch updates.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/bitbucket-webhooks/featured.jpg"/></item><item><title>Three Ways to Solve the Jenkins Declarative Pipeline "Method code too large" Exception</title><link>https://shenxianpeng.dev/en/posts/2020/jenkins-troubleshooting/</link><pubDate>Mon, 20 Apr 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/jenkins-troubleshooting/</guid><description>This article introduces three methods to solve the &amp;ldquo;Method code too large&amp;rdquo; exception in Jenkins declarative pipelines, including moving steps outside the pipeline, migrating from declarative to scripted pipelines, and using Shared Libraries.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/jenkins-troubleshooting/featured.jpg"/></item><item><title>How to Slim Down Your Git Repository</title><link>https://shenxianpeng.dev/en/posts/2020/maintaining-git-repository/</link><pubDate>Sat, 21 Mar 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/maintaining-git-repository/</guid><description>How to remove unnecessary files and history from a Git repository to reduce its size, providing two methods using BFG Repo Cleaner or &lt;code&gt;git filter-branch&lt;/code&gt;.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/maintaining-git-repository/featured.jpg"/></item><item><title>A Free C/C++ Static Code Analysis Tool—Cppcheck—Integrated with Jenkins</title><link>https://shenxianpeng.dev/en/posts/2020/cppcheck/</link><pubDate>Sun, 16 Feb 2020 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2020/cppcheck/</guid><description>This article introduces the installation, usage, and integration of Cppcheck with Jenkins to improve C/C++ code quality and static analysis capabilities.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2020/cppcheck/featured.jpg"/></item><item><title>2019 Year-End Summary</title><link>https://shenxianpeng.dev/en/misc/2019-summary/</link><pubDate>Sat, 28 Dec 2019 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/2019-summary/</guid><description>&lt;p&gt;Time flies, and it&amp;rsquo;s already the third day of 2020. Looking back on 2019, my keyword for the year is: &amp;ldquo;tried my best&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;This is my second year as a software engineer. Although my title is SE (Software Engineer), my main work involves product building and release, and the implementation of CI/CD/DevOps (self-proclaimed jack-of-all-trades). Let me briefly record my work &amp;ldquo;achievements&amp;rdquo; in 2019.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/2019-summary/featured.jpg"/></item><item><title>Git History Statistics Generator</title><link>https://shenxianpeng.dev/en/posts/2019/git-stats/</link><pubDate>Tue, 17 Dec 2019 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2019/git-stats/</guid><description>GitStats, a Git history statistics generation tool written in Python, can generate detailed code submission statistical reports to help developers analyze project activity and contributor information.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2019/git-stats/featured.jpg"/></item><item><title>Beijing 48 Hours — A DevOps Training Camp Experience</title><link>https://shenxianpeng.dev/en/misc/48h-in-beijing/</link><pubDate>Sun, 01 Dec 2019 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/48h-in-beijing/</guid><description>A record of my experience attending the JFrog DevOps training camp in Beijing, sharing training content, personal feelings, and reflections on future work.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/48h-in-beijing/featured.jpg"/></item><item><title>Getting Started with JFrog Artifactory</title><link>https://shenxianpeng.dev/en/posts/2019/artifactory-install-and-upgrade/</link><pubDate>Sun, 10 Nov 2019 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2019/artifactory-install-and-upgrade/</guid><description>JFrog Artifactory is a powerful binary repository manager. This article introduces its installation, upgrade, and usage.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2019/artifactory-install-and-upgrade/featured.jpg"/></item><item><title>How to Set Up NFS Sharing and Mount on Different Platforms—Windows/Linux/Unix</title><link>https://shenxianpeng.dev/en/posts/2019/nfs/</link><pubDate>Tue, 10 Sep 2019 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2019/nfs/</guid><description>This article introduces the steps and commands for setting up NFS sharing and mounting it on different platforms (Windows/Linux/Unix).</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2019/nfs/featured.jpg"/></item><item><title>Resolving the "Could not read from remote repository" Issue</title><link>https://shenxianpeng.dev/en/posts/2019/could-not-read-from-remote-repository/</link><pubDate>Sun, 01 Sep 2019 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2019/could-not-read-from-remote-repository/</guid><description>Resolving the &amp;ldquo;Could not read from remote repository&amp;rdquo; error encountered when cloning code using Git, analyzing the causes, and providing solutions.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2019/could-not-read-from-remote-repository/featured.jpg"/></item><item><title>Git Commit Squash</title><link>https://shenxianpeng.dev/en/posts/2019/git-commit-squash/</link><pubDate>Tue, 20 Aug 2019 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2019/git-commit-squash/</guid><description>How to squash multiple Git commits into a single commit, both locally and remotely, using interactive rebase and merge strategies in Bitbucket.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2019/git-commit-squash/featured.jpg"/></item><item><title>Jenkins Multibranch Pipeline</title><link>https://shenxianpeng.dev/en/posts/2019/jenkins-multi-branch-pipeline/</link><pubDate>Tue, 25 Jun 2019 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2019/jenkins-multi-branch-pipeline/</guid><description>Discusses the use of Jenkins Multibranch Pipeline to manage multiple branches in a project, enabling parallel builds for pull requests and efficient code review processes.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2019/jenkins-multi-branch-pipeline/featured.jpg"/></item><item><title>A Code Coverage Tool - Squish Coco use examples</title><link>https://shenxianpeng.dev/en/posts/2019/squishcoco/</link><pubDate>Tue, 21 May 2019 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2019/squishcoco/</guid><description>introduction to Squish Coco, a code coverage tool, with examples of how to set it up and use it in Visual Studio for C++ projects.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2019/squishcoco/featured.jpg"/></item><item><title>Code Coverage tools of C/C++</title><link>https://shenxianpeng.dev/en/posts/2019/code-coverage-tools/</link><pubDate>Tue, 21 May 2019 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2019/code-coverage-tools/</guid><description>Code Coverage is a measurement of how many lines, statements, or blocks of your code are tested using your suite of automated tests. It’s an essential metric to understand the quality of your QA efforts.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2019/code-coverage-tools/featured.jpg"/></item><item><title>Jenkins Linux agent configuration</title><link>https://shenxianpeng.dev/en/posts/2019/jenkins-linux-agent/</link><pubDate>Sun, 12 May 2019 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2019/jenkins-linux-agent/</guid><description>Provides a step-by-step guide on how to configure a Jenkins Linux agent, including setting up the Java runtime, creating the node, and troubleshooting common issues.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2019/jenkins-linux-agent/featured.jpg"/></item><item><title>Jenkins Windows agent configuration</title><link>https://shenxianpeng.dev/en/posts/2019/jenkins-windows-agent/</link><pubDate>Sun, 12 May 2019 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2019/jenkins-windows-agent/</guid><description>Provides a step-by-step guide on how to configure a Jenkins Windows agent, including setting up the Java runtime, creating the node, and troubleshooting common issues.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2019/jenkins-windows-agent/featured.jpg"/></item><item><title>From Tester to Developer</title><link>https://shenxianpeng.dev/en/misc/from-qa-to-dev/</link><pubDate>Wed, 26 Dec 2018 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/from-qa-to-dev/</guid><description>Reflections and summaries of my five months transitioning from testing to development - work, learning, and life.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/from-qa-to-dev/featured.jpg"/></item><item><title>Why I Switched from Testing to Development After 9 Years</title><link>https://shenxianpeng.dev/en/posts/2018/why-i-move-to-development/</link><pubDate>Sat, 21 Jul 2018 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2018/why-i-move-to-development/</guid><description>This article documents my experience and insights from transitioning from testing to development. I share my learning and work arrangements during paternity leave, including reading books, participating in open-source projects, and physical exercise, emphasizing how to maintain learning and growth while caring for a family.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2018/why-i-move-to-development/featured.jpg"/></item><item><title>My Perspective on Senior Test Engineers</title><link>https://shenxianpeng.dev/en/posts/2018/senior-test-engineer/</link><pubDate>Sun, 06 May 2018 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2018/senior-test-engineer/</guid><description>This article outlines the skills and experience required for a senior test engineer, including testing theories, business acumen, tool proficiency, and coding abilities, helping readers understand how to become an excellent senior test engineer.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2018/senior-test-engineer/featured.jpg"/></item><item><title>Overcoming Workplace Frustrations</title><link>https://shenxianpeng.dev/en/misc/weather-setbacks-at-work/</link><pubDate>Thu, 23 Nov 2017 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/misc/weather-setbacks-at-work/</guid><description>How to adjust your mindset and focus on work itself when facing setbacks, rather than getting overly entangled in interpersonal relationships.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/misc/weather-setbacks-at-work/featured.jpg"/></item><item><title>Modifying Hexo Theme Code Highlighting</title><link>https://shenxianpeng.dev/en/posts/2017/change-hexo-code-highlight/</link><pubDate>Mon, 20 Nov 2017 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/posts/2017/change-hexo-code-highlight/</guid><description>Hexo&amp;rsquo;s default theme uses black code highlighting. Want a different style? This article explains how to modify Hexo theme code highlighting styles.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/posts/2017/change-hexo-code-highlight/featured.jpg"/></item><item><title>Xianpeng Shen's Resume</title><link>https://shenxianpeng.dev/en/hireme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>xianpeng.shen@gmail.com (Xianpeng Shen)</author><guid>https://shenxianpeng.dev/en/hireme/</guid><description>&lt;h2 class="relative group"&gt;About Me
 &lt;div id="about-me" class="anchor"&gt;&lt;/div&gt;
 
&lt;/h2&gt;
&lt;p&gt;DevOps / AI engineer based in Vilnius, Lithuania. Sixteen years in software engineering, from QA and test automation to DevOps, with build, release, and delivery automation at Rocket Software since 2015. My current focus is enterprise &lt;strong&gt;agentic applications&lt;/strong&gt;: AI that takes on real engineering tasks under controlled workflows.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://shenxianpeng.dev/hireme/featured.jpg"/></item></channel></rss>