2012-06-23

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

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

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

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

2012-06-16

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 を開発する作業について記述します。

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 に勤めることの魅力だと思っています。