Apr 29, 2008

シネコンの座席予約システム

シネマコンプレックス「新宿バルト9」の驚嘆すべき大バカ最低システム - 檜山正幸のキマイラ飼育記

ブックマークコメントなどがインタフェースに集中しているようなのでちょっと視点を変えて考えてみようか。「インタフェースの改善によってスループットが向上してデッドラインを守れるようになることに期待するのはいいが、それが期待通りにはいかない可能性と対策も検討した方がいいのではないか。」と。

イライラするインタフェースかデッドラインを守れないインタフェースかどちらかを選べと言われたら誰でも前者を選ぶだろう。発券・座席予約システムの「より優先順位の高い目的」はデッドラインを守ることであって、全員に席を割り当てることや空席率を最小化することはそれより低い優先順位しか持たないのだから*1。本当は開演時間を過ぎたチケットなど無価値なのに、それを正価で売ろうとする発券システムと、さばき切れないチケットをタダでくれるダフ屋のオヤジ、のどちらが道理に適っているかなど問うまでもないだろう。

件の檜山さんご一家のケースを考えると、デッドラインを守ることを優先するならば(そしてもちろんインタフェースの問題を棚上げするならば)、明らかに一家を次の回に回して個人やカップル客を優先的にスケジュールした方が良かった。にも関わらず、First-come, first-served (FCFS)でスケジュールしようとするからデッドラインを守れなくなってしまったのだ。

では実際に、FCFS以外のスケジューリングポリシーを採り得たか。というとそれは怪しい。

そもそも新宿バルト9に限らず、「現在の」座席の空席状況を顧客に見せてその中から選択させるというチケット発券システム全体がFCFSに特化されたものだからである(逆に空席状況が参照できない状況を想定するなら、顧客は発券システムが割り当てた上演回・席に着いて鑑賞するだけになる)。FCFSで割り付けられるものと期待してキューに並んでいる客がカウンターに着いた途端に優先度付きでスケジュールされたら(「おまいらの席ねーがら!次の回な!」)DQN逆ギレ間違いなしである。

つまり、本当に必要なのは、異なるスケジューリングポリシーを許す発券システムと、それを支援する(できれば効率の良い)インタフェースではないかと思えてくる。

優先度ごとにキューを設ける(つまり次回の上演用のキューを設ける)とか、ユーザに低い優先度を選択するインセンティブを与える(例えば、開演15分前〜開演5分後の間だけ次の回の価格を下げる)とかしたらどうだろうか。どちらも一見うまく機能しそうに見える方法だが、ローカルな最適化の困難さは変わらず、一つのキューにリクエストが集中する状況では効果が限定的なものにならざるを得ない。

他にもいろいろ考えたのだが、空席率が一定以下になったら残席数分の自由席しか売らないという方法だとうまく行くのではないか。もちろん自由席と並行して次の回の指定席も売るとして。これならどちらを購入するかで顧客が優先度を選択できるし、連続した席が必要な一家が次の回の指定席を選択する動機付けにもなる。

*1 いつだったかFoxか何かで、困難な状況で航空機に乗ろうとすると何が起こるかを実証する番組をやっていた。その番組内では、(1)家族5〜6人が同時に航空機に乗りたい、かつ(2)明朝の仕事・学校には間に合うように目的地に着きたい、という要望を出したところ、割り当てを先送りし続けられ、結局レンタカーを借りて数時間かけて帰る羽目になっていた。番組の主旨はそういう局面でブチ切れしている親子を見て楽しむというごく露悪的なものだったけれども…。

Apr 28, 2008

Re: プログラミング言語はLispに回帰しているんだろう

プログラミング言語はLispに回帰しているんだろう - ’(rubikitch wanna be (a . lisper))

プログラミング言語がLispに回帰しているわけではなくて、むしろ単に現代のプログラミング言語のロールモデルがLispなのである。Javaが登場したとき、Lispのインタプリタ実装くらいはしたことがある連中はみんな「これは現代のLispだ」と思ったはずである。

また一方で、「Lispへの回帰=(ロールモデルとしてのLispを参照したプログラミング言語の設計)」という現代のプログラミング言語の傾向自体を決定付けたのも、Javaだったのだと思う。それ以前もLispをロールモデルとして参照するマイナー言語はたくさん作られてきたけれども、Javaは、「製品品質のプログラミング言語」を設計する場合においても「この合理的精神に基づいた方針」がかなり正しいということを世の中に証明してみせたほとんど最初のインスタンスだったから。

て、そう書いている私はRubyを一行も書いたことがないし、MatzさんがRubyの設計に関して書いた文章を読んだこともないのだが。あ、情処のプログラミング研究会の論文は読んだ覚えがあるわ。

Apr 13, 2008

Movable Type プロフェッショナル・スタイル

荒木さんよりいただきました。ありがとうございました。

これは盛りだくさんな内容。一気通貫で読む本というよりは、Introductionだけちゃんと読んで、あとは「ブログで有名なあの人は何を書いてんだろ?」と思って適当につまみ食いする本です。

個人的な意見としては、個々の項目ごとに「出口」を用意した方がよかったのではないかと思います。より深く調べるためのポインタを示したり、練習問題を出したりして。つまみ食いした内容が自分の口に合えばさらに調べたいと思うのが読者の道理だと思います。

Apr 7, 2008

Re: Movable Type 4.15 公開ベータテストを開始

今回ははっきり言わせてもらうけども。

Movable Type 4.15 公開ベータテストを開始 | MovableType.jp

「Movable Type Open Source 4.15のパブリックベータテストだ」とどこにも書いてないあたりは厚顔無恥と言ってよいよね。

シックス・アパート日本法人が、個人無償ライセンス版のMovable Typeにまでプロフェッショナル・パッケージをバンドルしているのは、個人ユーザにとってはありがたいことなのかもしれないけれど、実はオープンソースコミュニティとMovable Typeユーザを分断することになっていることを認識しているのかな。裁量は日本法人にあることだからとやかく言わないけどさ(言ってるけどさ)。

追記: 私が苛立っている理由を説明しておくと、(1) Movable Type 4.15 Beta 1 now available - MovableType.org - Home for the MT Communityとあまりに内容が異なるから。特にオープンソースソフトウェアのベータテストだったものが、「製品」のベータテストにすり替えられてしまっているように見えるから。(2) オープンソースソフトウェアのベータテストなのにMovable Type ベータ・ソフトウェア利用許諾契約書 | MovableType.jpという別のEULAに同意するという筋の通らないことをさせられるから。

追記2: 筋を通していただけるそうです。ここに書いたことは撤回させてください。私も大人気ないことを書きました。

Apr 5, 2008

中日 - ヤクルト 2回戦

一日おいてナゴヤドームで野球観戦。

2008年4月5日(土) 中日 - ヤクルト 2回戦

小笠原の7回99球2失点無四球の好投、井端、荒木、ウッズのホームランで快勝したゲームでした。小笠原の後を引き継いだ鈴木が一点取られたおかげで岩瀬にもラッキーセーブが付くというおまけつき。

和田さんは無安打でしたが2つ四球を選びました。驚いたことにその後の打席でノリさんが2回ともバントを試みて成功させました。どういうことなんでしょう。今年のノリさんは去年と違って得点圏打率が.571もあるんですよ?ここんとこ三振多めだったから?

そうそう、今回はパノラマAの前から2列目で観戦しました。打席が非常によく見えて良かったです。特に打席の一番後ろに構える和田さんとノリさん独特の立ち位置の違いを見比べたり、ホームランを打つ直前の荒木がいつにも増してバットを短く持ってるのが分かったり。

Apr 3, 2008

俺的プロ野球シーズン開幕!

今年の初観戦に行ってきました。

2008年4月3日(木) 巨人 - 中日 3回戦

前回の開幕戦で9回133球投げた川上が中5日の登板。ここで無理して中5日で投げると来週の阪神戦に相性のいい中田・山本昌とエース川上を登板させられるので予想どおりだったのですが、正直裏をかいて吉見の登板を期待していました。

途中まで和田さんの待望の一発が出て楽勝ムードだったものの、7回裏に川上が三連続ホームランで逆転され、豊田・クルーンに抑えられて惜敗という、全面的に圧倒的に川上が悪いけど、要はベンチが悪いよね、もったいなかったよね、というゲームでした。序盤川上が「偶然だぞ」と言っていいくらいスムーズに巨人打線を抑えられてしまったことが逆に災いしたとも言えます。開幕戦並にもたもた投げていれば6回表の打席で替えられていたはずですから。

勝敗を別にすると、アラ・イバ・ビョンさんの効率の良い得点とか和田さんの長打とか中里とか見どころはいろいろありました。特に中里ははじめて観ました。良かったですよ。典型的な「球威に押される打球」というのを見せてくれました。

とりあえず巨人小笠原のパラメータ上げ調整だけして阪神さんにお渡しするということで。うちは和田さんのパラメータ上げに成功したのでまあよしとしましょう。はい。

次戦は土曜のナゴヤドームのヤクルト戦です。順番に行くと先発は小笠原孝だけど、金曜に吉見、土曜に朝倉、日曜に小笠原もあり得ます。どっちにしても今日よりは勝ちが計算できそうなんですが…。

Apr 2, 2008

参照呼び出し・値呼び出しとは

参照呼び出しって何? - 檜山正幸のキマイラ飼育記

参照呼び出し・値呼び出しというのは、「参照(参照の値、ポインタなど)」が引数として渡されるか「値」が引数として渡されるかという違いを表しているのではありません。実引数がどのように仮引数に渡されるのかという違いを表しているのです。はっきり言ってしまえば、実引数が左辺値として評価可能な式のときに、仮引数にその左辺値が渡されるのが「参照呼び出し(渡し)」、右辺値が渡されるのが「値呼び出し(渡し)」です。

言うまでもなく、Javaなどで採用している(プリミティブ型以外の)オブジェクトの参照という「値」を渡す方式は、「値呼び出し」です。誤って「参照呼び出し」と説明している解説はものすごくたくさんありますが。Javaで参照を値渡ししたときにできるのはその参照先のオブジェクトに対する操作であって、その変数がどのオブジェクトへの参照を格納しているかを操作することはできません。なぜなら値渡しだからです。

C++での簡単な例を下に示しておきます。

#include <iostream>

int dup(int i);
void dup2(int *i);
void dup3(int& i);

int main() {
  int i = 123;

  // 値呼び出し (iという式の右辺値を渡す)
  i = dup(i);
  std::cout << i << std::endl;

  // 値呼び出し (&iという式の右辺値、すなわちアドレス値を渡す)
  dup2(&i);
  std::cout << i << std::endl;

  // 参照呼び出し
  dup3(i);
  std::cout << i << std::endl;
}

int dup(int i) {
  i *= 2;
  return i;
}

void dup2(int *i) {
  *i *= 2;
}

void dup3(int& i) {
  i *= 2;
}

実はdup2とdup3はコンパイル結果としてほぼ同等なものが得られます。dup3の呼び出しは、dup3のシグネチャを参照して変数iの参照の値(アドレス)を関数に渡すようにコンパイルされ、dup3は参照の値がスタックかレジスタに積まれているものとしてコンパイルされるからです。

しかし、重要なのはそういう実装がどうなっているかということではなく、dupやdup2では「字面上」右辺値しか渡せないのに、dup3では左辺値を渡せているということなのです。

Apr 1, 2008

偶然だぞ

______. ______ 
|  偶然だぞ  ||  偶然だぞ  | 
 ̄ヽ(´∀`)ノ ̄ . ̄ヽ(´∀`)ノ ̄ 
              ┌─────┐  
              │偶 然 だ ぞ.│  
              └∩───∩┘  
                ヽ(`・ω・´)ノ  

「偶然、偶然」言われて嬉しいはずもないが、偶然にしても素晴らしいよ、福留。

MAJOR.JP|MLB 日程・スコア 試合速報

偶然3割30本100打点は達成するじゃないかと思い始めた。偶然でもいいから四球で出塁率が上げられるような打者になって欲しい。

それにしても日本語って難しいな。「It's gonna happen」を翻訳すると、

「It's going to happen」を翻訳すると、

「偶然だぞ」はGoogleの仕業だぞ。「それが起こるのだろう」っていう翻訳もいかがなものか。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com