2012-07-02

新しいお仕事のはじまり

先月末に前職を退職したばかりですが、本日より新宿・代々木にある、とある「分析力をコアとする情報最適化企業」でエンジニアとして働き始めることになりました。新しい仲間のみなさま、これからよろしくお願いします。また、および前職でお世話になったみなさま、これから『も』よろしくお願いいたします。

転職先・仕事について

初めての転職でもあり、ゆっくり時間をかけて、次の会社を探す・・・つもりでしたが、思いのほか早く、いまの自分のやりたいこと(のひとつ)である「ビジネスに近い立ち位置での分析・データマイニング」が実現できる会社を選ぶことができました。

入社後は、まずはエンジニアリングで会社に貢献していくつもりです。データサイエンティストの方々 が、よりよくデータ解析できるように、エンジニアリング面でのサポートもしていきたいですね。幸いなことに(?)、エンジニアリングの分野には楽しそうな課題やこの先取り組んでいきたい技術などが転がっているそうなので、これからの仕事が本当に楽しみです。

もちろんエンジニアリングだけでなく、データ分析の分野にもいろいろと楽しそうな案件があるそうなので、ゆくゆくは分析力をつけて、データサイエンティストな道も狙ってみたいなあ、と、ほんのりと野望を抱いていたりします。

お礼

とてもありがたいことに、今回の退職・転職にあたって、いくつかの企業の方からお話をいただくことがありました。また、知人経由でエージェントの方をご紹介していただくこともありました。その他、勉強会などの場で、転職についてのご相談をしていただくこともありました。

実際に各社のお話を伺わせていただき、それぞれの会社の魅力を知ることで、正直、どの道に進むべきか迷った時期もありましたが、結果として「ビジネスに近い立ち位置での分析・データマイニング」「B2C ・大規模な Web サービス」の二つのやりたいことのうち、前者に注力できるよい環境を持っている・整っている今の会社を選ぶに至りました。

お話をいただいていた企業の方々には、忙しい時間を割いてお話する機会をいただきまして感謝しております。特に某社の S さんにはかなり深いご相談をさせていただきまして、とても感謝しております。

あ、もちろん、入社のきっかけにもなった某オレオの人にも感謝してますよ・・・!

みなさま本当にありがとうございました。それではこれからも(これからが本番ですが)よろしくお願いします。

12:57No comments

2012-06-23

第19回 データマイニング+WEB @東京 ( #TokyoWebmining 19th)-データ徹底活用・機械学習 祭り- でトークしてきました

実に 1 年 4,5 ヶ月ぶり? に TokyoWebmining でトークをしてきました。今回はソーシャルグラフ(social network)における「リンク予測」と、ソーシャルグラフを利用した「レコメンデーション」の2つのネタで話をしました。

ちなみに、発表資料に載せていたソーシャルグラフは TouchGraph を使って描いています。

以下、個人的な反省点です。

  • 発表時間は 80 分でも足りない。100 分ぐらいの時間枠を要求しよう。
  • Random Walk (with Restarts) ネタを振るときは、ちゃんと説明できる準備をしよう (地雷なテーマっぽいので避けてしまうかな…)。
  • 論文紹介をするなら、ちゃんと細かなところまで読んでおこう。
  • 資料作りは早めに取りかかろう…

18:17No comments

2012-06-16

クロスプラットフォーム対応な native extensions gem を作る (1) 環境作り

lz4-ruby という、native extensions (C 拡張) を含む Ruby gem を開発していて、Linux/Windows 両方に対応した gem パッケージを作るのに苦労したので、その内容を備忘録がてらにまとめます。

gem の開発環境構築と、実際の gem 開発に分けてエントリを書く予定です。このエントリは、前者の開発環境構築についてのエントリとなります。

構築する開発環境について

今回構築する開発環境は Linux をベースとし、jeweler により gem のスケルトンを作成、mingw32/rake-compiler で Windows 向けのプリコンパイルされた native extension を作る構成になります。

以下、開発を行う OS、パッケージ、Ruby 環境、gem パッケージのそれぞれについてまとめています。

OS

後述する mingw32 のコンパイル環境を整備する都合により、Ubuntu Desktop の利用を強くおすすめします。CentOS、Scientific Linux などの RHEL クローンな Linux ディストリビューションでも環境構築は不可能ではないと思いますが、おすすめできません(私は途中で挫けました)。以降の説明も Ubuntu Desktop を前提としています。

debian パッケージ

mingw32 のコンパイル環境を整えるために、 として mingw32 パッケージをインストールします。RHEL クローン OS の場合は mingw32-runtime やら mingw32-gcc やら、いろんなパッケージをインストールしなければならなかったり、そもそも CentOS 6.2 向けの mingw32 関連パッケージが揃っていなかったりと茨の道となっているので、RHEL クローン OS で頑張る人は相当の覚悟をもって臨んでください。

Ruby 環境

rvm を導入して、異なるバージョンの Ruby 環境を切り替えられるようにしておきます。インストールは、https://rvm.io/rvm/install/ を参考に、以下のようにします。

rvm をインストールした後は、本来なら実際の Ruby 実行環境の構築(インストール)を進めたいところですが、その前に一つやるべきことがあります。

rvm install ほげほげ で Ruby の実行環境を構築した場合に、標準でインストールされる gem パッケージを列挙・指定する ~/.rvm/gemsets/global.gems というファイルがあります。このファイルをテキストエディタなどで開いて、bundler が記述された行を削除・上書き保存し、bundler が標準インストールされないようにします。この作業は、jeweler が要求する bundler のバージョンと、標準インストールされる bundler のバージョンが合致しないために必要な作業になります。

global.gems のファイル編集が済んだところで、実際の Ruby 環境を構築します。以下のように、1.8 系と 1.9 系の最新バージョンをインストールします。

gem パッケージ

下記 2 つの gem パッケージを、gem コマンドを用いてインストールします。

  • bundler
    Gemfile を用いた、依存する gem のインストールや各種コマンドの実行に必要
  • jeweler
    gem のスケルトン作成に必要

前者の bundler は、1.8 系、1.9 系の両方にインストールします。インストールする bundler のバージョンは、1.0 系の最新版とします。

jeweler は 1.8 系、1.9 系の環境どちらにインストールしても構いません(開発の主体となる Ruby 環境にいいれるといいでしょう)。

rake-compiler については bundler 経由でのインストールとなるので、ここではまだインストールはしません。

以上で開発環境の構築は終わりです。次のエントリで、実際に gem を開発する作業について記述します。
15:57No comments

2012-06-05

巣立ちする時期

(主に社員宛て)。今月 6 月末をもちまして、いま勤めている会社を退職します。

退職エントリをポストするにはまだちょっと早いですが、直接、退職の意思を伝えたい社員にはほぼ伝えきれたことと、退職するまでの間に、他の社員には意思というか真意を伝える機会がなかなかないと感じたので、このタイミングでポストします。

現職での業務

いまの会社に新卒で入社し、6 年とちょっと、お世話になりました。

数値解析業務、コンシューマ向けパッケージ製品開発・販売業務など、いろいろ手広くビジネスをしている独立系の中小企業にて、業務システム開発を担当する SIer 的な部署に所属し、入社後はずっと、エンジニアリングを軸としたお仕事をしてきました。

同部署では主として、Web 系の業務システム開発にフロントエンドからサーバサイドまで携わってきました。その一方で、とある研究所の研究者の方とご一緒に仕事をさせていただき、レコメンデーションエンジンの研究開発のお手伝いをすることもありました(自分の中で、一番思い入れのある仕事でした)。近年は Web ベースの地図アプリケーションの開発に多く携わってきました。その他、リッチクライアント系だったり、家電組み込み系だったり、フィーチャーフォンアプリ開発だったり・・・

振り返ってみると、いままでやってきた仕事はバリエーションに富んでおり、また技術的に挑戦し甲斐のあるお仕事が多かったなあ、と気付かされます。もちろん、残念なお仕事もありましたが、それでも私は仕事に恵まれていたんだなあ、と思いました。

会社を辞めること

退職の理由は、会社のやり方、特に経営層の考え方・行動に対する不満が限度を超えた1、というわけではなく、過去の人事に対する不満2というわけでもありません。理由の一つは、「この先の SI 業界に対する懸念」、もう一つの理由は「自分の心境の変化」です。

前者の懸念には、新人PGの0円セール などにもあるように、現状においても単価競争にあえいでいる SI 業界の今後・行く末、そして、このまま SIer に勤めていては、実務に活かせる技術スキルが身につかない・伸び悩んでしまうのではないか、という思い・不安が挙げられます。 後者は、SI というお仕事に対する魅力3が薄れてしまったこと、現状の対企業的な仕事ではなく、より消費者に近い位置で仕事をしたい、などの気持ちの変化が挙げられます。

一方でいまの会社に対する不満は、なくはないにせよ、人間関係はとてもよく、いい上司・後輩に恵まれた職場で 8~9 割は楽しく仕事ができたわけで、退職の理由にはなりえませんでした。社員の皆様には本当にお世話になりました。

今後

「今月末で辞める」ことは決めたものの、転職先など、この先は未定です。

転職よりも退職を先に決めたことには、退路を断って自身を行動せざるを得ない状況に追い込むという意味があります。こういうことをしない限り、現状に甘んじてしまい、次の行動をとることができずに過ごしてしまう自分がいることを嫌というほど理解しているからです。

今後は、エンジニアとして仕事に関わっていくスタンスは崩さず、自分が関わっていきたいと考えている「ビジネスに近い立ち位置での分析・データマイニング」「B2C ・大規模な Web サービス」の分野にて、真に自分がやりたいことを実現でき、ハイレベルなエンジニアリングができる環境をじっくりと探すつもりです。

会社の外で、自分のエンジニアとしての能力がどこまで通用するか分かりませんが、挑戦はしていきたいと思っています。これからもよろしくお願いします。


1 : 不満はありますが、退職の理由ではありません。
2 : 納得いかないこともありましたが、退職の理由ではありません。
3 : さまざまな業種・仕事に関われるのが、SIer に勤めることの魅力だと思っています。
12:21No comments

2012-05-31

#nodejs で marisa-trie を使えるようにするモジュールを作ってみた&公開してみた

簡潔データ構造を利用したイケてる trie 実装 marisa-trie を Node.js で扱えるようにするための、誰得感溢れるモジュールを作ってみました。ソースコードと npm は以下のとおりに公開しています。

とりあえずデモ的なことをしてみましょう

ひとまず、marisa-trie のsample.cc の JavaScript 版を実行することを目標としましょう。

まずは、marisa-trie のインストールをします。

環境によっては、/usr/local/lib にインストールされた共有ライブラリが参照されなかったりするので、その場合は /etc/ld.so.conf.d/ ディレクトリあたりに /usr/local/lib ディレクトリ配下の共有ライブラリを参照させるような .conf ファイルを配置してください。

あとは node-marisa-trie を npm でインストールし、デモプログラムを実行するだけ、です。

API 構成について

詳細はいずれ作成する予定のドキュメントに譲るとして、原則として C++ 版の marisa-trie の API に準拠しています。ただし、[] 演算子など、一部実装ができていない関数があります。

今後の予定

  • テストコードを書いて自動テストしたい。
  • 未実装の機能を実装したい。
  • 使い方・API のドキュメントを充実させたい。
  • ドキュメントを英語化したい。
  • node-gyp でビルドできるようにしたい (node v0.7.x 対応)。

参考にした情報

本モジュールを作成するにあたり、参考にした情報をポインタ的に列挙しておきます。
12:08No comments

2012-04-23

RHEL クローンな OS 上に node.js 寄りな heroku の開発環境を構築するメモ

とっても残念なことに、Heroku Toolbelt のインストーラが CentOS やら Scientific Linux などの RHEL クローンな OS に対応していない (Linux は Debian/Ubuntu のみサポート) らしいので、頑張って (中途半端に) 環境構築したメモを残しておきます。

ざっくり手順

gcc やら git、Ruby のビルドに必要なライブラリ (openssl-devel などなど)、ごく基本的な開発環境がすでに整っていることを前提とします。

  1. rvm をインストールする
  2. Ruby をインストールする
  3. foreman をインストールする
  4. heroku CLI をインストールする
  5. heroku コマンドにパスを通す


rvm をインストールする

rvm を入れなければならない、というわけではありませんが… rvm がお好みに合わないようであれば、rbenv でもいいでしょうし、漢らしくソースコードからビルドして make & sudo make install でもいいでしょう。

場合によっては、rvm のインストールにより ~/.bash_profile に追記された以下の1行を ~/.bashrc 側に移行する必要があるかもしれません。


Ruby をインストールする

rvm なあなたは としましょう。Ruby のバージョンはお好みで。


foreman をインストールする

プロセスなどを管理してくれるものらしい (よくわかっていない) foreman を、gem を使ってインストールします。 この gem は必須ではありませんが、インストールしておくとローカルの環境での動作確認がちょっと楽になります。


heroku CLI をインストールする

いよいよ heroku CLI をインストールします。tarball をダウンロード&展開し、任意のディレクトリに配置します。例えば以下のように。


heroku コマンドにパスを通す

~/.bashrc あたりを編集して、heroku コマンドにパスを通します。上記の例でいえば、以下のようになります。

以上で環境構築は完了です。これでどこでも heroku ができるようになりますね!

1:381 comment