グラフ描画ももはやAPIでOK

数年前まではPHPでグラフを描画させようと思うと相応の苦労が必要だった。自前で美しいグラフを描かせるのにはかなりのステップ数のプログラムを書かなくてはいけない。必然的に先駆者のお知恵拝借でライブラリをさがすことになる。その次に日本語化。日本語フォントファイルをIPAあたりからダウンロードしてきて試行錯誤してみたり・・・。

最近、グラフを描かせる必要性に迫られてウェブで検索していると、もはやRESTで呼び出すだけでグラフを描画してくれるサービスがあることに驚いた。

Google Chart API

RESTで呼ぶだけだから、プログラムの必要性もない。パラメータは引数で渡すだけ。しかも日本語も通る。2年ほど前から公開が始まっていたっぽい。グラフの種類も10種類くらいあるし、QRコードの作成までOK(これでQRコードのプログラムさえ必要なくなる)。見栄えも相応に美しいし文句のつけようもない。

こうしてみていると、かつて「ウェブ上で実現するのが難しく相応の技量が必要だったこと」ということが、誰でも間単にできてしまうようになってきた。敷居を下げるという意味では大変有意義なことではあるが、当然試行錯誤することがなくなるわけで、それだけプログラムの技量を磨く機会を失いつつあるということに少し危機感を感じる。

15年も前だとウェブプログラミングが一般的でなかったし、フレームワークもなかったし、わかりやすい書籍もほとんどなかった。何でも一から書かないといけなかった。今から思えば試行錯誤の連続だった。状況は急転している。今でも生まれつき優秀なプログラマはたくさんいるだろうけど、そういう人はいつの時代に生まれてもやっぱり優秀なんだろう。でも自分のような普通のプログラマは、相応に学習する機会に恵まれないと(嫌でもやらざるを得ない状況に追い込まれないと)、そこそこのプログラマにたどり着けないような気がしてならない。まさしく両極化だ。

いいライブラリに出会えたけど、考え事も増えそうだ。

Smartyでpreg_matchエラー

Smartyを使っていてこんなエラーが出た。

PHP Warning: preg_match() [<a href=’function.preg-match’>function.preg-match</a>]: Compilation failed: repeated subpattern is too long at offset 18454 in /library/smarty/Smarty_Compiler.class.php on line 454

たしか以前もこんなエラーに出くわしたことがある。確か、そのときは「PHPのバージョンが古いとpcre関連でバグがある」というような理解で終わったと記憶していた。そのときの解決策までは思い出せないが、エラーメッセージを見る限りでは正規表現のパターンの長すぎが原因のようだ。

しかし困ったのは、このエラーがSmarty内部で発生しているということ。ライブラリの中身なんて修正したくない(だって他のところでは動作しているのだから)。よくよく調べたらこのエラー、Smartyのバージョンを落とすことによって回避できるらしい。きっとバージョンが新しくなり、正規表現で記述していたパターンが長くなってエラーが出たのだろう。

エラーが出たバージョンは2.6.21だった。調べた結果によると、2.6.20と2.6.21がちょうど天と地の境目のようだ。早速2.6.20をダウンロードしてみたら見事解決した。よかった。ていうか、レンタルサーバ会社のPHPのバージョンが低いせいだよね、きっと。

ドコモでGoogle Static Mapsが時々表示されない

2009/10/21 | ケータイ

表題のとおり、ドコモで携帯サイトに埋め込んだGoogle Static Mapsが時々表示されないという、個人的にはとても深刻な事態に陥っていた(ついさっきまで)。その原因が、今やっとわかった。他にも同じことで悩んでいる人がいるかもしれないので、メモしておく。

ウェブで調べると「アクセス数の制限にひっかかってエラー画像が表示される」というのが多数を占めていた。今回のドコモでの検証の場合はエラー画像ではなく、リンク切れなどの際に表示される[x]が表示されてしまっていた。そして不思議なことに再読み込みを繰り返しているといつしか読み込めるようになり、一度読み込めるとその後は大丈夫になる、というなんとも奇妙な現象だ。

原因を知りたくて、ドコモで数十回アクセスしてみた。IPの制限かも、と思い、エラー時と正常時のIPアドレスなんかも記録してみた。しかしいったんエラーが出ていたにもかかわらず、別の地図を呼び出した際は正常表示される、といったことがわかった。つまりイレギュラー。エラーが出た場合に、直接画像にアクセスしてみたりもした。そうすると文字化けテキストが列挙された(何らかのエラーなんだと推測できる)。

そして調べてわかったこと。必要なパラメータが指定されていなかった。そのパラメータは「sensor」。マニュアルを熟読すると、このパラメータはGPS等のセンサーを使用していて位置出ししたときはtrueを値とし、センサーを使用しなかった場合はfalseを値として持たせる、しかも必須、と書かれている。おそらくGoogleにとって、物理的には何の確証も必要性もないデータではあるが、とにかく必須ということらしい。

今まではsensorの意味がわからなかったので(マニュアルをしっかり読んでいなかっただけなんですけど)、必要性も感じず使っていなかった。でもって、エラー頻発のところにこのパラメータを付け加えてみたところ、うそのようにちゃんと表示されるようになった!。秀樹感激!(古い)。たったこれだけのことに数ヶ月悩んでいたのかと思うと少し悲しいけど、ようやくすっきりした。

ちなみにドコモで表示された文字化けメッセージ(画像を直接ブラウザで呼び出す)では、最初に「臼NG」とかいてあった。「多分NGなんだろう」という意味だと思っていたけれど違った。最初の部分が文字化けしていて、(1byte)PNGらしい。つまりPNGのエラー画像が返されていたのだけれど、ドコモの端末ではPNGが読めなかったので、リンク切れのような形で表示されていたのだった(そんなに古い機種じゃないんだけど)。

教訓:マニュアルはちゃんと読みましょう。

携帯でCSS

2009/10/19 | ケータイ

最近は携帯でもCSSが使うことができる。もちろん前から使える機種は増えているわけだが、最近はほとんどの機種が使えるっぽい。うちでは基本的に3キャリアを常備しているが、どれも問題なく表示できているようだ。

しかし、いざ自分でコーディングしてそれぞれの端末で見てみると、なぜかドコモだけNG。なにをどうやってもだめ。文字サイズの変更をしてみたのだが、何を指定しても変化してくれない。なぜ?。

人から聞いたのだが、ヘッダが必要とのことだった。headタグではなくて、httpヘッダが必要・・・。ほんとにそんな面倒なんだろうか。とりあえず調べるのが面倒。ということで教えてもらったヘッダをつけてみた。

header(‘Content-Type: application/xhtml+xml’);

おぉぉ、CSSが反映された!。

と、ここまできてからウェブで検索してみた。ke-tai.orgさんに情報があった。

  1. iモード用のXML宣言、DOCTYPEを付ける
  2. CSSは外部ファイルにしない、ヘッダ部にも書かない
  3. 拡張子を「.xhtml」にする ※別の方法もあり

まじっすか。いろいろうるさいみたい。でもこの3つを守ればCSSが反映されるんだったら、HTMLだけで問題なかったわけか。勉強になりました。

待ち合わせ場所を知らせるときに

外で待ち合わせることが多い。個人の場合は、飲む約束とかで。仕事の場合は、打ち合わせの約束とかで。仕事といっても、打ち合わせできるようなステキな事務所を持っているわけでもないし、個人個人のつながりが多いから相手も自宅兼事務所な人が多い。必然的に「どこかで待ち合わせ」になる。

以前から「待ち合わせ場所」を人に知らせるのが面倒だと思っていた。簡単に地図上にポイントを落とせて、それを簡単に人に教えることができないかなぁ、といつも思っていた。地図上にポイントを落とすサービスならいくつでもあると思うけれど、それを超簡単に実現できるようなサービスはないかなぁ、と思っていた。でも、常々思っていても、探すのが面倒だった。カフェで待ち合わせることも多いけど、意外とカフェのウェブの地図って小さかったり見にくかったり、駅との位置関係が把握しにくかったり・・・。

結局自分で作った。待ち合わせ場所通知サービス「KoKode.in」(ココで.in)。

何の変哲もない、Google Mapsを設置しただけなんだけど、極力簡単に人に場所を教えられるようにしてみた。ページも1枚だけ。操作は全てAjaxで制御(jQuery)。バックグラウンドは軽量PHPフレームワーク3eyes(フレームワークも実用レベルになってきたからソースコードを精緻化して公開しないと・・・もうずっと放置したまま)。印刷もできるし、携帯でも見れるし、なんだかとてもうれしい(デザインにはこだわらない・・・)。

とりあえず自分が便利なように。他の人も便利になるかも、ということで公開。使う人いるかな。


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