Smart -Web Magazine

WEB開発者に嬉しいステキ講座

MENU

Headline

ダイニングバー『モテなし』渋谷

2009年7月22日 1 COMMENT

先週末、バルコニーにホームセンターで買ってきたタイルを敷きました。タイルが65枚もあるので全部運ぶのがすっごくすっごく大変だったのですが、掃除はお友達の子供が手伝ってくれたおかげで楽ちんでしたね。
その子供に掃除を手伝ってとお願いしたら断られました。でも、お母さんが楽しい水遊びだよー的な誘い方をしたら、嬉しそうに手伝ってくれました。キッズにはお願いするより、楽しい水遊びだよー的な誘い方がいいんだなと勉強になりました。

渋谷で打ち合わせということで、本日は渋谷ランチです。
お目当てのお店が休業だったため、急きょ近場で見つけたお店がダイニングバー『モテなし』。いかにもいじってください的な名前にはこれ以上触れませんが、とても気持ちよくランチできました。

お店は道玄坂を上ったあたりの地下にあります。雰囲気は和風ダイニングという感じで、近くのサラリーマンの方とかが多いようです。スタッフの方は感じがよく、テーブルも広めでとてもいい感じ。ゆっくり本を読んでも良さそうですが、やはりカフェではないのでそこまで落ち着きはしません。残念なのは、分煙していないことでしょうか。

モテなしさんは馬肉がイチオシでしょう。ボクは馬肉のハンバーグをオーダーしました。初めてですねー。

中目黒webデザインとランチブログ-モテなし

まず、ボールに盛られたサラダが運ばれてきました。お皿がボールなので見た目より量!という感じですが、色とりどりで食欲誘われます。

中目黒webデザインとランチブログ-モテなし

そして期待の馬肉ハンバーグ!おお、牛肉とは違ったさっぱり感、口の中に広がる微かな香りがとてもいいです。臭みはないですねー。もう一度こよっと。

モテなし (ダイニングバー / 神泉、渋谷) ★★★★ 4.0

TEL:03-5458-8166
住所:
東京都渋谷区道玄坂1-17-11 ミナミビル B1F
営業時間:
[月~木]
11:30~14:00
18:00~24:00
[金・土]
18:00~5:00
ランチ営業、夜10時以降入店可
定休日:日曜・祝日

このエントリーをはてなブックマークに追加

Boid理論 群行動生成アルゴリズム

2009年7月21日 コメントの追加

人工知能技術に、フロッキングと呼ばれる群れ(flock)の動きをシミュレートするアルゴリズムがあります。フロッキングの理論を利用すると、簡単なコーディングで魚や動物の群れの動きをリアルに表現することができます。

これから紹介するBoid理論は、たった3つのルールだけで群れをシミュレーションすることができます。

  1. 分離(Separation)
    仲間に近づきすぎたら離れる。
  2. 整列(Alignment)
    仲間と同じ方向、同じ速度に合わせて飛ぶ。
  3. 結束(Cohesion)
    群れの中心に向かって飛ぶ。

この3つの力を合計して、各個体が動く方向と速度を算出します。

計算式は下記のものが公表されています。

1.分離(Separation)
PROCEDURE rule1(boid bJ)
Vector pcJ
FOR EACH BOID b
IF b != bJ THEN
pcJ += b.position
END IF
END
pcJ /= N-1
RETURN (pcJ - bJ.position) / 100
END PROCEDURE
2.整列(Alignment)
PROCEDURE rule2(boid bJ)
Vector c = 0;
FOR EACH BOID b
IF b != bJ THEN
IF |b.position - bJ.position| < 100 THEN
c -= (b.position - bJ.position)
END IF
END IF
END
RETURN c
END PROCEDURE
3.結束(Cohesion)
PROCEDURE rule3(boid bJ)
Vector pvJ
FOR EACH BOID b
IF b != bJ THEN
pvJ += b.velocity
END IF
END
pvJ = pvJ / N-1
RETURN (pvJ - bJ.velocity) / 8
END PROCEDURE

上記公式で得られた値を下記のように計算して最終的な位置を計算します。

PROCEDURE move_all_boids_to_new_positions()
Vector v1, v2, v3
Boid b
FOR EACH BOID b
v1 = rule1(b)
v2 = rule2(b)
v3 = rule3(b)
b.velocity = b.velocity + v1 + v2 + v3
b.position += b.velocity
END
END PROCEDURE
参考

FlashのActionScriptで、Boid理論を使って群れを表現してみました。 マウスの後を追うようにしてあります。

[Boid理論のテスト]

次回はもう少しBoid理論について詳しく見ていきたいと思います。

このエントリーをはてなブックマークに追加

カフェ・ダイニング&ダーツ『Bonny Butterfly(ボニーバタフライ)』中目黒

2009年7月17日 コメントの追加

夏本番も近くなり、オヤジ達のスタンプラリーの季節ですね。

ボクが高校生の頃、電車に乗った際にとても不思議に思うものがありました。それは、電車の窓に等間隔でついている脂っぽい汚れです。そのときのボクには、それがなんなのかわからずとても不安な気持ちで一杯でした。

高校も卒業した夏、その汚れが『頭油(とうゆ)』と呼ばれる、主に中年サラリーマンが残した頭のスタンプだと知りました。今では笑い話かもしれませんが、それからというもの朝もシャンプーするようになりました。

すいません、話が脱線しましたが、地方では頭油があまり知られていないそうなので、一応説明しておきます。頭油とは、オヤジが電車の席で眠りこけているときに、窓ガラスをまくらにすることで付着する頭の油のことです。

関東近辺では、『頭油ラリー』が流行っており、今年の東急頭油キングがCDデビューするという噂があるぐらい勢いのあるスポーツに育ちつつあります。なんて、流行りものを自慢げに知ったかしちゃいましが(笑)。

恥ずかしながらボクも参加したこともありますが、若さゆえか芸術点が及ばず予選落ちでした。来年はシャンプーを変えて、再度挑戦するつもりです。

こんな宣言までしちゃって、また予選落ちしたら恥ずかしいですよね・・・。

中目黒webデザインブログ-Bonny Butterfly

ダーツもあって、インディアンの町サンタフェのプエブロ風という『Bonny Butterfly』。時々ランチするカフェ・ダイニングです。

目黒川沿いがガラス張りになっていて、景色を楽しめるのがポイントです。難点はアイスコーヒーのグラスが細いのと、ガタガタするテーブルがいくつかあることですが、全然許容範囲です。

中目黒webデザインブログ-Bonny Butterfly

今回はオムライスです。卵がトロっとしてて、デミグラスソースは濃厚。ステキです。普段はオムライスってあまり食べないのですが、ここのは美味しいので時々オーダーします。おすすめはハンバーグです。

Bonny Butterfly (バー / 中目黒、代官山、恵比寿) ★★★☆☆ 3.5

TEL:03-5725-0445
住所:東京都目黒区上目黒1-16-12 鈴房ビル 1F
営業時間:
[月~金]
11:30~翌5:00
[土・日・祝]
12:30~翌5:00
ランチ営業、夜10時以降入店可、日曜営業
無休

このエントリーをはてなブックマークに追加

魚料理『吉成(よしなり)』渋谷

2009年7月15日 3 COMMENTS

こんにちわ。
bibioのアルバム『Vignetting the Compost』をiPodに入れたのですが、なんだか癒されますね
。 ・・・すいません、なんかこ洒落た出だしになってしまいました。

中目黒webデザインブログ-吉成

食べログのTOP5000にも入っている渋谷ランチで注目のお店『吉成』に行ってきました。小雨の降ったり止んだりで、傘を差したりしまったりという午後、宮益坂を上って吉成までやってきました。ちょっとお腹の具合も悪く、これでダメなランチだと泣きっ面にハチです。美味しいことを祈りつつ、階段を下りて入って行きました。

店内は外観の印象よりも広々としていて、明るい雰囲気。
うるさ過ぎず、静か過ぎずのリラックス空間です。

中目黒webデザインブログ-吉成

ランチメニューは定食と丼ものがあります。定食はおかずが選べるのですが、通常2品選べるところ、おまかせにすると3品ついてきます。丼はA丼からF丼まであり、まさに選び放題。ボクはウニとなんか白身魚をチョイスしました。

中目黒webデザインブログ-吉成

白身魚がですね、肉厚でプリッとしてておお!という食感。いい仕事しているなーと感心しつつ、ウニもまた甘くて臭みゼロ。ボクはウニの臭みが嫌いで回転ずしなどでは決してウニを頼みません。ですが、ここのウニは大丈夫でした。
お味噌汁もまた・・・、日本人に生まれて幸せだなー。

魚料理吉成、宮益坂を上る価値のあるお店です。
・・・すいません、なんか偉そうなものいいになってしまいました。

魚料理 吉成 (魚介料理・海鮮料理 / 渋谷、表参道、明治神宮前) ☆☆☆☆ 0.0

TEL:03-3409-1322
住所:東京都渋谷区渋谷1-7-1 渋谷S-6ビルB1F
営業時間:
11:30~15:00 17:30~24:00
ランチ営業、夜10時以降入店可
定休日:日曜・祝日

このエントリーをはてなブックマークに追加

[アクセス管理] AccessWatchのインストール

2009年7月13日 コメントの追加

AccessWatchDownloadページでName欄に名前、Email Address欄にメールアドレスを入力して、[I agree to the license - Download AccessWatch]ボタンをクリックします。

Email Address欄に入力したメールアドレス宛にメールが届くので、そこに記載されているURLをクリックしてインストールファイルをダウンロードします。
たとえば、バージョン2.4の場合は下記のようなURLが送られてきます。

For UNIX systems:

http://www.accesswatch.com/download/src/accesswatch-24.tar.gz

For Windows or Macintosh systems:

http://www.accesswatch.com/download/src/accesswatch-24.zip

ファイルをダウンロードしたら、インストールするサーバにFTPでアップします。アップが完了したら、TELNETでサーバに接続します。

TELNETで接続後、suコマンドで管理者になり、FTPでアップしたディレクトリに移動します。

以下は/var/www/htdocs/awディレクトリに移動しています。

cd /var/www/htdocs/aw

ファイルを解凍します。

tar xvfz accesswatch-24.tar.tar
解凍後はawというディレクトリが作成されているので、そのディレクトリに移動します。
cd aw

あとは、cdgディレクトリにあるaccesswatch.cfgをサーバ環境に合わせて編集します。 最低でも、$accessLogと$reportBaseを設定しておきましょう。

# ログファイルの保存場所
$accessLog	= "/etc/httpd/logs/conf/access_log";
# AccessWatchが出力するHTMLファイルの場所
$reportBase	= "/var/www/htdocs/aw";
設定が完了したら、実際にログ解析できるかテストします。
perl aw-parser.pl
perl aw-report.pl

これで、/var/www/htdocs/awディレクトリにindex.html以下8ファイルが出力されていればOKです。

このエントリーをはてなブックマークに追加

付録 ビット演算

2009年7月13日 2 COMMENTS

バイトとビット

ここでは、整数データ型の変数をビットごとに演算する方法について学習します。 コンピュータは 0 と 1 の2進数で動いています。普段プログラムで扱っている数字は10進数ですが、この2進数による計算はコンピュータの基本です。

バイトとビット

バイトとビットという単位は、コンピュータのメモリで使われるものです。メモリとは、コンピュータ内でデータやプログラムを記憶する装置のことで、CPUが直接読み書きできる主記憶装置とも呼ばれます。

ビット

メモリで扱う最小の単位は、1ビットです。1ビットは ON と OFF の状態を 0 と 1 (2進数)で表現します。それ以外の状態、値はありません。

一般に、nビットの情報量では2のn乗個までの情報を表現することができます。たとえば画像の場合、8ビットBMPといえば、2の8乗で256通りの色を扱えることになります。

バイト

1ビットを8個並べたセットが1バイトです。バイトはコンピュータで最もよく利用される単位で、情報の記録や伝達などのほとんどがバイト単位で処理されます。メモリのアドレス情報は、1バイト毎に割り当てられた番号で、CPUはバイト単位でアドレス情報を読み書きします。

1バイトの詳細

ビット 7 |6|5|4 |3|2|1|0

左端のビットのことを最上位ビット、右端のビットを最下位ビットと呼びます。

ビットパターン

1バイト1ビットが8個並んだものですから、2の8乗で256通りの整数を表現することができます。たとえば、10進数の0という数値を表現する場合は、00000000で 0 、 00000001 で 1 、00000010 で 2 といったように表現します。

10進数の 0 0|0|0|0|0|0|0|0
10進数の 1 0|0|0|0|0|0|0|1
10進数の 2 0|0|0|0|0|0|1|0
10進数の 3 0|0|0|0|0|0|1|1
10進数の 4 0|0|0|0|0|1|0|0
10進数の 5 0|0|0|0|0|1|0|1
10進数の 6 0|0|0|0|0|1|1|0
・・・
10進数の 255 1|1|1|1|1|1|1|1

データを上記のように 1 と 0 で表現したものを『ビットパターン』と呼びます。

ビット演算

ビット演算は、コンピュータで扱う最小の情報単位であるビットに対する演算ですから、演算速度は高速です。また、メモリの消費量を最小限に抑えることができます。ただし、算術演算子のように直感的に使えるものではありません。

ビット演算子の概要

ビットごとの論理演算には、次の 4 つの演算子が用意されています。

ビット演算子の一覧
演算子 演算 意味
& 論理積 & を挟む両方の値が1である場合だけ1が返されます。
print sprintf("%04lo",  0011 & 0101), "\n";
> 0001
| 論理和 | を挟む片方あるいは両方の値が1であれば1が返されます。
print sprintf("%04lo",  0011 | 0101), "\n";
> 0111
^ 排他的論理和 ^ を挟む両方の値が異なるとき1が返されます。
print sprintf("%04lo", 0011 ^ 0101 ), "\n";
> 0110
~ 否定 ビットを反転します。

ビット演算の使い方

ビット演算は2進数以外にも、10進数、16進数などを処理することができます。

# 10進数
print 10 | 5, "\n";
> 15
print 10 | 2, "\n";
> 10
 
# 16進数
print 0x0a | 0x0f, "\n";
> 15
print 0x0a | 0x02, "\n";
> 10

10 と 5 の論理和が15というのは、以下のような処理が行われたうえでの結果です。

  1. 10を2進数であらわす → 00001010
  2. 5を2進数であらわす → 00000101
  3. 10と5の2進数で論理和を行う → 00001111
  4. 結果を16進数で出力(0x略) → 15

ただし、数値を文字列としてビット演算した場合、以下のようになります。

print "10" | "5", "\n";
> 50
print "10" | "2", "\n";
> 30

ここでは、演算のための長さを統一するために、短いほうの右側に0のビットを付け加えています。"10" | "5" が演算対象となっている場合は、一度"10" | "50" と置き換えてから処理しています。

文字列も処理することができます。文字列同士のビット演算では、ASCIIコードを基準に処理します。

print "a" | "b", "\n";
> c

わかりやすいように、1 と 0 を論理積、論理和、排他的論理和の処理にかけた場合の表にしました。

論理積・論理和・排他的論理和の処理結果一覧
値A 値B 論理積(A & B) 論理和(A | B ) 排他的論理和(A ^ B) 否定(~A)
1 1 1 1 0 0
1 0 0 1 1 0
0 1 0 1 1 1
0 0 0 0 0 1

3.シフト演算子

ビット単位での演算子には、ビット演算子の他にシフト演算子もあります。ここでいうシフトというのは、数値を2進数で表し、全ケタを右や左へずらすことです。

シフト演算子には、次の 2 つの演算子が用意されています。

演算子 使い方 意味
<< A << B Aの値をBの数だけ左へシフトする。
>> A >> B Aの値をBの数だけ右へシフトする。

それでは、ためしに左シフト演算子を使ってみましょう。

print 5 << 1, "\n";
> 10

これは、10進数の 5 に対して1ビットシフトするということです。1ビットソフトするというのは、2進数の右端の数字をはずして、左端に0を埋めます。 5は2進数で00000101 なので、これを上のように操作すると 00001010 、つまり10進数の10になります。

5を左へ1ケタずらすと2倍の10になります。2進数で右端に0をくっつけるというのは、2倍にすることを意味します。10進数で右端に0をつければ10倍になるのと同じことです。

次に、右シフト演算子を使ってみましょう。

print 10 >> 1, "\n";
> 5

右シフトは2分の1倍になります。2進数で右端の数値を取るというのは、2分の1倍にすることを意味します。

2で割りきれない奇数を右へ1ケタずらしてみましょう。

print 15 >> 1, "\n";
> 7

割り切れない場合は、端数を切り捨てます。

このエントリーをはてなブックマークに追加

鉄板焼『440 獅子丸』中目黒

2009年7月10日 コメントの追加

シロアリは色が白いアリではなく、分類的にはゴキブリに近いそうです。

中目黒webデザインブログ-440

目黒川沿いにある鉄板焼『440 獅子丸』に行ってきました。お初のお店です。以前は3000円前後のランチだったような気がするのですが、お手頃価格になっていたので入りました。価格見直しかお店が変わったのかな。とにかく、良いことです!

1階は閉めているので、2階に上がります。落ち着いた空間ですねー。店内は静かで、見晴らしが良くて雰囲気も良しです。調度品も結構良いものを揃えているようです。

2階に上がった時スタッフの方がいなくても驚かないでください。1階に厨房があるため、たぶん食事を運んでいる最中です。好きな席に座って待っていましょう。

中目黒webデザインブログ-440

オーダーしたのはステーキ丼。丼の器が斜めになっていまして、覗きこまなくても斜め上から見ることができるようになっています。いいですね!

中目黒webデザインブログ-440

お味は上品なステーキ丼。ちょっと量とパンチが物足りない気もしますが、また来て違うメニューを頼んでみたいな。

鉄板焼 獅子丸 (鉄板焼き / 中目黒、代官山) ★★★★ 4.0

TEL:03-5725-0440
住所:東京都目黒区青葉台1-22-3 1F
営業時間:
[月~土]
11:30~16:00
18:00~翌4:40
[日・祝]
18:00~24:00
ランチ営業、夜10時以降入店可、日曜営業
無休

このエントリーをはてなブックマークに追加

一軒家レストラン『RIGOLETTO SHORT HILLS』中目黒

2009年7月6日 コメントの追加
中目黒webデザインブログ-RIGOLETTO SHORT HILLS

マンションのロビーに七夕用の笹がディスプレイされているのですが、住人が付けた短冊が結構ありまして、癒されました。マンションのメンテナンスのこととか、それは願い事ではなくて要望だなあとか思って笑えました、ジュンです。

駒沢通り沿いから路地に入っていくとある場所に『RIGOLETTO SHORT HILLS』という一軒家のレストランがあります。銀座、丸の内ではお馴染みのお店のようですね。

1階は大胆なガラス張りですが、夜のサロン的な雰囲気があります。それにしても広々としていいですねー。お店はモロッコをテーマにしてあるそうですが、モロッコ、あんまり知らないですね。インディー・ジョーンズとかでモロッコとか舞台になっていたような気がします。いや、トロッコが走っていただけかもしれないですね。
すいません、どうでもいいですね。

2階に案内されたのですが、2階はテーブル席がメインで、モダンダイニングな感じです。内装は色が鮮やかで気持ち良いです。細かいアイテムがなんだか和む感じで、リラックスできます。

値段は忘れてしまいましたが、1000円以下で安かったような気がします。一口ワインなども付いてきます。すっごく嬉しい!フランス人になってもいいな、と思いました。

中目黒webデザインブログ-RIGOLETTO SHORT HILLS
中目黒webデザインブログ-RIGOLETTO SHORT HILLS

それで、なんかのセットでゴルゴンゾーラのパスタをオーダーしたのですが、我ながらナイスチョイスでした。美味しい。ゴルゴンゾーラといえば、20歳ぐらいのころに代官山のレストランで初めて食べたのですが、その時は自分がオシャレさんになったような気がしました。誰にでも初心な時代があるものです。

中目黒webデザインブログ-RIGOLETTO SHORT HILLS

そうそう、パスタは結構な種類から選べられます。嬉しいですね。レストランサービスの神様といわれる新川義弘さんがオーナーだそうですが、新川さん、かなり遊び上手な人なんじゃないでしょうか。低料金なので内装やサービスがものすごく良いわけではないのですが、必要なことろがきちっと抑えられているので、とてもとてもコストパフォーマンスが高いです。

RIGOLETTO SHORT HILLS (無国籍料理 / 中目黒、代官山、恵比寿) ★★★★ 4.5

TEL:03-5773-1241
住所:東京都目黒区中目黒1-2-13
営業時間:
[月~土] 11:30~翌4:00
[日・祝] 11:30~23:00
無休

このエントリーをはてなブックマークに追加

Google Mapsの基礎

2009年7月6日 コメントの追加

Google Mapsの設置

Google Maps のAPIキーの申し込み

まず、Google Maps APIのサイトから、サインアップページを開きます。

サインアップページで利用条件に同意し、サイトのURLを入力すればAPIキーが取得できます。キーの取得にはGoogleアカウント(無料)が必要です。

[I have read and agree with the API terms and conditions]のチェックボックスをチェックし、[My Web Site URL:]のテキストボックスにGoogle Mapsを利用するサイトのドメインを入力します。次に[Generate API Key]をクリックすると、APIキーとHTMLサンプルが表示されます。
もし、このときGoogleアカウントをまだ持っていなければ、自動的に申し込み画面に進むので、アカウント取得の手続きを済ませてください。

サンプルHTMLには取得したAPIキーが埋め込まれているので、このサンプルHTMLはそのままでも使えます。ためしに、サンプルHTMLを新しいファイルにコピー&ペーストしてサーバに設置してみるとよいでしょう。

サンプルHTML

※Google Mapsはページが設置されたドメインをチェックするので、ローカルでは表示されません。

PAGE TOP

サンプルHTMLをHACKする

Google Mapsから取得したサンプルHTMLは下記のようなものです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>      <title>Google Maps JavaScript API Example</title>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=***"        type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function load() {
    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.setCenter(new GLatLng(37.4419, -122.1419), 13);
    }
}
//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="width: 500px; height: 300px"></div>
</body>
</html>

"key=****" の部分に、Google Mapsで取得したAPIキーが埋め込まれています。ここはGoogleのAPIを読み込むだけですので、変更の必要ありません。

SCRIPT要素の中が地図をコントロールするJavaScriptのソースです。getElementByIdに渡している引数、mapは地図を表示させるDIV要素のID名です。

"<div id="map" style="width: 500px; height: 300px"></div>" に、Google Mapsの地図が出力されます。getElementByIdに渡した文字列mapと同じid名を指定しています。

Google Mapsの推奨

Google Mapsは、標準準拠(standards compliant mode)のレンダリングモードを採用したXHTML文書への埋め込みが推奨されています。あくまでも推奨なので、HTML4.01でも問題なく動作します。

文字のエンコードはUTF-8です。埋め込み先のファイルが他のエンコードを採用している場合は、Google Maps用にUTF-8ベースのファイルを作成し、インラインフレーム(iframe要素)で呼び出すとよいでしょう。

※インラインフレームを採用する際は、呼び出し元ファイルの文書型はStrictではなくTransitional以下になります。


Gmapクラス

地図を表示するだけであれば、スクリプトは以下の2行で十分です。

var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(35.644934,139.699166), 13);

Google Maps APIに用意されているGmapクラスは、地図インスタンスを作成するためのもので、このクラスは地図の数だけ作成します。
Gmapに渡す引数には、getElementByIdメソッドなどを使って地図を表示する領域を指定します。


地図の大きさを指定する

Google Mapsのサンプルでは"<div id="map" style="width: 500px; height: 400px"></div>"というようにSTYLE属性で縦(height)・横(width)のサイズ指定をしています。ここの数値を変更すれば地図のサイズを変更することが出来ますが、CSS側でサイズ指定をしたほうがよいでしょう。

CSSでのサイズ指定
div#map{
    margin: 10px;
    width: 100px; height: 300px;
}
HTML側のDIV
<div id="map"></div>

 


座標を指定する

GMap2クラスのsetCenterメソッドを使って、地図の中心点の経度と緯度、地図のズームレベルを指定することができます。setCenterメソッドの1番目の引数は位置情報オブジェクトで、GLatLngクラスを利用して受け取ります。2番目の引数は倍率を指定するためのもので、値が小さいほど詳細な地図になります。

座標オブジェクトの生成

GlatLngクラスは第1引数に経度、第2引数に緯度を受け取ります。返却値は位置情報オブジェクトです。

var latlng = new GLatLng(35.644934,139.699166);
座標の指定

setCenterメソッドに位置情報オブジェクトと倍率を渡し、座標を設定します。

var map = new GMap2( document.getElementById("map") );
// 座標の指定
map.setCenter( new GLatLng(35.644934,139.699166), 13 );

経度と緯度を調べるためのツールを用意したので、ご利用ください。

※『東京タワー』『中目黒3-22-4』から経度、緯度を調べてくれるGeocodingというサイトも便利です。


移動/縮尺ボタンの表示

addControlメソッドにGSmallMapControlコンストラクタ、もしくはGLargeMapControlコンストラクタを指定して、地図上に移動/縮尺ボタンを表示することが出来ます。

var map = new GMap2( document.getElementById("map") );
// 座標の指定
map.setCenter(new GLatLng(35.644934,139.699166), 13);
// 移動/縮尺ボタンの表示
map.addControl( new GSmallMapControl() );

addControlメソッドの引数として、GSmallMapControlメソッド、もしくはGLargeMapControlメソッドを指定します。GSmallMapControlメソッドは縮尺ボタンにスライドバーが表示されないタイプで、GLargeMapControlメソッドはスライドバーが表示されます。

GSmallMapControlメソッドとGLargeMapControlメソッドのサンプル


マップ/サテライト切り替えボタンの表示

addControlメソッドにGMapTypeControlコンストラクタを指定して、地図上にマップ/サテライト切り替えボタンを表示することが出来ます。

var map = new GMap2( document.getElementById("map") );
// 座標の指定
map.setCenter(new GLatLng(35.644934,139.699166), 13);
// マップ/サテライト切り替えボタンの表示
map.addControl( new GMapTypeControl() );

サンプルHTML


地図右下に拡大率が低い地図を表示

addControlメソッドにGOverviewMapControlメソッドを指定して、地図右下に拡大率が低い地図を表示することが出来ます。

var map = new GMap2( document.getElementById("map") );
// 拡大率が低い地図の表示
map.addControl( new GOverviewMapControl() );

GOverviewMapControlメソッドのサンプル


マーカーの表示

addOverlayメソッドを使って、任意の位置にマーカーを表示させることが出来ます。GLatLngメソッドにマーカーを表示させたい位置の経度と緯度を指定し、そこで生成されたオブジェクトをGMarkerクラスの引数にしてさらにオブジェクトを生成、addOverlayメソッドにそのオブジェクトを引数にして、マーカーを表示させます。

var map = new GMap2( document.getElementById("map") );
// 座標の指定
var point	= new GLatLng(35.644934,139.699166);
map.setCenter(point, 13);
// マーカーの表示
map.addOverlay(new GMarker(point));

マーカーの表示サンプル

複数のマーカーを作成

マーカーは複数表示させることが出来ます。新しい座標オブジェクトを作成してもよいですし、既存の座標オブジェクトを使って新しい座標オブジェクトを作成することも出来ます。

// 座標の指定
var point	= new GLatLng(35.644934,139.699166);
// マーカーの表示
map.addOverlay(new GMarker(point));
// 地図用の座標オブジェクトを利用して新しい座標オブジェクトを作成
marker_point = new GLatLng(point.lat() + 0.01, point.lng() + 0.01);
// マーカーの表示
map.addOverlay(new GMarker(marker_point));

マーカーの表示サンプル

マーカーのアイコンをオリジナルアイコンに変更

Gmarkerは第1引数で座標情報、第2引数でオプション情報を受け取ります。このオプション情報を設定することでアイコン画像を指定することが出来ます。

まずはPNGでアイコンを作成し、サーバにアップします。

icon

・アップ先URL
http://www.spacemonkey.jp/i/icon/ic_map_arrow.png

コーディング作業では、アイコンオプション用にGIconを設定していきます。

// 座標の指定
var latlng	= new GLatLng(35.644934,139.699166);
// アイコンオプションの設定
var icon		= new GIcon();
// アイコン画像のURL
icon.image		= "http://www.spacemonkey.jp/i/icon/ic_map_arrow.png";
// アイコン画像のサイズ(横幅/縦幅)
icon.iconSize	= new GSize(32, 32);
// アイコンの表示場所
icon.iconAnchor = new GLatLng(32, 0);
// マーカーの表示
map.addOverlay( new GMarker(latlng, icon) );

ここではアイコン画像と影画像を1つの画像で済ませていますが、別々にファイルを作成し、設定することが出来ます。その際は、アイコン画像、影共にURL、サイズなどを個別に設定していきます。

var icon = new GIcon();
// アイコン画像のURL
icon.image = "http://www.spacemonkey.jp/i/icon/ic_map_arrow.png";
// アイコン画像のサイズ(横幅/縦幅)
icon.iconSize = new GSize(32, 32);
// 影画像のURL
icon.shadow = "http://www.spacemonkey.jp/i/icon/ic_map_arrow_shadow.png";
// 影画像のサイズ(横幅/縦幅)
icon.shadowSize = new GSize(32, 32);

マーカーの表示サンプル


インフォウィンドウの表示

openInfoWindowメソッドを使って、地図に情報窓(インフォウィンドウ)を表示させます。

var map = new GMap2( document.getElementById("map") );
// 座標の指定
map.setCenter( new GLatLng(35.644934,139.699166), 13 );
// インフォウィンドウの表示
map.openInfoWindow(map.getCenter(), document.createTextNode("中目黒駅"));

サンプルHTML

openInfoWindowメソッドの第1引数にインフォウィンドウを表示させる経度と緯度を指定し、第2引数に表示させる文字列を指定します。

先のコードでは地図にインフォウインドウを表示させましたが、マーカーにインフォウインドウを表示させることが出来ます。その場合は、下記のようにマーカーオブジェクトからopenInfoWindowにアクセスします。

// マーカーを表示
var marker = new GMarker( new GLetLng(35.644934,139.699166) );
map.addOverlay(marker)
// マーカーにインフォウインドウを表示
marker.openInfoWindow(map.getCenter(), document.createTextNode("中目黒駅"));

※map.addOverlay(marker)よりも前でmarker.openInfoWindowを行ってしまうと、ふきだしは表示されなくなります。

openInfoWindowHtmlメソッドを使う

openInfoWindowメソッドは通常の文字列しか扱えませんが、openInfoWindowHtmlメソッドを使うと、HTMLタグを使えます。

// インフォウィンドウの表示
var textnode = '<b>リズムファクトリー事務所</b><br />東京都目黒区中目黒3-22-4鈴木ビル101号室</font>';
marker.openInfoWindowHtml(textnode);

インフォウインドウ内にも地図を表示

showMapBlowupメソッドを使って、インフォウインドウ内にも地図を表示させることが出来ます。showMapBlowupの第1引数に地図の位置情報、第2引数にズームレベル、地図の種類などを指定します。地図の種類には G_SATELLITE_MAP(衛星写真)、G_NORMAL_MAP(普通の地図)、G_HYBRID_MAP(ハイブリッド)が指定可能です。

var map = new GMap2( document.getElementById("map") );
// 座標の指定
var point	= new GLatLng(35.644934,139.699166);
map.setCenter(point, 13);
var opt = new Object();
// ズームレベル
opt.zoomLevel	= 18;
// 地図の種類
opt.mapType		= G_SATELLITE_MAP;
// インフォウインドウに地図を表示
map.showMapBlowup(point, opt);

サンプルHTML


タブ付きインフォウインドウの表示

openInfoWindowTabsでタブ付きのインフォウィンドウを表示することが出来ます。

まず、タブの内容を格納する配列を用意し、GInfoWindowTabメソッドでタブの名前と内容を設定します。次に、タブ情報を持った配列をopenInfoWindowTabsHtmlに渡します。

// タブの内容を準備
var list_tab = [
    new GInfoWindowTab("タブ1", "タブ1の内容"),
    new GInfoWindowTab("タブ2", "タブ2の内容")
];
marker.openInfoWindowTabsHtml(list_tab);

サンプルHTML


地図の移動

表示した地図を自動的に移動させることが出来ます。

次のスクリプトは一度表示した地図を、3秒後に違う場所に移動させます。

var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(35.644934,139.699166), 15);
// 地図の移動
window.setTimeout(function(){
    map.panTo(
        new GLatLng(35.648979,139.703178)
    );
}, 3000);

地図の中心座標を変更するメソッドはrecenterOrPanToLatLngです。このメソッドに、setCenterメソッドと同じ要領で中心座標をセットします。

map.recenterOrPanToLatLng(
    new GPoint(139.698741,35.639005)
);

3秒後に地図を移動、というアクションは、JavaScriptのタイマーメソッドのsetTimeoutを利用します。setTimeoutの書式は下記のとおりです。

setTimeout(実行したい関数, 時間);

第2引数の時間は、1/1000秒単位で指定します。3秒の場合でしたら、3000となります。

サンプルHTML


イベント処理

GEvent.addListenerメソッドかGEvent.bindメソッドを使用することで 、地図へのクリックやドラッグといったイベント発生時に指定したコードを実行させることが出来ます。

例えば、ユーザが地図をクリックした際に、JavaScriptのアラートを表示するには下記のようなコードになります。

var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(35.644934,139.699166), 12);
GEvent.addListener(map, 'click', function() {
    alert("地図がクリックされました");
});

サンプルを表示

clickイベントはオーバーレイ上をクリックした場合、そのオーバーレイを引数としてイベントハンドラに送ります。そうでない場合、クリックされた地図上のポイントの緯度/経度を送ります。たとえば、クリックされた地点の緯度/経度情報をアラートで表示するには、下記のようになります。

GEvent.addListener(map, 'moveend', function(overlay, point) {
    alert(point.x + " " + point.y)
});

クリックイベントを指定する場合は、addListenerの第2引数に'click'を指定します。その他、ズームイベント用の'zoomend'、地図をドラックした際の'move'、地図のドラック開始時の'movestart'、地図のドラック終了時の'moveend'、マップ/サテライト切り替え時時の'maptypechanged'などが用意されています。

イベント
イベント 引数 説明
click overlay, point ユーザが地図か地図上のオーバーレイをクリックしたときに引き起こされます。オーバーレイ上をクリックした場合、そのオーバーレイを引数としてイベントハンドラに送ります。そうでない場合、クリックされた地図上のポイントの緯度/経度を送ります。
move - 地図が動いたときに引き起こされます。このイベントはマップがドラッグされている間は持続的に引き起こされます。
movestart - 連続的なパン/ドラッグの移動の開始時に引き起こされます。このイベントは不連続(discretely)な移動の場合は、引き起こされません
moveend - 連続的/不連続な地図の移動の終了時に引き起こされます。このイベントは連続的なパンの終了時に1回引き起こされます。
zoom oldZoomLevel, newZoomLevel 地図のズームレベルが変更された後に引き起こされます。
maptypechanged - 地図の種類(地図, 混合、衛星写真のいずれか)が変更された後に引き起こされます。
infowindowopen - 情報ウィンドウが表示された後に引き起こされます。
infowindowclose - 情報ウィンドウが閉じられた後に引き起こされます。
addoverlay overlay 地図にオーバーレイが追加された後に引き起こされます。
removeoverlay overlay 地図からオーバーレイが削除された後に引き起こされます。clearOverlaysが呼ばれた場合は引き起こされません以下のclearoverlaysイベントをご覧ください。
clearoverlays - 地図から全てのオーバーレイが削除された後に引き起こされます。

住所を使って緯度経度を取得する

GClientGeocoderクラスを使って、住所情報から緯度と経度を取得し、その地点の地図を表示させることが可能です。

まずはジオコーディング・オブジェクトを生成します。

// ジオコーディング・オブジェクトの生成
geocoder	= new GClientGeocoder();

生成したジオコーディング・オブジェクトからgetLatLngという住所情報から緯度・経度を計算するメソッドにアクセスします。getLatLngの第1引数に住所情報、第2引数にコールバック関数を指定します。コールバック関数に緯度・経度情報が渡されるので、それを使って地図を移動させます。

// getLatLngに住所情報を渡し、コールバック関数で地図を移動させる
geocoder.getLatLng(
    ADDRESS, function( latlng ){
        if ( latlng ) {			            // コールバック関数から受け取った引数を使って地図を移動map.setCenter(latlng, 13);			            // マーカーを表示
            var marker = new GMarker(latlng);			            map.addOverlay(marker);
        }
    }
);

GClientGeocoderクラスの簡単な使い方は以上となります。以下が全ソースです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<head>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAISaqxyviRu2ZdPokB6DyURQUmdxOOAs9gZ
KiURYEsRKKeB07FhRAvRkIHfRhGOpE3D7NkS4csznM9g" type="text/javascript"></script>
</head>
<body onload="initAddress()">
<div id="map" style="width:450px; height:400px"></div>
<script type="text/javascript">
//<![CDATA[
// グローバル変数の宣言
var map;
var geocoder;
// 初期化
function initAddress(){
    if ( GBrowserIsCompatible() ) {
        map	= new GMap2(document.getElementById("map"));
        // 初期化時は任意の経度、緯度の地点を表示させる
        map.setCenter(new GLatLng(35.644934,139.699166), 13);
        // ジオコーディングオブジェクトの生成
        geocoder	= new GClientGeocoder();
    }
}
// 地図を移動する
function moveAddress( ADDRESS ){
    if ( geocoder ) {
        // getLatLngに住所情報を渡し、コールバック関数で地図を移動させる
        geocoder.getLatLng(			            ADDRESS, function( latlng ){
                if ( latlng ) {
                    // コールバック関数から受け取った引数を使って地図を移動	     map.setCenter(latlng, 13);
                    // マーカーを表示			                    var marker = new GMarker(latlng);
                    map.addOverlay(marker);
                }			            }
        );
    }
}
//]]>
</script>
<form action="#" onsubmit="moveAddress(this.address.value); return false">
    <input type="text" name="address" value="中目黒3-22-4" />
    <button type="submit">移動する</button>
</form>
</body>
</html>

サンプルを表示

 


このエントリーをはてなブックマークに追加

Amazon Web サービス(AWS)の概要

2009年7月6日 コメントの追加

AWSの概要と、参加方法

Amazon Web サービスとは?

Amazon Web サービス(AWS)は、一般ユーザがAmazonの商品データにアクセスできるようにするための技術、サービスの総称です。Amazonで取り扱っている商品の検索や表示といったこと以外に、Amazonのほぼすべてのデータを利用することが可能で、既存のAmazonのWebサイトと同等の機能を、そっくりそのまま自分で作り上げることもできます。

Amazon Web サービスにアクセスする手段として、RESTSOAPの両方をサポートしています (RESTとSOAPについては後述)。

現在、Amazon Web サービスはバージョンアップにより名前も変更になり、Amazon E-Commerce Service(ECS)と呼ばれています。

Amazon Web サービスの利用事例

ここで、Amazon Web サービスを利用したサービスを紹介していきましょう。どのサイトも、Amazonとは関係のない、一般ユーザや企業が公開しているものです。

  • ECナビリスト
    欲しい本や、気になった本、持っている本にキーワードをつけて、参加者で共有できるコミュニティーサービスです。書籍情報はAmazonから取得しています。
  • Amazon Light
    Amazonの基本機能のみに絞ったサービスです。
  • アスキーデジタル用語辞典
    この用語辞典で語句を検索すると、検索結果とともに、その語句関連の書籍が紹介されます。
  • Amazon Flash Search
    検索結果・関連情報を表紙のサムネイル付きで閲覧することがでる検索サービスです。

アソシエイト・プログラムでアフィリエイト収入

Amazon Web サービスは、前述のとおりAmazonにある商品データ等を利用することができますが、Amazonが以前から提供していたAmazonアソシエイトというサービスも併せて利用することが可能です。Amazonアソシエイトを併用して利用することにより、Amazon Web サービスを利用してAmazonの商品を紹介し、そのリンクを通して購入があった場合はAmazonアソシエイトから販売代金の3.5~10%程度を紹介料として得ることができます。

※Amazon Web サービスの登録は全世界で共通ですが、Amazon.co.jpアソシエイトとAmazon.comアソシエイトは個別に運営されています。Amazon.co.jpアソシエイトに登録した場合は、Amazon.co.jpの商品を紹介して紹介料が支払われます。Amazon.comの商品を紹介しても紹介料は支払われません。


Amazon Web サービスとアソシエイト・プログラムに登録

Amazonの商品を紹介してアフェリエイトの収入を得るには、Amazon Web サービスとAmazonアソシエイトに登録する必要があります。Amazon Web サービス は全世界で共通ということもあり、日本語での登録ページは用意されていませんが、Amazonアソシエイトには日本語での登録ページが用意されています。どちらも無料で登録できます。

Amazon Web サービスへの登録

AWSを利用するためには、まずはAmazonに登録をする必要があります。AmazonのWebサービスページから登録手続きをおこなうことができます。

Amazon Webサービス登録手続きページ 【英】

アソシエイト・プログラムへの参加とアソシエイトID取得

アソシエイト・プログラムに登録すると、アソシエイトIDを取得することができます。Amazon商品を紹介する際に、Amazonへのリンクや、Amazonの購入ページへのリンクにアソシエイトIDを付加すると、そこから商品が購入され た場合に、Amazonから数%の紹介料を受け取ることができます。

Amazon.co.jp アソシエイト・プログラム登録ページ

以上で、Amazon WebサービスのSubscription IDと、アソシエイトIDを取得することができました。この2つのIDは、AWSを利用してアプリケーションを開発するために必要になります。


Subscription IDがAccess Key IDに変更

今まで利用していたSubscription IDの代わりに、Access Key IDに変更となりました。

amazon web servicesサイトにログインすると、右上に下記のようなボタンがあります。

マウスをあわせるとサブメニューが表示されるので、そこで [View Access Key Identifiers] を選択すると、Access Key のIDが表示されます。

今まで使っていたRESTの場合、太字になっている部分が変更箇所です。

変更前
http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService
&SubscriptionId=0DCQFXHRBNT9GN9Z64R2&AssociateTag=smart-22
&Operation=ItemSearch&Keywords=perl&SearchIndex=Books

変更後
http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService
&AWSAccessKeyId=0DCQFXHRBNT9GN9Z64R2&AssociateTag=smart-22
&Operation=ItemSearch&Keywords=perl&SearchIndex=Books


RESTとSOAP

O'REILLYのティム・オライリーのコラムに掲載されていましたが、Amazonのスタッフによると利用者の85%はRESTを使っているそうです。RESTはSOAPと比べて手軽に利用できることから、過半数を超える利用率を獲得したものと考えられます。SOAPはRESTに比べると敷居が高いのですが、その代わり複雑なシステムを設計する際などに力を発揮しやすくなっています。

下記にRESTとSOAPを利用する上で考慮したい項目を列挙しました。

※利用する上で必須となる項目ではありません。

RESTを利用する上で考慮する点
  • 技術的にXSLTが使えるか
  • Amazonから受け取るデータを加工する必要ないか
    (データ加工が必要であれば、SOAPの利用を考慮しても良いかもしれません)
SOAPを利用する上で考慮する点
  • SOAP::LiteなどのSOAP用モジュールがインストール可能か
  • レスポンスがRESTより遅いという事実があっても、使いたい理由があるか

Amazon Web サービス周辺技術情報

REST(REpresentational State Transfer)

REST(XML over HTTP、XML/HTTPとも呼ばれる)とは、キーと値のペアをパラメータに指定してAmazon Web サービスを呼び出し、処理を実行させる仕組みのことです。処理に必要なパラメータは、URIの一部として渡されます。Amazon Web サービスが返す結果はXMLドキュメントです。

SOAP

SOAPとは、クライアントとサービスの間でメッセージをXML形式でやり取りするためのプロトコルです。交換されるメッセージはXMLで記述され、メッセージを含むフレームワークもXMLの構造データとして定義されてい ます。

利用するプログラミング言語やオペレーティングシステムごとに、SOAPを利用するためのツールキットが用意されてい るので、それらを利用して、SOAPを利用したサービス呼び出しや返されたデータの処理を簡単に行えます。

XSLT

XSLT (Extensible Stylesheet Language Transformation)はXMLベースの言語で、XML文書をHTMLやテキストなどその他のマークアップ言語のドキュメントに変換するために使われます。

XSLTサービスはREST方式でのみサポートされています。XSLTサービスを利用すると、XMLを処理せずに直接整形後のデータにアクセスできます。


参考サイト

このエントリーをはてなブックマークに追加

Jump to the top