2011年5月20日 星期五

真值表

AB0A&~BA&B~(A|B)~A&BAA^~B~AA^B~BBA|~B~A|B~(A&B)A|B1
100100010011010111
110010011000111011
000001001101011101
010000100110101111


這個是所有的真假值的排列組合

2011年2月4日 星期五

Windows Command Line

dir usage
  1. dir /b *.java
    • list all files end with .java in current directory in simple format
  2. dir /b/s *.java
    • list all files end with .java in current directory recursively in simple format
for usage
  1. for [/d][/r] %i in (set) do command [command-parameters]
    • %i : variable, case sensitive
    • set : file list. ex : (file.txt file2.txt), (*.txt)
    • /d : similar to 1. but (set) is not file list, is a directory list
    • /r : do same "for work" in every sub directory of current place
  2. for /L %variable in (start,step,end) do command [command-parameters]
    • numerical iteration. ex. (1,1,5) = (1 2 3 4 5), (5,-1,1) = (5 4 3 2 1)

  • FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
  • FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
  • FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
    or add usebackq option in options:
  • FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
  • FOR /F ["options"] %variable IN ('string') DO command [command-parameters]
  • FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]
options is list below
  • eol=c : end of line charactor
  • skip=n : skip n lines
  • delims=xxx : delims charactor list
  • tokens=x,y,m-n : 
    • 指定每一行的哪些文字串應該被傳到 for 的內部以用來進行每一個重複操作。
    • 這會導致額外的變數名稱被配置。
    • m-n 格式代表一個範圍,指定了第 m 個到第 n 個字串項。
    • 如果在 tokens= 字串的最後一個字元是星號,則會配置一個額外的變數來接收最後一個字串項被分析後的其他文字。
  • usebackq 
    • 指定新語義開始作用。
    • `反括號`的字串會被當作命令來執行
    • '單引號'字串是純文字字串
    • 此外還允許使用"雙引號"來引用在 filenameset 內的檔名。
example :
     FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

%IMPORTENT%
    when using a variable in batch file, the usage is %%v not %v


看書很快樂!!

邊看書邊思考的時候 看的內容真的很容易記起來
=
剛來這裡的時候買的一本Design Pattern的書

三個禮拜了 第一次翻過去 跟第二次邊看邊想 兩種讀法真的有差

而且內容真的有記起來 看的速度也不見得比較慢

這種感覺 雖然不是很容易抓住

不過有查覺到或許可以透過多練習而習慣跟學會這種讀書的樂趣

這個真的是讀書的方法阿 多想可以多增加大腦的連結 而增加記憶的強度 跟能力

加油!! 希望可以持續

2010年12月13日 星期一

從Ubuntu 10.10 server開始安裝

#pppoe安裝與使用
sudo pppoeconf # 基本上一直按yes跟注意輸入帳號密碼就行了
sudo pon dsl-provider # 開啟連線
sudo poff # 關閉連線
sudo plog # 檢查狀態

apt-get update # 要得先更新

#在Ubuntu 10.10 server 中 安裝xwindows
apt-get install xinit
apt-get install gnome-core
apt-get install gdm xscreensaver
apt-get install ttf-arphic*
startx

# 安裝了視窗介面 跟 網路 就可以隨意了
# 目前感覺起來真的功力有增加
#以下為好用工具
apt-get install jockey # 管理driver
apt-get install vim      # 現在已經是沒有vim沒有辦法過日子了
sudo add-apt-repository ppa:lazyscripts/stable                  # 常用工具都在這裡 lazyscripts
sudo apt-get update && sudo apt-get install lazyscripts    # 包括gcin、多媒體撥放等
apt-get install file-roller # 預設是把壓縮檔mount到桌面 改回跳出顯示壓縮檔內容的界面
apt-get install unrar lha p7zip-full p7zip-rar

2010年12月10日 星期五

更改jvm

最近電腦常常當機 可是也不曉得為什麼 結果在~/裡面發現一些當機的資料
hs_err_pidxxxxx.log
仔細看了一看 發現是 jvm出了問題 也難怪開eclipse當機

依照網路上的資料 用了下面兩行顯示jvm跟更改jvm
sudo update-java-alternatives -l
sudo update-java-alternatives -s java-6-sun
但是 鐺鐺~~ 沒有那麼順利就成功的!!!
出現了一堆錯誤訊息 大致上是說少了一些java plugin
於是先安裝 sun-java6-plugin 就完成了!!
語法如下:
sudo apt-get install sun-java6-plugin
sudo update-java-alternatives -s java-6-sun
成功的更新了jvm!!

2010年12月8日 星期三

安裝 gcin

現在的linux也是越來越人性化了~~ 想當年~~ orz
兩行!!!!
sudo apt-get install gcin
im-switch -s gcin

gcin的介面還蠻舒服的 而且倚天鍵盤的設定 很容易找
雖然輸入不是很習慣 但是...是好物!!

2010年12月1日 星期三

ssh 免密碼登入

果然是已經學過的事情 在學一次果然很快 ="=
但是不紀錄下來 真的是不行
---------------------------------
三個步驟
1 ssh-keygen -t dsa
2 scp公鑰 到目標伺服器
3 連線到目標伺服器 將公鑰檔案附加到~/.ssh/authorized_key中

特別要注意的事情是
authorized_key的權限是600如果不是~~歹勢~ 是沒有辦法成功的!!!
至於scp的用法 scp 檔案 遠端帳號@遠端伺服器名稱

2010年11月21日 星期日

Expression Parser - 五則運算式解析

import java.util.HashMap;

public class OperatorPrioritySaver {
 HashMap priorityMap = new HashMap();
 public OperatorPrioritySaver() {
  priorityMap.put("+", 1);
  priorityMap.put("-", 1);
  priorityMap.put("*", 2);
  priorityMap.put("/", 2);
  priorityMap.put("%", 2);
 }
 int comp(String op1, String op2) throws RuntimeException{
  if(priorityMap.get(op1)==null ){
   throw new RuntimeException("not an accept op :" +op1);
  }
  if(priorityMap.get(op2)==null ){
   throw new RuntimeException("not an accept op :" +op2);
  }
  return priorityMap.get(op1).compareTo(priorityMap.get(op2));
 }
 boolean acceptOperator(String test){
  return priorityMap.keySet().contains(test);
 }
}
import java.util.Stack;

public class ExpressionParser {
 private String exprString ;
 private int value ;

 OperatorPrioritySaver opsvr = new OperatorPrioritySaver();

 Stack nums = new Stack();
 Stack ops = new Stack();
 
 public ExpressionParser(String exprString) {
  this.exprString = exprString ;
 }
 public String getExprString(){
  return exprString ;
 }
 public int getValue() {
  return value;
 }
 
 public String toString() {
  return exprString +" = " + value ;
 }
 public void parse() {
  String terns[] = exprStr2Terns();
  
  int num = 0 ;
  String op = null ;
  for(String tern : terns){
   try{
    num = Integer.parseInt(tern) ;
    op = null ;
   }catch(NumberFormatException e){
    op = tern ;
   }
   
   if(op == null){ // number
    nums.push(num);
   }else{ // operator
    String top = null ;
    if("(".equals(op) || ")".equals(op)){
     if("(".equals(op)){
      ops.push(op);
     }else if(")".equals(op)){
      while( (top = ops.pop()) != null && 
        (!top.equals("("))){
       doOperator(top);
      }
     }
    }else if(opsvr.acceptOperator(op)){
     while( ops.size() > 0 &&
       (top = ops.peek()) != null && 
       (!top.equals("(")) && 
       (opsvr.comp(top, op)>=0)){
      top = ops.pop();
      doOperator(top);
     }
     ops.push(op);
    }else {
     System.err.println("Unsupported operator : " + op);
    }
   }
  }
  while(ops.size() != 0){
   doOperator(ops.pop());
  }
  
  value = nums.get(0);
 }
 private String[] exprStr2Terns() {
  // 目前使用空格隔開所有的符號
  // 想不用空格隔開 可以自行修改
  return exprString.split(" ");
 }

 private void doOperator(String op) {
  char opCh = op.toCharArray()[0];
  int num2 = 0, num1 = 0;
  switch(opCh){
  case '+':
   num2 = nums.pop();
   num1 = nums.pop();
   nums.push(num1+num2);
   break;
  case '-': 
   num2 = nums.pop();
   num1 = nums.pop();
   nums.push(num1-num2);
   break;
  case '*': 
   num2 = nums.pop();
   num1 = nums.pop();
   nums.push(num1*num2);
   break;
  case '/': 
   num2 = nums.pop();
   num1 = nums.pop();
   nums.push(num1/num2);
   break;
  case '%': 
   num2 = nums.pop();
   num1 = nums.pop();
   nums.push(num1%num2);
   break;
  }
 }
 public static void main(String[] args) {
  ExpressionParser expr = new ExpressionParser("( 1 + 2 ) * 3");
  expr.parse();
  System.out.println(expr);
 }
}

2010年11月19日 星期五

安裝了Ubuntu

昨晚失眠~~ (我到底再說什麼到底XD)
其實是因為最近睡覺時間都是四五點,昨晚又真的時間到了還很不想睡
於是起床開了我那見鬼的XP,竟然開不了機
在有著十分充分理由的情況下,我把他給format掉了!!!

安裝的過程也不是十分順利
因為我最先找的10.10並不是很順利的可以安裝
我本來以為是我自己硬碟怪怪的
還找了指令把|MBR給清乾淨
dd if=/dev/zero of=/mnt/sda bs=446 count=1
這個指令其實是在做複製位元的動作 把if複製到of去長度為bs 這個就是在將硬碟磁區的mbr清除
bs=446是因為 最前面的512 byte其實就是整個mbr
而之前的446個byte是在存開機程式的 後面的(512 - 446)byte則是 儲存磁區分割的資料
count參數呢~~ 待查!!

搞了半天 等我從燒了一片10.04以後就順利的安裝完成了!!! GOOD!!

Ubuntu + lazyscripts + apt-get 讓我省了不少時間
音樂影片都可以順利的撥放
看到deb結尾的副檔名就是很順利的ko了

目前要在我的ubuntu裡面安裝LAMP希望可以順利成功
PS.安裝MySQL時抓下來的是rpm檔 在安裝了rpm要來rpm -ivh時
沒想到竟然可以用alien將rpm轉換成deb 然後在點兩下就安裝了 真的是太方便了!!!!
還差把LAMP都整合在一起 這個感覺起來是大工程~~ 加油!!!

2010年11月16日 星期二

國中時的題目 用天秤找出一堆砝碼中唯一過重的那一個。

import java.util.Arrays;
import java.util.Random;

public class DrawingPanel {
 static int N = 8;
 public static void main(String[] args) {
  float balls[] = new float[N];
  Arrays.fill(balls, 1f);

  Random rand = new Random();
  balls[rand.nextInt(N) % balls.length] = 1.2f;
  
  int rs = compare(balls, 0, balls.length);
  
  for(int i = 0 ; i < balls.length ;i++){
   System.out.println(String.format("%c : %.1f", 'A'+i, balls[i]));
  }
  System.out.println("ans : " + (char)('A'+rs));
  
 }
 static int compare(float[] balls, int first, int last) {
  int size = last-first;
  if(size == 1){
   return first ;
  }
  int group = size / 3 ;
  if( size % 3 != 0)
   group = size / 3 + 1 ;
  
  float gp1 = sum(balls, first, first+group);
  float gp2 = sum(balls, first+group, first+2*group);
  if(gp1 > gp2){
   return compare(balls, first, first+group);
  }else if(gp1 < gp2){
   return compare(balls, first+group, first+2*group);
  }else{
   return compare(balls, first+2*group, last);
  }
  
 }
 static float sum(float arr[], int first, int last){
  float sum = 0f ;
  for(int i = first ; i < last ; i++)
   sum += arr[i];
  return sum ;
 }
}
這是在某個論壇回答人家問題的時候寫的!!
想到可以把他貼過來~~