月度归档:2021年09月

black and white penguin toy

给知名项目提 Typo 修复有什么问题?

昨天在 V2ex 看到一个帖子,吐槽掘金上有人教别的程序员去给知名的开源项目提交 Typo Pull Request。

掘金上居然有文章教人怎么给开源软件提 typo issue

刚好,我也之前写过类似的文章,一篇《如何成为Golang贡献者》,另一篇《如何为任何开源项目做贡献?》,其实内容相差无几。就也来以“当事人”的身份聊聊这个问题。

Typo 有意义么?

答案是肯定的,任何对于开源项目有帮助的 Pull Request ,都是有意义的。因为他帮助开源项目变得更好,哪怕这个更好只是一个字、一句话的更好。

从项目的层面来看,项目是鼓励每个人去做贡献的。

而从项目开发者的角度来看,每一个 Pull Request 背后都是一个希望加入社区的开发者,如果开发者可以做好贡献者培养,对于项目的持续运行是有很大帮助的。所以我们可以看到,每年都有项目参加 Google 的 GSOC,都有项目参加 Digital Ocean 的 Hacktoberfest。

唯一可能出现的问题是:大量的 Typo Pull Request 会侵占维护者的心力,使得维护者无暇处理更加重要的事情

当然,这样的问题是可能存在的。但换句话说,这也是一个开源项目维护者群体壮大的好机会。如果不堪其扰,有很多种方式来处理:

  1. 提拔已有的 Commiter 为 Contributor,由某个 Contributor 来处理 Typo 类型的 Pull Request。
  2. 慢慢合并 Typo Pull Request,开源项目的 Pull Request 的合并并不一定是很快的,事实上绝大多数项目的合并都不会很快,特别是一些大型项目。在这种情况下,你大可以慢慢处理。

所以,Typo 的 Pull Request 所产生的坏处大概率是可以通过一些方式规避掉,而让项目可以进一步的发展。

对于贡献者来说,Typo 有意义么?

对于新手来说, Typo 类型的 Pull Request 是有意义的。

正式的开源项目往往会有很多规范和流程上的东西,这些东西是需要开发者通过参与开发才能慢慢熟知的,比如 pull request 的格式、信任的建立。从这个角度来看, Typo 类 Pull Request 可以帮助开发者快速熟悉一个开源项目的规范、约定俗成的习惯。

对于老手来说,Typo 类型的 Pull Request 没有意义。

除非你的企业需要按照 Pull Request 数量来帮你计算 KPI,不然提 Typo 类型的贡献对于你来说,百害而无一利。

我们现在在简历上会看你的 Github,因为 Github 能够证明你的实力。但你是否想过,如果你是面试官,你会看好一个给某个项目只提 Typo,而不做任何 Bugfix、Feature 更新的开发者? 我想大多数人都是 No。既然如此,你为什么会觉得提交 Typo 类型的 Pull Request 能够帮助到你自己呢?

总结

固然,提交 Typo 类型的 Pull Request 会占据开发者的心力,但通过简单处理就可以绕过的情况下,我还是鼓励开发者去提交贡献的。

你愿意帮助 Paul Graham 做本地化么?

发现了一个空白,如果有人做的话,大概率会被不少国内的大佬看到。对于求职应该有帮助。

Paul Graham 的博客是欢迎翻译的,作为一个初入行的同学,你大可以翻译帮助 Paul Graham 翻译他的文章, 并提供链接给他,这样你自己的网站的链接也会得到关注度。

Paul Graham 是《黑客与画家》的作者。

只差一个有心人。

text

选择不仅仅是选择 | 为什么我推荐朋友去外包岗位

速读:

每一个选择背后都是权衡。作为需要答案的人,你不能只要答案,那样过于取巧且对于自己的选择太不当回事。如果你向别人发出了问题,一定记得问背后选择的原因,知道别人是如何看待问题的,才能根据自己的情况,补全背后的权衡选项,做出适合自己的选择。

之前,我曾说过,我在提问题的时候,比较喜欢问原因,因为知道原因,才能帮助我做出选择。别人给出的选择,不过是基于他的视角所得出来的结论,如果只知道结论,是没有意义的,因为你不知道他做出选择的背景是什么,他的那些假设可能是不适合你的。

最近,刚好有个朋友来问我这个问题,我将思考的过程与他分享,也与你分享。

这个朋友是我之前在腾讯工作时认识的,他出身小程序,之前也并不是从事互联网相关行业的。虽然已经年近三十,但借着小程序的浪潮,通过自己的勤学苦练,成为了一个小程序的开发者,并取得了优异的成绩,成为了小程序领域的小咖;也基于小程序,在当地做过一些技术创业,不过后来发现,虽然能够在小程序领域做的不错,但对于整体的大的技术框架还是不甚了解。在后续的工作中,吃了一些苦头,产品的迭代速度、软件的质量,都成为了问题。

为了解决这个问题,他现在开始寻求一些新的工作岗位,以求能学习到一些更加工程化和体系化的研发知识,来提升自己的业务的代码质量,优化产品迭代。为此,他找我来给一些建议。

我给到的建议是:“首先寻求大公司的外包岗位,再看一些相对流程更加完善的独角兽/技术实践型公司,没必要看初创公司的岗位”

我做出这个选择的原因如下:

  1. 年龄大,大公司正职几乎没希望:对于中国的环境而言,任何一个人的最优解一定是大公司的正职岗位。钱多、体系规范。但我这个朋友的问题在于并非科班出身,技术方面的积累也仅仅是相当于 3 年左右的研发。但自己的年龄已经远超常规三年的研发同学。这会使得他在面试的时候没有优势。
  2. 学历差,大公司简历筛查过不去:对于国内的大型互联网公司来说,除了早期的员工,正职基本上有一个底线,就是只招全日制本科以上的工程师。而我这个朋友的学历是一个非常普通的学历,这会成为他在过 HR 简历筛时的一个重要指标,甚至有可能过不去筛查。
  3. 目的明确,想要的东西只有业务发展的好的公司才有:对于他来说,长期还是要做自己的项目的,他找一个工作更多是为了自己的事情积蓄能量,而不是打算和一个企业长久的共同发展下去。在这种情况下,他必须去到一些有明确流程的企业才有价值。如果去到一个制度、流程都不甚明确的企业,对于他来说,是没有意义和不划算的事情。

在这种情况下,对于他来说,最合适的就是大厂的外包,外包相比于正职,他入选的可能性更大;而外包也会接触到大厂的代码,从这种情况下,他想要学习的工程化、流程化就可以通过自己的学习和努力掌握到;其次是业务发展的比较好的普通公司,只有业务发展好的公司,才有可能去关注工程效率、工程化,初创企业还在生死线上挣扎,搞定业务才是最核心的,至于工程化,根本不在 KPI 之中,进入这样的企业,对于他来说,就是一个无效的选择,费时费力也得不到想要的东西。

我将选择的原因和答案告知给他,具体的选择,自然是由他自己做。不过,我给的选择,可以补充我对问题的看法,相比于直接给一个“你选择大厂的外包”的答案,好太多了,他可以基于自身的条件,再结合我看待问题的角度,判断哪些对于自己是成立的,哪些对于自己的是不成立的,最终得出自己的选择。

最后做个小调查,你在提问的时候,会问决策的过程么?为什么?

grayscale photo of woman doing silent hand sign

查塔姆宫守则

今天参与 Meetup,与会者提到了一个守则,我认为很好,值得学习,特地 Copy 一份。提醒自己。

“When a meeting, or part thereof, is held under the Chatham House Rule, participants are free to use the information received, but neither the identity nor the affiliation of the speaker(s), nor that of any other participant, may be revealed.”

Chatham House是英国皇家国际事务研究所(The Royal Institute of International Affairs)的所在地查塔姆大厦。

查塔姆大厦位于英国伦敦圣詹姆士广场(St. James’s Square),原为英国首相宅邸,曾住过三位首相。1923年,该建筑作为捐赠财产交由皇家国际事务研究所使用。因坐落于查塔姆大厦,该研究所的俗称即为“查塔姆研究所”。

“Chatham House Rule”即“查塔姆守则”于1927年诞生于查塔姆大厦,因此而得名。

该守则要求与会者在参加会议时,须严格遵守不泄露他人身份的规定。1992年和2002年,这一规定得到了进一步完善。

查塔姆研究所对这一守则的解释是,“如果一个会议,或会议的一部分,是按照Chatham House规则进行的,则与会者可自由使用在会议中获得的信息,但不得透露发言者及其他与会者的身份与所属机构”。

也就是说,与会者在会议或会议讨论中可自由使用会议上收集的材料并加以注明,但不得透露发言者身份,未经同意,会议主办者不得记录发言者的讲话内容。

一般会议主办方会在会议邀请函中或会议开始时明确表明这次会议是否实行查塔姆守则。

该守则的积极意义是让人们可以个人身份发言,表达或许不是来自其组织机构的观点。因此该守则鼓励人们自由讨论。如果不用担心自己的言论被公开引用后,会让本人声誉受损或造成不良影响,那么人们通常会在讨论问题时更加放松一些。

目前,地方政府、商业机构以及各研究机构在一些会议中广泛使用这一守则。

来源:

新闻英语:林郑月娥说的“Chatham House Rule”是什么? – ABC News

turned-on Kindle tablet

从 Kindle Voyage 到 Kindle Oasis

我是一个喜欢看书 & 买书的人,恰逢今天刚好是发行新的 Kindle PaperWhite,于是写一写我和 Kindle 的故事。

Kindle Voyage 与 Kindle Oasis

Kindle Voyage

Kindle Voyage

我拥有两台 Kindle 设备,2015 年买的 Kindle Voyage和 2021 年买的 Kindle Oasis。KV购自亚马逊官方渠道,KO购于本地二手。前者买时正盛,是当时最贵的 Kindle 设备。后者购买时已经不是最新版的 KO,但依然是一个体验极佳的 Kindle 设备。

Kindle Oasis
Kindle Oasis

如果让我选择这两个设备的话,我会觉得 Kindle Oasis 的尺寸和实体按键是我认为最好的点。相比于 Kindle Voyage 的“实体按键”,Kindle Oasis 的实体按键的反馈更有按下的感觉,会让你更加安心,而不会像 Kindle Voyage 按下去可能不太明确的感觉,不用担心自己没按下去,还要用眼睛去确认你的按下。

此外, Kindle Oasis 的尺寸也让看漫画变得更加友好。比如我今年开始看 Netflix,把「瑞克和莫蒂」给追完了,最近在刷对应的漫画,7寸的 Ko 相比于 6 寸的 Kv 还是舒服一点点的(当然,我觉得看漫画可能还是需要更大的设备才行,比如 10 寸的。不过那又和我的 iPad 冲突了)。

Kindle 与看书

买 Kindle 的时候,我还在大学中,处在求学的时刻。当时忙于参与各种比赛,常常东奔西跑,带书不变,考虑到自己从小便有读书的习惯,便斥巨资买了最贵的 Voyage。当时为了方便看书,还买了 Kindle Unlimited,以借阅 Kindle 商店当中的海量的图书。

后来也不负 Kindle 的期望,在这几年里,我用 Kindle 看了不少书。在我的亚马逊账号中,我购买了 205 本书。除掉购买的,Kindle Unlimited 也借了不少书。

总体来说,从我离家前往大学,再到后来到深圳工作,我的社科类图书基本上就是由 Kindle 承包的。

技术类图书我更喜欢直接买实体书,方便跳页。社科类图书没有跳页的需求,Kindle 就更合适了。所以,我的 Kindle 基本上都是用来看社科类图书,倒也不错。毕竟平时的工作会看太多的专业书籍,看一些社科书籍来调剂一下蛮好。

提起看书,不得不提微信读书。微信读书我用了很多次,但说实话,除了看小说以外,我总是用不起来,因为微信读书的社交化能力很好,但反过来,也会成为打扰你的干扰来源。对于经典的图书而言,微信读书并不能给我提供相比于 Kindle 更好的阅读体验。自然,我不会选择用起来读一些严肃的文学。不过,用来读小说很不错,微信读书的时长送书币,让读小说也可以免费。倒是蛮好。

Kindle 与其他设备

其实在使用 Kindle 的过程中,我也买了一些其他的设备,比如 文石 Poke3 、口袋阅之类的,但最终还是回归到 Kindle

总体的体验还是觉得 Kindle 更好。比如,虽然文石的 Poke 3 带来了开放系统,但整个墨水屏的生态就很一般,这使得你自己读书也很难有特别好的体验,反倒是不如封闭生态的 Kindle。口袋阅本身的体积倒是一个不错的替代品,但本身的配置所限,在读书方面,确实不甚方便,再加上默认的阅读器很一般,第三方的微信读书墨水屏版体验也不好,后来也放弃了。

Kindle 与未来

Kindle 对于我来说,是我读书过去的五年。同样的,我也相信他会是我读书未来的若干年。甚至我会觉得,如果 Kindle Voyage 和 Kindle Oasis 如果能一直使用的话,我会一直用到很久很久以后。

green and black digital device

使用 systemd 后台值守运行 Bark

什么是 Bark?

Bark 是由 Fin 开源的一个向 iOS 设备推送通知的服务,Bark 支持自行部署服务端,从而实现消息的推送通过自己的服务器进行,避免与官方的服务共享,提升推送时效。

服务端源码:Finb/bark-server: Backend of Bark (github.com)

客户端源码:Finb/Bark: Bark is an iOS App which allows you to push customed notifications to your iPhone (github.com)

Bark 如何部署?

Bark 的部署非常简单,直接下载官方的 release 文件即可。

下载完成后,你可以执行如下命令来进行测试

bark-server -addr 0.0.0.0:8080 -data ./bark-data

执行成功后,你会看到如下的界面,此时你可以访问 127.0.0.1/ping 来验证你的 Bark 的部署

使用 Systemd 进行值守

验证成功后,接下来就可以设定值守运行了

1. 将 bark server 移动到一个固定目录

首先,你需要将 bark server 移动到一个固定的目录,方便后续执行。

mv bark-server /usr/local/sbin/bark-server

2. 创建 Bark Service

创建 /etc/systemd/system/bark.service 文件,并添加如下内容

[Unit]
Description=Bark Server
[Service]
ExecStart=/usr/local/sbin/bark-server -addr 0.0.0.0:8080 -data /usr/local/bark-data
[Install]
WantedBy=multi-user.target

创建完成后,你可以执行 systemctl status bark 来查看 bark server 的状态。

然后,你就可以使用 systemctl 来控制bark 了

  • 启动服务 systemctl start bark
  • 停止服务 systemctl stop bark
  • 查看服务状态 systemctl status bark
man standing in front of people sitting beside table with laptop computers

如何预约我线下分享

上周做分享时,提到了我比较容易约分享。突然觉得,我应该给约我分享的人写一个 Guidelines,方便大家可以方便的约我会议。

我会去什么样的活动做分享?

  1. 技术主题
  2. 开源主题
  3. 开发者相关主题
  4. 运营主题
  5. DevRel 主题
  6. 其他任何我感兴趣的主题(播客、效率工作)

我参会的必要条件是什么?

  1. 时间可接受:正常的活动时间,不要搞半夜的那种,年纪大了,扛不住。
  2. 地点可接受:线上分享比较简单,因为我不需要到线下去。但如果你希望我到线下做分享,那可能需要和我沟通,是否可以到达现场(一般情况下,提供差旅的分享我不会拒绝线下分享)

我参会的一些补充描述

  1. 如果你的活动是免费的,那我去进行分享也是免费的。你只要符合必要条件即可;反之,如果是一个付费活动,那我希望你也提供相应的费用给我(除非你的影响力大到了我愿意去蹭活动)

如何联系我关于分享?

如果你有我的微信,直接发微信即可。发送活动时间、活动主题、活动地点给我确认即可。

如果你没有微信,可以发相应的资料到我的邮箱 bestony@linux.com 即可。

什么样的分享我不会参与?

  1. 我不感兴趣的主题不会参与:虽然我不抗拒分享,但对于一个我不喜欢的主题,还是不希望浪费时间。我也不觉得我会给你提供什么样的价值和信息。如果你预期这个主题我不会感兴趣,可以在联系我的时候,告知希望我分享的内容以及希望我提供给你的价值。
black and white penguin toy

如何使用 GitHub Action 自动发布 NPM

我经常会用 GitHub 来存储我的代码,其中很大一类是各种 npm 包。

由于本地常年配置了 npm 的 mirror,我更喜欢使用 GitHub 自动发布。

有了这个配置,我只需要编写完代码后,并执行如下命令,即可实现自动发布包.

npm version patch
git push --all
git push --tags

以下是对应的 GitHub action file。

使用时需要配置 npm_token 为你自己的 NPM Token。这个 Token 可以在 NPM 后台获取到。

name: Node.js Package
on:
  push:
    tags:
    - "*"
jobs:
  publish-npm:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: 14
          registry-url: https://registry.npmjs.org/
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{secrets.npm_token}}
green and black digital device

如何用 CURL 看证书信息

在进行证书故障排查的时候,难免要查看证书信息。不过目前的浏览器在设计上,查看证书详情变得困难很多,因此,你可以借助 CURL 来查看证书信息。

具体的命令

 curl --insecure -v https://域名 2>&1 | awk 'BEGIN { cert=0 } /^\* SSL connection/ { cert=1 } /^\*/ { if (cert) print }'

返回结果如下,其中包含了域名证书当中的过期时间、申请者等核心信息,方便你进行排查。

➜  ~  curl --insecure -v https://www.ixiqin.com 2>&1 | awk 'BEGIN { cert=0 } /^\* SSL connection/ { cert=1 } /^\*/ { if (cert) print }'
* SSL connection using TLSv1.2 / ECDHE-RSA-CHACHA20-POLY1305
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=www.ixiqin.com
*  start date: Aug 15 00:00:00 2021 GMT
*  expire date: Nov 13 23:59:59 2021 GMT
*  issuer: C=AT; O=ZeroSSL; CN=ZeroSSL RSA Domain Secure Site CA
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7fe096810a00)
* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
* Connection #0 to host www.ixiqin.com left intact
* Closing connection 0