SorryChen

SorryChen

V2EX 第 166280 号会员,加入于 2016-04-04 12:27:08 +08:00
今日活跃度排名 4609
根据 SorryChen 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
SorryChen 最近回复了
@v2taylor @xhawk

不知道你是不是 Electron 的 APP 。提供点 Electron 项目的实现思路细节。在学习了 VSCode 之后,我在我的项目 https://github.com/Future-Scholars/paperlib 实现了插件系统:

1. 首先所有的插件都运行在单独的 process 里,可以使用 Electron 的 utilityProcess 。这可以保证你插件崩了,软件不会崩。

2. 因为插件和软件主体,在不同的 process 里,你需要设计实现一个好用的 RPC 。比如我从插件所在的 utility process 想要访问软件主体的一些 services ,你几乎不想每次都单独通过 Electron 自己的通信 ipcMain message port 之类的来分别一一实现。理想的思路是通过基于 ipc ,message port 封装,来在 process 间暴露想要的 API 。

我的实现是,ipc 只负责初始的沟通建立部分,类似于握手吧,交换一个 message port pair 。然后后续的所有通信都通过 message port 。这样写起来比较简单头脑清楚一点。message port 之间,传递的包括,calling 的类别,服务名,函数名,参数等。然后对应 process 处理好得到结果之后,再通过 message port 回复回去结果。请求和回复有一个唯一的 id 进行匹配。细节还是得去看代码。这样就可以实现,你任意跨 process 调用函数,甚至跨 process 的事件监听。

process 间 API 的这个暴露过程本质上就是在创建一个图,图的节点是 process ,边就是是否已经暴露了 API 。因此你可以基于此,写一些代码,在新 process 创立时,请求所有已存在的 process ,向自己暴露 API 。比如你创立插件所在的 utility process 后,首先运行的代码是向 renderer 和 main process 请求向自己暴露 API 。一旦暴露了,这个图里就是三个节点了,也多了两条边。之后,你就可以在插件 process ,使用 const results = await MainAPI.XXX.YYY(...) 类似这样的方式,来和软件主体进行交互了。

建立好这一套机制之后,你就可以给让插件调用你所暴露的 API 了。而且即便插件崩了,也不会影响你的软件主体。

3. 关于插件的加载。插件全都加载到 node vm 里。至于下载和安装卸载等,你可以参考 https://www.npmjs.com/package/live-plugin-manager 。自己实现也不是很麻烦。

4. 你需要设计一个规范,来让插件开发者遵守它开发插件,比如插件的 initialize 过程需要做什么,插件在卸载的时候必须要有对应的 dipose 函数来清理一些不必要的东西。
@samallll biorxiv 的论文都有 doi ,检索元数据太简单了。也许只有 CS 学科才能理解为什么需要 paperlib 。
@henrylau0220 可以,待会更新一下。但是我没有这种 API 测试,你可否协助测试?

微信 https://share.1password.com/s#bjj8Qhq8qGJOKCN_MtDXwV9Ng55WFmGuTCcfuJ15Lmw
@henrylau0220 哈是说别的 LLM ?还是第三方 proxy 的 API ?
@StubbornHuang 你可以抽空 zotero 导出为 csv ,然后直接拖入 paperlib 试试。反正也不会影响你 zotero 数据,体验体验不影响啥。
@naminokoe 其次 endnote 应该也无法插件扩展吧,比如 AI summary 插件,可以帮你用 LLM 总结论文。
@naminokoe 说实话我没用过 endnote 。

但是你可以看看亮点比较一下。我相信 endnote 是无法匹配大部分会议发表论文的。在计算机领域,会议论文很重要。大部分论文都是挂在 arxiv 上,过段时间被会议接受。
@xieren58 没办法的办法,如果用 native 我根本不知道如何开发插件系统🤣
@lindongwu11 我做完实验就开发这个放松🤣
@lindongwu11 好看还是次要的,最重要的事,zotero 对我领域的会议论文 metadata 识别很差。比如 ICLR ICML NIPS 。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2163 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 18ms · UTC 16:00 · PVG 00:00 · LAX 09:00 · JFK 12:00
Developed with CodeLauncher
♥ Do have faith in what you're doing.