Windows Mobile Programing

aviさんのところで、Windows Mobile Proguramingの連載が始まりました。(http://blogs.shintak.info/)
Windows Mobileのプログラムを、開発ツールの導入からサンプルプログラムの作成を通じて、プログラムの経験の無い私のような初心者(?)にも 簡単なプログラムを書けるようにという 非常に為になる記事を書いていただいています。
ぜひ、休みに入れば順番に試して見たいと思うのですが・・・(流石に出張先で、仕事にも使っている機器に入れるのはそれ自体がチャレンジャー過ぎて試せません)
プログラムの概念は、昔と大きく違い 私がプログラム電卓でプログラムもどきを作っていた頃は、最優先にされたのはやはり容量で1バイト変数をビット分けしてでも容量に拘る必要がありました。RAMを二階建て実装しても4kですからやむ得ない処置でしょう。
その後、8bitのマイコンでは速度が最優先になりました。確かに複数のスレッドで共有すべきルーチンは、共有するものとして作れば良かったのですが、絶対アドレスを使いジャンプをすると、普通の相対ジャンプの3倍のクロックを消費しかえってくるのにも同様のクロックを消費し 結果的にはまるでコピーになるとわかっていても 同じルーチンをプログラムモドキの中で何度も書く事になりました。
もちろん、それはROMに搭載されているルーチンに関しても同じ事で ROMの入力ルーチンを使えば、キーボードの種類や現在shiftキーを押しながらの入力かまで考慮して数値を返してくれたのですが 必要以上にというより全てのデバイスを検査して結果を返してくれるので あまりにも遅くキーボードのSWの繋がっているポートを直接読みに行って数値を持ってくるというような事を当たり前のようにしました。
キーボードのセンスは、割り込み処理という一定のタイミングで何かのプログラムが動作していても強制的に一時中断して 動く仕組みの先で動いており 速度を上げるためには ROM上から動いているプログラムを全て止めて 割り込みすらも全て停止して あっというプログラムミスの際には コンセントを抜く以外に(HDDもなにもないので ただ、再起動するだけでした)方法が無くなったり、せっかくのデバッガー(プログラムを実行しながら実行中の結果や内容を確認するツール。レジスターの内容をチェックしたり プログラムをステップ単位で実行したり 止めたりする機能を持ちました)も、割り込みを無条件に禁止して、かえって来れなくなったり色々やってでも速度を求めました。
これは、単純に当時の機器が1Mhz(Gではないので注意)程度の動作だから遅かったという事だけではなく、その当時 中高生であった私の興味は ゲームセンターのゲームの見た目コピーにあったからで、専用機でもかなり苦労して動かしているゲームを汎用機で動かすためには それぐらいやってもかろうじて動きが似ているかな?程度のものしか出来なかったわけです。
それからはCPUの速度の向上と共に、プログラムの書き方も変わって来て アドレス的に遠いから遅くなると言うような意識は無くなり データはまとめた方が判りやすいのでデータをまとめたエリアに書き出すようになったり、効率から考えて同じプログラムを何度も表記し直すような無駄な行為も減りました。
しかし、徐々にプログラムサイズ自身が大きくなりなによりも、マルチタスクになって 直接ハードウエアーにアクセスしたり 割り込みを止めたりという乱暴な事をすると つまりOSを無視したプログラムを書いたりすると むちゃくちゃな事になってしまいます。
故に、入出力はOSに任せるわけですが デバイスを含めそれの為に作られたFrameworkと呼ばれるサブルーチン集自身が巨大化し 使えるサブルーチンを覚える と言う行為がプログラム言語を覚えると言う好意に付け加わったことは確かです。
しかし、昔は入出力を始め多くのプログラムで利用するルーチンは何度も自分で作ることを経験し 自分なりのルーチンを作り それを蓄積する事がプログラムを作るスキルとなり プログラムを構築する速度を上げてゆくのですが先人たちの作り上げた そういったルーチンを借りる事により プログラム本体を作ることにリソースを集中する事ができ 工期を短縮し スキルの無い層にもプログラムの作成を簡単な教育で提供できるようにとの変化だと思います。
プログラムは(と モドキしか書いた事の無い人間がえらそうに言う事ではないですが)同じ動作を行うプログラムを 別の人が書いたり、同じ人でも 書く時期が違ったらまったくの別物になることが非常におおくあります。
それは、最初の項からでていた ある時期はメモリーの節約が中心だったり 速度が中心だったり また後の改造を考え汎用性の高さが中心だったり 思うことによって変化します。
RPGのキャラクターの設定のように、100のパラメーターを貰って それを、力や魔法力、すばやさ、賢さというようにいくつかのパラメーターに振り分けて行く行為に似ていると思います。
もちろん、だんだんスキルが上がってくれば、プログラムを作る前に与えられるパラメーターが増えて行き 小さく、速く、汎用性のあるものが作れることでしょう。
そう 考えて見れば、プログラムの作成は パズルに近く 特に多くの補助が与えられている今 組み合わせの仕方や考え方でプログラムを書く事がきっと出来るような時代になっていることと思います。
解けなくても、何度もチャレンジできますし 出来なければ人に聞くこともできます。
今回のラーメンタイマーの作成は、その序章で 手取り足取り教えてくれる例題と言うべきものでしょう。
言われるままに作れば、動くというのがプログラムの面白さで 例えば3分を10分にしたりという程度の事であれば、内容が理解できれば難しい改造ではありませんし、3分後に音を鳴らしたり 画面にメッセージを出すのではなく プログラムの実行をすることも出来るでしょう。
PDAの電源を入れたときに、そのプログラムを立ち上げれば 無線LANの電源を立ち上げて むせんLANが接続処理を行うまでに15秒程度のタイマーを置き、その後にPIEを立ち上げるようにすれば 「ネットワークに接続されていません」ではなく HOME画面から立ち上がるという程度のツールも今回の応用で作成可能なはずです。(netforntではそう出るのですが PIEは待ってくれるかもしれません 接続を)
自分が出来もしない事をいうのもなんですが、長い人生の中にはそういったことが面白かった時期を経験してきました。
やってみると、多くの人のうちの何人かはきっと面白いと思うでしょうし 例え仕事でプログラムを書いている人でも プログラムのパーツを作っていて 自分の作ったプログラムがそのまま動くという経験をした事のない人も多く知っています。
物を作り上げる快感というものを感じられたらいいなとおもうのですが・・・・