安装Python和xnote , xnote的介绍请查看项目主页
打开xnote,点击【插件】菜单,然后选择右侧的新增插件
然后输入插件名称,点击确定,我们就创建了第一个插件,进入插件内容编辑页面
创建程序已经生成好了一个demo,我在handler方法里面新增了两行代码演示基本的writeline和writehtml的功能
# 输出文本,需要注意的是文本内容永远是显示在最后一行的,所以Hello, Xnote实际上在按钮的后面
# 如果需要在中间插入文本需要使用writehtml编写html代码
self.writeline("Hello, Xnote!")
# 输出HTML
self.writehtml("")
好了,编写完插件之后,我们只需要点击预览按钮就可以立即看到插件的运行结果了,是不是很easy!
系统提供了一个BasePlugin的类用于快速构建插件,下面是基类的一些属性,了解他们可以更好的开发插件,如果有兴趣了解实现细节,可以阅读源码。
# 输入框的行数,设置成0可以隐藏默认的输入框和按钮
self.rows = 20
# 插件的标题
self.title = "BasePlugin"
# 默认的按钮文字
self.btn_text = "处理"
# 提交请求的方法
self.method = "POST"
# 输出的文本内容,通过writeline(text)输出
self.output = ""
# 插件的说明信息
self.description = ""
# 插件输出的html内容,通过writehtml(html)输出
self.html = ""
# 自定义css样式
self.css_style = ""
# 是否显示分页
self.show_pagenation = False
# 分页的链接
self.page_url = "?page="
# 侧边栏的样式
self.aside_html = ""
虽然现在的插件系统已经可以用于开发新的功能页面,但是需要改进的地方还是比较多的。具体列出以下几项:
目前插件不能针对系统的标准事件进行响应,但是没有加这个功能还是有一些顾虑的,那就是一旦插件数量多了起来,那么整个系统的性能可能会非常差,大家使用电脑和手机都有这样的感觉:用过一段时间之后,系统越来越卡,甚至卸载软件之后都不起作用,最后不得不重装系统甚至升级硬件。插件的功能很好,但是我不希望它喧宾夺主,系统核心服务永远是最重要的。
对于怎么支持事件监听,我目前有两个想法
- 通过配置的方式实现,系统只把事件消息推给配置中的插件,系统实现成本低,适用于程序员使用
- 通过插件市场进行安装,安装的时候用户选择是否授权应用监听系统事件
后续将看具体情况决定采用哪种方案,采用方案1的可能性较大。现在让我们来看看哪些事件将被支持
on_install
安装插件,用于插件初始化on_uninstall
卸载插件,插件卸载前的清理工作on_init
系统初始化on_deinit
系统回收资源,由于系统退出的不确定性较大,退出事件不能保证执行。on_event
适用于上述标准事件之外的事件,主要包括xnote提供的业务功能 在很多支持扩展的系统中,插件的核心功能就是能够在标准化事件之外可以做的更多,它就像一个催化剂,能够激发原来系统的强大活力。
举个例子,如果在每次笔记更新的时候插件能够自动把结构化的信息筛选出来进行分类,那么我下次需要找一个网页链接的时候再也不用为想不起文件名而烦恼了,我只需要编写或者找到相关插件,把文档中的链接抽取出来,再通过修改时间、文档名称、分类、标签等维度的辅助信息,就能很快的定位到这些信息了。
类似的还有很多,比如支持语义化的搜索功能,记录文档的历史修改记录等等。更多的功能等待你的发掘!
目前版本的插件没有引入任何权限控制相关的限制,增加插件文件之后就可以执行,安全的风险较大,后期会考虑加入用户授权的过程,限制插件的非法访问。
目前插件系统都是实时编译执行的,这么做主要是为了在修改之后能够马上生效使用,后续会考虑通过字节码缓存来进行加速。
初期为了功能快速实现,插件采用了单文件的方式,对于需要使用较多的资源文件或者逻辑很复杂的插件,单文件的缺陷很大,所以后期会考虑类似于exe文件这种打包好的插件。
插件可能是xnote的最后一个大功能了,后续项目将进入维护状态,但是核心功能依旧会得到强化。
xnote大概起源于2015年,那时候还只是想写一个简单的记事本功能,甚至还不是web版本的,也没有托管代码,当时只是想写个小工具,没想到一路断断续续开发了将近四年了。特别是2016年下半年开始的这段时间,开始尝试用项目的形式来进行开发,使用git托管代码、设置目标、编写测试用例、发布Release版本。当初也没有特别强烈的目标,纯粹出于兴趣,没想到一切居然有模有样了起来,我自己工作生活也越来越依赖xnote,真的是很奇妙的一段经历。
开发过程中,有无数的开心和烦恼,常常是编写代码忘记了时间,一转眼已经到了深夜,但是回过头一看,大部分功能又被自己否决。但是更多的是完成了一个新的功能或者优化的时候心中满满的成就感,我想这就是编程的魅力吧,记得看费曼自传的时候,费曼发现很多同事研究计算机着迷了,所以下定决心决不去编程的时候,就忍不住捧腹,费曼果然是个天才,这绝对是计算机科学的一大损失,试想同样是天才而且是费曼的同事,诺依曼先生投入计算机领域后创造了多大的成就!
当然,这个项目也给了我很多教训,最刻骨铭心的莫过于标准这个事情了,初期为了功能马上能用写了很多重复低效的代码,很多到现在还没有改完,但是改造后的代码往往只有之前的几分之一,而且性能、扩展性、可读性都更好。这实际上就是我们工作中常见的临时方案,这些临时方案往往都不临时,最后系统升级的时候就会痛苦万分,所以现在我在听到临时方案的时候几乎就是本能的反抗。
哈,不知不觉侃了这么多,希望读者能够喜欢这个小软件和插件功能,如果不嫌麻烦请给项目点个star:)
项目地址
最后插个广告,我厂(阿里、菜鸟网络)长期招聘优秀人才,有意可以给我发简历([email protected])获得内推机会,成功入职后还有大奖:).