quake一个开源的知识管理元框架(代码片段)

Phodal Phodal     2023-02-21     438

关键词:

本文使用 Quake Web 应用编写,虽然只有基本的 Command + S 来保存标题 + 内容的功能。这个简单粗糙的页面,让我想起了多年前构建 Phodit 的场景, it works 作为开始就足够了。

来, 先上链接 GitHub: https://github.com/phodal/quake

缘由

半个月前,我在准备一个材料,好不容易从我的博客、Todo、Notes 里找到了一些相关的素材。我使用了不同的工具来管理知识,Microsoft To Do 管理 idea、Phodit + Phodal.com 发布文章、Apple Notes 记录笔记等等,知识被分散在各个工具中。不利于我进行洞见,寻找灵感,与此同时,还缺乏书写和记录的方式。

于是,我需要一个新的工具来融合到我的知识体系里,它应该是:

  • 开源的。可以自由扩展。

  • 分布式 + 本地化的。可以离线使用,方便于出差旅途中使用。

  • 版本化的。可以自由查看变更历史。

  • 开放的。可以自由与其它工具组合。如 Vim、VSCode 等。

  • 易于扩展。可以结合习惯用的工具。诸如于,基于 DSL 的编辑-发布分离的类 Web 模式,用于展示。如 MxGraph、Mermaid、Ledge Framework 等

所以,就有了:https://github.com/phodal/quake

Quake:知识管理元框架

Quake 的目标是构建面向极客的知识管理元框架,它可以:

  • 自由的文本内容管理。Todo 清单、文章管理、书评、笔记等。

  • 构建知识网络体系。定制化 markdown 链接

  • 抓住稍纵即逝的灵感。支持快速启动(CLI、TUI)与全局搜索

  • 自由的呈现画布。DSL 与自由画板

简单来说,通过 Markdown 来记录数据,Git 来进行版本化,Terminal 来快速编辑,Web + Web Components 提供定制能力。

Quake 设计理念 1:数据代码化

Quake 延续了 Ledge Framework 中非常成功地思想:文档代码化 + Markdown 图表化 + Git,来提供对于数据的管理。尽管我们没有在 Quake 中引入数据库,但是依旧可以提供如下所功能:

  1. 数据迁移。

  2. 历史状态。设计一个拥有历史状态的内容是一件麻烦的事情。

  3. 数据查询与更新。

  4. ……

只是呢,现在的这些功能只能支持基本的开发。对于扩展来说,依旧是有问题的,未来需要提供简化版的 SQL,以提供更好的数据处理。而除了 SQL 之外,另外一种简单的方式,就是提供脚本语言的支持。

Quake 设计理念 2:自由定制

设计一个能支持不同数据模型的知识管理系统痛苦了,需要大量地前期工作。因此,我们先构建了一个可以自定义数据格式的元数据引擎。让每个人都可以自定义的数据格式,并能为这些数据自定义视图,就能简化大量的工作。

自定义数据类型

在 Quake 里,通过 YAML 来定义数据格式,也可以从导出的数据后生成(通过 quake cmd -i “quake.sync” ):

- type: notes
display: ""
fields:
- title: Title
- description: String
- category: String
- created_date: Date
- updated_date: Date
- author: String
actions: ~

生成对应的 markdown 文件,形如: 0001-time-support.md 即 id + title 的形式,对文件再进行编辑:

---
title: time support
author:
content:
created_date: 2021-11-24 19:14:10
updated_date: 2021-11-24 19:14:10
---
ahaha

考虑到生态兼容的问题,所以在 Quake 里直接采用了 Jekyll 的 Front Matter 语法来定义数据。我们对于文件的编辑操作,即内容和相关的内容信息,都是直接基于这个 markdown 文件的。

自定义显示组件

进行中。

现有的 Web 部分架构是基于 Web Component 构建的,以提供自定义的数据操作能力。如通过下述的代码,可以构建我们的编辑器,并进行对应的交互:

const editor = document.createElement('quake-editor');
editor.setAttribute('id', entry.id);
editor.setAttribute('title', entry.title);
editor.setAttribute('value', entry.content);
editor.addEventListener("onSave", function (event) 
update_entry(params.type, params.id, 
title: event.detail.title,
content: event.detail.value.replaceAll("\\\\\\n", "\\n")
)
);
return editor

对于不同的内容来说,也是类似的,只需要创建好对应的组件,处理相应的结果即可。通过这种方式,构建出常用的各种数据类型,并让所有的开发者都可以自定义。

如何使用 Quake

现阶段,Quake 面向的群体主要是极客、软件工程师,又或者是具备一定 IT 基础的软件开发人员。毕竟,我们还没有 GUI,还需要一系列的应用封装工作。不过,GUI 从架构上来说太重了,构建一个基于本地 Web + Terminal 的 MVP 版本反而更加容易,还能验证自由度的可行性。

安装 Quake

Quake 的安装在现阶段,还是比较麻烦的,还只能在 CLI 下进行(所以,我们面向开发者,我还有得选吗?):

  1. 安装 Quake。

    1. 有 Rust 环境的话,可以直接 cargo install quake

    2. 没有 Rust 环境的话,可以从 Quake Release 页面下载。

  2. 安装搜索引擎(可选的)

    1. macOS 用户,可以直接 brew install meilisearch

    2. 其它操作系统的用户,建议访问官方进行:https://github.com/meilisearch/MeiliSearch

  3. 引入 Web 页面。可以从 Quake Release 页面下载 web.zip,并解压到某个目录。

随后,到相应的文档目录,执行 `quake init`,就可以得到一个初始化的环境了。执行 quake server ,就可以进入 Web 页面使用了。

Quake Importer

回到文章的开头,首先我们要解决的是数据迁移的问题。所以,上周末,我的主要工作是在数据迁移上,将不同的数据源转化为 Markdown。如在 Quake Importer 中,有下述相关数据源的文档:

  1. Django CMS 的相关文章

  2. Apple Notes(备忘录)的相关备忘

  3. Microsoft To do 的相关待办事项

从我的数据来看,我大概有 888 篇的文章,99 个 Todo,还有 302 篇的备忘。当然了,我还有一部分抓取的资料存储在 Microsoft OneNote 上,这部分在后续需要进一步完善了。

Quake Cmd

在导出相关数据,便可以通过 quake cmd -i “quake.sync” 命令同步生成定义不同内容类型的定义文件。

随后,可以直接创建新的内容,只需要通过 quake cmd -i “blog.add: Quake 一个知识管理元框架” 来快速创建新的 blog 内容。Quake 优先通过 Terminal 实现了基本的 CRUD 功能,如此一来,我们不需要缓慢地启动笔记工具,才能完成一个快速的想法。我们可以利用大量地再成的基于 Terminal 编辑器,如 Vim,快速完成记录。

在保存之后,我们将更新生成对应的 csv 数据索引文件,以面向 Terminal 提供快速的接口能力。

Quake Server

当我们需要寻找灵感时,便可以通过 quake server 启动我们的 Web 服务,在上面搜索、索引知识、管理知识等。基于本地的 Markdown + Meili 搜索引擎,我们能构建最好的本地体验。Quake 的 Web UI 界面是基于一个个的 Web Component 构建的,这就意味着,在我们提供 CRUD API 的基础上,你可以结合我们提供的组件能力,自由地构建你的 Web UI。通过在 Quake 的配置文件 .quake.yaml 中修改 server_location 参数,就能使用自己开发的页面了。在这时,Quake 只是作为一个 Markdown 的 CRUD API。示例:

最后,因为所有的数据是围绕于 markdown + yaml 的,所以,我们可以结合 Git 进行版本化管理。(PS:这部分功能还没设计)

下一步

在完成了 MVP (最小可行产品)版本之后,依旧还有一系列的工作要做:

  • Terminal UI。已经有小伙伴工作在上面。

  • 定制 Markdown 语法。用于支持诸如于双链、文本图表化、脑图

  • 全局 GUI 入口。从全局搜索支持,类似于 Spotlight Search

  • Web 应用设计。现在的版本非常粗糙,缺乏各种功能。

  • 更好的知识管理。

你可以在 Quake 的 Story 中看到更多的相关内容。

如果你也有兴趣,欢迎加入我们:

开源一个基于.netcore的企业级应用开发框架------fap(代码片段)

 Fap简介它一个企业级应用的快速开发平台。包含了所有企业级应用开发所需要的所有基础模块。可以使您更关注于业务的开发。github基础模块主要包含的基础模块有:用户管理,角色管理,菜单管理,权限管理,组织管理,... 查看详情

开源web框架django知识总结(代码片段)

开源web框架django知识总结(一)django起源:1.2005年发布,采用python语言编写的开源web框架2.早期的时候django主要做新闻和内容管理的3.重量级的pythonweb框架,django配备了常用的大部分组件组件:包含组件如... 查看详情

不想加班开发管理后台?试试这个java开源项目吧!(代码片段)

...天给大家带来一款开源的Java后台管理框架——EL-ADMIN它是一个基于SpringBoot、SpringDataJPA、JWT、SpringSecurity、Redis、Vue、Element-UI的前后端分离的后台管理系统。如果你想要学习上面这些框架 查看详情

前端技术规划与战略:2022(代码片段)

...关的后端架构咨询和设计上。只是,刚好最近在编写知识管理元框架Quake,应用了一些算是比较新的架构思想,特别好玩。所以,这篇文章结合一些公司的前端架构需求,社区上的一些趋势,以及自己的探... 查看详情

开源web框架django知识总结(代码片段)

开源web框架django知识总结(二)接着开源web框架django知识总结(一)的知识继续讲解,url和视图函数URL结构语法:protocol://hostname[:port]/path[?query][#fragment]实例:http://tts.tmooc.cn/video/showVi 查看详情

开源web框架django知识总结(代码片段)

开源web框架django知识总结(五)一、admin后台管理什么是admin管理后台?django提供了比较完善的后台管理数据库的接口,可供开发过程中调用和测试使用django会搜集所有已注册的模型类,为这些模型类提供数据... 查看详情

开源web框架django知识总结(代码片段)

...关联。Django认证系统同时处理认证和授权认证:验证一个用户是否它声称的那个人,可用于账号登录。授权:授权决定一个通过了认证的用户被允许做什么。Django认证系统包含的内容用户:用户模型类、用户认证... 查看详情

开源web框架django知识总结(代码片段)

开源web框架django知识总结(六)一、缓存定义:缓存是一类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式。一般用来存储临时数据,常用介质的是读取速度很快的内存意义:视图... 查看详情

开源web框架django知识总结(代码片段)

开源web框架django知识总结(四)一、ORM查询操作查询简介:数据库的查询需要使用管理器对象进行通过MyModel.objects管理器方法调用查询方法all()方法用法:MyModel.objects.all()作用:查询MyModel实体中所有数据,... 查看详情

开源web框架django知识总结(代码片段)

开源web框架django知识总结(七)一、项目介绍1、项目需求分析需求分析原因:可以整体的了解项目的业务流程和主要的业务需求。项目中,需求驱动开发。即开发人员需要以需求为目标来实现业务逻辑。需求分析... 查看详情

开源web框架django知识总结(代码片段)

开源web框架django知识总结(七)一、项目介绍1、项目需求分析需求分析原因:可以整体的了解项目的业务流程和主要的业务需求。项目中,需求驱动开发。即开发人员需要以需求为目标来实现业务逻辑。需求分析... 查看详情

开源web框架django知识总结(十四)(代码片段)

开源web框架django知识总结(十四)容器化方案Docker涉及到相同的工作是否需要重复做。避免相同的工作重复做是容器化技术应用之一。1.Docker介绍Docker通常用于如下场景:web应用的自动化打包和发布;自动化测试... 查看详情

开源web框架django知识总结(十四)(代码片段)

...数据库或其他的后台应用;Docker中文社区文档Docker是一个开源的软件部署解决方案。Docker也是轻量级的应用容器框架。Docker就像一个盒子,里面可以装很多物件,如果需要某些物件,可以直接将该盒子拿走,... 查看详情

开源web框架django知识总结(二十)(代码片段)

开源web框架django知识总结(二十)阿尔法商城(订单)订单提示:订单入口在《购物车》页面的《去结算》。《去结算》后进入到《结算订单》页面,展示出要结算的商品信息。结算订单新建apps->orders,同步数据... 查看详情

开源web框架django知识总结(十九)(代码片段)

开源web框架django知识总结(十九)阿尔法商城(购物车)购物车存储方案新建apps->carts必须是用户登录状态下,才可以保存购物车数据。用户对购物车数据的操作包括:增、删、改、查、全选等等每个用户的购物车... 查看详情

hive如何实现钩子hooks(代码片段)

Hive版本:2.3.41.HiveHooks业界有许多开源的数据治理和元数据管理框架,可以在复杂的场景下满足元数据管理的需求。其中比较出名的ApacheAtlas就是利用Hive的Hooks实现Hive的元数据管理。Hooks是一种事件和消息机制,与插... 查看详情

hive如何实现钩子hooks(代码片段)

Hive版本:2.3.41.HiveHooks业界有许多开源的数据治理和元数据管理框架,可以在复杂的场景下满足元数据管理的需求。其中比较出名的ApacheAtlas就是利用Hive的Hooks实现Hive的元数据管理。Hooks是一种事件和消息机制,与插... 查看详情

开源web框架django知识总结(十三)(代码片段)

开源web框架django知识总结(十三)省市区三级联动展示收货地址界面提示:省市区数据是在收货地址界面展示的,所以我们先渲染出收货地址界面。收货地址界面中基础的交互已经提前实现。1.新建appareas,新... 查看详情