| @雑談

2011年7月の阿蘇

IT企業は都会に多いけど、田舎にもあればいいのに、と思う。というのは帰省していて阿蘇が大変過ごしやすかったから。福岡では僕のようなおっさんが夜寝て朝起きただけで顔や頭がアブラべっちょりになるけど、阿蘇ではそのような悲劇は起こらない。涼しいから。日中も過ごしやすく、エアコンなしで快適に積ん読や2chまとめサイト巡回がはかどる。節電とかバカみたいだった。

| @雑談

E-19PL was mine

6年前に買ったゴルフ2を手放した。

所有していたゴルフ2はE-19PLという型番で、GTIというラインだった。時の流れと重力と金のなさには抗えず、福岡に引っ越したことや経済面で維持が難しくなって、四度目の車検を前に手放した。査定はゼロ円だったので無料で買い取り業者に引き取ってもらった。

大学を出て実家に帰り、病気が治って一度目の退院をした後にばあちゃんに買ってもらったのがこのゴルフ2だった。その後病気が再発したため、G-CSF注射による骨痛や倦怠感に耐えながらゴルフを運転して通院したり、病気が治ってからは天気が良いとばあちゃんを連れて久住をドライブしたり、就職してからは毎日の通勤のほか九州各地の映画館に映画を見に行ったりと、20代の大半の時間はゴルフと一緒だった。

希少な3ドアのゴルフ2 GTIをあっけなく手放したことは後ろめたくもある。買い取り業者はスクラップにはしないと言っていたけど、こんな感じで手放すくらいなら誰か欲しい人を探して直接譲れば良かったと思う。

最後一年は洗車すら満足にしてあげられなかったが、本当に楽しかった。ありがとう。

| @雑談

福岡のいいところ

  1. 住職近い
    庶民でも会社まで15分のとこに住める。
  2. 食べ物安い
    3500円飲み放題で吐きそうなくらい食べ物出てくる。九州各地から届く生鮮食品も安い。
  3. 街がせまい
    移動が楽。海沿いに繁華街があるため土地が平ら。自転車で移動できる。
  4. 電車が空いてる
    朝の通勤時間帯も金曜の夜の終電もがらがら。
  5. 自然がある
    離れ島みたいなとこまで船ですぐ遊びに行けるしわりと都会なのに自然が豊富。
  6. 空港が近い
  7. 勉強会たくさんやってる
    ウェブ系のコミュニティが活発。

福岡の悪いところ

  1. ラーメン二郎がない
    インスパイア系しかなくて高い。
  2. 街が狭い
    悪いことすると町中に知れ渡る。
  3. やくざの抗争
    手榴弾怖い。
  4. 飲酒運転
    あぶない。
  5. 恫喝大臣
    コンセンサス得ろよ。
  6. けむい。
    屋台でたばこ吸う客うざい。
  7. 給料安い
    物価が安いので。

| @労働

こういう会社で働けたら幸せだろうなと思います。

理想の会社

  1. Gitでソースコード管理している。
  2. 会社のGithubアカウントがある。
  3. 外部に公開されている技術ブログがある。
  4. IDEよりVimやEmacsを使うことが奨励されている。
  5. 社員が勉強会に参加することを奨励している。
  6. オープンソースコミュニティに貢献している。
  7. 音楽を聞きながら仕事できる。
  8. Rubyで開発できる。
  9. 会議が短い。
  10. アジャイル開発を実践している。
  11. テストコードがある。
  12. エンジニアは全員ノートパソコンで開発して、好きかってに席を替わってペアプログラミングとかやってる。
  13. MacとLinuxしかない。
  14. 優秀なデザイナーがいる。
  15. でかい本屋が近くにある。
  16. プログラムを書くことが好きな人たちが集まっている。
  17. SEという肩書きの人がいない。
  18. 大所帯でない。
  19. 金曜の夜はみんなはやく帰る。
  20. イスに金をかけている。
  21. 社員がfoursquareで会社のMayorの座を競い合っている。

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

Lokkaで /article.php?id=数字 なURLへのアクセスをリダイレクトできました。

SinatraではURLの ? 以降のクエリストリングは request.query_string というオブジェクトの中に入るらしい。そういうわけなので次のようなコードでリダイレクト処理してます。

module Lokka
  module RedirectArticles
    def self.registered(app)
      app.get %r{/article.php} do
        unless request.query_string.empty?
          /id=(d+)?/ =~ request.query_string
          redirect "/#{$1}", 301
        end
      end
    end
  end
end

Sinatra、Lokka越しで初めて本格的に利用させもらってますけど便利ですね。

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

ポータルシットをLokkaで置き換えました。

Lokkaでリプレースしようと決めたのが2月8日なので(たぶんLokka - portal shit!)、5ヶ月弱要したことになります。

今回こだわったのが、

  1. P_BLOGから記事本文はもちろん、コメントも移行する
  2. 移行スクリプトはテスト駆動で開発する
  3. Markdownで本文を書けるようにする
  4. 旧記事へのアクセスをリダイレクトする (未実装)

の4点。

TDDデビュー

移行スクリプトについては初めてテストファーストで開発してみましたが、なかなか勉強になりました。やたら長いメソッドを書かないように気を付けたり。長いメソッドはテストしにくいですね。あと途中でLokkaの仕様不足が露呈してコードを書き直したりしたんですが、そういうときもきちんとテストを書いているおかげで、一ヶ所変更したらプログラム全体がぶっ壊れるというような事態を避けることができ、大変良かったです。

herokuデビュー

最初はさくらVPSで運用しようかと思っていましたが、herokuで簡単に使えるのがLokkaの売りなわけですし、heroku使ったことがないのは若干まずいだろと思っていたのでとりあえずherokuで運用することにしました。楽でいいです。失業者が出るレベル。

ただ旧記事(/article.php?id=***)へのアクセスをリダイレクトするつもりで移行スクリプト書いたりしてたんですが、herokuで運用する限りにおいては nginx.conf を編集したりできないのでリダイレクトは実現できなそう。Sinatraで拡張子phpへのアクセスをリダイレクトするという変態的な処理はできないのでしょうか。クエリストリングの扱いがネックになりそう。場合によっちゃ結局さくらVPSで運用するかもです。

加えてherokuは画像のアップロードができないので、画像のアップロード先は別に用意する必要があります。プラグイン使ってAWSをストレージとして利用するとか。JAWS九州の勉強会に二回ほど参加して、Amazonのエバンジェリスト玉川さんの話とか聞いてAWS使わないと来年の今頃は失業してそうな空気を感じ取ったのでそのAWSにも手を出してみたいですね。

まとめ

Lokka、プラグインが簡単に作れるので本体のロジックにほとんど変更を加えることなくいろいろできて楽しいです。Sinatraベースなので困ったことがあったらSinatraのドキュメントを見ると大体なんとかなりそうな感じがします。リストカット感覚でブログ作ったり消してる人におすすめです。

| @Mac/iPhone

Google Chromeの拡張機能に、Chrome Keyconfig ってのがあります。これはMinibuffer + LDRizeとまではいかないまでも似たような機能を提供してくれるエクステンションで便利に使っていたんですけど、最近、一旦Google Chromeを終了すると前回使用時に変更した拡張機能設定項目の内容が読み込まれないという不具合が発生するようになり、非常に不便でした。

Chrome KeyconfigとTberarelooの組み合わせで、Firefox + Greasemonkey + Minibuffer + LDRize + Reblog Command とほぼ同様の快適さでTumblrが閲覧できるようになるわけでして(Google ChromeでFirefoxのようなReblogしまくれる環境を構築する - Syoichi's Tumblr)、毎回Tumblr閲覧時にChrome Keyconfigの設定画面を開いて設定を変更するのは面倒くさいこと極まりありませんでした。

ちょっと調べてみたところ、以下のような原因でChrome Keyconfigの設定項目の変更内容が反映されないようです。すなわち、Chrome Keyconfigの設定項目の内容を保存しているDBの "ItemTable" というテーブルに "Config" という key を持つレコードと "Keyconfig" という key を持つレコードがあって、設定項目の変更内容は "Keyconfig" に保存されるけどChrome KeyconfigはGoogle Chromeを一旦終了して再起動すると "Config" の方を読みに行っちゃう、ということらしいです。

したがってChrome Keyconfigの設定内容を保存しているSQLite3のDBを直接開いて編集してやればよいわけですね。"Config" という key を持つレコードの value を "Keyconfig" の値で上書きしてやればよい。上記リンク先ではWindows環境で、SQLiteを編集するソフトを使って値を変更する方法が紹介されていますが、Macでは以下のコマンドで行けます。

cd ~/Library/Application Support/Google/Chrome/Default/Local Storage  
sqlite3 chrome-extension_okneonigbfnolfkmfgjmaeniipdjkgkl_0.localstorage "update ItemTable set value = (select value from ItemTable where key = 'Config') where key = 'Keyconfig';"
{: .console }

よろしければお試し下さい。