LokkaのテーマにSlim使えるようにしました。index.slimみたいな。

HTMLのescapeがデフォルトだったりして実践で使ってみると予想してたよりHamlとの違いがありますね。

アイコン出来たらMac版をリリースしてlokka.orgにもドキュメント書こうと思います。

ブログをhtml5にする勇気がまだ無い糞野郎です。

Slimのソースを見てみると、!から始まるディレクティブ?にはdoctypeしか無いように見える。とりあえずこんな感じでしのいでいるが・・・。

% slimrb
| <?xml version="1.0" encoding="utf-8" ?>
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

きんもー!

% vagrant up
Vagrant has detected that you have VirtualBox version 3.2.12 installed!
Vagrant requires that you use at least VirtualBox version 4.0. Please install
a more recent version of VirtualBox to continue.

The Vagrant 0.6.x series supports VirtualBox 3.2, so if you're stuck with that
version, then please use the 0.6.x series of Vagrant.

Any earlier versions of VirtualBox are completely unsupported. Please upgrade.

VirtualBox 3.2系から4系へは自動アップデートが行われないので手動でアップデートする必要がある。忌々しい東京三菱UFJ銀行(法人版)とIE6の為に確保してあるWindows XP無印はアップデートしても問題無く動きました。

必要になるたびにググってる気がするので。

require 'webrick'                                                                                                                                                 

include WEBrick

class HelloServlet < HTTPServlet::AbstractServlet
  def do_GET(req, res)
    res['Content-Type'] = 'text/plain'
    res.body = 'hello'
  end
end

s = HTTPServer.new(:Port => 8080)
s.mount('/', HelloServlet)
trap(:INT){ s.shutdown }
s.start

:Portが大文字なところが注意。

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から%(パーセント)取っただけですわ・・・。

たこ焼き仮面ことひげの山男こと@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で動くかもしれません。

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

% ls
% GEM_HOME=`pwd` gem list > /dev/null
% ls
cache          doc            gems           specifications

なにそれこわい。

gem environmentとかでも同様。

Snippet

LokkaにSnippet(スニペット)を追加しました。

Snippetとはテンプレート間で共有したい部品を入れておくものです。Pageも同じ用途に使えるのでWordPressではそれが常套手段っぽいですが、@machidaさんが

「PageはURLが存在するので直接アクセスできるのが気持ち悪い」

と言っていたのでSnippetという名前で別に用意しました。

komagata [p0t]

このブログで言えば、右のプロフィールの部分でSnipetを使っています。今まではPageの機能を使っていたので、プロフィール単体がURLを持っているので妙なページが存在することになっていました。

Snippetは好きに名前を付けられるのでテンプレ内では下記のようにかけます。

<%= Snippet.first(:name => 'about').body %>

モデルのユーティリティメソッド

今回、各モデル用にユーティリティメソッドを用意しました。そのユーティリティメソッドとは"そのクラスで一番使いそうなメソッドをクラス名と同名のメソッドとして用意したもの"です。それを使えば上記は下記のように書けます。

<%= Snippet('about').body %>

要はこれです。

Ruby - クラス名と同名の関数にデフォルト動作をさせるパターン - komagata [p0t]

同じように他のモデルにも用意されています。

<h2><%= Page('inquiry').title %></h2>

DataMapperのAPIを使えば何でも取れますが、テンプレートがスッキリするかなと。