トップ «前の日記(2009-11-12) 最新 次の日記(2009-11-14)» 編集

Route 477



2009-11-13

[smalltalk] GNU Smalltalkのクラス階層をグラフ化した

世間の流行りを無視してSmalltalkネタ。

今日はGNU Smalltalkの組み込みクラスの 継承関係をGraphvizでプロットしてみました。(拡大: 560KB)

gst_classes_.png

ソースは http://gist.github.com/233727

感想

  • Rubyと比べると、モジュールがないのでシンプル。
    • しかし多重継承もないのか。だからArrayやStringはComparable(もとい、Magnitude)じゃないんだ。
  • 小クラス主義(と思って良いですか?)なので階層が深い。
    • 例えば Array > ArrayedCollection > SequencableCollection > Collection > iterable > Object とかなってて凄い
  • 仮想クラスは色を変えてみました
    • が、判定方法が /I am an abstract class./ ってそれでいいのか
    • クラスの説明に「僕は仮想クラスだよ」とか一人称で書いてるSmalltalk可愛い。
  • ちょ、Continuationあるのかw

Graphvizについて

Graphvizについてのメモを書きました。複雑な構造をささっと可視化するととてもハッカーっぽい(イメージ)ので覚えておくと良いと思います。

どうでもいいおまけ

Smalltalkではメソッド呼び出し(Rubyの「.」)がスペースなので、自然言語DSLには強そう。

追記

リファレンスを眺めていたら、ノードにURLを付記する機能があることに気づいた。「ps2形式」で出力して、ghostscriptのps2pdfでPDFに変換すると、 ノードがクリックできるようになる。これは便利かも。

ダウンロード:http:../files/gst_classes.pdf

[ruby][scraping] load_or_get

スクレイパを書くとき、HTMLファイルを開発用に保存したりするのがめんどいのでなんとかならないか考えてみた。

WebからHTMLを取得するときに、キャッシュを作る。ファイル名はURLを%エンコードしたものを使う。

def load_or_get(url)
  path = File.join("html", CGI.escape(url))
  if File.exist?(path)
    Nokogiri(File.read(path))
  else
    page = $agent.get(url)
    File.open(path, "wb"){|f| f.write page.root.to_html}
    page.root
  end
end

doc = load_or_get("http://www.gnu.org/software/smalltalk/manual-base/html_node/Base-classes.html")
...
  1. 最初の起動時は、キャッシュがないので、WebからHTMLを取得して返す。
  2. このとき、%エンコードしたファイル名 (html/http%3A%2F%2Fwww.gnu.org%2F...みたいな) でHTMLを保存する。
  3. 2回目以降はファイルから読み込むので高速 (だしサーバに迷惑をかけない)。

本体(HTMLを操作するコード)の方では、ファイルから読み込んだかWebから取得したかを気にせずに書ける。load || get という感じ

WWW::Mechanizeの機能として標準装備されると嬉しいんだが。

使用例(上のエントリのやつです): http://gist.github.com/233727

本日のツッコミ(全4件) [ツッコミを入れる]
wtnabe (2009-11-15 00:27)

個人的には http://gist.github.com/72574 と http://gist.github.com/232393 使ってます。Hpricot や Mechanize で目的の要素を取り出す試行錯誤は irb で行います。

wtnabe (2009-11-15 19:04)

間違いました。72574 じゃなくて http://gist.github.com/76140 こっちでした。

にゃぁ (2011-11-05 07:17)

あ、こういうやつね。<br>ソース出さないとありがたくないかもね。実際問題、クラスのヒエラルキってブラウザで追えるでしょ?プレゼンにはいいでしょうけど。

にゃぁ (2011-11-05 07:27)

SmalltalkならSmalltalkの中で完結して欲しかったね。