Sinatra で view を rspec でテストする

Sinatra::Application.new! でオブジェクトを生成してから、Sinatra::Application#erb を使ったらレンダリングできました。

have_selector は Webrat::Matchers に含まれるマッチャです

s3cmd で東京リージョンを指定する

「--bucket-location」に「ap-northeast-1」を指定すると東京リージョンを利用できます。

s3cmd mb s3://bucket-at-tokyo --bucket-location=ap-northeast-1

MacPorts や apt-get で入れると 0.9 系が入ることがあるようですが、US/EU 以外のリージョンを指定できるようになったのは 1.0.0-rc1 からなので注意が必要です。

http://s3cmd.org/

rvm + whenever + capistrano するときの schedule.rb の設定

rvm で project rvmrc を使いながら開発し、capistrano でデプロイ、whenever で cron を管理したときの config/schedule.rb の設定の話です。

capistrano + whenever だと「config/deploy.rb」に

require "whenever/capistrano"

と書くだけでデプロイ時に cron を更新してくれて便利なのですが、schedule.rb に

runner 'Model.job'

と書いたとき、デフォルトでは、

/bin/bash -l -c 'cd /path/to/project/20110303000000 && script/runner -e production '\''Model.job'\'''

のようになるため、デプロイの度にに新しいディレクトリに cd して trust するかどうかの確認がでてしまし、実行できません。

いろいろ試行錯誤した結果、

set :path, ENV['PWD']

と書いておくと、

/bin/bash -l -c 'cd /path/to/project/current && script/runner -e production '\''Model.job'\'''

と出力できるので、現在では /path/to/project/current をあらかじめ trust しておくという方法を採用しています。

サイボウズ Office での HTML メールの文字化けを回避する

サイボウズ Office で HTML パートを開こうとすると、文字コードShift_JIS に変換したものが渡されるので、HTML ヘッダで charset を指定していると文字化けしてしまいます。

<meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp">

指定しないでブラウザの自動判別に期待するしかないようです。

<meta http-equiv="Content-Type" content="text/html">

サイボウズ Office 8.1.2 で確認しました。

リモートにブランチを push してそのままトラックする

"git push" に "-u" あるいは "--set-upstream" を付けると、push 先のブランチをトラック (デフォルトで push や pull の対象に) するように設定されます。

git push -u origin master
git push --set-upstream origin new_feature

バージョン 1.7 以降で使えると思います。

htmlcomplete.vim で発生するエラーを修正する

Vim絶対パスで指定された CSS ファイルを含む HTML ファイルを編集していると、id や class の値をオムニ補完した場合に以下のようなエラーが発生することがあります。

Error detected while processing function htmlcomplete#CompleteTags:
line  304:
E121: Undefined variable: classlines

この問題は「$VIMRUNTIME/autoload/htmlcomplete.vim」の 288 行目辺りにこんな感じで 1 行追加すれば回避できるようです。

diff -r 94694351f592 runtime/autoload/htmlcomplete.vim
--- a/runtime/autoload/htmlcomplete.vim Fri Oct 15 20:20:05 2010 +0200
+++ b/runtime/autoload/htmlcomplete.vim Sat Oct 16 12:02:56 2010 +0900
@@ -285,6 +285,7 @@
                                let cssfiles = styletable + secimportfiles
                                let classes = []
                                for file in cssfiles
+                                       let classlines = []
                                        if filereadable(file)
                                                let stylesheet = readfile(file)
                                                let stylefile = join(stylesheet, ' ')

「NSEG 第1回勉強会」に参加しました

2010年3月13日に開催されたNSEGに参加してきました。第1回の今回は技術をテーマにしたLT(LongTalk)大会として6人が発表を行ないました。

NSEGの参加対象はソフトウエア技術者(と卵を含む)と幅広く設定されているのですが、今回のそれぞれの発表も「組み込み系」や「業務系」または「ツールの話」など幅広く、普段接することのない分野の話を聞くことのできる機会になったのではないかと思います(私はそうでした)。

資料

発表の様子がニコニコ動画にアップされています。

発表の流れは id:suno88 さんによって詳しくまとめられています。


以下、それぞれのLTについての感想です。

「ET ロボコン面白いよ! 」(小林 思無邪さん)

ETロボコン、面白そうでした。

ロボットコンテスト」と聞くとまずは「工夫を凝らしたロボット達を戦わせる競技」というイメージがあり、ソフトウェア技術者には敷居が高そうだなと思っていた部分もあったのですが、ETロボコンはそうではなく、「指定されたロボットをプログラムでコースを走行させて、プログラムの設計、走行タイム、走行中に取得したポイント数、を競う競技」とのことで、確かに、これはソフトウエアのコンテストだと序盤で思い直しました。(組み込みのソフトウェアの難しさはあると思いますが。)

ETロボコンで勝つために必要な要素や、キレた人の走行方法の紹介などいろいろ面白い話がありましたが、私が一番強く感じたのは、モデル(実際に動作するソフトウェア付きで)を評価される機会があるというのはいいな、というところでした。

またモデリングの技術も年々変わってきているということで、自分もいろいろ勉強しなきゃいけないなと思わされました。

「ITで幸せになる」(春原 宏保さん) 資料

「幸せ」という言葉が出てくると、まずは眉に唾をつけないとと思ってしまう今日この頃ですが、この発表で紹介された「幸せ」は具体的で、聞いていて実感のできるものでした。

お話の中で紹介されたタイプの「カスタマイズされた業務系アプリ」は特に使う人が限られているケースが多いので、カスタマイズがつぼにはまった時は特に爽快だろうなと思います。「印刷物に2穴パンチ用の三角印を付ける」とか、丁寧さがすごいです。

また最後の「定刻主義」を貫くために必要な要素として、「運」と「実力」を挙げていらっしゃったところも素晴らしいと思いました。「実力をつけることも必要だ」と言えるところと、そう言える自信をもって仕事をしているところが素晴らしいです。

Ajax開発で学んだ高速化手法」(you_got さん)

題名には現れていないのですが、実は「(IE6で)Ajax開発で学んだ...」という内容で、2010年としてはレガシーな環境で苦労された経験談も交えながらの高速化手法のお話でした。

話の中に、最近傍点を探すためにkd木を作って探索というのがあったのですが、アルゴリズムの話はソフトウェア技術者であれば幅の広い共通項になりえるので、こういう話はいいなと思いました。

また質問でも突っ込まれていた「技術的に分からないことを人力検索はてなで聞いてみる」という点は、手法としては自分ではこの先も使わないと思うのですが、「ソーシャルなツールを使いこなすセンス」としては現代的ですごいなと感じました。

「IT勉強会で使うITツール」(大日向 大地さん) 資料

各地、各種のIT系の勉強会で活躍をされている大日向さんのお話でした。

Ustreamは「コンピューター+家電量販店で売っている程度のマイクとカメラ+ネットワーク」で簡単に配信できるとのことでした。(iPhoneでも可) 確かに最近の勉強会ではUstream配信は当たり前のように行われていますし、また個人的にもその恩恵にあずかっているので、これは抑えておきたいところだと思いました。

しかし、(発表の内容とは離れてしまいますが、)配信自体は簡単だというものの、NSEGのUstream配信が安定してできているのは、第0回からずっとヘッドホンを装着して調整をしながら参加している大日向さんのおかげだと思います。

「とりあえずGit」(天野 卓さん) 資料

これは私の発表で、最近オープンソース系のプロジェクトで特に勢いのあるバージョン管理システムであるGitの紹介でした。

今回の勉強会にはいろいろな方がいらっしゃるということで、「バージョン管理システムとは」という話に始まり、「バージョン管理システムの歴史」を辿り「Gitの紹介」へと続くような内容にしました。ゆっくり説明する時間があれば割と面白い話になる内容だった思うのですが、10分の時間で説明するには盛りだくさん過ぎで、あまりよく伝えられなかったかもしれません。

話し方なども含めていろいろ反省点はありますが、改善をしつつ、次回以降も機会があれば発表をしていきたいと思います。

Rubyの黒魔術」(とみたまさひろさん) 資料

RubyMySQLのコミュニティで活躍をされているとみたさんからの、Rubyの(黒魔術的とも呼べる)特徴についての紹介でした。

Rubyには日頃からお世話になっていることもあり 、スライドの内容にいちいち納得しながら聞きました。DSLをこれだけ簡単に作ることができるというのはRubyのとても強い面だなと、とあらためて思いました。ただ強力な反面、使い方を間違えると黒魔術になると。

スライドの作成に使われていた Rabbit も面白そうでした。



LTの感想は以上です。

勉強会主催者と発表者の方々、また参加者の方々、お疲れ様でした。

今後のNSEG

NSEGは今後も月1回のペースで開催する予定です。楽しみです。

しばらくは個人的に忙しくて主催者側に回ることはできないのですが、次々回以降はそちらの方へも参加したいと思っています。