2010年2月8日月曜日

XP祭り関西2010に参加して来た

XP祭り関西2010に行ってきました。

結構な人数のプログラマ、エンジニア、リーダーなどの人たちが、アジャイルについて深く体験した日だった。

アジャイルや、チケット開発駆動について、色々な実例を交えて分かりやすく楽しく聞けた。
アジャイルについて知っていても、まだまだ実践しているとは言えなかったので、もっと勉強の必要性を感じた。

その中でも様々な金言が!

  • 製造業では、製品が完成した時点で最高品質でそれ以降は陳腐化する。サービス業は、常に現時点での最高品質。
  • ソフトウェア->オープンソース、ハードウェア->クラウド。もはや何の制約もなくなってきた。
  • 不完全な人間が、間違いを犯さない計算機を相手にしなくてはならない。
  • リーダーは皆の0.5歩先を歩かなくてはならない。
  • チケット駆動開発->バグトラッキングシステムを障害管理ではなく、タスク管理に使う
  • ソフトウェア開発の諸問題は、ソフトウェアで解決。
  • 小さくする(小さな組織。小さなコミュニケーション。ペアプロ。小さくコミット。小さく振り返る。小さなビジネス。小さな変化)

いや-、Dear XP、フォークソングでちょっと切ないところもありますが、感動してしまいました。ラブソングがあるのなら、プログラムプロジェクトのことを歌にしても良い。
楽しくソフトウェア作り。ソフトウェア作るのは好きだけけど、テストは苦しいとか思っていた自分が恥ずかしい。
アジャイル開発が、当たり前にできるように、これからも頑張っていきたい。
カンパ代500円で、セミナーも聞けて、懇親会(4000円)もあり、ビンゴゲームではもれなく本が当たるという、なんだかお得すぎる。

2010年2月1日月曜日

「前へ」と「次へ」のボタン制御

 以前、最初の画像の時には、前へのボタンが無効、前と次の画像に移動できる時は、2つのボタンが有効。最後の画像の時には、次のボタンが無効になるというボタン制御をFLASHでお願いした。


(前へと次へのボタンは、こんな画像)



FLASHプログラマ氏は、「前へ」と「次へ」のボタン制御をActionScriptでこう書いていた。

//ボタンの表示
if (current_page == 0)
{
buttons.btn_prev._visible = false;
buttons.btn_prev_disabled._visible = true;
}
else if (current_page == total - 1)
{
buttons.btn_next._visible = false;
buttons.btn_next_disabled._visible = true;
}
else
{
buttons.btn_prev._visible = true;
buttons.btn_next._visible = true;
buttons.btn_prev_disabled._visible = false;
buttons.btn_next_disabled._visible = false;
}

if文を読み解くと、
1つめのif文には、current_pageが0の時は、一番最初の状態なんだから、「前へ」のボタンは使えないね。
2つめのif文には、最後の状態なんだから、「次へ」のボタンは使えないね。
最後のif文は、それ以外の状態は、「前へ」と「次へ」のボタンは使えるよという意味である。
FLASHのボタンは全部グラフック・シンボルなので、
EnableとDisableのそれぞれのボタンのvisibleプロパティをbool値で制御している。

このプログラム、一見動作しそうなんだけど、動かない。
もし画像が1枚もなかった場合はどうだろう。
current_pageは0、totalは、0なので1つめのif文に行く。ただ、「次へ」のボタンの状態は変更しないので、
もし、「次へ」ボタンが有効になってしまっていたら、そのままの状態を維持することになってしまう。

さらに、もし画像が1枚しかなかった場合は?
current_pageは0の場合には、今度は「前へ」のボタンの状態を更新しない。

それにcurrent_pageにもし、-1が入った場合は?
current_pageにtotalより大きい数字が入った場合は?
その場合には、ボタンは有効になってしまいボタンを押したら、
画像ファイルの配列のサイズの範囲外となりエラーになるだろう(多分)。

こんな短いプログラムでも、条件がもれまくりである。
この場合には、current_pageの前後がどうなのかを考えて、ボタン事にif文を作成しなくてはならない。

// 初期条件。初期状態ではボタンは使えない状態
buttons.btn_prev._visible = false;
buttons.btn_next._visible = false;
buttons.btn_prev_disabled._visible = true;
buttons.btn_next_disabled._visible = true;

// 前のページが0より大きければ、「前へ」のボタンが使用可になる
if( (current_page-1) >= 0 )
{
buttons.btn_prev._visible = true;
buttons.btn_prev_disabled._visible = false;
}

// 次のページが画像の最大数より小さければ「次へ」のボタンが使用可になる
if( (current_page+1) < total )
{
buttons.btn_next._visible = true;
buttons.btn_next_disabled._visible = false;
}

という風に書くのが正しいだろう。