2008-06-01から1ヶ月間の記事一覧
Mavenを使ってScalaのソースコードをコンパイルする簡単なサンプルです。maven-scala-pluginを使ってさくっとコンパイルできます。 Scalaのソースコード置き場を作成し、ソースコードを配置 pom.xmlにmaven-scalaプラグインの取得先とか、scalaでコンパイル…
オブジェクトを指定の型にキャストするには、Any#asInstanceOfを使います。また、指定した型と互換性があるか評価するにはAny#isInstanceOfを使います。 どちらもAnyのメソッドです。 型パラメータとして、変換or評価したい型を渡します。 var i = 10 var st…
abstractなclass or trait に、型指定のない名前だけのtype aliasを書くと、派生クラスでこのtype aliasの定義を強制することができます。 abstract class Foo( ) { // 派生クラスで明示する必要があるtype alias // このクラスの派生クラスでは、Xのtype al…
type <名前> = <型> で、型に別名をつけることができます。 別名をつけた型は、別名でパラメータの型指定などに使えます。 複雑な型パラメータを持つ型を複数回使うような場合に便利。 // 「Array[Int]」の別名としてXを作る。 type X = Array[Int] // X型の…
JavaのConcurrentフレームワークで非同期例外が発生した時に、非同期スレッド内のトレースに加えて呼び出し元のスタックトレースを返すFutureのデコレータを作ってみました。例えば、次のようなコードを実行した場合、 // 非同期処理 Callable<Void> c = new Calla</void>…
javaclassのサンプルその2。指定したJavaBeanのassertEqualsをさくっと作るスクリプトです。 equals()が実装されていなくて、assertEquals(Object, Object)で単純に比較できないJavaBeanの場合、フィールドを1つづつ取り出して評価する必要があって面倒です…
出羽ブログ - 型推論のS2Containerラッパーより。以下の手順で、推論された型パラメータからそのClassを得ることができます。 型パラメータ「T」を受け取るようにして、型推論により実行時に「T」が特定されるようにします。 さらに、可変長引数で「T」の配…
配列の先頭から複数の要素を取り出して返す。 取り出した要素は配列から消す。 要は、Array#shiftの複数取得版を作りたい!場合には、「Array#slice!」を使うのがスマートかな。 class Array # 配列の先頭から指定された数だけ要素を取得して返す。 # 返却し…
jar内のクラスの型階層を表示するスクリプトです。たとえばaopalliance.jarを対象に実行すると、↓のようなツリーを表示します。 --- interface org.aopalliance.aop.Advice └interface org.aopalliance.intercept.Interceptor ├interface org.aopalliance.in…
えー、無事、合格しました。ということで、今日から情報セキュリティエンジニアです!、、といえるほどスキルがついたとは到底思えませんが、まぁ、SQLインジェクションとか、XSSとか、常識として知っておくべきことは確認できたかと。あと、「ブログに勉強し…
ローカルにある非Maven製のjarをリモートリポジトリにデプロイするコマンドです。Mavenでビルドしていれば「mvn deploy」でデプロイ可能ですが、他チームがリリースしたjarなどでAnt製のがあったりするとpom.xmlがないので使えません。かといってpom.xmlを用…
MailBoxは、複数スレッド間での同期制御とメッセージの送受信をさくっとできるようにするユーティリティクラスです。 要は、Javaにおけるjava.util.concurrent.BlockingQueueです。メッセージ送付側はブロックしないようなので、容量制限のないjava.util.con…
synchronizedで複数スレッドの同時実行制御ができます。 機能はJavaのsynchronizedと同じで、指定された処理が、1スレッドからのみ実行されるようになります。同時に複数スレッドから実行されることはありません。 Javaと違って、すべての参照型の基底クラス…
scala.concurrent.opsで定義されているspawnメソッドを使って、任意の処理を別スレッドで並列に実行させることができます。 処理は引数で渡します。 内部的には、処理を実行するだけの専用のスレッドが1つ生成されるようです。スレッドは処理の実行完了後に…
rubikitchさんより、「testrb」というツールを教えて頂いたので(ありがとうございます!)、早速使ってみます。 基本の使い方 「testrb」の基本の使い方は次の通り。 引数でファイルまたはフォルダを指定でき、 ファイルを指定した場合、そのファイルに含まれ…
以下のようなテストケース「foo-test.rb」,「hoge-test.rb」があるとして、 require 'test/unit' class FooTest < Test::Unit::TestCase def test_A ... end def test_B ... end end これら両方のテストを実行するようなテストスイートは、次のように書けま…
しばらく更新してなかったJavaクラス解析機ですが、密かにテストケースなんかを書いていたのです!まだまだTODOは多いですが、現在のバージョンをgithubにアップロードしてみました。→http://github.com/unageanu/javaclass/tree/masterもうちょっと形になっ…
WebDAVでpushできるGitリポジトリを作ったのでメモ。 以下は、 ロカールにあるGitリポジトリ「hoge」を、 WebDAVでpushできるGitリポジトリとして「http://foo.com/git/hoge.git」で公開したい! 場合の作業手順です。 環境 使用した環境は次の通り。 クライ…
RubyのHashはEnumerableをMixinしてるのだけど、Enumerable#findのブロックに渡される引数は1つ、となっているわけだ。Hashならキーと値を持つのに何で1つ?Hash#eachは2つじゃん!とかひそかに疑問に思っていたのだけど、今日解決しました。 { :a=>"aa", :b=>…
今更ですが、世界のナベアツに Scala で挑戦してみました。 Scalaだと、 <レシーバ> <メソッド> <引数>でメソッドを呼び出したりできるので、「.」とか「()」とかを排除できてやばいことになるんじゃね!と思って始めたのだけど、0にするのは無理でした。 imp…
Regexを使うのがよさげです。 使い方はAPIドキュメントを見ればだいたいわかるかと。 なお、古いScalaには含まれていないので注意。scala-2.7.0には入っておらず、scala-2.7.1.finalを落としてくると入ってました。 以下は簡単なサンプルです。 // 正規表現 …
Sun Community Source Licensing (SCSL) - Java 2 Platform, Standard Edition (J2SE)でJDKのソースコードが取得できます。 sunパッケージのクラスのソース nativeのコード JVM JavapやJvmstatのコード なんかが入ってます。一見の価値はありかと。ちなみに…
OpenIDで認証するCGIのサンプルです。taslamの日記 - 認証APIいろいろをRubyで使うを参考に(というかほとんどコピペですが)作成させて頂きました。 OpenIDとは? @IT - OpenIDの仕様と技術を参照。 OpenIDでの認証の流れ サービス「Hoge」の利用をOpenIDで認…
セッションを使うCGIの簡単なサンプルを書いてみました。 CGI::Sessionを使って簡単に使えます。 データの格納先や形式をオプションでいろいろ変更できます。詳細はCGI::Sessionの解説を参照。 以下の例では、特にオプションは指定せずデフォルトで使ってま…
ローカルのJavaVM一覧を表示するツールを作ってみた。 jvmstatのAPIを呼び出して情報を取得し表示します。 なので、実行時にtools.jarをクラスパスに通す必要があります。 属性はとりあえず全部表示するようにしてみた。 import java.net.URISyntaxException…
昨日の続き。「closeしたソケットがTIME_WAIT状態になってしばらく使えない」件ですが、TCPの仕様的に使えないようです。 TCPコネクションの破棄処理では、切断を開始した側のホストは、自身のCloseおよび相手のCloseが完了した後も、一定期間接続を維持しな…
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回目くらいで以下のエラー…
「暗黙」シリーズ3つめ。型パラメータの指定で [<型パラメータ名> <% <クラス>] 例) [X <% String] とすることで、「に暗黙的に変換可能ななにか」を受け付ける関数が作成できます。 上の例だと、Xは「Stringに変換可能な何か」になります。 なので、実行時…
今日からClick証券-シストレFXグランプリのデモ取引サイトにアクセス可能になりました!ということで、早速ClickClientを利用してデモサイトに接続し、レート一覧を取得するサンプルを書いてみました! デモ取引でも既存のFX取引Webサービスと同等のサービスが…
「暗黙」シリーズ二つめ。「implicit」をつけた型変換用関数を定義しおくと、暗黙の型変換が行われるようになります。 型変換は、必要なときに自動的に変換関数が実行されることで行われます。 型変換用の関数は「implicit」をつけて定義しておく必要があり…