开源四年的一些记录
写在前面
- 很多已经在 #186 中记录了而距离这篇又两年半过去了,经历了不少成长与感动,在这里记录一下。
一些感动
- 我的第一个项目是命令行听机核最开始写完顺便写了一篇文章发在了机核上,那时候我还不太明白怎么弄 PR, 怎么在开源世界里合作,项目的第一个贡献者后来我们在推特互相发现(他给 gaycore 添加了快进功能),有种世界真小的感觉(发现时候我还没几个 fo)。后来他去了美国,我们偶尔还在 tg 聊聊各自的生活,感觉像认识了好多年的朋友。
- 之后 kindle 离开中国,我恰好有一些 kindle 方面的接口调研经验,写了个帮助大家下载自己书的小项目,被一个网站转载,但读文章之后发现他把所有我项目的链接都换成了自己的,想着有些别扭但还能接受的时候,看到评论区 Ray 和 siwei 在下面的留言,心里暖暖的。
- 熟悉我项目的朋友大概都知道,我所有项目的最后一句话都是谢谢就够了,后来在 issue 里在邮件中真的收到了好多感谢,有的还特意发邮件谢谢我,说我帮到了他好多。下面截图是我在 running_page issue 中收到的感谢
- 因为后面给很多跑步的项目提了一些 issue 和代码,其中最感动的就是我给 strava-datasource 提的一个 issue 并附上了解决方案,那个我特别敬佩的作者直接回复,Hi! Could you open a PR with these changes? 让我直接有机会给了 grafana 相关的项目提代码。我也把这个传承了下去,在自己项目中,issue 并附上相关解决方案的同学,我都会问一下是否愿意提个 PR.
- 收到了图灵编辑的邮件,感谢我做的翻译项目,还要送我一些书。
- 妈妈和老婆跟我说过,虽然看不懂我做的东西,但是感觉我非常厉害,能帮到其它人就更厉害了。老婆也支持我在业余时间写代码。
- 面试官(后来成了我的领导),在面试前认真看了我所有的项目
- 和很多人因为开源成了现实中的朋友
一点成长
- 掌控感,这个月第一次经历了两个同时增长的项目,几乎所有业余时间都在这上,在这个阶段懂了,如何在自己能力范围内更新项目,判断需求,处理 issue 和如何决定是否合 PR, 当然在累的什么都不想干的时候,忽然想明白了休息才是最重要的
- Make it work then make it better. 在最开始的时候我总是想把项目尽可能做的好,加足够多帮到大家的功能再发布,后来明白了,这个是开源项目,我需要做的是,尽可能的让项目 work 起来,pull the trigger, 如果这个项目 work 的足够好,会吸引更多厉害的人来一起 make it better
- 别炫技,如果这个不是需要炫技的项目,那么,尽可能用最简单的实现,项目就会帮到更多的人,让更多的人参与进来。
- 记录,比如现在我正在做的
一些遗憾
- 有些 PR 处理的不好,让一个非常热心的台湾朋友有些累,关掉了 PR. 我自责了好一段时间。他代码写的很漂亮,我应该在那时候尽快处理,而不是想着先添加功能
- running_page 因为有地图展示,有一个让我非常难受的 PR.
- 因为 running_page 的置顶 issue 我想纪念那些逝去的跑步的朋友,被人说滥用 GitHub.
一点分享
- Always be nice
- 别轻易直接关掉 Issue, 有的时候很伤人
- 如果项目有我之外的贡献者,即使贡献者是修个 typo, 在 issue 回复里尽量用“我们”, 因为已经不是我一个人的项目了
- 除非没办法,别停止更新每一个项目 let it work, 因为开源,不一定在什么时候帮到别人
一些数据
下面是我在这 4 年里写的开源项目的数据(截止 2023.3.21)而这个表格是用我的一个项目 -> github-readme-stats 自动生成的。这 4 年从第一个项目 gaycore 开始,我一共用 5 种语言写了 35 个开源项目得到了 14000 多个 stars. 还挺值得自豪一下的。最值得自豪的是,它们大部分还在更新。我还给一共 55 个项目提了 160 个 PR.
The repos I created
ID | REPO | START | UPDATE | LAUGUAGE | STARS |
---|---|---|---|---|---|
1 | bilingual_book_maker | 2023-03-02 | 2023-03-20 | Python | 4413 |
2 | running_page | 2020-09-17 | 2023-03-20 | Python | 2336 |
3 | xiaogpt | 2023-02-16 | 2023-03-20 | Python | 1943 |
4 | Kindle_download_helper | 2022-06-06 | 2023-03-20 | Python | 1498 |
5 | GitHubPoster | 2021-04-21 | 2023-03-20 | Python | 1364 |
6 | gitblog | 2019-07-18 | 2023-03-20 | Python | 878 |
7 | 2022 | 2022-01-01 | 2023-03-11 | Python | 274 |
8 | 2021 | 2020-12-21 | 2023-03-05 | Python | 273 |
9 | blue | 2022-10-20 | 2023-03-20 | Python | 260 |
10 | iBeats | 2021-06-11 | 2023-03-19 | Python | 200 |
11 | iWhat | 2023-03-08 | 2023-03-19 | Python | 172 |
12 | 2020 | 2020-01-10 | 2023-03-05 | C | 139 |
13 | vscode-gcores | 2020-01-04 | 2023-03-06 | TypeScript | 110 |
14 | github-readme-stats | 2020-12-24 | 2023-03-19 | Go | 101 |
15 | gaycore | 2019-02-18 | 2023-03-06 | Python | 99 |
16 | dalian-IT | 2021-04-07 | 2023-03-19 | md | 99 |
17 | 2023 | 2023-01-01 | 2023-03-19 | Python | 51 |
18 | duolingo_remember | 2021-01-18 | 2023-01-30 | Python | 50 |
19 | shanbay_remember | 2020-12-02 | 2023-03-13 | JavaScript | 47 |
20 | nbnhhsh-cli | 2021-07-09 | 2022-07-16 | Python | 32 |
21 | gcores_calendar | 2020-08-24 | 2023-03-04 | JavaScript | 27 |
22 | pengdu_helper | 2021-09-09 | 2023-01-27 | Go | 27 |
23 | yihong0618 | 2020-07-16 | 2023-03-15 | md | 26 |
24 | my_kindle_stats | 2021-11-18 | 2023-03-17 | Python | 25 |
25 | running_skyline | 2021-03-02 | 2022-05-10 | Python | 20 |
26 | kai_xin_ci_chang | 2022-06-15 | 2023-03-11 | Python | 17 |
27 | blog | 2020-06-22 | 2023-01-28 | JavaScript | 14 |
28 | Runtastic | 2020-07-24 | 2023-02-03 | Python | 14 |
29 | github-readme-stats-server | 2021-12-08 | 2023-01-19 | HTML | 9 |
30 | Python365 | 2019-09-05 | 2022-10-30 | Python | 7 |
31 | run | 2021-08-16 | 2023-03-17 | Python | 7 |
32 | github_upstream_script | 2021-05-08 | 2022-03-08 | Python | 2 |
33 | edocteel001 | 2019-11-12 | 2022-06-24 | JavaScript | 1 |
34 | gaycore-server | 2019-02-18 | 2020-11-02 | Go | 0 |
35 | test_svg | 2021-03-18 | 2022-06-16 | md | 0 |
sum | 14535 |