10年まとめ
最近、自分の中で進歩してないなーと感じているので、この感覚が本当かどうかやったことをまとめる。
10年前〜5年前
10年前はPerlやPHPで掲示板・チャットを作ったことがある程度。
Linuxは大学の演習で使った程度。BSDはインストールだけして何もせず挫折していた。
オセロ作った
大学でプログラム同士を競わせるというイベントがあったので参加した。
初GUI、初C++。Visual C++を使いつつひな形生成はせずにWindows SDKで書いた。
今見るとbetter cにすらなっていないけれど基本機能やAIはそこそこ出来ていた。
履修申請システム作成
大学三年から四年にかけて、初のシステム開発。
当時の四年生の卒研とかぶっていて使えるマシンが限られていたのでWindowsにPostgreSQLとApacheとPHPを入れた。
大学に泊まり込んでいて、ある日急に人が増えたと思ったらいつのまにか卒業式になっていた。
情報系の大学なのに履修申請が紙だったのでこういうふうに出来たらいいなというWeb画面を作っていたら、たまたま見た先生の鶴の一声で本番採用になった。
と言っても一学生のすることなので、旧来の紙と二重申請。
大学なので100人以上が同時アクセスする。演習室を借り切って同時アクセスするプログラムを書いてテストした。実験では落ちなかったサーバーが本番で落ちて焦った。この頃からサーバーに興味を持つ。
サーバー管理&バーチャルドメイン管理ツール作成
今の職場にサーバー管理要員としてバイトで入る。
市販のバーチャルドメイン管理ツールはディストリビューションの設定ファイルを独自のものに書き換えるので使いづらく、webminは今よりだいぶ不便だったので、独自にプログラムを書いた。
WebからIDとパスワードを入れたらFTPとDNSとApacheの設定を生成し、セカンダリDNSの設定も反映する。メールアドレスの追加削除もあったかな。メインはPHPでroot権限のコマンド操作はC。
たまにCのデーモンが落ちることがあったが何年か使っていた。
ボツ案件数件
自社サービスとしていくつかWebシステムを作ろうとしていた。どれも実現せず。
JavaScriptとデータベースの実験にはなった。
社内ツールとしてちょっとしたプログラムを書いたりもした。Googleの検索結果を調べたり、Webを巡回したり。これは一定期間使っていたものもあった。
ネットショップその1作成
PHP4でネットショップを作る。テンプレートエンジンが話題になっていて、フレームワークは出始めの頃?浸透はしていなかったと思う。
Ajaxが話題になり始めた頃でもあったので導入した。すごくニッチな場所で当時珍しいAjaxのカートが出来た。
大量にコードを書いた。寝ながら書いた。
似たようなコードがあちこちにできた。
PHPのフレームワークを作り始める
ネットショップを作ったときに似たようなコードを沢山書いてしまったのでどうにかしようと考える。
Mapleとguessworkを合わせたようなフレームワークを作り始める。
MapleがJavaのDIを参考にしていたのでJavaについてもある程度調べた。この頃Seasar2が話題になっていたように思う。
その他
dbmail を使ったりqmailを使ったりvsftpdを使ったり、PowerEdgeに四苦八苦したり。
subversion、bazzar、tracなどを使ったり。
研究はほとんど進まず。
5年前〜現在まとめ
5年前はPHPがある程度分かってきた頃。職場ではDebianオンリーだったのでDebianにも慣れてきた。
ネットショップその2作成
自作フレームワークを使いつつ新たなネットショップを作った。
久々の案件だったので試したかったことを一通りやった。
論文を書いて研究終了
内容を一言で言うと、DRBDのファイルシステム版。これを作りたかった。
最終的には初期の考えの3割ぐらいしか作れなかった。
簡単そうに見えるのに誰もやっていないことは、実は意味がないか実は難しいかの2パターンしかないということを実感した。
博士課程の最初の2年はまったく何も進まなかった。キーワードに気付くまで、あるいは関連研究が出てくるまでに2年必要だった。
進まない間にもカーネルのバージョンはどんどん上がってコンパイルが通らなくなったりする。
3年の春頃は少し進み出したが、期間の短さにこのまま退学かと思っていた。冬に査読が2本通って、大学ルールではあと1本なので1年延期することに決めた。退学しつつ論文を書くことだけは続けるという方法もあったが、自分の性格だと書かなくなると思ったので。
延期した1年の初めに1本通り、博論提出日に1本通ったので最終的には大学規定より1本多く通ったことになる。音信不通期間が長いので精神的に結構参った。
サーバーをプチクラスタリング
サーバーにOSをインストールしたりバックアップを管理するのが大変なのでXen+DRBD管理ツールのGanetiを導入した。
ネットワークブートからOS自動起動 *1 は、initramfsの管理が大変だったので断念、
DRBD + heartbeat *2 はHDDのエラーと一緒にカーネルが落ちたので断念した。
Ganetiなら障害時の自動切り替えは無いけれどハードウェアのメンテナンスはライブマイグレーションがあるので無停止でできる。RAIDにしておけばシステムダウンするのは電源が壊れた時くらいかなと思って自動切り替えはまだ考えていない。
現在安定稼働中。ただしDRBD+RAIDなのでHDDアクセスは遅い。
今後止められない自社サービスを作ることがあったら、またそのとき考える。
未完成サービス数件
PHPフレームワークのO/RマッパーをS2JDBC風に書き直したくなるが、Javaっぽく書こうとすると型チェックがなくスクリプト言語っぽく書こうとすると簡潔に書きにくいPHPに不満が出てきてJavaに移行する。理想はHaskellだったがデータベース接続のライブラリを書くところで断念。
GWT+S2JDBCからJavaに入る。その後Wicketに落ち着く。
迷いながらプロトタイプのシステムをいくつか作る。
現在
10年前〜5年前は、プログラム経験がほぼゼロの状態からある程度のWebシステムを作れるようになるまで、という期間。分からないことが分かるようになっていく楽しさがあったように思う。
5年前〜現在は、研究の終了とプログラミング環境の試行錯誤の期間。
たぶん進歩していないわけではないが、結果として実感できるものがまだない。
それから、ネットショップは会員が増えれば開発者のこちら側も嬉しいが、業務システムは要求に対応しても新しい要求が出るだけで利用されてる感覚があまりない。フィードバックの問題だろうか。システム化したことによってこれだけの手間が減らせた!業務が捗るようになった!とかいう意見は滅多に届かないし、逆に要望・不満の方が多くフィードバックされる。
職場の環境、生活も変わった。今は毎日寝る。コード書いてたら気付いたら朝になってた、ということがない。
何かに熱中するということが無くなった。無くなったというか熱中の度合いがかなり下がった。
最近のもやもやは進歩してるかどうかじゃなくて、何かしらの結果・フィードバックが実感できるかどうか、熱中することがあるかどうか、ということかな。
あと、独自Webシステムというか自社サービスは、考えてはみるもののことごとく中断している。
誰にも頼まれていないシステムをゼロから作るのって難しい。