李守中

关于本站

这里也集中回答邮箱收到的问题。

1. 关于本站

该站点为李守中 (联系方式: [email protected]) 的个人资料站,为方便个人笔记的在线查阅而建立。

李守中原本不想写站点,但是随着解决过的问题越来越多,笔记也越写越多。后来不断地有人问已经被李守中解决过的问题,李守中也不断地丢笔记文件过去。但是这个过程实在太麻烦。

所以,为了偷懒,这个站点出现了。可以公开的笔记都放在这个网站里了。但是,李守中水平有限,请诸位务必谨慎参考。

2. 是否提供 RSS?

没有做 RSS 的打算。站内文章多为笔记类型,站点的主要目的也是为资料的在线查阅提供方便。

这意味着,站内文章的内容会少量多次地更新。用 RSS 不停地给你们推内容相似的文章,很烦人。

3. 为什么几乎整个站点都没有图?

好问题。诚然,图片的信息密度更高,信息传递相较于文字也更加直观。但是,对应地,制作精良的图片也需要相当多的时间和精力。

在李守中能用文字清晰表达的情况下,李守中不想花太多时间和精力来制作图片。

同时,图片远比文字占用的硬盘空间大,传输图片也比传输文字消耗更多的网络与计算资源。再加上,多数情况下,文字,已足以描述李守中的思想。这些因素叠加在一起最终导致了李守中很少在笔记里用图片。

当然,要表述复杂逻辑的话,还是图片比文字更省事。

简言之,因为李守中穷且懒,在文字表达能力够用、写出的东西理解起来不费劲的时候,就不用图片了。

4. 站点用了什么技术?

站点一共有过四版。第一版是用 Golang (gin, goldmark, cron) + Bootstrap + ZTree + highlight.js 组装的。但后来发现 Golang 的坑还是有点多,就整个用 Java 重写了,用的全是 spring boot, freemarker, flexmark 等等常规且常用的组件,UI 部分就是用自己写的 CSS 简单排个版 + 体积更小的 prism.js 做代码高亮。这就是第二版。

一直到第三版之前,笔记格式一直都是 Github Flavored Markdown。但随着李守中的笔记越来越多,对于排版的要求也越来越高,这时候 Markdown 不够用了。排除 Markdown,程序员间出名的排版方式中,除了 latex 就是 org mode 了。又由于 latex 的编辑体验不如 org mode,所以,最终,笔记被迁移到了 org mode 上。连带着,主力编辑器也由 VSCode 变成了 Emacs。

但还有一个问题,Java 没有解析 org mode 的包。而李守中又不想自己写 org mode 解析器,但想要笔记能被正常访问又得用 org mode 解析器把 org 文件渲染成 HTML 文件。这问题有个死循环。既然问题无解,那么另一个思路就是解决提出问题的人 (指 Java)。所以,李守中最后抛弃 Java,直接用 org mode 自带的 ox-publish 生成了一个静态站放在 Nginx 下面。就是诸位当前浏览的这个了。

这次直接把后台简化到消失,站点生成之后自带基础样式,自己再写点 CSS 简单排个版、改个字体就能看,非常方便。但是这个方案的坑在于,虽然使用 org 原生支持的 htmlize 可以在 org file 导出时自动给代码块加高亮,但当 emacs 以 batch 模式 (non-interactive mode) 启动的时候,emacs 不会加载内部样式,而 htmlize 读不到当前 emacs session 中的样式的话,就会使用最简单的样式 (只有斜体、粗体、下划线和黑色默认字体)。所以,李守中就只能用 org-html-htmlize-generate-css 导出 emacs 的内部样式到 CSS 文件之后,再在每个导出的 html 的 <head></head> 块中以加载外部 CSS 文件的方式来加载 htmlize 的代码高亮。这就是第三版。(不用自己写后台逻辑真省事啊......

半年多以后,李守中重新写了一下 emacs 的配置,主要目的是提速 (各方面的),emacs 也从 27.2 升级到了 28.2 (眼馋 28 对 CJK 字符的 word-wrap 优化),然后问题就来了。htmlize 中的 org-html-htmlize-generate-css 方法自 emacs 28.1 开始无法导出 emacs 的内部样式,emacs 28.2 official release 都有了,这个 bug 还没修。所以放弃使用 htmlize 的李守中重写了一下 org-html-src-block 这个负责导出 org file 中的代码块的函数,让最终得到的代码块可以被 highlight.js 渲染,接着用第一版的代码高亮方式。这就是第四版。(ps. 不用 prism.js 是因为,凭李守中的知识储备,适配 highlight.js 的工作量更小。

Nginx 作为本静态站的页面分发工具,还套了 CloudFlare 的免费 CDN 做缓存。SSL 证书由 acme.sh 管理。写好的文章通过 SFTP 上传到服务器,每天 23:00 (GMT+8) 左右定时更新。因为 Emacs 渲染 html 需要时间,所以文章更新期间站内可能出现数秒的 404,不久就会恢复,不必担心。另外,由于有 CloudFlare 的免费 CDN,Nginx 本身也配了缓存,所以除非读者让浏览器忽略各级缓存,否则也不会出现 404。

这几次迭代导致了当前的站点结构简单地不能再简单,并没有什么很奇怪的操作和搭配。(所以老多人问这个有啥意义...

5. 为什么觉得有些内容莫名其妙,看不懂?

李守中在制作笔记的时候根本没有考虑除李守中以外的,任何人的阅读体验。

所以,看不懂李守中的某些笔记是非常正常的事情。如果读者有疑问需要解答,可以发邮件联系李守中。李守中会尽量回答。



Last Update: 2023-12-24 Sun 21:11

Generated by: Emacs 28.2 (Org mode 9.5.5)   Contact: [email protected]

若正文中无特殊说明,本站内容遵循: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议