Showing posts with label IT note. Show all posts
Showing posts with label IT note. Show all posts

Friday, May 08, 2009

玉山銀行的網路ATM - 原來我也可以用網路ATM!

網路ATM應該已經出來很久了,不過我一直沒有嘗試過,不清楚是如何操作的,
一個很大的原因是,我手邊並沒有讀卡機,又不想沒事花錢去買一台。

最近因為報稅的關係,想去申請了自然人憑證,但是需要讀卡機,
正當我在網路上看相關資料時,無意中瞄到筆電側面的SC兩個字,
據我以前看說明書,這是Smart Card插座...

Smart Card == 晶片卡 ??

當時在腦中浮現這個疑問,於是趕快上網一查... 真的耶!!
在買了2年多以後,我終於知道我這台筆電可以讀晶片卡,可以用網路ATM!!!(好遲鈍 Orz)

話說雖然有讀卡機,但是現在市面上的銀行網路ATM,都是以IE的ActiveX寫成,
就一個Firefox使用者來說,十分的不便,不過沒關係,玉山銀行很貼心的為Firefox使用者開發了plugin,所以至少在Windows底下的Firefox是可以使用的。
(ps. 現在王山銀行也推出可用於 Linux 版的套件囉! )

其實第一次用網路ATM是在中華電信的MOD上面,非約定帳戶轉帳實在是很方便啊
尤其是在信用卡繳款截止日時,可以想到趕快繳,不怕麻煩或忘記。
想到被中信扣了2次遲繳罰款就覺得很冤...(氣到我剪卡了XD)

這邊是要替玉山銀行廣告一下,因為它有提供 Firefox 支援,
雖然我現在沒有玉山帳戶,但是用它的網路ATM倒是很方便喔~~

Wednesday, October 01, 2008

開放程式碼的視窗開發工具 Eclipse + Qt

.
Note. 學習 QT 程式設計的好地方︰ Qt4 Gossip

玩 Linux 的朋友應該很熟悉 Qt 這個函式庫,它是 KDE 所使用的一個基礎的視窗函式庫,其撰寫語言是 C++。
Eclipse 則是我最近一年才聽到的東西,它是一個開放程式碼的程式開發環境,類似於 Visual C++ 這樣的產品,支援 Java, C/C++ 等語言的開發。不過單純的 Eclipse 並不包含 Qt 視窗函式庫,當然也就沒有開發 Qt 程式的整合式視窗開發介面。不過 Qt 為 Eclipse 提供了一個 plugin ,稱為
"Qt Eclipse Integration for C++" ,透過這個 plugin 的加持,Eclipse 就搖身變成一個 Qt 的整合式視窗開發工具。這個結合是否夠強大我並不是很了解,但絕對是我個人目前看過結合最完整,介面也最友善的免費工具。
不過當然了,Qt 函式庫在授權上有一些限制,對於不想花錢又不想開放程式碼的廠商來說,就不太適合了。(如果願意付錢就是另外一回事了)

因為我在公司是使用 Windows XP ,安裝的測試環境是 win32 ,不過 Qt 跟 Eclipse 都有 Linux 版本,所以建構 Linux 下的開發環境應該也不是問題。

建構這個開發環境一共需要 3 個 package
1. Eclipse IDE for C/C++ Developers - 這是 Eclipse 的主程式
2. Qt for Open Source C++ development on Windows - 這是在 Qt 的主要 package ,包含函式庫及 C++ 編譯工具 (MinGW)
3. Qt Eclipse Integration for C++ - 這就是整合 Qt 跟 Eclipse 的 plugin

安裝順序請依照上述的套件順序,Eclipse 是個單純的解壓縮檔,我是解壓縮到 C:\Qt\Eclipse。
安裝第2個套件時,應該會詢問有關 MinGW 的安裝,而安裝 Qt Eclipse Integration 時,會詢問 Eclipse 及 MinGW 的安裝目錄。
三個套件都順利安裝後,就可以從程式集的 "Start Eclipse for MinGW" 開啟 Eclipse ,開啟的速度有點慢,要耐心等候 XD

Qt 官網有個快速入門的文件 Qt Eclipse Integration Documentation ,我覺得寫的很簡單也很有用,對 VC 有點經驗的,看過就應該知道怎麼建立視窗了(step by step)。


之所以會去找這樣的工具,因為公司最近說要做軟體清查了,我現階段又不是負責寫程式的,不太方便去申請購買一套 VC ,所以就到處找工具了。

Wednesday, July 23, 2008

使用 DCMTK 函式庫 for Visual C++ 2005

這篇文章假設讀者已經透過 DCMTK 的編譯及設定 for Visual C++ 2005 一文編譯好適用於 VC++2005的函式庫。

創建一個新專案後,要如何跟我們已經設定好的 DCMTK 函式庫做連結呢?
1. 將 DCMTK 的 include 目錄設定給新專案
(1) 在方案總管中點選新專案
(2) 從主選單中選擇 "專案" - "屬性"
(3) 從對話盒左側選擇 "組態屬性" - "C/C++"
(4) 在右側的 "其他 Include 目錄" 屬性中,填入 "C:\DCMTK\include"

2. 將 DCMTK 的 lib 目錄設定給新專案
(1) 從屬性對話盒左側選擇 "組態屬性" - "連結器"
(2) 在右側的 "其他程式庫目錄" 屬性中,填入 "C:\DCMTK\lib"

3. 在新專案中指定引用的相關程式庫檔案
(1) 從屬性對話盒左側選擇 "組態屬性" - "連結器" - "輸入"
(2) 在右側的 "其他相依性" 屬性中填入以下字串,注意各程式庫檔的順序必須要正確。
"netapi32.lib wsock32.lib ofstd.lib dcmdata.lib dcmimgle.lib dcmimage.lib ijg8.lib ijg12.lib ijg16.lib dcmjpeg.lib dcmnet.lib dcmdsig.lib dcmsr.lib dcmtls.lib dcmpstat.lib dcmwlm.lib dcmqrdb.lib dcmtkeay.lib dcmtkssl.lib iconv.lib libtiff.lib libpng.lib libxml2.lib zlib.lib"
4. 指定新專案的執行階段程式庫(必須與DCMTK編譯時的設定相同,預設為 /MT /MTd)
(1) 從屬性對話盒左側選擇 "組態屬性" - "一般"
(2) 在右側的 "MFC的使用" 選擇 "使用標準的視窗程式庫"
(3) 從屬性對話盒左側選擇 "組態屬性" - "C/C++" - "程式碼產生"
(4) 在右側的 "執行階段程式庫" 選擇 "多執行緒(/MT)" (for release 組態) 或 "多緒行緒偵錯(/MTd)" (for debug 組態)

透過上述的設定,應該就可以在新專案中使用 DCMTK 了。

Tuesday, July 22, 2008

DCMTK 的編譯及設定 for Visual C++ 2005

DCMTK 是一個開放程式碼的 DICOM Toolkit,提供讀取 DICOM 影像及進行傳輸通訊的函式庫。
我的博士論文中,有關電腦斷層影像的讀取程式,就是使用 DCMTK 這個函式庫。

先前編譯的 DCMTK 版本是 3.5.3 ,但是最近研究室學弟使用這個函式庫在讀取新資料時,頻頻出現問題。問題的可能原因是高榮更新了影像軟體,也許新版本的 DICOM 格式有更新,造成舊的讀取程式不相容。目前最新的 DCMTK 版本是 3.5.4 ,雖然不確定此版本是不是可以使用在新資料上,但總是試試無妨。

DCMTK 的程式碼相當龐大,而且適用於 Window 及 Linux 平台,因此在編讀前必須經過一翻設定。以下主要簡介如何在 Windows 下的 Visual C++ 2005 進行 DCMTK 函式庫的設定及編譯。

要下載的檔案︰
DCMTK 3.5.4 source code and documentation dcmtk-3.5.4.zip
Pre-compiled libraries for Windows 9x/Me/NT/2000/XP dcmtk-3.5.4-win32-i386-support.zip
CMake cmake-2.6.0-win32-x86.zip

1. 解壓縮檔案
(1) 將 dcmtk-3.5.4.zip 解壓縮在 C:\DCMTK\ (會自動新建子目錄 dcmtk-3.5.4)
(2) 將 dcmtk-3.5.4-win32-i386-support.zip 解壓縮在 C:\DCMTK\
(3) 將 cmake-2.6.0-win32-x86.zip 解壓縮在 C:\DCMTK\

2. 使用 CMake 產生 Visual C++ 2005 所需要的檔案
(1) 進入 C:\DCMTK\cmake-2.6.0-win32-x86\bin\ 執行 CMakeSetup.exe
(2) 在 "Where is the source code:" 填入 C:\DCMTK\dcmtk-3.5.4
(3) 在 "Where to build the binary:" 填入 C:\DCMTK\dcmtk-3.5.4
(4) 按一下 "Configure" 按鈕,並在出現的對話盒選 "Visual Studio 8 2005" ,按下 OK
(5) 當中間出現變數時,可以發現 CMake 已經自動搜尋到 libxml, libpng,.. 等的所在目錄,在此可以根據需求開啟要連結的函式庫。要開啟特定的函式庫只要把原本的 OFF 改成 ON 即可。
(6) 將 "Show Advanced Values" 打勾
(7) 找到 "LIBARY_OUTPUT_PATH" ,將其後的變數設成 C:\DCMTK\lib\
(8) 找到 "EXECUTABLE_OUTPUT_PATH" ,將其後的變數設成 C:\DCMTK\bin\
(9) 再按一下 "Configure" 按鈕
(10) 最後按下 "OK" 按鈕結束

3. 使用 Visual C++ 2005 編譯
(1) 進入 C:\DCMTK\dcmtk-3.5.4 目錄,並在 dcmtk.sln 檔案點兩下(系統要裝好 VC++ 2005 喔)
(2) 從主選單中選 "建置" - "批次建置"
(3) 從開啟之對話盒中勾選 "ALL_BUILD" 的 4 項建置方案,並按下 "重建"
(4) 進入目錄 C:\DCMTK\lib ,其下會有 4 個子目錄,分別是上述 4 項建置方案的輸出。

4. 整理 DCMTK 及其他外部函式庫的目錄(這個步驟是建議的選項)
(1) 用檔案總管搜尋 C:\DCMTK\dcmtk-3.5.4 下的所有 "include" 目錄,將其全部複製到 C:\DCMTK\ 目錄下。(連結 DCMTK 函式庫時,必要的2個部份是函式庫的 lib 檔以及相關的 .h 檔。lib 檔已經在前述的步驟中建立在 C:\DCMTK\lib 目錄內,這裡是把相關的 .h 檔集中放置在 C:\DCMTK\include 目錄內,以方面其他專案連結。
(2) 把 C:\DCMTK\libpng-1.2.8, C:\DCMTK\libxml2-2.6.26, C:\DCMTK\openssl-0.9.8a, C:\DCMTK\tiff-3.7.4, C:\DCMTK\zlib-1.2.3 各目錄下的 include 子目錄內資料複製到 C:\DCMTK\include 內。將 lib 子目錄內資料 *_d.lib 複製到 C:\DCMTK\lib\debug 目錄,*_o.lib 複製到 C:\DCMTK\lib\release 目錄,並把檔名中的 _d 及 _o 字元移除。


透過上述的流程,即可建立可用於 Visual C++ 2005 環境的 DCMTK 函式庫。
關於在新專案中使用 DCMTK 函式庫的方法等之後再補上來..

注意事項︰
1. DCMTK 的設定中,預設是採用 "Multithreaded" runtime options (/MT and /MTd) 的設定,因此若新專案要使用上述方法編譯之函式庫,則新專案的 runtime options 設定必須一致。
2. 在 VC 中,fstream 的用法有2種,一為 一為內建於 std 中的 。DCMTK預設使用 std 的函式庫,因此使用的新專案也必須要一致。是否使用 std 的 fstream 可透過 C:\DCMTK\dcmtk-3.5.4\config\include\dcmtk\config\cfwin32.h 檔案中的 USE_STD_CXX_INCLUDES 定義來決定。

Wednesday, October 10, 2007

原來Yahoo奇摩知識限制他家搜尋的存取

平常在搜尋資訊時,極極少有找到奇摩知識上的資訊,原來是 Google 大神被拒在門外啊。

Taiwan.CNET︰
例如Yahoo!奇摩知識家仍然有此限制;也就是說,Google使用者還是無法搜尋到該服務的內容。
難怪 Yahoo 一直打不過 Google 了,像這種鎖國政策真的跟白痴沒兩樣,因為這等於把奇摩知識這個服務與非 Yahoo 搜尋的使用者隔絕了。像我就幾乎沒用過奇摩知識,印象中只有在很久以前(至少1年前)用 Google 搜尋時曾經有查到過上面資料。還好我並不介意 Flickr 不被搜尋引擎找到,不然要是也這樣的話還真是麻煩, Yahoo 的服務還是少用為妙....

Wednesday, September 26, 2007

Windows Vista 有夠囧

Windows XP 基本上 我就不熟了,因為在買這台筆電之前,我的前筆電 IBM X22 裝了Windows XP會很難用。不過目前這台新筆電,在我升級了Vista之後,只有"囧"可以形容。

1. 我慣用行列輸入法,但是Vista內建的輸入法跟Office2007有相容性問題,簡單講就是不能用。
2. 在隨身硬碟上刪除9G的檔案(iPod),已經花了6個小時了...(還在跑 orz) ,我只是想把之前備份的資料移除,再把新資料備份進去而已。XP會怎麼樣我是不知道,但是我知道Ubuntu/Linux不會這樣折磨我,它到底在幹嘛呀....。
3. 買了才知道Home Basic版沒有3D特效,真不知道我裝這個Vista是幹嘛的...

這次備份完我要重灌回筆電預裝的XP了 =.=
倒是有一股衝動想灌上 Ubuntu/Linux 再用 VirtualBox 裝上Windows XP。

Friday, September 07, 2007

FreeNAS + RSYNC = 備份伺服器

FreeNAS是一個功能齊全的檔案伺服器,其安裝完成後的系統檔案約僅有32MB(可使用CF卡配上CF轉IDE的轉接版),記憶體需求為128MB。因此只要有一台普通舊電腦,可以接上大容量硬碟,就可以在家中弄一台專用的檔案伺服器囉。(ps. FreeNAS支援無線網路)

然而麻雀雖小,五臟俱全,FreeNAS提供Windows網芳(Samba)、FTP、NFS、Unison、UPnP、AFP、RSYNCD等檔案傳輸協定,可滿足一般常用的需求。

關於FreeNAS的安裝及設定,chicman已經有一系列完整的介紹︰

http://chicwks.blogspot.com/search/label/FreeNAS

這邊我要特別介紹的是rsync的應用,rsync是linux系統常用的遠端同步化工具。例如debian的官方套件庫除了可以在官方的伺服器找到之外,還存在於許多社群提供的伺服器,這些社群提供的伺服器,就是官方伺服器的mirror站,而mirror站就可以使用rsync的工具來進行與官方站同步化的工作。rsync的簡單概念就是,它可以把一台電腦上的一個特定目錄及其子目錄,完整的同步到另一台電腦上的指定目錄下,並完全保留原始權限設定。而且透過rsync的技術,每次的同步化工作,僅會更新有修改的部份,以減少資料傳輸量及提高速度。

不過就FreeNAS來說,使用rsync的另一個應用就是備份囉,把客戶端主機(可以是windows、mac或unix-like系統)的特定目錄資料,完整備份到FreeNAS主機上;而在必要的時候,可以再透過RSYNC進行還原。同時FreeNAS還提供軟體RAID功能,因此可以使用RAID 1來大大提高資料儲存的安全性。

FreeNAS的安裝設定請參考chicman的文章,以下介紹RSYNCD的設定及客戶端使用 -

rsync 主機端的設定︰
1. 建立使用者/群組
 a. 建立名為system的群組(名字可自行指定)
 
 

 b. 建立名為rsync的使用者(名字可自行指定)
 
 

2. 設定rsync遠端備份主機︰
開啓
rsync的設定非常的簡單,只要進入 服務:RSYNCD 頁面,並啓用服務即可。
  
 

ps. 因為rsync預設使用873的連接埠,因此若前端有防火牆,應注意開啓這個連接埠。

Unix like系統的rsync客戶端設定︰
Unix like系統一般都已經有rsync的程式可以使用,rsync的官方網頁位於http://samba.anu.edu.au/rsync/。rsync的設定及指令可以參考使用如下︰

1. 首先建立rsync的伺服端密碼檔 編輯 /etc/rsyncd.passwd 這個檔案,填入FreeNAS上rsync這個使用者的密碼。

2. 使用以下的指令,將客戶端的 /var/www/ 目錄,整個備份到FreeNAS主機上以rsync-disk為分享名稱的硬碟中︰
# rsync -arHz --progress --delete --password-file=/etc/rsyncd.passwd /var/www rsync@140.117.120.224::rsync-disk
其中參數的說明如下︰
-a︰保留權限,除了Hard Link -r︰遞迴地複製目錄中的所有目錄
-H︰保留 Hard Link
-z︰資料備份前先壓縮 --progress︰顯示進度
--delete︰如果要備份的主機上刪除了某個檔案,備份的主機也刪除某個檔案
--password-file︰密碼檔的位置
rsync@140.117.120.224 前面的 rsync 是使用者帳戶。

3. 為了能夠定期的自動備份,可將此指令寫進/etc/crobtab中。例如在該檔案中加入︰
0 5 * * * root /usr/bin/rsync -arHz --progress --delete --password-file=/etc/rsyncd.passwd /var/www rsync@140.117.120.224::rsync
則系統就會在每天早上五點中自動進行備份工作。

Windows系統的rsync客戶端設定 ︰

1. cwRsync是一個for Windows系統的rsync程式,其官方網址如下︰
http://www.itefix.no/cwrsync/
2. cwRsync是一個指令示的程式,安裝該程式之後,其使用方式與Unix like系統雷同。在預設情況下,cwRsync是安裝在C:\Program Files\cwRsync\目錄下,其程式檔位於C:\Program Files\cwRsync\bin之中。

3. 使用此程式,應先進立編輯一個密碼檔rsyncd.passwd(置放的目錄可自己決定,我是放在C:\Program Files\cwRsync\bin中),其內容即為備份主機上,rsync這個使用者的密碼。

4. 開啓一個console模式視窗(cmd),並使用以下指令,將位於C:\data目錄中的資料,整個備份到FreeNAS主機上以rsync為分享名稱的硬碟中︰
"C:\Program Files\cwRsync\bin\rsync.exe" -arHz --progress --delete --password-file="C:\Program Files\cwRsync\bin\rsyncd.passwd" /cygdrive/c/data rsync@140.117.120.224::rsync
要注意的是,在指令中,原本的C:\data路徑,在指令中必須寫成/cygdrive/c/data。

5. 在Windows下要進行定期自動備份工作,可以使用Windows的工作排程,並且輸入第4點中所設定的指令。

6. cwRsync目前尚未有完整支援Windows Vista的版本,在Vista上使用,可能會因為莫明的原因,造成備份過程出現錯誤(在FreeNAS備份主機端所建立的目錄,其權限為000,造成無法繼續備份),此部份的解決方式還有待查詢。

Tuesday, August 14, 2007

在 Blogger 上弄個留言板

To 鞋姐:
要放留言板到 Blogger 還滿簡單的,而且不只一種選擇喔。
目前的做法大概都是在側邊欄放個小小的方框,裡面就是留言板,像這樣︰



我現在用的是 CBox ,教學的話就看 小婆婆札記解說吧。(我就偷懶了 :P)
另外在 Fun New Run High 的部落格中,也有其他留言板的解說

Friday, June 15, 2007

MSN Messenger 的廣告


MSN 一向在 Messenger 最下方會放置廣告,不過今天發現,滑鼠只要不小心移到上面,就會開啓另一個視窗播放廣告影片。只能說 MSN 沉淪了.....

Tuesday, April 17, 2007

Visual C++ 2005

手賤安裝了 Windows Vista ,結果發現 Visual C++ 6.0 不相容,目前是嘗試看看 Visual C++ 2005 能不能取代,不然要灌回 Windows XP 了。

以下列出目前遇到一些問題或麻煩事項及解決方式︰

1. 首先 Visual Studio 2005 必須先升級到 SP1 ,再另外安裝一個 Visual Studio 2005 SP1 Update for Vista

2. 開啟 Visual C++ 時,會出現視窗建議你以系統管理員身份啟動它。方法是在 Visual C++ 2005 的捷徑上按右鍵,再選 "以系統管理員身份執行" 。

3. 許多老舊函式由於有安全性問題,目前有許多替代的函式可使用,不過暫時實在不想去動它,所以在專案中加上一個 macro : _CRT_SECURE_NO_DEPRECATE ,以忽略這些煩人的警告(warnning)。

4. fstream 在讀、寫檔案時,如果遇到檔名內有中文字,在預設情況下會開啟失敗。這跟 locale 有關係,必須使用 setlocale() 來設定目前程式使用的語言。例如我的設定是︰
setlocale(LC_ALL, "Chinese");
我是把它放在 CWinApp::InitInstance() 函式內的第一行,目前讀、寫檔案看起來是都正常。

5.VC++ 6.0中好用的Resource Editor,我在 VC++ 2005還找不到怎麼叫出來,是該去買書回來看看了..

Tuesday, March 20, 2007

C++的 #pragma pack(n) - 位元組對齊 or 字節對齊

這東西的中文名稱似乎沒有統一,我也是第一次看到。

今天學弟在 C++Builder 下嘗試要把已有的 BITMAPINFO, 以及 Bitmap 的影像陣列儲存到 bmp 格式的檔案中,我看了看覺得,既然已經有 BITMAPINOF 跟 DIB 格式的影像陣列,那不如直接用 ofstream::write 寫進檔案裡。但是試了好久,卻一直無法輸出正確的檔案。

問了一下 Google 大神,馬上找到一篇

http://topic.csdn.net/t/20020402/07/615811.html


不過文中所說的方法必須要修改 C++Builder 內建的檔案,因為擔心會有後遺症,所以我決定自己寫 BITMAPINFO, BITMAPFILEHEADER, BITMAPINFOHEADER 來處理,但是對齊的問題我也會遇到。對齊的概念及會產生的問題請參考 字節對齊 以及 請問C 裡面的 #pragma 這兩篇文章。

32Bits 系統預設是 #pragma pack(4) ,而 BITMAPFILEHEADER 這個結構的長度為 14 Bytes,為了達到預設對齊的結果,編譯器會將 BITMAPFILEHEADER 的長度拉長成 16 Bytes (4 的倍數),造成輸出的檔案的標頭檔會有問題,無法被讀圖軟體解析。為了避免這個問題,必須在宣告結構之前,將位元組對齊重設為 2 ︰
#pragma pack(2)
而在宣告結束後,重設為預設值︰
#pragma pack()
=> 在 pack() 的括號中不給值,即會重設回預設值。

如此一來,由於 14 為 2 的倍數,因此 BITMAPFILEHEADER 的結構就不會再受到影響。

Sunday, January 28, 2007

Adobe Flash Player 9 for Linux with gcin

Flash Player 9 for Linux 推出一陣子了,不過國內使用 gcin 做為輸入法平台的使用者可能會發生 firefox 瘋狂 crash 的情形,也就是每次開到有 flash 的網頁 firefox 就直接死給你看。

根據 摩托學園 的討論,gcin 1.3.3 pre4 的版本不會再發生這樣的情形, 目前 debian 或 ubuntu 的使用者可以直接安裝 calno 所包的 gcin ,版本編號是 1.3.2.99.01220113-1 ,已在 debian/etch 及 ubuntu/dapper 上測試過可以正常開 Youtube
deb http://www.calno.com/ unstable main
deb-src http://www.calno.com/ unstable main

Monday, January 22, 2007

blogger升級

等待了一段時間,我的blogger終於可以升級到正式版了。
正式版的好處是可以加上標籤,做為分類的工具,
因此文章分類不再需要透過外部的網路書籤,這大概是我想升級的唯一理由吧。

不過為了提供標籤功能,我必須同時升級文件範本,以致於以前對範本的修改就無法保留了
所以目前的blogger就變的很簡單,等有空再來修吧。

Tuesday, December 26, 2006

在資訊世界裡的中文困境

經過多年的學習與使用,對一般的使用者而言,目前電腦裡的中文系統是那麼樣的自然,似乎它原本就應該是這樣。但是在熟悉中文編碼的工作者目眼中,現在的中文系統急需進一步翻新。陳昌江先生在中研院 OpenFoundry 電子報發表的文章,提出了目前中文在數位化時代的發展困境,然而解決之道仍不明朗。

其基本重點就在於造新字的困難,英文可以透過26個英文字母,隨意創造出任何的字(word),而中文即使自行造字,也只能在自己的系統中顯示。在目前的中文系統下,只有"詞"是可以創造的,而"字"的演化卻是整個僵化掉了。這個問題的嚴重性在短期並不明顯,然而其對中文使用的影響卻是深遠的。

該文的全文轉錄在 Jserv 的部落格 - 等待新漢碼-漢字的數位化與中華文化的衝擊

Monday, December 25, 2006

天下真的有白吃不完的午餐! ------我的私房趴客(podcast)by Dr. Wu

這篇文章是高雄榮總放射線部胸腔科主任 吳銘庭 醫師所著,吳醫師有感於 iPod 的便利性以及可取得許多免費資源包括 podcast, vodcast等,基於"吃好逗相報"的心情著作了此篇文章,並發表於陽明學刊,本文在取得其本人的同意之後轉載於此。

高雄榮總 吳銘庭

  最近花在走路通勤的時間較多,常覺得無聊,也跟著湊熱鬧買了iPod,接上iTunes,才發現podcast(趴客)這個美麗新世界,已經悄悄地進行了知識的傳播革命。過去以為MP3 player等如iPod、zen等都是年輕人聽流行音樂的時髦玩意。然而podcast在這年(2006年起)來急速的流行,各大雜誌(Nature, NEJM, ...),媒體(CNN,Discovery, ...) 都有專屬podcast,令人欣喜若狂,基於”吃好逗相報”的”社會責任”,乃毛遂自薦推出我的私房最愛。
  
  什麼是podcast呢?簡單說,是經由網路訂閱的數位定期RSS有聲廣播。Pod,豆莢也,形容MP3 player;而iPod乃Apple之商品,若加上視訊,則稱為vodcast。目前大多數的podcast都是免費的。如果你使用iTunes(號稱最親和的免費音樂視訊下載軟體),經由Music Store上網,選擇podcast,再到你要的分類去瀏覽,譬如News or Science類,就可以找到你喜歡的podcast。或者你亦可以進入關鍵字收尋,則可找到相關的節目。由iTunes自動定時更新到iPod,便可輊鬆達到anytime anywhere 吸收新知,享受娛樂,加強英語。個人經過八個多月來的嘗試,覺得有幾個節目特別值得跟大家分享,並且簡單分類如下:

一、英語能力加強類(ESL: English as Second Lauguage ):工欲善其事,必先利其器,首先要加強自己的英聽能力才夠享受眾多的podcast節目。

  Voice of America,Special English (VOA,SE):所謂Special English就是Slow and simple for ESL,每天更新,有不同節目,介紹經濟、健康、醫療、教育、美國歷史人物等等,淺顯易懂,增加美國常識,幫助適應留美生活。最大的好處是在網路上有內容的全文,如果你有聽不懂的字彙片語,可以上網看個清楚。

二、新聞類:加強了英語聽力之後就來考考自己的聽力吧。眾多的新聞節目中我特別推薦

1. ABC World News Now(Vodcast):這是有視訊的節目 (還有TV version),每天15分鐘,內容不會是全然枯燥無味的中東新聞或是美國國內小事,而是包含了各種生活、科技、網路,運動等有趣的新聞,尤其是最後會與Google合作的Top rising searchs today,讓你知道當天網路世界的熱門話題,非常有趣。

2. CNN student news (Vodcast):for American college student,由學生主播,topics符合年輕人口味,還有測驗問題 (Shut Out)哩!

三、醫學類:這類雜誌如雨後春筍般的出現

1. NEJM this week:沒錯,就是龍頭老大,高不可攀的新英格蘭雜誌,大約20分鐘,介紹該期主要論文的摘要及訪問該篇第一或通訊作者討論該篇論文。

2. Sound medicine:大約10分鐘,介紹醫學新知,一次一個專題,如新的抗瘧疾藥物的發展等,具有新聞性及深度較一般期刊深入。

四、科學類

1. Nature podcast:每星期四撥出,大約30鐘。頂頂大名的自然雜誌,是最早加入(2005/10)podcast的天王巨星之一。不過大家可能要適應濃厚的英國腔,節目較長,有較長的訪問。

2. Science Talk;The podcasts of Scientific American:每周三撥出,大約30分鐘,內容較活潑、有趣,同時每期會將科學新聞改成是非題(四選一),考驗你的科學知識及常識,生動有趣。

五、音樂類:這一大類是大家一開始聽MP3的初衷吧,現在podcast也有好幾個很棒的節目。

1. Naxos classical music splotlight:Naxos的新音樂作品發表,具有評論及聆賞。

2. WGBH classical performance Boston:純chamber music podcast,讓我欣喜若狂。不禁回想在1995年波士頓留學期間,經常前往著名的波士頓交響樂廳,聆聽各國著名的藝術家表演。而今能夠豪不費功夫的從網上訂閱現場錄音,豈不快哉!
  
  至於所需要的軟體硬體,本人並無做太多調查,目前使用iPod+iTunes,兩者配合的非常友善,只要你設定妥當,可以做到當你把iPod接上電腦之後,電腦自動開iTunes,自動下載更新 podcast到你的電腦裡,再依照你設定好的智慧型播放清單,Update到你的iPod去。幾乎是全自動就可以享受到每日定期更新的節目。其他廠牌的軟體硬也都應該非常的快速進步,畢竟podcast已經蔚成風潮,這塊大餅怎麼可能只讓蘋果獨享呢?

  此檔是我的私房podcast節目,僅供各位參考。新的podcast如雨後春筍,但有些撑不久,所以隔陣子得上music store/podcast查查有何新歡。如果每個節目都要聽,就會發現通車時間太短了,往往還沒聽完就到家了呢。幸好podcast可restart from last stop,所以30min節目可以分多次聽完,並建議多利用on-the-go,或智慧型播放清單,如 “new < 1day”,上路前選足路程所需的節目,即可專心,以免開車撞,走路跌。在車上聽得買MP3-錄音帶轉換匣 (NTD200-300元)。若新車己無錄音帶播放匣‧則可用MP3-FM射頻器 (五合一FM發射器),可將iPod,PDA,cellphone各式音源轉成FM,再由音響主機的FM接收,約NTD600-900元,上網買就有。

  Podcast時代真的有白吃的午餐,還多到吃不完哩 ! 呷好別忘相報喔 !

Tuesday, October 31, 2006

Firefox 2.0 的擾人改變

不知道從什麼時候開始,只要你在 Firefox 的網址列中打入簡短的網址,就會幫你產生正確的網址。例如當你想要連到 urmap ,只要在網址列打入 urmap ,就會自動產生 http://www.urmap.com/ 網址。

自從換上 Firefox 2.0 之後,卻發現鍵入 urmap 會直接連到 yahoo 的搜尋結果畫面,這時候心中其實有點暗暗的不爽 (我承認我對 Yahoo 有莫明的不滿) ,不爽了幾天之後,終於發現如何改回原本的設定。

原來以前的 Firefox 是使用 Google 的「實名通」來達到自動產生正確網址的功能,而在這個版本應該是 Yahoo 又讚助了一些錢,所以預設值就改掉了。要怎麼改回來呢?讓 Yahoo 來教你。如果在網址列輸入字之後,想要直接用 Google 來搜尋,那就要 問問 Neo 大大 怎麼做了。

Friday, September 22, 2006

Inverse of a matrix - 使用 LU 演算法

在 GSL 中已經實作了矩陣的反轉換函式

使用 GSL 定義的矩陣
首先應該知道怎麼在 GSL 中使用其定義的矩陣,這部份應參考 GSL Reference ManualVectors and Matrices 一節的 Matrices 小節。必須注意的是,GSL採用的是 C 語言的架構,即使用 struct 來實作矩陣 gsl_matrix ,再透過許多函式來操作之。

1. 宣告及配置記憶體給矩陣
/* 宣告及配置記憶體 */
gsl_matrix * m1 = gsl_matrix_alloc(m, n);

/* 宣告及配置記憶體,並將所有元素初始化為0 */
gsl_matrix * m2 = gsl_matrix_calloc(m, n);
 ps. gsl_matrix 宣告的矩陣,其元素的型態為 double ,若要使用其他型態,
   可使用 gsl_matrix_float, gsl_matrix_int, .. 等。

2.初始化矩陣
/* 設定矩陣 m1 內所有元素的值為 1.0 */
gsl_matrix_set_all (m1, 1.0);

/* 設定矩陣 m1 內所有元素的值為 0 */
gsl_matrix_set_zero (m1);

/* 將矩陣 m1 內對角線的元素值均設為 1 ,其餘為 0,即為單位矩陣 */
gsl_matrix_set_identity (gsl_matrix * m);
3.讀取及寫入矩陣元素
/* 讀出矩陣m1的第i列(row)第j行(column)的值 */
double v1 = gsl_matrix_get(m1, i, j);

/* 將矩陣m1的第i列(row)第j行(column)的值設為 5 */
gsl_matrix_set(m1, i, j, 5);

/* 直接傳回矩陣m1的第i列(row)第j行(column)元素的指標 */
double * ptr = gsl_matrix_ptr(m1, i, j);
 ps. 預設的情況下,這3個函式會檢查傳入的 i, j 值範圍,在大量運算的時候會拖慢系統執行速度,此時可以加上 preprocessor definition GSL_RANGE_CHECK_OFF來關掉此功能。

4.矩陣的操作
 GSL 在矩陣操作上提供了矩陣相加(gsl_matrix_add)、相減(gsl_matrix_sub)、乘上一個常數(gsl_matrix_scale)、加上一個常數(gsl_matrix_add_constant)等函式,比較令人不解的是,此處提供的 gsl_matrix_mul_elements 函式,並非正常的矩陣相乘運算,因此矩陣相乘的工作必須自行另外撰寫程式碼運作。這個程式碼很簡單,以下是我實作的矩陣相乘︰

#include <gsl/gsl_matrix.h>
#include <assert.h>

void gsl_matrix_mul_matrix(const gsl_matrix * a,
const gsl_matrix * b,
gsl_matrix * c)
{
assert(a->size2 == b->size1
&& a->size1 == c->size1
&& b->size2 == c->size2);

/* set all elements in c to zero */
gsl_matrix_set_zero(c);

/* calculate mul */
int i, j, k;
for(i = 0; i < a->size1; i++)
{
for(j = 0; j < b->size2; j++)
{
for(k = 0; k < a->size2; k++)
{
gsl_matrix_set(c, i, j, gsl_matrix_get(c, i, j)
+ gsl_matrix_get(a, i, k)
* gsl_matrix_get(b, k, j));
}
}
}
}
5.使用完陣列記得釋放記憶體
/* 釋放掉為矩陣 m1 配置的記憶體 */
gsl_matrix_free(m1);

計算矩陣的反轉換

矩陣的反轉換函式定義在 Linear Algebra 一節的 LU Decomposition 小節中。假設要計算反矩陣的是 n x n 的矩陣 A,則︰

1.計算 LU Decomposition
gsl_permutation * p = gsl_permutation_alloc(n);
int sign = 1;
gsl_linalg_LU_decomp(A, p, &sign);
 此時 LU Decomposition 的結果儲存在 A 及 p 中。

2.計算原矩陣 A 的反矩陣
gsl_matrix * inverse = gsl_matrix_alloc(n, n);
gsl_linalg_LU_invert(A, p, inverse);
 此時矩陣 inverse 即為原矩陣 A 的反矩陣。然而必須注意的是,經過 gsl_linalg_LU_decomp的計算,A中儲存的已經不再是原矩陣,故使用 gsl_linalg_LU_decomp 函式前應先使用gsl_matrix_memcpy 函式備份原矩陣。
gsl_matrix * A_c = gsl_matrix_alloc(n, n);
gsl_matrix_memcpy(A_c, A);
Reference
GSL Reference Manual - HTML
Matrix Inverse
Identity Matrix

Friday, September 15, 2006

GSL - Random Number Generation

Random Number Generation


剛剛學弟問到,所以看了一下怎麼使用 GSLRandom Number Generation 函式。

GSL 內建多個產生隨機變數的演算法,詳情請見 Random number generator algorithms,預設情況下,使用的 Generator 是 mt19937

Random Number Generation 使用分成三個步驟︰

1. 初始化隨機變數產生器
 (1) 指定隨機變數產生器(Generator),下面範例指定使用 taus 演算法
gsl_rng * r = gsl_rng_alloc (gsl_rng_taus);
 (2) 設定種子(Seed),下面範例指定種子為 123
gsl_rng_set(r, 123);
2. 取得隨機數 - 重複執行以下函式,其傳回值即為隨機數
 (1) gsl_rng_get (const gsl_rng * r) : 取得隨機數,其隨機值範圍因不同的 Generator 而不同。
 (2) gsl_rng_uniform (const gsl_rng * r) : 取得 [0,1) 範圍內的浮點數,不包含 1。
 (3) gsl_rng_uniform_pos (const gsl_rng * r) : 取得 (0,1) 範圍內的浮點數,不包含 0 及 1。
 (4) gsl_rng_uniform_int (const gsl_rng * r, unsigned long int n) : 取得 [0, n-1] 之間的整數值。
範例︰
for (i = 0; i < n; i++)
{
 double u = gsl_rng_uniform (r);
 printf ("%.5f\n", u);
}

3. 釋放記憶體 - gsl_rng_alloc 會配置記憶體給 gsl_rng * r ,使用完必須釋放記憶體。
gsl_rng_free (gsl_rng * r)

Thursday, August 24, 2006

C/C++ GNU Scientific Library(GSL) for Windows

The GNU Scientific Library (GSL) is a numerical library for C and C++ programmers. It is free software under the GNU General Public License.

The library provides a wide range of mathematical routines such as random number generators, special functions and least-squares fitting. There are over 1000 functions in total with an extensive test suite.

GNU Scientific Library (GSL) 是一個內含許多數值及科學運算函式的 C/C++ 函式庫,內含超過 1000 個以上的函式(例如︰數值微分小波轉換排序..等等) ,並且可以使用在各種作業系統平台。
GSL 在 Windows開發環境下的使用 中有簡單說明如何在 Windows 環境使用 GSL ,以下則是再詳細一點介紹如何在 Visual C++ 6.0 的 IDE (整合型視窗介面) 下使用︰

1. 首先到 http://gnuwin32.sourceforge.net/packages/gsl.htm 下載 BinariesDeveloper files
2. 將 Binaries package 內 bin 子目錄下的 libgsl.dll, libgslcblas.dll 兩個檔案複製到 C:\Windows\System32 中。
3. 將 Developer files 解壓縮後,在 VC 的 IDE 中設定 include, lib 子目錄的路徑。
4. 由於此版本的 lib 子目錄中不含 .lib 檔,必須用以下指令產生。請先開啟 DOS 模式視窗(附屬應用程式/命令提式字元),切換目錄到 lib 目錄下,並下達︰
lib /machine:i386 /def:libgsl.def
lib /machine:i386 /def:libgslcblas.def
即可產生 libgsl.lib, libgslcblas.lib 兩個檔案。
5. 在 VC 專案中加入 libgsl.lib, libgslcblas.lib 這 2 個 lib 到 link 參數中。
6. 在 VC 專案的 Preprocessor definitions 中加入 GSL_DLL。
6. 可用函式及說明請見 Reference Manual

ps. GSL是使用C語法寫成,故並沒有使用類別(class),而是以結構(struct)及函式(function)組成,不過 GSL 仍可以用在 C++ 編繹器,並與 C++ 程式相容。

Wednesday, August 02, 2006

中文的網路轉貼文化

在網路上發現一篇好文時,我總是會很希望找到原文的出處,不過似乎總是事與願違。中文部落格或討論區上,往往會有全文轉貼的文章(我不讚成全文轉貼),但是轉貼時仍能附帶原文出處的比例似乎是極少。有時在查詢一些關鍵字,會發現許多網站可以找到幾乎一模一樣的文章,而有時甚至連轉貼兩個字都沒有,這種情形在簡體中文似乎更是嚴重。當大家轉來轉去,都沒有註明出處時,久而久之原著就被淹沒在網海之中,令人覺得十分可惜。

例如 "住在我隔壁儲藏室的大學剛畢業的小夫妻" 這一篇文章從內容來看,明顯是一位中國大陸的網友寫的,但是我還沒找到原文的出處,就算找到了我也不曉得是不是真的。我覺得這篇文章文筆跟內容都滿好的,也因為寫的好,網路上全文轉貼的很多,加上引號作為關鍵字Google一下,甚至可以找到 22900 筆資料,真是夠了....

ps.這篇文章的原始標題似乎是 "記那對住在我隔壁儲藏室的大學剛畢業的小夫妻"