2012年12月26日 星期三

【分享】瀏覽器的頁籤

不知道有沒有人發現,若用Chrome(版本 23.0.1271.97 m)開很多很多頁籤,大小會愈來愈小,你在其中一個頁籤點按關閉時,只要你的滑鼠不移開,關閉的「x」都在會在同一個地方,只有在你滑鼠移開後,他的頁籤大小才會調整。

好奇用了Firefox(17.0.1)去試,也有同樣貼心的設計。

最後當然要用IE(8)試看看囉!結果是「呵呵」。

你知道我的意思的。


2012年12月18日 星期二

若是前屋主或舊房客的信件一直寄來

我一直有這個困擾:就是會收到不知是前屋主或以前房客的信件,之前的處理方式都是把它碎掉。

昨天,終於想起該查查Google看其他人是如何處理?大部份的人都是寫說「查無此人,請退回」,或是「此人己不住此地,請退回」,然後投回郵筒,好像就會退回到寄信人那邊。

今天去郵局寄信時,順便問了一下郵局的員工是不是這樣處理,跟料想中的一樣回答:「是」,耶!以後就這樣做了,多少能減少一些擾人的信件。

2012年12月14日 星期五

【筆記】SVN每次都要求輸入密碼解決方法

最近因為電腦的帳號權限調動後,造成每次連到SVN去拉程式、compare、update,或commit,每次都需要輸入用戶名稱和密碼,即使勾選了儲存還是每次都會要求輸入,實在令人感到些許困擾。

後來上網查了一下,在Windows作業系統(如:XP),這些資料會被儲存在下列這個資料夾

C:\Documents and Settings\{YOUR_ACCOUNT_NAME}\Application Data\Subversion\auth中

解決的方法是把auth這個資料夾刪了。之後做update、compare等工作時,再次輸入密碼後,勾選儲存即可。

若系統為ubuntu,資料夾auth在~./subversion/中

2012年11月22日 星期四

Axis2與Spring的整合

最近在工作上會使用到用Axis2來做Web Service,因為還要使用Spring的架構,所以找到了在Axis2官網的一個Document,但跟著一步步地去做,將產生好的aar檔部署到Service Server上去後,還是會遇到問題,錯誤為"Axis2 can't find the Spring application context"之類的問題。

後來發現是在 document中,在services.xml中設置SpringInit時有問題,這個問題解決方式只要去參考下載的Axis2   Binary Distribution之後,去參考他的samples中,有個pojoguidespring資料夾。去看它src下面,META-INF中的services.xml的設置。

2012年11月4日 星期日

【筆記】MySQL select interval

在MySQL中,要取得前幾天、前幾個月、或前幾年的日期,有個好用的方法,比如說要取一天前的datetime:
select now() - interval 1 day
結果如下:
+------------------------+
| now() - interval 1 day |
+------------------------+
| 2014-12-01 22:14:24    |
+------------------------+
1 row in set (0.00 sec)
你也可以搭配MySQL的DATE_ADD或DATE_SUB來使用,如:
select date_add(now(), interval 1 month); 
通用寫法如:
date + INTERVAL expr unit
date - INTERVAL expr unit
上列unit如下表示
秒:second
分:minute
天:day
週:week
月:month
年:year

unit也可以用多種單位表示,如使用HOUR_SECOND表示由時到秒,這時上列的表示式就要寫成'1:1:1',如:
select now(),date_sub(now(), interval '1:1:1' HOUR_SECOND);
上列執行結果如下:
+---------------------+-----------------------------------------------+
| now()               | date_sub(now(), interval '1:1:1' HOUR_SECOND) |
+---------------------+-----------------------------------------------+
| 2014-12-02 22:10:41 | 2014-12-02 21:09:40                           |
+---------------------+-----------------------------------------------+
結果顯示時、分、秒都減去一單位。

更詳盡的用法請參考MySQL 5.5 Reference Manual

2012年11月2日 星期五

如何在Eclipse中使用PHPUnit(苦工版)

使用EclipseExternal Tools,如下開啟設定視窗:

開啟視窗如下:


依上圖第一步驟,新增一個要跑的程式。


於第二步驟幫他取個名字。

Location欄位中,去取選、或輸入你要跑的程式名稱:






再來選擇執行該程式的資料夾,直接按「Browse Worksapce…」選project中的tests資料夾:





























再來在「Arguments」欄位中,輸入phpunit的參數,就是在command視窗中跑phpunit時,phpunit後面的那一串。











完成後,在下列列表就可以看到剛新增的程式:


做一次設定,之後就可以跑你要的Test Case了,結果會在EclipseConsole View中顯示。











2012年10月30日 星期二

Java String 的「==」和「equals」

今天同事問了一個Java String比較的問題,讓我想起剛學Java時,也有的相同疑惑!

在Java中,字串是使用String類別來建構,請參考Java Gossip: String 類別一個字串物件一旦被配置,它的內容就是固定不可變的(immutable),也就是說,當指定了兩個String變數後,他在記憶體中,是兩個由兩個不同的記憶位置,指向不同的記憶體區塊。
如:
String s3 = new String("Hello");
String s4 = new String("Hello");
System.out.println("s3 == s4 ? " + (s3 == s4)); //印出false
System.out.println("s3 equals s4 ? " + (s3.equals(s4)));  //印出true
由上例,可以知道:若要比對字串內容是不是相等,要使用equals,來看看String類別中,equals方法的實作:
    /**
     * Compares this string to the specified object.  The result is {@code
     * true} if and only if the argument is not {@code null} and is a {@code
     * String} object that represents the same sequence of characters as this
     * object.
     *
     * @param  anObject
     *         The object to compare this {@code String} against
     *
     * @return  {@code true} if the given object represents a {@code String}
     *          equivalent to this string, {@code false} otherwise
     *
     * @see  #compareTo(String)
     * @see  #equalsIgnoreCase(String)
     */
    public boolean equals(Object anObject) {
       if (this == anObject) {
           return true;
       }
       if (anObject instanceof String) {
           String anotherString = (String)anObject;
           int n = count;
           if (n == anotherString.count) {
               char v1[] = value;
               char v2[] = anotherString.value;
               int i = offset;
               int j = anotherString.offset;
               while (n-- != 0) {
                   if (v1[i++] != v2[j++])
                       return false;
               }
               return true;
           }
       }
       return false;
    }
那你是否會問,用「==」去比較兩個String變數,是什麼意思?其實,就是去看這兩個變數所指向的記憶體位置是否相同。有興趣的可以參閱http://www3.ntu.edu.sg/home/ehchua/programming/java/J3d_String.html,這裡對String有更進一步的說明。

另外,值得一提的是,若你在同一程式區塊中,不用new的方式,而是直接用""的方式設定字串變數的話,用「==」是會回傳true的,如:
public static void main(String[] argv){
 String s1 = "Hello";
 String s2 = "Hello";
 String s0 = get();
 System.out.println("s1 == s2 ? " + (s1 == s2));//印出true
 System.out.println("s0 == s1 ? " + (s0 == s1));//印出true
        System.out.println("s0 == s2 ? " + (s0 == s2));//印出true
}

private static String get(){
 return "Hello";
}

這是Java為String設計的一個特別叫「string common pool」的機制,在上列的網頁中有說明,主要是對常用的字串保留記憶體空間,來節省使用的空間,在上列中,對於"Hello"字串,會在記憶體中產生一個String物件,讓s1、s2、s0都指向它,所以用「==」去比較時,都會回傳true。

2012年10月25日 星期四

好用的MongoDB Eclipse GUI外掛-MonjaDB


MonjaDB是一套MongoDB客戶端的GUI工具,可以直接裝在Eclipse中。


前往eclipse marketplace


點選綠色箭頭,複製紅框中的網址。


開啟Eclipse,點選「Help」、「Install New Software...」,將上列網址加入新增的Repository。之後勾選做安裝,再重開Eclipse。


Eclipse重新開啟後,點按選單列的「Windows」、「Open Perspective」,就可以看到MonjaDB的選項。


開啟的UI如下所示,在左上方的空白處按滑鼠右鍵,就可以新增MongoDB連線。



2012年10月24日 星期三

2012Java認證日來囉!

免費,而且參加三、四次的感想,我覺得內容都還不錯!有興趣的請參考:
http://www.uuu.com.tw/public/content/edm/eDM0927/eDM.html

【筆記】在Ubuntu中,Java執行Shell Script,並runtime傳入參數

程式碼如下:


其中:

使用ProcessBuilder建構子(1.5後才有的,請參考:http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html)設定要執行的script和要傳入的參數:
ProcessBuilder pb = new ProcessBuilder("./myscript.sh", "sampleParam1"); 
//這在shell script中,可以用$1去接此參數sampleParam1
可以使用ProcessBuilder中的environment方法,來設定或取得執行中的環境變數,使用ProcessBuilder中的directory方法來設定工作目錄,就是要執行script的目錄。

範例script如下:



執行java程式後,可以看到在執行工作目錄產生了a.txt,如下:



檢視a.txt內容,可以看到java中設定的參數傳入到sciprt中,並輸出到a.txt中:

2012年10月23日 星期二

【解決】Ubuntu解決Eclipse Subversion Incompatible JavaHL library loaded. 1.7.x or later required.的問題

有時裝在Eclipse上的Subversion版本比較高,會出現下列的錯誤:「Incompatible JavaHL library loaded. 1.7.x or later required」。
這是因為在你電腦上,Subclipse需要JavaHL版本太舊了,請參考:http://subclipse.tigris.org/wiki/JavaHL

解法:

  • 前往http://www.collab.net/downloads/subversion#tab-1下載Subversion 1.7.7 (Linux x86_64)到本機後,直接用解壓縮程式開啟,將其中的CollabNet_Subversion的資料夾解壓縮到/opt下。
  • 開啟Eclipse的eclipse.ini,在-vmargs這一行下面加上「-Djava.library.path=/opt/CollabNet_Subversion/lib」,重新開啟Eclipse就好。

2012年6月6日 星期三

Ubuntu 更新

  • 若在Ubuntu中無法順利更新,可能是server掛掉的關係,就變換主機,變更方式為應用程式-》更新管理員-》設定-》更換下載自...
    • 更換完要記得update清單:sudo apt-get update

2012年4月20日 星期五

解決Eclipse用SVN比較版本差異時,背景會變黑的問題

最近在使用Eclipse開發時,若使用SVN去比較版本差異時,會遇上一個問題是畫面背景會是黑的,如:

後來google之後,再做嘗試,才發現原來是Aptana plugin造成的,解決方法為如下:
到Window->preference,如下:
再選Apatana Studio,把下圖中右邊方框中,選擇Eclipse或其他你喜歡的樣式,就可以了。



2012年3月20日 星期二

Struts2的s:if tag

import com.opensymphony.xwork2.ActionSupport;

public class DemoAction extends ActionSupport {

    /**
     *
     */
    private static final long serialVersionUID = 3847991430058456326L;

    private String demoString;

    ...
   
    public String getDemoString() {
       return demoString;
    }

    public void setDemoString(String demoString) {
       this.demoString = demoString;
    }
}
若要在JSP中使用來判斷demoString的值是否為「0」的話,則是利用Struts2的tag,用法如下:&s:if <s:if test="%{demoString eq 0}">

</s:if>
<s:elseif test="%{demoString eq 2}">
    <%-- other condition --%>
</s:elseif>
<s:else>
<%-- else --%>
</s:else>


注意:上列中test=""中是%{...}


2012年3月15日 星期四

【筆記】MySQL的USING用法

USING是在MySQL中使用join時可以使用,當兩個要join的資料表中,用在on的欄位名稱相同時,就可以用using代替,如:
在A表中有欄位C1,在B表中也有欄位C1,一般在join A和B兩個Table時,會寫成:
select a.XX, b.yy from A a inner join B b on a.C1 = b.C1
但當join用的欄位名稱相同時,如上列的C1,就可以寫成:
select a.XX, b.yy form A a inner join B b using(C1)

2012年3月10日 星期六

Aptana對jQuery的支援

依據上一篇的安裝後,Aptana貌似已可支援jQuery,若仍有問題,依據下列網址的教學來安裝或更新Budle Development
https://wiki.appcelerator.org/display/tis/JavaScript+Library+Support#JavaScriptLibrarySupport-jQuery%28

好用的Javascript開發工具-Aptana

之前在一位朋友的介紹下,開始使用Aptana,是一項免費的開發工具,使用起來,很是喜歡!


 有兩種方式可以下載,一個是「Standalone Version」,下載完後安裝起來,你會發現,就是變形的Eclispe嘛!習慣用Eclipse開始的朋友應該對他的開發環境不會太陌生。

拜歐習慣用「Eclipse Plug-in Version」的方式安裝在日常使用的Eclipse上,點選下載頁中的「Eclipse Plug-in Version」再按下方的「Download」就會進到下載頁面,看到如下圖的區塊。



 將中間那塊藍色超連結複製起來(按旁邊的圖示就可複製,真貼心!),開啟你的Eclipse,依上面的指示操作,就會看到下列的安裝畫面,再來只要是「Next and Finish」,應該就可以成功地安裝囉。






安裝成功重新開啟後,在編輯Javascript時,就會出現輔助的功能囉。(如果再怎麼試,還是沒跑出來,請確認你對該檔案的類型,是以Aptana編輯器開啟的哦!)