2008-07-01から1ヶ月間の記事一覧
Needleのインターセプタはプロキシ方式です。レジストリに登録したインスタンスから自身のメソッドを呼び出した場合、インターセプタは作動しません。 require 'rubygems' require 'needle' # レジストリに登録するサービスクラス class Kitten def initiali…
任意の長さの文字列を返す式をさくっと作成したい。 その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…
今日見つけたなぞのコード。 singleton = class << service; self; end serviceは任意のオブジェクト。どうもこれで、serviceの特異クラスを取り出しているらしい。 取り出したクラスは、クラスなので、「instance_methods」でメソッド一覧を取得したり、「d…
簡単なモデルクラス(JavaにおけるJavaBean的なモノ)を作りたい場合、Structが便利です。 # 構造体クラスの作成 Kitten = Struct.new(:age, :name) # 構造体オブジェクトの作成 mii = Kitten.new( 1, "mii" ) # 属性の参照 puts mii.name puts mii.age # 属性…
Needleのインターセプタ機能を使ってみます。 Seasarなどで提供されているメソッドインターセプタの機能が利用できます。 専用のインターセプタクラスを用意して適用するほか、ブロックを使って簡単にフック処理を指定することも可能です。 ブロックを使った…
「Needle」はRubyで使えるDIコンテナです。 インスタンスのライフサイクル管理や、インジェクションなどのDIコンテナの基本的な機能をサポート。 設定ファイルを利用せず、プログラム上でサービスを登録する方式が採用されています。Guiceライク。 AOP機能も…
こんな感じで書いてみた。 var datas = Array(9,3,5,7) // 最大 println( "max:" + datas.reduceLeft( (max,i) => i max max ) ) // 最小 println( "min:" + datas.reduceLeft( (min,i) => i min min ) ) // 平均 println( "avg:" + datas.reduceLeft( (sum,…
「By-Name Parameters」を使うと、 foo { println("aaaa") } みたいな感じで呼び出せる関数を作成できます。関数fooの定義は以下のような感じ。 def foo[R]( proc: => R ):R = { try { println("before...") proc // 引数のprocを評価して実行 } finally { p…
次のようなEnumerableをincludeしたクラスがあって、 class Foo include Enumerable def each ["a","b","c"].each{|i| yield i } # もちろんこんな実装じゃないよ end end これのEnumerable#mapのブロック中で、現在の要素のインデックスが必要になったので…
ネタがないので最近(といってもここ2ヶ月くらいで)読んだ本でも並べてみます。 ☆☆☆☆ 若者はなぜ3年で辞めるのか? 年功序列が奪う日本の未来 (光文社新書)作者: 城繁幸出版社/メーカー: 光文社発売日: 2006/09/15メディア: 新書購入: 17人 クリック: 447回こ…
JSON-RPCライブラリのOrbjsonではWEBrickのServletが提供されています。それを使うとJSON-RPCでアクセスできるWebサービスをさくっと作成できます。ということで、簡単にですが手順をまとめてみます。 概要 Orbjsonのインストール 提供するAPIを定義したサー…
Ruby標準添付のWEBrickでHTTPサーブレットを作ってみました。まずはHelloWorld。WEBrickのサイトにあるサンプルのコピペです。 require 'webrick' include WEBrick # httpサーバー s = HTTPServer.new( :Port => 8080 ) # サーブレット class HelloServlet <…
このあいだ作成した「はてなブックマーク フロントエンド」に検索結果詳細の表示/非表示を切り替える機能を追加。→ はてなブックマーク フロントエンドの新しいヤツを試作 切り替えのリンクはとりあえずヘッダ部分に配置。 設定値はクッキーで覚えるようにし…
404 java-ja ないわー - AOPどこで使う?を読んで。現在関わっているプロジェクトでのAOPの使いどころについてまとめてみます。 使っているところ トランザクション ログ(エラーログ/性能ログ/操作ログ) 認証チェック キャッシュ DBアクセスの結果をファイル…
NodeSeq#\、NodeSeq#\\で遊んでみた。 // XML リテラル var xml:scala.xml.Elem = <kittens type="animal" xmlns="http://kittens.com" xmlns:t="http://tigers.com"> <kitten age="1">mii</kitten> <t:tiger age="2">tora</t:tiger> <kitten age="3">shiro</kitten> <foo> <kitten age="3">kuro</kitten> </foo> </kittens> // ルート直下のk…
XMLリテラルとかあります。 // XML リテラル var xml:scala.xml.Elem = <kittens xmlns="http://kittens.com"> <kitten>mii</kitten> <kitten>tora</kitten> <kitten>shiro</kitten> </kittens> // kittens/kitten要素を探してきてそのテキストを表示する。 // -filterのところは「Node.xmlType」を使うのがよさげ。 // -「Node.\」でもっとシンプルにかけそう。…
calicoさんより、推論された型パラメータからClassを得るのコードについてご指摘を頂いたので(ありがとうございます!)、いろいろと検証してみた。結論としては、上記日記のコードはEclipseのコンパイラでコンパイルしたクラスでしか期待通りの動作とならない…
SAXTransformerFactory#newTransformerHandler() を使うと、SAXでXMLを読みつつそのコピーをストリームに書き出すことができます。委譲などを駆使してカスタマイズすれば、特定の要素を除いたXMLのコピーを作成するといったことも可能。DOMにしてからシリア…
チェックボックスやラジオボタンに説明用文字列を設定する場合、「label」要素を使用します。 普通にテキストを配置しても見た目上は同じですが、labelで関連付けた文字列を指定すると、文字列をクリックした場合もチェックボックスやラジオボタンのon/offが…
statusとLocationヘッダを指定すればOK。 #!/usr/local/bin/ruby -- require "cgi" cgi = CGI.new print cgi.header( { "status" => "REDIRECT", "Location" => "http://d.hatena.ne.jp/unageanu/" }) cgiにアクセスすると以下が返され、 HTTP/1.1 302 Found…
クラスやTraitに、 def unary_<演算子(- or + or ! or ~)> = ... のようなメソッドを定義しておくと、 <演算子> <レシーバ> の形式でメソッドを呼び出すことができます。 // テスト用クラス class Foo( value:Int ) { override def toString = value.toStrin…
昨日作成したhpricot版faviconのURIを探すクラスをsakuraのレンタルサーバーにアップロードしようと画策するも、hpricotのインストールではまる。hpricotはバイナリの共有ライブラリを使用しているため、gemを使ってsakuraのサーバーでコンパイルしてインス…
favicon.iconのURIを探すクラスを書いた。Wikipedia-Faviconより、 head/link[@rel='shortcut icon'] head/link[@rel='icon'] ルートディレクトリのfavicon.icon のうち最初に見つかったモノを返す。 require 'rubygems' require 'hpricot' require 'httpcli…
はてなブックマーク フロントエンドの新しいヤツを作ってみた。 戦略 「登録直後のブックマーク」「特定のよく使うブックマーク」に素早くアクセスする手段を提供 個人的にアクセスする頻度の高い以下の二つについて、専用のカテゴリを用意し素早くアクセス…
最近気付いたのだけど、scalaの世界にも「Scala Bazaars」というパッケージ管理の仕組み(rubyのRubyGems的なモノ)があります。「sbaz」というツールが提供されていて、これを使ってパッケージの追加/削除が可能。基本的な使い方は次の通りです。 # インスト…
<span class="x"><a href="#">テスト </a></span> みたいな感じのa要素があって、 リンクの色を指定の色にして、 マウスオーバー時にのみアンダーラインを引く ようにしようと思い、次のようなCSSを書いていたのだけれど、IE6だと期待通りの動作とならない。(FireFox2だと正しく動作する)。 span.x {…
はてなブックマーク件数取得APIを使って取得できます。XMLRPCを使ってさくっとアクセス。 require 'xmlrpc/client' client = XMLRPC::Client.new2("http://b.hatena.ne.jp/xmlrpc") result = client.call("bookmark.getCount", "http://d.hatena.ne.jp/", # …
以下の設定をpom.xmlに書いておくと、「mvn install」とかでテスト用のクラス(「src/test」以下のソース)を固めたjarが作成され、deployされるようになります。 <project> ... <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <executions> <execution> <goals> <goal>test-jar</goal> </goals> </execution> </executions></plugin></plugins></project>
Specsは、Scalaで使えるBDDなテスティングフレームワークです。JUnit4アダプタが提供されており、Mavenに組み込んで使うことが可能!ということで、MavenなJavaプロジェクトのテストをScala+Specsで書く手順をまとめてみます。 といっても基本的には、 pom.xm…