当谈论软件工具,我们在谈论什么

时不时看到少数派 RSS 订阅源一堆类似的软件信息,或者在某些生物数据分析群里一些人疯狂推荐一个软件并且说另外的软件不方便,亦或是某文献管理软件群里一群人争论笔记软件和文献管理软件哪个更好一些,我突然就想知道我们有时候对某一种或者多种软件很狂热或者很抵触是因为什么,这背后底层是人对什么的选择,我就想以我自己谈谈。

从 Citavi 说起

我觉得第一个让我很狂热的软件是 C# 写的文献管理软件 Citavi,是一个瑞士的公司开发的 Windows 专有闭源软件。它有很强大的功能,比如对于文献有两套分类系统,一套无序的,一套无限层级且有序的,而且对于你记录的笔记也是有相同的两套系统,还有任务管理的界面,可以说是很强大了。我曾经一度跟身边的朋友安利这款软件,但是好景不长,Citavi 的公司被收购了,然后 Citavi 从之前的买断制变成了订阅制,数据的安全和维护数据所需要的费用成了一个很大的问题。

首先,Citavi 的格式跟 EndNote 一样是专有格式,不是像 RIS 或者 BIB 一样的通用格式,这会造成一定的麻烦,比如你必须借助 Citavi 导出你的数据,不能任意迁移你的数据。同时,上文所提及的强大的笔记功能更是除了通过 Microsoft Word 文献引用插件引用到 MS word 以外,可以通过内部导出 PDF 格式,而不是笔记软件所青睐的 markdown 格式,这很显然是不利于后期编辑的。

于是,很多用户,包括我在内开始迁移到一些 FOSS (Free and Open Source Software),因为不想再被一些专有的东西束缚,想要数据更加安全。我觉得功能固然重要并且吸引人,但是对于知识管理、存储你大量信息的工具,信息安全可迁移是一个很重要的指标。

其实从 Citavi 看,Notion 的案例不是很类似嘛,同样是功能强大的 All-In-One 闭源软件,不过好一点的是 Notion 可以支持多平台,并且最基础的功能都是免费的,同样都存储你大量的信息。是的,我承认,Citavi 同样可以导出成 RIS / BIB,Notion 也同样能导出成 markdown,但是想想 Citavi 导出的笔记格式以及它导出的 RIS / BIB 会缺失部分你记录的信息,而 Notion 强大的功能正是因为不仅仅是 markdown 格式。万一商业公司改变了他们的商业策略,你很可能将会花费大量的时间处理这样的事情。

FOSS

如果想到自己的数据安全,很多人就会转到 Notion/Obsidian/RoamResearch 的开源竞品,我就曾长期使用它们的开源竞品 Trilium ,一个 Electron 应用,这款软件伴随我从 Windows 迁移到 ArchLinux,是一款功能强大的不错软件,可以无限层级、可以做任务管理、把整个网页保存为一个笔记、可以管理多个笔记之间的关系,好吗?好。安全吗?安全,这个量级的用户,GitHub 仓库有 55 个贡献者,可以说比较安全了。但是问题在于它是基于 CKEditor ,很多问题它本身无法解决,而且跟 Notion 一样,它功能强大的本身破坏了输出 markdown 格式的规范。而且 Electron 应用本身相较于其他 GUI 框架占用资源较多,而且对于我这个现今的 Gnome 用户来说,它至今不能使用 GTK 主题(可能是 Electron 版本问题),让我的使用有了割裂感。

至于文献管理,不少人会从 Citavi 迁移到开源软件,比如 Zotero,也是一个 Electron 应用,而且恰巧正在这个时候,Zotero 的 beta 版本植入了 PDF.js 做起来 PDF 阅读器并且可以开始保存 PDF 注释成为笔记了。但是使用一段时间之后就发现,第一个危险的地方在于 Zotero 存储数据是使用数据库,如果你要从 Zotero beta 的高版本转入 Zotero 或者 Zotero beta 低版本是基本上不可能直接迁移的,而且 Zotero 本体则是一个非常简易的毛坯房,如果你想批量更改路径或者生成 citationkey 都需要插件的辅助,而这些插件并不一定适配 Zotero beta,如果发生一点以外,那么你日常的工作流是崩溃了。所以,即使开源,也存在了过多的不稳定因素。

因为上述说的都不那么稳定或者安全抑或存在各种各样的功耗问题和视觉感官问题,我就选择了返璞归真。

为了笔记数据安全,使用 markdown 纯文本管理自己的笔记,当然,我使用了 Notekit 这款软件,虽然仓库显得维护得非常不好,比如 tag 标的乱七八糟,但是不用担心,这是一个 C++ 软件并且使用 GTK3,还不是太过时,而且 C++ 是编译型语言,不用过于担心突然因为环境的变化突然崩溃点,而且还支持 Markdown 的所见即所得,虽然缺少一些关键功能,如搜索,但是还是能用下去的。至于同步,可以使用 git 同步到远程仓库,可以说虽然 Geek 点,但是基本功能都能实现,占用也不算太多。

至于文献管理,我使用 JabRef,目前整个社区组织很有秩序,是一个 Java 软件,其存储特点就是只读写 BIB 文件作为数据库,而不是像 Zotero/EndNote 一样在你的指定文件夹丢一堆乱七八糟的随机字符串文件夹,占用只能说相较于 Zotero 好些,但是基本功能都有,不需要像 Zotero 一样借助不同开发者开发的插件。

争辩

有一次,在某个我专业的技术群,一个人问了一个很简单的问题,说是序列的合并需要怎么操作、有什么软件可以使用嘛,我就说了句 SequenceMatrix,一个 Java 开发的图形软件,操作很简单,而且经过在 ArchLinux 上打包后只有 687 KB,而另外一位群友则是说 SequenceMatrix 不方便,推荐了一款比较 All-In-One 的软件,是 Python 写的,是需要借助其它软件的流程化的图形软件,经过在 ArchLinux 上打包后有 51 MB,而且很多功能是提问者所不需要的。

到目前,我都不知道那个 687 KB 的软件到底如何不方便。但是据我所知,那个 Python 软件目前支持的 Python 版本是 3.6.7,并且当我报告新版本 Python 下运行该软件时的 bug 时,我被告知的是依赖的库应该使用 1.71 而不是当时的 1.78,而且解决的方案竟然把环境从当时的 Python 3.9 降到 Python 3.6,而不是修改代码。

我并不是批评什么语言不好,Python 脚本的确能做很多事情,甚至我软件仓库的构建脚本都使用 Python 写的。但是当一个软件的不稳定足以扰乱你正常的工作流程时或者当它开始占用了不该占用的那么多资源的时候,你就要开始反思是不是要开始着手找一些替代了。

结语

这篇文章只是因为在看了那么多软件的推广文章之后写出来的,这篇文章不是为了褒贬抑或推荐一些软件,而是想要从自身的几个案例,让各类新奇软件使用者不要沉迷于软件功能的花花世界,而是看到个人信息的输入、个人时间的付出同样是一种投资,计算机资源一样是个人宝贵且优有限的资源。要谨慎决议自己的投资行为,同时权衡自己有限资源的使用。