2009年7月28日 星期二

AWS 的 EBS 和 snapshot

EBS 相當於 RAID,提供比一般硬碟還可靠的儲存能力。
使用 EBS 的一個好習慣是:
  1. 結束一個 instance 時,就做一次 EBS 的 snapshot。同時,刪除 EBS。
  2. 要啟動一個 instance 時,從 snapshot 重建一個 EBS 來使用。
  3. 要做 snapshot 前要先停止 application, umount EBS, 以免在產生 snapshot 的過程中 EBS 上的資料還在變動。
如此的好處是:
  1. 不必在未使用時佔用一個 EBS。省錢。
  2. 新建的 EBS 可以配合 instance 的 availability zone。

2009年7月26日 星期日

Domain Setup with DNSMadeEasy

依以下指示在 DNSMadeEasy 設好給 Elastic IP 用的 DNS Server。
Domain Setup with DNSMadeEasy
在 DNSMadeEasy 使用我在 Yahoo 的 email 名為 user name。

第二個 AMI

建了第二個 AMI,以 alestic/ubuntu-8.10-intrepid-base-20090614.manifest.xml 為基礎。並安裝以下軟體:

apt-get install sun-java6-jdk ant git-gui rhino user-setup

安裝後移除了 package cache 以簡省空間。

不安裝 Destop 軟體,它只是一個單純的 server。

這次學乖了,並未以 user-setup 建立任何 user。保持 AMI 的乾淨,只在起動 instance 後才臨時建立一個 user。這臨時建立的 user 名稱和密碼可以隨便給。因為它用一次即丟。

建立了第一個 AMI

閱讀 EC2 的 Getting Started Guide

學到以下:
  • 閱讀了Web Services Tutorial。Web Services 的基礎是 XML+HTTP。Web Services 的平台是 SOAP、UDDI、WSDL。
  • 下載了 ec2 api tools 及 ec2 ami tools。
  • 以 ssh 連上時要檢查 finger print 是否和起動 AMI 時 instance output 顯示的 ssh host finger print 相同,以避免 "man-in-the-middle" 攻擊。
  • 設 JAVA_HOME=/usr/lib/jvm/java-6-sun/
  • 設定 .ec2 環境。
  • 最後,建立了自己的第一個 AMI ami-novplay/myimage.manifest.xml

2009年7月25日 星期六

更簡單的安裝 EC2 AMI 中文的方法

在 ssh 及 apt-get update 及 user-setup 之後,以NX登入。
再選擇 Language support。

之後可以以 sudo 執行以下命令執行 helma ng:
apt-get install sun-java6-jdk ant git-gui
git clone git://github.com/hns/helma-ng.git
cd helma-ng; ant jar
export PATH=$PATH:`pwd`/bin
helma apps/demo/main.js

建立 中文 AMI

在起動了一個 AMI 後:

ssh -i xxx.pem ec2-user@public_DNS
user-setup

以下的命令可以以透過新的 user 使用 sudo 執行。

apt-get update && apt-get -y upgrade
apt-get install language-pack-gnome-en language-pack-en
apt-get install language-pack-gnome-zh language-pack-zh
dpkg-reconfigure locales
vim /etc/default/locale; set LANG=zh_TW.UTF-8
vim /etc/environment; set LANGUAGE=zh_TW:en_US:en, LANG=zh_TW.UTF-8, PATH
apt-get install scim-chewing scim-tables-zh
apt-get install sun-java6-jdk ant git-gui user-setup
user-setup
git clone git://github.com/hns/helma-ng.git
cd helma-ng
ant jar
export PATH=$PATH:`pwd`/bin
helma apps/demo/main.js

如此,可以顯示中文了。

部份需要 root 權限的工作可由自建的 user 使用 sudo 來做。

2009年7月24日 星期五

EC2 的下一步

下一步工作是:

製作一個 AMI。
和 EBS 結合。

EC2 中文

中文問題部份解決。

首先我將 /etc/default/locale 中的內容改為 zh_TW.UTF-8。

同時安裝輸入法 apt-get install scim-chewing scim-tables-zh

在編譯時我按右鍵選擇輸入法為 SCIM。

但是如此仍不能使許多應用程式的顯示改為中文。同時,Helma NG 也一樣不能處理中文。

執行 apt-get install language-pack-gnome-zh language-pack-zh 之後,大多數的應用程式都顯示中文了。同時,似乎也不必再按右鍵來選輸入法。而且,Helma NG 也可以正確顯示中文了。

在以下文章中說明 ubuntu 的中文安裝方法。但文中的 dpkg-reconfigure locales 似乎必須在安裝好 language-pack 後做才有效。

http://www.linuxdiyf.com/bbs/thread-87072-1-1.html

EC2 and NX

遵照以下文章起動一個 ubuntu EC2 instance。並且使用 NX 連上。和文章中唯一不同之處是我找不到 “AMIs and Instances” tab ,因此使用 AWS Management Console 來起動。

How to run a quick-throwaway ubuntu EC2 instance

還必須學會如何安裝中文,並且自定 AMI。

此外,以下文章也給我很大的鼓舞。
Amazon's AWS: EC2, EBS, S3, etc.


第一次登入還沒密碼時使用
ssh -i keypair.pem ec2-user@ec2-public-DNS

之後要執行 apt-get update 才能有完整的 package list,之後才能安裝 jdk。

比較 ubuntu 和 debian ,也許是因為 ubuntu 的更新較頻繁,upgrade的時間明顯短了許多。同時,為了和我自己的 desktop 區別,我打算在 AWS 上安裝 ubuntu。這也能減少傳輸的費用。

在安裝了 jdk, ant 及 helma-ng 後,可以執行 http://localhost:8080/。如果要能從外界透過 port 8080 連上,還必須在 security group 中開啟 tcp port 8080。

apt-get install sun-java6-jdk ant git-gui user-setup
user-setup
git clone git://github.com/hns/helma-ng.git
cd helma-ng
ant jar
export PATH=$PATH:`pwd`/bin
helma apps/demo/main.js


慢慢來。

2009年7月23日 星期四

App Engine 的 _ah/admin 無法秀中文

App Engine 在 local 的資料可以透過 http://localhost:8080/_ah/admin 來觀察。
問題是,當資料是中文時,無法正確顯示。這使得在開發初期要瞭解程式是否正確變得困難。這個問題不是我能解決的。

在面對這麼多 App Engine 的中文化問題後,我開始思考 EC2 是不是更好的選擇。至少在開發的初期,它可以做得和我的系統完全一致。

和 App Engine 不同。Scalability 和 Load balancing 是我走 EC2 這條路要克服的問題。

2009年7月22日 星期三

Javascript 的 Google trend

使用 Google trend 瞭解了一下 javascript 的情況。
Javascript 的 Google trend
有趣,在新聞中,Javascript和PHP的報導率從今年初開始已經併駕齊驅了。雖然查詢 PHP 的人的數量仍遠多於 Javascript 。結論:有人在炒作 javascript 。難怪我會在今年學 javascript 。

哈哈。

2009年7月21日 星期二

從 Helma NG 到 Jack

為了瞭解為何 Helma NG 無法顯示中文,我繼續走在探索道路上。

我必須瞭解 Jack 。因為 Helma NG 架構在 Jack 上。

我試著執行一下 Jack。只是修改它的 jack/examples/example.js ,加幾個中文字。結果 Jack.Lint 告訴我 Error: Content-Length header was 24, but should be 20 。

我想是 Jack.Lint 的 bug 。

不禁嘆息。看來 javascript 的中文之旅還在初階段呢。

有趣的是,看 jack 的寫作風格和 Helma NG 是完全不同的。

Helma NG 0.4 在 App Engine 上無法顯示中文

很不幸的。無法顯示中文。這迫使我必須瞭解原因。為了瞭解原因,我必須學很多本來不必學習的東西。

本來,我的計劃只要使用 Helma NG 和 javascript 就能搞定。現在,我必須探就 Helma NG 的底層,瞭解到底發生了什麼事,為何 java 可以正確顯示中文,而建立在 Java 之上的 Helma NG 卻不可以。

我先瞭解 rhino 及 app engine 的關係。以免被 Helma NG 的複雜性嚇到。以下這篇文章,給了我一個不錯的開始。

Javascript on Rhino on Java on App Engine

這時開始感到困難了。

我不會 Java。

又回到了年輕時什麼都不會的時候。

努力之後,我學會了:
  1. 使用 Eclipse 的 Project->Property 來增加一個 jar file。
  2. 在 src 中增加一個新的 .java 檔。
  3. 如何 embeds rhino
  4. 使用 FileInputStream 及 InputStreamReader 來讀取 .js 檔,以便設定 encoding。FileReader 雖然較容易用但無法設定 encoding 。
  5. ContentType 要加上 charset=UTF-8。
It works!! 我寫的小小的 Rhino Servlet 可以在 App Engine 上顯示中文了。

核對 Helma NG 的程式,其 file.js 及 MarkdownProcessor.java 都使用 FileReader。這應該就是 Helma NG 無法在 App Engine 顯示中文的原因。

2009年7月17日 星期五

Helma NG 和 Javascript

=== 2009/07/17 ===
檢視去年的文章,今年的發展有很大的不同:
我開始學習 javascript ,並且使用 Helma NG來設計我的第一個網站。一個文字遊戲網站。