用jetpack寫出來的firefox的plug-in
總算有個有結果的版本~
但問題依然很多
昨天花了點時間處理一個奇妙的問題
由於整個流程會經過三個種語言~
從client端的javascript~利用ajax的方法呼叫php~然後在php中執行java對資料做處理
而最後要在client端顯示的html內容~我在java就拼湊好了
一開始也是試了很久~最後決定在java中拼湊好原始的html~然後做完urlencode後~再一路回傳到client的 javascript~再做urldecode
這個做法可以讓最後顯示在side bar的內容看起來是對的
而且點擊連結後~也能正常的跳出搜尋頁面
但問題就在~在跳出的搜尋頁面中無法再做一次關鍵字推薦
總之又是編碼的問題
就是說~在html中a 和 /a包起來要顯示的關鍵字在回傳時需要作encode
但在 a 的href中~連到google搜尋頁面的網址~其中參數q的值~雖然等於要顯示的關鍵字~但卻不用encode
如果做過encode~在要做第二次關鍵字推薦時~擷取網址列上的Query時~會有問題
為了解決這個問題~
所以嘗試使用jQuery的getJSON~
在java的部分~將每個推薦的關鍵字encode後~存入陣列
最後把陣列做json的序列化~產生對應的字串
將此字串一路回傳~最後透過getJSON還原成對應的資料結構
一切都是如此的理所當然~~
但...
同樣的東西~我在asp用的好好的
在這邊就是有問題~
getJSON怎樣都無法~把java序列化的字串還原..
改用post的方式後~明明就可以看到序列化的字串
試了很多方式~在中間層的php上動了很多手腳
做過很多測試:
1. 在php上產生一個陣列~插入一些測試值~用php的json_encode處理後~回傳給getJSON~
正常~資料結構有被還原
2.在php上先將java產生的json字串~用php的json_decode處理後~回傳還原的陣列中~其中一個cell的值~在javascript中用post接收
正常~顯示出來的的確為指定的值
以上兩個測試只是為了證明php的json_encode和decode都是沒問題的
甚至將java產生的json字串複製後~在php中貼上直接回傳給javascript都沒有問題~getJSON依然可以還原
但....
直接將java產生的字串回傳到php再回傳到javascript~getJSON就是無法還原對應的資料結構...
這問題真的搞了很久...
因為我一直覺得字串在這三層互相傳遞中~其中兩層的互傳時~一定要先編碼
而我也一直認為這兩層一定就是javascript和php
所以~這問題我想了很久都解決不了
直到...
我嘗試在php中將java回傳的json字串還原後~拼湊好html~再用post回傳給javascript
我發現~這樣顯示居然是正常的
原來需要編碼才能傳遞的兩層是~php和java
雖然解決了這個問題~~
但getJSON的問題還是無解啊!!!
2009年6月23日 星期二
App engine上利用eclipse使用JDO
在使用App engine時我們想要在eclipse上要建立一個供人輸入資料的網頁,因此我們需要建立一個資料庫,但我們無法使用一般的的資料庫如:phpmyadmin Navicat等資料庫,因此要在建立資料表時引用到JDO來存放資料當作一個公同的橋梁
JDO可以讓你以Java程序員的最自然的方式來存儲及擷取物件。你不需要在資料庫的資料表中使用JDBC或EJB的由容器管理的持久保存機制:JDO實現會在幕後處理持久保存,而你則使用一般的Java語法依據Java物件的字段來進行查詢。

JDO可讓你存儲平凡的一般Java物件,而且也不強迫你使用不同的資料模型及類型來處理資料存儲的操作。因此,程序變得比較容易維護、再使用以及測試。此外,你也不會被限定於特定的資料庫供貨商:JDO程序是完全與資料庫無關的。你甚至不需知道資料庫是關係資料庫、物件資料庫還是只是一組文件,因為app的SDK都幫妳包好。
我們用使用JDO連結資料時,JDO裡面使用兩個class用來當作連接橋梁
一個class是用來宣告資料的型態(POJOs and JDO Annotations)
另一個是用來當作資料間的管理者(The PersistenceManagerFactory)
有了上敘兩個class 這樣我們便可以在JSP檔中使用JDOQL語法,使結果呈現在網頁上。
用上敘的兩個class,我們可以在其一設定資料屬性,另一座連結
這樣我們就可以使用SQL敘述如
String query = "select from " + Greeting.class.getName();
等SQL語法
例如,在訊息框內打入欲儲存訊息(Holle World),接著按下PostGreeting送出

之後,便可以在網頁上看到剛剛輸入得訊息

上例就是簡單一個使用JDO儲存資料的小例子,在欄位中輸入資料,接著由PMF連接,再由(POJOs and JDO Annotations)資料表中儲存資料。
JDO可以讓你以Java程序員的最自然的方式來存儲及擷取物件。你不需要在資料庫的資料表中使用JDBC或EJB的由容器管理的持久保存機制:JDO實現會在幕後處理持久保存,而你則使用一般的Java語法依據Java物件的字段來進行查詢。

JDO可讓你存儲平凡的一般Java物件,而且也不強迫你使用不同的資料模型及類型來處理資料存儲的操作。因此,程序變得比較容易維護、再使用以及測試。此外,你也不會被限定於特定的資料庫供貨商:JDO程序是完全與資料庫無關的。你甚至不需知道資料庫是關係資料庫、物件資料庫還是只是一組文件,因為app的SDK都幫妳包好。
我們用使用JDO連結資料時,JDO裡面使用兩個class用來當作連接橋梁
一個class是用來宣告資料的型態(POJOs and JDO Annotations)
另一個是用來當作資料間的管理者(The PersistenceManagerFactory)
有了上敘兩個class 這樣我們便可以在JSP檔中使用JDOQL語法,使結果呈現在網頁上。
用上敘的兩個class,我們可以在其一設定資料屬性,另一座連結
這樣我們就可以使用SQL敘述如
String query = "select from " + Greeting.class.getName();
等SQL語法
例如,在訊息框內打入欲儲存訊息(Holle World),接著按下PostGreeting送出
之後,便可以在網頁上看到剛剛輸入得訊息
上例就是簡單一個使用JDO儲存資料的小例子,在欄位中輸入資料,接著由PMF連接,再由(POJOs and JDO Annotations)資料表中儲存資料。
2009年6月22日 星期一
利用NetBeans連結、檢視資料庫內容
開發JAVA不外乎使用Eclipse、NetBeans、JBulider......等。各IDE工具各有各的好處,只觀看個人喜好及使用習慣,但至從SUN公司砸下十億元重金收購收購全球最多人用的開源資料庫Mysql後,在NetBeans6.5版本中,也開始加入了JDBC的驅動程式和資料庫內容檢視,無疑的對於使用者來說,可以不用在額外安裝檢視資料庫內容的軟體,如免費的phpmyadmin、付費的(Navicat)......等!
在安裝NetBeans6.5後,可以在X:..\NetBeans 6.5.1\ide10\modules\ext此路徑下看到mysql-connector-java-5.1.6-bin的jar檔,此為JAVA連結資料庫的驅動程式,以往需額外下載,如今一併包在其中。
在程式的Project上按右鍵選properties,在左邊選libraries(如圖),並點選右邊Add JAR/Foloer
並進到以上路徑點選Java的connector並在程式碼當中加入連結的語法即可連結MySql資料庫!

使用NetBeans檢視資料庫內容,先點到左上方Services,即可看到下方的Database
選擇下方drivers --> MySql 右鍵 connect using 如圖依序填入
則會多出一個連結裝置的圖案則代表新增成功,就可以在NetBeans上檢視內容及看到資料庫的內容以及可以在上方鍵入sql指令!

所以透過以上步驟就可以連結資料庫以及使用NetBeans新增的功能來檢視內容,如此一個IDE即可整合部分所需功能,在使用上方便許多!
在安裝NetBeans6.5後,可以在X:..\NetBeans 6.5.1\ide10\modules\ext此路徑下看到mysql-connector-java-5.1.6-bin的jar檔,此為JAVA連結資料庫的驅動程式,以往需額外下載,如今一併包在其中。
在程式的Project上按右鍵選properties,在左邊選libraries(如圖),並點選右邊Add JAR/Foloer
並進到以上路徑點選Java的connector並在程式碼當中加入連結的語法即可連結MySql資料庫!

使用NetBeans檢視資料庫內容,先點到左上方Services,即可看到下方的Database
選擇下方drivers --> MySql 右鍵 connect using 如圖依序填入

則會多出一個連結裝置的圖案則代表新增成功,就可以在NetBeans上檢視內容及看到資料庫的內容以及可以在上方鍵入sql指令!

所以透過以上步驟就可以連結資料庫以及使用NetBeans新增的功能來檢視內容,如此一個IDE即可整合部分所需功能,在使用上方便許多!
2009年6月21日 星期日
Search API in Google and Yahoo, using java
在Google和Yahoo~都有提供一些方法
可以用另一種方式~直接取得搜尋的結果~而不用透過搜尋頁面
以下所敘述的~是如何從 Java 向Google的「AJAX 搜尋 API」提出要求
首先
下面是Google提供的片段程式~(參考頁面)
這段程式中~關鍵的地方有兩個
一個是第一行的url
這段url可以決定取回的資料為何
方法就是在最後面加上"&參數名稱=參數的值"
有哪些參數可加~可以參考這裡
比較關鍵的~除了q以外(q是用來指定要搜尋的keyword)
另外rsz可以決定一次取回的筆數~最多8筆~最少4筆
start可以決定從第幾筆開始取
這邊必須提一下~Google的API似乎不允許一次取回超過八筆的資料(但Yahoo可以)
但最多其實可以拿到64筆的搜尋結果~也就是分八次取得
所以關鍵在控制start和rsz這兩個參數~來取得不同的結果
另外一個關鍵的地方~在最後一行指令
取回的資料~是一個json格式的字串
JSONObject json = new JSONObject(builder.toString());
這行指令~可以將取回的字串轉換成對應的json結構
好處是~可以直接使用java內所提供的json的函式~直接取得我們需要的部分資料(如url, title, content...)
這邊另外要介紹一個很重要的東西~就是json
json是一個輕量資料交換的格式
主要是由兩個結構所組成~object和array
object是由{}所包住的name/value配對之集合~
如下圖:

object中的成員~以,分開
每個成員的name和value以:分開
array是由[]所包住~value的集合
如下圖:

以上所謂的value可以是很多東西
如下圖:

在了解了json之後
當要取得所需要的部份資料時
就要從最外層~針對不同的結構~使用不同的函式來取得底下的資料

以上圖為例~在java中
若要取得第一個url的內容
要先用getJSONArray("results")~來取得result這個name對應的value
再以getJSONObject(1)~取回array中的第一個value
最後再以get("url")~就可以得到得到url所對應的值了
重點是要看~將要取回的部分資料是object,array還是其他
來交替使用getJSONObject,getJSONArray,和get
至於Yahoo的部份
其實只差在第一行的url
這個url要怎麼拼湊~可以參考這邊
可以用另一種方式~直接取得搜尋的結果~而不用透過搜尋頁面
以下所敘述的~是如何從 Java 向Google的「AJAX 搜尋 API」提出要求
首先
下面是Google提供的片段程式~(參考頁面)
URL url = new URL("http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Paris%20Hilton");
URLConnection connection = url.openConnection();
connection.addRequestProperty("Referer", "http://www.mysite.com/index.html");
String line;
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
while((line = reader.readLine()) != null) {
builder.append(line);
}
JSONObject json = new JSONObject(builder.toString());
// now have some fun with the results...
這段程式中~關鍵的地方有兩個
一個是第一行的url
這段url可以決定取回的資料為何
方法就是在最後面加上"&參數名稱=參數的值"
有哪些參數可加~可以參考這裡
比較關鍵的~除了q以外(q是用來指定要搜尋的keyword)
另外rsz可以決定一次取回的筆數~最多8筆~最少4筆
start可以決定從第幾筆開始取
這邊必須提一下~Google的API似乎不允許一次取回超過八筆的資料(但Yahoo可以)
但最多其實可以拿到64筆的搜尋結果~也就是分八次取得
所以關鍵在控制start和rsz這兩個參數~來取得不同的結果
另外一個關鍵的地方~在最後一行指令
取回的資料~是一個json格式的字串
JSONObject json = new JSONObject(builder.toString());
這行指令~可以將取回的字串轉換成對應的json結構
好處是~可以直接使用java內所提供的json的函式~直接取得我們需要的部分資料(如url, title, content...)
這邊另外要介紹一個很重要的東西~就是json
json是一個輕量資料交換的格式
主要是由兩個結構所組成~object和array
object是由{}所包住的name/value配對之集合~
如下圖:

object中的成員~以,分開
每個成員的name和value以:分開
array是由[]所包住~value的集合
如下圖:

以上所謂的value可以是很多東西
如下圖:

在了解了json之後
當要取得所需要的部份資料時
就要從最外層~針對不同的結構~使用不同的函式來取得底下的資料

以上圖為例~在java中
若要取得第一個url的內容
要先用getJSONArray("results")~來取得result這個name對應的value
再以getJSONObject(1)~取回array中的第一個value
最後再以get("url")~就可以得到得到url所對應的值了
重點是要看~將要取回的部分資料是object,array還是其他
來交替使用getJSONObject,getJSONArray,和get
至於Yahoo的部份
其實只差在第一行的url
這個url要怎麼拼湊~可以參考這邊
2009年6月20日 星期六
User Rating 推薦機制簡介
現今網路資料量大,同個網站可展現的資料非常多,初來網站的瀏覽者不易快速了解網站中何者為熱門、有用的資訊;為幫助新來訪客快速上手網頁資訊,我們可將網頁資料建立推薦機制,其中一種常見的方法便是user rating。
所謂user rating,即以使用者角度來對使用者推薦。使用者上傳評分之後,透過公式求出綜合所有使用者的評分結果。不同網站使用的公式不同,有的直接加總取平均,有的用特殊公式,運用統計學取得評分。甚至有些網站針對不同使用者採取不同的評分公式,或個別分開列出評分結果,分為一般大眾普通使用者、或特殊領域專家、或較具客觀公信力之使用者...等等。
不同的網站user rating機制也不盡相同。較常見的種類如下:單一的user rating,單純對所有使用者都用同一種評分方式;列出不同類型使用者不同評分結果,例如分為一般使用者,專家類型使用者,像是網站上所列出關於一本書的資訊,同時列出一般使用者的評分,以及editor的評分,及同樣職業作家使用者的評分,甚至附上文字評論;另一種為同樣列出其他網站的使用者評分,例如購物網站,除了列出自己網站的使用者評分外,也列出其他購物網站對該商品的使用者評分,讓顧客在選購時能參考更多元的意見。
現在許多網站都有user rating機制。例如Skins.be,每張桌布圖片都有目前評分結果,有1~5分讓使用者上評分並上傳;熱門的短片網站Youtube也有使用者評分機制,並且可以有文字評論;其他像拍賣網站有著顧客和商家互相推薦的評分機制,例如Yahoo、露天拍賣...等等;其餘的類似物品review的網站,為使用該物品過後到網路上分享自己的使用心得,相較於一般群眾,該reviewer為該類型物品較於精通者,其使用心得會較客觀、較值得讓人參考,除了對該使用心得可做評分之外,亦可對各個心得分享者做評分。
以下介紹一個常見好用的網站,IMDb。該網站儲存的電影資訊相當多,對電影、對演員都有使用者評分系統,其評分結果算較為大眾接受,但也有東西方觀感、文化差異、觀影族群不同使得評分結果不被部分人接受的情況。在此要介紹為該網站有個評分結果前250名電影清單,該網站有列出以下公式:
weighted rating (WR) = (v / (v+m)) * R + (m / (v+m)) * C
where
R = average for the movie (mean) = (Rating)
v = number of votes for the movie = (votes)
m = minimum votes required to be listed in the Top 250 (currently 1300)
C = the mean vote across the whold report (currently 6.7)
參考過網頁所列出的電影清單與這公式比較會發現,若有兩部電影A、B,A為低票數但每票都高分數,而B為低分數但有相當多的票數,套用這公式有可能會有相同的結果,因此要得到該清單的rank所參考的必不止這公式的結果,必須還要有其他資訊。
user rating已經成為一個普遍使用的推薦機制,以使用者的角度來對使用者推薦,因此要防範灌水廢票之外,使用者對使用者的信賴度也同樣重要。
所謂user rating,即以使用者角度來對使用者推薦。使用者上傳評分之後,透過公式求出綜合所有使用者的評分結果。不同網站使用的公式不同,有的直接加總取平均,有的用特殊公式,運用統計學取得評分。甚至有些網站針對不同使用者採取不同的評分公式,或個別分開列出評分結果,分為一般大眾普通使用者、或特殊領域專家、或較具客觀公信力之使用者...等等。
不同的網站user rating機制也不盡相同。較常見的種類如下:單一的user rating,單純對所有使用者都用同一種評分方式;列出不同類型使用者不同評分結果,例如分為一般使用者,專家類型使用者,像是網站上所列出關於一本書的資訊,同時列出一般使用者的評分,以及editor的評分,及同樣職業作家使用者的評分,甚至附上文字評論;另一種為同樣列出其他網站的使用者評分,例如購物網站,除了列出自己網站的使用者評分外,也列出其他購物網站對該商品的使用者評分,讓顧客在選購時能參考更多元的意見。
現在許多網站都有user rating機制。例如Skins.be,每張桌布圖片都有目前評分結果,有1~5分讓使用者上評分並上傳;熱門的短片網站Youtube也有使用者評分機制,並且可以有文字評論;其他像拍賣網站有著顧客和商家互相推薦的評分機制,例如Yahoo、露天拍賣...等等;其餘的類似物品review的網站,為使用該物品過後到網路上分享自己的使用心得,相較於一般群眾,該reviewer為該類型物品較於精通者,其使用心得會較客觀、較值得讓人參考,除了對該使用心得可做評分之外,亦可對各個心得分享者做評分。
以下介紹一個常見好用的網站,IMDb。該網站儲存的電影資訊相當多,對電影、對演員都有使用者評分系統,其評分結果算較為大眾接受,但也有東西方觀感、文化差異、觀影族群不同使得評分結果不被部分人接受的情況。在此要介紹為該網站有個評分結果前250名電影清單,該網站有列出以下公式:
weighted rating (WR) = (v / (v+m)) * R + (m / (v+m)) * C
where
R = average for the movie (mean) = (Rating)
v = number of votes for the movie = (votes)
m = minimum votes required to be listed in the Top 250 (currently 1300)
C = the mean vote across the whold report (currently 6.7)
參考過網頁所列出的電影清單與這公式比較會發現,若有兩部電影A、B,A為低票數但每票都高分數,而B為低分數但有相當多的票數,套用這公式有可能會有相同的結果,因此要得到該清單的rank所參考的必不止這公式的結果,必須還要有其他資訊。
user rating已經成為一個普遍使用的推薦機制,以使用者的角度來對使用者推薦,因此要防範灌水廢票之外,使用者對使用者的信賴度也同樣重要。
2009年6月19日 星期五
Google Web Toolkit on Eclipse 3.4
這篇文章是教學如何用Eclipse3.4開發Google Web Toolkit 1.6.4(以下簡稱GWT)
從安裝、下載,到新增第一個GWT程式
首先JDK要安裝好之外,再來就是Eclipse主程式
Eclipse是免費免安裝的Java IDE,請到這裡下載
我們要的是網頁上如下圖所示這版本,即開發java之standard版

點選進去之後,點
即可開始下載
下載好之後,建議解壓縮後將資料夾放置固定位置
因為雖為免安裝之IDE,但若隨意移動資料夾會影響到library的指向路徑是否正確
下載好解壓縮到固定位置後,接下來要將Eclipse安裝GWT plugin
開啟Eclipse主視窗後,點取最上排右方之Help,點選Software Updates...,如下圖:

在跳出的視窗上方頁面標籤點選到Available Software頁面,之後點擊視窗右方
在跳出的視窗之textbox貼上網址:

並在之後出現視窗點擊OK,等整個下載安裝結束即安裝好GWT plugin
安裝好後會在上方toolbar多出
欲新增GWT project,則點擊左方藍色圓形圖示按鈕
會跳出如下視窗:

此時用以下命名當作範例程式名稱:
project name: NewProject
package name:com.example.newproject
關於下方的library勾選,由於我們是要新增GWT程式,因此上方的Use Google Web Toolkit一定要勾選之外,下方的Use Google App Engine可勾選可不勾選,在兩個Library都有勾選情況下,新增的Project仍會以GWT為主,在這邊我們選擇不勾選下方之library
ps.若您是要新增App Engine程式,則勾選下方App Engine library之外,上方的GWT library一定不能勾選
點選Finish之後,在左方package explorer會出現新增之NewProject,點開樹狀如下:

在NewProject.java點兩下開啟程式碼,除了編輯網頁Style部分可在XML、CSS、HTML檔編輯之外,要撰寫修改網頁主要內容均從這程式碼開始編輯
直接執行剛新增好的.java程式碼的原始網頁內容如下:

點擊跳出網頁上Send按紐,則會跳出一個小文字視窗,列出正在運作的App Engine版本,您在textbox輸入的字,以及您系統預設的瀏覽器名稱及版本
到此,即完成新增第一支Hello word程式
從安裝、下載,到新增第一個GWT程式
首先JDK要安裝好之外,再來就是Eclipse主程式
Eclipse是免費免安裝的Java IDE,請到這裡下載
我們要的是網頁上如下圖所示這版本,即開發java之standard版

點選進去之後,點
即可開始下載下載好之後,建議解壓縮後將資料夾放置固定位置
因為雖為免安裝之IDE,但若隨意移動資料夾會影響到library的指向路徑是否正確
下載好解壓縮到固定位置後,接下來要將Eclipse安裝GWT plugin
開啟Eclipse主視窗後,點取最上排右方之Help,點選Software Updates...,如下圖:

在跳出的視窗上方頁面標籤點選到Available Software頁面,之後點擊視窗右方

在跳出的視窗之textbox貼上網址:
http://dl.google.com/eclipse/plugin/3.4
點選OK
隨即在Software Update視窗便會多出如下可選擇新增之plugin:

接下來點擊視窗右方
並在之後出現視窗點擊OK,等整個下載安裝結束即安裝好GWT plugin
安裝好後會在上方toolbar多出

欲新增GWT project,則點擊左方藍色圓形圖示按鈕
會跳出如下視窗:

此時用以下命名當作範例程式名稱:
project name: NewProject
package name:com.example.newproject
關於下方的library勾選,由於我們是要新增GWT程式,因此上方的Use Google Web Toolkit一定要勾選之外,下方的Use Google App Engine可勾選可不勾選,在兩個Library都有勾選情況下,新增的Project仍會以GWT為主,在這邊我們選擇不勾選下方之library
ps.若您是要新增App Engine程式,則勾選下方App Engine library之外,上方的GWT library一定不能勾選
點選Finish之後,在左方package explorer會出現新增之NewProject,點開樹狀如下:

在NewProject.java點兩下開啟程式碼,除了編輯網頁Style部分可在XML、CSS、HTML檔編輯之外,要撰寫修改網頁主要內容均從這程式碼開始編輯
直接執行剛新增好的.java程式碼的原始網頁內容如下:

點擊跳出網頁上Send按紐,則會跳出一個小文字視窗,列出正在運作的App Engine版本,您在textbox輸入的字,以及您系統預設的瀏覽器名稱及版本
到此,即完成新增第一支Hello word程式
2009年6月18日 星期四
Ubuntu底下執行java的小問題
改寫了metasearch取資料部分的程式
這次了解了幾個問題
首先
改版後的程式~把一些主要的變數和程序~用static的方式宣告
這樣在執行過程中~這些變數和程序會一直在記憶體中
一方面使用上較方便~另一方面變數可以達到共用的效果
第一件了解到的事是...
之前的程式
在ubuntu server上compile時~都會因為package的關係~而產生錯誤
但這次為了達到變數共享的效果(不同類別中的程式存取同樣的變數)
package似乎不能拿掉
了解到package的功能跟C#的namespace的功能是一樣的之後
我想到~之前或許是因為我們使用的package~卻沒把程式放在同樣名稱的資料夾下
所以才會出錯..
另外
之前有研究過~在用php執行java程式時
是否能把java的程式放在同一資料夾~而正常執行
這次在無意間改寫classpath~意外的發現~是可以的
如:
java -cp .:/usr/lib/jvm/java-6-sun/lib:/usr/share/java/mysql.jar:/home/canlab/metasearch/wjm/websource_api Main
最後一段路徑/home/canlab/metasearch/wjm/websource_api只要指向放java程式的資料夾~似乎就可以了
但~前提似乎是在沒有使用package的情況下
最後
這次~困擾我最久的~就是以下的錯誤訊息
Exception in thread "main" java.lang.NoClassDefFoundError: Main (wrong name: testtest/Main)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
類似的訊息出現了不下n次
從一開始什麼都不懂~
靠著學長的教導~
才有以下使用長長的classpath的程式碼產生
java -cp .:/usr/lib/jvm/java-6-sun/lib:/usr/share/java/mysql.jar:/home/canlab/metasearch/wjm/websource_api Main
但這次使用package名稱websource_api的程式
無論我再怎樣改classpath~都無法讓錯誤訊息消失
看了錯誤訊息~明知道一定是classpath的問題~就是改不出來
最後
突發奇想的...改成這樣...
java -cp .:/usr/lib/jvm/java-6-sun/lib:/usr/share/java/mysql.jar:/home/canlab/metasearch/wjm/ websource_api.Main
終於可以了
雖然不是完全懂為什麼
2009年5月15日 星期五
eclipse Using JSPs
2009年5月10日 星期日
Google PageRank
- Google PageRank 是判斷一個網頁的價值、重要性,算是一項蠻客觀的網頁評比
- PageRank 是基於「從許多優質的網頁鏈接過來的網頁,必定還是優質網頁」的回歸關係,來判定所有網頁的重要性。
-
PageRank演算法(簡易)
o假設一個由4個頁面組成的小團體:A,B, C 和 D。如果所有頁面都連向A,那麼A的PR(PageRank)值將是B,C 及 D的和。
o
nPR(A) = PR(B) + PR(C) + PR(D)
Google的類似網頁
當在Google搜尋資料時
每筆的搜尋結果下方,會有一個"類似網頁"的連結
點下去後,他可以針對指定的網頁
找出一些跟此網頁內容相似的網頁
你可能會發現,類似網頁出來的結果沒有一定的規律。
大部分可能會認為,類似網頁所列出的結果,會是從此網頁連結出去的網頁,或是連結到此網頁的網頁。
但有時候在類似網頁中列出的網頁,既沒有連結到你的網頁,也沒從你的網頁連過去,在極端一點的情況下,兩個網站可能一點都不類似。
進一步的觀察後會發現,所謂的類似網頁,往往是和此網頁共同被第三方網頁所引用的那些網頁。
舉例來說:
指定的網頁為A,有個第三方網頁為B,在B網頁上引用了A網頁,而同時也引用了另一個C網頁,那麼對於Google來說,A跟C就構成了相關性,即使A跟C沒有直接的連結。
所以在類似網頁中的結果,也就是一個C的網頁集合,C裡的網頁構成了在A網頁周圍的一個社區,這些社區會形成一個共同的主題,而A網頁也就屬於這個共同主題。
2009年5月7日 星期四
[Ubuntu, GWT] Unable to load Mozilla for hosted mode
在Ubuntu上安裝Eclipse 及 Google Plugin for Eclipse 後,執行GWT程式會發生以下問題
** Unable to load Mozilla for hosted mode **
java.lang.UnsatisfiedLinkError:/plugins/com.google.gwt.eclipse.sdkbundle.linux_1.6.4.v200904062334/gwt-linux-1.6.4/mozilla-1.7.12/libxpcom.so: libstdc++.so.5: cannot open shared object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1778)
以下省略
主要原因就在沒有安裝 libstdc++5(Ubuntu預設只安裝libstdc++6),
所以只要利用Synaptic套件管理程式安裝libstdc++5即可解決此問題。
** Unable to load Mozilla for hosted mode **
java.lang.UnsatisfiedLinkError:
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1778)
以下省略
主要原因就在沒有安裝 libstdc++5(Ubuntu預設只安裝libstdc++6),
所以只要利用Synaptic套件管理程式安裝libstdc++5即可解決此問題。
訂閱:
意見 (Atom)


