我一直都沒有一台屬於自己的 server,因為一直沒有那個需求。也就懶得去架設,因為我想要的一些日常服務,Google 相關的服務都可以滿足我。
但是工作時發現需要有些 server 管理經驗,如果沒有實際去架設管理過,是學不到這方面的知識。臨時需要作些什麼處理時,很容易因為經驗的不足,而會不知道要怎麼下手。
而我又是學資訊的,不去瞭解,不去學習,不去體驗這些好像又說不過去。所以今天我就從我的桌機切一塊空間出來,灌了 Ubuntu 8.10 Desktop。準備架設一些 server 好好研究,像是 subversion, web server, mail server,等等都有計畫要架設。
沒有什麼目標,也沒有什麼確切的時間表要達架設好什麼 server,反正可以遠端控制,隨時可以上線修改,就讓它慢慢演化吧。
2009年2月26日
2009年1月9日
FlexTable 的 clear method
GWT 中的 Grid 和 FlexTable 都繼承自 HTMLTable,也就是相對於 HTML 中的 table 標籤。
其中 HTMLTable 有個 clear() method, 使用時要小心。看一下 GWT Javadoc 解釋:
意思是說,clear method 只清掉所加入的 widget 而已。所以如果你有為它加 CSS style,比如畫出 td 標籤的邊框。假設原本有 3 筆資料的 table ,clear 後,再加入 1 筆的資料。table 的呈現還是有 3 筆,但下面 2 筆資料都是空白的。
就像這樣

所以原本這樣的寫法
改用 removeRow 土法煉鋼。
其中 HTMLTable 有個 clear() method, 使用時要小心。看一下 GWT Javadoc 解釋:
Removes all widgets from this table, but does not remove other HTML or text contents of cells.
意思是說,clear method 只清掉所加入的 widget 而已。所以如果你有為它加 CSS style,比如畫出 td 標籤的邊框。假設原本有 3 筆資料的 table ,clear 後,再加入 1 筆的資料。table 的呈現還是有 3 筆,但下面 2 筆資料都是空白的。
就像這樣
所以原本這樣的寫法
table.clear()改用 removeRow 土法煉鋼。
while (table.getRowCount() > 0) {
table.removeRow(0);
}
2008年8月23日
GAE 中 Datastore 的小陷阱
在 Google app engine 平台 + GAEO 寫超好用公佈欄時,發現 Datastore 在使用時有小陷阱要小心。
資料間的連結關係有 one-to-one, one-to-many, 以及 many-to-many 三種,如何在 Datastore 實做可以參考[AppEngine] 實戰 Datastore (1)這篇文章。
當時實做 one-to-many 時,對 Datastore 不熟悉,所以寫出了像下面的程式碼
parent 是自定義 class, children 是自定義 class 所串成的 list,parent 和 children 的關係是 one-to-many。所以會很自然的認為 parent.children.order(`-date') 意思是這個 parent 底下的 children 依照最新到最舊的日期排序。然後直接將已排序好的 parent.children 指定給 self.children ,讓相關的網頁存取 children。
但這樣的想法是錯的,網頁呈現出來的依然是沒有排序過的資料。
文件中,The Query Class的 order() method 描述
重點是 Results ,要接了 return 的值後才是有排序過的資料。
只要改成下列程式碼後,結果就正確了。
或直接接 return 值,也是可以。
我被文件前面的例子給誤導了
以為 query.order(`-date') 後,query 裡的資料就已經排序好了。
所以,不管你如何串接,最後一定要接傳回值才是正確的結果。
資料間的連結關係有 one-to-one, one-to-many, 以及 many-to-many 三種,如何在 Datastore 實做可以參考[AppEngine] 實戰 Datastore (1)這篇文章。
當時實做 one-to-many 時,對 Datastore 不熟悉,所以寫出了像下面的程式碼
parent.children.order('-date')
self.children = parent.children
parent 是自定義 class, children 是自定義 class 所串成的 list,parent 和 children 的關係是 one-to-many。所以會很自然的認為 parent.children.order(`-date') 意思是這個 parent 底下的 children 依照最新到最舊的日期排序。然後直接將已排序好的 parent.children 指定給 self.children ,讓相關的網頁存取 children。
但這樣的想法是錯的,網頁呈現出來的依然是沒有排序過的資料。
文件中,The Query Class的 order() method 描述
Adds an ordering for the results. Results are ordered starting with the first order added.
重點是 Results ,要接了 return 的值後才是有排序過的資料。
只要改成下列程式碼後,結果就正確了。
childQuery = parent.children.order(`-date')
self.children = childQuery.fetch()
或直接接 return 值,也是可以。
self.children = parent.children.order(`-date')
我被文件前面的例子給誤導了
query.filter(`title =`, `Imagine')
query.order(`-date')
query.ancestor(key)
query.filter(`title =`, `Imagine').order(`date').ancestor(key)
以為 query.order(`-date') 後,query 裡的資料就已經排序好了。
所以,不管你如何串接,最後一定要接傳回值才是正確的結果。
2006年10月27日
更新 FireFox 2.0
現在是不是什麼都要來個 2.0 才算趕得上潮流?(詳情請 google 搜尋 "web 2.0" 關鍵字)不過有這樣的巧合倒是很有趣。
更新後發現許多我愛用的 FireFox擴充套件和 FireFox 的佈景主題不能用,我想這些應該會慢慢更新吧。目前發現和舊版本不同的特色有最明顯的就是獨立的分頁有自己獨立的 close 按鍵,不再只是在最右邊有一個 close 按鍵。應該還有其他新特色,不過等我發現再補上,不然搜尋一下也有很多的文章介紹。
下載 Firefox 2.0 繁體中文正式版 試試看吧 。
延伸閱讀:
Firefox 2.0首日全球下載破百萬次,10個使用Firefox 2.0的理由
更新後發現許多我愛用的 FireFox擴充套件和 FireFox 的佈景主題不能用,我想這些應該會慢慢更新吧。目前發現和舊版本不同的特色有最明顯的就是獨立的分頁有自己獨立的 close 按鍵,不再只是在最右邊有一個 close 按鍵。應該還有其他新特色,不過等我發現再補上,不然搜尋一下也有很多的文章介紹。
下載 Firefox 2.0 繁體中文正式版 試試看吧 。
延伸閱讀:
Firefox 2.0首日全球下載破百萬次,10個使用Firefox 2.0的理由
2006年10月4日
我的 RSS 星球
我實在有太多的 blog,會分散這麼多 blog 的原因是,當初決定使用 google 的 blogger 時,才發現它沒有 tag 的功能,而 wordpress.com是很好,但感覺有點慢,且又沒有大廠支持,感覺有點危險。這樣分散雖然無法看出我個人專注的整體,但分門別類使得我個別的 blog比較有主題性。不過只要用個 RSS aggregator 就可以解決這樣的問題。
Planet 是一個 Python 的 RSS aggregator/feed reader。如果你常在看的 blog、news 有提供 RSS/ATOM feed 的話,就可以在設定檔裡加入這些 feed,而你的伺服器上可以跑 Python, 在配合類似 crontab 的設定,定時的生出靜態網頁,就可以把這些 feed 所提供的內容依照時間整合成一個網頁。這跟現在一些 RSS 閱讀器很像,不過他的功能是整合起來成為一個網站,方便讀者可以一次看到相關的文章內容,比如: unofficial planet python 就是一堆都和 python 相關的 blog 的集合,作者都寫在不同的 blog 裡,只不過定時的將這些 blog 的 feed "餵"進來。而通常它也稱作 planet (星球),表示這裡都是住了和 某個特定主題相關的 blog,像 Planet 站的 side bar 也列出了許多不同主題的星球。
所以,我就在學校的主機架了一個屬於我自己的星球,把我個別的 blog 餵進來。看來就像一個 blog。
Planet 是一個 Python 的 RSS aggregator/feed reader。如果你常在看的 blog、news 有提供 RSS/ATOM feed 的話,就可以在設定檔裡加入這些 feed,而你的伺服器上可以跑 Python, 在配合類似 crontab 的設定,定時的生出靜態網頁,就可以把這些 feed 所提供的內容依照時間整合成一個網頁。這跟現在一些 RSS 閱讀器很像,不過他的功能是整合起來成為一個網站,方便讀者可以一次看到相關的文章內容,比如: unofficial planet python 就是一堆都和 python 相關的 blog 的集合,作者都寫在不同的 blog 裡,只不過定時的將這些 blog 的 feed "餵"進來。而通常它也稱作 planet (星球),表示這裡都是住了和 某個特定主題相關的 blog,像 Planet 站的 side bar 也列出了許多不同主題的星球。
所以,我就在學校的主機架了一個屬於我自己的星球,把我個別的 blog 餵進來。看來就像一個 blog。
2006年7月2日
移除 google adsense
原本想安裝 google adsense 在我的 blogger 裡的部落格,但後來想想,會破壞整個 blog 的美觀,我之所以會用 blogger 就是看上了它乾淨的介面和版面。結果我找不到移除的選項,於是在這裡找到了方法,用 javascript 去找出 google 塞了什麼 html 碼,然後移除掉。很簡單,但很實際。
不過後來我沒有完整申請 google adsense 服務,所以我也沒有用到此碼,但我覺得有參考價值。
另外任何有提供 google adsense 的服務都可以關掉。源碼如下:
參考
Removal of Gooooogle Ads
不過後來我沒有完整申請 google adsense 服務,所以我也沒有用到此碼,但我覺得有參考價值。
另外任何有提供 google adsense 的服務都可以關掉。源碼如下:
<script language="JavaScript">
var b = document.getElementsByTagName('body')[0];
var bodyonload = function() {
t = document.getElementsByTagName('table');
for(var i=0; i<t.length; i++) {
str = '' + t[i].innerHTML;
if(str.match( /Ads by Gooooogle/i )) {
t[i].parentNode.removeChild(t[i]);
}
}
};
var IE4=(document.all);
if (!IE4) b.setAttribute('onload', 'bodyonload();');
else b.onload = bodyonload;
</script>
參考
Removal of Gooooogle Ads
2006年6月29日
2006年1月14日
2005年10月8日
好用的 Flickr
最近一兩天在找好用的線上相簿的系統或服務,原本想自己架一個,自己可以管理比較踏實,如果又發生麥諾地消失事件,那我就頭疼了。可是在尋找的過程中,決定用 Flickr,它和國內知名的無名小站一樣,它有名在於線上相簿的服務。其實這個站我很早就知道了,也看了很多介紹它的文章,只不過當時我沒有什麼想整理我的照片放在網路分享的慾望,加上我還不太相信網路上的服務是可靠的(麥諾地的影響太深了)。
為什麼要用 Flickr ,原因除了我不想再自己架一個這樣的系統,以及它已經被 yahoo 收購,有強大的靠山,不怕倒閉外,還有就是它用心提供的一些功能是別的相簿站沒有的。例如我網誌右下角的 zeitgeist ,隨機提供一些我已上傳的照片,並用有趣的方式展示出來,其實它的設定不設限你自己相簿裡的相片,還可以分享你朋友的。
還有一個我很喜歡的功能,就是不用再做縮圖,不管你上傳多大的相片,他都幫你做好五種不同大小的縮圖,你只要取用 URL 即可,我就可以嵌入任何的網頁裡,方便得很。
還有它使用 tag 分類方式,並不是資料夾的觀念,也就是說我同一張相片可以貼上一個以上的 tag ,可以再不同的分類裡找到相同的一張照片,這個功能也很吸引我。
還可以以 e-mail 上傳照片,達到 moblog 的目標。還有經過一些小小的設定,可以直接在 Flickr 上寫 blog ,直接發表在你的 Blog 系統或服務,像 Blogger等,最新的還可以實現在 wordpress 上,可惜沒有 Tatter 或 pLog。
它的有趣分享方式使得有更多的機會和其他人交流,而並不是只是看看照片而已。
它的管理方式和介面也比其他線上相簿服務好很多,至少比無名小站好太多,這也是我不用無名小站的原因。雖然寶貝和我 argue 說,我要支持國內有潛力的服務商,可是我要說,既然有比較好的服務,為什麼要用比較差的?經過最近比較深入的研究後,更確定我會用 Flickr。
為什麼要用 Flickr ,原因除了我不想再自己架一個這樣的系統,以及它已經被 yahoo 收購,有強大的靠山,不怕倒閉外,還有就是它用心提供的一些功能是別的相簿站沒有的。例如我網誌右下角的 zeitgeist ,隨機提供一些我已上傳的照片,並用有趣的方式展示出來,其實它的設定不設限你自己相簿裡的相片,還可以分享你朋友的。
還有一個我很喜歡的功能,就是不用再做縮圖,不管你上傳多大的相片,他都幫你做好五種不同大小的縮圖,你只要取用 URL 即可,我就可以嵌入任何的網頁裡,方便得很。
還有它使用 tag 分類方式,並不是資料夾的觀念,也就是說我同一張相片可以貼上一個以上的 tag ,可以再不同的分類裡找到相同的一張照片,這個功能也很吸引我。
還可以以 e-mail 上傳照片,達到 moblog 的目標。還有經過一些小小的設定,可以直接在 Flickr 上寫 blog ,直接發表在你的 Blog 系統或服務,像 Blogger等,最新的還可以實現在 wordpress 上,可惜沒有 Tatter 或 pLog。
它的有趣分享方式使得有更多的機會和其他人交流,而並不是只是看看照片而已。
它的管理方式和介面也比其他線上相簿服務好很多,至少比無名小站好太多,這也是我不用無名小站的原因。雖然寶貝和我 argue 說,我要支持國內有潛力的服務商,可是我要說,既然有比較好的服務,為什麼要用比較差的?經過最近比較深入的研究後,更確定我會用 Flickr。
2005年8月4日
學習 C#
因為研究的關係,必須要在 PDA 上開發程式,所以勢必要擇一程式語言來撰寫,以目前來說,還是微軟的平台最方便,所以不熟 .NET 的我就選了和 Java 相似度最高的 C#。
C# 和 Java 的相似度真高阿,物件的使用觀念還真像,以我對 Java 認識,大約兩小時就可以瞭解 C# 要如何撰寫,接下來就只剩查文件的功夫。
稍微記錄一下 C# 和 Java 中本質一樣但稱呼和語法不同的地方。
稱呼: java -> C#
package -> namespace
C# 和 Java 的相似度真高阿,物件的使用觀念還真像,以我對 Java 認識,大約兩小時就可以瞭解 C# 要如何撰寫,接下來就只剩查文件的功夫。
稍微記錄一下 C# 和 Java 中本質一樣但稱呼和語法不同的地方。
語法: java -> C#
- import -> using
- extends -> Extended_class_name : base_class_name
- implements -> Extended_class_name : base_interface_name(or base_abstract_class_name)
- super() -> base()
- method's name 小寫開頭 -> method's name 和 class name 一樣是大寫開頭的命名方式
- final -> sealed(好像只針對 class, 需要更詳細的查證)
稱呼: java -> C#
package -> namespace
訂閱:
文章 (Atom)