2008-08-01から1ヶ月間の記事一覧
as3corelibで提供されているJSONユーティリティを使って、JSONのエンコードとデコードを行うサンプルです。 package { import flash.display.*; import flash.text.*; import com.adobe.serialization.json.JSON; public class JsonSample extends Sprite { …
Flex SDK 3.1.0をダウンロードすると、flexTasksなるAntタスクが添付されていたので、それを利用してのmxmlのコンパイルを試してみました。以下、手順のメモです。 1.flexTasks.jarをAntのライブラリに追加する。 Flex SDKのアーカイブを展開したディレクト…
Rubyリファレンスマニュアル セキュリティモデルより。「Procはその時点でのセーフレベルを記憶する。そのProcオブジェクトがcallされると、 記憶していたセーフレベルで実行される。」とのこと。 # セーフレベル0で作ったproc p0 = proc { $SAFE } # セーフ…
keita_yamaguchi さんより、最新のRubyでは汚染状態によるメソッド呼び出しの制限が修正されているとの情報を頂いたので(ありがとうございます!)、最新のRubyをインストールして試してみました。 $ ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cyg…
注 (2008-08-28) 最新のRuby(1.8.7-p72)ではメソッド呼び出し制限の動作が修正されています。最新の環境での制限表は、続 汚染されたクラスの利用を参照ください。 汚染されたクラスの利用について、気になっていたことの検証結果をまとめる。 クラスの汚染 …
やっぱり、ちゃんと測ってみようかな。ということで、プログラム上で画像を描き終わるまで(=graphics.drawRectやctx.fillRectから復帰するまで)の処理時間を出力するようにしてみました。 →Flashで描く →Canvas+JavaScriptで描く(ExplorerCanvasを設定済み。…
FlashとCanvas+JavaScriptのどっちが描画が早いか、四角を16*16*16=4096個描くスクリプトを書いて試してみました。 →Flashで描く →Canvas+JavaScriptで描く(ExplorerCanvasを設定済み。IEでも見れます。) ちゃんとは計ってないけど、何回かリロードして試し…
Rubyに標準添付されているCSVライブラリですが、なぜか追記がサポートされていないようなのでちょっと改造してみました。以下のコードをロードすると、CSV.openのmodeとして「a」,「ab」が指定できるようになります。 require 'csv' # 追記をサポートするよ…
apacheと同じマシンの8080ポートで動作しているWebrickサーバーに外部からapache経由でアクセスできるようにしたい。ということでmod_proxyでapacheをリバースプロキシにした。以下は、 「http:///foo/」にアクセスされた場合に、 apacheと同じマシンの8080…
↓みたいな、ブロックで処理を受け取って、ログインして実行するAPIがあって、 # ログインして何かする def do_as( user ) begin # ログインして.. puts "login as #{user}" # ブロックの処理を実行 # 引数としてセッションIDを渡す yield "sid-#{user}" ensu…
Class.newで名前の付いていないクラスを動的に作成できます。 # 無名のクラスを新規作成 kitten = Class.new # メソッド「meow!」を追加。(define_methodはprivateメソッドなので直接は呼び出せない。) kitten.send(:define_method, :meow) {|i| puts "meow!…
Rubyでクラスのホットデプロイをサポートするにはどういった方法がいいかな、と考えてみた。 案1:evalを使う そもそもRubyでは、ロード済みクラスを後から書き換える、といったことが可能なので単純な手段としては新しいクラスが書かれた文字列を読み込んでe…
succなるものを見つけた。 i = 10 puts i.succ # 次の整数を返す 実行結果です。 11なんだー、これで i += 1 とかしなくていいんじゃん、とか思ったけど、「Integer#succ!」はないのね・・・。Numeric 関連クラスはimmutableとのこと(→Integerより)。ふむ。…
サービスモデルを指定することで、Needleのレジストリに登録したサービスの生成タイミングを制御できます。 指定可能なサービスモデルとしては以下のようなものが用意されています。 :singleton 常に同じインスタンスを返す。 :prototype リクエストのたびに…
JavaのコレクションフレームワークでおなじみのSetですが、Rubyでは添付ライブラリとして提供されています。 require 'set' # Setを作る。 # 引数でEnumerableを指定でき、その要素がSetに追加される。 set = Set.new(["a","b","c"]) #set = Set["a","b","c"…
例えばネストされたリストを作成する場合、 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>…
「exec:java」でOK。 http://repo1.maven.org/maven2で配布されているので、特にインストールとかなしに使えます。 http://repo1.maven.org/maven2/org/codehaus/mojo/exec-maven-plugin/がプラグイン。 オプションでメインクラスと引数を指定します。 $ mvn…
<継承元の型> { <追加の定義...> }で、継承元の型に合致し、さらに追加の定義を持つ型を作成?できます。例えば // Cat派生でかつmeowメソッドを持つ何かを引数として受け付ける関数 def meow( foo: Cat { def meow:Unit } ) = { foo.meow } みたいなCompound…
指定ディレクトリ配下のjarファイルから、deprecatedなJavaクラスを探すスクリプトを書きました。javaclassを使ってます。 #!/usr/bin/ruby # 引数で指定したディレクトリ配下のjarからdeprecatedなJavaクラスを探す # # 使い方: ./find_deprecated.rb <探索…
先週に引き続き、今週も厳しい感じです。リアルが。ということで、小ねたが続きますがご容赦。(そもそも小ねただらけだろー、という話もありますが。)
rubyのnilはオブジェクトです。なのでObjectのAPIが使えます。 puts nil.to_s puts nil.object_id puts nil.hash 実行結果です。 4 4
いまさらだけど、untilなんてあったんだー。 # until # 条件がtrueになるまで処理を繰り返す。 i = 0 until i >= 3 puts i+=1 end puts "---" # 修飾子としても使える。 i = 0 puts i+=1 until i >= 3 実行結果です。 1 2 3 --- 1 2 3unlessと空目してた可能…
remove_constでモジュールからクラス定義を消すことができます。 module Test class Foo; end end # クラス定義を消す。 # remove_constはprivateメソッドなのでsendで送る。 Test.send(:remove_const, :Foo) # 消されたクラスは利用できなくなる。 begin Te…
セーフレベル4ではトップレベルへのクラスの追加はできませんが、汚れたモジュールを用意してそこに追加することは可能です。 # ブロックを実行し、SecurityErrorとなるのを確認する。 def expects_security_error begin yield if block_given? raise "期待…
Rubyリファレンスマニュアル - セキュリティモデルより。Rubyでは、セーフレベルによりスレッドが実行可能な操作が制限されます。 セーフレベル スレッドのセキュリティレベルを示す値。0から4まであり、基本的に数が大きくなるほど制限が増える。 スレッド…
アノテーションを使ってシリアライザブルであることを明示できます。 // アノテーションを使ってシリアライザブルであることを明示 @serializable class Foo {} // ↑は↓と同じ class Var extends java.io.Serializable {} // 確認 println( "Foo: " + new Fo…
Function#chainで複数の関数を連結して、1つの関数にできます。 // 連結する関数の配列 var fs = Array( (i:Int)=>i+2, (i:Int)=>i*3, (i:Int)=>i-2) // 連結した関数を実行。 println( Function.chain(fs)(4) ) 実行結果です。 16
existsが簡単。 val array = Array("a", "b", "c") if ( array.exists( i=> "a".equals(i) ) ) println( "exist" ) else println( "not exist" ) findして、isEmptyで評価するとか。 if ( array.find( i=> "a".equals(i) ).isEmpty ) println( "not exist" )…
Scala でも「*」が使えます! println( "a"*20 ) 実行結果です。 aaaaaaaaaaaaaaaaaaaa
WEBrickのHTTPサーバーは、「:ServerType」設定値として「WEBrick::Daemon」を指定すると、daemonとして動作するようになります。具体的には↓のような感じ。 # httpサーバー s = HTTPServer.new( :Port => 8080 :ServerType=>WEBrick::Daemon ) 後は普通にサ…