寫! 改!

Dependency


Dependency, 平常在電腦用的中文會用依存性來翻譯.

究竟要怎麼平衡獨立軟件的套件形式和Native Platform 的標準依存形式呢

愈要思考的話, 愈難搞清楚哪一個較好. 反正現在的想法都是, "可以順暢運作不就很好了嗎?"

不標準/自訂義套件到底時甚麼時候出現的呢?
其實, 在出現所謂標準套件之前就只有痛苦的自訂義套件啊
標準的出現是善於歸納的天才們想出來的格式
那麼, 這些天才的水平愈高的話
電腦軟件的開發和使用將愈有效率

可惜, 我還沒見到一個通行的GUI 套件....
只有十級好用的套件, MVC 的做法才能更加的發揮, 不然M是自己來, V 是自己來, C 也要思考怎麼用, 用哪個
比起以前直接寫的做法有好多少

一個通行而進展的套件要多少年才可以變成標準, 今天, 昨天, 明天所需要的金錢又要幾多,
一旦開發套件的機構/人員不接手下去那你的系統就注定有一日會outdated
那麼, 無論它有多好用, 商業公司會敢用嗎?
我認為, 作為公共設施, 政府其實可以考慮把一些有潛力的套件收歸國有, 維持, 開發
反正這樣的物件本來大家都會用, 只是使用者是間接的用而已

這樣一定能令該地區的高階編程進步神速...
發表時間:2009年12月14日 | 評論 (0) | 全文

編程的原則



所發佈的主要是電腦程式,下面是我對編程的一些話:
我不是完美主義者,但對編程總有一些原則...

-用盡量少行數的”寫法”去寫
我看到在同一份工作上,不少人都因為邏輯不夠敏捷只花了很多行數在分隔區塊,處理變數格式的工作上...

-只用”必要”設立的變數
我看到在同一份工作上,不少人都因為邏輯不夠清淅,為每個區塊寫了不同的記憶體位置但卻存有同樣或只有微少差異的變數...

-只用內部資料調用
這個一方面是我比較懶去動手載入,另一方面就是為了更快的速度,雖然功能擴張比較麻煩,但我一直超求的是完美的速度。
既然多一個text 我都不會去考慮,更何況是這個呢...

-只用靜態載入的基本視窗控件
非標準控件實在對軟件的獨立性、記憶體佔用和大小做成太大的負面影響,真的有需要用到的話,我是會自己在程式內部重新寫一個的

-只用8bit 的文字
這個可以令字串調用時減少50%的記憶體佔用


看了上面的五點,有編程經驗的會覺得:自找麻煩
但是,在我每一件的作品中,我都會覺得它是一件藝術品,
在邏輯上完美:一件不會在任何情況下出錯的藝術品
在結構上完美:在同一個功能上,不會有任何其他人甚至本人出產的替代品,因為它是一件佔用最少空間、佔最少記憶體的藝術品
在介面上完美:不會有不實的地方出現,因為它是一件在其功能上佔用最少的桌面空間的藝術品

有一個很重要的結論,真正有需要的話,我真的想不到有任何原因不去用我自己的軟件
發表時間:2009年8月10日 | 評論 (0) | 全文

最優秀音頻播放器重新評選(本物評論)


- Foobar2000 - http://www.foobar2000.org/
- Winamp - http://www.winamp.com/
- AIMP - http://www.aimp.ru/
- XMPlay - http://www.un4seen.com/
- musikCube - http://www.musikcube.com/
- Spider Player - http://spider-player.com/
- TTPlayer - http://www.ttplayer.com/
- CoolPlayer - http://coolplayer.sourceforge.net/
- 1by1 - http://mpesch3.de1.cc/1by1.html
- Billy - http://www.sheepfriends.com/?page=billy
- Evil Player - http://www.hakeem.gigahost.dk/index.php
- VUPlayer - http://www.vuplayer.com/vuplayer.php
- Soprano - http://kimero.com.ar/pro/soprano.html
- Xion - http://xion.r2.com.au/
- QuickPlayer - http://www.ctuser.net/details.php?software...ons/quickplayer
- RainbowPlayer - http://www.nanocodesoft.com/rainbowplayer.htm
- ALSong - http://www.altools.com/ALTools/ALSong.aspx
- Pulse MP - http://www.orcave.com/pulse/
- wxMusik - http://musik.berlios.de/

把它們全部都試完了! 得出的結果和以前有沒有分別呢?

評一個播放器好不好, 很多號稱專業的評論都是從音質著手,
常見的是說那個一播放器播出來清楚, 哪一個矇, 哪一個有細節, 哪一個有動態, 哪一個清脆, 哪一個和暖等等
然後會拿出一些音樂CD 來比較一下分別

作為研究音訊多年的人, 我想我也應該寫一篇
事實上一個播放器也只是用來執行API 的更高階程式, 要分別音質事實上只能從其Audio Library 上分別
比如說在Jackbin 大說的最差mp3 播放"KMPlayer", 的確預設的很差, 但如果裝上in_mpg123.dll 之後就會和其他用上mpg123 的播放器有同等質量, 因為播放器是是"指令傳送器", 它並不參與混放

現在流行的Audio Library 有下面幾個
mpg123 mpeg 解碼器, 速度快, 公認數法質量最好的開源library
BASS mp3/ogg 解碼器, 體積少, 商用收費(不開源), 成像評價很好
GStreamer(MAD) 速度慢, 質量高, 有評價說比mpg123 還好一點
Tuniac 新開發的套件(開源), 全32-bit 浮點算法, 成像完整
mpglib 品質和mpg123 一樣
Fraunhofer IIS 格式標準, 但速度比MAD 還要慢

基本上用上上面所提及的library 來開發的media player 品質都會不錯
當然也有比較一般的解碼, 但差得都不遠

來到這裡, 上面的播放器都很好

第二影響品質的地方在於Equalizer, 一把eq 打開, 碼率不足的mp3 馬上會嚴重失真
調用library 就連中小學生都會(當然也不是每一個), EQ 的處理就是考驗編寫員功力的第一重關卡
一個好的Player, EQ 的bands 要夠多, 只有Bands 夠, 調較的時候才會平滑而不會在即使碼率足的時候也會出現晶體化的情形
EQ 的編寫頗為費心的, 從Realplayer 中免費版3bands EQ, 收費版10bands EQ 中可以看出, 但事實上, 一個播放器要用到EQ 的話, 差不多10bands 是合理的

來到這裡, 大部分都很好, 除了其中幾個沒有配備EQ 的之外

EQ 的原理是把信號做一次Fourier Transform 之後將所選的spectrum 加減後再Anti-Transform, 實時播放
可以知道, 把一band 的水平個別提高是會出現Spectrum quantization, 和Digital Signal 的quantization 有所不同, 因此很多高質素的軟件都會做出linear 甚至2/3 次多項式的平滑

到這裡Coolplayer 以下的都站不住腳了

做完EQ 之後, 基本上一個可用的播放器就告成, 但更有要求的會追求Interpolation 的算法
所有數碼音樂(包括CD) 都是Sampling of analog signals(類比取樣)
既然是取樣就不能是無限取樣, 今天大部分的取樣都是每秒44100次, 在mp3 壓縮後自然實用數目也會不足
那麼取樣之間的填補也是player 的工作了, 因為分別不明顯, 多player 會使用ramp 型(即是不作出改變), 原因就是: 能力不夠, 甚至有很多編寫的人不知道要處理interpolation, 任由晶體化出現
因此, interploation 是考驗大師的課題了

同一時間dithering 和ramping 也是處理晶體化的方法, 但由於所用的的算法非常的自由,
而得出結果也差不遠, 所以我也不太願意去冒險評價大師們了

到這裡, 除了Winamp, foobar, ALSong 和 XMPlay 之後都沒有了

就今日, 多就是利用到liner, Hermite, 也有專家會用到高位元sinc 來作出修補
http://blog.chinson.idv.tw/2006/07/linear-interpolation-sinc.html
http://kevincg.wordpress.com/2006/02/21/hermite%E7%9A%84%E6%9B%B2%E7%B7%9A%E9%81%9E%E8%A3%9C%E6%BC%94%E7%AE%97%E6%B3%95hermite-curve-interpolation/
其中Sinc 的無限函數電腦計起來最為複雜, 所以用起來要有效率, 播放器編寫員還要學習cpu 的一點引用(如MMX, 3DNow!)

走到這一步的, 看來只有Foobar 和XMPlay
那麼那講一下它們的來歷吧,
Foobar2k 受眾廣, 我提供一下連結就好: http://zh.wikipedia.org/wiki/Foobar2000
XMPlay: 由開發BASS Library 的公司Un4seen 開發的播放器, 外觀簡而, 支持換Skin 但介面操作不友好, 但功能比想像中齊全:- Auto AMP - DSP - Interpolation resampling(二級) / pan resampling
- 全sf2 支援(GM/GS/XG) - ASIO/DirectSound, 請到Un4seen.com 下載

作為一個最好的播放器還要配合很多plugins, Foobar2k 的plug-ins 的確多很令人咋舌, 支援得到的格式可比以前winamp2, 但其中一個還算很有人氣的格式卻被XMPlay 比下去了 - MIDI.

在上面支持midi 的播放器還不少, 但可以用到custom sf2 的就只有Foobar, XMPlay, Spider Player, AIMP2
而Foobar 對sf2 的支持是透過foo_midi 插件的, 但可惜這個插件非常不成熟, 成像差還會掉音

XMPlay 在處理純Midi 輸出的時候還是不及Timidity++, 但比起foo_midi, XMPlay和 Spider Player處理起來就完美多了, 但Spider Player 是based on BASS 的, 那就不用評價了, 透過sinc interpolation + dithering + ramping 來re-render soundfont 輸出是十分之令人感動的一件事
XMPlay 可以把這個工作實時處理實在是很強大, 作為一個免費程式, 這種處理有點及得上一個上千港幣的DAW 了

其實要播得更好更有趣, 我大概打開一個DAW 會更快樂, 寫這麼多就只為了認清一下真相
發表時間:2009年5月14日 | 評論 (0) | 全文

小工具, 大作用


對比起以前用Pearl CGI做網站, 現在真的用系統化多了.
直從開始結合資料庫之後, 造網站真的可以說十分輕鬆

但是始終解決了一個問題就會出現另一些問題

如果依存資料連的話, 搬起來會很沒有彈性, 所以, 又出現了一個叫SQLite 的好傢伙
SQLite 這個文本資料庫以非關係性查詢來說, 用起來比mysql 還要快, 是一個差不多靠至理論數值的連續存取方法.
這樣一來, 以前的文本資料庫可以說是沒有價值了, 而用戶所用到的, 只是一個幾十KB 的library.
改變歷史, 就是這個小東西

還有很多小東西正在做大事
如jQuery, 這個完全針對Web2.0 網站需求出現的js 庫, js ui 庫, 把網頁設計, 帶到一個新的層次, 前者是CSS + XHtml Strict,
一個令html 由版面的所有設計變為區塊的容器, 再由容器變成標點及事件的描述
起了這種翻天覆地的變化, 就是W3C 和這些小傢伙從新訂下的規則
而一個js 庫, 往往就是100K 左右

jQuery 的標語, Write Less Do More 正正就是一直發展的方向, 就在Object 不斷Group 起來再給其他人reuse 的情況下...從html 和javascript 的最低層往上進化的時代, 在今年展開了... 和所有的科技一樣, 就像我看回神人們開發紅白機遊戲帶這麼的不可思議... 說不定在20年之後, 我們這一代的技術也會被稱之為神一樣的根.
發表時間:2009年3月29日 | 評論 (0) | 全文

Rules of Data Normalization


Rules of Data Normalization

1NF2NF3NFBCNF4NF5NFONFDKNF
Eliminate Repeating Groups - Make a separate table for each set of related attributes, and give each table a primary key.
Eliminate Redundant Data - If an attribute depends on only part of a multi-valued key, remove it to a separate table.
Eliminate Columns Not Dependent On Key - If attributes do not contribute to a description of the key, remove them to a separate table.
Boyce-Codd Normal Form - If there are non-trivial dependencies between candidate key attributes, separate them out into distinct tables.
Isolate Independent Multiple Relationships - No table may contain two or more 1:n or n:m relationships that are not directly related.
Isolate Semantically Related Multiple Relationships - There may be practical constrains on information that justify separating logically related many-to-many relationships.
Optimal Normal Form - a model limited to only simple (elemental) facts, as expressed in Object Role Model notation.
Domain-Key Normal Form - a model free from all modification anomalies.

http://www.datamodel.org/NormalizationRules.html

-------------------------------

我覺得呢個網頁真係好正, 如果放係degree 教, 話唔定可以係一科度教一個學期

發表時間:2008年12月2日 | 評論 (0) | 全文