無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

Java

Javaクラス解析機を作る 9日目

パラメータアノテーション属性、アノテーションの初期値属性の読み込み部分をごそごそと作る。 ここまでの解析コード →Javaクラス解析機 080418 動作サンプル 初期値を持つアノテーション。 package com.example.annotation; import java.lang.annotation.Re…

Javaクラス解析機を作る 8日目

クラス、メソッド、フィールドのアノテーション解析部分を実装。パラメータのアノテーションは未。 ここまでの解析コード →Javaクラス解析機 080417 動作サンプル Runtimeアノテーション。パラメータつき。 package com.example.annotation; import java.lan…

Javaクラス解析機を作る 7日目

EnclosingMethod属性とDeprecated属性に対応。シグネチャ属性も対応したけど、解析部分が未。 現在の読み込み対応データ ★付きが今日対応したモノ。 クラスデータ 名称 サイズ 説明 magic 4byte クラスファイルを識別するためのマジックナンバー。0xCAFEBABE…

Javaクラス解析機を作る 6日目

例外とインナークラス属性に対応。 現在の読み込み対応データ ★付きが今日対応したモノ。 クラスデータ 名称 サイズ 説明 magic 4byte クラスファイルを識別するためのマジックナンバー。0xCAFEBABEが入る。 minor_version 2byte クラスのマイナーバージョン…

Javaクラス解析機を作る 5日目

属性の読み込みに着手。クラス属性を読み込む部分を書いて、次の2つの属性の読み込みに対応。 定数値(ConstantValue) ソースファイル(SourceFile) あと、いろいろリファクタしました。 長くなってきたのでファイルを分割して、クラス構成も大幅変更。 Class…

Javaクラス解析機を作る 4日目

アノテーションがでてこないなー?とか思っていたら、参照しているドキュメントが古かったようだ。。。orz。The Class File FormatにJava5での変更が反映された版があるので(via IT アーキテクト - J2SE 5.0の新機能 第20回 バイトコードの操作)、それを元に…

Javaクラス解析機を作る 3日目

メソッドの解析に対応。相変わらず属性は未サポートですが・・・。 現在の読み込み対応データ ★付きが今日対応したモノ。 クラスデータ 名称 サイズ(byte) 説明 magic 4byte クラスファイルを識別するためのマジックナンバー。0xCAFEBABEが入る。 minor_vers…

Javaクラス解析機を作る 2日目

引き続き、まったり実装。 フィールド情報の読み込みまで対応 ただし、フィールドの属性(attribute)は未対応。 クラス構成をいろいろ変更。constantとかは別クラスとした。 現在の読み込み対応データ ★付きが今日対応したモノ。 クラスデータ 名称 サイズ 説…

Javaクラス解析機を作る

ACC_ABSTRACTとか調べているうちに、Javaクラスの解析機を作りたくなってしまいました。 検索したらいっぱい見つかりそう。 つーか、javapでいいじゃん! とか思いつつ、でもそんなのかんけーねぇ!ということで、すみやかに着手。The JavaTM Virtual Machine …

バックアップからのビルド検証ではまる

バックアップからのビルド検証で、バックアップ物からビルドしたモノとリリース物が一致しないとなって、はまったのでメモ。 調査結果 調べてみたところ、「interfaceの定数として定義されたabstractメソッドを持つ列挙型」と「それを利用するクラス」がある…

ServiceのAPIをどげんかせんといかん

次のような、オブジェクト入出力クラスがあって、 // フォルダ操作サービス interface FolderService { // ID(オブジェクトを示すパスを持つクラス)を指定してフォルダを得る。 Folder get( ID id ); // フォルダを登録する。 void put( Folder f ); } // フ…

JRubyでアノテーションを処理する。

JRuby1.1ではクラスに設定されたアノテーションを直接参照する方法が用意されていない様子。includeしたJavaクラスの「java_class」関数で「Java::JavaClass」というClassのラッパが返されますが、JavaのClassが持つget_annotationとかの関数は持っていませ…

JRuby+ERB+リフレクションでJavaソースコードの自動生成

Javaのソースコード自動生成が密かに?ブームです。モデルクラスとかサービスのクライアントスタブクラスとかお約束なコードは、がんがん自動生成して楽したい!ということで、Ruby+ERBでJavaBeanを作るプログラムは前に作ったのですが、あれは「yamlの定義フ…

総当たりテストをもれなく行う

複数条件の総当たりテストをもれなく行うためのユーティリティを書いてみました。 「条件」ごとに「取り得る値」を登録しておき、 テスト実行で、「取り得る値」を順番に変えて、総当たりで取り得るすべてのパターンを生成。パターンごとに対応する評価ロジ…

Thread#interrupt

Thread#interrupt()でスレッドに割り込みます。 (特殊な場合をのぞき、)割り込まれると、スレッドの「割り込まれたフラグ」がtrueになります。 スレッドで実行中の処理がキャンセル可能であれば、定期的にこのフラグをチェックして「trueならキャンセルする…

next()でのタイムアウトをサポートするイテレータ

next()でのタイムアウトをサポートするイテレータを作ってみました。 通常のjava.util.Iteratorのラッパーとして使え、 追加のAPIである「next (long timeout, TimeUnit unit)」を使うことで、タイムアウト指定ありの次要素取得が可能です。 タイムアウト有…

String#replaceFirstの引数は正規表現です

今日の不具合。String#replaceFirstの機能は「指定された正規表現にマッチする最初の文字列を置換する」です。「指定された文字列と同じ最初の文字列を置換する」わけではありません。サンプル。 // こういう場合はうまく置換されるけど、 String path = "/a…

インスタンスイニシャライザ

インスタンスイニシャライザを指定すると、クラスのインスタンス生成時に特定の処理を行うことができます。 クラスの直下( class Hoge { /*ここ*/ } )に「{;...}」の形式で書きます。 スタティックイニシャライザと同じノリですね。 指定した処理は、オブジ…

StringBuilder

Java5で追加されたStringBuilderについて。名前は聞いたことあるけど使ったことはなかったりするので調べてみた。以下Javadocより。 文字の可変シーケンスを表すクラス StringBuffer とだいたい同じAPIを持つ スレッドセーブではない。(StringBufferはスレッ…

文字列を%形式にエスケープする。

文字列を「%」形式にエスケープする関数を書きました。「%」形式はURLエンコードで使われるエスケープの方式です。URLエンコードではaとかbとかURLで使える文字列をエスケープする必要はありませんが、この関数はすべての文字列を容赦なくエスケープします。…

Genericsを使ったJavaBean

JavaBeanを作る時にGetter,Setterを書くのメンドウですよね。Rubyみたいに attr :foo とかでアクセサを作ってくれれば良いけどあいにくJavaにそんな機能はありません。(Java SE 7でできるらしいけど。)楽する手段としてMapを使うという手がありますが、これ…

型パラメータで指定されたクラスを取得する。

クラス定義の段階で型パラメータが決まっている場合(以下のようなクラスが該当)、Classから型パラメータで指定された型を得ることができます。(↓のクラスだと、HogeSet.classからSetの型パラメータであるString.classがとれる。) // クラス定義の段階でSetの…

「Hello, world!その2」にトライしてみた。

ちょっと古いけど、ネタがないので喰いついてみます。→Hello, world!その2 「Hello, world!」と表示するプログラムを作ってください。ただし、コード中に同じアルファベットが2回出現してはいけません。アルファベットとは、小文字のa-zと大文字のA-Zを指…

Javaでcallee

メソッド内の処理でそのメソッド自身への参照を簡単に得る方法。Java5.0以降のみですが、JavaScriptで使えるarguments.calleeみたいなのが簡単に実現できます。...まぁ、Class#getMahod()でとれるっちゃーとれるんですが、これだとメソッド名を指定する必要…

続 リフレクションはやっぱり重いのか?

昨日の続き。フィールド値の読み込みなど、他に気になっている操作についても測ってみました。 特定の処理を50万回実行した場合の合計所要時間を計測する。(←回数を増やした) 10回試行し平均を取得。 JRE1.4,1.5,1.6でそれぞれ測る。 書き忘れたけど、計測マ…

リフレクションはやっぱり遅いのか?

遅い遅いと敬遠されがちなリフレクションですが、最近のJDKでもやっぱり遅いのか計測してみました。 setメソッドを呼び出して値を設定する処理を10万回実行した際の所要時間を計測 10回試行し平均を取得。 JRE1.5,1.6でそれぞれ試した 結果 JDK1.5.0_09 JDK1…

可変長引数

可変長引数について。 メソッドの引数の型の末尾に「...」を付けると可変長引数を受け付けるメソッドができます。 可変長にできる引数は、一番最後の引数1つのみです。 メソッド内部では、可変長引数に配列としてアクセスできます。 /** * 可変長引数を受け…

パラメータを受け取るアノテーションを作る。

「@Hoge("xxx")」といった感じで、パラメータを指定できるアノテーションを作ります。 作り方 アノテーションを作ります。 アノテーションにパラメータの値を返すメソッドを定義します。 メソッド追加により、パラメータを指定できるようになります。 メソッ…

タイプセーフなPropertiesを作る。

タイプセーフなPropertiesを作ってみます。 用件 整数など任意の型を記録できるjava.util.Propertiesみたいなのを作りたい。 値の型はキーごとに決まるので、キーに合わせてタイプセーフにしたい。 Stringを取り得るキーの場合、値をStringで設定でき、Strin…

Jbehaveを使ってみた。

るびまのRSpecの記事を見たときから密かに気になってた振舞駆動開発 (Behaviour Driven Development:BDD)ですが、IBM developerWorks ビヘイビア駆動開発を舞台にした冒険より「Jbehave」というJavaでBDDするライブラリがあるらしいのでちょっと使ってみまし…