October 30, 2005

OSXでJSP/Servletを動かしてみた

なんとなくJavaで遊んでみました。
メインUNIXマシン(MMX200)は遊びづらくなってきたので今回はmac miniです。MMX200だと、コンパイルとか遅くて眠くなるのです。

Javaはさっぱりわからないので少し調べてみたところ、JSP/Servletの開発に必要な環境は主に下記のようなので順を追って試してみることにしました。(Eclipseはなくても動くので今回はパス。)

  1. JDK (コンパイラ、ライブラリ等)

  2. Tomcat (Webアプリケーションサーバ)

  3. Eclipse (GUIベースの開発ツール)



Hello World (JDK)

しかしまずJavaを知らないので、取りあえずお約束のHellow Worldを書いてJDKで動かしてみました。
OSXには最初からJDKが入っているのでインストールの必要はなし。

まずコードを書いて
# vi helloworld.java
class HelloWorld{
static public void main(String args[]){
System.out.println("Hello World!");
}
}


コンパイルして実行、と。 *1
# javac helloworld.java
# java HelloWorld
Hello World!


*1 実行時に# java HelloWorld.classと打ったら「Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class」のようにクラスへのパスが通ってないとさんざん怒られました。拡張子は不要らしい。というかドットはパッケージの階層構造を意味するらしい。このことにしばらく気がつかず困りました・・・。
カレントはデフォルトのクラスパスなので明示的にパス指定する必要はないようです。あえて指定する場合は環境変数CLASSPATHにパス(この場合は「.」)を通せばいいらしい。また、「java -cp . HelloWorld」のようにオプションで指定することもできる、と。


Tomcatのインストール

次にTomcatをインストール。*2

# cd /usr/local/src/
# wget http://www.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28.tar.gz
# tar zxvf jakarta-tomcat-5.0.28.tar.gz -C /usr/local/
# cd /usr/local/
# ln -s jakarta-tomcat-5.0.28 tomcat5

これでインストールはおしまい。

Tomcatの起動。*3
# setenv JAVA_HOME /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/
# /usr/local/tomcat5/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat5
Using CATALINA_HOME: /usr/local/tomcat5
Using CATALINA_TMPDIR: /usr/local/tomcat5/temp
Using JRE_HOME: /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/


プロセス確認
# ps -auxw | grep Java
root 1868 0.1 5.7 283072 30088 p1 S 8:15PM 0:10.03 /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/bin/java (以下略)
root 1872 0.0 0.0 8772 8 p1 R+ 8:15PM 0:00.00 grep Java


ブラウザでアクセスして確認。不細工なネコが表示されたらOK。
http://127.0.0.1:8080/


終了は
#/usr/local/tomcat5/bin/shutdown.sh



*2 当初、最新版のv5.5.12をインストールしたら
This release of Apache Tomcat was packaged to run on J2SE 5.0
or later. It can be run on earlier JVMs by downloading and
installing a compatibility package from the Apache Tomcat
binary download page.

起動しませんでした。Tomcat5.5はJ2SE5以上でないとダメらしい。現段階ではどうでもいいので5.0系を使いました。

*3 環境変数を指定せずに起動したら
# /usr/local/tomcat5/bin/startup.sh
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

怒られました。


Hello World (JSP)

さて次はJSPでWebアプリケーションを作成してみます。
J2EEではWebアプリケーションのディレクトリ構成が決まっているようなので作法に従ってディレクトリを作成。
今回はデフォルトのwebappsの下に作成しました。

# cd /usr/local/tomcat5/webapps
# mkdir MyApp
# mkdir MyApp/WEB-INF
# mkdir MyApp/WEB-INF/classes


次にWebアプリケーションのコンテキスト定義ファイルを作成します。
# vi /usr/local/tomcat5/conf/Catalina/localhost/MyApp.xml
<Context path="/jsp-app" docBase="MyApp" debug="0" reloadable="true" />

URIはここで指定。reloadable="true"にしておけばサーブレット修正時にサーバを再起動する必要がなくなるそうです。

次にWebアプリケーションの設定ファイルであるweb.xmlを作成。適当です。
# cd MyApp/WEB-INF
# vi web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
</web-app>


表示するjspファイルを作成。
# cd ..
# vi helloworld.jsp
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<%@page import="java.util.Date" %>
<%
Date time = new Date();
String s= "Hello World";
out.println(s);
%>
<address><%= time %></address>
</body>
</html>


Tomcat再起動
# /usr/local/tomcat5/bin/shutdown.sh
# /usr/local/tomcat5/bin/startup.sh


ブラウザで確認。
http://127.0.0.1:8080/jsp-app/helloworld.jsp



Hello World (Servlet)

最後にServletも動かしてみることに。ServletからWebに直接出力というのはちょっと微妙ですが。

まずソースを書く。(ここからもらいました。)
# cd /usr/local/tomcat5/webapps
# vi HelloWorldServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorldServlet extends HttpServlet {
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// ContentTypeを設定
response.setContentType("text/html; charset=Shift_JIS");
// 出力用PrintWriterを取得
PrintWriter out = response.getWriter();
// 出力
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello World");
out.println("</body>");
out.println("</html>");
}
}


コンパイル。なにやらいろいろパスを通さないといけないようです。
# javac -d WEB-INF/classes -classpath /usr/local/tomcat5/common/lib/servlet-api.jar HelloWorldServlet.java


web.xmlに下記を追加。
# vi WEB-INF/web.xml
<servlet>
<servlet-name>MyHello1</servlet-name>
<servlet-class>HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyHello1</servlet-name>
<url-pattern>/helloservlet</url-pattern>
</servlet-mapping>


Tomcat再起動
# /usr/local/tomcat5/bin/shutdown.sh
# /usr/local/tomcat5/bin/startup.sh


ブラウザで確認。
http://127.0.0.1:8080/jsp-app/helloservlet




というわけで駆け足でHello Worldを試してみたのでした。

参考URL
http://www.ayaori.net/software/osx/tomcat5Primer/
http://www.hellohiro.com/
  

October 12, 2005

Mac OSXのVNCクライアントとOpenSSHポートフォワードを使ってWindowsを遠隔操作してみた

外出先のWindowsから自宅PCをVNCで操作するのはとっても便利なのですが、遠隔地のOSXからも自宅のVNCサーバにアクセスしたくなったのでやってみました。理由は単純。Windows(VNCサーバ機)のひかるにアクセスして家計簿を付けたいのです。ただそれだけ。

手順はこんな感じ。


  1. 操作対象PCのVNCサーバを起動しておく。(RealVNC)。ポート番号はここでは5900。

  2. ターミナルから自宅のSSHサーバに接続し、VNCサーバのローカルIP(192.168.0.250)に向けてトンネルを掘る。(ここではOSXのローカルポート5900を自宅VNCサーバの5900にフォワードしてます。
    自宅SSHサーバのホストアドレスが「gate.example.com」ユーザIDが「myuser」だとするとこんな感じ。
    # ssh -l myuser -L 5900:192.168.0.250:5900 gate.example.com

    ※SSH -L <ローカルポート番号>:<転送先ホスト>:<転送先ポート番号> <リモートホスト>

  3. OSXのVNCクライアントChicken of the VNCをインストールして起動。Hostに「localhost:5900」、PasswordにVNCサーバのパスワードを入力して「Connect」



これで遠隔地のOSXから自宅のWindowsを操作することができます。動作はすごく遅いけども一応便利・・・かな。
ちなみにポートを3389にすればさくっとリモートデスクトップが使えることでしょう。  

October 11, 2005

RSSリーダーとしてのSafari

bb420e4f.jpgあっ、という間にインターネット世界を席巻してしまったブログのおかげで近頃は巡回サイトのほとんどがRSSに対応してくれるようになりました。RSSは普及するのかどうか微妙だなーと思っていたのですがついに浸透してしまった気がします。PointCastは失敗したのに。かつてのチャンネル技術がもっと気軽に作れる仕様だったら普及したのでしょうか。単に時期尚早だったのかもしれません・・。

それはさておき近頃はRSSに対応していないと毎回見に行く気がおこりません。RSSリーダーとしてBloglinesを愛用しているのですが、これが実に見づらい。blogを見る方が遙かに見やすいです。[お気に入りblog発見→bloglines登録!→見づらいので見なくなる]という間抜けな展開になることが増えてきたのでこれでは本末転倒と思いRSSリーダーを探していました。

Googleがβサービスをはじめたのでちらっと触ってみましたがJavaScriptの使いすぎでブラウザ対応がいまいち。livedoorとかはてなとかいろいろ見てみましたがどれも使いづらい or 見づらい。(はてなのサービスは全てが恐ろしく見づらく、わかりにくい・・。)

そこでSafariを使ってみました。
ブラウザはOperaを長いこと愛用しているのですが、文字の見やすさにおいてSafariに一日の長があります。RSS機能もその例外ではなくとても見やすい。インターフェースもわかりやすい、今のところ快適に使用できています。

ブックマークとしてRSSのURIを登録しておき、「すべてのRSS記事を表示」とすればフォルダ内の全てのRSS記事を一括で開いてくれます。サブフォルダ内のRSS記事にも対応しています。表示範囲やソートもできて便利。RSS記事は一度開かないとSafari側でRSSだと認識しないようなのでURIを登録するだけでなく一度は個々に開かないといけないようです。

ちなみにbloglinesからSafariへのOPMLのimport手順はこんな感じ。

・blogline→MY フィード→編集→登録リストの抽出(OPML)で、OPMLファイルをエクスポート
→Firefoxをインストール
→Firefoxにsageをインストール
→Firefoxメニュー→ツール→sage→Options→OPML inport/export→Import OPMLで、OPMLファイルをインポート
→Safariメニュー→ファイル→ブックマークの読み込みでFirefoxのブックマークを読み込む(User/Library/Application Support/Firefox/Profiles/の中)


・・・面倒。さっさとSafariもOPMLのimpot/exportに対応してほしいものです。


※手順は下記を参考にさせていただきました。
http://homepage.mac.com/jsgarage/C303066367/E191576364/  

October 07, 2005

指先に集中して。

金曜になってしまいましたが、先週の土曜は初めてのレッスンでした。超多忙のため先週に続いて今週も全く練習ができていない状態。また土曜にはレッスンです。こんなことでは月謝が無駄になってしまう・・・。

取りあえず先週の先生の指示をメモ。

■基本的なこと

・音が綺麗に移り変わっていない。きちんと鍵盤を移動しないと音が重なるので注意すること
・3〜5の指の間がくっついている。ちゃんと指を離して、指一本で手を支えなさい
・指先に集中すること。音は指先と、第三関節(コブシ)に集中して出すもの。あなたは手全体で弾いている。もっと指先に集中して。
・薬指の第三関節が浮き出ていない。第一関節もふにゃふにゃ。ここを意識すれば音が出る
・もっとゆっくり弾きなさい

■姿勢

・肩を落として
・ヒジを少し開いて
・奥まで腰掛けないで

■スタッカート

・上から振り下ろして叩いてはダメ。鍵盤に触れた状態から素早く叩いて離す!(そんなのできないよぅ(´Д⊂)
・きちんと下まで叩いて

■その他

・伸ばす音は指示通り最後まで伸ばす。途中で離さないこと
・12→13のような和音でスラーの場合は、2は1よりも後で離す。2だけを押さえている状態が一瞬だけ存在する。こうすれば重音のスラーになる
・アーティキュレーションをちゃんと意識すること
・16分音符のトコ、ひどいよ


といきなりズバズバ言われてしまいました。言われないと習っている意味がないのですが。

長年のブランクのため、まず指が全く動いていないようです。右手は徐々に感覚が戻ってきましたが左手の4と5はかなり重傷で全く思うように動いてくれません。「面倒なのかもしれないけど〜」という先生、面倒なんじゃなくて手がウゴカナイんですよー^^;

今までは自己流で適当に弾いていましたが、その結果大きく手を振り下ろすような変な弾き方となってしまっていたようです。そんな弾き方だとミスは多いし難しい曲は弾けないし何より音が汚いので良いことは一つもないのですが、手を鍛えなくても弾けるのです。普段練習していないからそんな弾き方になってしまったとも言えます。今回、最初に言われた事は癖になっているものもあるので後々まで引きずるかもしれません。だからきっと残しておけば後で役に立つでしょう。自己流で弾いている方の参考にも、なるかも。

とにかく一つずつ解決していこうと思います。少なくとも自分のレベルでは、ピアノはやった分だけ確実に上達するのが嬉しい。


しかし明日レッスンなのに今週はまだ一度も弾いてないです。忙しいからある程度は仕方がないとも言えますが・・・。


「でも・・・今ここで泣いてるヒマあったら練習しようと思わない奴はダメなんじゃないの?すでに。」(by 千秋)

・・・・ごもっとも。(´・ω・`)