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

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

Java

@Inheritedの動作確認

@Inheritedの動作確認です。JavaDocを確認すると以下のような機能らしい。 @Inheritedは、アノテーションが自動で継承されることを示すアノテーション。 アノテーション探索時に、派生クラスにアノテーションが付与されていなければ、自動的に親クラスに付与…

依存モジュールのdependencyを調べるなら「jarvana」が便利!

実は有名だったりするかもですが、依存モジュールのdependency定義(pom.xmlに書くやつね)を調べるなら「jarvana」が便利ですよ!→「jarvana」「jarvana」を使えば、 クラスのFQCNからそれを含むモジュールを探す。 プロジェクト名(「guice」とか)から、モジ…

GAE+JSPではまった点x3

GAE+JSPではまった点x3のメモ。雑魚中の雑魚ばかりですが。 1.JSTLが使いたい! GAEではデフォルトで組み込まれているので、WEB-INF/libにjstl.jarとかstandard.jarとかを追加する必要はありませんよ。 「Google App Engine - JDO を利用したデータストアの使…

miibotのOAuth対応メモ

TwitterでBasic認証が利用できなくなるらしいので連休を利用してmiibotのOAuth対応をしましたよ、ということで以下は対応手順のメモです。 はじめに miibotはGoogle App Engine/Javaで動いています。 いわゆるbotさんです。OAuth対応といっても、ハードコー…

データストアの単体テストを書く手順 for 1.3.3

GAEのSDKを1.3.3にバージョンアップしたら、データストアの単体テストがコンパイルエラーに! ドキュメントを見ると、どうやらテストケースの書き方が変わったらしい。(1.3.1 - 1.3.2はスルーしていたので、実はずっと前からかもですが)ということで、SDK1.3.…

GAEで作るサムネイル画像作成サービス

Google App Engineでは画像変換サービスが提供されていて、画像サムネイルサービスをさくっと作れたりします。ということで作成手順をまとめてみました。 仕組み サービスの仕組みは以下のとおりです。 画像のアップロード formのファイル選択を利用して、画…

「+」演算子での文字列連結は、コンパイラでStringBuilder#append()にされるよ!

文字列をちょこっと連結したい時に、いちいちStringBuilderを使うのは面倒くさいですよねー。 というか、「+」で連結しても実はコンパイラがうまいこと最適化してくれるんじゃね?とふと思い立って調べて見ました。 結論:単純な連結なら、コンパイラがちゃん…

Java変態?コード最速マスター

Java変態文法最速マスター - プログラマーの脳みそが面白かった && 参考になったので便乗してリスペクト。変態世間であまり見かけない(かも知れない)Javaコードを、過去のエントリからまとめてみました。 nullでなければループ 「配列がnullでなければループ…

GAEのデータストアで使えるJDO関数

JDO2.2で規定されている関数のうち、どれとどれがデータストアで利用できるのか調査してみました。結論としては、 「Collection.contains」は利用可。 「String.matches」は制限付きで利用可。 前方一致条件(「hoge%」みたいな条件)のみ指定できる。 後方一…

Javaメソッドの呼び出し元をツリー表示するスクリプト

JavaClassを使って指定メソッドの呼び出し元を探索しツリー表示するスクリプトを書いてみました。 引数で指定されたパス以下の*.class,および*.jarに含まれるクラスファイルを解析し、 メソッドの呼び出しコードを収集。 収集した情報を再帰的に探索し、呼び…

データ更新を行うユーティリティ

検索条件作成ユーティリティ向けに定義したプロパティを再利用して、データの更新を行うユーティリティも作ってみました。専用のユーティリティとペアで使うことで、 ↓のような感じで指定したモデルの属性を更新(以下の例では、年齢を"2"に更新)できるように…

XMLをコピーするSAXハンドラ

今日の発掘品。XMLをコピーするSAXハンドラです。最新のXalanを使うとDTDのコピーもできる、というのは調べたけど影響範囲があれなので不採用→仕方なく自前で実装した記憶があったり。使い方は以下です。 /** * {@link XMLReader}を作成する * @param handle…

一覧の検索条件を生成するユーティリティ

データストアからモデル一覧を取得する際の検索条件を生成するユーティリティを書いてみました。以下のような感じで使えます。 // ユーティリティをstaticインポート import static Expressions.*; .... // 名前が"mii"のKittenオブジェクト一覧を取得 List<Kitten> </kitten>…

データストアの単体テストを書く手順

追記:2010-05-01 以下は1.3.0の頃のテスト手順です。最新のSDKではテストケースの書き方が変わっています。1.3.3でのテスト手順はこちらを参照。 いまさらですが、データストアの単体テストを書く手順のメモです。単体テストでは、 ローカルでGoogle App Eng…

指定パッケージ内のクラス一覧を取得するサンプル

1.6より追加されたStandardJavaFileManagerを使用して、指定パッケージ内のクラス一覧を取得するサンプルです。 import javax.tools.DiagnosticCollector; import javax.tools.JavaCompiler; import javax.tools.JavaFileManager; import javax.tools.JavaFi…

JDK6のソース取得先

JDK6のソースも、Sunのサイトからダウンロードできます。 →Java(TM) Platform, Standard Edition 6u18 Source Snapshot Releases 各種Javaクラスのソースは、真ん中あたりのjdk-6u18-ea-src-b05-jrl-18_nov_2009.jarに含まれています。jar形式になっています…

Keyシリアライザ

Enumに続いて、com.google.appengine.api.datastore.Keyのシリアライザも実装。 import org.jabsorb.serializer.AbstractSerializer; import org.jabsorb.serializer.MarshallException; import org.jabsorb.serializer.ObjectMatch; import org.jabsorb.ser…

Enumシリアライザ

jabsorbはデフォルトではEnumをシリアライズ/デシリアライズできないみたいなので、ドキュメントの「7.2. Implementing a Serializer」と添付のシリアライザクラスのソースを参考にカスタムシリアライザを作成。以下の実装でよいはず。 import org.jabsorb.s…

jabsorbでJSON-RPCインターフェイスを作る手順

JSON-RPCライブラリのjabsorbを利用して、Google App Engine上で任意のJavaクラスのメソッドをJSON-RPCで公開する手順です。jabsorbはServletで提供されていて、Google App Engine上でもさくっと動作しましたよ。 概要 必要なモジュールをダウンロードして、…

1対多の所有関係にあるデータを記録するサンプル

Google App EngineのDatastoreで1対多の所有関係にあるデータを相互参照できる形で記録するサンプルです。 1対多 1つの親が、複数の子を持つような関係です。 親(Parent.class) ├子1(Child.class) ├子2(Child.class) └子3(Child.class) 所有関係 オブジェク…

Guiceのインターセプタってprivateメソッドには適用できないんだっけ?

privateメソッドにインターセプタを適用したはずが、どうもうまく設定できていない風の動作になったのでちょっと調査。ドキュメントのAOPのLimitationsのところに記述があり、適用対象のメソッド(を持つクラス)は以下の条件を満たす必要があるとのことです。…

トランザクションインターセプタ

Google App Engineのデータストア用にトランザクションインターセプタを作成。もはやお約束ですなー。 package test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; impo…

javaclassでCode属性とStackMapTable属性の解析をサポート

javaclassにCode属性とStackMapTable属性の解析機能を実装してコミットしましたよ。 →GitHub - unageanu/javaclass以下はjavaclassを使ってクラスの解析結果を表示する例です。Code属性の解析をサポートしたので(昔と違って)javapに近い結果が得られるように…

Java6での修正が反映されたクラスファイル仕様書の在処

Java6での修正が反映されたクラスファイル仕様書は以下から取得できますよ。 →JSR-000202 Java Class File Specification Updateちなみに、Java1.4→Java5の変更はこちら。いやー、javaclassの単体テストが通らないなー、と思っていたらJava6で追加された属性…

flyweightパターンを久々に見た

とあるコードを読んでいたら、flyweightパターンを使っている箇所を発見。 import java.util.HashMap; import java.util.Map; /** * IDファクトリ */ public interface IDFactory { /** * 文字列からIDを生成します。 * @param src 文字列 * @return ID */ I…

Javaのopcodeとパラメータの表

Javaのopcodeとそのパラメータの表です。Java Virtual Machine Online Instruction Referenceにて公開されている情報をありがたく再編集させて頂きました。 名前 説明 aaload retrieve object reference from array [u1] aaload (0x32) aastore store object…

com.sun.xml.internal.ws.util.ByteArrayDataSourceでコンパイルエラーになる件の続報

この間のコンパイルエラーについて続報。SUNのBug Databaseに情報があった。 →Bug Database - Bug ID: 6778491 javac cannot find all classes from rt.jar やはり「内部クラスを使うんじゃねぇ」という話らしい。 クラスの使えるor使えない制御は「ct.sym」…

ランダムな文字列を生成する関数

データを全部「aaaa...」で作っていたら圧縮率が大変よろしくて試験にならんので、ランダムな文字列を生成する関数を書きました。 「a-zA-Z0-9」の文字をランダムに組み合わせて 指定された長さの文字列を生成します。 /** * ランダムな文字列を作成する。 *…

今日のコンパイルエラー

com.sun.xml.internal.ws.util.ByteArrayDataSourceを使っているクラスがあって、それをコンパイルしようとするとエラーになる。 $ javac ./Test.java ./Test.java:2: パッケージ com.sun.xml.internal.ws.util は存在しません。 import com.sun.xml.interna…

URI#isAbsolute()

URI#isAbsolute() はURIが相対か絶対かを判定するAPIですが、あれ、「/foo/var」とかはfalseを返すのか・・・。 System.out.println( "http://foo/var : " + String.valueOf(new URI( "http://foo/var" ).isAbsolute())); System.out.println( "/foo/var : "…

JavaScriptの文字列をエスケープする

$("#foo").text("${var}"); の場合、「${var}」に含まれるXMLエンティティはエスケープしなくていいとしても「"」や「'」は「\」でエスケープしないとJavaScript的にダメなんでは、と思ったらVelocityにちゃんと機能が用意されていましたよ、と。XMLエンティ…

埋め込み文字列内のXMLエンティティをエスケープする

プロパティ「"eventhandler.referenceinsertion.class"」と「"eventhandler.escape.html.match"」を設定することで、埋め込み文字列内のXMLエンティティのエスケープ(「<>&」→「<>&」)を行なってくれます。 デフォルトは何もしないので、明示的に設定する必…

今日の罠

Class.getField()は親のstatic変数も探索します。例えば、以下のコードを実行すると、 Child.B,Child.C,Parent.Aには値が設定される。 Parent.Bは初期化されない。 Child.Bが先に見つかるのでそちらが返されてしまうため。 という結果になります。 public st…

find

なんだ、findはあるのか。 > Google Collections import static com.google.common.collect.Iterables.*; import static com.google.common.collect.Sets.*; import static com.google.common.base.Predicates.*; ... // セット Set<String> set = newHashSet("aaa",</string>…

mapとinject

Google Collectionsを使ったmapとinjectを作ってみました。 @SuppressWarnings("unchecked") static <IN, OUT, X extends Collection<OUT>> X map( Collection<IN> collection, Function<IN,OUT> f ) { try { X out = (X) collection.getClass().newInstance(); for ( IN i : collection ) out.add( f.apply(</in,out></in></in,>…

google-collectionsを使ってSetにフィルタをかけるサンプル

Google Collectionsなるものを発見。APIを眺めていて、Sets.filterユーティリティが個人的にちょいぐっときたのでサンプルを書いてみました。 import static com.google.common.base.Predicates.*; import static com.google.common.collect.Sets.*; .... //…

今日のまよい道

JSPとか使ったことないからわかんないよー。今日はまったのは以下のエラー。Tomcatは起動するのだがjspを実行すると発生する。 2009-09-17,12:39:05,JST ERROR [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/xxxx].[jsp]] (tomcat-http…

リソースの探索候補リストを作成する関数

"ja"や"en"などをキーとして各言語に対応する文字列を格納するMapがあって、そこから指定されたロケールにマッチする文字列を取り出して使う、ということなのだけど、ResourceBundleの取得先特定ってvariantとかも考慮してたよなー。一応その辺と仕様をあわ…

Hello Velocity World!

次はVelocityなのです。ということで、とりあえずHello World!的なものを書いてみました。 // Velocityを初期化 Velocity.init(); // テンプレートに渡す値を保持するコンテキストオブジェクトを作成 VelocityContext context = new VelocityContext(); cont…

今日の「作ってみたけど微妙だった」

「ロックしてから処理をする機構を、タイプセーフな感じで」ということで、処理のインターフェイスとロツクメソッドを定義してみたわけですが。 /** * 処理 * @param <X> 戻り値の型 * @param <E1> 例外の型1 * @param <E2> 例外の型2 * @param <E3> 例外の型3 * @param <E4> 例</e4></e3></e2></e1></x>…

Tupleの型パラメータが鬱陶しいときには

この前作ったTupleですが、TrioとかQuartetを使っていると、型パラメータが長くなってしまって鬱陶しい時があります。 List<Trio<String,Number,String>> kittens = new ArrayList<Trio<String,Number,String>>(); kittens.add( new Trio<String,Number,String>( "mii", 1, "mike" ) ); kittens.add( new Trio<String,Number,String>( "kuro", 0, "egyptian" ) );</string,number,string></string,number,string></trio<string,number,string></trio<string,number,string>…

PushbackReader

PushbackReaderを使うと、Readerで読み込んだ文字を再度Readerに戻す(読まなかったことにする)ことができます。以下は簡単な利用例。連続する文字を1つにまとめつつ、出力します。 // PushbackReader を作成 PushbackReader reader = new PushbackReader( ne…

GAEでもGoogle GuiceのAOPは使えます。

Google App Engine上でも普通に使えましたよ > Google GuiceのAOP。ということで、動作確認に使った簡単なサーブレットを公開してみます。 import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletReque…

URLフェッチ機能でBasic認証を使う

Google App EngineのURLフェッチ機能では、HttpURLConnectionが普通に使える訳ですが、Basic認証が必要なサイトにアクセスしたいと思って以下のように書いてデプロイしたら実行時エラーに。 static { Authenticator.setDefault( new Authenticator(){ @Overr…

最近の流行

以下のような書き方が個人的に流行中。 String[] strs = // 略 // 配列がnullでなければ各要素に対して処理を実行 if ( strs != null ) for ( String str : strs ) { // 処理 } forで列挙する対象がMap.Entryとかになると、Genericsもあって行がすぐに長くな…

JSONBrokerのJava版クライアントを書いた

RubyクラスをJSONでアクセスできるWebサービス化するJSONBrokerのJava版クライアントを書いてみました。 サンプル 以下はクライアントを使ってjijiにアクセスし、レート情報を取得するサンプルです。 /** * レート情報を提供するサービス */ static interfac…

タプル

タプルを書いてみた。 import static java.util.Arrays.deepEquals; import static java.util.Arrays.deepHashCode; /** * タプル */ public class Tuple { /** * ペア * * @param <A> Aの型 * @param <B> Bの型 */ public static class Pair<A,B> { private final A a;</a,b></b></a>…

SAXで現在解析中の行番号を得る

Locatorから取得できます。 XMLFilterImpl#setDocumentLocator()をオーバーライドしておくとLocatorが渡されてくるので、 必要なタイミンクでLocator#getLinenumber()を呼び出して、行番号を取得すればOK 以下は、各要素の行番号とカラム番号を出力するサン…

LinkedHashMapでFIFO方式のキャッシュをさくっと作る。

LinkedHashMapを使うとFIFO方式のキャッシュがさくっと作成できます。新しいエントリが追加されるたびに呼び出されるremoveEldestEntry()をオーバーライドして、削除するかどうかの判定処理を書くだけでOK。 public static void main( String[] args ) { // …

JSONICでオブジェクトをJSON形式に変換する

JSONICを使うと、任意のJavaBeanをJSONにさくっと変換できます。 // テスト用クラス static final class Kitten { private String name; private int age; public Kitten() {} public Kitten( String name, int age ) { this.name = name; this.age = age; }…