HMDT - Logic and Intuition -

about HMDT

HMDT Journal

November, 2009

Nov 27

ASCII.jpの方に、インタビュー記事が出とります。「Mac向け開発で先行したフレームワークを使うHMDT」ってやつ。

「スマートフォンを本当に"ビジネス"にする」という連載で、iPhoneやらAndroidやらのスマートフォン向けアプリに関する話を書くそうな。その一環として話を聞いてもらった。

自分の発言の記事を読むのはいつもむずがゆいんだけど、ある人には、自信が見え隠れしている、って言われた。ま、否定はしないけど。

その記事の中で、近々大辞泉のメジャーアップデートを行なうって書いているけど、今度の大辞泉はすごいよ!新機能満載だ。リリースを記念して、イベントをやるよ!例によって、銀座のApple Storeにて。『小学館×HMDT presents:iPhoneアプリ「デジタル大辞泉」リニューアルイベント』だ。12月7日、18:00から19:00の予定だ。

その内容は、

23万語収録のiPhoneとiPod touch向け国語辞典アプリ「デジタル大辞泉2009i」(小学館)のフルリニューアルを記念してイベントを開催します。明朝体の採用、手書き入力、画像検索など、ますます美しく機能的になったデジタル大辞泉の魅力を、開発者であるHMDT株式会社の木下誠氏を迎えてご紹介します。

とのこと。思いっきりネタバレしてるな。

今度の大辞泉の新機能は、まず明朝フォントの採用。やっぱり国語辞典は明朝だね、ということで遅まきながらつけました。そして、待望の手書き入力。やっぱり国語辞典は手書き入力だね、という人がどの程度いるのかはしらんけど、これは必須の機能だね。手書き入力がないと、読めない漢字を引くことができないからな。もちろんソフトウェアキーボードに比べて、入力時のストレスも圧倒的に軽減だ。長文を書くのではなく、数文字を入力するだけならば、手書き入力は凄まじく快適だ。他にも、画像検索機能を備えたり、Map Kitにこっそり対応したり、あんな付録機能がついたりと、ほんと新機能満載だ。

でも一番の売りは、やっぱり国語辞典としての使いやすさだね。国語辞典の使いやすさは、いかに素早く、確実に、目的の語句を検索できるか、ということでしょう。そこのところは妥協無く追求している。そのあたりの詳しい話も、イベントでお話しできると思うよ。ということで、時間の都合のつく方は、ぜひ来てください。銀座で会いましょう。

後は、無事審査を通るのを祈るのみ。

ついでに、最近リリースされたHMDT開発のiPhoneアプリのご紹介。まず、ポケプロ仏和和仏。小学館さんの、ポケットプログロッシブ仏和和仏をiPhoneに収めた、フランス語辞書アプリだ。前にポケプロ英和和英というのを作ったけど、そのシリーズの一環だ。

大辞泉や英和和英と共通である、使いやすく格調高いユーザインタフェースが特徴だ。他の言語もどんどん続いていくよ。

あと、WEEKLY ASTRO BOY MAGAZINEってのも作った。これはその名の通り、「週刊鉄腕アトム」っていうことだ。これはUSのApp Storeでのみの配信になっている。

いわゆるマンガのビューワになるアプリだね。ただ、非常に特徴的なところがある。普通のマンガビューワだと、標準の写真アプリケーションみたいに、ピンチイン/アウトを繰り返して読み進めて行くけど、あれだとコマを追って行くのは大変だよね。じゃあってんで、マンガをコマごとにバラバラに切り離して、それをスライドショーで読んでいくものもある。あれは、マンガを台無しにしてしまっている感じもするよね。ページがあって、その中のコマ割があるからこそ、マンガのダイナミズムが発生するのに。

この、コマを追いかける読みやすさと、ページの中のコマ割を大事にする、という命題を両立させたのが、このWEEKLY ASTRO BOY MAGAZINEで採用している、コマアニメーション機能だ。使い方はとても簡単。ページの中の、あるコマをダブルタップする。そうすると、そのコマが拡大されるんだ。コマ以外の画面は、暗い半透明に沈む。そしてタップすると、次のコマへアニメーションして進む。さらにタップすれば、次のコマへと進む。こうやって読み進めて行くんだ。

つまり、マンガを読み慣れた人が、頭の中で無意識にやっている行為を再現したんだ。これで、iPhoneの狭い画面の中でも、まったく違和感無くマンガを読むことができるよ。

Nov 19

久しぶりにCocoaハックネタ。昔はよく書いてたけど、最近は書かなくなったな。大人になったってことなのかな。単純に忙しいだけかな。

iPhoneでの話なんだけど、UIScrollViewってあるでしょ。フリックでスクロールしてくれるやつ。あの気持ちよさが、iPhoneのユーザエクスペリエンスの気持ちよさの源泉だよね。

ある程度プログラミングしていくと、このUIScrollViewのフリック挙動をいろいろ変更したくなる。フリックっていっても、しょせんはタッチしてムーブしているだけのことには変わりない。というこは、これらのイベントが渡ってくるtouchesBegan:withEvent:や、touchesMoved:withEvent:を上書きすればいいんだよね。よーし、じゃUIScrollViewのサブクラス作って、これらのメソッドを上書きして、、、こねーよ!スクロールしてんのに、このメソッド呼び出されねーよ!タッチイベントはどこへいった?

こんなときは、class-dumpだ。UIKitを、さくっとclass-dump。あ、ちなみにclass-dumpって何?って人は、『Dynamic Objective-C』でも買って読んでくれ。で、UIScrollViewのヘッダを眺める。うーん、分かんねー。

こういうときは闇雲にやるのではなく、理詰めのアプローチが必要だ。さっき、UIScrollViewのサブクラスでtouchesBegan:withEvent:を上書きしても呼び出されない、って書いたけど、実は呼び出されるメソッドもある。たとえば、touchesShouldBegin:withEvent:inContentView:だ。これは、サブクラスで上書きして使うためのパブリックAPIだ。そこで、ここにブレークポイントをしかけて、デバッガで見てみる。

すると、、、あ、なんか面白いもんひっかかった!UIScrollViewDelayedTouchesBeganGestureRecognizerってクラスから呼び出されている。名前長いな、こいつ。

ではでは、さっきのclass-dumpしたヘッダに戻ろう。ここから、さっきのクラスを探す。するとこいつは、UIGestureRecognizerってクラスのサブクラスになっている。じゃ、UIGestureRecognizerのサブクラスが他にないかな、って探すと、、、ぞろぞろ出てきた。

  • UITapGestureRecognizer
  • UIPinchGestureRecognizer
  • UILongPressGestureRecognizer
  • UITextTapRecognizer
  • UIPanGestureRecognizer
  • UITapAndAHalfRecognizer
  • UIDragRecognizer
  • UISwipeGestureRecognizer
  • UIScrollViewDelayedTouchesBeganGestureRecognizer

クラス名に、タップだとか、ピンチだとか、パンだとか、スワイプだとか、気になる単語がいっぱいついている。どうやら、iPhoneのタッチジェスチャーは、こいつらが管理しているようだ。

この情報をもとにUIScrollViewのヘッダを見直してみると、なるほど、_pinchGestureとか、_panGestureとかいうメソッドがあるね。UIGestureRecognizerクラスを使っているらしい。

じゃ、ほとんにこいつらがタッチイベントを受け取っているかどうか確認してみよう。これにはメソッドのスワップを使うのが手っ取り早い。こんな感じのソースコードで。

    Method  methodA, methodB;
    methodA = class_getInstanceMethod(
            NSClassFromString(@"UIPanGestureRecognizer"), 
            @selector(touchesBegan:withEvent:));
    methodB = class_getInstanceMethod(
            NSClassFromString(@"MyScrollView"), 
            @selector(myTouchesBegan:withEvent:));
    method_exchangeImplementations(methodA, methodB);

これで動かしてみると、おぉ、タッチイベント来た!フリック中のタッチイベントを捕まえることに成功した!ハックってのは、偶然できたり、神がかった力を発揮してやるのではなく、こうやって筋道を立ててやるんだよね。

これを使ってどうするかってのは、また別の話。

Nov 10

最近は、サーバ側のプログラムをコツコツと書いている。Webアプリケーションだ。使っている言語は、Perl?PHP?Ruby?いやいやいや。Cocoaに決まっとるでしょーが。Mac OS X Serverで動かすに決まっとるでしょーが。

CGIプログラムってのは、極端な話、ひたすら長いmain文だね。こら確かに簡単だわ。いや、もちろん複雑なWebアプリ作ろうと思ったらだんだん難しくなるのは分かるけど、基本的に入力があって出力はいて終わるんだよね。デスクトップやiPhoneアプリのようなイベントドリブンものと比べたら、やっぱり単純だよね。

Nov 8

マイコミジャーナルの方での連載「実践! iPhoneアプリ開発」だけど、細々と続いている。カメラ、RSSリーダ、楽器、ロギングときて、いまはゲームの作り方。タワーディフェンスゲームを作っている。

技術的に言えば、OpenGLの使い方の説明ってことになる。ま、いまどきOpenGLを直に使ってフルスクラッチからゲーム作る人はいないのかもしれんけどね。みんな、なんかしらのゲーム用フレームワークを使っているんでしょう。そこはあくまでサンプルとしてとりあげているからということで。

ぜんぜんMacにもiPhoneにも関係ないんだけど、今度東京マラソンを走る。当選しちゃったよ。三回目の応募で、ついに当選。フルマラソンは、生まれて始めて。というか、レースに出る事自体、始めて。

目標は、三時間半を切ること。嘘です。大嘘です。なんでもいいから完走する事です。

ということで、最近は週末だけにわかランナーになっている。皇居の周りをグルグル走って練習している。あそこって、走るの気持ちいいね、とっても。東京のど真ん中なのにとても視界が広くて。

back to top content

Copyright © 2002-2006 HMDT. All rights reserved.