rime / rime-cantonese

Rime Cantonese input schema | 粵語拼音輸入方案
https://jyutping.net/
Creative Commons Attribution 4.0 International
551 stars 61 forks source link

自動macOS,Windows封裝器 #55

Closed tanxpyox closed 4 years ago

tanxpyox commented 4 years ago

運用Continuous Integration嘅技術(亦即係 #53 同埋 #54 入面嘅方法),令到當管理員創建新嘅release tag嘅時候就會自動編譯安裝包,放喺release入面。

由於段程式碼入面係直接git clone rime/weasel 同埋 rime/squirrel,所以唔需要人手更新。(之前用fork嗰個方法就要)

效果可以睇 https://github.com/tanxpyox/rime-cantonese/releases

tanxpyox commented 4 years ago

backup: 環境參數:

appveyor

WEASEL_BUNDLED_RECIPES=:preset lotem/rime-octagram-data lotem/rime-octagram-data@hant cantonese emoji sgalal/rime-opencc-32bit-latest tanxpyox/rime-cantonese-prelude

Travis CI

SQUIRREL_BUNDLED_RECIPES=:preset\ lotem/rime-octagram-data\ lotem/rime-octagram-data@hant\ cantonese\ emoji\ sgalal/rime-opencc-latest\ tanxpyox/rime-cantonese-prelude

GITHUB_TOKEN=Github Developer API {啓動public:repo}

laubonghaudoi commented 4 years ago

正喎,不過有個問題就係呢個CI 係一定要draft new release 先會自動編譯打包嘅係唔係?因爲好多時候更新都係直接Edit release 唔係draft new release,所以可能用唔上

tanxpyox commented 4 years ago

因爲如果唔跟draft new release噉樣發放嘅話,有邊個版本出事都會好難debug,但係有方法可以令佢每次都封裝嘅,只不過會用好多CI嘅資源。

同埋而家就算merge咗都未用得住,因爲我要等 @rime 嗰度批准喺呢個repo度用CI 之後先會啓動。

laubonghaudoi commented 4 years ago

好嘅,噉要等 Rime 嘅批准嘞。因爲我哋個版本號係用schema嘅版本號嘅,但係我哋更新一般都係更新詞庫,唔係schema,所以可能以後要將個發佈版本號改成詞庫嘅版本號先得

tanxpyox commented 4 years ago

睇下 @sgalal 可唔可以幫手啓用appveyor 同埋 travis-ci 先。

sgalal commented 4 years ago

@tanxpyox 可唔可以 osx 都用 AppVeyor?

tanxpyox commented 4 years ago

@tanxpyox 可唔可以 osx 都用 AppVeyor?

@sgalal 我傾向分開,因爲如果用build_matrix嘅話,要用多好多行先可以分清楚兩個平臺嘅workflow,加上兩邊環境參數完全唔同,合埋無乜好處。(其實最主要係因爲我唔識用build_matrix :sweat_smile: )

lotem commented 4 years ago

我不鼓勵用這種實現方法。

即使您打算這樣做,至少以Rime組織的名義發佈不妥。理由如下。 這種方法一個很大的問題是可擴展性。

討論可擴展性,是以總體的視角來開展討論。但如果將目標限定爲只支持一款輸入方案,那就不需要考慮這一點。給以不同的視角和目標,做法的優劣也有不同表現。再以另一種做法爲例,如將全部輸入方案與輸入法程序一起打包。單看一個方案,似乎這是最簡單的辦法。從總體來看卻是擴展性不佳,表現在:一則囊括所有輸入方案是一項需要持續很大投入的工程,且本質上與GitHub的開源協作模式衝突;二則任意一個方案要更新,都得重新發佈完整的安裝包,即使大部分內容沒有更新。 本案在這方面,雖然做法不同,也很難稱得上可擴展。按這個思路,等於是要爲每個輸入方案獨立發行一套輸入法程序。這不僅浪費資源,將產生巨大的維護成本(試想一件小事:當必須修改編譯腳本時,要怎樣同步修改所有的副本),而且用家只能從中選擇其一安裝。 而Rime的理念是要用統一的軟件支持用家選擇的多種輸入方案。Rime的一大使用者羣體就是對兼容多種輸入方式有需求的。以Rime的名義發佈這樣的「方案定製版」,會對目前已經十分複雜的生態造成進一步混亂。

目前這個技術方案尚不完整。如果要作爲一款獨立的軟件發佈,還有大量必要的工作。如:須在系統註冊爲一款不同的輸入法,還要有獨立的發佈、升級的流程,以避免與其他發行版產生衝突。

至於爲什麼要設計配方機制,走精簡客戶端和配置管理器路線,以往有過大量的討論,此處不再贅述。 在一切完成之前,不得已要爲單一方案維持一個便利的發佈渠道,那我覺得做一整套定製版軟件也沒有必要。 精簡客戶端及早前將輸入方案拆分爲獨立代碼庫的目的,是方便按照個性化的需要進行組合。因此我也建議用組合現有資源的方式發佈便利包,本質上是將組合的工具由通用的配置管理器代之以專爲單一方案製作的腳本及安裝包。

tanxpyox commented 4 years ago

因此我也建議用組合現有資源的方式發佈便利包

@lotem 現在的實現方法是透過WEASEL_BUNDLED_RECIPES環境參數,以「東風破」在程序文件夾中加入輸入法方案,以免去新手用家使用控制臺代碼的困難;其他預設輸入法(如 :preset、八股文) 、文檔和功能性亦原封不動。換言之,本方案只是在原本的小狼毫封包之中加入方案檔,對小狼毫程序的可擴展性或功能性毫無影響。(詳細可參閱CI設定檔,當中只是將weasel和squirrel克隆下來, 添加 輸入法文檔,再編譯而已)請問這作法應該如何改善?

我現在想到的改善辦法是將 git clone https://github.com/rime/weasel 一句改爲從程式庫中抓取穩定發行版本的代碼(免去因編譯錯誤以需重新發佈的風險),再以東風破在編譯步驟中加入定製輸入法,編譯成一個exe便利包。但是這樣做在每次發佈新版本的前臺程式時,我們亦必須手動修改配置檔,令維護成本大增。

另一辦法是直接以腳本方式 (i)下載並安裝小狼毫或鼠鬚管,(ii) 下載東風破和輸入法方案相關檔案和(iii) 以rime-custom修改default.custom.yaml,完成設定。但此做法有三大困難(尤其Windows):一、因爲小狼毫與鼠鬚管代碼以動態連結形式在bintray上發行,日後在發佈新前臺程式版本時仍然需要手動維護,增加維護成本;二、以腳本從網上下載exe檔將自動觸動Windows防火牆,自動屏蔽安裝程式,變相要用家手動將防火牆關閉才能使用安裝包。但這考慮到便利包的受衆,並不恰當。三、Windows系統沒有預設安裝Git程式,不能實現以東風破口令配置default.custom.yaml,最後仍然要用家自行以程式碼或手動修改default.yaml,與本計劃的初衷不符(免去所有須進階電腦知識的步驟,方便大衆使用本方案)。

綜合以上的考慮因素,我們才以CI自動編譯rime/weasel 和rime/squirrel中的程式碼,再以東風破從中插入方案文檔這方法來實現「便利包」——這做法一方面容許用家在安裝後能直接使用方案,另一方面亦保留中州韻輸入法原來的可擴充性,讓用家在精通輸入法後亦能體驗中州韻的其他功能。發佈便利包後,我們亦會註明建議的安裝方式是直接在rime.im下載前臺程式,再以程式碼配置,只有在完全不能跟上建議教程時才使用便利包。

當然如果官方能克服以上困難,提供一個可定製,且不需人手維護的便利包模板,讓新手用家能一鍵安裝前臺程式、輸入法方案文檔和配置輸入法,我們就不用出此下策了。但在這模板能成功實現之前,我們還是希望您能批准我們以這個折衷方案製作便利包,以應對普羅大衆對本輸入法的需求。(參照劉邦後代先生在 rime/home#545 所指出的曝光率問題)

sgalal commented 4 years ago

@lotem 你可能誤會了,現在做的並非發佈「方案定製版」,成為一款單獨的輸入法,而是將粵拼方案打包在小狼毫與鼠鬚管的安裝包中。

換言之,用户仍然可以透過現有的方案下載機制下載其他輸入方案,小狼毫與鼠鬚管的其他所有功能亦未發生改變,僅僅是令用户在安裝後立刻可以使用粵拼打字,免去在新的包管理器完成之前,用户需要透過命令手動下載粵拼方案的麻煩。

lotem commented 4 years ago

名義上是同一款輸入法軟件,但軟件包安裝的內容不一樣。這就是方案定製版啊。 我再澄清一下,不是說我不准您這樣做,既然是自由軟件,當然可以自由發佈其衍生產品。我只是技術上不贊成這種做法,因此不同意以Rime開發者機構的名義用這種技術方案發佈方案定製版。

現有粵語定製版,相應地也會有五筆定製版。我提一個問題:安裝了粵語定製版的用家,也想用五筆,再安裝後者,會怎樣呢。粵語方案沒有了。過段時間,我再發佈一個鼠鬚管的新版本,用家一升級,無論五筆還是粵語拼音也都沒有了。

解決一時的方便有很多辦法,但考慮上軟件的持續迭代和協調衆多需求,把方案添加到輸入法安裝程序的方法就是不可持續的。有何必要爲此大費周章修改軟件安裝包呢。

要解決的問題就是用一個自動化程序或腳本幫用戶完成一系列手動安裝方案和修改配置的操作。依照目前使用Rime輸入方案的最佳實踐,這些數據文件和配置應寫入用戶文件夾。由此可見重新編譯輸入法軟件是沒有必要的。

我現在想到的改善辦法是將 git clone https://github.com/rime/weasel 一句改爲從程式庫中抓取穩定發行版本的代碼(免去因編譯錯誤以需重新發佈的風險),再以東風破在編譯步驟中加入定製輸入法,編譯成一個exe便利包。但是這樣做在每次發佈新版本的前臺程式時,我們亦必須手動修改配置檔,令維護成本大增。

沒有必要重新編譯輸入法軟件。請直接利用已發佈的最新輸入法軟件。把輸入法安裝程序作爲便利包的一項數據。鼠鬚管的pkg安裝包和小狼毫的安裝程序( 傳/S)都可以通過命令靜默安裝。

至於說維護成本:因爲邏輯上一個自足的便利包依賴於 1. 輸入法程序 2. 輸入方案及配置文件,可知追蹤 1. 和 2. 的版本更新是必要的成本。這個便利的代價成本,放大到上百個要發行的方案,就是可擴展性的問題。您可以視需要控制發佈週期,不必跟進每項更新。

另一辦法是直接以腳本方式 (i)下載並安裝小狼毫或鼠鬚管,(ii) 下載東風破和輸入法方案相關檔案和(iii) 以rime-custom修改default.custom.yaml,完成設定。但此做法有三大困難(尤其Windows):一、因爲小狼毫與鼠鬚管代碼以動態連結形式在bintray上發行,日後在發佈新前臺程式版本時仍然需要手動維護,增加維護成本;

這個成本並不會高於重新編譯輸入法程序方式下追蹤穩定發行源碼。而master分支的最新代碼不一定適合發行。

二、以腳本從網上下載exe檔將自動觸動Windows防火牆,自動屏蔽安裝程式,變相要用家手動將防火牆關閉才能使用安裝包。但這考慮到便利包的受衆,並不恰當。

有這個問題的話,爲方便故,還是連輸入法安裝程序一起打包爲好。輸入法程序沒有必要時時保持最新,畢竟有自動更新機制作爲補充。

三、Windows系統沒有預設安裝Git程式,不能實現以東風破口令配置default.custom.yaml,最後仍然要用家自行以程式碼或手動修改default.yaml,與本計劃的初衷不符(免去所有須進階電腦知識的步驟,方便大衆使用本方案)。

這就是我要開發新的配置管理器的原因。未完成前有以下選擇

laubonghaudoi commented 4 years ago

@lotem 軟件發佈方面我的知識欠缺無法評論,我只能提供我這邊的一些信息。就是因爲之前幾位 Facebook 上大 v 的推廣,現在很多人都有打粵拼的需求。而電腦上能安全又舒服地打粵拼的輸入法,就只有 Rime 一家了。根據我們最近開的 telegram 羣組裏用家的反饋,我們瞭解到用家下載我們的粵拼定製包後的確也只是拿來打粵拼。當他們要打倉頡五筆的時候,會切換回系統自帶的倉頡輸入法,而不是改用 Rime 的倉頡方案(因爲系統倉頡有他們原本的用戶詞庫記憶)。也就是說,安裝粵拼定製版的用家,的確就是把小狼毫或鼠須管當成一個專打粵拼的輸入法。所以,我們可以把粵拼當成一個比較特殊的方案,我們只是單獨把粵拼拿出來這樣做,而肯定不會將此泛化到其他方案,搞出「五筆定製版」「倉頡定製版」之類安裝包。

根據我們的瞭解,這些大 v 想要在普通大衆中普及粵拼打字,那麼就必須要解決「輸入命令安裝方案」這個痛點,因爲普通大衆沒有技術背景,不懂得怎樣打開命令行,光是「打開 terminal 粘貼命令然後 enter」這一步操作就已經讓用戶流失大半了。所以就需要有這種簡單傻瓜的方式來安裝。而倉頡五筆不同於粵拼,大部分電腦系統都會自帶,所以用戶也不會下載 Rime 來打倉頡五筆,直接用系統倉頡就行了。

lotem commented 4 years ago

我理解這個項目的目標就是做好用的粵拼輸入法。樓上講的具體情況,都是專注於解決這個問題。我也不質疑簡化安裝步驟的必要性。 也請各位瞭解,Rime這個項目的目標肯定不是做一款好用的粵拼輸入法。這個目標也不是要同時支持粵拼和五筆、倉頡而已。我看不到任何理由將粵拼當作一個特殊的方案:將「粵拼」改爲「五筆」「倉頡」以及任意其他的方言拼音輸入方案,樓上表述的問題和局部的好處都一樣成立。或者說,其他輸入方案的維護者,也完全有理由將Rime當作專用於該方案的輸入法而採取同樣的行動。這不取決於各位是否有意願將粵拼的做法推廣到其他。事實上你們也不是第一個做這件事的。 我作爲Rime的開發者,如果不把目標也侷限在專注做好用的粵拼輸入法,那麼面臨的局面就是衆多方案都會有各自的定製版和發佈渠道。就此,我會建議各個方案的發佈者儘量採用有利於多種方案共存、方便未來技術升級、避免軟件生態碎片化的發佈方式。而不要因爲注意到了一些其實一直存在的問題,而採用只針對特定場景和當下需求、而存在可預見問題的方案。