Markdown 不香了吗?为什么越来越多 Python 项目用 RST?

在日常工作中,无论是写 README、写博客,还是写项目文档,我们总要选择一种标记语言来排版内容。

目前主流的有两种:MarkdownreStructuredText(简称 RST)

那它们之间到底有什么区别?又该在什么场景下选哪个呢?

最近我将 gitstats 项目的文档从 Markdown 转换为 RST,并发布到 ReadTheDocs 上,这篇文章就来聊聊我的一些实践体会。

Read More

我记得——回国两月琐忆

回国两个月来,我一直想写一篇文章,来记录一下这两个月来的生活。

但我每次敲击键盘总是写了又改,改了又删。

我时而想写下所有的我能记住的点点滴滴;时而又想写下我临行前的心情,但我不想让家人担心。

这两次出国前,我总爱听赵雷的《我记得》。

这个歌会让我回想起来这每一天,每一周,每一月的生活。

Read More

为什么越来越多的企业用户开始放弃 VMware?

背景

如果你是 VMware 的企业用户,或许你正在考虑脱离 VMware。目前,许多企业用户正在积极寻找替代方案,以降低成本和减少对 VMware 生态的依赖。

很多企业在考虑脱离 VMware,主要原因是:

Broadcom(博通)收购 VMware 带来的影响。2023 年 Broadcom 完成了对 VMware 的收购,并进行了一系列调整,包括:

  • 取消部分产品的永久许可证,强推订阅模式(Subscription)。
  • 价格上涨,使得许多企业的成本大幅增加。
  • 砍掉了一些非核心产品和合作计划,让部分企业和合作伙伴感到不安。

这些变化导致很多企业开始寻找替代方案,以降低成本并减少对 VMware 生态的依赖。

替代方案

Read More

一觉醒来,我的 PR 已经被 Merge 到 CPython 主分支了!

昨晚,哄完女儿睡觉已经是午夜十二点了。我回到自己的屋里,打开 GitHub,看看当晚有没有什么可以贡献的项目。

这次,我决定去 CPython 的 Issue 区找找有没有适合自己的贡献机会。

CPython 就是大名鼎鼎的 Python 编程语言的官方代码仓库。

其实,早就想找机会为 CPython 贡献代码,但一直没能迈出第一步。这次,我想用自己的方式寻找突破口。

这种想法的启发,来自 Tian Gao(GitHub ID:gaogaotiantian),他是 Python 的 Core Developer(核心开发者),专注于维护 pdb,并曾跻身 Python 贡献排行榜 #94 名。他可能是唯一一个前 100 名的中国开发者。

于是,我筛选了一些自己感兴趣的类别,当然就是 Infra 和 DevOps 相关的问题。很快,我找到了一张合适的 Issue,修改代码、测试、提交 Pull Request,然后就去睡觉了。

今天早上醒来,我发现我的 PR 已经被 Merge 到 CPython 主分支了!

第一个 CPython PR

虽然这算不上什么了不起的成就,但却是一个很好的学习过程。比如,通过参与优秀的开源项目,了解他们是如何管理 Issue 和 Pull Request 的,学习他们做得好的地方。这些经验都有可能应用到自己的工作或项目中。

在贡献优秀开源项目的过程中,不仅能提升相关技能,还能与这些优秀的开发者交流,学到新的知识。

从短期来看,或许不会带来直接的收益,但如果这是你真正热爱的事情,那么长期投入一定是值得的。

假如拥有 Python Core Developer 这样的身份认可,在国内可能有助于获得更理想的工作机会。然而,并非所有公司都青睐这种“双时区开发者”(白天工作,晚上开源)。

但如果你的目标是寻找远程工作,或者申请欧美国家的签证,这样的经历无疑会成为一个重要的加分项。


转载本站文章请注明作者和出处,请勿用于任何商业用途。欢迎关注公众号「DevOps攻城狮」

为什么我选择参与 EuroPython 2025 评审?

最近工作之余没怎么贡献代码,主要把时间都用在了评审 EuroPython 2025 (欧洲 Python 2025 大会)的提案上了。

EuroPython 2025

在国内的时候,我从未想过去参与某个活动,并当志愿者服务大家。但是来到欧洲,我突然想多参加点这样的活动。

下面就说说我为什么选择参加志愿者工作,以及最近一周的支援活动有哪些收获和感悟。

Read More

🚀 gitstats 升级来袭:支持 JSON 输出、多平台兼容、代码重构!

大家好!自从上次发文宣布开始维护 gitstats 以来,我一直在不断地改进这个项目,下面是这两个月的主要更新内容:

✨ 新增功能与改进

Read More

How to use Jenkins Docker Cloud

Recently, I am working on Jenkins instance migration, this time I started to use Jenkins Docker Cloud insead of use docker { ... } in Jenkinsfile.

Jenkins cloud plugin

First you need to install Jenkins Docker Cloud plugin https://plugins.jenkins.io/docker-plugin/

Jenkins Docker Cloud is a plugin that allows Jenkins to use Docker containers as build agents.

So you need to config a Docker Host with remote API as follows.

Read More

CPython 停止更新 Copyright 了,为什么?

最近逛 CPython 的仓库发现了这个 Issue gh-126133:

Hugo van Kemenade 他作为 Python 3.14 & 3.15 发布经理提出是否可以停止更新 Copyright。

在工作中,我其中的职责之一也是发布,因此我这个想法的提出也非常感兴趣,跟 CPython 项目一样,我们的项目在每年的年初都要更新 Copyright。

下面我们就一起来看看 Hugo 提出的理由以及最终这个想法被 Python 项目法律团队采纳并最终合并到 CPython 的主分支的过程。

Read More

2024 年终总结

时间过得很快,2024 年即将过去。如果不记录下在这一年里发生的事情,过不了多久就很难回想起这一年都发生了什么。按照惯例,这篇年终总结如期而至。

回看自己年初写下的 Flag,有些实现了,有些做了但不是很好,还有一些没有做到。

Read More

我的女儿

女儿已经两岁七个月了,我还没有单独写过一篇关于她的文章。

我的女儿是个好动的小姑娘,每天充满活力,以至于经常我从下班到家六点半一直陪她到半夜十二点多才能停下来睡觉。

今天是周五晚上,十二点半了还是蹦蹦跳跳不想睡觉,终于在凌晨一点钟熄灯睡觉了。但她突然下床要吃苹果。

Read More

复活 GitStats:让 Git 历史分析焕发新活力

最近的晚上的时间(一般要等到孩子睡了)我正在做一件事:复活已经沉寂多年的 GitStats 项目。

此前,我曾写过两篇关于 GitStats 的文章,如果感兴趣,可以查阅了解。

Read More

pip vs pipx 的区别

pip vs pipx 的区别

在 Python 的生态中,pippipx 都是用于管理包的软件工具,但它们有不同的设计目标和使用场景。有些同学可能会疑惑,两者到底有什么区别?该如何选择?


Read More

用于 DevOps 的 Nix 和 NixOS

当 CI 或更糟的是生产发生灾难性故障时,“在我的计算机上工作”一直是毫无帮助的答案。除其他外,Nix 是一种通过提供可重复、声明性和可靠的系统来解决此问题的方法。这使得它成为通常称为 DevOps 的两个方面的绝佳工具:操作系统的开发和流程。这篇文章将通过一个实际示例展示这两个方面,但首先,让我们从鸟瞰的角度看看这些承诺到底意味着什么。

Read More

Commit Check 更新:新增两个实用功能提升代码质量保障

最近有用户提出两个需求:一是支持在 Pull Request 中增加评论,二是检查 Pull Request 是否已经 rebase。

经过几晚的努力,现在正式宣布在最新的 commit-check 以及 commit-check-action 中新增两个重要功能:pr-commentsbase-merge

这两个功能旨在进一步提升 Pull Request (PR) 的检查能力。

Read More

PowerShell is not recognized as an internal or external command

Recently, while setting up a new Windows Server 2022, I encountered an issue where my Ansible playbook, which previously worked without problems, failed to execute.

Here’s the configuration I used for the Windows host in my Ansible inventory:

Read More