|
1 |
| -# 摸鱼神器 —— 在终端浏览 HelloGitHub |
| 1 | +# 解锁!浏览 HelloGitHub.com 的新姿势 |
2 | 2 |
|
3 | 3 | > 本文不会涉及太多技术细节和源码,请放心食用
|
4 | 4 |
|
5 | 5 | <img src="./images/cover.jpg" style="zoom:80%;" />
|
6 | 6 |
|
7 |
| -自从对 [tui-rs](https://github.com/fdehau/tui-rs) 产生兴趣后,就一直在琢磨如何能基于她写出一个终端应用呢?写一个什么应用呢? |
| 7 | +大家好,我是 HelloGitHub 老荀,好久不见! |
8 | 8 |
|
9 |
| -[hellogithub.com](https://hellogithub.com/) 本就是我平时没事喜欢闲逛的网站,一个想法很自然的就产生了,我能不能在终端浏览呢? |
| 9 | +在完成 [HZK](https://github.com/HelloGitHub-Team/HelloZooKeeper) 系列之后,我就很少“露面了”,但是我对开源和 HelloGitHub 的热情并没有丝毫的减少,逮着机会就来输出一波,防止被大家遗忘。 |
10 | 10 |
|
11 |
| -## 一、初步构思 |
| 11 | +这次带来的是我写的一款在终端浏览 HelloGitHub 的工具:hg-tui,让你双手不离开键盘就能畅游在 HG 的开源世界。功能如下: |
| 12 | + |
| 13 | +- 色彩丰富、平铺展示 |
| 14 | +- 通过关键字搜索月刊往期的项目 |
| 15 | +- 类 Vim 的快捷键操作方式 |
| 16 | +- 一键直达开源项目首页 |
| 17 | +- 支持 Linux、macOS、Windows |
| 18 | + |
| 19 | +> 地址:https://github.com/kaixinbaba/hg-tui |
| 20 | +
|
| 21 | +下面我将分享 hg-tui 开源项目的缘起、构思、开发的全部流程,最后还会分享我通过这个项目对开源的一些感悟。 |
| 22 | + |
| 23 | +## 一、起因 |
| 24 | + |
| 25 | +我前端时间一直在学 Rust,前段时间看到 HG 讲解 tui-rs 的文章。 |
| 26 | + |
| 27 | +看完后手痒的厉害,就写了一篇 tui-rs 入门文章,但感觉还不过瘾就像写一个项目练手。 |
| 28 | + |
| 29 | +因为我平时经常上 hellogithub.com 划水、找开源项目,所以就决定用 tui-rs 做一个终端浏览 hellogithub.com 的工具。 |
| 30 | + |
| 31 | +## 二、构思 |
12 | 32 |
|
13 | 33 | 首先我希望这个应用能有以下功能:
|
14 | 34 |
|
|
39 | 59 |
|
40 | 60 | 上面展示的这些差不多已经是这个项目的全部了
|
41 | 61 |
|
42 |
| -## 二、技术选型 |
| 62 | +## 三、开发 |
| 63 | + |
| 64 | +### 3.1 技术选型 |
43 | 65 |
|
44 | 66 | 要实现上述的那些功能,就要从 Rust 的生态中选择合适的库了
|
45 | 67 |
|
|
55 | 77 |
|
56 | 78 | Rust 虽然还是编程界的小学生(2011 年启动),但是经过了这些年的发展,生态已经逐渐完善(和几位大哥还是差很多),加上 Rust 是系统级的语言,所以我相信未来 Rust 一定能成为多面手。
|
57 | 79 |
|
| 80 | +### 3.2 项目结构 |
| 81 | + |
58 | 82 | 项目目录规划(非全部)
|
59 | 83 |
|
60 | 84 | ```rust
|
|
75 | 99 |
|
76 | 100 | 当然这些文件也不是在项目之初就已经一股脑的建立好的,都是在完善功能的路上一点点添加进来的~
|
77 | 101 |
|
78 |
| -## 三、实现代码片段 |
| 102 | +### 3.3 代码片段 |
79 | 103 |
|
80 | 104 | 因为是基于 `tui-rs` 开发的应用,所以主流程肯定是遵循该库的设计的,首先需要定义一个 `App` 用来保存整个项目的状态信息
|
81 | 105 |
|
@@ -205,17 +229,40 @@ pub fn handle_key_event(event_app: Arc<Mutex<App>>) {
|
205 | 229 |
|
206 | 230 | 其他剩下的就是本应用的业务逻辑,具体的代码可以直接看仓库 [https://github.com/kaixinbaba/hg-tui](https://github.com/kaixinbaba/hg-tui)
|
207 | 231 |
|
208 |
| -## 四、开发心路 |
| 232 | +## 四、感悟 |
| 233 | + |
| 234 | +我一开始启动项目的时候,初衷很简单,仅仅是为了做个实际的项目把玩一下 `tui-rs` |
| 235 | + |
| 236 | +- 作为项目的第一个用户 |
| 237 | + - 自己既是产品也是开发,能让自己站在用户的角色考虑 |
| 238 | +- 开源就是以开放的态度接受别人的建议 |
| 239 | +- 没有与生俱来的完美,不断迭代让它越来越好(1 个月 100+ commit) |
| 240 | +- GitHub Action 真的是一个强大的功能(其实这次是我第一次认真研究 GitHub Action 功能) |
| 241 | +- homebrew 对项目 star 还有要求(吐槽),希望大家看到这里的话能给个 star✨ |
| 242 | + |
| 243 | +--- |
209 | 244 |
|
210 | 245 | 仔细想想这可能是我写的第一个拥有完整功能的 Rust TUI 项目,从有想法到完成开发前后差不多用了三周不到的时间,期间碰到了各种各样的问题,我整理了一下:
|
211 | 246 |
|
212 | 247 | - tui-rs 如何使用,为了看懂她的模板流程,我基本看完了 tui-rs 本身的所有源码(源码很少说实话,并不是一件难事)
|
213 |
| -- 查看其他使用的 tui-rs 的项目,学习她们是如何使用 tui-rs 的(看了不下数十个项目,如果你有兴趣的话,这里是[地址](https://github.com/fdehau/tui-rs#apps-using-tui)) |
214 |
| -- 在生态中寻找合适的 Rust crate 来处理我当前的场景并学会使用她 |
215 |
| -- 和 Rust 编译器斗智斗勇(Rust 新手的第一座大山,Orz) |
216 |
| -- 尽量编写符合 Rust 的代码风格项目 |
| 248 | +- 查看其他使用的 tui-rs 的项目,学习她们是如何使用 tui-rs 的(源码真的是宝藏,没什么问题是看源码解决不了的,看了不下数十个项目,如果你有兴趣的话,这里是[地址](https://github.com/fdehau/tui-rs#apps-using-tui)) |
| 249 | +- 在生态中寻找合适的 Rust crate 来处理我当前的场景并学会使用她(Rust 的文档功能实在是太强了) |
| 250 | +- 和 Rust 编译器斗智斗勇(Rust 编译器是我见过最强大的,一定要灵活运用搜索引擎,最后实在不行可以去 Rust 社区提问一把,Rust 的社区真的是很热情) |
| 251 | +- 尽量编写符合 Rust 的代码风格项目(我写每一种编程语言都会去寻找她的最佳工程实践学习并遵守她,古话说得好,没有规矩不成方圆) |
| 252 | + |
| 253 | +--- |
| 254 | + |
| 255 | +... |
| 256 | + |
| 257 | +她从出生那一刻起,身体里流淌的就是开源的血。 |
| 258 | + |
| 259 | +软件世界里的开源,就像金庸世界中的侠客。每一个开源贡献者都是我心目中行走江湖的英雄,我心中那一点点的英雄主义和理想主义,羡慕着他们的同时也希望能像他们一样,为开源的世界贡献出自己的一点点微不足道的热情。 |
| 260 | + |
| 261 | +每一个开源项目可能都只是起源于作者的一个小小的灵光乍现,也可能只是为了解决自己实际工作生活中的小小痛点,但是随着功能的逐步完善,每一个小小的项目最终都可能成长成璀璨夺目的明星项目,然后为其他人甚至整个行业带来了生产力效率的提升,这可能也是每一个开源作者最终所期待的吧~ |
| 262 | + |
| 263 | +我的这个项目说实话很小,无论是代码量还是功能上,所以导致我一开始并不想写这样一篇文章去介绍她,[蛋蛋](https://github.com/521xueweihan)却用了一段话打动了我,其中印象最深的一句话是:**任何一个开源项目都是从小项目开始的。完成一个开源项目并不难,十年如一日的维护才是最难的**。 |
217 | 264 |
|
218 |
| -其实一开始我也只是打算把这个项目完成基本功能,然后开源就完事了,但在[蛋蛋](https://github.com/521xueweihan)的建议下我又完成一些小功能,但我还是觉得我这个项目太小,没什么可说的,但他说了一句话我印象很深刻:**任何一个开源项目都是从小项目开始的,完成一个开源项目并不难,十年如一日的维护才是最难的**。 |
| 265 | +我最近也看了一个开源斗士的故事,故事不短很打动我,链接在[这里](https://gitstats.chenjiandongx.me/#/),我想可能若干年后,我在工作中已经不写代码了,但是我相信我也会在生活之余写写自己的小玩意~ |
219 | 266 |
|
220 | 267 | ---
|
221 | 268 |
|
|
0 commit comments