2012年5月31日木曜日

Cordovaを使ったアプリへのiAdの組み込み その2

前記事に続き、自作アプリへの組み込みに挑戦しました。
前回同様、Cordova1.7.0とXcode4.3を使用。

自分にとってブラックボックスな部分が多いので、サンプルのindex.htmlのjavascript部分をjsファイルとして独立させ、
ほぼそのまま自作アプリに持っていってみました。
途中、ダブルクォーテーションが全角になってるとかいうくだらないミスで
ひっかかってしまうトラブルがありましたが、ほぼそのままの状態で動作しました。
広告の表示位置の変更がオリジナルの状態ではうまくできず、adAtBottomの指定を先頭に持ってくることで解決しました。
var gLastAdLoadedDate = null;
var gTotalAdsLoaded = 0;
var gTimerId = null;

/*この準備okな時に関数が呼んで欲しい関数*/
function onDeviceReady()
{
        //広告の表示位置。trueで下部、falseで上部に表示。
        var adAtBottom = true;
        window.plugins.iAdPlugin.prepare(adAtBottom);

        // 端末の方向をチェックして適切なサイズに修正する部分
        // 横向きの時に上手く広告が表示されない可能性有。
        window.addEventListener("orientationchange", window.plugins.iAdPlugin.orientationChanged, false);
        window.plugins.iAdPlugin.orientationChanged(true);//trigger immediately so iAd knows its orientation on first load

        //広告を表示させる。
        window.plugins.iAdPlugin.showAd(true);
        //
        // listen for the "iAdBannerViewDidLoadAdEvent" that is sent by the iAdPlugin
        document.addEventListener("iAdBannerViewDidLoadAdEvent", iAdBannerViewDidLoadAdEventHandler, false);
        // listen for the "iAdBannerViewDidFailToReceiveAdWithErrorEvent" that is sent by the iAdPlugin
        document.addEventListener("iAdBannerViewDidFailToReceiveAdWithErrorEvent", iAdBannerViewDidFailToReceiveAdWithErrorEventHandler, false);
        setTimeout(function() {
                             window.plugins.iAdPlugin.prepare(adAtBottom); // by default, ad is at Top
                             }, 1000);
}

function iAdBannerViewDidFailToReceiveAdWithErrorEventHandler(evt)
{
        //alert(evt.error);
        window.plugins.iAdPlugin.showAd(false);
        var elem = document.getElementById("showAd");
        elem.checked = false;
}

function iAdBannerViewDidLoadAdEventHandler(evt)
{
        // if we got this event, a new ad is loaded
        var elem = document.getElementById("lastAdLoaded");
        gLastAdLoadedDate = new Date();
        elem.innerHTML = gLastAdLoadedDate.toLocaleString();
        elem = document.getElementById("showAd");
        elem.disabled = false;
        elem.checked = true;
        window.plugins.iAdPlugin.showAd(true);
        gTotalAdsLoaded++;
        elem = document.getElementById("totalAdsLoaded");
        elem.innerHTML = gTotalAdsLoaded.toString();
        if (gTimerId) {
                clearInterval(gTimerId);
        }
        gTimerId = setInterval(lastAdLoadedInterval, 1000);
}

function lastAdLoadedInterval()
{
        var now = (new Date()).getTime();
        var diff = now - gLastAdLoadedDate.getTime();
        var elem = document.getElementById("lastAdLoaded");
        var ms_in_a_year = 31449600000; /* 1000ms x 60s x 60m x 24hrs x 7d x 52w */
        var ms_in_a_week = 604800000; /* 1000ms x 60s x 60m x 24hrs * 7d */
        var ms_in_a_day = 86400000; /* 1000ms x 60s x 60m x 24hrs */
        var ms_in_an_hour = 3600000; /* 1000ms x 60s x 60m */
        var ms_in_a_minute = 60000; /* 1000ms x 60s */
        var ms_in_a_second = 1000;       
        var milliseconds = Math.floor(diff);
        var seconds = Math.floor(milliseconds / ms_in_a_second) % 60;
        var minutes = Math.floor(milliseconds / ms_in_a_minute) % 60;
        var hours = Math.floor(milliseconds / ms_in_an_hour) % 24;
        var days = Math.floor(milliseconds / ms_in_a_day) % 7;
        var weeks = Math.floor(milliseconds / ms_in_a_week) % 52;
        var years = Math.floor(milliseconds / ms_in_a_year);
        var caption = seconds + "s ago";
        if (minutes > 0) {
                caption = minutes + "m " + caption;
        }
        if (hours > 0) {
                caption = hours + "h " + caption;
        }
        if (days > 0) {
                caption = days + "d " + caption;
        }
        if (weeks > 0) {
                caption = weeks + "w " + caption;
        }
        if (years > 0) {
                caption = years + "yr " + caption;
        }
        elem.innerHTML = caption;
}

function showAdClicked(evt)
{
        window.plugins.iAdPlugin.showAd(evt.checked);
}

//広告消す
function AdFalse(){
        window.plugins.iAdPlugin.showAd(false);
}
//広告出す
function AdTrue(){
        window.plugins.iAdPlugin.showAd(true);
}

追記)横向きのときに広告エリアのサイズがおかしくなってしまう現象を確認しました。
サンプルでは問題なく、JQuerymobileを使ってる自作アプリで発生したのでJQuerymobileと
併用したときに発生する現象かも。なんとかしたい。

Cordovaを使ったアプリへのiAdの組み込み

アプリの審査申請にはまだ早いのですが、アプリ内広告の組み込みも試してみたかったのでiAdについて調べています。
このあたりの日本語ドキュメントがほとんど見つけられずとても苦労しています。

とりあえずサンプルを動かすところまでできたので一度手順をまとめておきます。

しつこく書いておきます。Phonegap(Cordova)は全然簡単じゃないです!
Webアプリをそのまま移植する場合はお手軽だけど、APIを使おうとした途端に難易度が跳ね上がります!

で、今回はXcode4.3とCordova1.7.0を使用しています。

 

参考にしたのはCordovaのAdPluginの組込み手順
https://github.com/phonegap/phonegap-plugins/tree/master/iOS/AdPlugin
と、Working Ossanさんのこちらのページ。
http://working-osan.blog.so-net.ne.jp/2011-09-14-2
※バージョンが違う為、Working Ossanさんのサイトの手順そのままではうまく動きません。

1)iAdのプラグインのzipふぁいるをダウンロードして解凍する。

2)解凍したファイルの中、iPhone/AdPluginのファイルをプロジェクトにコピーをする。
  SAiOSAdPlugin.js(とサンプルを試す場合はindex.html)をプロジェクトのwwwフォルダにコピー。
 サンプルのindex.htmlを使用する場合はcordova-x.x.x.jsを読み込んでる箇所があるので、
 使用しているCordovaのバージョンに修正する事。
 もちろんwwwフォルダにcordova-x.x.x.jsもコピーしておく必要があります。

 SAiOSAdPlugin.hSAiOSAdPlugin.mをXcodeのPluginsにドラッグアンドドロップ。
 「Copy items into destination group’s folder (if needed)」にはチェックを入れない。

iad1 

3)iAdフレームワークをプロジェクトに追加する。
TERGETS→Build Phases→Link Binary With Librariesを開き、+をクリックしてiAd.frameworkを追加する。
Link Binary With Librariesが2つあるけど上の方に追加する。

iad2
4)Cordova.plistのPluginsにSAiOSAdPluginを追加する。
 iad3
4)自前のhtmlに組み込むときはいろいろ修正。ヘッダにjs読み込む部分入れたり。
 このあたりはこれから試していくところ。

<script type="text/javascript" charset="utf-8" src="cordova-1.7.0.js"></script>
<script type="text/javascript" charset="utf-8" src="SAiOSAdPlugin.js"></script>

サンプルのindex.htmlを実行すると表示になりました。多分これで成功みたいです。
IMG_0172

まだ解決していない問題があって、ネットに接続されていない場合に、
以下の表示がされてアプリがそれ以上動作しなくなる事。
ネットワークに接続後アプリを再起動する必要があります。
追記)サンプルのindex.htmlの「alert(evt.error);」をコメントアウトすれば大丈夫そう。
IMG_0171 
iAd広告のドメインに接続できないよ!みたいな事なのかな。
あと、pluginのファイルを解凍したときにiOSフォルダとiPhoneフォルダが別にあるのも不明。
少なくともシミュレータ上ではiPhoneフォルダのファイルを使ってiPad上でも動作しています。

組み込みにはもう少し時間がかかりそうです。

2012年5月30日水曜日

CordovaからSafariにリンクする

自分のサイトへのリンク等の外部URLをクリックした時、アプリから抜け出してブラウザで開くようにしたかったのでその対応をしました。

以下のサイトを参考にしました。
http://blog.bbtune.com/archives/1376/external-link-to-safari-phonegap-ios

しかし、そのままではXcode、PhoneGapのバージョンが違うせいなのかうまく適用ができませんでした。
(Xcode4.3&Cordova1.6を使用)

試行錯誤した結果、Classes>MainViewController.mに下記の内容を追加することでうまくSafariで開けました。
(「- (BOOL) webView:(UIWebView・・・」がコメントアウトされていたのでそれは放置)

- (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    if( [[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"])
    {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    }
    else
    {
            return [super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];
    }
}

Objectb-Cの事はわからないので大半は参考サイトのものを転用しています。

2012年5月29日火曜日

JPEGを用いたアニメーション

File機能は一旦やめてJPEGを用いたアニメーションを試しています。

アニメGIFのようなパラパラアニメで、複数のページを参考に試していますが、いずれも全フレームの画像を横(縦)に並べた巨大なJPEGを用意してそれをJavascriptやCSSを利用してアニメーションさせる方法をとっています。
動かすまでは割りとあっさり成功しました。

参考にしたのは以下のページ。
CSS SpritesとCSSアニメーションでコマアニメを作る
アニメーションgifならぬアニメーションjpg/png
AfterEffectsを使ったiPhone用アニメーションjpegの作り方

1つめはCSS、2、3個目はJavascriptで実現しているみたいです。3は試しておらず。
Cordovaにはまだ落としこんでおらず、mobileSafari上で1,2を試してみましたが問題無く自分のアプリに組み込めそうです。

CSSだけで実現できる1つ目が導入が簡単ですが、

0% { background-position: 0px 0px; }
1% { background-position: -1px 0px; }
2% { background-position: -2px 0px; }
3% { background-position: -3px 0px; }
4% { background-position: -4px 0px; }
5% { background-position: -5px 0px; }



100% { background-position: -100px 0px; }

みたいに細かいアニメーションをさせようとするとCSSが長くなってしまうのが難点でしょうか。
また、1の方法だとScaleX、ScaleYを変更することで拡大縮小ができましたが、2の方ではうまくできず。

今回、20000x800の画像を使用しましたがちゃんと動作しました。

ただ、きちんとRetinaディスプレイを想定したサイズの画像を用意した割にジャギーのようなものが入ってしまい、今後の課題となりました。
ひとまずはアニメーション成功といった感じで終了です。

2012年5月20日日曜日

続File機能

最近はあまり進歩がない状況です。
ファイルからの読み込みサンプルを試してみたってくらいです。
サンプルだとテキストの保存、読込をやっているんですが複数の変数を保存して管理したい場合はどうしたら良いんだろう。
テキストで一括で取得してから各変数に分ければ良いのかなぁ。

Javascriptを使いこなせてないので今ひとつわかってません。
おとなしくLocalStorageを使っておくべきか。

ファイル書き込みの方については、こちらのページがサンプルの1つを和訳しているので参考になりそう。
http://dev.web-app.jp/?p=172

ちょっと違うけど一応チェック。
http://d.hatena.ne.jp/hagino_3000/20111122/1321897281
ストアの審査をはさまないでのちょっとしたアップデートの方法に関しての記述。

2012年5月15日火曜日

CordovaのFile機能を試している

Cordovaでのファイル保存を試しています。

特にLocalStorageだけでも問題はないかと思ってますが、ものは試しにと思って使ってみています。
例によって日本語ドキュメントは記述がPhoneGap時代の古いもので、どうやら新しいものとは差が大きいみたいです。
日本語ドキュメントのサンプルはうまく動作しませんでした。

現時点での最新は1.7ですが、使用しているのが1.6なので下記のドキュメントのサンプルを試してみました。
http://docs.phonegap.com/en/1.6.0/cordova_file_file.md.html#File

今日はFileWriterを試してみましたがサンプルそのままで問題なく動作。
もっとも、読み込みを試していないので本当に保存されているかまでは確認していません。

英語が苦手なのでまだいまいち内容も理解不足気味。

あとデバッグ方法もなんとかしたいのだけどどうしたら良いのかわからず困っています。
スペルミス等があるとJavascriptがまったく動作しない事があり、原因がわからなくて右往左往。
どうしたものかなぁ。

今日覚えたこと:ファイル機能については日本語のドキュメントは参考にならなそう。

2012年5月10日木曜日

IIJmioのSIMが届いた

3日頃に申し込んでいたIIJmio 高速モバイル/Dミニマムスタート128プランのSIMが届きました。
さっそく手持ちのDOCOMO L-04Cにさして遊んでみました。
294998_288639057892414_100002389654910_611879_2080947726_n

結果としては他のブログ等に書かれている情報どおり。
128kといいつつ速度チェックで150kbps近い数字を叩き出したりしてくれます。
3度ほどやって100~150kbpsあたりだったのでほぼ表記どおりの速度がでてると見てよさそうです。

地図、普通のサイト閲覧レベルなら問題はなく、動画は厳しい。低ビットレートのものならなんとかみれる場合があります。
たまに聞くネットラジオサイト「音泉」は普通に聞けたのが満足。

ちなみに、ルート化しているのでテザリングしてPC、iPodToucからも接続してみました。
iPodからの接続に関しては、位置情報もキチンと伝わっているみたいです。
PCからも割と問題なく使えますが、GoogleMapは表示に時間がかかります。

手持ちのガラケーがauなので、Wi-Fi WIN対応機種にすればそちらの通信もフォローできそうですが今のところは保留です。
Wi-Fi WINの契約が必要、対応端末が必要、いつスマホに機種変するかもわからない、などの点を考えると導入費分を回収できるか微妙なので。

しばらくはこれで遊んでみたいと思います。

2012年5月9日水曜日

目下の目標

iOSでの連絡先の取得がうまくでき、自分の目標とするアプリが実現できそうなところまできました。
一応、メールのテンプレソフト的なものを完成させるのが目標です。

送信先を選択(送信先はiPhoneの連絡先を参照して登録しておける)

文章を選択

といったシンプルなものです。現在地情報もつけたいと思っています。
UIにはJQuery mobileを使用します。

次の課題としては選択した連絡先をアプリ側に登録する部分です。
恐らくLocalStorageを使うか、CordovaのAPIからファイルアクセスするかの2択になりそう。

少し調べてみる必要がありそうです。

Cordovaでの連絡先取得の問題がほぼ解決

連絡先一覧の取得ができず悩んでいましたが、
単純にfilterのオプションにある複数の連絡先取得の指定をしていなかった為でした。

options.multiple = true;

この指定を入れるだけで複数件が取得できるようになりました。

続けて、メールアドレスの取得に挑戦しました。
フィールドにemailsを指定します。

var fields = ["displayName","emails"];

取得したcontactに入るemailsは配列の形で取得される点に注意。

emList=contacts[i].emails;
for (var k=0; k<emList.length; k++){
    alert(emList[k].value);
}

ここでまた別の問題としてフィルタの処理がうまく動かなくて悩んでいます。

とりあえず、displayNameでの絞込みが効かないみたいで、フィールドをdisplayNameではなくnameにし、取得の際はcontacts[i].name.formattedみたいな形にすることで絞込みができました。
が、どうやら全角文字での絞込みができないみたいでそれがまだ未解決の状態です。

まだまだ悩み中。

追記)
と思ったら、ヘッダにutf-8の指定をしただけであっさり解決しました。
javascript側にだけ指定をしてたのでそのせいでしょうかね。

<meta charset="utf-8" />

プチまとめ)
・日本語訳のドキュメントは古いPhoneGap向けのものなので注意。
 「navigator.service.contacts.find」のserviceの部分が不要。
・iOSでcontact.findするときはdisplayNameの使用は避ける。nameを使うのがおそらく無難。
・ヘッダでutf-8の指定をしておかないと全角文字での絞込みができない。
・「(options名).multiple = true; 」の指定がないと結果が1件しか返ってこない。

ようやく連絡先一覧の取得ができるようになった感じです。

2012年5月6日日曜日

Cordovaからの連絡先参照ができない

アプリ中でiPhoneの連絡先を参照したいのですが、うまく行かず苦戦中。
尚、デベロッパ登録しておらず、実機テストはできないのでiOSシミュレータ上でのテストです。

一度、サンプルを試してみようと思って以下のサイトのcontacts.findの部分をテスト。
http://docs.phonegap.com/jp/0.9.5/phonegap_contacts_contacts.md.html#contacts.find

そのままでは動かなかったので
まず、

<script type="text/javascript" charset="utf-8" src="phonegap.0.9.5.js"></script>

の部分はCordovaに置き換え。
次に、


navigator.service.contacts.find(fields, onSuccess, onError, options);

の部分。
そのままだとうまく動かなかったのですが、英語版の新しいドキュメントを見たところserviceを省いた記述をとってたので修正。

この時点で一通り動くようになりました。
でも返ってくる値がおかしい。

10件弱テスト用のデータをiOSシミュレータに登録しているのに、検索条件無の状態で1件しか出てこない。
検索条件を何かしら指定すると0件。
フィルタの指定がうまく動いてないのと、連絡先の情報をうまく取得できていないのの2点が原因かと思うのですが・・・。


可能性としてはこんなところでしょうか。


・実機以外ではうまく動作しない
・iOSシミュレータへの連絡先の登録の仕方が間違っている
・xcode、iOSシミュレータに参照のための設定箇所がある。


さっぱりわからなくて困った・・・。
実機で試してみるべきだろうか・・・

2012年5月5日土曜日

コンプガチャの中止要請-SNSアプリの終焉を迎えるか?

今朝、1つ気になるニュースがありました。

消費者庁がソーシャルゲーム『グリー』や『モバゲー』のコンプガチャを景品表示法で禁止と判断! 中止要請へ

現在の国内SNSアプリ市場で主流となっている販売スタイル「コンプガチャ」を禁止しようとする動きです。
まだ、具体的な方針は打ち出されていないようですが、これを境に何かしらの変化はあることでしょう。

いつかカードゲーム(と言う名のガチャ商法)バブルの終わりが来るとは思ってましたが、こんな形で終わりを迎える事になるとは。
本来、常にユーザーにお金を使う判断はゆだねられているので問題になる事はないはずなのですが、
市場の規模が大きくなりすぎた事で、「勢いで大金を使ってしまう事がある」現在の販売スタイルを無視できない状況になってしまったんでしょうね。

今後どうなっていくか考えてみました。

1)とか言いつつ何も変わらない。
 これ以上の話の展開が無いこともあるやもしれません。
2)抜け道を見つけて結局似たような販売方法が続く
景品表示法で禁じる懸賞にあたる、のが問題との事。
そこで、問題となる部分を変更するだけで中身は変わらないかもしれません。
3)新たな主流の商法が作られる
 SNSアプリの今後を考えるならこれでしょう。
 ただし、ユーザー自体が現在の課金スタイルに慣れていると思われるので、移行には時間がかかるかもしれません。
4)国内は見捨てられ海外展開へ
 進撃のバハムートが海外で成功しているという話を聞いたことがあります。
 今回の件の適用範囲を良く知りませんが、国外市場に可能性があるのなら・・・?

現時点でどの部分までが景品表示法にひっかかっているのかわからないので、2のようなケースであっさり解決する事もありそうですが、遅かれ早かれ3の流れになるんではないでしょうか。
元々、SNSアプリ市場はできて年月の浅い市場なので、販売スタイルのブームが移り変わりがあるのが常です。

デジタルデータのガチャに大金を出す時代がくるなんてかつては考えられない事でした。
また思いもよらない販売方法が現れ、市場を賑わす事になるんじゃないでしょうか。

今後の動きが気になって仕方ないです。

追記 2012/5/5 9:00)
実際に記事が載っている新聞を購入してみました。
問題となっているのは景品表示法で「カード合わせ」に該当する、いわゆるコンプガチャが問題になっている模様。
つまり、コンプ要素が無ければガチャ自体は問題ないようなので現状から大きく変わることはないかもしれません。

2012年5月4日金曜日

PhoneGap=Cordova最初の一歩

HTMLとJavaScriptでアプリが作れるという甘い囁きに釣られたPhoneGap。
最初につまづいたところが何箇所かありました。

・利用環境
Mac(Xcode4.2.1)
PhoneGap1.6

Q.PhoneGapが落とせない

PhoneGapのサイトでダウンロードボタンを押してもCordovaってソフトしか落とせない

フレームワークの名前が変わってました。
http://www.infoq.com/jp/news/2012/03/Adobe-Cordova-PhoneGap

まだ名称が変わってから日が浅くCordovaに関する情報が少ないみたいです。
PhoneGap関連の情報サイトをみるときも一部記述が違うので注意。
大きくはphonegap.jsを読み込むタイミングで使用するファイルがcordova-x-x-x.jsみたいなファイルになっている点かと思います。

あとはプロジェクト作る際の種類がCordova-basedになっている点も。
 スクリーンショット 2012-05-04 7.16.39

Q.なんか実行できない1。

プロジェクトを作成してもindex.htmlをどこに作っていいかわかりませんでした。
これについては、別に用意したwwwフォルダをxcodeのウィンドウにドラッグする事で解決。

確認画面が出るので「Create folder references for any added folders」を選びます。
スクリーンショット-2012-05-04-7.19.11 

xcode画面に青いwwwフォルダが追加されればOKでした。
スクリーンショット-2012-05-04-7.20.25 

Q.なんか実行できない2

外部ファイルを読み込もうとする時に(jsファイルとか)修正が必要な箇所があります。
よくは理解してないんですが、外部参照するURLを許可してあげないといけないとか・・・?

とりあえず
Supporting.Files>Cordova.plist>ExternalHostsのItem 0 に * を設定してあげればOKみたいです。
スクリーンショット 2012-05-04 7.14.56 

PhoneGapが簡単って書いてる本・サイトがあったらそれは嘘です(笑

2012年5月3日木曜日

IIJmioの高速モバイル/Dを申し込む

スマホとしてDOCOMOのL-04Cを持っているのですが、諸事情でAndroidでサイトの表示確認するためにかった中古の端末です。
自分のケータイはauのガラケーで、理由はバッテリの持ちとかなんとかあるんですが、まだまだスマホ移行しないつもりでいます。

でもスマホはスマホで使いたい気持ちがあって安価な回線を契約しようかずっと悩んでいました。

有名なところで日本通信のB-mobile、その派生のイオンSIMやヨドバシ基本0円SIM、もう少し新しいところだとBIGLOBE3Gなんていうのも。
BIGLOBE3Gは家庭用の回線としてBIGLOBEを使っているので興味が強かったのですが、新規受付に制限を設けているのでなかなか申し込みができず。

イオンSIMは良いうわさを聞かないし、ほかの回線は大方3000円/月程度。
もう少し良いものはないかと悩んでいたところでIIJのmio高速モバイル/Dを発見。
https://www.iijmio.jp/guide/outline/hdd/

他所の情報によれば、イオンSIMと同等でありながら(今のところは)良いパフォーマンスを発揮してくれるとか。
IIJmio 高速モバイル/D を使ってみた
IIJmioの高速モバイル/Dのミニマムスタート128契約した
IIJmio高速モバイル/Dサービスを申し込んでみた

月1000円程度でイオンSIMよりの早い(らしい)。しかもクーポンを購入することで必要に応じて高速回線としても使える。
これこそ待っていた回線だ!と思って申し込みをしました。
まだ申し込んだばかりで届いていないのですが。

しかし、うっかり標準SIMで申し込んだことを唯一後悔しています。
microSIMならアダプタで標準サイズとして使えるのだからmicroで申し込めば良かったなぁ。

解約金がかからないので、いざとなったらmicroを新たに契約するなりSIMカッターで強制micro化するなり手段はあるのでとりあえずは良しとしておきます。
到着はGW明けでしょうか。楽しみです。

開発環境

まだこのブログを活用していけるかわからないけどとりあえずはじめてみました。

プログラマではないのでたいした事はできないけれど、いくつか作ってみたいアプリがあり、Macを買ったのをきっかけに何ヶ月か前からアプリ作成に向けて勉強中です。

とりあえず開発環境として
・WindowsのPC(Win7)
・MBA 13インチ(MC965J/A)

テスト環境として
・DOCOMO L-04C(root化済 Android2.3.7)
・iPod touch(第4世代 iOS5.1)

を所有しています。
Macに関してはまだ購入から半年も経ってないのですが、今時点ではMac+iPod touchでiOS向けのアプリを作ろうと模索中です。
尤も、PhoneGapを使用しているのでAndroid向けとしても出したいところです。

htmlやJavaScriptは多少触れるもののjquery等に関しては今回初めて触っています。
とりあえずここまで。