DataMapperのdefault_scopeのマージされ方がおかしい。

class Entry
  default_scope(:default).update(:draft => false)
end
>> Entry.count
SQL: (0.000099) SELECT COUNT(*) FROM "entries" WHERE ("draft" = 'f'))
=> 1
>> Entry.count(:draft => true)
SQL: (0.000099) SELECT COUNT(*) FROM "entries" WHERE ("draft" = 'f' AND "draft" = 't')
=> 0

ActiveRecordでも多用していた機能なので困ったなと思ってたら・・・。

#1202 Overwriting default_scope conditions is broken - DataMapper - datamapper

It's a private API so the ticket should be treated more like a suggestion to make the default_scope a public method and of course make it work correctly.

default_scopeはprivate APIなのでbugではなくsuggestion扱いだそうです。ticketのstateもholdになってました・・・。

tikushoo

"受動的なコミュニケーションツール"の件はとりあえず"非同期コミュニケーション"と"私書箱"の二つの問題に分けて考えることにする。まずは"非同期コミュニケーション"の方。

同期コミュニケーションが仕事に与える問題は"総量は同じでも小分けにすると質が下がる"というところ。Json Friedは"睡眠"のメタファーを紹介している。"都市部と高速道路での燃費"のメタファーでもいいかもしれない。

要は会話や電話を辞めてメールを使えということ。ついでにTwitterやSkypeチャットやGrowlも非同期、要するに1日1回まとめて処理すればいい。

そんなモノは簡単だ。メールもTwitterもフィードリーダーもSkypeも朝一回確認したら終了して使わなければ良い。でも実際にはなかなかそうはならないのは何故か。

"受信がデイリーになっても送信は一日何度もある"からだ。

メールを送る時に未読メールを見てしまう。Twitterでメッセージを送るときにTimelineを見てしまう。

「あれ?何をしてる途中だったんだっけ?そうだ、仕事のメールを送ろうとしてたんだ。」

これが仕事の妨げになっていることに気付いた。送信と受信(一覧)の機能が一緒になっているのがいけない。メールは完璧な非同期コミュニケーションツールなんだから、送信専用のメーラーがあればいい。

ということで簡単なスクリプトを書いてみた。

% vi ~/bin/ml
#!/usr/bin/env ruby                                                                                                                                              
to = ARGV[0]
body = ARGV[1]
length = 30
subject = body.split(//u)[0, length].to_s
IO.popen("mail -s '#{subject}' #{to}", 'r+') {|io| io.puts body }

gist: 812535 - MTA *sending only*- GitHub

% ml machida@fjord.jp 来週の打ち合わせの場所をGカレンダーに入れときました。

頻繁に送る相手はたいしていないのでshellのhistory補完で十分だ。でもどうせRuby使うなら普通に直接GmailのSMTPにつないでもいいかも知れない。しかしその代わりに伝統的な~/.mailrcとかが使える。

% vi ~/.mailrc
alias komagata komagata@gmail.com
alias machida machida@fjord.jp
% ml machida キムチもって帰りました。超うまかったす。

TwitterやSkypeも上記の様な感じの送信専用が欲しい。

関連:受動的なツール - komagata [p0t]

Railsを追いきれる自信が無かったから。Rails文化に引っ張られてアプリが一生完成しない気がしたから。あとアプリとしては問題無いのにベースのRailsのバージョンが低いだけで残念っぽくなってるアプリ(Redmineとか)を見たから。

半年やってみてSinatra面倒クセー!っていっぱいあったけど、(Sinatra本体の)ソースが短いので完全把握できる掌握感は独自のOSS作る上で心強かった。

いつもググってる気がするのでシリーズ。

require 'rubygems'                                                                                                                                               
require 'active_record'                                                         

ActiveRecord::Base.establish_connection(
  :adapter  => 'postgresql',
  :host => 'localhost',
  :username => 'komagata',
  :password => '',
  :database => 'foo',
  :port => 5432
)

class Post < ActiveRecord::Base
end

puts Post.first.name

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もオモロイですけどね!