2010年11月17日 星期三

ACCESS 不支援 LIMIT 的替代作法

SELECT TOP [pageSize] * FROM (SELECT TOP [pageSize*currentPage + 1] * FROM news WHERE constraint='constraint'  ORDER BY id DESC ) ORDER BY id ASC

其中紅色的地方 pageSize 是一頁顯示的筆數、currentPage 是現在要顯示的是第幾頁(假設起始序號是 0)。

2010年8月15日 星期日

PHP 版驗證碼產生器

http://samsharehome.blogspot.com/2008/12/phpgoogle.html
程式的限制是必須支援 PHP5 以及 GD
剛剛測試上傳到 phpnet 的伺服器是可以正常運作的
不過放在我本機的 Appserv 卻產生不出圖片,不知道為什麼Orz...

測試程式碼下載位置:http://sam.wang.0723.googlepages.com/verify.rar

參考圖:

2010年8月11日 星期三

WEKA:由程式產生資料庫 Instances

WEKA API 請參閱官方網站:http://www.cs.waikato.ac.nz/ml/weka/

由於 WEKA 有自己專用的檔案格式 ARFF
但資料在記憶體中做完 preprocessing 以後,還得特地存成 *.arff 檔
再叫 WEKA 的 API 把 *.arff 檔讀進來,顯然是很蠢的事情=..=~
經過一番尋找,總算在官方文件中發現產生 Instances 資料庫的方法了!

可參閱:Creating an ARFF file

2010年8月6日 星期五

WEKA:K-Means 分群演算法

K-Means 分群演算法:
輸入一群資料,以及設定為需要分成 c 群
演算法會先隨便找出 c 個點當作中心點
然後對剩下的每個點都去計算跟這 c 個中心點的距離,來決定要把他們分在哪一群
遞迴是先找出這 c 群中下一個中心點
也就是對每一個點都去計算群內其他點到這個點的距離平方
找出全體的距離平方最短的那個點,就是下一個中心點~
而如果每一群找出來中心點都跟原本一樣,就表示已經找到局部最小值了~

2010年7月25日 星期日

監視 Java 的記憶體使用率

之前轉過一篇用 JConsole 監視記憶體狀況的文章
不過用 JBuilder 2007 Turbo,執行時產生的 process 不知為啥 JConsole 無法監視
後來只好再找別的方法了~

Java VisualVM 也是跟 JConsole 一樣夾在 JDK 裡面的附贈品
目前用的版本是 v1.6.0_21
官方文件可以參考:這裡
安裝 JDK 後就會在 JDK 的 /bin 資料夾內有 jvisualvm.exe 可以執行
執行後在左邊 Local 處會即時偵測有在執行的 Java process
只要在要觀察的 process 上雙擊就可以看他的資訊了~

參考圖:

背景綠色的是因為我的電腦就這樣設定...(茶)

2010年4月23日 星期五

Java distribution function:SSJ 2.2

首頁:http://www.iro.umontreal.ca/~simardr/
線上文件:http://www.iro.umontreal.ca/~simardr/ssj/doc/html/
原始碼(.jar)下載位置:http://www.iro.umontreal.ca/~simardr/ssj/ssj-20091109.zip

匯入 .jar 檔的方法,以 JBuilder 2007 Turbo 為例
只要將檔案貼到 C:\JBuilder2007\jre\jre\lib\ext 後重新啟動 JBuilder 2007 即可。

2010年4月8日 星期四

StringTokenizer 與 split( ) 的差別

public static void main(String[] args) {
 String str = "1,2,,3";
 String delimiter = ",";
 StringTokenizer tokens = new StringTokenizer(str, delimiter);
 while(tokens.hasMoreTokens()) {
  System.out.println(tokens.nextToken());
 }
 System.out.println("------------------");
 String[] result = str.split(delimiter);
 for (int i = 0; i < result.length; i++) {
  System.out.println(result[i]);
 }
}

輸出結果:

1
2
3
------------------
1
2

3

2010年1月6日 星期三

實做Comparator的方法

如果使用 ArrayList 來儲存自定義的 Object
例如

ArrayList<node> al = new ArrayList<node>();

(<node> 指的是 ArrayList 存放的物件是 node 型態的物件)
這時想用 Collections.Sort(al) 來排序這個 ArrayList 就會出錯
程式會不知道該怎麼執行排序~
此時就必須實做 Comparator 這個 Interface,教 Collections 要怎麼做排序。

2009年3月11日 星期三

PHPMailer 範例程式

要用這個套件透過 Gmail 寄信的話,需要伺服器啟動 SSL 支援才行
Apache 設定方法:(檔案路徑以 Appserv 的安裝路徑為例)

1、C:\Windows\php.ini 當中搜尋「openssl」,把 extension=php_openssl.dll 的註解取消
2、將 C:\Appserv\php5\ 資料夾內的 ssleay32.dll 和 libeay32.dll 複製到 C:\Windows\system32\ 內
3、重新啟動 Apache

要檢查 SSL 有沒有正常啟動,只要打開 Apache 的 error log 就可以看到了~
error log 會在程式集裡面有捷徑,或者也可以直接從檔案總管開啟開啟
位置在 C:\AppServ\Apache2.2\logs\error.log
檔案太大開不了的話,可以直接刪掉,重開 Apache 時就會自動建立一個新的。

另外如果還是開不了 SSL,可以在 php.ini 當中尋找「extension_dir」
確定目錄是不是正確的,Appserv 目錄位址應該指向 C:\AppServ\php5\ext 才對。

send_mail($to_address, $to_name ,$subject, $body);

function send_mail($to_address, $to_name ,$subject, $body, $attach = "")
{
  //使用phpmailer發送郵件
  require("phpMailer/class.phpmailer.php");
  $mail = new PHPMailer();
  $mail->IsSMTP(); // set mailer to use SMTP
  $mail->CharSet = "utf-8";
  $mail->Encoding = "base64";
  $mail->From = "account@domain";
  $mail->FromName = "account name";

  $mail->Host = 'ssl://smtp.gmail.com';
  $mail->Port = 465; //default is 25, gmail is 465 or 587
  $mail->SMTPAuth = true;
  $mail->Username = "account@domain";
  $mail->Password = "*******";

  $mail->addAddress($to_address, $to_name);
  $mail->WordWrap = 50;
  if (!empty($attach))
    $mail->AddAttachment($attach);
  $mail->IsHTML(false);
  $mail->Subject = $subject;
  $mail->Body = $body;

  if(!$mail->Send())
  {
    echo "郵件送出失敗!\r\n";
    echo "錯誤訊息: " . $mail->ErrorInfo . "\r\n";
    return false;
  }
  else
  {
    echo("寄信 $attach 給 $to_name <$to_address> 完成!\r\n");
    return true;
  }
}