
photo credit: Jorbasa
最近「インストール」ネタが多くてすみません。
MacPortsを使ってMac OS X 10.6 (Snow Leopard)にTomcat 6をインストールしたので、その方法をまとめておこうと思います。
インストール
以下のコマンドを実行して、Tomcat 6をインストールします。
コマンド一発でインストール完了です。
$ sudo port install tomcat6
起動
以下のコマンドを実行してTomcatを起動します。
$ sudo /opt/local/share/java/tomcat6/bin/startup.sh
http://localhost:8080にアクセスして、次のような画面が表示されればインストール & 起動成功です!

シャットダウン
以下のコマンドを実行してTomcatをシャットダウンします。
$ sudo /opt/local/share/java/tomcat6/bin/shutdown.sh
先程のURLにアクセスできなくなっていればシャットダウン成功です!
まとめ
特に何のつまずきポイントもなかったので、ブログでまとめる意味があったのか不明ですが、どこかの誰かの役に立つことを信じて書いてみました。
同じ情報がすでにたくさんの人の手によって共有されているかもしれませんが・・・
それでは!
ふと「Google App Engine for Java」を使って何かWebアプリケーションを作ろうと思い立ったので、最初のとっかかりによさそうな本はないかと探していたのですが、たまたま図書館でこの本が目に飛び込んできたので、試しに読んでみることにしました。
目次
- 第1章 クラウド時代のシステムインテグレーション
- 第2章 制約
- 第3章 開発手順
- 第4章 データストア
- 第5章 サービスAPI
- 第6章 テスト
- 第7章 Googleが提供するサービスとの連携
- 第8章 追加リソースの購入
感想
これからGoogle App Engine for Javaで開発を始めたい人に
クラウドコンピューティングやGoogle App Engineに関する一般的な知識から、実際に開発・運用を始めたときに役に立ちそうな情報まで、一通り必要な情報は全て書かれているような気がします。
個人的には、BigTableについてRDBMSとの違いに重点をおいて説明されていたのが気に入りました。
「データストア設計上の注意点」として、BigTableを使ったWebアプリケーションを設計する上で気をつけなければならないことについて、わかりやすくまとめられていたと思います。
運用時の予算の決め方について書かれていたこともGood!なポイントです。
Java開発経験者向け
初心者向けのチュートリアルが少なく、Tipsっぽい内容が比較的多く書かれていました。
なので、「Google App Engine for Javaで初めてプログラミングに挑戦してみよう!」と思っている初心者の方には、少々難しいかもしれません。
Javaによる開発経験者の方にとっては難なく読めるレベルだと思います。
サンプルコード、図が読みづらい
この本、実は一般的な技術書と比べてサイズが小さめです。
その影響か、図やサンプルコードが、それを引用している部分から少し離れたところに掲載されていることが多くなっています。
サンプルコードを読んで、それに言及していたページに戻って、またサンプルコードが書かれたページまで移動して、という動作をする必要が何度かあったので、レイアウト的に改善の余地はあるのかなぁ、と思いました。
内容とは関係ないかと思いますが。。
まとめ
この本を読むことで、Google App Engine for Javaについての広く、そして少し浅めの(?)知識を身につけることができると思います。
「もう一冊、次はもっと深いところまで書かれた本が読みたい」
それが、読んだ後すぐに思った感想。
これから、Google App Engine for Javaを使って何かWebアプリケーションを作りたい人は、最初のステップとしてこの本を手にとってみるのもいいかもしれません。
それでは!

Javaには、変更可能な文字列を表すクラスとして、StringBuilderとSringBufferの2種類のクラスが存在しています。
StringBuilderは非スレッドセーフ、StringBufferはスレッドセーフ、その分StringBuilderの方がStringBufferより動作速度が速い、という点が二つのクラス間の大きな違いのようです。
いったいどれくらい速いのか、ということについて気になったので、以下のコードを実行して調べてみました。StringBuilderとStringBufferを用いて”Hello, world!”という文字列を100万回結合し、その所要時間を計測しています。
ちなみに、環境はMac OS X 10.6 + JDK5です。
StringBuilder実験用コード
public class StringBuilderTest {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
sb.append("Hello, world!");
}
long end = System.currentTimeMillis();
System.out.println("required time: " + (end - start));
}
}
StringBuffer実験用コード
public class StringBufferTest {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
sb.append("Hello, world!");
}
long end = System.currentTimeMillis();
System.out.println("required time: " + (end - start));
}
}
結果
上記のプログラムを10回ずつ実行し、所要時間の平均値を計算したところ、結果は以下のようになりました。
- StringBuilder:平均132.6 msec
- StringBuffer:平均170.7 msec
StringBuilderはStringBufferの約78%の時間で処理を完了出来ていることがわかります。
Javaプログラマからすれば常識のようなのですが、上記の結果からもマルチスレッドからの文字列操作を行わない場合は、基本的にStringBuilderを使うのがよい、ということが言えそうです。一つ勉強になりました。