ぷちのいず 2nd Anniversary!!!

えー、突然ですが、おかげさまで "ぷちのいず" も今日で2周年を迎えました!(パチパチ)

おめでとう!ありがとう!笑顔

何事もあまり長く続かない私が2年もの間、休み休みですが続けてこれたのも、ひとえに皆様の応援のおかげです。 ありがとうございます。そしてこれからもよろしくお願いします。

サイトを立ち上げて、しばらくは Google で 「ぷちのいず」で検索すると「ぷち/の/いず」と分割されて検索されていましたが、今ではサブページ(?) まで表示されるに至りました。

Googleの検索結果
Google での検索結果

なんかサブページのチョイスがいまいちですが、こんなへなちょこサイトではもったいないくらいの好待遇です。

さて、サイトを立ち上げて2年。公私共に(?)いろいろありました。

ちょっと独りよがり的に振り返ってみましょう。初めに謝っておきますが、今日のブログは私が思い出に浸るエントリーです。すいません。

次の図はGoogleAnalytics でとったセッション数をグラフにした物です。


セッション数の推移

図中のアルファベットはイベントを表しています。各イベントの内容は次の通りです。

イベント一覧

A 2008/09/13 qgmap-0.0-aplha1 公開
B 2008/10/14 qgmap-0.1.0 公開
C 2008/11/06  GW-CF54Gドライバ公開
D 2008/12/12  GW-CF54G WPA対応
E 2009/01/24  qgmap-0.1.4 公開 (GPS対応)
F 2009/03/19 WifiConnect 公開
G 2009/05/23 qgmap-0.1.8 公開
H 2010/01/02 qgmap-0.2.0 公開
I 2010/01/24 4GB SDHCドライバ公開
J 2010/02/06  32GB対応 SDHCドライバ公開
K 2010/02/15 3桁機用SDHCドライバ公開
L 2010/03/23 SL-A300用SDHCドライバ公開
M 2010/08/15 qgmap-0.2.2 公開

うーん。懐かしい。

グラフの 2 つの大きなピークは、GW-CF54G ドライバの WPA 対応と SDHC ドライバの公開ですね。この2つは確かに気合い入れてましたね。帰りの電車の中で SD ドライバのアセンブラを解析したり。これができたら世界初!と思いながら頑張ってました。大変だったけど楽しかったです。WPAの接続ができた時も、SDHC 8GB が認識した時も鳥肌がたったのを覚えてます。

また、この様に出来事を並べると、WifiConnect がちょっとかわいそうですねぇ。未完のまま放置されちゃってます。まだ需要があるなら開発しないとですね。もう忘れかけてるのでキャッチアップに時間がかかりそうです。

qgmap に注目すると、記憶では初公開から 0.1.0 公開まで結構間があったような気がするんですが、1ヶ月程度だったんですね。その中で 7, 8 回リリースしているなんて、今から考えると尋常じゃありません。よほど暇だったんでしょうねあっかんべー

まぁ、そんな働きぶりだったせい(?)か、"冬の時代"を迎えてしまいます。会社が無くなってぷーたろーです。今思えばいい経験になりましたが、当時はちょっと心穏やかじゃなかったですね。幸い今の会社に拾われたので助かりましたが、リーマンショック真っ只中だったので、就職できてなかったらと思うとゾッとします。

このブログも入社の審査の際にプラスポイントだったようで、「ぷちのいず」に人生救われました。エンジニアなら技術系のブログなりソフトなりを書いて Output しているとアピールになるようです。

と2年間を振り返ってみましたが、 なんかサイトを立ち上げたのはずーっと前のような、でも早かったような不思議な感じです。

これからも細々とまったりと無理せず続けていこうと思います。よろしくお願いします。

Emacs テクニックバイブル

今回は最近買った本の紹介です。

私は開発する際のエディタに主に emacs を使用しています。emacs はクセが強いため、慣れるまでは大変ですが、強力にカスタマイズできるため慣れると手放せなくなるという中毒性の高いエディタです。特に仕事柄、コードを読むことが多いのですが、emacs + gtags.el がないとコードを読む気になりません。

ただ、基本的な操作は不自由なく使えているのですが、あまりの多機能+奥深さぶりに私はほとんどの機能を使いこなせてません。多分 emacs の実力の 10% も使えていないと思います。あっかんべー

emacs lisp (emacs を拡張するためのマクロの言語)を分かっていないせいか、カスタマイズとかスクリプトの導入が面倒なんですよね。。。

そんな私が欲しかった本が最近発売されました。「Emacsテクニックバイブル ~作業効率をカイゼンする200の技~」という本です。

Emacs テクニックバイブル買いました
Emacs テクニックバイブル買いました

まだ途中までしか読んでいないのですが、実用的なスクリプトが多数載っていて、インストール方法や設定方法も書かれているので lisp が苦手な私でも簡単にカスタマイズできそうです。

というか、スクリプトを自動でインストールする仕組み (M-x install-elisp-from-emacswki) があることすら知りませんでした。こんなに簡単にインストールできるなんて・・・。

開発に実際に役立ちそうな物があるので1つ1つ試して行きたいと思います。

特に開発系で気になった物 (or 実際に使っているもの) は以下です。

  • 13.2 summarye.el バッファのサマリを表示する
    → ファイル内の関数一覧表示は便利そう
  • 13.5 M-x ediff-files, 13.6 M-x ediff-merge-files
    → これはたまにお世話になってます。マージの時便利
  • 13.10 M-x which-func-mode 現在の関数名を常に表示する
    → 便利そう。使ってみよう
  • 13.12 ipa.el ファイルに直接書き込まずにメモをする
    → コードリーディングの時に重宝しそう。メモ間でジャンプできるのもいいな。
  • 13.15 gtags.el
    → これなしでは生きていけません
  • 13.16 fold-dwim.el 複数の折畳み・展開コマンドに統一的なインターフェースを提供する
    → hideif.el とかアウトラインモードとか使ってみたけどキーストロークが覚えきれなかった私にはピッタリかも。

うーん。emacs は奥が深いなぁ。

もっとカスタマイズして効率的に開発できるようにしたいな。 そうすれば qgmap のリリースも早くなる・・・かも? (^^;

緯度経度から2点間の距離を求める

久しぶりに開発途中のネタです。

POI の最寄検索や、検索結果表示で現在値からの距離を表示させたくて、任意2点の緯度経度から距離を計算する方法を調べてみました。

地球が球体なら何となく頭をひねれば分かるかもしれませんが、楕円体の緯度経度から距離を求めるのは私には見当もつきません。

ということでググってみると、楕円体を考慮していて、世界中の緯度経度で通用しそうな計算式が2つ見つかりました。

何となく航海で使用する下の公式のほうが正確な気はしますが、上のヒュベニの公式の方が演算が簡単そうな気がします。

また、qgmapでは多少の誤差も許容できるので数%程度(?)の精度で十分です。そこで近似式も候補に入れてみます。

これらの計算式がどの程度の正確さなのか、ランダムに選んだ緯度経度で計算して誤差と計算速度を検証してみました。

とはいえ、検証しようにも正解がわからないので、とりあえず国土地理院のサイトで2点間の距離を計算できるようですので、そのサイトとの誤差を調べました。つまり、実際に正確かどうかの検証ではなくて、国土地理院のサイトの公式に近いかどうかの検証です (^^;

で、結果は以下のとおり。

アルゴリズムの違いによる国土地理院サイトとの誤差
アルゴリズムの違いによる国土地理院サイトとの誤差

縦軸は国土地理院サイトで計算した距離(a)と、公式で計算した値(b)の誤差の割合(|a-b|/a) で、横軸が2点間の距離を示しています。

さすが航海算法と呼ばれるだけありLambert-Andoyerの公式は距離によらず 10^-5 以下の誤差率になっています。

ヒュベニの公式は50km以下ではLambert-Andoyerの公式と同等ですが、距離が離れるほど誤差が大きくなっていくようです。

簡易近似式は1000km以下では誤差0.1%前後で、1000kmを越えるとヒュベニの公式と同様誤差が増えていきます。

また、それぞれの公式を Zaurus で計算させた時の時間も測定しました。ちなみに、スペシャルカーネルを使っているので、浮動小数演算が高速化される FastFPE パッチが適用されています。

測地線航海算法のHPにはLambert-Andoyer と式的には同じですが、計算量が少し少ない小野の公式というものも載っていたので、こちらも計測しました。

各公式の計算時間

公式
1万回の計算時間
近似式 0.2838 sec
ヒュベニの公式  0.5043 sec
Lambert-Andoyerの公式  2.8202 sec
小野の公式  2.6518 sec

やはり近似式は演算量が少ないので高速ですね。1万回の計算が0.3秒なら充分実用的です。

ヒュベニの公式は近似式に比べ 1.8倍、Lambert-Andoyerの公式が10倍、小野の公式が9.5倍の時間がかかりました。

やはり精度が高い下の2つの公式は三角関数の演算などが多いため遅いですね。ただ、同じ結果が得られる小野の公式は少し早いようです。

結論

近似式が思いのほか精度が高かったので近似式を使おうと思います。

もともと精度も1%程度あれば十分かなと思っていたので、qgmap には充分ですね。

開発は案外こういう自己満足的な調査が楽しかったりするんですよねー。笑顔

qgmap-0.2.2 リリース

長い間お待たせしました。qgmap をリリースします。→ダウンロードページへ

ただ、今回は結構変更が入っているのでバグが増えてるかもしれません。気づいたら教えてください。

0.2.1 からの変更点は以下のとおりです。

バグフィックス

  • 「ルート権限で実行する」にチェックするとイメージをmountできないバグを修正
  • POI管理画面でPOIが1つもない時に削除・変更を押すと落ちるバグを修正

新規機能

  • メニューを実装
  • POI検索を追加
  • プリセットアイコンを追加
  • POIのアイコンを選択するダイアログを作成

まず mount 関係のバグフィックスについてですが、root権限で実行するとイメージをマウントできないバグを修正しました。

ただ、解決していないと思います。ルートでのマウントは可能になっているので、ユーザ権限でマウントできない場合は、「ルート権限で実行」にチェックしてみてください。

おそらく、上記の減少は mount コマンドを 0.2.1 から入れ替えたのが原因だと思います。これについてはもう少し調査しますね。

続いて新規機能です。

まずはメニューの実装です。ビュースタイルでもスタイラスだけでほぼ全ての操作ができるようになりました。

 メニューを実装しました
メニューを実装しました

GUIアプリを作るのに慣れてないのですが、メニューを見るだけである程度操作できるようにしたつもりです。もちろんキーによる操作も今までどおり可能です。

もう1つの大きい新規機能はPOI検索です。

POI検索メニュー
POI検索メニュー

POI>POI検索 メニューでダイアログが開きます。

POI検索
POI検索ダイアログ

検索キーワードを入力して「検索」ボタンを押すと下側に検索結果が表示されます。検索キーワードは名前部分と説明部分の両方から検索されます。

検索結果のリストを選んでダイアログ右上の「OK」を押すと、そのPOIの場所にジャンプします。

 

他の機能としてはプリセットアイコンを追加して、アイコン選択のダイアログも追加しました。

プリセットアイコン & アイコン選択ダイアログ
プリセットアイコン & アイコン選択ダイアログ

プリセットアイコンはここで GPL と CreativeCommons のデュアルライセンスで公開されているものの一部を使用しました。

アイコンが多くなるとコンボボックスでは選択しづらいので選択ダイアログも追加しました。

これで少しは使いやすくなったのではないでしょうか。

 

初めにも書きましたが、今回は結構大きく手を入れているので、色々挙動がおかしくなっている部分もあると思います。気づいた点があればご指摘ください。

次のリリースはいつになるか分かりませんが、以下のような機能を考えてます。

  • SL-A300対応 (起動しない問題対応&ダイアログサイズ調整)
  • 周辺のPOI検索 (最寄りのコンビニとか)
  • POIの登録

まったり開発していきますのでよろしくお願いします。

OpenStreetMap

今回は地図に関連したプロジェクトのご紹介です。リリースじゃなくてすいません (^^;

Wikiのように誰もが自由に地図を書いたり編集したりできる OpenStreetMap です。

OpenStreetMap
OpenStreetMap  (画面は横浜駅近辺)

イギリスが発祥の、誰もが自由に使える地図をみんなの手で作り上げるというプロジェクトで、成果物の地図は再配布、販売も含め自由に使うことができます。

地図といえば、今まではライセンスフリーなものはほぼ皆無だったので、qgmap ではちょっと後ろめたい気持ちを持ちながら GoogleMaps をダウンロードして使用していました。

OpenStreepMap の完成度が上がれば、それこそ全て自由なライセンスの地図データで揃えることができるようになるかもしれません。

いずれ qgmap でも OpenStreetMap に対応しないとですね。詳しく調べてませんが、GoogleMap と同じ方式(ズームレベルやタイルのサイズ)だったらいいなぁ。

地図を書く時は、GPS のトラックログや、国土地理院が公開している航空写真などを元に道路を書いていくようです。

地図は利用するもので作るという発想はなかったので、これを知ったときは衝撃的でした。すごいなーと。

私も M-241 を持って散歩やドライブしながら、少しですが地図を書いています。

GPS をお持ちの方は散歩がてら地図を書いてみるのもおもしろいですよ!