インジケータの表示/非表示 – iPhoneアプリケーション開発

1月 17, 2011 · Posted in iOS, iOS SDK, iPhone開発, Objective-C, 基礎 · Comment 

概要

iPhone(iPad)の利用時に、アプリケーションが通信処理を行う場合、画面上部のステータスバー(日時などが表示される領域)に、インジケーター(Indicator)を表示剃る方法。
iOSが勝手に表示してくれれば良いのだけれど、そういう仕組にはなっていないので、コードで制御する必要があります。

インジケータ↓

方法

超簡単

インジケータを表示する

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

インジケータを隠す

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

通信時にはインジケータを表示するようにしないと、審査通らないような気がするので注意。

Google Maps API(V3) Geocoding API Web サービスで、座標を取得する

1月 16, 2011 · Posted in Google, Google Maps API, PHP · Comment 

前置き

ここ数年間、住所から座標(緯度・経度)を取得するために、Geocodingで提供されているAPIを利用していました。ジオコーディングデータを取得する為のサービスが、ある時期までGoogleから提供されていなかったため、Geocodingは、大変有益で有名なサービスとなりました。

が!!!

GoogleがGoogle Maps API Webサービスの一部として、Geocoding APIを提供開始したため、こちらを利用することにします。

注意事項(引用元
・Google Geocoding API の使用は、1 日あたり 2,500 件まで
・Geocoding API は Google マップと組み合わせて使用する場合にのみ使用できます。地図に表示せずにジオコーディングの結果のみを利用することは禁止されています。

概要

Web API呼び出しURL

http://maps.google.com/maps/api/geocode/output?parameters

パラメータ
output : 出力形式の指定
・json
・xml

parameters
・address or latlng
・bounds
・region
・language
・sensor

詳しくはここ

コード

住所から緯度・経度取得
PHP5+XMLで。

<?php
$address = rawurlencode("東京都港区台場1-1-1");
$url = "http://maps.google.com/maps/api/geocode/xml?address={$address}&sensor=false";

$xml = simplexml_load_file($url);

if($xml->error){
	return;
}

if((string)$xml->status != "OK"){
	return;
}

$lat = ((string)$xml->result->geometry->location->lat);
$lng = ((string)$xml->result->geometry->location->lng);

print $lat . " - " . $lng;
?>

結果
35.6351932 – 139.7763928

というわけで

・簡単
・ジオコーディング・逆ジオコーディング可能
・レスポンス高速

な、Geocoding APIを使いましょう。

セッションIDのふりなおし(Java, J2EE, resin)

1月 7, 2011 · Posted in J2EE, Resin · Comment 

目的

ユーザーのログイン前後で同じセッションIDが使われているのを、ログインのタイミングで新しいセッションIDを使うようにする。セッション・ハイジャック対策。

セッション・ハイジャックについて

セッションを用いたログイン管理を行なっているアプリケーションにおいて、攻撃者が用意したセッションIDをリクエストに含まされた正規の利用者が、正規の手順でログインすることで、不正なセッションIDを用いたログイン認証が行われてしまう。

環境

言語:java(J2EE)
サーバー:resin(http://www.caucho.com/)

結論

${RESIN_HOME}/conf/resin.confのsession-configに、

<reuse-session-id>false</reuse-session-id>

を追加。

流れ

某ECサイトで、ログイン前後で(というか、cookieの期限がすぎるまで)、同一のセッションIDがずっと使いまわされていることが判明。

ソースチェック。ログイン処理の際に、セッション無効化処理がコーディングされていることを確認。ということは、アプリケーションじゃなくて環境の問題?

request.getSession().invalidate();


ローカルでデバッグしてみたら、セッションIDがふりかわっていることを確認。

少し考えた末に、ローカルはTomcat, サーバではResinを使用していることを思い出す。

ドキュメントチェック

発見(http://www.caucho.com/resin-3.0/config/webapp.xtp#session-config

設定追加

<reuse-session-id>false</reuse-session-id>


完成!

というわけで、

・サーバ上だとデバッグしにくい。