2013年2月18日月曜日

【Eclipseプラグイン開発】 配布時に他プラグインへの依存をなくす

Eclipseプラグインの開発時と配布時の、他プラグインへの依存関係を変えたいことがあります。
例えば、開発時にJUnitを使ってテストをするような場合。
配布先ではテストをしないでしょうから、末端ユーザーの環境にJUnitプラグインがなくても大丈夫なようにしたい。
このように、開発時と配布時の依存関係を変えたいという要望があるでしょう。

まず基礎知識として、開発しているEclipseプラグインの依存設定はplugin.xmlで設定します。
マニフェストエディタでplugin.xmlを開けばDependenciesタブがあります(下図)。


Plug-in Dependencies - Help Eclipse Platform
を読むと、依存設定の"Optional"オプションを有効化すると、その依存プラグインが配布先環境に存在してもしなくても、配布したプラグインが実行できるそうです。

ということで、実際に試してみたところ、JUnitプラグインが存在しない環境でもC-Helperがインストール&実行できるようになりました。

2013年2月4日月曜日

【Vim】Markdownプレビュー用プラグインを入れる


OS X Mountain Lion で Vim に https://github.com/mattn/mkdpreview-vim を導入します。

プラグイン開発者さんのブログ記事 http://mattn.kaoriya.net/software/vim/20120208161751.htm

依存しているソフトウェアのインストール

ソースコードをコンパイルしてもいいんですが、面倒なのでHomebrewで。
$ brew install pyqt4
$ sudo easy_install markdown

上記のブログに依存しているソフトウェアが列挙されているのですが、markdownライブラリは一覧に含まれていませんでした。
しかしどうやら、mkdpreview-vimが裏で使っているらしいので、インストールしておきます。

Vimプラグインのインストール

mkdpreview-vimはwebapi-vimに依存しているらしいので、両方入れます。
僕はVundleを使っているので、以下のように書きました。
.vimrc
Bundle 'mattn/webapi-vim'
Bundle 'mattn/mkdpreview-vim'

そしたらVimから :BundleInstall でOK

プラグインの調整

brewでPyQt4を入れたので、このままではpythonが認識してくれません。
ということで mkdpreview-vim/static/mkdpreview.py をちょこっと改造します。

import os 
import sys 
import json 
import cgi 
import imp 
import signal 
from threading import Thread 
 
# add serch path 
sys.path.insert(0, '/usr/local/lib/python2.7/site-packages') 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import * 
from PyQt4.QtNetwork import * 
from BaseHTTPServer import HTTPServer 
from SimpleHTTPServer import SimpleHTTPRequestHandler 

こんな感じで、PyQt4がインストールされたディレクトリをパスに追加しておきましょう。



2013/06/20追記

今 pyqt4 をインストールしようとしたら見つからないと言われました。どうやらパッケージ名が変わったようです。
$ brew install pyqt
でいけます。

さらに、インストール中にこんなメッセージが出ていたのに気づきました。

For non-homebrew python (2.x), you need to amend your PYTHONPATH like so:
  export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH
「プラグインの調整」の項で書いたことは、実はbrewさんが既に注意してくれていたのですね… 完全に見逃していました。



2012年12月6日木曜日

Ada勉強メモ 3

ADA-言語とプログラミング方法論』p.3「Ada 入門」から読みます。

1.1 背景
  • Adaは米国国防総省(DoD)が、1976年頃から開発を始めた。
  • FORTRANやCOBOLのように特定の用途向けではなく、Adaは汎用言語。
  • Adaは世界最初のプログラマの名前。

1.2 プログラミング言語Ada
  • Adaはコンパイル言語である。
  • オブジェクトプログラム(機械語プログラム)は、通常「プログラムライブラリ」に格納される。
    • プログラムライブラリって、Cで言うところのライブラリと同じかな?
  • プログラムライブラリには、完結したプログラム、副プログラム、パッケージが格納される。
  • Adaの識別子は文字から始まり、文字、アンダースコア、数字の羅列。ただしアンダースコアの連続はダメ
今日はここまで。
Adaの歴史と基本的な約束事が分かりました。
次回はいよいよAdaのプログラムを書いていきます。

2012年12月3日月曜日

【Eclipse】プラグインをデバッグする

Eclipseのプラグインでデバッグメッセージを出力する良い方法が見つかったのでメモ。

問題


  • Eclipseに自作プラグインを入れてEclipseを通常起動させても、標準出力・標準エラー出力が表示されない。
    つまり System.out.println を用いてデバッグメッセージを表示しようと思っても、画面に表示されない。
  • java.util.logging.Loggerを使おうと思っても、やっぱり標準出力が表示できないので無意味。
    もし標準出力が出るようになっても、ロギングレベルの設定方法が分からない。(まさか常にsetLevel(Level.ALL)するわけにも行かないですし)

やりたいこと

デバッグしたいなあ、と思ったときに、プラグインを再コンパイルせずに、デバッグメッセージをターミナルへ表示したい


解決策

Eclipseをデバッグモードで起動する方法を覚える

詳しくはRunning Eclipseを読みましょう。要点をまとめます。

Eclipseは
$ eclipse -debug
でデバッグモードで起動できます。Macならこんな感じ。
$ /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse -debug

さらに、 -consolelog オプションを付けると、標準出力がコンソールへ接続されます。

プラグインのデバッグメッセージの表示のON/OFFをフラグ化


フラグ化することで、プラグインの再コンパイルなしにデバッグメッセージのON/OFFを制御できるようになります。

こんなクラスを作ります。
/**
 * .options読み込みクラス
 * @author uchan
 *
 */
public class DebugOptions {

    public static final boolean verbose;

    static {
        verbose = Boolean.parseBoolean(Platform.getDebugOption(
                "com.github.uchan_nos.c_helper/verbose"));
    }
}

プログラム中では
if (DebugOptions.verbose) {
    logger.fine("debug message");
}
という風に使います。

あとはこんな感じの設定ファイルを作ります。

~/eclipse.options
# Output verbose messages
com.github.uchan_nos.c_helper/verbose=true

そして、Eclipseの -debug オプションの引数として指定します。

$ eclipse -debug ~/eclipse.options

起動ログに

Debug options:
    file:/Users/uchan/eclipse.options loaded
という表示があれば成功です。

2012年11月30日金曜日

Ada勉強メモ 2

Ada 教科書・ウェブページ紹介に載せた教科書

ADA-言語とプログラミング方法論

を読んでいきます。まずは目次から。

本書は4部から構成されています。目次をさらっと眺めます。

第I部 小規模プログラミング
  1. Ada入門
  2. Integerデータ型
  3. Booleanデータ型
  4. 基本的な制御構造
  5. 組織的プログラミング
  6. Characterデータ型
  7. 離散型
  8. さらに制御構造について
  9. Floatデータ型
  10. 配列と文字列
  11. レコード
  12. 副プログラム
第II部 大規模プログラミング
  1. パッケージ
  2. 例外
  3. 入出力
  4. プログラムの設計と構築
第III部 高度なデータ型
  1. アクセス型と動的データ構造
  2. 判別子を持つ型
  3. 数値型
  4. データ型一般について
第IV部 高度なプログラム構造
  1. 演算子宣言と多重定義
  2. 汎用体プログラム単位
  3. タスク
  4. ポータビリティとマシン依存プログラミング
  5. ケーススタディ:大規模情報システムの設計

僕はC言語畑の人ですが、聞いたことがない言葉が幾つかありますね。
  • 組織的プログラミング
  • 離散型
  • レコード
  • 副プログラム
  • アクセス型
  • 判別子
  • 汎用体プログラム単位
ざっと読んでみました。

「組織的プログラミング」の章は、大きなプログラムを作るときに必要になるテスト技法、段階的詳細化について解説していました。
テストにはホワイトボックステスト、ブラックボックステストがあります。
段階的詳細化というのは、解きたい問題を段階的に分割していく手法のことのようです。

「離散型」は、整数型や列挙型など、全順序が定義された離散的な値を扱う型の一般的な名前のようです。離散型ではないものの中には、実数型や構造型などが含まれます。(構造型ってなんだろう)

「レコード」は、C言語でいう構造体のことです。レコードは様々な型の複数の要素を持ちます。

今日の勉強はここまでです。ではまた。

2012年11月26日月曜日

【Git】タグを付け替える

Gitでのタグの付け方を勉強してました。
あるコミットに対してタグを付けたけど、やっぱり付け替えるやり方を見つけたのでメモ。

appling // gitタグの付け替えから引用します。
まずは既存のタグを削除
$ git tag -d <TAG>
$ git push origin :refs/tags/<TAG>
新たにタグを作成して公開
$ git tag <TAG>
$ git push --tags origin

この中で git push origin :refs/tags/<TAG> が良く分からなかったので、git help pushで調べてみました。
まずpushの構文は
 git push <repository> <refspec>
でした(かなり簡略化してあります)。

<refspec>には <src>:<dst> を指定できます。
<src>を空にした場合、<dst>を削除するという意味になるようです。
:<dst>を省略すると、<src>と同じrefが更新されるようです。

したがって、 git push origin :refs/tags/<TAG> はリモートの refs/tags/<TAG> を削除する命令ということですね。

そして、 push 時に --tags を指定すると、明示的に指定したrefに加え、 refs/tags 以下にあるすべての ref がアップロードされるようです。
したがって、 git push --tags origin は、<repository>=origin に、ローカルにあるすべてのタグをアップロードする命令ですね。

2012年11月18日日曜日

Ada 教科書・ウェブページ紹介

Adaを勉強するにあたり、参考となる教科書やウェブページを紹介します。

ADA-言語とプログラミング方法論
僕が教科書として使おうと思っている書籍です。
分厚くて、かなりたくさんの情報が載っている雰囲気です。
最初のAda規格に対応する古い本ですが、最新規格についての教科書が入手できませんでしたので、この本で勉強していくことにしました。

Ada Programming
WikibooksにあるAdaプログラミングの教科書です。
英語ですが、Ada 2005(現状の最新規格)までの範囲で解説がなされています。

Ada@WCIMH
Adaの勉強メモ的なウェブページです。
AdaからWIN32APIを呼び出すのは面白そうです。