-
Notifications
You must be signed in to change notification settings - Fork 148
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
可否维护一个东风破第三方配方列表呢? #23
Comments
应该如何维护?像 https://hexo.io/themes/ 一样让作者发 PR 么? |
可以啊。比如在 readme 或者 wiki 里加一段:
然后提 PR 加一行地址就好。 |
以下是我设计的一种 Rime 方案列表的程序,类似 Python 的 PyPI。如果需要,我可以帮助实现: Rime Package Index简介该程序是一个 Rime 方案索引,类似于 PyPI,运行在 服务器端,用于 自动化下载 和 自动化更新 Rime 方案。 可行性Rime 的输入方案通常只包含以下三种文件:
要实现 自动化下载 功能,客户端只需下载以上文件,放入相应的文件夹中部署即可。 在 Rime 的方案文件和词库文件中,都有版本号字段。要实现 自动化更新 功能,客户端只需比较该字段的值是否更新即可。 功能
其中,(2) 本可以并入 (1) 中处理,但此处分开处理,是为了在客户端请求 2 时,程序可以统计下载量。 内容该程序记录一个方案列表,包括以下内容:
接口设网站的域名为 https://example.org/,客户端请求 https://example.org/pkg/,得到如下格式的 JSON 数组(对应上述 1-7, 9-10): { "id": "非空,非负整数,方案在该程序中的编号"
, "name": "非空,字符串,方案名称(由 `schema.yaml` 提取)"
, "author": "非空,字符串,方案作者(由 `schema.yaml` 提取)TODO_FIXME: 改为数组,因为可能不止一个文件,例如 kahaani/dieghv"
, "description": " 字符串,方案简介(由 `schema.yaml` 提取)TODO_FIXME: 改为数组,因为可能不止一个文件"
, "schema_version": "非空,字符串,方案版本号(文字形式,由 `schema.yaml` 提取)TODO_FIXME: 改为数组 { name: xxx, version: xxxx },因为可能不止一个文件"
, "dict_version": "非空,字符串,词库版本号(文字形式,由 `dict.yaml` 提取)TODO_FIXME: 改为数组 { name: xxx, version: xxxx },因为可能不止一个文件"
, "license_spdx": " 字符串,方案所使用的开源协议,以 SPDX ID 的形式"
, "license_link": " 字符串,方案所使用的开源协议文本链接"
, "github_link": " 字符串,该方案的 GitHub 链接"
, "downloads": "非空,非负整数,该方案 365 天内的下载量"
} 当用户在客户端上选定了名为「訓読み」的方案后,设该方案 { "schema":
[ { "name": "kunyomi.schema.yaml"
, "url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/master/kunyomi.schema.yaml"
}
]
, "dict":
[ { "name": "kunyomi.dict.yaml"
, "url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/master/kunyomi.dict.yaml"
}
]
, "opencc_config":
[ { "name": "t2jp.json"
, "url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/master/opencc/t2jp.json"
}
, { "name": "JPVariants.txt"
, "url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/master/opencc/JPVariants.txt"
}
]
} 实现使用编程语言+数据库实现。 添加方案(A) 在 GitHub 上的方案 该程序的维护者提交 GitHub 链接(上述 8, 9),程序自动生成上述 1-7。 POST 请求 https://example.com/post/github/。 { "config":
{ "schema":
[ { "name": "kunyomi.schema.yaml"
, "url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/master/kunyomi.schema.yaml"
}
]
, "dict":
[ { "name": "kunyomi.dict.yaml"
, "url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/master/kunyomi.dict.yaml"
}
]
, "opencc_config":
[ { "name": "t2jp.json"
, "url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/master/opencc/t2jp.json"
}
, { "name": "JPVariants.txt"
, "url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/master/opencc/JPVariants.txt"
}
]
}
, "github_link": "https://github.com/sgalal/rime-kunyomi"
} (B) 不在 GitHub 上的方案 该程序的维护者提交上述 6,7,8,程序自动生成上述 1-5。 POST 请求 https://example.com/post/plain/。 虽然 sgalal/rime-kunyomi 在 GitHub 上,仍以该方案为例(原仓库无开源协议,此处假设为 MIT 协议;若实际使用时确无开源协议,用 { "license_spdx": "MIT License"
, "license_link": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/master/LICENSE"
, "config":
{ "schema":
[ { "name": "kunyomi.schema.yaml"
, "url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/master/kunyomi.schema.yaml"
}
]
, "dict":
[ { "name": "kunyomi.dict.yaml"
, "url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/master/kunyomi.dict.yaml"
}
]
, "opencc_config":
[ { "name": "t2jp.json"
, "url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/master/opencc/t2jp.json"
}
, { "name": "JPVariants.txt"
, "url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/master/opencc/JPVariants.txt"
}
]
}
} 该程序处理 POST 请求,存入数据库中。 数据库设计TODO FIXME: 添加数据表的设计,另外需考虑下载量。 请求方案列表由数据库中的数据生成 JSON 数据。TODO FIXME: 添加详细内容。 |
很好。 提兩個問題: |
請問這個配方列表,跟這裏 rime/home#336 所討論到的是一樣的嗎? |
我觉得这两个 issue 里提到的问题有相似的地方,其实我们需要的就是类似包管理器,或者浏览器中的插件管理器。 开发者遵守统一的文件组织结构,统一的发布流程,统一的版本控制,以进行插件的开发;用户使用简单的描述文件或者通过 GUI 勾选,即可完成安装,亦可控制插件版本。 如 @lotem 所说, “配方下載和管理的功能不到位”。配方,就是 rime 的 “包”。 但是,@lotem 又说,目前首要的是 “用「嚴肅」編程技術重寫配置管理器”,因为 “現實問題是bash腳本的實現目前用戶接受度不夠好”。 不过幸好我们有很多可以参照的项目,比如 npm,rubygems,archlinux 的 aur,这些包管理都很先进,方便,允许用户通过中心仓库,本地仓库,github 地址等去安装,管理包 …… 那么应该用什么语言呢?(bash 已经被开除出“严肃编程”领域了😄️) 所以可选的就是容易嵌入的脚本语言?Lua,Python,甚至 JavaScript。 总之期待 rime 能有一个成熟的包管理器吧(面向用户的名称可能是“配方商店”😄️) |
是的,我的發言是對 rime/home#336 重新構思後的結果。
如我上面發言所述,不需做到這一點。 「一次开发,三个平台都能运行」是配方 管理器 的做法。而配方 列表 只需提供一個列表(以 JSON 格式),Mac、Linux、Windows 的 Rime 客户端分別以各自的編程語言解析 JSON 數據即可。 |
就是实现了三遍配方管理器,当然不是不行。。。 |
我個人是非常期待這樣的配方列表的出現的。因爲我的方言拼音收集倉庫,下一步的發展方向就是建設成各個方言拼音方案的總配方。但我不知道在rime/home#336 裏總結出的流程圖是否合理。如果確認要用json文件來儲存配方信息的話,我可以很快地準備好漢語方言配方總表。 如果是要跨平臺運行的話,我唯一想到的語言就是javascript。iRime因爲已採用中心化配方管理方式,所以無需考慮。但Android下的同文要是可以的話我希望還是能兼顧。 |
我認為實現並不複雜。客户端要實現的基本邏輯如下:
總而言之,客户端只需實現 四種操作:下載列表、查看列表、下載方案、更新方案。 |
是必需的。因為只有使用服務器纔可實現統計方案下載次數的功能(及便於日後拓展其他功能)。如果服務器具有統計方案下載次數的功能,可以使用户對方案的流行程度有直觀的感受,提高用戶使用體驗。
需要服務器維護者手動更新。否則若方案作者更新了方案內容,而服務器上的列表沒有更新,會出現數據不一致的情況。 |
就算开发成本(可能)不高,但是维护成本一定很高。 @sgalal 你说的中心仓库的方案也有点问题
没必要,可能会很慢。用户想装配方的时候再请求,而且不要请求全部的,只返回推荐的即可。
调用服务器的接口即可,不需本地实现。
都搭建动态服务器了就别麻烦维护者更新了,配方开发者自己管理自己的不就行了。 你的提案感觉就是拿动态服务器做静态服务器做的事情,搞个动态服务器只统计下载,有点浪费。 静态的话,可以用 github 做中心仓库记录。比如 ArchLinuxCN 就是采用的 github 做打包脚本的管理。 我反而觉得目前先用 github 搞个仓库就好,简单,省钱,不需要怎么维护。 但是,上面讨论的都是中心仓库怎么做,是第二步。第一步是统一包管理的实现方式。 @lotem 对于第一步的想法是跨平台,减少工作量,甚至连 GUI 他都想跨平台。。。你说的每个平台都实现一遍,对于 rime 这种小项目来说,不太现实。 (其实就是 bash 好烦,我要用严肃语言重构 plum😄️) |
我也建议定义一个跨语言的方案,这样客户端可用各种语言实现。 |
其实 plum 已经实现了一个基本的包管理器功能了,上面我们讨论的,plum 都已经默默的实现了。 plum 已经可以
也就是我说的第一步已经实现了一大半了,离完整实现大概还差
后面两个难度大,意义不大,所以我觉得不用实现。毕竟不是做真的要做包管理,不会出现什么依赖或者版本问题。 所以现在 @lotem 的计划是搞完手头的活,用跨平台的语言重写一遍 plum 这个项目,实现上面说的功能。然后嵌入到 rime 中。最后搞个 GUI。 然后才能继续讨论中心仓库的问题。 |
小改動本來也不複雜,況且「更新了配方格式」應該是指「增加了字段」,這個對於 JSON 是向下兼容的,可以實現平穩升級。
不會很慢。例如你提到的 pacman 的安裝包數據更多,但是仍然是全部保存到本地的。目前 HTTP 請求大多使用 gzip 壓縮,實際大小非常小。
這樣纔會慢,每次查詢都要發送 HTTP 請求。不如一次下載,然後在本地查找。
確實。可以使用 GitHub OAuth 認證實現方案開發者的登錄和維護功能。 如果採用下述靜態方案,則方案開發者向 GitHub 倉庫直接提交修改。
我覺得有道理。我支持靜態服務的做法,建立一個 GitHub 倉庫保存數據。
目前跨桌面端和移動端的應用程序並不是主流,我認為還不如每個平台的開發者分別使用原生技術實現更容易。 |
上面提到客户端應該採用跨平台還是原生實現的問題,其實這個與我所説的 方案列表 無關。 一旦實現方案列表(或「中心倉庫」),那麼繼續採用 plum 現在的跨平台解決方案亦無問題。plum 從該列表獲取數據即可。 |
繼續上次的提問:
通過回憶過去的討論,我現在想,服務器還是只負責簡單地記錄配方的地址爲好。沒有重覆的數據,就不需要同步。 |
編輯:優化維護者輸入的 URL 關於如何更新,我認為可以這樣: 只考慮在 GitHub 上的方案 維護者只需將 該方案的 GitHub 鏈接、方案配置文件的下載鏈接 和 該方案的開源協議文本鏈接 三個數據寫入方案列表倉庫。 {
"repository": "sgalal/rime-kunyomi",
"config": {
"schema": [{
"name": "kunyomi.schema.yaml",
"url": "/kunyomi.schema.yaml"
}],
"dict": [{
"name": "kunyomi.dict.yaml",
"url": "/kunyomi.dict.yaml"
}],
"opencc_config": [{
"name": "t2jp.json",
"url": "/opencc/t2jp.json"
}, {
"name": "JPVariants.txt",
"url": "/opencc/JPVariants.txt"
}]
},
"license_url": "/LICENSE"
} 由腳本生成如下 JSON,發佈到該倉庫的另一分支,便於後續處理: {
"repository": "sgalal/rime-kunyomi",
"schema": [{
"schema_id": "kunyomi",
"name": "訓読み",
"version": "20181007 V1.0.01",
"author": ["其弦有余 <[email protected]>"],
"description": "This is the kunyomi input method for rime.\nThis schema uses OpenCC to convert the characters to Japanese style. Please put JPVariants.txt and t2jp.json in the opencc folder in advance.\n"
}],
"dictionary": [{
"name": "kunyomi",
"version": "20181009 V1.0.04"
}],
"license": {
"spdx_id": "GPL-3.0",
"url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/07199e2beca0a529489d15476a33b0d9cb3e745a/LICENSE"
},
"config": {
"schema": [{
"name": "kunyomi.schema.yaml",
"url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/07199e2beca0a529489d15476a33b0d9cb3e745a/kunyomi.schema.yaml"
}],
"dict": [{
"name": "kunyomi.dict.yaml",
"url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/07199e2beca0a529489d15476a33b0d9cb3e745a/kunyomi.dict.yaml"
}],
"opencc_config": [{
"name": "t2jp.json",
"url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/07199e2beca0a529489d15476a33b0d9cb3e745a/opencc/t2jp.json"
}, {
"name": "JPVariants.txt",
"url": "https://raw.githubusercontent.com/sgalal/rime-kunyomi/07199e2beca0a529489d15476a33b0d9cb3e745a/opencc/JPVariants.txt"
}]
}
} |
關於如何更新中心服務器的數據,我認為可以從兩個方面解決:
|
我比較關心的是,這個配方列表具體的預期功能是什麼,應該如何實現,例如是yaml還是json。按照rime/home#336 的討論,配方列表只需保存於Github倉庫中,如Chinese_Rime 中維護一份所有漢語方言的方案總表。而“配方管理器”則由本地GUI實現。因此我感覺@sgalal 所提到的服務器並非必要,因爲Chinese_Rime的 |
中心服务器应该是信息中心。如果不想下载,可以不为数据中心。 |
Try not to necro issue with a pointless comment. |
https://github.com/LibreService/micro_plum 我有一个PoC,已经成功用在了web上https://my-rime.vercel.app/ |
https://github.com/LibreService/rppi rppi.mp4 |
大家可以去这里找到由社区收集的各种方案 👍
https://github.com/sgalal/awesome-rime
比如我使用了现有的 plum yaml 格式包装了一下 Patricivs 写的 easy_en 方案
https://github.com/BlindingDark/rime-easy-en
但是无处发布,希望可以让更多的人享受到 plum 带来的便利。
相关 issue #6
The text was updated successfully, but these errors were encountered: