俺は、電脳世界が好きなだけの一般人です
第五話 勉強会3
1週間が経過した。
戸松先生の話では、ダメ出しを受けた電脳倶楽部は、情報を集めて、スケジュールの立て直しを行ったらしい。
仕様も、見直しが行われて、インターフェースをしっかりと考えたようだ。
データベースのAPIは直接接続にしている。
APIとフロントエンドは、JSON形式でやり取りをすると決めたようだ。認証は、ワンタイムのパスワードを発行して使うようだ。認証を得るために、交換する鍵を使うようだ。アプリ側にも鍵を持たせて、お互いに鍵を交換してから、ワンタイムのパスワードを発行する。
パスワードでオープンしたセッションが切れるまでがパスワードの有効期限としていたので、危ういと考えて、もう少し融通を持たせるようにした。その上で、クライアント側に、ブラックボックスになるパスワードの解読を行うモジュールを提供するように変更する。これで、経路のハッキングが行われても、パスワードを利用するのは難しい。
さらに、通信を暗号化すればいいだろう。
システムの基本方針は決まった。
クライアントも、スマホのアプリは除外して、Webサービスとして実装する。”スマホからのアクセス出来ないようにする”という制限は外すが、端末を登録しなければ、アクセスが出来ないようにする制限は継続する。
電脳倶楽部との仕様の打ち合わせは、1時間ほど必要だった。
スケジュールの確認や、人員の配置に関しても確認できたので、作業に入ることができる。
残り、30分は勉強会だ。
宿題を出しているが、苦戦しているのが解る。特別授業が始まる前に、ヒントは出している。
一番時間がかかっている場所を特定して、その部分の改良を行う。
簡単に書いているが、難しい内容でもある。
プログラムの基礎となる命令文の説明をまとめた冊子は渡してある。
それを読めば簡単に答えに到着する。
ループ内の脱出と、ループ開始数値を動的に切り替える。あとは、ループ内のカウントアップを工夫すれば、かなりの速度アップが行える。
素数の計算なのだかが、2以外の2の倍数は排除できる。同じく、素数となった物の倍数は排除できる。
あとはループの回数をどうやって減らすかを考えればいい。
見て回るが、まだ苦戦しているが、電脳倶楽部の面々も考えたことがないのだろう。試行錯誤を繰り返している。
ある程度は、最適化出来ているけど、もう少し時間が必要かもしれない。
「戸松先生」
「ん?」
「先生は、今日”も”暇ですよね?」
「あ?」
「そんな喧嘩腰にならなくても・・・」
「篠崎。俺は、売られた県下なら、相手が誰でも買うぞ?」
「はい。はい。それで、時間はありますよね?」
「・・・。あぁ」
「どの程度、延長できますか?」
「ん?あぁそうだな。2時間・・・。いや、部活の時間を考慮すれば、3時間は大丈夫だ」
「お願いします。俺は、最初の30分だけ付き合ってから、生徒会に顔を出して、帰ります」
「おまっ・・・。そうだな。わかった」
戸松先生は、俺が見ている先を見て納得してくれた。
勉強会に参加しているメンバーは、良く言えば”真面目”なのだ。だから、俺が居ると、ネットで情報を見ようとしない。調べようとしないのだ。それが悪いとは言わないが、せっかく調べられる環境にあるのだから、調べたほうがいいに決まっている。
それを戸松先生に言ってもらいたいと考えたのだ。
それだけではなく、何かの試験だと思っているのか、一人で黙々と作業をしている。
すごいとは思うが、せっかく同じ方向を見ている者たちが近くに居るのだから情報交換をすればいい。最終的に、出し抜く方法を考えればいいだけなのだ。
電脳倶楽部の面々は、仕様書にGOがかかってからは、最適化を行い始めている。話し合いながら、騙しあいながら、虚実を混ぜながら、コードを改変している。
俺は、十倉さんや勉強会に参加しているメンバーからの質問に答えてから、パソコン室を出た。
ユウキは、先に帰るとメッセージが入っていた。
今日も、美和さんの手伝いをするようだ。
秘密基地に入って、仕様書を眺める。一度、説明は受けたが、見直すことで細部まで考えることができる。
問題は見つからない。
スケジュールにも余裕があるように思える。
あっメンテナンスや非常事態の対応が考えられていない。
どこで吸収したほうがいいのか、API以外には考えられないが、APIでは対処が難しい。
フロントエンドの為のライブラリに、手を咥えるのが良さそうだな。
方針をメモする。
テスト要員とテストパターンが書かれていないけど、難しいだろうな。
実際にサービスを始めてみたいとわからない部分が多いだろう。
さて、書かれていない部分で、バックアップサーバと開発サーバを用意させる。パソコン倶楽部から押収したパソコンがまだ遊んでいるはずだから、あれを開発サーバにすればいいスペックは、劣っていても開発サーバには十分だ。いくつかのパターンで用意しておいたほうがいいだろう。
あとは、仕様書として纏めるのなら、使うモジュールのバージョンを記載しておいたほうがいいだろう。
後日、構成を変えなければならない時にも参考になる。それだけではなく、再現性のある問題を調べる手立てにもなるだろう。
まとめて、戸松先生に送っておけばいいだろう。
今日は疲れたから、さっさと寝てしまおう。
翌日に、戸松先生から返事が来て、電脳倶楽部が俺の指摘を受け取って修正を行う。二日後に、修正版が送られてきた。
次の特別授業までの間、俺もソースコードを最適化してみる。
正解ではないが、早くできることを示しておく。
スレッドを使えばもっと早くなるのはわかっている。しかし、スレッドは反則な感じがするから使わないでソースを仕上げよう。
2時間くらいかかったが、満足ができるくらいには、綺麗なソースになった。
オヤジが言っていた”最終的にはマシン語にしなければ速度を追求できない”がよく分かる。今回は、そこまで速度を求めない。俺が作ったソースよりも早い物がいたら、それは素直に褒めよう。
それに、もう眠くなってきた。
ユウキはまだ帰ってこないから、ソファーで寝よう。寝室まで移動するのが面倒だ。
特別授業の当日までに、電脳倶楽部からは修正された仕様書に沿って、サーバの用意から始めた。
外部に置くためのサーバは、新品が用意されるらしい。戸松先生が、学校から予算を奪ってきていた。まずは、テストサーバと開発用のサーバを構築するようだ。勉強会に参加している者も、興味があればサーバの構築を見に行けるようになったようだ。津川先生が電脳倶楽部に頼んだようだ。
勉強会のメンバーも、ネットワークに興味を持ってくれたらプログラムの幅が広がる。
放課後、時間がある者は電脳倶楽部やパソコン室でプログラムの改変を行っている。プログラムは最初の一歩が難しい、それを乗り越えれば、コツの様な物が見えてくる。考え方がわかれば、プログラミングは難しくない。
そして、特別授業の当日になった。
俺は、約束しているUMPCを3台持って、パソコン室に向かった。
今日は、ソースコードの発表会になるのだが、公平にするために、プロジェクターに繋がる一台で皆がコンパイルして実行して、結果を競う。
まずは、参加者がソースコードをコンパイルしてバイナリを作成する。
テストもしてきているのだろう、コンパイルが通るのは、当たり前で、実行結果が正しいのも当然なのだ。5回起動して、一番速いタイムと一番遅いタイムを除いた3つの合計タイムで競うことにする。
タイム計測は、発表会に参加しない者たちが担当する。
1時間かけて、参加者のタイム測定が終了した。
やはり、予想通り、上位は電脳倶楽部のメンバーに占められていた。
十倉さんは、ソースコードは仕上げてきたが、発表会には参加しないようだ。
あとで、こっそりとコンパイルして確認してみる程度で十分だと笑っていた。