中目黒webデザインとランチブログ -10ページ目

オイスターバー『シブヤ西武店 FISH&OYSTER BAR』-渋谷

お昼過ぎに渋谷で打ち合わせ予定があったので、その前にシブヤ西武店にある『FISH&OYSTER BAR』でランチしました。

ボクは牡蠣が大好きです。
どんな牡蠣にしようかなーとランチメニューを見ていたところ、「牡蠣キムチご飯 温泉卵添え」という聞いたことも無いような料理名がありました。見た目は石焼きビビンバです。
うーん、キムチと牡蠣の組み合わせは良いとして、ビビンバ的な焼き飯に牡蠣は合うのだろうか?メニューのその写真からは、牡蠣を付け足してみました的な感じが漂っています。これは危険ですね。どうしようかなーと悩みつつ、天気も良かったのでチャレンジしてみることにしました。

中目黒webデザインブログ-FISH&OYSTER BAR


それほど待たずに運ばれてきました。やった!
なんだか見た目が予想以上に悪いのですが、それは内装がオシャレの失敗的な雰囲気が漂っているからかもしれません。食べログでは「白とベージュを基調としたN.Yスタイル」で「オシャレ」というコメントが多かったのですが、なんだか安っぽい感じがします。

結果、やはりとりあえず牡蠣を入れてみました的な料理で、牡蠣の美味しさがあまり感じられませんでした。それに、焼き飯の中に牡蠣が埋もれてて、最初はメニューを間違えたのかなと思いました。

なんだか文句ばかりで申し訳ないです。決して嫌いじゃないんですよ。たぶん牡蠣ということで期待が高すぎたのかもしれません。お店の名前が『FISH&OYSTER BAR(笑)』とか、立地がシブヤ西武ではなくて地元のイトーヨーカドーとかだともう少し温かい目で見られたのかなー。

そうそう、他のメニューだったら全然違ったかもしれないですしね!

FISH & OYSTER BAR シブヤ西武店 (ダイニングバー / 渋谷、神泉)



〒150-8330 東京都渋谷区宇田川町21-1 シブヤ西武A館 8F
JR渋谷駅 徒歩3分 
地下鉄渋谷駅 徒歩3分
03-5728-7235
11:00~23:00(L.O.22:00) 
不定休

dovecotが起動できない(Address already in use)

Linuxをインストールして一通りの設定が済み、再起動した際にIMAPとPOP3サーバのDovecotが起動しなった時の解決策です。

下記では、Dovecotを起動させようとして、「listen(993) failed: Address already in use」といったエラーが表示されています。


# /sbin/service dovecot start
Dovecot Imap を起動中: Fatal: listen(993) failed: Address already in use


Dovecotのポート993がすでに使われているというエラー内容です。lsof(LiSt Open File)コマンドで、993番ポートを使っているプロセスを調べることができます。


/usr/sbin/lsof -i :993
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
rpc.statd 4627 rpcuser 7u IPv4 10672 TCP *:imaps (LISTEN)


rpc.statdが993番ポートを使っているようなので、まずはrpc.statdを起動しているサービスを調べます。


# grep rpc.statd /etc/init.d/*
/etc/init.d/nfslock: [ -x /sbin/rpc.statd ] || exit 5
/etc/init.d/nfslock: # Make sure the rpc.statd is not already running.
/etc/init.d/nfslock: if status rpc.statd > /dev/null ; then
/etc/init.d/nfslock: daemon rpc.statd "$STATDARG"
/etc/init.d/nfslock: killproc rpc.statd
/etc/init.d/nfslock: status rpc.statd
/etc/init.d/nfslock: /sbin/pidof rpc.statd >/dev/null 2>&1; STATD="$?"


上記の出力内容からnfslockがrpc.statdを起動していることがわかりました。サービスを停止し、自動起動しないように変更する必要があります。

nfslockを停止し、自動起動しないように設定します。


# /sbin/service nfslock stop
# /sbin/chkconfig nfslock off


chkconfigでnfslockの状態を確認します。


# /sbin/chkconfig --list nfslock
nfslock 0:off 1:off 2:off 3:off 4:off 5:off 6:off


以上でnfslockが停止し、次回からは自動起動もしません。
あとはDovecotを起動して終了です。


# /sbin/service dovecot start

経過日数の計算

time関数の利用方法について説明します。
例えば、どのようにしたら20日前の日付を得られるか、特定の日付から今日までの経過日数を算出するのはどのようにすればいいのかを考えていきたいと思っています。


現在の日付を求める


my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
= localtime(time);
my $yyyymmddJ = sprintf("%04d年%02d月%02d日", $year + 1900, $mon +1, $mday);
print "$yyyymmddJです";


現在の時刻を日本語で表示させています。

それでは20日後の日付を求めるには、どうのようにしたらよいのでしょうか。

X日前後の日付を求める

time は現在の日時・時刻を1970年1月1日0時0分0からの経過秒で現すのでしたね。


print time, "<br>";
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
= localtime(time);
my $yyyymmddJ = sprintf("%04d年%02d月%02d日", $year + 1900, $mon +1, $mday);
print "$yyyymmddJです";


先ほどのスクリプトの前にprint timeを入れてみました。

1005634570
2001年11月13日です


上の行が1970年01月01日0時0分0秒からの経過秒です。
下の行は上の経過秒を元にして得られた日付となります。


20日後の日付を求めるなら
60秒×60分×24時間×20日=1728000秒前を求めることになります。そこで


my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
= localtime(time - 1728000);
my $yyyymmddJ = sprintf("%04d年%02d月%02d日", $year + 1900, $mon +1, $mday);
print "$yyyymmddJです";


下のように20日前の日付が得られました。20日後ならtimeに1728000秒をプラスすればいいのです。

2001年10月24日です

経過日数を求める
特定の日付から現在までの経過日数を求めるにはどうしたらいいでしょうか。経過秒から86,400秒(60秒×60分×24時間)で割れば日数を得られます。しかし今回は日付から経過日数を割り出さなければなりません。そんな時に便利な機能があります。timelocalです。これはperlのモジュールにある特殊な関数です。先ずモジュールの使い方から説明をします。


use Time::Local;

use でモジュールを使用することを宣言します。ここではTime::Localがモジュール名です。Time::Localのモジュールを宣言したことによりtimelocal関数を使用することができるようになりました。


use Time::Local;

$year=2001;
$mon =10;
$mday=24;
$hours = 0;
$min = 0;
$sec = 0;
$time = timelocal($sec, $min, $hours, $mday, $mon - 1, $year);

print $time, "<br>";


1003849200


先ほど秒数を使って20日前の日付(2001年10月24日)を求めましたが、ここでは2001年10月24日を指定して現在までの経過秒を求めました。それがtimelocal( )、モジュールで使用できる関数です。残念ながら、この値が正しいのか分かりませんので、localtimeを使って検証してみましょう。


use Time::Local;

$year=2000;
$mon =10;
$mday=24;
$hours = 0;
$min = 0;
$sec = 0;
$time = timelocal($sec, $min, $hours, $mday, $mon - 1, $year);

print $time, "<br>";
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time);
$yyyymmddJ = sprintf("%04d年%02d月%02d日", $year + 1900, $mon + 1, $mday);
$hhmmssJ = sprintf("%02d時%02d分%02d秒", $hour, $min, $sec);
print "$yyyymmddJで$hhmmssJです";



1003849200
2000年10月24日で00時00分00秒です


正しい経過秒を取得できたようです。経過秒から経過日数を算出できました。

ついでに1970年1月1日0時0分0秒から現在までの経過秒と、2000年10月24日0時0分0秒までの経過秒も表示しておきます。



use strict;
use Time::Local;

# 2011/7/24
my $y = 2011;
my $m = 7;
my $d = 24;

my $time = timelocal( 0, 0, 0, $d, $m-1, $y );
my $time1 = time;
my $lap = int( abs(($time1 - $time) / 60 / 60 / 24) );

print "Content-Type:text/html\n\n";
print "$lap";


timelocalで求めた2001年10月24日0時0分0秒までの経過秒を $time に、現在までの経過秒を $time1 に代入しました。


my $lap = int( abs(($time1 - $time) / 60 / 60 / 24) );


現在までの経過秒($time1)から指定の日付までの経過秒($time1)を引き、それを一日の秒数(60秒×60分×24時間)で割っています。abs で絶対値にし int で整数にしています。

居酒屋『肉卸ZESSAN』中目黒

芸人の友近をいまだに「さこん」と読んでしまいます。ジュンです。
スタッフの対応と食後のお茶が個人的に大好評のお店『肉卸ZESSAN』。とにかくいい気持でランチを過ごせるので、ホッと一息したいときはよくここに来ます。掘りごたつのお座敷席も好きです。ファミリーでも問題ない雰囲気です。中目黒駅から徒歩1分、地下1階にあります。

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


今日は牛たたき丼をいただきました。今日はというより、いつもこれです。赤みの残る牛たたきにトロットロの卵。これはずるい。お肉ですが、さっぱり食べられます。

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


ここ最近、量子力学の本を読んでいるのですが、面白いです。
特に以前は何を言っているんだと読み飛ばしていたアインシュタイン=ポドルスキー=ローゼンのパラドックス関連、量子もつれが興味深かったです。もう、名前からしてどうなんだ?という感じですが。アインシュタインの相対性理論と違って想像のつかない世界なので今までは興味持てなかったのですが、丹念に読んでいくとなるほどーと納得できることが沢山ありました。
まあ、それでも量子もつれなんかは書いていある意味が理解できても、どんな状態なのかさっぱり想像つきません・・・。なるほど!と思った瞬間にあれ?とかなるし。
もっと詳しく!というときはwikipedia便利ですね。

肉卸 ZESSAN (牛料理 / 中目黒、代官山、恵比寿)
★★★★ 4.0


〒153-0051 東京都目黒区上目黒3-3-7
TEL:03-3714-4129

営業時間
ランチ  月~金     11:30~15:00
ディナー 月~木・日・祝 17:00~24:00
ディナー 金・土・祝前  17:00~03:00
年中無休

イベントの基本

mc_btnというボタンがろロールオーバーされたらonBtnRollOverを実行したい場合は、下記のようにaddEventListenerでロールオーバーのイベントを見張るように設定します。


mc_btn.addEventListener(MouseEvent.ROLL_OVER, onBtnRollOver);


addEventListenerによって、mc_btnに対するMouseEvent.ROLL_OVERのイベントが監視されます。このイベントが発生されると、onBtnRollOverが呼び出されます。

呼び出される側のコードサンプルは以下の通りです。


function onBtnRollOver(evt:MouseEvent):void{
evt.target.gotoAndStop("roll_over");
}


イベントリスナーはEvent、もしくはMouseEventを引数で渡してくるので、それを使ってイベントのあったオブジェクトにアクセスすることが可能です。

下記はイベントオブジェクトから遡って、ボタン自身にアクセスしています。


evt.target.gotoAndStop("roll_over");


イベントの監視が不要になったら、下記のようにremoveEventListenerで削除します。


mc_btn.removeEventListener(MouseEvent.ROLL_OVER, onBtnRollOver);

カフェ『Huit(ユイット)』中目黒

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


久しぶりに目黒川沿いにあるカフェ、『Huit(ユイット)』に行ってきました。
春先は目黒川沿いに桜が咲くので、その時期は最高に気持ちのいいスポットになります。川沿い側は窓が大きく開放感があるので、美味しさも2倍増しです。

内装はアンティーク調でなかなか雰囲気よし。
スタッフは一部に良くない人がいてちょっと評判を落としていましたが、本日はいい感じのスタッフにあたりラッキーな感じです。中目黒はなぜか接客の悪いお店が多いんですよねー。慣れてしまうとあまり気にならないもので、ついなにも注意を付けくわえずに知り合いに紹介してしまったことがありました。あとで接客が最悪だったと聞いて、ちょっと残念。気を付けたいものです。

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


それはそれとして、本日はマグロとズッキーニのパスタをいただきました。マグロがサイコロ状にカットされていてチーズみたいな見た目になっています。そうなんです、わかってはいるのですが、食べるときにチーズの味を期待しちゃうんですよね。そんなどうでもいいところがちょっと気になったのと、瓜系が好きではないという個人的な嗜好がプラスして、ズッキーニとマグロの組み合わせが活きてこなかったようです。とはいえ、もちろんカフェ的な手抜きパスタではなく、ちゃんと美味しかったです。ど定番じゃないメニューもちゃんとだしてくる姿勢がいいですよね。


Huit (欧風料理 / 中目黒、代官山、恵比寿)
★★★☆☆ 3.5


03-3760-8898
東京都目黒区中目黒1-10-23 リバーサイドテラス 1F

営業時間
[月~土]
11:45~24:00 (月~水L.O.22:30 木~土L.O.23:00)
[日・祝・連休最終日]
11:45~22:00(LO21:00)
無休

ランチ営業、夜10時以降入店可

「あなたはもう参加者です」戦略

ジュンです。なるほどなと大変納得した過去の記事です。

今月号のハーバード・ビジネス・レビューに「ロイヤルティ・プログラムを見直す法」という論文が掲載されているのですが、その中で興味深い実験が解説されていました。

実験はこんな感じ。ガソリンスタンドで「スタンプが8個貯まれば1回無料で洗車」というカード(カード1)と、「スタンプが10個貯まれば1回無料で洗車」というカード(カード2)の2種類を用意します。これだけだと後者のカードの方が不利ですが、カード2を渡す時には2個のスタンプを無料で押すというプロモーションを行います。つまり両者の間には実質的な差が無いのですが、カード1は「まだスタンプ集めが始まっていない状態」、カード2は「既にスタンプ集めが始まっている状態」になっているわけです。

この2種類のカードを実際に使ってもらうとどうなるか?すべてのスタンプを集めて無料洗車を請求した割合を比較すると、カード1では全顧客の19%に過ぎなかったのに対し、カード2では34%に上ったそうです。また特典交換までの平均日数(スタンプが全て貯まるまでの日数)を比較した場合も、カード2ではカード1よりも2.9日短い、という結果になったのだとか。「もうスタンプ集めに参加している」という心理状態にすることで、「最後まで貯めなきゃ」という気持ちが引き起こされる、と説明できるでしょうか。

Ajaxとは

ジュンジュンです。
以前のブログ記事の再録ですよ。

Ajaxとは、Asynchronous JavaScript + XMLの略で、JavaScriptの組み込みクラスXMLHttpRequestを利用した非同期通信のことを指します。Ajaxは技術そのものではなく、DHTMLとXMLHttpRequest、サーバサイド・プログラム(Perl、PHP、etc...)などの既存技術を連携させたアプローチのことです。

具体的にどのようなものかというと、Ajaxが世に広まるきっかけとなったGoogle Maps(http://maps.google.co.jp/)やGoogle Suggest(http://www.google.com/webhp?complete=1&hl=en)を直接ためしてみるのが一番です。Google Mapsでは、Flashで作られているかのように、ページを更新することなく地図をズームアップしたり移動することができます。Google Suggestでは、文字を入力した瞬間に検索候補が提示されるため、検索ボタンをクリックすることなく検索候補を見ることが出来ます。

ここに挙げた仕組みはAjaxが命名される前から実現されていましたが、Googleのような大手サイトが使ったことにより、多くのサイトで使われるようになりました。

Ajaxを使ってみる



Ajaxの最初のAはAsynchronous、非同期という意味。サーバ処理待ちをしない非同期リクエストが可能というのがAjaxの一番の特徴です。非同期通信では、ページが読み直されることなく、連続的に作業を続けられます。

Ajaxのスクリプトでは、非同期のレスポンスは、コールバック関数で受信します。


oj.onreadystatehange = function(){
if ( oj.readyState == 4 ){
//受信時に処理
}
}


oj.onreadystatechange = callback
function callback(){
if ( oj.readyState == 4 ){
//受信時に処理
}
}


上記コードは、リクエストの処理状態を表すreadyState値が変わったときに発生するイベントをトリガとして、readyState値が4にコールバックが発生するようにしてあります。

参考サイト
Ajaxを勉強しよう

prototype.js

prototype.js 日本語マニュアル

■prototype.js

prototype.jsはJavaScriptのライブラリで、Ajaxを簡単に実現するための機能が用意されています。

ライブラリ
http://prototype.conio.net/

[Download the latest version]というリンクからファイルをダウンロードし、解凍します。prototype.jsは、distディレクトリ下にあります。

prototype.jsを使うには、SCRIPT要素でファイル読み込みを指示します。


<script type="text/javascript" src="prototype.js"></script>

srcには、prototype.jsを設置してる場所を指定してください。例では、HTMLと同じディレクトリにあると想定しています。

■簡単なAjaxを作成

「ボタンをクリックしたら、Ajaxで別のファイルの内容を取りにいって、HTMLの一部をそれに置き換える」
というものを作ります。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="prototype.js" type="text/javascript"></script>
</head>
<body>

<p id="blk">ここがターゲット</p>
<input type="button" value="ボタン" onclick="new Ajax.Updater('blk','test01.dat',{method: 'get'});"/>

</body>
</html>


これを「test01.html」などとして保存します。
Ajax.Updaterの2つ目の引数で指定したファイル名「test01.dat」というファイルを作成し、下記のような文章を記述します。



Ajaxによって読み込まれたメッセージです。



test01.html、test01.datともに漢字コードUTF-8にしておいてください。prototype.jsを同じディレクトリにいれます。

test.htmlを開いて、ボタンをクリックしてみるとテキストの内容が変化するハズです。

Ajaxのほとんどの処理は、ボタンのonclickにつけられた

new Ajax.Updater('blk','mess.html',{method: 'get'});

これがやってます。Ajax.Updaterは「Ajaxで別のURLの内容を取りにいって、指定されたHTMLの部分をそれに置き換える」という機能です。

3つのパラメータを渡します。
1つ目は書き換えるHTMLエレメントのIDです。ここでは「id="blk"」が指定されているpタグの部分になります。
2つ目は内容を取得するURL
3つ目はオプションで、ここではGETメソッドを利用することを指定してます

すき焼き 『人形町今半』新宿

新宿で打ち合わせがあったので、帰りに新宿高島屋にある『人形町今半(http://www.imahan.com/)』で食べてきました。すき焼きといえば今半、今半といえばすき焼きといわれるほどの名店。創業は明治28年だそうです。

前々から行きたいなーと思っていたのですが、ようやくチャンスが巡ってきました。ここでちょっと矛盾があるかもしれませんが、ボクはそれほどすき焼きが好きではないんです。なので、名物ステーキ丼をいただきました。

中目黒webデザインブログ-人形町今半


とろけるお肉と上品な味付けがさすがです。とても美味しかったのですが、食べている途中で、そんなに何回も行く機会ないので、やはりここは定番を行くべきだったのかなとちょっと後悔しました。でも、ステーキ丼、美味しかったです。

人形町今半 新宿高島屋店 (すき焼き / 新宿、代々木、新宿三丁目)
★★★★ 4.0


〒151-0051
東京都渋谷区千駄ヶ谷5-24-2
タイムズスクエアビル14F(新宿高島屋)
電話(03)5361-1871
営業時間 AM11:00~PM11:00(元日休業)