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を呼び出すのは面白そうです。

2012年11月13日火曜日

研究の貢献を意識する

卒論や修論を書くときに常に考えておかねばならない,研究のテーマや貢献.
以下の質問項目にきちんと答えられれば,それなりにきちんと意識できていると思います.

まずこの2つ.
  • その研究は,どのような問題を解決しようとしていますか.
  • その問題が解決されたら,誰がどのくらい喜びますか.

上2つが固まってきたら,あと3つ
  • どういう方法でその問題を解決しようとしていますか.
  • その方法が本当に良いものかを確認するために,どのような実験を行いますか.
  • なぜその実験で,良いものかを確認できるのですか.


研究のテーマや貢献をしっかり意識できれば,論文の構成も浮かんでくるし,
どんな関連研究を調べればいいかも分かってくる.
何より,価値のある研究をすることができる!

2012年11月5日月曜日

Ada勉強メモ 1

ひょんなことからプログラミング言語 Ada を学ぶことになったので、
これからちょこちょこ勉強メモを書いていこうかと思います。

Adaってすげーんだぜ!

Adaっていうと
  • 古いんじゃないの?
  • もう使ってる人いないんじゃないの?
  • 何に使えるのさ
という意見があるかもしれません。僕もそんなイメージでした(というかAdaをほとんど知らなかった)。

最近ちょっとAdaを勉強したところによれば
  • 古くないよ!2005年にも新規格がISOに承認されたよ!
  • 航空分野なんかで使われているよ!
  • 航空機、航空管制などに使われているみたい。業界にはまったく詳しくないので本当のことは分かりません。
という感じ。いいね!

開発環境

勉強するには開発環境を入れましょう。
Adaはフリーのコンパイラがありますので、無料で勉強できます。
Mac OS Xでしたら、HomebrewにGNATがありますのでそれを入れてください。

$ brew install gnat

こうすると、gnatmakeやgpsなどのプログラムがインストールされます。
  • gnatmake: Adaプログラムのコンパイル過程を制御するプログラムっぽい
  • gps: Ada用の統合開発環境
僕の環境だと、インストール自体はできたのですが /usr/local/bin にリンクが生成されないっぽいのでこんな起動スクリプトを書きました。

#!/bin/sh
export PATH=/usr/local/Cellar/gnat/2012/bin:$PATH
gps

$ gps

で開発環境が起動します(X11アプリ)。

今回はここまで〜