体調悪め

最近は疲れ気味で朝起きれなくなってきた。一年に一回ぐらいは調子の悪い時期があるし、大抵は寒い時期。引っ越しもあるし、しばらく大人しくしとく。

セキュリティ勉強会の準備

明日は社内勉強会で発表する。

題材として XSS とセッション ID の固定化攻撃を取り上げようと思う。

本当は自分で攻撃コードを書きたいところだけど、そこまでやる (気持ち的な) 余裕がなくてブラウザのアドオン使って簡単にデモする予定。XSSエスケープ処理の理解は深まったけど、Web におけるセキュリティの全体像はまだまだ。攻撃方法は分かっても、どこで何をしたらリスクになるかが見通せてない。

Red5 パッケージング

次の開発スケジュールにあわせて Red5 もみていく。

以前はあちこちリンク切れしてたのが、昨日見てみたら直ってた。

メーリングリストも招待制だったのが申し込み制になったので申請したらすぐに受け入れてくれた。何ヶ月もかかってようやく参加できた。これまで IRC でコメントしても無視され、メーリングリストに参加できないからやり取りしようがなかった。ちょっと安心した。

バグトラッキングシステムもリンク切れしてどこか分からなかったのが googlecode にあることが分かった。RPM のパッケージングがメンテされてないので更新したファイルを送ってみた。

環境にあわせてもう少し改善することもできるけど、ひとまずレビューしてもらって開発側の反応をみたいところ。

運用は大変

お仕事

障害対応

先々週の金曜日に障害発生して、先週の前半はその調査と対応に追われていた。

アプリから見たレベルでやれることはやるけど、Windows サーバーそのものについての経験不足が否めないというのを実感してる。同僚にたくさん助けてもらってる。

タスク実行の exe が多重起動するのは Windows のタスクスケジューラーの不具合が原因とみて間違いなさそうだ。Windows Server 2008 からタスクスケジューラーがバージョンアップしたのかな?それにしても、タスクスケジューラーのような基本的なツールの不具合と考えていなかったため、気付くのに時間がかかった。

負荷軽減の意図でパッチを当ててもらう予定だけど、まだまだ知らないことがありそうな雰囲気を感じる。安全に直してるつもりだけど、なかなか運用が安定しないのでもどかしい感じ。これはいろんな所に迷惑をかけてる。

reviewboard 1.7.3 release!

先日送ったパッチがレビューされて取り込まれた。

そして、今日リリースされた。

大した修正でもないけど、世の中に出て行くと嬉しい気分になる。

続・ツールいじり

昨日の続き。

reviewboard のパッチ

reviewboard を触ってみた。

昨日は管理者ガイドをみて開発環境を構築しようとがんばっていたのだけど、管理者ガイドは運用環境向けに書かれたもので、開発環境については触れられてなかった。

今日はローカルでソースからドキュメントをビルドしてたら、ソースには開発向けのドキュメントのみが付属していることに気付いた。そっか。開発ドキュメントは別だったのかと気付いて開発環境の構築方法が分かった。

業務では Subversion を使っている。reviewboard で diff をアップする際、日本語環境だと diff のリビジョン番号のところがローカライズされる。reviewboard がこの日本語の「リビジョン」をパースできないのでエラーになる。英語の diff を生成すれば良いだけだけど、この手の環境要因で正常なデータを処理できないというのもおかしな気がして修正してみることにした。

 Index: test.txt
 =======================
 --- test.txt	(リビジョン 0)
 +++ test.txt	(作業コピー)
 @@ -0,0 +1 @@
 +test

パッチは pull request ではなく reviewboard でレビューするとあったので試しに送ってみた。

登録した瞬間、review bot が diff のコードのみ pep8 を実行してちょっと驚いた。もっと言えば、そもそも元々のコードも pep8 に遵守しているわけではないのに、、、

あと修正していて正規表現のグルーピングでこんな表現できるんだと初めて知った。

(?:...)
正規表現の丸括弧の取り込まないバージョンです。どのような正規表現が丸括弧内にあってもマッチしますが、グループによってマッチされたサブ文字列は、マッチを実行したあと検索されることも、あるいは後でパターンで参照されることもできません 。

7.2. re --- 正規表現操作 — Python 2.7.16 ドキュメント

reviewboard は Django で開発されている。昨日は専用ツールなのにパッとしない的なこと言ってしまったけど、管理画面のスクリーンショットとコードを見たらかなりがんばってるなーと感心した。Django の管理画面をカスタマイズするの大変だから。グラフを生成するツールの参考にもなりそう。

ツールいじり

Trac プラグイン

またちょっと Trac を触り始めた。いろいろ思い出しながらやってる。

TracAdvancedSearchPlugin

検索がやや重いので全文検索を導入できないかを調べてる。既存の全文検索プラグインは3つぐらいあったけど、最も良さそうにみえたのがこれだった。

(まだ他の実装がないけど) デフォルトでは、全文検索システムに Solr を使う。このバックエンドに他の全文検索システムも追加できないかなと考えている。ただ、その前にパッケージングがいまいちだったので、まずその修正を送った。

その後に別の全文検索システムも作ってみる予定。

TracCronPlugin

チケットの期限をみてメールする機能がほしいというのを見て調べてみた。

外部の cron を使うのは DailyReminderScriptForTracScript – Trac Hacks - Plugins Macros etc. で、スケジューラーを内包しているのが TracCronPlugin – Trac Hacks - Plugins Macros etc. みたい。スケジューラーには threading.Timer を使ってる。

で、カスタムフィールドで追加したチケットの期限をみてメールを送るタスクを追加した。

TracCronPlugin は、いまはメンテナンスされていないみたい。このまま捨てるのはもったいないぐらいの機能があるので、開発者と連絡が取れたらメンテナンスを手伝ってみようと思う。

コードレビュー

まだ試用段階だけど reviewboard を使い始めた。

最近の bitbucket/github の diff の画面がよくできているせいか、あんまりパッとしないというか、私にとっては専用ツールなのにこんなもんかというのが率直な感想だった。たぶん bitbucket/github の diff 画面をリポジトリのおまけと捉えるからよく見えるのかもしれない。

コードレビューツールは、不特定多数でレビューするときやレビューアがリモートにいるときには有効だろうけど、目の前にレビューアがいるなら直接、話しかけてレビューするのが最も効率的だと思う。

新しいものを使ってみるのもおもしろいし、reviewboard も api が豊富なようなのでまたツールを作ったりしても楽しめそうな雰囲気。

抱負か雑感か、そんなもの

忙しいわけでもないけど、
家に帰って寒いと文章を書くのが億劫でおざなりになってた。
誰もいないオフィス (朝とか休日とか) が好きだなぁ。

ワーク的なもの

転職して試用期間の3ヶ月を経過した!
就業前に試用期間で解雇することもあると社長からは聞いていて、スキル的にはそうなってもおかしくないのでちょっと危機感をもってた。

本当は経過した12月に書こうと思ってたけど、当時は余裕がなかったのでいま書く。

SIer -> Linux Distributor -> パッケージベンダ -> フリーランス -> パッケージベンダというキャリアを歩んできた。その中でのキャリア観としてこんな風に考えてる。

  • 本業はプログラマーで生きていく (マネジメントをやらないわけでもないけど)
  • コンサルはやらない
  • (自社パッケージの拡張以外の) 受託開発はやらない
  • 組織が信用できなくなったら文句を言わずに辞める
  • 業務上は嘘をつかない

組織を守ることも大事だろうけど、価値観にあわない業務では自分の力を発揮できる気がしない。そういう意味では、全力を出さないと周りとの競争力や差別化ができないという自身の能力の無さだろうと思うし、性格的なものかもしれない。

いまの職場は経験してきた中で最も優れた職場だ。

もちろん上には上があるだろうけど、自分の能力からすると、待遇も業務も同僚・上司にも恵まれていると思う。技術至上主義的なところ、なぁなぁの人間関係がないところ、コミュニティ活動を奨励しているところ、他にもいろいろあるけど、日々の業務でプレッシャーを感じないので自分のやりたいことに集中しやすい環境だ。

開発体制もビジネスも比較的、安定しているようにみえる。無理して 120% で業務に取り組まなくても 80% ぐらいでいまのところやれてる。その余裕のある時間を使って個人的なことにも取り組みやすいかなと考えている。

テクノロジー的なもの

良くも悪くも Python だろうな。

業務では Java/JavaScript がメインで、私はどちらもできないから後ろめたいところがある。ある言語の背景から設計思想、その文化が分かるようになるには2年ぐらいかかると思う。いまから Java をがんばってもきっと業務で役に立つのは2年後ぐらいで、いまは迷惑をかけないよう、保守や拡張がメインになるだろう。幸いにも2ヶ月間取り組んだ動画配信機能はちゃんと形になった。それはグループリーダーのアドバイスを受けて設計したものだから、私でも何とか実装できた。

逆に捉えると、社内には Python プログラマーが少ない。自分が開発した Python ツールや業務で使っている Trac の運用などは私にイニシアティブがある。TracTicketReferencePlugin が良い例だけど、このプラグインは業務で普通に使われていて、いくらか業務改善になっているんだと思う。

いまどき Python 製のツールを使わない環境/サーバーはないだろうから、そういうグルー的なところ、ちょっとしたツールや業務改善を積み重ねて、積み重ねて、イニシアティブをとっていくのが現実的なところかな。業務も要件も中規模であるということが幸いしていて、そういった改善のポイントがたくさんみえている。そして Python はそういう隙間を縫うところに強い気がする。

ファイナンス的なもの

就職して安定したことと個人的なことが重なって、自分の人生を経済的な視点から見直している。

とは言っても何も具体的な基軸がないため、以下の本を読んで、これまでの経験とかを照らし合わせながら考えていた。いつか書評を書こうと思いつつ、もしかしたら書かないかもしれないけど、どちらも良著だと思う。

僕たちはいつまでこんな働き方を続けるのか? (星海社新書)

僕たちはいつまでこんな働き方を続けるのか? (星海社新書)

投資戦略の発想法〈2010〉

投資戦略の発想法〈2010〉

特に「投資戦略の発想法〈2010〉」を読んで wikipedia:木村剛_(コンサルタント) という著者の名前しか知らなかったけど、その知識量や頭の良さをすごく感じたし、私も価値観があうところは多かった。そんな頭の良い著者が逮捕されているという皮肉も含めてなかなか人生とはおもしろいものだと思う。

資本主義経済の仕組みやお金とは何か、どうすれば年収が増えるか。これまで個人としてはお金を稼ぐ能力ばかりを意識してきた。その次のステップが能力をお金に変える取り組みを考えていくものだろう。

経済的なところをあまり意識してこなかったのもあり、同年代の水準から比べるとかなり悪いそうだ。普通だと思っていたのが普通じゃないというのは、けっこう危険なものかもしれない。この先2-3年は個人の支出削減と、できれば無理のない範囲で副業も探そうと考えている。フリーランスのとき、いろいろ経験できて楽しかった分、その反動なんだろうなぁ。

最も簡単な支出削減の目的で、最近は勉強会や飲み会の参加を自粛している。勉強会はキーワードを知るには良いけれど、キーワードが分かっているなら独学する方が効率的だ。飲み会は仲間がいて人生を豊かにするけど、それ以上に支出が大きい。

ライフ的なもの

30歳を過ぎて落ち着いてきたところ、選択と集中を考えるようになったところ、経験からみえるようになったところ。人それぞれにいろいろ思うものがあるだろう。

基本方針としては変なことをしない。つまりは直感でおかしいと思うことはやらない。

若い頃のように勢いもないし、潜在性を評価されることもないだろう。何かをやるなら正攻法で取り組む。正攻法の定義も人によって違うかもしれないけど、1つは独学だ。勉強会を否定するわけではないけど、周りに人がいると勉強できるとか、凄い人が身近にいると捗るとか、それで確かな実力が身につくようなことは経験上なかったし実際にないと思う。いまは正攻法での取り組みが英語学習になるけど、比較的うまく続いてるし、少しずつでも続けていくことを重視している。

それから無理をしない。おじいさんみたいなことを言うけどもう疲れた。

平日はお仕事をして、夜も勉強して、土日は勉強会へ行くみたいなことを常態化しない。気が向いたらやるし、おもしろかったらやるし、英語はまぁやるけど、他人に言われたからやるみたいなことはしない。

あとは怒らない。

もともと怒らない方だけど、もうちょっと広義に解釈して、不平を言ったり、揚げ足を取ったり、自分の見解に固執したりしないようにする。これは私が尊敬するような人たちがそういう雰囲気をもっていることが多いからだ。そういう雰囲気をもっていると、困ったときに困らないような気がする。

改善へ

お仕事

もう1週間、腰を落ち着けてリファクタリングすることにした。

動画配信

チームメンバーへ週の真ん中にベータ版のデモを行った。

認可コードによりサーバー間のアクセス制御を行う仕組みのシステム構成の説明、実際に動くモノのデモ、設計や実装のレビューも行った。私が開発していてよく分かってないところ、パッとしないところ、リファクタリングした方が良いところなどを広く聞いてみた。

開発を進めていると、全体像がみえにくくなったりする。定期的にチームメンバーへレビューすることで、自分自身でもシステム構成を見直して俯瞰できる。ある前提条件を変更したことにより、動いていたとしても連動して他の部分も改善した方が良いということがあったりする。

週の後半はクライアントサイドのプレイヤー周り (javascript) をきれいに実装し直してた。javascriptデバッグ環境もおいおい作っていかないといけないなと思いつつ、いまのところはコンソール出力しながら泥臭くやったので少し時間がかかった。

開発当初から来週の一週間を予備期間としていた。他の開発を手伝うことも聞いてみたけど、私はこのまま開発を続けていて良いとグループリーダーも配慮してくれた。感謝しつつ、来週いっぱいリファクタリングをしながら、ストリーミングサーバー側の深いところもみていこうと思う。

これまでは独りで開発することが多かった。自分で作って、自分でレビューして、自分でテストしてきた。いまはレビューしてくれる人がいて、テストしてくれる人がいて、そこそこの規模の参考になるソースコードがあって、開発そのものが充実してる。

追い込み

お仕事

終わりがみえてきた。

動画配信

設計していてこれは認証ではなくて認可の仕組みだと気付いた。

認可コードを発行してサーバー間で付け回すような仕組みにした。この辺りは OAuth2 のサーバー実装を過去にやった経験が役に立った。調査・設計ができれば良いと控えめに言ったものの、実装もベータレベルではほとんどできた。

さらに認可コードを管理する専用の DAO を作って、汎用的に他のアプリで使えたり、パフォーマンスや運用を考慮しやすくしておいた。

これで必要な機能の 90% は開発済みとなった。あと1週間で残りの機能とエラー処理、テストやリファクタリングなど、品質を詰めて堅牢な作りにしていく。プロトタイプ実装を寝かせておいて良いアイディアを待つ感じ。

終盤に差し掛かってみれば、1ヶ月という期限に対して順調に進捗した。たぶんグループリーダーなら1週間で作ってしまったんじゃないかと思う。

次の開発課題

ストリーミングサーバーそのもの (Red5) の運用や検証に移るか、他のチケットを対応していくか、それともこのまま勢いでライブストリーミングや録画機能なんかもプロトタイプ実装していってもおもしろいかもしれない。