http://mofuya.com/flash/swan.htm
FLASH製の密室脱出系ゲーム。
これだけならネタバレにはほとんどならないと思うので書いちゃいますが、 ペンチのある場所がなかなか気付きませんでした。
東京三菱は、メインバンク総合サービスのステージ3以上なら 東京三菱ATM、E-net ATM、ローソンATM、アイワイバンクATMで24時間無料。
新生銀行は、入金は新生銀行ATM、アイワイバンクATM、郵便局のATMからしかできない。手数料無料。 出金は、都市銀行のATMからでもできる。新生銀行ATMとアイワイバンクATMが無料で、それ以外はキャッシュバック。
とても初歩的な話。
HTML のフォームで、submit のボタンを複数用意して区別するには
<input type=submit name="a" value="これはA"> <input type=submit name="b" value="これはB">
のように name を指定する。
CGI の側は、Ruby だとこんな感じ。
require 'cgi' cgi = CGI.new print "Content-Type: text/plain\r\n\r\n" if cgi.has_key?('a') puts "Aが押されました" elsif cgi.has_key?('b') puts "Bが押されました" end
メーラには Wanderlust を使っていますが、 添付ファイルがくることはほとんどないので、添付ファイルを保存するのは どうやるだっけ、といつも迷うのです。
で、今日気付いたのですが、右クリックで保存できるんですね。 これで迷わずにすみます。
ソースをプレーンテキストではなく HTML の <pre> で表示するのですが、 なぜだろうと思って調べたら、Content-Type が text/plain でも HTML として解釈される場合があるという問題に対処するためだったようです。
WikiBana/VOL.4 - Wiki博覧会に参加しました。
会場は蒲田の大田区産業プラザ。来るのはこれで2回目です。
簡単な感想。
懇親会では ma.la さんのお話しを伺ったり (JavaScriptがあれだけ可能性を見い出せるものだったとは)、 かずひこさんと Hiki の話をしたり、 他にもいろいろな方と会話の機会を持つことができました。
いい刺激を受けることができたイベントでした。
CVS で、リポジトリが Windows マシンにある場合に
cvs -d:pserver:name@server:c:/hoge/cvsroot -qn up
のように CVSROOT を指定しようとすると
cvs update: CVSROOT may only specify a positive, non-zero, integer port (not `c:'). cvs update: Perhaps you entered a relative pathname?
と言われてしまい、エラーになりました。
いろいろ試してみたのですが、
cvs -d:pserver:name@server:/c//hoge/cvsroot -qn up
と書くと大丈夫なようです。
Hiki の Plugin クラスで、@page はどこで定義されているんだろうと しばらく悩んでいましたが、 Plugin#initialize の
options.each_key do |opt| eval("@#{opt} = options['#{opt}']") unless opt.index('.') end
で定義されているというのが正解でした。
かずひこさんからお誘いいただきまして、Hiki の コミッタになりました。
うまく務まるだろうかと結構ドキドキものなんですが、 いろいろと contribute していきたいと思ってますのでよろしくお願いします。
とりあえず小ネタとして、URL リンクを class="external" にする修正を コミットしてみました。
Ruby とのつきあいももう数年になりますが、実は unless が未だに苦手です。 上の unless opt.index('.') というのも、opt に '.' が含まれるときなのか 含まれないときなのか、5秒くらい考えないと分かりません。
何でだろうなと考えてみるんですが、条件を自分でひっくり返すのに 慣れていないのが原因な気がします。
「unless opt.index('.')」→「次が成りたたないとき: opt に index が含まれる」→「opt に index が含まれないとき」 この2つ目の矢印の部分で思考が止ってしまいます。書いてみると何でもないようなことなんですけどね。
自分で書くときは、if opt.index('.').nil? と書くことが多い気がします。 これだと、「次が成り立つとき: opt に '.' がなかった」と スムーズに頭に入ってきます。
ありがとうございます :-)
しかし、たまたま Wiki ばなに参加したのがきっかけで、 こうも急展開になるとは思ってもみませんでした。 (Wiki ばなはおろか、オープンソース系のイベント自体、初めての参加だったのです)
本当に、世の中何があるか分かりませんね。
でもまぁせっかくのチャンスなわけですから、 これを活かしていきたいなぁと思うところです。
Ruby のような言語だと、継承関係になくても インタフェースが揃っているだけでポリモルフィズムを実現することができます。
つまり、a.func() というのがあって、a に A もしくは B のインスタンスが入るとき、 A と B には継承による親子/兄弟関係がある必要はなく、 func というメソッドを持っているだけで大丈夫です。
一方 C++ では、func というメソッドを持っているだけではダメで、 継承による関係を持っていないといけません。
継承による多態・インタフェースによる多態、とかいう言葉があったような気がします。
さて、一般的にはそうなのですが、C++ でも template を使うことによって、 インタフェースを揃えるだけでポリモルフィズムを実現できるというのが紹介されていました。
http://chasen.org/~taku/blog/archives/2005/03/c_13.html
最近は C++ からめっきり遠ざかってしまって、 template に関する知識も「T のコンテナ」くらいのレベルでしか持っていないのですが、 なかなか興味深いです。