Posts

Showing posts with the label 讀書心得

[讀書心得] ffmpeg tutorial (三) Playing sound

這集主要是介紹透過 SDL 播放 sound. Audio -   (1) 由一連串 streams 所組成, 每個 stream 又稱為一個 sample, 表示 audio waveform.   (2) 如何撥放 audio 是由 sampling rate 決定, 表示每秒播放 N samples. Ex. 22050 for radio, 44100 for CD.   (3) multichannels for stereo or surround   (4) 當我們得到 video 的部份 data 時, 會得到一個完整的 samples. 也就是說: 我們無法預期得到的 sample 數, 但 ffmpeg 也不會將 samples 分成數段. SDL 播放 audio 的做法為:   10 Audio information Setup, including sampling rate (named frequency in SDL), number of channels, callback function, userdata, etc.   20 Call callback function and fill audio data into SDL_AduioSpecs.   30 Call SDL_OpenAudio()   40 Back 20 until finished

[讀書心得] ffmpeg tutorial (二) Drawing images to screen

這集介紹透過 ffmpeg 將 stream 轉為 Images 輸出, 採用的是 SDL (Simple Direct Layer).   SDL 的簡單說明:      (1) Simple DirectMedia Layer      (2) written by c, but C++ compatible.      (3) cross-platform (Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, OpenBSD, BSD/OS, Solaris and QNX)      (4) low level access to hardware device, ex. keyboard, audio, mose, joystick, 3D hardware(via OpenGL), 2D video framebuffer.      (5) GNU LGPL v2 (表示只要透過dynamic library, 即可作為商業用途; 只有再修改SDL源碼才要公布修改的部分跟使用的代碼)      (6) Language biding (ex. C#, Java, Lisp, Lua, Object-C, PHP, Python, Ruby and smalltalk)      (7) DirectX之於Windows, 等同SDL之於nonWindows      (8) Current Version 1.2.15 (Jan. 20, 2012) resource click here . SDL 對於呈現 image 很多方法, 這裡介紹一種 YUV overlay.(這以前在學校有接觸過, 可當時根本不知道在幹嘛... ) YUV(technically, YCbrCr) 是一種儲存 raw image 的格式, 其他的格式像是 RGB. Y: brightness/luma component, U and...

[讀書心得] ffmpeg tutorial (一) Making Screencaps

Media files 種類分成 music, image, video. 每個 file 自身又稱為 container , 各自的格式如下:   -music container : AIFF(mac), WAV(windows), XMF(extensible music format), etc.   -image container : TIFF, FITS, etc.   -video container : 3GP, AVI, ASF, Matroska, Quick Time, MPEG, MP4, RM, etc. container type 決定了 儲存於 file 的資訊(這不廢話...) container 由 streams  (audio/video) 所構成, 每個 stream又可以分成數個 frames . 其中 streams 被各種 codec 以 encode 方式儲存於 container.  codec 定義了 stream 如何被 enCOde 跟 DECode, 如 H.264, Xvid, MP3.  不過在傳送時,  streams 是以數個 decoded 的 raw frames 為單位, 稱作 packet. 一個簡單的處理程序如下: 10 OPEN video_stream FROM video.avi 20 READ packet FROM video_stream INTO frame 30 IF frame NOT COMPLETE GOTO 20 40 DO SOMETHING WITH frame 50 GOTO 20 不過這裡有幾個疑問(Q1):     (1) packet 是固定大小的 frames?      (2) 一個 image 由固定大小的 frames 組成? audio 又是怎麼傳輸?          恩, 直覺上最簡單的做法是每次收 data frames 時先檢查大小.    ...

[QList] iApp, DLNA, Lua

1. 寫iphone/ipad app不是只有 object-c, 原來也有提供其他語言的 SDK, 像是angry bird就是用 Corona (Lua)寫的. 不過既然是SDK, 肯定就會有功能上的限制, 就看各自需求了. 2. Lua 是一種 script, 可以很容易被C/C++使用, 反之也可以使用C/C++函數. (這感覺是linux下我們寫c調用shell script的方式?! windows下寫.bat?! 不過它可以反過來用 c/c++涵式真是威猛! 有空瞧瞧) 3. 有空找個 iPhone JB試試. 4. iOS上作streaming還是脫離不開ffmpeg(茶...)   ffmepg4iphone  開源碼 5.  Oplayer 作者的 blog 6. DLNA 似乎目前仍是 移動終端多媒體共享的最佳解決方案 .... 似乎家電大廠、網路通訊業、電信業跟網路服務業等,想的到的公司都是 它的members ... 另外學長提供的一個 development tool for upnp and dlna. 7. 這幾天再回顧DLNA的缺點, 我覺得是: (1) 功能強大的Server(Windows Media Center, XBOX) 對optional的檔案格式不支援(這應該是要裝plug-in) (2) 再播放高畫質影片時, ex. avi, 需要較久的延遲. (3) 試了一堆players, 遇到的問題(不完全是WMC)大多是要碼就是無法 VCR, 要碼就是檔案格式不支援, 要碼就無法迅速切換。這些要釐清是Server/Player/network的問題對工程師而言真是個夢靨... lol  更何況是還有 conroller... 不知道目前作到最佳使用者體驗的產品有哪些??? 8. XBMC , 一個跨平台的多媒體解決方案, 值得關注。

[讀書心得] apple i系列不支援 adobe flash 的理由?!

最近 iPad 出來馬上成為話題, 不過相較iPhone 的出世,iPad首賣銷售量僅只一半,但這不是我care的。 比較好奇的有兩個:1. iPad的市場跟價值在哪?  2. apple不支援adobe flash的理由何在? 先從第2項談起好了,從網路上蒐集的資訊可以歸納出3點: 0. 歷史因素:(但這點我認為影響不大啦,畢竟商場上沒有永遠的朋友與敵人) 1. OSX與Adobe Flash 間的支援性:      apple:  Adobe 是間不知成長的保守公司,對於自家產品的不穩定及缺陷報告漠不關心                   (ex.Apple向 Mac OS的Flash 發布的缺限報告有400多項, 但現今只修復25項 )                  Adobe 的ASA(Adobe Software Activation) 機制在不考慮系統的保護機制下,                  直接讀取cpu跟ram,會導致系統不穩定。                  Flash 相當耗cpu, 又有中毒的危機。      adobe心中os: 自己的 os 不穩定,還要遷拖。 2. 價格:      apple: adobe 產品的介面老舊,很久沒有更新了。而且create suite又賣那麼貴,相較之                 下,Unity小巧的多。      adobe:  你們家的產品是多便宜? 所以這也表示你們只賣外表? 結論:我也認為apple 這理由實在牽強,擺明了就是要主導行動裝置的市場,不然大可開放  ...

[讀書心得] 程式之路

關於寫程式這檔事,自己起初是為了個不服輸,寫到現在似乎是興趣?! 人家都說要當一個好的程式設計師至少要花1萬個小時或十年,這可真是慢慢磨。 今天大大推薦一篇文章 【程式設計】十年自學程式設計 其中有幾點我想要記錄下來: 十年自學程式設計   研究學者( 海斯 、 布盧姆 )的研究說明,在許多領域,大約十年才能培養出專業技能 ;包括下西洋棋、作曲、繪畫、鋼琴演奏、游泳、網球,及神經心理學和數學拓撲的研究 。似乎沒有真正的捷徑;即便是莫扎特在四歲就展露出音樂天才,在他寫出世界級的音樂 之前仍然用了超過十三年的時間。   再看另一種類型的代表,披頭四樂團,他們似乎是在1964年的艾德˙蘇利文劇場 表演,突然地成為熱門樂團首席。其實他們從1957年開始,就在利物浦、漢堡等地的 小型俱樂部表演了。雖然他們很早就顯現強大的吸引力,但他們具決定性的成功作品《胡 椒中士》也要到1967年才首次發行。山姆爾˙強森則認為十年根本不夠:「任何領域 的卓越成就,只能用一生的努力才能取得;稍微低一點的代價是換不到的。」喬瑟抱怨說 :「生命如此短促,學習技藝卻要這麼地長。」   以下是我在程式設計這個領域獲致成功的秘訣: ˙對程式設計感興趣,因為樂趣而寫程式。確信你自始至終都能樂在其中,這樣你才願意 將十年光陰投入。 ◎與其他程式師交流;閱讀其他人的程式。這比任何書、任何訓練課程都來得重要。 ◎不斷地寫程式。最好的學習方式是 做中學 。更專業地說,「在特定領域的個人最高績效 ,並不是經驗夠久就會從天下掉下來;但若個人極具經驗,那麼可以透過有計劃的努力來 改進並提昇這種層次的績效。」( 第366頁 )   而「最有效的學習需要,定義明確的任務,特定人則有其相應難度,能增進知識的回 饋,還有重複及修正錯誤的機會。」(第20~21頁)《 實踐中認知:心智、數學與日 常生活的文化 》是這個觀點的一本有趣參考書籍。 ◎如果你想,你可以去讀四年大學(或再讀研究所)。這是你找工作時所需的資格,同時 也可讓你對這個領域有更深的認識。但如你不喜歡學校,你還是可以(得有犧牲)透過工 作獲得類似的經驗。就任何情況來說,只從書本上學是不夠的。「電腦科學的教育無法讓 人成為程式設計的專家,正如研究畫筆跟顏料,也不會讓人成為專業畫家。」艾瑞克˙雷 蒙,《新駭客辭典》的作者這麼說。   我曾聘請最優秀的程式師之一,他只有高...

[讀書心得] 金字塔原理

"清楚寫作唯一重要的行動,便是控制表達觀點的順序。" -- Barbara Minto 之前YEF的業師推薦了麥肯錫的一本書"金字塔原理",是用來訓練邏輯思考與寫作的書。 因為覺得自已的邏輯思考能力的不足,偶然間想起這本書,所以在這個過年借了本來瞧瞧。 作者說一般人詞不達意有兩個原因,一個是缺乏練習、另一個則是文章的結構出了毛病。 然而對於讀者而言,最簡單的順序是先接受主要的、最抽象的觀點,接著才是次要的、支持性的觀點。基於主要的觀點永遠源自於次要的觀點,而這些觀點的最理想結構,則是源自於中心思想綁住好幾個觀點所組成的一個金字塔結構。 這些觀點彼此的關係可以是縱向 (任何一層的一個論點永遠是下面一層組成觀點的總結) ,也可以是橫向 (幾個觀點因為共同呈現一個邏輯論點而被歸類為一組)。利用 question/answer dialogue 的方式,當讀者對於某個論點基礎產生質疑時,其金字塔的下一層就是要回答那個問題。 這本書主要是說明 1. 為什麼金字架構的反應最好 2. 組成金字塔的邏輯子結構間如何互動 3. 教你一些基本原則,幫助你將想法建構成簡單的金字塔結構。

[讀書心得] 測試(二)

接下來談的是一些關於測試的伎倆。 1. 學弟建議的 code Coverage 程式碼涵蓋範圍     這是用來計算程式碼有被執行的的比例,占的越多不表示程式碼品質好, 但占的少表示測試品質差。這就像是很多條路徑,要怎麼設計多組cases來 走完全部的路徑。 2. 邏輯涵蓋範圍     去計算全部的邏輯運算式中,所走過的有幾個。這表示,假設一段程式碼 有6個if, else, for, ... 等等等判斷式,則至少需要6個test cases 3. 資料流程測試(我覺得稱做資料生命周期測試比較合適= =a)     一個資料它可以分成三個型態:     已定義- 已初始化但尚未使用     已使用- 已在運算中     已停用- 表式運算結束     另外對於從 已定義->已使用中間可以插個 已進入,     以及從 已使用->已停用中間插個 已離開,做為進一步描述。     一般正常的資料流程是 定義、使用到停用,這都沒有問題。     但是常出包的地方就是發生在一些情況:     a. 已定義-> 已定義         重複定義,雖這不一定會出錯,但可能造成問題,應避免。     b. 已定義-> 已離開         一般變數沒使用就離開,是挺奇怪也不合理的。     c. 已定義-> 已停用         表示這是個多餘的變數     d. 已進入-> 已停用          表示在進入時,就停用,但尚未定義或使用。這樣對於區域變數會有問題。     e.  已進入-...

[讀書心得] 測試(一)

工作即將進行到測試階段,但老實說我從未做過相關工作,所以看了本書 Code Complete ,這裡來寫一些筆記+心得。 這本書提到測試依層次有分幾類: 1. 單元測試:  這是用來測試某一個完整類別中的函數或變數而常使用的一個方法 2. 元件測試:  用來測試一個完整類別、封裝。 3. 整合測試: 用來測試複數類別、元件或子系統。 4. 迴歸測試: 重覆已執行過的test-case,藉以找出先前測試中未察覺出的缺失。 5. 系統測試: 讓軟體在最終設定下執行,並與其他軟硬體結合,包括安全性、效能、資源損耗、計時問題以及其他無法在低階段整合中測試的問題。 其實還有一堆,像是客戶接受度、效能、設定、平台、壓力及可用性測試等等等,太多了。 知道一堆名詞後,我還是不知道怎麼著手。 一般人將測試分為兩類:黑箱測試及白箱測試,這大家都懂。 然而測試的目的為何? 測試與除錯的差異? 為何測試對於大部分的開發人員來說相當困難? 書上解釋了幾項原因: 1. 因為測試的目標與當初開發的目標正好相反。     測試的目標:找出可能的錯誤,讓軟體掛掉     開發的目標:除去所有臭蟲,讓軟體順利執行 2. 測試無法證明錯誤不存在。     (ㄜ... 這是表示錯誤是NP-H嗎 = =+) 3. 測試本身不能提升軟體品質。     這應該是倒過來說,測試的結果可以做為品質的一種評估指標,但無法提升其軟體品質。 4. 要假定你自己的程式碼中存在錯誤。     (這不是廢話嗎... 但要揪出他又是另外一回事了xD) 了解什麼是測試後,書上建議了一些測試前的準備工作: 1. 測試相關需求,確認需求實做是否存在。     這裡指的應該是客戶需求那玩意。書中也提到可以針對那些需求中,常被遺漏的部分,像是安全性、storage、安裝程序即系統可靠性測試,因為這些常是在需求階段被忽略的東西。 2. 對於1的問題,撰寫即規畫test-case 3. 使用基本測試。 4. 在檢查清單中記錄在過去開發中曾犯的錯誤。 另外也提到了測試的順序應該是邊寫邊測還是最後再測? 書中建議是- 事先寫做test case, 有助...

[讀書心得] 關於學習這門事

讀書這檔事,雖然大家都會,可是真要問問自己,自己學習的效率好嗎? 有沒有存在一種"正確"的學習方式,可以讓讀書這苦差事(大部分的人應該都覺得讀書很苦XD) 更有趣、更有效率? 一般人學習方式都是: 1. 看懂它  2. 確定沒有遺忘它 hmm... 在過去的念書裡,很少人會告訴我一些學習,所以我總習慣於追逐頁面上的文字在玩文字遊戲,導致花了很多時間在玩文字遊戲,這種人叫做"head-first",表示他做任何事前習慣先將頭探出去,是指那種做事情未事先深思熟慮的人。 今天看到一些不錯的學習首則,希望之後對於自己的學習方式能多留意: 1. 盡量視覺化     在Mr. Brain裡頭也提到了,人類對於顏色的敏感度勝於文字。而影像相較於文字對於人類更容易記憶,可以提升學習效率,甚至將回想及轉述效率提升至89% ( 根據認知學習理論中的雙通道假設,人類學習主要藉由視覺及聽覺,唉... 難怪我學習能力很差,因為我近視破千加上輕度聽障 = =.... ) 2. 對話格式 + 人性化風格     根據統計,使用第一人稱或對話方式來教學比起正常中規中矩的方式,學生學習效果可以提升至40%。所以若閱讀時(甚至回顧時?!),以說故事的方式、用口語來表達所看到的文字,更能挑起自己的注意力。 3. 學習深入思考     我覺得這個很難,究竟要怎做呢? 首先必須被驅使強迫自己參與其中、產生好奇心、並自發地解決問題、做出結論、最後產生知識。這個說易行難阿!  需要有人來問你問題引誘思考、並用活動或測驗來活化左右腦。 4. 保持注意力    5. 試著被感 動    至於如何思考? 我也不知道,但是網路上很多答案,目前覺得最中肯的是從 這個網頁 看到: 1.   跟頂尖的人做朋友        這個真的是除了砍掉重練外最快的方式 = = 在研究所這一年多裡我見識狠多,不管是學長或學弟,真的都超優秀的... 2. 多看書     說到這點我真的很慚愧,以前我超愛看書的...  但自從看教科書加上工作性質的關係後,我變得很少看課外書... 要多提醒自己再忙也要花時間...

順著天賦作事,逆著個性作人

順著天賦作事,讓自己回復自在的狀態,活著得很有能量。 至於個性,則不可以任性妄為, 若任由個性掌握局面,會讓人習慣走在老路上, 沒辦法突破,開創新局...... 人到了某個年齡,開始對自己的命運產生好奇。偉忠先生研究各種命理解析後,發現雖人的命盤各不相同,但是若想要成功,就要「順著天賦作事,逆著個性作人」。 而所謂天賦,就是自己最擅長、表現最好的事情。 順著天賦 偉忠先生在民國84年時,正打算嘗試新的工作領域,探測未來更多發展可能。當時正淡出電視製作、 轉進廣播經營的領域。在台北之音的成績蒸蒸日上,但他一直冀望能有所突破。此時獵人頭公司來電,說有間跨國音樂公司想找他當總經理,洽談後,他決定參加面試,爭取在MCA台灣分公司擔任總經理的機會。 疑問: 一個從未喝過洋墨水的眷村子弟,能不能生存於跨國企業? 雖是生平第一次面試,而且全文是以英文回答,他仍順利拿到這個職務,並允諾會兩頭兼顧(跨國公司總經理+台北之音總經理)。 真厲害... 失敗的收獲 雖然最後結果是失敗了,他覺得他得到了兩個收穫: 第一、更了解自己,有想做想做的衝勁,但不做主就不能執行的不甘心。 雖是總經理,但還是要受命於人。台灣的分公司預算要請示亞洲總部,而亞洲總部的預算,則操控在全球預算的某個百分比當中。每次構思一個不錯計畫,卻因公司內部派系利益或政治考量而胎死腹中。這對習慣執行的人來說,等待是莫大的折磨,不能作主,怎麼開疆闢土? 第二、知道何時該喊停 他認為教育總鼓勵學生,面對自己不懂的事情時,應該主動學習。但很少提醒大家,如果真有某種天分,那就不一定要「做大家都在做的事」。像蔡志忠是天才漫畫家,何必跟著大家一起聯考、讀博士? 王偉忠覺得他基本體質是個創作者,不坐是手會癢,一早起來若沒目標,心會慌。但公司需要的不是創作者,而是乖乖聽老闆話的管理者,儘管薪水高,做的也可以,但就是不開心,而且打從心裡覺得自己與這樣的工作內容格格步入。 經過這次體驗,他終於清楚什麼適合什麼不適合:他不適合有了好想法,卻必須隱忍不發;不適合凡事請示上級;不適合光做人不作事;不適合空著雙手無事可做。 在這段「逆著個性作人」的過程中,反而再三確認「這不適合我」。 找到適合自己的位置,是重大的人生課題。知道這位置不適合,也要懂得優雅下台。於是他在合約期滿後,掛冠求去。步經過這段歷練,不會知道找到正確位置的喜悅。 知道不適合,是一大進...