2014年3月14日 星期五

Shell Script 指令置換 (命令替換)

` 反引號、 $(command) 皆可以用來做指令置換 (命令替換),將反引號、 $(command) 中的字符串做為命令來執行,我們在用shell編程時經常用的到。將系統命令的執行結果賦給一個變量。

A=`date`
echo $A 顯示的不是date而是當時的時間串
比如有一文件A的內容如下
ABCDEFG
1234456
abcdefg

B=`cat A|grep 234` # 檢索文件A中含有字符串234的行
echo $B 將顯示為1234456
echo "$B" 將顯示為什麼?
echo "\$B" 將顯示為什麼?


String contains in Shell Script

string='My string';

if [[ $string == *My* ]]
then
  echo "It's there!";
fi

Linux 運用 date 指令取得日期時間


1. 取得今天的日期時間
date '+%Y%m%d%H%M%S'

2. 取得昨天的日期時間
date -d'-1 day' 或 date -d'1 day ago'

3. 取得明天的日期
date -d'1 day'

4. 取得上個月的日期
date -d'-1 month'

5. 取得上星期的日期
date -d'-1 week'



$ date --date="now"   // 現在時間

$ date --date="yesterday"  // 昨天

$ date --date="1 days ago"  // 昨天

$ date --date="3 days ago"  // 三天前

$ date --date="tomorrow" // 明天

$ date --date="1 days" // 明天

$ date --date="3 days" // 三天後

 

格式化輸出:

date [+format]

$ date +"%Y %m-%d, %H:%M"

2014年3月6日 星期四

Java Applet 開啟本地資料夾

Java Applet 簡介與範例可以參照 Wiki
http://zh.wikipedia.org/wiki/Java_applet

import java.applet.Applet;
import java.io.File;
import java.io.IOException;

public class OpenExplorer extends Applet {
/**
* 
*/
private static final long serialVersionUID = 1L;

public void init() {
        //Execute a job on the event-dispatching thread; creating this applet's GUI.
String url = getParameter("filepath").replace("file:", "").replaceAll("\\\\|/", "\\"+System.getProperty("file.separator"));
System.out.println(getParameter("filepath"));
File f = new File(url);
String command = "";
if(!f.isDirectory()) command = "/select,";

        try {
Process p = new ProcessBuilder("explorer.exe", command + url).start();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
        
    }

}

2013年10月29日 星期二

Web Services 觀念


Web Services的起源
Web應用的巨大成功和不斷發展,使其滲透到商業領域和個人生活的各個方面。人們只要使用瀏覽器,就可以享受到各種各樣的Web服務,例如網上購物,網上交易,網 ​​絡遊戲,預定車票,網上聊天和交友等等。與此同時,由於Web技術所帶來的優勢(統一的客戶端和較好的維護性),使一些傳統的應用紛紛轉型到BS結構上。
然而,在發展中,逐步暴露了一些問題。所有這些Web頁面都是為人準備的,是讓人去閱讀,去輸入,去判斷。因此各 ​​種反映視覺效果的內容佔用了大量的網絡帶寬,例如各種圖片,字體信息,文字排版樣式等。而真正含有高價值的一些信息,被深深埋在這些顯示信息中,很難被其他應用和程序所使用。更重要的是,各種web服務之間缺少交互和通訊的機制。
程序之間的互相通訊很重要嗎?簡單舉一個例子。
假設你經常去國外出差,在你回國以後,第一件事就是費用報銷了。而你們公司有這樣的財務規定,所有的報銷款,都按報銷當天的外匯比價進行結算。因此在你填寫報銷單的時候必須先填寫每一筆在各個國家的花消,然後上網查出當天的外匯比價,填寫到報銷單上。剩下的事情也許不用你做了,你的報銷單填寫工具會自動進行換算和統計。
覺得有什麼不妥嗎?作為IT公司的員工,也許都有一個特點,計算機能做的事情,盡量要計算機去做。外匯比價的查詢可以讓計算機自動去做嘛!然而,讓你的程序自動去網頁上查找指定的外匯比價可不是一件容易的事。因為這些網頁是給人閱讀的, ​​人眼和大腦的反應速度有多快,它們可以從一整頁信息中快速定位到你所要的內容,而且無論網頁怎樣變化和改版都不會帶來太大的影響。而應用程序想要做同樣的事就差得太遠了。因此,現在需要的是專門為應用程序制定的Web服務。
隨著應用程序之間通訊的需求越來越大,這就需要製定統一的標準和協議。HP公司是最先提出這個觀點的公司,他們制定了有關“ e-Speak”的標準來保證應用程序之間的交互,並聲稱將成為下一代Internet信息交互的標準。而隨後,MicroSoft意識到此計劃的美好前景,便推出了.Net戰略;IBM很快就發布了Web Services Toolkit(WSTK),和Web Services Development Environment(WSDE),申明對Web Services的全力支持。與此同時,Oracle也開發出自己的Dynamic Services,並和Oracle 8i Release 2集成在一起。在這以後,W3C統一制定了Web Services的各種標準。而SUN公司在宣布了自己的Web Services的框架以後,將Web Services的標準溶入J2EE的環境,使Web Services有了廣泛支持的基礎和平台。

Web Services的基本原理
Web Services是通過一系列標準和協議來保證程序之間的動態連接。其中最基本的協議包括:SOAP, WSDL, UDDI
·         SOAP:是“ Simple Object Access Protocol”的縮寫,SOAP是消息傳遞的協議,它規定了Web Services之間是怎樣傳遞信息的。簡單的說,SOAP規定了:
1.
傳遞信息的格式為XML。這就使Web Services能夠在任何平台上,用任何語言進行實現。
2.
遠程物件方法調用的格式。規定了怎樣表示被調用對像以及調用的方法名稱和參數類型等。
3.
參數類型和XML格式之間的映射。這是因為,被調用的方法有時候需要傳遞一個複雜的參數,例如,一個Person物件。怎樣用XML來表示一個物件參數,也是SOAP所定義的範圍。
4.
異常處理以及其他的相關信息.
·         WSDL:是“ Web Services Description Language”的縮寫.意如其名,WSDL是Web Services的定義語言。當你實現了某種服務的時候(如,股票查詢服務),為了讓別的程序調用,你必須告訴大家你的服務的接口.例如,服務名稱,服務所在的機器名稱,監聽端口號,傳遞參數的類型,個數和順序,返回結果的類型等等.這樣別的應用程序才能調用你的服務。WSDL協議就是規定了有關Web Services描述的標準。
·         UDDI:是Universal Description, Discovery, and Integration的縮寫。簡單說,UDDI用於集中存放和查找WSDL描述文件,起著目錄服務器的作用。

2013年10月18日 星期五

一些名詞簡易解釋


SDK(Software Develop Kit,軟件開發工具包):用於幫助開發人員的提高工作效率。各種不同類型的軟件開發,都可以有自己的 SDK。Windows 有 Windows SDK,DirectX 有 DirectX 9 SDK,.NET開發也有 Microsoft .NET Framework SDK。JAVA 開發也不含糊,也有自己的 Java SDK。

Java SDK(JDK):最早叫 Java Software Develop Kit,後來改名為 JDK,即 Java Develop Kit。JDK 作為 Java 開發工具包,主要用於構建在 Java 平台上運行的應用程序、Applet 和組件等。

JRE(Java Runtime Environment,Java 運行環境):也就是 Java 平台。所有的 Java 程序都要在 JRE 下才能運行。JDK 的工具也是 Java 程序,也需要 JRE 才能運行。為了保持 JDK 的獨立性和完整性,在 JDK 的安裝過程中,JRE 也是安裝的一部分。所以,在 JDK 的安裝目錄下有一個名為 jre 的目錄,用於存放 JRE 文件。

JVM(Java Virtual Machine,Java 虛擬機):是 JRE 的一部分。它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。JVM 有自己完善的硬件架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。Java 語言最重要的特點就是跨平台運行。使用 JVM 就是為了支援與操作系統無關,實現跨平台。

另外還有幾個名詞需要解釋一下:
J2EE – Java 2 Enterprise Edition(企業版)
J2SE – Java 2 Standard Edition(Java2標準版)
J2ME – Java 2 Micro Edition(微型版)

J2EE、J2SE、J2ME 的概念區別
J2EE:Java 2 Enterprise Edition,是 Java 的一種企業版,用於企業級的應用服務開發。
J2SE:Java 2 Etandard Edition,是 Java 的標準版,用於標準的應用開發。
J2ME:Java 2 Micro Edition,是 Java 的微型版,常用於手機上的開發。

J2SE、J2EE、J2ME 是 java 針對不同的的使用來提供不同的服務,也就是提供不同類型的類庫。針對企業網應用的 J2EE(Java 2 Enterprise Edition)、針對普通 PC 應用的 J2SE(Java 2 Standard Edition)和針對嵌入式設備及消費類電器的 J2ME(Java 2 Micro Edition)三個版本,對於初學者,都是從 J2SE 入手的。

2005年6月,JavaOne大會召開,SUN公司公開Java SE 6。此時,Java的各種版本已經更名以取消其中的數字「2」:J2EE更名為Java EE, J2SE更名為Java SE,J2ME更名為Java ME。

2013年9月18日 星期三

Git 簡介、常用指令

Git是用於Linux核心開發的版本控制工具。與CVS、Subversion一類的集中式版本控制工具不同,它採用了分布式版本庫的作法,不需要伺服器端軟體,就可以運作版本控制,使得原始碼的發布和交流極其方便。Git的速度很快,這對於諸如Linux kernel這樣的大項目來說自然很重要。Git最為出色的是它的合併追蹤(merge tracing)能力。



常用指令


git clone {account}@{host}:{project}.git

git add
git add .
→ 將資料先暫存到 staging area, add 之後再新增的資料,
於此次 commit 不會含在裡面.
git add filename
git add modify-file
→ 修改過的檔案, 也要 add. (不然 commit 要加上 -a 的參數)
git add -u
→ 只加修改過的檔案, 新增的檔案不加入.
git add -i
→ 進入互動模式
git rm filename
→ 刪除檔案
git mv filename new-filename
→ 修改檔名、搬移目錄
git status
→ 看目前的狀態

git tag
git tag
→ 列出既有 tag
git tag -l "XX.*"
→ 搜尋XX.*

git reset
git reset xxxx --hard
→ 強制恢復到某一版本
git reset --soft HEAD^
→ 執行 git commit,發現訊息寫錯想要修改,可以使用。
       會刪掉 commit,在執行一次 commit 就可。

git branch & git checkout
local 端產生新的 branch
git branch
→ 列出目前有多少 branch
    git branch –r
→ 列出所有 Repository branch
    git branch –a
→ 列出所有 branch
git branch new-branch
→ 產生新的 branch (名稱: new-branch), 若沒有特別指定,
會由目前所在的 branch / master 直接複製一份
git branch new-branch master
→ 由 master 產生新的 branch(new-branch)
git branch new-branch v1
→ 由 tag(v1) 產生新的 branch(new-branch)
git branch -d new-branch
→ 刪除 new-branch
git branch -D new-branch
→ 強制刪除 new-branch
git checkout -b new-branch test
→ 產生新的 branch, 並同時切換過去 new-branch

local 端切換 branch
git checkout branch-name
→ 切換到 branch-name
git checkout -b new-branch test
→ 產生新的 branch, 並同時切換過去 new-branch
git checkout filename
→ 還原檔案到 Repository 狀態
git checkout HEAD
→ 將所有檔案都還原到上一版(最後一次 commit 的版本).
(git checkout -f 亦可)
git checkout xxxx
→ 將所有檔案都還原到 xxxx commit 的版本
git checkout -- *
→ 恢復到上一次 Commit 的狀態(*改成檔名, 就可以只恢復那個檔案)

local New Repository
git init
git add .
git commit -m "init"

git remote add origin git@10.1.100.xx:{Repository Name}.git
# Creates a remote named "origin" pointing at your GitHub repository

如何在 remote site 增加/移除一個 branch
    git push origin origin:refs/heads/branch_name
→ 如果 branch_name 不存在的話
git push origin local_branch_name:remote_branch_name
→ 如果 branch 已經在 local 了,只是要推上去
Or
git push origin HEAD
→ 如果 branch 已經在 local 了,只是要推上去
加入branch對應設定
vim .git/config

如何移除 remote site 的 branch
git push origin :heads/branch_name
→ branch_name 是你想要移除的 remote branch 名稱

移除 remote site 的 branch 描述資料,branch –a 時就不會再列出
git remote prun origin

開始追蹤 remote branch (當你下一次 pull時, 你會對那個新的 branch_name做 sync)
    git checkout --track -b branch_name origin/branch_name

git commit
     git commit -m "註解" -a
     git commit -F commit.txt -a

git pull & push
git push origin master –tags
→ master 是你想要推上的 branch, --tags 若有 tag 一起推上.
git pull origin master
→ master 是你想要 sync 的 branch.
git blame
git blame
git blame hello.c

→ 是一個看誰在哪一版修改了什麼的工具。