チェックデジット(モジュラス11用)の計算

    /**
    * チェックデジット計算処理をします。(モジュラス11用)
    * <p>
    * 1.チェックデジット対象文字列を個々の数値に分解しウェイトを掛ける<br>
    * 2.ウェイト掛けた後の数値をすべて足す。<br>
    * 3.足した結果をモジュラス(11)で割り余りを求める<br>
    * 4.チェックデジットを求める<br>
    * 4-1. 3の余りが0または1の場合、0を保持する。<br>
    * 4-2. 3の余りが0または1以外の場合、11より余りを差し引いた値を求め保持する。<br>
    * 5.4で求めたチェックデジットをString型にして返却する。<br>
    * @param value チェックデジット対象文字列
    * @param maxlength 最大桁数
    * @return String チェックデジット
    */
   public static String getCheckDigitModulus11(String value) {

       value = reverse(value);
       int maxlength = value.length();

       String checkDigitValue = null;
       long modulus11 = 11;

       // 分割後の文字列格納変数
       long divisions[] = new long[maxlength];

       // チェックデジット対象文字列を個々の数値に分解し、ウェイトを掛ける
       for (int i = 0; i < maxlength; i++) {

           long division = 0;
           division = Long.parseLong(value.substring(i, i+1));

           // 配列の添え字が偶数のときは1を掛けて奇数のときは3を掛ける
           divisions[i] = division * (i % 6 + 2);
       }

       // 分割した数値をすべて足す
       long plusValue = 0;
       for (int i = 0; i < maxlength; i++) {
           plusValue = plusValue + divisions[i];
       }

       // 足した結果をモジュラス(11)で割り余りを求める
       long remainder = 0;
       remainder = plusValue % modulus11;

       if (remainder == 0 || remainder == 1) {
           checkDigitValue = String.valueOf(0);
       } else {
           checkDigitValue = String.valueOf(11 - remainder);
       }

       return checkDigitValue;
   }

    /**
    * 文字列を逆順にして返す
    * @param str 文字列
    * @return 逆順にした文字列
    */
    public static String reverse(String str) {
        //反転した文字列(返り値)
        String ret = "";

        //文字列を反転する
        int length = str.length();
        for(int i = length - 1; i >= 0; i--) {
            ret += str.charAt(i);
        }

        //反転した文字列を返す
        return ret;
    }

インスタンス変数をクールなやり方で初期化する

Java 5以降なら…

Listの初期化

class SampleList{
    private List<String> list = Arrays.asList(”aaa”, ”bbb”, ”ccc”);
}

Arrays.asList()で生成されるListは不変らしい。

Mapの初期化

class SampleMap{
    private Map<String, Integer> list = HashMap<String, Integer>(){{ put("aaa",1); put("bbb",2); put("ccc",3);}};
}

HashMapそのものではなくサブクラスのインスタンスになるらしい。
あんまりカッコイイ書き方ではないかもしれないけれど、コンストラクタなんかで初期化するよりも分かり易いんでは。

RumixでRubyを簡単インストール

最近では、Windows環境にRubyをインストールする際はRumixなんでしょうか。
One-Click Ruby Installerとの違いが気になりますが配布サイトでは次のように紹介されています。

One-Click Ruby Installerとの違い

Rumixと同じようなパッケージとして、One-Click Ruby Installerが存在します。 One-Click Ruby Installerは、Windows環境へrubyおよび関連ツールを一度にインストールしてくれるという点で、 Rumixと構成・コンセプトがよく似ており、Rumixが大きな影響を受けたプロジェクトでもあります。

RumixとOne-Click Ruby Installerの間には、次のような違いがあります。

  • One-Click Ruby Installerが基本的に英語圏向けのパッケージであるのに対し、Rumixは日本語圏向けのパッケージです。 インストーラでの解説が日本語だったり、同梱のリファレンスマニュアルが日本語だったりします。
  • パッケージ構成がやや異なります。たとえば、Rumixにはコマンドラインシェル(NYAOS)が含まれていますが、One-Click Ruby Installerにはシェルが含まれていません。 逆に、One-Click Ruby Installerに含まれているテキストエディタNotepad++/SciTE)や、英語版のリファレンスなどは、Rumixには含まれていません。
  • Rumixインストーラは、環境変数RUBYOPTに-rubygemsを追加しません。

ダウンロードはこちらから


インストールは非常に簡単で、zipを解凍して、rumix_install.exeをキックするだけです。
一つ疑問ですが、ruby-mode.el等のlispは同梱されていないのでしょうか。
これがないとかなり困るんですが。

VLフォント良いです

配布サイトでは次のように紹介されています。

VLゴシックフォントファミリは、

の作業を行った、モダンゴシック体の日本語 TrueType フォントです。

ダウンロードはこちらから

以前MeadowではIPAフォントを使用していましたが、WindowsGNU Emacsを使用するにあたり気分的にフォントもチェンジしました。
なかなか良い感じです。
フォントサイズが10ポイント程度だと、"~"(チルダ)が"-"に見えるのはご愛嬌。フォントサイズを上げれば問題ありません。
しばらくはVLフォント使ってみます。

.emacs.elのフォントの設定部分のみ抜粋

(cond ( (string-match "^23\." emacs-version)
        (cond (window-system
               (set-default-font "VL Gothic-13")
               (set-fontset-font (frame-parameter nil 'font)
                                 'japanese-jisx0208
                                 '("VL ゴシック" . "unicode-bmp"))
               ))))