2016年5月25日 星期三

Lolinote 輔助程式,Lolikit 1.4 發佈

極簡主義的筆記系統 Lolinote,其命令行輔助程式 Lolikit 1.4 推出囉。

仔細想想,我沒有實在地在部落格上介紹過這隻程式,說不定有些朋友不好上手。這次就藉著版本提升的機會,稍微仔細講一下這個東西。



Lolinote 是什麼?


要講 Lolikit 不能不講 Lolinote,這就好像講 Github 不能漏講 git 一樣。

一言以蔽之,Lolinote 是一款對任意「通用外部程式」均有著最高相容性的「個人筆記用規則集」--這些通用外部程式包括任何的備援軟體、同步軟體、檔案管理器、編輯器、搜尋器、瀏覽器、outliner、任意版本控管機制等等。所有這些通用工具,都能用在 Lolinote 專案上。

只要用戶遵守 7 條簡單,且符合直覺的資料組織規則,就能最大限度地讓外部程式與您的筆記結合,並引用各種專用工具的威力。而且,即使在欠缺順手程式的惡劣環境下,也可以用合理的效率,對重要筆記資料進行存取,不會讓資料被系統鎖住。

他的特色是「極簡」、「直覺」、「積極的開放格式」、「不依賴特定軟體」、「可與任何軟體配套組裝使用」。

如果您一直有在關注電子筆記領域,且對上面這些形容詞感到興味十足。那麼您很可能就是適合使用 Lolinote 的人。我建議您參考本站早先的介紹文章,看看她究竟能否滿足您的要求。



關於 Lolinote 的解說就到這裡,接著我們看看 Lolikit 吧。



Lolikit 是什麼?


上一章中曾經說過,「Lolinote 的設計要點在於不需要搭配任何特定程式就能有效運作」。這是實話。

但是,「不依賴」和「不使用」並非相互矛盾。

舉例來說,一個不依賴電競賺錢的人,一樣可以打電玩,只因為那樣生活會更開心,過得更好。

Lolikit 也是一樣。

Lolikit 是一套用來協助處理 Lolinote 資料的命令行輔助程式。她的目標是提供一些常常用在筆記中,而且一般通用軟體不會提供,又或接口不易使用的輔助功能,比方說跨檔案全文檢索等等。目標是讓 Lolinote 的工作流更順暢,手感更好。他不會改變 Lolinote 資料的架構,也不會追加額外規則,就只是一個純輔助的工具。

對 Lolinote 來說,Lolikit 並不是必須的,所以就算您的環境無法使用 Lolikit,或是您不喜歡 Lolikit 的運作邏輯,或甚至就是和命令行工具合不來也沒關係。Lolinote 一樣能有效運作。Lolikit 是被設計為一個輔助工具,而非筆記系統裡的必需品。

如何安裝 Lolikit?


1.4 版的 Lolikit 可以運行於 Windows 與 Linux 環境下。沒錯!Windows 的 cmd 終於也能跑 Lolikit 了,我這次很用力測試過。

閒話休提,首先您必須確認您的 python 版本在 3.4 版以上,然後……

Linux 下為:

sudo pip3 install lolikit

Windows 下為:

py -m pip install lolikit

如此就安裝完成了。


Lolikit 有什麼功能?


功能非常單純,就以下這些。

  1. 新建筆記專案。
  2. 察看筆記專案的現有資訊。
  3. 嘗試檢測筆記專案中的缺陷。
    • 比方說是否有不小心違反某些規則,或是用了無法跨平台的檔名等。
  4. 依時間戳找出最近被更改的檔案。
  5. 全文檢索。
  6. 將整個筆記專案變成一個網站。(目前唯讀)

以下簡單說明用法。我假設各位在 linux 環境下,windows 環境細節可能稍有一點不同,請自行注意一下。



新建專案


基本上,Lolikit 的功能都是以程式 loli 為進入點,然後加上其他子命令如 init 等等。新建一個專案正是如此。

# 新建一個專案資料夾 (此處名為 test,但您可以用任何名字),然後將其初始化

mkdir test
cd test
loli init

loli init test  # 上面三行也可以用這行取代

如此就將專案資料夾 test 初始化完成了。其實這指令背後只是先做一些基本檢查,然後在指定目錄中加入一個叫作 .loli 的空白資料夾而已,沒做別的事。很簡單吧。

此外,熟悉版本管理工具的朋友應該也會覺得用法似曾相識。沒錯,基本上就是照抄 hggit 的介面邏輯。

子命令(如 init)的命名基本上都是動詞,因為我覺得這樣很可愛。好啦這是閒話。



專案建好了,然後呢?


不用想太多,就普通地開始寫筆記吧!簡單來說就是開一些子資料夾,或在資料夾裡放一些自己想要的 .md 檔。

vim 搞笑台詞.md
mkdir 電玩祕技
vim 電玩祕技/MassEffect2.md

……大概就像上面這樣。

當然你也可以幹些別的,比方說 git init 之類的。隨您高興。

編輯方面,Lolikit 沒有提供任何編輯器。只要不要違反 Lolinote 的規則集,您用什麼程式新建刪除修改察看都可以。請用您自己順手的程式吧。

注意到了嗎?放一些其他無關檔案如 jpg 檔在筆記資料夾中,並不會違反筆記規則,這沒在 Lolinote 規則集的限制中。但如果您塞入一個檔案的本意,是想要把它當作某個筆記檔的附件的話,那麼建議最好參看一下 ExtRule.1 規則,否則 Lolikit 運作時依然只會無視它,不會把他當成附件對待的。

對了,操作中您還可以用以下指令隨時快速檢視規則集,以防臨時忘記:

loli help rules


下面順手轉貼中文版的規則集,供各位參考:
  • 規則一:一個筆記對應一個檔案,每個筆記都互相獨立。
  • 規則二:筆記為 markdown 格式。
  • 規則三:筆記檔案檔名等於 "標題" + ".md"。
  • 規則四:所有筆記檔案被放置在一個多層的目錄樹中。
  • 規則五:筆記的排序等於檔名字串順序。
  • 規則六:筆記樹的最高層目錄下必須要有一個 .loli 的資料夾。
  • 規則七:筆記的內容必須要以 utf-8 編碼。

查找檔案


假設您有 1000 筆筆記,分散在兩百個資料夾中,有些資料夾層數將近十層。要如何快速找到您想要的那一份筆記呢?

如果您合理地使用資料夾進行分類,那麼要純靠翻資料夾找到某個特定的筆記其實也不太難,畢竟當初做歸類的也是您本人。但說到底,人有時就是懶,資料夾一層一層點不是很麻煩嗎?而且有時也有記錯的可能,要花點時間。

因此可以讓 Lolikit 幫助您,快速檢索您的筆記庫。

作法很簡單,請先切換到筆記的專案資料夾下,然後使用以下指令。

loli find 關鍵字

之後會秀出一個叫作選擇器的東西。目前實作中大約長得像下面這樣:

me@frayja ~ $ loli find 附件
Select a Note (press "help" for usage)
=============================================
 1) + 公司人事資料卡  <<  人事資料
 2)   操作手冊 1.X 版  <<  LoNote開發
 3)   LoNote 4.0 開發手冊  <<  LoNote開發
 4)   章回切割式劇本編寫  <<  4-故事創作技術
 5)   po 檔合併機制  <<  版本管理
 6)   早期開發構想  <<  lolinote開發
 7) + Google Book 買電子書後去掉 drm  <<  電腦筆記
 8)   魔法  <<  背景
 9) + 作業快速上手  <<  OO系列教學
10)   Raspberry Pi 設定  <<  電腦筆記
[page 1/1]
note>

這個排序是有依照積分排序的,匹配度愈高的內容會排在愈上面。您可以直接在此輸入筆記的編號,Lolikit 就會用您系統的預設編輯器將筆記檔案打開。

在選擇器中還有些其他操作可用。比方說您可以用「數字@軟體名」來指定用某特定軟體打開筆記簿,或是用「數字/」來開筆記的資料夾,又或是輸入「next」翻頁等,操作方法不少。您可以輸入「help」或「help usage」來確認這些小細節。 



不過說到這裡,各位可能會注意到一個問題:

為什麼您前面說要「先切換到筆記資料夾底下」才能打 loli find 關鍵字 呢?

其實 Lolikit 會依據「目前的工作目錄」來決定「哪個才是要處理的 Lolinote 專案」。想像一下,您的系統中可能有好幾個筆記專案,此時只要您適當地切換工作目錄,就可以很直覺地處理不同筆記專案中的內容。就和版本管理工具一樣。



關於設定


當您試用過幾次後,可能馬上就會發現其中還有兩個問題。

  1. 每次都得切換工作目錄很麻煩耶!
  2. 前述「系統的預設編輯器」,可能不是我想要用來看/改筆記的「筆記用預設編輯器」啊!

想要調整這些細節,我們需要進行「設定」。

Lolikit 的設定,被放置在獨立的設定檔中。而且被分為兩個等級(各有一個檔案),一個是用戶級,另一個是專案級。設定的套用邏輯是「預設設定」會最先被套用,然後「用戶級設定」會複寫它,最後再由「專案級設定」再複寫一次--換句話說,專案級設定的優先權是最高的,但影響範圍也最小。



察看現有設定


……不囉唆那麼多了,總之管他三七二十一,請先用以下指令看看目前各選項的設定值為何吧?

loli config

如此一來畫面上會印出類似下面這樣的東西:

[user]
default_project = 

[project]
ignore_patterns = 
 ^\.loli($|/)

[selector]
editor = xdg-open
file_browser = xdg-open
reverse = no
page_size = 10
find_format = {prepend_resourced_icon}{title}  <<  {category}
list_format = [{mtime:%%m/%%d %%H:%%M}] {prepend_resourced_icon}{title}
list_dir_format = [{mtime:%%m/%%d %%H:%%M}] {filename}/

[check]
danger_pathname_chars = \/:"*?<>|
danger_pathname_chars_fix_to = =
newline_mode = posix

[serve]
port = 10204
allow_remote_access = no
debug = no
users = 
ssl_cert_file = 

這就是您目前的設定了。因為您目前沒有任何設定檔,所以這應該會等於預設設定。不過即使是預設設定,不同的作業系統內容也會略有不同,所以不用太介意您的內容怎麼和我不完全一樣。



修改設定檔


好的,回頭再次確認,我們剛才的問題是:

  1. 每次都要切換目錄才能用 loli find 很麻煩。
  2. 想指定自己喜歡的編輯器,讓 Lolikit 用來開筆記檔案。

就開始改設定檔吧!請輸入以下指令:

loli config -u

這將打開您的使用者級設定檔。如果設定檔不存在,則會從預設設定檔中複製一份過來,並且將其加上註解符號 # 暫時註解掉。
您也許會發現,前面見過的 [project] 段落不知為何並不存在,這是因為關於 [user] 與 [project] 兩個段落,只應該分別出現在用戶級設定檔與專案級設定檔中的。所以直接就幫您先刪掉了。



修改預設專案


為了化解必須每次切換目錄的麻煩,首先找到下面這行:

# [user]
# default_project =

目前是空值且被註解的狀況。請將它改成……

[user]
default_project = ~/test  # 請輸入您筆記專案路徑

如此一來,只要目前工作目錄沒有位在其他 Lolinote 專案資料夾下,Lolikit 就會假設您正在使用預設的專案資料夾。如此不用切換當前資料夾也能用 loli find 了。



修改預設編輯器


關於第二個問題,也就是預設編輯器的設定,您可以在設定檔中找到……

# [selector]
# editor = xdg-open

將其改成

[selector]
editor = vim  # 選個喜歡的編輯器

當想要輸入複雜的執行參數時,也可以使用這種語法:
editor = gvim --servername "LOLINOTE" --remote-tab-silent "{path}"

其中 {path} 會被替換為要開啟的檔案路徑。

這樣就全部完成了。

完成後,您可以再次執行 loli config 確認目前的設定狀況,請隨意。



設定的更多說明


還有其他許多設定,這邊不詳述,如果想要知道各項設定的意思的話,請輸入:

loli help config

目前不需要趕著去讀,只是和您說文件在這裡而已。需要時再來找吧。



列出近期被更改的筆記


對筆記庫常見的操作,除了按照關鍵字搜尋以外,還有「再次打開近期修改過的筆記」這一項。

Lolikit 的 list 指令可以幫您快速做到這一點:

loli list

輸入這個指令後,會出現一個選擇器,操作方式與 find 指令相同,但您的筆記將會依照上次更動時間反序排列,最新被更動過的筆記被排在最上面--而這通常也會是您最有機會再次打開的筆記。不需要慢慢去找。



察看筆記庫的缺陷


您可以使用 loli check 命令檢查並修復筆記中存在的一些潛在缺陷:

loli check

如果沒有印出任何內容就結束,表示您的筆記庫中沒有任何可被識別的問題。反之,您會看到一些錯誤被印出。此時您可以更進一步地下達。

loli check -v

來確認問題究竟是發生在哪個檔案上面。

說明:什麼是筆記庫中的潛在缺陷?
比方說,用戶可能不小心用了某些非 utf8 的編碼來儲存資料,或是在專案中用了不一致 (posix / dos) 的換行字元。另外像是 .md 筆記檔中的內容是空白的、專案中有無用的空資料夾、用了無法跨平台的檔名等等。這些都算。

有些缺陷不止可被偵測,甚至也可以被自動修復。您可以用 -r 選項來嘗試自動修復解決 (resolve) 問題。

loli check -vr

注意這是一個會修改既有檔案的操作。我程式碼已經寫得很小心應該不會有問題,不過如果各位信不過的話請在修復前自行備份一下。筆記那麼珍貴,備份總是沒錯。



另外還有一點需要強調,有些問題是自動偵測不出來的。舉例來說,用戶可能把一個筆記檔案命名為「料理.markdown」,而不是「料理.md」。這種狀態下 lolikit 只會壓根就不把它視為一個筆記檔,只是個放在資料夾中的無關檔案,因此完全忽略過去。這種解釋其實也是合理而且安全的。

Lolikit 的修復功能是只有當確定問題真的是相當明顯的問題時,才會提出警告並嘗試修復。



將筆記庫變成網站


您可以用 Lolikit 將您的筆記專案變成一個完整的網站,方法超簡單:

loli serve

如此您的筆記專案,就會以網站的形式出現在本機的 10204 port 上面了。如果您希望有一個渲染器,快速展示您的成果,或是察看自己正在寫的筆記有沒有語法不正確導致渲染奇怪,甚至是瀏覽一個圖很多的筆記,希望看起來直觀又賞心悅目,這會是個好方法。



如果您想要將筆記放在網路上分享給其他人,您需要追加 -r (--remote) 參數,這將讓您的網站可被其他電腦取用。如下:

loli serve -r



更進一步,您雖然想要將資料放在網路上,但是只允許特定的用戶登入存取。您可以使用設定檔中的選項來設定用戶名與密碼:

[serve]
users = username1:password1
        username2:password2

上面的 users 選項中,每行代表一組使用者,用戶名與密碼中間則用冒號隔開。當您啟用這功能後,存取您網站的用戶會要求要登入才能存取。



如果希望進一步擁有加密的連線,防止被網路中的第三方竊聽內容與帳號密碼。則可以設定:

[serve]
ssl_cert_file = /path/to/loliserve.pem

如此您的連線就會走 https 加密路線了。

想知道在 Linux 下最簡單產出上面那個 loliserve.pem 檔案的方法,可以瞄一眼 loli help config 頁面,我寫在相關段落裡面了。當然有背景知識的朋友也可以試試 Let's encrypt 之類的證書簽署者,我想也是可以用的。




補充話題:關於渲染器的方言


Lolikit 的使用說明導覽大概就講到這裡,剩下請自己看 lolikit 中的命令行幫助。接下來換個話題吧。



Markdown 有許多方言,包括無印、github、multimarkdown、Pandoc 等等主要方言,加上各種細細小小自成山頭的實作,總數大概不下兩三打之多。每一個 Markdown 方言都有一點點些微的不同,各自加上不同的語言擴展,比方說各有各的分頁標記或表格語法什麼的。

這些方言固然增強了 Markdown 的表達能力,但也導致「何謂 markdown」這件事變得更加混沌不明。

每個人都說自己寫的是 markdown,但塞進 html 轉換器後轉換出來的東西卻互不相通。這是什麼鬼玩意兒!?



為了最小化「何謂 markdown」的不確定性,最近一兩年由 github、pacdoc 等好幾個主要方言開發社群,一起起草並開放討論出一個嶄新的協定,叫作 CommonMark

這事表面上聽起來,像是在現有的 Markdown 大燉鍋中又強塞了一個新方言,但這東西的目的和各現行方言不同。它並不嘗試追加一些功能如表格,又或是一個新渲染器的實作。他的目的是提供一個規範:目標在基礎的 markdown 之上,詳細定義各種行為不明確的邊際狀況。

換句話說,不管你用了多奇怪的寫法,在 CommonMark 中都是有詳細定義的,渲染出來就連一個換行符號與空白都規定好了。不管渲染器實作改成哪種語言,產出的結果都會一樣。

這套規範經過社群互動討論而生,並不是無視現實的空中樓閣,實作也愈來愈多,也有實作參照,實際運作起來效果也很棒,也沒有引入什麼新語法或增加什麼與其他現行實作明顯不相容之處。我認為這就是 markdown 未來的基礎,loli serve 的渲染器也是採用這個規範,反正就是推荐有需要的各位試試。



那麼今天的話題就暫到一段落。歡迎來玩。以上。

2 則留言:

  1. 作者已經移除這則留言。

    回覆刪除
  2. 我覺得數位筆記的主要挑戰還是在手機上能否快速方便地建立、編修、管理、檢視、搜尋筆記,以及能否將拍照、錄音、錄影、地理標記、觸控手繪圖快速插入筆記中,這些方面似乎還是非專屬App不可。基於這些考量,我個人目前還是以Evernote(付費版)為主,Evernote當然還是有不少缺點,不過那些缺點目前看來還是相對次要或容易克服的。

    回覆刪除

☆每日吐嘈,有益身心☆
…不過還是請手下留情別太狠啊。