星期四, 12月 09, 2010

程式架構雜想

最近一直都在嘗試設計對於自己而言一個比較大型的程式,這對我而言算是很充滿挑戰性的事,因為我從來沒有用過正規方法來設計這樣子的一個程式,我一直以來都是且戰且走型,這也難怪我的程式一直都寫不大,不然就是充滿破爛 XD。

庖丁解牛,恢恢乎游刃而有餘。 - 莊子

這大概是我對於設計架構上最大的感想,基本上我還是非常習慣紙筆思考,對我而言,不管是傳統的 OO 設計方式抑或是 eXtreme Programming 的設計方式 (在這幾天終於了解為什麼會叫 eXtreme 了,誤用真的很危險),事前的分析與設計是一定需要的,如果一開始的需求就是固定不太會變動,其實傳統的 OO 設計方式應該是相當的夠用,重點是,如果在途中一半更改需求的時候該如何因應 ? 這是我這次設計程式不會遇到的問題。我想我可以日後再好好的想想,因為我也不覺得用 XP 會是最佳解。

如果是設計演算法的程式時,其實我覺得算是最好設計的,但是在轉換上的時候,必需對數學的 set 要有一定程度的認知及轉換上的經驗(基本上 set 可以表示任何事情,int 也是一個數學的 set,一個 struct 也是一個 set,只是是一個 set * set ...),也就是說,如果轉換到一個夠簡單夠容易處理的模型,要設計起來也相對容易的多。但是對於 set 的轉換,其實到目前還是沒有頭緒,以後想到再補述好了。

架構設計的時候,ycma 建議的是 top-down approach,而我自己使用的是 button-up approach,他很堅持我的方法是錯的,會造成寫程式時候的災難,不過我還是蠻堅持先用 button-up run 過一次,再使用 top-down 把所有東西連起來,因為兩種方法的交錯使用,讓我學到很多事,在此在思考,是否只用 top-down approach 就可以解決呢,我不這樣子覺得,這或許也是等到設計完的時候,會有一些有趣的事發生。

設計架構會遇到的三個主要問題,data consistency, unduplicated code, consider function side effect,最後一個其實是最好解決的(拜 Functional Programming 所賜,現在寫程式很想會觀察 code 之間的相依性,把 code 視為一個 block,雖然這不是 FP 的主意,但是我卻是因為這樣子學會的 ... Orz),data consistency 一開始的設計就很重要,我會嘗試把資料集中放在少數幾個 Class 裡,其他使用 id 存取 (不一定非得用 Pointer or reference,有時候我太執著於用語言的層面來解決這個問題,不過這個問題的確也是還在思考),而 unduplicated code 是最困難的,因為很容易會有相同的功能,這也不是用個 Generic Type 就可以把這個問題處理的很好,這目前還在思考怎麼辦。

基本上算是雜亂的記錄,希望一個月過後,自己再看到這一篇的時候,能給自己一些解答。


---
如果錯的話,就指正吧,我好久沒有寫技術文了,雖然這篇也稱不上技術文就是了 XD。

星期二, 12月 07, 2010

耳機

看到 godfat 發的 HD800,我也忍不住想寫一些東西記錄下來。

我現在在服役中的耳機是 Grado SR80 + AKG K319,耳擴用 FireEye I,其實這兩隻耳機都是一時之選, SR80 應該不用多說,是我跟學弟用二手買來的。而 K319 被稱為 AKG 的耳塞式耳機之王,是為了攜帶方便而買的。

從高中有了第一台 CD 隨身聽到現在,我聽音樂都用 ipod touch, 如果沒有人的話我都會用 YAMAHA MCR-040,雖然我很愛耳機,但是我不愛虐待耳朵。音響不是我要討論的重點,在此先跳過,ipod touch 其實是聽音樂不錯的載體,至少我不用煩心在音樂的管理及同步上。這點我在 iTunes 上花了很多心力。三年前我剛從 Windows 移至 Mac OSX 上的時候,老老實實的花了三個禮拜在整理歌(這中間當然也丟了很多我完全不想聽的歌),只能說現在聽歌對我而言還算是一個方便而享受的事。

老實說,聽歌的話,Perfume 是一定會有的 (笑),其他的話就以外語居多,最近也有人推薦我一些歌(很感謝),大概聽的歌不是電音就是流行音樂吧,還算是很正常的領域,以下的耳機感想是基於聽這些歌這樣子寫出來的,其實聽音樂這種事很主觀,大家看看就好。

買 Grado SR80 的原因是因為我上一付耳機 SJ5 壞了 XD,我很明白的了解,SR80 沒有耳擴會非常的虛,於是去品嘉買了一付隨身耳機 AKG K315,加 399 送耳擴(FireEye I),雖然我知道這耳擴或許普普,不過 SR80 + FireEye I 就這樣子陪伴我渡過一年多。SR80 的聲音其實很順平順,很平淡,但是就是可以見的到其威力,我聽耳機的音量不算大聲 (比較點是去品嘉老闆娘放給我的音量,我總是覺得太大聲了 XD),但是還算是可以聽的很順耳,我真的蠻喜歡這隻耳機的 (除了不好帶以外) XD。

買 AKG K319 的原因是因為我把 K315 弄丟了(雖然後來又找到,但是就送給一個喜歡聽音樂的人了),其實我一直不喜歡耳道式耳機,因為我帶起來會不舒服,所以我就問了品嘉老闆娘說,我要耳塞式耳機,請問老闆娘推薦那一隻呢? 然後就丟了 K319 XDXD (我該說還好那天我錢有帶夠 XD)。這隻耳機燒完之後,其貫沒什麼好挑的,不用耳擴就可以聽到很多細節,辨識能力跟 SR80 不相上下(這是提醒我該換耳擴的時候了嗎 XD),而聲音聽起來比較原始,比較沒有遭到渲染的樣子(我聽 SJ5 再聽這兩隻就有很明顯的感覺),而 K319 加了我現有的耳擴我聽不出有多大差別,所以我出門就大概只帶這隻耳機,雖然隨身附送的盒子稍微大了一點(還附了飛機用的轉接頭,我也不知道我什麼時候會用到 XD),還好我出門都帶背包,這點倒是不構成太大的問題。

以 Perfume 來說, K319 可以聽到很多細節,Perfume 算是我這幾年來聽的高複雜度音樂,電音本身就很複雜,要把這麼多聲音分清楚,不僅耳機,耳朵也要需要有一定的練習才聽的出來。SR80 的話,是可以把 Perfume 的複雜與平順表示出來的,其實我還蠻喜歡用 SR80 聽 Perfume 的感覺的,但是想要聽的清楚且更不帶感情,我會推薦 K319。

其他歌曲的話,通常我抓到什麼耳機就聽什麼耳機耶,其實我也沒有很清楚的分辨,這可能就是要說抱歉的部分,以後再補啦XD (跑)

雜記,記錄一下自己聽音樂的感覺,所以沒什麼章法,請見諒哩


---
生活與音樂

特別

或許,還想讓你相信些什麼。


---
生活。