月度归档:2021年08月

Hello World text

彩云翻译 API 丢失换行的问题

在使用彩云翻译的 API 进行应用开发的时候,遇见了一个很尴尬的问题,提交上去的内容会丢失换行。

示意图

于是给彩云翻译的邮箱发了一封邮件,一天后,我就收到了官方人员的微信好友邀请(因为我的微信写在邮件的footer)。

经过一番沟通后了解到,目前彩云翻译的 API 会默认移除换行符 & HTML 标签,因此,在开发时,暂时还需要自行对文本进行切割,提取其中的文本内容,按段进行翻译,解决这个问题。

不过,官方也在反馈,会评估提供翻译 HTML 文档的能力,期待一下吧。

orange pink keyboard

发布 NPM 包时,遭遇 You should bug the author to publish it (or use the name yourself!) 怎么办?

在发布一个 NPM 包时,我遭遇了这样的一个问题:

You should bug the author to publish it (or use the name yourself!)

经过查询后发现,是因为我之前使用的 Login Token 失效了,在这种情况下,只需要重新执行npm adduser添加用户,即可解决问题。


我之前以为是 login 没用,要 adduser 才能使用,后来查询了一下 npm 的文档发现 login 是 adduser 的一个别名,二者功能是一样的,因此,不存在 login 的权限不如 adduser 的问题。

orange pink keyboard

如何控制发布到 NPM 中的文件?

如果你使用 Typescript 编写 npm 包,可能会发现自己编写的 ts 文件也被发布到了 NPM 上去。

一般来说,这个其实并没有什么,除非你的包并不开源,又或者你有精神洁癖,希望用户看到的包的文件目录是足够简单明了的。

这个时候,你可以借助 npm 中的 files 这个字段,来控制你需要上传的文件。

比如,如果你按照下面的方式配置 files 就可以控制你的包在发布时,只发布有限的文件,比如必须的 package.jsonLICENSEREADME 以及构建产物 dist 文件夹。

{
   "name":"your-package",
   "files":[
     "package.json",
     "README.md",
     "LICENSE",
     "dist"
   ]
}
black and silver laptop computer beside yellow ceramic mug

PowerShell 禁止运行 node.js 脚本如何解决?

对于一些比较流程化的工作,我希望将其自动化,因此我写了一个脚本,帮助我来完成这个基本的工作。

但在写完后,发现了一个问题:

helper: 无法加载文件 C:\Users\bestony\AppData\Roaming\npm\helper.ps1,因为在此系统上禁止运行脚本。有关详
细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 1
+ helper
+ ~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [],PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

这个问题倒是不复杂,是因为 PowerShell 相比于 CMD 拥有更全面的权限控制。如果想要解决的话,有两种方式:

1.换用 CMD

在目前的 Windows 中,依然是 CMD & PowerShell 双轨制,你可以直接使用 CMD 来执行你的命令,就无需关注这个权限的问题了。

2. 关闭权限

如果你需要继续使用 PowerShell,就要关闭 PowerShell 的校验,使用管理员模式打开 PowerShell,并执行如下命令,来关闭 PowerShell 的校验即可。

set-ExecutionPolicy RemoteSigned
Open LED signage

如何为任何开源项目做贡献?

在《如何成为Golang贡献者》中,我介绍了, 我对于 Golang 的第一个贡献是修复了一处 Typo ,这是整个开源贡献中可以说是最简单的一部分。

那如果你现在是一个新人,希望参与到项目中,或希望走通整个贡献的流程,那么修复 typo 是一个不错的选择。但对于新人来说,通过阅读代码来查找 typo ,显然不是一个很好的选择。

在这种情况下,自然会产生一个问题:“有没有一种方式,可以让我快速找到 typo 呢?”

答案是肯定的,我们可以借助一些拼写检查工具,来检查具体哪些代码文件中存在 typo。

流程

这里我使用的是 Client9 的 Misspell ,一个基于 Golang 写就的拼写检查工具(用 golang 的拼写检查工具来检查 golang 源码,很合理)。

这个工具的下载安装十分简单,执行如下代码即可安装:

curl -L -o ./install-misspell.sh https://git.io/misspell
sh ./install-misspell.sh

安装完成后,即可使用 misspell 命令来进行拼写的检查。以 django 项目为例,具体的执行命令如下:

git clone git@github.com:django/django.git
cd django
misspell ./*

可以看到打印出了 misspell 认为可能是 typo 的地方,

结果

接下来你要做的就很简单了,根据 misspell 的结果,查找具体的文字,确保是否真的是 typo,如果是真的 typo,就按照项目的贡献规范进行贡献即可。

总结

借助 misspell,你可以很轻松的给一个项目快速的开始贡献代码,但如果真的是希望参与到开源社区当中,一定不能只是做 typo 的修复。typo 修复一般来说都是开源前辈留给后辈学习用的,对于实际的贡献者而言,除了熟悉流程,并没有太多的价值,因此,你还是需要将开源项目应用在自己的工作生活中,并解决一些实际的问题,才会更有价值。

如何成为 Golang 贡献者

是的,我成为了 Golang contributor

我的第一个 contribution

在听完了 Go 夜聊的第 2 期播客后,我突然觉得,嗯,我是应该加入一个社区,而不是总是以一个创建者的身份去创建开源项目。可以有一个新的视角。

于是,我选择了加入我最常写的三种语言其一的 Golang。

然后接下来的问题就是,应该如何做贡献?

我查阅了一些资料,完成了此次贡献。并将其记录在此,希望可以帮到你。

贡献流程

0. 系统依赖

给 Golang 做贡献需要一些基本配置,这里不再赘述,只写明要求:

  • 安装了 Golang
  • 安装了 Git

1. 找到你要贡献的问题

实际上,既然要贡献,首先你要解决的问题是,你想贡献什么问题?绝大多数的贡献都是基于某一个特定的问题进行的。

2. 签署 Golang CLA,配置基本信息

golang 的贡献是基于 Git 进行的,因此,你在贡献前,需要确保你的各项基本信息是复合要求的。比如,你要在网站上签署 CLA(Contributor License Agreement);你的 Git Username 和 Git Email 应该符合和你签署 CLA 的信息是符合的。

签署完成后,可以使用你的 Google 账号登陆 https://go-review.googlesource.com/login/,注册一个账号。后续的 Code Review 也会在这里进行。

3. 配置 Password 、Git 等信息

需要注意的是,目前 Golang 无法从中国大陆提交贡献,所以你应该在一台海外服务器上进行贡献。以确保可以提交。想了解具体情况,可以查看附录中的 GitHub issue #20065

Golang 在提交时,是通过 Git 提交的,不过和一般我们常用的 HTTP 账号密码鉴权 or Key 鉴权不同,Golang 采用的是 GitCookies 进行提交的。因此,你需要配置 Git Cookies。

访问 go Git repositories – Git at Google (googlesource.com),登陆后,点击右上角的 Generate Password

点击这里

在新的页面中,复制下方蓝色框体中的 bash 代码,并粘贴在你的 Shell 中粘贴并执行,即可配置好 Git Cookies

蓝框里本来是 Shell 命令,被我 F12 给改了

4. 安装 Code Review 工具

在服务器上执行如下命令,安装代码提交工具

go get -u golang.org/x/review/git-codereview

安装完成后,执行如下命令验证

git-codereview help

5. Clone 代码并提交贡献

接下来的就很简单了,和我们日常贡献代码很接近了

5.1 clone 代码并执行测试

首先你需要 clone 代码,并执行测试,确保你 clone 的代码本身是没问题的(不然可能会出现你改了一大堆,发现问题不是你自己的)

git clone https://go.googlesource.com/go
cd go/src
<meta charset="utf-8">./all.bash # 执行测试,如果看到 ALL TESTS PASSED 则说明代码没问题。

5.2 修改代码

修改代码按照我们一般的分支协作的方式来进行即可

git checkout -b feat/xxxx
# 修改文件...
git add [files...]
git codereview change # 为你的贡献创建一个 commit

5.3 提交代码

完成代码贡献后,你就可以准备提交你的代码了。不过,你还是要跑一次测试,确保你的修改没有导致某些地方坏掉。

./all.bash # 执行测试,如果看到 ALL TESTS PASSED 则说明代码没问题。
 git codereview mail  #提交你的代码

6. 进行 Code Review

提交完成后,你就会在 https://go-review.googlesource.com/ 上有一个新的 Change 的记录,然后系统会自动帮你分配 Maintainer 进行 Review,这个阶段如果 Reviewer 没有给你提出需要修改的话,你只需要等待你的代码被合并即可。

需要注意的是,Golang 对于代码的合并有要求,需要 2 个 +2 才能合并到代码库中。因此,你的代码可能会很快被某个 Maintainer Review,但很久才被另外一个 Maintainer Review (其实也没多久,只是相比于第一个)

当两个都合并完成后,左上角的标识就会变成 Merged ,此时就说明你的代码贡献成功啦!

一些注意的点

1. 关于中国区无法提交的问题

如果你使用自己的本地电脑进行提交,你会发现,你会收到一个报错

Access Denied (not available from your location)

这是因为 Golang 官方禁止了中国区的提交,将 golang 源码对于中国区进行了只读状态的设置。

这并不是 Golang 不欢迎中国开发者贡献,只是对于 GFW 封禁 golang.org 的一种抵抗。

Maintainer 的解释

你只需要将贡献环境从你的本地电脑,换成任何一个海外的服务器,就可以正常提交。

来源:access to Gerrit denied because of location · Issue #20065 · golang/go (github.com)

2. Commit Message 格式

golang 的 commet message 有自己的格式,你在提交的时候可以以这个格式进行提交,这样后续就不需要 Reviewer 帮你改了。

[模块] 修改内容
详细信息
Github link

给大家举个例子,大家就知道是什么样的了。首先,下面这个是我自己的 commit message

typo: fix reponse to response in src/net/http/header.go
Change-Id: I238bc90c4f273c352ef924989a44c6e927839128

Reviewer 帮我调整后的格式

net/http: fix typo in header.go
Change-Id: Ia6df881badf9a704c7f56967404d37e230b88a09
Reviewed-on: https://go-review.googlesource.com/c/go/+/343969
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Damien Neil <dneil@google.com>

更加简单明了。

Change ID、Reviewed on、Reviewed by 是系统自动添加的,你不需要关注。

来源:Contribution Guide – The Go Programming Language (google.cn)

相关链接

human

人需要意义

Freelancer 久了,很容易陷入一个迷茫的时间点:

我需要做什么?我到底是谁?

在这种状态下,你会难免遇见失意、无所事事、看不到下一步计划的情况。在这个时候,一个好的办法是,让自己忙起来。

忙起来,通过工作找到属于自己的意义。

当然,实际上在今天,你可以有很多种方式来找寻自己的意义,成为一个 UP 主、成为一个创作者,让自己产生价值。

human

生来是苦?还是生来是乐?

我在收听的《调试者说》中的最新一期提到了一个广为流传的说法:

「人生来就是痛苦的」

期间主播提到自己其实并不是特别认可这个说法。

我也想谈谈我对这个问题的看法。

「人生来就是痛苦的」和「人生来就是快乐的」其实是一个镜像观点。二者区别是立足于乐观和立足于悲观的问题。

人生来就是痛苦的是上一代人广泛的观点,这样的观点让他们可以苦中作乐。当他们认为这世界上的所有的事情都是痛苦的时候,那所有不痛苦的事情,都会变成一种恩赐。

反之的则是认为任何事情都是快乐的,会让你更美好的对待每一件事。但可能会在出现问题时,让你的整个认知体系崩塌。

不过,在我看来,二者都不是一个好的选择。

我们应当抽离出来看,事情就是事情。人生就是人生。事情没有喜乐悲哀。人生也没有喜乐悲哀,这样才能更好的生活。

white and brown city buildings during daytime

从疫情封城谈共产主义与资本主义

今天在听播客的时候,主播提到了,在法国,封城如果出门是需要自己按照政府的给出的模板,自行打印或手写,然后出城的。对比同样在处理封城的国内,采用的是统一发放的出门卡,每次出门 N 次的模式。

主播感受到:“我第一次感受到自己被当成一个成年人在对待,政府相信我会为我自己的每一个行为负责”

对比这个,让我想起了共产主义和资本主义。

我国很多时候为什么不会选择「相信民众」的方式?我觉得主要是两个原因:

  1. 人均素质:据第七次人口普查结果显示,中国大学生(大专及以上)的人数为 2.18 亿人,占总人口的 15.5%。你身边每 6 个人就有一个不具备大专及以上的文凭。对于这些人来说,他们可能并不能很好的理解自己所做的事情产生的问题。而同样的问题我们放在法国去看,法国约 6000 万人口;大学入学率 64%,毕业率 47%(中国同期为 25.71),法国每2个人有一个人无法很好的理解自己所做的事情所产生的问题。从人口素质上而言,法国人确实比我们的素质更高,具备执行这样政策的可能。
  2. 体制限制:在谈及这个问题时,我突然在想。资本主义政府想的是,我相信民众,那共产主义政府想的是什么?想了一下,共产主义政府想的是「如何尽可能的保证社会的底线不要太低」。共产主义和资本主义所追求的目的并不相同,资本主义追求的是资本的最大化。而共产主意追求的是全体人民的福祉。从这个角度出发,使得共产主义政府无法选择只满足一小部分人的利益。

我们作为人群中的「优秀者」、「有价值者」,我们当然可以追求政府只为我们服务,但也需要考虑,这个社会还有很多远不如我们的人,他们依然还在辛苦的生存。在这个时候,我们除了考虑自身的福祉以外,也需要考虑他人的感受。

如果我们希望体制是「保护优秀者」的体制, 那就可以去追寻资本主义体制。但也需要明白的是,世事无常,我们能保证自己当下是强者,但我们可能无法保证自己终生是强者。如果恰逢我们成为弱者之时,需要我们牺牲,我们可能就成为那个无法被保护的人。