2014年10月25日土曜日

ゲームをXamarinで複数PF向けに同時開発やってもあまり嬉しくないという話

本記事は、日経ソフトウエア2014年12月号に掲載された「Android & iOS アプリ 同時開発」の落ち穂拾い(紙面の都合上カットされたネタ)記事です。

日経ソフトウエア 2014年 12月号

日経BP社 (2014-10-24)

雑誌掲載の記事では、Xamarinの向いたエリアについて挙げました。実は原稿段階では不向きなエリアについても書いていました。これを増補する形で紹介します。

ゲームは割と不向きという話をします。


2014年10月23日木曜日

年4回、計50ページの雑誌記事を書いたメモ

この一年、日経ソフトウエア誌に寄稿する機会を多く頂きました。

雑誌に年間4回寄稿するというのは初めての経験であり、感慨深いものだったので振り返りがてらメモしてみます。


2014年10月18日土曜日

今更Dockerを使い始めて初日に感じたことメモ

この1年ぐらいTLの一部(というか割と多く)でDockerの話題が出て、Docker 1.0が出たとかMicrosoftともアライアンス組んだとかそういうニューストピックという認識はあったんだけど、取り立てて自分の手元での用途が無かったのでこれまで全く触ってなかった。

先週あたりからちまちまと東京メトロの オープンデータ活用コンテスト に取り組み始めて、軽い分析系のものをいくつか試作したい欲が湧いたところでDockerの機運が高まったので使い始めた。

まずはざっくりと勝手がわからないとつらい。
さらっと使ってみるには いまさら聞けないDocker入門 が良いと感じた。
ちょうど1.0がリリースされる前後に開始した連載で、1.0ベースの話が展開されている。
インストールから基本操作(pull, run, build, rm, rmi, exportあたり)は把握できた。


2014年10月14日火曜日

VMware FusionでWindows8.1(Hyper-V対応)を使っていて時折IRQL_GT_AT_SYSTEM_SERVICEのループに陥る問題

手元、OS X 10.9.5上のVMware Fusion 6.0.4 + Windows 8.1 Proで時折発生します。

主に、http://msdn.microsoft.com/ja-jp/library/windows/apps/jj945426.aspx の手順でMac上のVMware Fusion上にてWindows Phone 8のエミュレータ環境を作っている人向けです。

なお、上記のような特殊な用途以外で、Hyper-Vゲストを有効にするメリットはほぼありません。動作速度的なメリットはないどころか、手元の調査ではVT-x/EPT有効&Hyper-V対応ゲスト化によって、大規模なC++コードのVSでのビルド速度が10%ほど低下しました(MSDNにもパフォーマンス落ちるよ!と書いてある通り)。



こういう画面(問題が発生したため、PCを再起動する必要があります。エラー情報を収集しています。自動的に再起動します。...詳細については、次のエラーをオンラインで検索してください: IRQL_GT_ZERO_AT_SYSTEM_SERVICE)が出てリブートの無限ループに陥ることがあります。

エラー情報収集→リブート→エラー情報収集→リブート→...を数回繰り返したあたりで心が折れそうになります。


2014年6月16日月曜日

「Windows Phone Storeの使用言語比率9位は日本語」ではありません

Windows Phone国内展開のカギは「Cortana」と「SIMロックフリー」 - 阿久津良和のWindows Weekly Report
という記事の間違いに気付いたのですが、twitterなどで指摘して訂正依頼するには話が少々ややこしかったのでblogにまとめました。

元記事はWindows StoreとWindows Phone Storeでのダウンロード動向をもとにした分析記事です。
このなかで
気になるのは9位にランクインしている「Japanese」。全体数から見ればわずかだが、国内向けのWindows Phone 7デバイスか、並行輸入などでWindows Phone 8デバイスを購入し、使用しているのかもしれない。
というくだりがあるのですが、これは誤りです。


2014年3月15日土曜日

PNaClとasm.jsの最近について喋ってきました(Code Lunch)

ある休日の昼下がり、@h13i32maru @iizukak 両氏のやっているCode Lunchというpodcastにお邪魔してきました。


収録機材はガチなマイク(すごい迫力)とMacのGarageBandでした

Code Lunch自体を簡単に紹介すると、Web周辺の技術について毎回トピックを決めて30-40分ほど喋るというもので、http://rebuild.fm/ にインスパイアされて始めたそうです。今回で4回目。

今回の内容は、次世代Web技術のひとつとして注目を集めつつあるPNaClとasm.jsについて、以前SlideShareで公開した社内ミーティング用資料


と、@mhidakaasm.jsとかPNaClとかLLVMに興味あったので調べて回ったら少しだけ理解できた話 を下敷きにしつつ、その後に調べを進めた結果見えてきたものなどを盛り込んでいます。

Vol.4 2014/03/15 PNaClとasm.js からお聞き頂けますので、通勤のお供などにいかがでしょうか。

2013年12月22日日曜日

OmniFocusとPivotalTrackerの連携でタスク管理が17倍効率化すると話題に

こんばんは。この記事はGTDアドベントカレンダー2013*0の12/22分の記事で、自分の中で話題沸騰中の案件です。設定方法直行はこちら

Pivotal Trackerは、「やることや、その優先度をどんどん組み換えつつ進行してプロジェクトの目的を達成するための管理ツール」です*1

ソフトウェア開発でありがちな
  • 開発期間が短い
  • 仕様が変わるのに開発期間は延びない
  • やることの順位付けが正しくできない
  • 誰に確認してもらえばいいのか明確でない
  • やってるうちにテンションが下がっていく
といった問題に対して「やりたいことを突き詰めていったら、そりゃ当初見えてなかった仕様が必要になるかもしれないし、優先度が変わってくるかもしれない。市場へ出してみてフィードバックが得られたら尚更。だけど時間は有限なのでそんなに無茶は効かないし、やむなく無茶するならするで最低限無茶をやってることだけは認識を持ちつつ納得して進めよう。いのちだいじに。」という進行をしたいプロジェクトに打ってつけのものです。
逆に、「新しい技術要素は無いし、仕様を変更することもまずないので、粛々とやろう。」という進行のプロジェクトにはあまり向きません。
興味を持ちましたか? 多分持ちましたよね。今なら60日間無料でフル機能を使えるトライアルがあるので、使ってみてください。Googleアカウントでログインしてすぐに使えます。OSSなど、タスクを全世界へ公開しても問題ないプロジェクトであれば全機能を無期限無料で利用できます。

Pivotal Trackerの初歩については技術評論社さんの「Smartphone Design」(2012年9月28日発売)に記事を書いたので、興味のあるかたはぜひどうぞ。思い返してみるとあの本(というかムックか)はVisual Studio方面の高橋忍さん、かれこれ10年ぐらい前に私がWin32 APIとC#を学ぶ際に一方的にお世話になった赤坂 玲音さん、コロプラの馬場さん、Simejiの矢野りんさんやadamrockerさん、先日テックヒルズで話す機会を頂いたAimingの牧野さんら、相当控えめに言っても「錚々たるメンバー」による作で、いろんなトピックをぱらぱらと読んで楽しめて役に立って1,580円(税込1,659円)は大変お得だと思います #sウテマ
ちなみにPivotal Trackerについては、1年経ってサービスのロゴと一部ログインUIこそ変わり検索など機能強化されました(そして執筆当時にはあった日本語処理上の不具合が解消されました)が、基本的な考え方や扱い方は執筆当時から全く変わっていません。

さて、本題です。

Pivotal Trackerは、各ストーリー(タスク)に細かな期日を割り当てないという特徴を持っています。あくまでも特定のスプリント内での処理をターゲットとし、また、柔軟にその処理順を変更することで細かなピボットを繰り返していくというコンセプトからすると、マイクロマネジメント的な過度の細分化と管理は不要ということでしょう。
いえ、正確には不要ではないのです。「自分のやることの期日は自分で管理できる人または集団のためのもの」ということです。純粋にプロジェクトをスクラムで進行する場合であれば、スクラム会議(朝や夕など定めたタイミングでの15分以内の日次ミーティング)を軸として解消するものといえます。
では、オープンソースのプロダクトや日次ミーティングを開催するのが難しい環境ではどうすればいいのか。
やはりプロジェクトメンバー各々が管理するしかありません

ここで大きな問題が生じます。タスクの多重管理です。
GTD運用に重要なポイントはいくつかありますが、それは機会を改めて書くことにして、今回着目したいのは
「要対応のタスクをGTDのツール(手帳でも、ソフトでも)上へ漏れ無く書き出す。そして優先度をつけ、実行フェーズでは脇目もふらずに処理する」
という性質です。このためには
  • Pivotal TrackerとGTDツールとの間でタスク情報を同期する(二重管理を極力避ける)
  • タスク管理に必要な操作量と複雑さを極力低減する(操作は少ないほうが良い)
ことが重要です(※人力で複雑なワークフローを回すと数十〜数百のタスクを処理しているうちにきっと漏れが出ます。漏れを出さないようにチェック回数を増やす策も一定有効ですが、明らかにストレス源となります)。

Pivotal TrackerはAPIが充実しており、外部ツールへと情報を取り出しやすいです。それを使った連携方法としてomnifocus.rb + omnifocus-pivotaltracker.rbが大変便利なので紹介します。OmniFocusでなくても勿論良いのですが、私がOmniFocusにべったり依存した生活を送っているので、OmniFocusベースの紹介です。


設定方法:
先に、Pivotal TrakerのAPIキーを発行します。
My Profileページへ行き、画面下部のAPI TOKEN部分で"CREATE NEW TOKEN"をクリックします。

図のようにトークンが発行されればokです。
続いて、Rubyで書かれたOmniFocusバインディングとPivotal Trackerプラグインをgemsからインストールします。
$ sudo gem install omnifocus omnifocus-pivotaltracker
$ of sync
ここまで実行すると、~/.omnifocus-pivotaltracker.ymlに設定ファイルのテンプレートが作成されます。このファイルに、Pivotal Trackerから発行したAPIキーを記入します。:user_name:には、プロジェクト内で利用している略名を指定しましょう。なお、omnifocus-pivotaltracker 1.1.0以上では、マルチアカウントをサポートしています。公式READMEにあるように
---
-
  :token: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  :user_name: muo
-
  :token: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
  :user_name: KN
と複数のトークン設定を続けて書くことで、複数のアカウントの情報と同期できます。様々なプロジェクトで別々のアカウントを持っている場合などに大変便利です*2
トークンを設定したら、もう一度
$ of sync
を実行しましょう。OmniFocusのnerdというプロジェクトディレクトリ中にPivotal Trackerのプロジェクト群がインポートされたはずです*3

このような状態のプロジェクトは、OmniFocus上で

このように表示されます。運用ルールとして「期日入力はOmniFocus上でおこなう。ほかの一切のワークフロー処理はPivotal Tracker上で通常通りにおこなう」と定めるのが重要です。あとはcrontabで
*/10 * * * * of sync 1>/dev/null 2>&1
のように10分毎の実行を仕込んでおきましょう。Pivotal Tracker上で完了状態(Deliveredなど)へと変更したタスクは、10分以内に反映されることになります。あとは「完了タスク、ちゃんと完了チェック付けたっけ?」などは忘れてひたすらと実行フェーズを頑張ってください。
ちなみにOmniFocus上でタスクを完了状態にしても、Pivotal Tracker上で何らかの完了状態になるまでは次回同期時に状態が巻き戻されます。期日入力以外をOmniFocusでおこなう=ルールに違反したミスなので、早期に検出できて良いですね*4

Q. ところで17倍ってどういう意味?

A. 素数!*5

*0: こちら
*1: Pivotal...といえばリーン・スタートアップ(懐かしい)書籍中で技術協力としてPivotal Labsがクレジットされていたのを覚えている方もいらっしゃるでしょう。えっ、いない?そんなぁ…ともかく、その会社の製品(サービス)です。
*2: 別のアカウントで持っているプロジェクト名が同じだったらタスクが混ざってカオスなことになるので注意してください
*3: omnifocus.rbの現行版にはnon-ASCII文字コードの扱いに問題があり、日本語プロジェクト名を扱うと「同期するたびに空の同名プロジェクトが増える」という不具合があります。パッチは投げてあるので、取り込まれるのを待つか、日本語プロジェクト名を避けるか、手パッチで対応してください。
*4: OmniFocus側を状態の正とするのはイマイチ良い策といえません。Pivotal Tracker内には「ストーリーの結果をオーナーに確認してもらい、問題があれば差し戻してもらう」というワークフロー概念および「FeatureとChoreというストーリー種別」が存在しており、OmniFocusでシンプルにこれらをカバーするのが割と無理筋なためです。
*5: Effective Android 達人出版会版の36章参照