« 作ってみました hvsGpsMail | メイン | hvsGpsMail その3 »

2005年06月03日 21:17

hvsGpsMail その2

ここギコ!にてねねさんに紹介された後、急にアクセスが増えました(汗
出来るダケ外部にpingしないでひっそり書いてたブログですので、従来は1日2〜3人が来るだけだったのです。説明も手抜きだし、コーディングも実験ですので手抜きだらけ、おまけにメールサーバーもしっかり設定はしていなかったのでアセりました。DDNSな自宅枕元サーバーですので、あちこちのメールサーバーにリレーを蹴られます。届かない方ごめんなさい。時間を見てプロバイダ経由で送信するように設定を変更いたします。

最初のエントリーでも書いたようにわたしは現在auGPS携帯を使っていません。ログを見れば動作状況は判りますが、気がついた点がありましたらコメントにてお教えくださると助かります。
※コメントはブログのトップからは出来ないようになっています。個別表示からお願いします

このスクリプトはPHPにて書かれております。出力は XHTML+wml にて行っています。HDMLではありません。
※なぜHDMLではないのか?わたしが良く知らないからです(笑)デッキとかカードとかアクティビティとかよく判っていません(笑)

以下追記にて処理を簡単に説明します。

スクリプトの構成は
index.php:設定ハンドリング(クッキー)、待機画面(wml:card)
 ↓ wml:timer
gps.php:測位ハンドリング
 ↓ httpリダイレクト
sendmail.php:メール送信&待機画面へリダイレクト↑
のように3つに分かれています。

index.php にて端末の機種判定、設定値をクッキーに保存、wmlのタイマー待機を行っています。
gps.php は名前のとおり GPS測位ですが、index.php:wmlのタイマーより d呼び出されます。このスクリプトから device:gpsone の形式でsendmail.php が HTTPヘッダーリダイレクト(Locationヘッダー)で呼び出されます。
※なぜgps.phpが中間に入っているのか?これは将来別の測位呼び出し形式が必要になった時のための処置です。

パラメータの引渡しはセッション変数などを使わずにクッキーについてはPOST、その他(サブスクライバID含む)はGETにておこなっています。これは実験である為、apacheのログに最低限必要な記録を残すためです。専用ログを吐き出すようには作っていません。

ソースの公開はご勘弁下さい。自前関数ライブラリなど使用していますので、公開用に書き直すのは辛いのです。cgiコーディングが出来る人ならば上記説明でご理解していただけるとおもいます。

投稿者 Hu : 2005年06月03日 21:17

トラックバックURL http://hvs.dyndns.org/~hu/blog/mt-tb1.cgi/46


コメント

テストへのご協力感謝します。

気がついた点

1.測位と処理にかかった時間だけずれていきますね。まぁ、仕方が無いです。時間を管理して微調整すれば可能だと思われます。(wmlタイマーは0.1単位で指定可能)でも、精度は不明。開始時間を保存しておけば良いかも〜

2.時々メール送信する前の状態で停止しています。これは測位をキャンセルしたのかな?ログからは状況が判りません。

3.一度だけ、30秒弱の間隔で3回も測位&メール送信をする現象が発生。これは何だろう?プログラム上での最低間隔は1分になっています。
最初の測位にかかった時間は15秒、測位結果のステータスは0。その20秒後にまた測位、かかった時間は13秒でステータスは0。次はわずか9秒後に測位で所用時間は13秒で、ステータスは1。座標はそれぞれ違います。計算した訳ではないので各座標の距離は判りません。とっても不思議なログです。結果としてメールは3通送られています。どんな状況で発生したのでしょう?最低間隔をもう少し長くとらないといけないかな?測位に1分以上かかる場合も(モギィでさんざん遊んだ経験上)あるような気がしますね。サーバー負荷の関係もあるので最低間隔を3分くらいに設定したほうが無難かもしれません。

※こんな現象が発生してはGPSを使ったブラウザゲームは作れません。(それが目的かい>自分(笑


とりあえず、本日はたくさんの方にテストしていただいて大変貴重なデータが集まりました。ありがとうございました。

でも、背景画像は1点もない(汗
モギィの宣伝にモギィ画像でもセットするかな?ってBREWな人達に宣伝してもしゃーない状況ですな(苦笑
モギィは、はよ、BREW対応すべきです。ぼそっ

投稿者 ひゅ〜 : 2005年06月04日 03:39

測位の精度について
測位指示するときの測地系は tokyo にしています。
こちらでは何も制御や補正をしていません。
飛ばしている地図の側についても調査をしていませんでした。
測位結果のfix-modeも追加するようにしてみます。

それから、サーバー設定の関係で @ezweb.ne.jp へのメール配信が出来ずにいます。原因は判っているのですが、当方のLAN内の都合により対策はしません。他のアドレスをお使い下さい。

投稿者 ひゅ〜 : 2005年06月05日 14:30

わずかな時間に複数回の測位をする現象が今日も発生しています。これはなんなんだろう?wml:timerの関係なのかな?
ページ表示を中断(ブラウザ終了や通話など)すると発生するのかもしれませんね。前回のタイマーが効いて、アクセス再開直後に複数回の測位が行われているのかも〜
どうやったらタイマーをリセット出来るんだろう?サーバー側からは制御の方法が無いかもしれませんね。
再開時に表示した時、タイマーはリセットして欲しいですよね(困)
キャッシュは無効になっているはずなんですが...全種類の端末でチェックしている訳では無いので...

ブックマークから飛んできた時、画面メモから飛んできた時、中断から復帰した時、タイマーをリセット出来ていないとしたら、、、携帯ブラウザの仕様上の不具合ですな。そんな事例があるんだろうか?(謎)
再開時には一度空ループでタイマー回してやらないといけない? いやぁ〜ん、なんでサーバー側がそんな苦労をせにゃならんのだ?

ぶつぶつぶつ、と、独り言でしたっ。

投稿者 ひゅ〜 : 2005年06月05日 15:24

クッキー処理の失敗により、一度測位&メール送信をすると送信間隔が60分になってしまっていました(苦笑
修正しましたので、大丈夫だとは思いますが、もし、誤動作などがありましたら、報告頂けると助かります。

さらに、測位の情報を全てメールに記載するようにしました。
御迷惑をおかけしました。。。

投稿者 ひゅ〜 : 2005年06月05日 18:59

ログを見ていて気がついた事、
本サーバーは時刻をntpx.jst.mfeed.ad.jp より取得して同期をとっています。
ログの時刻とGPS測位で得られる時刻とは7〜13秒くらいGPS時刻の方が進んでいます。GPSは現地時間を出しているのかな? JST ではなく?
これは明石との経度差によるものなのか?(謎
どなたか教えてくれませんか?

投稿者 ひゅ〜 : 2005年06月05日 21:31

GPSの系における時刻とUTCの時刻は一致していないです。仕様と言って良いのか分かりませんが、(現時点で)13秒ずれているのが正しいです。うるう秒も関連するので、いずれ13秒でなくなります。

普段はハンディタイプの GPS(eTrex)で毎秒ごとのログを取って遊んでいるのですが、hvsGpsMail のアイディアはとても面白いです。自前サーバで、自分だけのログを取り始めようと考えています。

投稿者 twovs : 2005年06月19日 17:39

> twovs さん
コメントありがとうございます。
なるほど、13秒ずれていて正しい状態なのか!そして今後もうるう秒の補正が必要なんですね。
ま、GPSの記録としてはそのままで良いのかな?補正しちゃうとまずそうな気がします。時刻も位置計算に使っているんですよね? とりあえず、補正無しでいきます。

わたしは、マップファン2モバイル版や、Navin' Youも使っていました。最近はザウルス SL-C750 に CFGPS2 で NMEAの生ログをとったりもしたんですが、やっぱネット接続しながら位置を利用するって事に興味があります。

常時測位を携帯電話で実現するには、auではなくて、ノキアシリーズ60とbluetoothGPSユニットでしょうかね?(笑

そうです、自前でDBにログを取ったほうが圧倒的に便利です。ここのは実験です。依存されてしまうと困ります(笑

ネットで提供する場合には、誰にでも合う形での提供とか、他の人の位置を間違って通知しちゃったりとかが心配で、DB記録しないで、1回1回メールの形にしたんです。使い辛いでしょうが、実験レベルではこれが限界です。apacheログにはみなさんの位置が記録されています。これは仕様上仕方が無いのです。

自前で行う場合、ページリフレッシュの実現方法は HDML よりも XHTML+WMLが良いようです。WAP1.0を対象にする場合はHDMLしか無いです。

投稿者 ひゅ〜 : 2005年06月19日 18:22

補正すべきかどうかは分からないです・・・。GPSを使い込んでいる人でも気づいていないことが多いですし、そのままで良いのではないでしょうか? 実験ですし(笑)

先日 interop http://www.interop.jp/ で、Java のアプリを携帯内で動かしておいて、そいつが勝手にGPSの位置情報を取得&サーバに通知するようなシステムが紹介されていました。バスやトラックなどに設置しておくことを想定しているようです。バックグラウンドで動作するので、電源さえ入れればOKで、システムを意識せずに使えて簡単(そして危険)な感じでした。

HDMLとか全然分からないので、ちょっと勉強中です。とりあえず今は、普通のHTMLでGETして緯度経度を渡す所まで。認証とか面倒です。自分だけが使うなら subscriber ID で判定が楽チンですかね・・・?


投稿者 twovs : 2005年06月19日 20:47

ふむ、とりあえず、時間はGPS時間としておいて、使い分けたほーがよさそうですね。
GPS時間が未来を示しているので気がつきました。遅れているのだったら気が付かなかったでしょうね。


個体認識はサブスクライバIDで良いでしょう。
PCでサーバー上の記録を操作する場合には別にID&Passが必要でしょうね。
でも、自分使用なら全然問題は無いと思います。

投稿者 ひゅ〜 : 2005年06月19日 22:12

WMLを使って定期的にログを取ることができました。
会社から帰る途中、30秒ごとに記録しようとしたら、
携帯の電池が無くなった・・・(ずっと遊んでいたので)

下記のようなシステムを作ってみました。
公開前にご意見聞かせていただけますか?

- SubscriberID (以下、SubID)で携帯電話を識別する
- Webサーバ上で、SubID の hash値のディレクトリに、該当する SubIDのログを記録
- 一定間隔ごとに位置情報のログを保存する(WMLで)
- 記録したログは PCのブラウザからダウンロードする(pot形式とかにしたい)
- hash値を知っているのは携帯電話の持ち主だけだから十分安全
- 例:http://www.example.com/f7458dfe0bf8d5c8c4db139d4e89a66f/

とりあえず、自分が遊ぶために作ってみました。

投稿者 twovs : 2005年06月20日 23:50

わはは、 example.com では、アクセスできましぇ〜ん♪

(実物は見てませんが)良いんぢゃないですか?

hvsGpsMailは、最初1分でも可能だったのですが、1分だとwmlタイマーが誤作動する事(このブログの記事へのコメントに詳細が書かれています)があったのでマージンを見て最短間隔を2分にしました。2分ではタイマー異常は発生していない模様です。

この仕組を使うとIP抜きならぬ、位置抜きが出来ます。IP抜きよりずっと危険な機能ですので、携帯の持ち主以外には使えない工夫は絶対に必要ですね。

投稿者 ひゅ〜 : 2005年06月21日 15:34

公開前にアイディアだけ聞いてもらおうかと思ったので > example.com

位置抜きできちゃいますが,だいぶずれているようなので出しちゃいます。
例:http://210.138.35.231/gps_logger/bf187f250321b8a1eb22f3a05a9bd5b4/

auの携帯でアクセスしてもらうと(デフォルトで) 300[s]ごとに記録できます。
SubscriberID から hash を計算しているので,持ち主以外は見えない(はず)です。
A5505SA だけでしか動作確認していません。
http://210.138.35.231/gps_logger/

投稿者 twovs : 2005年06月21日 17:01

あは、すみません、わし、今はau携帯使っていません(汗
いろんなテストはモギィの友人達にやってもらっています。
とりあえず、トップのソースと、貴方の記録(?)は確認させてもらいました。
(端末判別してPCにはソースを晒さないほうが良いかも〜。意味が判らない人にはあまり利用して欲しく無い技術ですからねぇ)

経路として見るには、衛星を捕まえられなかった時の簡易レベルの測位結果は(精度が悪いので)捨てたほうが良いかもしれませんね。抜けが出るのは痛いのかも知れませんが、経路が与太るのとどっちが良いのか?微妙です。
地図を持ったナビならマップマッチングで逃げられるのでしょうがねぇ。。。
用途と目的にあわせての補正は必要でしょうね。
おもちゃとしては面白いです。がんばって下さい。
そして、何か思い付いた事があったら、発表してくださいな。位置情報を有効利用していきましょう♪

投稿者 ひゅ〜 : 2005年06月21日 18:52

来年の1月1日は,7年ぶりにうるう秒が入るようですね。
http://jjy.nict.go.jp/QandA/data/leapsec.html

投稿者 twovs : 2005年07月07日 17:21

うーむ、GPSが 国際原子時(TAI)だとすると現在は32秒進んでいるのですね。apacheログ記録時間との差は最大13秒だったが、およそ20秒+は処理時間なのかな?
処理時間は、携帯内の処理時間と通信時間とEZWebサーバーの処理時間(?)とhvs...の処理時間か、、、20秒も食ってるのは誰?(笑
ま、このあたりを悩み出すとキリがないので放置ですね。覚えておく事は必要でしょうね。
GPS使ったntpサーバーってそのあたりをどう処理しているんだろう?(あはは、ついついつっこみたくなる悪い癖(笑

お知らせ下さり、ありがとうございました。

投稿者 ひゅ〜 : 2005年07月07日 18:08

UTC + 32 = TAI
UTC + 13 = GPS
GPS + 19 = TAI [s] のようです。

また ntp はうるう秒にも対応していて
(FreeBSDだと) /usr/src/share/zoneinfo/leapseconds
を更新してコンパイルし直します。
#よくできてますね。すごい・・・。

投稿者 twovs : 2005年07月07日 23:11

なるほど、ありがとうございます。
GPS時刻は、TAIでも無いのか...原子時計とは言ってもTAI算出の時計群に入っている訳ではないのでしょうね。
でも、そんなにズレるのか?初期設定からズレている?
それとも初期設定がUTCにあわせてあったから現在のズレが発生しているのか?19秒差って事は、1980年頃のUTCに初期設定されたって事かもしれませんね。

ntpサーバーってうるう秒が入ったらコンパイルし直しが必要って事なのか?それともうるう秒も計算(0.9秒差を検出?)している?(ソースを読め>自分(笑
ntpクライアントで時刻を貰っている分には関係ない?

あはは、実用から研究の世界に入っていきそうですね。
つっこんで行くと面白そうな世界です。

投稿者 ひゅ〜 : 2005年07月08日 10:01

よろしかったらコメントしてください


投稿者名として表示されます


入力必須ですが、表示しません


クッキーに記録しますか?