开源博客自我介绍

Hi, I'm a new blogger!

Who I am

我叫 JohnLin

大学生,喜欢研究计算机科学,尤其是开源项目和技术探索。这个博客是我分享技术经验和学习成果的平台。

喜欢赛车🏎️和骑行🚴‍♂️,也喜欢旅行✈️和美食🍣。

我的Github

我使用的工作流

我的工作流主要集中在终端中:

zsh是我的shell,搭配omzpowerlevel10k使用,提供了强大的功能和美观的界面。

终端截图

(由于我用了透明主题,所以颜色看起来有点怪)

同时我使用neovim作为我的主要文本编辑器,配合lsptreesitter插件,提供了高效的代码编辑体验。其实一开始我是坚定的vscode党,丰富的插件生态和强大的功能没有人能抵抗。但是vscode性能不太好,尤其是加了各种ai插件后。vscode好几次把我的服务器卡死,于是我就转向了neovim,虽然一开始不太习惯,但现在已经离不开它了。

i use vim, btw

neovim截图

在AI辅助方面,我喜欢在终端中使用Claude Code工具,搭配glm的模型,这样比较省钱。可能效果不如直接使用Claude的模型,但是价格便宜很多,性价比很高。

我使用AI coding的原则: 不要当一个拥有核武器的猴子,当一个会用AI工具的菜鸡

我使用tmux作为我的终端复用工具,方便我在多个终端会话之间切换和管理。但是现在用得少了,因为我从iTerm2转到了Ghostty,内置了类似tmux的功能,满足了我的需求。不过如果有些时候需要在服务器上工作,还是会使用tmux

我配置了一下我的tmux:

tmux截图

主要是下方的状态栏,可以显示电池状态、日期时间、还有我当前在听的音乐。甚至15分钟后的天气预报也能显示出来,感觉很酷而且很实用,尤其是如果你长时间工作突然要外出。

我还使用taskwarrior作为我的任务管理工具,帮助我跟踪和管理我的待办事项和项目。它的命令行界面非常强大,可以自定义各种视图和过滤器,适合喜欢在终端中工作的我。

taskwarrior

使用hledger进行个人财务管理,记录我的收入和支出情况。让我能够轻松地分析我的财务状况。但是使用hledger的日志文件格式比较麻烦,所以我还开发了一个工具来帮助我格式化日志文件,叫做journal-fmt。我又写了点lua脚本来帮助我在neovim中更方便地编辑日志文件。现在只要在结束编写时输入:w文件就会被自动格式化了,感觉很棒。

journal-fmt

我的技术栈

还在探索阶段,目前主要使用Go语言进行开发,喜欢它的简洁和高效。也会使用一些PythonLua来编写脚本和工具。

  • Go: 我主要使用Go语言开发一些CLI工具和后端服务,喜欢它简洁的语法。有些人觉得Go的错误处理比较麻烦,但我觉得它的显式错误处理方式让代码更清晰,虽然有时候确实会写很多重复的错误检查代码。用Go实现某些功能的方式比其他语言更单一,但是开发速度更快。

    你难道还能比这只土拨鼠聪明吗?

  • Python: 写一些简单的脚本我会用Python,对比Shell脚本来说,Python的语法更清晰。不过对于一些简单的自动化任务,我还是喜欢直接写Shell脚本,毕竟它更轻量级,不需要额外的环境配置。一些和科研相关的代码我也喜欢用Python写,库很多很方便。

    Any thing shell can do, python do better

  • Java: 工程设计的巅峰,虽然我不喜欢它的语法,但是不可否认,在计算机科学、工程上它功不可没。不过它太过OOP,什么都是对象,不太喜欢这种设计风格。我是在学习数据结构与算法的时候接触的Java的,感觉它的语法比较冗长,尤其是一些简单的操作需要写很多代码。不过它的生态系统非常丰富。

    组合优于继承

  • JS & TS: 没什么好说的,这里给到夯。

  • Rust: 还在学习阶段,感觉它的语法比较复杂,但是性能非常好。对于一些需要高性能的项目,我会考虑使用Rust,不过目前还没有太多机会去实践。感觉设计Rust的那群人是天才,所有权设计、借用、移动,非常巧妙,而且可以减少一些竞态问题和内存泄漏。Rust有一种年轻人的Cpp的感觉。

    我的技术栈生锈了

  • Docker & Linux & Database & Cache & ...: 太多太杂了...

项目

  • tada: 一个基于Go语言的命令行工具,接入大模型,可以在终端帮助用户完成各种任务,还未完成

  • vow: 一个基于Go语言的CLI工具,帮助开发者在终端中背单词,还未完成

  • journal-fmt: 一个基于Go语言的命令行工具,帮助用户格式化hledger日志文件,已完成