賀乙釗 Yizhao He
2016/12/20
關(guān)于 Knotes
Knotes 是 Mac 平臺(tái)高效、優(yōu)雅的 Kindle 標(biāo)注管理器,將 Kindle 用戶從繁重的手動(dòng)復(fù)制粘貼的標(biāo)注管理方式中解救出來。

特性:
- 無需配置,連接即可同步
- 按作者、書名管理標(biāo)注
- 快速對(duì)書名、作者、標(biāo)注進(jìn)行全文搜索,
- 支持無干擾閱讀模式
- 自動(dòng)下載匹配圖書封面
- 干凈、優(yōu)雅的用戶界面
- 支持中文和英文
下載和定價(jià)
官網(wǎng) http://knotesapp.com/cn 即可下載,可試用7天,售價(jià) ¥35 元。
想法誕生
本人是一個(gè) Kindle 重度用戶。自從入手了 Paperwhite 之后就愛不釋手,吃早飯的時(shí)候會(huì)用 Kindle 看一些創(chuàng)業(yè)或者自我管理相關(guān)的書籍,睡前也會(huì)看小說助眠。
看書過程中會(huì)在 Kindle 中把很有感觸的文字標(biāo)注出來,或者做一些筆記。但我發(fā)現(xiàn)在 Kindle 上進(jìn)行標(biāo)注管理很費(fèi)勁,原因就是 Kindle 反應(yīng)速度比較慢,屏幕也小,用手指進(jìn)行點(diǎn)選操作不是很方便。而且我的 Kindle 是國(guó)內(nèi)亞馬遜賬號(hào),所以不支持亞馬遜的網(wǎng)頁版標(biāo)注管理。由此便產(chǎn)生了做一個(gè)桌面版軟件進(jìn)行管理的想法。
開發(fā)歷程
設(shè)計(jì)

技術(shù)棧選擇
自從決定專心鉆研前端技術(shù),JavaScript 就成了我的主要開發(fā)語言。
而使用 JavaScript 開發(fā)桌面應(yīng)用,已經(jīng)有了成熟的 Electron 和 NW.js 技術(shù),原理都是將 Chrome 內(nèi)核進(jìn)行封裝,并提供 API 訪問系統(tǒng)資源和權(quán)限。雖然相當(dāng)于是瀏覽器包裝了 JavaScript 應(yīng)用到原生系統(tǒng),功能上和性能上相差其實(shí)也不是很大,Visual Studio Code, Slack, Atom 都是非常優(yōu)秀的 Electron 應(yīng)用。
Knotes 采用了 Electron 作為開發(fā)的基礎(chǔ),前端庫選擇了 Vue.js 開發(fā)單頁面應(yīng)用,UI 庫選擇了 Semantic-UI。
遇到的難題
第一次開發(fā) Mac 應(yīng)用難度還是很大的,因?yàn)檫@次的目標(biāo)平臺(tái)從瀏覽器變成了操作系統(tǒng),遇到的問題會(huì)多很多倍,也奇怪很多倍。
開發(fā)過程中的各種報(bào)錯(cuò)求助于 StackOverflow 和 Github repo 的 issue 不需要多說。
下面主要列舉一些使用 Electron 開發(fā) Mac 平臺(tái)應(yīng)用相關(guān)的問題。
目前 Knotes 是在 Mac App Store (簡(jiǎn)稱 MAS) 之外發(fā)行的 Electron 應(yīng)用。
在 MAS 之外發(fā)行應(yīng)用,好處是不用擔(dān)心 Sanbox 權(quán)限問題,限制小很多,但隨之而來是要自己解決銷售、License管理和版本更新問題。
銷售
銷售方面,采用了 FastSpring 接入在線商店,費(fèi)率為 8.9%。其實(shí)這個(gè)費(fèi)率還是挺高的,每個(gè)訂單 10% 的手續(xù)費(fèi),跟國(guó)內(nèi)的支付寶的 0.5% 相比簡(jiǎn)直貴出天際,但是 Knotes 的目標(biāo)用戶不僅僅是國(guó)內(nèi)用戶,所以使用了其他大的 Mac 軟件廠商常用的 FastSpring,據(jù)我所知,Sketch、PdfExpert 、CleanMyMac 等都是采用的 [FastSpring]。
License 管理
License 管理,這也是一個(gè)難題。之前做過 Chrome 的付費(fèi)應(yīng)用,但是是基于賬號(hào)系統(tǒng)的,所以付費(fèi)記錄跟著賬號(hào)走,完全沒有 License 的概念。而桌面應(yīng)用大部分都是無賬號(hào)系統(tǒng)的,只能通過 License 來驗(yàn)證是否購(gòu)買過。如果是原生的 MacOS 應(yīng)用,已經(jīng)有了很成熟的 License 解決方案 DevMate,但 Electron 無法集成 DevMate 提供的 SDK, 難度便陡增起來。最后我咨詢了 Markdown 編輯器 WordMark 的作者 Hao Liu, 也結(jié)合自己的經(jīng)驗(yàn),自己寫了 License 驗(yàn)證 API。所以目前最終的解決方案是:
- 使用 DevMate批量生成 License
- FastSpring 生成訂單的時(shí)候從預(yù)置的 License 中取出并郵件發(fā)送給用戶
- 用戶在 Knotes 中激活 License 時(shí)進(jìn)行 API 驗(yàn)證
版本更新
版本更新,Electron 本身采用了 Squirrel.Mac 進(jìn)行自動(dòng)更新的支持,而我需要做的是提供一個(gè)自動(dòng)更新的后臺(tái)以便 Knotes 進(jìn)行更新查詢和更新下載。最終采用了GitBook 開源的 Nuts,以 GitHub 的 release 作為版本管理的基礎(chǔ),Nuts 負(fù)責(zé)拉取最新版本號(hào)和最新的安裝 Zip 包并提供 API 查詢。
推廣
剛開發(fā)完的時(shí)候,去 v2ex 社區(qū)分享創(chuàng)造版發(fā)了帖: Knotes - Mac 版 Kindle 標(biāo)注管理軟件 贈(zèng)送激活碼 , 得到了 V 友們的肯定。
后來在 Product Hunt 上發(fā)帖宣布上線 Knotes - Product Hunt,也得到了 V 友和朋友圈好友的幫忙,最終成為當(dāng)日 Tech 主題下排名第二的項(xiàng)目。

總結(jié)
Knotes 是我個(gè)人的第二款產(chǎn)品,也是第一款 Mac 應(yīng)用。從萌生想法到上線,陸陸續(xù)續(xù)開發(fā)了2個(gè)月,開發(fā)過程中充滿了喜悅和荊棘,深感做個(gè)人開發(fā)者不易,但堅(jiān)持下來卻堅(jiān)定了做自己產(chǎn)品的決心,雖前路漫漫而修遠(yuǎn),吾將上下而求索。
關(guān)于

Knotes 作者,賀乙釗 (Yizhao He), 現(xiàn) USC CS Master,本科是北京郵電大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)。
個(gè)人主頁: http://1mhz.me