ワールドカップ

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

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をもっと仲良しにすることへ大きく踏み出せると思います。

平均年収

かれこれ3年ほど前にロシアに行ったとき、一緒に行った同僚や学生さんがガイドさんにいろいろ質問をしていました。社会学系を専攻している人が多かったためか、ロシア人の平均年収はいくらかとか、平均的に自動車を持っているのかとか、そういう質問が多かったのです。

ガイドさんは、「そうですね~車はほとんどの家庭にありますよ」とか「ダーチャと呼ばれる別荘もかなり持っていますよ」とか、そういう答えかたをしていたのですが、平均年収については困った顔をしました。

「何で平均が知りたいのですか?」「年収の平均値に意味がありますか?」と聞かれると、今度は質問した側が逆に困ってしまいました。

「全体的な様子が知りたいから」と応じると「平均だと余計わからないですよ」との答え。

要するに、ロシアでは富裕層と一般層の収入の差が著しく、さらに一般層でもかなりの年収の違いがあるのでひとくくりに年収の平均値を出したとしても、その年収に該当する層が存在しないということらしいのです。なるほど。

統計学を考えればあたりまえのことですが、普段から無意識的に全体の推計として平均値を使っていたことを認識させられました。これが身体に染み着いてしまっているような気もしました。

あと、もう一つの理由としては、公式の年収(という数値)の信憑性にも疑問があるそうです。というのもどの家庭も何らかの副業があり、税務署には知らせていない場合も多くあるからだそうです。

私は平均と同様、所得を申告して税金を払うというのも身に染み着いちゃってるかもしれません。

Wikiのお手入れ

Wikiシステム入れ替え病はなんとか治って、とりあえずKamiWikiに切り替えることは止めになりました。

かわりに利用しているFSWikiのバージョンを3.6.0に上げ、ついでにテーマも変えてみることにしました。以前までのシンプルなものから、カラフルなものに変更です。テーマ替えは部屋の模様替えのようで気持ちも一新しますね。休日がこれでつぶれました。

野良仕事

今日は畑の手入れをしにいきました。前回のイベントがゴールデンウィーク中に行われたため、私は参加することができなかったので、久しぶりの活動です。

ヘチマを植えるということだったのですが、どうも手配を間違えたらしく3人しか集まりませんでした。そこで、ぼうぼうに茂った雑草の引き抜きが今日の仕事となりました。

炎天下といってもいいほどの中、3時間ばかり集中して草むしりです。あぶなく日射病になりそうだったので、木陰に入って休憩を取ると心地よい風と、このところの雨上がり後のよい景色とで疲れが癒されました。

昼食は近くの食堂でとり、参加した学生さんと就職活動の話題になりました。本当にこの時期の学生さんは大変ですよね。