以xcopy作備份

@echo off
rem
rem 先取得遠端信任,並建立網路磁碟機
rem
net use z: \\bserver\backup password /user:username
rem
rem 進行複製
rem /e 連子目錄也一起複製,包括空目錄
rem /v 複製完成,驗證
rem /h 連隱藏檔跟系統檔也一起複製
rem /z 在可重新開始的模式中複製網路檔案。
rem /y 遇到重複,不詢問,直接複製
rem /d:m-d-y 可加上日期,表示 y 年 m 月 d 日以後的檔案才複製
rem /i 假設目的端指定的名稱不存在,則自動建立為目錄
rem
rem 備份列表可以在下面繼續新增
rem
xcopy /e /v /h /z /y /i d:\snitzforums z:\snitzforums
xcopy /e /v /h /z /y /i d:\public z:\public

五專同學 – LionP

為什麼要稱他為 LionP, 因為他是獅子座,姓的第一個英文字母正好是P.在這個虛擬的網路世界中,暫且就先這麼稱呼吧.
在我記憶中,他做過最驚世駭俗的事,莫過於某次小考,他承認作弊吧.那次是電子邏輯的小考,考題還好,我記得 LionP 跟隔壁同學趁老師不注意時交換答案,老師似乎發覺了,但不確定,於是叫全班停筆,試圖找出兇手,班上沉默了許久,LionP這時很驚人地站了起來,說他作弊,老師就請他出去,LionP很瀟灑的就拿著書包出去了.班上同學,後來都覺得不值,反正老師又不知道是誰,也沒辦法拿我們怎麼樣.之後,LionP這一科被當掉~真的是很酷~
忘記是幾年級的時候,他的腿骨折受傷,花了整整一個學期,才恢復正常.也因此無法打籃球.他非常熱愛打籃球,也很喜歡聽英文歌.近代史,日本戰國史也非常在行,在考預官的時候,他幾乎沒看什麼書,就輕鬆考上,真的是很厲害.
拜他所賜,我也很喜歡日本戰國史,對織田信長,武田信玄,上杉謙信,毛利元就…等名將,如數家珍.
有一陣子,他在公館大亞打工的時候,遇到一位老師,教他紫微斗數,對此非常熱心,曾為班上一些同學排過命盤.我也給他排過,我忘記命盤格局的名字了,大致的意思是我屬於比較孤僻的人,不善於人交往.我覺得還蠻準的,不過我也相信自己的命運是可以自己改變的.
也有一陣子,他認識一個崇光女中的小女生(應該是崇光吧),交往了一陣子,後來則不知道怎麼了.
喔,對了,他也是一個極佳的牌搭子,我們下課的時候,常常在一起打橋牌.
專五的時候,我要去教務處申請成績單,因為要一起去打電動的緣故,於是就請他陪我一起去.到了教務處,我害羞不敢開口,他看不過去,就幫我開口問了.而我,居然連說謝謝都不好意思.這件事情,我一直銘記於心.後來的日子了,我常以此事為誡,告訴自己要大膽些,不要怕”問”.
五專以後,他考到雄技,到高雄唸書去了,也認識了一個女友.當兵時,則是當傘兵,雖然剛下部隊時,太操而使得腿再度疲勞性骨折,但也很順利的退伍了.
之後到了長榮做事,然後就訂婚.
接著~~就消失了~~
記得是兩三年前吧,我試圖打電話跟他聯絡,但卻找不到人,在此之前,雖然找不到人,也還能和他母親聊聊,這次連他的家人都找不到,就這麼消失了.
我知道他的父親或母親的老家是在新竹,而他的女友兼未婚妻則是住在高雄,因此我猜想他是舉家搬到新竹或高雄去了.
叨叨絮絮,零零散散的寫了這些,謝謝他給我的幫助,也藉此拋磚引玉,也許可以藉此找到他來參加今年的同學會~^_^

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 的值~