アップデートと掲示板
取り急ぎカイゼルさんにスマホの増産と四倍速サーバを何台か発注しておく。
売ろうと思っても物がないと売れないからね。
前世の知識があり絶対に売れると思っていなかったらこんな無茶はできなかっただろうけど。
さて、広くパソコンやスマホを売っていく上で問題になるのはバグ修正やバージョンアップだ。
長距離電話も何とかなりそうだし、メールだって使えるようになった。
しかしまだまだ完全なものではないし、今後も機能アップは欠かせない。
また、今後はセキュリティホールなどについても考慮していかないといけなくなるだろう。
それに対応していくためには頻繁な更新作業が必要になるが、この世界ではインターネットはないので、今の所アップデートデータはUSBメモリで持っていくしか無い。
しかしながら領内ならともかく他領までとなるとこれが難しい。
なにせ徒歩か馬車が一般的な交通手段で、あとはせいぜい早馬便があるくらいだ。
ファンタジー世界なのだから飛竜便とかあっても良さそうなものだが、残念なことにないそうだ。
飛竜自体はいるらしいが。
そんな状況なのでアップデート用USBメモリを持っていくだけでも一苦労だ。
「まあ、メールで配布して、ishで復元。各自アップデートを実行してもらってもいいんだけど」
ただ、メールだと全個人用フォルダに同じファイルが保存されるので一時的にHDD領域が圧迫されるほか、誤ってメールを削除してしまうと更新ができなくなる。
できれば必要なアップデートを自動的あるいは手動でダウンロードしてパッチ当てしてもらう方式としたい。
「まあ、昔は自分でダウンロードしてアップデートしたから、しばらくはそれでもいいかな? 僕の定年間近だって個別アプリは手動アップデートが普通だったし」
とすると必要なのは掲示板機能だ。
本来であればx-modemとかy-modemのようなバイナリファイルを直接やり取りするような機能が欲しいところであるが、やろうと思うとそれなりに時間がかかる。
今後離宮外に売っていこうと思えば早めに整備しておいたほうがいいだろう。
必要な機能はメールとそれほど変わらない。
アップロード時は宛先が指定の掲示板になり、ダウンロード時は指定の掲示板から読み出すだけだ。
掲示板サーバでは各スレッドでフォルダ分けして、一発言一ファイルで保存すればいいし、やることは単純だ。
機能としてはメールサーバとほぼ同じで、一つのユーザーIDをみんなで共有する感じになるか?
違うのはスレッドの有無くらい。
面倒なのは未読管理だが、これはアプリ側でやればいいだろう。
掲示板サーバの動作はどちらかと言えばOSに近い。
まず最初のリクエストで、掲示板のルートフォルダ名を返してやる。
ルートフォルダは例えばアップデート、ヘルプ、雑談といった一般的なフォルダを設定しその中に更に詳細な項目を設定。
例えばアップデートの下には、OS、エディタ、メールなどの下位フォルダを作り、更にその下に各バージョンに対するアップデートファイルを置くという形だ。
ダウンロードは必要なファイルを複数選択し、ダウンロード開始を選択すれば落ちるようにすればいいだろう。
ダウンロード側は同じフォルダ構成になるようにしておけば、すでに同じファイルがあればそれをスキップできる。
掲示板というよりファイル同期に近いか?
ファイル同期ならいっそのことテキストではなく全部バイナリで送ったらどうだろうか?
パソコン通信の意識があったからテキストで送らなきゃとか思っていたが、ダウンロード中のファイルを順次表示する必要はない。
表示しないのであればバイナリでいいじゃん。
どうせ通信用制御コードは256文字の範囲外だ。
制御コードとデータが明確に分かれているのであれば、テキストだのバイナリだの考える必要はなかった。
送られてきたものそのまま受け取ればいいだけだしね。
うーん。
知識チートがかえって邪魔になるときもあるとはね。
気をつけよう。
さて、気を取り直して掲示板に必要とする機能を考えてみよう。
まず必要なのはユーザーの登録と制限だ。
ファイル共有でもあるからアクセス権の設定は必須だ。
誰でも読み書きできるフォルダと読み込み専用のフォルダ、新しいフォルダを作れるフォルダなど。
アップデートファイル置き場は管理者だけが書き込めるけど誰でもが読み込めるようにしないといけない。
今回はOSのファイルシステムをいじるのではなく、掲示板機能に付加するような形で入れようかと思う。
今の段階でOSをいじると影響調査でまた時間がかかるからね。
ということで、まずは掲示板用というかファイル共有のフォルダを作る。
とりあえず必要なのはルートと、各アプリごとのアップデート用だ。
これさえあれば後はどうとでもなる。
次にフォルダ名とセキュリティ設定の対応表を作る。
セキュリティ設定に必要なデータはunixに習い、所有者・グループ・その他のユーザー名と読み書き実行属性だね。
管理が面倒なのでフォルダの設定とこの中のファイルの設定は同じにする。
とはいっても読み書きできるのは僕だけで、後は登録者全員が読み取り専用だ。
登録データはメールアドレスと共用。
基本的にメールサーバと同じサーバで動かすからね。
「まてよ。書き込み権限が僕だけならセキュリティとかいらなくね?」
また難しく考えてたよ。
要はアップデートデータをみんながダウンロードできればいいのだから、アップロード機能は必要なかった。
誰でも読み書きできる掲示板機能はあとでもいい。
今必要なのはアップデートファイルの配布だからね。
アップロードはUSBメモリで直接サーバへコピーすればとりあえずなんとかなる。
他のユーザーはダウンロードさえできれば問題ないわけだし。
ダウンロードリクエストがあったらファイル一覧を送信。
ファイル一覧はできれば差分を送りたいな。
となると、全ファイルリストを時系列に並べたリストを持っておいて、前回のダウンロード時間以降に更新したファイル一覧を送信してやればいいか。
作ったファイル一覧は送信プールに追加して、次のリクエストを待つ。
送信プールに貯められたデータは、順次パケット化して送られていく。
この辺はメールサーバと共用だね。
ユーザーはこれを見て必要なアップデートを選択してダウンロード指示するか、必要なアップデートを自動ダウンロードする。
自動ダウンロードはどうしようかな。
それぞれインストールしているアプリが違うし、バージョンも違うだろう。
これをどう管理するか?
「めんどくさい! 自動はなし。人手で十分だ」
どうせ、まだまだユーザーは少ないのだ。
いざとなればメールや電話で対応すればいいや。
一覧から必要なアップデートを自分で指定してダウンロードさせれば、余計な手間は省ける。
一覧はファイラーの改造でいいだろう。
入力データは結局の所フォルダとファイルのリストだからね。
複数選択して実行でファイルがアップデートファイルフォルダにダウンロードされるようにすればOKだ。
問題になるのはこのアップデートデータだね。
各自のパソコンにインストールした場合、パソコンの固有IDとインストールメディアのIDとで暗号キーを作って、それで暗号化してインストールする。
アップデートも同じように暗号化しないと実行できなくなる。
さらにアップデートデータが平文だと中を見られてしまい、せっかくインストールした時に暗号化しても無意味になってしまう。
まあ、この辺もパソコンアップデートツールでやればいいだろう。
ダウンロードは平文だけど書き込む時暗号化すればいいのか?
暗号キーはそれぞれのパソコンに保存されていて、暗号化復号化のAPIはOSに用意されているし。
それを呼び出すだけだ。
とはいえ伝送データを直接受信して解析すれば中身が見えちゃうのはいただけない。
ちょっと負担がかかるがサーバ側で暗号化して送ればいいか?
メールサーバにはユーザーIDとパスワードは登録されているのだから、それをアップデートサーバにもコピーして暗号キーを作って暗号化して送信。
受信側は同じ暗号キーを使って復号化。
更にアプリごとの暗号キーで再暗号化という流れだ。
「うん行けそうだな」
結局の所機能としては、やはりほぼメールと一緒で行けそうだ。
共通のメールボックスにみんながアクセスする感じになる。
メールは一定期間でファイル削除しているが、アップデートサーバは削除なしで、フォルダも受信フォルダだけでなくサブフォルダがある程度。
修正は難しくない。
あとは負担を少なくするためファイルの圧縮ツールがあったほうがいいね。
元ファイルが半分になれば伝送にかかる時間やパケットも節約できるし。
次はファイル圧縮について考えてみよう。
最近のWINDOWSアップデートは自動で行われるのはいいのですが、開始タイミングも勝手に決定されるため、重要な作業中に急にスローダウンしたり、スリープ中に勝手にリブートするとかはた迷惑なこともあります。
特にこのスリープ中の勝手なリブートに何回泣かされたことか。
これを防止するにはアクティブ時間の設定をするしか無いとかふざけてるのかと。
会社ならともかく家で使う場合アクティブ時間なんて有って無きがごとしですからねぇ。
休日と平日でも違うし。
今は一応ちゃんと設定すればリブートを引き伸ばせるみたいですが、通常の方法ではダウンロード自体は停止できません。
サービス止めれば止められないこともないけど、そこまですると今度は適当な時期に復帰させないといけないし。
通知だけ出して、後のタイミングはユーザーに任せればいいのにと思うのですが、自分の都合をユーザーに押し付ける姿勢は流石にちっせぇソフト会社だね。