2009年8月28日 星期五

這就是淺景深(錢井深)


Canon 500D + 50mm f1.8, 1.8大光圈 的拍攝效果
圖中為老婆的妹妹去日本時購買給我們的平安符, 作為顯示淺景深的效果
光圈快門沒注意, 所以重新調整過色階

用了好一陣子的消費型相機, 一直很想擁有台數位單眼(DSLR)
現今的DC儘管輕巧, 儘管成像也不差, 儘管倍率也很可觀
然而一般DC在成像品質與雜訊處理上與DSLR還是有差距
而更重要的是景深的控制, 操控性上是很難望其項背的
淺景深在一般DC並非不可能, 而是在一些條件下才可以成立
對於我這個不專業的人而言, 都可以感受到DSLR的等級差

今日為了迎接即將到來的家庭新成員, 跑去物色適合的DSLR
最初是想看看有無 Nikon D60庫存品
D5000的旋轉螢幕不敢恭維,
D90的價格實在是讓人下不了手
D3000的CCD成像品質是敬謝不敏

原本一家 D90 + 18-55m kit 開價近 33K, 發現比X發賣的便宜 4K還蠻心動的
後來到另一櫃才發現這個價格還貴了 2K
就在轉向Canon 450D的同時, 被某位店員說服決定夠入Canon 500D
除了整組kit 外還加買了顆 50mm f1.8 鏡頭,
而買了些週邊, 總價格只比D90機身高些
一句關於攝影的俏皮話是"淺景深, 錢井深", 說來也是其來有自

剛拿到Canon 500D的第一印象是"對焦真快"
而f1.8 的大光圈拍攝人像很不錯, 對於練習攝影上也相當方便.
希望這台DSLR能讓我的攝影技術好一點....

2009年8月25日 星期二

Linux 上使用網路ATM



其實, 這是舊聞了, 只是我今天第一次使用
已往想在Linux上使用網路ATM是求之而不可得,
儘管讀卡機在Linux已經都有driver,
然而國內的銀行多以Windows特有的ActiveX建構網路ATM服務

先前就已經在 ubuntu-tw 上看到
玉山銀行(E.SUN Bank)就感心地提供了Linux網路ATM支援
然而一直都沒有使用上的需求, 所以也沒特別去嘗試

今日按照這篇文章, 就順利使用手邊的讀卡機完成匯款
再次感謝玉山銀行提供Linux 網路ATM服務

2009年8月10日 星期一

Introduction to Linux SD/MMC Driver Stack 簡報上線

近日工作與此有關
因此做了份簡短的簡報
主要只是針對Linux SD/MMC Driver Stack中,
所使用的資料結構作簡短提示
搭配參考其他實作, 應可較快上手實作

Linux Porting 該篇 slides 有缺漏字, 近日會更新版本
PDF 檔也會近日放上

2009年7月20日 星期一

Mesa 7.5 released

著名的open-source OpenGL 實作 - Mesa 釋出了最新的 7.5 版
在此版最引人注目的莫過於新特性 - Gallium3D 架構

此新架構目的在於提供更簡潔與彈性的3D 實作介面
以因應多元化的 3D API 實作 (ex: OpenGL 3.x , OpenGL ES 1.x/2.x)

以下兩圖解引用自 Gallium3D talk from XDS 2007


在已往的Mesa 的實作仰賴著 DRI Driver
由於實作的概念上緊密依附於 OpenGL,
硬體加速上也僅止於 OpenGL 與硬體間的轉換
對於作業系統上也有著高度相依性



新的Gallium3D 架構將DRI Driver 一分為三
原有的 DRI Driver 分為 State tracker, HW Driver, OS Dependencies(Winsys Layer)
藉由抽換此3個模組就能夠簡單地達到
多樣的3D API 實作(OpenGL 1.x/2.x/3.x, OpenGL ES 1.x/2.x, D3D), 簡潔的driver model, 與OS re-targetability
也提昇了系統實作的彈性

目前新架構上已經有 software pipe, i915 driver, Cell driver, ATI R300 與 nouveau (Nvidia) 實作
相信未來會有更廣泛的支援與實作

2009年7月15日 星期三

HiRadioTray & Hinet radio script 20090715

今日發現不能聽Hinet 網路廣播了 (抱歉, 最近工作忙, 需要安靜)
而且看到有人反應並且提供了解法, 我就更新了一下
分析了一下更新 HiRadioTray 和 Script

因為只改reg. rule, 我覺得這樣太沒誠意了
HiRadioTray, Hinet Radio Script 這版就加入了據說坊間沒有的更新功能
有甚麼好意見就留個言, 有時間就來實作

.deb .rpm .xxx package!?
要改的太多, 那就改天吧...:P

2009年7月5日 星期日

雜記

晃眼一個月就過了....
一個半月前還在思索這幾年來的歷程
想在一個月前的今日寫下自己而立之年的一些想法

月中, 也有想要把近日比較有心得的3D相關數理做個簡報,
進而探究ES Shading Language
或是把工作相關的系統建構上的issue在blog上做心得討論

然而在工作比較繁忙以及身體微恙下, 就這樣都一一拖了過去
因此blog 的六月也就成了一段空白, 現在想想還有些愧疚

週末好不容易花了點時間
研究了到手一些時日的Devkit8000,
以隨板附上的linux kernel的針對平台修正的部份
已經把ubuntu弄了上去, 接近了初期的目標
而beagleboard也因老婆工作上的需要, 已離開我好一陣子,
近日也在思索, 想購入Rev.C3

如此也算是小有展獲吧...

2009年6月4日 星期四

Shading Language Prework - 3D Math



OpenGL 是個人在大二時接觸的, 當時也沒有特別深入
大概是瞭解OpenGL提供的座標系統, 會貼圖和使用 Display List 的程度
由於一直停留在 OpenGL 1.2 以前的印象
在剛看到OpenGL (ES) 2.x 時, 個人還深深懷疑是否真的學過OpenGL

在接觸到OpenGL ES 2.0
並且開始瞭解這幾年的GLSL到 ESSL之後
對於 OpenGL SuperBible 中的描述:
"This isn't your father's OpenGL" 不禁莞爾一笑
事隔十多年, 對於CS後進而言, 這真的不是上一輩的OpenGL

延續OpenGL ES 2.0: Hello Triangle!文章
即便有了相關的Emulator, 若非已經在Desktop上熟悉於撰寫OpenGL Shading Language
在撰寫OpenGL ES 2.0程式上應該會感到不得其門而入
這是由於 OpenGL ES 2.0 是精簡自OpenGL 2.0
已經不若 ES 1.x 採用 fixed function的方式

在OpenGL ES 1.x 中採用的 Graphics pipeline 示意圖如下

其中每個部份OpenGL 都有提供對應的 API
像是Transforming部份的 glTranslate, glRotate, glPushMatrix 和 glPopMatrix 等
如此規劃的缺點是, 所產生的效果受限於 OpenGL (ES) 1.x 內所採用對於顏色和光線的演算法
在產生的效果上受限, 對於新的演算法上實作的複雜度高和效率上的低落

然而OpenGL (ES) 1.x 也不是全然沒有好處
相較於駕馭OpenGL (ES) 2.x shading language高門檻
只要對於Coordinate和Camera View 有點瞭解, 知道所需使用的 OpenGL (ES) 1.x API
一般人無需瞭解複雜的數理運算, 就可以寫出不錯的 3D 程式

在OpenGL ES 2.0中 pipeline 如下

其中可以看出原本的 Transformation & Lighting 由 Vertex Shader 處理
在Rasterization 後的Texture, Color, Fog, Alpha都由 Fragment Shader 處理
而shader 的實作就是靠 shading language 針對此兩部份撰寫兩個程式
由於programmable 的緣故 Vertex/Fragment Shader 能提供的能力與彈性超過於上述的項目

而由於上述以shading language處理的部份功能上被取代,
在制定的 API 上相較於 ES 1.1 顯得精簡
而這些彈性與強大的功能所需付出的代價是:
由於shading language 必須直接處理幾何/光學/著色效果.
必須對於 3D 背後的數理運算有相當的認識.



在3D數理上, 其實並沒有一般人懼怕的高深,
只複習一小部份的Linear Algebra與簡單的向量/幾何運算
即可以理解與掌握絕大部分的3D 計算
想好好複習一下可以看看"3D Math Primer for Graphics and Game Development"
(對於 Shading Language 也用不到裡面全部的內容)
可惜的是, 本書運算式上以 left-handed coordinate/row vector 為主
對於OpenGL 採用的 right-handed coordinate/column vector需要稍微對應轉換一下
然而這對於概念與數理的瞭解上並不構成太多問題.

在 ARM 平台上使用 Function Multi-Versioning (FMV) - 以使用 Android NDK 為例

Function Multi-Versioning (FMV) 過往的 CPU 發展歷程中, x86 平台由於因應各種應用需求的提出, 而陸陸續續加入了不同的指令集, 此外也可能因為針對市場做等級區隔, 支援的數量與種類也不等. 在 Linux 平台上這些 CPU 資訊可以透過...