ぐる式 (貳) より引っ越し作業中.未完.

2010年2月1日月曜日

『ひだまりスケッチ×☆☆☆』 & Squeak で Grapher る

partOfSqueakClassTree

『ひだまりスケッチ×☆☆☆』 BS-TBS で放送開始

TBSアニメーション・ひだまりスケッチ×☆☆☆ 公式ホームページ

デジスタ | デジスタプチ劇場 との関係で HDD レコの方で録らざるを得ないので,使い勝手が悪い.

Squeak で Grapher る

最初は ProgramScanner から始まった.

JunParseTree (FooProgramScanner)

イディオム本 に載っている ProgramScannerJunProgramScanner が元ネタで,その後[JunProgramScanner -> JunParseTree という推移は単なる思い込みで.なんら確証はない.]構文解析木構造の可視化ができるように改良されて, ブラックブック で FooProgramScanner へと発展したが,その元ネタは JunParseTree である.

これが VWNC 7.7 に入れた JunParseTree あるいは FooProgramScanner で '3 + 4' をパースした結果.

  • JunParseTree

これを Squeak で動かしてみた.またもや寄り道である (笑).今回,ノードの反復機も ParseNode>>#nodePrintOn:indent: を元に新たに作り直してみた.このメソッドはルート・ノードのインスタンス変数を順になめて #asReturnNode が判るクラスを引っ掛けてぐるぐる回すという強引な (汚い) コードだ (笑).リファクタリング・エンジンを入れてるなら, AST パッケージに入ってる RBProgramNodeVisitor を参考にする方がよろし.

  • SqueakParseTree

ノードとアークは,とりあえず,モルフで実装している.

余談だが, >> は整数を本来右シフトして返すメソッド. 2004 年以降 Squeak ではこれに加えて Behavior でも定義してあって,そっちではレシーバ・クラスのコンパイル・メソッドを得ることができる.

もう一つ余談.簡単な VisualDiff.(DiffMorph from: src to: dst) openInWindow. asText が判るオブジェクトで使用可.

そうそう, PasteUpMoprh を addMorph: した ScrollPane を SystemWindow に貼っつけると,どうしても隙間ができる. Polymorph に入っている GeneralScrollPane だと隙間なくぴったりハマる.

森: Collection, Magnitude, Stream の子どもたち
  • JunElementalGraphExampleForest

樹上整列アニメーション,スクロール・アニメーションも動く.

森:全クラスのグラファ

これはウィンドウ.ノードが 3000 いくつある. Early2009 の MBP では重くて操作できない.

  • JunElementalGraph2142x103182

ウィンドウの中身.ちゃんと書き出しができれば w: 2142 h: 103182 という巨大なサイズの画像が生成されるはず. Squeak 3.10.2 では, jpg, png, gif, ps いずれでも途中で切れて,うまく書き出せない. bmp でも 600MB 超の真っ黒なファイルが生成される. morph としての書き出しはできる. 130MB ほどになるが.とりあえず,残された画像から 2140 x 10033 分を切り出してみた.これでも 1MB ある.

  • JunElementalGraphExampleSmalltalk_broken
重み付きのグラフ:京都
  • exampleKyoto
重み付きのグラフ:東京
  • exampleTokyo
参考

じゅん のトピックスから.

同心円状整列 (arrangeFormat: #concentric) はまだ動かない.

0 件のコメント:

コメントを投稿