Hamlより過激なSlimを使おうよ。

Sinatra 1.2が待てない野郎もこの通り。

require 'rubygems'
require 'sinatra'
require 'slim'

module Sinatra
  module Templates
    def slim(template, options={}, locals={})
      render :slim, template, options, locals
    end
  end
end

# インデント気になる派には必須の設定
Slim::Engine.set_default_options :pretty => true

get '/' do
  slim :index
end

rails3もslim-rails入れればgeneratorがslim対応。

vimもemacsもsyntaxはextraの中に入ってます。

extra at master from stonean/slim - GitHub

ターミナル — vim — 80×24

まあ、Hamlから%(パーセント)取っただけですわ・・・。

JPNewTechのイベントに行ってビックリした - komagata [p0t]

こんな事書きましたが、そういえば今まで誰にも共感されたことないし、当時かなり衝撃を受けて熱中してたので自分の中では自明のこと過ぎて説明が足りなすぎるかなと思ったのでもう少し詳しく書いてみます。

まず、「XHRでもWebDAV使えるっぽい」っていうエントリーがあって、その時点で、「うお、マジかよ。その発想は無かったわ」って感じです。で、「ってことはもしかして・・・?」ってうっすら。

XMLHttpRequestでWebDAV - snippets from shinichitomita’s journal

で、WebDAVサービス上で動く、HTML+JavaScriptだけで作られたブログエンジンというエントリーでwebdablogという形で僕の様な貧弱一般人(@ブロントさん)にも露骨に分かるソフトウェアの形で公開されました。そのソースコードを読んでビックリしました。

2006年の時点でもWebDAVなんて一昔前の技術で、その存在とかは誰でも知ってたわけでそれを使ってクライアントサイド実装のみでJSONで保存して表示もやるというのが面白かったし、裏技的に見えてHTTPの本質をついてると思いました。

webdav.jsのコードの字面を見ても「そんなに興奮するものか?」って思うかもしれないけど、webdav.jsは単独で公開されたものじゃなくて、上記のwebdablogの中に数あるソースコードのうちの1ファイル。僕が勝手にwebdav.jsだけ取り上げて騒いでるだけなんですが、webdablogのコンセプトも面白かったし、そのコンセプトをwebdav.jsという形に切り出しているのがとてもスマートだと思いました。

どう実装するか?ということより、何を実装するのか?という問題設定とプログラムの粒度の設定がとてつもなくスゴイと思ったのです。

そして、どう実装するか?の部分も力技でゴリゴリと書いてあったら興醒めだけど、全く力の抜けたシンプルでスマートな書き方がしてある。こういうのこそ僕が目指したいコードだと思った訳です。だから一般的に"凄いコード"と聞いて連想する感じとはちょっと違うかもしれません。

「わざわざそんな事言わんでも@stomitaがスゴイことなんてわかっとるわ」

という方もおられるとは思いますが、5年前にそんなことがあったよというお話でした。

JPNewTechのイベントに行ってきました。(@中目黒LOUNGE)

@machidaさんが"黒い画面"のLTをしたり色々な方とお話させてもらいました。

何人かの方と名刺交換させて頂いたんですが、ある方の名刺を見て数秒固まりました。

マッシュマトリックスの冨田 慎一さん・・・・・・・・・ってid:shinichitomitaじゃん!!(失礼)

僕が今まで一番衝撃を受けてリスペクトしているソースコードがid:shinichitomitaさんのwebdav.jsなのです。

「一番尊敬している理想のコードがid:shinichitomitaさんのwebdav.jsなんです!」

などと興奮して話してしまいました。

「みんなにそうやって言ってるんじゃないですか?」

「そうやって人を持ち上げるのが上手い」

って言ってました。

しかし以前ブログにも書きましたがホントなんです。

おしゃれコード - komagata [p0t]

超絶ハックがあるとかjavascriptのパフォーマンスを極限まで引き出してるとかじゃなくて本当にシンプルでスマートなコードなんです。WebDAVの仕様書よりwebdav.js見たほうがよっぽど分かり易かった。HTTPってなんてシンプルでパワフルな設計なんだと400行足らずのコードに衝撃を受けました。

webdav.jsが書かれたのは2006年で、その影響で僕のREST厨時代がしばらく続くわけですが・・・。

ウノウラボ by Zynga Japan: Web APIとしてのWebDAV

ウノウラボ by Zynga Japan: セマンティックウェブのためのRDF/OWL入門のためのRDF/FOAF入門

JPNewTechのイベントレポートのハズがこんな個人的過ぎる内容になってすいません。そういう貴重な体験が出来た素敵なイベントでした。運営に携わった方々、ありがとうございました。

関連:凄いコードについて - komagata [p0t]

Snow Leopard CGIで検索すると日本語の情報が殆ど無かった。最近はCGIなど書かないんだろうか?

apacheの設定

/etc/apache2/httpd.confの396行目のコメントを外す。

    AddHandler cgi-script .cgi

/etc/apache2/users/komagata.confのOptionsにExecCGIを追加する。

    Options Indexes MultiViews ExecCGI

hello.cgi

#!/bin/sh
echo "Content-Type: text/plain\n\n"
echo hello

http://localhost/~komagata/hello.cgi

Snow LeopardのCGI環境は良好だ。

たこ焼き仮面ことひげの山男こと@tenderloveことAaron PattersonさんがRailsのコアチームリストの様なものがRuby本体にないのはイカン!ということでRuby Committersというサイトを作りました。

そこでデザインを募集するためにデザインコンテストを開催しています。KUROIGAMENというプロジェクトを始めた@machidaさんのデザインテロの標的にぴったりということで@machidaさんも応募しています。

デザイン一覧

http://tenderlovemaking.com/entries/

@machidaさんのデザイン

Ruby Committers

締切りは明日。

Issues - tenderlove/rubycommitters.org - GitHub

Issues - tenderlove/rubycommitters.org - GitHub

ここに投票してくれやコラー!

ってのはいやらしいすぎるので冗談ですが、みなさんも応募されたデザイン一覧を眺めて良いと思ったモノに投票したらおもろいかと思います。

僕の見た感じでは、コレコレコレのどれかかなーと思います。@machidaさんのはアクが強いので好き嫌い分かれそうですが、Rubyコミッターの人達のプレミアム感を出すためにヨーロッパの古いホテルみたいな雰囲気にしてるというアイデアが面白いので好きです。MATZILLAもオモロイですけどね!

まだコミットしては無いんですが、LokkaのMac用ビルドを作ってみました。Dropboxに置いてあるので、Macをお持ちの方は記をダウンロード・解凍して起動し、http://localhost:9646/ でLokkaが動いてるかどうか試していただけるとありがたいです。

http://dl.dropbox.com/u/188423/Lokka.zip

特にXcodeをインストールしてない方の情報が知りたい!動いた!とか動かねえ!とかあったら@komagataや#lokkacmsにメッセージいただけるとうれしいです。

多分Snow Leopard、あわよくばLeopardで動くかもしれません。

BSD系ではpgrep, pkill, pfindはproctoolsというパッケージ名だそうです。

% brew install proctools
% pgrep ruby 
77785

rubygemsを見ていて、ubygems.rbって変なファイルがあるなと思って開いたら・・・

# This file allows for the running of rubygems with a nice
# command line look-and-feel: ruby -rubygems foo.rb

lib/ubygems.rb at from rubygems/rubygems - GitHub

ナイスハックwww

homebrewは元々自分のディレクトリ以外を汚さないように出来ているので好きな場所に置いてPATHを通す。

% curl http://github.com/mxcl/homebrew/tarball/master -LO
% tar zxf master
% mv mxcl-homebrew-348d28f ~/homebrew
# ~/.zshrc
export PATH=~/homebrew/bin:$PATH
% ls
% GEM_HOME=`pwd` gem list > /dev/null
% ls
cache          doc            gems           specifications

なにそれこわい。

gem environmentとかでも同様。