距離上次 release 已經過了快兩個禮拜,今天釋出了 RSS Wallpaper Switchr 0.2.0 版。
除了修掉一些 bug 外,比較主要的工作是在以下三項:
- 把 RSS parser 和 image downloader 做一次大的調整
- 加了新的一種四張拼貼式的桌布模式
- 改用 git flow 的方式來管理 source tree
1. 把 RSS parser 和 image downloader 做一次大的調整
其中第一項是最困擾我的,幾乎花掉了整個端午節連假測試和上網尋求協助。最早的時候,為了做到 async 的網路連線,其實已經用了 NSOperation
和 NSOperationQueue
來做了,不過那時只做一半,後面接的還是 dispatch_async
。後來為了監控 queue 是否完成或取消,加了一個 KVO 的 observer 來看 queue 的 count,除了 code 看起來亂無章法外,是也還跑得好好的,但就在 v0.1 release 前,覺得 code 太雜太醜,想說不用自己再造輪子,用 Cocoapods 引入了 Alamofire 來處理網路連線,然後就開始出現奇怪的現象:只要把 Alamofire 的 request cancel 掉,NSOperationQueue
就會有異常爛掉的狀況。所以我上了 StackOverflow 去尋求解答。
在高手的引導下,我先學會了 println()
因為是 synchronize 輸出 log,所以讓我誤以為因為同時輸出的 log 而呈現亂碼的狀況是記憶體問題,後來在逐條測試和幾乎重新改寫 class 後,原本有 NSZombie
和 over-release object 的情況也就修正了,理論上已經排除了 Alamofire 涉案的可能,不過還是讓我測到一個奇怪的情形,在 cancel 掉 Alamofire request 後,原本應該是 single thread 跑的 KVO 反而變成 multi-thread.
這個情形似乎還沒有得到個合理的解釋,不過又得到高手的指導,才知道有比用 KVO 來 follow queue 的完成更好的做法,就是 NSBlockOperation
,再度改寫了之後,code 更精簡,也解決了原本的問題。另外,因為這個問答的關係,讓我在 StackOverflow 原本只有閱讀權限,稍微上升到可以替人按讚的等級(reputation 要大於 15),這也是個意外的收穫。
▲【My StackOverflow Reputation】
2. 加了新的一種四張拼貼式的桌布模式
其實我自己最習慣的桌布模式是一張放滿畫面的大圖,不過為了讓 App 有更多可能的使用者,還是試著把它加進來。這大概就是練習一下怎麼用 Cocoa API 做圖形的處理。當然這個部份完成後,日後要再加新的拼貼模式應該就不會太困難。
3. 改用 git flow 的方式來管理 source tree
早期我在用版本控制系統(不管是最初的 svn 或現在的 git),因為沒機會和人合作,基本上都是當成流水帳式的一條一條往上疊,完全沒有利用到 git 好用的 branch 功能。忽然覺得,如果想要吸引其他人來送 pull request(可能想太美了),似乎應該把門面弄得好看一些,看起來 git flow 倡導的 master, develop, feature, release, hotfix 這樣的流程還蠻合我胃口,所以就在這次 release 前的一點點給引入了。
為了讓 commit log tree 長得好看一些,這次也努力的去了解了 git rebase
相關的運作方式(感謝 ihower 的教學 video),成功的修整了幾個 feature branch,也是有一點小小的成就感。
▲ 經過一番 rebase 後總算把 branch 整理好 merge 回去,比較有層次了
什麼才是本業?
這個月可以用那麼多力氣在這上面,也是天時地利才有這種機會,下一次遇到不知道又是多久以後的事了(趕緊去翻下一年度的 course schedule XD)。
每次把心神投入在電腦時,有時會有成就感,卻也伴隨著罪惡感,我究竟把本業做好了嗎?我不是應該加強專業的技能嗎?想到之後要做不那麼喜歡的報告,就會不自覺的想逃避到程式碼的世界裡。這樣行嗎?上次季考的挫折和失落已經忘了嗎?唉,這些問題可能都要到入土了,看看會不會有解答吧!