2012年9月27日 星期四

B+-tree implementation

記錄實作 B+-Tree 的函式庫。
網路上要找 source code 很簡單,但是哪一個才是完整的 implementation 就看不太出來
剛剛搜尋時也有找到有人放他自己寫的 B+-Tree,但又特別說他的這個 implementation 有 bug....

字典:序列化 Serialization

Serialization (序列化)主要是把在程式語言中的 Object 實體,轉換成能夠傳送或儲存的形態
例如要把某個 Object 傳送到網路上的另一台電腦,或者要把 Object 暫存到檔案系統上
透過 Serialization 可以把 Object 轉換成可以寫入或傳送的 Stream 型態,就可以進行傳送或儲存
而接收方或者讀取方只要透過 deserialize 的程序,就可以把 Stream 還原成原本的 Object 型態。

2012年9月21日 星期五

整合第三方 DDNS

這篇只是記錄之前在做 DDNS Client 時的心得 XD
大部分的 DDNS 服務其實都是用簡單的 HTTP Post/Get 方法來接受主動更新
所以要實作 DDNS Client 只要知道如何從 Java 模擬 HTTP 的要求即可。
比較重要的其實是如何得知連接的方法~
像 DynDNS、no-ip 這種大型 DDNS 服務,網站上會有一頁直接說明如何送 HTTP 要求
但有些服務就很難看出來,只能從網站上的手動更新的網頁,開瀏覽器的開發者模式去看它送了什麼東西。
這個目前我也還沒找出比較簡單的方法 XD。

2012年9月20日 星期四

Java GUI 的鍵盤監聽事件

在實作 Java GUI 的鍵盤事件時,可能會遇到一直監聽不到的問題
因為 JFrame 如果有子元件,focus 的狀態就會被傳遞到子元件上
此時就會因為 JFrame 一直不會被 focus,因此也不會觸發 JFrame 上的鍵盤事件。

2012年9月19日 星期三

Java 的 String Matching

最近比較悠閒,打算找個時間來想看看要怎麼用 Java 來找專案中沒有再用到的東西。
基本概念就是要搜尋某個資料夾裡的所有檔案
然後對這些檔案的檔名,去其他檔案裡面搜尋,看有沒有被 reference 到。
其實就是 String Matching 的方法~。

2012年9月18日 星期二

JFrame 的關閉事件

記錄一下~
JFrame 關閉時,如果按的是視窗右上角的叉叉,並且設定為 JFrame.EXIT_ON_CLOSE
則按下叉叉時會觸發 WindowListener.windowClosing() 事件。
而如果是程式碼中呼叫 Jframe.dispose() 把視窗消滅
觸發的事件是 WindowListener.windowClosed() 事件。

2012年9月14日 星期五

(暫存) 在 Windows 監視應用程式送出的封包

目前有需要安裝一些程式,然後研究程式是如何發送 HTTP request
我才能模仿他的 request 從我自己的程式發送更新的需求去伺服器~
因為我沒辦法在機器上面裝他們提供的程式,但又必須要能支援他們的服務...。

2012年9月11日 星期二

Java Preference

在 Java 執行時,有時會想要存放一些使用者的設定,但不知道要放在哪裡
Java 中提供了幾種方法來存放,根據 [1] 的解說,主要是透過 Preference 或者 JNDI。
兩者的比較可以參考 [1] 裡面的小標題 Comparing Preferences API to Other Mechanisms 的描述。

在 Java 中讀取專案內的 Image 檔

這個問題剛剛試了很久,也找了不少資料,但還是搞不太清楚什麼狀況可以讀到。
最後成功的方法是以下的寫法。
PS. 這裡我是用在 JFrame 的標題列圖示,以及通知區(System Tray)的圖示。

2012年9月10日 星期一

Java 應用程式取得系統管理員權限的問題 (尚未解決)

先列一下目前找到的資料,不過現在還沒有找到比較好的解法....
目前看到相對較好的解法大概是 [3] 裡面 freecouch 的回應吧
用 launch4j 把 jar 重新包裝成 exe,然後在 Manifest 裡面定義需要管理員權限。

參考資料:
1、java Failed to create new file in windows 7?
2、Java: run as administrator
3、Request admin privileges for Java app on Windows Vista

2012年9月9日 星期日

JFrame 的 Component 的事件

JFrame 的 Component 的滑鼠事件有分成很多種類型,以下列出各個滑鼠事件的意義

Java 拖曳檔案的動作:DnD

在 Java 上要跟其他應用程式交流資訊,可能需要的是透過 Drag & Drop(拖曳)或者 Clipborad(剪貼簿)來交換資料
在 Java 上就是透過 DnD 的方法來實作。
根據 [3] 的官方文件教學,DnD 分成兩個部分:

1、Drag and drop (DnD) support

2、Clipboard transfer through cut or copy and paste

(暫存) Java GUI:在 Windows 通知區域顯示圖示

關鍵字是 java.awt.SystemTray,根據官方文件 [1] 的說明,這應該是 Java SE 6 以上版本才支援的。

參考資料:
1、The Java Tutorials:How to Use the System Tray
1、java编的程序在通知区域显示图标,不在任务栏上显示,就跟qq最小化后一样
3、Open popup(Menu) on task tray icon with left click using java

2012年9月5日 星期三

JDBC 的 Auto-Commit

參考資料:
1、Transactions
2、does Connection commit on close()?
3、JDBC Transaction Example
4、MySQL: InnoDB or MyISAM?

有個小任務是幫忙檢查為什麼在測試時,用我們自己的資料庫連線的 API 要開啟 TRANSACTION 模式
但就算設定了 auto-commit = false 還是會自動 commit
懷疑可能的原因....
1、我們的 API 用的是 executeUpdate() 去執行 INSERT、UPDATE 和 DELETE?(網路上的範例比較多都是呼叫 execute())
2、使用了 TOMCAT 的 JDBC connection pool?

2012年9月4日 星期二

jQuery 處理 checkbox 多選

在可以多選的 checkbox 欄位,在網路上可以找到一些利用 jQuery 的 selection 篩選的方法
但是我試起來好像都有點怪怪的~
例如是有看到有人分享的 selection 方法可以直接檢查 "checked" 這個屬性
但是我的測試好像沒有用:
$("input[name='multi_choice'][@checked]").each(function(value, element) {
  console.log("element: " + $(element).attr("checked"));
});
這樣的程式碼在我的測試裡會全部的 checkbox 都被選到..。
後來查到 [2] 的寫法,就可以順利取道被選取的 checkbox 了。