2012年6月29日金曜日

Eclipseプラグインの開発サイクル短縮化計画

みなさんはEclipseのプラグインを開発したことがあるでしょうか?

Eclipseのプラグインを開発するときは、普通の手順ではEclipseの上で「テスト用のEclipse」を起動させてプラグインを動かします。

Eclipse自体が非常に重たいソフトウェアですから、それを2つ起動するともなるとメモリ使用量がものすごいことになります。しかも、メソッドが追加・削除される度にテスト用Eclipseを再起動させねばなりません。
それはつまり、1回の開発サイクルにほぼ毎回15秒くらいの待ち時間が入ってくることを意味します。Eclipse終了→ビルド→Eclipse起動→プラグインテスト

開発サイクルを速めるのに効果的なのは、プラグインとして開発しているソフトウェアを普通のJavaアプリにしてしまうことです。要するに、どこかにmainメソッドを定義し、そこから起動する形式にするのです。(このやり方は、ラボユースにおいて社員さんの方々とのブレインストーミングで浮上してきた案を元にしています)

Eclipseプラグインは通常、様々なやり方で起動されます。ツールバーのボタンから、メインメニューから、右クリックのコンテキストメニューからなど。各部分に主要な処理を埋め込んでいると僕の提案するやり方はやりにくいでしょう。

僕の提案手法が適用しやすいのは、プラグインの主要機能が1つのメソッドにまとまっており、その機能の入力データが手動で生成しやすい形式であるような場合です。手動で生成しやすいデータは例えばプログラムのソースコードです。単に文字列として表現できますので、簡単にプログラム上で表現できます。

対して、プラグインが複雑なデータを入力として必要とする場合、そのデータを用意するにはプラグインをプラグインとして起動させないといけない可能性があります。そういう場合、単純に僕の提案手法を使おうとしてもダメかもしれません。しかし、プラグインを普通のJavaアプリとして開発していくことで、開発効率が上がる、という考え方は有用なのではないかと思います。

2012年6月26日火曜日

Mac OS X + Eclipse に日本語版APIドキュメントを入れる

Javaランタイムインストールが楽だったで書いた方法でJavaをインストールすると、標準クラスライブラリのAPIドキュメントがインストールされない、ということに後から気が付きました。そこで、手動で日本語版のAPIドキュメントをインストールする方法を探しましたので、以下メモ。

OS XでとりあえずJavaの開発環境を準備するを参考にしました。

1.日本語版APIドキュメントのダウンロード
http://oracle.co.jp/へ行く
「ミドルウェア」の「Java」
「Java Platform, Standard Edition」
「Java Platform, Standard Edition (Java SE)」

「Java SE概要」なるページが出てきたら「ドキュメント」タブの「API」
下の方に
Java SEのバージョン 1.3.0、1.4.0、5.0、6 の日本語ドキュメントは、こちらのページでアーカイブ・ファイルも提供しています。
という表記があるので、「こちら」をクリック
276MBのJava Platform Standard Edition 6.0をクリックしてダウンロードします。

ダウンロードが完了したら、適当な場所に解凍します。僕は~/javadoc/に配置しました。

2.Eclipseの設定
Eclipseの環境設定から「Java」「Installed JREs」を開き「Java SE 6 (MacOS X Default)」を選択して「Edit」をクリックします。
Edit画面が開いたら、「/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar」を選択し、「Javadoc Location...」をクリック
「Browse...」から、先ほど展開した場所を開きます。
僕の場合は~/javadoc/ja/api/を指定しました。

以上で完了です。これで、ソースコード中の標準クラスライブラリのクラス名にマウスカーソルを乗せるとJavadocが表示されるようになりました!

2012年6月24日日曜日

Mac OS Xのウイルス対策 clamXav

某社では私物PCをLANにつなぐ際、ウイルス対策ソフトのインストールが必須だそうです。僕のMacBook Airには当然ながらウイルス対策ソフトなんてプリインストールされていませんのでなんとかしないといけません。

そこで僕が目をつけたのが「clamXav」と呼ばれる、無料のウイルス対策ソフトです。このソフトはバックエンドとしてclamavというオープンソースのエンジンを用いています。clamavはUNIX系OSではよく使われるウイルス対策ソフトです。

カスペルスキーとかシマンテックとかの企業製品でもいいのですが、僕はオープンソースが好きだし無料なのでclamavを使うことにしました。

clamXavはclamXavの公式サイトからダウンロードできます。App Storeにも登録されていたのですが、App Storeの方は少しバージョンが古いですし(執筆時点の公式サイトでの最新バージョンが2.2.5に対し、App Storeでは2.2.4でした)、App Storeのバージョンには「ClamXav Sentry」が含まれていないそうですから、僕は公式サイトからダウンロードしました。

設定(といかインストールも)まだしてないのですが、設定はMac のウイルス対策あたりが参考になりそうです。

2012年6月22日金曜日

Mac OSX Lionでアンチエイリアス

ターミナルを使ってて文字のアンチエイリアスがちょっと効きすぎているかなと思いましたのでどうやればいいか調査しました。

 以前のMac OSXならば「MacOSXのアンチエイリアスがウザい」で紹介されているように、アンチエイリアスの効きをシステム環境設定画面から調整できるようです。 しかし僕が使っているMac OSX Lionではそんな項目はなくなっており、「使用可能な場合は LCD で滑らかな文字を使用」というチェックボックスになっています。要するにアンチエイリアスするかしないかの二択しかできません。

 しかしもっと調べていると「MacOSX 10.7 LION フォントのアンチエイリアスが汚い場合の回避方法」というページを見つけました。重要なのは紹介されているコマンドです。

defaults -currentHost write -globalDomain AppleFontSmoothing -int 2

この最後の「2」を0(なし)から3(最大)のいずれかの整数に設定することで、アンチエイリアスの効き方を制御することができます。僕は「1」の設定が好みでした。1に設定し、ターミナルのフォントをRictyにしていますが、結構良い感じです。

2012年6月19日火曜日

CDTでAST

今日はちょっとだけC-Helperの開発として、EclipseのCDTを使って、C言語のソースコードから抽象構文木(AST)を生成する部分を実装しました。
同じような実装は卒論のときにもしたけれど、そのたびによくわからないのがAST生成メソッドの引数です。

ILanguage.getASTTranslationUnit(
        FileContent content,
        IScannerInfo scanInfo,
        IncludeFileContentProvider fileCreator,
        IIndex index,
        int options,
        IParserLogService log)

引数がいっぱいあるけれど、これらについてまともなドキュメントは存在しません。
何を渡せばいいのかはっきりせず、卒論のときも今も、自己流で引数を用意しています。こんな感じに。

        ILanguage language = GCCLanguage.getDefault();

        FileContent reader = FileContent.create(filePath, source);

        Map<String, String> macroDefinitions = null;
        String[] includeSearchPath = null;
        IScannerInfo scanInfo = new ScannerInfo(macroDefinitions, includeSearchPath );

        IncludeFileContentProvider fileCreator = IncludeFileContentProvider.getEmptyFilesProvider();
        IIndex index = null;
        int options = 0;
        IParserLogService log = new DefaultLogService();

        try {
            IASTTranslationUnit translationUnit = language.getASTTranslationUnit(reader, scanInfo, fileCreator, index, options, log);

とりあえずFileContentだけきちんと解析したいソースコードの内容を渡すようにすれば、とりあえずはそれなりの抽象構文木が手に入るなあという印象です。

ハマっている曲

最近は「すいみん不足」(キテレツ大百科OP)にハマっています。
星井美希が歌ってるバージョンとか小阪ちひろが歌ってるバージョンとか。

どうしてこんなに眠いの?

Javaランタイムインストールが楽だった

MacBook Air (Mid 2012)だけの機能なのか、OS X Lion共通の機能なのかはよくわかりませんが、eclipseを起動させようとしたり、javaやjavacコマンドを叩いたりすると
「Javaランタイムが必要。インストールする?」
という旨のダイアログが表示され、ボタンクリックだけでJava 1.6がインストールできました。楽ですね!

実はeclipseを起動させようとして、初めてこのダイアログに出会ったのですが、その時は「JREしかインストールされないのでは(javacコマンドが入らないのでは)」と心配したので、ターミナルでjavacを実行したところ同じ(ように見える)ダイアログが表示されました。そしてそのダイアログからインストールしたところ、きちんとjavacまで導入されました。eclipseを起動しようとして表示されたダイアログからインストールしたらどうなるかは闇の中ですが。とりあえずめでたし?