簡単ジオコーディングに関して、ジュンヤさんから
「Googleマップ本家にジオコーディングAPIが出来たのだからそっちを使った方が良い」
と聞いたのでちゃんとドキュメントを読んでみました。(10分もかからないのだから最初から読め)
なるほど。本家にもこんな簡単なAPIがあったんですか。 地図関係のgemを探してみると一杯ありました。中でもこれは今回の用途にあってそう。
% sudo gem install google-geocode
% irb -r google_geocode
>> GoogleGeocode.new(GOOGLE_API_KEY).locate("東京タワー").coordinates
=> [35.658587, 139.745428]
うーん。簡単。 Yahoo!マップとどっちが精度高いのかな?
関連: 簡単ジオコーディング
「あ~○○さん?知ってる知ってる」
「よかったら紹介しようか?」
実際は懇親会で名刺交換したとか、ブログコメント欄でやり取りしたとかそんな程度。そんなことをよくやる人がいる。ネームドロッパーというやつだ。
実際に単に友人が多いという人はいるがネームドロッパーには要注意だ。
(今日の俺は口滑らか過ぎたかな?)
(ちょっと2割り増しで話してなかったかな?)
個人的にもそうならないように注意したいと思っている。
でも何故いけないの?ビジネス上の付き合いなら確率の問題から言って、片っ端から「知り合い」ってことにした方が最終的には得じゃないの?
でもそうじゃない。そうじゃなかった。
フリーになってから、誰かに人を紹介することがよくあることに気付いた。 信頼できて素敵な人にほど、いい加減な人は紹介できない。
「俺なんかよりよっぽど信頼できて確かでいい仕事をする」人とか、
「あれ?この人より良い所が一つでも俺にあったっけ?」という人などを紹介する。 元々知人が多い方でもないので全力で渾身の紹介をする。 紹介は、する方にとってそれぐらい重い。
そうすると自然と良い仕事、素敵な人を逆に紹介されるようになってきた。
「良い人は良い人を紹介する」 「良い人は良い人を紹介される」 「良い人は良い人から紹介される」
単純なことだけど、Googleのページランクみたいなアルゴリズムが働いている。
「良いコンテンツを作ること。良いサイトへリンクを張ることは自サイトの価値を上げる。」 「良い仕事をすること。良い人を紹介することは自分の価値を上げる。」
ネームドロッピングはスパムと同じだ。現実世界では効率が悪く、ワークしない。
またリアルな例をひとつ。
「サイトリニューアルにあたって、霊園の地図を載せたい。」
霊園データは数百。手作業ではちょっと無理。そこでGeocoding.jpのAPI(というかGoogleマップ)を使って住所から経度・緯度の座標に変換することに。
require 'open-uri'
require 'cgi'
require 'rubygems'
require 'hpricot'
class Geo
def self.lookup(address)
doc = Hpricot(open("http://www.geocoding.jp/api/?v=1.1&q=#{CGI.escape(address)}"))
{:lat => doc.at("lat").inner_text.to_f, :lng => doc.at("lng").inner_text.to_f}
end
end
「5秒に1回ぐらいにしてください」と書いてあるので回す場合はsleep 5とか入れてください。
% irb --simple-prompt -r geo
>> Geo.lookup "東京都港区芝公園4-2-8"
=> {:lat=>35.658634, :lng=>139.745411}
かなりいい加減な住所でもGoogleマップがいい感じに取ってくれました。(大体8割ぐらい?)
「だから霊園ってなんだよ!」というのはスルーで。
漢字をローマ字に変換したい。完全じゃないけどMeCabを使ってやってみました。
require 'jcode'
require 'romkan'
require 'MeCab'
class String
def hiragana2roma
self.to_roma
end
def katakana2roma
self.tr("ァ-ン", "ぁ-ん").to_roma
end
def roma2hiragana
self.to_kana
end
def roma2katakana
self.to_kana.tr("ぁ-ん", "ァ-ン")
end
def kanji2katakana
MeCab::Tagger.new("-Oyomi").parse(self)
end
def kanji2hiragana
self.kanji2katekana.tr("ァ-ン", "ぁ-ん")
end
def kanji2roma
MeCab::Tagger.new("-Oyomi").parse(self).gsub("\n", "").tr("ァ-ン", "ぁ-ん").to_roma
end
end
% ./script/console
Loading development environment (Rails 2.0.2)
>> "関東/東京都/渋谷区/本町".kanji2roma
=> "kantou/toukyouto/shibuyaku/honchou"
ん~、英語に訳す方が意味ありそうかなあ。
Railsの素敵なURL系の機能に日本語は入る余地が無くて残念。SEO的にも良くなるかと思ってひらがな・かたかな <-> ローマ字の相互変換を簡単にまとめてみました。
かんとう/とうきょう/しぶやく/ほんまち -> "/kantou/toukyou/shibuyaku/honmachi.html"
こんな感じのURLを使いたい。
Ruby/Romkanを使わせていただきました。
require 'jcode'
require 'romkan'
class String
def hiragana2roma
self.to_roma
end
def katakana2roma
self.tr("ァ-ン", "ぁ-ん").to_roma
end
def roma2hiragana
self.to_kana
end
def roma2katakana
self.to_kana.tr("ぁ-ん", "ァ-ン")
end
end
% ./script/console
Loading development environment (Rails 2.0.2)
>> "aiueo".roma2hiragana
=> "あいうえお"
>> "aiueo".roma2katakana
=> "アイウエオ"
>> "あいうえお".hiragana2roma
=> "aiueo"
>> "アイウエオ".katakana2roma
=> "aiueo"
地方(関東、近畿とか)や都道府県のモデルは使いまわせるので終わったらまとめて公開したいなあ。
Rails2.xでnamespaceを使ったhas_manyなresourcesのform_forの書き方の覚書。実際のアプリのリアルな例から。
管理画面の霊園(cemetery)の区画(compartment)のCRUDフォームを作りたい。
url:
http://localhost:3000/admin/cemeteries/1/compartments
http://localhost:3000/admin/cemeteries/1/compartments/new
http://localhost:3000/admin/cemeteries/1/compartments/1/edit
routes:
map.namespace :admin do |admin|
admin.resources :cemeteries, :has_many => :compartments
end
_form.html.erb:
<% form_for [:admin, @cemetery, @compartment] do |f| %>
~
<% end %>
モデルのhabtmやhas_many :throughやroutesのresoucesやnamespaceをちゃんと使うと複雑なデータの相関関係も綺麗に書けて嬉しいですな。ただ、Scaffoldがこれらに対応してないので今後のアップデートに期待したいです。
2008/05/01 修正:form_forのところが間違っていたので修正しました。
出社(五反田のオフィスに席を間借りしている)したら、ノートのACアダプタ忘れた!
また忘れた!
もうあったまきた(逆ギレ)のでThinkPad X61 7675A25買いましたー!
OSがXPでHDDが7200回転でBluetooth対応のX61をkakaku.comで調べたら1個しか該当しなかったのだから仕方無い。
五反田から秋葉原のニッシンパル行って買ってきました。
今時はノートのメモリ2GBが4000円切ってるんですね。お得なので購入。ついでに死んでも忘れないようにACアダプタを会社用に購入。
MicrosoftのBluethooth対応マウスも購入。(ThinkPadでも結構マウスを使うので)
Bluetooth初めて使いましたが、余計な出っ張りとか無くていいっすね。ヘッドセットも欲しいな。
Puttyと16GBのcoLinuxイメージをコピーしたらすぐに仕事が再開できました。あーこれは快適!コードがすすむわぁ。
古い糞VAIO宛に「バッテリーが爆発するかもしれないから交換するよ?(超訳)」という電話が来たけど、「いいっス」と答えて唖然とさせてやりました。もう本棚に縦置きしちゃったよ。
hostsファイルに大体、coLinuxのhost名を付けて使ってる。
192.168.10.40 dev
で、http://dev/phpinfo.php にアクセスするとFirefoxではphpinfo.phpのダウンロードが始まる。 IE7, Safari3.1, Opera9ではphpinfoがちゃんと動く。
http://192.168.10.40/phpinfo.php にアクセスするとFirefoxでもphpinfoがちゃんと動く。サーバーにVirtualHostの記述は何もしてない。
毎回これでハマるので覚書・・・。