Archive for the ‘iPhone/iPod touch/iPad’ Category

5月
28

ついにiPadが日本でも発売!
というわけで、早速購入してきました。

購入したのはwifiの16Gのモデルで、定価48,800円のタイプです。

ちなみに、初日に予約をしたので、並ばないで購入できました。
お店が10時からなので、朝いって購入してきました!

と、いうわけで早速つかってみた感想なのですが
やっぱり質感がいい!格好がいいです。

ただ、やっぱり大きいですねー。
自分的には、気軽に持ち歩いて使う感じではないです。でも、重さは軽いです!
あと、薄いと思ったら案外厚かったです。
なんていうか、たまご形とまではいかないけど、裏面にカーブがあるんですね。

とはいえ、家の中で使うにはすごくいいですね。
布団の中や、冬なんかはこたつの中とかで遊ぶにはちょうどいいです。
コードレスなので、家の中ならどこでも使えるのですごく便利です。
これで、FLASHが使えたら最高なんですけどね・・・。

あーあと、画面が大きいので、ビジネスにも向いてるのではないでしょうか!
営業のときとか、持っていくといいと思います。

まあ、個人的な感想はこのくらいにして、唐突ですが、「iPhoneアプリ開発の超初心者向けTIPS」を紹介したいと思います。
ほとんど、自分用のメモになってしまいますが・・・

バックスラッシュの入力方法
option+「¥」
※windowsと違い¥とバックスラッシュが区別されますので、printfで改行したいときなどに必要です。

Interface Builderでの、色の指定方法

colors
色の指定ですが、左から2番目のcolor slidersのタブ(アイコン)で、RGB slidersを選ぶことで通常のRGBの数値を指定できます。また、このときに下部にあるOpacityを0にすることで、透明色を選ぶことができます。
謎のエラーの回避方法
stray_error
上記のようなエラーが出た場合、全角文字がコードの変な所にはいっている可能性が高いです。
たとえば、半角スペースのつもりが全角だったとか・・・。
ちなみに、上記のエラーは、「β」という文字が入っていた場合のエラーです。
エラー自体はすぐ修正できたのですが、問題は「どのタイミングでこの文字がまぎれたのか?」という点です。
command+「s」のつもりが、間違えてoption+「s」を押していたのが原因でした。

特に、バックスラッシュの入力方法にははまりました。
MacBookを使っているのですが、キーボードに書いてないんですよね・・・。
書いてあっても、表記ルールがわからないです。
たとえば、「・」はoption+「?」で入力できます。これは点線の□で囲んで、キーボードに書いてあります。
ということは、点線の□でかこってある文字がoptionで入力できるのでは・・・と思いがちですが、
「¥」キーに書いてある点線の□でかこってある文字は「-」なので、そういうルールではないようです。
また、βはキーボードには書いてありません。

こんな感じでしょうか、初心者の方のお役にたてればと思います。

あと、一緒に純正の黒いケースも購入したのですが、これは質感がいまいちでした
結構高かったのになー。防水ケースとかあったら買い替えようかなー

と、いうわけで、なんだかわからない記事になってしまいましたが、
iPadの感想と開発tipsでした!

7月
28

flashcast:フリーで働くITエンジニア集団のブログ: iPhone OS 3.0のSafariでGPS機能を使ったWeb Applicationを作る!(完成編)を書いた後すぐに、Strayed Child(ストレイド チャイルド)をとのさまと同じ様に、appleのサイトに登録申請してみました。

やり方は、半年前のflashcast:フリーで働くITエンジニア集団のブログ: iPod touch用のWeb Applicationを作成したから登録してみると全く変わってないと思います。

気がついたら、公開されてました。

Apple – Web apps – Strayed Child

特に注意するようなところはありませんでしたが、画像アップ時に1度エラーになりました。
申請時には2つの画像をアップします。

これ用に、

320×356サイズの画像(ちょうど、ブラウザの中にぴったり収まるサイズです)と、

一覧用に

128×128サイズの画像です。

一覧用の画像で失敗したようです。透過pngにしてアップしなおしたら、うまくいきました。

申請後には完了メールが届いて、文面には「以降のappleからの連絡は何もありません」的なことが書かれてましたが、公開されていてホッとしました。また、何か作りたいと思います!

7月
25

flashcast:フリーで働くITエンジニア集団のブログ: iPhone OS 3.0のSafariでGPS機能を使ったWeb Applicationを作る!(履歴をMap表示編)で履歴画面から地図画面に遷移し、その住所を再表示する機能を実装し、ある程度まとまった感があるので、逆ジオコーディングのWebサービスとして公開したいと思います。

スタイルシートを当てて、見た目を整え、ロジックを少しリファクタリングしました。あわせて、いくつか機能を拡張したので、メモしておきます。

●地図画面
1)メール送信機能
パラメータで緯度・経度を取得してその住所を表示できるようにしたので、

mailto:?body=

で、bodyにURLを入れるようにしました。

2)吹き出しを閉じる
吹き出しの中のデフォルトの閉じるボタンは小さくて、iPhoneでは押しづらいので別に用意しました。

3)地図のタイプを選択できる機能。
Google Mapsの右上部に出る「地図」「航空写真」「地図+写真」コントロールを表示するようにしました。

var mapControl = new GMapTypeControl(true);

コンストラクタの引数にtrueを渡すと略語表示になります。極力、表示領域内の地図を隠さないようにします。

4)cookieへの保存処理。
デフォルト表示のための情報をいくつか(前回住所検索に使用した緯度・経度、選択中の地図のタイプ、表示中のzoomレベル)cookieに保存するようにしました。

5)性能改善
大きく2つあります。

  • 1つ目は、不要なGPSの監視を極力なくすように、こまめにON/OFFするような実装を心がけました。
  • 2つ目はなべっちにアドバイスをもらったGPSの誤差についてです。GPSで検知した緯度・経度に誤差が発生してしまうことはどうしようもありません。その誤差を少なくする工夫が必要です。2点間の移動距離の実測値より、誤差の出る傾向を見た結果、移動時より、静止時のほうが誤差が大きいことに気付きました(数100メートル単位の誤差がある)。移動時には30分間で移動距離が50メートル以上になることが数回あるくらいだったので、今回はその誤差を極力検知しないようにロジックに反映しました。

実はたいしたことはしてないです。flashcast:フリーで働くITエンジニア集団のブログ: iPhone OS 3.0のSafariでGPS機能を使ったWeb Applicationを作る!(iPhoneでテスト編)で移動距離が30メートル以上の場合に、住所の表示を行うようにしましたが、さらに、移動距離が50メートル以上の場合は、それが連続した時のみ表示を行うようにしました。

●履歴画面
1)日別一覧画面を追加
住所の履歴が増えてきた場合、保存された住所を全て一覧表示すると、下の方を見たい場合には何度もスクロールさせないといけないので大変です。なので、日毎の履歴一覧を表示するようにしました。まず、住所を保存した日の一覧が表示されますので、見たい日をクリックした後、その日に保存された住所の一覧が表示されます。一覧表示する量を減らすことにより、スクロールする量、頻度を少なくさせることができたと思います。

2)一覧からの履歴削除機能
登録機能があるなら、削除機能も必要でしょう。ということで、履歴一覧に削除ボタンを追加しました。変更機能は・・・あまりその必要性がなさそうなので、実装していません。

●全体
1)(一応)多国語対応
住所表示と同時に検索した日時も表示するようにしたので、これをローカライズして表示するようにしました。(実際、どれだけできてるかわかりませんが・・・)

あと、1つ注意点が!
Firefox 3.0.11 + Firebug 1.3.3でgg.google.comからの応答を待ち続ける場合(「gg.google.comからの応答を待っています」)があります。Windows XP、Mac OS X 10.5.7の両環境で発生しました。

普通に表示されることもあれば、一度更新すれば表示されることや、何度更新してもだめなときもあります。

ナゾです。

Firebugを無効にすれば、本現象は発生しなくなります。

7月25日現在では、Firebug1.4がリリースされているので、更新すれば発生しなくなるのではないかと思います。

こんな感じで、完成したのがこちらです。
Strayed Child

アプリ名はStrayed Child(ストレイド チャイルド)にしました。
迷子という意味です。
旅行に行ったときや、道に迷ったときなどに便利だと思います。
よかったら、試してみてください!

7月
24

ここ最近、通勤の行き帰りはiPhoneとのにらめっこが続いてます・・・

flashcast:フリーで働くITエンジニア集団のブログ: iPhone OS 3.0のSafariでGPS機能を使ったWeb Applicationを作る!(history画面作成編)で、履歴画面を作りました。

履歴画面の住所の表示をリンクにして、地図画面に遷移できるようにします。地図画面を表示する際に、住所の吹き出しを初期表示する仕様にします。

まず、一覧に表示されている住所をリンクに変更します。

javascriptで住所一覧を作っているところを少しなおします。

  for (i = 0; i < resultSet.rows.length; i++) {
   var address = tonosamart.evalJson(resultSet.rows.item(i).dat);

   if (address) {
    html += "<div><p><a href='../map/?latlng=" +
     splitLatlng(address.name)[0] + "," +
     splitLatlng(address.name)[1] + "'>" +
     address.Placemark[0].address + "<\/a><\/p><\/div>";
   }
  }

地図画面にパラメータで緯度・経度を渡すようにしています。

次は、そのパラメータを受けた地図画面の方を修正します。

  if (window.location.search) {
   var arr = window.location.search.substr(8).split(',');

   if (arr) {
    if (arr.length === 2) {
     lat = arr[0];
     lng = arr[1];
     hasParam = true;
    }
   }
  }

履歴を確認する場合は、現在地の表示機能をOFFにするようにします。初期化処理の引数(hasParam)にしてその状態を渡します。

 function initialize(hasParam, isDbConnect) {
  initGeoLocation(!hasParam, isDbConnect);

GPSを監視する部分のロジックは関数化しました。

 function initGeoLocation(isWatch, isDbConnect) {
  if (isWatch) {
   if (navigator != null && navigator.geolocation != null) {
    id = navigator.geolocation.watchPosition(
     function(e) {
      onLocationChanged(e, isDbConnect);
     }
    );
   }
  }
  else {
   if (id != null) {
    id = navigator.geolocation.clearWatch(id);
   }
  }
 }

バッテリーの減りも考慮して、極力、GPSを監視しないように、ON/OFFをいろんなところで切り替えられるようにするためです。

最後に、画面初期表示時に住所を表示するようにして、完成です。

  if (hasParam) {
   getAddress(latlng, isDbConnect);
  }

ここまでで、こんなのができました。もし良かったら、試してみてください!
iPhone GPS Sample

7月
23

flashcast:フリーで働くITエンジニア集団のブログ: iPhone OS 3.0のSafariでGPS機能を使ったWeb Applicationを作る!(sqlite保存編)の続きです。

前回は表示されている住所の吹き出しの中に、「save」リンクを設け、その住所をSQLiteに保存するようにしましたので、その住所を見るための履歴画面を作ります。

htmlの見た目は極めて単純なものにします。この時点ではかっこよさとかは気にしません。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=320px, user-scalable=no" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<title>iPhone GPS Sample</title>
</head>
<body>
<div id="header">
<div id="title">Histories</div>
<a href="../sqlite/">back</a>
</div>
<div id="main"></div>
</body>
</html>

データを検索して、1件以上あれば、画面上に表示します。

 function initialize() {
  try {
   db.transaction(
    function(transaction) {
     transaction.executeSql("SELECT dat FROM location ORDER BY id DESC", [],
      setLocations,
      function(error) {
       alert("initialize:" + error.message);
      }
     );
    },
    function(error) {
     alert("initialize:" + error.message);
    }
   );
  }
  catch (error) {
   alert("initialize:" + error.message);
  }
 }

 function setLocations(transaction, resultSet) {
  var html = "";

  for (i = 0; i < resultSet.rows.length; i++) {
   var address = tonosamart.evalJson(resultSet.rows.item(i).dat);

   if (address) {
    html += "<div><p>" + address.Placemark[0].address + "<\/p><\/div>";
   }
  }

  $("#main").html(html);
 }

あれ?うまくいきません。
よく見ると、JSONからオブジェクトに変換するところの正規表現でエラーになってます。

var address = tonosamart.evalJson(resultSet.rows.item(i).dat);

JSONの最後の部分に、ナゾのフィールドがあります。

\”__shared\”:undefined}”

これが正規表現に引っかかってました。何に使うんでしょう・・・
ナゾですが、値が入ってきた時のことも考慮して、SQLiteに保存する前に、

   if (address.__shared == undefined) {
    address.__shared = "";
   }

このような処理を入れることにしました。
やっと、うまくいきました。画面はこんな感じす。

次に、地図の画面から履歴画面に遷移できるようにします。
Google Mapsのカスタムマップコントロールを使います。
コントロール – Google Maps API – Google Code

履歴画面にリンクするだけのものなので、単純なものにします。

 function LocationControl() {
 }

 LocationControl.prototype = new GControl();

 LocationControl.prototype.initialize = function(map) {
  var container = document.createElement("div");
  var control = document.createElement("a");
  control.href = "../history/";
  this.setButtonStyle_(control);
  container.appendChild(control);
  control.appendChild(document.createTextNode("histories"));

  map.getContainer().appendChild(container);
  return container;
 };

 LocationControl.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_TOP_LEFT , new GSize(5, 5));
 };

 LocationControl.prototype.setButtonStyle_ = function(button) {
  button.style.color = "#000000";
  button.style.backgroundColor = "#FFFFFF";
  button.style.cursor = "pointer";
 };

画面はこんな感じです。

ここまでで、こんなのができました。もし良かったら、試してみてください!
iPhone GPS Sample

  • Search:
  • flashcastとは?

    東京を中心に、現在フリーランスとして活動しているITエンジニア、および、かつてフリーランスとして活動していた起業家達が立ち上げたコミュニティーです。

    みんなで集まって面白いことをやろう!形に残そう!ということで、ブログをはじめました。

    技術情報や、フリーエンジニアに役立つ情報などを、ご紹介できたらと思っています。

    お問い合わせ:
    info@flashcast.jp
  • カレンダー

    2010年9月
    日曜日 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日
    « 8月    
     1234
    567891011
    12131415161718
    19202122232425
    2627282930  
  • メンバー紹介

    もじゃもじゃ
    flashcastのリーダー

    3年ほどフリーのITエンジニアとして活動。現在は、社員2名の株式会社を経営しています。

    一攫千金を夢見る野心家です。

    ライブキャスト

    yasu
    ダイバー

    自宅サーバーでホームページを作り始めました。

    少しずつ記事を増やしていきますので足を運んでください。

    よろしくお願いします。

    sa-sa-ki.jp

    のら
    たびびと

    ねこ好きに悪人はいなーいっ!!

    バイクや車も好きです。

    めぐ
    デザイナーのたまご

    音楽とデザインとお酒をこよなく愛する永遠のダイエッター。

    現在ペンタブレットでイラストを勉強中。

    Hiro
    コンサル

    PMやSEの案件を業務委託で請けることが多いですが、小規模案件も受託でやっています。

    得意な分野はマイクロソフト製品や関連技術によるシステム構築です。

    KEI
    取締役の風格

    最年少なのに、メンバーで1番の貫禄の持ち主!?

    C#や.netなどサーバ側の開発が得意。

    ろっきー
    美食家★パパ

    自分にとっての息抜きは、ドライブして温泉に入って、美味しいご飯を食べる事。

    ココロとカラダのリフレッシュを大切にし、日々の仕事に励む一児の父親です。

    郵便番号検索

    my-hobby

    とのさま
    げーむのおうさま

    大人なのに好きなことしかやらない駄目人間。

    Web系が得意、アクセスは苦手><

    tonosamart.com

    セクレタリアト
    ギャンブラー

    フリーランス時代は仲間の現場を探すことが多く、それをきっかけに会社を設立。

    現在はSI業に特化せず、他の業種にも興味を持ち始めています。

    メドレー株式会社

  • 広告