Hatena::Groupocaml-nagoya

UX-Framework開発日誌

2009-03-18haxeのドキュメント生成ツールchxdocを使ってみました

haxeのドキュメント生成ツールchxdocを使ってみました

20:36 | haxeのドキュメント生成ツールchxdocを使ってみました - UX-Framework開発日誌 を含むブックマーク はてなブックマーク - haxeのドキュメント生成ツールchxdocを使ってみました - UX-Framework開発日誌

haxeのソースコードからドキュメントを生成するためにhaxedocというツールが標準でインストールされますが、より見やすくて使いやすいドキュメントを得るためにchxdoc(version 0.7.3)を使ってみました。


chxdocはhaxedocと同様に、コンパイルオプション -xml で生成されたxmlファイルからドキュメントを構築するようです。


ダウンロードしてPATHを通したら、templateをプロジェクトのディレクトリにコピーしてきましょう。

 $ cp -r DOWNLOADDIR/chxdoc_0_7_3/template ./

次のようにして使うことができます。

 $ haxe -xml myproject.xml ....
 $ chxdoc -o docs --tmpDir=_chxdoctmp --templateDir=templates/default \
--installTemplate=true --developer=false myproject.xml

これで、このようなかっこいいドキュメントHTMLが生成されます。


ただ、バグを一つ発見してしまいました。それは各クラスの一番上のクラス名の部分がHTMLエンコーディングされないということです。このため MyClass<A> のような型パラメータを持つクラスを定義した場合、その部分がHTMLタグみたいになってしまい、ブラウザで意図通りに表示されなくなってしまいます。型パラメータを<S>とかにした場合はクラス名以下の文章が打ち消し線になってしまうのです!!


[追記]

バグの原因を見つけてパッチを作りました。これでうまく使えます。

JosueJosue2012/12/08 01:06It's good to get a fresh way of lokoing at it.

mvdbmpbjmvdbmpbj2012/12/08 18:40rdseGL <a href="http://kwtjyqpynman.com/">kwtjyqpynman</a>

eqogrdeqogrd2012/12/10 00:02j1vFpg , [url=http://xffmcgutuncm.com/]xffmcgutuncm[/url], [link=http://lnchqyshnyue.com/]lnchqyshnyue[/link], http://bpiqwtqzgxct.com/

zhgjsknzhgjskn2012/12/13 01:446Ss9aO , [url=http://daqnhnwvesno.com/]daqnhnwvesno[/url], [link=http://ventcmcgwdrw.com/]ventcmcgwdrw[/link], http://nkccxrexsmcs.com/

2009-03-15豆腐デー(WCAN mini AS Vol.10) このエントリーを含むブックマーク

WCAN mini AS Vol.10(http://www.wcan.jp/members/index.php?ID=64)に参加してきました。私の発表資料(http://www.itpl.co.jp/WCAN-AS-Vol10.ppt)。プログラミング専門の方は少ない集まりだとは分かっていましたが、抽象的な話をしてももやもやしてしまうと思い、思い切ってソースコードなど前面に押し出して解説しました。が、やはり撃沈。次回もし機会があれば別の構成にしようかと思います。

以下メモと感想。

  • タイムラインアニメーションとのシナジー(面白法人カヤックの道家陽介さん)
    • Animationクラスを作ってタイムラインアニメーションを包み込むとスクリプトとタイムラインが仲良しになれるという実演。なるほど、そういう手があるんですね。
  • 真っ白な羊を好きなだけ数える(mihhaさん)
    • AS3で挑戦しようとしたけど結局JSで実装したという、フミンカップ。http://fumincup.com/。アニメーションよりJSによる通信とRoR側の方が難しそうな感じがしたけど、さらっと流してました。何気に楽しそう。
  • 白板通信(株式会社アイズのtocy(西脇俊晴)さん)
    • haXeでリアルタイムお絵かき共有を実演。通信はhaxe.remotingらしい。Flashから電話するとか、画像認識とか、相変わらず未来を感じさせてくれるトークでした。
  • しろうとがデコメアニメを作ってみる(ヤマゾエさん)
  • 白地図生成とグラフィックへの展開(アップルップルの山田拓生さん)
    • GPSの軌跡と文字を組み合わせて新鮮な表現。やっぱりデザイナーさんの作るものは一味違うと思いました。GPS自体も面白そうだったので、今度使ってみたいです。
  • 豆腐的な何か(occhii105さん)
    • テクスチャ張って豆腐!微妙な動きを作ってらっしゃいました。使ってたソフトなんていってたっけ...。失念。
  • シール(bigchuさん)
    • 私の参加申し込みを受け取ってくださったbigchuさんのFlashによるシール。この発想がすごい。どうやったらこんな考えが浮かんでくるのでしょうか?しかも単体のクラスに実装されたようで、再利用性ばっちりな感じでした。
  • ホワイトホワイトデー(ll_koba_ll(小林陽介)さん)
    • tweensyによるモーショントゥイーンやエフェクトの紹介。Emitterという放射動作を応用してパーティクルな雪を実装。こんなライブラリがあるとは知りませんでした。

tocytocy2009/03/15 22:45豆腐のocchii105さんの豆腐は、PaperVision3D 使ってましたね。

tocytocy2009/03/15 22:53あ、そういえば、次回は5月でお題は「ゲーム」らしいですよ。

uxtkuxtk2009/03/17 11:06ありがとうございます。> PaperVision3D
次回はゲーム!実は私も昔はゲーム作って遊んでた人なので、参戦したくなるじゃないですか :P

EssenceEssence2012/12/07 10:09Good points all around. Truly appreictaed.

ferwieiferwiei2012/12/08 15:32XoIw9G <a href="http://brgbqvywhwqt.com/">brgbqvywhwqt</a>

exiragysuexiragysu2012/12/09 20:59j5wwNN , [url=http://vmnxnmhridzw.com/]vmnxnmhridzw[/url], [link=http://hmdwswtlkbro.com/]hmdwswtlkbro[/link], http://nghehbeknabe.com/

stqdbuhstqdbuh2012/12/10 10:57jNjz4c <a href="http://olfsbiuwopit.com/">olfsbiuwopit</a>

empjpmwdkcempjpmwdkc2012/12/28 11:51POHsWT <a href="http://bjwqcwjumovc.com/">bjwqcwjumovc</a>

pshabcpshabc2012/12/28 19:37atWX2p , [url=http://dvjlrfbizche.com/]dvjlrfbizche[/url], [link=http://hsqdgzwwwnfj.com/]hsqdgzwwwnfj[/link], http://bponlmawpidc.com/

fqvzqkfqvzqk2013/01/17 04:09mvIanj , [url=http://kevdweovoayh.com/]kevdweovoayh[/url], [link=http://aocqcrpvqqxh.com/]aocqcrpvqqxh[/link], http://zownrwxsyeye.com/

dnaqiqsdnaqiqs2013/01/18 04:22oJWtTh <a href="http://vdvlvcingdwh.com/">vdvlvcingdwh</a>

2009-02-09classの継承と匿名型のextensionは違う

classの継承と匿名型のextensionは違う

19:42 |  classの継承と匿名型のextensionは違う - UX-Framework開発日誌 を含むブックマーク はてなブックマーク -  classの継承と匿名型のextensionは違う - UX-Framework開発日誌

haXeではクラス A を 継承して x: Int というフィールドを与えた次のようなクラス B1:

class B1 extends A {
	public var x : Int;
}

と x: Intを A に加えた拡張型B2:

typedef B2 = { > A, x : Int }

は 異なります。

つまり以下の用に、B1型のインスタンスをxフィールドを持った匿名型として扱おうとするとコンパイルエラーになってしまうのです。

class Test {
 	var b1 : B1;	
	function method () {
		var b2 : {> A, x: Int} = b1;  // <- ここが型エラー
	}
}

エラーメッセージ

Test.hx:13: characters 2-29 : B1 should be +A

haXeでsturactual subtypingを実現するためには匿名型は必須なので、そのためにはclassの継承を使えないようです。

A用の匿名型ATを作って、ATのextension ({> AT, x: Int}) を使えば問題ありませんでした。失礼しました。匿名型の拡張には匿名型を使いましょう。

YelhsaYelhsa2013/02/17 20:55That's a smart way of thkiinng about it.

2009-02-06haXeでstructual subtyping

haXeでstructual subtyping

22:42 | haXeでstructual subtyping - UX-Framework開発日誌 を含むブックマーク はてなブックマーク - haXeでstructual subtyping - UX-Framework開発日誌

haXeinterfaceを使ったnominalなsubtypingも可能ですが、無名型を使えばstructualなsubtypingを実現する事ができます。

haXeでのstructual subtypingの例を見てみます。

例えばhaXe

{ name : String }

と書けば、この型は「nameという文字列型のフィールドを持つ何か」を表します(無名型と呼びます)。

この型を使ったshowという関数を下記の用に定義してみましょう。

static function show(x: { name : String }) {
	trace(x.name);
}

nameというフィールドを持つものならどんなものでもこの関数を適用することができます。

例えば下記のようなname, ageという二つのフィールドを持つPersonクラスが定義してあったとします:

class Person {
	public var name: String;
	public var age: Int;
	
	public function new (name, age) {
		this.name = name;
		this.age = age;
	}
}

このとき

{
	var imai = new Person("Y. Imai", 26);
	show(imai);
}

という式(expression)は引数imaiの構造を見て型が問題ないとコンパイル時に判定されます。


JavaActionScriptなどの多くの静的型言語では、structual subtypingが無いために、このことを実現するためにはinterfaceを用意して、Personクラスの定義にimplementsすることを書き加える必要があります。しかし、ライブラリやフレームワークなど手を加えることができないときは、動的な型もしくはunsafeなcastなどを使わざるを得ない場合があります。その場合、型安全性は失われてしまいます。


structual subtypingでは「nameとageを持つ何か」や「ageは持たないけどnameとdraw():Void->Voidをもつ何か」のような型を簡単に定義できるので柔軟で抽象的な型設計を可能とします。そこにはわざわざInterfaceを用意する必要も、それをimplementしていることを明示する必要もありません。しかも、もし必要なフィールドまたはメソッドを持っていなかったときは、コンパイル時に型エラーとなり、間違っている部分の情報を得ることができます。そして実行時には、無いフィールドの参照エラーが起きないことが保証されるのです。

osiireosiire2009/02/09 13:05このhaXeのstructual subtyping(構造的部分型)は暗黙的(showにpersonクラスを適用する時に型を明示する必要が無い)ですね。(色んな意味で)すごい!

NeoNeo2012/07/11 13:32Keep it coming, wrtries, this is good stuff.

gdktfcgrgdktfcgr2012/07/12 15:018EvZpq , [url=http://joabmtzggnov.com/]joabmtzggnov[/url], [link=http://dfmzumgtadeu.com/]dfmzumgtadeu[/link], http://zyrxkkptsssj.com/

kpinvpkpinvp2012/07/13 02:45Wf9jaR , [url=http://fpfitjoayhkd.com/]fpfitjoayhkd[/url], [link=http://prgurjawgodj.com/]prgurjawgodj[/link], http://fltdfvmvnbza.com/

2009-02-02アウトラインモード このエントリーを含むブックマーク

UX-Frameworkのソースコードでは、関数の宣言の上にアウトライン用のコメントを挿入してあります。haxe-modeと一緒にemacsのアウトラインマイナーモードを使いたい時には、次のように.emacsに記述しておくと便利です。

(add-hook 'haxe-mode-hook
          '(lambda ()
	     (outline-minor-mode t)
	     (make-local-variable 'outline-regexp)
             (setq outline-regexp "[ \t]*\/\/ {{{")))

ちなみに、私はアウトラインプレフィックには\C-c\C-oを割り当てています。

(setq outline-minor-mode-prefix "\C-c\C-o")

もしプレフィックスの割当てを変えたらemacsを一旦立ち上げ直した方がいいです。(そうでなければ、キーマップを直接変更しないといけない。)