当前位置: 首页 > Web前端 > vue.js

Yank笔记系列01-为什么要编写自己的笔记软件?

时间:2023-03-31 18:23:50 vue.js

YankNote是我写的一款面向程序员的笔记应用。在这里我会写一些关于YankNote的文章tl;dr我想做一个我(用户)可以完全控制的笔记软件。出身从大学开始,我就一直在尝试使用各种笔记软件,从SublimeText,到直接编辑文件,再到使用Evernote、OneNote等各种云笔记,最终选择了微知笔记。但是后来微知note开始收费了,越来越臃肿,反应慢,bug多。最终,我放弃了。备份笔记费了一番功夫,我开始不再相信云产品了,我电脑上的真的是我的。于是开始寻找一款本地的笔记软件,断断续续用了很多产品。其中只有乔普林让我用的时间最长,但我并不完全满意。后来又转而使用SublimeText来写Markdown。终于,三年前的一天,我决定写一个笔记工具供自己使用。我花了一个下午拼凑出第一个工作版本。使用Node.js作为服务器,Vue作为前端。这个功能有多粗糙?只有读写文件的功能;没有按钮,只有快捷键;界面随机搭建在一起。它只是一个功能不佳且丑陋的记事本。我不知道我需要什么或做什么。后来慢慢找到了这么一个目标接口。字太大容易看不懂:)Markdown写图片文件保存在本地,导出Markdown文件轻松搞定离线工作。支持绘制一些流程图。文件,文件可以单独设置,没有更多花哨的功能,简单到可以使用,尽量少依赖三方库,也懒得维护,功能混在一起,就可以了^_^RunPHPPythonNodeinthedocument.js代码块这个时候的界面是这样的总的来说,这个时候我还是按照自己的想法来做这个应用,不管是美观还是方便,只要功能满足我的需求即可。后来,我的一个同事发现这个应用程序很好用并开始使用它。我在掘金Markdown编辑器上发了一篇文章(自用),我的朋友@KDA评论说:“请更新和改进它,它非常有用。”于是我开始思考,除了我自己,这个东西能不能完善起来,给别人用。但是这时候我才发现,我还没有给这个编辑起名字呢。GitHub仓库的名字是“yn”,所以顺着这个,为了方便别人,正式命名为“YankNote”,并决定使用Electron进行开发,方便启动和运行。Evolution到这里再想想,我需要什么样的笔记应用,最后定下如下原则,按重要程度拒绝云服务:数据应该存储在本地,应用也应该在本地运行,备份和同步需求都可以去Git或者云盘,私人笔记,不需要协作功能。连图床之类的都不要用了,直接保存在本地就好了。拒绝专有格式:使用Markdown文件保存所有信息,不要给我任何json格式或其他格式,万一哪天我放弃了这个软件,应该很容易迁移。开源:我想长期使用一个软件,所以不能关闭。万一哪天app作者不更新了,我想自己能fork一份来维持基本的操作。可扩展:此应用程序需要具有足够的可扩展性。当自己遇到一些具体的需求,或者使用软件有问题的时候,需要能够写插件或者扩展来修改实现。克制:应用需要保持简单,不要太臃肿,不要太花哨,不要有太多干扰我操作的动画。比如Notion的菜单动画,一开始感觉很酷,但是用了之后会觉得很拖沓。而且它的一些工具提示显示得太快,成为操作的干扰。在这里我非常认同SublimeMerge的理念。SublimeMerge是我用过的最好的Git客户端,用起来很愉快。跨平台:我同时使用Windows、macOS、Android、iOS。我需要应用程序是跨平台的,至少在桌面上。不过我的笔记和文章大部分都是在电脑上完成的,只需要在手机上记录一些灵感就可以了。很多软件都能很好的满足这个需求,比如iOS自带的备忘录。另外,由于文件格式不排他,不绑定云服务,很多移动端的Markdown编辑器也能很好的工作,移动端跨平台的需求也没有那么强烈。以上这些原则,都是为了让我能够长期使用一款软件。如果你认同以上观点,那么YankNote或许就是你的菜。我是一个标准的程序员。后端和前端嵌入式我都做过,偶尔也是个白帽子。现在主要从事前端工作。这让我的笔记需求有些特殊。下面说一下我使用YankNote的一些具体场景。做笔记:这是一个基本要求。我需要做的笔记中有很多代码。代码应该易于复制和运行。比如在学习一些js特性的时候,我会把代码片段保存下来,下次查看的时候马上运行。工作日志:刚毕业的时候,工作的时候基本上什么都能记在心里,现在不行了。我需要一个地方来记录,安排一些待办事项,工作安排等。写文章:我发的文章比较少,很多文章都是写的计划和工作中的文件。这时候,笔记应用能够支持内嵌图形就显得更加重要了。编写工具:在平时的工作中,脚本工具很多,散落各处或者之前的指令很少,后面使用起来比较麻烦。现在,它们都在YankNote中进行了组织和关联。很多脚本和代码可以更方便的打开,可以有更丰富的描述和UI界面。经过以上场景的洗礼,YankNote长期存在的问题不是没法增加,而是没法减少。以下是一些用户问过我的问题,也是我在做YankNotes时考虑过的,大部分都是关于“为什么不”的问题。Q:为什么要用C/S架构?A:我喜欢浏览器。我通常在浏览器中使用YankNote。有了浏览器插件,我可以做更多的事情。目前的架构重客户端轻服务端,未来服务端逻辑会不断精简。Q:为什么要单独使用编辑预览而不是所见即所得?A:一个是因为喜欢文字,喜欢驾驭文字,更喜欢用代码写东西。二是技术原因,富文本编辑器很难做好。体验过很多富文本编辑器/组件,但是很难达到我想要的体验,而且没有直接文本那么直接。Q:为什么没有调整格式的工具栏?A:和上一个一样,我喜欢文字,不喜欢太多的UI。用户应该使用文本来控制格式,编写Markdown。YankNote的用户应该熟悉Markdown。当然我也可以偷懒不做这个功能。Q:为什么不做成VSCode插件呢?A:VSCode插件还是有很多限制,有些功能不能轻易实现。我还是更喜欢浏览器的简单直接。如果您需要,这个VSCode插件非常棒。Q:为什么不集成Git功能,自动推送到Github?A:我自己的几个笔记仓库都存放在Github上,这个需求比较迫切。但我仍然希望将Git集成排除在YankNote功能之外。每个用户都有自己管理Git仓库的习惯,比如我喜欢SublimeMerge。当然,为了方便,我还写了一个YankNote插件来快速提交和推送内容。Q:为什么不做网络版?A:YankNote从一开始就是C/S架构,但是现在有了Electron的一些功能,做一个在线版还是很容易的。比如现在网上的demo就是屏蔽接口请求的版本。但是如果做成webservice,那么就违背了我的第一个原则,我不希望这个编辑器脱离用户的控制。另外,由于YankNote极其开放,为了可扩展性,安全问题很难考虑周全(本人是业余白帽)。Q:为什么没有文件关联就可以直接打开Markdown文件?A:如前所述,YankNote极其开放,具有代码运行、宏替换、HTML解析等功能。为了更高的可扩展性,内部能力几乎完全释放,包括一些危险的能力,比如命令执行、任意文件读写等,所以我没有做文件关联功能。只能从仓库中打开,让用户打开国外文件更加谨慎。Q:有考虑做双链笔记吗?A:双链笔记很流行,但是我体验过一些双链笔记软件,比如Obsidian,发现自己不需要。我同意这篇文章的观点。请不要神化双链笔记。从我实际使用笔记的经验来看,我最需要的是文档之间的单向链接,但是粒度不需要到“块”,到标题就可以了。对于反向关联,我只需要能够知道当前文档被谁引用了。我不认同扁平化的笔记结构,就像写代码一样,我不认同所有的逻辑都在一个文件里。我需要层次结构,我需要能够引用模块,知道当前模块被谁引用就足够了。在这方面,YankNote有待加强。这几年我一直在用YankNote,我开发的功能也是因为自己和用户的需要。在开发YankNote的过程中,我的编程能力也得到了很大的提高,所以即使是出于学习的目的,我也会继续开发和维护它。现在可以期待的未来几个改进点:增强基础体验简化服务器端代码加强文档之间的链接开发简单的移动应用程序很多。本文由《YankNote——一款给程序员的Markdown笔记应用》撰写