2009年1月24日土曜日

route-meでタッチイベントを扱いたい

  • タッチイベントを扱うときはRMMapViewDelegateプロトコルを採用する
  • シングルタッチ、ダブルタッチを感知したり、マーカー上のタッチやドラッグを感知したり、地図の移動およびズームを感知したりできる
  • 現状、マップのドラッグやズームを使用不可能にするための手段は用意されていない。Delegateの返り値による操作もできない。
  • UIMapViewにenableDraggingおよびenableZoomというインスタンス変数が用意されているが、mapView->enableDraggingのようにしてアクセスしようとするとコンパイルエラーになってしまう。

route-me上でタッチイベントを取得してみました。

こんな感じで、画面上のタップした点を取得することができます。

タッチイベントの取得方法は、
まずRMMapViewDelegateプロトコルを任意のクラスに適合させて、
@interface MapViewController : UIViewController  {
/* 中略 */
- (void) singleTapOnMap: (RMMapView*) map At: (CGPoint) point
{
NSString *message = [NSString stringWithFormat:@"(%f, %f)", point.x, point.y];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"singleTapOnMap"
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
/* 後略 */

適合させたクラスのオブジェクトをRMMapViewのdelegateプロパティにセットします。
RMMapView *mapView = [[[RMMapView alloc]
initWithFrame:[UIScreen mainScreen].applicationFrame WithLocation:initialLocation.coordinate]
autorelease];
mapView.delegate = self;

普通のUIViewとほとんど同じですね。

しかしこの方法では画面上の座標がとれるだけで、緯度経度を取ることができませんので、
RMMapViewのメソッドを用いて、緯度経度に変換します。
@interface MapViewController : UIViewController  {
/* 中略 */
- (void) singleTapOnMap: (RMMapView*) map At: (CGPoint) point
{
//ポイントをLatLongに変換して表示する
CLLocationCoordinate2D coordinate = [map pixelToLatLong:point];
NSString *message = [NSString stringWithFormat:@"(%f, %f)", coordinate.latitude, coordinate.longitude];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"singleTapOnMap"
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
/* 後略 */

これで緯度経度になりました。

ところで、地図のスクロールやズームを制限して利用したいというときがあると思います。
たとえば日本向けのアプリなのにアルゼンチンの地図をスクロールして表示されたら困るという場合です。

早速地図のスクロールを制限する方法を調べてみたところ、
RMMapViewにいかにもそれらしいメンバー変数を発見。
@interface RMMapView : UIView
{
RMMapContents *contents;
id delegate;
BOOL enableDragging;
BOOL enableZoom;
RMGestureDetails lastGesture;
float decelerationFactor;
}

しかしながらこのメンバー変数、プロパティも操作するためのメソッドもなく、外部から操作することができません。
ためしに無理矢理以下のようなコードを書いてアクセスしてみたところ、コンパイルではねられました。
RMMapView *mapView = [[[RMMapView alloc]
initWithFrame:[UIScreen mainScreen].applicationFrame WithLocation:initialLocation.coordinate]
autorelease];
//以下の行でエラー。アクセスできません
mapView->enableDragging = NO;

残念ながらまだこの機能は現在のバージョンのroute-meでは利用できないみたいです。

その他、delegateメソッドの返り値をNOにしたらスクロールしなくなるとかそういう機能がないか調べてみましたがやはりなさそうで、今のところ地図のスクロールおよびズームを制限するのは難しそうです。今後のバージョンアップに期待ですね。

2009年1月19日月曜日

英語の発音を練習するアプリ「iはつおん」をAppBank様から頂戴いたしました

  • こちらのキャンペーンに応募→http://www.appbank.net/2009/01/13/iphone-application/6376.php
  • 見事当選!(AppBank様ありがとうございます)
  • 数ある英語の発音23種類を、お手本を聞きながら実際に自分で発音して練習できるアプリ
  • 「録音」機能がついていて、自分の発音を録音し、お手本と聞き比べられるのがすごくよい
  • 一音単位だけではなくて、単語単位での発音練習も可能
  • バージョン1.1現在、'U'の発音方法の説明がバグっていて、'Z'のものになっている
  • 単語単位だけではなくて、実際の文章単位での発音練習もできるようにして欲しい
毎日欠かさずチェックしている、iPhoneアプリレビューサイトのAppBank様。そのAppBank様の「英語発音練習iPhoneアプリ「iはつおん」無料プレゼントキャンペーンのお知らせ。」を見て、まさにこれぞチャンス!と思い速攻で申し込んだところ、なんと当選してしまいました。

当選してアプリとiTunes Store (US)のアカウントという飛び切りのお年玉をいただくことになりました。本当にありがとうございます。
受かったからには気合いを入れてレビューを書かねば!

まず最初に1点だけバグが見つかったので、その報告だけ。

なるほど、Aの発音はお腹から「ズッ」っと発声すればいいのかー・・・って違うわ!


【2009/01/22】
iはつおんの機能のレビューにつきましてはこちらを参考にしていただくとして、
ここでは、私の英語学習体験とiはつおんによる英語学習を照らし合わせたレビューをしてみます。

まずは私自身の英語学習歴から簡単にご説明。
  • 12歳で塾(公文式だったかな)に通い始めて、そこで英語を覚える。たいしたことはしていないけれども、「英語は日本語じゃないから日本語とは違うようにしゃべろう」と決心したことだけは覚えている。おかげで変な日本人発音だけはしないようになりました。
  • 13歳で中学に入る。中1の英語のセンセイがとてもよい女性の先生だったためめきめき覚える。ちなみに2年3年のころのセンセイは大変生徒から不評であった。
  • 14歳でウルティマオンラインを始める。当時のUOはAsukaとかYamatoとか日本人向けサーバーができはじめてはいたが、まだNPCは平気で英語をしゃべったりしていた。そのため必然的に英語を取得。"vender buy bank guards i ban thee"などといった日常ではあまり使わないであろう単語を中心に読み書きできるようになりました。
  • 15歳ぐらいでInfantryという神ゲーに出会う。こちら英語版しかなく、音声も画面メッセージもすべて英語。味方も敵も外人。必然的に英語で"n00b lamers you can't even stop my single assault =P"などとののしりあうことができるようになりました。
  • 16歳ぐらいでDiablo2という宇宙最強のRPGに出会う。こちら英語版しか(ry)・・・なのですが、Diablo2はInfantryと違ってRPGであったため、キャラが英語でストーリーをしゃべってくれます。おかげである程度英語が聴けるようになりました。
  • 17歳ぐらいで世界遺産級のRTSゲームことWarcraft3に出会う。こちら今でもプレイしていますが、これまたキャラが英語でしゃべるので(ry)。またこのゲーム、キャラの台詞がいちいちカッコイイ(例:これとか)ので、ついつい口ずさんでしまう。端から見るとただのキモいオタクでしたが、この実際に声に出したところが後々の英語力として残ったのではないかと思ってます。
  • その他World of Warcraftなどプレイして今に至る。
ごらんの通り、英語は完全にPCゲームから覚えています。
まともに発音記号の読み方がわかるようになったのは大学に入ってからだったり、英単語帳とか大学受験の年になって慌てて買ったというような具合ですので、
いわゆる「英語学習」というような型にはめる勉強法をほとんどしていないのです。

そんな私がiはつおん、早速試してみました。



私が見つけたiはつおんの最大のメリットは、「正しい発声方法」の「イラスト」と「解説」と「お手本発声」と「自分へのフィードバック(録音)」の4点セットが1画面で提供されていることでした。
普通の英語教材って、
  • CDだったら音はありますが発声方法がない
  • 本だと発声方法はあるけど音がない
  • そもそも自分の発音が正しいのか聴くことができない、テープレコーダーとか大げさで面倒すぎる
などなど、この4点を同時にまとめてカバーしてくれる教材なんて皆無だったのです。
ところがiはつおんなら、発声方法を見ながら、正しい音を同時に聞きつつ、さらに自分で同時に発声して練習もでき、再生ボタンを押せばすぐにフィードバックが返ってきます。
この4つの機能が1画面にまとまっている!というのは他にないアドバンテージですね。



逆に、問題点として以下の2点が浮かびました。
  • 文章単位での練習ができない。せいぜい単語単位までの音の流れしかつかめず、単語同士の接続の流れ(極端に言えばan appleがあんあっぷるじゃなくてあなぽーになる)が身につかないのではないか
  • やればやるほど目に見えて増える項目がないので達成感がない、楽しくない、したがって続かないのではないか
私の経験と照らし合わせると、
  • 聴く内容は文章、またはストーリー
  • 楽しいので毎日毎日朝から晩までやっていた
という要素があり、これが学習効果としてすごくよかったのではないのかと今になって思うからです。

また、例となる単語の数がそれほど多くない(1発音記号につき12個しかない)ので、やはり継続性に欠けると思います。
現在の私は、もっぱらiはつおんを発音方法のリファレンスにしながら、YouTubeの英語の動画の台詞をまねして発音してみたりという勉強方法にシフトしており、iはつおん単品での学習は行っていません。

現在のままでも発音方法のリファレンスとして使う分には100点満点クラスのアプリだと思いますが、せっかくならやはりよい学習コンテンツと組み合わせていただきたい!と感じてます。

そこでもしiはつおん2を出す予定がおありなら、是非ストーリー形式で文章を読み上げていくような形にして欲しいです。
英単語帳にDUOというシリーズがありますが、まさにこのシリーズをiはつおんのシステムでやれば、これまでの英語学習教材にはない学習体験が得られるかも!と考えているのですが、いかがでしょう?

RakuRaku Technologies さん、どうですか!?次はDUOでやっていただけませんか!?

2009年1月18日日曜日

iMac上でWindows XP Professional アップグレード版をBoot Campする

  • AppleはVistaまたはXPの通常版のみをサポートしている
  • が、実際にはアップグレード版もインストールできる
  • そのままではインストールできないので、外付けDVDドライブを買ってくる必要がある
  • ディスプレイドライバを更新する際に、ツールを利用してちょっとしたが必要になる
    http://www28.atwiki.jp/2chmac/pages/59.html を参照のこと
iMac (Early 2008モデル)にWindows XP Professional アップグレード版をBoot Campを用いてインストールしたときの手順メモを公開いたします。メモなのであんまり期待しないでください。



○Boot Campする前にまず覚えておきたい基本動作
・iMacのディスクは再起動時にマウスボタン(右でも左でも)を押しっぱなしにしていれば取り出せる
・再起動時にOptionキーを押しっぱなしにしていると、MacでブートするかWindowsでブートするか選択できる


○アップグレード版Windowsをインストールする方法
・外付けのDVDドライブを用意する。接続はFireWire推奨、でも最近のiMac(Leopard以降)ならばUSBでも起動ディスクとして認識してくれると思う。
・アップグレード対象の古いWindowsを用意する。自分の場合はWindows 2000のSP4適用済みディスクを利用した。
・本体にWindows XPを入れて、外付けにWindows 2000を入れた状態でBoot Campアシスタントからインストールを開始。
 途中で例によって昔のディスクを入れてくれと言われて一度止まるが、そのまま続行すると昔のWindowsを認識してくれてインストールできた
・インストール後のユーザー登録はネットで一発だった。
・パーティションサイズは32GB以下であればFAT32になってMacから読み書きできる。
 それ以上になるとNTFSになるので単純にMacからは見えない。
・インストールするパーティションを聞かれたら、Cドライブ(BOOTCAMP)を選択すること。また、再度FAT32でフォーマットをかけること。


○ディスプレイドライバ
・Leopard付属のドライバでほとんどは事足りるが、そのままではATI Catalyst Control Centerがインストールされないため、目つぶし液晶を暗くすることができない。
(もちろんBoot Campアシスタントを利用すればある程度は暗くできるが、それでもまだ明るすぎるので)
http://www28.atwiki.jp/2chmac/pages/59.html こちらのページに記載されている、「Q ドライバをインストールしてもグラフィックの細かな設定ができません」の項目を参考にして、最新のディスプレイドライバ with Catalyst Control CenterをATIからダウンロードしインストールすると、Control Centerから明度の調整ができるようになって一件落着