跳至主要内容

博文

最新博文

Fedora 40 on my old laptop

由于去年CentOS RIP的事情,很多企业都改用了另一种发行版。自用的一台老旧的MBP (2012年)已经很久没有更新了,干脆装了Fedora Linux。 时隔多年又安装Fedora,实际上是去年底就用了38,中间升级到了39但是年初的时候不知为何kernel出了问题,grub也没法回退到可用的状态。前几周有时间干脆完全重装了Fedora 40。还刚好试了试 [Ventoy](https://www.ventoy.net/) 的 Multi ISO files 特性,挺好。 ## 已解决的配置 1. Yakuake terminal 习惯了使用快捷键来触发下拉式命令窗口,参考[搜索结果](https://fedoramagazine.org/use-a-drop-down-terminal-for-fast-commands-in-fedora/)试了试 Yakuake 还不错。它还是基于 Kconsole 的,用户不需要做太多改动,直接就可以上手。 2. 倒腾 Git Repo 遇到了小问题 为了速度转移一些 Git Projects,没有逐个 clone,而是直接从另一台笔记本弄了 tar.gz 过去。不知道是不是 MacOS 自带的 tar 命令与 GNU 的水土不服,过去之后,除了一致的额外隐藏文件 (ie .DS_Store) 居然Git还报了另一种问题 “index file is too small”! 仔细查找后总算是找到了[解决方法](https://joemaller.com/1283/git-error-index-file-is-too-small/)。 ``` git config repack.usedeletabaoffset false git repack -a -d ``` 3. 安装一些趁手的工具 `dnf install exa bat ripgrep fzf pass` 配上已有的 dot files 基本解决了问题。这套配置在 MacOS 和 Linux 差别度不大。 4. 外接显示器分辨率的设置 不知为何,外接显示器居然找不到应有的 ratio。参考[一篇博客文章](https://www.wenjinyu.me/solve-the-problem-of-gnome-des...

不可言说的知识

在看八叉老师的一门课,他引用了『庄子』 【外篇 天道】[末尾的一个故事](https://ctext.org/dictionary.pl?if=gb&id=42076&remap=gb)来解释什么是不可言说的知识。 > 桓公读书于堂上, > 轮扁斲轮于堂下, > 释椎凿而上, > 问桓公曰: > “敢问:公之所读者何言邪?” > 公曰:“圣人之言也。 > ”曰:“圣人在乎?” > 公曰:“已死矣。” > 曰:“然则君之所读者, > 古人之糟魄已夫!” > > 桓公曰:“寡人读书,轮人安得议乎? > 有说则可,无说则死。” > > 轮扁曰:“臣也以臣之事观之。 > 斲轮,徐则甘而不固, > 疾则苦而不入, > 不徐不疾,得之于手而应于心, > 口不能言,有数存焉于其间。 > 臣不能以喻臣之子, > 臣之子亦不能受之于臣, > 是以行年七十而老斲轮。 > 古之人与其不可传也死矣, > 然则君之所读者, > 古人之糟魄已夫!” 这段古文的意思大致如下: > 齐桓公在堂上读书,轮扁在堂下砍削车轮。他问齐桓公在读什么书。齐桓公说是圣人的书。轮扁说,那全是古人的糟粕!齐桓公就很不高兴,非要让他说出个道理。 > 轮扁说:我所从事的工作是砍削车轮。榫头做得过于宽缓,就会松动而不牢固,而做得太紧了,又会涩滞而难以使用。不宽不紧才可以。这个道理是我从工作中学会的,虽然能讲出来,但是没有办法教给徒弟或儿子。于是这么大岁数了我也只能自己削车轮。不可言传的道理跟随圣人一起死了,所以您读的书只能是古人的糟粕。 轮扁讲出的道理需要他的徒弟或儿子亲身在工作中学习,通过经验的增长,才能学会——这就是所谓的【不可言说的知识】。

顺手拷贝的一个 build.gradle.kts

Gradle 的 `build.gradle` 通常都是用 Groovy DSL 来编写的。随着 Kotlin 流行,Gradle 也慢慢开始支持 `build.gradle.kts`。 刚好看见一个简单的 sample,顺手放在这里 ```kotlin plugins { `java-library` "jacoco" } repositories { mavenCentral() } dependencies { implementation("jakarta.inject:jakarta.inject-api:2.0.1.MR") implementation("jakarta.ws.rs:jakarta.ws.rs-api:3.1.0") implementation("jakarta.servlet:jakarta.servlet-api:5.0.0") implementation(project(":home-made-lib")) testImplementation("org.junit.jupiter:junit-jupiter:5.8.2") testImplementation("org.mockito:mockito-core:4.5.1") testImplementation("org.eclipse.jetty:jetty-server:11.0.9") testImplementation("org.eclipse.jetty:jetty-servlet:11.0.9") } tasks.withType () { useJUnitPlatform() } java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } ```

Ubuntu 安装和配置 NeoVim

最近想试试 NeoVim,在 Windows 10 WSL 的 Ubuntu (20.04) 里安装 neovim 是非常方便的,[用 Snap](https://askubuntu.com/questions/430008/how-to-install-neovim-on-ubuntu) 就可以了。 sudo apt install neovim 如果需要将 Neovim 设置为常用的编辑器,最好[利用系统的 Alternatives 设定](https://blog.aktsbot.in/vim-to-neovim.html),以取代常见的默认程序 (如 `/usr/bin/vim.basic`)。 ```bash $ sudo update-alternatives --install /usr/bin/vi vi /usr/bin/nvim 60 $ sudo update-alternatives --install /usr/bin/vim vim /usr/bin/nvim 60 $ sudo update-alternatives --install /usr/bin/editor editor /usr/bin/nvim 60 ``` [除了以上这几个命令之外,还有 ex, vi, vim, editor, view, vimdiff 等等](https://stackoverflow.com/questions/65889273/how-do-i-add-nvim-to-update-alternatives-when-using-snap-under-ubuntu),都可以使用类似的命令来替换。 值得一提的是,不像 `vim`,`neovim` 不再支持各种 alias commands,而是推荐直接调用 `nvim` 时传入相应的 args 来进入需要的模式,例如 `nvim -R` 就类似于 `view`;`nvim -d` 类似于 `vimdiff`。可以参考这两个 GitHub Issues: - https://github.com/neovim/neovim/pull/2008 - https://github.com/neovim/neovim/issues/1646

[Resources] Golang, Kotlin, JS and Misc

周末看的几篇文章提到了一些有用的资源,记录一下: - Golang 1. [awesome-go](https://github.com/avelino/awesome-go) 2. [Effective Go](https://go.dev/doc/effective_go) - Kotlin 1. [Coding Conventions](https://kotlinlang.org/docs/coding-conventions.html) - JavaScript 1. [Prototype Chain](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain) - Web 1. [MS Restful API Guideline](https://github.com/microsoft/api-guidelines/blob/vNext/Guidelines.md) 2. [Hardening Your HTTP Security Headers](https://www.keycdn.com/blog/http-security-headers)

Requests Pipelining and Size Estimation

这两周刚好在看和 requests pipelining 有关的 Netty 代码,找到了挺有意思的文章: 1. [Pipelining requests](https://aphyr.com/posts/267-pipelining-requests) 2. [Estimate size of objects in OrderedMemoryAwareThreadPoolExecutor](https://aphyr.com/posts/269-reaching-200k-events-sec) 这里提到的 [Riemann](https://riemann.io/) 是一个分布式监控软件,用 Clojure 语言开发的(GitHub 代码库[地址](https://github.com/riemann))。