Lokkathon #1でプラグインで管理画面を作れるようにしました。

サンプルとしてGoogle Analyticsのプラグインを作りました。

管理画面の作り方

komagata [p0t] - Lokka

管理画面からIDともしあれば、サブドメインを入力できます。(@nkmrshnさん作)

module Lokka
module GoogleAnalytics
def self.registered(app)
app.get '/admin/plugins/google_analytics' do
haml :"plugin/lokka-google_analytics/views/index", :layout => :"admin/layout"
end

app.put '/admin/plugins/google_analytics' do
Option.tracker = params['tracker']
Option.tracker_dn = params['tracker_dn']
flash[:notice] = 'Updated.'
redirect '/admin/plugins/google_analytics'
end

app.before do
tracker = Option.tracker
if !tracker.blank? and ENV['RACK_ENV'] == 'production' and !logged_in?
dn = Option.tracker_dn
tracker_script = ""
(snip...)
content_for :header do
tracker_script
end
end
end
end
end
end

管理画面を作るプラグインのコードはこんな感じです。管理画面のURLを '/admin/plugins/プラグイン名' にすると、プラグイン一覧のプラグイン名から自動的にリンクが張られます。

komagata [p0t] - Lokka

/admin/〜というURLには自動的に認証が係るので、プラグイン内で認証を気にする必要はありません。

テンプレートへの挿入

テンプレートの中にはheader, footerという外部から何かを挿入できるポイントがあります。(テーマ側でこのheader, footerが無い場合は何も起きません)

要はyieldなので、プラグインの中からそれぞれの場所にcontent_forしてあげればプラグインからテンプレートにタグを挿し込むことができます。

content_for :footer do
'<p>created by unk</p>'
end

この仕組を使えばjavascriptを使ったプラグインなどが簡単に作れそうです。

Lokkathon #1でLokkaをgem化しました。

$ gem install lokka

lokkaコマンドが入ります。

$ lokka
== Sinatra/1.1.0 has taken the stage on 9646 for development with backup from WEBrick
[2010-11-22 17:19:23] INFO WEBrick 1.3.1
[2010-11-22 17:19:23] INFO ruby 1.8.7 (2010-08-16) [i686-darwin10.4.3]
[2010-11-22 17:19:23] INFO WEBrick::HTTPServer#start: pid=8950 port=9646

デフォルトのポートは9646(苦しむ)番になりました。

あくまでプラグインデベロッパーのテストを書くのを簡単にするためと、プラグイン同士の依存関係解決のためにgem化しただけで、ユーザーのインストール方法は変わりません。(zip解凍する)

Lokkathon #1は何と定員(1名)の約倍の人数が押しかけ、大盛況の内に幕を閉じました。っつーか意外と真面目にモクモクと作業しちゃいました。毎月1日をリリース日と決めて、毎月開催してもいいかなと思いました。

月曜日にHeroku-jpの飲み会?に行くのでHerokuネタを。

Herokuを使うには必ず鍵が必要。ちょっと試したいって人には敷居が高いので、使い捨ての鍵作るサービスを作ってみました。

DISPOSABLE KEYS

DISPOSABLE KEYS

GENERATE KEYS押すと、

DISPOSABLE KEYS

鍵が表示される。それぞれ指定の場所に適当なエディタでファイルに保存すればいい。

ソースコード:komagata's disposable-keys at master - GitHub

私有鍵は私有するから安全なのであって、他人に作らせたら意味が無い。あくまで使い捨て用途にどうぞ。1024bit、RSA、パスフレーズ無しで、コード的には下記の2行です。

@private_key = OpenSSL::PKey::RSA.new(1024)
@public_key = @private_key.public_key

標準ライブラリでこんなに簡単に書けるとは知らなかったです・・・。

% irb -rrubygems
>> require 'rack'
=> true
>> Rack::Mime::MIME_TYPES['.csv']
=> "text/csv"

ここにある。

疑問

「忙しい」ことを誇らしげに吹聴する人(ミサワ)と、恥として黙っている人(非ミサワ)がいる。これらは正反対の反応である。何故だろう。

仮定

両者の違いは職能に「スケジューリング」が含まれているかどうかによって生じる。

理由

「忙しい」とは「スケジューリング」が機能していない状態のことである。(職務の果たす役割という意味での)職能にスケジューリングが含まれる職業・役職(管理職等)において「忙しい」とはイコール任務遂行能力の欠如である。

職能にスケジューリングが含まれない職業・役職(作業者等)において「忙しい」とは想定以上に自らの職能が必要とされている状態である。

後者は思春期においては、自己承認欲求を良く満たすため、露骨に発露する。前者においては自己の思春期の未熟さへの嫌悪が「忙しさ」への嫌悪に直結する。

関連

pluginの事を考えるとbeforeが複数回定義されてもちゃんとそれぞれが実行されないと意味が無い。なので試してみた。

komagata's double_before at master - GitHub

require 'rubygems'
require 'sinatra'

before do
@name = 'Masaki'
end

before do
@name += ' Komagata'
end

get '/' do
"Hello, #{@name}"
end
require 'rubygems'
require 'test/unit'
require 'rack/test'
require 'shoulda'
require './double_before'

class DoubleBeforeTest < Test::Unit::TestCase
include Rack::Test::Methods

def app
Sinatra::Application
end

context "Access pages" do
should "show index" do
get '/'
assert_equal 'Hello, Masaki Komagata', last_response.body
end
end
end
% ruby double_before_test.rb 
Loaded suite double_before_test
Started
.
Finished in 0.030489 seconds.

1 tests, 1 assertions, 0 failures, 0 errors

おお、問題無い!これは期待してなかったので嬉しいですゾ!(@ムック)

明日土曜日・日曜、待ちに待った大イベント、Lokkathon #1が開催されます。気になる開催概要は下記です。

Lokkathon #1

  • 日時 / DATE: 2010/11/20 10:00 to 19:00
  • 定員 / LIMIT: 俺
  • 会場 / PLACE: FJORD, LLC
  • URL / URL: http://fjord.jp/
  • 内容 / DESCRIPTION: Lokka本体・プラグイン・テーマを作る。

ああ、そうだよ。思いつきだよ。ダジャレだよ。

「どうせ大して変わらねえだろう」

という軽い気持ちでUSキーボードのパソコンを買ったんですが、違いの大きさに苦戦中です。USキーボードとvimについて現在の疑問を羅列してみました。

日本語変換キー

USキーボードではCmd+Spaceが日本語変換キーです。これは配置からいってどうにも押しづらい。KeyRemap4MacBookのCommand_R to Command_R(+ When you type Command_R only, send Command+Space)で右Cmdに割り当ててみましたが、コレ、完全に他のキーを押してない状態で右Cmdを押さないといけないのでかなり使い辛いです。普通みなさん何に割り当ててるんでしょうか?

vimのコロン

USキーボードではコロンはShiftを押す必要があります。vimで使いまくりのコロンが両手必須というのは厳しい。

noremap ; :
noremap : ;

という設定を教わって便利になりましたが、普通どうやってるんでしょうか?

他にもUSキーボード、vimユーザーなら普通はコレやってるぜ!というのがあったら教えていただければ嬉しいです。

photo

MacBook Airの11-inch買いました。

Apple Store Ginzaで

「11-inch USキーボードで一番良いのを頼む」

しました。(これまでは非Proの最初のユニボディMacBook)

量販店と違って、Apple Storeにはカスタマイズ済みのモノを在庫として持ってるそうで、店頭でその場で買えます。(発売当初は無かった)

そもそも僕にとってノートパソコンの最適サイズはこのぐらいなので13-inchはデカかったんですが、PowerBook以来、小さいのが出る様子が全くなかったので「アメリカさんは小さいのなんて要らないんや」と諦めてました。

スペックについてはこれまでのMacBookでもメモリ3GBでスワップすることは殆ど無かったし、CPUが遅いと感じることも無かったのであまり変わらない感じです。ディスクアクセスが必要な場面で速いぐらいです。HDDも以前のMacBookでも128GB以上使ってなかったので特に意識しないで使ってます。

使うアプリがFirefoxとTerminal(今は仕事でXcode)ぐらいなのでWeb系プログラマーはあまりスペックを必要としない人種なのかもしれませんな。(brew install mysqlしたときにFANが回ったぐらい)

オススメっす。

おまけ

buy now!!! on Twitpic

信者乙 > 俺