まえ作った Amazonの検索結果が新規ウィンドウで開かれるのを殺すユーザースクリプト が Amazon の HTML 変更により動かなくなってたので更新した。Amazon 見てたら無限に新しいタブが開いていく現象にお困りの方はご利用ください。
Syntax Highlight Plugin で Ajax をやめた
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』読んでなかったらどうすればいいか皆目検討付かなかっただろうなー。
Unicorn が暴走して困ってる
最近、cap deploy
がしんどい。
こんな感じで、デプロイすると CPU の使用率が高まってしまう。Unicorn が暴走してるっぽい。シンボリックリンクとかはちゃんと置き換わってるんだけど、プロセスが古いままで、サイトの出力が新しくデプロイしたものに置き換わらない。こうなると cap deploy:restart
とかやっても無反応で、ssh でログインして Unicorn を一旦停止し、手動で Lokka を再起動しないといけない。
拡散お願いしますアドベントカレンダー2012 に参加したとき、記事を公開してすぐサイトが落ちてしまって「やっぱりスモールマイクロインスタンスでは人気サイトポータルシットを運用するのは無理なのかな」と思ったのだけどどうもアクセスが集中して落ちたわけではないっぽい。
何なんだろう。
Lokka で過去記事一覧を表示するプラグインを作った
P_BLOG 使ってた頃から過去記事タイトルを一覧表示する機能は自分で自分の記事を読み返すときに重宝していて、この機能が欲しかったので作った。過去記事を全部一覧表示すると重いので一年分ずつ表示するようにした。便利。
ソースコードは以下。
ちなみにテストはありません。悪しからず。
安焼酎で幸せになりたい
帰省したときに実家の近所のドラッグストアに行くと、たくさん人が来ていて盛況だ。
酒のコーナーに行くとおっさんがいて、2リットル入りの工業用アルコールのような焼酎や、1リットルの紙パック入りの白岳しろを舌なめずりしながら買い物かごに入れてる姿を見ることができる。
焼酎を買ってるおっさんたちは概して「これからわての週末始まりまんねん」という表情をしている。外に酒を飲みに行くわけでなく家で晩酌をするのだろうけど、すごく楽しみにしている感じが伝わってくる。おっさんのショッピングカートから幸せが溢れそうになっているのが見える。
自分は酒に弱いので焼酎は買わないし飲まない。酒はビールがもっぱらでたまにワインを飲む程度だ。なので舌なめずりしながら大量の焼酎を買い物かごに入れるという経験をしたことがない。
こんな風に酒を買うおっさんたちはどんな気持ちなのだろう。自宅での晩酌でこんなに幸せになるという感覚が分からない。酒に弱いと飲んでも缶ビール2本くらいで前後不覚になって寒気がし始め、布団に入りたくてしょうがなくなる。自宅での晩酌だから、友だちと飲んで猥談をするわけでもなく、家族と話すかテレビを見ながら飲むのだろう。そんなにウキウキワクワクする要素はないと思う。
自分も大酒飲みになりたいわけではないのだけど、ホクホクとした表情で焼酎を買い込むおっさんたちの姿がただただ羨ましい。