の形で呼ぶ。
//
// anchor_idはフレームを使う場合最低限各フレームごとに設定。お互い他のフレームを書換えたときにへんな干渉をさけるため。
// その他ページの種別毎などで変えてもよいが、あまり小分けにするとcookieが増える。
// 同じanchor_idで保存されるcookieは1セットのみ。でも単独ページ表示のサイトなら概ねこれで充分。
anchor_id = "anc_main";
noanchor = false; // bodyにanchorをしかけたときなど場合によって一時無効にするためのフラグ。
// アンカーの記憶。
function anchor_save(object_id, page_id) {
if(noanchor) { anchor_erase(); return; }
get_scroll();
setcookie(anchor_id+"_pid", page_id, 0);
setcookie(anchor_id+"_st", scroll_top, 0);
setcookie(anchor_id+"_sl", scroll_left, 0);
if(object_id) {
object_top = scroll_top + get_object_top(object_id);
object_left = scroll_left + get_object_left(object_id);
setcookie(anchor_id+"_oid", object_id, 0);
setcookie(anchor_id+"_ot", object_top, 0);
setcookie(anchor_id+"_ol", object_left, 0);
} else {
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
}
// アンカーの適用。
function anchor_apply(page_id) {
if((saved_page_id = getcookie(anchor_id+"_pid")) && page_id != saved_page_id) { return; }
get_scroll();
if((anchor_st = getcookie(anchor_id+"_st")) != "" && (anchor_sl = getcookie(anchor_id+"_sl")) != "") {
anchor_st = parseInt(anchor_st);
anchor_sl = parseInt(anchor_sl);
} else {
anchor_st = scroll_top;
anchor_sl = scroll_left;
}
if((object_id = getcookie(anchor_id+"_oid"))
&& (anchor_ot = getcookie(anchor_id+"_ot")) != ""
&& (anchor_ol = getcookie(anchor_id+"_ol")) != "") {
offset_top = (scroll_top + get_object_top(object_id)) - parseInt(anchor_ot);
offset_left = (scroll_left + get_object_left(object_id)) - parseInt(anchor_ol);
} else {
offset_top = offset_left = 0;
}
window.scrollTo(anchor_sl + offset_left, anchor_st + offset_top);
}
// アンカー消去。あえてとっておく必要がなければanchor_apply()後すぐ消去が望ましい。
function anchor_erase() {
setcookie(anchor_id+"_pid", "", -1);
setcookie(anchor_id+"_st", "", -1);
setcookie(anchor_id+"_sl", "", -1);
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
//-->
舞台技術情報
|
|
本番環境で求められることは?
そもそも本番環境で求められることは何かを考えてみる。 - Windowsの画面を表示しない
もしWindowsの画面が表示されてたなら演劇にのめり込むことができないよね。ちゃんとタスクバーとかは消さないと。
- 素早い立ち上げと撤収
立ち上げや撤収をすぐ行わなければならない。リハーサルの時間は限られているし、そこで時間食ってたらどうにもできない。
- 適切なエラー処理
例えば文字を流してる途中でいきなりブルスクとかなったらもう終わり。劇自体の進行が止まったり、まずお客が逃げていく。本番できちんと動作するものを作らないといけない。
- システムの設計を確実にする
不確定事項がある中での設計はリスクを伴う。仕様は絶対に確実に決めておき、それから動かさない。追加とかで切り貼りされたシステムはたいていバグを含んでいる。
- なにかあったらすぐにwarning
接続できなかった場合など、何かが起きたらすぐにwarningを送る。console.warnとかでもいい。とにかくすぐわかるようにする。そして、絶対に表示している内容など劇に関わることは変えない。たとえトラブルが起きても自律して動作するようにする。
- try...catchを使う
JavaScriptはエラーが起きると全体が止まる。だから、try..catchでエラーを捕捉する。そして、エラーが起きた原因をe.typeであらかじめ予測して決めておく。こうすればバグチェックも簡単。
- kioskモードの活用
キオスクとは、公共の端末など決められたの操作をしてはいけないシステムのこと。適切に設定すれば不適切な操作が少しは防ぐことができる。特にGoogle Chromeの場合はポリシーを定めておくと便利。というか絶対的に推奨。
- 落ちない
基本的なこと。絶対に途中で止まってはいけない。適切なエラー処理の項、なにかあったらすぐにwarningの項と被るけど本当に止まったらいけない。
...だいたいこれぐらい。 まとめると、 止めない、見せない、不確定にしないということ。
|
一例としては...
「うちの父、かします!」で作ったプログラムたちを例にしてみる。 まず、操作画面は極力シンプルにした。 作ったボタンは、「再生!」、「停止」、「exp_disp()」の3つのみ。 ソースも1kBしかない。 やってることは単純で、 - 再生だとffplayをシェルから呼び出す。(PHP)
- 停止だとffplayをtaskkillする。(PHP)
- exp_disp()だとexplorerをtaskkillする。(PHP)
たったこれだけ。 カーソルは最初に右端に置いておく。 これでも立派な組み込みシステムになる。 仕様も1ヶ月ぐらい前に決めておき、操作方法、操作端末も完全に決めておいた。 時は流れ、第二世代になる。 最初の頃はApacheの立ち上げで本体に触る必要があった。 それをレジストリのRunで(今更)自動化した。 だが、どう試してもffplayがスクリーンを取得できずに音だけが流れる状況になる。 よって第二世代の案は破棄になった。
|
じゃあ結局どうすんの?
これはまた後で...
|
|
|