下載:
http://www.virtualbox.org/wiki/Downloads
安裝:
#dpkg --install virtualbox_1.6.2-31466_Debian_etch_i386.deb
加入群組:
#usermod -G vboxusers -a muchu1983
設定Host key:
檔案 -> 偏好設定 -> 輸入
複製一份.vdi硬體檔:
VBoxManage clonevdi /mnt/hdb1/debian-vbox.vdi /mnt/hdb1/debian-vbox-v2.vdi
複製完成即可再建立一台新的虛擬機來使用新的硬碟檔
虛擬機之間的網路互通:
啟用虛擬機的新網卡eth1並設定為掛附到內部網路及給定相同的network name
再分別設定各別虛擬機的eth1 ip (例:192.168.1.100 & 192.168.1.200)
#ifconfig eth1 192.168.1.100
主端分享資料夾給客端電腦:
需先安裝客端額外功能 -
#sh /media/cdrom0/VboxLinuxAdditions.run
在主端vbox程式的 設定值 -> 分享資料夾 -> 加入新的分享資料夾
啟動客端電腦,mount 分享資料夾
#mount -t vboxsf share /mnt/share
2008年7月21日 星期一
2008年7月12日 星期六
java Thread wait() notify() notifyAll() 運作
.使用wait()、notify()、notifyAll()方法前,執行緒必需先獲得物
件鎖,也就是說,執行緒必需是處理物件的synchronized區段
中,該執行緒是處於Running狀態的。
.當執行緒在物件的synchronized區段中碰到了wait()方法,該執
行緒就必需釋放出該物件的Lock,並進入該物件的wait pool中
等待。
.執行的過程式可能會有多個執行緒因為碰到wait()方法而在wait
pool中等待。
..此時。如果某個使用該物件的執行緒碰到了notify()方法,那麼在
物件的wait pool中第一個碰到了wait()方法的執行緒就會被移到該
物件的lock pool中繼續等待取得物件鎖。
..而如果某個使用該物件的執行緒碰到了notifyAll()方法,那麼在物
件的wait pool中所有的執行緒就會被移到該物件的lock pool中,
而優先權最高的執行緒會先取得物件鎖。
件鎖,也就是說,執行緒必需是處理物件的synchronized區段
中,該執行緒是處於Running狀態的。
.當執行緒在物件的synchronized區段中碰到了wait()方法,該執
行緒就必需釋放出該物件的Lock,並進入該物件的wait pool中
等待。
.執行的過程式可能會有多個執行緒因為碰到wait()方法而在wait
pool中等待。
..此時。如果某個使用該物件的執行緒碰到了notify()方法,那麼在
物件的wait pool中第一個碰到了wait()方法的執行緒就會被移到該
物件的lock pool中繼續等待取得物件鎖。
..而如果某個使用該物件的執行緒碰到了notifyAll()方法,那麼在物
件的wait pool中所有的執行緒就會被移到該物件的lock pool中,
而優先權最高的執行緒會先取得物件鎖。
2008年7月8日 星期二
Jaas Login module flag意義
1) Required - TheLoginModuleis required to succeed.
If it succeeds or fails, authentication still continues
to proceed down theLoginModulelist.
此LoginModule一定要驗証成功整個Login程序才會通過,無論驗証成敗,均會繼續
進行下一個LoginModule驗証。
2) Requisite - TheLoginModuleis required to succeed.
If it succeeds, authentication continues down the
LoginModulelist. If it fails,
control immediately returns to the application
(authentication does not proceed down the
LoginModulelist).
此LoginModule一定要驗証成功整個Login程序才會通過,驗証成功,則繼續進行
下一個LoginModule驗証,若驗証失敗,則不繼續進行下一個LoginModule驗証,
驗証程式完成。
3) Sufficient - TheLoginModuleis not required to
succeed. If it does succeed, control immediately
returns to the application (authentication does not
proceed down theLoginModulelist).
If it fails, authentication continues down the
LoginModulelist.
此LoginModule不一定要驗証成功,若驗証成功,則繼續進行則不繼續進行下一個
LoginModule驗証,若驗証失敗,則繼續進行下一個LoginModule驗証,
4) Optional - TheLoginModuleis not required to
succeed. If it succeeds or fails,
authentication still continues to proceed down the
LoginModulelist.
此LoginModule不一定要驗証成功,無論驗証成敗,均會進行下一個LoginModule驗証。
2008年7月6日 星期日
2008年6月30日 星期一
xfce新增圖示主題
先到http://www.xfce-look.org/下載想要的圖示
例如XXX.tar.gz
移到~/icons/並解壓縮開來 (如果沒有icons資料夾就自行mkdir)
~/icons/XXX/
即可在 Xfce設定管理程式 -> 使用者介面 -> 圖示主題 下
看到剛新增的圖示主題
例如XXX.tar.gz
移到~/icons/並解壓縮開來 (如果沒有icons資料夾就自行mkdir)
~/icons/XXX/
即可在 Xfce設定管理程式 -> 使用者介面 -> 圖示主題 下
看到剛新增的圖示主題
2008年6月20日 星期五
JCR研究:jackrabbit
一。使用 svn checkout出jackrabbit的src code
svn co http://svn.apache.org/repos/asf/jackrabbit/trunk jackrabbit
二。進到checkout出來的根目錄,使用 maven 進行build
mvn install
三。完成建置後 maven 會在家目錄產生jackrabbit的jars:
${home}\.maven\repository\org.apache.jackrabbit\jars\jackrabbit-*-SNAPSHOT.jar
四。在classpath引入必要的jars
jcr的有:
jcr-1.0.jar
jackrabbit的有:
jackrabbit-api-1.5-SNAPSHOT.jar
jackrabbit-core-1.5-SNAPSHOT.jar
jackrabbit-jcr-commons-1.5-SNAPSHOT.jar
jackrabbit-spi-1.5-SNAPSHOT.jar
jackrabbit-spi-commons-1.5-SNAPSHOT.jar
jackrabbit-text-extractors-1.5-SNAPSHOT.jar
slf4j的有:
slf4j-api-1.3.0.jar
slf4j-simple-1.5.2.jar
其他:
commons-collections-3.1.jar
concurrent-1.3.4.jar
derby-10.2.1.6.jar
commons-io-1.4.jar
lucene-core-2.2.0.jar
PDFBox-0.7.3.jar
poi-3.0.2-FINAL-20080204.jar
tm-extractors-0.4.jar
poi-scratchpad-3.0.2-FINAL-20080204.jar
poi-contrib-3.0.2-FINAL-20080204.jar
五。第一個登入程式FirstHop
public static void main(String[] args) throws Exception {
// local repository
// System.setProperty("org.apache.jackrabbit.repository.home", "D:/jackrabbit-repos");
// Repository repository = new TransientRepository();
// http rmi repository
Repository repository = new URLRemoteRepository("http://192.168.1.57:-1/jackrabbit-webapp-1.5-SNAPSHOT/rmi");
// rmi repository
// Repository repository = new RMIRemoteRepository("//localhost/jackrabbit.repository");
Session session = repository.login(new SimpleCredentials("transtep", "".toCharArray()));
try {
String user = session.getUserID();
String name = repository.getDescriptor(Repository.REP_NAME_DESC);
System.out.println("Logged in as " + user + " to a " + name + " repository.");
Workspace workspace = session.getWorkspace();
Node rootNode = session.getRootNode();
// // 儲存資料
workspace.getNamespaceRegistry().registerNamespace("xsignage", "http://www.transtep.com/xsignage/1.0");
Node imageNode = rootNode.addNode("xsignage:image");
imageNode.setProperty("xsignage:type", "圖片");
imageNode.setProperty("xsignage:read", true);
imageNode.setProperty("xsignage:write", true);
Node jpegImage = imageNode.addNode("xsignage:jpeg");
jpegImage.setProperty("xsignage:yuffie", new FileInputStream(new File("./尤菲.jpg")));
session.save();
// 取出資料
Node imageNode2 = rootNode.getNode("xsignage:image");
System.out.println("type: " + imageNode2.getProperty("xsignage:type").getString());
System.out.println("read: " + imageNode2.getProperty("xsignage:read").getString());
System.out.println("write: " + imageNode2.getProperty("xsignage:write").getString());
Node jpegImage2 = imageNode2.getNode("xsignage:jpeg");
InputStream ins = jpegImage2.getProperty("xsignage:yuffie").getStream();
FileOutputStream pos = new FileOutputStream("./yuffie.jpg");
int read = -1;
while ((read = ins.read()) != -1) {
pos.write(read);
}
} finally {
session.logout();
}
}
svn co http://svn.apache.org/repos/asf/jackrabbit/trunk jackrabbit
二。進到checkout出來的根目錄,使用 maven 進行build
mvn install
三。完成建置後 maven 會在家目錄產生jackrabbit的jars:
${home}\.maven\repository\org.apache.jackrabbit\jars\jackrabbit-*-SNAPSHOT.jar
四。在classpath引入必要的jars
jcr的有:
jcr-1.0.jar
jackrabbit的有:
jackrabbit-api-1.5-SNAPSHOT.jar
jackrabbit-core-1.5-SNAPSHOT.jar
jackrabbit-jcr-commons-1.5-SNAPSHOT.jar
jackrabbit-spi-1.5-SNAPSHOT.jar
jackrabbit-spi-commons-1.5-SNAPSHOT.jar
jackrabbit-text-extractors-1.5-SNAPSHOT.jar
slf4j的有:
slf4j-api-1.3.0.jar
slf4j-simple-1.5.2.jar
其他:
commons-collections-3.1.jar
concurrent-1.3.4.jar
derby-10.2.1.6.jar
commons-io-1.4.jar
lucene-core-2.2.0.jar
PDFBox-0.7.3.jar
poi-3.0.2-FINAL-20080204.jar
tm-extractors-0.4.jar
poi-scratchpad-3.0.2-FINAL-20080204.jar
poi-contrib-3.0.2-FINAL-20080204.jar
五。第一個登入程式FirstHop
public static void main(String[] args) throws Exception {
// local repository
// System.setProperty("org.apache.jackrabbit.repository.home", "D:/jackrabbit-repos");
// Repository repository = new TransientRepository();
// http rmi repository
Repository repository = new URLRemoteRepository("http://192.168.1.57:-1/jackrabbit-webapp-1.5-SNAPSHOT/rmi");
// rmi repository
// Repository repository = new RMIRemoteRepository("//localhost/jackrabbit.repository");
Session session = repository.login(new SimpleCredentials("transtep", "".toCharArray()));
try {
String user = session.getUserID();
String name = repository.getDescriptor(Repository.REP_NAME_DESC);
System.out.println("Logged in as " + user + " to a " + name + " repository.");
Workspace workspace = session.getWorkspace();
Node rootNode = session.getRootNode();
// // 儲存資料
workspace.getNamespaceRegistry().registerNamespace("xsignage", "http://www.transtep.com/xsignage/1.0");
Node imageNode = rootNode.addNode("xsignage:image");
imageNode.setProperty("xsignage:type", "圖片");
imageNode.setProperty("xsignage:read", true);
imageNode.setProperty("xsignage:write", true);
Node jpegImage = imageNode.addNode("xsignage:jpeg");
jpegImage.setProperty("xsignage:yuffie", new FileInputStream(new File("./尤菲.jpg")));
session.save();
// 取出資料
Node imageNode2 = rootNode.getNode("xsignage:image");
System.out.println("type: " + imageNode2.getProperty("xsignage:type").getString());
System.out.println("read: " + imageNode2.getProperty("xsignage:read").getString());
System.out.println("write: " + imageNode2.getProperty("xsignage:write").getString());
Node jpegImage2 = imageNode2.getNode("xsignage:jpeg");
InputStream ins = jpegImage2.getProperty("xsignage:yuffie").getStream();
FileOutputStream pos = new FileOutputStream("./yuffie.jpg");
int read = -1;
while ((read = ins.read()) != -1) {
pos.write(read);
}
} finally {
session.logout();
}
}
2008年6月19日 星期四
從servlet上下載檔案的寫法
public void execute(HttpServletRequest req, HttpServletResponse res) {
PrintWriter out = null;
// 取得輸入參數
String did = req.getParameter("did");
String filename = req.getParameter("filename");
if (did == null) {// 無did
out.print("公文文號(did)為空值 ");
return;
} else if (filename == null) {// 無filename
out.print("檔案名稱(filename)為空值 ");
return;
}
// Dao
DocAttDao docAttDao = DocAttDao.getInstance();
TblDocattId id = new TblDocattId(Integer.parseInt(did), filename);
TblDocatt tblDocAtt = new TblDocatt(id);
tblDocAtt = (TblDocatt) docAttDao.get(tblDocAtt);
try {
res.setHeader("Pragma", ""); // HTTP 1.0
res.setHeader("Cache-Control", ""); // HTTP 1.1
if (tblDocAtt != null) {
String fileurl = tblDocAtt.getUrl();
String agent = req.getHeader("User-Agent");
if (agent.indexOf("MSIE") > -1) {
// encoding filename for IE
filename = URLEncoder.encode(filename, "utf-8");
} else {
filename = new BCodec().encode(filename);
}
// 下載檔案
res.setContentType("application/octet-stream;charset=utf-8");
res.setHeader("Content-Disposition", "attachment; filename = " + filename);
// 打開指定文件的stream
File file = new File(fileurl);
FileInputStream bis = new FileInputStream(file);
OutputStream bos = res.getOutputStream();
byte[] buff = new byte[1024];
int readCount = 0;
readCount = bis.read(buff);
while (readCount != -1) {
bos.write(buff, 0, readCount);
readCount = bis.read(buff);
}
if (bis != null)
bis.close();
if (bos != null)
bos.close();
} else {
res.getWriter().print("無此檔案 ");
}
} catch (Exception e) {
e.printStackTrace();
}
}
PrintWriter out = null;
// 取得輸入參數
String did = req.getParameter("did");
String filename = req.getParameter("filename");
if (did == null) {// 無did
out.print("
return;
} else if (filename == null) {// 無filename
out.print("
return;
}
// Dao
DocAttDao docAttDao = DocAttDao.getInstance();
TblDocattId id = new TblDocattId(Integer.parseInt(did), filename);
TblDocatt tblDocAtt = new TblDocatt(id);
tblDocAtt = (TblDocatt) docAttDao.get(tblDocAtt);
try {
res.setHeader("Pragma", ""); // HTTP 1.0
res.setHeader("Cache-Control", ""); // HTTP 1.1
if (tblDocAtt != null) {
String fileurl = tblDocAtt.getUrl();
String agent = req.getHeader("User-Agent");
if (agent.indexOf("MSIE") > -1) {
// encoding filename for IE
filename = URLEncoder.encode(filename, "utf-8");
} else {
filename = new BCodec().encode(filename);
}
// 下載檔案
res.setContentType("application/octet-stream;charset=utf-8");
res.setHeader("Content-Disposition", "attachment; filename = " + filename);
// 打開指定文件的stream
File file = new File(fileurl);
FileInputStream bis = new FileInputStream(file);
OutputStream bos = res.getOutputStream();
byte[] buff = new byte[1024];
int readCount = 0;
readCount = bis.read(buff);
while (readCount != -1) {
bos.write(buff, 0, readCount);
readCount = bis.read(buff);
}
if (bis != null)
bis.close();
if (bos != null)
bos.close();
} else {
res.getWriter().print("
}
} catch (Exception e) {
e.printStackTrace();
}
}
maven安裝
1.下載maven
2.解壓縮
3.新增M2_HOME環境變數到解壓縮目錄
4.新增M2_HOME\bin 路徑到Path環境變數
5.在console下運行svn --version檢查是否安裝成功
2.解壓縮
3.新增M2_HOME環境變數到解壓縮目錄
4.新增M2_HOME\bin 路徑到Path環境變數
5.在console下運行svn --version檢查是否安裝成功
2008年6月18日 星期三
DTO DAO 物件
[轉載]http://www.javaworld.com.tw/jute/post/view?bid=44&id=85388&tpg=1&ppg=1&sty=3&age=0
DTO:Data Transfer Object
DAO:Data Access Object
由名稱來猜,DTO 就是類似用來作資料傳輸的 Java 類別,個人看過的寫法是寫成有 getter/setter 的 JavaBean
透過 DTO 可以很方便地將資料跨 tier 傳遞,且完整封裝
比如:
Servlet 產生 DTO 物件,將 Client 端輸入的資料透過 setter 寫進 DTO,呼叫企業邏輯處理元件時將 DTO 物件當成參數向後端傳遞
而後端的企業邏輯處理元件就可以透過 DTO 的 getter 取出所需要的資料,並進行運算
若後端運算完畢之後必須要將處理結果傳回 Client 端,也是透過 DTO 的 setter 設定新的值,並回傳給 Servlet
這整個過程當中都只需要 DTO 物件一個參數,像坐捷運一樣從前端一路傳到後端
不需要串一堆參數傳來傳去的,若後端須新增參數時也只需要更改 DTO 及用到相關 getter/setter 的程式碼即可,大部分程式都不需要變動
至於 DAO,是跟資料庫存取有關的類別
我看過的做法是將所有操作資料庫的動作都萃取集中起來寫成特定的公用類別
程式中若需要存取資料庫時一律透過 DAO 處理
這樣的好處是,當資料庫更換時,僅需抽換 DAO 即可,其他程式可以繼續使用,可以將應用程式與資料庫的耦合度降低
DTO:Data Transfer Object
DAO:Data Access Object
由名稱來猜,DTO 就是類似用來作資料傳輸的 Java 類別,個人看過的寫法是寫成有 getter/setter 的 JavaBean
透過 DTO 可以很方便地將資料跨 tier 傳遞,且完整封裝
比如:
Servlet 產生 DTO 物件,將 Client 端輸入的資料透過 setter 寫進 DTO,呼叫企業邏輯處理元件時將 DTO 物件當成參數向後端傳遞
而後端的企業邏輯處理元件就可以透過 DTO 的 getter 取出所需要的資料,並進行運算
若後端運算完畢之後必須要將處理結果傳回 Client 端,也是透過 DTO 的 setter 設定新的值,並回傳給 Servlet
這整個過程當中都只需要 DTO 物件一個參數,像坐捷運一樣從前端一路傳到後端
不需要串一堆參數傳來傳去的,若後端須新增參數時也只需要更改 DTO 及用到相關 getter/setter 的程式碼即可,大部分程式都不需要變動
至於 DAO,是跟資料庫存取有關的類別
我看過的做法是將所有操作資料庫的動作都萃取集中起來寫成特定的公用類別
程式中若需要存取資料庫時一律透過 DAO 處理
這樣的好處是,當資料庫更換時,僅需抽換 DAO 即可,其他程式可以繼續使用,可以將應用程式與資料庫的耦合度降低
linux 下使用藍芽傳輸
1.安裝kdebluetooth套件
2.確定相關服務已啟動
sudo /etc/init.d/dbus start
sudo /etc/init.d/bluetooth start
3.啟動kbluetoothd
4.使用kbtobexclient程式傳送資料到手機上
ps.手機 -> pc 尚未試成功
2.確定相關服務已啟動
sudo /etc/init.d/dbus start
sudo /etc/init.d/bluetooth start
3.啟動kbluetoothd
4.使用kbtobexclient程式傳送資料到手機上
ps.手機 -> pc 尚未試成功
2008年6月13日 星期五
java 的 enum
透過java列舉型別可以很容易的表達一些常數性質的資料
public enum ROLE {
CHANNEL, PLAYLIST, TERMINAL, CONTENT;
};
而使用列舉型別的values()方法可以取出所有的列舉常數陣列
public static void main(String[] args) {
for(ROLE role : ROLE.values()){
System.out.println(role);
}
}
同時列舉型別也可以自定所屬的成員和方法,更可以override toString()方法來自定常數的表示
public enum ROLE {
CHANNEL, PLAYLIST, TERMINAL, CONTENT;
private Integer id;
private String name;
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name + "(" + id + ")";
}
};
使用列舉型自定的方法:
public static void main(String[] args) {
for(ROLE role : ROLE.values()){
role.setId(4);
role.setName("頻道四號");
System.out.println(role);
}
}
public enum ROLE {
CHANNEL, PLAYLIST, TERMINAL, CONTENT;
};
而使用列舉型別的values()方法可以取出所有的列舉常數陣列
public static void main(String[] args) {
for(ROLE role : ROLE.values()){
System.out.println(role);
}
}
同時列舉型別也可以自定所屬的成員和方法,更可以override toString()方法來自定常數的表示
public enum ROLE {
CHANNEL, PLAYLIST, TERMINAL, CONTENT;
private Integer id;
private String name;
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name + "(" + id + ")";
}
};
使用列舉型自定的方法:
public static void main(String[] args) {
for(ROLE role : ROLE.values()){
role.setId(4);
role.setName("頻道四號");
System.out.println(role);
}
}
2008年6月2日 星期一
使用URL post XML給server端的servlet
URL urlobj = new URL(servletUrl);
HttpURLConnection urlconn = (HttpURLConnection) urlobj.openConnection();
urlconn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8"); //<--注意編碼設定
urlconn.setDoOutput(true);
urlconn.setDoInput(true);
urlconn.setRequestMethod("POST");
PrintWriter urlpw = new PrintWriter(new OutputStreamWriter(new DataOutputStream(urlconn.getOutputStream()),"UTF-8")); //<--注意編碼設定
JAXBAgent jaxbAgent = new JAXBAgent();
urlpw.print(jaxbAgent.marshal(reqObj));
urlpw.flush();
urlpw.close();
BufferedReader urlbr = new BufferedReader(new InputStreamReader(new DataInputStream(urlconn.getInputStream()),"UTF-8")); //<--注意編碼設定
StringBuffer strbuf = new StringBuffer();
String line = null;
while (null != (line = urlbr.readLine())) {
strbuf.append(line);
}
Object resObj = jaxbAgent.unmarshal(pkgName, strbuf.toString());
//server端的Servlet也要使用
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
//來設定編碼,才不會有中文字亂碼的問題。
HttpURLConnection urlconn = (HttpURLConnection) urlobj.openConnection();
urlconn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8"); //<--注意編碼設定
urlconn.setDoOutput(true);
urlconn.setDoInput(true);
urlconn.setRequestMethod("POST");
PrintWriter urlpw = new PrintWriter(new OutputStreamWriter(new DataOutputStream(urlconn.getOutputStream()),"UTF-8")); //<--注意編碼設定
JAXBAgent jaxbAgent = new JAXBAgent();
urlpw.print(jaxbAgent.marshal(reqObj));
urlpw.flush();
urlpw.close();
BufferedReader urlbr = new BufferedReader(new InputStreamReader(new DataInputStream(urlconn.getInputStream()),"UTF-8")); //<--注意編碼設定
StringBuffer strbuf = new StringBuffer();
String line = null;
while (null != (line = urlbr.readLine())) {
strbuf.append(line);
}
Object resObj = jaxbAgent.unmarshal(pkgName, strbuf.toString());
//server端的Servlet也要使用
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
//來設定編碼,才不會有中文字亂碼的問題。
2008年5月27日 星期二
ZipException
java.util.zip.ZipException: error in opening zip file
當在java執行時遇到以上的ZipException時,即代表:
有可能在ClassPath下的某一個jar或zip檔是有損壞的,
可能要重新下載lib來進行除錯。
當在java執行時遇到以上的ZipException時,即代表:
有可能在ClassPath下的某一個jar或zip檔是有損壞的,
可能要重新下載lib來進行除錯。
2008年5月23日 星期五
JUnit TestSuite
JUnit只要class有提供public static Test suite()方法即可進行測試
可以建立一個含有suite()的class把所有TestCase歸類在一起,如:
public static Test suite(){
TestSuite suite = new TestSuite("Test the Channel Manage part!");
suite.addTestSuite(TestMediaFactory.class);
suite.addTestSuite(TestSqlDataSource.class);
return suite;
}
也可以建立另一個含有suite()的TestAll class把所有含有suite()的class歸類在一起,如:
public static Test suite(){
TestSuite suite = new TestSuite("Test All media_publish project!");
suite.addTest(TestChannelManageAll.suite());
return suite;
}
可以建立一個含有suite()的class把所有TestCase歸類在一起,如:
public static Test suite(){
TestSuite suite = new TestSuite("Test the Channel Manage part!");
suite.addTestSuite(TestMediaFactory.class);
suite.addTestSuite(TestSqlDataSource.class);
return suite;
}
也可以建立另一個含有suite()的TestAll class把所有含有suite()的class歸類在一起,如:
public static Test suite(){
TestSuite suite = new TestSuite("Test All media_publish project!");
suite.addTest(TestChannelManageAll.suite());
return suite;
}
2008年5月18日 星期日
Ajith Abraham 教授
第一次聽英文演講(有點晚)
不意外的…完全聽不懂。
主講者:
Ajith Abraham 教授
在挪威教書、議題是-智能計算的最佳化
主要在討論有關模糊理論、類神經網絡、演化計算等人工智慧方面的
著有400篇論文、參與多個期刊及國際會議
感覺是一位在這方面非常權威的人士。
非常值得效仿的人。
網站:
http://www.softcomputing.net/
不意外的…完全聽不懂。
主講者:
Ajith Abraham 教授
在挪威教書、議題是-智能計算的最佳化
主要在討論有關模糊理論、類神經網絡、演化計算等人工智慧方面的
著有400篇論文、參與多個期刊及國際會議
感覺是一位在這方面非常權威的人士。
非常值得效仿的人。
網站:
http://www.softcomputing.net/
2008年5月11日 星期日
pietty 亞洲語系修正
2008年5月8日 星期四
[轉載]安裝nvidia官方版驅動
用這個方式裝每次都順利成功:所以不記下來不行
下載適合的nvidia顯示卡驅動程式
離開x
使用rcconf把gdm關掉再重新開機
安裝需要的套件
# aptitude install make gcc
查一下自己應該裝的linux-headers版本
# uname -r
2.6.18-4-686
# aptitude install linux-headers-2.6.18-4
還有其他編譯時必要的套件
# aptitude install pkg-config xserver-xorg-dev
注意事項:
假使您安裝過nvidia-glx請下
# aptitude --purge remove nvidia-glx
並確認移除
/etc/init.d/nvidia-glx
/etc/init.d/nvidia-kernel
到下載的目錄下執行
# sh NVIDIA-Linux-x86-1.0-9639-pkg1.run
重新進入x
$startx
有看到nvidia logo就代表成功
下載適合的nvidia顯示卡驅動程式
離開x
使用rcconf把gdm關掉再重新開機
安裝需要的套件
# aptitude install make gcc
查一下自己應該裝的linux-headers版本
# uname -r
2.6.18-4-686
# aptitude install linux-headers-2.6.18-4
還有其他編譯時必要的套件
# aptitude install pkg-config xserver-xorg-dev
注意事項:
假使您安裝過nvidia-glx請下
# aptitude --purge remove nvidia-glx
並確認移除
/etc/init.d/nvidia-glx
/etc/init.d/nvidia-kernel
到下載的目錄下執行
# sh NVIDIA-Linux-x86-1.0-9639-pkg1.run
重新進入x
$startx
有看到nvidia logo就代表成功
MPlayer字幕設定
1打開Preferences設定頁
2Font Tab下的Font要選擇truetype的字型:如/usr/share/fonts/truetype/arphic/bsmi00lp.ttf
3Font Tab下的Encoding要選擇UTF8,這是指上面的字型檔的編碼,linux下的當然是utf8
4同時,Font Tab下的Text scale是用來調整字幕的大小
5Subtitles & OSD Tab下的encoding要選Big5這是指字幕檔的編碼,從windows的硬碟過來的字幕檔一般都用Big5編碼
2Font Tab下的Font要選擇truetype的字型:如/usr/share/fonts/truetype/arphic/bsmi00lp.ttf
3Font Tab下的Encoding要選擇UTF8,這是指上面的字型檔的編碼,linux下的當然是utf8
4同時,Font Tab下的Text scale是用來調整字幕的大小
5Subtitles & OSD Tab下的encoding要選Big5這是指字幕檔的編碼,從windows的硬碟過來的字幕檔一般都用Big5編碼
2008年5月6日 星期二
JSP 不要快取設定
在JSP產生XML並使用XSL把XML轉換成HTML的情境下,
會造成快取暫留的問題,例如:
A登入 -> A的使用畫面 -> A登出 -> B登入 -> A的使用畫面
這問題的原因不太清楚,但治標的方法是,在JSP加上:
resp.setHeader("Pragma", "no-cache"); // HTTP 1.0
resp.setHeader("Cache-Control", "no-cache"); // HTTP 1.1
來要求browser不要進行快取即可
會造成快取暫留的問題,例如:
A登入 -> A的使用畫面 -> A登出 -> B登入 -> A的使用畫面
這問題的原因不太清楚,但治標的方法是,在JSP加上:
resp.setHeader("Pragma", "no-cache"); // HTTP 1.0
resp.setHeader("Cache-Control", "no-cache"); // HTTP 1.1
來要求browser不要進行快取即可
2008年5月4日 星期日
群組group
Linux下的群組管理非常重要,有些裝置的使用必須要使用者屬於特定的群組。
例如:
cdrom和cdrw需要使用者有cdrom的群組權限,否則無法進行燒錄
音效卡需要使用者有audio的群組權限,否則電腦不會有聲音,就算driver有裝好也一樣
使用usermod指令可以為user設定其所屬的群組
#usermod -G Group[,Group,..] user
但這樣做的話,假如也要把user當前所屬群組重新key一次
不然沒有在-G列表上的群組會把user踢掉
如 user 的當前群組為 G1、G2
#usermod -G G1,G3 user
則user的當前群組變為G1、G3並被從G2踢出
可以改用
#usermod -G G1,G3 -a user
則user不會被G2踢出,但會加入G3
也就是user的當前群組變為G1、G2、G3
例如:
cdrom和cdrw需要使用者有cdrom的群組權限,否則無法進行燒錄
音效卡需要使用者有audio的群組權限,否則電腦不會有聲音,就算driver有裝好也一樣
使用usermod指令可以為user設定其所屬的群組
#usermod -G Group[,Group,..] user
但這樣做的話,假如也要把user當前所屬群組重新key一次
不然沒有在-G列表上的群組會把user踢掉
如 user 的當前群組為 G1、G2
#usermod -G G1,G3 user
則user的當前群組變為G1、G3並被從G2踢出
可以改用
#usermod -G G1,G3 -a user
則user不會被G2踢出,但會加入G3
也就是user的當前群組變為G1、G2、G3
訂閱:
文章 (Atom)
