然後把 eclipse 上的專案匯出成 jar 檔,設定 Manifest 以後再丟到 ubuntu 上執行。
以下就一步一步記錄我的執行流程!
安裝 JRE
因為目前我的網路環境不知道為什麼抓不到 sun-jdk,所以還是先用 ubuntu 原本的 openjdk
openjdk 6 的安裝方法:
sudo apt-get install openjdk-6-jdk
Software entities (class, modules, functions, etc.) should be open for extension, but closed for modification. Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems. 註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
- Bertrand Meyer
- Charles Connell
註2:本部落格的內容授權請參閱部落格底部的授權宣告。
sudo apt-get install openjdk-6-jdk
聽說舊的 ubuntu 版本可以裝 Lamp,不過好像 ubuntu 11 沒有 Lamp 可以安裝
所以只能自己一個一個裝了~
原本找到的網路資料現在一時找不到.....
但下的指令蠻簡單的:
sudo apt-get install apache2 php5 mysql-server
以上指令會把 Apache2、PHP5、MySQL 都裝進來
其中我裝進來的版本分別如下。
有可能需要測試下面這個指令 XD
sudo apt-get install libapache2-mod-php5
原本要找的是 AUTO_INCREMENT 爆掉的問題該怎麼處理
意外找到這個可以提昇資料庫效率的方法~
詳細說明可以直接看下列的參考資料
參考資料:
1、通過分區(Partition)提升MySQL性能(一)
2、通過分區(Partition)提升MySQL性能(二)
3、mysql 的 partition 與 auto_increment
在 [1] 的效能測試中,建了兩個資料表,一個使用 Partition、一個沒使用
然後用隨機產生的資料填入 800 萬筆資料,測試找出時間是 1995 年間的所有資料
在沒有做 Partition 的資料表中花了 38 秒,有做 Partition 的則只花了 3 秒多~
當資料有顯著的分區效果時,做 Partition 可以降低搜尋資料的時間~
不過後來又找到 [3],同時使用 AUTO_INCREMENT 跟 Partition 時 MySQL 可能會有問題....
目前暫定的作法是使用 Partition、放棄 AUTO_INCREMENT
用其他 INDEX 來盡可能達到類似 AUTO_INCREMENT 的 PRIMARY KEY 效果~
dom4j 官方網站:http://dom4j.sourceforge.net/
在 Java 存取 XML 的方法好像有不少,會選 dom4j 是因為據說它效率還不錯,而且用法簡單!
以下直接舉一個寫入 XML 的例子
我是先建立一個 XMLConstructor 的 Class,然後在 main 去呼叫它~
這個標題寫得很像論文的標題 XD
不過總之目標是要抓網頁內容下來。
Open Source 的 Web Crawler 可以參考 [1]
網路上比較多人使用的好像是 Heritrix,不過我看了一下他的資料還是不太會用 XD
Crawler4j 原本要使用,但後來也不知道怎麼用,所以又繼續 survey 了
最後我選擇的是 niocchi....原因嘛...其實沒什麼特別的原因 XD
主要優點大概是它號稱使用 NIO 來進行 crawling,還有它最後更新時間是 2011 年!XD
niocchi 官方網站可參考 [2]。
jProfiler 簡介就免了~
我的主要目的是想追蹤 JVM 上的 thread 狀況
看那些我開出來的 thread 是不是在任何情況都會正確地被關閉。
公司給的 JProfiler 6.2.4 有包含 Windows 的 GUI 跟 Linux 的 jprofiler_linux_6_2_4.tar.gz
安裝時首先要先把遠端機器上的 tomcat 關掉,接著按照以下的流程:
PreparedStatement 的基本優點是程式碼好讀(不用自己拼字串)、提供一定程度的 SQL injection 防禦,還有有些資料說 PreparedStatement 效率比較高。
相關資源:
1. 官方文件
2. PreparedStatement & Statement 的差異
3. PreparedStatement 真的比 Statement 快嗎?
效率問題可以參考看看第三個連結,SELECT 狀況下大多是 Statement 比較快一點,不過下面回應有人說 PreparedStatement 主要是快在非 SELECT 的指令。(但話說資料庫最常用的指令應該是 SELECT 吧~XDDD)
範例程式碼可以參考:Using the Prepared Statement Twice
雖然說上面的參考資料是 Quartz 的文件,不過查 Wikipedia 時,查到的 Cron Expression 表達方法是一樣的,所以....應該 Linux 上的 cron 跟 Quartz 的 CronTrigger 用的都是同一套標準吧!(也許 Cron Expression 是公定的標準?我不太清楚 XD)
Cron Expression 的規則就看 Wiki 吧,這裡要特別記錄的是使用「/」記號的規則
在分鐘的欄位設定 3/20 表示的是「every 20th minute of the hour, starting at minute three」
也就是從第三分鐘開始,每個第 20 分鐘執行一次
而設定 /35 表示的並不是每隔 35 分鐘執行一次,而是同義於 0-59/35
也就是每個小時的 0 分開始算第 35 分鐘執行一次。
亦即實際執行時會是例如 1:35、2:35、3:35、.....,實際上會變成每小時執行一次。
PS. 這是我目前對 Cron Expression 的理解,如果有錯誤請指正!
因為某種需求,想知道某些程式是如何撈到資料的...
透過 web scrawler 的方式遇到蠻多阻礙,所以就試試看從 APP 著手
意外發現這個相當邪惡的玩意兒~囧
相關資源:
1. How to parse results provided by Java script in Android
http://stackoverflow.com/questions/7921273/how-to-parse-results-provided-by-java-script-in-android
2. Java HTML Parsing
http://stackoverflow.com/questions/238036/java-html-parsing
3. How to Parse Java-script contains[dynamic] on web-page[html] using Python?
http://stackoverflow.com/questions/5738024/how-to-parse-java-script-containsdynamic-on-web-pagehtml-using-python