| @Mac/iPhone

日曜の朝に Mac を触っていたら突然 OS が落ちた。しょうがないのでスタートボタンを押して OS を起動させた。 OS 起動後、メッセージを見ようとするけど Messages.app 起動時にクラッシュして見られない。

一旦 iCloud アカウントからログアウトして再ログインしたらいけるかなと思ってログアウトして再度ログインを試みる。しかし各種設定をオンにしてもサーバーとの通信に失敗しているようで、 iCloud の利用ができない状態になってしまった。

同時にインターネットアカウント設定が出来ないことに気がつく。「インターネットアカウント を読み込めませんでした」というエラーが出る。

Apple Support Discussion で見かけた Unable to load iCloud and Internet...: Apple Support Communities を参考に ~/Library/Caches/com.apple.iCloudHelper を消して com.apple.iCloudHelper を kill してログアウト -> ログインを試すもダメ。 iCloud 関連で用いるファイルにロックがかかっている状況で OS が突然停止して iCloud 死んだぽかった。

英語の Apple Support Discussion の情報を一通り眺めて試してみたけど Messages.app とインターネットアカウント設定は復活せず、あきらめて TimeMachine のバックアップデータから復元することにした。 33 時間かかって復元は終わった。 Messages.app は無事起動するようになったが万事元通りとはならず、アドビ系のソフトが全滅した。

まえ MacBook の HDD を SSD に変えたときに TimeMachine のバックアップから復元したら同じように Adobe CS4 のライセンシングが機能しなくなって Photoshop とか使えなくなった。前回はハードドライブが変わったからそうなったのかと思っていて、同じ SSD に復元するのであればこういうことは起こらないのではないかと勝手な期待を抱いて復元してみたら、案の定ライセンシングが機能しなくて起動しなくなった。

前回はディスクケースに取り出した古い HDD を入れてディスクから Mac を起動してアドビ系のライセンス認証を解除して回ることで Photoshop とか起動できるようになった。今回はディスクの換装ではないので古いドライブが存在しているわけではなく消去して上書きインストールされているので、旧データの OS を起動してライセンス認証を解除するということもできない。 Adobe が CS4 向けに提供しているライセンス修復ツールは PowerPC アプリケーションというクソっぷりで、 Intel CPU の Mavericks で起動するわけもなく。どうせ Adobe のサポートとかに電話しても Mavericks で CS4 の動作は保証しておりませんとか言われるだけだろう。つらい。

Adobe のソフト、基本的に異常な操作感だし使いたくないけど、印刷屋に年賀状とかのデータを送るときにどうしても使わないといけないのがだるい。国はアドビ対策基本法とか制定してアドビ倒産に追い込んで欲しい。

TimeMachine のバックアップから復元するときはご面倒さまでも Adobe ソフトのライセンス認証を解除してから行われることをおすすめします。最近の Creative Suite ではこういうことおこんないのかな。マジでクソい。

追記(2014/05/08)

昨夜、一旦ソフトをアンインストールして入れ直したら Photoshop とか使えるようになった。ライセンシングが機能しなくなったらインストールし直せば何とかなるようです。ディスクが何枚にも分かれてるので時間かかるけどな。

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

Rails で public_activity.gem を使っていて、 activities テーブルにレコードが追加されたタイミングで callback を仕掛けたい衝動に駆られた。ちょっと調べてみたけどやり方が見つからなかったので、チームの人と相談して以下のようにした。 public_activity は PublicActivity::Activity というモデルを gem の中に持っていて、こいつが belongs_to :model になる。

なのでこのモデルクラスを open して以下のように記述した。

# RAILS_ROOT/lib/public_activity/activity.rb

module PublicActivity
  class Activity
    after_create do
      HogeHogeMailer.send_mail(self.trackable).deliver
    end
  end
end

ただしこのファイルを config/initializers/ とかで require してやらないと Rails がファイルを読み込んでくれない。 Rails.application.config.autoload_pathslib/**.rb とかを追加しとけば自動的に読み込まれるんじゃないかなと思ったけどそうじゃなかった。 Rails の autoload は、 ConstMissing という例外が発生したときに定数の名前からファイル名を推測して require するらしい。名前が既に定義済みだと ConstMissing 例外が発生せず autoload では読み込まれないので明示的に読み込む必要があるということらしい。

読み込みされていないクラスを使用すると ConstMissing という例外が発生します。 この部分に介入して autoload_paths の中に規約に合うファイルがあるか確認します。 存在する場合は読み込みします。 存在しない場合は ConstMissing を発生させます。

Rails の自動読み込みの話 - そんなこと覚えてない

ナルホディウスですぞ〜!!!

そのうち忘れそうなのでここに書き記しておきます。

| @Mac/iPhone

2年くらい前に Western Digital の My Book Live という NAS を買った。ほんとは Time Capsule が良かったんだけど Time Capsule を買う金はなくてこれにした。

狭い机の上にハードディスクを置くのが嫌だったので NAS にしたんだけど、ものすごく使いづらい。 WiFi 経由なのもあるかもしれないけど、転送速度がすごく遅い。 MacBook Pro Mid 2009 のディスクを HDD から SSD に交換したとき、 My Book Live 内の TimeMachine バックアップから WiFi 経由で復元したら、 300 GB 程度のデータを転送するのに丸三日かかった。 WiFi ルーターが Fon の 802.11b/g のやつだから 802.11n のやつに変えればもう少し実用的な速度になるのかも知れない。

TimeMachine 用に使うにはバックアップに頻繁に失敗するのもつらい。なんかディスクの信頼性が低下したとかで頻繁に過去のバックアップを消去して新規バックアップを作成しろとか出る。 Mountain Lion の頃によくこの警告出てて Mavericks にしてからあまり出なくなったけど、それでも 2 ヶ月に 1回くらいの頻度でバックアップ新規作成(=フルバックアップ作成。これも 2, 3 日かかる)しないといけなくなるのでつらい。

ちなみにバックアップディスクの信頼性が低下したときは以下のような一連の呪術的なプロセスを経ることでタイムマシーンのバックアップディスクとして再利用可能になる。

| @散財

D90 のキットレンズだった AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED が1年半くらい前からズームしたときに遠くのものにピントが合わなくなっていた。(近くのものにはピント合う)

最初はそういう仕様だったかなぁと思いながら(ピントが合わないのは遠くのものだけなので)、単焦点レンズしか使わなかったのであまり気にしていなかったのだけど、ネットで検索したら同じ症状の人が何人かいて、どうやら故障しているらしいということが分かった。

kakaku.com の掲示板で、「 Nikon のサービスセンターに持っていったら玉を固定してるねじを締めてもらうだけで直り無料だった」と書いてる人がいたので、無料で直るかなと思って Nikon のサービスセンターに持っていったら「36,000円です」と冷酷に告げられてしまった。型落ちで中古でも4万くらいで買えるレンズの修理に36,000円も払うのはあり得ないと思ったので修理は頼まなかった。

合理的な価格で修理をやってくれるカメラ店とかないかと思って検索してたらゼネラルカメラサービスという会社が福岡にあることが分かったので持っていってみた。

10,500円で直るとのことだったので直してもらうことにした。今日受け取ってきたけど遠くのものもちゃんと撮れるようになってた。

DSC_5583

レンズとかカメラとか壊れたときにメーカーに修理頼んで高額な見積もり来て困ったら、こういう修理屋さんを探してみると良いと思った。あと恐らく修理頼んだとこはヨドバシとかキタムラからの修理依頼も受けてて、量販店に頼むと量販店の取次料とかがかかるっぽいので、行ける範囲にこの手の修理会社ある人は直接そこに持って行ってみると良いと思った。以上、個人の日記でした。

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

Fukuoka.rbで Ruby で連続するダブルクオートの扱いについて @nagachika さんに聞いたら面白い話が聞けた。

Lokka のテストで FactoryGril でフィクスチャーデータ作ってるところに、以下のような文字列があった。

  factory :post do
    association :user
    sequence(:title){|n| Test Post #{n}” }
    body <p>Welcome to Lokka!</p><p><a href=“”/admin/“”>Admin login</a> (user / password : test / test)</p>”
    type ‘Post’
    created_at create_time
    updated_at update_time
  end

この body の部分で、ダブルクオートが連続して書いてある場所があって、ここがらみでテストを流してたら失敗する現象に遭遇した。テストに失敗したときのメッセージは以下。

Failures:

  1) Post markup default should == “<p>Welcome to Lokka!</p><p><a href=/admin/>Admin login</a> (user / password : test / test)</p>”
     Failure/Error: it { post.body.should == post.raw_body }
       expected: “<p>Welcome to Lokka!</p><p><a href=/admin/>Admin login</a> (user / password : test / test)</p>”
            got: “<p>Welcome to Lokka!</p><p><a href=\”/admin/\”>Admin login</a> (user / password : test / test)</p>” (using ==)
     # ./spec/unit/post_spec.rb:56:in `block (4 levels) in <top (required)>

なんか expect の方で HTML 内のダブルクオートが省略されてる。ダブルクオートが連続してるのが怪しいなと思って、文字列内でダブルクオートが連続したら、一つ目の はエスケープ文字列みたいな扱いになるのかなと思った。

しかし実はそうではなくて、 @nagachika さんの説明によると、ダブルクオートが連続した場合、一つ目の " で文字列の終端と判定される。すぐ右隣の " は新しい文字列の開始と見なされ、結果としては文字列として連結されるらしい(C 言語由来の慣習とのこと)。

たとえば、次のような文字列は

<p>Welcome to Lokka!</p><p><a href=“”/admin/“”>Admin login</a> (user / password : test / test)</p>”

“<p>Welcome to Lokka!</p><p><a href=“”/admin/“”>Admin login</a> (user / password : test / test)</p>” という三つの文字列と見なされ、クオートとクオートの間に何も挟まらないので自動的に一つの文字列として連結され、以下のようになる。

<p>Welcome to Lokka!</p><p><a href=/admin/>Admin login</a> (user / password : test / test)</p>”

これ、なぜいままで Lokka でこの状態で CI のテスト通ってたのかわからないけど、今日 wercker で CI の設定していてテストが通らなくてこの問題に気がついた。同じように手元でテスト実行しても落ちた。ひょっとすると Ruby 2.1.0 で落ちるのかも知れない。いずれにせよ "" は使わない方が良さそうなので修正して Pull Request 出そう。

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

このブログを Capistrano 3 でデプロイするようにした。こちらを参考にした。

一点、 deploy:restart 内で、 invoke メソッドで他の namespace の task を呼び出すところ

The deploy has failed with an error: #<NoMethodError: undefined method `verbosity' for "/usr/bin/env unicorn:restart\n":String>

というエラーが出てた。調べたらどうも sshkit のバグっぽかった。

最新版では Pull Request マージされてて治ってるぽかったので Gemfile で

gem 'sshkit', github: 'capistrano/sshkit'

と書いておいた。

Capistrano 3、他の gem いれなくても色付いたりマルチステージになってたり rbenv 対応しててモダンになってると思った。あとシンボリックリンク作ってくれる task が便利。

| @Mac/iPhone

Mavericks にしてからマウスジェスチャーソフトの xGestures がうまく使えなくなった。起動するときにエラーが出て、いちいちターミナルから open -a ~/Library/PreferencePanes/xGestures.prefPane/Contents/Resources/xGestures.app して呼び出したりしてたけど、今朝ついに起動しなくなってしまった。

マウスジェスチャーのソフトはいろいろあるけど、 xGestures の良かったところはブラウザープラグインではなく、 Finder などブラウザ以外のソフトでもジェスチャーを設定出来るところだった。 Finder や FTP クライアントなどのような「戻る」「進む」概念のあるソフトウェアでマウスジェスチャー使えたのが大変便利だった。

xGestures は昔からアップデートが遅くて、 OS のバージョン上げる度に苦労してた印象ある。このまま新しいバージョンとか出ない可能性もある。ひと思いに他のソフトに移行してみようかと検索してみたけど、 CocoaSuite とかも開発止まってたし、良い感じのソフトなかった。検索して出てくるのはどれも Magic Trackpad / Magic Mouse を使いやすくするソフトウェアばかりだった。

いま普通の Mac ユーザーはみんな Magic (Trackpad|Mouse) 使ってて、 OS X に標準で組み込まれてるスワイプ機能とかで事足りてるのかも知れない。みんなタッチスクリーンに慣れてるし、画像編集ソフトなんかで細かい修正作業とかするとき以外 Mac でわざわざマウス使う理由とかない感じがする。そのうち若い人はマウスとか使わなくなって、「マウスジェスチャーって何? 原始時代の儀式か何か?」みたいに感じになるのかも知れない。