| @Mac/iPhone

先日、自宅の MacBook Pro (Mid 2009) 内の MacVim kaoriya で quickrun が実行できないと書いた(Homebrew で入れた MacVim だと quickrun できる)。どうも Python が原因らしいことがわかっていた。

Mac に入っている Python のバージョンが古いのかなと思い(でもそれだとなぜ CUI 版の Vim で quickrun できるの説明がつかない)、 Homebrew で Python を入れてみた。なんか symlink を作成できなかったとかエラーが出たので brew link --overwrite python とかやってかなり無理気味に入れてみた。しかし相変わらず MacVim kaoriya から qiuckrun を実行すると MacVim が落ちる。

そもそも会社の MacBook Pro や自己所有の MacBook Air ではこのような現象は起こらないため、この Mac に入ってる Python が異常なのでは? と思い至った。

確認してないのでテキトーなんだけど、おそらく、この Mac に入ってる Python は 32bit OS 用のやつが入ってたような気がする。というのは /usr/local/bin にあるいくつかの symlink が以下のように 2008 年に作成されたファイルを指していたから。

https://resources.portalshit.net/930-pythons.png

かつて NOKIA の携帯を使っていたときにゴニョゴニョするために Mac OS X 用の Python パッケージをダウンロードしてインストールしていて、それが 32bit OS 用のバイナリだったために問題が発生しているのかも知れないと思った。試しに python.org から 64bit OS 用の Python パッケージをダウンロードしてきてインストールしてみたら無事 MacVim kaoriya で quickrun できるようになった。

CPU が Core Solo、Core Duo の Mac だったら 64bit でしか動作しない Mac OS X (Lion 以降の OS)をインストールできないのでこんな問題には遭遇しないのだろうけど、自宅の MacBook Pro は Core2 Duo なので 32bit OS でも 64bit OS でもインストールできてしまうためにこのような問題に行き当たってしまったのだと思う。

あと OS のアップグレード時にアーカイブインストールではなくクリーンインストールを選んでいたらこのような問題には遭遇しなかったかも知れない。写真や音楽などだけ TimeMachine から復旧するようにして、Mac をアップグレードするときは OS そのものはまっさらな状態でインストールする方が良いということが分かった。アプリケーションもいまは Mac AppStore があるので昔より前の環境に戻すのが難しくない。

ただ Adobe 製品のライセンス認証解除とかは OS のクリーンインストール前にぬかりなく行っておかないとシリアルキーが通らなくなって死ねそう。

そういうわけで、Snow Leopard 時代から Core2 Duo CPU の Mac を Mountain Lion まで Upgrade して使っていて MacVim の quickrun が動かない人は Python をインストールし直すことを試してみてください。

| @散財

一昨年、会社を変わったときに Happy Hacking Keyboard Professional 2 を買った んだけど、貧乏性のためなかなか会社に持っていって使うという気にならず、会社では3年前に買った HHK Lite2 を使い、Pro の方は家で使っていた。

しかしよくよく考えると家でコードを書く時間よりも会社でコードを書く時間の方が圧倒的に長いわけで、一番長くコードを書く時間を一番良いキーボードととともに過ごした方がよいのではないかと考えを改めて HHK Pro を会社で使うことにした。

連休明けの火曜から HHK Pro でコードを書いていて一週間が終わったところだけど、会社で毎日8時間以上使うことで初めて良さが分かったような気がする。Lite に比べてしっかりしている。Lite はカチャカチャとうるさいけど Pro は激しくキーを叩いても静かだ。それなのに押したときの反発は Lite の方が重く、Pro の方が軽い。Lite はカチャカチャしていておもちゃのようで、音を聞くだけで疲れる。

キー配列に関しても、HHK Pro はただの US 配列とは異なっていて、チルダキーの位置や Control キーの位置が一般的な US 配列よりも利用しやすい位置に置いてある。正直プログラミングしやすい。

HHK Pro を使うことで困ることと言ったら、それ以外のキーボードを利用したくなくなることだと思う。家でも職場でも HHK Pro が使いたくなる。自分の場合は HHK Pro を二つも買えるような財力はないので、そもそも HHK Pro を買ってしまったのが失敗だったのかも知れない。毎日 Amazon を開いてため息をつきながら HHK Pro をカートに入れたり戻したりしている。

| @Mac/iPhone

46dd7418f43fe24786c47fada3fe4916.png (975×595)

会社は IRC を多用してて、入社してすぐに横の席の人が使ってた Linkinus を真似して入れて使ってた。なんで LimeChat を使わないのかというと、LimeChat だと Growl とかの通知がメッセージ全体ではなく冒頭の数文字だけだから。これでは LimeChat のウィンドウにフォーカスを移さないと続きを読むことが出来ない。Linkinus の通知は全文表示されるので、ちょっとしたメッセージなら Growl 通知だけで内容を把握できる。そいうわけで Linkinus を使っていた。

しかし Linkinus にも問題があって、最近は全然メンテされてないし、ときどきテキストフィールドがどんどん狭くなっていく現象に遭遇するようになって、自分の人間の器がテキストフィールドの大きさに反映されてるみたいで非常に使い心地が悪かった。なんかいい IRC クライアントないかなー、と物色していたら、 Textual というやつを発見した。試用版を入れてみたところなかなかいい。Retina Display の MacBook Pro にも対応していて(つまりちゃんとメンテされてる)、テーマは良い感じのやつがあるし(Monokai みたいな色合いでかっこいい)、Linkinus と同じ3カラムレイアウトなので違和感もなかった。テキストフィールドが入力不能になることはないし、 Linkinus では Growl 通知されなかった Notice status を通知させることもできる。非常におすすめです。

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

まえ作った Amazonの検索結果が新規ウィンドウで開かれるのを殺すユーザースクリプト が Amazon の HTML 変更により動かなくなってたので更新した。Amazon 見てたら無限に新しいタブが開いていく現象にお困りの方はご利用ください。

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

Lokka で Syntax Highlight するプラグイン(morygonzalez/lokka-pygmentize · GitHub)、これまで Ajax で Syntax Highlight させてたんだけど、HTTP リクエストが増えていけてないと感じたのでサーバーサイドでハイライトが完結するように変更した。Railscasts の #272 Markdown with Redcarpet - RailsCasts を参考にして、プラグインの中で Entry クラスを再オープンした。こんな感じ。

class Entry
  def body
    doc  = Nokogiri::HTML(self.long_body)
    doc.search("//pre").each do |pre|
      code = pre.css("code")[0]
      pre.replace Pygments.highlight(
        code.text.rstrip,
        :lexer   => code[:class],
        :options => { :encoding => 'utf-8' }
      )
    end
    doc.to_s
  end
end

前の実装はだいぶいけてなかったと思うので随分マシになったと思う。あと この Pull Request でレンダリングエンジンに Redcarpet が追加されたので、GitHub と同じように

```ruby

```

みたいな感じの書き方でコードがハイライトされるようになった。便利。

追記1

ちゃんと動いてなかった…。夜直します…

追記2 2013/02/04 0:45

最終的にオープンした Entry クラスのコードは以下のようになった。

class Entry
  alias_method :original_long_body, :body
  def highlighted_long_body
    syntax_highlight(self.original_long_body)
  end
  alias_method :body, :highlighted_long_body

  alias_method :original_short_body, :short_body
  def highlighted_short_body
    syntax_highlight(self.original_short_body)
  end
  alias_method :short_body, :highlighted_short_body

  def syntax_highlight(body)
    doc = Nokogiri::HTML(body)
    doc.search("//pre").each do |pre|
      code  = pre.css("code")[0]
      lexer = if pre[:class].present?
                pre[:class]
              elsif code.present? && code[:class].present?
                code[:class]
              else
                nil
              end
      begin
        pre.replace Pygments.highlight(
          code.text.rstrip,
          :lexer   => lexer,
          :options => { :encoding => 'utf-8' }
        ) if code
      rescue MentosError
        next
      end
    end
    doc.to_s
  end
end

Lokka、結構メタプログラミングが多くて、Entry クラスのインスタンスの body メソッドは単なるゲッターではなく、 index アクションのときと show アクションのときで別々にエイリアスが設定されていて、index アクションのときは Entry#short_body 、show アクションのときは Entry#long_body が呼ばれるようになっていた。アラウンドエイリアス使って力業で解決したけど他のプラグインが同じように振る舞ったら破滅を招きそうな気がする…。それにしても『メタプログラミング Ruby』読んでなかったらどうすればいいか皆目検討付かなかっただろうなー。

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

最近、cap deploy がしんどい。

5938930a9f1e1eb35812dbe10b5c1fd8.png (768×416)

こんな感じで、デプロイすると CPU の使用率が高まってしまう。Unicorn が暴走してるっぽい。シンボリックリンクとかはちゃんと置き換わってるんだけど、プロセスが古いままで、サイトの出力が新しくデプロイしたものに置き換わらない。こうなると cap deploy:restart とかやっても無反応で、ssh でログインして Unicorn を一旦停止し、手動で Lokka を再起動しないといけない。

拡散お願いしますアドベントカレンダー2012参加したとき、記事を公開してすぐサイトが落ちてしまって「やっぱりスモールマイクロインスタンスでは人気サイトポータルシットを運用するのは無理なのかな」と思ったのだけどどうもアクセスが集中して落ちたわけではないっぽい。

何なんだろう。

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

P_BLOG 使ってた頃から過去記事タイトルを一覧表示する機能は自分で自分の記事を読み返すときに重宝していて、この機能が欲しかったので作った。過去記事を全部一覧表示すると重いので一年分ずつ表示するようにした。便利。

ソースコードは以下。

ちなみにテストはありません。悪しからず。