準備換機
08/23/2008, 12:09 - Network
現在這部 Apple Minitower G3 是幾年前以2000元在台北接手來的,當作 Server 用還足夠,用了二個 Ultra SCSI 4GB 的硬碟,也就這樣子的跑了這些年,不過最近發現硬碟已經快完蛋了,算算這兩個硬碟也已經用了快十年了吧,夠本了。對了,掛點的是 Seagate ST34520N ,另一部 IBM 的(看不到型號)還跑得很好,不過"那一天"應該也接近了吧!現在正在找新機來更換,不過因為是當 Server ,而且原來就是跑 Linux ,所以有想買不要太高級的機型,不用 DVD Burn 不用 HiFi Audio 不用獨立顯示卡、不用接螢幕、不用太大的硬碟、不用太快的 CPU、不用太多的記憶、還有就是不要太占空間、也不用太多的電力。不過這樣的需求,好像買中古的就可以了吧!
原來是想買 Mac mini 的,不過現在好像比起 PC 而言相對的價格高太多了,而華碩的產品 eeeBox,因個人主觀因素,不在考慮之列,反正我就是不想買華碩的產品,因為每次都會有問題,觀感不好,而且名字聽起來就像是口吃一樣的發音 E...E...E...Box ,而且和這篇說到的有點像。所以...有可能會有幾天會中斷 Service ,直到新機到手、安裝好為止。其實國內的公司出的機器對於 Linux 都不是太友善,所以通通排到第二線,最後考慮。
以下附上目前這部機器的製造標簽:
APPLE P/N: 590-0878 A
FOXCONN PN: FC50291
DATE: 94.7.26
MADE IN CHINA
看製造日期比較有感覺吧,1994 年耶...
咦...原來這一張是上一部 server ,
Power Macintosh 6100 的啦!
應該是和硬碟一起搬到 Minitower 上了。
還是電子書 E-Book Reader 好
08/13/2008, 14:57 - 想到的
用 PDA 已經有不算短的時間,從很早期的 Casio 名片型電話記錄,可以記五十組電話,因為只有五十組記憶,後來就換了 Casio 的 Personal Assistance,一部長得很像現在的 NDS 的東西,可以記電話,也可以記一點資料,不過只有128KB的空間。 某一天下班後,掉在停車場,找到時已經被車壓過了。在來就換了 Palm Pilot 有2MB 空間,這時除了記電話之外也在上面開始看電子書。後又換了 Palm V 及 Sony Clie TH55以及 Apple Newton Message Pad 2000,還有 Sharp 的 Zarus SL-5500 Linux PDA。這些 PDA 都很好用,不過原來記事功能漸漸被在上面看資料、電子書取代了。而原本的記事功能也因為用了 Notebook 及手機,而減少了,反而看電子書是最主要的用途了。在 PDA 上看電子書是沒有辦法中的辦法,小小的字,看起來還真的是難過,而且PDF檔案放上去還真是難看。不過還是比起帶好幾本書或一大堆資料要方便多了。最近 Amazon 的 Kindle 電子書的推出,也很吸引我,可以無線連線買書,可以用類似紙本的品質看電子書,實在很方便,不過要有美國信用卡才可以買,而無線的服務並不是 WiFi ,是用 和3G 一樣的 CDMA2000,要在美國才可以用,而且不可以直接看 PDF需要經過 Amazon 轉檔 ,這樣子對我而言 Kindle 的好處我都用不到,所以並不是好的選擇。
在網路上找到了其他和Amazon Kindle類似的產品,有 Sony eReader 、BeBook、 iRex 的iLiad,其中iLiad最貴,不過規格也最高,有 WiFi 有 Touch Screen 可以在上面寫東西作筆記,當然最貴。而 Sony Reader 可以看 PDF 但是其他的功能就只是還好而已,使用 Sony Memory Stick。而 BeBook 是最簡單,但最合我的要求。可以看 PDF 可以看中文,沒有像Kindle的購買限制等。但是省電,按鍵少,價格相對的合理。有 512 MB internal memory ,可以外加 SD memory,可以自已換字型。有趣的是這些電子書都是用 E-Ink 技術,換頁才會耗電,而且也都是用 Linux OS 。我應該會去買一部 BeBook吧,目前要價 349 USD!這樣子就可以不用再將 RFC 及 IEEE standard 印出來了。
選 BeBook 有一個很重要的原因是因為我已經有很多的電子書了,大都是 PDF 或是 CHM 或是文字的,而線上買電子書,的要求是比較少的,因為想看的書,在台灣都沒有提供電子書,或者是一些專業的電子期刊及資料大都是 PDF ,所以一定要以直接看 PDF,而且不要經由一些額外的方法及程式,因為有時這些軟體或服務是要加錢才可以用的。Sony Reader 也可以,不過就個人使用 Sony 產品的經驗,Sony 一定會用一些和別人不一樣的東西,很煩人的。而 Kindle 限制太多,而且很多功能出到美國以外就沒有用了。
當然了,現在有這麼多的輕省電腦,是否還要再買一部價格和電腦一樣,但只能專用於看資料的電子書呢?我認為這些電子書的隨開即看,不看即關,和 PDA 一樣,是任何電腦都比不上的便利(Macintosh MacBook 在睡眠下叫醒,有一點點可以相比,不過還是有差),想看書,不需要等開機,不看就可以關掉,這才是叫方便。而且這些電子書的電力大都可以至少充一次電用上幾天,這是任何一部 Notebook 都作不到的。而 E-Ink E-Paper 還有很大的一點和 LCD 不同的是,可以直接在陽光下閱讀,就像真的紙一樣清楚。不過沒有背光,在比較昏暗的地方就不能看了。
Amazon Kindle 359 USD
6" diagonal,3.6"(W) × 4.8"(H),600×800 pixels or 0.48 megapixels,167 ppi density, 4-level grayscale Electronic paper,
Linux (2.6.10 kernel) OS
Input QWERTY keyboard, select wheel, next/prev/back buttons.
Marvell PXA255 CPU
64 MB RAM memory 256 MB (180 MB available) internal storage,
SD expansion slot.
EVDO/CDMA connectivity AnyDATA wireless modem
USB 2.0
3.5 mm stereo headphone jack, built-in speaker,
AC power adapter jack.
3.7V, 1530mAh lithium polymer battery
Physical size 5.3" × 7.5" × 0.7"
Weight 10.3 oz
Media Kindle (.azw),Plain text (.txt),Unprotected Mobipocket (.mobi, .prc),MP3(.mp3),Audible (.aa).
Sony Reader PRS505 279.95 USD
600×800 px, 170 ppi resolution,
6" diagonal, 8-level grayscale E Ink Electronic paper
MontaVista Linux
200MB Accessible memory
Memory Stick Duo Up to 8GB, SD Up to 2GB
USB 2.0
Lithium-ion Battery
175 x 122 x 8mm
9oz Weight
Media PDF, TXT, RTF, DOC, LRF, LRX, ePub, JPG, GIF, PNG, BMP, MP3, AAC w/o DRM
iRex iLiad 503.36 EUR = 750 USD
124×152 mm (W×H),
768×1024 pixels,160 ppi density,16-level grayscaleElectronic paper.
Linux (2.4 kernel) OS
Input Wacom touchscreen, Graphical user interface,
400MHz Intel XScale CPU
64 MB RAM memory
256 MB (128 MB available) internal storage,
Expandable via USB, MMC or CF cards.
Connectivity WiFi 802.11g,
10/100 Mb/s Ethernet LAN (via travel hub),
USB port, audio jack.
Battery Lithium Ion battery.
Physical size 155x217x16 mm (WxHxD)
Weight 389 g (13.7 oz)
BeBook 349.99 USD
Dimensions: 184mm(l)*120mm(w)*10mm(h)
Weight : 220gr (incl. battery)
Display: ePaper, 600*800 (6 inch) (E-Ink technology)
Internal storage: 512MB flashmemory
3.5mm audiojack, USB 1.1 Port, SD slot (extendable up to 4GB)
Power Supply: 3.7V Li-ION battery 950mAh
Linux OS
512MB internal memory,
SD memorycard slot included
Built-in menu language support: English, French, Spanish, German, Dutch, Chinese, Russian, Greek, Ukraine, Turkish, Japanese, Korean, Bulgarian, Estonian, Polish
Play mp3 files and audiobooks*
Supported file formats: pdf, doc, txt, rtf, MS lit, html, djvu, chm, fb2, wolf, mp3, png, tiff, gif, jpg, bmp
Bookeen Cybook Gen3 £ 269 = 510 USD
Size:4.7" x 7.4" x 0.3" 118 x 188 x 8.5 mm
Weight:6.13 ounces -174 gbattery included
Screen:6" E Ink® Vizplex screen [4.8"x3.6"- 122mmx91mm] 600x800 pixels, 166 dpi B&W, 4 grayscale
Universal AC 100~240V, DC 5V 700mA
Embedded Linux
Bookeen® Multi-format eBook reader
Supported image formats: JPG, GIF, PNG, MP3
Rechargeable built-in Li-Polymer battery (1000 mAh)
Samsung® S3C2410 ARM920T 200MHz
ROM memory:8 MB
RAM memory:16 MB
Storage memory:512 MB
Connectivity:USB Client (v2.0) - Mini USB B connector
PS1: BeBook is from 中國天津翰林電子書V3 HanlineReaderV3 看來似乎是直接找中國廠買會便宜一點,而且BeBook 和 Hanlin V3 軟、硬體應該都一樣吧!
PS2: 後來又找到了 Cybook Gen3 好像也是有很多廠商在做 E-Book device !
ATMEL AVR development environment build
07/01/2008, 16:21 - Open Source
ncftpget ftp://ftp.kernel.org/pub/linux/devel/binutils/binutils-2.17.50.0.9.tar.bz2tar -jxf binutils-2.17.50.0.9.tar.bz2
cd binutils-2.17.50.0.9
./configure --prefix=/usr/local --sysconfdir=/etc --localstatedir=/var --enable-threads --enable-shared --enable-static --disable-nls --disable-debug --with-gnu-ld --with-x --target=avr --program-prefix=avr-
make
make install
ncftpget ftp://ftp.gnu.org/gnu/gcc/gcc-4.2.2/gcc-4.2.2.tar.bz2
tar -jxf gcc-4.2.2.tar.bz2
cd gcc-4.2.2
./configure --prefix=/usr/local --sysconfdir=/etc --localstatedir=/var --enable-threads --enable-shared --enable-static --disable-nls --disable-debug --with-gnu-ld --with-x --target=avr --disable-libssp --with-dwarf2 --enable-languages="c,c++" --program-prefix=avr-
make
make install
wget http://download.savannah.gnu.org/releas ... .2.tar.bz2
tar -jxf avr-libc-1.6.2.tar.bz2
cd avr-libc-1.6.2
./configure --prefix=/usr/local --sysconfdir=/etc --localstatedir=/var --enable-threads --enable-shared --enable-static --disable-nls --disable-debug --with-gnu-ld --with-x --host=avr
make
make install
Then, well, you now can use the open source hardware arduino for some funny project!
Reference
用 ccache 加快 compiler 的速度
06/17/2008, 16:27 - Open Source
一個程式開發者,經常需要 compile 程式,但是如果程式量很大,需要 compile 很久呢? 聊天,上廁所? 如果有方法可以將 compile 的時間縮短一半以上的話不是可以工作得更有效率嗎?ccache就可以作到.ccache 是Samba之中的一個 project,可以將己經 compile 過的程式碼放在 cache 中,下次再用時就不用 compile 而可以直接拿出來用了,這樣子可以加快 compiler 的產出效率.
測試在沒有用 ccache 時需要作 614 秒,但用了 ccache 之後,第一次還是 614 秒,可是在修改了部份程式後,再重作只需要 374秒.(有將全部的 object 及 depend file 清除).另一個 project ,沒有 ccache 需要 474秒,而用了 ccache 變成 244 秒. 而用 make -j4 變成 152 秒! 從十分鐘變成 2 分鐘!
還不夠快? 那可以試試 distcc將 compile 的工作分散到網路上的多部電腦中,平行工作,這樣子,理論上,就像是一個 compiler 的 cluster, 越多台越快喔!
在 make 時用 make -j16 試試!
還不夠? 那就將 distcc 和 ccache 一起混用吧!
如果有非常大的 source code 需要經常作 compile ,可以用這兩個 free 的小工具!
使用時要注意的是 cache 的 size 不要太大,我今天查了一下我的 cache 容量是 9.2GB,有 71萬個檔案...這個就要很久才可以清光! 大約用 512M 或 1G 就很好用了.
而 ccache 用法最簡單的是
例如:
要使用 /usr/bin/gcc compiler
而 ccache 是在 /usr/bin/ccache
先檢查 PATH
env | grep PATH
設定好 ccache 所用的 cache size
ccache -M512M
可以用
ccache -s 檢查,
而會在個人目錄下開一個目錄 .ccache
看 /usr/local/bin 是否在你安裝的 compile 之前,
如果在後面就調整一下. (/usr/local/bin 要在 /usr/bin 之前)
PATH=/usr/local/bin:/usr/bin:/bin
讓 /usr/local/bin 是第一個會被找的目錄.
再來是到 /usr/local/bin 目錄!
cd /usr/local/bin
ln -s /usr/bin/ccache gcc
這樣就可以了!
distcc 在 Apple 的 XCode 下也是可以設定的項目之一呢, 而 ccache 好像要自己安裝才可以.

Wavelet Transform with Octave
06/12/2008, 00:44 - Open Source
Here is a Octave (Matlab compatable) program to simulate the JPEG 2000 Wavelet Transform. That is my final project of Signal Compression class, but why not open the source, may be someone need it.
#!/usr/bin/octave
%
function p=GetPeak(Max)
i=0;
while Max > 0
% Right shift a bit
Max=bitshift(Max,-1);
i++;
end;
if (rem(i,8) != 0)
i=(fix(i/8))+1;
end;
p=(2^i)-1;
end;
%
% Tile partition
function N=Tile(M,Block,x1,y1)
X=Block(1);
Y=Block(2);
XStep=(x1*X);
YStep=(y1*Y);
N(1:X,1:Y)=M(1+XStep:X+XStep,1+YStep:Y+YStep);
end;
%
function N=TileRGB(X,Block,i,j)
N(:,:,1)=Tile(X(:,:,1),Block,i,j);
N(:,:,2)=Tile(X(:,:,2),Block,i,j);
N(:,:,3)=Tile(X(:,:,3),Block,i,j);
end;
%
function N=UnTile(O,M,x1,y1)
X=size(M,1);
Y=size(M,2);
XStep=(x1*X);
YStep=(y1*Y);
N=O;
N(1+XStep:X+XStep,1+YStep:Y+YStep)=M(1:X,1:Y);
end;
%
function N=UnTileRGB(O,M,x1,y1)
if(length(O) == 0)
O=zeros(size(M,1),size(M,2),size(M,3));
end;
N(:,:,1)=UnTile(O(:,:,1),M(:,:,1),x1,y1);
N(:,:,2)=UnTile(O(:,:,2),M(:,:,2),x1,y1);
N(:,:,3)=UnTile(O(:,:,3),M(:,:,3),x1,y1);
end;
%
% Reshape to RGB Image
function N=ReShapeRGB(M1,M2,M3,X,Y)
N(:,:,1)=reshape(M1,X,Y);
N(:,:,2)=reshape(M2,X,Y);
N(:,:,3)=reshape(M3,X,Y);
end;
% Reshape to Image
function N=ReShape(M1,X,Y)
N=reshape(M1,X,Y);
end;
%
% Forward RCT
function [Y,Cb,Cr]=FwdRCT(RGBImage)
Y=double(floor((double(RGBImage(:,:,1)).+(2.*double(RGBImage(:,:,2))).+double(RGBImage(:,:,3)))*0.25));
Cb=double(double(RGBImage(:,:,3)).-double(RGBImage(:,:,2)));
Cr=double(double(RGBImage(:,:,1)).-double(RGBImage(:,:,2)));
end;
%
% Invert RCT
function Image=InvRCT(Y,Cb,Cr)
Image(:,:,2)=double(round(Y-floor(0.25*(double(Cb).+double(Cr)))));
Image(:,:,1)=double(round(double(Cr).+double(Image(:,:,2))));
Image(:,:,3)=double(round(double(Cb).+double(Image(:,:,2))));
end;
%
function X=DownScale(Y)
X=Y(1:2:length(Y));
end;
%
% Haar filter
% L=[1 1]/sqrt(2)
% H=[1 -1]/sqrt(2)
function [H,L]=haar(M)
LP=[1 1];
HP=[1 -1];
MM=M;
MM(1)=[];
MM(end+1)=M(end);
L=((M.*LP(1)).+(MM.*LP(2)))./sqrt(2);
H=((M.*HP(1)).+(MM.*HP(2)))./sqrt(2);
L=DownScale(L);
H=DownScale(H);
end;
%
function DisplayImage(X,Title)
global FigureCount;
global Color;
figure(FigureCount++);
if(Color==1)
colormap('default');
else
colormap('gray');
end;
imagesc(X);
title(Title);
axis("image");
end;
%
function DisplayImageRGB(OImage,Title)
DisplayImage(OImage(:,:,1),[Title 'R']);
DisplayImage(OImage(:,:,2),[Title 'G']);
DisplayImage(OImage(:,:,3),[Title 'B']);
end;
%
function [L,H]=Dwt(M,Block,Color)
% DC shift to values around the zero
Peak=GetPeak(max(max(M)));
NP=int16(M);
L=[];
H=[];
%
% Full color
if(Color==1)
PSize=size(M(:,:,1));
for(i=0:(PSize(1)/Block(1))-1)
for(j=0:(PSize(2)/Block(2))-1)
% Partition
O=TileRGB(NP,Block,i,j);
%
% Forward RCT, RGB to Y,Cr,Cb)
[Y,Cr,Cb]=FwdRCT(O);
% shapre to signal dim and DC shift
Y=Y(:).-((Peak+1)/2);
Cb=Cb(:).-((Peak+1)/2);
Cr=Cr(:).-((Peak+1)/2);
% Haar filter and downscale
[YL,YH]=haar(Y);
[CbL,CbH]=haar(Cb);
[CrL,CrH]=haar(Cr);
%
N1=ReShapeRGB(YL,CbL,CrL,Block(1)/2,Block(2)).+((Peak+1)/2);
N2=ReShapeRGB(YH,CbH,CrH,Block(1)/2,Block(2)).+((Peak+1)/2);
% Invert RCT to RGB
L1=InvRCT(N1(:,:,1),N1(:,:,2),N1(:,:,3));
H1=InvRCT(N2(:,:,1),N2(:,:,2),N2(:,:,3));
%
L=UnTileRGB(L,L1,i,j);
H=UnTileRGB(H,H1,i,j);
end;
end;
% Gray color
else
PSize=size(M);
for(i=0:(PSize(1)/Block(1))-1)
for(j=0:(PSize(2)/Block(2))-1)
% Partition
O=Tile(NP,Block,i,j);
% Shape to signal dim and DC shift
Y=O(:).-((Peak+1)/2);
% HaaR filter and downscale
[YL,YH]=haar(Y);
%
L1=ReShape(YL,Block(1)/2,Block(2)).+((Peak+1)/2);
H1=ReShape(YH,Block(1)/2,Block(2)).+((Peak+1)/2);
%
L=UnTile(L,L1,i,j);
H=UnTile(H,H1,i,j);
end;
end;
end;
end;
%
% Initialize
echo off;
clc;
clear *;
global FigureCount=1;
global Color=0;
OK=1;
BLK=8;
%
BlockSize=[BLK,BLK];
OImage = imread('lenna.bmp');
%
%Determine the picture is color or gray
if(length(size(OImage)) == 3)
Color=1;
else
Color=0;
end;
%
tic;
[H,L]=Dwt(OImage,BlockSize,Color);
L1=L;
H1=H;
%
if(Color==1)
L11(:,:,1)=L1(:,:,1)';
L11(:,:,2)=L1(:,:,2)';
L11(:,:,3)=L1(:,:,3)';
else
L11=L1';
end;
[H,L]=Dwt(L11,BlockSize,Color);
%
if(Color==1)
LH1(:,:,1)=H(:,:,1)';
LH1(:,:,2)=H(:,:,2)';
LH1(:,:,3)=H(:,:,3)';
else
LH1=H';
end;
%
if(Color==1)
LL1(:,:,1)=L(:,:,1)';
LL1(:,:,2)=L(:,:,2)';
LL1(:,:,3)=L(:,:,3)';
else
LL1=L';
end;
%
clear H L L11;
%
if(Color==1)
H11(:,:,1)=H1(:,:,1)';
H11(:,:,2)=H1(:,:,2)';
H11(:,:,3)=H1(:,:,3)';
else
H11=H1';
end;
[H,L]=Dwt(H11,BlockSize,Color);
%
if(Color==1)
HH1(:,:,1)=H(:,:,1)';
HH1(:,:,2)=H(:,:,2)';
HH1(:,:,3)=H(:,:,3)';
%
HL1(:,:,1)=L(:,:,1)';
HL1(:,:,2)=L(:,:,2)';
HL1(:,:,3)=L(:,:,3)';
else
HH1=H';
HL1=L';
end;
%
clear H L H11;
%
if(BlockSize(1) <= 128)
[H,L]=Dwt(LL1,BlockSize,Color);
L2=L;
H2=H;
if(Color==1)
L21(:,:,1)=L2(:,:,1)';
L21(:,:,2)=L2(:,:,2)';
L21(:,:,3)=L2(:,:,3)';
else
L21=L2';
end;
[H,L]=Dwt(L21,BlockSize,Color);
%
if(Color==1)
LH2(:,:,1)=H(:,:,1)';
LH2(:,:,2)=H(:,:,2)';
LH2(:,:,3)=H(:,:,3)';
%
LL2(:,:,1)=L(:,:,1)';
LL2(:,:,2)=L(:,:,2)';
LL2(:,:,3)=L(:,:,3)';
else
LH2=H';
LL2=L';
end;
clear H L L21;
%
if(Color==1)
H21(:,:,1)=H2(:,:,1)';
H21(:,:,2)=H2(:,:,2)';
H21(:,:,3)=H2(:,:,3)';
else
H21=H2';
end;
[H,L]=Dwt(H21,BlockSize,Color);
%
if(Color==1)
HH2(:,:,1)=H(:,:,1)';
HH2(:,:,2)=H(:,:,2)';
HH2(:,:,3)=H(:,:,3)';
%
HL2(:,:,1)=L(:,:,1)';
HL2(:,:,2)=L(:,:,2)';
HL2(:,:,3)=L(:,:,3)';
else
HH2=H';
HL2=L';
end;
%
clear H L H21;
end;
%
if(BlockSize(1) <= 64)
[H,L]=Dwt(LL2,BlockSize,Color);
L3=L;
H3=H;
if(Color==1)
L31(:,:,1)=L3(:,:,1)';
L31(:,:,2)=L3(:,:,2)';
L31(:,:,3)=L3(:,:,3)';
else
L31=L3';
end;
[H,L]=Dwt(L31,BlockSize,Color);
%
if(Color==1)
LH3(:,:,1)=H(:,:,1)';
LH3(:,:,2)=H(:,:,2)';
LH3(:,:,3)=H(:,:,3)';
%
LL3(:,:,1)=L(:,:,1)';
LL3(:,:,2)=L(:,:,2)';
LL3(:,:,3)=L(:,:,3)';
else
LH3=H';
LL3=L';
end;
clear H L L31;
%
if(Color==1)
H31(:,:,1)=H3(:,:,1)';
H31(:,:,2)=H3(:,:,2)';
H31(:,:,3)=H3(:,:,3)';
else
H31=H3';
end;
[H,L]=Dwt(H31,BlockSize,Color);
%
if(Color==1)
HH3(:,:,1)=H(:,:,1)';
HH3(:,:,2)=H(:,:,2)';
HH3(:,:,3)=H(:,:,3)';
%
HL3(:,:,1)=L(:,:,1)';
HL3(:,:,2)=L(:,:,2)';
HL3(:,:,3)=L(:,:,3)';
else
HH3=H';
HL3=L';
end;
%
clear H L H31;
end;
%
LP1=cat(2,LL1,HL1);
HP1=cat(2,LH1,HH1);
JP21=cat(1,LP1,HP1);
%
if(BlockSize <= 128)
LP2=cat(2,LL2,HL2);
HP2=cat(2,LH2,HH2);
LL22=cat(1,LP2,HP2);
%
LP1=cat(2,LL22,HL1);
HP1=cat(2,LH1,HH1);
JP22=cat(1,LP1,HP1);
end;
%
if(BlockSize(1) <= 64)
LP3=cat(2,LL3,HL3);
HP3=cat(2,LH3,HH3);
LL33=cat(1,LP3,HP3);
%
LP2=cat(2,LL33,HL2);
HP2=cat(2,LH2,HH2);
LL22=cat(1,LP2,HP2);
%
LP1=cat(2,LL22,HL1);
HP1=cat(2,LH1,HH1);
JP23=cat(1,LP1,HP1);
end;
toc;
%
printf("Key Press to Display Image...\n");
pause;
if(OK >=2 && OK <= 3)
DisplayImage(OImage,'Original Image');
end;
if(OK >= 1 && OK <=3)
if(Color==1)
DisplayImageRGB(OImage,'Origin');
else
DisplayImage(OImage,'Origin');
end;
%
if(Color==1)
DisplayImageRGB(L1,'L1');
DisplayImageRGB(H1,'H1');
else
DisplayImage(L1,'L1');
DisplayImage(H1,'H1');
end;
%
if(BlockSize(1) <=128)
if(Color==1)
DisplayImageRGB(LL1,'LL1');
DisplayImageRGB(LH1,'LH1');
DisplayImageRGB(HL1,'HL1');
DisplayImageRGB(HH1,'HH1');
%
DisplayImageRGB(LL2,'LL2');
DisplayImageRGB(LH2,'LH2');
DisplayImageRGB(HL2,'HL2');
DisplayImageRGB(HH2,'HH2');
else
DisplayImage(LL1,'LL1');
DisplayImage(LH1,'LH1');
DisplayImage(HL1,'HL1');
DisplayImage(HH1,'HH1');
%
DisplayImage(LL2,'LL2');
DisplayImage(LH2,'LH2');
DisplayImage(HL2,'HL2');
DisplayImage(HH2,'HH2');
end;
end;
%
if(BlockSize(1) <=64)
if(Color==1)
DisplayImageRGB(LL3,'LL3');
DisplayImageRGB(LH3,'LH3');
DisplayImageRGB(HL3,'HL3');
DisplayImageRGB(HH3,'HH3');
else
DisplayImage(LL3,'LL3');
DisplayImage(LH3,'LH3');
DisplayImage(HL3,'HL3');
DisplayImage(HH3,'HH3');
end;
end;
%
if(Color==1)
DisplayImageRGB(JP21,'2D Wavelet Level 1');
else
DisplayImage(JP21,'2D Wavelet Level 1');
end;
if(BlockSize(1) <= 128)
if(Color==1)
DisplayImageRGB(JP22,'2D Wavelet Level 2');
else
DisplayImage(JP22,'2D Wavelet Level 2');
end;
end;
if(BlockSize(1) <= 64)
if(Color==1)
DisplayImageRGB(JP23,'2D Wavelet Level 3');
else
DisplayImage(JP23,'2D Wavelet Level 3');
end;
end;
%
end;
if(OK >= 2)
DisplayImage(L1,'L1');
DisplayImage(H1,'H1');
%
if(BlockSize(1) <= 128)
DisplayImage(LL1,'LL1');
DisplayImage(LH1,'LH1');
DisplayImage(HL1,'HL1');
DisplayImage(HH1,'HH1');
%
DisplayImage(LL2,'LL2');
DisplayImage(LH2,'LH2');
DisplayImage(HL2,'HL2');
DisplayImage(HH2,'HH2');
end;
%
if(BlockSize(1) <= 64)
DisplayImage(LL3,'LL3');
DisplayImage(LH3,'LH3');
DisplayImage(HL3,'HL3');
DisplayImage(HH3,'HH3');
end;
%
DisplayImage(JP21,'2D Wavelet 1');
if(BlockSize(1) <= 128)
DisplayImage(JP22,'2D Wavelet 2');
end;
if(BlockSize(1) <= 64)
DisplayImage(JP23,'2D Wavelet 3');
end;
end;
printf("Press key...\n");
pause;
The program with color image will take very long time, because the float calculation, if in gray image, it response very quick.
The result
However, it is my class final project, I wrote it about a week, after work every night.
OS X 10.5.3 upgrade
05/30/2008, 08:53 - Apple

已經更新,會更新的原因是因為要安裝的的 iPhone SDK beta6,結果不能下載,去信 ADC 問,回信說要先換到 10.5.3 才知道,原來已經有這個版本了。換了之後,在作網路 Location 切換時曾當過一次,原因不明。
贏?
05/26/2008, 04:38 - 有的沒的
嘓暋黨主席"無勃熊",去中國到南京中山陵向國父報告贏回政權。國父馬上爬起來,用手中的拐杖狠狠的敲無勃熊的頭說:
臭小子!
不肖子弟!
不要臉!
那𥚃贏了?
等贏了共產黨再來報告吧!
不過看你這個德性,連這種事都來報告,
要贏共產黨,只有等下輩子了吧!
再說,
我不作國父,很久了!
無勃熊恨恨的摸著頭上的腫包說:
唉...自從我當上了黨主席,
我太爽了,爽得都忘了...
這麼多年了,我以為你早就加入共產黨了!
國父說:
臭小子!
"小獎"和他兒子"小小獎"是這樣教你們的?
難怪...
他們一直不敢回來見我!
"無勃熊"又說:
上次"憐佔"來了,也沒見你發火!
國父說:
喔...那個臭小子...我以為他是共產黨的...
參加 RMS 演講的戰利品
05/19/2008, 12:32 - Open Source
當天從桃園搭六點二十八分高鐵列車到新竹,行車時間十二分鐘,自由座原價一百元,實收九十元,下車再轉高鐵的免費接駁車到清華大學,已經七點十五分了,而再順著“與大師對話“的旗子走了十分鐘,就到了清華大學的大禮堂。有點難找,因為大禮堂是防近最小最矮的建築。當天算很多人吧,不過也還有很多空位。RMS 在演講時是沒有穿鞋子,只著襪子,這樣比較輕鬆吧!在大廳有位小姐擺了個小攤子,一邊放了 FSF 及 Bad Vista 及 Eliminate DRM等各種貼紙,可以自由拿。而另一邊的是要錢的。演講的內容當然還是從 GNU 、FSF 到 GNU-Linux 等的各種演進。而在中場還進行了一場拍賣會,賣的是 RMS 的書及 GNU 小布偶。再來是問題及討論。
在場有很多像我一樣不是專職學生的人也在場,而當然有大部份的人是學生,不過問的問題就有一點怪怪的了,有幾個人問 RMS 對於 GNU-Linux 對 Game 的 support 的問題,這好像不太合適問這位大師級的人吧,而且看來現在的學生大都花了不少時間在玩 Gamine 上。別一位 Sun MicroSystem 的人問對於 Sun open source 的看法,同樣的,好像也是有一點不太適合由 RMS 回答,因為他又不是該公司的什麼人,沒有資格回這種問題。而還有一位是問 GPL 相關的問題,都很有意思。我發現到大家的英語都很溜,這一點很值得贊許,及個人需要自我警惕,要再多多學習語言的部份。
不過因為時間已經九點多了,怕趕不上高鐵的免費接駁車,所以就在討論的半場先離開。原來想拿很多年前買的 "Using and Porting GNU CC version 2.7.2" 給 RMS 簽名的,不過好像沒機會,而且又是半途離開,所以就沒有拿出來。
清華大學門口有很多的公車站牌,有到台北、台中等,而高鐵的站牌是在最前面,最沒有人的地方。高鐵的接駁車是搭到了,不過到了高鐵竹北車站正好目送車子離開月台,而下一班次要一個小時之後,所以對接駁車在時間上算得奇準,正好讓遊客送車走,就有一點點小的不爽。
以下是當天的免費貼紙,以及花400元買的 GNU keychain。





OS X and Linux RSS reader
05/14/2008, 22:19 - Open Source
現在應該很多人都用 Rss reader 來讀網路上的訊息了,不過試過很多的 RSS reader 還是沒有很滿意的軟體,因為大多數的軟體都太依靠 mouse 了,或者是可以用鍵盤,但是還是要用到 mouse 配合,這對我來說都不太理想。目前在 Linux 使用 Liferea,而在 OS X 上使用 Vienna。兩者都是免費軟體,不過以 Vienna 速度較快,而說實在的 Liferea 實在是慢得可憐,若不是因為 RSSOwl 太難用了,應該不會考慮,不過有 source code 是優點。由以下兩圖可以看出,兩者的介面沒有太大的不同,中文也都沒有問題。不過 Liferea 的字型設定一次大小之後就會固定,但是 Vienna 就要每次設定(按 Ctrl-+放大)有一點點的不方便!

RMS 又來了
05/12/2008, 23:54 - Open Source
RMS 今天到了。自由軟體之父 Richard Stallman 即將來台發表演說!共有兩場,一場在台北淡江大學,一場在新竹清華大學。這是神級的人物,上次 Steve Wozniak 及 RMS 2005年訪台,沒有時間參加,不過這一次時間上還可以接受,所以就報了新竹場坐高鐵,不過就怕回來沒有車。但是拜神嗎,所以就先去了再說!不過看了上次 Woz 的訪問,主持人的提問及介紹,真的是...根本沒有作功課,希望這一次不會再發生。
是“神級的人耶,想去的快報名吧,不收錢,感謝一下 OpenMoko吧!





















