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

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

Java

ローカルのメソッドの呼び出しで型パラメータを明示する場合、thisが必要。

型パラメータを受け取るメソッドで型パラメータを明示する場合、メソッド呼び出しの前に「」をつければOKですが、ローカルのメソッドの呼び出しで明示する場合、「this.」とする必要があります。 class Sample { // 型パラメータを受け取るメソッド <X> void te</x>…

推論の元になる引数が複数あったらどうなるか

以下のような関数では、型パラメータXの型は引数によって推論されて決まります。 // 型パラメータで指定されたXを引数で複数受け取る関数。 // 渡される引数によりXが決定する。 static <X> X test( X a, X b ) { return a; } ここで、ぱっとみ、引数a,bの型は</x>…

例外を型パラメータで渡す

メソッドがスローする例外を型パラメータで指定することができたりします。 // 型パラメータでスローする例外を指定できるクラス class Proc<E extends Exception> { void call() throws E {} } Proc<IOException> a = null; Proc<IllegalArgumentException> b = null; // aはIOExceptionをスローするのでキャッチしないと</illegalargumentexception></ioexception></e>…

境界ワイルドカードと代入互換性

型パラメータの「境界ワイルドカード」を使用すると、条件を満たす型パラメータを持つオブジェクトを代入可能な変数を作ったりできますが、境界ワイルドカードを持つ型を型パラメータ内で使うとやはり代入互換性は失われてしまいます。 // 型パラメータ指定…

今日のへま

↓のような同名で引数の違う関数があって、 static void test( Object... rest ) { System.out.println( "test( Object... rest )" ); } static void test( List<Object> list ) { System.out.println( "test( List<Object> list )" ); } これの「test( List list )」の方を実</object></object>…

JavaBeanをMapに変換するユーティリティ

JavaBeanをMapに変換したり復元したりするユーティリティを書きました。探せばいっぱいありそうなのであれだけど。 使い方 適当なJavaBeanがあるとして、 // テスト用のJavaBean public static class Kitten { private String name; private int age; public…

拡張for文でループできるクラスのサンプル

java.lang.Iterableを実装すればOK。 /** * 拡張for文でループできるクラス */ class Test implements Iterable<String> { public Iterator<String> iterator () { return Arrays.asList( new String[] { "a", "b", "c" } ).iterator(); } } for ( String str : new Test() )</string></string>…

型パラメータで指定された型を引数で受け取るメソッドの定義ではまる

型パラメータで指定された型を引数で受け取るメソッドがあって、 class Test<T> { void add( T value ) {} } このとき、「add」の引数として指定できるのは「Tと代入互換性があるクラス(T or Tの派生クラス)」になります。で、これと同じノリで、一括登録版の「</t>…

データ構造を伝えるコード

例えばネストされたリストを作成する場合、 List<List<String>> nested = new ArrayList<List<String>>(); List<String> list1 = new ArrayList<String>(); list1.add( "a" ); list1.add( "b" ); list1.add( "c" ); nested.add(list1); List<String> list2 = new ArrayList<String>(); list2.add( "d" ); list2.add( "e"</string></string></string></string></list<string></list<string>…

任意の長さの文字列を返す式をさくっと作成したい。

任意の長さの文字列を返す式をさくっと作成したい。 その1 String str = new StringBuilder() {{ for(int i=0;i<100;i++) append("a"); }}.toString(); できそうでできない。finalですか、そうですか。 その2 String str = new String( Arrays.fill( new cha…

続・推論された型パラメータからClassを得る(JDKのコンパイラでは動作しなかった・・orz)

calicoさんより、推論された型パラメータからClassを得るのコードについてご指摘を頂いたので(ありがとうございます!)、いろいろと検証してみた。結論としては、上記日記のコードはEclipseのコンパイラでコンパイルしたクラスでしか期待通りの動作とならない…

SAXでXMLの複製を作る

SAXTransformerFactory#newTransformerHandler() を使うと、SAXでXMLを読みつつそのコピーをストリームに書き出すことができます。委譲などを駆使してカスタマイズすれば、特定の要素を除いたXMLのコピーを作成するといったことも可能。DOMにしてからシリア…

Scala+SpecsでMavenなJavaプロジェクトのテストを書く

Specsは、Scalaで使えるBDDなテスティングフレームワークです。JUnit4アダプタが提供されており、Mavenに組み込んで使うことが可能!ということで、MavenなJavaプロジェクトのテストをScala+Specsで書く手順をまとめてみます。 といっても基本的には、 pom.xm…

呼び出し元のスタックトレースを引き継ぐFuture

JavaのConcurrentフレームワークで非同期例外が発生した時に、非同期スレッド内のトレースに加えて呼び出し元のスタックトレースを返すFutureのデコレータを作ってみました。例えば、次のようなコードを実行した場合、 // 非同期処理 Callable<Void> c = new Calla</void>…

assertEqualsを作るスクリプト

javaclassのサンプルその2。指定したJavaBeanのassertEqualsをさくっと作るスクリプトです。 equals()が実装されていなくて、assertEquals(Object, Object)で単純に比較できないJavaBeanの場合、フィールドを1つづつ取り出して評価する必要があって面倒です…

推論された型パラメータからClassを得る

出羽ブログ - 型推論のS2Containerラッパーより。以下の手順で、推論された型パラメータからそのClassを得ることができます。 型パラメータ「T」を受け取るようにして、型推論により実行時に「T」が特定されるようにします。 さらに、可変長引数で「T」の配…

jar内のクラスの型階層を表示するRubyスクリプト

jar内のクラスの型階層を表示するスクリプトです。たとえばaopalliance.jarを対象に実行すると、↓のようなツリーを表示します。 --- interface org.aopalliance.aop.Advice └interface org.aopalliance.intercept.Interceptor ├interface org.aopalliance.in…

ソースをgithubにアップロードしました

しばらく更新してなかったJavaクラス解析機ですが、密かにテストケースなんかを書いていたのです!まだまだTODOは多いですが、現在のバージョンをgithubにアップロードしてみました。→http://github.com/unageanu/javaclass/tree/masterもうちょっと形になっ…

JDKのソースコード

Sun Community Source Licensing (SCSL) - Java 2 Platform, Standard Edition (J2SE)でJDKのソースコードが取得できます。 sunパッケージのクラスのソース nativeのコード JVM JavapやJvmstatのコード なんかが入ってます。一見の価値はありかと。ちなみに…

ローカルのJavaVM一覧を表示するツールを作ってみた。

ローカルのJavaVM一覧を表示するツールを作ってみた。 jvmstatのAPIを呼び出して情報を取得し表示します。 なので、実行時にtools.jarをクラスパスに通す必要があります。 属性はとりあえず全部表示するようにしてみた。 import java.net.URISyntaxException…

Socket作成で「Address already in use: connect」が発生する件の続き

昨日の続き。「closeしたソケットがTIME_WAIT状態になってしばらく使えない」件ですが、TCPの仕様的に使えないようです。 TCPコネクションの破棄処理では、切断を開始した側のホストは、自身のCloseおよび相手のCloseが完了した後も、一定期間接続を維持しな…

Socketの作成で「Address already in use: connect」が発生する

Windows XP環境で、次のコードを実行すると、 for ( int i = 0 ; i < 20000; i++ ) { System.out.println( i ); Socket s = null; try { s = new Socket("hogehoge.com", 80); } finally { if (s != null) { s.close(); } } } 4000回目くらいで以下のエラー…

インスタンスイ二シャライザで初期化したMapのシリアライズでエラー

インスタンスイ二シャライザを使って初期化したMapをRMIで送付しようとしたらエラーになった。問題のMapの初期化コードは以下。 RMIObject rmiobject = new RMIObject(); rmiobject.setMap(new HashMap<String, String>(){{ put( "a", "aaa" ); put( "b", "bbb" ); put( "c",</string,>…

synchronizedのバグパターンを1つ知った

隣の炎上プロジェクトのヤパイコード探しを仰せつかったので、とりあえずFindBugsにかけてみると、↓こんなのが出た。 class Hoge { private String foo; public void setFoo( String foo ) { synchronized( this.foo ) { // fooへの更新を1スレッドに制限し…

型パラメータを受け付ける例外は作成できない。

class TestException<T> extends Exception {} ↑みたいな例外を作成しようとしてエラーに。「The Java Language Specification」を読むと8.1.2 Generic Classes and Type Parametersに記載があった。 It is a compile-time error if a generic class is a direc</t>…

アスペクトを織り込むユーティリティを書いた。

となりのチームのプロジェクトが炎上気味でついに出稼ぎに出る羽目になったわけですが、そのプロジェクトではGuiceもSpringもSeasarも使ってないので、アスペクトがさくっと使えない。リリースも近いし、今からモジュール追加するのもメンドウだなー、セット…

FileChannel#lock中の割り込み

FileChannel#lock()を実行し、ロックの取得を待っているスレッドに割り込むと、「FileLockInterruptionExceptionが発生する」とか書いてある(ように読める)んだけど、何も起きない・・・。 // ロックするファイル final File file = new File( "./test.tmp" …

String#getBytes()ではまる。

文字列をバイト配列に変換するString#getBytes()ですが、環境によってエンコードで使われるデフォルトの文字セットが違うため、注意が必要です。「デフォルトはUTF-8」とか思い込んでいて、だいぶさまよってしまいました・・・。String#getBytes()の実装をみ…

ObjectInputStreamで複数のオブジェクトをシリアライズ

って、できるんですね。Listとかのコレクションに突っ込んで一気にシリアライズしないといけない!とか勝手に思い込んでいました。 import java.io._ // シリアライズ対象 class Kitten( name:String, age:int ) extends Serializable { override def toStrin…

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

メソッドのコード属性の読み込みに対応。コード属性の属性として付与される、ローカル変数属性、行番号属性、例外テーブル属性もまとめて実装しました。 ここまでの解析コード →Javaクラス解析機 080421 動作サンプル 解析対象クラス(のソース)。 public cla…