2008年4月20日 星期日

ie4linux 新版安裝修正

轉載自:http://twntwn.info/blog/ajer001/archives/1390
現在我們已經進入 IEs4Linux 安裝檔的目錄了,我安裝的版本是 2.99.0,這個版本有一些問題,我們得修改兩個檔案才能繼續安裝。首先我們要修改的是 /lib/messages.txt 檔,我們用文字編輯器開啟它
gedit ./lib/messages.txt
然後將第 19 行從
tw . zhTW TW
改成
zh tw zhTW TW
並存檔。

接著修改 /lib/functions.sh 檔,一樣的我們用文字編輯器開啟它
gedit ./lib/functions.sh
然後將第 98 行從
pid=$(wget -q -b -t 1 -T 5 -U "$useragent" -o /dev/null $URL $WGETFLAGS -O "$file" | sed -e 's/[^0-9]//g')
改成
pid=$(LANG=C wget -q -b -t 1 -T 5 -U "$useragent" -o /dev/null $URL $WGETFLAGS -O "$file" | sed -e 's/[^0-9]//g')
並存檔。

修改完畢,我們可以繼續安裝了。只要下這道指令就行囉~
./ies4linux
祝各位順利!

2008年4月16日 星期三

Hibernate 物件周期

轉載自:http://caterpillar.onlyfun.net/Gossip/HibernateGossip/EntityObjectLifeCycle.html

Hibernate中的實體物件可以分為四種狀態:Transient、 Persistent、DetachedRemoved
  • Transient
當您直接使用new創建出物件,例如在之前的例子中, User類別所衍生出之物件,在還沒有使用save()之前都是Transient物件,這些物件還沒有與資料庫發生任何的關係,不對應於資料庫中的任一筆資料。

  • Persistent
當物件與資料庫中的資料有對應關係,並且與Session 實例有關聯而Session 實例尚未關閉(close),則它是在Persistent狀態,具體而言,如果您將Transient狀態的物件使用Session的save()方法 加以儲存,或是使用Hibernate從資料庫載入資料並封裝為物件(例如使用get()、load()等查詢物件的相關方法),則該物件為Persistent狀態。

Persistent狀態的物件對應於資料庫中的一筆資料,物件的id值與資料的主鍵值相同,並且Session實例尚未失效,在這期間您對物件的任何狀 態變動,在Session實例關閉(close)或Transaction實例執行commit()之後,資料庫中對應的資料也會跟著更新。

如果您將Session實例關閉(close),則Persistent狀態的物件會成為Detached狀態。

如果您使用Session的實例delete()方法刪除資料,Persistent狀態的物件由於失去了對應的資料,則它會成為Transient狀 態。
  • Detached
Detached狀態的物件,其id與資料庫的主鍵值對 應,但脫離Session實例 的管理,例如在使用load()方法查詢到資料並封裝為物件之後,將Session實例關閉,則物件由Persistent狀態變為Detached狀 態,Detached狀態的物件之任何屬性變動,不會對資料庫中的資料造成任何的影響。

Detached狀態的物件可以使用update()方法使之與資料庫中的對應資料再度發生關聯,此時Detached狀態的物件會變為 Persistent狀態。

Detached物件,若不再被任何名稱參考,則在適當的時候將被垃圾收集所回收。

  • Removed
如果您使用Session的實例delete()或remove()方法刪除資料,Persistent狀態的物件由於失去了對應的資料,則它會成為Removed狀 態,一個成為Removed狀態的物件不應該被繼續重用,您應該釋放任何參考至它的名稱,讓該物件在適當的時候被垃圾回收。

簡單的說,Transient與Detached狀態的物件未受Hibernate持久層管理員管理,對這兩個狀態的物件作任何屬性變動,不會對資料庫中 的資料有任何的影響,而Persistent狀態的物件受Hibernate持久層管理,對物件的屬性變動,在Session實例關閉(close)或 Transaction實例執行commit()之後,資料庫中對應的資料也會跟著更新。

Transient與Detached狀態的物件是非管 理狀態,而Persistent狀態的物件是管 理狀態, 又稱為Persistent Object,其與一個Persistence Context 關聯。

在物件為Persistent時,如果物件的屬性發生變化,並且尚未提交之前,物件所攜帶的資料稱之為Dirty Data,Hibernate會在Persistence Context維護物件的最近讀取版本,並在資料提交時檢查兩個版本的屬性是否有變化,如果有的話,則將資料庫中的資料進行更 新


flag 設計

使用 flag 來進行判斷程式的狀態時
flag 應該是 1、2、4、…、2^n
且不可以使用 0
因為:
1.當x要加入flag時,用的運算是x or 該flag,而 0 or 任何數 都不會有作用。
2.當x要移除flag時,用的運算是x and 該flag的補數,0的補數是1111…111,進行and也不會有作用
3.當x要判斷flag是否存在時,用的運算是x and該flag是否會等於該flag,而0 and任何數均為 0也無法判斷。

2008年4月11日 星期五

debian 網路修復

debian linux 下常用的網路修復指令
重啟網路卡:
#ifconfig eth0 down && ifconfig eth0 up
重啟網路服務
#/etc/init.d/networking restart
重新由dhcp取得ip
#dhclient
重新ADSL連線
#pppoeconf

2008年4月10日 星期四

subversion

安裝與設定:
在debian上使用svn只要安裝subversion套件
並建立svn group
把所有想要使用svn的帳號(user)均加入到svn group下
使用svnadmin create 指令在想要的路徑下建立svn的repository檔案庫
並以chgrp把檔案庫的擁有者群組設為svn
之後即可在遠端使用svn+ssh://user@host/path_to_repository來使用檔案庫

備份的方法:
另外加裝subversion-tools套件
並使用svn-hot-backup some_repos/ backup_path/
即可備份檔案庫

2008年4月3日 星期四

jetty WebAppDeployer

jetty 的WebAppDeployer可以指定一個特定的目錄,
做為佈署webapp的位置,
webapp 可以是一整個含有jsp、servlet、web.xml的資料夾,
也可以是一個.war的包裝檔,
jetty啟動時會去指定的 scan 一但,找到war file或webapp,
就會將他註冊到server的ContextHandlerCollection下,
jetty.xml的設定如下
<Configure class="org.mortbay.jetty.Server" id="server">
<!-- Deployer 設定 -->
<Call name="addLifeCycle">
<Arg>
<New class="org.mortbay.jetty.deployer.WebAppDeployer">
<Set name="contexts"><Ref id="contexts"/></Set>
<Set name="webAppDir">./deployer</Set>
<Set name="parentLoaderPriority">false</Set>
<Set name="extract">true</Set>
<Set name="allowDuplicates">false</Set>
</New>
</Arg>
</Call>
</Configure>

其中的./deployer是Deployer在啟動時會去scan的佈署目錄
而contexts則是server.setHandlers(new Handler[]{contexts , new DefaultHandler()})中的
ContextHandlerCollection物件。HandlerList也是ContextHandlerCollection其中一個子類別

2008年4月2日 星期三

linux上的防火牆 iptables

iptables 的簡圖 (from 鳥哥)
iptables防火牆的概念是:
當封包送來時,iptables會根據事先定義好的table,
一條一條規則逐一比對,如果符合其中一條,
就允許進入主機,否則就進行下一條規則的比對,
一但所有規則都不符合,則會進行預設動作,
預設動作也稱為Policy,一般有下列幾種:
接受 (ACCEPT) 、
丟棄 (DROP) 、
轉送 (FORWARD)









iptables 的簡圖 (from 鳥哥),
iptables的規則都記錄在tables裡,
常用的有兩個表格,filter及nat。

filter主要是設定有關進出本機的封包:
由 filter.INPUT 規則鍊限制進入本機的封包;
由 filter.OUTPUT 規則鍊限制送出本機的封包。

nat主要是設定要進出本機後端的主機的封包
當本機要做為防火牆主機時才有用到
nat.PREROUTING 規則鍊處理 路由前的封包
nat.POSTROUTING 規則鍊處理路由後的封包

iptables 指令用法:

iptables -L -n 顯示filter規則鍊下的所有規則
iptables -L -n -t nat 顯示nat規則鍊下的所有規則

iptables -P INPUT DROP 設定fliter.INPUT 規則鍊的預設動作為 DROP (丟棄)
iptables -t nat -P INPUT ACCEPT 設定nat.INPUT 規則鍊的預設動作為 ACCEPT (接受)

iptables -A INPUT -i lo -j ACCEPT filter.INPUT加入規則,所有來自lo的封包均接受

iptables -A INPUT -i eth0 -s 192.168.0.9 -j DROP eth0收到的所有來自192.168.0.9的封包均丟棄

iptables -I OUTPUT -d 140.126.21.0/24 -j DROP本機所有要送往140.126.21.*網域的封包均丟棄