プログラミング

ghcを初めて使う場合のメモ

あらすじを立ててみるテスツ。遅延評価だとかモナドとかの用語は先につかわない。 Hello World http://www.haskell.org/ghc/ まずはHello World。ソース:Main.hs module Main (main) where -- hello world main = putStrLn "Hello World"ビルド $ ghc --make…

prototype.jsのinitialize

prototype.jsで var NewClass = Class.create();としておけばinitizizeメソッドがnewしたときに呼び出されるようになる。privateフィールド問題もいけるのかな: NewClass.prototype.extend( { initialize : function () { var self = this; var count = 0; t…

JavaScriptのthis

クイズ 以下のスクリプトで: <html> <body> <script language="JavaScript"> //"); // 1 function func() { var name = "func"; document.write("in func:" + this.name + "<br />"); } func(); // 2 var obj = {}; obj.n…</body></html>

JSON記述の罠

Geckoでは { a : 100, b : 100, }は有効なコードだが、IEではパーズエラーが出る。 IEでも使えるようにするには、最後のカンマは外さなくてはいけない。 { a : 100, b : 100 }こっちのこうがJavaScript文法としてはValidですが。

JavaScriptでprivate メンバー

JavaScriptでprivateメンバーを作るにはコンストラクタでの局所変数にする。 function Foo() { var name = "taro"; this.setName = function(newName) { name = newName; }; this.getName = function() { return name; }; } var f = new Foo(); alert(f.name…

DojoとPrototype.jsの違い

http://d.hatena.ne.jp/m-hiyama/20051015/1129357440 を見て思ったけど、たしかDojoスタイルはメンバーコピーをし、Prototype.jsスタイルはprototypeに設定してメンバーを継承させているんですよね。これは一長一短で、前者は外部アクセスできないメンバー…

JavaScriptのUIオブジェクト設計

JavaScriptでUIクラスを設計するとき、ページ内の要素に対し、それを操作するオブジェクトを割り当てるようにする。 <form> <input id="spinner" type="text" value="0" spinner:min="0" spinner:max="100" spinner:step="2" spinner:initSpeed="150" /> + <input id="spinner2" type="text" value="0" /> <script language="JavaScript"> //</form>

Railsでの開発メモ

機能追加をcontrollerから入るのはあまりよくない エントリーのcontrollerが肥大化する ページ遷移のルートがはっきりしないときに追加していくことで。いつのまにか tag_listやtag_showのようなactionができてしまっている。 model専用のcontrollerに移す m…

Ruby on Railsことはじめ

ツールで固めたRuby用Webアプリケーション開発環境というのが第一印象。railsパッケージをインストール後、 $ rails helloworldで一斉にサイトのテンプレートができる。そこには自動化環境(rake, antのようなもの)、テスト環境、簡易サーバ、コンポーネント…

JavaScriptのDOMパーザー

XMLHttpRequestのresponseXMLを使う場合、ブラウザによってはcontent-typeによってパーズしないでnullになる場合がある。これは、responseTextで得られるXMLテキストから、DOMパーザーに通せば強制的にDOM Documentにできます。IEでのローカルファイルでresp…

Java5 XPath

J2SE1.5.0_05で試しています。以下のようなXML文書を: <plugin xmlns="http://d.hatena.ne.jp/bellbind/plugin/1.0" id="foo.bar"> <extension-point id="foo.bar.Ext" class="foo.FooExt" version="1"/> <extension-point id="foo.bar.Ext2" class="foo.FooExt2" version="2"/> </plugin>XPathを使って解析するJavaプログラムを書いてみ…

派生クラスでmemorization

Javaでの単純なメモ化の実装は、派生クラスで上書きしてしまうことでしょうか。コード自体の汎用性はないけど、C++やC#でもほぼ同じやり方ができますしね。キャッシュ化のイディオム。 public class Fib { public long fib(int n) { System.out.println("whe…

Decorator annotation javaagent完成

ant project化。staticメソッド、クラスローダー再読み込みに対応。javassist.Loaderにも対応。ひそかに公開。

昔書いたocaml版(let recをつかわない)不動点関数導出

fix自体は以前書いたことがあって、そこでデコレーションや入れ替えができるという手法はメモ化が初めてじゃなかったり。で、その時かいたコードを発見した。内部で名前を使わない場合と使う場合とで、なぜletとlet recを区別するのか、という点で疑問があっ…

Java5/Javassist3.1による汎用Decorator実装

[id:bellbind:20050906:p3]の続き 概要 Java5のannotationでメソッドにデコレータをつけられるようにしたjavaagentの実装。具体的には、[id:bellbind:20050906:p3]の最後の考察部分を実現できるようにした。 @Decorate({LoggingDecorator.class, MemorizeDec…

Decorator annotationをJava5/Javassist3.1で実装してみるも...

先日の [id:bellbind:20050903:p2] でmemorization annotation/javaagentをつくったとき、汎用化するDecorator annotationを作れないか、と思って作ったのがこれ。 例コード Fib.java public class Fib { @Decorate(MemorizeDecorator.class) public long fi…

Javassistでwrapメソッドを作る方法が面倒

int foo(double a, boolean b) {...}というメソッドがいろいろあったとき、 Object wrapped_foo(Object[] args) { return new Integer(foo(((Double) args[0]).doubleValue(), ((Boolean) args[0]).booleanValue()); }というのを汎用的に作る方法が、javassi…

AspectJ5でmemorization

http://www.hyuki.com/d/200508.html#i20050831205251 memorizationは、プログラムで特定の入力組に対し関数実行の結果をキャッシュしておいて、同じ入力組が来たときにそれを再利用するテク。キャッシュを使うときは関数を実行しないので、副作用があると振…

Javassist 3.1とjavaagentでmemorization

( 派生クラスでのメモ化は[id:bellbind:20050910:p2] )Javassist 3.1はJava5のannotationが取り出せるようになっていました。 http://www.csg.is.titech.ac.jp/~chiba/javassist/html/index.html これとJava5のツールインタフェースであるjavaagentを組み合…