Archive for the ‘お仕事’ category

香港に赴任することになりました

8月 3rd, 2010

20100718_0299-301resized
Creative Commons License photo credit: E.HOBA

twitterには流してましたが、8月1日付の人事異動で香港に赴任することになりました。8月6日のフライトで香港に発ちます。すでに携帯電話は解約済みで、ネットもしばらく音信不通になる気もします(あっさりiPhone4でも手に入れば別ですが)。以下よく聞かれるFAQです。

Q. 何でまた香港に
A. 以前の上司が2008年末から香港にいる関係で声をかけていただき、呼ばれる形で行くことになりました。
向こうでは電卓と電子辞書の企画・開発・生産を行っており、自分はソフトウェア面を担当するエンジニア・マネージャとして働くことになります。入社して5年目になりますが、これまでとは異なる業務領域を担当することになります。

Q. どれぐらい行ってくるの?
A. 社内の書類では3年となっていますが、あまり効力は無いと聞きます。
うちの会社で赴任する人の平均が5年と聞いており、それぐらいになるのではないかと思っています。
もっともせっかくの機会なのでできるだけ長くいたいとも思っています。香港は7年いると永住権がもらえるそうです。

Q. 「赴任おめでとう」か「実は行きたくないの?」
A. 元々海外留学 or 海外勤務を希望しており、長期の赴任がいいと言っているぐらいなので「赴任おめでとう」でOKです。

Q. 家族は一緒?
A. 一緒です。娘はもちろん、私も家内も初めての海外です。(旅行すら無し)
今回の件で初めてパスポートを取りました。
私は8月6日に出発しますが、家族は3ヶ月遅れぐらいで来る予定です。

Q. 今後どうやって連絡とったらいいの?
A. とりあえず以下の手段を使ってください。向こうでの住まい・電話などが整ったら改めて連絡します。ネット上の活動はこれまで通りだと思います。

メール:tunepolo@gmail.com, yuichi@tsunematsu.cc
twitter : @tunepolo
skype : tunepolo
facebook : http://www.facebook.com/tunepolo

Q. SIMフリーのiPhone4/携帯電話買ってもらえるね
A. 顔見知りの方はお気軽に相談どうぞ。

Q. 香港案内してもらえるね/美味しいところ紹介してね
A. 調べておきます :-)

胃カメラ飲んできた

6月 18th, 2010

健康診断で胃カメラ飲んできました、泣きました。

胃カメラでなくバリウムも選べたんですが、昔胃カメラ飲んだことあるから同じのにしておくかと思ってしまいました。チューブを飲み込んでいる間は、選んだ昔の自分を殴ってやりたいと心底恨みました。

胃カメラって飲んで終わりかと思っていたんですが

  • 胃を洗浄する薬をコップ1杯
  • 胃の動きを抑える肩への注射
  • 喉に麻酔をかけるうがいタイプの薬
  • 喉に麻酔をかけるスプレータイプの薬

と結構事前準備が大変です。バリウム+下剤も大変だと思うのですが、もっと楽に体内の調査ができるようになるといいですね。

Subversion, Git, Redmine, Hudson – 今考えている連携2

2月 27th, 2010

Subversion, Git, Redmine, Hudson – 今考えている連携 » tune webでいただいたコメント、実際にやってみて出来なかったことを反映してアップデートしてみました。

前回からの差分がいくつかあります。

  • git svnの窓口となるリポジトリとgit開発時のcentralとなるリポジトリを分けた。
  • 内部設計書としてソースからDoxygenで生成したものを使っていたことを思い出したので追記
  • 外部との作業項目のやりとりにRedmineからチケット一覧をExcelをエクスポートして使っているのを追記
  • お互いにパッチを送り合うのをやめて、パッチをもらったらgit-bundle(1)で作成したファイルを送るようにした。これなら物理的に離れていても同じリポジトリを使って作業出来る。

gitとSubversionの橋渡しにかなり悩んだのですが、実用Gitによると、窓口を1つにして、いくらか気をつけなければならない点があるそうです。これはまた別のエントリで。

上記構成が出来そうな目処はついてきたんですが、余力があればgerritOverview — Sphinx v0.6.4 documentationTestLinkをうまく組み合わせたいですね。

◯2010年3月3日追記
離れた箇所にリポジトリをコピーするのにはgit bundleは便利だけど、差分を渡し続けるのは無理がある気がしてきた。
masterを両者で同期を取るとなると、git bundleで貰う側はローカルのmasterにpushしちゃうとbundleからpullするのが面倒になる。ローカルでmasterにコミットするなというのは結構な制限を課している気がする。branchを切って、branchを同期するようにすると、branchからcherry-pickするような運用になるのだろうか? じっくり同期を取れる気がするけど、そこまでして同期をとらなきゃいけないものでは無い気がする。

そこまでしてリポジトリの同期を取るよりも、素直にパッチを送り合う方がいい気がしてきた。リポジトリ構成さえあっていれば最初のbundle送付すらいらないかも。
前にコメントをくれたmootohさんも、よくよく読んでみると「bundleを最初に送付して、あとはパッチを”送り合ってる”」てなってるし。

何か思い違いをしているかもしれません。おかしな点に気づかれた方は遠慮なくツッコミください。

Subversion, Git, Redmine, Hudson – 今考えている連携

2月 21st, 2010


これからが本番、検索エンジンから来た方は先にSubversion, Git, Redmine, Hudson – 現状の連携 » tune webを読むことをおすすめします。上記が週末考えていた「こういう連携なら今の問題点を解消できるかな」と思えるフローです。「こうしたほうがいいよ」とかコメントありましたらお待ちしています。

1番のポイントはバージョン管理システムとしてGitを中心に据えました。社内はSubversionで統一するという規則があるので残すとして、開発チーム内ではgit svnを使ってGit化し、Subversionを直接触らないようにします。協力会社はSubversion縛りが無いのでGitで統一してもらいます。これまでは差分ファイルを送り合っていましたが、Gitを使えばパッチをうまく作り、修正単位でパッチファイルをやり取りすることが出来るでしょう。これまでは複数の修正がまとめて送られてきてましたが、パッチ単位ならレビューもやりやすく、「こうした方がいい」とか「こうして欲しい」というやりとりもやりやすくなります。

リポジトリがプロジェクト専用になるので、フックスクリプトも仕掛けやすくなります。現状は「空メッセージのコミットは禁止」程度の緩めのものですが、コミットメッセージに Issue ID を含むことを強制させる Git のフックスクリプトを書きました|SNS構築の手嶋屋を参考にすればRedmineのチケットが無いコミットは禁止できます。これで闇コミットがなくなるはず。

さらにGitを使えば「歴史を書き換えて」テストが通らないコミットをなかった事にも出来るはずです。コミット前にテストをする機能がTeamCityにはありますが、Hudsonにはありません。[#HUDSON-1682] Pre-tested commit feature – Hudson JIRAとして要望が挙げられていますが実現はまだ先になるでしょう。HudsonのGit Pluginのページにpushされた変更をテストして、成功したらmaster/stableにマージする設定手順がありましたが、リリースブランチを持ったときにも同じように出来るかは不明です。

というのをtwitterにつぶやいていたところ、@bleisさんと@masanobuimaiさんから情報をもらえました。Gitのフックスクリプトですが

  1. pre-receiveでpush前の状態をタグ付けする設定を追加
  2. post-receiveでHudsonの複数ジョブをキックして起動。
    1. テスト結果を取得して全て成功したらタグを消してgit svn dcommitを実行
    2. 1つでも失敗していたらpre-receiveでタグ付けしたバージョンに戻してpushをなかった事にする。

とすることでいけそうです。Hudsonのジョブ実行結果を知る方法は複数あると@masanobuimaiさんに教えてもらったのがPlugins – hudson – Hudson Wikiのページです。プラグイン無しでもリモートAPIを使っても出来るのかもしれません。
自前でフックスクリプトを用意する必要がありますが、出来ないことはなさそうです。
post-receiveでのテストに多少の時間がかかることを踏まえ、Redmineで参照するリポジトリはGitではなくSubversionにするのが良さそうです。

あとはRedmineのメール経由のチケット登録機能を有効にして、HudsonのナイトリーテストでこけたらカスタマイズしたメールをRedmine指定のアドレスに送ればOKですね。上の絵には「静的解析とメトリクス集計」が入ってますが、これは内製ツールです。リポジトリを集中管理してもらえるとこういうこともやってもらいやすくなりますね。

上記構成に3月中に取り組む予定です。うまく行くといいんだけど。

Subversion, Git, Redmine, Hudson – 現状の連携

2月 21st, 2010


会社の仕事を「Gitを中心に据えた開発ワークフロー」に変えたいなとこの週末ぼんやりと考えていたんですが、現状を整理して残しておくのも、あとで振り返った時も参考になるかもしれないと思って残しておきます。

開発しているものは画像処理ライブラリで、言語はC言語。プラットフォームはWindowsとLinux両方に対応していて、32bitと64bitどちらでも動くようにしたいのが前提。ほとんどのソースは共用出来るようにしています。開発者はWindowsを使ってVisualStudioで開発し、自動テストやリリース時はLinuxでMakefileを使ってビルドします。

バージョン管理は課で管理しているSubversionを使い、他のプロジェクトともリポジトリを共用しています。他に使っているツールはテスト自動化にHudsonとタスク管理と障害管理でRedmineがあります。Hudsonは2種類のテストを管理していて、コミットの度に動くビルドのテストとCUnitを使った単体テストと、毎晩複数枚の画像入力を処理するストレステストの実行を制御しています。Redmineはチケット駆動開発(TiDD)を意識し、コミットはチケットに関連付けるようにしています。あとは開発者の1人(自分です)がgit svnを使ってローカル開発をgitにしているぐらいです。

開発メンバは社内に2人、あとは社外の協力会社に手伝ってもらっています。両者の間にはネットワーク的に「超えられない壁」があり、リポジトリを参照させることができません。ということで双方でSubversionリポジトリを持ち、同期は定期的(1〜2週間おき)に差分ソースを送り合って手動で実行しています。

ここまでが現状の紹介、以下は上記フローによる問題点です。
問題1 双方でのソースの同期を取るのが大変
一週間から二週間に一度差分ファイルを送り合ってるけど、マージに時間がかかる上、複数の変更がごっちゃになっておくられてくるためレビューしたくても途中で断念してしまう。

問題2 単体テストが通らないコミットが履歴に残り消せない
ちょっとしたミスがあってビルドに失敗してもsvnの履歴が消せない。Windows上での単体テストはコミット前に確認するけどLinuxで毎回やるのが面倒になったり、32bitと64bitを全組み合わせでやるのは面倒だったりする。動くだろうと思ってコミットすると壊れていたりとか。
あとはgccでは警告をエラー扱いしているので、使われてない変数があるとかその程度のことでエラー扱いされてしまう。

問題3 闇コミット
RedmineでTiDDに近いことをしているが、闇コミットが結構ある。スタイル直しただけとか、変数名リファクタリングしたとか。複数プロジェクトでリポジトリを共用してるからチケットIDが無いコミットを弾くのが難しい

問題4 Redmine上でチケットとコミットの関連付けを直せない
テストで問題が見つかってもRedmineのチケットとコミットの関係を直すことが出来ない。間違ってるfixesが残ってしまい、何とも出来ない

問題5 HudsonでビルドにコケてもRedmineのチケットに自動登録されない
Hudsonでコミットごとの単体テストとは別にストレステストを含むナイトリーテストを設定しているが、テストに失敗した時にRedmineのチケットが自動登録されない

問題6 TortoiseSVNのパッチ機能が腐ってる
外注からパッチで差分を送ってもらうことも考えたが、TortoiseSVNの文字コード認識がおかしく、一度エディタで開いて文字コードを保存し直す必要があった。(ちなみにソースはUTF-8)

問題7 機能ブランチの管理が大変。
一度切るとなかなか戻ってこない。戻すにも準備がかなり必要になる。試しに作ったけどいらなかったブランチも扱いに困る。

問題だけ見ると「何でこんなフローにしたんだ」と自分でも思ってしまうけど、少しずつプラクティスを取り入れた結果うまく連携できてない現状になってしまった。近々Subversionのリポジトリを課管理から本部管理に移行するお仕事があるのでこれを機にこれまでの問題点を解消しようと思っています。

詳細は後半で → Subversion, Git, Redmine, Hudson – 今考えている連携 » tune web

構成管理手段が作業手順を定義している

1月 14th, 2010

今更な話なんですが・・・

ソフトウェアの構成管理をするのは今時当たり前ですが、構成管理システム(バージョン管理システム)の使い方は千差万別です。今でもローカルフォルダに置いてあるとか、ネットワーク上の共有フォルダに置いてあるとか、外注先のローカルフォルダに置いてあるとか、ひどい例を探していくといくらでも考えられます。うちの一昨年の新人曰く「フォルダを作ってフルバージョンを残しておくこと」なんて新人犬種で教わってきたらしいので、ひどい世の中です。

新しい順に分類すると

  • 分散型バージョン管理:Git / Mercurial / Bazaar
  • 集中型バージョン管理:Subversion / Perforce
  • 集中型の旧世代:CVS / Visual Source Safe
  • 古代:フォルダを分ける、共有フォルダに置くとか。

といった形でしょうか。

そして、どうしていつまでも古いやり方を踏襲する人がいるのかという話です。勉強する時間が無いとか、やり方が分からないとか、組織で決められているとかいろいろ理由があるとおもうのですが、「使っている構成管理ツールにあわせて作業手順を決めているから、より優れたツールがもたらすメリットを説明されても何を問題としているのかわからない」という発想がふと浮かびました。

フォルダ管理の人は、一人でしか開発してないから複数人で共有する時の話をしてもピンとこない。もしくは構成管理も含めて外注しているからたまに来る納品物を共有フォルダに置いておくだけで十分なんでしょう。

CVSの人はソフトウェアのバージョンは1.X.Yみたいに増えていくものと信じ込んでいて、複数ファイルをまとめて管理するなんて発想はないんでしょう。VSSの人はファイルをいじるときは一人が長期間ロックするものだという前提があるんでしょう。

Subversionの人はブランチは大きな機能を追加するときにたまに使うものだと思ってるんでしょう。

構成管理ツールと言うのは単に機能を提供するだけではなくて、ソフトウェアの手順を暗黙的に決めてしまいます。逆に考えると、新しいツールを使うときは新しいやり方を最大限活かせるように作業手順を作りなおさないとダメでしょうね。

入門Gitを読んでいて感じたことが、ようやく自分の中で咀嚼できた気がします。

10年は泥のように働けって

5月 29th, 2008

今日一番印象に残った言葉

西垣氏は伊藤忠商事の取締役会長丹羽宇一郎氏の「入社して最初の10年は泥のように働いてもらい、次の10年は徹底的に勉強してもらう」という言葉を引用し、「仕事をするときには時間軸を考えてほしい。プログラマからエンジニア、プロジェクトマネージャになっていく中で、仕事というのは少しずつ見えてくるものだ」と説明。

「10年は泥のように働け」「無理です」——今年も学生と経営者が討論 − @IT

てっきり討論会で誰かが初めて言った言葉かと思ってましたが、伊藤忠の会長が昔どこかで言った言葉のようですね。だからといってこの討論会でふさわしい言葉だったとは思いませんが。ちなみに現在のGoogle検索結果は2万件弱、まだまだ増えるんでしょうね。

個人的には会社に入社して泥のように働き、勉強する必要がある数年が必要なのは同意ですが、泥のように働くのが10年、勉強が10年の計20年必要とは思いませんね。入社して勉強が3年もあれば十分ではないかと。

あと泥のように働くのはだめですが、泥働きは取り組む価値がある仕事だと自分は思っています。利益につながる、会社にとって意味がある”仕事”は膨大な量の泥働きの上にあることが多いんじゃないでしょうか。Googleを支えるページランクアルゴリズムはすごいけど、それを実運用で使えるようにするには数学的な最適化や、SEOスパムをさけるための工夫が山のようにあるはずだし、iPhoneやWiiの操作性も微妙な微調整の上に成り立っていると思います。

大学での勉強/研究では、「技術を使えるようにするにはどうしたらいいかを学ぶ機会が少ない」と思うので、泥働きも前向きに取り組めると思える環境を探してみることを学生の皆さんにはオススメします。泥のように働かせたがる会社は無視ですね。

OCRと誤植

3月 18th, 2008

会社で調べ物をしていたたまたま見つけた面白い読み物。

誤植 – Wikipedia
一つ目はWikipediaの”誤植”にまつわる独自研究。ゴキブリの名称が誤植から定着したなんて知らなかった、話のタネにはならなそうだけど。あと聖書の誤訳のところが読んでて面白かったかも。

大量の画像をOCRしてるんですが、だんだんうんざりしてきました。特に校正作業が大変で、ちょう飽きてきた。 それでそういう経験をした事がある人の体験談を聞きたいと思い.. – 人力検索はてな
2つめがはてなの質問回答。OCRソフトって誤植多いよね~
回答者も面白いなと思ってみてみたら ノッフ!の人だった。

学会聴講のため外出

2月 27th, 2008

この日は学会聴講のため終日外出。2月はデブサミも見に行かせてもらえたし、外出が多くていい感じ。もっとも仕事はたまり気味だからしわ寄せができて困るんだけど・・・

学会で新しい知見を得られるメリットもありますが、いつもと違う平日を過ごせる気持ちの面でのリフレッシュが自分には大きいですね。この日の学会会場は東京タワーのすぐそばでした。展望台に上りはしませんでしたが下からの眺めもよかったですよ。

デブサミ2008の申し込み完了

1月 24th, 2008

昨年末に CodeZine:Developers Summit 2008 – デブサミ2008に申し込んでいたのですが、タイムテーブル上まだ内容が未定のものが多かったので今日登録の見直しを行い、最終的に参加するセッションを選び終わりました。

  • 【13-E-1】Microsoft Presents「Joel on Developer Summit」
  • 【13-B-2】CodeGear Presents「Joe McGlynnと日本のRubyのコミュニティが、オープンソースの現在と未来について語る会」
  • 【13-E-3】ソフトウェア品質知識体系(SQuBOK)ガイドの読み方 ~目覚めよ!品質大国ニッポン~
  • 【13-B-4】業務パッケージ開発におけるアジャイル開発実践記
  • 【13-A-5】反復開発とテスト – 7年
  • 【13-A-6】実装工程以降のアーキテクチャ管理手法
  • 【13-A-7】パネルディスカッション:TPSで進化するアジャイル開発
  • 【14-E-3】SubversionとMaven 2による構成管理:バージョン管理・ビルド・リリース・自動化
  • 【14-A-4】SaaSプラットフォーム上でのアプリケーション開発
  • 【14-D-5】「デベロッパーテスティング・ライブ – 自信を持ってコードを書くための心・技・体 -」
  • 【14-E-6】なぜアメリカのトップゲームメーカーはソフトウェア高速構成管理ツール”Perforce”を選択するのか?

Joel氏の講演は昨年末から抑えていましたが今見たらやっぱり満員になってました。早めに予約しておいてよかったです。本当は【14-A-7】ネット・コミュニケーション2.0も申し込んでて見たかったんだけどこの日は夜に別の予定が入ったためキャンセルしました。また次の機会ということで。

講演のタイトルだけ見ていると楽しい2日間になりそうです。