2010年7月22日木曜日

LSL製品のメンテナンスで楽をするためにw(FairySnowのラジオの秘密?)

おはよーございます^^

FairySnowでは、ラジオを何機種も作って売ってます。
ベーシックな機能だけのラジオから、ShoutCastに対応して演奏中の曲名が表示されるタイプの高機能なものまで機能や形によって複数の機種があるわけですが、こうやって機種が増えてくると、たとえばスクリプトにバグがあったりすると、しかもそれが複数機種に共通する部分のバグだったりすると修正箇所が一気に製品数分に膨れ上がってしまうわけですから大変です。仕方なく製品の数だけ同じ様な修正を繰り返し適用していくわけですが。。。^^;
こういう、複数の製品にまったく同じ修正を組み込む場合って単純作業の繰り返しに陥りがちで、これってある意味、「機械に使われてる」典型的なパターンですよね~^^;
最初の修正はすっごい頭つかうんで多分単純ミスっていうのは紛れ込む余地が少ないんですけど、同じ修正をいくつものソースに繰り返し適用してるとその内に作業に「慣れ」が発生して単純ミスによる新たなバグの作り込みの原因になったりとかして・・・・^^;;

そういう部分のバグ作り込みを防止する方法っていうのは人それぞれのノウハウに属する部分の話なのかもしれませんが、たとえば私の場合はこういう問題に対処するために極力ソースの共通化という手法を使って問題解決に努めるようにしています。

FairySnowのラジオっていろんな機種がありますが(えと、何機種あったっけ・・・w)、実はLSLのソースリストはすべての機種を通じても一つしかないんです@@; 。一つソースを修正したら、あとは基本的に他のラジオにコピペしてお終いw ソースの一番最初に、このスクリプトは○○という製品として動きなさいよ~って指示を与えてやると、あとは黙々とその機種になりきって動き出すという・・・w(え?高いほうのラジオ買ったのにぃだまされてたっっっとか言わないで^^;;; )
実際、ソースはno modなんで皆様が中身を覗いて直接確認していただくことはできないんですけど、例として極一部分だけを抜粋して公開してみます。実際に動かしているソースの一部ですw


// 動作モード設定 model = ?
// 0 : basic radio
// 1 : SHOUTcast floating display model
// 2 : 'Text Board radio' or 'Car radio'
// 3 : DJ booth carbon with radio
// 4 : SHOUTcast receiver
// 5 : SHOUTcast receiver ilumi
// 6 : SHOUTcast receiver DX
// 7 : SHOUTcast receiver LP
integer model_basic = 0;
integer model_SHOUTcastFloatingDisplayModel = 1;
integer model_TextBoardRadio = 2;
integer model_DjBooth = 3;
integer model_SHOUTcastRadioNormal = 4;
integer model_SHOUTcastRadioIlumi = 5;
integer model_SHOUTcastRadioDx = 6;
integer model_SHOUTcastRadioLp = 7;
//-------------------------------
integer model = model_SHOUTcastRadioLp ;
//-------------------------------

こんな感じで、ソースの一番最初の部分で動作モードを設定しておいて、あとは機種毎に違う動きが必要な場合だけ、このフラグを見ながら動作の振り分けをしています。
まぁ、性能的に問題が出るとか、いろんなご意見の方もいらっしゃるかとは思いますが、ぶっちゃけSLのラジオって土地のメディアURLを設定するのが一番重要な機能ですからね~w 動作速度はあまり問題にはならないかと^^;

ここで、ソースを完全に共通化するメリットとデメリットを思いつく範囲で並べてみました。
[メリット]
- バグ修正/機能追加のためのソース修正が一回で済む。
- 修正後の製品テストにかかる手間を大幅に削減できる。
- 製品間における仕様の統一が図りやすい。(たとえばFairySnowのラジオはセッティングノートカードのフォーマットが完全に共通化されており、機種による違いはまったくありません。これはラジオをグレードアップする時にかなり便利^^

[デメリット]
- ソースが複雑化する恐れがある。
- スクリプトの動作が緩慢になる恐れがある。

複数の製品にまたがる部分でスクリプトのバグが発生した場合、その製品数分同じ修正を延々と繰り返し行い(しかも大抵微妙にソースの作りが違ってたりする事も多くて単純にコピペでは済まないことが多いw)、動作確認も同じようなテスト項目を製品数分延々と繰り返し行わざるをえないとか^^;
しかもバグ対応だったりするとあんまり悠長に時間かけて対処するなんてことできない場合も多いし。
こういったスクリプターさんの悩みを一気に解消する(かもしれないw)ソース共通化。皆様もいかがですか?w

p.s.1) ちなみに、ソースは共通化してありますが、その入れ物であるプリムの形までは共通化してありません(てか、そんなことできませんw)。なので、例えば何らかの手段でフラグを書き換えられたとしても別の機種としてちゃんと動作するってことはないですw

p.s.2) FairySnowではもう一つシリーズ物としてフォトスタジオがあります。こちらの製品群は私がLSLの勉強をしながらいろいろと技術的な実験を繰り返しつつバリエーションを増やしてきた製品ですから、残念ながら今現在でもソースの完全共有化には至っていません^^;見た目はラジオよりも統一感あるのに・・・ねw

0 件のコメント:

コメントを投稿