2013年1月14日月曜日

MacにインストールされているJava

(2015/11/22追記)
ターミナルからjavaコマンドやjavacコマンドを実行する場合は、JAVA_HOME環境変数でJavaのバージョンを指定します。bash, zshの場合は.bashrcや.zshrcに記載してsource .bashrcなどで反映させます。以下の指定では、1.8系で最新のものが利用されます。
export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home -v "1.8"`

とりあえずインストールされている最新版を使いたいという時は、-vのバージョン指定が不要です。
export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home `

あまり用途はないと思いますが、細かいバージョン指定もできます。
export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home -v "1.8.0_65"`

「システム環境設定」はJavaアプレットに関する設定なので、以下の手順は有効ではないですが、残しておきます。

########################################################
(以下は2013/1/14記載。ターミナルから実行する)
前回の続きです。

インストールされている1つのJDKの中のjavacとjavaが使えているのかよくわからないので、とりあえず、「システム環境設定」から「Java」を選んで確認してみます。

すると、セキュリティ・アップデートを促されます。

アップデートが終わるとJava 7になったはずなんですが、「ターミナル」上では1.6のままです。インストールされたパスが異なるようです。

Mac:~$ java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)

Mac:~$ which java
/usr/bin/java

Mac:~$ ls -l /usr/bin/java
lrwxr-xr-x  1 root  wheel  74 10 20 02:05 /usr/bin/java@ -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

おそらくJDK 7はインストールされていないので、せっかくなので最新化します。
インストール手順はこちらです。バージョンを確認してみると、javacもjavaも1.7.0_10になってました。またhelpも日本語になりました。
他のバージョンのJDKを使いたい場合は、/usr/libexec/java_homeコマンドで変更可能パスを取得するか、同じコマンドで直接実行できるみたいです。

2013年1月4日金曜日

Safariのブックマークをソートする

Safariにはなぜかブックマークをソートする機能がありません。お正月休みで暇を持て余しているので、ソートツールを作ってみます(きっとどこかにすでに存在するんでしょうけど)。勉強を兼ねて初挑戦のRubyで作ってみます。

ソートするといってもどこから手を付けていいかと思い調べたところ、Safariにはブックマークの書き出しと、読み込みの機能があります。書き出されるのはNETSCAPE Bookmark formatという形式のファイルです。

<!DOCTYPE NETSCAPE-Bookmark-file-1>
<HTML>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<Title>ブックマーク</Title>
<H1>ブックマーク</H1>
<DT><H3 FOLDED>ブックマークバー</H3>
<DL><p>
<DT><A HREF="http://www.blogger.com/home">Blogger</A>
<DT><A HREF="http://www.yahoo.co.jp/">Yahoo!</A>
</DL><p>
以下省略

一旦NETSCAPE Bookmark format形式で書きだしておいて、Rubyでソート後、Safariに読みこませればソート完了という計画です。これならRuby初心者には程よい練習問題になりそうです。

まず、ファイル形式を眺めてみると、HTMLとは異なり<HEAD>タグや<BODY>タグは無く、他のタグがきちんと閉じられていなかったりします。またこれはSafari限定だとおもいますが、<H1>ブックマーク</H1>の下には、<DT><H3 FOLDED>ブックマークバー</H3>、<DT><H3 FOLDED>ブックマークメニュー</H3>、<H1>ブックマーク</H1>とそれぞれの階層にブックマークの実態が<DT>タグで記述されています。私の場合、以下の様な構造でした。
  • ブックマーク
    • ブックマークバー
      • ブックマーク1
    • ブックマークメニュー
      • フォルダ1
        • ブックマーク2
      • フォルダ2
        • ブックマーク3
      • ブックマーク4
    • ブックマーク5
一般的な構造がどうなっているのかまでは調べると大変なので、とりあえず自分のブックマークだけソートできることを目標にします。

はじめはREXMLというXML操作用ライブラリを使ってみようと思いましたが、やってみると正しいXMLフォーマットではないために色々面倒な事に。単純にタグが閉じられていないのと、親子関係が解析しづらいために、ベタに1行ずつ読み込んでいくことにしました。

完成したのはこちら。
main.rb
bookmark.rb
使用方法はこちら。標準出力にソート結果が出力されます。
ruby main.rb input.html
いつもはJava、Eclipseを使用しており、Rubyは初めてで作成に結構時間かかりましたが、感想です。

  • コード作成にはHomebrewでインストールした素のVimを使用しましたが、Eclipseを使い慣れているので機能的に物足りないです。.vimrcの設定等でどこまで機能追加できるか調べてみたいです。
  • デバッグ実行を行う際にruby -r debugを使用しました。今回はそうでもなかったですが、コード量が多くなると厳しいです。世の中一般ではどういう環境で開発しているんでしょうか。
  • 動的型付け言語で変数に型が付いていないのでなんでも代入できてしまうというのが、まったく慣れないです。
  • 他にもAPIが分からない等いろいろありますが、慣れれば少ないコーディング量で機能を実現できるんでしょう。まだまだ先は長いです。

2013年1月3日木曜日

映画「ドライヴ」を見ました

お正月で実家に帰省中に暇すぎてiTunes Storeを眺めていたら、前から気になっていた映画「ドライヴ」が出ていたので見てみました。

主人公のドライバー(名無し)と隣人家族とのふわふわ・ほろ苦なお付き合いシーンから暴力シーンに変わる振り幅が大きく、久しぶりに手に汗握りながら見てました。ドライバーが恋してしまう女性とその子供と一緒にいる場面では青春映画かと思うような優しい音楽が流れ、かと思えば暴力シーンでは前触れ無く冷徹でゴアな表現。

女性と子供も決して安全ではなく、一瞬ですべてを壊されてしまうかもしれないというドキドキ感が満載でした。主演のライアン・ゴズリングが好きになりました。あと冒頭のドライブシーンがカッコ良かったので、もう少し見たかったです。

2013年1月2日水曜日

Eclipseでビルドした場合に使用されるコンパイラ

Eclipseでビルドすると、Eclipse内部のJava development tools(JDT)に含まれるコンパイラによってビルドされる(参考)。
JDT Core is the Java infrastructure of the Java IDE. It includes:
An incremental Java compiler. Implemented as an Eclipse builder, it is based on technology evolved from VisualAge for Java compiler. In particular, it allows to run and debug code which still contains unresolved errors.
なので、javacコマンドを使ってビルドしたものとは厳密には異なる。ターミナル上でJDTに含まれるビルダを使ってビルドすることもできる。例えば、src_dirディレクトリに存在するjavaファイルをEclipse3.8に含まれるJDTを使って、Java1.6準拠でビルドしたい場合は、以下のコマンドを実行。
$ java -jar org.eclipse.jdt.core_3.8.2.v20120814-155456.jar -1.6 src_dir
ヘルプは以下のコマンドで表示すると他のオプションも確認できる。
$ java -jar org.eclipse.jdt.core_3.8.2.v20120814-155456.jar

DockerでMQ環境を作る

DockerHubの ibmcom/mq を使う。ファイルシステムとしてtmpfsは使えないので これ を参考に/mnt/sda1に置き換える。 brew install docker docker-machine docker-machine create --drive...