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

入力項目を作りたいときには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

Snow Leopardを入れて...

発売日当日に購入したSnow Leopardを、仕事の合間に入れてみました。

結果としてはSafariなどキビキビ動くようになってよかったのですが、いくつか問題がありました。

OmniBase

データベースを開こうとすると、ODBLockingConflictエラーが出てしまいます。ODBUnixFileStraemでOSProcessが成功しないようです。

【2009.9.3追記】

消去したディスクにSnow Leopardを入れなおしたら問題なく使えるようになりました。これで研究が再開できます。

Missing Sync Mobile

BluetoothでもUSBでも接続しません。BluetoothではFirewallを解除してもエラーで進まず、USBは認識すらしません。

どっちもよく使うものなので、もとに戻すかどうするか検討中です。

HDL2-Gにtelnetdを

撮りためたビデオを格納したHDL2-Gに、なぜかWindowsからもMacからもアクセスできないフォルダやファイルができてしまいました。

Windowsだと「アクセスが拒否されました」、Macだと一方通行マークが出て見ることができません。

内部的にファイルの所有権や属性が変わってしまったのだろうと思ったのですが、既存の設定画面からはどうすることもできません。

しかたがないのでtelnetdを組み込むことにしました。手順は以下のサイトの通りです。

http://blog.goo.ne.jp/alicia-y/e/8c8c3ad705de47698eae9fa6702de74d

http://island.geocities.yahoo.co.jp/gl/raul84e/view/20090413/1239554276

問題なくtelnetdを組み込み、ついでにユーザーも設定してから問題のフォルダ(/mnt/sataraid1/share)を見ると、どれも所有者がnobodyになっていました。どうしてこうなったんだろ。

全部所有者を変更して事なきを得ました。

GW中の楽しみ

GWといっても仕事が山積みなので、普段とあまり変わりません。特にこの時期に授業の準備をしておかないと後が大変です。

帰宅用の仕事を片付けたので、あいた時間で今までやりたかった「SeaSideへGo」のチュートリアルをやってみました。

http://www.ogis-ri.co.jp/otc/hiroba/technical/seaside/

最新のイメージを入れて、第4回まで進みましたが、梅沢さんの文章は読みやすく、以前自分でやっていたときによくわからなかったところも「なるほど」と思わせます。なかなか時間が取れず勉強会にも参加できていないので、この連載は非常に助かりました。

今年はちゃんとしたシステムを組みたいところ、SeaSideを活用できると良いのですが。

アイスブレイク

毎年新入生の少人数クラスのスタート、特に自己紹介の方法で試行錯誤しています。しばらく「アオキメソッド」と名づけた握手方式で行っていましたが、今年は趣向を変えて「お悩み相談会」を行いました。これも確かアオキ先生に伝授してもらった方法だと思いますが、ずいぶん前でうろ覚えだったので、以下のようにやりました。

・4~5人からなるグループを作る。

・ニックネームを書いた名札を作り、以後はそのニックネームで呼び合う。

・まず順番を決めて、簡単な自己紹介をする。

・各自に1枚ずつカードを配る。

ここまでやってから、以下のようなルールを説明して「お悩み相談会」を始めます。

・先ほど決めた順番で、自分が現在抱えている悩みをみんなに説明する。(悩みは何でも良く、「いい美容院を知りたい」とか「履修って何」みたいな例を示す)

・悩みを聞いたら、それ以外の人が順に悩みに対してアドバイスする。

・一通りアドバイスを受けたところで、悩み相談した人が最も気に入ったアドバイスをした人を選び、自分のカードをその人に渡す。

・残りの人も順に悩みを話していき、終わったところでカードを一番持っている人に対して表彰する。

こんな感じで行いました。

トータルで30分あまりかかったでしょうか。最初はぎこちなかったグループも5分くらいで打ちとけ始め、かなりアイスブレイクの効果があったように思います。悩み相談も2周りずつ行うくらい会話も弾んでいました。

一方で1周りすら完了しないグループもありました。予期はしていたのですが、なかなか「悩み」を話すことのできない人で止まってしまい、全体が気まずくなって続かなくなったのです。全員の緊張を解いてから、どんな状態になったかを把握させ、何とか続けられるように仕向けました。

躓いたグループがあったものの、全体としては、短い時間でよい結果を得たのではないかと思います。「悩み」と「アドバイス」をきっかけに互いの類似点を見出し、親近感も得られたようです。内気でおとなしそうな女の子がカードを一番集めたりと、1、2回の授業ではわからないキャラクターも見えてとても面白かったです。