2014年6月27日金曜日

CPU周波数制御(powerd)

 いつのころからか、「CPU 周波数の計測モニタ」を動かすと、「CPU周波数の計測がサポートされていません」とメッセージがでるようになった。おかしいなぁ。FreeBSD 8.3のころはちゃんと「sysctl -a dev.cpu.0.freq」でCPU周波数が取得できていた記憶があるのだが。
 なぜだろう?
 わけもわからず、現状、問題はなかったので放っておいた。

 ところがこのところ「ちょまど問題」でCPU100%状態で動かしまくっていたせいで、三回も熱暴走してしまった——SSDのRead Errorが起きている。熱でSSDがおかしくなっているのだろう。こんなことをくりかえしていたらSSDがいずれ壊れてしまう。
 去年の夏も筐体が熱くなって往生したのだが、そのときの対応方法——卓上扇風機で風を当てるという手もだめ。
 どんどん熱くなる筐体に茫然としていたのだが、ふと「CPU 周波数の計測モニタ」を立ち上げて周波数を1GHzに抑えたら発熱が抑えられた。
 ——この手か!
 次の瞬間、気づいた。あれ、CPU周波数が認識されている?
 たしかに「sysctl -a dev.cpu.0.freq」で現在のCPU周波数が取得できるようになっている。
 でもいつの間に取得できるようになったんだろう?

 取得できるようになったわけではなかった。
 その証拠にrebootすると、CPU周波数は取得できなくなり、当然、1GHzに抑えるなんてこともできなくなっていた。
 なぜ?

dmesg | grep -E "^(est|powernow)"
est0: <Enhanced SpeedStep Frequency Control> on cpu0
est: CPU supports Enhanced Speedstep, but is not recognized.
est: cpu_vendor GenuineIntel, msr 6130a2c06000613

 必要だと思われるカーネルモジュールをロードしたりしたのだが、結果は同じ。だいたいいつの間にかに取得できるようになっているということは必要なモジュールはすでにロードされているということだ。了解していたけれど、試さずにはいられなかった。
 急にCPU周波数が取得されるようになったきっかけを探る。
 バッテリー起動のときか? それとも電源のときか? 経過時間か?
 タイミングとは思えないほど、確実に「CPU周波数の計測がサポートされていません」のメッセージはでた——ふと、気づいた。
 ——もしかしたらサスペンド?
 ビンゴだった。
 サスペンドから復帰すると、周波数が取得できるようになっている(「CPU 周波数の計測モニタ」は再起動する必要があるが)。

 事、そこまで至り、ようやくBIOSが原因だ、と気づいた。BIOSの設定——以前、動いていたのですっかり失念していた。
 案の定、POWERマネージメントがらみの設定がひとつ、オフになっていた。そこで思い出した。
 そうだ。バッテリー駆動でもフルに動くように、とこの値、オフにしたんだった……orz。

 FreeBSDには「powerd」というsystem power control utilityがある。
 CPUが使われてないとき、周波数を自動的に低くしてくれるのだが、CPU周波数を取得できるようになったということは、これが使える。昔、使ってみたときはバッテリー使用時、粘るように重くなったのでオフにしていたのだが、今回、試してみると、そんなことはなかった。
 これは「powerd_enable="YES"」にすべきだな。
 バッテリー駆動時、電池が保つようになるのではないだろうか。
 ただ、CPU100%の作業の時の発熱を抑えるようなことには不向きみたいだ。フルのCPU周波数で動作してしまうから——そんな時はpowerdをオフにして(/etc/rc.d/powerd stop)、「CPU 周波数の計測モニタ」で周波数を低い値に設定するしかないんだろうなぁ。

2014年6月26日木曜日

乃木坂太郎「幽麗塔」(1)(2)(3)

乃木坂太郎「幽麗塔」(1) 乃木坂太郎「幽麗塔」(2) 乃木坂太郎「幽麗塔」(3)

 冒頭にいきなり時計塔で殺人が行なわれることもあってまるで藤田和日郎の「夜に散歩しないかね」みたいだな、と。雰囲気もよく似ていて江戸川乱歩とか、横溝正史とかの探偵小説といった趣きだった。どうやら黒岩涙香の「幽霊塔」が元になっているらしく、さもありなん。
 非常におもしろく三巻、一気に読破してしまった。
 読んだのはKindle for iPadで。
 無料体験版がでていたのだ。三巻分。あまりにおもしろかったのでたぶん続きを購入するだろう。体験版はすでに消えてしまったから、もしかしたら1、2、3巻も購入するかもしれない。
 ああ、すっかりうまいこと、やられてしまった。

2014年6月22日日曜日

ちょまど問題

■ちょまど問題(引用・加筆)
4択問題10問のテストを全部埋めて提出すると正解数がわかります。
何回提出すればすべての正解を知ることができますか。
(最後の満点となる提出は回数に含めなくてよいということ)

何回で満点とれる?【ちょまど問題に挑む人々】

 ちょまど問題を見たとき、全解答候補から点数で解答候補を絞りこんでいけば、いいな、と思ったのだけれど、すぐに(1 1 1 1 1 1 1 1 1 1)で「1」の解答の問題の個数がわかるし、((1 1 1 1 1 1 1 1 1 1)(2 2 2 2 2 2 2 2 2 2)(3 3 3 3 3 3 3 3 3 3))の試行は(4 4 4 4 4 4 4 4 4 4)の試行と同等、と思い返してしまった。そうすると、((1 1 1 1 1 1 1 1 1 1)(2 2 2 2 2 2 2 2 2 2)(3 3 3 3 3 3 3 3 3 3)(1 2 1 2 1 2 1 2 1 2)(2 3 2 3 2 3 2 3 2 3)(3 1 3 1 3 1 3 1 3 1))の試行でひとつに解答候補が絞りこめるんじゃないか?
 ところがやってみると、そんなことはなかった。
 しかも愚直に全解答候補を絞りこんでいくやり方よりも結果が悪い(試行回数が多い)。よくよく考えてみると、(1 1 1 1 1 1 1 1 1 1)の結果が点数が0でなかった場合は解答候補から(2 2 2 2 2 2 2 2 2 2)と(3 3 3 3 3 3 3 3 3 3)と(4 4 4 4 4 4 4 4 4 4)が外れてしまう。つまり((1 1 1 1 1 1 1 1 1 1)(2 2 2 2 2 2 2 2 2 2)(3 3 3 3 3 3 3 3 3 3))の試行は無駄があるということらしい。

 愚直な方法とは次のようなやり方。

  1. 全解答候補を生成
  2. 解答候補からランダムに解答を求める
  3. 解答する
  4. もどってきた点数になる解答候補のみを残す
  5. 2.にもどって処理をくり返す(候補が1個になるまで)

 このやり方だとだいたい試行回数は10回以下(もっとかかると思っていたので意外だった)。時々、11回の結果がでていたけれど、点数0のとき、もうすこし絞りこめるのでそのロジックをいれたらでなくなった。

※(1 1 1 1 1 1 1 1 1 1)が0のときは1を含んだ候補は除外できる。

 ロジックで解くやり方も試してもみたのだが、どうも愚直な方法には勝てない。

※(1 1 1 1 1 1 1 1 1 1)->(2 1 1 1 1 1 1 1 1 1)で点数差が+1だったら2が正答
※(1 1 1 1 1 1 1 1 1 1)->(2 1 1 1 1 1 1 1 1 1)で点数差が0だったら1,2は誤答
※(1 1 1 1 1 1 1 1 1 1)->(2 1 1 1 1 1 1 1 1 1)で点数差が-1だったら1が正答
※(1 1 1 1 1 1 1 1 1 1)->(2 1 1 1 1 1 1 1 1 1)で9点になったら先頭以外はすべて1
….etc

 愚直な方法はランダムな処理があるので全パターンを試してみても確実とはいえないのだけれど、だいたい10回以下で正答にたどりつく模様(試したらパソコンが熱暴走してしまったので未テスト)。
(追記)200件ほどテストしてみたところ、11回が発生。うーん、残念。

;; ちょまど問題

(require 'cl)

;; (testexec 'test3 wrk)
;; (testexec 'test3 wrk (get-anser))で同じ解答の試行
(defun testexec(func allanscer &optional data)
  "テスト実行"
  (let ((anser (if data
     data
   (nth (random (length allanscer)) allanscer))))
    (set-anser anser)
    (let ((wrk (funcall func 'quest allanscer)))
      (print (format "%s:%d:%s" (get-anser)(get-count)(get-anserlist)))
      "")))
      ;; wrk)))

(defun genarate(x)
  (let ((y x)
 (wrklist nil))
    (loop repeat 10 do
   (let ((i (% y 4)))
     (setq wrklist (append1 wrklist (+ i 1)))
     (setq y (/ y 4))))
    wrklist))

;; 全解答生成
;; (setq wrk (loop for x from 1 to (expt 4 10)
;;   collect
;;   (genarate x)))

(defun get-ten(listA listB)
  "何点か"
  (apply '+ (mapcar* (lambda(x y)(if (= x y) 1 0)) listA listB)))

;; テスト提出側
(lexical-let (anser count anserlist)
  (defun set-anser(list)
    "解答を設定"
    (setq anser list)
    (setq count 0)
    (setq anserlist nil))

  (defun get-anser()
    anser)

  (defun get-count()
    count)

  (defun get-anserlist()
    anserlist)

  (defun quest(list)
    "解答。点数を返却"
    (let ((wrk (get-ten anser list)))
      (setq count (+ count 1))
      (setq anserlist (append anserlist (list (list wrk list))))
      wrk)))

(defun filter(listA listB ten)
  (remove-if-not (lambda(x)(= ten (get-ten listA x))) listB))

(defun filter2(func testlist anserlist)
  (let ((ten (funcall func testlist)))
    (when (= ten 0) (setq anserlist (filter3 anserlist testlist)))
    (filter testlist anserlist ten)))

(defun filter3(anserlist zerolist)
  (let ((wrk (loop for x in anserlist
     collect
     (if (= (count-if nil (gemmap x zerolist)) 0)
         x
       nil))))
    (remove-if nil wrk)))

(defun gemmap(now before)
  (loop for x in now
 for y in before
 collect
 (not (= x y))))

(defun test3(func allanser)
  (catch 'exit
    (let ((anserlist allanser))
      (loop for x from 1 to (length anserlist)
     do
     (setq anserlist 
    (filter2 
     func 
     (nth (random (length anserlist)) anserlist) anserlist))
     (when (= (length anserlist) 1) (throw 'exit (list x anserlist)))))))

結果:(答え):試行回数:(((点数(試行パターン)).......)

(loop repeat 10 do (testexec 'test3 wrk)) "(4 4 3 3 4 4 3 1 3 2):8:((0 (1 1 4 1 3 3 2 3 2 4)) (5 (4 2 2 4 4 1 3 1 1 2)) (4 (2 2 2 4 4 4 1 4 3 2)) (6 (3 4 3 4 4 4 3 2 1 2)) (6 (3 2 3 3 4 1 3 2 3 2)) (6 (4 3 3 4 4 2 3 2 3 2)) (4 (3 3 3 4 4 1 3 4 4 2)) (10 (4 4 3 3 4 4 3 1 3 2)))" "(4 3 4 2 3 3 3 3 4 1):7:((0 (2 2 2 3 2 2 2 1 1 4)) (4 (4 4 4 1 3 4 1 2 4 2)) (3 (3 1 4 1 4 4 1 3 2 1)) (3 (1 1 4 2 1 4 4 2 4 3)) (1 (3 4 3 4 4 1 1 2 4 3)) (7 (1 3 4 1 3 3 3 4 4 1)) (10 (4 3 4 2 3 3 3 3 4 1)))" "(4 3 3 1 2 2 1 4 2 4):7:((2 (4 4 3 4 4 3 3 2 1 2)) (1 (1 2 4 3 4 3 4 3 4 4)) (2 (2 4 4 1 3 2 2 1 1 3)) (7 (4 3 1 2 2 2 1 4 1 4)) (8 (4 3 1 1 2 2 1 2 2 4)) (6 (4 3 1 2 3 2 1 2 2 4)) (8 (4 3 1 1 2 2 3 4 2 4)))" "(3 4 1 4 1 4 3 1 4 2):9:((1 (2 2 2 3 2 4 1 2 2 3)) (1 (1 2 1 1 4 1 2 4 1 1)) (4 (2 3 3 4 4 2 4 1 4 2)) (4 (3 1 1 2 2 2 4 1 4 4)) (5 (3 1 3 4 3 1 3 1 4 3)) (4 (3 1 3 4 1 3 4 1 2 1)) (3 (3 1 3 4 4 2 3 2 3 4)) (4 (3 1 3 1 3 4 4 3 4 2)) (10 (3 4 1 4 1 4 3 1 4 2)))" "(2 1 4 4 4 2 4 4 4 2):10:((4 (3 1 1 2 4 2 4 2 3 3)) (4 (4 1 2 3 4 4 4 3 4 3)) (2 (4 4 1 1 4 2 2 3 2 3)) (3 (3 3 2 3 4 3 4 2 2 2)) (3 (2 1 1 3 4 4 3 2 1 1)) (4 (1 4 4 2 4 4 4 2 4 4)) (3 (3 1 3 2 4 3 3 3 4 4)) (5 (2 1 4 1 3 3 4 2 4 3)) (5 (2 2 3 4 4 1 4 2 4 3)) (10 (2 1 4 4 4 2 4 4 4 2)))" "(2 4 4 1 3 2 4 2 1 1):8:((3 (4 3 4 3 2 3 2 4 1 1)) (2 (4 2 2 4 3 1 3 4 4 1)) (3 (4 4 3 1 1 3 4 4 3 2)) (1 (4 1 1 2 2 3 1 2 4 2)) (3 (3 3 4 1 1 1 3 3 1 2)) (8 (1 4 4 1 3 4 4 2 1 1)) (6 (1 3 3 1 3 4 4 2 1 1)) (10 (2 4 4 1 3 2 4 2 1 1)))" "(3 2 1 3 1 4 2 1 1 3):8:((5 (3 1 1 1 1 4 2 2 3 4)) (3 (2 3 3 1 1 4 2 2 4 1)) (3 (4 3 1 4 4 4 2 4 3 4)) (2 (3 4 3 1 1 2 3 4 3 4)) (4 (3 1 2 1 4 4 2 3 1 2)) (2 (3 1 2 4 2 1 2 2 3 1)) (5 (3 2 1 1 4 4 4 2 2 3)) (10 (3 2 1 3 1 4 2 1 1 3)))" "(1 2 4 1 4 4 3 2 3 4):8:((1 (2 1 2 3 3 3 1 3 1 4)) (4 (1 4 1 2 3 4 4 2 3 1)) (2 (1 2 1 2 2 3 4 1 4 3)) (2 (3 2 3 4 3 1 4 2 2 1)) (2 (2 4 1 1 1 2 2 2 4 1)) (2 (4 4 4 2 1 4 4 3 2 2)) (4 (1 1 4 4 2 4 2 4 3 1)) (5 (4 1 1 4 4 4 3 2 3 3)))" "(1 3 4 2 2 1 1 1 3 3):8:((4 (4 3 2 2 1 1 4 1 2 2)) (2 (4 3 2 1 3 4 4 4 3 4)) (3 (4 4 4 2 1 1 2 4 1 1)) (3 (4 2 3 2 3 1 3 2 2 3)) (3 (4 2 4 3 2 3 4 1 2 1)) (2 (3 2 2 3 1 1 3 1 1 4)) (3 (2 2 1 2 2 1 4 4 4 2)) (10 (1 3 4 2 2 1 1 1 3 3)))" "(2 1 1 2 2 1 3 2 2 4):10:((2 (3 1 2 2 4 3 1 1 3 1)) (2 (3 2 1 1 1 2 2 4 3 4)) (3 (4 1 1 3 2 3 2 3 1 3)) (2 (4 4 3 3 1 3 3 2 3 2)) (4 (2 1 4 4 3 3 2 2 4 4)) (3 (2 1 2 4 1 2 3 3 4 3)) (2 (3 3 3 4 2 3 4 3 4 4)) (3 (2 1 3 4 4 1 2 4 1 2)) (1 (1 4 2 4 3 3 2 4 2 3)) (10 (2 1 1 2 2 1 3 2 2 4)))" (loop repeat 15 do (testexec 'test3 wrk (get-anser))) "(1 1 4 3 4 1 3 3 3 3):7:((2 (2 3 2 3 1 2 3 2 1 2)) (3 (4 4 1 3 2 4 1 3 3 2)) (0 (4 4 3 1 1 4 2 4 1 1)) (1 (2 3 1 4 2 1 1 1 4 4)) (3 (3 2 2 2 3 2 1 3 3 3)) (3 (1 2 1 2 4 3 4 2 3 2)) (6 (1 1 1 3 3 3 3 3 2 3)))" "(1 1 4 3 4 1 3 3 3 3):9:((2 (2 4 4 1 1 4 1 1 3 2)) (3 (1 3 1 3 4 3 1 2 1 2)) (2 (2 2 1 3 3 4 4 2 4 3)) (1 (4 3 3 3 1 2 4 4 2 2)) (4 (1 4 1 4 4 4 3 3 2 4)) (4 (1 2 4 1 4 3 3 4 4 4)) (2 (4 4 1 2 4 3 3 1 4 1)) (3 (1 2 4 4 3 3 1 3 2 1)) (7 (1 1 4 4 4 2 3 2 3 3)))" "(1 1 4 3 4 1 3 3 3 3):7:((0 (3 3 3 2 2 3 4 4 1 1)) (2 (2 2 4 1 1 4 2 1 2 3)) (4 (4 4 2 3 4 2 2 2 3 3)) (3 (4 4 4 4 4 4 3 2 4 4)) (3 (1 4 1 4 3 2 2 3 4 3)) (6 (1 2 4 3 4 2 1 3 3 4)) (2 (1 2 2 4 1 2 1 2 3 4)))" "(1 1 4 3 4 1 3 3 3 3):9:((4 (1 3 1 1 4 1 3 1 4 2)) (4 (1 2 1 3 3 1 1 1 3 1)) (5 (1 4 1 1 2 1 2 3 3 3)) (6 (1 1 1 3 2 4 3 3 3 2)) (5 (1 1 1 2 1 1 4 3 3 2)) (6 (1 3 1 3 4 4 4 3 3 3)) (4 (1 4 1 4 4 4 1 3 3 2)) (8 (3 1 1 3 4 1 3 3 3 3)) (10 (1 1 4 3 4 1 3 3 3 3)))" "(1 1 4 3 4 1 3 3 3 3):8:((4 (1 1 2 2 2 2 3 1 3 2)) (5 (1 1 1 3 2 4 4 3 3 4)) (3 (2 1 3 3 2 3 4 2 3 2)) (3 (1 1 1 4 1 4 1 4 3 2)) (2 (2 1 2 2 2 4 1 3 4 4)) (4 (1 3 4 1 2 4 4 1 3 3)) (3 (3 4 1 3 2 4 3 1 3 1)) (2 (1 2 1 2 3 3 4 1 3 4)))" "(1 1 4 3 4 1 3 3 3 3):9:((1 (2 3 1 3 2 4 2 1 2 1)) (5 (3 1 4 2 4 2 3 1 1 3)) (4 (3 4 4 2 4 3 1 3 2 3)) (3 (3 1 4 4 4 2 4 4 2 2)) (2 (3 2 2 2 4 1 1 1 1 2)) (4 (2 4 4 1 4 2 3 3 1 4)) (6 (3 2 4 3 1 2 3 3 3 3)) (3 (3 4 4 2 1 2 3 2 3 1)) (5 (4 1 4 3 1 2 1 3 1 3)))" "(1 1 4 3 4 1 3 3 3 3):9:((2 (1 3 2 2 1 2 3 1 4 1)) (3 (2 2 4 4 1 1 2 3 4 4)) (4 (1 4 2 4 3 4 2 3 3 3)) (3 (2 4 2 3 4 2 2 2 3 4)) (2 (4 4 1 4 4 3 2 1 4 3)) (2 (3 2 3 2 1 4 2 2 3 3)) (6 (1 2 2 3 4 1 4 3 2 3)) (2 (1 2 2 4 4 4 4 4 2 4)) (10 (1 1 4 3 4 1 3 3 3 3)))" "(1 1 4 3 4 1 3 3 3 3):6:((3 (1 4 2 4 3 2 3 4 2 3)) (4 (1 3 1 1 3 1 3 3 4 4)) (5 (1 1 1 2 4 1 4 4 4 3)) (5 (1 2 2 3 2 1 4 3 4 3)) (7 (1 2 1 3 4 1 3 1 3 3)) (8 (1 2 4 2 4 1 3 3 3 3)))" "(1 1 4 3 4 1 3 3 3 3):7:((0 (3 2 2 4 1 4 1 4 2 2)) (4 (1 4 4 3 2 1 2 2 4 4)) (3 (4 3 1 3 3 1 2 1 4 3)) (2 (1 3 1 1 4 2 2 2 1 4)) (5 (1 3 4 2 2 3 3 3 4 3)) (5 (4 1 4 3 2 3 3 2 1 3)) (6 (1 1 4 3 4 3 3 1 4 1)))" "(1 1 4 3 4 1 3 3 3 3):9:((1 (2 3 4 4 2 4 4 4 2 2)) (3 (2 1 2 3 3 1 2 1 4 4)) (3 (3 1 3 2 2 2 3 1 4 3)) (7 (3 4 4 3 3 1 3 3 3 3)) (5 (3 2 4 3 3 2 3 3 3 4)) (6 (3 1 4 1 3 1 1 3 3 3)) (4 (3 4 4 3 3 3 1 3 4 3)) (9 (4 1 4 3 4 1 3 3 3 3)) (8 (4 1 4 3 1 1 3 3 3 3)))" "(1 1 4 3 4 1 3 3 3 3):8:((2 (2 2 2 2 1 1 1 3 2 1)) (1 (2 3 3 1 3 3 2 1 2 3)) (2 (4 2 4 4 2 3 3 2 4 1)) (2 (3 4 2 4 2 1 2 4 3 2)) (2 (3 4 4 2 4 4 4 2 2 4)) (2 (3 1 1 3 1 3 1 2 1 2)) (6 (1 1 4 4 1 2 4 3 3 3)) (2 (1 2 1 4 1 2 4 1 3 4)))" "(1 1 4 3 4 1 3 3 3 3):9:((3 (2 1 2 3 3 1 1 1 4 4)) (2 (3 4 3 1 1 1 1 1 2 3)) (2 (4 2 2 4 1 1 2 3 4 2)) (1 (4 4 1 2 4 3 1 4 4 4)) (2 (2 3 2 1 2 2 3 2 4 3)) (2 (2 2 4 3 1 4 1 2 1 1)) (5 (4 1 4 4 3 4 3 1 3 3)) (4 (2 1 3 2 3 4 2 3 3 3)) (2 (3 1 2 4 3 4 4 4 1 3)))" "(1 1 4 3 4 1 3 3 3 3):9:((4 (4 1 4 2 2 1 3 4 4 4)) (1 (4 4 1 2 1 4 3 4 2 2)) (2 (3 2 3 2 4 1 1 2 4 4)) (5 (4 1 4 3 4 2 4 3 1 4)) (6 (1 1 4 3 3 1 4 3 4 2)) (5 (2 1 4 3 2 1 1 3 1 2)) (4 (3 1 4 3 3 1 4 4 1 1)) (7 (1 1 4 3 1 1 2 3 3 4)) (10 (1 1 4 3 4 1 3 3 3 3)))" "(1 1 4 3 4 1 3 3 3 3):10:((2 (2 1 1 1 1 3 4 4 4 3)) (3 (3 4 1 3 4 1 2 1 4 4)) (3 (4 4 1 4 1 1 3 3 2 2)) (1 (3 2 3 2 1 1 1 4 2 4)) (2 (4 3 1 1 2 2 3 1 3 4)) (2 (3 3 4 4 2 3 2 3 4 2)) (5 (2 1 4 4 4 1 3 1 1 1)) (3 (1 1 1 4 4 4 1 1 1 2)) (4 (4 1 2 1 4 1 2 3 1 1)) (10 (1 1 4 3 4 1 3 3 3 3)))" "(1 1 4 3 4 1 3 3 3 3):7:((2 (1 3 3 1 4 4 2 4 4 1)) (1 (2 4 4 1 2 2 4 2 2 1)) (2 (4 3 1 4 3 1 4 4 3 4)) (2 (3 3 2 3 1 3 2 2 3 2)) (3 (3 4 3 4 3 3 3 3 4 3)) (0 (3 2 3 2 3 4 1 2 1 4)) (3 (1 1 1 4 1 2 3 1 4 2)))"

2014年6月18日水曜日

アンリ=ジョルジュ・クルーゾー監督「恐怖の報酬」

 アンリ=ジョルジュ・クルーゾー監督「恐怖の報酬」

 しみじみいい映画だった、と思い返している。
 手に汗握る傑作だということは聞いていたし、いつか機会があったら観たいとも思っていた。しかし、フランス映画だったとは。
 ニトログリセリンをトラックで運ぶ、ということ自体は有名だけれど、ミソはそれを二台で運ぶ、という点だ。先行車と後続車の状況が互いにサスペンスを高める。へたな映画なら先行車が後続に罠を仕掛けたりしそうなものだが(主人公は後続)、そんなことはいっさいなく、むしろ協力的で危い所には目印を置いていったりするのだ。
 すばらしい。
 そのことがひとり目的を達成した主人公に苦いものをあたえている。
 そして、個人的にはこの映画の中で一番、こわかったのは目的を達成したあと——。よくある終わり方なのだけれど、思わず、うわー、やめてくれー、といってしまったほどだった。
 いやぁ、フランス映画だなぁ。

2014年6月16日月曜日

佐藤純弥監督「新幹線大爆破」

 佐藤純弥監督「新幹線大爆破」

 大作として鳴り物入りで封切られたのにコケたという記憶だけがあってそれであまり期待せずに見始めたのだけれど、どうしてどうしてけっこうおもしろかった。80km/h以下にスピードを落とすと爆発するなんて「スピード」みたいじゃないか。案外、「スピード」の元ネタなのかもしれない。「暴走機関車」が元ネタだという話だったけれど。
 犯人の造形の差が時代を感じさせて興味深かった。
 北上秋彦「謀略軌道」も同様のアイデアで、こちらも非常におもしろかった。ただこちらの元ネタは山田正紀の「謀殺のチェスゲーム」だろうけど(オマージュ?)。

2014年6月4日水曜日

Viking(Draw by Speed)

 GPSの管理にはVikingというソフトを使用している。

 正直、使い勝手は直感的とはいえず、なんとか使えるようになるまで時間がかかった。データ構造と操作が強く結びついているためだろう。それでもパソコンの環境が環境のため、他に選択肢がなかった。まぁ、Windows環境のときにいくつか試したフリーウェアもVikingに輪をかけてわかりづらかったが。
 この一年ほど悩んでいたのが、「Draw by Speed」というTrack Drowing Modeだった。名前からして航跡が速度によって色を変わるモード(midaさんがよくアップしているやつだ)のように思えるのだが、いくら設定してやっても見え方がかわらない。デフォルトの「Draw by Track」とまったく同じ。
 うーん……。
 事あるごとに試してみたりしていたのだが、ずっと不明だった。
 昨日、偶然、わかった——何とTrackを選択していてそのカラーになっていただけだった……orz。Trackを無選択の状態にして(Mapを選択した)ようやく速度によって色がかわっていることが見えるようになった……。(Track Drowing Modeを変更した直後は操作的にTrackが選択されているのだ!)
 その結果が以下。

 茶色のはまた別の指定で「Draw Stops」。30秒STOPしていた場合、表示される。つまりほぼまちがいなく沈しているときだ。問題はこれをやると、ジャイブが成功したかどうかがあらわになってしまうwww。
 鉄条網のようなトゲは進行方向を示している。
 濃い緑色はおそらくプレーニングしている時で、黄色はノンプレーニングの時だろう。ただ、絶対速度ではなく、平均速度から何%増しかでしか、設定できないらしい。もしかしたら標準偏差指定ということかもしれない(よくわからない)。今は80%を指定している(体感に近い)。赤い部分は水の中で風を待っている時だろう。
 ▲はStart Point。
 クロスは中央である。

航跡のこと
「あと最高速地点を表示できれば、良いと思います。」(by mida)

なるほど。こんな感じならできるかなぁ。

2014年6月3日火曜日

2014年6月2日(月):本栖湖FUNビーチ:晴れ

* Sail:CORE 5.7(NEIL PRYDE) Board:NG ACP 260

時刻帆走時間帆走距離最高速平均時速
13:20-13:4221分2.69km38.567.51
13:59-14:044分0.42km8.635.11
14:06-14:1711分0.86km22.574.64
14:19-14:256分1.00km29.519.40
14:32-14:364分0.93km33.1211.54
14:39-14:444分1.01km37.4813.07
14:47-14:558分1.43km34.8010.63
15:07-15:1811分0.82km14.917.34
16:20-16:3717分1.89km16.628.21
16:43-17:0218分2.77km45.979.05

 ——「5/25山中湖ロードレース」
 と、道路状況案内の電光掲示板にでていた。まだだっけ、とぼんやりと考えていてふと気づいた。ちょっと待て。今日は6月1日のはずだぞ。
 夜の道志街道は不思議である。
 タイムスリップしたような気分になった。

 早めに到着したFUNビーチにはテントが張られ、ウィンドサーフィンの道具がいくつも置かれていた。どうやらココナッツボーイが合宿をしているらしい。平日とは思えないほど、にぎやかだった。
 サングラスをかけているので確信はもてなかったけれど、カレーマンらしい人間がいたので風が吹きだして出艇する前に声をかけた。どうやら本人だったのでほっとする。十年ぶりぐらいか——。十年前はカレーマンではなかったはずなのだが、ついこのあいだまで覚えていた名前を思い出せなかった(なんてことだ)。ボケが進行している。それとも「カレーマン」で上書きされてしまったか。
、すっかりうまくなっていてプレーニングはできるわ、ジャイブはできるわ、何度も抜かれてしまった。まいるなぁ。

 今日の本栖湖は夏のようなコンディションで、かなり苦しめられた。
 ブローは単発で短く、プレーニングさせようとしていると、風がなくなる、という悪循環。それでも二時半を回ると、吹き上がってきた。いつもならここから狂乱モードのはずである。これはさっそくヘッドマウントカメラを試してみなければ、とヘルメットを取り出した。
 しかし、iPhoneを取り付けたヘルメットは思ったよりも重く、しかも発泡スチロールの塊であるヘルメットよりiPhoneの方が重いらしく重心がいまいち。その上、細めの顎紐が首を締めつける。
 風も予想に反してなくなり、結局、プレーニングしなかった。
 撮影をあきらめてヘルメットを脱いだあとに、プレーニングしてしまうという間の悪さだった。はー。

20140602本栖湖 at EveryTrail
EveryTrail - Find trail maps for California and beyond