2009年5月23日

Ubuntu 8.10 + eclipse 3.4.1 + subclipse 問題

在 Ubuntu 8.10 上裝好 eclipse 3.4.1 後,接著安裝 subclipse 套件,第一次連 SVN 時一直出現 Unable to load default SVN Client 的錯誤,在 Fedora 8 並沒有這樣的問題,查了一下安裝時要注意 2 個步驟:

1. 必須利用 ubuntu 的套件管理程式安裝 libsvn-java 這個套件
2. 在 eclipse.ini 要加一行設定 -Djava.library.path=/usr/lib/jni

轉錄自 Ubuntu 8.10 + eclipse 3.4.1 + subclipse 問題

2009年4月12日

/etc/ppp/options 的一些重要 options

sudo vim /etc/ppp/options

lcp-echo-failure次數被設為4,而lcp-echo-interval設為30秒。

可以提高 lcp-echo-failure 防止經常斷線。

2009年3月28日

設定 dvorak

Linux 上的配置

1.設定

$setxkbmap dvorak

2.回復

$setxkbmap us

最好設 alias

alias aaaaa='setxkbmap us'

這樣就可以馬上回復回原來的鍵盤設定。

3.練習
sudo apt-get install dvorak7min

Windows 上的配置

要強制嘸蝦米採用 Dvorak 的話或可參考此法:
利用 regedit.exe 來修改登錄檔,先找到 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Keyboard Layouts,再找到嘸蝦米的項目,你應該會發現有一個名為 Layout File 的字串,它的值是「KBDUS.DLL」,把它改成「kbddv.dll」

[Ubunwux31] 使用 LXDE 設定自動啟動 network manager

如何設定自動啟動 network manager

sudo leafpad /etc/xdg/lxsession/LXDE/autostart

加上 nm-applet --sm-disable


安裝 Ubuntu Base + LXDE 指南 (特別適合低階硬體)

2009年3月26日

[Ubunwu]gcin使用無蝦米輸入法

無蝦米安裝程序:
1. 於/etc/apt/sources.lst 加入這行
deb http://www.calno.com unstable main
2. sudo apt-get update;sudo apt-get install gcin (安裝gcin)
3. sudo im-switch -s gcin (下次登入即可使用gcin)
4. wget http://edt1023.sayya.org/misc/noseeing-6.tar.gz (下載無蝦米表格檔)
5. tar zxvf noseeing-6.tar.gz
6. sudo cp noseeing.gtab /usr/share/gcin/table/
7. (system restart)

參考:
【Ubuntu】gcin使用無蝦米輸入法

2009年3月17日

[Ubunwux31]讓 evince 能看中文

原本以為 ubuntu 8.10 只要 sudo apt-get insatll poppler-data 即可。

還有手動安裝。參考

可是試驗結果都不行,只好安裝 xpdf ,用他看中文文件。
原文電子書還是用 evince ,因為它有記憶你看到哪一頁的功能。

2009年3月6日

[Ubunwu007]linux flash 中文亂碼問題

安裝了flash播放器,播放正常,但中文全是亂碼,解決方法如下:

打開配置文件:
cd /etc/fonts/conf.d/
sudo vim 49-sansserif.conf

修改edit節點,將sans-serif
改為 sans

文章節錄自 linux flash 中文亂碼 的解決

2009年3月5日

[Ubunwu006] LiHei Pro

sudo fc-cache -v -f

參考:

Ubuntu 更換 LiHei Pro 儷黑Pro 字型 (超詳細教學)

[Ubunwu005]螢幕解析度

Section "Monitor"
Identifier "Configured Monitor"
Vendorname "Dell"
Modelname "Dell E196FP"
Horizsync 31.0-83.0
Vertrefresh 56.0-76.0
modeline "640x480@60" 25.2 640 656 752 800 480 490 492 525 -vsync -hsync
modeline "640x480@72" 31.5 640 664 704 832 480 489 491 520 -vsync -hsync
modeline "640x480@75" 31.5 640 656 720 840 480 481 484 500 -vsync -hsync
modeline "800x600@56" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync
modeline "800x600@72" 50.0 800 856 976 1040 600 637 643 666 +hsync +vsync
modeline "800x600@75" 49.5 800 816 896 1056 600 601 604 625 +hsync +vsync
modeline "800x600@60" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync
modeline "832x624@75" 57.284 832 864 928 1152 624 625 628 667 -vsync -hsync
modeline "1024x768@75" 78.8 1024 1040 1136 1312 768 769 772 800 +hsync +vsync
modeline "1024x768@70" 75.0 1024 1048 1184 1328 768 771 777 806 -vsync -hsync
modeline "1024x768@60" 65.0 1024 1048 1184 1344 768 771 777 806 -vsync -hsync
modeline "1152x864@75" 108.0 1152 1216 1344 1600 864 865 868 900 +hsync +vsync
modeline "1280x1024@75" 135.0 1280 1296 1440 1688 1024 1025 1028 1066 +hsync +vsync
modeline "1280x960@60" 102.1 1280 1360 1496 1712 960 961 964 994 -hsync +vsync
modeline "1280x1024@60" 108.0 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync
modeline "1280x960@75" 129.86 1280 1368 1504 1728 960 961 964 1002 -hsync +vsync
modeline "1400x1050@60" 122.61 1400 1488 1640 1880 1050 1051 1054 1087 -hsync +vsync
modeline "1400x1050@75" 155.85 1400 1496 1648 1896 1050 1051 1054 1096 -hsync +vsync
modeline "1600x1200@65" 175.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
modeline "1600x1200@60" 162.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
modeline "1792x1344@60" 204.8 1792 1920 2120 2448 1344 1345 1348 1394 -hsync +vsync
Gamma 1.0
EndSection
#
Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
Defaultdepth 24
SubSection "Display"
Depth 24
Virtual 1792 1344
Modes "1280x1024@60" "1280x960@75" "1280x960@60" "1400x1050@60" "1280x1024@75" "1400x1050@75" "1152x864@75" "1600x1200@65" "1024x768@60" "1600x1200@60" "1024x768@70" "1792x1344@60" "1024x768@75" "832x624@75" "800x600@60" "800x600@75" "800x600@72" "800x600@56" "640x480@75" "640x480@72" "640x480@60"
EndSubSection
EndSection

2009年2月26日

[Ubunwu004]安裝 Subversion

如果要用 url ,記得要裝 libapache2-svn 套件

Ubuntu - 安裝 SVN (Subversion Server)

Subversion - Ubuntu documentation

[Ubunwu003] 安裝 Web server

無庸說就是 Apache 。

參考:
Install Apache Web Server on Ubuntu
ubuntu 8.04.1 設定 apache2 網頁根目錄

[Ubunwu002] 安裝 SSH

安裝 SSH server ,是為了可以遠端簽入管理。

作法很簡單,直接 apt-get install OpenSSH Server 即可。

參考:
Ubuntu Linux OpenSSH Server installation and configuration

[Ubunwu001]Ubunwu 誕生

我一直都沒有一台屬於自己的 server,因為一直沒有那個需求。也就懶得去架設,因為我想要的一些日常服務,Google 相關的服務都可以滿足我。

但是工作時發現需要有些 server 管理經驗,如果沒有實際去架設管理過,是學不到這方面的知識。臨時需要作些什麼處理時,很容易因為經驗的不足,而會不知道要怎麼下手。

而我又是學資訊的,不去瞭解,不去學習,不去體驗這些好像又說不過去。所以今天我就從我的桌機切一塊空間出來,灌了 Ubuntu 8.10 Desktop。準備架設一些 server 好好研究,像是 subversion, web server, mail server,等等都有計畫要架設。

沒有什麼目標,也沒有什麼確切的時間表要達架設好什麼 server,反正可以遠端控制,隨時可以上線修改,就讓它慢慢演化吧。

2009年1月9日

FlexTable 的 clear method

GWT 中的 Grid 和 FlexTable 都繼承自 HTMLTable,也就是相對於 HTML 中的 table 標籤。

其中 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.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的理由

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。

2006年7月2日

移除 google adsense

原本想安裝 google adsense 在我的 blogger 裡的部落格,但後來想想,會破壞整個 blog 的美觀,我之所以會用 blogger 就是看上了它乾淨的介面和版面。結果我找不到移除的選項,於是在這裡找到了方法,用 javascript 去找出 google 塞了什麼 html 碼,然後移除掉。很簡單,但很實際。

不過後來我沒有完整申請 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日

工具何其多

拜網路科技所賜,線上的服務愈來愈多元,也愈來愈複雜。所以就有服務供應商提供可延伸的工具、API給大家用。可以讓你在你的程式裡透過它們的工具來享用它們的服務。

本 blog 就是要深入這些工具而生。