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、Detached、Removed。
  • 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.*網域的封包均丟棄

2008年3月30日 星期日

javac 參數

javac -d somedir/ some.java是指定class的輸出目錄
javac -cp .:dir:anotherdir some.java 指定classpath
javac *.java 一次編譯所有java檔

2008年3月27日 星期四

java 的 DateFormat

//解析輸入日期 (轉換 MM/dd/yyyy 成 yyyy-MM-dd)
DateFormat formatIn = new SimpleDateFormat("MM/dd/yyyy");
DateFormat formatOut = new SimpleDateFormat("yyyy-MM-dd");
Date datefrom = formatIn.parse(from);
Date dateend = formatIn.parse(end);
formatedfrom = formatOut.format(datefrom);
formatedend = formatOut.format(dateend);

2008年3月24日 星期一

html input 空字串問題

html中的from使用的input元素
<input name="in" type="text">
如果沒有輸入任何值的話,submit後
由jsp的out.getParameter("in")取到的值,
將會是"" <-空字串,而不是null。
寫jsp時,需特別注意。

2008年3月17日 星期一

使tomcat完全支援中文

只要在/var/lib/tomcat5.5/conf/server.xml
下的Connector tag加上一個屬性,URIEncoding="UTF8"
即可,
例如:
<Connector port="8180" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>

JSPWiki經由這個設定,即可使用中文做為文件名稱而不會顯示成亂碼。

2008年3月14日 星期五

jsp輸出xml

假如想要以jsp輸出xml到browser,如:
1 <%
2 out.println("<?xml version=\"1.0\"?>");
3 out.println("<test>");
4 out.println("abcd");
5 out.println("</test>");
6 %>
這樣還不夠,只會顯示abcd
還必須加上
7 <%@page contentType="application/xml" %>
讓browser知道這是一個xml而不是jsp

JspWiki設定

jspwiki的安裝在tomcat下的webapp完成後
就需要進行一些設定
主要的是WEB-INF/jspwiki.properties用來設定資料存放位置
及WEB-INF/jspwiki.policy用來設定用戶權限

2008年3月13日 星期四

log4j

在java程式裡如果log4j的設定檔log4j.properties
沒有放在程式的ClassPath下
則log4j會產生Warring

要指定log4j的設定檔位置 (假設放在java執行目錄下的conf/log4j.properties)
只要在程式開始處加入
PropertyConfigurator.configure("conf/log4j.properties");
即可。

2008年3月7日 星期五

hwclock

如果#hwclock -w 出現以下錯誤
select() to /dev/rtc to wait for clock tick timed out
可以試試看使用 --directisa參數
#hwclock -w --directisa來進行寫入時間到BIOS的動作

同樣的,要看看BIOS上的時間為何,只要下
#hwclock -r --directisa即可

JSPWiki in Debian 安裝記實

首先:
到http://www.jspwiki.org/下載JSPWiki
我的版本是JSPWiki-2.6.1-bin.zip
再來以aptitude安裝tomcat5.5套件
ps.非tomcat5而是tomcat5.5

修改tomcat5.5啟動配置檔
sudo vim /etc/default/tomcat5.5
設定
JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
TOMCATS_SECURITY=no

然後:
解壓縮JSPWiki-2.6.1-bin.zip
7z x JSPWiki-2.6.1-bin.zip
就會產生JSPWiki/資料夾

建立/home/muchu1983/public_html/wikidata/的資料夾
並將JSPWiki/JSPWiki-corepages.zip copy到wikidata/資料夾下
解壓縮JSPWiki-corepages.zip
7z x JSPWiki-corepages.zip
更改wikidata/的權限
sudo chown tomcat55 wikidata -R
sudo chgrp nogroup wikidata -R

也將JSPWiki/JSPWiki.war copy到tomcat webapps下
sudo cp JSPWiki/JSPWiki.war /var/lib/tomcat5.5/webapps/
過一下子tomcat會自動將JSPWiki.war解壓,產生webapps/JSPWiki/資料夾
編輯webapps/JSPWiki/WEB-INF/jspwiki.properties檔案
更改以下幾行
jspwiki.pageProvider =VersioningFileProvider
jspwiki.fileSystemProvider.pageDir =/home/muchu1983/public_html/wikidata
jspwiki.basicAttachmentProvider.storageDir =/home/muchu1983/public_html/wikidata
儲存

以browser連到http://localhost:8180/JSPWiki/Install.jsp
直接按下Configure按鈕進行設定,
之後會亂數產生admin帳號的預設密碼,copy密碼
再連到http://localhost:8180/JSPWiki/就可以admin登入

2008年3月6日 星期四

jetty的request/response

jetty自己實做了request及response物件
來進行jsp/servlet的運作,
但jetty的handle方法是將request/response
以標準的HttpServletRequest/HttpServletResponse傳進來
所以如果要使用jetty新增或加強的功能就要做降轉(down cast)的動作:
Request base_request = request instanceof Request?(Request)request:HttpConnection.getCurrentConnection().getRequest();
Response base_request = response instanceof Response?(Response)request:HttpConnection.getCurrentConnection().getResponse();

例如:如果handler要阻止request繼續往下一個hadler傳輸,則可以handle方法加上
Request base_request = (httprequest instanceof Request) ? (Request)httprequest:HttpConnection.getCurrentConnection().getRequest();
base_request.setHandled(true);

WEB-INF\classes

寫jsp的webapp時
如果所寫的jsp有用到自定的class或是servlet
要放在webroot/WEB-INF/classes資料夾內
並且要依據class的package放好
則jetty會自動的把WEB-INF\classes設為classpath

2008年3月5日 星期三

tomcat in Debian

在debian上安裝好tomcate5套件後
使用http://localhost:8180/進行連線
有別於以往大多數平台上是以8080 port來連線

2008年3月2日 星期日

getPackage()

this.getClass().getPackage()
這個方法會呼叫到class的所屬ClassLoader之getPackage(String name)
而如果ClassLoader是特殊客製的,必須要記得在實作defineClass()這個方法時,
適時的呼叫definePackage(pkgname,null,null,null,.....);這個方法
ClassLoader本身有維護一個HashMap
definePackae()會以對應的pkgname產生一個Packae物件實例,存入這一個HashMap
如此一來客製的ClassLoader的getPackage(String name)方法才會正確運作,
否則只會傳回null。