editorconfig 配置文件说明

在一些开源项目的根目录中会有一些 .editorconfig 文件,看名字也能大致猜出来是编辑器的配置文件,这个文件的主要内容就是编辑器编码、缩进等等配置。

editorconfig 可以跨不同编辑器,为不同的 IDE 维护一份一直的编码风格配置文件。

  • 使用 Tab 还是空格进行缩进
  • 缩进多少格

样式定义举例:

[*]
end_of_line = lf
insert_final_newline = true

第一行为通配符。

文件通配符

editorconfig 中可以使用正则来匹配文件,对匹配的文件使用之后定义的配置。

比如例子中的 [*] 就表示的是匹配所有的文件。

这个通配符类似正则表达式。

  • * 匹配除 / 之外的任意
  • ** 匹配任意字符
  • ? 匹配单个字符
  • [name] 匹配指定字符
  • [!name] 匹配非指定字符
  • {s1, s2, s3} 匹配多个字符
  • {num1..num2} 匹配 num1 和 num2 之间的任意字符。

指定文件

如果要指定为 Markfile 文件设定格式:

[Makefile]
indent_style = tab

也可以指定多个文件,使用 , 分隔:

[{package.json,.travis.yml}]

指定文件类型生效

如果要匹配所有的 Python 源文件和 JavaScript 源文件可以使用:

[*.{js,py}]

指定路径

指定路径下的所有文件:

[lib/**.js]
indent_style = space
indent_size = 2

配置语法

缩进风格:

indent_stype

可选值:

  • space 空格
  • tab Tab 制表符

缩进大小:

indent_size

通常会设定 2 字符或 4 字符。

换行符号类型:

end_of_line

可以是:

  • lf 换行,Unix 和 Linux 下的换行
  • cr 回车,macOS 下的
  • crlf 回车换行,Windows 和 Dos 下

编码格式:

charset

通常会:

  • utf-8
  • utf-8-bom
  • utf-16be
  • utf-16le

文件末尾是否插入空行:

insert_final_newline

如果配置 true 则在文件末尾插入空行。

常用的例子:

# top-most EditorConfig file
root = true

# all files
[*]
indent_style = tab
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

# .md file
[*.md]
trim_trailing_whitespace = false

所有其他的配置可以见 官方 Wiki

IDEA 配置 editorconfig

JetBrains 的 IDEA 可以安装 editorconfig 插件。

Vim 配置 editorconfig 插件

在 Vim 下使用 vim-plug 插件管理器,添加 editorconfig-vim 插件

Plug 'editorconfig/editorconfig-vim'

source .vimrc ,然后 : PlugInstall 即可。

其他编辑器可以查看 官网

reference


2022-12-10 editorconfig , editor , ide , vscode , indent , code-format

发布和制作 torrent 文件

本文主要总结和记录一下制作和发布 torrent 的过程。

制作种子文件

制作一个种子文件的方式有很多,熟悉命令行的朋友可以直接使用命令行制作,如果在 Windows,或 macOS 下的朋友也可以使用 UI 界面,或相关的工具来制作。

种子文件是用来维护和协调文件下载和分享的一种文件格式。这种文件通常包含了文件的哈希值(即校验和)、文件名和文件大小等信息,以及用于协调文件下载的若干个服务器的地址。这些服务器的地址被称为 trackers。

在 BitTorrent 协议中,trackers 用于协调客户端之间的文件分享。当一个用户想要下载文件时,他可以打开种子文件并把其中的 tracker 服务器地址提交给客户端。客户端会向这些 tracker 服务器发送请求,然后 tracker 服务器会返回一组已经下载了文件的客户端地址。客户端可以通过这些地址找到其他已经下载了文件的用户,并从他们那里获取文件。

在制作种子文件的过程中有几个概念需要提前了解一下:

  • Trackers,协调客户端之间的文件分享
  • Private,种子文件中有一个 Private 标志,文件 Private 设置为 True 则表示文件的下载和分享只能在特定的 tracker 服务器或客户端之间进行

命令行制作种子

通过命令行制作种子,可以参考 这篇文章

主要借助的命令行工具是:

  • mktorrent
  • transmission-cli 中的 transmission-create

通过界面制作种子

通过 UI 界面制作种子一般需要本地安装一个 客户端 ,比如常用的 Transmission,或 qBittorrent,等等。

这里以 Transmission 客户端为例,来演示如何制作种子文件。首先准备需要分享的文件内容,记住其所在的位置。

首先打开 Transmission,点击左上角的 + 号,创建一个 torrent 文件。

create torrent in transmission

这个时候 Transmission 会要求你选择一个文件,或者选择一个文件夹,此时选择需要分享的文件(或文件夹)。

然后 Transmission 会弹出如下的弹窗。

transmission torrent

  • Trackers 中填入服务器提供的地址。
  • Comment 中可以任意填写
  • 勾选 Private
  • 选择 Torrent File 的位置

最后点击 Create 创建。

对于另外一些客户端,可能会要求用户选择区块的大小,如果文件大小比较适中,选择 4M 或 8M 即可,如果分享的文件内容超过 TB 级别,可以适当选择 16M 或更多。

上传种子文件

制作好种子文件,下一步就是将种子文件分享出去。登录一个 PT 站点, 比如 GTK ,然后访问 发布 页面。

编写标题

按照要求,一般在标题中填写资源的英文名称。

副标题中填写中文译名。

pt title rule

获取简介

PT-Gen

pt introduction

油猴脚本:豆瓣资源下载大师

可以通过在浏览器中安装 油猴脚本:豆瓣资源下载大师 ,然后在设置中开启「电影简介生成」。

douban userscript pt gen

刷新页面,就能在词条页面中看到 movieinfo

douban movie info

复制该信息即可。

如果怕豆瓣图片的防盗链机制,可以将海报封面重新上传到稳定的图床。[[电影海报网站]]

MovieInfoGen

电影信息查询脚本 是一个专注与通过豆瓣页面生成 PT 简介信息的用户脚本。

其他

获取 mediainfo

mediainfo 的内容一般会用 quote 代码框起来,比较美观

  • 使用 ffprobe 查看 Media Info
  • 使用 MediaInfo 软件生成
  • 一般在你源文件所在的 pt 站的种子页面会有
  • 可以用 ruTorrent 获取
  • PotPlayer 仅限 Windows

使用 ruTorrent 获取 mediainfo

  • 可以用 ruTorrent 获取
    • 点击种子,然后选择文件(Files)
    • 在文件上右击获取媒体信息(Media Info)

rutorrent media info

本地 PotPlayer 获取

仅限于 Windows。本地用 PotPlayer 打开媒体文件,右击,选择属性(Ctrl+F1),然后在文件信息中,将信息复制到粘贴板。

如果发布的是原盘,可以使用 bdinfo 软件获取。

[quote] Mediainfo/BDinfo [/quote]

发布种子

完成所有信息的填写,之后,点击发布。PT 站会自动重新下载一个新的种子,该种子包含了用户的个人信息,然后重载在客户端添加此种子,即可开始做种。

种子信息编辑

  • [[BEncode Editor]] Windows only
  • [[Torrent File Editor]] Windows, macOS

2022-12-09 torrent , mktorrent , tracker , private-tracker , transmission , rtorrent

动态规划问题梳理

很久以来一直没有好好地梳理一下 Dynamic Programming 的问题,虽然 DP (动态规划)的问题一直出现,但每次遇到总是会卡壳一下。既然前人已经将这一类问题总结成一个专有名词了,那就证明这一类的问题已经可以用一套现成的模式来解决,这篇文章就整理一下 DP 问题的常见模式。下面的部分内容是看了 MIT Dynamic Programming 的公开课之后总结得出,教授用一个 Fibonacci 的问题,自顶向下,自底向上,去系统的讲了什么是 DP。 DP 就是递归问题再加上把求解的子问题结果存储「记忆」。这个教授将什么是 DP 问题一下子就解释清楚了。

动态规划是一种分阶段求解问题的思想。用简单的话归纳动态规划就是 递推+记忆。通过子问题递推出原始问题,通过额外的空间来存储子问题解。

Simplifying a complicated problem by breaking it down into simpler sub-problems ( in a recursive manner)

类似递归问题,没有本质区别,但是动态规划的区别在于,只需要存最优的状态,推导出全局最优。

DP 算法最初由 Richard Bellman 发明。DP 就是 recursion(递归) + memorization (子问题结果记忆)

DP 问题如果从子问题开始往上推导,那么就可以将递归的写法变成循环的写法。这也就是为什么在讲斐波那契数列的递推的时候,通常会有两种写法。如果已经求解了子问题,那么从下往上递推,就可以使用循环(而非递归)来求解问题了。

Fibonacci

先来看看最经典的 Fibonacci 数列的求解方法。

如果使用递归,指数级复杂度 O(2^n)。

public int fib(int n) {
    if (n == 0 || n == 1) {
        return n;
    }
    return fib(n - 1) + fib(n - 2);
}

但是如果引入一个数组来存储以及计算过的结果,可以进一步降低时间复杂度,从指数级降到 O(n) 的复杂度。

更进一步可以将空间复杂度也从 O(n) 降到 O(1)

    public int fib(int n) {
        if (n == 0 || n == 1) return n;
        int[] dp = new int[2];
        dp[0] = 0;
        dp[1] = 1;
        for (int i = 2; i <= n; i++) {
            int temp = dp[0] + dp[1];
            dp[0] = dp[1];
            dp[1] = temp;
        }
        return dp[1];
    }

如果我们在脑海里模拟 Fib(n) 的原始求解步骤,自顶向下会发现是一棵向下的二叉树,求解 Fib(n) 首先要求解 Fib(n-1) 和 Fib(n-2),而与此同时又需要进一步求解 Fib(n-2), Fib(n-3) …….等等,并且向下求解的过程中我们会发现很多重复的计算过程。这个时候就需要看到 DP 问题的第二个特征,memorization(子问题的记忆化)。如果能够将子问题的结果保存下来,那就可以避免很多的重复计算过程。

Climbing Stairs

再来看一个相似的简单爬楼梯问题,假设有一个 n 阶的楼梯,每次可以爬 1 阶或 2 阶,问有几种方式可以爬到顶。

同样如果 n 是 2,那么可以是 1+1,或者 2。如果是 n 是 3,那就可以是在 n = 2 的时候往上爬 1 阶,加上 n = 1 的时候往上爬 2 阶。

Count the paths

再来看看延伸一些的问题,如果在一个 m * n 的棋盘上从左上角走到右下角,每次只能走右或下,请问有多少种走法。

将原始的问题拆分为子问题:

count path solution

编写伪代码:

int countPaths(boolean[][] grid, int row, int col) {
    if(!validSquare[grid, row, col]) return 0;
    if(isAtEnd(grid, row, col)) return 1;
    return countPaths(grid, row+1, col) + countPaths(grid, row, col+1);
}

状态转移方程:

opt[i, j] = opt[i+1, j] + opt[i, j+1];

if a[i,j] is 空地:
    opt[i,j] = opt[i+1, j]+opt[i,j+1]
else:
    opt[i,j] = 0

解决动态规划问题的一般思路

5 个步骤:

  • define subproblems 定义子问题,分治思想
  • guess (part of solution) 递推方程
  • relate subproblem solutions 子问题的解合并
  • recursive & memoize or build DP table bottom-up 递归和记忆,DP 状态表(存储中间状态),自底向上递推
  • 解决原始问题

如果要去学习和理解 DP 问题就必须打破原有的思维习惯,去理解机器思维,因为机器只能执行 if, while, for,条件,循环,递归等等。也必须要去锻炼拆分复杂问题的能力。


2022-12-09 dp , dynamic-programming , algorithm , computer-science

我们的尊严来自于自由

「自由」这一个词是一个非常抽象的词汇,最近这个词出现的频率越来越多,新闻自由,言论自由,信仰自由,政治自由,人们走向街头不断地呼喊自己所理解的「自由」。我们只有更好的理解我们所说的「自由」才能更有自信地去争取自由。

用英文去表达自由有两个词,freedom 和 liberty。

  • liberty
    • 在牛津词典中的解释是
      • freedom to live as you choose without too many restrictions from government or authority
      • the legal right and freedom to to something
    • 在 Longman 字典中的解释是
      • the freedom and the right to do whatever you want without asking permission or being afraid of authority
      • legal right
    • 在 American Heritage English 词典中:
      • Freedom from unjust or undue governmental control
  • freedom,再来看看字典上对 freedom 的解释
    • 牛津词典:
      • the right to do or say what you want without anyone stopping you
      • the state of being able to do what you want, without anything stopping you
      • 与之相对的就是 prisoner 或 slave
    • Longman 词典:
      • the right to do what you want without being controlled or restricted by anyone
    • American Heritage English 词典中进一步补充到:
      • Exemption from an unpleasant or onerous condition,免于不愉快,麻烦的状况
      • the capacity to exercise choice; free will,选择的能力

从这个英英的解释中我能够提取出来几个关键字,without restrictions from authoritythe capacity to exercise choice,自由意味着免于「任何人」,「任何组织」,「任何政府」的控制,自由的人可以根据自己的意愿选择做什么,说什么。在牛津字典中给出了两个自由的反例,恰好也回答了我们为什么要争取自由,不自由的两个例子就是 prisoner 或 slave。

但上面的解释都是字面的含义,真正的自由当然不是想做什么就做什么。

什么是自由

  • [[黑格尔]] 说,为了纯粹的明誉甘愿冒死决斗,才是人之为人的东西,这是自由的基础。
  • [[密尔]] 说,公民自由是社会所能合法施用于个人的权力的性质和限度。自由是对于政治统治者暴虐的防御。
    • 密尔在[[论自由]]一书中讨论的不是自由意志,而是「公民自由和社会自由」,即社会可以合法地施加于个人的权利之性质和界限。
  • [[卢梭]] 在 [[社会契约论]] 中说,只有服从了社会为自己所设之规定,谓之法律的,才叫做自由。
  • [[波普尔]] 在 [[通过知识获得解放]] 说,自由不单是观念形态,而是使生活更美好、更值得度过的一种生活方式。
  • [[康德]] 说,自由不是想干什么就干什么,而是想不干什么就不干什么。
    • 自律即自由
  • [[勒尼德·汉德]] 说,自由就是对「何为正确」不那么确定的精神。
  • [[罗斯福]] 总统提出过「四大自由」,[[言论自由]],信仰自由,免于匮乏的自由,免于恐惧的自由。
    • 每一个人对自己生命和公权力之前的关系,有稳定的、正当的预期。
  • [[赛亚 伯林 伯林]] 说,「自由的根本意义是摆脱枷锁、摆脱囚禁、摆脱他人奴役的自由。」
  • [[哈耶克]] 说,「愿意放弃自由来换取保障的人,他最终既得不到自由,也得不到保障。」
  • [[赛亚 伯林]] 更进一步将自由分成 [[消极自由]] 和 [[积极自由]],对应着英文的「free from」和 「free to」。消极自由指的是免于「干涉」的自由,我不想做什么就可以不做什么;而积极自由指的是我想做什么就可以做什么,实现目标的自由,成为自己的的主人。

言论自由、思想自由、出版自由

密尔在《论自由》中沿袭了密尔顿、洛克等英国自由主义传统,广泛的出版自由。密尔将人类获得真理视为绝对的善,因为获得真理可以使人进步,思想言论自由的价值并不在于它是个人的权利,而在于它能够有助于人类获得真理。

每个时代都曾持有很多被后代认为不仅错误而且荒谬的看法,可以确定的是,现在流行的很多看法将会被未来的时代所抛弃。只有经过讨论,错误的意见和行为才会逐渐屈服于事实和论证,这更一步地反证了只有思想自由才能促进社会进步。

即使我们认为我们已经掌握了真理,也要坚持言论自由,如果禁止对真理的挑战,真理就会僵化,变成死板的教条,最后丧失为自己辩护的能力。真理只有在谬误公开的冲突中得到考验,才能使真理充满活力,使大众对真理的认识更加全面、深刻。

[[霍姆斯大法官]] 为言论自由辩护,人们所希望的最终的善,最好通过思想的自由交流实现,对真理的最佳检验,在于思想在市场竞争中获得的力量。

霍姆斯认为政府没有必要,也没有能力,干预不同思想的之间的自由竞争,因为政府或者任何人都无法实现对真理的垄断。

霍姆斯甚至认为美国制度就是一场自由探索的实验,一种制度并不一直提供一劳永逸的乌托邦的思想,但可以为制度之下的人们走向真善美提供自由的机会。也只有不断的自由交流和公共讨论的过程中,这种制度才会修正错误,赢得稳定和活力。

真理自由观的问题在于,通过思想市场的自由探索是不是一定能够获得真理,或者实现真理战胜谬误。

言论在某种意义上是更好被操纵的,[[罗尔斯]]在政治自由主义中看到的那样,不能指望具有理性力量的人们,即使在自由讨论之后都达到同样的结论。

那这样真理自由的意义何在,我想最大的意义并非是能够找到某种确定的答案,而在于思想竞争和自由交流的过程本身,它们使得一个社会成为了开放的社会,使得一个人成为了开放的人,无论开放的社会有多少的问题,生活在开放的社会,总比生活在封闭的社会,对人的发展而言总要更加值得。

政治自由

政治自由,通常指的是公民有权利参与到公共事务,包括选举和被选举,对权力发表不同的意见,广义的政治自由还包括上面提及的出版自由,集会自由,结社自由,游行示威自由,无罪推论。1

自由的原则成为了民主的重要途径,公共事务必须交给公众决定,这并不是因为公众的意见本身是对的,或者有见地的,而是因为公众的意见不可忽视。

民主的决策很多时候无关专业科学的判断,而只关乎利益,立场的决择,所以让每个人都发出声音,这在进行民主决策时非常重要,这样依赖, 自由本身就蕴含着平等,甚至深化了民主的平等。

自由不仅意味着随心所欲,而且意味着公共责任,民主的自由观,之所以相信自由在民主生活中的价值,还有更深刻的理由,人的天赋,条件,能力,千差万别,只有通过自由的言说,自由的实践,才能为人的才能的发挥提供最大化的机会,才能使人们更理性,更明智,更有判断力,从而减少被统治者欺骗的可能。正确的看待政府与人民的关系,并且把人们从非理性的恐惧中解脱出来,人们曾经因为害怕巫婆就烧死女人,人民曾经因为激情盲目而选择了纳粹,正如美国 [[布兰代斯大法官]] 所言,对自由的最大威胁,在于人的惰性,不鼓励思想、希望和想象是危险的,恐惧会产生镇压,镇压会产生仇恨,仇恨会威胁政府的稳定,言论自由是有风险,但是压制言论自由的风险更大。

自由对理性责任精神的强调则蕴含着民主的有限政府理念。自由的重要性不仅在于不受政府和他人的干预,更在于通过积极的行动来推进公共政策,实现利益的妥协和社会的正义。

西方社会已经认识到,词语比刀剑更有影响力。完美的社会是不可能的,但是一些秩序要胜过一些秩序。立法的任务是允许每个个人的最大自由和其他人的最大自由并存。自由必须受到法律的限制。秩序是自由的必要平衡。

当社会本身就是暴君时,当社会集体凌驾于组成它的个体之上时,暴政的实施就不限于借助政治机构之手而行的各种措施。社会如果执行了错误而非正确的命令,或者对它根本不应干涉的事务发号施令,那么它便实行了一种比其他各种政治迫害更为可怕的社会暴政,不以严厉的惩罚为支撑,但却由于更深入地渗透到人们生活的细节,束缚了人的身心,从而使人们更加无法逃脱。

为什么要争取自由

从伯林对自由的分类正好可以总结出两点:

  • 免于被奴役,被控制
  • 追求自己的理想和目标

上至苏格拉底,到集大成者的康德,都强调自由代表了人的尊严和美德。人必须过一种神圣的、善的生活,没有这种内外统一的实践,人就不能称其为人,自由意志合乎道德的意志,「人是目的,而非手段」,人要理性自律,不能屈从他律。

reference

  • [[论自由]]
  • [[言论的边界 美国宪法第一修正案简史]]

2022-11-30 freedom , free , pree-freedom , political-liberty , liberty , freedom-of-speech , free-speech

在日本生活必备的应用收集整理

在上一篇梳理了一下如何 注册日区的 Apple ID ,其实主要是为了这一篇整理做准备,有很多的应用,如果不是日区就安装不了,并且如果要在日本生活有一些应用还是非常重要的,所以就提前梳理一下需要用到的应用。

免责声明,因为本人此刻并没有在日本长期生活过,下面的所有内容都是我个人在搜集资料的过程中,或因本人需要,或因为其他人推荐,才收集整理得出,可能会有一些偏差,如果有读者发现任何问题,可以随时留言告诉我,我会立即修正。 另外如果有朋友长期居住在日本,平时有用到一些不错的本土应用也欢迎留言告诉我,待我尝试之后我也会补充到文章中。 希望本文可以给想要去日本旅游,或者想要去日本常居的朋友一些帮助。

租房

  • SUUMO,日本最大的租房网站

交通

要加深对日本的印象就首先从地理位置上开始认识,而城市规划,尤其是公共交通的设计,在没有用乗換案内之前我都只能在网页版的 Google Maps 上一点点得搜站点的名字,然后查看其相对的位置。

我在出门旅行也好生活也好,通常都会提前看一个这个城市的轮廓,以及集中重点的景点的位置,在 Google Maps 上用 Star 标记一下,有时间了还会用 My Maps 规划一个最优的路线,以免在陌生的地方来回重复的走回头路。

  • 「Yahoo!乗換案内」,日本的电车非常发达,下载了一张东京都的地铁线路图得放大好几倍才能找到我想要查的站点,乘换案内解决了电车换乘的问题,当然用 Google Maps 也可以,但这个应用在换乘,列车到站时间等方面给的信息更多
    • 千万要注意,这个应用的图表是下图所示,中国区和美国区都有一些假冒的应用
    • yahoo transit
    • 在日区乘换案内名字的应用还挺多的,还有一个推荐较多的是一个红色 Logo 的,Jorudan Co. Ltd 出品的,我两个都下载试用了之后,还是果断推荐 Yahoo 的这个,界面设计好,并且 Yahoo 的还能提供地图线路,路线可以按照时间优先,换乘次数,以及金额排序
    • 还有一个叫做「乗換 NAVITIME」的应用,Logo 是一辆绿色的电车,使用起来体验也不错
  • Suica,电车票
  • DIDI,出行打车

翻译

  • VoiceTra,日本的情报通信研究机构开发的一款翻译应用,我之后也写了一篇文章介绍,最主要是的符合日本的国情,翻译的日语内容比较符合日本人使用习惯。我去区役所的时候工作人员也是用的这一款应用。
  • Google Translate,这就不用多说了,之前就常用
  • Papago,去韩国的时候偶然间发现的一款翻译应用,多年用来感觉比 Google Translate 还顺手,主要是界面比较简洁,并且 Papago 不仅有语音翻译,我还常用的一个功能就是拍照翻译,个人感觉比 Google 的要快一些
  • Felo 实时翻译,这是一个非常简洁的应用,设置好语言之后,只有一个按钮,就是开启实时翻译,如果设置中文和日语,在界面上马上就能识别出当前说话的内容。

Ufd3

美食

外卖

  • Uber Eats,点外卖
  • HAYA,订外卖,注册送 3000 元券,3 KM 内免费配送,支持支付宝,微信,信用卡

美食排行

  • 食べログ,美食点评,一款类似于大众点评的应用,听朋友说这上面的打分超过 3.2 的就可以尝试一下了,日本人打分可能比较严格吧。
  • ホットペッパーグルメ,Hot Pepper,可以在上面发现新餐厅,预约餐厅
  • ぐるなび,也是一款发现餐厅的应用,但是相较于上面两个信息没有那么全面

UXwL

其他

  • クックパッド,学习做菜,以及学习食材的日语
  • クラシル
搜索 {予約 よやく}{可 か} 可以筛选可以预约的餐厅。

日常生活

  • Yahoo!防災速報,第一时间通知这种自然灾害,或人为犯罪危害
    • NHK ニュース 防災 (ぼうさい) ,灾情相关通知以及新闻直播,可以用来学习日语
  • マルチコピー,打印,将文件上传到应用内,到便利店打印即可
  • SpaceMarket,租借场地,空间租赁,过生日,聚会,吃火锅比较合适
  • 楽天チケット Web 演唱会、音乐会购票
  • イープラス,演唱会门票
  • チケジャム, Web ,二手门票
  • SHEIN,衣服
  • アインズトルペ,AINZ TULPE,药妆店

理发

  • ホットペッパー ビューティー(Hotpepper Beauty),美容美发美甲等等预约,男生也可以在这上面预约理发
  • ミニモ,minimo,一个可以获得免费理发机会的应用,理发师见习,练手,所以有一定的机会可以获得免费的理发,当然你不建议被理坏的话。

    旅行

  • じゃらん 官网 日本本土最大的旅游预订网站,汇集了日本各地景点,可以用来订酒店,订机票。因为 Jalan 会和众多的民宿、酒店合作,在上面搜索说不定能找到价廉物美的温泉酒店。
    • 週刊じゃらん,一个注重周末旅行的应用,可以在上面预约啤酒厂见习,温泉旅行等等周末活动。
  • アソビュー,アソビュー是一款由日本 NTT DOCOMO 开发的应用,旨在为用户提供各种娱乐活动的信息和预订服务。该应用提供了包括餐厅、旅游、演出、运动等在内的各种娱乐活动的信息和预订服务,并且可以根据用户的兴趣和位置推荐相应的活动。用户可以通过该应用轻松地查找并预订各种娱乐活动,享受丰富多彩的生活。
  • YAMAP,一个为登山爱好者定制的地图,可以查看登山路线
  • アソビュー! ,一个集合了游乐园,水族馆,博物馆,展望台,美术馆的应用,可以在里面预约,买票等等

    网购

  • Amazon JP
  • メルカリ,日本的二手物品交易市场,虽然日本的线下二手店市场已经非常发达,但是在线的市场还是得用它。
    • 同类型的还有:
    • ヤフオク,Yahoo 旗下的二手拍卖网站 Web
    • ラクマ,乐天旗下 Web
  • 楽天市場, Web
  • [[PayPay]],移动支付,使用之前需要注册账户,绑定银行或电子钱包。

其他

  • Lemon8,日本的小红书
  • iMuseum,不知道看什么展,可以在这个 App 上查看
  • チラシミュージアム,展览的海报,培养自己的美感
  • LUUP,一个电动滑板车的租赁应用,类似于国内的共享电动车。
  • くらしのマーケット,预约维修,除虫,除草等等

2022-11-28 japan , applications , daily-life , japanese , japan-life

如何注册日区 Apple ID 以及初次登录日区 App Store

之前一直使用美区的账号,但突然发现有一些 App 在美区也没有,比如去日本经常需要用到的「乗換案内」就搜不到,美区里面尽是一些冒牌的,还穿插各种广告的应用,还有很多日本本地的一些应用也几乎都没有上架美区。

比如:

  • 美食点评的「食べログ」 官网
  • 闲置物品出售的「ジモティー」 官网
  • 冲洗照片的 ノハナ(nohana) 官网
  • 等等

注册日区 Apple ID

  1. 进入日本苹果官方主页 https://www.apple.com/jp/ ,在页面下方找到 「Apple ID の管理」。
  2. 进入新页面之后,找到 「** Apple ID を作成 **」
  3. 接下来就是开始填写账户的具体信息,包括姓名,出生年月,邮箱,密码等。
    1. 这个地方可以教大家一个 Gmail 的技巧,比如你的 Gmail 账号是 demo@gmail.com ,那么 demo+jp@gmail.comdemo+hk@gmail.com 都是你的账号,Gmail 是会忽略 + 后面的内容的,另外还有一个小技巧是 Gmail 用户名中的点都是会被忽略的,所以 de.mo@gmail.comd.emo@gmail.com 同样也是你的账号 。那么这就非常方便了,我就用 demo+jp@gmail.com 来注册日区的账号就行了。
    2. 密码直接用 Bitwarden 生成一个复杂随机密码
    3. 电话号码这里一定要注意填写你能收到验证码的手机,Google Voice 的号码这里也是可以的
    4. 下面两个可选项「お知らせ」,「App、音楽、テレビ番組など」可以不用勾选
  4. 然后点击「次に進む」,猜意思也能知道是「Next」的意思

经过以上的步骤就注册了一个没有绑定支付方式的 Apple ID 了。以后的步骤就是在 iPhone 上登录这个日区账号,并完成最后的注册。

  • 在 iPhone 上的设置(Settings)中,点击最上方的头像,然后找到其中的「Media & Purchases」,记住这里一定是点击这个蓝色中间带 A 字的选项,然后点击「Sign Out」
  • 等登出之后,再点击,此时会问是否要以原来手机的账户登录 App Store,这里一定要选择「不是」
  • 然后再使用日区的用户名和密码登录,此时手机会收到二步验证的验证码
  • 下一步之后,为了保证操作步骤没有问题,可以先使用 代理 ,使用日本的 IP,然后 App Store 会弹出当前大致意思是当前 Apple ID 还没有使用过 App Store,需要完善一些一些信息,从上到下依次是:
    • 首先选择的是支付方式,需要选择 None 或者 ない
    • 然后填写姓、名,正常情况下填写英文名就可以了,如果要求一定要使用假名的名字,可以到 这个网站 生成一下自己中文名的假名名字
    • 地址的话,可以到 Google Map 中选择一个自己喜欢的地方,同样城市,邮编,电话等等,就按照个人情况填写即可,我在中间遇到的一个问题是,我复制了日语的街道名字,但是我的手机全局设置的是英文的系统,然后校验说我有非法字符,无奈我只能把地址也全用英文转写了一遍,这里可以参考 Google Map。
    • 最后点击右上方的 Next,就完成了全部的注册。

登录成功之后就会发现 App Store 中的搜索关键字也变成日文了,热门推荐应用也变了就表示可以了。

下一篇再整理一下在日本常用的 App 吧。

另外如果有人需要日区的 Gift Card,也可以到这里 咨询购买。


2022-11-24 apple-id , apple-store , app-store , japan , 日本 , 应用市场

一键将本地的照片展示在网页 Photoview 使用

在调研个人的照片托管方案的时候,发现了一款不错的,很简洁的,开源照片展示程序 Photoview。下面就简单的介绍一下。

Photoview 是一款可以在线展示相册的应用,使用 Go 和 TypeScript 编写。

Photoview 可以将本地的文件夹变成一个在线的相册,Photoview 会定期扫描本地的文件,包括照片,视频,然后将起展示在 Web 中,Photoview 还还有一个手机客户端。

Photoview 的特性:

  • 和文件系统同步,自动扫描发现,可以在 [[Samba]],[[FTP]] 甚至可以和 [[NextCloud]] 一起使用
  • 多用户支持
  • 支持共享
  • 可以提取照片中的地理位置信息,并使用 [[Mapbox]] 来在地图中展示照片
  • 支持 Raw
  • EXIF Metadata
  • 共享照片

photoview overview

使用

如果不想自己安装,那么可以通过之前我介绍的 PikaPods 来安装体验一下。注册登录之后,找到 Photoview,然后一件安装即可。

缺点

在使用的过程中,发现唯一不足的是,Photoview 正如其名,只能查看,没有任何上传和编辑的功能。


2022-11-22 photo , docker , photo , photo-management

curl 使用小技巧

使用 curlr 配置 curl 代理

如果本地 1080 端口有一个 sock 代理,可以创建 ~/.curlrc 然后放入以下内容,就可以让 curl 默认就走本地 sock 代理。

socks5 = "127.0.0.1:1080"

格式化 curl 输出内容

API 调试过程中除了使用 GUI 工具(类似:Postman)我最常使用的就是 curl 命令了 ,简单快捷,但是 curl 的输出结果不是特别友好,特别是 json 格式,会在命令行里输出成一个长字符串

使用 Python 工具格式化输出结果

curl https://test.com/api/test | python -m json.tool

使用 npm json 包格式化

npm install -g json
curl https://test.com/api/test | json

隐藏 curl 统计信息

在使用上面的格式化命令时,curl 会在输出结果前先输出一段统计信息类似:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   427  100   427    0     0  17300      0 --:--:-- --:--:-- --:--:-- 17791

可以使用 curl 的 -s 参数来隐藏这段统计信息:

curl -s https://test.com/api/test | python -m json.tool

curl -s https://test.com/api/test | json

参考


2022-11-21 curl , linux , cli , json , format

《工作、消费主义和新穷人》读书笔记

怎么知道的这一本书

前些日子去线下逛书店的时候,在书店刚进门的架子上一眼就看到了这一本,或许是这本书的名字起得太吸引眼球了,但是拿起来之后看到作者才意识到这本书是之前刚刚读过的 [[现代性与大屠杀]] 的作者 [[齐格蒙 鲍曼]] 的著作,这更让我提起了兴趣。

这本书的名字中包含了三个关键字,「工作」、「消费主义」、「新穷人」。第一个关键字「工作」,不言而喻,第二个关键字「消费主义」,虽然不断被提起,但鲜有人去解释什么是[[消费主义]],以及什么样的行为是消费主义。而第三个关键字「新穷人」,则是鲍曼提出的新概念。

关于作者

[[齐格蒙 鲍曼]] 是当代西方著名的思想家之一。生于波兰,在多个大学任终身教授。一生出版了超过 50 多本著作,包括了 [[现代性与大屠杀]]、《社会学之思》、《立法与阐释者》、《流动的现代性》、《全球化:人类的后果》,以及这一本《工作、消费主义和新穷人》,被誉为「当今用英文写作的最伟大社会学家」。

几句话总结书的内容

  • 人们创造了工作伦理
    • 用来解决工业化所需的劳动力,并为后传统社会中无法适应环境变化,无法维持生存的人提供生活必需品
    • 工作伦理本质上是对自由的摒弃。
    • 目的是把人们所做的事、认为值得做、有意义的事分离开来,把工作本身和任何切实的、可理解的目的分离开

工作

布莱恩 恩格利斯(Brian Inglis)描绘当时的情形:形成的共识是,穷人是可以被牺牲的,无论他们是否该对自己的处境负责。如果有什么办法可以在不增加社会风险的前提下简单地摆脱他们,李嘉图(Ricardo)和马尔萨斯(Malthus)肯定会建议这么做。

但并没有可以「简单地摆脱穷人」的方法,所以在长期探索之后,找到了解决方案:工作 —- 唯一体面的、道德的、可行的生存方式。

大「大量减少」穷人的过程中,工作伦理的贡献是无价的。毕竟,工作伦理主张:无论生活多么悲惨,只要它是由劳动报酬支撑的,就具有道德优越性。有了这样的道德准则,满怀善意的改革者可以宣布,社会向无收入者提供的援助应当符合「最小化原则」,并认为这个原则是向更人道的社会迈出的重要一步。「最小化」意味着那些依赖救济而非工资收入的人享有的生活质量,必须低于最贫穷、最悲惨的劳动者。

真正的穷人被识别、隔离出来(救济院,救济法),穷人开始考虑工作伦理的要求,尽管工厂工作要求苛刻,但相较于其他选项是否那么糟糕。一旦有了比较,工厂中微薄的工资和无趣繁重的苦役,似乎也没有那么不能接受,甚至令人向往。

当下以及未来,工厂工人的选择大幅减少。救济院外不救济的原则是推动「没有选择」策略的一种体现,另一种体现是引入「仅供生存」(hand-to-mouth existence)的概念,把薪水保持在一个足够低的水平,工人们只能靠它活到第二天的黎明。除了辛苦工作,别无选择。

一些额外的保险措施,对肉体的胁迫或许是最佳选择,体罚、削减工资和粮食至低与生存水平,尤其是每时每刻、没有死角地监督所有违反规则的行为,并及时处罚,能够有效地让穷人滞留于几乎没有选择的境地。

若希望工人道德完善,必须扩大其自由的边界,但是工作伦理,在早期的历史上,选择了削减穷人的选择。

这种表里不一未必是有意为之,甚至没有被意识到。

个人生活。工作为人们提供了日常所需,工作类型决定了他们生活中,在社会的合理地位。 社会秩序。工业化现代社会中,绝大多数的可支配时间、成年后的大部分岁月都是在工作中度过的。让大部分男性进入工厂工作是生产和维持社会秩序的主要手段。

工作伦理是一种工具,目的是使工人们丧失独立性,服从于工厂制度。

在美国和其他一些地方,这个新的出路是「物质激励」,对那些放弃自身独立性,服从工厂的工人给予奖励。与其宣扬努力工作通向道德高尚的生活,不如告诉大家这是赚取更多金钱的手段,不要在意「更好」,「更多」才是重要的。现在衡量人们声望和社会地位的是工资的差别,而不是勤于工作的道德或惰于工作的罪恶。

社会生存质量的权力斗争变成了获得更多金钱的斗争,经济收益成为自治自主的唯一体现。它实现了当初工作伦理在经济手段和偶尔的肉体胁迫的帮助下徒劳争取的目标。在现代生产者的思想和行动中,与其说是「资本主义精神」,不如说是以经济水平评判人的价值和尊严的倾向。把人的动机和对自由的渴望牢牢地、不可逆转地转向消费领域。决定了现代社会从生产者社会转向消费者社会。

消费主义

经济增长是衡量现代社会是否正常有序运行的首要标准。

消费者社会中,与其说经济增长取决于「国家生产力」,不如说取决于消费者的热情和活力。

消费取代了工作,把个人动机、社会整合和系统再生产链接在一起。

就像一个人如果只会赚钱不会花钱,那也没有什么值得称道的,只有买了什么东西才值得被称道。

工作在消费社会中离它对个人动机、社会整合和系统再生产交汇的能力越来越远。把穷人的悲惨遭遇归咎于他们不愿意工作,指责他们道德沦丧,把贫穷说成是对罪恶的惩罚,这是工作伦理在新的消费社会能做的最后贡献。

贫穷不仅限于物质匮乏和身体上的痛苦,也是一种社会和心理状况。每个社会都有「体面生活」的衡量标准,无法达到这个标准就会烦恼、痛苦、自我折磨。

福利国家

福利国家(Welfare State):国家有责任和义务保障其所有公民的「福利」,不仅仅是维持生计,而是在身处的社会中有尊严地生存。

国家福利出现在下面的压力之下([[福利国家诞生的原因]]):

  • 处于困境的资本主义经济无法在确实政治帮助的状态下依靠自己的力量生存
  • 有组织的劳工,无法在缺失政治帮助的状态下确保自己不受「经济周期」的影响
  • 通过减轻社会不平等来保护和重申会社不平等原则
  • 通过边缘化无法参与到再生产的人来刺激社会接受不平等
  • 帮助社会成员度过不受政治控制的经济冲击

如果没有福利国家,社会阶级的矛盾就难以调和。福利国家的长盛不衰被解释为它缔造的维持和平的能力:使工人更容易接受资本家设定的规则,且成本更低。只依靠强制措施的工作伦理无法做到。

福利国家的溃败

  • 雇主们不再需要国家来帮忙管理后备劳动力,多余的劳动力可能永远不会再成为商品。
    • 劳动力市场的灵活转移(异地,跨国)
    • 时代发生了变化,公司以股票价值而非产品数量来衡量
    • 在远方国度,在缺乏公共福利压力的政府支持,当地政府允诺不需要承担责任
    • 全球流动自由削减了补充劳动力的经济负担
  • 福利国家和消费主义社会格格不入
    • 产品的营销宣扬差异化和选择,而福利国家则必须追求公民生存环境、需求和人权的平等,他们彼此是对立的
  • 平权行动,在就业、晋升、升学方面优先照顾其他族裔(非裔和拉丁裔)的运动
    • 平权法案的存在,使得很多「业已成功」的非裔遭受轻视和贬低
    • 平权法案使得非裔快速实现家庭收入的增长,社会地位的提升
    • 福利国家或平权法案的发明者,他们心中所念的是消除贫困,集体关怀和帮扶弱者,补偿获得机会的不平等,从而使得机会更平等,但事情的发展却大相径庭:获得社会帮助并脱离劣势地位的人,不仅失去了反馈的动力,而且变成了最强烈的诋毁者。
    • 福利国家最初的理念是反对任何区别对待,福利国家的创始人希望一劳永逸消灭贫穷,屈辱和绝望。但是福利国家没有实现,它确实培养了受过良好教育、健康、自信、自立的人,但是这些人为了维护自己刚刚获得的独立,需要把「已获得成功的人有责任帮助尚未成功的人这种社会公式连根砍断」受益于国家福利体系的热衷的却是削弱集体保险和社会福利工资的影响。

工作伦理和新穷人

19 世纪初,工作伦理传道者宣扬,劳动是财富的唯一来源,生产更多的东西基本等同于让更多的人参与生产过程。工作伦理调和生产者和参与产生的穷人的矛盾,是国家富强,使个人脱贫。

20 世纪末,美国的「以工代赈」计划得到了越来越多富裕国家的支持。

今天,接受救济的穷人是否真的不愿意参与生产,都丝毫不会影响生产力的增长。现代的企业不需要更多的工人增加利润。即使他们需要工人,在世界其他地方也容易找到,并且价格便宜,这加剧了本地穷人的贫困。

如今,对大公司而言,进步首先意味着「裁员」,科技进步意味着用软件取代人。证券交易市场无意中成为了企业利益最真诚的代言人,某国整体失业率快速上升时,看不到证券市场有任何焦虑,反倒可能表现火爆。

定居者与游牧者

罗伯特 赖希(Robert Reich)提出劳动力市场存在四类职业:

  • 引导者,包括发明家、广告商、推广者和商人
  • 各领域、各层次的教育工作者,从事可雇佣雇佣劳动力的再生产,把劳动力塑造成可供购买和消费的商品
  • 消费市场服务的人,他们的工作是激活他人消费能力,大部分是产品的销售者和培养消费购买欲望的人
  • 常规劳动者(routine,labourers),配至于传统流水线,新改进的自动化电子设备终端,比如说超市收银员
    • 临时的、不稳定的、用完即弃、容易被替代的、与从事的工作关系脆弱的人

显然,最后一类人在出售劳动力时面临的困难最小,潜在的买家不会特别挑剔。常规劳动者从事的工作既不需要难以掌握的稀有技能,也不需要面对面与顾客沟通所需的特殊技能,因此可以在有偿的工作中切换。但出于同样的原因,也很容易被弃用。

游牧资本要转移时,定居的劳动力根本无法阻碍它的转移。

失业到过剩

失业(unemployment)一词普遍用于没有工作收入的人,表达出就业才是正常态这个假设。前缀 un 表示这是一种非正常现象。

随着经济周期每一次轮回,「失业」这个概念的内涵发生了变化,「失业」之下的希望也越来越不切实际,「过剩」这个词替代了「失业」。

于失业这个词不同,「过剩」没有任何哪怕是隐晦、含蓄的承诺。没有暗示这是「非正常」的状态,没有暗示偏离轨道,没有暗示目前的痛苦是短暂的。

失业者,虽然暂时没有工作,但是一旦环境好转,就有望回到生产者行列。但是「过剩」的人则不同,他们是多余的、编外的、不被需要的。(社会的续存无需更多的人从事生产),要么是由于经济和技术进步(有了新的生产力,较少的人就可以满足),变得不再必要。

全球化之下的工作与过剩

现代化不应该被解释为「通往现代性之路」。

全球化远没有做到为所有人都提供就业和技术。

现代化席卷全球,现代生活方式也遍布全球,导致两个直接的后果:

  • 曾经能够定期、及时地清理少数现代化地区过剩人口的通道被堵死了,过程的人口的产生超过了回收能力。
  • 过剩不再是一部分人的问题

新穷人的前景

工业时代的穷人被重新定义为劳动力后备军。稳定的就业成为了典范,失业与贫困华商等号。诱导穷人去工厂工作,并在必要时强迫他们接受自己的命运。

把穷人培养成未来的劳动者,曾经在政治和经济上都很有意义。但是在,后现代的消费者社会,变得没有意义。现代的经济不再需要大量的劳动力,已经学会了在较少劳动力以及成本的同时增加利润和产出。同时规范和「社会纪律」的服从,主要是通过商品市场的吸引力来保证。

人是具有创造力的生物。如果认为标价牌是区分工作和非工作、努力与懒惰的标准,那是对人类本性的贬低;如果认为没有收益,人们宁愿闲着,让自己的技能和想象力腐烂生锈,那是对人类本性的肢解。

把工作从以市场为中心的计算和限制中解放出来,就必须以工艺伦理来取代劳动力市场发展过程中形成的工作伦理。

启发或想法

读完全书,我很难想象这是一本写在 1998 年的书,对于那个全球化还没有发展地那么繁荣的时代,就能够像一眼看穿未来 20 年一样,2019 年底 Covid-19,川普的上台,外资的逃离,北京清理低端人口,和最近的硅谷科技公司大规模裁员,作者就像是亲历者一样。作者行文的逻辑清晰,从工业时代的工作,到后现代,消费主义盛行下的工作变化,以及穷人在整个社会中位置的变化都描述得非常清晰。虽然这些推理在当年都只存在于哲学家脑海中,但无奈过去的历史恰好印证了如此。

谁应该看这本书

任何身处在这个社会中的社会人,有一些社会阅历再来阅读或许会更加容易明白吧。


2022-11-20 reading , reading-2022 , reading-2022q3 , 鲍曼

《活法》读书笔记

怎么知道的这一本书

这本书一直非常出名,[[稻盛和夫]] 的名字一直非常响亮,但我似乎对其没有任何了解,这一本书也是非常机缘巧合地在楼下的图书馆里面看到了。

关于作者

[[稻盛和夫]] 是以为日本的企业家,被人誉为经营之神,他创办了日本的 KDDI,也把日航从破产边缘救了回来。

在看这本书的过程中才突然想起来他刚刚去世的新闻,还在播客上听了一期有关于他的播客。

几句话总结书的内容

这本书主要是讲了稻盛和夫自己的人生哲学,为人处世之道,经营理念等等。但全篇比较散,甚至可以按照小章节一章章阅读。

  • 为什么活?
    • 磨砺灵魂,提升心智
      • 通过工作和劳动
  • 要做什么?
    • 做正确的事,从人类社会的基本道德伦理出发,正直,诚实,谦虚,善良,节制,利他
  • 要怎么做?
    • 有愿望,「心不唤物,物不至」
    • 要努力
    • 有规划,「对要做的事情形成清晰的图景」
    • 精益求精,细节改进

启发或想法

过去的一年中,我曾经不止一次的问过我自己,我 10 年之后在做什么?还在从事着一份开发的职业吗?未来 10 年里外面的世界会发生什么样翻天覆地的变化呢?2019 年 Covid-19 以来,这个世界变化的速度一度让我无法更上,前两天整理书的时候还开玩笑地嘲讽 [[赫拉利]] 在 [[未来简史]] 书封上说的「瘟疫、饥荒和战争已经被人攻克」。但我读完这一本书我知道,我只要每一天都比昨天「更好」,离我的目标更进一步,我就不会再那么迷茫。稻盛和夫说:「为了在死的时候,灵魂比生的时候更纯洁一点,或者说带着更美好、更崇高的灵魂去迎接死亡。」让我想起了[[穷查理宝典]] 中 [[芒格]] 说到的「每天起床的时候,争取变得比昨天更聪明一点」。不管是在物质上,精神上,追求更好的那个自己。通过规划,将未来 10 年乃至更长时间内的计划在脑海里面制定出来,我也就不会再去追问「人为什么活着」这样的问题了。

谁应该看这本书

推荐无法回答如下问题的朋友:

  • 人为什么活着?人生的真理是什么?生活的意义何在?人生应有的状态是什么样的?

印象深刻的句子

  • 只有主动追求的东西才可能到手
  • 人生方程式: 人生 * 工作的结果 = 思维方式 * 热情 * 能力
  • 复杂的问题简单化

2022-11-18 reading , reading-2022 , reading-2022q3

电子书

本站提供服务

最近文章

  • AI Shell 让 AI 在命令行下提供 Shell 命令 AI Shell 是一款在命令行下的 AI 自动补全工具,当你想要实现一个功能,敲一大段命令又记不住的时候,使用自然语言让 AI 给你生成一个可执行的命令,然后确认之后执行。
  • 最棒的 Navidrome 音乐客户端 Sonixd(Feishin) Sonixd 是一款跨平台的音乐播放器,可以使用 [[Subsonic API]],兼容 Jellyfin,[[Navidrome]],Airsonic,Airsonic-Advanced,Gonic,Astiga 等等服务端。 Sonixd 是一款跨平台的音乐播放器,可以使用 [[Subsonic API]],兼容 Jellyfin,[[Navidrome]],Airsonic,Airsonic-Advanced,Gonic,Astiga 等等服务端。
  • 中心化加密货币交易所 Gate 注册以及认证 Gate.io 是一个中心化的加密货币交易所。Gate 中文通常被称为「芝麻开门」,Gate 创立于 2013 年,前身是比特儿,是一家致力于安全、稳定的数字货币交易所,支持超过 1600 种数字货币的交易,提供超过 2700 个交易对。
  • 不重启的情况下重新加载 rTorrent 配置文件 因为我在 Screen 下使用 rTorrent,最近经常调试修改 rtorrent.rc 配置文件,所以想要找一个方法可以在不重启 rTorrent 的情况重新加载配置文件,网上调查了一下之后发现原来挺简单的。
  • Go 语言编写的网络穿透工具 chisel chisel 是一个在 HTTP 协议上的 TCP/UDP 隧道,使用 Go 语言编写,10.9 K 星星。