一款支持 markdown 和无限画布的自由嵌套图形化笔记软件 NodeNote

这是项目链接, 喜欢的小伙伴可以帮忙点点 star 吗, 最近校招压力有点大哈哈哈, 感谢了.

NodeNote

这是 v2.19 介绍视频, 此时暂无 markdown 内容, 主要介绍笔记思想

这是最新版增加的 markdown 以及无限画布内容

1. 设计灵感

(一)当前背景

随着 GUI 框架的不断发展,纸质笔记逐渐有了它的弊端,比如说图片插入/书写代码/修改内容等繁杂性,于是就涌现出了电子化笔记。目前市面上主流的笔记软件分为两个派系,一类是对应于 IOS 端的平板书写类型笔记,这种笔记软件主要是优化纸质书写的弊端,提供了一定的便捷性;另一类是对应于 PC 端的笔记软件,其有两种类型:文字类笔记以及导图类笔记,对于大多数用户来说一般是用文字类笔记进行记录内容,通过导图类笔记整理大纲,方便记忆与整理。

(二)灵感来源

在体验过众多的笔记软件之后,例如说 md 文档类型的思源笔记,Notion 笔记等等,以及 XMind 等思维导图软件后,我们不难发现他们都有一个共同的弊端。

对于文字类笔记来说,逻辑表达完全取决于文字,举个例子来说:当我们在作操作系统这门课程的笔记时,学到死锁这一节,要我们解释什么是死锁,用文字来表示就是如下:

是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力 作用,它们都将无法推进下去。称此时系统处于死锁状态或系统产生了死锁。

我们不难发现,当我们阅读文字的时候,我们会将文字所表达的逻辑在我们的脑海中表示出来。这样会有几个弊端:

  1. 在涉及大规模知识结构的时候,我们只能通过文字列表或标题的形式去区分每个知识模块,但是知识模块和知识模块之间是有联系的,这种表示方式割裂了它们之间存在的逻辑关系。
  2. 我们在读取文字的时候,会多出一个“将文字转换成自己所理解的逻辑图像”的步骤。

对于思维导图类软件来说,虽然可以部分解决文字笔记的知识模块之间的联系,但是对于逻辑的表示并不是很清晰:节点与节点之间的联系只有一条线,而对于这条线表示什么逻辑却没有办法说明,典型的例子就是 XMind 这个软件,例如我们从 A 节点导出一条线连接到 B 节点,我们无法知道 A 和 B 是什么关系,仅仅知道它们是有关系的而已。同时在市面上所有的思维导图软件中,都不支持节点内的复杂编辑:富文本/代码高亮/表格/图片/附件/子节点概念等等,对于复杂逻辑的表示很不友好。

因此为了解决上述弊端,我独自开发了一款基于节点的逻辑思维导图软件,它不仅支持节点的复杂编辑,同时对于 UI 的用户自定义也做到了极致,用户可以自定义其中任何一个部件的颜色/宽度;而对于至关重要的复杂逻辑表达,我们引入了逻辑真/假的端口以及逻辑与或非门的支持。

2. 知识体系介绍

注: 此时的版本为 0.1 版本, 在文章下侧会介绍最新版全部内容, 不过记笔记的思想应该是一样的.

针对于市面上思维导图的逻辑表示不完备所设计

对于一个节点与另一个节点的逻辑关系,我们需要有这两个节点的真值表示:同样以死锁为例子。

例如说,A 节点是不剥夺条件(产生死锁的其中一个必要条件),而 B 节点是死锁,那么当 A 节点真值为真的时候,B 节点可能为真。而 A 节点真值为假的时候,B 节点一定为假。

因此我们采用了输入为真(左上角),输入为假(左下角),输出为真(右上角),输出为假(右下角)四个端口去表示这个逻辑。当我们从 A 节点的输出为假端口引出这条逻辑线的时候表示,输出节点的真值为假,即 A 节点真值为假。而 B 节点作为输入节点,也有两个输入,一个为真,一个为假,也代表了自身的真值。这样子就表示了上述死锁的其中一种逻辑关系,具体见下图的详解:

image.png

图 2:真值的引入

我们通过上面已经表示了什么时候 B 节点的进程死锁真值为假,但是我们还缺少令它真值为真的情况,因此我们考虑什么时候它的真值为真。再看死锁的必要条件,一共有四个:不剥夺条件,请求和保持条件,循环等待条件,互斥条件。只有当四个条件全部为真的时候,B 节点才能为真。

好,现在我们如果不引入任何东西,就使用现在的表示逻辑,我们只能够如此表示:

image.png

图 3:错误示范

当我们如此表示的时候,我们发现这样子的逻辑是说:A,B,C,D 中任意一个节点真值为真了,都能让 E 节点真值为真,这不是我们想要的逻辑表示。我们想要的表示应当是 A,B,C,D 全部为真的时候,E 才能为真,因此我们引入了一个逻辑控制组件:与或非门,如图所示:逻辑控制组件对于输入和输出有三种条件:分别是 And, Or, Not,当我们将 A,B,C,D 四个节点的输出放到输入与门上表示,只有四个节点的真 值全部为真的时候,它们才能算作真值为真。而逻辑控制组件的输出为与门表示如果有多个节点,那么所被输入的多个节点都能作数。

image.png

图 4: 逻辑控制组件的引入

我们再举个例子,对于逻辑控制组件的输入为或门(Or)的时候,表示只要其中一 个条件成立,那么这条逻辑链才成立。同样用进程死锁的例子来表示:进程死锁产生的原因有很多,比如说对系统资源的竞争,进程推进顺序非法,信号量使用不当等。这些原因只要出现一个,那么就会产生进程死锁。我们用或门(Or)连接这几个条件,表示只要有一个为真,那么它们的组合才为真,逻辑链才能走通。如图所示:

image.png

图 5: 逻辑控制控件的使用

好,目前我们已经处理了基本的节点与节点之间的相互限制的逻辑。但是我们考虑这种情况:如果我们需要表示知识模块和知识模块之间的关系应该如何表示呢。因此,我们引入一个从属于的子节点概念。即我们可以在节点内嵌套其他子节点,形成一个知识的小模块。如图所示:我们的子节点是网格布局,允许子节点之间的位置调整。

image.png

图 6:子节点的引入

好,接下来我们再考虑一种情况,如果我们的知识模块过大应当如何处理呢。如果还采用这种子节点无限制的嵌套,一个知识模块有几百层这么长,虽然我们支持搜索功能,但是这样对于我们的记忆是不方便的,我们的大脑喜欢一小块一小块的记忆,因此我们引入了一个子图的概念,对于每个节点,我们都可以进入其子图,子图内又是一个新的场景,我们可以在子图里表示我们想要的复杂逻辑,从而优化子节点过长带来的烦恼。如图所示,我们可以进入知识模块 A 的子图,进行复杂编辑,其内部是一个崭新的场景,可以添加这些部件。而对于侧边的子图目录我们有升序排列和降序排列。

image.png

3. NodeNote 功能全介绍

1. 如何运行

输入框架 IME 最好选择 搜狗输入法

1. 不同平台的方式

1. 使用脚本方式运行

  1. 安装 python: Python版本 >= 3.6
  2. 安装依赖: pip install -r requirements.txt
  3. 运行脚本: python example.py

2. 使用可执行文件运行(路径应为纯英文路径, 不要包含特殊字符)

2. 打开后的工作区介绍

  1. 进入工作区: 现版本采用工作区结构,
  1. 工作区结构: 第一次打开空白工作区会生成以下文件

过去版本迁移

2. 如何使用小部件

1. Alt+Q 或者 鼠标右键 创建 属性控件: 支持富文本, markdown, 以及其他小部件的嵌套

支持的嵌套类型

支持的富文本操作:

您可以选中节点内的富文本拖拽到其他地方

Python 高亮 :Ctrl+9 清空对齐格式:Ctrl+P 加粗:Ctrl+W
左对齐 :Ctrl+[ 右对齐 :Ctrl+] 居中对齐 :Ctrl+ \
斜体 :Ctrl+Q 下划线 :Ctrl+R 删除线:Ctrl+/
增大字体:Ctrl+G 缩小字体:Ctrl+H 改变字体颜色:Ctrl+N
超链接:Ctrl+M 数学公式格式参见: Ctrl+I 清空所有格式:Ctrl + L
撤销上一步:Crtl+Z 恢复上一步:Ctrl+Y 创建一个表格:Ctrl+1
增加一行表格:Ctrl+3 增加一列表格 :Ctrl+2 删除一行表格 :Ctrl+5
删除一列表格 :Ctrl+4 选中表格后合并表格行列:Ctrl+6 合并表格后拆分已合并内容:Ctrl+7
添加一个列表 :Ctrl+8 改变插入图片的大小 :Ctrl+U 文字向后缩进或向前缩进:Tab or Ctrl+Tab
复制 html 内容:Ctrl+C 复制纯文本内容:Ctrl+Shift+C 粘贴:Ctrl+V

支持的 Markdown 操作:

支持的节点无限画布:

支持的真值

支持的复制节点以及粘贴

支持的扩大与缩小: 用 Shift+鼠标左键 扩大与缩小

2. Alt+W鼠标右键 创建 逻辑控件: 使用两个与或非门进行逻辑的控制

3. Alt+E鼠标右键 创建 绘画部件

4. 通过 双击其他部件端口 创建连线

5. 结合上述所有部件的碰撞检测

6. 综合上述的逻辑控件和属性控件的功能

3. 如何使用场景

1. 创建子场景

2. 属性控件 与其他 属性控件 跨越场景的超链接跳转


3. 基本设置

4. 文件分享与导出操作

1. 导出该场景到 .note 文件

2. 导出该场景到 png 图片

5. UI 的操作

6. 最后

感谢您使用 NodeNote, 如果遇到任何问题或想提建, 欢迎创建一个 issue

如果有朋友想参与项目, 非常欢迎. 目前要是有人能多写几个 qss样式表 就好了哈哈哈哈.

  1. fork 该仓库
  2. 修改代码
  3. 创建新 brand
  4. push 到我的 main 分支
  5. 我会根据实际情况进行合并分支

v2.36.21:

2 操作
babyQ033 在 2022-01-14 14:22:46 更新了该帖
babyQ033 在 2022-01-14 14:21:51 更新了该帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • PiChou
    订阅者

    整挺好 👍