NaCl Blog

機械学習勉強会に参加して画像の人物判定プログラムを書いた話

佐田です。
本記事は、ITOCが主催した平成27年度機械学習勉強会に参加した時に、私が感じたことについてまとめたものです。
上記のリンク先にも書いてあるとおり、平成27年12月から平成28年3月10日まで毎週開催された勉強会です。
参加者は、データサイエンティスト養成読本 機械学習入門編 (Software Design plus)を教科書にして学習していました。

機械学習勉強会の大まかな流れとしては、チームごとに分かれ、それぞれのチームで目標を決めて発表会で発表するという流れでした。
その発表までの流れに沿って本記事は書きました。


自作でイベント駆動型サーバ作るのツライ問題とlua-nginx-module

何の因果かわかりませんが、お仕事でちょっと賢いリバースプロキシサーバ(以降、RPサーバ)を作る機会が2回ありました。
HTTPヘッダの内容によってプロキシ先のサーバを動的に切り替えるようなものです。

ちょっと賢いリバースプロキシ

この要件を満たすため、RPサーバには以下のようなプログラムが必要になります。

  • HTTPヘッダの内容を知るためにHTTPリクエストをパース
  • プロキシ先のサーバへHTTPリクエストをプロキシ
  • プロキシ先のサーバはRedisから取得
  • レスポンスをクライアントへ返す
  • 大量のリクエストも捌ける

1回目はRubyとI/O多重化のライブラリを使ってイベント駆動型のRPサーバを自作してみました。
が、振り返ってみるとこれは失敗でした。


ドキュメント作業で楽をしたい

プログラマがあまりやりたがらない作業のひとつとしてドキュメント作成がよく挙げられるかと思います。
〇〇仕様書とか〇〇設計書とか〇〇手順書などの作成作業ですね。
特に成果物がdocxやxlsxのようなプレーンテキストでない場合、次のような理由で気が滅入る方も多いのではないでしょうか。

  • 手慣れた道具(エディタ)を使うことができない
  • 専用のソフトでよくわからない機能が裏で勝手に動いたりしてて気持ち悪い
  • 変更履歴をトラッキングしづらい、差分をマージしづらい

Markdownでさくっと書いてそれっぽいものができれば、GitHubのWikiなどにぼちぼち書き溜めておいて最後にコンパイルするみたいなやり方ができるなぁとか、そうすればわざわざドキュメント専用リポジトリを作ったりする必要もないなぁとかモヤモヤしながらいろいろ調査・検討したので以下の4構成でまとめたいと思います。

  1. Pandocについて
  2. Pandocを使って Markdown -> HTML, PDF を作成する
  3. Pandocを使って Markdown -> docx を作成する
  4. Pandocで作られたdocxをRubyで加工する


RubyアプリケーションのABCSizeの目安

チームで開発する際はコーディング規約を決めて行うことが多いと思います。
実際に書いたコードが規約に従っているかどうかを検査するため、筆者はRuboCopを使用しています。
コーディング規約そのものはWeb上に公開されているものを参考にして決めていますが、制限が厳しすぎる等の意見がチーム内であった場合は適宜規約を調整しています。
最近チーム内でABCSizeに基づく警告を出す閾値がもう少し高くても良いのではという意見が出たことをきっかけにいくつかのアプリケーションでの例を調べたので紹介します。