| @技術/プログラミング

動かしてるサイトのCakePHPのバージョンを最新版の1.3.4に上げようと思って、Media PluginもCakePHP 1.3対応バージョンの1.3alphaにアップデートしようとした。

とりあえず本体を git clone http://github.com/cakephp/cakephp.git し、Media Pluginを git clone http://github.com/davidpersson/media.git してみた。

Media Plugin 1.3での設定方法とか調べてみようと思って、GitHub上のWikiのページを探すんだけど見つからない。なんと、作者サマはVer 1.3からWikiを消しちゃったみたい! そんまま動かしてみたところではMedia Plugin動いてないみたい。Mediumヘルパーがないというエラーが出る。プロジェクトの中の docs ディレクトリにドキュメントが格納されていたのを発見したので(docs at 1.3 from davidpersson's media - GitHub)そこを参考にしながらMedia Plugin 0.6から1.3へのMigration作業をやったんだけど、とうとうできなかった。

まず第一に、クラス名が変わってる。Media.Medium だったのが Media.Media になってる。Viewファイル内での変数も $medium ではなく、 $media になってる。そしてメソッドとかもHTML5対応とかで結構変わってるみたい。

さらに、media processing 関連のクラスが分割されて別のライブラリとしてMedia Pluginの中に含まれてる(davidpersson's mm at master - GitHub)。これが結構わかりにくい。なんかImagick必要ぽくて、本番環境じゃインストール権限ないので使えないし、結局ここで諦めてしまった。

Media PluginはVer 0.6のWikiがあった頃もなんかドキュメンが見づらかったし、1.3になってドキュメントはただのテキストファイルになり、しかもメソッドについての解説がないので結局本体のコードを読むしかない。

RubyのライブラリはたいていRdocとかついててドキュメントが充実してるので、あれに慣れるとドキュメントがわかりにくいライブラリやプラグインは億劫に感じてしまう。

| @Mac/iPhone

家でMacBook Pro 15” (Mid 2009) を使うときはいつもはBoseのM2で音を鳴らしてるので気づかなかったんだけど、たまたま外で内蔵スピーカーを鳴らしてみたら、右側のスピーカーの音の方が大きく聞こえることに気がついた。システム環境設定の「サウンド」から内蔵スピーカーの「バランス」を左いっぱいにしても右側から音が出続けてる。これはいったいどういうことなんだ、保証期間過ぎた後にぶっ壊れたかと思っていろいろ調べてみたら、どうもそういう仕様らしい。

Appleのサポートサイトには、2010年モデルのMacBook Proからサブウーファーが内蔵されているのでそういう仕様だ、という記事が載っかってる。

しかし英語のDiscussion Boardを見ると、2009年の4月にすでに左右の音量バランスの違いに気がついているユーザーがいてスレッドが立っている。

2009年以降のモデルのMacBook Proはサウンドが2.1チャンネルになっており、サブウーファーが追加されているらしい。そしてそのサブウーファーは右側のスピーカーと一体の部品になっており、トラックパッドの右上あたりに位置している(macbook-pro-17-in-bits.jpg (JPEG 画像, 800x600 px))。システム環境設定の「サウンド」から「バランス」で操作できるのは右と左のバランスで、サブウーファーは操作できないそう。つまり音量バランスを左いっぱいにしても右側から音が出続けているように感じるのはサブウーファーのせいというわけ。

Mac OS Xの10.6.4アップデートでMacBook Pro (Mid 2010)の問題は解決されたということになってるらしいんだけど(Mac OS X v10.6.4 アップデートについて)、2009モデルでは全然解決されてないしAppleはなんとかしろや。

| @ブログ

昨年末から今年の正月にかけてXREAで借りてたサーバーが障害に見舞われてデータがぶっ飛んだけど、なんと今週、DreamHostでも障害が発生してサーバー(budapest)が落ち、データがぶっ飛んだ。

Jekyllでやってるパソコンブログの方はGitとJekyllの組み合わせのデプロイ環境が最強すぎて一瞬で再開できたんだけど、 www.portalshit.net は正直結構大変だろうなぁと思ってた。ところがサーバーが復旧した翌日くらいにはちゃんとDreamHost側でとってたバックアップがコピーされ、自分では何もすることなくサイトが復旧してた。しかも、サーバー復旧後、一旦ユーザーディレクトリは空になってたので自分でドットファイルと tech.portalshit.net だけ再アップロードしといたんだけど、そちらはこちらでアップロードしたものが残され、 www.portalshit.net と cinema.portalshit.net の内容だけがバックアップからコピーされてた。DreamHost、やるやないけ。障害報告ページでいきなり「こちらにデータの復旧義務はない」とか高らかに宣言してるXREAとは大違い。

まじでDreamHostはSSHできるしPassenger使えるし、今回みたいな障害のときも頑張って復旧してくれるし、Railsっ子にも安心してご利用いただけます。商売には向かないと思うけどね。オヌヌメ。

| @技術/プログラミング

いやまぁテキストエディターにはいろいろあるわけでして、皆さんEmacsとかVimで日夜しこしこコードを書いておられると思うんですけど、僕はGUIしか使えない情報弱者なので主にTextMateを使ってます。

TextMateで便利なのが "Run" っていう機能です。Rubyのコードを書いていて、 + R でさくっと実行結果を確認できます。いちいちTerminal開いて

$ ruby hogehoge.rb

とか面倒くさいことをやらずにすみます。

で、これからが本題なんですけど、先月Ruby 1.9.2がリリースされて、さらに gem update でRails 3が入るようになってしまったので、お試しでRuby 1.9.2とRails 3を使ってみることにしました。しかし1.8系を完全に捨てることは恐ろしいので、RVMを使って複数のバージョンのRubyを切り替えながらしばらく過ごしてみることにしたわけです。

上に書いたとおり僕ちゃんは情報弱者なのでTextMateに依存したコーディングライフを送っており、 + R で動くRubyもRVMのRubyにしたいと思ったのですが、これが分からなかった。RVMのサイトを見たらいろいろごちゃごちゃやり方が書いてあるんだけど(RVM: Ruby Version Manager - Textmate Integration with RVM)、結局この通りにやってもうまくいかず。

しかし先ほどなにげなく

$ rvm 1.9.2 --default

としてあげたところ、TextMateでもRVMのRubyが走るようになりました。

| @映画/ドラマ/テレビ

ザ・ウォーカー

評価 : ★★★★☆

あらすじ

核戦争後の未来の話。世界は荒廃し、荒くれ者が容赦なく弱者から奪うまるで北斗の拳のよう。水が圧倒的に枯渇しているため、水のありかを知るものが権力を握る。

主人公のウォーカーは廃墟と化したアメリカ大陸をひたすら西へと歩いていた。水を独占するやくざカーネギーの支配する街に立ち寄ったウォーカーは、バーでカーネギーの部下と乱闘騒ぎを起こし、あっという間にやっつけてしまう。その強さと物怖じしない性格を気に入ったカーネギーはウォーカーを部下にしようとするが、ウォーカーはそれを拒む。しかしウォーカーがカーネギーが長年探し求めていた物を持っていることを知ると、カーネギーは力尽くでそれを手に入れようとする。

感想

見たい映画の時間に間に合わなくてしょうがなく見た映画でしたが、大変楽しかったです。

まず冒頭からして楽しい。いきなりナウシカ的な死の灰の様なものが降り積もる森で、ウォーカーが猫が突然変異したような変ちくりんな外観の動物を弓で狩る。そんでその後廃屋に入っていって寝床を確保し、孤独かあるいは空腹に耐えかねて自殺した前の住民の首つり死体から靴をはぎとって履く。このシーンのデンゼル・ワシントンの表情がいい。新しい靴の履き心地をえらく気に入り、とてもいい笑顔を見せる。夜になってたき火をたき、解体した猫を焼く。核戦争の猛火をくぐり抜けたケンタッキーのお手ふきで体をふき、猫の肉を食べ、タッチホイール式の第三世代iPodでやたら渋いソウルを聴く。なんかこれだけで涙出てきそうになる。

とにかくこの映画は最初の30分くらいが面白くて、その後も路上で助けを求める女がいたが実はそれは罠で、チェーンソーを持った危ない男達が出てきてバトルになる。デンゼル・ワシントンは新しい靴を得たことで喜んでいたときとはまったく別人となり、恐ろしく切れ味の鋭いナイフで盗賊の腕を切り落としたりする。超バイオレンス。僕はあんまり暴力物とかアクション映画は見ないのですが、たまに見ると楽しめますね。

全体的には極限状況での人間の行いと聖書がこの映画のテーマです。男達は隙あらば女をレイプしようとする存在として描かれている。カーネギーの部下達は旅行者の夫婦を見つけるやいきなり夫の方を殺して妻をレイプし、所持品を奪って妻も殺す。非常にすさんだ世界なわけです。その世界を正すのが聖書だという筋書き。しかし聖書のために戦争が起こったと考えた人類は片っ端から現存する聖書を燃やしてしまった。ウォーカーはその聖書の最後の一冊を持っていて、それを西へ届けようとするわけです。またカーネギーは聖書さえあれば人々の人心を掌握することができると信じており、字も読めない部下達に血眼になって聖書を探させる。

聖書に書かれている内容は人類愛とか平和的なものなはずなのに、ウォーカーは聖書を守るためとはいえ、襲いかかる盗賊達を無慈悲に殺していく。腕をナイフでちょんぎったりとかね。またカーネギーも世界を完全に制覇するために暴力を駆使して聖書を手に入れようとする。バカで欲望丸出しな民衆を聖書の力で大人しくさせようと考えている。どっちもどっちだなという面もなくはないかなと思いました。

蛇足だけど、金物屋の親父役で出てくるトム・ウェイツが良い味出してました。ケンタッキーフライドチキンのおしぼりと交換でバッテリーを充電してあげたりするの。シネコンで上映された派手なアクション映画だけど、細部に小細工が聞いていて映画好きの人にも楽しめる佳作だと思いました。

| @散財

Twitterで電動歯ブラシを買った人のポストを読んでいてなんか楽しそうだったので、いつか金持ちになったら自分も電動歯ブラシデビューしようと思っていた。ところが、たまたま寄ったドラッグストアで歯ブラシコーナーを見ていたら、2800円くらいでブラウンの電動歯ブラシを売っていた。電動歯ブラシといえば2万円位しそうなイメージだったのに、普通にドラッグストアの歯ブラシコーナーにあるのだ。一番高い物でも4000円しないくらい。これは試してみるしかないなと思って買ってみた。

使ってみての感想

「手磨きで落とせなかった歯垢が落ちる!」という宣伝文句は確かに偽りがないと思う。歯医者で専用の器具で掃除してもらったときみたいに歯がつるつるになる。奥歯の側面とか、手磨きではざらっとした感じが残るような場所もつるつるになる。また前歯の内側のような磨きにくいところも磨きやすい。手動の歯ブラシに比べてブラシの部分が小さく、かつ電動なので手で動かさなくても良いため、こういった磨きにくいところも磨けるのだと思う。

残念な点としては、奥歯の側面とかを磨いていると歯茎を傷つけて出血してしまうところか。ブラシがものすごい勢いで動くので、奥歯の側面のような、歯の露出が小さいところでは歯茎も一緒にゴリゴリ磨いてしまって、それで出血する。歯茎が弱い人はさらに流血の嵐になるかもしれない。

また、交換用のブラシが本体の値段に比べて高い点が気になった。購入したドラッグストアでは交換ブラシ2本セットがブラシ1本付属の本体と同じくらいの値段で売られていた。プリンターなどと同じで、本体を安く売り消耗品で儲けるビジネスモデルのようだ。ただし交換ブラシはAmazonで探してみたところそこそこ合理的な値段で売られていたので、ネットで消耗品を調達するようにすればまぁまぁ快適に使い続けられるのではないかと思う。

総合的な満足度はおおきい。5000円くらいするものを買えば、歯茎を傷つけることはないかもしれない。

| @技術/プログラミング

みなさん、クリッカブルマップしてますか? あんなくそみたいなもの使って地図をつくるなんて発狂しそうなこと、ここを読みそうな人はやってないと思いますが、僕の職場のお客さんとか上司は「Google Mapsには心がこもってない」とか言うので、クソみたいイラストをクリッカブルマップにして地図を作ってるんですよ。まじでかわいそうな僕ちゃん。

ご存じない方のためにクリッカブルマップの作り方を説明しておくと、まず画像を作り、それをHTMLに貼り付け、HTMLオーサリングツール(うちの職場ではDreamWeaver)のGUIエディタでちまちま画像上のクリッカブルにしたい位置を選択するという、血尿が出そうなくらい面倒くさい作業を強いられます。

最悪なことにこのクリッカブルマップのあるページ、頻繁に更新依頼が来るのですよね。依頼が来る度に就業時間中の快適なネットサーフィンが妨げられるので、一発JavaScriptを書いて画像上の座標を取得することにしました。いちいちクソみたいに重いAdobe DreamWeaverとか立ち上げてられるか。

コードはこんな感じ。

<html>
  <head>
    <script>
      function getPosition(){
        var x, y;
        var image = document.getElementById('image');
        image.onclick = function(e) {
          x = e.layerX;
          y = e.layerY;
          document.getElementById("pointX").value = x;
          document.getElementById("pointY").value = y;
        }
      }

      window.onload = getPosition;
    </script>
  </head>
  <body>
    <div>
      <img src="path/to/image" id="image" style="position: absolute; top: auto; left: auto; width: 500px; height: 332px" />
    </div>
    <form action="/" method="post">
      <input type="text" id="pointX" name="pointX" value="" />
      <input type="text" id="pointY" name="pointY" value="" />
      <input type="submit" value="発射!" >
    </form>
  </body>
</html>

Firefoxでしか動作確認してないけど多分IEでは動かないと思います。ここのサイトを参考にさせてもらいました。