EveryTrailの代替で使用していたSportsTrackerが有料会員にならなければ、iPhoneのGPSログを引っ張り出せなくなってしまった。そもそもデータをクラウドへアップできなくなってしまったのである。EveryTrailのサービスが閉鎖されたときに多少、予想はしていたのだけれど——やはり無料アプリだけではやっていけないのか。
ところがぼくには有料サービスを使ったら敗けみたいな感覚があって——有料アプリはいくつか、使っているけれど——、そんなに高額なわけではないのだけれど、無料アプリは適当なものが見当たらない。一番、良いのはiPhoneから直接、GPSのデータが吸い出せるようなアプリだ。
それならそのアプリのサービスがなくなっても使いつづけることができる。クラウドに依存すると、そのクラウドがなくなってしまうとにっちもさっちもいかなくなってしまうんだよなぁ。
そうこうしているうちに、「ZweiteGPS」というアプリを見つけた。
iPhoneから直接、MacBookAirに吸い出せる。
ただしデータの形式はjsonだった。
——ふむ。
Emacsでjsonがらみのライブラリってあったっけ、と探してみると、あることが判明した。それで俄然、つかう気になった。要はjsonからGPX形式に変換してやれば、いい。
ただ、json.elはjsonをlistに変換してくれるが、listからjsonへもどすようなものは用意されていない。これはxmlからlistへ変換してくれる「libxml-parse-xml-region」はあるけれど、逆変換はないことと同じことだった。
なぜ、ないのだろう……。
普通、双方向じゃないの、と思っていたのだけれど、変換するためのelispを書こうとしていろいろ、考えていたら突然、目から鱗が落ちた。
驚いたのはelispでプログラミングしているのに、XML(GPX)ができあがってしまうというか、XMLを書くようにして、elispのloopやifの構造が使えてしまうというか——なるほどなぁ。逆変換の関数なんか、用意する必要がないわけだ。
そういえば。
竹内氏によると、Lispはすべての言語の原点なのだという。「いまRubyがブームだが、Rubyは要するにカッコのないLisp。XMLもぶ厚いカッコのあるLisp。いろいろなプログラミング技法を見ますが、『Lispにあった』ということが多いです」(竹内氏)
Paul Grahamも似たようなことをいっていたけど、その一端をようやく垣間見れたような気がする。