駄文

寝る前に文章を書くと推敲が甘くなるので少しだけ。
最近いろいろと環境が変わって、優れたエンジニアがすなわち優れたプロフェッショナルとはならないという事例をよく目にしている。まあ当たり前といえば当たり前だ。どんなに球を早く投げる投手でも、試合で勝てなければ存在価値は無い。ずば抜けた技術を持っていても、誰の役にも立たないコードを書いている奴は、すなわちそれは存在していないのと同然だ。よく見かける「何のために」「誰のために」がごっそり抜けたエンジニアは、結局のところそれを考えるビジネスマンの体の良い外部演算装置である。いつかは、後発の、さらに性能のいいパーツに置き換えられてしまうだろう。
かなり言い古されたことだけれども、他の人には出来ない何かを、自分が持っている技術とミックスさせることは重要だと思う。そういった意味では、「僕は〜のような人になりたい」なんてことは考えないほうがいいのかもしれない。
かといって、自分しか持っていない知識を共有しない奴はビジネス的には最悪だけれども。

ActionBarSherlockでNoClassDefFoundError(ただしGingerBread以下)

あるアプリケーションを作っていて、UIをActionBarで統一するためActionBarSherlockを導入しました。

ListView関連サポートがないとか(これはなんとか回避)、MapActivityサポートがないとか(これも無理矢理回避)困難を極めたのですが、普通に実装しているのにNoClassDefFoundErrorが出る事案が発生。

それまでGalaxy Nexusで動かしていたときは何とも無かったのに、NexusOneで急に出るようになってしまいました。これがAndroidの互換性の罠か…。

調査したところ、SearchViewをContexual Menuとして実装するところを外すと上手くいきました。
NoClassDefFoundErrorが何故出るかは不明なのですが、よくMapViewでGoogleAPIsを指定しないと同じような事象になるので、まあそういうもんだろうとあまり考えずに それっぽい実装をして終了。こんな記事では役に立たないこと請け合いのなので、ダメそうだった部分を記載しておきます。

 

@Override
public boolean onCreateOptionsMenu(Menu menu) {
	MenuInflater inflater = this.getSupportMenuInflater();
	inflater.inflate(R.menu.contexual, menu);
	SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
	〜〜〜〜〜〜

ArtIME バージョンアップ (v1.3)

前回のアップデートから半年経ってしまいましたが、ようやくバグを取りきり、アップデートを掛けました。

ダラダラ書かせていただくと、今回のアップデートはちょっとしたバグを取るために正攻法で挑んだため、アプリサイズが倍になってしまうという状態になっています。
元々のバグというのは、AndroidのOS側に起因した、

「キーリピートされている状態でキーボードの変更が起きるとリピートが解除されない」

というもので、Androidで日本語IMEを開発されている方には有名なバグのようです。
動作としては、「未変換状態の日本語を2文字以上入力し、デリートボタンを押し続けると、2文字以降はキーリピートがかかるが、入力領域の最後の1文字を削除する直前でKeyboardView側のKeyboardが入れ替わり、その入れ替わりのタイミングでキーリピートが解除されない」事象が発生します。

正攻法で、と言ったのは、結局このバグを取るためにAndroid側のソースをForkして、修正して取り込んだためです。 このために、周辺のリソースをも巻き込んだ膨大な修正をせねばならず、結果サイズが増えました。本来はそのキーリピートの部分だけ上手く回避して実装する方法もあるのですが、今後の拡張性を考えて、Android側のソースをプロジェジェクト側に持っておいたほうが良い、という判断を最終的にしています。

今後のArtIMEですが、できるだけOpenWnnのソースを残すように拡張していたのですが、ここで思い切ってソースを綺麗に書き換えようと思っています。当然スピードも早くなりますし、メンテンナンス性も向上することが見込まれます。また、複数あるビジュアルテーマも統合し、プラグイン化して外出ししようと思っています。ArtIMEの次のバージョンにご期待ください。

ArtIME 日本語入力が Mashup Award 7にてイースト賞受賞しました

ということであけましておめでとうございます。

昨年の記事を元旦に書くのはどうかとも思いますが…。

ArtIME 日本語入力

2011年12月11日に行われました、Mashup Awards 7 にて、ArtIME日本語入力がイースト賞を受賞しました。
マッシュアップという点では、以前からWikipedia検索に対応していたものを今回のコンテストに合わせてイーストさんの英和/和英APIに対応させたものです。
イーストさんのコメントでは、英和/和英機能の実装前にチェックいただいていたようで、その後副賞が贈られてくる際に対応機能を見て頂きました。

そして副賞がこちら。

繁盛(半升)俵ということで、大きさはたいしたことないです。半升=五合ですからね。

AsyncTaskでOnly the original thread that created a view hierarchy can touch its views.

メモです。

AsyncTaskで処理をしているのに、Only the original thread that created a view hierarchy can touch its views.が出る場合。

→doInBackgroundでUIを触ってませんか?onPreExecuteかonPastExecuteで対応しましょう。
この問題、doInBackbroundでは2回目のアクセスの時に落ちるので、発見しにくいです。

エンジニアスタートアップミーティング(ESM)

私の活動の一つに「エンジニアとスタートアップを結びつける」、
エンジニアスタートアップミーティングというものがあるのですが、
techwaveで紹介されました。

http://techwave.jp/archives/51698140.html

スタッフだと聞き逃すことが多いので、大変感謝。

メキシコの漁師だったなら、もう少し魚を取りたい

自分に何ができるのか、どうしたいのか、という整理を(Yahoo!モバゲーでテトリスしながら)考えていたのですが、脳内で面白い考察に至ったので記事にします。

下に有名なコピペを引用します。

メキシコの田舎町。海岸に小さなボートが停泊していた。
メキシコ人の漁師が小さな網に魚をとってきた。
その魚はなんとも生きがいい。それを見たアメリカ人旅行者は、
「すばらしい魚だね。どれくらいの時間、漁をしていたの」 と尋ねた。

すると漁師は
「そんなに長い時間じゃないよ」
と答えた。旅行者が
「もっと漁をしていたら、もっと魚が獲れたんだろうね。おしいなあ」
と言うと、
漁師は、自分と自分の家族が食べるにはこれで十分だと言った。

「それじゃあ、あまった時間でいったい何をするの」
と旅行者が聞くと、漁師は、
「日が高くなるまでゆっくり寝て、それから漁に出る。戻ってきたら子どもと遊んで、
女房とシエスタして。 夜になったら友達と一杯やって、ギターを弾いて、
歌をうたって…ああ、これでもう一日終わりだね」

すると旅行者はまじめな顔で漁師に向かってこう言った。
「ハーバード・ビジネス・スクールでMBAを取得した人間として、
きみにアドバイスしよう。いいかい、きみは毎日、もっと長い時間、
漁をするべきだ。 それであまった魚は売る。
お金が貯まったら大きな漁船を買う。そうすると漁獲高は上がり、儲けも増える。
その儲けで漁船を2隻、3隻と増やしていくんだ。やがて大漁船団ができるまでね。
そうしたら仲介人に魚を売るのはやめだ。
自前の水産品加工工場を建てて、そこに魚を入れる。
その頃にはきみはこのちっぽけな村を出てメキソコシティに引っ越し、
ロサンゼルス、ニューヨークへと進出していくだろう。
きみはマンハッタンのオフィスビルから企業の指揮をとるんだ」

漁師は尋ねた。
「そうなるまでにどれくらいかかるのかね」
「二〇年、いやおそらく二五年でそこまでいくね」
「それからどうなるの」
「それから? そのときは本当にすごいことになるよ」
と旅行者はにんまりと笑い、
「今度は株を売却して、きみは億万長者になるのさ」
「それで?」
「そうしたら引退して、海岸近くの小さな村に住んで、
日が高くなるまでゆっくり寝て、 日中は釣りをしたり、
子どもと遊んだり、奥さんとシエスタして過ごして、
夜になったら友達と一杯やって、ギターを弾いて、
歌をうたって過ごすんだ。 どうだい。すばらしいだろう」

この文では「理想の生活や精神的な満足はお金で買うものじゃないよ」という意味のように捉えられますし、私もそう脊髄反射してました。

が、すべての物事には両方の側面があるように、この文も見方を変えてみるべきなんじゃないかなと思うのです。美味しい魚を取れて、その能力が他の人の幸せに役立つのならば、もう少しだけ漁をするのもいいのではないかと。

自分の仕事が人を幸せにするかどうか、それが正当に評価される指標としての収入があると考えています。

ならばギターを弾くのをやめて漁をする時間を増やしたいな、と私が漁師ならばそう思うのです。心の貧乏性ですかね。

ユーザインタフェースとはなにか

このハガキを見て思いました。

JR東海には新幹線を便利に乗れるエクスプレスカードというものがあるのですが、
前のメールアドレスが登録されていたので変更しようとしたのです。
すると、「メインメニュー[ご連絡先などの変更/退会]に設定しろ」としか書いてません。

通常、この部分を読んでユーザが起こすアクションは「URLをブラウザに入れる」だと思うのですが、
その情報が欠けているわけです。ちなみにハガキのどこにもURLはありませんでした。

(追記:同じページにはなかったのですが、別のページにはありました。)

そこで思いました。ユーザインタフェースとはなにか。
人が行動するときに、それをうまく誘導するものではないか?
新しい必要はなく、何より「迷わない」ことが重要ではないか?
適切な情報の量と質を提供して、判断を促すことではないか?

日本文化の持つ、十分洗練された「おもてなし」や「サービス」こそが、
世界に誇れるインフラもしくはコンテンツだと確信しています。