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

ここにはっつけるコードのシンタックスハイライトには Google Code Prettify をこれまで使ってたんですけど、どうもいまいちでした。有名な SyntaxHighlighter も好きになれなかった。はてなブログのように綺麗なシンタックスハイライトさせたい! ということで作った。

かなりシャレオツな感じにシンタックスハイライトできるようになったと思います。拾ってきた Monokai スタイルの CSS を当てています。

動作環境

裏側で使っているのは Python の Pygments。JavaScript オンリーで色付けするやつよりもこいつの方が圧倒的に綺麗でした。なのでこのプラグインを使うには Python と Pygments が必要です。Heroku では動くんでしょうか。動作未確認です。

使い方

HTML の pre タグのクラス名を lexer として Pygments に渡します。Ruby のコードを書くのであれば以下のようにします。

<pre class="ruby">
  <code>
  class Book
    def off
      "all your book is 10 yen"
    end
  end
  </code>
</pre>

やってること

JavaScript で pre タグを探してサーバーにコードの中身と pre タグのクラス名を投げると、Pygmentize された HTML が返ってくるようになっております。そいつを JavaScript で拾って pre タグの中身を入れ替え。

当初は

```ruby
class Book
  def off
    "all your book is 10 yen"
  end
end
```

みたいな感じで GitHub 風にしたいと思っていて、以下のような JavaScript を書いていたんですが JavaScript 力が低すぎて断念。

$('.body').each(function() {

  var Pygmentize = function(lexar, snippet) {
    var result;

    $.ajax({
      type: 'POST',
      url: '/pygmentize',
      async: false,
      data: {
        lexar: lexar,
        snippet: snippet
      },
    }).done(function(data) {
      result = data;
    });

    return result;
  }

  var entryBody = $(this).text();

  entryBody = entryBody.replace(/```(.+?) ([sS]*?)```/g,
    function(whole, lexar, snippet) {
      return Pygmentize(lexar, snippet);
    }
  );

  $(this).html(entryBody);
})

※Ajax なのに async: false とかしててイマイチ感ありますね。

とはいえ、汎用性の高い pre タグのクラス名を拾ってくる、という形での実装にしたので、 Markdown でなくても HTML でも Textile でもハイライトできるので結果オーライとします。

ちなみに Kramdown でクラス名を指定したいときは以下のようにするみたいです。

> hogehoge
{: .hoge }

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

RSense という Ruby のプログラムを書いているときに、レシーバの型に応じた補完候補を表示してくれるソフトがあります。Emacs とか Vim と組み合わせて使うと便利らしいです。Java で IDE 使って開発すると補完候補がわさわさ出てきて殆ど鼻くそほじってるだけでプログラミングできるという話を聞いたので、Ruby でも鼻くそほじりながらプログラミングしたいなと思ってこいつを導入してみることにしました。春頃やったときはなかなかうまく Vim から使うことが出来なくて諦めてたんだけど 、つい最近できるようになったのでやり方をメモっておきます。

Mac でのお話です

前提条件ですが、Mac で使ってます。環境は Homebrew で構築してます。また RSense を使うには Java Runtime Environment が必要です。あなたと Java

RSense のインストール

JRE のインストールは済んでいるものとします。Homebre で RSense をインストールしましょう。簡単です。

brew install rsense

インストールが済んだら以下のようなメッセージが表示されると思うので、指示に従いましょう。

If this is your first install, create default config file:
    ruby /usr/local/Cellar/rsense/0.3/libexec/etc/config.rb > ~/.rsense

すると ~/.rsense というファイルが作られ、中身は以下のようになっています。

home = /usr/local/Cellar/rsense/0.3/libexec
load-path = /Users/morygonzalez/.rbenv/versions/1.9.3-p194/lib/ruby/site_ruby/1.9.1:/Users/morygonzalez/.rbenv/versions/1.9.3-p194/lib/ruby/site_ruby/1.9.1/x86_64-darwin11.4.0:/Users/morygonzalez/.rbenv/versions/1.9.3-p194/lib/ruby/site_ruby:/Users/morygonzalez/.rbenv/versions/1.9.3-p194/lib/ruby/vendor_ruby/1.9.1:/Users/morygonzalez/.rbenv/versions/1.9.3-p194/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin11.4.0:/Users/morygonzalez/.rbenv/versions/1.9.3-p194/lib/ruby/vendor_ruby:/Users/morygonzalez/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1:/Users/morygonzalez/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin11.4.0
gem-path = /Users/morygonzalez/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1:/Users/morygonzalez/.gem/ruby/1.9.1

rbenv 使ってる人は load-path にちゃんと rbenv のパスが含まれているか確認して下さい。

Vim の設定

このままではまだ RSense がインストールされただけで、Vim から利用することができません。Homebrew で入れた RSense には rsense.vim がついてくるので、こいつを Vim の plugin ディレクトリにコピーします。

cp /usr/local/Cellar/rsense/0.3/libexec/etc/rsense.vim ~/.vim/plugin/

次に .vimrc で rsenseHome を指定しなければなりません。

let g:rsenseHome = "RSense home"

と書きます。僕はこの rsenseHome が分からなくてハマりました。先ほどの config.rb を実行したときに生成された ~/.rsense に書いてある home をここに指定します。なので rsenseHome は /usr/local/Cellar/rsense/0.3/libexec です。

ここまで済んだところで Vim から RSense が認識されているか確かめます。適当に Vim を起動して :se ft=ruby とし、:RSenseVersion とコマンドを打ってみます。ここで RSense 0.3 のように成功されたら設定完了です。filetype が ruby になっているファイルで 1. と打った後、補完候補を呼び出すコマンド(^X ^U)で候補を呼び出せます。以下のような感じ。

8da56d016a74ebc9d38afcf593bfeadd.png (200×116)

“ネオコン” と連携させましょう

さらに言うと、たいていの Vim ユーザーの皆さんは neocomplcache も使ってるでしょうから、neocomplcache と RSense を連携させましょう。ネオコン作者の Shougo さんのブログ記事を参考にして下さい。

以上で完了です。これで Vim で Ruby な皆さんも鼻くそほじりながらプログラミングできますね。

| @労働

9月1日からシニアエンジニアを拝命しました。シニアエンジニアには 30days/Sqale の刺身☆ブーメランさんやインフラエンジニアの @lamanotrama さんなんかがいて、自分のような職業エンジニア歴の短い人間が同じ肩書きで仕事して良いのかと不安もあるんですけど、技術責任者の mizzy さんには業務内容の他、 Lokka のプラグイン作ったりバグを見つけて pull request 送ったりしてたことを評価して頂き、晴れてシニアエンジニアとなることができました。

ちなみに選考は刺身さんが書いてる前回の様子(シニアエンジニアになりました - 刺身☆ブーメランのブログ / @kyanny’s blog)からさらにラディカルになっていて、応募(pull request で行います)からレビュー、結果の発表まで GitHub のプライベートリポジトリで行われました。ジットハブ、本当に便利ですね。

シニアエンジニアの名前に恥じないよう、多くの人に喜んでもらえるサービスを提供するとともに、「所詮ペパボ」とか言われないよう、技術力を高めていきたいと思います。

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

今年の3月くらいから、寿限無の和田さんが発起人になって Fukuoka.rb という勉強会をやってる。毎週木曜の 19:30 からで、ペ社は会場を提供している。勉強会と言ってもやってることは技術書の輪読で、最初は『メタプログラミング Ruby』を読んだ。メタプログラミング Ruby は中級者以上向けの本でなかなかレベルが高く、当初は 30人ちかくいた参加者が回を重ねるごとに減っていき、最後は5, 6人くらいしか参加者がいなかったけれども、歯を食いしばって出席し続けた。簡潔に書ける、美しいコードが書ける、という以上のことができる Ruby の側面を学んだと思う。いまは二冊目の課題図書として洋書の『Eloquent Ruby』を読んでいる。

福岡でやってる Ruby の勉強会、何回か出たことあるけど、Rails ハンズオンみたいな初心者向けの内容だったり技術より精神面を重視した内容だったりで個人的には消化不良な感じがあった。また開催が不定期で、プログラマ同士の情報交換がしにくいと感じていた。

Fukuoka.rb は原則的に毎週開催で、扱う内容も初心者よりというよりは中上級者向けで、本を読みながら喧々諤々とした議論も繰り広げられるし、自分はあまり参加しないのだけど勉強会の後はみんなで飲みに行ったりもする。業務で感じていた疑問を詳しい人に尋ねたり情報交換しやすい。

個人的には、中学生の頃に通っていた隣町の塾を思い出す。自分は田舎に住んでいたので、都会の塾に行くだけでレベルの高さに驚くとともに刺激を受けて、都会っ子に追いつこうと勉強を頑張った。Fukuoka.rb は参加者のレベルが高く、なかなかついて行くのが大変なのだけど、確実に Ruby 力が高まっていると思うし、出てて良かったと感じる。

Asakusa.rb や Yokohama.rb のような Ruby コミュニティをずっとうらやましく思っていたけど、これらに近い Ruby コミュニティが福岡にできつつあると思う。時々は Ruby コミッターの @nagachika さんも参加している。福岡在住の Ruby プログラマで腕に覚えがある人は、是非毎週木曜日に天神プライムビル8階で開催されている Fukuoka.rb にお越しください。面白くしていきましょう。

| @労働

福岡配属になった新卒氏が自分のチームに配属されたのでペアプログラミングをやってた。一応 OJT なんだけど、東京で @hsbt さんと @antipop さんによるブートキャンプを経験してきた新卒氏に「request spec を書く前に view を書くな、ハゲ」と自分の方が叱咤されたりしてこちらも良い勉強になった。

新卒氏に便利な UNIX コマンドを教えたり、rbenv の利用方法を教えたりしながら、自分で言うのもなんだけど、俺やシニアエンジニアの @linyows 氏が独学で覚えたことを口頭で教えてもらえてすごくラッキーだよなー、と思ってしまった。TDD とペアプログラミングで OJT なんてすごいと思う。特に福岡では。

訳の分からない SI 会社に入ってしまった若者は、コードを書きたいのに詳細設計書(実はなにも詳細に設計されてない、どうせコードを書く段になって仕様は変わるし設計通りに作るなんて無理だから)を方眼の Excel ドキュメントに延々書いたりとか、訳の分からないミーティングに出席させられて延々議事録を取ったりとかしてる。SI 会社の連中は FizzBuzz 問題も本当にこんな感じに「解く」。もしSIerのマネージャがFizzBuzz問題を解いたら - GeekFactory

仕事のことをブログに書くと毎回同じ結びになってしまってる気がするけど、クソみたいな SI 会社でつまんない仕事してる人は思い切って会社変えれば良いと思う。

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

アンチポップさんの日記に登場できて何だかうれしいんだけど、最近会社で社内SNSをハッキングするのが流行ってる。

自分がこれまで作ったのは社内SNSの日報を読みやすくするGoogle Chrome拡張とMarkdownで書いてある日報の本文をパースしてHTMLに変換して表示するやつ。「便利ですね」とか言われちゃったりなんかしてなかなか面白かった。

ハッキングは楽しい。制限されたところで無理やるやるのが面白いと思う。2008年頃のTwitterを思い出す。Firefoxとグリモン全盛期で、youpyさんとかkoyachiさんとかfubaさんとかucnvさんとかが作ったへんてこりんなグリモンをインストールしてTwitterを見るのが楽しみだった。あの頃は単なる使い手だったけど、いまじゃ自分で簡単なグリモンや拡張は作れるようになって、とても充実感がある。ずっと筋トレしてた虚弱体質の人が人前で力こぶを作って「おおー」と言われたときに感じるであろう感覚を味わっている。そんな感じです。

| @散財

7月末で切れる SoftBank のポイントがあったので使おうと思って会社の近くの SoftBank ショップに行った。ポイントは 3600 ポイントくらいあって、SoftBank のウェブサイトにはポイント割引が利用できるオプション品の項目に Universal Dock があったので(オプション品などの購入に使う:ソフトバンクポイントプログラム | ソフトバンクモバイル)、 3000 ポイントを割引に利用して iPhone の Uiversal Dock を買おうと思った。

しかし店舗に赴いてこれこれこういう理由でポイントを使いたいと言ったら「在庫がないので時間がかかる、コールセンターに電話してくれ」と言われた。とは言え家にあまりいないので時間がかかってもいいからやっぱり店舗で受け取りたいと思って再度ショップを訪れたが、同じように「時間がかかるので電話してくれ、そういうのは全部電話でやってもらうことになっている」と言われた。

そういうわけなので SoftBank のコールセンターに電話した。ナビダイヤルではオプション品の購入はなさそうだったので、ポイント交換のところへ進んだ。電話に出た人に事情を説明するが、コールセンターではオプション品とポイントの交換しかできず、購入時の割引は店舗だけとのことだった。

しかし二度ショップに行って「そういうのは全部電話でやってもらってる」と言われた以上、再度ショップを訪れても同じことを言われるに決まっている。なので「コールセンターでショップで購入するように言われたのですが、と言えばポイントを使わせてもらえますか?」と少しきつい感じで聞いたところ、コールセンターの人が俺が訪れた店舗に直接電話してポイント割引購入できるか確認してみる、と言った。

確認してもらったところ、「取り寄せはできるが 1, 2 ヶ月時間がかかる」とのことだった。言外から、どうも 1, 2 ヶ月時間がかかるということにして実質的にはショップではポイント割引購入ができないようになっているのを感じ取った。きっと代理店がやってるショップだときわめてポイントが利用しにくい状況なのだろう。

コールセンターの人が折衷案として、一旦全額を俺が現金で払って、後日 SoftBank 携帯の料金から利用したかった 3000 ポイント分を割り引くという形でどうか、と提案された。ポイントを使って何かを購入するにはそれしか方法がないし、この場合すぐに発送されて 3 営業日以内に届くと言われたのでこの方法でお願いした。

SoftBank ショップで iPhone を買うときには謎のオプションプランに加入させられたりするのが日常的な光景となり、マジで消費者スキル高くないとつらいと思う。多少時間はかかってもショップで嫌な思いをしないよう、何か買ったりするときは SoftBank 直営のオンラインショップを利用する方がよさそう。もしくはポイント割引は使えないけど Apple Store がいいと思う。

ちなみに届いた商品は良かったので別の記事で感想を書きます。