pot casting

英語のカタカナ表現なんてどうでもいいといえばどうでもいいことなのですが、たまたま身近なところで単純ミスを見つけたのでYahoo!で検索したところ、結構あるもんですね。「ポットキャスティング」

全く関係ないですが、高校時代の先輩がair checkを「エアチック」と呼んでいたのを思い出しました。

そういえば私も今日、MaxtorのHDDを買うときに「マクスター」と言ったところ、店員さんに「マックストア」と直されました。

本当にどうでもいいと言えばどうでもいい話です。

ワールドカップ

テレビはおろか携帯さえつながりにくい所に行ってましたので今日がその日とは知りませんでした。

そういえば8年前は、たった1勝することさえ難しいものだと言われていたのを懐かしく思い出します。

エレベータ怖い

もともとエレベータは好きではないのですが、最近報道されるいろんなニュースを見ると、誤動作するんじゃないかという漠然とした不安が現実となりそうで余計に怖くなってきます。

数年前にモスクワ大学を訪問した際、スターリン様式の堂々たる建築物の中で、エレベーターがかなり危険な様子で動いていました。

3(4?)基あるエレベータのうち1基は故障で使えず、別の1基に10名くらいで乗り込みました。すぐに動かないので「なんだかおかしいな」と思ったら、「ガクッ」と(感覚的に)10cmほど「落ち」ました。その後上昇をはじめ数階上って無事に停止しました。

このときの車内の雰囲気は恐怖の体験としていまでも脳裏に焼き付いています。落ちたのが10cm程度で本当に良かったです。

ロシアの恐怖体験として冗談話にしていたのですが、身近なところにも危険がありそうで心配です。

ワールドカップ

今日ちょっと早めに帰宅しようとしたら、同僚に「ワールドカップですか?」と尋ねられました。うちにはテレビがないので見ようにも見れないのですよ。いつもどおりの穏やかな夜です。

SeaSideでのwebアプリ製作

SeaSideを使ってwebベースのアプリケーションを作ろうとしています。

インストールは、梅澤さんのSeaSideJページにあるインストールイメージをそのまま使って行いました。

http://swikis.ddo.jp/umejava/22

とにかく文字でも表示できるものをと思って、簡単なものから作っています。チュートリアルにあった、WACounterを参考に、以下のようなクラスを作ってみました。

WAComponent subclass: #MySeaSideApp1
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'SeaSide-MyApp'

これがベースとなるクラスです。何の機能もいらないのでインスタンス変数も空です。

次に、インスタンスメソッドを登録します。

initialize
self session registerObjectForBacktracking: self.

WACounterクラスで実装されていたのでコピペしましたが、デバッグ用のものでしょうか。なくても動くかもしれません。

renderContentOn: html
html heading: 'MySeaSideApp1'.
html text: 'Hello!'

これがキモとなるメソッドです。drawOn:のように、引数のオブジェクトhtmlに対してページを形作るメッセージを送っていきます。

今度はクラスメソッドを登録します。

initialize
self registerAsApplication: 'MySeaSideApp1'

これがこのクラスをアプリケーションとして登録するためのもののようです。

canBeRoot
^ true

このメソッドでtrueを返すと、config画面のGeneralセクションでRoot Componentの一覧に現れるようになります。

これで準備は完了です。次にwebブラウザからSeaSideにアクセスして実際の動作を試してみます。

http://localhost:9090/seaside/config

上記のURLを開くと、IDとパスワードを尋ねられます。インストールのままならID=admin,パスワード=adminとしてconfig画面を開きます。

add entry point:の覧にMySeaSideApp1と入力し、TypeをSeaSide ApplicationとしてからAddを押します。すると、Application: MySeaSideApp1という画面に移ります。画面下部にGeneralというセクションがあるので、このRoot ComponentにMySeaSideApp1を選びます。

add…で入力したものはアクセスのためのエントリポイントで、後者が実行するアプリケーションというわけですね。画面最下部のDoneボタンを押せば、config画面に戻り、/seaside以下の一覧にMySeaSideApp1が現れているのがわかります。

MySeaSideApp1をクリックすると、

MySeaSideApp1
Hello!

という画面になります。renderContentOn:メソッドの内容と比べてみれば、どういうことなのかわかりますね。

クラス定義と4つのメソッドで、実際に動くwebアプリケーションが作れますし、生成するhtmlコードもプログラムでいかようにも操れるので結構便利です。

まだ少ししか使っていませんが、SeaSideで便利そうなのが実際のオブジェクトの中身をブラウザから確認できる点です。画面の一番下に、Toggle Halosというリンクがあります。これをクリックすると、ブラウザ上でハロが表示されます。目のボタンをクリックすると、実行中のセッションを扱うオブジェクトの内容を覗き見ることができます。これを使えば、アプリケーション動かしながらオブジェクトの変化の様子を知ることができるのです。

これから少しずつアプリケーションを作っていこうと思っています。

SeaSide

いつも遅ればせながら、SeaSide(実際は梅澤さんのSeaSideJ)を使ってみることにしました。

http://seaside.st/

http://swikis.ddo.jp/umejava/22

アナウンスがあってからすぐにダウンロードしたものの、最初はあんまり意味(意義?)がわからず放ったらかしでしたが、チュートリアルを読んだりクラスをブラウズしてたら、突然その素晴らしさがわかりました。

http://beta4.com/seaside2/tutorial.html

Smartyよりずっと(自分にとって)生産性高そうですし、何よりSmalltalk/80でコードを書けるのがいいですね。とりあえず、SeaSideで何かを作りながら自分なりに理解を深めていこうと思います。

作りたいというか、作らなければならないのが簡易CMSシステムです。私の雑務の一つにwebサイトを構築する仕事があって、webページを10日おきに作成する必要があります。この作業がなかなかしんどく、確実にある程度の時間を拘束されてしまうのです。

できれば、この部分を簡素化していきたく、SmartyやらPHPの教科書やらを眺めていたのですが、どうも気が向かない仕事のせいか本気になれません。(他に何の役にたつのかと考えると…)

SeaSideならば自分をごまかすことなく(それでも半分くらいごまかさないとならないでしょうが)ウェブサイトを構築できそうです。久しぶりにちびっとやる気が出てきました。

キーボード

前回の続きです。

たまたま別のところで同様のことを書いたら、同じような反応が帰ってきました。

一人は、PC6001、ぴゅー太を思い出したそうで、もう一人は、ソードのM5を思い出したそうです。

どうやら新しいMacBookは、昔のパソコンを連想させる懐古趣味的な雰囲気を持っているみたいですね。

appleのウェブサイトではなかなかその味わいの見られないのが残念です。

Mac Book

今頃になってMac Bookを店頭で触りました。MacなのにXPが動いているのを見るのはなんだか変な感じですね。

それにしてもMac Bookのキーボードは何とかならないのでしょうか。いにしえのシンクレアとかのキーボードを思い出してしまいました。横にあったiBookの方がよっぽど高級感があるように見えました。実際使ったらどっちが使いやすいのでしょうねぇ。Mac使う人はそんなにキーボードにこだわらないのかな。

蚊に悩まされる

そろそろ蚊がうるさくなってきました。例年に比べて早い気もしますが、このところの陽気のせいか蚊も元気です。

昨年から蚊帳を張ることにしたのですが、今回最悪なことに蚊帳の中に蚊が入ってきてしまったのです。蚊帳の中で蚊を探すのは無理な話で、結局昨晩は蚊帳を外して寝ました。

蚊取り線香も殺虫スプレーも臭いだけであまり効果がなく、悩ましい毎晩を過ごすことになりそうです。

AIBOとのUDP通信

以前squeak上に作成したシステムで、AIBOとの通信がうまくいきませんでした(たいていうまくいくけど、たまにおかしい。特にUnixやMacで)。そこで次なる新システムに向けて実験を兼ねた改造を行っています。

昨日行ったのは、AIBOから定期的にUDPのブロードキャストパケットを送信し、squeak側で受けるというものです。これが結構、というよりかなり、うまく行くようになりました。

以前までは、squeak側から特定のAIBOに向けたUDPパケットを、AIBO側が受け取り情報をつけて送り返すというものでした。しかし、通信相手のAIBOがいない場合に固まったり、別のTCP通信でエラーが頻発するといった不具合がありました。

そこで、AIBO側で送信したブロードキャストパケットを、squeak側のAiboWatcherなるオブジェクトが一括して受け取り、適切なAiboSessionオブジェクトに振り分けるようにしました。ただそれだけなのに、以前のように固まったりTCP通信でエラーが発生することがなくなりました。(UnixやMacでも同様)

多分私がsqueakのUDP関連のメソッドの使い方を誤っていたのでしょうが、いままでの不安定さがうそのようになくなりました。といってもたいした使い方をしていないので、UDP送信直後に受信することで、何か不具合を発生させていたのかもしれません。

これがうまくいったので、Tetoriと通信するようにしました。TetoriはAIBOを使ってAIBOのモーションを作るAIBO用のソフトなのですが、このソフトを使っている際の関節値がリアルタイムに取得できるようになりました。これで、squeak上でのモーション作成がかなり楽になるはずです。

同様にAIBOの各種センサー情報も取り込めるようになるでしょう。こうしていけば、今年の目標である、AIBOとsqueakをもっと仲良しにすることへ大きく踏み出せると思います。