プログラムにおける想定外への対処

原発の運用において今回の大地震は想定外だったという報道をテレビで見ました。
今後はマグニチュード10以上や50m以上の津波であっても
今回のような事態とならないよう策を講ずることが、
想定内にするという事でしょうか。。?
プログラムでも想定外の状況は起こりえます。
プログラムはむしろ、常に想定外の状況を想定して開発するとも言えます。
プログラム開発とは、あみだくじを設計し、そのすべてのルートについて
処理を記述することとも言えます。
恐らく正常と言えるルートは1〜2割で、残りは想定外でしょう。
プログラムにおける想定外への対処とは、
起こることは想定できていても実際起きたらどうにも出来ない、
あるいは、想定すら出来ていないことが起きたときに、
出来るだけ影響の範囲が広がらないようにすることだと思います。
具体的には、
その想定外によってデータの更新が中途半端に終わってしまったり、
メモリの解放をし損じたり、データを掴みっぱなしとなって
他のアプリケーションの動作へ悪影響を及ぼしたり、はたまた、
コンピュータ自体が動かなくなってしまって再起動が
必要になったりしないようにすることです。
プログラム開発における「想定外」は、「例外」という表現が相当します。
具体的な例として、ファイルを読もうとした時に、
ファイルを問題なく読めたときが正常な状態がとした場合、
ファイルが存在しないために読めないときはトラブル発生ですが、
これを想定していれば「想定内」であり、
読めなかった理由をメッセージボックスでユーザーに通知の上、
処理をキャンセルするか、もしくは、
メッセージとともに別のファイルを選択する機会を示すなどが考えられます。
もし、ファイルが存在しないことを想定せずに処理を続行した場合、
不正なメモリを参照するなど、
事態がより深刻になる可能性を内在することとなります。
プログラム開発における想定外への対処とは、
1つでも多くのトラブルを想定して具体的な対処を組み込んでおくことと同時に、
個別の対処のしようがないトラブルすべてに対しては、
影響がゼロ(または限りなくゼロ)になる対処を組み込んでおくこと
だと思います。
今回の原発において、地震の大きな揺れの検知は、想定外の検知でもありました。
プログラムでいえば、例外(=想定外)の検知に相当します。
影響を最小限に抑えるための最後の機会は与えられていたとも言えます。
このタイミングで原子炉の運転の停止はできました。
続けて緊急冷却装置を動かして冷やす必要があり、その工程に入るはずが、
その電力が通常電源、非常電源のどちらからも得られない事態になった。
「非常電源も含め、もし全く電力が得られなかったら?」
という事態を想定した対処が組み込まれていなかったようです。
もし、今後は想定して対処するとした場合、
電力を得るルートをさらに確保しておくのでしょうか。あるいは、そもそも
電力に頼らない方法で原子炉の安全を確保出来るようにするのかもしれません。
プログラムにおける想定外への対処といっても、
ファイルにデータを保存中に、急にパソコンの電源を抜かれた状況までを
想定して対処していません。
(実際には、OS、あるいはハードウェアのレベルで策を講じます。)
…原発と比較するのはプログラムではなく、ハードを含めたシステム全体
 とするのが正しかったです。
原発についてはここ一カ月の報道で知り得た範囲の知識しかないため、
これ以上、私には想像できないのですが、
「もしこんなことが起きちゃったら!?」、「もしこれが使えなかったら!?」
という想定をし尽くして、策を講じることなのだろうと感じました。
もし、
「いや! これ(例えば電力)が無ければどうにできない!!」
という
リカバリーしきれない状況が想定でき、
その結果が許容しうるものでないことが想定出来た場合、
その人間の作りしものは、存在自体が危ういように感じますが、
今もこうして原発から供給される電力で暮らし、この文章をタイプしている私が
あれこれ言うのは、偽善的でしょうか。。
機会があればまた考えてみたいと思います。

Windows XP にて Titanium Mobile の KitchenSink アプリを動かしました

結構苦労しました。
動作確認した環境:
・Windows XP SP3 32bit
・Android SDK
・Titanium Mobile (Titanium Developer 1.2.2、Titanium SDK 1.6.1)
・Python 2.3 for Win32-JP
・Python 2.3 SCons
・Androidエミュレータ(SDK APIs 2.2、Screen HVGA)
・KitchenSink 1.6.1

TitaniumMobile01.png
TitaniumMobile02.png
TitaniumMobile03.png

私がハマったところは、
[info] building kitchensink for android … one moment
のトレースから全く先に進まないところでした。
トレースの出力FilterをDebugまで増やして確認したところ、
adb.exeが見つからないことが分かりました。
[DEBUG] Waiting for device to be ready …
[DEBUG] D:\Apps\Android\android-sdk-windows\tools\adb.exe -e devices
下記ページを参考に、platforms-toolsにあるadb.exeとAdbWinApi.dllを
toolsフォルダにコピーしました。
(※下記ページではmklinkを使ってシンボリックリンクを作る方法を
  示していましたが、Windows XP には無いコマンドなので、
  コピーで対処しました。)
Installing on Windows 7 – Documentation Guides – Appcelerator Wiki
http://wiki.appcelerator.org/display/guides/Installing+on+Windows+7
–引用↓–
Workaround for a missing adb
cd C:\Program Files (x86)\Android\android-sdk-windows\tools
mklink adb.exe ..\platform-tools\adb.exe
mklink AdbWinApi.dll ..\platform-tools\AdbWinApi.dll
–引用↑–
Titanium mobileのEdit Profile画面のAndroid SDKのフォルダ指定を
しなおして、下記のエラーが出ないことを確認しました。
–引用↓–
Couldn’t find abd.exe or android.bat in your SDK’s “tools” directory. You
may need to install a newer version of the SDK tools.
–引用↑–
次にハマったのは、エミュレータの画面にKitchSinkの起動画面が現れたあとに、

KitchenSink00.png

“Appcelerator Titanium 1.2.0″というロゴのような画面が出たまま先に
進まなくなりました。

KitchenSink01.png

その上をマウスでクリックしたりキーボードを触ったりしたら
「”Sorry! The application KitchenSink (process com.appcelerator.kitchensink)
has stopped unexpectedly. Please try again.”」
というエラーが表示され終了してしまいました。

KitchenSink02.png

ググってみると、SDKの設定をAPIs 2.3.3に上げると良い…など見つかりましたが、
私的には、APIs 2.2にしたいという根拠無き思いがあったので、
KitchenSinkのバージョンを1.5.0-update2から1.6.1に変えて再度確認したところ、
起動しました!

KitchenSink03.png

ここまで来るのに大変参考になったページはこちらでしたm(__)m。↓
何がなんでもTitanium MobileでKitchenSinkを起動したい人の覚書(Windows)
– Cherenkovの暗中模索にっき
http://d.hatena.ne.jp/Cherenkov/20110112/p1
こちらのページで書いてありますように、クリーンに確認したいときは
起動中のadb.exeをタスクマネージャーから一度削除するのが良さそうです。

見つけた東北関東大震災 支援サイト

復興支援 東北地方太平洋沖地震 – Yahoo! JAPAN
http://shinsai.yahoo.co.jp/
募金、ボランティアの案内、支援ギフト便などがあります。
支援ギフト便というのは、Yahoo!ショッピング上で、
通常の買い方と同じような手順で、お米やタオルなどを
被災地へ届けられるしくみです。
手軽に参加しやすいと感じました。
物資支援プログラム「支援ギフト便」の提供を開始
– 東北地方太平洋沖地震に関するお知らせ – Yahoo!ブログ
http://blogs.yahoo.co.jp/shp_auc_2011/2429452.html
義援金を送る、節電する、無駄な買いこみや通信を控える、
被災地の方々のことをいつも想う、、
もっとできることを考え、していきたいと思います。

Android SDK に Google APIs の個別バージョンをインストールする方法

最近Androidアプリの開発を始めたてで、
「Android SDK および AVD マネージャー」の標準状態での
アップデートでは、
古いAPIレベルのGoogle APIsが自動ではインストールされない様子でした。
(Android SDKを2011年2月に初インストールした私の場合、
 Google APIsはレベル11のもののみ自動インストールされました。
 使いたいのはAndroid 2.1 API7相当のものです。)
IS04(Android 2.1)でGoogle Maps API を試すべく、
手動で個別にインストールする方法を知り、試しました。
私の環境では、最初の段階ではGoogle APIs Level 11 だけ入っていました。

GoogleAPIs11.png

「Android SDK および AVD マネージャー」で、
[Available packages]-[Third party Add-ons]-[Google Inc. add-ons]
の中からインストールしたいものにチェック。
[Install Selected]ボタンをクリック。

GoogleAPIs07.png

[受諾]を選択し、[インストール]ボタンをクリック。

GoogleAPIs07Inst.png

インストールが完了すると、
[Installed packages]の中に追加されているのが確認できました。

GoogleAPIs07Inst_OK.png

早速[Virtual devices]で[新規…]をクリックして、
新しいエミュレーターを作成しました。

GoogleAPIs07CreateAVD.png

作成したばかりのエミュレータを[開始]させました。

GoogleAPIs07CreateAVD_OK.png

作成しておいたGoogle Maps APIを使ったプログラムを
エミュレータで実行してみるべく、Eclipseでプロジェクトのプロパティで
[Android]-[Project Build Target]で先程作成したエミュレータとマッチする
ターゲットを選択しました。

GoogleAPIs07EclipseProp.png

Eclipseの当該プロジェクトを右クリックして、
[デバッグ]-[デバッグの構成…]を選択し、
[ターゲット]で[手操作]を選択し、[デバッグ]をクリックしました。

GoogleAPIs07EclipseDebug.png

表示された[Android Device Chooser]で、先程起動しておいたエミュレータを
選択し、[OK]をクリックしました。

GoogleAPIs07EclipseDebugChoose.png

一瞬「!Debug」云々という警告メッセージが表示されましたが、、
間もなく作成したプログラムが地図を表示しました。

GoogleAPIs07Emu.png

実機でも表示できました。

GoogleAPIs07_IS04.png