2010年6月30日 星期三

JUnit

說明:
使用 Eclipse Junit


範例:
{{{
package test;

import static org.junit.Assert.*;
import org.junit.Test;

import net.asgc.gap.portal.handler.AutoDock4Handler;


public class AutoDockHandlerTest{
AutoDock4Handler ad4 = new AutoDock4Handler();

@Test
public void testAddParam() {
ad4.addParam("targetSEPath", "aaaa");
}

@Test
public void testCheckParameter() {
ad4.addParam("targetSEPath", "aaaa");
ad4.addParam("ligandSEPath", "bbb");
ad4.addParam("dpfSEPath", "ccc");

assertTrue(ad4.checkParameter());
}
}
}}}

2010年6月26日 星期六

日期說法

1. 月份
一月 January JAN
二月 February FEB
三月 March MAR
四月 April APR
五月 May MAY
六月 June JUN
七月 July JUL
八月 August AUG
九月 September SEP
十月 October OCT
十一月 November NOV
十二月 December DEC

2010年6月25日 星期五

小型 Web Demo 專案

說明:
使用 serverlet/jsp/EL 與 MVC 模型, 完成一個抽象的 User Query 應用程式, 並能在
後端作查詢而完成簡單的 job 送出工作.

圖示: 前端- User 要求一個網頁

User
|
Form
|
web.xml
| (par1, par2)
-------------------------
| FormServlet | <----- Role: Controller
| parl, par2 |
--------------------------------
^ | |
| V |
-------- ---------
App. | Applist | <--Model | Form.jsp | view
txt -------- -----------



元件:
Servlet (FormServlet) 目的:
當作控制者, 平衡在 Model 與 View 元件之中, 將參數帶到 Model 並得到 Model 回傳值,當所有的回傳值都準備好了, 就可以給 View 用不同的方式去顯示值. 且 Servlet 不作任何
有關的處理, 相關的處理都交給 Model 層.

Model (AppList) 目的:
Model 就像一般的物件, 主要能提供像作些查詢, 運算等工作, 並能回傳值給 Controller

View (Form.jsp) 目的:
主要顯示值, 而 java 中用 jsp 來完成, 並可用 EL 來完成, 在 java 中要用 jstl.jar Jsp Standard Tag Library(JSTL).

目錄:
[root@t-ap188 Learn]# tree -L 4 .
.
|-- Form.jsp
|-- WEB-INF
| |-- classes
| | |-- controller
| | | |-- FormServlet.class
| | | `-- FormServlet.java
| | `-- model
| | |-- AppList.class
| | |-- AppList.java
| | |-- AutoDock4Handler.class
| | |-- AutoDock4Handler.java
| | |-- BlastHandler.class
| | |-- BlastHandler.java
| | |-- Handler.class
| | |-- Handler.java
| | |-- HandlerFactory.class
| | |-- HandlerFactory.java
| | |-- RHandler.class
| | `-- RHandler.java
| |-- lib
| | `-- jstl.jar
| `-- web.xml
|-- abc.jsp
|-- app.txt
`-- hello.jsp

程式碼:
Controller Package:
FormServlet.java
{{{
package controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.AppList;

/// bring the parameter and send modle then and finally send resutl to view

public class FormServlet extends HttpServlet {


private static final long serialVersionUID = 1111L;
public static final String SUCCESS_PAGE = "Form.jsp";

public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException{

AppList list = new AppList("/opt/apache-tomcat-5.5.27/webapps/Learn/app.txt");
List appList = list.getApps();

req.setAttribute("appList", appList);
RequestDispatcher view = req.getRequestDispatcher(SUCCESS_PAGE);
view.forward(req, resp);
}
}
}}}
使用 doGet 接收參數, 並查出所有 application name, 在傳給 view 作顯示.



/// Model Package ////
*AppList.java
{{{
package model;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class AppList {

List app_list;

public AppList( String file_path ) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(
file_path) );
String app = null;
app_list = new ArrayList();
while ((app = br.readLine()) != null) {
app_list.add(app);
}
}

public List getApps() {
return app_list;
}
}

}}}


/////////// View Level ///////////
* Form.jsp
{{{
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>








}}}
其中會接收 appList 從 servlet 來, 並用 foreach 去取出值放到 app, 在顯示到html.


app.txt
{{{
AutoDock4
R
Blast
}}}

* web.xml
{{{





form_servlet
controller.FormServlet



form_servlet
/Form



}}}


整個文件說明:
1. 學到 Controller/Model/View 的關係建立在互相分工與連結, Controller 當成橋粱, Model 當成 POJO class, View 作 jsp / html 顯示作用.


2. web.xml 定義 servelet 的基本位置和目的.像 servelet mapping 和
使用者可以連結到 https://t-ap188.grid.sinica.edu.tw:8443/Learn/Form
url-pattern 是 /Form 給使用者作網址的,
servlet-class 是要作處理的 class 位置.
{{{

form_servlet
controller.FormServlet



form_servlet
/Form

}}}

3. 學到 java EL 網頁顯示功能, 使用 ${} 當參數, 會從 serverlet 接到 applist會作 app,
且 view 會用到大量 html tag, 如此才像 tag 方式.
{{{



}}}

4. Java web 程式的目錄架構有 WEB-INF.
有 classes lib web.xml
其中 classes 放自己寫的 class 或 servletclass,
而此處 classes 中有 controller 與 model 兩個 package.
而 lib 放程式碼 jar 檔案.

結論:
而這些主要目的是為了讓各層只專注在本身的語法,
概念, 邏輯. 以便為來程式能分層, 且這範例還點出好處, 為來只要在 app.txt
加入新的應用程式, 其它 code 部份不用更動就可完成任務.



//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
圖示: 後端- User 送出一個表格到呼叫底下流程
當使用者將 Request 傳到 abc.jsp

Request
|
---------------
| abc.jsp | <----- 處理者
| |
---------------
|
-----------------
| factor(工廠) | <--- 透過她來產生底下的應用程式處理單元
| |
-----------------
|
------------------
| handler | <----- Model
------------------
| | ......
---- --------
| R | | Blast | <---- Individual application porting to grid
---- ---------


說明: 當一個使用者送出所選擇要執行的應用程式後, 會被傳到 factor 去產生對應的工作
處理者 (RHandler, BlastHandler), 並回傳 Hndler 物件.


程式碼:
abc.jsp
{{{
<%@ page import="model.*"%>



<%
String appName = request.getParameter("appName");
try {
Handler h = HandlerFactory.newInstance(appName);
out.println(h.handle());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
out.println(e);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
out.println(e);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
out.println(e);
}
%>



}}}


HandlerFactor.java (使用 Reflecting 完成工作)
{{{
package model;

public class HandlerFactory {
@SuppressWarnings("unchecked")
public static Handler newInstance(String appName) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
Class c = Class.forName("model." + appName + "Handler");
Handler h = (Handler)c.newInstance();
return h;
}

public static void main(String[] args){
try {
Handler h = HandlerFactory.newInstance(args[0]);
System.out.println(h.handle());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}}}


Handler.java
{{{
package model;

public interface Handler {
public String handle();
}

}}}

RHandler.java
{{{
package model;

public class RHandler implements Handler{

@Override
public String handle() {
// TODO Auto-generated method stub
return "Submit R job to VQS" ;
}

}
}}}







2010年6月24日 星期四

臺灣旅遊

1. 地名
臺南 - Tainan
澎湖 - Penghu
墾丁 - Kenting
桃園 - Taoyuan

2. 景點
孔廟 - Confucian temple
安平古堡 - Anping Fort


3. 小吃
炸 - Fry
水餃 - Dumpling
咖哩 - curry


4. 交通工具
高鐵 - HSR

Molliza

molliza 3.6 version



========= 目錄 =========
1. 位置在 /usr/lib/firefox-3.6/
{{{
application.ini chrome extensions langpacks plugins run-mozilla.sh
blocklist.xml components firefox LICENSE README.txt searchplugins
browserconfig.properties defaults icons modules removed-files updater.ini
}}}



========= 功能 ===========
----- Plug in for applet -----
1. 在 /usr/lib/firefox-3.6 下建立一個 plugins 資料夾,
然後作 soft link 到 /usr/java/default/jre/lib/i386/libnpjp2.so
{{{
[root@t-ap188 plugins]# ls -l
總計 4
lrwxrwxrwx 1 root root 42 6月 25 11:15 libnpjp2.so -> /usr/java/default/jre/lib/i386/libnpjp2.so

}}}



========= 參考 =================
1. http://wiki.moztw.org/%E8%A8%AD%E5%AE%9A%E6%AA%94%E8%A9%B3%E8%A7%A3

File System

File System

============= 說明 ===================


============= 指令 ===================

--------------- Software link ---------
語法:
{{{
ln -s 連結的檔案 為這連結取名
}}}

例如:
{{{
ln -s /usr/java/default/jre/lib/i386/libnpjp2.so .
}}}

檔案型式:
{{{
[root@t-ap188 ln]# ls -l
總計 4
lrwxrwxrwx 1 root root 42 6月 25 11:25 libnpjp2.so -> /usr/java/default/jre/lib/i386/libnpjp2.so
}}}

說明:
用 Software Link 連結到一個檔案後, 會出現一個指標
指到目的地, 且 file falg 第一個 bit 會有 l 符號, 且指到的為 1

注意:
1. software link 不能作 copy 的運算, 若想 cp 至在那一個地方, 請用 mv.l
否則就會是作實體連結, 而有些 software 只能會用 soft link 不行用 hard link
such as molize plugs in to jre .

2010年6月23日 星期三

2010年6月20日 星期日

JAVA 中取環境變數

1. 在 JAVA 中可用 System.getEnv("envriable");

2. 但是在系統上, 若要設定環境變數要用 export variable
是要 export 才行

原因請看 linux export 定義

自己 JAVA 常見錯誤

1. 看不太懂 exception, 改善方式是要能瞭解每個 exception 實際拋出的地方與錯誤的說明方式.


2. Lib 的連結.

JAVA TEST Script

當你要測式一群 lib 時,
需要一個 script 檔, 幫你link, 因此可以很方便作 migration platform test

{{{{
#!/bin/sh
GAP_HOME=`pwd`/.gap
CP=./
ROOT=/opt/apache-tomcat-5.5.27/webapps/gcp/WEB-INF/lib/

# do the classpath
for path in $(find $ROOT -name *.jar)
do

CP="$CP:$path"

done

# add other lib
CP=$CP:/home/Andy/tmp/apache-tomcat-5.5.27/common/lib/jce-jdk13-131.jar

# because this program need
export GAP_HOME=$GAP_HOME

# run your java
$JAVA_HOME/bin/javac -classpath $CP VQSClientTestBean.java
$JAVA_HOME/bin/java -classpath $CP VQSClientTestBean



}}}

轉換 JAVA version

當你安裝好新的 java 時,
要更換 java 的內容

需要用 alternatives


範例:
alternatives -help
alternatives --install /usr/bin/java java /usr/java/default/bin/java 3
alternatives --config java


by JIM

2010年6月19日 星期六

Ant

1. 說明:



2. 常用命令:
ant targetname<> in build.xml




3. 範例:
I. ant fw_app.build








4. 注意:
1. ant 會 build 整個 java 需要的檔案
2. 有時要會作 clear 動作

///////////////////
Ant 說明
////////////////////
使用 build.xml


/////////////////////////////////////////////
Ant tag
/////////////////////////////////////////////
1. (專案)
說明:
可以定義此 project 相關的設定值
屬性:
name: The ant project name
default: Default want to build target
basedir: You seting this project root path


2. (變數)
說明:
宣告 ant varaible, 在往後可以用 ${name} 取得變數
屬性:
name: Variable name
value: This varaible to value


3.
說明:
一個可以 build 或作其它操作指令的空間區
屬性:
name: 名稱
depends: 其它部份要先執行, 然後才能執行此 target 內容

4.
說明:
印出值在螢幕上

5.
屬性:
file: 要複製的來源檔
tofile: 目的地

6.
說明:
Ant support javac command
屬性:
srcdir: 要 compiler 資料夾
destdir: class 目地
includes: 預設是 compiler all, 但用 include 可以指定要 build file

7.
屬性:
verbose="true" : 是否印出刪除的檔案

8.
說明:
可包括許多檔案
屬性:
dir: set to the directory to file




//////////////////////////////////////////////////
Ant example
/////////////////////////////////////////////////
Simple build a project, compiler the src java to build directroy
to classs
{{{









Doing UKLights



Doing all






}}}


2.一個有 clean, 更多的 depends build, 從 build a file 到 build 更多 depends
{{{









Doing ExitControl





Doing AboutPopup



description="Builds AboutControl">
Doing AboutControl





description="Builds the main UKLights project">
Doing UKLights








Doing all













}}}

2010年6月18日 星期五

MPI 環境

以下列出 在 euaisa 能 run mpi CE:


[ui01] /home/dhc00 > lcg-info --vo euasia --list-ce --query 'Tag=*MPI*' --attrs 'Tag'
- CE: ce1.egee.cesnet.cz:2119/jobmanager-pbs-euasia
- Tag GLITE-3_0_0
GLITE-3_1_0
LCG-2
LCG-2_1_0
LCG-2_1_1
LCG-2_2_0
LCG-2_3_0
LCG-2_3_1
LCG-2_4_0
LCG-2_5_0
LCG-2_6_0
LCG-2_7_0
MPI-Ethernet
MPI-START
MPI_OPENMPI
MPI_SHARED_HOME
OPENMPI
OPENMPI-1.2.5
R-GMA
VO-atlas-BTagging-15.6.8.6.1-i686-slc5-gcc43-opt
VO-atlas-BTagging-15.6.9.8.1-i686-slc5-gcc43-opt
VO-atlas-BTagging-15.6.9.8.2-i686-slc5-gcc43-opt
VO-atlas-JetMetAnalysis-15.6.9.10.1-i686-slc5-gcc43-opt
VO-atlas-TopPhys-15.6.10.4.1-i686-slc5-gcc43-opt
VO-atlas-TopPhys-15.6.8.2.1-i686-slc5-gcc43-opt
VO-atlas-WZBenchmarks-15.6.8.2.2-i686-slc5-gcc43-opt
VO-atlas-WZBenchmarks-15.6.9.3.1-i686-slc5-gcc43-opt
VO-atlas-gcc-x86_64-slc5
VO-atlas-offline-15.5.4-i686-slc4-gcc34-opt
VO-atlas-offline-15.6.1-i686-slc4-gcc34-opt
VO-atlas-offline-15.6.10-i686-slc5-gcc43-opt
VO-atlas-offline-15.6.3-i686-slc5-gcc43-opt
VO-atlas-offline-15.6.5-i686-slc5-gcc43-opt
VO-atlas-offline-15.6.6-i686-slc5-gcc43-opt
VO-atlas-offline-15.6.7-i686-slc5-gcc43-opt
VO-atlas-offline-15.6.8-i686-slc5-gcc43-opt
VO-atlas-offline-15.6.9-i686-slc5-gcc43-opt
VO-atlas-offline-15.8.0-i686-slc5-gcc43-opt
VO-atlas-production-15.6.1.3-i686-slc4-gcc34-opt
VO-atlas-production-15.6.1.4-i686-slc4-gcc34-opt
VO-atlas-production-15.6.1.5-i686-slc4-gcc34-opt
VO-atlas-production-15.6.1.6-i686-slc4-gcc34-opt
VO-atlas-production-15.6.1.7-i686-slc4-gcc34-opt
VO-atlas-production-15.6.10.1-i686-slc5-gcc43-opt
VO-atlas-production-15.6.10.2-i686-slc5-gcc43-opt
VO-atlas-production-15.6.10.4-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.1-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.10-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.11-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.12-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.13-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.14-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.15-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.17-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.18-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.2-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.3-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.4-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.5-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.6-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.7-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.8-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.9-i686-slc5-gcc43-opt
VO-atlas-production-15.6.5.3-i686-slc5-gcc43-opt
VO-atlas-production-15.6.5.5-i686-slc5-gcc43-opt
VO-atlas-production-15.6.6.1-i686-slc5-gcc43-opt
VO-atlas-production-15.6.6.3-i686-slc5-gcc43-opt
VO-atlas-production-15.6.6.4-i686-slc5-gcc43-opt
VO-atlas-production-15.6.6.5-i686-slc5-gcc43-opt
VO-atlas-production-15.6.6.6-i686-slc5-gcc43-opt
VO-atlas-production-15.6.6.7-i686-slc5-gcc43-opt
VO-atlas-production-15.6.7.4-i686-slc5-gcc43-opt
VO-atlas-production-15.6.7.5-i686-slc5-gcc43-opt
VO-atlas-production-15.6.7.7-i686-slc5-gcc43-opt
VO-atlas-production-15.6.7.8-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.10-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.11-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.12-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.2-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.4-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.5-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.6-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.7-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.8-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.9-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.1-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.10-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.11-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.12-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.13-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.3-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.4-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.6-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.7-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.8-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.9-i686-slc5-gcc43-opt
VO-atlas-tier0-15.5.4.10
VO-atlas-wzbenchmarks-15.5.4.1.1-i686-slc4-gcc34-opt
VO-atlas-wzbenchmarks-15.6.5.5.1-i686-slc5-gcc43-opt
VO-auger-offline-v2r5p5-Godot VO-auger-ADST_v5r1p1_Pozzo VO-auger-AugerRequiredSrc-2.1

- CE: ce2.egee.cesnet.cz:2119/jobmanager-pbs-euasia
- Tag GLITE-3_0_0
GLITE-3_1_0
LCG-2
LCG-2_1_0
LCG-2_1_1
LCG-2_2_0
LCG-2_3_0
LCG-2_3_1
LCG-2_4_0
LCG-2_5_0
LCG-2_6_0
LCG-2_7_0
MPI-Ethernet
MPI-START
MPI_OPENMPI
MPI_SHARED_HOME
OPENMPI
OPENMPI-1.2.5
R-GMA
VO-atlas-BTagging-15.6.8.6.1-i686-slc5-gcc43-opt
VO-atlas-BTagging-15.6.9.8.1-i686-slc5-gcc43-opt
VO-atlas-BTagging-15.6.9.8.2-i686-slc5-gcc43-opt
VO-atlas-JetMetAnalysis-15.6.9.10.1-i686-slc5-gcc43-opt
VO-atlas-TopPhys-15.6.10.4.1-i686-slc5-gcc43-opt
VO-atlas-TopPhys-15.6.8.2.1-i686-slc5-gcc43-opt
VO-atlas-WZBenchmarks-15.6.8.2.2-i686-slc5-gcc43-opt
VO-atlas-WZBenchmarks-15.6.9.3.1-i686-slc5-gcc43-opt
VO-atlas-gcc-x86_64-slc5
VO-atlas-offline-15.3.1-i686-slc4-gcc34-opt
VO-atlas-offline-15.5.4-i686-slc4-gcc34-opt
VO-atlas-offline-15.5.5-i686-slc4-gcc34-opt
VO-atlas-offline-15.6.1-i686-slc4-gcc34-opt
VO-atlas-offline-15.6.10-i686-slc5-gcc43-opt
VO-atlas-offline-15.6.3-i686-slc5-gcc43-opt
VO-atlas-offline-15.6.5-i686-slc5-gcc43-opt
VO-atlas-offline-15.6.6-i686-slc5-gcc43-opt
VO-atlas-offline-15.6.7-i686-slc5-gcc43-opt
VO-atlas-offline-15.6.8-i686-slc5-gcc43-opt
VO-atlas-offline-15.6.9-i686-slc5-gcc43-opt
VO-atlas-offline-15.8.0-i686-slc5-gcc43-opt
VO-atlas-production-15.3.1.1-i686-slc4-gcc34-opt
VO-atlas-production-15.3.1.2-i686-slc4-gcc34-opt
VO-atlas-production-15.3.1.20-i686-slc4-gcc34-opt
VO-atlas-production-15.3.1.3-i686-slc4-gcc34-opt
VO-atlas-production-15.3.1.4-i686-slc4-gcc34-opt
VO-atlas-production-15.3.1.5-i686-slc4-gcc34-opt
VO-atlas-production-15.3.1.6-i686-slc4-gcc34-opt
VO-atlas-production-15.3.1.7-i686-slc4-gcc34-opt
VO-atlas-production-15.3.1.8-i686-slc4-gcc34-opt
VO-atlas-production-15.3.1.9-i686-slc4-gcc34-opt
VO-atlas-production-15.6.0.1-i686-slc4-gcc34-opt
VO-atlas-production-15.6.1.2-i686-slc4-gcc34-opt
VO-atlas-production-15.6.1.3-i686-slc4-gcc34-opt
VO-atlas-production-15.6.1.4-i686-slc4-gcc34-opt
VO-atlas-production-15.6.1.5-i686-slc4-gcc34-opt
VO-atlas-production-15.6.1.6-i686-slc4-gcc34-opt
VO-atlas-production-15.6.1.7-i686-slc4-gcc34-opt
VO-atlas-production-15.6.10.1-i686-slc5-gcc43-opt
VO-atlas-production-15.6.10.2-i686-slc5-gcc43-opt
VO-atlas-production-15.6.10.4-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.1-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.10-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.11-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.12-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.13-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.14-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.15-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.17-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.18-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.2-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.3-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.4-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.5-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.6-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.7-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.8-i686-slc5-gcc43-opt
VO-atlas-production-15.6.3.9-i686-slc5-gcc43-opt
VO-atlas-production-15.6.5.3-i686-slc5-gcc43-opt
VO-atlas-production-15.6.5.5-i686-slc5-gcc43-opt
VO-atlas-production-15.6.6.1-i686-slc5-gcc43-opt
VO-atlas-production-15.6.6.3-i686-slc5-gcc43-opt
VO-atlas-production-15.6.6.4-i686-slc5-gcc43-opt
VO-atlas-production-15.6.6.5-i686-slc5-gcc43-opt
VO-atlas-production-15.6.6.6-i686-slc5-gcc43-opt
VO-atlas-production-15.6.6.7-i686-slc5-gcc43-opt
VO-atlas-production-15.6.7.4-i686-slc5-gcc43-opt
VO-atlas-production-15.6.7.5-i686-slc5-gcc43-opt
VO-atlas-production-15.6.7.7-i686-slc5-gcc43-opt
VO-atlas-production-15.6.7.8-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.10-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.11-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.12-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.2-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.4-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.5-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.6-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.7-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.8-i686-slc5-gcc43-opt
VO-atlas-production-15.6.8.9-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.1-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.10-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.11-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.12-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.13-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.3-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.4-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.6-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.7-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.8-i686-slc5-gcc43-opt
VO-atlas-production-15.6.9.9-i686-slc5-gcc43-opt
VO-atlas-tier0-15.5.4.10
VO-atlas-wzbenchmarks-15.5.4.1.1-i686-slc4-gcc34-opt
VO-atlas-wzbenchmarks-15.6.5.5.1-i686-slc5-gcc43-opt
VO-auger-offline-v2r5p5-Godot VO-auger-ADST_v5r1p1_Pozzo VO-auger-AugerRequiredSrc-2.1
VO-ops-SAM

- CE: cladonia.geranium.um.edu.my:2119/jobmanager-pbs-euasia
- Tag GLITE-3_0_0
GLITE-3_1_0
LCG-2
LCG-2_1_0
LCG-2_1_1
LCG-2_2_0
LCG-2_3_0
LCG-2_3_1
LCG-2_4_0
LCG-2_5_0
LCG-2_6_0
LCG-2_7_0
MPI-Infiniband
MPI-START
MPI_SHARED_HOME
OPENMPI
OPENMPI-1.4.1
R-GMA
VO-euasia-ECELL-3-1-106
VO-euasia-GATE-4.0.0
VO-euasia-GEANT4-9.1
VO-euasia-GROMACS-MPI-4

- CE: grid012.ct.infn.it:2119/jobmanager-lcglsf-euasia
- Tag CATANIA
CODESA3D-1.0
GATE-1.0.0-3
GLITE-3_0_0
GLITE-3_1_0
INFN
MOLSCRIPT-1.0.2
MPICH
MPICH2
MPICH2_GCC4
MPICH2_INTEL9
MPICH_GCC4
MPICH_INTEL9
MPICH_SH_GCC4
MPICH_SH_INTEL9
MPI_HOME_NOTSHARED
MVAPICH2_GCC4
MVAPICH2_INTEL9
MVAPICH_GCC4
MVAPICH_INTEL9
R-GMA
RASTER3D
SF00MeanPerCPU=2000
SI00MeanPerCPU=2100
VLC-0.7.2
VO-enmr.eu-AMBER10
VO-enmr.eu-CNS1.2-PARA
VO-enmr.eu-GROMACS3.3.3
VO-enmr.eu-NMRPIPE
VO-enmr.eu-ROSETTA
VO-enmr.eu-XPLOR-NIH2.21
VO-eumed-ASTRA
VO-eumed-CSOUND-4.24
VO-lhcb-pilot
VO-ops-SAM

- CE: haitham.biruni.upm.my:2119/jobmanager-pbs-euasia
- Tag GLITE-3_0_0
GLITE-3_1_0
LCG-2
LCG-2_1_0
LCG-2_1_1
LCG-2_2_0
LCG-2_3_0
LCG-2_3_1
LCG-2_4_0
LCG-2_5_0
LCG-2_6_0
LCG-2_7_0
MPI-Infiniband
MPI-START
MPI_SHARED_HOME
OPENMPI
OPENMPI-1.3.3
R-GMA
VO-euasia-GATE-4.0.0
VO-euasia-GEANT4-9.1
VO-euasia-GROMACS-MPI-4
VO-ops-SAM

- CE: infn-ce-01.ct.pi2s2.it:2119/jobmanager-lcglsf-euasia
- Tag ABAQUS-6.7
GLITE-3_1_0
GRISU-COMETA-INFN-CT
IDL-6.4
INFINIBAND-4X
LCG-2
LCG-2_1_0
LCG-2_1_1
LCG-2_2_0
LCG-2_3_0
LCG-2_3_1
LCG-2_4_0
LCG-2_5_0
LCG-2_6_0
LCG-2_7_0
MPI-START
MPICH
MPICH2_GCC4
MPICH2_INTEL9
MPICH2_PGI706
MPICH_GCC4
MPICH_INTEL9
MPICH_PGI706
MPICH_SH_GCC4
MPICH_SH_INTEL9
MPICH_SH_PGI706
MPI_HOME_NOTSHARED
MPI_NO_SHARED_HOME
MVAPICH
MVAPICH2
MVAPICH2_GCC4
MVAPICH2_INTEL9
MVAPICH2_PGI706
MVAPICH_GCC4
MVAPICH_INTEL9
MVAPICH_PGI706
PI2S2
R-GMA
SF00MeanPerCPU_1999
SI00MeanPerCPU_1606
VO-eumed-ASTRA
VO-matisse-MONITOR-MPICH-SI
VO-matisse-TESTPARDI
VO-matisse-TEST_03_NOV_CAT
i686

- CE: infn-ce-01.ct.pi2s2.it:2119/jobmanager-lcglsf-short
- Tag ABAQUS-6.7
GLITE-3_1_0
GRISU-COMETA-INFN-CT
IDL-6.4
INFINIBAND-4X
LCG-2
LCG-2_1_0
LCG-2_1_1
LCG-2_2_0
LCG-2_3_0
LCG-2_3_1
LCG-2_4_0
LCG-2_5_0
LCG-2_6_0
LCG-2_7_0
MPI-START
MPICH
MPICH2_GCC4
MPICH2_INTEL9
MPICH2_PGI706
MPICH_GCC4
MPICH_INTEL9
MPICH_PGI706
MPICH_SH_GCC4
MPICH_SH_INTEL9
MPICH_SH_PGI706
MPI_HOME_NOTSHARED
MPI_NO_SHARED_HOME
MVAPICH
MVAPICH2
MVAPICH2_GCC4
MVAPICH2_INTEL9
MVAPICH2_PGI706
MVAPICH_GCC4
MVAPICH_INTEL9
MVAPICH_PGI706
PI2S2
R-GMA
SF00MeanPerCPU_1999
SI00MeanPerCPU_1606
VO-eumed-ASTRA
VO-matisse-MONITOR-MPICH-SI
VO-matisse-TESTPARDI
VO-matisse-TEST_03_NOV_CAT
i686

- CE: khaldun.biruni.upm.my:2119/jobmanager-pbs-euasia
- Tag GLITE-3_0_0
GLITE-3_1_0
LCG-2
LCG-2_1_0
LCG-2_1_1
LCG-2_2_0
LCG-2_3_0
LCG-2_3_1
LCG-2_4_0
LCG-2_5_0
LCG-2_6_0
LCG-2_7_0
MPI-START
MPICH2
MPICH2-1.2.1
MPI_SHARED_HOME
OPENMPI
OPENMPI-1.3.3
R-GMA
VO-euasia-GATE-4.0.0
VO-euasia-GEANT4-9.1
VO-euasia-GROMACS-MPI-4

- CE: liknayan.pscigrid.gov.ph:2119/jobmanager-lcgpbs-euasia
- Tag GLITE-3_0_0
GLITE-3_1_0
IFORT-11_1_046
LCG-2
LCG-2_1_0
LCG-2_1_1
LCG-2_2_0
LCG-2_3_0
LCG-2_3_1
LCG-2_4_0
LCG-2_5_0
LCG-2_6_0
LCG-2_7_0
OPENMPI-1_2_8
R-GMA
SPECFEM3D_GLOBE-4_0_4

- CE: quanta.grid.sinica.edu.tw:2119/jobmanager-pbs-euasia
- Tag GLITE-3_0_0
LCG-2
LCG-2_1_0
LCG-2_1_1
LCG-2_2_0
LCG-2_3_0
LCG-2_3_1
LCG-2_4_0
LCG-2_5_0
LCG-2_6_0
LCG-2_7_0
MPI-START
MPICH
MPICH-1_2-7
MPICH2
MPI_SHARED_HOME
R-GMA

- CE: razi.biruni.upm.my:2119/jobmanager-pbs-euasia
- Tag GLITE-3_0_0
GLITE-3_1_0
LCG-2
LCG-2_1_0
LCG-2_1_1
LCG-2_2_0
LCG-2_3_0
LCG-2_3_1
LCG-2_4_0
LCG-2_5_0
LCG-2_6_0
LCG-2_7_0
MPI-START
MPI_SHARED_HOME
OPENMPI
OPENMPI-1.4.1
R-GMA
VO-euasia-GROMACS-MPI-4
VO-ops-SAM



////////////////////////////////////////////////////////
[ui01] /home/dhc00 > lcg-info --vo euasia --list-ce --query Tag=MPICH
- CE: grid012.ct.infn.it:2119/jobmanager-lcglsf-euasia

- CE: infn-ce-01.ct.pi2s2.it:2119/jobmanager-lcglsf-euasia

- CE: infn-ce-01.ct.pi2s2.it:2119/jobmanager-lcglsf-short

- CE: quanta.grid.sinica.edu.tw:2119/jobmanager-pbs-euasia

////////////////////////////////////////////////////////
[ui01] /home/dhc00 > lcg-info --vo euasia --list-ce --query Tag=OPENMPI
- CE: ce1.egee.cesnet.cz:2119/jobmanager-pbs-euasia

- CE: ce2.egee.cesnet.cz:2119/jobmanager-pbs-euasia

- CE: cladonia.geranium.um.edu.my:2119/jobmanager-pbs-euasia

- CE: haitham.biruni.upm.my:2119/jobmanager-pbs-euasia

- CE: khaldun.biruni.upm.my:2119/jobmanager-pbs-euasia

- CE: razi.biruni.upm.my:2119/jobmanager-pbs-euasia

MPI 簡述

1. 說明:
MPI 是個標準, 而目前最新版是 MPICH2.

在 MPI1 時, 有 MPICH 與 OPENMPI 前身兩大陣營提供.

而在 MPICH2 時, 由 MPICH2 與 OPENMPI 兩大函式庫提供.


底下用 OPENMPI 說明:

2. 執行過程:
MPIsourecode
|
MPICC
|
mpirun

而 mpirun 能用 qsub 送到底層的 Cluster


3. 範例:
I
hello.c
{{{
#include
#include

int main(int argc, char *argv[]) {
int numprocs, rank, namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];

MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);

printf("Process %d on %s out of %d\n", rank, processor_name, numprocs);

MPI_Finalize();
}

}}}

II.
/afs/slac.stanford.edu/package/mpich/bin/mpicc hello.c -o hello

III.
mpirun -np 4 -machinefile machinefile.morab hello
其中 machinefile 是跨 node 才須要, 若一顆是 8 code, 且只要 4 個 process 就不用,
且也是在 cluster 才要 machinefile.







4. 注意:


5. 參考:
MPI

2010年6月17日 星期四

Cluster 說明與環境

1.說明:
Cluster 目前有的是 PBS 為常見

2. 常用指令:
qsub/qsatat 為最常見指令


3. 環境變數:
前置詞為 PBS_ , 而可以看見 Cluster 的

PBS_O_WORKDIR The absolute path of the current working directory of the qsub command.
PBS_NODEFILE The name of the file that contains the list of the nodes assigned to the job.


4. 指令細節:



5. 範例:
test.sh
{{{
#!/bin/bash
#PBS -l nodes=2:ppn=4
#PBS -V

### env var
#module load mpich

cd $PBS_O_WORKDIR

P4_RSHCOMMAND=rsh
NCPUS=`wc -l $PBS_NODEFILE | awk '{print $1}'`

#cat $PBS_NODEFILE > NODES
#cat $PBS_NODEFILE
mpirun -machinefile $PBS_NODEFILE -np $NCPUS $PBS_O_WORKDIR/hello

}}}



6. 注意:
I. 在 home 目錄執行


7. 參考:
Qsub

2010年6月15日 星期二

JSP 的初探

1. 在 JSP 中可以寫自己的 code
使用
<%
... your java code
%>

且會轉成 java code 執行

2. 若你是要宣告參數與建立函數時
使用
<%!
...
%>

2010年6月13日 星期日

筆電保護

/////////////////////////////// 硬體篇 //////////////////////
1. 電池
a. 新的先充電 4-8小時
b. 不要邊用整流器與電池
c. 若長時間不用可將電池取出, 但一個月要作一次充放電測式
參考:
1
2


2. 螢幕
a. 用保護貼
b. 有指紋或靜電產生的灰塵, 請用專用的清潔濟
1
1


3. 鍵盤
a. 用保護貼

4. 防撞


//////////////////////////////////////////////
1. 軟體:
a. 請裝防毒軟體

2. 資料
a. backup

All
All2

Windows File System

1. 目前 winFS 是下一代的 window file system,

它主要結合 SQL 與 XML 完成對檔案的高階操作,

提供更大的搜尋進步與整合.

詳細請看
wikipedia windows fs

Reflecting (反射物件)

1. 說明:
Reflecting 為動態載入物件與類別的方法, Java 提供 Class, Object, Method 等物件,

讓每個物件都能在執行的時後知道自己的 類別, 實例, 方法等資訊,

也可有動態載入, 也能作到介面分派的行為, 透過開發時自由在抽像物件的跳拖與轉換,

達到物件的彈性 .

還有兩種方式可用 class
1. 用 object instace
2. 用 class literal 的 .calss 可得到此 class object



2. 範例:

a 動態載入類別, 並呼叫該類別的實例, 並取得該類別的方法, 透過 Method 物件來呼叫
ReflectingTest.java
{{{
import java.lang.reflect.Method;

public class ReflectingTest {
public static void main(String[] args) throws Exception {
Class cls = Class.forName("foo");
Object foo = cls.newInstance();
Method method = cls.getMethod("Hello", null);
method.invoke(foo, null);
}

}

class foo {
public void Hello() {
System.out.println("Hello");
}
}


}}}


b. 使用 Class 的 .class 取得 class 載入
FooTest.java
{{{
package net.asgc.gap.portal.util;

import java.lang.reflect.Method;
import net.asgc.gap.portal.util.VQSClientProperties;
public class FooTest {
public static void main(String[] args) {
try{
for (Method m : VQSClientProperties.class.getMethods() )
System.out.println("VQSClientProperties>>" + m);


}catch(Exception e){
e.printStackTrace();
}
}


}

}}}

可以看到使用 VQSClientProperties 的 class 內建的 .class 將它轉成 Class 後取
它的 Methods().


參考:
Java class doc
Java Object doc
Java Method doc

2010年6月11日 星期五

目錄結構

1. 從最上層看
[root@vt-002 /]# printf '%s\n' $(ls) | nl
1 afs
2 bin 放置常用指令, 像 vi, grep
3 boot 放 Linux kernel 與 grub, 像
4 dev 放裝置檔地方, 像
5 etc 放軟體設定檔的地方, 像 profile.d, sudoers, hosts, ssh,yum
6 home 為使用者建立個人資料區域的場所, 像 andy, steven
7 initrd
8 lib 放置各種軟體可能需要函式庫
9 lost+found
10 media
11 misc
12 mnt
13 opt
14 proc
15 root
16 sbin
17 selinux
18 srv
19 sys
20 tmp
21 usr
22 var

2. bin 資料夾
{{{
[root@vt-002 bin]# ls
alsaunmute chown dumpkeys gunzip ls nisdomainname sed tracepath view
arch cp echo gzip mail pgawk setfont tracepath6 ypdomainname
ash cpio ed hostname mailx ping setserial traceroute zcat
ash.static csh egrep igawk mkdir ping6 sh traceroute6 zsh
aumix-minimal cut env ipcalc mknod ps sleep true
awk date ex kbd_mode mktemp pwd sort umount
basename dd false kill more red stty uname
bash df fgrep ksh mount rm su unicode_start
bsh dmesg gawk link mt rmdir sync unicode_stop
cat dnsdomainname gettext ln mv rpm tar unlink
chgrp doexec grep loadkeys netstat rvi tcsh usleep
chmod domainname gtar login nice rview touch vi
}}}

3. boot 資料夾
{{{
[root@vt-002 boot]# ls
config-2.6.9-89.0.23.EL.cernxenU lost+found System.map-2.6.9-89.0.25.EL.cernxenU
config-2.6.9-89.0.25.EL.cernxenU message System.map-2.6.9-89.EL.cernxenU
config-2.6.9-89.EL.cernxenU message.ja vmlinuz-2.6.9-89.0.23.EL.cernxenU
grub symvers-2.6.9-89.0.23.EL.cernxenU.gz vmlinuz-2.6.9-89.0.25.EL.cernxenU
initrd-2.6.9-89.0.23.EL.cernxenU.img symvers-2.6.9-89.0.25.EL.cernxenU.gz vmlinuz-2.6.9-89.EL.cernxenU
initrd-2.6.9-89.0.25.EL.cernxenU.img symvers-2.6.9-89.EL.cernxenU.gz
initrd-2.6.9-89.EL.cernxenU.img System.map-2.6.9-89.0.23.EL.cernxenU

}}}

4.
{{{
[root@vt-002 dev]# ls
arpd loop0 md1 md23 md9 ram0 ram9 tap10 tty tty21 tty35 tty49 tty62 xvda3
console loop1 md10 md24 mem ram1 ramdisk tap11 tty0 tty22 tty36 tty5 tty63 zero
core loop2 md11 md25 mice ram10 random tap12 tty1 tty23 tty37 tty50 tty7
cpu loop3 md12 md26 net ram11 rawctl tap13 tty10 tty24 tty38 tty51 tty8
dnrtmsg loop4 md13 md27 nflog ram12 root tap14 tty11 tty25 tty39 tty52 tty9
evtchn loop5 md14 md28 null ram13 route tap15 tty12 tty26 tty4 tty53 urandom
fd loop6 md15 md29 parport0 ram14 route6 tap2 tty13 tty27 tty40 tty54 usersock
full loop7 md16 md3 parport1 ram15 shm tap3 tty14 tty28 tty41 tty55 vcs
fwmonitor lp0 md17 md30 parport2 ram2 skip tap4 tty15 tty29 tty42 tty56 vcsa
gpmctl lp1 md18 md31 parport3 ram3 stderr tap5 tty16 tty3 tty43 tty57 xfrm
initctl lp2 md19 md4 port ram4 stdin tap6 tty17 tty30 tty44 tty58 XOR
input lp3 md2 md5 ppp ram5 stdout tap7 tty18 tty31 tty45 tty59 xvc0
ip6_fw MAKEDEV md20 md6 ptmx ram6 systty tap8 tty19 tty32 tty46 tty6 xvda
kmsg mapper md21 md7 pts ram7 tap0 tap9 tty2 tty33 tty47 tty60 xvda1
log md0 md22 md8 ram ram8 tap1 tcpdiag tty20 tty34 tty48 tty61 xvda2

}}}

5.
{{{
[root@vt-002 /]# ls
afs boot etc initrd lost+found misc opt root selinux sys usr
bin dev home lib media mnt proc sbin srv tmp var
[root@vt-002 /]# cd etc
[root@vt-002 etc]# ls
a2ps.cfg fonts ksysguarddrc openldap securetty
a2ps-site.cfg foomatic lcm.conf opt security
acpi fstab ldap.conf pam.d selinux
adjtime gconf ld.so.cache pam_smb.conf sensors.conf
alchemist gimp ld.so.conf pango services
aliases gnome-vfs-2.0 ld.so.conf.d passwd sestatus.conf
aliases.db gnome-vfs-mime-magic ld.so.conf.orig passwd- setuptool.d
alsa gpm-root.conf lftp.conf pbm2ppa.conf sgml
alternatives gre.d libuser.conf pcmcia shadow
anacrontab grid-security libuser.conf.anaconda pine.conf shadow-
at.deny group lilo.conf.anaconda pine.conf.fixed shells
auditd.conf group- lisarc pinforc skel
audit.rules grub.conf localtime pki smartd.conf
auto.master gshadow log.d pnm2ppa.conf smi.conf
auto.misc gshadow- login.defs ppp smrsh
auto.net gssapi_mech.conf logrotate.conf prelink.cache sound
bashrc gtk logrotate.d prelink.conf ssh
blkid.tab gtk-2.0 lsb-release.d printcap stunnel
bluetooth hal ltrace.conf profile sudoers
bonobo-activation hepix lvm profile.d sysconfig
capi.conf host.conf lynx.cfg protocols sysctl.conf
ccm.conf hosts lynx.cfg.cs pwdb.conf syslog.conf
cdrecord.conf hosts.allow lynx.cfg.ja quotagrpadmins termcap
cpuspeed.conf hosts.deny lynx.cfg.sk quotatab udev
cron.d hotplug lynx-site.cfg racoon updatedb.conf
cron.daily hotplug.d mail rc vfontcap
cron.deny html2psrc mailcap rc0.d vimrc
cron.hourly idmapd.conf mail.rc rc1.d warnquota.conf
cron.monthly im_palette.pal makedev.d rc2.d wgetrc
crontab im_palette-small.pal man.config rc3.d wvdial.conf
cron.weekly im_palette-tiny.pal maven rc4.d X11
csh.cshrc imrc mc rc5.d xdg
csh.login init.d mgetty+sendfax rc6.d xinetd.conf
cups initlog.conf mime.types rc.d xinetd.d
dbus-1 inittab minicom.users rc.local xml
default inputrc modprobe.conf rc.sysinit xpdfrc
depmod.d iproute2 modprobe.conf.dist readahead.early.files yp.conf
dev.d isdn motd readahead.files yum
DIR_COLORS issue mtab redhat-lsb yum.conf
DIR_COLORS.xterm issue.net mtools.conf redhat-release yumex.conf
diskdump java Muttrc resolv.conf yumex.profiles.conf
dumpdates jvm ncm-ncd.conf rhgb yum.repos.d
enscript.cfg jvm-commmon netplug rmt zlogin
environment jwhois.conf netplug.d rpc zlogout
esd.conf kde nscd.conf rpm zprofile
exports kderc nsswitch.conf samba zshenv
fb.modes kermit ntp sane.d zshrc
fdprm krb5.conf ntp.conf screenrc
filesystems krb.conf odbc.ini scrollkeeper.conf
firmware krb.realms odbcinst.ini scsi_id.config
}}}

6.
{{{
[root@vt-002 home]# ls
Andy diane2lsa edglsa glitelsa scchiu waynesan
}}}

7.
{{{
[root@vt-002 lib]# ls
cpp libc.so.6 libm.so.6 libpam_misc.so.0
evms libdb-4.2.so libNoVersion-2.3.4.so libpam_misc.so.0.77
firmware libdevmapper.a libNoVersion.so.1 libpam.so.0
i686 libdevmapper.a.1.02 libnsl-2.3.4.so libpam.so.0.77
iptables libdevmapper-event.a libnsl.so.1 libpcre.so.0
kbd libdevmapper-event.a.1.02 libnss1_compat-2.3.4.so libpcre.so.0.0.1
ld-2.3.4.so libdevmapper-event-lvm2mirror.so libnss1_compat.so.1 libproc-3.2.3.so
ld-linux.so.2 libdevmapper-event-lvm2mirror.so.2.02 libnss1_dns-2.3.4.so libpthread-0.10.so
ld-lsb.so.3 libdevmapper-event-lvm2snapshot.so libnss1_dns.so.1 libpthread.so.0
libacl.so libdevmapper-event-lvm2snapshot.so.2.02 libnss1_files-2.3.4.so libresolv-2.3.4.so
libacl.so.1 libdevmapper-event.so libnss1_files.so.1 libresolv.so.2
libacl.so.1.1.0 libdevmapper-event.so.1.02 libnss1_nis-2.3.4.so librt-2.3.4.so
libanl-2.3.4.so libdevmapper.so libnss1_nis.so.1 librt.so.1
libanl.so.1 libdevmapper.so.1.00 libnss_compat-2.3.4.so libSegFault.so
libasound.so.2 libdevmapper.so.1.01 libnss_compat.so.1 libselinux.so.1
libasound.so.2.0.0 libdevmapper.so.1.02 libnss_compat.so.2 libsepol.so.1
libattr.so libdl-2.3.4.so libnss_db.so.2 libssl.so.0.9.7a
libattr.so.1 libdl.so.2 libnss_db.so.2.0.0 libssl.so.4
libattr.so.1.1.0 libdm.a libnss_dns-2.3.4.so libss.so.2
libaudit.so.0 libdm.la libnss_dns.so.1 libss.so.2.0
libaudit.so.0.0.0 libdm.so libnss_dns.so.2 libtermcap.so.2
libblkid.so.1 libdm.so.0 libnss_files-2.3.4.so libtermcap.so.2.0.8
libblkid.so.1.0 libdm.so.0.0.4 libnss_files.so.1 libthread_db-1.0.so
libBrokenLocale-2.3.4.so libe2p.so.2 libnss_files.so.2 libthread_db.so.1
libBrokenLocale.so.1 libe2p.so.2.3 libnss_hesiod-2.3.4.so libutil-2.3.4.so
libc-2.3.4.so libext2fs.so.2 libnss_hesiod.so.2 libutil.so.1
libcap.so libext2fs.so.2.4 libnss_ldap-2.3.4.so libuuid.so.1
libcap.so.1 libgcc_s-3.4.6-20060404.so.1 libnss_ldap.so.2 libuuid.so.1.2
libcap.so.1.10 libgcc_s.so.1 libnss_nis-2.3.4.so libwrap.a
libcidn-2.3.4.so libhandle.a libnss_nisplus-2.3.4.so libwrap.so
libcidn.so.1 libhandle.la libnss_nisplus.so.2 libwrap.so.0
libcom_err.so.2 libhandle.so libnss_nis.so.1 libwrap.so.0.7.6
libcom_err.so.2.1 libhandle.so.1 libnss_nis.so.2 lsb
libcrypt-2.3.4.so libhandle.so.1.0.3 libnss_winbind.so.2 modules
libcrypto.so.0.9.7a libiw.so.27 libnss_wins.so.2 rtkaio
libcrypto.so.4 libiw.so.28 libpamc.so.0 security
libcrypt.so.1 libm-2.3.4.so libpamc.so.0.77 tls

}}}


/////////////////////////////////////////////////////////////////
//////// 常用的目錄 /////////////
/////////////////////////////////////////////////////////////////

------------------ 放置 crontabl ---------------------------------
位置: /etc/cron.d
功能: 自動工作排程管理
說明:
使用: ...
參考: http://ftp.sunet.se/pub/Linux/distributions/redhat/redhat-archive/redhat/linux/9/en/doc/RH-DOCS/rhl-cg-zh_TW-9/index.html

資料流導向

標準輸入輸出:
1 是表示 stdout,
2 是表示 stderr
/dev/null 表示 null 裝置


附加:
>>

導出:
>



------------------- 範例 -------------------------
a.
有個 code 有會輸出 stdout 到 out 檔案, error 到 stderr
{{{
public class hello {
public static void main(String[] args) {
System.out.println("stoudout");
System.err.println("error");
}
}
}}}

將 stdout 輸到 dev/null 因此只印出 error
{{{
[Andy@t-ap188 testscript]$ java hello 1>/dev/null
error
}}}

若將 error 輸到/dev/null, 則印出 stdout
{{{
[Andy@t-ap188 testscript]$ java hello 2>/dev/null
stoudout
}}}



//////////////////////////////////////////////////////
資料流導向:
常常在 shell 碰到互動的介面, 可用導向符號(<, <<)減少工作
1. command < file , 將互動的內容寫在 file, 使用檔案方式去完成.
2. command << keyword
interaction
...
keyword

用字元方式導入 command, 定義 keyword, 並在內輸入互動的內容.


b. 範例:
I. 使用檔案導入符號(<)
{{{
[ui01] /home/dhc00/PHYLIP/phylip-3.69/test > ../exe/protdist < inputfile
}}}
inputfile
{{{
testfile
Y
}}}

I. 使用字元導入符號 (<<)
{{{
#!/bin/sh
../exe/protdist << word
testfile
Y
word

}}}



參考:
http://linux.vbird.org/linux_basic/0320bash/csh/no3-2.html

Shell script

////////////////////////////////// 說明 //////////////////////


1. 開頭要用
#!/bin/sh 代表使用 /bin/sh 執行檔
{{{
lrwxrwxrwx 1 root root 4 1月 11 19:38 /bin/sh -> bash
}}}

/////////////////////////////// 變數觀念 /////////////////////
1. $? 代表前個指令回傳值
2. export 是將自訂變數轉成環境變數, 並帶到接下來的 shell 去取得(參考鳥哥).
例如; {{{
export GAP_HOME=$GAP_HOME
$JAVA_HOME/bin/javac -classpath $CP VQSClientTestBean.java
$JAVA_HOME/bin/java -classpath $CP VQSClientTestBean
}}}
3. 變數是用 variab=value 表式
4. 當要用 variable 時, 要用 $ sysbol 在前面
注意: $variable 不是 variable 而是取值


////////////////////////////// 邏輯判斷 //////////////////////
------------------- 判斷語法 -----------------------
if [ 條件判斷式 ]; then
...
fi <==將 if 反過來寫

而條件判斷式因為不同比較對象會有不同比較子:
1 整數比較
-eq 兩數值相等 (equal)
-ne 兩數值不等 (not equal)
-gt n1 大於 n2 (greater than)
-lt n1 小於 n2 (less than)
-ge n1 大於等於 n2 (greater than or equal)
-le n1 小於等於 n2 (less than or equal)
例如:
[ 1 -ne 0 ]

2.字串比較
. 判定字串的資料
-z 判定字串是否為 0 ?若 string 為空字串,則為 true
-n 判定字串是否非為 0 ?若 string 為空字串,則為 false。
= 判定 str1 是否等於 str2 ,若相等,則回傳 true
!= 判定 str1 是否不等於 str2 ,若相等,則回傳 false

範例:
[ "$X509_USER_PROXY" != "/tmp/x509up_u501" ]

---------------------- 條件連接語法 ---------------------------
最常用是且 (&&) 與或 (|||)
if [ 條件判斷式1 ] && [ 條件判斷式1 ]; then
..
fi


---------------------- 條件另一個語法 ---------------------------
使用方括弧 [] , 若成功會回傳 true.
e.g [ -f /home/Andy/.globus/DeHua.p12 ] && echo haha


---------------------- 迴圈語法 ---------------------------
for {variable} in {array}
do
.....
done





//////////////////// 範例 ////////////////////////

From wayne
{{{
#!/bin/sh

if [ "x$X509_USER_PROXY" != "x" ] && [ "$X509_USER_PROXY" != "/tmp/x509up_u501" ] && [ -e $X509_USER_PROXY ]; then
voms-proxy-info -e > /dev/null 2>&1
if [ $? -ne 0 ]; then
java -jar /opt/gap-LCG-GLITE/apps/shell/euasia-proxy.jar $X509_USER_PROXY >&2
voms-proxy-info -all >&2
fi
fi
~
}}}


For for loop
{{{
#!/bin/sh

CP=/tmp/code/datawarehouse
for path in $(find /opt/apache-tomcat-5.5.27/webapps/gcp/WEB-INF/lib/ -name *.jar);
do
#echo $path
CP="$CP:$path";
done

javac -classpath $CP GapUserInit.java

}}}


for judgement []
e.g [ -f /home/Andy/.globus/DeHua.p12 ] && echo haha


///////////////////////////////
樣式及樣式比對:

${variable%pattern} 刪除與pattern 相似地方, 回傳其餘部份.
但條件是 varaible.
{{{
TTT=phylip-3.19.tar.gz
echo ${TTT%.tar.gz} <--- phylip-3.19
}}}


////////////////////////////
Reference
good: http://linuxconfig.org/Bash_scripting_Tutorial#9-bash-if--else--fi-statements
http://lowfatlinux.com/linux-perl-looping.html

Grid Security

/////////////////////////// 概念 ///////////////////////////
-----------------安全與認証機制-----------------
在 Grid 上, 安全與認証機制的方法是藉由 certificate 與 GSS 來達成.
且每個使用者都會有個 PKC12 (Public-Key Cryptography Standards 公開密碼標準) 產生的
Certificate(公鑰+個人資訊)與 Private key (私鑰), 通常公鑰是可以公開給外界去讀, 而私鑰則只能被自己使用. 一旦使用 PKC 標準, 透過 GSS 傳輸認証機制, 就能夠對兩個主機達成安全傳輸的目地.

-----------------Proxy-----------------
然而, 在 Grid 上, 有時需要傳送使用者的 PKC 到 Grid 的主機上, 例如在 CE 上需要從 SE 下載資料, 則要使用到此使用者的 PKC, 但這是危險的, 因為怕被別人盜去. 因此, 有了 Proxy 的產生, 它也擁有 PrivateKey/Publickey 但是只有幾個小時, 所以此 Proxy 就可以被帶到 Grid 環境上作到安全與認証機制. 此外, Proxy 的特性:
1. 預設為 12 小時
2. 它是不受密碼保護的

-----------------VOMS-----------------
目前最新的認証與安全機制是用 voms (VO Management Service), 它提供與管理使用者 Roles 和 Privileges, 詳細還需在研究. 而 VO 是 Virtual Organisations, 概念上一個使用者如果是某個 VO 則可以使用該 VO 的資訊.

在此要注意的是 grid proxy 和 voms-proxy 是有點類似, 又不太一樣的資訊,
在起 voms-proxy 時會需要先起 grid proxy, 再起 voms 資訊, 並會在/tmp/x509certificate 上加入 VO 資訊, 如
{{{
[ui01] /home/dhc00/LSA > voms-proxy-info -all
subject : /C=TW/O=AS/OU=GRID/CN=DeHua Chung 179110/CN=proxy
issuer : /C=TW/O=AS/OU=GRID/CN=DeHua Chung 179110
identity : /C=TW/O=AS/OU=GRID/CN=DeHua Chung 179110
type : proxy
strength : 1024 bits
path : /tmp/x509up_u45075
timeleft : 11:59:51
=== VO euasia extension information ===
VO : euasia
subject : /C=TW/O=AS/OU=GRID/CN=DeHua Chung 179110
issuer : /C=TW/O=AS/OU=GRID/CN=voms.grid.sinica.edu.tw
attribute : /euasia/Role=NULL/Capability=NULL
timeleft : 11:59:50
uri : voms.grid.sinica.edu.tw:15015
}}}
前半段是 Grid-Proxy 而後半段是 VO 資訊,
也因此 Grid-proxy 和 Voms-proxy 在想法上是有雷同, 但是卻當成不同的 proxy.



/////////////////////////// 設定檔或環境變數 ///////////////////////////
I. 使用者的 PKC12 預設在 $home/.globus
II. 使用者起 Proxy 檔案放在 /tmp/x509up_uID
可用 echo $X509_USER_PROXY 查看如: /tmp/x509up_u45075
III. 一般 CA (Certification Authority) 放置在 /etc/grid-security/certificates


/////////////////////////// 指令 ///////////////////////////
1. grid-cert-info
2. grid-proxy-destroy grid-proxy-info grid-proxy-init
3. voms-proxy-init -voms
voms-proxy-info -all


/////////////////////////// 範例 ///////////////////////////
a. Check user certificate:
$grid-cert-info
{{{
[ui01] /home/dhc00/LSA > grid-cert-info
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1516 (0x5ec)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=TW, O=AS, CN=Academia Sinica Grid Computing Certification Authority Mercury
Validity
Not Before: Jan 11 04:10:29 2010 GMT
Not After : Jan 11 04:10:29 2011 GMT
Subject: C=TW, O=AS, OU=GRID, CN=DeHua Chung 179110
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:c4:a2:80:6b:9b:59:55:77:57:b6:19:0a:28:09:
bf:f4:e6:36:9c:22:bb:8c:6a:9d:73:c7:fe:2e:33:
3c:24:0c:bb:19:97:7e:d4:e1:21:1c:63:e1:b3:8b:
0d:6d:eb:76:67:1c:1b:24:9d:1d:f3:b2:53:2d:23:
96:a4:53:47:b1:d1:fb:16:3e:c1:a2:fb:0d:1e:29:
27:ae:75:af:be:a1:c6:57:3a:c8:34:6c:8d:bd:61:
d8:39:32:21:db:40:be:11:5d:29:14:b9:ee:7d:df:
ab:02:41:d4:15:12:e0:e4:dc:ae:3b:b2:11:f5:01:
69:c8:14:13:19:14:d2:36:87
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment, Key Agreement
X509v3 Subject Key Identifier:
76:CB:A8:01:46:2A:0C:C2:80:A5:75:5B:7D:B1:A1:8C:F5:11:8E:08
X509v3 Authority Key Identifier:
keyid:7F:4D:97:15:97:B4:8D:5F:C0:D7:77:AB:31:76:D0:5F:6B:E2:5B:30
DirName:/C=TW/O=AS/CN=Academia Sinica Grid Computing Certification Authority Mercury
serial:00

X509v3 Issuer Alternative Name:
email:asgcca@grid.sinica.edu.tw, URI:http://ca.grid.sinica.edu.tw/
X509v3 Subject Alternative Name:
email:Andy.Chung@twgrid.org
X509v3 Certificate Policies:
Policy: 1.3.6.1.4.1.5935.10.1.2.1
Policy: 1.2.840.113612.5.2.2.1
CPS: http://ca.grid.sinica.edu.tw/CPS/

X509v3 CRL Distribution Points:
URI:http://ca.grid.sinica.edu.tw/publication/CRL/ASGCCA-crl.der

Signature Algorithm: sha1WithRSAEncryption
8f:cf:21:b7:36:89:41:6d:61:8d:c3:37:38:7c:62:34:24:b2:
0e:0b:80:ef:b8:c9:22:17:c5:b8:75:0e:3e:ed:aa:6b:64:1e:
17:e5:ea:4f:54:c9:9a:b6:65:78:ce:46:fb:9b:1d:14:18:8a:
2a:ea:cc:cc:71:2a:88:cf:6a:38:56:8b:b6:8c:be:05:11:5a:
06:a1:b7:68:e0:fe:a3:16:ba:eb:58:13:39:7d:50:90:fc:dc:
20:96:2e:94:77:c5:17:53:1f:6e:98:80:b5:fe:7e:32:99:c0:
16:a9:b0:14:d4:70:35:f5:4f:e9:db:f2:0b:f6:8a:95:25:9e:
89:26:09:ad:00:b1:17:b2:7c:9c:70:b7:46:d1:92:e2:6c:ca:
65:7d:83:6c:37:0e:28:a9:3b:40:8a:f3:f9:13:c2:63:bb:21:
b9:c0:b2:08:84:08:b5:31:66:d7:e8:09:56:ca:e0:ae:2e:27:
6d:e0:ad:63:14:b1:8e:e5:60:b6:0b:4b:a3:f8:fa:5c:8e:c3:
a9:04:9c:7e:bd:40:a5:f1:f7:9b:cf:c6:cc:e1:71:8d:ab:71:
47:6c:68:b2:d1:e3:37:5e:1a:0b:12:8a:68:8e:17:d4:8f:e4:
ba:d0:f1:38:e2:35:e5:f8:bb:a8:f4:d1:a0:8f:8e:1d:b1:69:
5d:2e:1c:08
}}}

b. 起 Grid Proxy: grid-proxy-destry

c. 查看 Proxy 資訊:
{{{
[ui01] /home/dhc00/LSA > grid-proxy-info
subject : /C=TW/O=AS/OU=GRID/CN=DeHua Chung 179110/CN=proxy
issuer : /C=TW/O=AS/OU=GRID/CN=DeHua Chung 179110
identity : /C=TW/O=AS/OU=GRID/CN=DeHua Chung 179110
type : full legacy globus proxy
strength : 1024 bits
path : /tmp/x509up_u45075
timeleft : 9:46:39
}}}

d. 列出 voms-proxy-info 內容
{{{
[ui01] /home/dhc00/LSA > voms-proxy-init -voms euasia
Cannot find file or dir: /home/dhc00/.glite/vomses
Enter GRID pass phrase:
Your identity: /C=TW/O=AS/OU=GRID/CN=DeHua Chung 179110
Creating temporary proxy ............................................................. Done
Contacting voms.grid.sinica.edu.tw:15015 [/C=TW/O=AS/OU=GRID/CN=voms.grid.sinica.edu.tw] "euasia" Done
Creating proxy ..................................................... Done
Your proxy is valid until Fri Jun 11 23:44:05 2010
[ui01] /home/dhc00/LSA > voms-proxy-info -all
subject : /C=TW/O=AS/OU=GRID/CN=DeHua Chung 179110/CN=proxy
issuer : /C=TW/O=AS/OU=GRID/CN=DeHua Chung 179110
identity : /C=TW/O=AS/OU=GRID/CN=DeHua Chung 179110
type : proxy
strength : 1024 bits
path : /tmp/x509up_u45075
timeleft : 11:59:51
=== VO euasia extension information ===
VO : euasia
subject : /C=TW/O=AS/OU=GRID/CN=DeHua Chung 179110
issuer : /C=TW/O=AS/OU=GRID/CN=voms.grid.sinica.edu.tw
attribute : /euasia/Role=NULL/Capability=NULL
timeleft : 11:59:50
uri : voms.grid.sinica.edu.tw:15015
}}}

Relative Linux Account knowlege

說明:
在 Linux 上每個人都會有 Personal ID (uid) 與 Group ID(gid),
而且系統通常只會使用 uid 與 gid 來辨識使用者作存取資源的等活動.

常用指令:
1. id:
可以查出自己的 id 名稱
[ui01] /home/dhc00/LSA > id
uid=45075(dhc00) gid=45077(dhc00) groups=45013(cvs),45077(dhc00),1100797177
[ui01] /home/dhc00/LSA > id -u
45075

2010年6月10日 星期四

日期的說法

1. 使用 twenty-序號

http://blog.xuite.net/hhcjuliet/journal/11725654

2010年6月8日 星期二

String

1. Java String 是從 0 開始算.
String a = "abc";

2. Java String 是個物件, 有個 length 方法可以得到字串長度
"abcdef".length is 6

3. 在作簡單的比對時, 傳回來的都是 index
"cdef".indexOf('d') is 1

4. Java String 有 substring 方法, 它的方法 signature 為
String substring(int beginIndex, int endIndex)
它主要是從 0 開始算,
且是個 beginIndex Include 而 endIndex 不包括的方式.

abc.substring(2,3)c // 因為 char(2) 為 c 且 char(3) 不包括所以答案是 c
cde.substring(1, 2)d // 同樣 beginindex 字串為 1, 而 endIndex 不包括 所以是 d
abc.substring(1,3)bc // 而從此處可知是要 substring(1,2) 為 bc
abc.substring(0,3)abc
Hello World Andy.
6to 11:World. // 類似的 chart 6 為 w, 而 chart 10 為 d, chart 11 為 空白,而 substring 不取 到 11 所以是 chart 6 開始到 chart 10 為止.
7to 11:orld.
8to 11:rld.
9to 11:ld.
10to 11:d.

因此 substring (startIndex, EndIndex) 中 Start index 為 要取的開始, 而 endIndex 放不要被取有時如空白或 tab, 當你作一些字串處理時, 會常用到.

5. Java string 要比較兩個字串是否相等可用 equals() 或 equalsIgnoreCase(),
而 equalsIgnoreCase 可以不取別比較的大小寫, 但別用 == 去比較因為這是
object reference compare.


6.

Regular expression

以下是我從 VBrid 摘要:
1. [] 字元集合
2. ^ 行開頭
3. $ 行結尾
4. . 有一個
* 至少 0 個或一個以上
5. 限定連續 RE 字符範圍 {} (ex: 0{2,5} 幾個0)

sed:
1. {行Start, 行END命令 字串}
2. 取代 : sed 's/要被取代/新字串/g'

awk:
1. 條件類型 {動作1} {動作2} FileName

2010年6月4日 星期五

Browser certificate

from JIM

1. browser certificate is using cert8.db format
{{{
/etc/pki/nssdb/cert8.db
/home/Andy/.evolution/cert8.db
/home/Andy/.mozilla/eclipse/cert8.db
/home/Andy/.mozilla/firefox/ezs1dfr5.default/cert8.db
/home/Andy/.redhat/esc/mlk60whb.default/cert8.db
}}}

2. 可以用 certutil command 作簡單的讀取
{{{
[Andy@t-ap188 JWS]$ certutil -d /home/Andy/.mozilla/firefox/ezs1dfr5.default -K
certutil: Checking token "NSS Certificate DB" in slot "NSS User Private Key and Certificate Services "
< 0> rsa 45c1ecf00b4e5018ef3b49439ad646d3d4dd701f DeHua Chung 179110 的 AS ID

}}}

2010年6月3日 星期四

CUDA

1. GPU Programming
CUDA( Compute Unified Device Architecture)
CUDA (an acronym for Compute Unified Device Architecture) is a parallel computing architecture developed by NVIDIA. CUDA is the computing engine in NVIDIA graphics processing units (GPUs) that is accessible to software developers through industry standard programming languages. Programmers use 'C for CUDA' (C with NVIDIA extensions), compiled through a PathScale Open64 C compiler,[1] to code algorithms for execution on the GPU. CUDA architecture shares a range of computational interfaces with two competitors -the Khronos Group's Open Computing Language[2] and Microsoft's DirectCompute[3]. Third party wrappers are also available for Python, Fortran, Java and MATLAB. ....

Reference:
CUDA wiki
GPU Programming with CUDA

URI

JAVA Code:
URI destURI = destPhyPath.toURI();
//gsiftp://vl04.grid.sinica.edu.tw/storage/euasia/55068857b8ccaf0f8538b419cd3e94d7/609b46ac/-d5e5-4c/20-9248-/9a3ca3c5/9477/c7aa41/86-8e5/7-4521/-8bd4-/43adb0/aa2eb3

String destHost = destURI.getHost();// remote
// host:vl04.grid.sinica.edu.tw

int destPort = ((destURI.getPort() == -1) ? 2811 : destURI.getPort());

String destPath = destURI.getPath();// remote
// path:/storage/euasia/55068857b8ccaf0f8538b419cd3e94d7/609b46ac/-d5e5-4c/20-9248-/9a3ca3c5/9477/c7aa41/86-8e5/7-4521/-8bd4-/43adb0/aa2eb3

URL Encoding

http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

Collection of Sorting

1. 目前 set 可用的為 Tree set 且 Hash 也是 Tree Hash 才可 sort

a. 使用 SortedSet 與 TreeSet
{{{
import java.util.*;


public class TestSortSet {
public static void main(String[] args) {
//Create a hash set
SortedSet set = new TreeSet();

// Add strings to the set
set.add("London");
set.add("Paris");
set.add("New Yourk");


System.out.println(set);

// Obtain an iterator for the hash set
Iterator iterator = set.iterator();

// Display the elements in the hash set
while (iterator.hasNext()) {
System.out.print(iterator.next() + "");
}
}
}

OutPut:
[London, New Yourk, Paris]
London New Yourk Paris


}}}


b. 使用 SortedMap 與 TreeHash
{{{
import java.util.*;


public class SortedMapTest {
public static void main(String[] args) {
//Create a hash set
SortedMap m = new TreeMap();

// Add strings to the set
m.put("/home/Andy", "value1");
m.put("/home/", "value2");
m.put("/home/Andy/Desktop", "value3");



// Obtain an iterator for the hash set
Iterator iterator = m.keySet().iterator();

// Display the elements in the hash set
while (iterator.hasNext()) {
System.out.println("key: " + iterator.next() + "");
}
}
}

OutPut:
key: /home/
key: /home/Andy
key: /home/Andy/Desktop

}}}


Reference:
Java Sorted
比較深入 comparator


2010年6月1日 星期二

P12 與 host.pem 和 cert.pem

我們可以有兩種對 key 作法:
1. 將 key.pem 與 hostcert.pem 合成 P12
2. 將 P12 拆成 key.pem 與 hostcert.pem


A. 將 key.pem 與 hostcert.pem 合成 p12
I. 會要求輸入 key.pem passwd
II. 會需要 P12 Export passwd
openssl pkcs12 -export -chain \
-inkey $keyPath/hostkey.pem \
-in $keyPath/hostcert.pem \
-out $keyPath/host.p12 \
-CApath /etc/grid-security/certificates/ \
-name "vt-004"



B. 將 P12 拆成 key.pem 與 hostcert.pem
I 會要輸入 P12 Import passwd
2. 要求建立新的 key.pem passwd
$ openssl pkcs12 -in xxxx.pfx(p12) -clcerts -nokeys -out usercert.pem
$ openssl pkcs12 -in xxxx.pfx(p12) -nocerts -out userkey.pem


C. 可以用 openssl 看 certficate 資訊
{{{
openssl x509 -in 06B3.crt -noout -text

}}}
Note:
1. 有時在將 key 合成 p12 時, 會不用輸入 key passwd(ie. PC host key)
2. 而 P12 被合成有時也可以不要 Export passwd

Security - Sign jar

== JNLP and Sign the Jar ==
=== Introduction ===
Please note, here is a very important key point in the proxydelegation.jnlp (highlight with red color). Based on the security issue, the JAR file should be signed if the program involves to access local file (IO). In the Proxy Delegation case, problem will request end-user to indicate where usercert.pem and userkey.pem are. So the JAR files which relate with access local file should be signed. (The processes of signature will be description in next session) At first I’ signed all JAR files, but it will have problem when I execute it via proxydelegation.jnlp. The problem is about that all JAR files are not signed with the same signer. In order to make sure that all JAR files are signed by the same signer, I unzip all JAR files and rejar them. Then I signed them again, but it still has problems. This problem is about a JAR file “ -jdk13-131.jar” been signed by BC (it is the JAR file provider). The solution is use tag to extend the other JNLP to provide jce-jdk13-131.jar [3].

=== JNLP ===
[http://andy09360639.blogspot.com/2010/02/java-web-start-in-jnlp-sample-for.html Simple JNLP]

=== Sign jar ===
The following having two method to sing jar
* 1
{{{
openssl pkcs12 -export -chain \
-inkey ~/.globus/userkey.pem \
-in ~/.globus/usercert.pem \
-out ~/.globus/user.p12 \
-CApath /etc/grid-security/certificates/ \
-name "myalias"
}}}

To verify content of the PKCS12 file, you can use:
{{{
openssl pkcs12 -info -in ~/.globus/user.p12
}}}
or
{{{
keytool -list -v -keystore ~/.globus/user.p12 -storetype PKCS12
}}}
To sign a JAR file:
{{{
jarsigner -keystore ~/.globus/user.p12 -storetype PKCS12 file.jar myalias
}}}

* 1
{{{
jarsigner -keystore C:\working\mystore -storepass myspass
-keypass j638klm -signedjar sbundle.jar bundle.jar jane
}}}

* unzip the JAR content
{{{
jar xf jar-file
}}}

* Download the jce-jdk13-131.jar from and put to .../jsp/JWS/JarFiles/cog-1.4
[http://polydistortion.net/bc/index.html jce-jdk]


=== Reference ===
[http://www.gridlab.org/WorkPackages/wp-5/guide/signjar.html sign_learn]
[http://www.ascc.sinica.edu.tw/nl/91/1818/02.txt openssl_intro]
[http://en.wikipedia.org/wiki/X.509 x.509]
[http://my.freebsd.org.hk/html/jdk1.2/tooldocs/win32/jarsigner.html jarsing_hk]
[http://polydistortion.net/bc/index.html The_Bouncy_Castle]





/////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
2010.06.04
. 建立一個 jar file, 其中 -C 為 bin 下的 all class 要放到 jar
{{{
[Andy@t-ap188 JWS]$ ls
bin lib src test.jar
[Andy@t-ap188 JWS]$ jar cvf test.jar -C bin .
}}}

/////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
2010.06.04
一個從 Sign 的script, jim and i
{{{
#!/bin/bash

JAR_DIR=/home/Andy/apache-tomcat-5.5.27/webapps/gcp/jsp/JWS/JarFiles
keyPath=/home/Andy/portal/script/key_bak

openssl pkcs12 -export -chain \
-inkey $keyPath/hostkey.pem \
-in $keyPath/hostcert.pem \
-out $keyPath/host.p12 \
-CApath /etc/grid-security/certificates/ \
-name "vt-004"

mkdir -p tmp

cp -r $JAR_DIR tmp
cd tmp

mkdir -p signed_jar
cp -r $JAR_DIR/* signed_jar

for jar in $(find JarFiles -name *.jar);
do
echo $jar
echo ${jar/JarFiles/signed_jar}
zip -d $jar META-INF/\*
jarsigner -keystore $keyPath/host.p12 -storetype PKCS12 -signedjar ${jar/JarFiles/signed_jar} $jar vt-004 < ../password
done

/bin/cp -rf signed_jar/* /opt/apache-tomcat-5.5.27/webapps/gcp/jsp/JWS/JarFiles

cd ..
#rm -rf tmp


}}}

SVN 認識

一份 code 的版本控制, 可分成 三個
Header: 目前尚不穩定, 還在開發功能
Tag: 已開發一段時間, 穩定的版本
Brance: 另外一個可開發新功能 (也許是一項新功能版本)


Note:
1. 其於: Switch 可將 Header -> Tag 或 Header -> Branch
2. 在 Header 時可選存 Tag or Branch