なんちゃってVPL Based on Scratch

Scratchは日本語や英語、中国語などさまざまな言語を切り替えて表示することができます。これらの翻訳ファイルはlocaleフォルダにあり、Emacsなど適当なエディタがあれば自由に書き換えたり、増やしたりすることができます。

このファイルを新しく作り、いろんなプログラミング言語でVisual Programmingできるようにしてみました。

例えば、下のようなScratchのプログラムだと、

20091125233748

なんちゃってC/C++バージョンだと以下のようになります。

20091125233750

同様に、なんちゃってLuaバージョン

20091125233749

※該当する機能が見当たらないものは日本語のままです。

なんちゃってScalaバージョン

20091207100800

※ScalaもLuaもよくわかってないので、怪しいところがあります。

ID:abee2さん経由、ありがたいことにID:HHaさんからのご指摘で一部修正いたしました。

もちろんSmalltalk/80バージョンもあります。

20091125233752

オリジナルのScratchのままだと、if then endのようなendがうまく表現できません。また、「a += 10」のようにあらわせない言語も表現できません。

そこで、ScratchSourceに手を加えてこのような問題にも対応できるようにしました。

対応済みのSmalltalk/80バージョン

20091125233753

かなり限定的ですが、同じプログラムが一瞬にして切り替わるのは面白いです。

ソースはこちらで公開しています。

Snow LeopardでpTeX

いつものように備忘録。

JIS X0212 for pTeXから、「Drag & Drop pTeX」と「ESP Ghostscript 7.07.1」をダウンロード。

http://www2.kumagaku.ac.jp/teacher/herogw/index.html

前者はディスクイメージを開いてpTeXをアプリケーションフォルダにコピーし、後者はESPGhostscript.pkgを起動してインストールする。

/etc/pathsの最後に「/Applications/pTeX.app/teTeX/bin」の行を追加しておしまい。

Violet

紀要のためにUMLを描く必要があり、いろいろソフトを探していたのですが、なかなかいいものを見つけました。

http://www.horstmann.com/violet/

Javaで書かれていてMacで使えるし、PNGファイルも吐き出してくれるので便利です。(EPSだったらもっとよかったのですが)

これでUML書きで憂鬱にならなくてすみそうです。

HttpServerを使う

以下の情報を参考にして、画像とスタイルについてはファイルを直接アクセスできるようにしました。

http://www.smalltalk.jp/pipermail/squeak-ja/2007-September/003596.html

特定のディレクトリ配下について直接アクセスできるように構成した上で、/seaside以下についてだけ別扱いするわけですね。

スタイルについては、以下の情報を参考にしてCSSファイルを読み込ませるようにしました。

http://book.seaside.st/book/in-action/serving-files/css-and-js?_s=mxO8zi4aDKIyxyg8&_k=epes78Um&_n&169

フォームでのテキスト入力

入力項目を作りたいときにはvalue:を使わないとcallbackされないようです。代わりにwith:を使ったらcallbackされませんでした。違いはなんだろう。

html textInput size: 2;
maxLength: 2;
value: self data;
callback: [:value | self data: value]

htmlのコードを書くのに比べて固定的な表示内容を作るのは面倒ですが、データのやりとりとかインタラクティブな部分を作るのが圧倒的に楽です。

LEGO educationカンファレンス

昨日、お台場の日本科学未来館で行われたLEGO educationカンファレンスに参加してきました。

http://www.legoeducation.jp/conference/

基調講演や事例発表での興味深いお話や、WeDoとNXTのワークショップなど充実した1日を過ごすことができました。ビジュアルプログラミング言語として、WeDo環境とNXT環境の違いもよくわかりました。

数年ぶりにイソガワスタジオの五十川さんにお会いできたのはとても嬉しい驚きでした。相変わらず精力的に活動されており、たくさんの方を紹介していただきました。

五十川さんの言葉で印象的だったのは、自分のレゴ製作の過程において目的志向であることは少なく、作りながら柔軟に結果を変えているのだ、ということでした。この点で、創造性をはぐくむ教材と言いながら目的・目標を明確に定めてしまう問題解決型のプロジェクトにはちょっと違和感を感じられたようなことをおっしゃっていました。(私の理解違いであればすみません)

帰るみちみち、以前、五十川さんの人体実験?に参加したときのことを思い出しました。ある心理学の研究室での創造性に関する研究だったと思いますが、モノづくりをする際の様子をビデオ撮影しながら、思い浮かんだ言葉を口に出しながら作っていくというものです。

レゴを組み立てながらブツブツしゃべっていたのですが、作りながら解決法だけでなく目標そのものも変遷していった気がします。

明確な目標を与えることは評価する側から見ると楽ですが、やりすぎると学習者が「目標が与えられる」ことに慣れ、「目標を見つける」ことを忘れさせてしまうのではないか、ともいえるのかもしれません。ゼミ学生に卒業研究テーマを見つけさせることに多くの時間を割かなければならない現状とつながりがあるのではないかと思いました。

問題解決型で論理的思考力と創造性を伸ばすといいつつ、実は試験で偏差値を高めることを目標とする教育と、かわらないやりかたをしていないか、気をつける必要があると思った1日でした。

データベースオブジェクトの更新

梅澤さんの「SeaSideへGO!!(第4回)」を参考にしながらOmniBaseの使い方を学んでいます。

例にならって、Dictionaryを登録してみました。

dbSession := SBOmniBaseAccessor default.
dbSession commitDo: [:tr |
(dbSession dictionaryNamed: 'myTest')
at: 'test' put: Dictionary new

ところが、こうやって登録した辞書にデータを加えてみてもうまくいきません。

dbSession := SBOmniBaseAccessor default.
dbSession commitDo: [:tr |
dic := (dbSession dictionaryNamed: 'myTest') at: 'test'.
dic at: 'name' put: 'itoh'.

上記のようなコードを評価した後で、以下のコードを評価してもインスペクタには空っぽのDictionaryが表示されます。

dbSession := SBOmniBaseAccessor default.
dbSession readDo: [:tr |
dic := (dbSession dictionaryNamed: 'myTest') at: 'test'.
dic inspect.

面倒ですが再度辞書を追加してみますが、結果は変わらず空っぽのままです。

dbSession := SBOmniBaseAccessor default.
dbSession commitDo: [:tr |
dic := (dbSession dictionaryNamed: 'myTest') at: 'test'.
dic at: 'name' put: 'itoh'.
(dbSession dictionaryNamed: 'myTest') at: 'test' put: dic.

この状態で2日間困ってしまいました。

結局、解決方法ですが以下のようにすれば良いことがわかりました。

dbSession := SBOmniBaseAccessor default.
dbSession commitDo: [:tr |
dic := (dbSession dictionaryNamed: 'myTest') at: 'test'.
dic at: 'name' put: 'itoh'.
dic markDirty.

気がついてみれば当然ですが、登録したオブジェクトに変更があったことを明示的に伝えないといけないんですね。

OmniBaseの学習は手探り状態で進んでいます。

Dovecotの導入

ローカルでIMAPを使いたくなったのでDovecotを導入しました。

基本的には、以下のサイトの記述に従いました。

http://hori-uchi.com/archives/000438.html

その他、Maildir形式にするなど。

mail_location = maildir:~/Maildir

ちなみに使わないときにDaemonをとめるには、以下のようにします。

sudo launchctl unload -w /Library/LaunchDaemons/org.darwinports.Dovecot.plist