2008年2月27日

電磁波的可怕~

這次用了個聳動的標題,希望反向操作,讓查詢電磁波危害的人能夠了解「事實」。

最近幾年,電磁波的議題變得非常火熱,尤其是在台灣,三不五時就會有新聞告訴你,你附近的電磁波會強到把你腦袋燒了,結果是什麼?
結果是像我老媽這樣的人,每天看著電視、抱著無線電話,手裡拎著手機,卻說不要無線電,不要無線網路。

關於電磁波,從下面這篇文章:
炒新聞的又來了

有完整的解釋。

簡單的說:
目前所有跟電磁波有關的新聞,全部都是由『台灣環保聯盟』炒作出來的。

這個『台灣環保聯盟』專門在搞反核四、反電磁波這些議題,並且從中獲利。

以電磁波來說,他們到處去亂測,然後拿電磁波來做新聞,讓大家對電磁波害怕、畏懼,接著他們就租借、販賣測量電磁波的工具,甚至販賣電磁波危害說的書籍。
如下轉述:
===================================
本會「電磁波測試器」租借辦法

租借須知
自從本會關心「電磁波」議題以來,民眾詢問度非常多與踴躍,故本會特別提供電磁波測試器,以便民眾免費租借使用。

借閱辦法
一、填寫電磁波儀器租借單及租借收據。
二、抵押現金二仟元,租期為時兩天,歸還時以租借收據作為退還押金的依據。
三、工作人員向您說明如何使用電磁波測試器。
四、完成租借手續,帶調查表與須知回家。
五、歸還時煩請填寫調查結果。
六、此儀器無法探測基地台及行動電話,請注意!

租借時間
週一至週五,上午10:00~12:00,下午14:00~17:00

服務地點
台北總會 台北市汀州路三段107號二樓
舊三軍總醫院對面,台電大樓捷運站 02-2364-8587                 
台中友會 主婦聯盟台中辦公室 04-23755234
台南分會 06-3363751
桃園分會 03-3346452

義 賣 品
重要書籍:向電磁波說不-如何避開電磁場污染 義賣價280元
測試機器:電磁波測試器 義賣價2,000元
===================================

最重要的就是「義賣品」的部份,看得出來,應該很好賺。
而除了上述之外,相信主要的財源來自於「捐款」,也就是說,公司不捐款,公司就是超強電磁波發射器,四周圍的鄰居通通會得癌症死亡,然後四周圍宣傳,說隔壁某某陳先生就是因為電磁波死的,反正現在癌症死亡這麼多,挨家挨戶問,一定可以問到,接著串起來四處宣傳,全部都是你們公司的電磁波造成的。
這樣的行為,就是環保流氓。

而關於這個環保流氓的團體,一些其他的blog也有評論,如下:
新聞記者的專業在那裡?
沒見過壞人嗎:拒絕無知,消滅對電磁波的恐懼
大紀元:電磁波應由合格證照單位量測
以上來源由炒新聞的又來了取得

在上面同個blog中提到了,電磁波目前的危害在哪裡?什麼叫做電磁波?解釋的清楚明白,比我之前了解的要明白。

首先,什麼叫做電磁波?
先說我的了解。
電磁波就是能量,我們生活的地球,大部分感受得到的能量,都以電磁波來描述、表現。
各種聲音、亮光都是電磁波的表現形式。

所以,當你到郊外時,聽到鳥的叫聲,或者你抓了一隻鳥來,用電磁波的偵測器來測量,沒錯~它是會有反應的。
科學家,或說工程師很厲害,他們將電磁波分類,從低頻率到高頻率一層層區分開來,然後畫成一張電磁波的表,這就是頻譜表。

電磁波既然是能量,能量對人體有沒有害處或影響?
根據前面提到的blog說到,目前人們對電磁波和人體影響的了解。
「能量大的(電磁波),會破壞身體細胞分子的鍵結(身體細胞的分子和分子間像鏈子一樣鎖緊,才能維持固定的形狀,太強的能量會把鏈子打斷,破壞原有的功能,或者造成細胞增殖DNA異常啟動,就是癌症)」。

這是目前對電磁波影響人體的主要癥結,而目前知道最強的電磁波射線,對人體有害的,就是「伽傌射線」、「X光」,這些射線的能量都很強,因此都有限制人最大的吸收量。
除此之外的其他電磁波射線(能量更小的),目前並沒有任何證據證明對人體有影響。
blog中提到了紫外線,也就是太陽光,曬久了也不過就是皮膚很黑,會晒傷~

所以,不要再相信無謂的謠言了,事實上目前大部分這類的說法,都是沒有根據的。
上次工研院才發新聞稿說,這些環保團體(就是指『台灣環保聯盟』),他們的偵測器單位根本錯了,偵測器測的單位跟發佈(拿來騙錢)的單位根本不一樣,完全是外行在亂搞。

我們應該嚴重的抵制這樣的團體、這樣的行為,讓這樣的寄生蟲消失在台灣這片淨土(好有綠意)。

2008年2月20日

OpenSource規避手法的技巧

最近寫MYVIDEO時有用到MPlayer,如果你有稍微去看過MPlayer frontend的設定,你就會發現裡面有一些奇怪的設定,像SMPlayer的設定中,進階的部份有所謂的「End of file」和「No video」這樣的設定,裡面寫了奇怪的字串。
其實MPlayer並沒有提供任何library供人呼叫使用,它利用fork()來建立process,用execvl來執行mplayer指令,至於下指令的方式,則利用pipe或fifo來連接操作。
這樣的設計的確可以規避掉OpenSource GNU GPL的麻煩,而且同樣可以利用GNU GPL的程式。

例如:
我們想要使用一套GNU GPL的library,它是FTP的,我們可以特別為這個FTP library來寫一個程式,這個程式類似MPlayer,是獨立程式,提供FTP連線操作,我們可以利用pipe、fifo甚至socket的方式來操作它。
如此一來,我們的主程式不會有授權的問題,只需要OpenSource這個操作的小程式即可。

其實同樣的情況也發生在LIRC的Windows版本,我去看了WINLIRC之後發現,WINLIRC本身是GNU GPL的,而且同樣沒有提供呼叫用的library,但它提供了socket的呼叫、控制,透過這樣的方式,所有利用WINLIRC開發的程式,都不會有授權上的問題。

2008年2月17日

ivman 與 HAL

上篇文章中提到,可能需要去寫 HAL 的程式,不過發現 2 個問題:
1. libhal 是 GNU GPL 授權
2. HAL 實在很有難度阿..... = =

不過不用擔心,我找到解決方案了,那就是 ivman。
下面把我目前對 HAL、ivman、d-bus、udev 間的關聯、理解貼上來,原則上都是 google 來的。

==================================
HAL、D-bus、ivman、udev心得:

一直以來我對udev、HAL、D-bus的角色一直不很瞭解,
一直到最近桌機安裝Ubuntu之後,在前陣子要修改預設的影片播放器,
那時候才稍微知道HAL的功用。

在Windows當中,每當我們插入光碟、隨身碟時,系統就會自動開啟檔案總管,
如果是DVD影片,則會自動開啟播放程式,當然了~預設就是Windows Media Player。
正因為這樣的設計,讓M$立於不敗之地,畢竟習慣是很可怕的,
當預設的播放環境習慣之後,要選擇其他的播放環境,那麼就要有十足的說服力來說明新的播放環境比較好。

在Linux上,我一直認為沒有很好的自動判斷機制,雖然Unix一直是device file的機制,這也許是原因之一,
也許Unix一直以來都有許多的歷史包袱,但沒有就是沒有,不方便就是不方便~

Linux並不是不希望改善,所以有automount這樣的機制,現在也是內建措施之一,
但是automount實在是不怎麼樣,它很單純的設計成:
當執行 "cd /media/nfs" 時,自動 mount 這個目錄。
當超過一定時間時,自動 unmount 這個目錄。

這樣的設計顯然不怎麼聰明,但它的確是 Linux/FreeBSD 上常見的設計。

現在 Linux 的 GNOME 很聰明了,它已經能夠做到 Windows 這樣的能力,透過的是甚麼?
透過的是 HAL 的技術。

在 Linux 上,HAL 全名是 Hardware Abstraction Layer,
雖然 Windows 上也有相同的名稱,但就 google 的說法,是不同的東西。

HAL 的設計其實頗複雜,我們可以從
http://people.redhat.com/davidz/hal-spec/hal-spec.html

裡面的圖


看出來。

這張圖相對來說,是比較清楚的,不然找到的經常是UML,那種就不是很容易看懂了..... = =||

從下列網頁中可以找到比較詳細些的關係說明:
http://Linux.chinaitlab.com/driver/40018.html

要實現 Linux 上的 automount,Linux 設計了一套架構,如下:
=================================================
hotplug 是內核的一部分,在設備插入或拔出時,自動進行配置內核狀態。udev 是 hotplug 的一部分,負責維護動態的 /dev 目錄,使 /dev 目錄的內容與當前系統狀態一致。D-BUS 可以在應用程序之間傳送消息,例如可以把「連接上一台打印機」的消息發送給 HAL。HAL 可以集成多種來源的信息,包括內核消息,配置文件等等,然後根據 D-BUS 的消息進行操 作。gamin 是改進的文件狀態監視程序。
例如插入優盤。hotplug 自動加載需要的模塊,udev 創建相應的 /dev/sda1 等等節點,hotplug 向 HAL 發消息,HAL 收到消息後,根據配置文件,它運行 fstab-sync 來修改 fstab,創建 /media 的子目錄作為掛載點。gamin 檢測到 fstab 發生變化之後,通知桌面系統。桌面系統在 「計算機」 項目中建立驅動器圖標。
在拔出優盤時,與上面的過程類似,模塊被卸載,設備文件被刪除,fstab 中相應條目被刪除,/media 目錄下的掛載點也被刪除了。

=================================================

上述這段是直接轉貼的,簡單的說:
1. Linux 2.6 kernel 包含 hotplug,來判斷硬體的插入、移除。

2. Linux OS 透過 udev 來搭配 hotplug,專門維護 /dev 下的 device file,
這也就是我之前在摩托學園發的問題的所在點,它會動態的建立出各種裝置的 device file。

3. Linux OS 透過 D-BUS 來轉發系統訊息,告知 HAL 硬體的插入、拔出動作。

4. HAL 則呼叫相對應的應用程式來執行相對應的操作。


整個 auto mount 或 auto umount 就是上述的流程,實際上 HAL 還是一組 library,
除非應用程式以 HAL 的 library 來開發,否則應用程式通常無法直接收到 HAL 的消息,
簡單的說,HAL 還太低階,雖然他能夠直接操作特定的系統消息(像 DVD影片 插入時),
但彈性不足(設定煩雜,不容易設定、修改),因此通常還需要一個 manager 來進行真正的 HAL 操作。
這在 GNOME 就是 Gnome Volume Manager。

將整個堆疊以文字分層來表示,大致如下:

GNOME Volume Manager
HAL(Hardware Abstraction Layer)
D-Bus
udev

kernel hotplug

上述這些部分,除了 kernel hotplug 之外,全部都是以 daemon 的型式,一直常駐在系統中,
所以每個程式都需要持續的執行。

因為整個架構的複雜,就某方面來說,幾乎獨佔了整個 Linux 的 automount 設計,
每個部分的可以用的程式選擇都很少。

目前的情況是,以 HAL 以上,整個架構相容性最好的是 GNOME,
其他 桌面系統(包括 KDE),似乎都沒有很好的相容性。
icewm 相關的設計更是嚴重缺乏。

所以目前可以知道的是,儘管所有 Linux(Debian、Ubuntu、Fedora) 幾乎都直接使用 udev、d-bus 甚至 HAL,
幾乎每個 Linux 上都可以看到 hald、udev 在執行中,大部分人卻不知道也不敢動這幾個東西,
有點冒險精神的人,會嘗試把它關掉,結果可能會從 try & error 中發現,這會導致系統完全無法開機..... :p
偏偏這整套東西,沒有 GNOME 時,通常沒有 Volume Manager,
然後就是大部分 Linux User 覺得它一直在跑也不知道在幹嘛,扒著資源不放。
另一部分來說,非 GNOME 的 桌面系統,要使用 HAL,經常不知道怎麼使用,
這造成了有 Linux 發行套件,使用 KDE 作為 桌面系統,卻使用 GNOME Volume Manager 這種不協調的情況。

幸好我們還有 ivman,ivman 全名 Ikke's Volume Manager
它的身份基本上等於 GNOME Volume Manager,它可以接收各種 HAL 發出的訊息,
最棒的是,ivman 不是 桌面系統 的一部份,也不是 GUI程式,
它的設定都是以 xml設定檔 方式定義,執行的程式完全由我們自己定義,
這表示它應該有不錯的彈性,儘管看起來,
它的相容性似乎不很好,而且當選擇太多時,我們反而會不知道該怎麼選擇。

ivman 要安裝,我覺得 man ivman 是最好的主意,網路上找的資料,幾乎沒辦法協助我排除安裝的問題,
後來看了 man ivman 之後,問題就解決了~

1. 在 Debian 上,ivman 直接是套件,安裝即可

2. ivman 要正常動作,要確定 udev、d-bus、hald 這幾個 daemon 都正常運作中,
這部分我相信只要沒漏裝,都是 ok 的
要測試,在 Debian 上我認為執行
/etc/init.d/dbus restart

似乎不錯,當執行 dbus(也就是 D-bus daemon) 的重新起動時,它會一併重新起動 hald(HAL Daemon)、ivman,
整個內容如下:
media [/root] -root- /etc/init.d/dbus restart
Stopping Hardware abstraction layer: hald.
Stopping Avahi mDNS/DNS-SD Daemon: avahi-daemon.
Stopping ivman: ivman.
Stopping System Tools Backends: system-tools-backends.
Stopping system message bus: dbus.
Starting system message bus: dbus.
Starting System Tools Backends: system-tools-backends.
Starting ivman: manager.c:1387 (do_startup_configure) Directory /etc/ivman/ will be used for configuration files.
ivman.
Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon.
Starting Hardware abstraction layer: hald.


udev 的部分,我相信如果有問題,可能連開機都會有問題的,除非你的 Linux 不是使用 udev。

3. 執行 ivman
這部分需要『特別注意』,我之前就是這地方沒弄好,一直一直沒弄成功。
在 man ivman 中有下面這段話:
For automount purposes, Ivman should be run once from a system-wide init script and once per user session (e.g., create a link to /usr/bin/ivman in ~/.kde/Autostart or put an entry for /usr/bin/ivman in gnome-session-manager).

這句話是關鍵,它說,如果你要正常使用 ivman,你必須要執行『2 次』ivman,一次執行在 OS 開機時,
以 Debian 來說,就是
/etc/init.d/ivman

指令執行的。

另一次則要在使用者進入 桌面系統 時執行。

以我來說,我把它加入
~/.xsession

中,類似如下:
.....
icewm-session-lite &
/usr/bin/ivman &
.....



至於其他部分,就是 lirc、mythfrontend、scim,所以我就沒列出來了。

而從前面說明中,它則建議加入到 KDE 的 Autorun 或 GNOME 的 session-manager,這都是起動 X-win 時自動執行的方式,
我加入到 .xsession,實在是因為我基本上是沒用 桌面系統 的,硬要說,也就是 icewm-lite,
主要是因為我整個系統只執行 mythtv,加了大型的 桌面系統 沒有意義。

4. 設定 ivman
ivman 的設定和上面一樣,也是『2 份』,一份放 /etc/ivman/,另一份則是 ~/.ivman/ 下。
原則上,/etc/ivman/ 下的設定檔不需要動,所有使用者都只要設定 ~/.ivman/ 下的設定檔即可,
這點讓 ivman 可以根據不同的使用者,定義不同的 automount 設定,相當不錯。

當使用者執行過 ivman 後,~/.ivman/ 下的設定檔就會自動產生,基本上和系統的相同,
都是 4 個檔案,分別是:
IvmConfigActions.xml
IvmConfigConditions.xml
IvmConfigBase.xml
IvmConfigProperties.xml


其中比較重要的是『IvmConfigActions.xml',這檔案負責所有訊息的動作,
目前的進度是,我將 IvmConfigActions.xml 中的 autoplay video DVD 部分註解去除,如下:
.....
<!-- autoplay video DVDs in Xine (change PLAYER and PLAYEROPT to use a different media player -->
<ivm:Match name="hal.volume.disc.is_videodvd" value="true">
<ivm:Option name="exec" value="PLAYER='xine'; PLAYEROPT='-f dvd://'; pumount '$hal.volume.mount_point$' && ${PLAYER} ${PLAYEROPT}$hal.block.device$" />
</ivm:Match>
.....


在 DVD影片光碟 插入時,已經能夠正常使用 xine 播放。
目前正在設定當 檔案光碟 插入時的動作,目前預設是只會 automount。

附帶一點:
在設定中可以注意到,『volume.disc.is_videodvd'這個參數,這個參數是 HAL 的參數,
也就是說 ivman 會監視 HAL(或說 HAL 會發出通知),當參數改變時,ivman 就會有相對應的動作。
關鍵點,要如何知道 HAL 的參數呢?
可以執行:
> lshal
==================================

2008年2月16日

MYVIDEO beta 2008-02-16

這算是第一個beta版,儘管還被我發現了些bug.....
不過算是一個能動的版本,穩定性基本上是還有些許問題吧~
不過在我家的環境還算穩定~

這版本跟昨天提到的差不多,已經加入了檔名跑馬燈效果,這部分解決的比我預期快很多;然後關於遙控器部分,目前已經滿順利的,加入了些timer去計時,解決了遙控速度太快,播放影片退出時又很容易結束程式的問題。

整個展示這次以文字解說的方式(沒麥克風... :( ),搭配操作進行展示。
影片連結如下:
MYVIDEO展示

因為時間滿久的(大部分都在打字),所以檔案也比較大,因此放在學校.....

至於目前的執行檔和設定檔、圖檔,則打包好了,連結如下:
MYVIDEO 2008-02-16 beta

執行環境需求:
1. 『一定要是Linux』
2. 要安裝mplayer
3. lirc設定有開時,要安裝lirc
4. libxml、libgnomecanvas-2.0、liblircclient0...我只想到這些,其他的應該灌系統或是安裝這幾個套件後就會有了吧...

目前設定並沒有額外的設定程式,需要手動設定xml的檔案。

比較特別的如下:
在執行時有個參數可以使用
./MYVIDEO -main /home/ycfu/MYVIDEO/configs/MAIN.xml

可以直接指定 MAIN.xml 的設定檔路徑、檔名,因為程式路徑在 MAIN.xml 中有設定了,其他幾個設定檔可以透過 MAIN.xml 找到,但 MAIN.xml 不行,因此這個參數可以指定這個檔案的完整路徑。

至於設定檔的檔名(FILETYPE.xml、GUI.xml)和路徑(configs/ ),抱歉,這部分目前我是寫死的~

解析度部分,因為客廳電腦是CRT,只有設到 800x600,圖片都只畫到800x600,所以顯示1024x768時可能會發現背景有問題。
不過沒關係,只要圖片改成1024x768,幾個X、Y、寬、高設定一下,我相信很簡單就能變化成1024x768,甚至要自己另外設計擺放位置,也是類似的方式改改即可。
至於目前的佈景,是我用GImp畫的,感覺還滿有style的...哈~
選單部分要注意的是,因為目前我對『透明』還不了解怎麼搞,所以沒辦法支援透明,因此,目前光棒限制要是方塊,沒辦法用成橢圓,並不是不行,而是周圍會變成白色,這部分目前我還不知道怎麼解決。

至於選單設計,下次再找個獨立篇幅來說一下,如果是需要滾動的選單,目前認為這是不錯的方法。

目前執行過的環境,桌機部分:
Ubuntu 7.1.0

MediaCenter部分:
Debian testing

這個程式所依賴的所有library如下列出:
ycfu [/home/ycfu/MYVIDEO] -ycfu- ldd MYVIDEO
linux-gate.so.1 => (0xffffe000)
libgnomecanvas-2.so.0 => /usr/lib/libgnomecanvas-2.so.0 (0xb7f3e000)
libart_lgpl_2.so.2 => /usr/lib/libart_lgpl_2.so.2 (0xb7f28000)
libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0xb7ba2000)
libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0xb7b1b000)
libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0xb7b00000)
libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0xb7ae8000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7ac3000)
libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0xb7aba000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb7a8e000)
libXext.so.6 => /usr/lib/libXext.so.6 (0xb7a80000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb7a78000)
libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0xb7a75000)
libXi.so.6 => /usr/lib/libXi.so.6 (0xb7a6d000)
libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xb7a67000)
libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0xb7a5d000)
libXcomposite.so.1 => /usr/lib/libXcomposite.so.1 (0xb7a5a000)
libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0xb7a57000)
libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0xb7a1a000)
libcairo.so.2 => /usr/lib/libcairo.so.2 (0xb79a3000)
libX11.so.6 => /usr/lib/libX11.so.6 (0xb78b2000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0xb78ac000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb7871000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb786d000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7869000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb77ac000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0xb768e000)
liblirc_client.so.0 => /usr/lib/liblirc_client.so.0 (0xb7687000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb753d000)
libgailutil.so.18 => /usr/lib/libgailutil.so.18 (0xb7535000)
libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0xb7507000)
/lib/ld-linux.so.2 (0xb7f84000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb7497000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7481000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb7461000)
libXau.so.6 => /usr/lib/libXau.so.6 (0xb745e000)
libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb743b000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb7436000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb741d000)

2008年2月15日

寒天、洋菜~減肥聖品

話說,因為我是宅男,整天在家不出門應該是很正常的。 :p
話說,因為我這幾年,大概有5,6年了,沒有忌口,什麼都吃,因此變比較胖也是很正常的。
話說,因為我長年生活在網路之中,沒什麼時間概念,因此會有點熬夜,生理時鐘錯亂也應該不意外。

最近看了新聞,發現這樣生活是很可怕的,會早死~會得糖尿病~

可是又發現,當看paper或找paper時,壓力比較大,就容易想吃.....怎麼辦?

所以就看了傳說中的寒天和洋菜。
同樣的,沒圖沒真相,話也不是我說的,連結如下:
"寒天"不就是洋菜嗎?怎麼那麼貴呀?

最近電視廣告實在是打的很兇,一直寒天寒天的,好像越說天氣越冷..... = =

洋菜這個名字,是我在學校時,一個同學說了我才知道的,當時我買杯珍奶,要它加寒天,就是什麼寒天奶茶之類的。
我同學看到了,他說了一句:「這不是洋菜嗎?」

我就愣住了~

於是回來之後,我去逛超市,發現洋菜這樣的東西,就買了一小包,印象中沒多少錢,不知道是10元還是20元。
洋菜這東西真是好用哩~它基本上就是果凍劑,任何東西加上洋菜之後,都可以變成像果凍那樣,因此,果凍、鮮奶凍、布丁,通通都是用它做的,這東西又便宜,10元、20元就有了~
最神奇的是,洋菜基本上幾乎沒有熱量,看討論中提到,洋菜因為沒什麼熱量,營養師很喜歡拿他來做文章,用它來調節飲食相當方便。
不過文中也提到,它基本上沒熱量,所以不適合當作主食,這點.....在現在這環境和時代,大概不大適用,現在情況是,隨便主食一吃,就充滿了熱量和能量..... = =||
不過有一點它有提到,原則上一天要吸收1000卡的熱量,低於1000卡是不對的~(我是懷疑它單位可能錯了,1000大卡吧~我看7-11的豆漿,就200多大卡哩,生菜沙拉也是180多大卡)
回文中也提到,除了洋菜之外,蒟蒻粉愛玉粉 也有同樣的效果,都可以嘗試... :D

洋菜除了沒熱量又能增加飽足感(狂吃洋菜條 = 什麼都沒吃,但是會飽)之外,它「100公克的洋菜就含有74克以上的膳食纖維」,「這些能溶於水的食物纖維,在腸中會吸收膽固醇和膽汁酸」「能降低膽固醇」,另外「由於含有水會膨脹,能延遲食物從胃到小腸的時間,具有抑止血糖值上升的作用」,看起來相當優唷~ :p

不過有點要注意,文中有人提到,現在因為寒天太紅了,到處都加寒天,雖然寒天本身沒熱量,但是往往加的東西熱量很高,像是「糖」,所以在吃、喝寒天食品時,要注意它的「額外配件」,否則越吃越胖還說寒天沒效果,我相信這是大有人在的。

MYVIDEO嘗鮮

找paper、看paper,有點煩,上來發一下blog,順便提下過年幹得好事~
先說說過年幹得好事吧..... :p

不知道blog有沒有提過(忘了...好像沒有...),我去年底的時候開始打算學C,因為最近這兩年發現C的用途實在很廣泛,資源也非常豐富,和我算是會的語言-Java相比,它的優點實在很多,像是:
1. C的資源豐富,函數庫超級多
不可否認,C的資源實在太豐富了,幾乎是要什麼有什麼,要瀏覽器?Mozilla隨你用。要播放器?mplayer、xine隨你用。要XML?libxml隨你用。要MSN?libmsn隨你用。要GUI?GNOME、KDE隨你用。
可以說是要什麼有什麼,不過以上提得都是Linux,Windows則要看M$老大的臉色,基本上也是很齊全的拉~
2. 跨平台性還ok
C的跨平台性沒有Java強大是不可否認的事實,這如之前提過的,Java在跨平台這點上,目前應該是沒有敵手的,至於相容c#的MONO,光要相容c#就不容易了,現在看起來相容性不好了,因為它GUI之類的都套用GNOME之類的,單就mono在Windows上來說還ok,但要完全相容c#,或者吸引c#使用群,可能差異性還是頗大。
C的跨平台性主要在library,一些像mingw或是wxGTK之類的library,要讓C的程式能跨平台,還是可以的,只是在程式設計之初,就必須要構想好,確定要跨平台,否則要另外改用這些library,改寫depend on OS的code大概會哭吧。
3. 各層級的code都能開發
C可以說是程式語言之母了,目前大部分的OS kernel code,都是C,當然拉,我不否認也有用其他語言寫的OS,像C++有,Java有,據說M$有開發過c#的,組合語言有... :p
但主流還是C.....

其他目前沒想到,想到了再用另外篇幅說吧~ :p

因此我從去年開始考慮學C,一方面是上述原因還有些沒想到的原因想學,另一方面是,之後論文要實做,可能也是用C,打算先修一下~

先修的對象,就想到Linux的Media Center播放軟體,話說MythTV上有個媒體播放介面,稱為MythVideo,我只能說.....你真它ooxx的不好用~
首先~MythVideo是讀取資料庫的,因此如果檔案更新了,資料庫沒更新,那檔案就看不到,不能播放。
再來~因為同上原因,如果是合集式的光碟片,例如整部日劇檔案的DVD,整部卡通檔案的DVD,那種把一堆.avi或.rmvb燒成一張的合集,它就無法播放,需要更新資料庫才可以~
接著~不能直接播放DVD影片,如果今天是DVD影像光碟,也就是百事達租的那種片子,MyVideo不能看,要另外用一套MyDVD來看~可是,明明都是放影片,誰管得了這麼多?
又接著~它沒有提供連續播放的功能,沒辦法一放之後,就放到結束,雖然我現在用script作到了,但是只能治標,不能治本,還是有限制。
最後~它沒有預覽框,不能預覽,每次點到影片,它下面都會提供些資訊,像是影片圖片、影片介紹之類的,問題是,我哪這麼閒去幫每部影片製作影片介紹,還幫每部影片找封面,反正看完就刪掉了,找這些還不如找個好點的字幕檔。結果它提供了些莫名其妙的空間,卻沒有提供預覽框,我沒辦法預覽影片,這真的是太不貼切了。

因此,我就很想要作個播放介面來取代它,所以就打算拿這個播放介面程式來試刀,打算用C+GTK來寫,一來練習C,練習GTK,二來提高自己的自信心,讓自己相信,我論文搞這麼久沒個屁不是因為程度不好... :( 三來的確是有用處的,四來,想出來了才不會讓自己、讓別人覺得,我整天blog寫一堆,說程式、說想法說一堆,結果都是屁,什麼都寫不出來。

MYVIDEO就是成果,基本上寫了一段時間了,看之前整理的C的目錄,好像是11月左右(目錄的建立時間是11/20),加上之前試車沒想過整理的時間,大概在10~11月左右吧~
中間有遇到些問題,因此停了段時間,不然就是斷斷續續的在寫,畢竟大部分時間都還是找paper、看paper,多半是週末或煩、沒什麼事的時候。
最近過年,正好就卯起來寫,結果發現過年期間進度超快,不但之前問題解了,還加了很多新東西上去。
我瞭解,大家都說沒圖沒真相,我在前幾天有錄製了一段,雖然跟現在的部份還有些許差異,但是已經很貼近目前的版本了(修了些bug,加了2個label,正在寫跑馬燈式的檔案顯示)。
由於影片是莫名其妙的ogg,所以沒法上傳影片直接播放,還請包涵~
影片連結

這個程式目前的特色有幾個:
1.它的選單設計,並不是使用GTK的元件,而是另外以繪圖的方式設計,解釋起來有點複雜... = =||
而這樣設計的原因,是為了能夠提供選單捲動而做的,因此MYVIDEO的選單,是可以捲動或跑馬燈效果的,之所以沒有,是因為捲動效果的移動不好計算,目前的測試發現,它會突然發瘋,而且檔案很多時,捲動速度會莫名其妙變得很慢(檔案列表的檔案越多,速度越慢)(很詭異,因為整個選單不是很多個檔案或很多個圖片構成的,是整片字串aaa\nbbb\n這樣產生的一張圖片,跳動式沒問題,理論上捲動也不會有問題,但...就是有問題...)。

2.它的所有設定,全部是使用xml的設定檔進行設定的,因此改設定的時候,完全不需要修改程式,就可以變更所有設定

3.它的整個畫面,完全是佈景式的,背景、選單、選單位置(x,y)、選單大小(長、寬)、光棒、光棒位置、光棒大小、文字、文字大小,全部都可以設定,套第2點,這些設定全部都以xml設定在設定檔中,可以很輕易的透過畫圖、改設定來變化成不同的樣式,不論是擺放位置、大小都是,包括預覽視窗的位置、大小也是。

4.預覽視窗的影像套用mplayer,對影片支援度很高,從前面的影片連結中有一段能注意到,它能夠直接預覽.iso的光碟檔。

5.滑鼠游標消失,這可能不太容易發現到,影片一開始游標亂跑,當程式執行後,游標還是在亂跑,但只要移動到MYVIDEO的窗體,游標就不見了~沒錯,我有寫讓游標消失的程式,讓它消失~這不是我獨創的,是google教的,它的消失很單純,就是把游標圖片改成沒有東西... :p

6.支援遙控器,開玩笑,為了取代MythVideo,沒遙控器支援怎麼可以..... :p
不過,為了支援lirc,X的,我還去看Linux的IO Channel怎麼寫,沒辦法,GTK本身需要main loop來運作,白話的說,GTK的所有程式,主程式都是一個GTK迴圈,而且不允許別人也搞迴圈,就某方面而言,只准自己搞小圈圈,不准別人搞小圈圈,實在是很惡劣的事情..... :p
翩翩lirc的程式也是用迴圈寫的,它透過迴圈,不斷的在等使用者按下遙控器按鍵。
因此要讓它們和平相處,就2個方法:
a.multi-process或multi-thread,但網路上別人不建議,說這會破壞GTK迴圈(不了... = =)。
b.透過IO Channel,把lirc掛到系統的IO輪詢,讓系統沒事的時候去問問它(一般建議的作法,Linux上網路也是這樣搞的唷... :p)

7.副檔名偵測,不用說,誰會希望播放軟體沒事還顯示.srt、.dll、readme...等莫名其妙的檔案,因此MYVIDEO我有寫副檔名判斷,它可以自動篩選副檔名,副檔名判斷的準則是什麼?
同樣,由一個叫FILETYPE.xml的檔案設定,可以自行定義副檔名。

8.指定播放程式,這點和上面有關聯,MYVIDEO中,FILETYPE中所有的副檔名,都可以關聯到特定的播放程式,注意唷~是特定的播放「程式」,意思是說,你可以自行寫個script讓它呼叫,它就會直接執行script,並且把影片檔代入到script當中,代入的方式我很貼心的做了調整,只需要在整個指令串中加入「%s」,%s就會被代入成影片檔的完整路徑檔名,因此,你可以在整個command的任何地方操作影片檔,不會受限於一定要放在執行檔最後面。
這部份實際上滿簡單的,除了%s的字串取代很麻煩之外,其他部份就只是簡單的system(command);所以,很容易自由發揮... :p

9.版權,這不知道算不算特色... :p
整個程式我有稍微去注意,它所使用到的library,大部分是GLibc、GNOME Library,幾乎所有的程式都是「GNU Lesser General Public License」的授權(也就是GNU LGPL),這授權的規定是,只要提供library的code即可,程式本身不需要提供,因此程式的版權原則上完全是屬於我的,沒有Open Source的困擾。
也許會說,你不是用到mplayer了嗎?mplayer基本上沒有library可以呼叫,目前全部的mplayer frontend,都是另外以指令的方式呼叫mplayer執行的,操作部份則是透過建立一個所謂的pipe和mplayer溝通,送出mplayer的command來操作,因此這部份並不牽涉到授權的問題,GNU GPL中有提到,如果僅僅是「使用」GNU GPL的程式,像是你用gcc去compile程式,或像現在這樣的情況,你的程式並不需要Open。

目前就是上面這些特色了,我預期的功能還有:
1.選單是捲動(或說滾動?)的,不過我爸說,他不喜歡捲動...這部份我考慮不理它了... :p

2.檔名顯示可以類似Winamp那樣,以跑馬燈方式顯示

3.要能夠瀏覽DVD上的影片檔,這部份目前來說,設定路徑到光碟上,搭配Linux上的automount應該就ok了~

4.要能夠自動判斷DVD是影片檔或DVD影片,這部份目前不確定怎麼辦,因為在Linux上,DVD影片並沒有辦法像Windows一樣顯示成檔案和目錄,怎麼樣判斷它是影片,或者怎麼樣能進一步讓它推入DVD影片時自動播放,目前還在查資料。

目前第2點,還在設計中,發現最大的問題在於,我不知道如何計算、判斷整個字串的長度(不是字數,是佔用螢幕的pixel數),因為不知道怎麼計算、判斷,因此沒辦法知道到底跑馬燈要跑多遠,而這裡最大的問題是,每個字型中,字的寬度我現在還不會算,而且遇到abcd和1234,數字、字母的寬度都還有差別,這讓我無所適從,還在找有沒有相關的函數。

而第1點前面提過,在檔案列表很長的時候,會莫名其妙的嚴重lag,如果移動速度太快,會發瘋...下次把幾個bug錄起來一次展示出來... :p

而第3點,我的確有在想什麼時候來搞它,大概時間會是排在先把第2點問題解決吧。

第4點,我的確在前幾天有找Linux的HAL,Linux的HAL專門負責類似Windows上自動播放的動作,像是放入光碟片時的自動播放,插入隨身碟時的自動瀏覽,不過目前問題是,HAL的文件並不多,尤其是libhal,也就是HAL的library如何使用,並沒有找到很多文件和教學,我目前無從寫起。

因為程式還未完成,就像前面提到的,因此目前還沒有放程式的打算,我打算至少把跑馬燈效果和lirc的bug修好了來放(遙控器目前反應太靈敏,我設定quit鍵離開播放程式,同時設定quit鍵離開MYVIDEO,結果就是一播放完,按下按鍵,它連MYVIDEO都離開了... = =|| )

此外,到時候會再錄影一次,把更新的成果一起展示。 :p

最後嘴炮一下,目前寫這個程式到目前來說,感覺得出來成果滿多的,目前感覺上,C語言對指標還有問題,字串處理還有問題,字串指標問題一大堆,這些問題之外,對C已經頗為上手,對這次C+GTK的初體驗自我感覺相當好。
另外問一下,如果這東西要拿來賣~會有人或公司有興趣嗎... :p

2008年2月1日

Running WinCV on Linux

跟我一樣有經歷過大補帖時代的人應該會對一個程式不陌生,那就是傳說中的『CV』,而程式全名叫『CVIEW』。
在那個年代中,CVIEW基本上等於檔案總管,電腦開機進入DOS之後,第一個執行的,就是CV.EXE(CVIEW的執行檔),CVIEW非常方便的地方在於,它速度非常快、檔案非常小,以分割視窗方式呈現,可以直接預覽檔案內容,直接對檔案按ENTER,會立刻開啟CE.EXE這個文字編輯軟體,文字檔時就直接編輯,執行檔或其他binary檔案則會直接以HEX模式顯示,如果點選的是圖檔時,會直接秀圖,可以說是非常的強大。
進入Windows之後,Windows將檔案總管能力提昇,GUI介面+副檔名關聯+圖檔、影片、音樂預覽+IE整合,檔案總管做到這地步,以往的這類程式需求度就變得很低了。
CVIEW的作者其實有個人網站,現在仍舊有零星更新,而且作者之後有開發WinCV,但因為前面提過的,我WinCV用的次數就很少很少了~

幾個月前,差不多是在把桌機轉換到Linux前沒多久,有一天突然想到個問題,當時的情境是,在網路上看到有人把他之前DOS時代寫的DOS程式,用Linux的DOS模擬器執行,我就想,我DOS模擬器沒玩過,不知道能執行甚麼東西,想著想著,就想到了CVIEW~
接著就想,Linux的終端機一直覺得不大方便,缺少了甚麼,原來就是CVIEW阿~

雖然現在已經是Windows的時代了,而大部分的人寧可動滑鼠點選,也不會願意用CVIEW純鍵盤的操作(有一票傢伙會說,打鍵盤key指令才是王道,那才快阿~問題是,打鍵盤key指令的操作方式,沒辦法一邊吃披薩、一般操作電腦...,套句閃電霹靂車中蘭德爾說過的話,「這種只能趴著開的車,不能夠坐著喝紅茶,我才不願意開勒....」,同理可證..... :p)但是Linux不同,Linux主要的操作還是以終端機為主,而在終端機的環境中,CVIEW的價值仍然存在,所以說,如果CVIEW能夠移植到Linux上.....就完美了.... :D
這部分有點可惜,因為作者在網頁中說,CVIEW for DOS不再更新,而且沒有提供Source Code,他程式又是用Win32forth寫的,接近組合語言(難怪檔案小、速度快),我Java夠破了,C也很糟,forth.....完全沒感覺,所以也不敢跟作者要Source Code,就算肯給,給了也沒用..... :p

不過WinCV就不同了,WinCV是該作者寫的視窗版CVIEW,雖然在視窗介面下已經有檔案總管(Linux下是Nautilus)了,但有WINE,玩玩還是可以的..... :p


看看,完全繼承了CVIEW的style,操作一樣流暢,而且一樣可以直接顯示文字檔,對於UTF-8也可以編輯,圖檔可以直接點選後秀出。
因為之前用Windows時就有玩過了,感覺並不會很懷念,但是在Linux下操作,感受倒是很特別,下面再貼一張,和其他Linux程式的合影。

VirtualBox和VMWare效能比較

雖然一直以來我都滿喜歡VMWare的,但是最近VirtualBox用得比較多,雖然VirtualBox感覺沒有VMWare便利,但是兩者的感覺已經比較接近了。
VirtualBox自從Open Source之後便大受歡迎,大家都說它效能比較好,是不是真的比較好呢?
我個人來說,我一直是不這麼認為的,但是到底誰好,總是需要比較看看才確實~

雖然我沒有親自去比較過,不過有熱心的人有做了比較,並且貼在blog上,我們就來看看吧~
VirtualBox 與 VMware server 的虛擬機器效能比較

從作者的測試結果來看,VirtualBox的確有比較好的效能,至此我們可以知道,大部分人說VirtualBox效能比較好,是正確的,也是合情理的,因此在選擇VM軟體時,VirtualBox看起來是比較不錯的選擇。