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

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

2008-05-01から1ヶ月間の記事一覧

Implicit Parameter

関数のパラメータに「implicit」をつけておくと、関数の呼び出し時にその引数を省略できるようになります。省略された引数には、メソッドの呼び出し元コンテキストで一番それっぽいimplicit付きの値をコンパイラが選択して挿入してくれます。 「implicit」は…

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

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

lazyで値を遅延評価する

「val」で不変の値を定義する際に、「lazy」修飾子をつけると、値が遅延評価される(最初にアクセスされたときにのみ評価され、定義時には評価されない)ようになります。 「lazy」は「val」にのみ設定できます。「var」や「def」に設定することはできません。…

Iterator

要素を必要になったときに作成して返す仕組みとしてはStreamのほかにIteratorもあります。hasNext(),next()を持つアレです。Java使いにはこっちの方がわかりやすいかも。以下はフィボナッチ数を順に返すイテレータのサンプルです。 Iteratorを継承した無名ク…

テストケースを実行するターゲットのサンプル

テストを実行するターゲットを書きました。テストのコンパイル→実行→レポート作成を行ないます。 <path id="class.compile.path"> </path> <path id="test.compile.path"> <path location="lib/junit.jar"/> <path refid="class.compile.path" /> </path> </path></path>

Stream

Streamは要素が必要になったときに作成されるList(みたいなモノ)です。 要素は必要になったときに初めて作成されるので、 要素の作成に時間がかかる場合に初期作成コストを抑えることができます。 また、要素を全部辿らない場合に無駄な作成コストを削減でき…

演算子とメソッド

昨日書いたオブジェクトのメソッド呼び出しを「 」で実行できる件について、みずしまさんよりコメントを頂いた(ありがとうございます!)ので、仕様書を確認。 どうも、メソッド呼び出しと演算子がまったく別物という認識がそもそも間違っていたようだ。Scala…

untilを使った繰り返し

処理をn回繰り返したいときは「until」が使えます。 // 処理を10回繰り返したい for ( i <- 0 until 10 ) println( i ) 実行結果です。 0 1 2 3 4 5 6 7 8 9「0 until 10」を最初見たとき「なんだこれ?」と思ったんですが(そういう演算子があるのかなーとか…

GitHubってhttpでアクセスできないのかな

GitHubがよいらしいという話を聞くので使ってみようと思ってアカウントを作ったのだけど、リポジトリにhttpでアクセスする方法がわかりません・・・。git自体はhttpでのリポジトリの公開をサポートしているようなので、できるモノだと思っていたんだけど。ん…

for文を使った配列の操作

for文を使うと、配列やListの操作を簡単に行なうことができます。 配列を列挙する 単純に配列を列挙するには次のように書きます。 for ( <パターン名> <- <配列> ) <処理> これで以下の処理が行なわれます。 配列の値を一つ取り出してパターン名が示す変数に…

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>…

ROW_NUMBER関数でエラー(SQLSTATE: 42884)

DB2

またいつかはまりそうなのでメモ。 現象 サーバーを再構築したら、DB2のROW_NUMBER関数の実行でエラー(SQLSTATE: 42884)が発生するようになった。 同じバージョンのDB2を利用している他のサーバーでは正しく動作している。 同じモジュールを使用している他の…

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

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

List

可変長の配列(javaのList)を使いたい場合、scala.Listが使えます。 同じような機能を持つクラスとして、scala.Arrayがありますが、 scala.Arrayは固定長で、Javaにおける配列(new int[]とか)に近い。 scala.Listは可変長で、JavaにおけるListに近い。 可変長…

タプル

複数の値を返したいけどコンテナとするクラスを定義するのがメンドイ、というときにタプルが使えます。 タプルは複数の値を保持する組み込みのクラス(scala.Tuple2 .. etc)です。 要素数に応じてそれぞれ別のクラスが用意されているので、必要な要素数にあわ…

FileChannel#lock中の割り込み

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

Variance Annotations

型パラメータに「+」「-」をつけることで、パラメータ化されたクラスの代入制限を少し緩くできます。 パラメータ化されたクラスの代入制限とは? 次のような、型パラメータを受け取るクラスがあるとして、 // 型パラメータを受け取るクラス class Holder[A](v…

配列の基本的な使い方

配列(scala.Array)の基本的な使い方についてまとめ。 生成 「new Array[]()」で生成。 // 生成 var array = new Array[Int](5) n番目の要素の設定 「配列() = 」を使う。「[]」じゃないよ! // n番目の要素を設定 array(2) = 20 // 2番目の要素を20に。 array…

String#getBytes()ではまる。

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

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

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

ハッシュ関数の性能を測ってみた

Rubyで使えるハッシュ関数の性能を測ってみた。 Rubyのメッセージダイジェストライブラリで使えるハッシュ関数+String#hashの処理時間を計測 各処理を10000回実行して合計処理時間を出す。 結果は以下。 ハッシュ関数 所要時間(秒) sha1 0.913 sha256 1.572 …

finalとsealed

Classの継承やメンバーのオーバーライドを制限する機能として「final」と「sealed」が使えます。 「final」はクラスやメンバーに対して設定できる修飾詞です。 finalが設定されたクラスは継承できません。 finalが設定されたメンバーはオーバーライドできま…

型パラメータの範囲指定

Scalaの型パラメータでは、パラメータで受け付けるクラスの範囲を制限することができます。Javaの「super」とか「extends」みたいな機能です。 「[ ]」とすることで、「は派生の何か」に制限できます。 「[ >: ]」とすることで、「はまたはその上位クラスの…

Object

ScalaのObjectについて。The Scala LanguageSpecificationを読んでポイントをまとめます。 使いみち 定数(static変数)やstaticメソッドを作るのに使う。逆にscalaにはstaticがない。 内部的にはどうなってるの? 次のようなobjectの定義は、 object X extends…

Class,Abstract Class,Trait,Objectの違いまとめ

ScalaByExample - Example 6 Classes and Objectsより。ScalaのClassとかTraitの違いについて、わかる範囲でまとめてみます。 ScalaのClassとかTraitの比較表 Class Abstract Class Trait Object 抽象メソッドを持てるか? × ○ ○ × メソッドの実装を書けるか?…

関数を返す関数を作る

ScalaByExample - Chapter 5.2 Curryingより。関数を戻り値として返す関数を作ってみます。 引数で渡す場合と同様に、戻り値型を「: => 」とすることで関数を返すことを示します。 後は戻り値として関数を返せばOK // 関数を返す関数の定義 // 戻り値型を「<…

関数について

ScalaByExample - Chapter 5 First-Class FunctionsとScalaByExample - Chapter 5.1 Anonymous Functionsのポイントまとめ。 関数は値 Scalaの関数は値です。引数として渡したり、戻り値として返すことができます。以下は、関数を引数として受け取る関数の例…

末尾再帰

ScalaByExample - Example 4.6 Tail Recursionより。Scalaでは末尾再帰は最適化されます。無駄なスタックを生成しないために、再帰を利用する関数は末尾再帰となるように設計しましょう、とのこと。 末尾再帰とは 再帰呼び出しを含む手続きが、自分自身の呼…

ブロックを使う

ScalaByExample - Example 4.3 Conditional ExpressionsからScalaByExample - Example 4.5 Nested Functionsあたりのポイントまとめ。 if-else は値を返す Scalaのif-else制御構文は値を返します。なので三項演算子的に使うことができるとのこと。 // if は…