2013年10月18日 星期五

好用線上去背工具 Clipping Magic

當臨時找不到photoshop或photoimpact 等圖像處理軟體時,
你說要用小畫家來去背?別開玩笑了!
現在有個好用的線上去背工具-Clipping Magic

[用法]
1. 將想要去背的圖片檔拖曳至網頁中"Drag and Drop Image Here" 方框中(如上圖)
(為保護當事人我們做了簡單處理)  左邊是作業區塊,右邊是處理後的結果呈現

2. 主要工具列介紹
   A. 最左邊紅色的是去背的畫筆,圖上紅色的區域即要被去背的地方。
   B. 綠色的畫筆則是要保留的部分
   C. 橡皮擦則是對紅綠畫筆作修正用
   D. (剩下有空玩玩再補XD)
   
3. 首先用紅色畫筆大概去背
   

4. 再用綠筆畫保留部分
    

    其實不用畫的太仔細,從圖中右邊處理可發現,
    只要紅綠大概標示,就有還不錯的結果!

5.  最後可從上方右邊工具列的部分,去下載處理完的檔案!


[Reference]


2013年4月9日 星期二

ssh using sudo without password

[MOTIVATION]
Sometimes we want to use ssh command to remote machine for some operations,
but it's inconvenient that we need to key the password for "sudo" command.
Especially when we need to create a shell script. We can't key the password directly on it.

[METHOD]
Step:

1. On the remote machine, execute
    $sudo visudo

    and add following line at the end( Change "hadoop" to your username)
    hadoop ALL=(ALL) NOPASSWD: ALL
   

    and Ctrl + X to leave


    type Y
   

    press ENTER to save and leave

2. Return and try
    $ ssh -t user@hostname "sudo ls"

    for example
    $ ssh -t hadoop@192.168.100.1 "sudo ls"

    If you did it right, it just doesn't need to key the password again!
    (And we could use it on shell script directly ~)

    [note]
    Why we use "-t" for ssh here is that it may cause:
    sudo: no tty present and no askpass program specified



[REFERENCE]
http://jeromejaglale.com/doc/unix/ubuntu_sudo_without_password
http://superuser.com/questions/117870/ssh-execute-sudo-command

2013年2月26日 星期二

如何對Map 集合做sort

Java所提供的Map class並無提供任何排序(sort)的函式
所以必需自行撰寫,範例參考如下

   
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;


public class sortMap {
 public static void main(String[] args){
  
  Map<String, Integer> sortMap = new TreeMap<String, Integer>();
  sortMap.put("N1", 5);
  sortMap.put("N2", 3);
  sortMap.put("N3", 1);
  sortMap.put("N4", 2);
  sortMap.put("N5", 4);
  Collection<Integer> sortMapTmp = sortMap.values();
  
  System.out.println("--unsort Map--");
  printSortMap(sortMap);
  
  sortMap = sortMapByComparator(sortMap);
  
  System.out.println("--sorted Map--");
  printSortMap(sortMap);
 }
 
 private static Map<String, Integer> sortMapByComparator(Map<String, Integer> unsortMap){
  
  List<Entry<String, Integer>> list = new LinkedList<Entry<String, Integer>>(unsortMap.entrySet());
  
  // Sorting the list based on values
  Collections.sort(list, new Comparator<Entry<String, Integer>>()
  {
    public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2)
    {
      //若要由小排到大
      //如果 o1 > o2 => 回傳  1
      //     o1 = o2 => 回傳  0 
      //     o1 < o2 => 回傳 -1
      return o1.getValue().compareTo(o2.getValue());
    }
  });
  
  Map<String, Integer> sortedMap = new LinkedHashMap<String, Integer>();
  for (Entry<String, Integer> entry : list)
        {
            sortedMap.put(entry.getKey(), entry.getValue());
        }
  
  return sortedMap;
 }
 
 private static void printSortMap(Map<String, Integer> sortMap){
  
  for(Entry<String, Integer> entry : sortMap.entrySet()){
   System.out.println("Key : " + entry.getKey() + " Value : "+ entry.getValue());
  }
 }
}


[Reference]
http://stackoverflow.com/questions/1448369/how-to-sort-a-treemap-based-on-its-values

2013年2月25日 星期一

Dimensions expected after this token

在宣告 Map 物件時, 需注意內部的<key, value>宣告用法
裡頭不得為常用的 int , 而必須是 Integer

否則會出現"Syntax error on token "int", Dimensions expected after this token "

Example:
(X) Map<String, int> list_test = new TreeMap<String, int>();
(O) Map<String, Integer> list_test = new TreeMap<String, Integer>();