Archive for the ‘お仕事’ category

蘇州・北京出張

4月 16th, 2011

強行軍でしたが、蘇州・北京と訪れる機会があったので写真をUP!


蘇州で泊まったホテルからの眺め。これまで出張で行ったホテルの中で最もコストパフォーマンスがよかった! こんな広くて立派なホテルに日本のビジネスホテルよりも安く泊まれるなんて中国素敵。1泊しか出来なかったけど次は連泊したい。


蘇州から国内便で北京へ移動。無錫の空港の周りは何もなくって中国の大きさを実感。


無錫空港は元々軍事空港だったらしいのですが、中は割と綺麗でした。


北京に移動して、仕事を済ませ夜の移動中に見かけた面白い形のビル。テレビ局とのことです。地震とかあったらすごく危ないと思うんだけど…


飛行機の搭乗時間まで時間があったので、ちょっとだけ北京観光に付き合ってもらいました。故宮や万里の長城をおすすめされたのですが、一度見てみたかったのでオリンピックスタジアムに行ってみました。


鳥の巣の中の写真。今でも立派なスタジアムなのですが、余り使われていないらしく、痛みや汚れがちょっと目立ちます。まだ3年しか経っていないのに。


名前は知らないけど見覚えがあったのでパチリ。


鳥の巣の隣にあるプールもついでに見学。鳥の巣よりも綺麗だけどこっちもあまり使われてないのかな。

中国本土自体が初めてでしたが、どちらの都市もまた来たいと思う出張でした。次はもう少しゆっくりした出張日程を組みたいな。

最近のこと

2月 20th, 2011

何年後かに何でブログこんなに更新してないのか忘れてそうなので。


を日本で見て、


を新横浜ビックカメラで確認。

その後…
キヤノン:電子辞書 wordtank発売延期のお詫び

「困ってる人」と「困ったふりをしている人」

10月 24th, 2010


.@behindwisteria 世の中には「困ってる人」と「困ったふりをしてる人(本人は困ってると思ってない)」がいて、皆にあまねく伝道師の役割をしていると後者から反感を買うんですよね。もちろん前者には協力は惜しみません。less than a minute ago via YoruFukurou

「性格が歪んでしまった」わけではないので、最近の自分の考えを整理して残しておきます。

ソフトウェア開発に多少明るかったこともあり、日本にいた頃から「周囲への啓蒙」、「伝道師の役割」を期待される場面が少なからずありました。日頃ブログで情報を発信している人には組織で似たような役割を演じている人も多いのではないかと思います。バージョン管理、テストの整備、開発プロセスの改善、後進エンジニアの育成、便利なツールの紹介などなど… 新しい技術や新しいやり方を広めようとすると反対者が少なからず出てきます。それぞれ言い分があって

  • メリットがわからない。
  • 成功するのか(効果があるのか)怪しいものだ。
  • 私は今のやり方で困ってない。

辺りがメジャーな反論ではないかと想像します。あと滅多に口には出てきませんが「私のやり方に口出ししないでくれ」や「手柄をたてようとしているあなたが気に入らない」というのもきっとあると思います。

アドバイスを何度か繰り返すと、あるとき提案が受け入れられるタイミングがでてきます。「トップダウンの命令で仕方なく」もありますが、私が考える一番成功しやすく、効果が出るタイミングは「聞き入れる側が”本当に困っている”」ときです。

例を挙げてみましょう。ある会社Aで作られたプログラムを、いろいろな理由から別の会社Bへ管理を移し後継モデルの開発に取り組んだところ、大量のバグがでてきたことがありました。会社Bでは同じ過ちを繰り返さないよう次期モデルの見積りを念入りに行い、そして計画案が出てきました。改善する箇所を絞って品質を改善するというもっともな計画ですが、一言「ところで改善する箇所はどうやって決めたの? どうやって改善していくの?」と聞いたところ「改善箇所はA社から引き継いでよく分からず、バグが多かった(気がする)ところを選んでいる。改善方法は”1行ずつソースを読んでから考える”」との解答でした。

私は「1.ユーザは改善の効果を体験できるの? 2.ソースが複雑なところにバグは入り込みやすいよ。 3.ソース読んでも時間かかるだけで、元の仕様なんて分からないよ。」というコメントを出してみました。これをきっかけにB社はいろいろな質問をだしてきて、「1.処理時間を測ってボトルネックを改善してね。 2.ソースの複雑度を測ってね。 3.テスト書いてね」といったこちらからの3つの改善提案が前向きに検討されています。逆の順番で、提案を先に行ったらどういう反応があったでしょう? 「前の開発でも勝手な要求ばかりでスケジュールがかなり押したのに!こっちの開発を邪魔してほしくないものだ!!」と思われたのではないかと思います。

私が思うに世の中には直面している問題を正しく認識できてない「困ったふりをしている人」がかなりいて、こんなことをよく言っています。

  • 昔からやり方はこうだった。
  • ルールがこう決まっている。
  • どうしようもないんだよね。何かいい方法ない?

人から指摘されても、その人にとっては現状を言ってもらったに過ぎず、「改善すべき問題」ではありません。「問題ではないので、アドバイスも効果が無い」のかなと思います。

アドバイスなり啓蒙活動をするには、まず問題を認識させる必要があるというのが私の今の考えです。手を変え品を変え取り組まないといけません。これまでのやり方では問題が起きるようにわざとお願いしてみたり、いやでも認識出来るぐらい問題が大きくなるまで放置してみたり… これが冷たいと言われたら返す言葉がありませんが…

そういえば困ったふりをしている人は「問題を大きく捉えすぎて何から手をつけていいのか分からず、とりあえず普段は放置している」パターンもありますね。このタイプの人は定期的に同じような話題で相談してきて、アドバイスしても3日坊主で終わることが多い気がします。

Google Calendarはやっぱり便利

10月 23rd, 2010

Google Calendar Logo
Creative Commons License photo credit: Kinologik

香港の会社でもWeb閲覧制限がされているものの、日本よりも若干緩いようでこれまで使えなかったサービスが割と使えたりする。試してみて明らかに駄目だったのはtwitterぐらい。香港でもみんなやってるのだろうか?。

就業中でも使えるようになったWebサービスのうち、一番便利なのがGoogle Calendar!日本にいた頃は社内スケジュール管理ソフトが決められていて、わざわざGoogle Calendarに同じ情報を家で入れ直すのが面倒で放置気味だったんですが、会社で規定のスケジュール管理ソフトが無いのでGoogle Calendarに集約し始めたところすごく便利!見やすいし、動作も早いし、一人で使っているのがもったいぐらいです。

ただ、このスタイルに慣れ過ぎると日本に戻ってからが苦労しそう。

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

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を読んでいて感じたことが、ようやく自分の中で咀嚼できた気がします。

Pages: 1 2 3 4 5 6 7 8 Next