Express のテンプレートエンジンとして haml + CoffeeScript を使う

Express の標準テンプレートエンジンは jade ですが、あの html の閉じタグを毎回書くのがぼくは好きになれません。
そこで、 haml をテンプレートエンジンとして利用するようにしてみようと思います。


これについては Express のガイドページにもやり方が書いてあります。
http://expressjs.com/guide.html

まず、 hamljs をインストールします。

$ npm install hamljs

そして Express を使うときに設定を行います。

# app.coffee
app = require('express').createServer()
app.register '.haml', require('hamljs')

閉じタグを書かなくてすむのはとてもすばらしいですね!


さて、これで haml を利用できるようになったわけですが、テンプレート中に書く JavaScript 部分も CoffeeScript を使ってお手軽に書けるようにしてみたいと思います。


haml には filter という機能があって、独自にコンパイラを指定できます。
この辺りは rubyhaml でも同じですね。

# app.coffee
app = require('express').createServer()

coffee = require 'coffee-script'
hamljs = require 'hamljs'

hamljs.filters.coffee = (str) ->
  @javascript coffee.compile(str)

app.register '.haml', require('hamljs')

こうしておくと、haml のテンプレート中で CoffeeScript を書けるようになります。

%head
  :coffee
    jQuery ($) ->
      alert "Generated from 'CoffeeScript'!"

すっきりと書けますね!
すばらしい!!

C言語の勉強

C言語の勉強をしようと思って買っていた本があったのですが途中までやって中断してしまっていたので、
最初からちゃんと勉強しなおすことにしました。

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道


ちゃんと人から見えるとこで勉強した方が良いと思ったので、 GitHub にあげてみました。
https://github.com/tricknotes/normal-linux-programing


とりあえず、一冊写経するところから!

rack でカレントディレクトリを公開する

rack でカレントディレクトリを公開したいときの config.ru の書き方をいつも忘れてしまうので、自分用に備忘録を残しておきます。
https://gist.github.com/1109610.js?file=config.ru


ルートパスへのアクセスでディレクトリの一覧が出したければ1行目は不要ですし、 public ディレクトリ以下を公開させたい場合には、2行目を書き換えてやればOKです。

で、これを Heroku にデプロイしようとしたときにハマりました。

push して サーバが起動するところまでは確認できるのですが、アプリケーションにアクセスしようとすると、エラーメッセージが表示されます。

2011-07-27T15:40:09+00:00 app[web.1]: !! Unexpected error while processing request: type mismatch: Array given


どうやら、Heroku でデフォルトで利用される Rack のバージョンが古く、 Rack::Static が受け取れるオプションの形式が最新の Rack のものではないのが原因のようでした。

なので、 Gemfile も一緒にデプロイするとよいです。
https://gist.github.com/1109610.js?file=Gemfile


Heroku で利用される Rack のバージョンって、公式に発表されてないんですかねぇ。

MacでCoffeeScriptを簡単にインストールする

久々にHemebrewをアップデートしてみました

$ brew update

すると更新一覧の中に見慣れた名前がありました。

==> The following formulae were updated:
coffee-script

おぉっ!?
今までみたいに、 node → npm → coffee-script のインストール手順を踏まなくてもいいの!?

というか、どんな風にインストールされるのか気になったのでさっそく試してみました。


まずは、元から入れていたCoffeeScriptを削除します。
(CoffeeScriptをインストールしていない場合は不要)

npm uninstall -g coffee-script


そしてすかさずHomebrewでインストールします。

brew install coffee-script


すると Node.js のインストールが開始されました。

==> Downloading http://nodejs.org/dist/node-v0.4.9.tar.gz######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/node/0.4.9
==> make install
==> Caveats
Please add /usr/local/lib/node to your NODE_PATH environment variable to have node libraries picked up.
==> Summary
/usr/local/Cellar/node/0.4.9: 72 files, 7.6M, built in 4.6 minutes
==> Downloading https://github.com/jashkenas/coffee-script/tarball/1.1.1
######################################################################## 100.0%
==> ./bin/cake --prefix /usr/local/Cellar/coffee-script/1.1.1 install
==> Caveats
coffee-script can also be installed via `npm install coffee-script`.
This has the advantage of supporting multiple versions (of any Node libs)
at the same time.

Since coffee-script syntax changed pretty drastically between 0.7.2 and
0.9.x, you may want to install it via npm instead.

This formula may be retired from a future version of Homebrew.
==> Summary
/usr/local/Cellar/coffee-script/1.1.1: 34 files, 496K, built in 2 seconds

ふむふむ。なるほど。

Node.js のインストールが完了すると、CoffeeScriptがリポジトリから直接インストールされます。


npm 経由でインストールされていないのでアップデートする際は手動で行う必要がありそうですが、
ちょっとにCoffeeScriptを試してみたい、という場合にはとても楽だと思いました。

OSC 2011 Hokkaidoに参加しました

2011.06.11 に、オープンソースカンファレンス2011北海道に参加してきました。


OSCはぼくが初めて参加したIT系のイベントで、毎年参加することを楽しみにいます。そして今回で参加は3回目。


今回、発表の機会をいただけたのでNode.jsについて発表をさせていただきました。
Node.jsっていう名前は聞いたことあるけど、あまり触ったことがない人向けの内容でお話させてもらいました。


今回、LOCAL企画セミナーということで、次のようなテーマで発表しました。

  • 「破」 ”キーワードは聞いたことがあるけど、実際それってどんなものなの?”



ブレストに付き合ってくれた @ 、応援してくれた @ 、レビューに付き合ってくれた @ 、 @ 、 @ ありがとうございました。


そして、この素晴らしいイベントを開催してくださったスタッフのみなさま、ありがとうございました!!

EnvjsがRuby1.9で動かない件

テスト用に capybara-envjs を使ってみようと思ったのですが、上手くインストールできませんでした。

js_land_proxy.h:11:18: error: node.h: No such file or directory


いろいろ調べたところ、githubに答えがありました。
https://github.com/smparkes/capybara-envjs/issues/48


ruby1.9はサポートしていないし、しばらくサポートの予定もないとのことでした。


rails3+envjsの組み合わせで、JSのテストをRubyで書きたい場合は、Ruby1.8.7しかないみたいです。
Ruby1.9でさくっとJSのテストを書きたいんだけど、うーん、何かよい方法はないものかなぁ。

Sapporo.coffee#1を開催しました

Sapporo.js-2011.05.08の裏企画としてSapporo.coffee#1を開催しました。


今話題の、CoffeeScriptの勉強会です。

勉強会と言ってもあまり固い感じではなく、コーヒーを飲みながらCoffeeScriptについて語らう感じで行いました。


きっかけは @mrkn のこのツイート。

今日の内容としては、CoffeeScriptが何かっていうところから始まって、インストール方法の解説、基本的な書き方やJavaScriptとの比較、CoffeeScript自体の簡略記法を紹介をしました。


本家サイトに載っているoverviewをざっくりと見ていったのですが、だいぶ楽にJavaScriptが書けて幸せです。


CoffeeScriptはJavaScriptの邪悪なパーツを上手く隠蔽してくれていて、しかも簡単に書けるのでほんとにすばらしいです。
Rails3.1からはデフォルトでCoffeeScriptが導入されるという話もあるので、今後はもっと使われていくんじゃないかなと思います。


今回は多くの方にご参加いただき、ありがとうございました!

今後は、Sapporo.jsとは独立して開催していく予定なので、ご都合つく方はぜひぜひお越し下さい!