Lokkathon #1でプラグインで管理画面を作れるようにしました。
サンプルとしてGoogle Analyticsのプラグインを作りました。
管理画面の作り方
管理画面から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/プラグイン名' にすると、プラグイン一覧のプラグイン名から自動的にリンクが張られます。
/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を使うには必ず鍵が必要。ちょっと試したいって人には敷居が高いので、使い捨ての鍵作るサービスを作ってみました。
GENERATE 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ユーザーなら普通はコレやってるぜ!というのがあったら教えていただければ嬉しいです。