我看著眾多微博客戶端開始出現(xiàn)在果粉視線里。WeiLark, Mint, Macbo, Weibo For Mac, Woob 我全部用過,也全部否定了。中國需要像 Tweetie 這樣能夠站在世界級(jí)別的 Mac 軟件出現(xiàn)。雖然這時(shí)候我還不敢保證什么,但是 Miao 絕對(duì)是帶著這樣的使命起步的。
大約從2010年開始,我就計(jì)劃開發(fā)一個(gè)自己的微博客戶端!開始命名為 iCloud,意思是云云,漫畫里對(duì)話框的泡泡??上Ш髞?2011年6月)這個(gè)名字讓Apple官方拿去用了,iCloud 改名成了 Miao。也沒什么好抱怨的,我并沒有注冊(cè)過這個(gè)名字,也沒做出東西。這里是關(guān)于做這個(gè)軟件的過程和背后的故事。
開始做這個(gè)微博客戶端以來,進(jìn)度總是進(jìn)進(jìn)退退的。其中最主要的原因就是在微博顯示部分選擇 WebView 還是 NSView 繪制數(shù)據(jù)。選擇webview開發(fā)簡(jiǎn)單,可以給用戶更大權(quán)限實(shí)現(xiàn)新的皮膚。但是與Mac OS原生繪制機(jī)制相比,webview實(shí)現(xiàn)方法內(nèi)存占用大,速度慢,而且有些關(guān)鍵的UI特性無法實(shí)現(xiàn)。
起初選擇WebView的原因很簡(jiǎn)單-開發(fā)進(jìn)度快。由于自己還算精通 html、css 所以根據(jù)微博數(shù)據(jù)構(gòu)造頁面非常迅速,還輕易的設(shè)計(jì)了換膚系統(tǒng)。但是隨著進(jìn)度深入,開始發(fā)現(xiàn)一些希望的特性難以實(shí)現(xiàn),例如其中之一:view 之間切換的動(dòng)畫。如果要做這個(gè)視覺回饋,需要多個(gè)webview。并且這個(gè)客戶端功能之一就是維護(hù)一個(gè)訪問微博頁面的棧,用戶可以在多個(gè)好友微博頁面間切換而不會(huì)打斷用戶瀏覽行為。對(duì)于這個(gè)功能,使用webview這樣大型的控件代價(jià)太高了( 每個(gè) webview 都會(huì)維護(hù)一套自己的 DOM Tree 和 Render tree ) 就好比開了好多瀏覽器標(biāo)簽。絕對(duì)沒人希望一個(gè)客戶端軟件運(yùn)行起來臃腫的像瀏覽器一樣。
大約是在2010年底,我第一次暫停了項(xiàng)目。另外創(chuàng)建了一個(gè)小工程,希望測(cè)試使用 NSView 做同樣效果。這種數(shù)據(jù)填充的程序自然而然想到了使用 NSTableView,況且我使用它也是最多的。接下來繪制TableCell,從這里開始情況很快就變得復(fù)雜起來。繪制可變高度的表格很難實(shí)現(xiàn),求定寬文本高度總是不夠準(zhǔn)確,簡(jiǎn)單的100條微博就讓 tableview 慢到不可理喻。更抓狂的是,我不知道如何在 tablecell 里繪制 gif 動(dòng)畫, 添加可以點(diǎn)擊的鏈接等等,添加 NSTextField 做點(diǎn)擊鏈接我到是會(huì),可是在 view 里再添加眾多 textfield 不會(huì)讓這個(gè)表格卡到死么!當(dāng)時(shí)還學(xué)習(xí)了 Core Animation 的部分,了解到 CALayer 利用 GPU 硬件繪制,而且滾動(dòng)時(shí)候不會(huì)出現(xiàn) cell 重繪情況,應(yīng)該是解決 tableview 慢這個(gè)問題的好方法。但卻卡在了 CALayer 的各種事件相應(yīng)上,不知道如何在 CALayer 上添加鼠標(biāo)點(diǎn)擊,鼠標(biāo)選擇,文本拷貝等等。無法實(shí)現(xiàn)表情圖片顯示, 不能點(diǎn)擊鏈接,這不就是殘廢么!我一下子望而卻步了。
在一頭撞到這么多堵石墻上之后,我又灰溜溜的返回到 webview 的老路上來。明知道墻后的風(fēng)景會(huì)很美,只能自嘆技術(shù)不行。于是我開始考慮控制 webview 數(shù)量,試著在單一 webview 里實(shí)多帳號(hào)多頁面和現(xiàn)切換動(dòng)畫。這確實(shí)有可能實(shí)現(xiàn),jQuery UI 我非常熟悉,做一些 fadeout、fadein 的動(dòng)畫很容易。很快一個(gè)支持分帳戶,分頁的 html 結(jié)構(gòu)做好了,jquery 實(shí)現(xiàn) fadein fadeout 的確可行。這時(shí)我發(fā)布了 iCloud 的內(nèi)測(cè)版本。也有很大一部分朋友用過我這個(gè) iCloud 版本。隨著測(cè)試進(jìn)度深入,發(fā)現(xiàn)這個(gè)解決方案代價(jià)也是很大的,首先 javascript,css 代碼占的比重迅速增加,其次 html 結(jié)構(gòu)過于復(fù)雜,所以 css 設(shè)計(jì)難度提高了很多。當(dāng)然這都是小問題,還有一些問題就像刺一樣,不要命卻總讓我心頭不爽,例如:滾動(dòng)條不夠平滑;插入新微博無法維持 webview 滾動(dòng)條位置,微博總會(huì)上下跳動(dòng)。最后一個(gè)要命的問題就是,內(nèi)存開銷還是和國內(nèi)房?jī)r(jià)一樣花花的往上漲。內(nèi)存就好比用戶手里每個(gè)月拿到的那點(diǎn)銀子,真的不好意思讓大家花著買房的錢看著 iCloud 辦著‘偷菜’的那點(diǎn)兒事。
2011年4月,我宣布停止內(nèi)測(cè)。再一次暫停了這個(gè)項(xiàng)目。開始研究 nsview,一個(gè)一個(gè)的解決問題。截止寫這篇文章,上面提到的技術(shù)壁壘都找到了突破口。這真的讓人很興奮,就好比你鑿開了哪面石墻,透過縫隙看到了對(duì)面鮮花遍野的山坡。雖然路還沒有打通,不過沒什么比這個(gè)更讓我寬心的了。
在這期間,我看著眾多微博客戶端開始出現(xiàn)在果粉視線里。WeiLark, Mint, Macbo, Weibo For Mac, Woob 我全部用過,也全部否定了。這些軟件作者大部分是業(yè)余時(shí)間開發(fā)的,并沒有什么報(bào)酬,做出來就已經(jīng)很好了。但是從我的眼光評(píng)價(jià),這些只能算是業(yè)余作品。中國需要像 Tweetie 這樣能夠站在世界級(jí)別的 Mac 軟件出現(xiàn)。雖然這時(shí)候我還不敢保證什么,但是 Miao 絕對(duì)是帶著這樣的使命起步的。
2012年初到4月份左右,我都忙在 iYY 的升級(jí)和改進(jìn)過程上。等再次拿起 iCloud 代碼,我不得不給它改名為 Miao。并且請(qǐng) Yidi 幫我重新設(shè)計(jì)了圖標(biāo),一個(gè)有著可愛粉色肉球的黑貓爪。開發(fā) Miao 過程中我特意在瀏覽窗口模式還保留了 Tweetie 的外觀,向這個(gè)開創(chuàng) Mac 新 UI 時(shí)代的軟件致敬!目前 Miao 1.0 beta 已經(jīng)發(fā)布,收到了果粉的好評(píng),還有朋友留言說,“Miao 絕對(duì)超過了 Twitter For Mac?!?真的沒有什么比自己的設(shè)計(jì)和程序得到用戶的肯定更讓人開心的了。
軟件開發(fā)其實(shí)就像寫文章一樣,需要作者斟酌各種問題。煩了、累了,我就會(huì)反復(fù)告誡自己:“不可因?yàn)橹鄙暇€銷售就胡亂趕進(jìn)度”。 坂田銀時(shí)不是說過么:“錢呢,心急的家伙是得不到的!”。所以對(duì)于我來說,還是決定克服各種技術(shù)壁壘認(rèn)真的開發(fā)更優(yōu)秀的軟件。 對(duì)于用戶來說,好的東西是值得等待的。






快報(bào)
根據(jù)《網(wǎng)絡(luò)安全法》實(shí)名制要求,請(qǐng)綁定手機(jī)號(hào)后發(fā)表評(píng)論