_ お盆っていいよね。
_ 通勤電車は空いてるし(とはいっても座れないけど)、営業の人もお客さんも休んでるからそっち方面からのおかしな要望を聞かなくていいし、ほかにも休んでる人は多いから会議はないし、つまり外からの仕事しろ圧力がないんだ。仕事しないでぼーっとニュースサイトを眺めて(こいつらも更新停止してるけど)1日が終わってしまっても給料はいっしょ。すばらしいじゃないか。なんで年に一度の天国を満喫せずに、わざわざ超満員の新幹線や大渋滞の高速道路に飛び込んでいくのか理解できんね。
_ ……例年ならば。
_ どーしてひたすらスクリプト書いてんだろうな今年は。どーしてあんな時間まで仕事してんだろうな今年は。つーか、ここしばらく日付が変わる前に帰宅してないような。
_ いわゆる詰め vi。vi じゃなくて vim なのがミソか。code golf は、まあ目的によっては意味がないわけでもないけど、エディタによる編集に関しては時間をかけて最小ストロークの答を探すより、手数は多くてもさっさと書き換えて先に進んだ方が生産性はあがるはずだが、そんなのは気にしてはいけない。
_ 詰め vi なのに、回答入力欄の下に
If you want to include control key such as <ESC>, simply paste the char of ascii code 27. Type those keys in your favorite editor (e.g., Emacs) and paste them.という注記があるのは何かのジョークか。_ ちうわけで、jvim3 のまま時が止まってるわしも とりあえず1問だけ解いてみた。頭のふだんと違う部分を使うので脳からヘンな汁が垂れてきそうです。あ、いつもか。\
_ 昼飯を食いに外に出たら生命の危機を感じた。溶けるぞ。
_ varnish ってのはまードキュメントが貧弱なわけで。あんなことやりたいな、と思ってもドキュメントがないし先人の成果がないし、てなもんで「どう設定を書いたら実現できるか」以前に「そもそも実現可能なのか」というところで悩むんだよね。ひじょーに手間がかかる。
_ そんなわけで、そのへんの情報を入手するべくソースツリーの深いところに潜ってみたら、あるわあるわ、undocumented な設定パラメータがたくさん。ところがたくさんあるように見えて、実は古いバージョンのときに書かれたサンプルのまま更新されておらず今のバージョンでは使えないものまで含まれていた。最低だ。
_ とりあえずわかったこと。同じ応答を返すバックエンドホストが複数あるときでも、L4/L7 SW 専用箱のように選択ロジックをいろいろ選べない。undocumented な機能があるんじゃないかと期待してたんだけど残念。ホスト名で指定して、必要なら DNS ラウンドロビンさせるだけ。バックエンドの処理能力に応じて重みづけしたり、最小接続数とか最小応答時間とかでバックエンドを選択するような機能は内蔵されていない。VCL をゴリゴリ書いて実現できるようなものもないではないけど(Cookie によるパーシステンス程度ならば VCL だけで書けそう)、VCL には乱数を返す関数というものがないので、選択にランダム性を取り入れることは難しい。
_ ただ、VCL に生の C コードを埋め込む方法をとうとう見つけたので (*1)、足りない部分は C で記述するという道が開けたのは、まあよろこべるか。わし、C 書けないけど。
_ ちなみに、その方法だけど、vcl ファイルに
という形式のブロックを置けばよい。該当部分が cc に素通しされる。C{ /* C のコード */ }C
(*1): VCL (varnish の設定言語)は C に変換されてコンパイルされてから varnish にリンクされるので、もともと C との親和性は高い。