おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

2009年9月Smalltalk 勉強会

ということで Smalltalker でもないのになぁ……と躊躇していた、うそ、タイミングが合わなかっただけです、Smalltalk 勉強会ですが、今回は事例発表スペシャルということで気楽に参加してきました。

http://www.smalltalk-users.jp/Home/gao-zhi/dai13kaismalltalkbenkyoukai

えーとえーと、事例発表とのことで技術は分からなくても気軽に聞けるけど、守秘義務踏みそうで怖いので、淡々と当日取ったメモを上げておきます。

Cincom Systems 様事例発表 by 梅澤さん

概要
  • 商用 Smalltalk システム VisualWorks の発売元
  • ただここの会社はあまり事例を出したがらない*1
  • ので Web サイトからあたりさわりのない情報を。
導入事例
VisualWorks の特徴
  • とにかく高速。10000 factorial が1秒で答えが出る。
  • 長い歴史で洗練されたUI。
  • 3000を越えるクラスライブラリ *2
  • マルチプラットフォーム (Windows / Mac / Linux)。
  • 個人使用は無償 (ただし英語版のみ、日本語マニュアル・サポートなし)。*3

GEN - Squeakによるオントロジーモデリングツールの開発 by 梅澤さん

そもそもオントロジーってなに?

というワシのような人はWikipedia ja の「コンピュータにおけるオントロジー」を読むのがいいと思う。要は知識のモデリングのことみたいね。古くはフレーム理論みたいな。

主な機能と特徴
  • 暗黙知化した業務知識を見える化するオントロジーモデリング
    • 業務に即した専門システム。
    • UMLのアクティビティ図っぽい図で業務をモデリング。モデルと一緒に作業手順やマニュアルも管理できる。
  • Wiki っぽいメモ帳。外部リンク、内部リンクあり。モデリングの補足的に使える。コメントは公開コメントと非公開コメントがつけられる。
  • 作業スケジューリング。作業の依存関係を DSL で記述しスケジュールを自動的に生成。
    • DSL はほとんど生の Smalltalk なので顧客がもりもりかけるようなものではない (期間不足でそこまで到達できなかった)。
    • スケジュール解決を行って充足できないルールがある場合は優先度によってどれを落とすかを決定し、落ちたものを表示する。
  • 基礎オントロジー。概念集のようなもの。業務に出てくる概念(例えばオイラの業務なら「Linux ディストリビューション」とか) を一種のクラスとして、そのインスタンス (Ubuntu とか Debian とか Fedora とか) を作ることができる。インスタンス間のリンクを張った場合、必ず逆リンクも自動的に張られる。多重度も変更可能。
実装面
  • ビューとしてはモデルの方は自動生成、Wikiっぽいページはごりごり書いてる。
  • ストレージはオブジェクトが複雑に絡み合い過ぎて使えないので OmniBase を使ってる。スナップショットをエクスポートしたり、ユーザを排他したりする機能もある。
  • スケジュール解決機構のルールベースは BackTalk を使ったがバグが多く苦労した。しかし他の選択肢はパフォーマンスその他で今ひとつ。
    • Prolog/V *4 のプロジェクトが今動いているようなので要チェックかも。
メトリクス計測
  • 結果はメモってません。
  • 短期間で(プロトタイプしながら作る感じで)がーっと書くと結構メトリクスはよくなるみたい。
  • 基本的に、Smalltalk で自然に書くと綺麗なコードになりやすい?
困ったこと
  • UI はかなり地獄。
  • Squeak はトロい (VisualWorksの 1/10)。
  • ×ボタンで閉じちゃうと問答無用で VM が落ちるので DB のセッションを切るタイミングがない。
    • しかも×ボタンを無効化できない……。
  • UI については Pharo という次世代 Squeak に期待。

「パーソナルコンピューティングへの回帰 - 自分のためにプログラムを書こう」 by 阿部さん

阿部和広さんはアラン・ケイの弟子筋であってバリバリの Smalltalker でもあるんだけど Squeak eToys とか SCRATCH の方でも活躍されていらっしゃって、とっても面白い方です。
資料はこちら

「事例発表ということですが、Smalltalk は実務で使えるよという話はみんなすると思いましたので、今日は違う話をしにきました」だそうで。

Personal Computing という言葉の発祥
  • Alan Kay「A Personal Computer for Children of All Ages」(1972)。
    • Dynabookという言葉を生んだ論文。
    • ノートパッドみたいなのにお絵描きしている図だけが有名になって、iPhone のようなデバイスが Dynabook だと思っている人がいるがそれは全然違う!
    • ゲームで遊んでいる最中に、「ここがこういうルールだったら面白くない?」といって書き換えられるような環境が理想。
    • 自分で遊んで自分でプログラミングをする、ダイナミックに環境を変えていく、だから Dynabook
  • Personal Computing とは「自分のために自分の欲しいものを作る」ということと不可分!
昔の Smalltalker
  • 有名な逸話
    • Steve JobsApple の人間が PARC を見学にきたとき、一人の Smalltalker、Dan Ingalls*5 がエディタを弄っていた
    • Jobs 曰く「スクロールが行単位なのがかっこ悪い」
    • Danその Smalltalker (名前忘れちゃった) はその場で速攻 hack して、エディタの動きをスムーススクロールに変えてしまった!
    • Jobs びっくり。大興奮。「なぜ XEROX はこれを商品化しない?」
  • 昔の Smalltalker は欲しいものをガンガン自分で作る。
    • 仲間が欲しいといったら分け与える
    • 欲しい物は自分で作るのが Smalltalker の原点
では阿部さんの実例
  • もうあるものを作っても面白くない
  • 自分が面白いと思えて、だれも作ってないものをつくろう!
  1. Bluetooth 腕時計 (電話の着信を教えてくれる) でメール着信を検知する*6
    1. まず自宅サーバがメールの着信を POP で取る
    2. 次に PC についてるモデムで iPhone にダイヤリングする
    3. iPhone が電話を受け取ると、それを Bluetooth で投げて腕時計が鳴る
  2. SCRATCH でロボット制御
    1. SCRATCH 1.4 からは LEGO につく専用のロボットがあるがちょっと高い
    2. のでもっと安いロボットを制御できるようにゴリゴリ書いた
  3. SCRATCH で Tweet
    1. Tweet 用のパレットを用意して好きな言葉を Tweet できるように
  4. Tweet で電話番
    1. 上の応用例で、SCRATCH Board の音量センサで電話の受信音を受け取る
    2. そしたら「電話なう!」と Tweet させる
  5. Tweet でロボのリモート操縦
    1. Twitter API で発言内容をポーリング
    2. 発言内容によってロボットをリモートで動かす
それって意味あるの?
  • 「ない。」
  • ないけど、「作りたいから作る」ことができることが大事なのでは?
  • Smalltalk は慣れれば非常に素早くアイディアを形にできる言語*7
  • 仕事として人のためにプログラムするだけではなく、自分のために自分の面白いと思えるプログラミングしようよ!
関係ないけど
  • Smalltalk のクラス定義には examples というのがあってクラスの使用例が書ける。
    • オブジェクトブラウザで参照すればラクチン実装。
    • 今の若い Smalltalker は examples を書かないのがけしからん。

VisualWorksによるルーティングシミュレーションツール: RoutingSimulator」 by 南谷さん

Smalltalk でルーティングシミュレータを作りましたよというお話。資料こちら。ルーティングシミュレータについての説明は省略。Smalltalk ならではって話に乏しいし。

使用したライブラリ群
  • GF/ST: 2D グラフィックスの Vector ライブラリ。
    • Jun/Takenoko というのもあるけど、3D ライブラリなのと GPL なので敬遠。
  • クラスのマーシャリング
    • SIXX: XML を使用する。データの可搬性が高い
    • SRP (State Reprecation Protocol): バイナリ化。転送向き。
  • RunTime Packager: 実行ランタイムだけの配布が可能
メトリクスについて
  • Smalltalk の標準的なプロジェクトではメソッドの行数は 7 行、クラスのメソッド数は 22〜27 ぐらいが普通とのこと。
    • メソッドの行数が異常に少ないのが驚き。
    • 人間が直感的に認識できるのは 7±2 だと言われているので、Smalltalk のプログラムは理解しやすい。
困りごと
  • 多くは開発環境側の問題。
  • OS 標準の Widget が用意されていないことも多い
  • ベクタグラフィックのアンチエイリアスなど今っぽい機能がないので見た目が劣る
  • VisualWorks にはサービスパックなどの中間アップデートがないのでバグが放置されぎみ。
    • ただしソース付きなので自分たちで直せちゃうのも事実。
嬉しいこと
  • やっぱり開発環境。
  • IDEとしては最強。Eclipse とかクソ。
  • VisualWorks は描画まわり以外は速度に不満なし。たぶん動的言語としては最速の部類ではないか。
  • Squeak は見た目が Squeak アプリになってしまうが、VisualWorks ならそのプラットフォームのアプリにちゃんと見える。これは重要。
    • 顧客にバレないように Smalltalk で開発するにはやっぱ VisualWorks ですかね。

「ちょこッと Pier」by 西原さん

Pier って?
  • http://www.piercms.com
  • "Pier is a content management system that is light, flexible and free."
    • といってるけど元々は Wiki システムがベース。CMS というほど機能あるのか?
    • 西原さんも最近追いかけてなくて不明だとのことです。
なぜ Pier か。
  • 使ってる奴がいない。
    • だから使ってみたい。
    • 最初に Pier ありき。
  • そこで Wiki を使えそうなプロジェクトがあったので飛びついた。
インストール
  • 超簡単。
  • Squeak-web というパッケージが配布されてるので取ってくる。
  • Squeak で動く Web サーバ (seaside) と一緒に入ってるので立ち上げると即起動。
  • でも Squeak-web のメンテナが Pharo に移っちゃったようでメンテ止まってる (^^;)
改造
  • Pier は当然 full Smalltalk でかかれているので、サブクラス作ってメソッドオーバーライドしてやれば動作を変えるのは比較的簡単。

「2009年夏 Smalltalkの思い出。そして、過ぎ去りし日々」by 林さん

C++ の他言語インタフェース SWIGSmalltalk から C++ のモジュールをドライブする話。

既存の方法
  • DLL コールについては VisualWorks/Squeak それぞれに専用の I/F がある
  • しかし DLL は C 形式の関数でないと呼べないため、C++ の場合はラッパを書かなければならない
そこで SWIG
  • C++ -> DLL のラッピングを自動で生成してくれる
  • Smalltalk 側の I/F も生成してくれる
  • 非常にラクチン
Smalltalk SWIG
  • 実は SWIG プロジェクトとしては Smalltalk はサポート外
  • ので、SWIG プロジェクトとは別のプロジェクトがある
  • Smalltalk 専用なので、いっそのことさまざまな Smalltalk の実装をサポートしてしまおうという野心的試み
でも実際は……
  • バグバグ。超がんばれば使えるけど。
  • 書き直した方が早くね?
  • Java/.NET のものを今ベースにしてるけど、何か微妙。
  • Ruby/Python みたいな動的言語からパクった方がよくね?
  • ということでみんな頑張ろう。

「CSbook - 構成主義的スクラップブックの開発」 by 横川さん

構成主義とはシーモア・パパートの提唱した「何かを作ることに非常に高い教育効果がある」という教育理論でして、LOGO はその実践であります*8
これは横川さんが多摩美大の研究室と共同で構造主義を実現するシステムを構築したお話です。

新しい構成主義
  • 構成主義においては自分の作った物がフィードバックされることが重要。
  • LOGO はタートルグラフィック
  • それに変わるものがないか?
    • 動的にいじれるスクラップブック
オンサイトエンジニア(笑)
  • どんなツールが「構成主義」を実現できるか、の分析からスタート。
  • 一人での開発なのでオンサイトカスタマーというよりオンサイトエンジニア(笑)。
  • ミーティングで概念をつめていって実装してミニワークショップを1週間に一回というペースで行う。究極のアジャイル
  • パッと作ってパッと見せるには Squeak は最高の環境。
    • Morphic (Squeak の標準 UI) は簡単に UI をいじれるので要望をその場で反映できる。
    • たぶん、ミーティングでその場で実装してみせてイメージを確認するようなこともしたのではないか。Smalltalk というのはそういう言語だから、とはのちほどの雑談で出た声。
Smalltalk と多人数開発
  • 逆に Morphic があるが故にプロジェクトファイルがバイナリであるため、ソースコード管理ツールで管理できない。
  • 多人数開発向きでない。
  • Morphic の変更を禁止してほしい、という要求に答えるのは大変。

そして懇親会へ

頭に残ったことをぱぱっと。

  • Smalltalk の利点は?」「使ってみたら分かるよ」「いや、それは禁句ですよ、だから Smalltalker は宗教がかってるとか言われるんですよ」
  • Smalltalk はプロトタイプを積み上げて行ってコーディングして、パフォーマンスチューニングは最後にやるのが普通。
    • だから業務の場合、生産性優先であるとか、要件が不明確で手探りで作りたいとか、3ヶ月で動く物がとにかく欲しい、という案件は非常に向くが、とにかくカリカリに早いのが欲しいというのには向いてない。
  • Smalltalk は入りやすいが奥が深すぎるので技術者のレベルにばらつきが出やすい。
    • 明文化できない細かなノウハウが多すぎる。
  • Morph の実装はかなり腐っている。メソッド数が 1300*92000 を越えている。
    • 単純継承しかない Smalltalk の言語仕様の問題もあるけど、ちょっとひどすぎる。
  • Matz さんはなんでああ Smalltalk を dis るんだろう。細々とやってるんだからほっといてくれればいいのに*10


いやしかし楽しかったです。
もちょっと自分自身勉強して、Smalltalk 勉強会の本編にも参加してみようっと。
あと阿部さんのプレゼンに刺激されたので、Wassr API でなんか遊ぶおもちゃを作ってみたいな。


では皆々様、ありがとうございました!

*1:あまりにも VisualWorks がすげーので……という理由らしいです。よくわからん。

*2:多いからいいというものでもないですが、というセルフツッコミあり。

*3:umejava さんよりコメントいただきました。JLC というライブラリを導入すれば日本語対応になるそうです。

*4:昔懐かしの Smalltalk/V についてたおまけのルールベース。名前のとおり Prolog っぽい処理を Smalltalk でできる。

*5:id:abee2 さんが教えてくださいました。Dan Ingalls は名うてのスーパーハッカーだそうです。Squeak の開発にも深く関与したとか。コメント欄参照

*6:今の奴はメール着信も教えてくれるらしいですが、昔のはダメなのでなんとかしたかったんだそうです。

*7:Smalltalk 環境で選択した単語を Google で検索するというデモを6分で実装してました。

*8:ただし芸術の分野では違う意味があるかもしれないのでご注意、とのこと……。

*9:最初は 2000 と書いてましたが、これは上位オブジェクトからの継承も含めたものであり、実際 Morph の固有メソッドはこれぐらいだそうです。

*10:そうなの? ブログとかあんまりチェックしてないから、Matz さんの Smalltalk の悪口ってあんま記憶にないなあ。単純継承しかないのはちょっと不便だよね、って言説は「コードの世界」で読んだけど。