??? 雖然黃華中和武總并沒有太多過問應用程序的編寫狀況,但已經幾天沒有敲打代碼的段伏櫪手已經開始癢癢的了。忙里偷閑固然好,但也不能太過分,畢竟需要做的東西,再怎么拖,也是必須要完成的。放下看了大約1/3的《C++ primer》,段伏櫪開始了音樂播放器的旅程。
???
??? 如果要做一款杰出的音樂播放器,特別是想在音質方面鶴立雞群,那么熟悉編碼解碼是非常重要的。可這對于數學不怎么樣的段伏櫪來說,這的確是一個難以逾越的鴻溝。所幸公司的這音樂播放器,只要能夠正常播放音樂文件,簡單的快進快退停止之類能實現就可以了,至于音質神馬的,都是浮云。因此對于段伏櫪來說,首先要知道的是,在Windows CE下如何去播放。
???
??? 現在的程序員是幸福的,至少比網絡還不發達的時候的程序員要幸福多了,有什么問題,可以直接問度娘和谷哥。只不過,搜索出來的結果,卻是非常沮喪的。基本上所有的帖子,關于視頻播放的,都是采用Windows Media Player這個ActiveX控件。而這個控件所使用的基礎嘛,卻偏偏是MFC。自從認識到Win32 API好處的段伏櫪,斷不可能回頭再去整這個折磨人要死的MFC。其實退一萬步來說,即使段伏櫪想吃回頭草,情不甘心不愿地回頭打理MFC,注定也是一個非常大的杯具——因為Windows CE沒有Windows Media Player這個控件!那有沒有不使用這可望而不可及控件的方法呢?答案是:不知道。即使段伏櫪跑去書店,翻看相應的多媒體書籍,所用的,也都是Windows Media Player!
???
??? 一籌莫展!難道這個音樂播放器的命運,只能歸于流產?這實在太打擊人了吧?搜索了大半天都毫無頭緒,段伏櫪覺得有點灰心了,暫時也沒有太多的心情再去一頁一頁網頁查看,索性便在QQ上和徐雅思聊起天來。自從那次給徐雅思修完電腦之后,段伏櫪很順利地就拿到了她的QQ號碼,平時有事沒事也會在QQ上聊上幾句。不能不說,QQ這的確是一個非常好的玩意,在一定程度上增進了之間的感情。特別是有一些人,如果使用電話,那么會緊張得不知道該說什么;但如果是在QQ,因為還有思索的緩沖空間,反而聊得不亦樂乎。段伏櫪和徐雅思目前就處于這樣的狀況,如果段伏櫪打電話,肯定匆匆忙忙不到十句就會掛斷;但在QQ上,卻能滔滔不絕。從另一個角度來說,QQ其實也稱得上劃時代的紅娘,估計通過QQ,先慢慢熟悉,然后進一步發展為情侶,最后走到一塊的為數不少。沒有QQ,或許這世界上就多了很多單身剩男剩女,特別是屬于程序員這一族群來說。當然羅,如果沒有QQ,或許也沒那么多小三……
???
??? 姜還是老的辣,別人的一句話,很可能便是解脫自己苦苦思索無果的指明燈。雖然老柳屬于那種絕對不會和別人分享自己成果的自私分子——這點淋漓盡致地表現在他給公司的電腦設置密碼,并且不在座位上就一定會將電腦鎖住——但對于不是他所擁有的東西,或是他不屑于乃至掌握不了的知識要點,他還是非常樂意分享的。當然咯,這所謂的“分享”也不要抱有太高的指望,他最多會說:“哎呀!這個簡單,你可以看看Windows CE下面的源代碼嗎,那不是有例程嗎?”如果在繼續深問下去,比如在哪個文件夾,或是什么工程,那么他直接啞火了。往往這時候,他會很有氣勢地非常嚴肅地說:“你這樣懶惰不行啊!你需要自己去找,這樣子記憶才夠深刻。”
???
??? 每次遇到老柳的挖苦或是欲言又止,段伏櫪總在心理暗暗罵道:“就那么點技術,有必要保守得那么嚴密嗎?”或是:“這東西如果你不懂,直接承認又不會丟你面子,哪有人什么都懂的?可你有必要這么怒氣沖沖地教訓人嘛?”可這一次稍微有點不同,雖然只是一句話,但卻給了段伏櫪無限的想象:Windows CE是開源的,而它自帶了媒體播放器。它既然沒有Windows Media Player控件,那么這自帶的播放器是如何實現的?這個,如果查看代碼的話,應該能知道一些端倪吧?
???
??? 想到這一環節,段伏櫪頹廢的心情一掃而空,和徐雅思說了句要忙去,就開始在煙波浩渺的Windows CE代碼中搜尋起來。說天無絕人之路也可,或是皇天不負有心人也行,段伏櫪終于找到了播放媒體文件的方法。準確地說,應該是找到了能夠播放媒體文件的工程。雖然這工程最后生成的程序并不是自帶的媒體播放器,而是一個最簡單的測試播放的小程序,但對于僅僅只是要了解媒體播放如何運作的段伏櫪來說,這已經足夠了。甚至可以說,這精巧的小程序,比那復雜的播放器要好很多,它可以沒那么多邏輯層,可以讓段伏櫪能夠將所有的精力放在如何播放這個要點。也正是如此,沒有花費多少時間,段伏櫪已經明白如果要播放媒體文件,大致需要調用哪些函數,以及這些函數的次序。
???
??? 不過段伏櫪并不滿足于此,因為很快他就發現了一個問題。如果將這些操作多媒體的函數放到界面的邏輯層里,那會顯得代碼非常雜亂,特別是可讀性非常糟糕,遠遠不如使用控件的簡便。但這似乎也有解決之道:自己將這些操作封裝為一個類,只是暴露出類似于Play,Pause等接口,界面邏輯層只需要簡單調用即可。這個和之前做UI界面時只是根據每個界面劃分,更顯得有邏輯和地道一些。在這樣的背景之下,段伏櫪的第一個真正意義上的功能類——CMedia—— 誕生了。???
???
??? 其實對于很多程序員來說,如果公司的管理比較疏松,允許員工復制代碼的話,他們都會攜帶自己所寫的代碼至下一家公司。只不過,當去到下一家公司的時候,絕對不會直接將之前的程序原封不動使用,因為這畢竟還多少牽扯到一些版權問題。然而更重要的是,原封不動的話,不一定適合新公司對于程序在邏輯層的要求。而這時候,很多程序員就僅僅是使用之前程序的部分代碼,比如播放器的話, 只是使用播放核心的代碼;至于邏輯層,則是根據新要求重新構造。這個時候,能否將核心代碼提煉出來,便決定了后續的使用是否能夠快速簡便。也正是如此,便有了一個眾所周知的業界潛規則:老程序員的跳槽,肯定是帶著幾個類到處跑。換個角度來說,將代碼根據用途不同進行分層,不僅對于現在的公司有利,對于后續的個人也不無益處。
???
??? 以前在浩程微的時候,吃飯從來不會和老柳和黃華中一起,但搬過來之后,只有這幾個人,自然是大家一起了。當然,這還是有個人例外,張文香是自己帶飯,中午自己呆在辦公室。吃飯是在旁邊,一家名為藍白的快餐廳。點菜方式和學校食堂差不多,菜分門別類,自己隨意挑選;選擇完畢之后,坐在座位上,會有專門的人來計算價格。如果有時候吃的非常快,當計單員還沒過來的時候,吃完的那個菜有時候還不用記賬。至于最后的費用,不是每個人分攤,大部分時間是老柳和黃華中買單。但次數多了,總是過意不去,所以有時候段伏櫪和沈俊還會搶著買單。
???
??? 這天,段伏櫪因為需要到華強北買個電池,所以沒有和大家一起吃飯;然后聽別人說,中電上面有個快餐,據說味道還不錯,段伏櫪便去換個口味。說實話,味道其實說不上非常美味,但至少還過得去,不過價格就比較貴,吃一次可以,吃多了就覺得有點舍不得了。吃完飯后,段伏櫪坐上電梯,同行的還有一對小情侶。
???
??? 誰說中國人不開放?已經非常和國際接軌了!你們這對小鴛鴦,在俺這個單身漢之前牽牽手也就罷了,親親嘴俺也忍了,可你們能不能不這么亂摸?亂摸也不要這么明目張膽吧?手都伸進去了!麻煩你們兩個親熱的時候,能不能回家再繼續啊?這現場的表演,你讓俺這個只能靠自己雙手的單身漢來說,情何以堪啊?
???
??? 這時候,一個空靈的聲音傳來:“夠~淫~蕩~”
???
??? 這聲音,立馬激起了這對小鴛鴦的憤怒:“你說什么?有種你再說一遍!”
???
??? 很顯然,這鴛鴦的聲音是沖著段伏櫪來的。可段伏櫪愣了,因為他什么話都沒有說啊!
???
??? 女鴛鴦的潑婦氣質出來了:“不是你說的,難道這里還有別人嘛?什么夠淫蕩?我們做什么,關你什么事情?你不看不就好了嗎?像你這樣的人,肯定找不到女朋友,一輩子就只會用雙手!”
???
??? 俺現在沒有女朋友,是沒錯。可您佬能不能留點口德啊?不僅詛咒俺找不到女朋友,還要一輩子用手!難道非要俺的手長老繭您佬才滿意啊!
???
??? 段伏櫪有口難辯,但還是不能不辨:“真的不是我……”
???
??? 女鴛鴦火更大了:“你以為你故意變聲音,我就聽不出來啊?做賊心虛,你這種人,假惺惺的……”
???
??? 女鴛鴦還打算繼續撒野,這時候,那個空靈的聲音又出來了。不過,這時候段伏櫪聽清楚了,什么“夠淫蕩”,那是“going down”!英文!中文的意思是正在往下!
???
??? 不知道這對鴛鴦是否聽懂了這英文,但至少他們已經知道這不是段伏櫪發出的聲音。電梯剛到一樓,門一打開,這對小鴛鴦飛一般地跑了,只留下目瞪口呆的段伏櫪。不識英文的小鴛鴦傷不起啊,傷不起……
????????
????
??? 注1:CMedia類源代碼:[http://blog.csdn.net/norains/article/details/1712083](http://blog.csdn.net/norains/article/details/1712083)
?
?
- 前言
- 《那些年啊,那些事——一個程序員的奮斗史》——01
- 《那些年啊,那些事——一個程序員的奮斗史》——02
- 《那些年啊,那些事——一個程序員的奮斗史》——03
- 《那些年啊,那些事——一個程序員的奮斗史》——04
- 《那些年啊,那些事——一個程序員的奮斗史》——05
- 《那些年啊,那些事——一個程序員的奮斗史》——06
- 《那些年啊,那些事——一個程序員的奮斗史》——07
- 《那些年啊,那些事——一個程序員的奮斗史》——08
- 《那些年啊,那些事——一個程序員的奮斗史》——09
- 《那些年啊,那些事——一個程序員的奮斗史》——10
- 《那些年啊,那些事——一個程序員的奮斗史》——11
- 《那些年啊,那些事——一個程序員的奮斗史》——12
- 《那些年啊,那些事——一個程序員的奮斗史》——13
- 《那些年啊,那些事——一個程序員的奮斗史》——14
- 《那些年啊,那些事——一個程序員的奮斗史》——15
- 《那些年啊,那些事——一個程序員的奮斗史》——16
- 《那些年啊,那些事——一個程序員的奮斗史》——17
- 《那些年啊,那些事——一個程序員的奮斗史》——18
- 《那些年啊,那些事——一個程序員的奮斗史》——19
- 《那些年啊,那些事——一個程序員的奮斗史》——20
- 《那些年啊,那些事——一個程序員的奮斗史》——21
- 《那些年啊,那些事——一個程序員的奮斗史》——22
- 《那些年啊,那些事——一個程序員的奮斗史》——23
- 《那些年啊,那些事——一個程序員的奮斗史》——24
- 《那些年啊,那些事——一個程序員的奮斗史》——25
- 《那些年啊,那些事——一個程序員的奮斗史》——26
- 《那些年啊,那些事——一個程序員的奮斗史》——27
- 《那些年啊,那些事——一個程序員的奮斗史》——28
- 《那些年啊,那些事——一個程序員的奮斗史》——29
- 《那些年啊,那些事——一個程序員的奮斗史》——30
- 《那些年啊,那些事——一個程序員的奮斗史》——31
- 《那些年啊,那些事——一個程序員的奮斗史》——32
- 《那些年啊,那些事——一個程序員的奮斗史》——33
- 《那些年啊,那些事——一個程序員的奮斗史》——34
- 《那些年啊,那些事——一個程序員的奮斗史》——35
- 《那些年啊,那些事——一個程序員的奮斗史》——36
- 《那些年啊,那些事——一個程序員的奮斗史》——37
- 《那些年啊,那些事——一個程序員的奮斗史》——38
- 《那些年啊,那些事——一個程序員的奮斗史》——39
- 《那些年啊,那些事——一個程序員的奮斗史》——40
- 《那些年啊,那些事——一個程序員的奮斗史》——41
- 《那些年啊,那些事——一個程序員的奮斗史》——42
- 《那些年啊,那些事——一個程序員的奮斗史》——43
- 《那些年啊,那些事——一個程序員的奮斗史》——44
- 《那些年啊,那些事——一個程序員的奮斗史》——45
- 《那些年啊,那些事——一個程序員的奮斗史》——46
- 《那些年啊,那些事——一個程序員的奮斗史》——47
- 《那些年啊,那些事——一個程序員的奮斗史》——48
- 《那些年啊,那些事——一個程序員的奮斗史》——49
- 《那些年啊,那些事——一個程序員的奮斗史》——50
- 《那些年啊,那些事——一個程序員的奮斗史》——51
- 《那些年啊,那些事——一個程序員的奮斗史》——52
- 《那些年啊,那些事——一個程序員的奮斗史》——53
- 《那些年啊,那些事——一個程序員的奮斗史》——54
- 《那些年啊,那些事——一個程序員的奮斗史》——55
- 《那些年啊,那些事——一個程序員的奮斗史》——56
- 《那些年啊,那些事——一個程序員的奮斗史》——57
- 《那些年啊,那些事——一個程序員的奮斗史》——58
- 《那些年啊,那些事——一個程序員的奮斗史》——59
- 《那些年啊,那些事——一個程序員的奮斗史》——60
- 《那些年啊,那些事——一個程序員的奮斗史》——61
- 《那些年啊,那些事——一個程序員的奮斗史》——62
- 《那些年啊,那些事——一個程序員的奮斗史》——63
- 《那些年啊,那些事——一個程序員的奮斗史》——64
- 《那些年啊,那些事——一個程序員的奮斗史》——65
- 《那些年啊,那些事——一個程序員的奮斗史》——66
- 《那些年啊,那些事——一個程序員的奮斗史》——67
- 《那些年啊,那些事——一個程序員的奮斗史》——68
- 《那些年啊,那些事——一個程序員的奮斗史》——69
- 《那些年啊,那些事——一個程序員的奮斗史》——70
- 《那些年啊,那些事——一個程序員的奮斗史》——71
- 《那些年啊,那些事——一個程序員的奮斗史》——72
- 《那些年啊,那些事——一個程序員的奮斗史》——73
- 《那些年啊,那些事——一個程序員的奮斗史》——74
- 《那些年啊,那些事——一個程序員的奮斗史》——75
- 《那些年啊,那些事——一個程序員的奮斗史》——76
- 《那些年啊,那些事——一個程序員的奮斗史》——77
- 《那些年啊,那些事——一個程序員的奮斗史》——78
- 《那些年啊,那些事——一個程序員的奮斗史》——79
- 《那些年啊,那些事——一個程序員的奮斗史》——80
- 《那些年啊,那些事——一個程序員的奮斗史》——81
- 《那些年啊,那些事——一個程序員的奮斗史》——82
- 《那些年啊,那些事——一個程序員的奮斗史》——83
- 《那些年啊,那些事——一個程序員的奮斗史》——84
- 《那些年啊,那些事——一個程序員的奮斗史》——85
- 《那些年啊,那些事——一個程序員的奮斗史》——86
- 《那些年啊,那些事——一個程序員的奮斗史》——87
- 《那些年啊,那些事——一個程序員的奮斗史》——88
- 《那些年啊,那些事——一個程序員的奮斗史》——89
- 《那些年啊,那些事——一個程序員的奮斗史》——90
- 《那些年啊,那些事——一個程序員的奮斗史》——91
- 《那些年啊,那些事——一個程序員的奮斗史》——92
- 《那些年啊,那些事——一個程序員的奮斗史》——93
- 《那些年啊,那些事——一個程序員的奮斗史》——94
- 《那些年啊,那些事——一個程序員的奮斗史》——95
- 《那些年啊,那些事——一個程序員的奮斗史》——96
- 《那些年啊,那些事——一個程序員的奮斗史》——97
- 《那些年啊,那些事——一個程序員的奮斗史》——98
- 《那些年啊,那些事——一個程序員的奮斗史》——99
- 《那些年啊,那些事——一個程序員的奮斗史》——100
- 《那些年啊,那些事——一個程序員的奮斗史》——101
- 《那些年啊,那些事——一個程序員的奮斗史》——102
- 《那些年啊,那些事——一個程序員的奮斗史》——103
- 《那些年啊,那些事——一個程序員的奮斗史》——104
- 《那些年啊,那些事——一個程序員的奮斗史》——105
- 《那些年啊,那些事——一個程序員的奮斗史》——106
- 《那些年啊,那些事——一個程序員的奮斗史》——107
- 《那些年啊,那些事——一個程序員的奮斗史》——108
- 《那些年啊,那些事——一個程序員的奮斗史》——109
- 《那些年啊,那些事——一個程序員的奮斗史》——110
- 《那些年啊,那些事——一個程序員的奮斗史》——111
- 《那些年啊,那些事——一個程序員的奮斗史》——112
- 《那些年啊,那些事——一個程序員的奮斗史》——113
- 《那些年啊,那些事——一個程序員的奮斗史》——114
- 《那些年啊,那些事——一個程序員的奮斗史》——115
- 《那些年啊,那些事——一個程序員的奮斗史》——116
- 《那些年啊,那些事——一個程序員的奮斗史》——117
- 《那些年啊,那些事——一個程序員的奮斗史》——118
- 《那些年啊,那些事——一個程序員的奮斗史》——119
- 《那些年啊,那些事——一個程序員的奮斗史》——120
- 《那些年啊,那些事——一個程序員的奮斗史》——121
- 《那些年啊,那些事——一個程序員的奮斗史》——122
- 《那些年啊,那些事——一個程序員的奮斗史》——123
- 《那些年啊,那些事——一個程序員的奮斗史》——124
- 《那些年啊,那些事——一個程序員的奮斗史》——125
- 《那些年啊,那些事——一個程序員的奮斗史》——126
- 《那些年啊,那些事——一個程序員的奮斗史》——127
- 《那些年啊,那些事——一個程序員的奮斗史》——128 (終章)