FreeBSDでSqueak/Croquet

2006年5月27日(土) K*BUG 勉強会

sqlogo.gif meets logo-full.png

武藤武士 <mutoh@openedu.org>

Squeakって?

  • (ネズミなどの)チュウチュウ鳴く声 (Progressive英和中辞典第2版)
  • Smalltalk + 楽しいことたくさん;-)
  • 過去から来た未来のプログラミング環境@「Squeak入門」
    • Mac用Smalltalk-80を掘り起こして作成
  • 教育への利用を考慮
    • 「パワフルに考える」≠コンピュータを使うための教育
  • 豊富なマルチメディアライブラリ:デモを見るだけでも楽しい!
  • PDAでも動作可能なコンパクトさ

Squeakのライセンス

Squeakと教育

PDAで動く?

PDA.jpg

Squeak3.6(full)@FreeBSD5.2.1R/i386,Squeak3.0@NetBSD1.5.1/hpcmips Squeak3.0@WindowsCE(SigmarionI),Squeak@WindowsCE(PocketPostPet)

Smalltalkって?

  • Xerox PARCでの成果
    • AltoのOSのひとつ:暫定版ダイナブック
  • 筋金入りのオブジェクト指向言語
    • 全てはオブジェクト: 基本型などは一切無し!
  • シンプルな言語仕様
    • メッセージ送信のみ
    • 制御構造すら言語仕様には存在しない
  • IDEとともに提供されることが多い
    • 強力なデバッグ環境もあり

FreeBSD portsに含まれるSmalltalk

  • Squeak(lang/squeak)
  • VisualWorks(lang/visualworks)
    • 本格的な開発に耐えられるように順当に進化したSmalltalk
    • Linux版がFreeBSDで動作
    • 実行時にはヒープサイズを増やすために、-h 10mのオプションが必要かも
  • GNU Smalltalk(lang/smalltalk)

Squeakの仕組

squeak.png

ファイル構成

  • 仮想マシン(VM:Virtual Machine)
    • 本体'${PREFIX}/bin/squeak
    • プラグイン:機能拡張(X11,XIM対応など)'${PREFIX}/share/squeak/3.7-7/
  • ユーザ環境
    • prefixが同じペアで利用するもの
      • イメージファイル'squeak.image
      • チェンジファイル'squeak.changes
    • ソースファイル'SqueakV3.sources': Read onlyで十分
      • '${PREFIX}/share/squeak/SqueakV3.sources'へのシンボリックリンク

仮想マシン(VM:VirtualMachine)

  • OSの違いを吸収して、共通のイメージが動作する土台を作る
    • 単なる言語というよりもOSと考えた方が良い
  • プラグインで機能拡張が可能
    • 直接ライブラリを叩けるFFIプラグインなども
  • SqueakのVMはSqueak(Slang)で記述
    • C言語へ変換してコンパイル

イメージいろいろ

デモ:3.7-5989-full/SqueakPlugin2005Jを中心に

3.7-5989-full.png

デモの内容

  • 3.7-5989-fullでのデモ
    • デモを一通り説明する
  • SqueakPlugin2005Jでのデモ
    • Drive a Carをハンドルでの操作まで実際にやってみる
    • 日本語の入力デモを忘れた…

もういちど、Squeakの仕組

squeak-freebsd-trans.png

FreeBSDでSqueakを使う方法

  • FreeBSD本家ports(2006-05-20現在)
    • VMバージョン:3.6-3 / イメージバージョン:3.6-5429
  • squeak.org, squeakvm.org, squeakland.org版
    • 何故かFreeBSD 4.10R対応…/5.xRや6.xRで動かない
  • LinuxlatorでLinux用VMを使う
  • WineでWindows用VMを使う
    • 2006-05-21T01:09に何気に試して驚いた(!-!)
  • 武藤私家版ports
    • 鋭意作成/公開中

Linux版

  • 3大プラットフォームとして考えられている?
    • Mac OS, Windows, Linux
  • XIM対応コードが入っているバイナリもあり
  • bootableなLinux CD-ROM環境がある

Linuxlatorで動かす

  • 必要ports
アプリケーション名用途 ports テストバージョン備考
linux_base Linuxエミュレーションemulators/linux_base-88.0_14 他のemulators/linux_base-*でも動作するかも
linux-XFree86-libsXライブラリ x11/linux-XFree86-libs4.3.99.902_7 FreeBSD側のXも必要
linux_dri OpenGLライブラリ graphics/linux_dri 4.4.0
linux-openal OpenALサウンドライブラリaudio/linux-openal 0.0.9.0.3.20060226.c.f3Croquetで必要

Linux用SqueakLand版を試す

というかFreeBSDでLinux rpmを使う;-)

  • インストール
> sudo rpm --ignoreos --root=/compat/linux -ivh 
    squeakland-3.8-1.noarch.rpm squeak-vm-3.7i7sl-4.i386.rpm
  • 実行
    • 適当なイメージを指定して実行
> /compat/linux/usr/bin/squeak squeak.image

Windows版をWineで動かす

  • 必要ports
アプリケーション名用途 ports テストバージョン備考
wine Windowsエミュレーションemulators/wine 0.9.12,1
% wine /ntfs/Program\ Files/squeak/Plugin/Squeak.exe Squeak3.7-5989-basic.image 

Squeak事始め@FreeBSD

  • インストール
> cd /usr/ports/lang/squeak/
> make install
  • 以下のtunableがある
    • WITH_MPG_MMX(使わない):MMXを使うか?
    • WITH_NPSQUEAK(使う): Webブラウザプラグインを使うか?
      • 現状のportsではyesでも動かない
    • WITH_RFB(使う): Remote Frame Bufferを使うか?
    • WITH_X(使う): X11を使うか?

Squeakの実行

  • 初めての場合(inisqueakの利用)
> mkdir squeak_dir
> cd squeak_dir
> inisqueak
No default image, looking for alternatives...

I found the following images:
     1  Squeak3.9b-7032
     2  SqueakNihongo6.1Hiragana
     3  SqueakPlugin
Which one should I install [1-3]? 
  • 二回目以降
> cd squeak_dir
> squeak イメージ名 
 # inisqueakを使っていればsqueak.imageという名前でコピーされている

武藤私家版ports

  • http://qml.610t.org/squeak/VM.htmlからたどれます
  • 本家との違い
    • Webブラウザプラグインが動作(send-pr:92757)
    • FFIプラグインが動作(send-pr:94058)
    • 日本語使いに優しい(?)
      • XIMパッチ対応(=日本語入力可能)
      • 日本語関連イメージもインストール
    • OPTIONの選択がdialogで可能
    • 3.6-3 VM, 3.7-7 VM, 3.9b-7 VMベースの3種類あり

Webブラウザプラグイン

  • WebブラウザでSqueakが動く!!
  • 準備: とりあえず武藤私家版を使ってください
> /usr/local/share/squeak/npsqueakregister # -uで登録抹消

Croquet

  • http://www.opencroquet.org/
  • 現在公開されているものはCroquet SDK 1.0 beta (Hedgehog:はりねずみ)
  • 3Dコラボレーション環境
  • P2Pによる通信でワールドを共有
  • 3つのプラットフォームで提供
    • Windows, Mac OS X, Linux
    • Linux版はFreeBSD+Linuxlatorで動作
  • Squeak 3.9b-7 VMを使えばFreeBSDでも動作する!!!

デモ:Croquet (on native FreeBSD)

Croquet.png

デモの内容

  • Demo(Master)でのデモ
    • 実際に操作をしてみる

参考:Croquet Demoの地図

croquet-demo-trans.png

Croquet Tips

  • マウス操作
    • センターボタンで移動
    • 左ボタンで選択
    • 右ボタンはCroquetウインドウのハロを出す
  • キー操作
    • Ctrl-A:アバターの視点が変更可能
    • Ctrl-H:ホームポジションへ
  • カーソルキー上下/マウスホイール:上下に移動
  • 下隅でいろいろな機能が出現:Mac OSみたい…
  • フルスクリーンで操作を止めたくなったら、Alt+ドラッグで画面を動かす

Croquet on Linuxlator

  • Croquet->downloadからuniversal.zipを入手/展開する
  • 追加で必要なe2fsprogs-1.27-9.i386.rpmをインストールする(詳細)
surudoi [ tmp/squeak/linux-rpm ] % fetch http://download.fedoralegacy.org/redhat/8.0/os/i386/e2fsprogs-1.27-9.i386.rpm 
e2fsprogs-1.27-9.i386.rpm                     100% of  740 kB   72 kBps 00m00s
surudoi [ tmp/squeak/linux-rpm ] % sudo rpm --nodeps --ignoreos --root=/compat/linux -ivh e2fsprogs-1.27-9.i386.rpm
e2fsprogs                   ##################################################
  • Linux用のライブラリへシンボリックリンク作成
> cd Croquet_SDK_1.0_beta/bin/i686-pc-linux-gnu/
> ln -s /compat/linux/usr/X11R6/lib/libGL.so.1 libGL.so
> ln -s /compat/linux/usr/X11R6/lib/libX11.so.6 libX11.so
> ln -s /compat/linux/usr/lib/libopenal.so.1 libopenal.so
  • 実行する
> Croquet.sh
    • OpenAL周りはダメみたい
    • DRIの効果は(テスト環境では)ありません
      • nVidiaや3dfxなら効くのかも

Croquet on wine

  • 遅いけど動きます(!-!)
% wine bin/Croquet.exe Croquet1.0.10.image
    • オーバヘッドが大きいので遅いです
    • DRIの効果はありません
    • 流石にOpenALはダメみたい
    • でも設定をいじるとなんとかなっちゃうかも

Croquet on native FreeBSD

  • DRIが有効だと(linuxlatorを経由するよりも)速い
  • 武藤私家版VMの3.9b-7を取得してインストール
  • universal.zipの取得や展開は同じ
> squeak Croquet1.0.10.image

OpenALと戦うわたくし for Croquet

  • CroquetではOpenALを利用した3Dサウンドが実現されている
  • OpenAL portsはなんか変
    • -lpthreadはいらんのか?/他のバックエンドライブラリは?
% ldd /usr/ports/audio/openal/work/openal-0.0.8/src/.libs/libopenal.so.0 
/usr/ports/audio/openal/work/openal-0.0.8/src/.libs/libopenal.so.0:
        libm.so.4 => /lib/libm.so.4 (0x28195000)
  • ESDを使うとなんとか音が出る
    • でも切れ切れ(;-;)
    • ~/.openalrc
(define devices '(esd))
    • esdの実行を忘れずに

OpenALと戦うわたくし for Croquet (cont'd)

  • OpenALのいい加減パッチ(make configureしてから当ててください)
--- src/Makefile.org    Sat May 20 23:36:32 2006
+++ src/Makefile        Sat May 20 23:37:18 2006
@@ -294,7 +294,12 @@
 LDFLAGS = -L/usr/local/lib
 LIBM = -lm
 LIBOBJS = 
-LIBS =  
+LIBS = -lpthread \
+       `${ESD_CONFIG} --libs` \
+       `${SDL_CONFIG} --libs` \
+       `${ARTSC_CONFIG} --libs` \
+       `${SMPEG_CONFIG} --libs` \
+
 LIBTOOL = $(SHELL) $(top_builddir)/libtool
 LIBTOOL_DEPS = admin/autotools/ltmain.sh
 LN_S = ln -s

私家版で確認している問題

  • XIMの問題
    • Full screenにすると入力できなかったり
      • XIM FrontendとWindow Managerの相性もあるかも
  • make installの問題
    • install時にイメージのzipを毎回展開しているので遅い…
  • Webブラウザプラグインの問題
    • 初回やアップデート後はうまく起動しない場合がある/もう一度読み込めば大丈夫
  • Croquet関係
    • OpenAL(audio/openal)がうまく動かない

今後の野望(for FreeBSD?)

  • FreeBSDをUNIXでSqueakを動かすときの最強環境に!!
    • commitしてください(;-;) 2006/05/22に動きはじめた
  • まずはportsをまともに!!
    • configureに詳しい人求む!!: 現在はかなりadhocな対応
    • XIMパッチ回りはどうしましょ? japanese/squeak作る?
  • Croquetもportsにしたいね
    • OpenALをまともにする必要あり
    • lang/squeak-dev作る?
  • FreeSBIEでbootableな1CD環境を作る

今後の野望(その他)

  • ワークショップをやってみたい
    • テストベッド;-p 長女(7歳),次女(3歳)
      • 単なるお絵書きツールと思っている? (今はTuxPaintへ(;-;))
  • とりあえずSqueak生活用イメージを作りたい
    • 動かない/アプリが無いものはRFB(=VNC)で外に;-)
    • どこまで生きれるでしょうか?
  • もっとSqueak/Croquetを探求したい
    • 下回りはそろそろ卒業したいです(;-;)
  • Blender(graphics/blender-devel)を使ってアバターを作る

ちなみに、テストベッド;-)

luna-small.jpg

Squeakに関する最近(未来に向かって?)の話題

日本発/日本語化されたプロジェクト(新旧取り混ぜて)

ネットの情報源

書籍(写真)

  • 以下の理由で削除しました
    • 写真をとった時期が古く、全部の書籍が入っているわけでは無い
    • 権利者に許諾を取っていない

書籍情報

おまけ: i810系でDRIが効かないとおなげきのあなたに

  • 6.1Rぐらいだと以下のパッチを試すと動くかもしれません
  • 性能の高いビデオカード選びに参考になる情報
  • 参考 from FreeBSD Press 2003 No.18
    • 玄人志向 GFX5200-A128C w/ nvidia 2053.04FPS
    • 玄人志向 RD92-A128C(RADEON9200 128M) w/ radeon 129.324FPS
    • Matrox G450 w/ mga 310.462FPS

DRIが…

glxgears-trans.png
    • 無い時
448 frames in 5.1 seconds = 88.549 FPS
392 frames in 5.6 seconds = 70.088 FPS
448 frames in 5.9 seconds = 75.859 FPS
448 frames in 5.1 seconds = 87.573 FPS
448 frames in 5.2 seconds = 85.688 FPS
    • ある時
1687 frames in 5.0 seconds = 337.232 FPS
1749 frames in 5.0 seconds = 349.725 FPS
1708 frames in 5.0 seconds = 341.446 FPS
1512 frames in 5.0 seconds = 302.341 FPS
1565 frames in 5.0 seconds = 312.553 FPS

相変わらず遅いな…

まとめ

御静聴ありがとうございました

  • FreeBSDでSqueak/Croquetが動きます
    • お好みでWindows VM, Linux VM, FreeBSD VMからお選びください
    • portsですぐに導入できるべく作業中です
      • まだ少し時間がかかりそうなので、必要なら私家版を使ってください
  • できれば一緒に深みにはまりましょう;-)

当日持っていったもの一覧

  • マニュアル
    • Croquet Programming A Concise Guide Draft 0.14
  • DVD
    • Squeakers (Subtitled Versionと2枚)
  • CD-ROM
    • Squeakware-edu 0.2, 0.3
    • Squeak CD-ROM 3.8
  • 基板
    • 世界聴診器未作成基板
  • PDA
    • DoCoMo PocketPostPet (正常に動作せず)
    • NEC MobileGear II MC/R530 (これもまともに動かせず)

加筆履歴

  • 2006/06/03
    • 当日持っていったもの一覧を作成
    • デモの内容を追記
    • Croquet for Linuxでの動作に必要な作業を追記
  • 2006/06/01
    • DRIが6-stableに入ったのを記述。
Last modified: 2006-06-03
Post-it: New Post-it (help)

Text color: [_][_][_][_]

Background: [_][_][_][_][_][_]

Draw Line:

x: y: