SimpleBoxes

ちょいメモ 2009.04.09

イースター連休

明日からイースター連休になります。

イースター連休の始まりは例年都市部から出て行く方面が渋滞するのですが、今年は学校ホリデー開始と重なってやや早めに渋滞が始まるようです。

と言っても日本の渋滞ほどの激しさはありませんけれども。

イースターエッグ

職場でイースターエッグ (チョコレート) をもらいました。

ラップトップの横に置いていたら、ラップトップからの熱でいつの間にかゆるゆるになってました。危ない、危ない。

Serene Bach 3 開発進捗

Serene Bach 2 からデータ変換ツールの Ajax 部分を思案中です。

基本的には Serene Bach 2 同様、再構築の Ajax 部分をそのまま再利用するのですが、JavaScript を共有して利用するか、継承して利用するかで少し悩みました。

現在、継承はしないで、同じオブジェクトを共有して利用する方向で実装しています。

継承も検討した名残 (?) で JavaScript で継承を行なう関数 extend も追加しています→JavaScript継承パターンまとめ

スポンサーリンク

着衣泳

着衣泳ってご存知ですか。

そのまんま「衣服を着たまま泳ぐこと」です。服を着た状態で、体力を温存しながら浮き続けることは、水難事故から身を守る手段として最も有効な技術と言えます。

日本でも最近「着衣泳」を学校でやるところがあるようです。どんな泳ぎ方よりもまず最初に優先して教えた方がいいんじゃないかと思うぐらい大切な技術だと思います。

娘は現在毎週一度の水泳教室に通っています。そこでは 1 ターム (およそ三ヶ月) に 2 回ほど「water safety」のレッスンがあります。どんなものか一度様子を見てみたいと思っていました。

[写真] Water Safety

奥で泳いでいるのが娘。ピンク色の上着を着て泳いでいるのが分かるでしょうか。

レッスンの基本的な流れとしては、

  • 服を着たまま泳いでみる [前・写真]
  • 助けの呼び方
  • 溺れている人を助けるには
  • 身の回りにある浮き具 [後・写真]
  • ボート転覆のシミュレーション

という感じでしょうか。

それほど長い時間ではないので、やや詰め込んでいる印象もなくはありませんでしたが、丁寧に説明していました。

[写真] 子供に説明する先生

水泳教室なので、実際にやってもらうという実技的な内容も多いのですが、思ったよりも先生がしっかり説明しているのが印象的でした。

子供向けレッスンなので、まず大事な点として、大人と一緒に泳ぐという点を強調していました。

着衣泳とは言いますが、実際には体力を温存しながら浮き続けることが大事なようです。着衣した状態で浮くこと自体は、むしろ着衣しないときよりも大変ではない様子です。私も機会があれば、意識しながら着衣泳を体験したいと思います。

スポンサーリンク

リノベーションは楽じゃない 総集編 - 子供部屋

夏時間 (Day Light Saving) も終わり、日本との時差が 3 時間になりました。

昨年末に触れたきりでしたが、リノーベーション (改築) 作業はほぼ全て終了しています。

大きなリノベーションだったので、色々見所 (?) はあるのですが、いくつかピックアップしていきたいと思います。

今回はランドリーから華麗に変身を遂げた子供部屋。

ほぼ同一地点から撮ったショットです。

[写真] 子供部屋・リノベーション前後

改築前では正面奥にある扉の先が勝手口のような形になっていました。

改築でそのスペースは部屋の一部になり、ちょっと出っ張ったような形になっています。

この改築後の写真ではすっきりしていますが、現在は娘のベッドが置かれて、また娘の大切なものが所狭しと収納 (?) されているので、かなり狭くなっています。

壁・天井の漆喰 (プラスター) 塗り、床のヤスリがけ (サンディング) は基本的に嫁さんが担当して、仕上げのペイントを私が担当しました。

子供部屋は改築行程の中でも後の方でしたので、嫁さんのプラスター技術もかなり洗練されてきていて、自己満足ではありますが、結構奇麗に仕上がっています。

ペイントの色は娘が選びました。青みがかった色でやや涼しげな感じですが、不思議と「冷たい」印象は薄くて (おそらく照明の影響もあると思います) 可愛らしい感じ。娘もとっても気に入っているようです。

これまでの関連記事

スポンサーリンク

コマンドプロンプト (cmd) 覚え書き

バッチファイル (.bat) は、定型作業を自動化するのに便利なので、それなりに利用します。

ディレクトリ内のファイルに対して個々にある操作を行ないたい

dir/b オプションを利用して、テンポラリファイルにファイル一覧を書き出し、for ループで回します。

例えば、develop ディレクトリ内のファイル・ディレクトリに対して svn cleanup / update を実行するバッチファイルは以下の通り。

dir /b develop > _tmp_file.txt
for /f %%L in (.\_tmp_file.txt) do  (
  svn cleanup develop/%%L
  svn update develop/%%L
)
del _tmp_file.txt

遅延環境変数の展開

コマンドプロンプトを利用する際、

cmd /v:on

を実行すると、「遅延環境変数の展開 (delayed environment variable expansion)」を有効にすることができます。

「遅延環境変数の展開」を有効にしておくと、バッチファイル内で環境変数をローカル変数のように扱うことができます。

環境変数をバッチファイル内に局所化するコマンドとして

setlocal

がありますが、その引数に enabledelayedexpansion を指定すると、バッチファイル内で「遅延環境変数の展開」を有効にすることができます。

なお、遅延評価された環境変数は以下のコードのように !VARIABLE! と「%」の代わりに「!」を使います。

setlocal enabledelayedexpansion
for /f %%L in (en ja fr) do  (
  set RSRC_DIR=resource\%%L\
  svn update !RSRC_DIR!
)
endlocal

バッチファイル内での入力受付

set/P オプションを利用すると、バッチファイルでユーザーに処理を尋ねるプロンプト表示を利用することができます。

例えば、引数が指定されていない場合にオプションを尋ねたい場合には

if "%1"=="" (
  set /P USERINPUT=option? 
  if not '%USERINPUT%'=='' set USERINPUT=%USERINPUT:~0,3%
) else (
  set USERINPUT=%1
)
if '%USERINPUT%'=='' goto usage

のようにします。

if not '%USERINPUT%'=='' set USERINPUT=%USERINPUT:~0,3%

がややトリッキーですが、これは入力された内容の最初の 4 文字だけを利用するためのおまじないです。

set/P オプションはファイルからのリダイレクトも利用できます。

例えば、file の内容を %FILEINPUT% にセットする場合、

set /P FILEINPUT<=file

のようなコードになります。

スポンサーリンク

Serene Bach 管理画面の構成

管理画面を処理する Admin アプリケーションは、Serene Bach 3 でも中核と言えるアプリケーションです。

その核となるモジュール sb::App::Admin は Serene Bach 3 のアプリケーションモジュール群の中で最も複雑な構造になっています。

[図] Admin アプリケーションの基本フロー

メニュー構築

メニュー構築は主に初期化処理にあたります。有効な管理用プラグインをロードして、メニューを構築する処理が含まれます。

ログイン処理

ログイン処理は基本的に sb::Session というセッション管理用モジュールを使って行なっています。

ページ処理

管理画面はそれぞれのメニューを「ページ」として処理するページドリブン的なアプローチを取っています。

基本的には各メニューごとにモジュールがあり、それぞれのモジュールがページ処理を行ないます。sb::App::Admin では、状況に合わせて適切なモジュールを起動します。

管理画面モジュールの基本コード

管理画面の各モジュールは、処理する内容・出力する内容について、ページ内容のみを考慮すればよい構成になっています。

そのため、プラグインも含め管理画面の個々のモジュールは、それほど複雑な構成にはなっていません。

sub callback
{
  my $self = shift;
  return ( $self->regi() )
    ? $self->_update(@_)
    : $self->_display(@_);
}
sub _update
{
  my $self = shift;
  my $msg = undef;
  # 
  # クライアント (ブラウザ) からの入力を処理する
  # 
  return $self->_display('message'=>$msg);
}
sub _display
{
  my $self = shift;
  my %param = (
    'message' => undef,
    @_
  );
  my $temp = sb::Template->new($self->load_template('file'=>TEMPLATE));
  # 
  # 出力内容を処理する
  # 
  $self->common_parts($temp);
  $self->set_message($temp,$param{'message'});
  return $self->set_main($temp->output);
}

ほとんどの管理画面モジュールは、上述のようなコードを踏襲しています。管理用プラグインも同様です。

関連記事

スポンサーリンク

Serene Bach フレームワーク

Serene Bach 3 は sb モジュールを起点としたフレームワークで構成されています。

このモジュール群は「Spica」という形で汎用化して公開しています (ただし、現在はバージョンが若干古めです)。

アプリケーションは sb モジュール内の run メソッド (sb::run) を通して起動します。

[図] CGI スクリプトの基本フロー

クライアントからアクセスされる CGI スクリプト自体はとてもシンプルな構成になっています。

use strict;
use lib qw(. ./lib ./ext);
eval {
  require sb;
  sb->run('app' => 'Main');
};

実際のスクリプトには、もう少し装飾がありますが、基本的なコードはこれだけです。

sb::run はアプリケーションを発動する起点になります。条件に応じて、起動するアプリケーションを変更する場合もあります。

上記のコードの場合、基本的には「Main」というアプリケーションを起動するように動作しますが、場合によって Main ではないアプリケーションが起動する場合もあります。

Serene Bach 3 では、主なアプリケーションとして以下のものがあります。

Admin
ウェブログの管理画面を処理します。
Main
ウェブログを動的に出力します。プレビューなどにも利用されます。
Counter
カウンターの表示、アクセスログの取得を行ないます。
Install
インストール・アップグレード処理を行ないます。
Xmlrpc
XMLRPC の処理を行ないます。

他にもありますが、とりあえず主だったものをここでは挙げました。

管理画面を処理する Admin アプリケーションは、Serene Bach 3 のアプリケーションモジュール群の中で最も複雑な構造になっています。これについては後日、改めて触れたいと思います。

関連記事

スポンサーリンク

英語に関してやったこと/やっていること [2008 年度版]

ILETS 向けの勉強

ニュージーランドへの永住権申請の際に IELTS (International English Language Testing System・アイエルツ) の受験がほぼ必須です。

IELTS を受けたのは 2001 年から 2004 年にかけて。Overall Band Score は 4.5 (もしかしたら 4.0 だったかも) から 6.0 まで上がりました。

[追記] やっぱり 4.0 だったらしいです。

IELTS は

  • リーディング
  • リスニング
  • ライティング
  • スピーキング

から構成されます。

リーディングとリスニングは、基本的に問題集と模擬試験をメインに。

私が受けたのは IELTS の General カテゴリーでしたが、Academic 向けの資料はあっても General 向けの資料はあまりありません。

当初よりも資料は増えたとは思いますが、やはり今でも主流は Academic の方でしょう。リスニングは Academic も General も共通なので、IELTS Preparation and Practice: Listening and Speaking のような教材はどちらでも使えます。

同じ問題集を何度か繰り返したりはしていますが、基本的にはできるだけ数をこなすことを目標に勉強しました。

スピーキングとライティングは英語の先生に見てもらいます。

日本にいた頃は Gaba を通じて個人レッスンを受けていました。

先生と会うときには、やはりスピーキングに重点を置くようにします。ライティングはメールを通じて行なったり、宿題で行なって添削内容の要点を聞く程度にします。

こと IELTS に関して言えば、ライティングは単語数の制限がきつかったです。

最初の頃は、沢山の単語を使う便利な言い回しは覚えておいて、必ず使うようにしていました。

例えば、「〜関して」という意味合いの言い回しは、使い勝手がいいので比較的どんな文章でも使うことができます。

Regarding 〜,

だと一単語ですが、

In terms of 〜,

だと三単語になりますし、

As far as 〜 is concerned,

だとそれだけで、五単語を使うことができます。

リスニングの強化

英会話する上で一番重視したいのがリスニングです。

とりあえず、相手が何を言っているかが分かりさえすれば、余裕が持てます。

リスニングは、とにかく数をこなした分だけ向上するので、可能な限り英語を聞く機会を増やすことを考えます。

外では MD プレイヤーで英会話の教材を聞いたり、家では NewsTalk ZB のオンライン放送を聞いたり、VOA を聞いたりしていました。

今だと podcast という便利なものがあるので、教材には困らないんじゃないでしょうか。

私はなんと言っても Mac 関連のニュースがやはり一番頭に入ってきやすいので、Macworld podcast [iTunes] を購読しています。

あと Apple Keynotes [iTunes] もかなりオススメです。動画として配信されていますが、普通に音声だけ聞いても十分です。まず動画で見て、あと音声で繰り返し聞くという感じでしょうか。

社内でのコミュニケーション

「メールを使う」のは有効です。

インプットとアウトプット双方にある程度時間をかけられるのがなんと言っても利点です。また、記録に残るという点も強み。

相手に口頭で確認したりした後も、メールを送ったり、社内で利用してるバグトラッキングシステムに記録を残すように心がけています。後で「そんなこと言っていない」とか余計なトラブルを回避するためにも有効な手段だと思います。

電子辞書は必須。私は PC 上では英辞郎を愛用しています。

会話の際には何かしら書く手段を用意しておくことが大事。ホワイトボードでもノートでも構いません。

発音が苦手でも書いて伝えることができますし、英語が怪しかったら、すかさずイメージで伝えることができます。

何ならその場でコーディングしちゃってもいい訳ですし。

そうそう、私の最大の強みは「プログラミング言語」という言葉を知っていることだったりします。

イメージで伝えるのはかなり有効な手段です。拙い英語でもイメージと組み合わせることで伝達能力が向上します。

そういう意味では、効果的な図を書く練習はしておいた方が得かもしれません。

スポンサーリンク

ログ漁り

ネタ探しのつもりでログを漁っていたら読みふけってしまいました。

今の場所に移転した際、ログの移行はしていないのですが、手元には 1997 年からのログが残っています。

皆さんは書いた日記を読み返したりしますか。

スポンサーリンク

Unknown error

データベースに正しくアクセスできませんでした。Serene Bach が正しくインストールされているかご確認ください。

[図] Serene Bach 3 エラー画面

現在、Serene Bach 3 のインストーラを作り込んでいる最中です。

これまで Serene Bach 3 のバージョンアップで、データベーステーブルの更新が必要な場合、install.cgi に再度アクセスする必要がありました。

この部分の仕様を見直して、バージョンアップ後、データベーステーブルの更新が必要な場合は、管理画面から自動的にデータベース更新画面に移行できるように変更しています。

そのついでにインストールチェックを行なうようにして、インストール前に管理画面などにアクセスすると上述したようなエラーが出るようにしてみました。

スポンサーリンク

普段 Mac OS X を利用しているユーザーが Windows を利用するときに知っておくと便利なアプリケーション・かざぐるマウス

Windows から Mac OS X に switch したユーザー向けの記事はよく見かけます。

その逆に、普段 Mac OS X を利用しているユーザーが Windows を利用するときに知っておくと便利な TIPS とか アプリケーションって何かあるでしょうか。

あまりないような気もするんですが、個人的に不便だなぁと思う Windows の仕様のひとつに「非アクティブなウィンドウに対してマウスホイールが動作しない」というのがあります。

それが非アクティブなウィンドウだけならまだいいんですが、アクティブなウィンドウでもフォーカスが当たっていないペインに対してマウスホイールが動作しない場合があります。というか、その代表格がエクスプローラです。

Windows XP での仕様です。Windows Vista ならびに Windows 7 では、どうなっているのか分かりません。

エクスプローラを開いて、フォルダペインを有効にします。

右側のメインのペインに表示されたフォルダないしファイルをクリックして選択します。

続いてマウスカーソルをフォルダペインに持っていくと、マウスカーソルの当たったフォルダに下線が表示されます。

この状態でマウスホイールを動かすと、どうなるでしょう。

[図] エクスプローラウィンドウ

フォルダペインがスクロールするのではなく、右側のメインペインがスクロールします。

Mac OS X ではマウスホイールは基本的にマウスカーソルのある部分に対して有効ですが、Windows ではアクティブなウィンドウのアクティブなペインに対して動作するようです。

アプリケーションに依存するかも知れませんが、エクプローラがその動作ですので、標準的な動作と言って差し支えないでしょう。

[図] マウスカーソルとスクロール動作対象

フォルダペインをホイールでスクロールさせるためには、一度フォルダペイン内をクリックする必要があります。

細かい部分ですが、Mac OS X を使い慣れていると、ここら辺の動作は染み込んでいるため、想定した内容とのギャップを感じて、ストレスになります。

私はその現象を解消するためにかざぐるマウスを使っています。

スポンサーリンク

10/25