J2SE in linux安裝導引

首先到 Sun(http://java.sun.com) 網站下載最新版的 j2se for linux.
假設你下載的是最新版的 1.4 版,檔名是 j2sdk-1_4_0-fcs-linux-i386.rpm.bin
並放到 /download 資料夾中
$chmod +x j2sdk-1_4_0-fcs-linux-i386.rpm.bin
$./j2sdk-1_4_0-fcs-linux-ie86.rpm.bin
此時會詢問你是否同意其版權,選擇 yes 以後,將會解出 j2sdk-1_4_0-fcs-linux-ie86.rpm
$rpm -ivh j2sdk-1_4_0-fcs-linux-i386.rpm
這樣子就安裝完成了,預設會安裝到 /usr/java/j2sdk1.4.0/ 下,接著要做一些設定
請用你順手的文書編輯器,編輯 /etc/profile
加入這幾行
# Java
export CLASSPATH=.:/usr/java/j2sdk1.4.0/lib
PATH=”$PATH:/usr/java/j2sdk1.4.0/bin”
把 CLASSPATH 和 PATH 都指向 /usr/java/j2sdk1.4.0/ 下~
登出再重新登入之後,應該就可以使用 j2se 了
讓我們編寫一個簡單的 java 程式來實驗看看,程式碼如下

class HelloLinux {
public static void main(String[] args) {
System.out.println("Hello Linux!!");
}
}

並命名為 HelloLinux.java
用 javac HelloLinux.java 編譯之.
用 java HelloLinux 執行之,注意,此處不可以用 java HelloLinux.class, 否則會發生錯誤!!這也是初學者常有的錯誤之一~
運行順利的話,你應該會看到
Hello Linux!!
Yes, Hello Linux
絕佳的學習指引:
http://java.sun.com/docs/books/tutorial/
碁峰有把這部分出書~現在已經出到 3rd Edition 了~不錯!

Freebsd 4.5初探心得

  1. bsd 的磁碟分割與 linux 大不同,bsd 是先分割出一個分割區之後,再在該分割區上分出掛載點及 swap 等.
  2. 沒有 ifup, ifdown, /proc/net/dev, 因此只能利用 ifconfig rl0 up, ifconfig rl0 down,
    ifconfig -l 來代替.
  3. 沒有 /proc/net/dev,因此無法利用他來看網路卡的 rx bytes, tx bytes, 但可以利用 netstat -I rl0
    -b 來看
  4. df -h 和 linux 的大致相同,但 Use% 換為 capacity
  5. 沒有 /etc/sysconfig/network-scripts/ifcfg-eth0, 統一存放在 /etc/rc.conf 裡面. 如果是rl0,
    那麼該檔裡面會有一行 ifconfig_rl0="…….". 當 rl0 欲設為 dhcp,那麼 ifconfig_rl0="DHCP"即可.若欲設為static,
    那麼就要設 ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0"
  6. dhcp 無法在 rc.conf 中設定後,再用 ifconfig rl0 up 取得,而須利用 dhclient rl0 來取得
  7. 可用 /stand/sysinstall 這個管理工具來更動 rc.conf 中的內容

套件粉多,但預設都不會裝進去~~我想有可能是我不會選吧~
總之都是我後來自行安裝進去的.
安裝一套的速度頗快,不用一個小時就裝完了,很類似 debian, 都是先把 kernel 的東西裝進去之後,才讓你選套件.我想這就是快的原因吧.

努力過年

過年很努力的看了幾部電影
美國派II
BJ單身日記
Monster Inc.
名偵探柯南-往天國的倒數計時
美國派II 是不錯的娛樂片
BJ單身日記,有點悶,但我想對於一些單身的人來說,他們的感觸會比較多吧~女主角的演技蠻突出的,尤其是一開頭的部分~聽說女主角有因此入圍的樣子
Monster Inc. 承繼 Disney 的一貫特色~溫馨又感人
名偵探柯南,我想這就沒什麼好說的了~就是偵探片囉~
^_^
最近遠流有在推克麗絲蒂系列的推理小說,東方快車謀殺案跟另外一本忘了名字的特賣 69 元,有興趣的人可以去買來看,全套共 80 本,用信用卡付賬,一萬多元.(有點在拍賣的感覺, 8-p)

RAMDisk on Linux

dd if=/dev/zero of=/dev/ram bs=1k count=32768
mke2fs /dev/ram
mount –t ext2 /dev/ram /mnt/ramdisk
這樣就有個Ramdisk的Parititon
進一步的應用,
要修改的地方還有lilo.conf, fstab, rc.local…

Apache SSI 筆記

設定:
在 <directory xxxx> </directory>中的 options 加上 "+Include".
若不想執行外部程式,則改用 IncludeNoExec

慣例命名:
一般都以 .shtml 或 .shtm 來命名.

命令格式:
<!–#命令 引數1=xxx 引數2=xxx…->

命令可以是:

1.config: 可用於顯示錯或設定時間,檔案大小的格式

引數有: errmsg, sizefmt, timefmt
如:<!--#config errmsg="error" -->
<!--#config sizefmt="bytes"-->
<!--#config timefmt="%m/%d/%y"-->

2.echo:列印變數

如:<!--#echo var="DATE_LOCAL"-->

3.exec:執行外部程式

如:<!--#exec cgi="/cgi-bin/prog.cgi"-->
<!--#exec cmd="prog"--> 會啟動 shell 來處理

4.fsize:印出指定檔案的大小

如:<!--#fsize file="路徑"-->
<!--#fsize virtual="URL"-->

5.flastmod:印出檔案最後修改日期

如:<!--#flastmod file="路徑"-->
<!--#flastmod virtual="URL"-->

6.include:將某檔案含括進來

如:<!--#include file="路徑"-->
<!--#include virtual="URL"-->

7.printenv:印出所有環境變數

如:<!--#printenv-->

8.set:自行設定變數

如:<!--#set var="home" value="index.shtml"-->

SSI 預設的變數:

  1. DATE_GMT
  2. DATE_LOCAL
  3. DOCUMENT_NAME
  4. DOCUMENT_URI
  5. LAST_MODIFIED

流程控制:

<!--#if expr="${REMOTE_HOST}=/206\.171\.50/&&${DOCUMENT_NAME}=/${DATE_LOCAL}/"-->
<!--#else-->
<!--#endif-->
p.s.若是變數,要加上${}以示區別.

devfs 架設過程實錄

devfs, 讓我想起 Linuxer 第 20 期正好有這麼一篇介紹的文章.
大家可以參考這篇文章來作做看.
以下是我嘗試架設的過程,我使用的kernel是 2.4.7-10:
首先要先把 kernel 中的選項打開,但是第一次進去找,我始終都找不到這個選項,後來把 “Prompt for development and/or incomplete code/drivers” 此選項打開之後,才在 File System 裡面找到.
然後就把他打開,重新 build kernel.
依照慣例,把 vmlinux, vmlinuz, System.map 都複製到 /boot 之後
我很快樂的重新開機,結果,開不起來. poor.
原來是因為沒有安裝 devfsd 的緣故~ Linuxer 的文章中有提到,而我以為 kernel 裡面已經有了說~ sad ~
上網去找到 devfsd.tar.gz, 這是最新的版本,不是 1.3.9 的喔~
下載之後,執行 make 來重新編譯
無法編譯,依照編譯的錯誤訊息指示
我在 linux/devfs.h 裡面的 #define DEVFSD_NOTIFY_CREATE 後面加上
#define DEVFSD_NOTIFY_DELETE 7
這行
同時在 make 的時候改用下列敘述來 make (這是在make時指定環境變數的方法)
KERNEL_DIR=/usr/src/linux make
然後就 compile ok 了
接著執行
make install
依照文章指示,/etc/rc.d/rc.sysint 裡面還要有一行
[-e /dev/.devfsd -a -x /bin/devfsd] && /sbin/devfsd /dev
可是我的 /etc/rc.d/rc.sysint 檔案裡面早就已經有了
注意,這一行要放在很前面喔,否則我猜想可能會開不起來
於是再重新開機
果然就 ok 了~~
可是,文字模式下的滑鼠起不來
於是我又把 /etc/sysconfig/mouse 裡面的 DEVICE 改為 /dev/psaux
重新開機後,文字模式下的滑鼠就 ok 了
可是有些特定的設備,我還不會設定( 設定檔在 /etc/devfsd.conf )
比如我自己寫的一個 driver 還是起不來~~
devfsd 相關的套件,可以利用 Google 搜尋引擎找到.
個人覺得 devfs 與原來的 /dev 相容性蠻高的,幾乎不用作什麼修改.在Documents/filesystems/devfs/README 這份文件說的蠻清楚的,什麼有支援,什麼不支援,裡面都有說~
/dev/mouse 是確定不支援的,要改成 /dev/psaux;其他的一些 driver,我想修改 /etc/devfsd.conf 應該一切都能搞定,只是我還不會設.
coding 的話~~
現在所有中文有關 kernel 的書,講到的 register_chrdev() 都是舊的方法.
如果要支援 devfs 的話,直接使用
devfs_register_chrdev() / devfs_unregister_chrdev()
devfs_register_blkdev() / devfs_unregister_blkdev()
devfs_register() / devfs_unregister()
來註冊,跟原來的語法用法是很接近的
函數的原型參考,可以在 include/linux/devfs_fs_kernel.h 裡面找到
事實上在 devfs_fs_kernel.h 裡面
已經有利用 CONFIG_DEVFS_FS 來作判斷了
當 CONFIG_DEVFS_FS 有被定義的時候, devfs_register() / devfs_unregister() 是有東西的,如果沒被定義,那麼則是空殼子~
此外 devfs_fs_kernel.h 裡面有許多關於 devfs 的函數,而函數的實作則是放在 fs/devfs/base.c 裡面~
driver 寫的時候,建議的順序是這樣子的(看了兩三個driver的source才了解)
1.用 devfs_handle_t 宣告一個 handle.
2.用 devfs_register_chrdev() / devfs_register_blkdev() 註冊裝備的動作,MAJOR號碼以及名稱
3.再用 devfs_register() 去 /dev 裡面註冊一個設備檔案
當然如果有很多的話,可以先用 devfs_mk_dir() 去註冊一個目錄,再利用 devfs_register_series() 去註冊一狗票的設備檔案或者利用迴圈去註冊一狗票的設備檔案.
然後就 ok 了
release 的時候,則是:
1. 先 devfs_unregister() 掉設備檔案
2. 再 devfs_unregister_chrdev() / devfs_unregister_blkdev()

Stream Server – icecast 架設實錄

前兩個星期在 Linux fab 上看到一則新聞
說 icecast 已經釋出新版本了
But what is icecast?
仔細一看
才明白,原來他是一個 stream server,就類似微軟的 media service.
這樣講也許還不是很清楚,拿個實例來說吧:如廣播電台,目前廣播電台都已經可以在網路上收聽了,他們就是架設一個 server 並提供一個 url, 讓你在 media player 或 real player 裡面輸入,於是你就可以收聽到即時的節目了.又比如之前紅極一時的Naked News也是這樣子做的,只是他們輸出的是影音新聞節目.
架設的時候你必須到 icecast 網站先取得 icecast 套件,目前最新的版本是 1.3.11.
取得之後,依照 linux 的慣例安裝三部曲,輸入
./configure
make
make install
於是安裝完成~~
接下來我切換到套件預設的安裝路徑 /usr/local/icecast/
將 conf 裡面的 icecast.conf.dist 複製到 /etc, 並命名為 icecast.conf
修改裡面的
streamurl 為 http://redhat71
server_name 為 redhat71
接著就要啟用囉
請輸入
/usr/local/icecast/bin/icecast -c /etc/icecast.conf -b
以啟動 icecast server
當然到這裡都很簡單,只是依照套件內附的文件行事而已
接下來,要怎麼讓音樂播放出來呢??
這可讓我傷透了腦筋
最後才在 icecast 網站的 getting start找到方法.
我用的是 shout, 這同樣也是 icecast 網站提供的另外一個套件
請下載 shout ,依照 linux 慣例安裝三部曲來安裝.
接著,要製作 mp3 play list
我們可以利用如下指令來製作
find /mnt/cdrom -name *.mp3 -print >> /etc/mp3.lst
不過據我實驗的結果,中文的檔案名稱似乎無法用 find 來取得~~討厭~~
本來想把所有的 mp3 都用 stream server 來播放的~
最後就可以使用如下的指令來將 mp3 塞到 stream server 了
/usr/local/icecast/bin/shout localhost -P hackme -a -x -p /etc/mp3.lst -l -n “A sample name”
shout 可接的參數,在此就不再贅述,可以自行加上 –help 參數來取得.
(看到 localhost 了嗎??這表示你也可以從遠端來控制要播出的節目喔.)

boolean in C

在 C 裡面並沒有 boolean 這種型態的變數
而是使用整數型態來代替
因此常常我們會看到
#define TRUE 1
#define FALSE 0
但是
true 真的是 1 嗎? 那麼 -1 會不會比 1 來個更好,因為所有的 bit 都是 1?
而 false 真的是 0 嗎??
前幾天在看某個程式的 Source code 的時候
我發現它是這樣子定義的
#define TRUE (1==1)
#define FALSE (0==1)
真的很聰明~~
簡單的說
(1==1) 一定是真~~
(0==1) 一定是假~~
compiler 會自己去求出 (1==1) 跟 (0==1) 的值
這樣子就不用我們自己去定義一個特定的數值
將來轉換平台或環境的時候
可以減少轉換的阻礙~~
很簡單的方式,完全讓編譯器去決定 TRUE 跟 FALSE 的值~

RPM常用指令

rpm 的幾個必要用法:
安裝:
rpm -i lcdctld-1.0.0-1.i386.rpm
rpm -ivh lcdctld-1.0.0-1.i386.rpm #加上 vh 是顯示安裝進度及狀態
rpm -i ftp://your_site/lcdctld-1.0.0-1.i386.rpm #從 ftp 站下載並安裝
升級:
rpm -U lcdctld-1.0.1-1.i386.rpm
rpm -Uvh lcdctld-1.0.1-1.i386.rpm #加上 vh 是顯示升級進度及狀態
移除:
rpm -e lcdctld-1.0.0-1.i386.rpm
求助:
rpm –help
man rpm
如何了解目前 rpm 包的一個狀態(用個大陸用法”包”,別介意):
檢查是否有檔案被誤刪:
rpm -Va
查詢檔案屬於哪個包:
rpm -qf /usr/sbin/lcdctld
查詢包的資訊
rpm -qpi lcdctld-1.0.0-1.i386.rpm
查詢包裡面的檔案會被安裝到哪兒
rpm -qpl lcdctld-1.0.0-1.i386.rpm
怎麼建立包
建立包的程序,你可以參考上一篇的程序.
.spec 的格式說明
要注意的一點,一般一個包,裡面會包含 Source 和 Binary.
Header
.spec 檔是挺重要的檔案,有幾個 header,咱們必得放進去:
Summary:放一行簡單的說明
Name:放包的名稱
Version:放包的版本
Release:放包的釋出編號
Copyright:放包的版權宣告,譬如:GPL,BSD,MIT,public domain, distributable或 commerical
Group:包的分類,參考後面的附表一
Source:來源檔案的檔名,可以有多個,多個的時候,則用 Source0, Source1…
Patch:修正包的檔名,同樣地,可以有多個,多個的時候,用 Patch0, Patch1…
[*]BuildRoot:指定一個安裝路徑,通常命名為 name-root.
description 則可有可無~,建議是放上去,作一個詳細的說明,因為 Summary 提供的說明只有一行而已
Sections
prep:這個 section 一開始通常是放 %setup,%setup會先把SOURCES裡面的包解開放到 BUILD 目錄,再切換到該目錄下.再者就是 %patch,可以讓你對源碼作 patch 的動作,如果你前面的 header 有多個 patch 檔,那麼這裡只要用 %patch0 -p1 %patch1 -p2 就行了.
build:這個 section 則是建立.我參考 thttpd.spec, thttpd.spec 在這裡是放 configure 的動作,我認為此處也可以順便做 make的動作,反正都已經解開也patch過,Makefile 也出來了.不過一般似乎都是已經先 make 好了.
install:這個 section 就是放安裝的動作了,在這裡除了用笨方法 %{__mkdir}, install..等一些 shell script 去安裝之外,還可以用 make install 去安裝,這正好證實了我的推論,在 build section 中可以用 make.
clean:把之前在 prep section 解開放到 BUILD 的目錄給移除掉.
可有可無的Sections
pre:作安裝前的準備,yes, 就是 On_BeforeInstall
post:作安裝後的處置, yes, 就是 On_AfterInstall
preun:作移除安裝前的準備, 嗯, 就是 On_BeforeUnInstall
postun:作移除安裝後的擦屁股動作,就是 On_AfterUnInstall
files Section
這是一個很重要的 section, 他記錄了這個包有放什麼檔案到什麼地方.
簡單的用法就是寫
/usr/sbin/lcdctld
直接以絕對路徑+檔名指明,當然這樣子很累啦.
rpm 包有提供一些 macro 讓你省去這樣子的功夫.
%doc
%config
%dir
%defattr
%files
%doc 的位置是 /usr/doc/name-xx.xx.xx-xx, 你可以這麼用: %doc README INSTALL HISTORY ChangeLog
%config 就是指一些設定檔,例如: /etc/xxxxxx
%dir 表示特定屬於這個包的目錄,舉例來說就是 /etc/httpd/
%defattr 設定檔案的屬性,語法是 %defattr (mode,owner,group) filename
%files 看不懂,我猜應該跟直接列出檔名是一樣的
不過我看 thttpd.spec, %dir 可以直接用 /etc/httpd 來代替,前面不需要加上%dir, %defattr 則可以用 %attr 來代替.
changelog Section
這主要是讓維護包的人,可以放歷史紀錄,格式是
* Fri Dec 14 2001 Ellery Tsai
– do nothing, but eat, drink, sleep.
打包
打包的語法是:
rpm -ba lcdctld-1.0.0.spec

rpm -bb lcdctld-1.0.0.spec
ba 跟 bb 的差別是,ba 會連 source 和 binary 都打包,結果會產生兩個 rpm ,而 bb 只包 binary,只出現一個 rpm.
其他還有一些用法:
列出 files section 的檔案
rpm -bl lcdctld-1.0.0.spec
只做某些步驟,我猜想是便於內部測試用:
rpm -bc lcdctld-1.0.0.spec
rpm -bi lcdctld-1.0.0.spec
rpm -bp lcdctld-1.0.0.spec
建議
建議最好是先到 SOURCES 去手動一步一步來
先解開 tar 檔,並且先複製一份,並更名為 name-xx.xx.xx.orig,這主要是為了方便製作 patch 用.接著,依照說明去作:
patch
configure
make
make install
在 make install 的時候,順便把檔案位置都記下來,然後再把位置放到 .spec 檔中的 files section 裡面.
如果在前面幾個步驟,有需要修正一些東西,那麼表示你要做一個 patch 檔
作 patch 檔的語法如下:
diff -uNr name-xx.xx.xx.orig name-xx.xx.xx > name-xx.xx.xx-linux.patch
接著到 .spec 檔裡面的 patch header, 作修正.
最後
Yes, That’s All.
資料來源:RPM HOW-TO
此份文件在 \\xserver\linux\Datasheet\Linux-HOWTOs\English_pdf 這裡有.
附表一:
Amusements/Games
Amusements/Graphics
Applications/Archiving
Applications/Communications
Applications/Databases
Applications/Editors
Applications/Emulators
Applications/Engineering
Applications/File
Applications/Internet
Applications/Multimedia
Applications/Productivity
Applications/Publishing
Applications/System
Applications/Text
Development/Debuggers
Development/Languages
Development/Libraries
Development/System
Development/Tools
Documentation
System Environment/Base
System Environment/Daemons
System Environment/Kernel
System Environment/Libraries
System Environment/Shells
User Interface/Desktops
User Interface/X
User Interface/X Hardware Support

VFP7研討會後報告

我想這個研討會對各位應該是沒有什麼關係才對~~
為了避免浪費大家的時間,我就在這裡做個簡短報告,如果有興趣摸摸看的話,再私下來找我~
首先我假設各位已經使用過 6.0 了~
7.0 與 6.0 其實差別性不大,幾個重點:
1. UI 加強,以前沒有 IntelliSense,現在有了,什麼是 IntelliSense, 簡單的說,就是像VB一樣,我隨便打個 rsCustomer. (假設rsCustomer是adodb.recordset),VB 就會很貼心的跑出一狗票方法跟屬性讓你選.
2. COM 加強,之前的版本建立 COM 物件,實際上並沒有實做出所有應有的 Interface,以及建立標準的 IDL (Interface Definition Language),所以在某些特定的情況有問題.現在除了遵循標準之外,也更加強了控制 COM 物件的能力.
3. XML 與 Web Service, 提供了三個函數來支援 XML 與 Cursor 之間的轉換,並且多了一個精靈來產生 Web Service,這個精靈實際上是應用 SOAP ToolKit 2.0 sp2 來產生 Web Service 的.
4. Database 提供 Event 以及 OLEDB Provider, 這個我認為不是很重要,因為現在用 vfp 資料庫的人越來越少了.
說完以上幾點,大概就沒什麼了,也因此,這次的研討論,前面廢話一陣之後,直接就介紹 XML 的三個函數與 Web Service 精靈,介紹的範例寫的不錯,令人能一目了然.
會畢,大家提出一些問題~有兩個問題是讓我比較印象深刻的
1.關於 Microsoft 是否繼續推廣 VFP 的問題,基本上,我覺得問的人很笨,因為上課的人並不是微軟的人,就算是,他也沒辦法回答.我個人的答案是,目前桌上型資料庫的市場已經是 VFP 跟 ACCESS 獨大了,所有的敵人都已經死光光(Paradox,dBase,Clipper…等),他根本不需要再推廣,否則等於是拿石頭砸自己的腳.
2.有個傢伙問售後服務,他說能不能主動寄發 Service Pack 給客戶,或者在購買VFP的時候,能主動附上目前最新的 Service Pack. 否則的話,光華賣的補帖服務還比微軟好,因為補帖出貨的時候,連 Service Pack 都燒進去.那幹?還用正版.聽到這裡,深深覺得售後服務的重要性.
會後,填完問卷,還領了一張資源光碟,我還沒有看,待會我會放到 Server 上去.
報告完畢.