getBoundsがundefined

2010/10/31 | JavaScript/Ajax

今まではほぼPHP専門でやってきたけど、最近はあきらかにJavaScriptの開発が多い。JavaScriptで作ったプログラムが動くと、見た目の印象がいいので面白いしね。

Google Maps V3で開発していて、地図表示領域の四隅の座標を取得したくて以下のように記述してみた。

var bounds = gmap.getBounds();
// gmapはGoogle Mapsのオブジェクト

四隅の座標なんて簡単!、と思っていたら、値が取得できない。ていうかboundsがundefinedになってる。その直前でgmap.getZoom()出来ているのに!。

検索してみてわかったこと。どうもgetBounds()は、タイルのロードが完了していないと取得できないらしい(英語のサイトになんとなくそんな意味のことが書いてあった)。「addListenerして’bounds_changed’とか’tilesloaded’とかしろ」と書いてある。

結構不便だけど、考えて見れば当然かもしれない。地図の表示領域はブラウザの画面サイズやCSSとも関係してくるだろうから、タイルがロードさえされればそこから判別できるんだけど、と言われれば納得出来る。

納得出来るのと、こんな具合に動いて欲しい、というのは時として矛盾する。

携帯開発と画面サイズ

携帯用サイトの開発を請負中。今までの場合は、大抵画面の横幅サイズ240ピクセルで決め打ちで問題なかったが、今回の場合は画像が重要なので、機種判別して画面サイズを考慮するように開発したい。

PHPで携帯機種判別というと手堅いところで行けばPEARライブラリを使うのが得策だ。使用するライブラリはNet_UserAgent_Mobile。

http://pear.php.net/package/Net_UserAgent_Mobile/

便利なツールではあるが、最終更新日が本日現在で2009年6月23日になっている(stableになったのね)。つまりそれ以降の機種情報は含まれていないことになる。実はプログラムの更新はなくて、機種情報は更新されていたりするのか、と思って一式ダウンロードして確認してみたけれど、残念ながら最新機種の情報はやはりなかった。ここは自作するしかないだろう。

携帯キャリア各社のウェブサイト上で、一応画面サイズの情報が公開されているようだ。それらは以下のリンク先を参照。

WILCOMやemobileは考慮しないけど一応掲載。emobileはリンク先URLに日付が入っているので将来はURLが変わっていると思う(まぁ、他のキャリアも未来永劫同じURLとは限らないけれど)。

ここから自作してみようかな。

MySQLを扱うGUIツール

2010/10/27 | MySQL

現在案件の提案中。ほぼ受注できそうな感じなのだが、クライアントのリクエストの一つに「データベース処理に時間がかかるかも」と思われる部分があった。基本的にこういった不確定要素をもったまま受注してしまうのは嫌いなので、なるべく今のうちに処理したい。ということで、SQL文を書いてテストしてみることにした。

しかしテストSQL文を実行させるにあたって、なるべく本番と同等の条件にしたい。そう考えると、データとして100万件程度をINSERTしておかなければならなさそう。さてどうするか。

まずエクセルを使って乱数処理させた。できあがったデータをテキストファイルにし、PHPでSQL文に整形した(最初から全部SQL文にしたほうが早かった)。次にこのSQL文を実行しなくてはならない。

最初はphpMyAdminのインポート機能を使ってみた。しかし実行時間でエラーになる。時間がかかりすぎると他の作業に差し支えそうなので、Windows用のGUIツールを使うことにした。さて何を使おうか。いろいろ考えた結果MySQL Workbenchを使うことにした。コマンドラインからやっても良かったのだけれど、便利ツールはなるべく使いたい(Linuxならあきらめてコマンドラインだけれど)。

まずはソフトウェアをダウンロードしてインストール。

ダウンロードはこちらから

そしてSQLを実行。少々使い方がわからない部分があって悩んだけど、結果としてうまくいった。100万件のデータを登録するのに5分ちょっと位だったと思う。

とっても便利だし、インターフェイスもかっこいい。どうせ使うツールなら、こういうクールなアプリがいい。

前後のクォーテーションを取り除く

文字列の前後にダブルクォーテーションやシングルクォーテーションがくっついた状態で文字列が渡されることがある。そんな時に不要な前後の文字列を取り除く便利な方法を見つけた。

$moji=trim($moji,”\x22 \x27″);

trim関数に第2引数を与えて、取り除きたい文字列を指定すればよい。簡単。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net