他にもっと作るべきものあると思うんですが、ちょっとこのブログに必要だったのでLokkaのHoptoadプラグインとNew Relic RPMプラグインを作りました。
Hoptoad
Hoptoadは僕も大好きなshouldaやfactory_girlやpaperclip等のライブラリも作っているthoughtbotのサービス。アプリのエラーを管理するサービスです。最近iOSアプリのエラーにも対応してみたいです。
New Relic RPM
New Relic RPMはアプリのパフォーマンスを監視してくれるサービスです。
プラグイン
プラグイン一覧にHoptoadとNew Relic RPMが増えました。
New Relic RPMの方は特はHerokuの場合、Addonを入れただけでプラグインが存在すれば動きますが、HoptoadはAPIキーを上記の設定画面で入力する必要があります。
Herokuの場合、Addonはそれぞれ下記で簡単に追加できます。
% heroku addons:add hoptoad:basic
% heroku addons:add newrelic:bronze
Google Analytics, Hoptoad, New Relic RPMの三つをこのブログに入れてみてわかったことは、1日250PVぐらいしかないのに、レスポンスに1〜3秒ぐらいかかっていて、特に不具合は発生してないが、Herokuから"Backlog Too Deep"のエラーが130も起きてるとのメールが来ることです。
2dynosにしたら$36/monthかかるんですが、性能はあんまり期待出来そうにありません。
先日、日曜日だけど決算のための経理処理があったのでオフィスに行きました。machidaさんもたまたまお客さんと打ち合わせをやってました。
お客さんも帰られて、僕も経理処理が一段落付いたので何となくソファに深く座っているとmachidaさんが「コレありましたよ」といってチータラ(チーズを鱈で挟んだアレ)をテーブルの上に置きました。
数秒、微妙な間が・・・。
machidaさん:「ビール、飲みたくないですか?」
僕:「んーーーーー、どうしようかなーーーー」
machidaさん:「この時のために・・・あるのかもしれないですよ?」
僕:「ビールって、この時の為にあるのかもしれないですね・・・?」
美味かったです・・・。
なんだかんだでMac使い始めてから1年半ぐらい立ちますが、WebサービスやLinuxのアプリばかり使っていてMacのGUIアプリって全然詳しくなっていません。
ググって出てくるMacアプリ紹介系のエントリーだと僕らプログラマーが使うアプリとちょっと嗜好が違ってたりして、Macのプログラマーは実際どんなアプリ使ってるのか気になってました。
MAKES THISのパクリリスペクト元である、ナードな人達にどんなハードとソフト使ってるのかのインタビューを集めたサイト、THE SETUPに我らがイケメン大王defunktことChris Wanstrathが登場したのをきっかけに、プログラマーが実際に使ってると言っているMac GUIアプリを8個選んでみました。(1byte的な意味で)
Aquamacs
テキストエディタ。フリー。
Carbon Emacs自体Common Lisp勉強時しか使ってなかったので詳しい使用感はわかりません。イケメン大王も使ってるらしいから使わなきゃですね?
LaunchBar
ランチャー。€24。
"terminal"でターミナル.appが出るのがSpotlightより良かったです。デフォルトのショートカットがUSキーボードの日本語変換と同じCmd+SPACEなのでビビる。
Caffeine
指定した時間MacをSleepしないようにするツール。フリー。
ちょっとだけ嬉しいツール。
Arq
Amazon S3にバックアップするツール。$29。
万が一家が高波に攫われたりしたらTimeMachineも危ない。ディザスター系障害にも備えたい方へ。
Soulver
スプレッドシートよりスマートな計算ソフト。$24.95。
この妙な使用感は一見の価値あり?意外にもUIは日本語対応しててビビりました。
Acorn
ペイント系画像編集ソフト。$49.95。
プログラマーなのでPhotoshopを買うほどでもないけどGIMPは辛い・・・という方、まあ僕なんですが、そういう人には良さそうです。もうちょっと使ってみて問題なければ買ってみます。
Divvy
ユニークなUIのウィンドウ管理ツール。$14。
升目を選んで設定する面白いUIです。ショートカットも設定出来るし使い易いですね。
Skitch
スクリーンキャプチャ。フリー。
お馴染みのツール。Webサービスと連携してるところ、ウィンドウの背景を指定したり、影の有り無しを選べたりするところが便利です。
herokuのpg_dump.sqlしかバックアップが無い状態からDBを復旧させるため、適当なpostgres環境が必要になったんですが、$ brew install postgresql はv9.0とか未来的な感じが面倒そうだったので簡単にVirtualBoxの仮想環境が作れるという噂のVagrantを使ってみました。
Vagrantとは?
VirtualBoxの仮想環境をCUIから操作するツールです。数回コマンドを叩くだけで環境が作れるのでとても便利。rubyで書かれたシンプルな設定ファイルを元に面倒な仮想環境構築を自動化してくれます。
VM自体はVagrantfileという設定ファイルで設定し、VMの中身はchefで設定するという感じです。僕はchef使ったこと無いので今回はVM作成したあとはsshで入ってpostgresをインストールしちゃいました。それだけでもOSのCDイメージ落としてきて、インストールして・・・って面倒だったのが簡単になったし、バックグラウンド動作してくれるし、環境がキモくなったらすぐ削除して作り直せるのが精神衛生上良いですね。
Ubuntu 10.04 (Lucid Lynx) 環境を作る
$ gem install vagrant
$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box
$ vagrant box list
lucid32
OSイメージをダウンロードするので結構時間かかります。lucid32ってのがbox名です。
$ mkdir env
$ cd env
$ vagrant init lucid32
create Vagrantfile
$ ls
Vagrantfile
適当なディレクトリを作ってvagrant initでVagrantfileを作ります。RakefileとかCapfileとかGemfileとかあるので分かると思いますが、このディレクトリで実行するvagrantコマンドがこの設定ファイルを参照します。
# Vagrantfile
Vagrant::Config.run do |config|
config.vm.box = "lucid32"
end
$ vagrant up
vagrant upで同ディレクトリのVagrantfileを元にVMイメージを作ってバックグラウンドで起動します。(2回目からは単に起動します)
$ vagrant ssh
Warning: Permanently added '[localhost]:2222' (RSA) to the list of known hosts.
Linux vagrantup 2.6.32-24-generic-pae #39-Ubuntu SMP Wed Jul 28 07:39:26 UTC 2010 i686 GNU/Linux
Ubuntu 10.04.1 LTS
Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/
Last login: Wed Aug 11 17:42:46 2010
vagrant sshでVMにvagrantユーザーでsshで接続します。(デフォルトではlocalhost:2222をVMの22にforwardします)
sudoできるので後は普通のubuntuです。通常、設定はchefでやるみたいです。
忙しい人のためのVagrant
これだけだと何がどうなってるのか解かり辛いのでもう一個環境を作ってみます。
$ mkdir env2
$ cd env2
$ vagrant init lucid32
$ vagrant up
この状態でVirtualBoxの設定画面を見てます。
ちゃんと2個のVMが実行中です。何にも設定してないですが実際はどうなってるんでしょう?vagrant haltでVMを停止して設定を見てみます。
$ tree ~/Library/VirtualBox/HardDisks
/Users/komagata/Library/VirtualBox/HardDisks
├── lucid.vmdk
├── lucid_1.vmdk
└── windows_xp_ie6.vmdk
HDDイメージはそれぞれ別々に作ってくれています。
% tree ~/.vagrant
/Users/komagata/.vagrant
├── boxes
│ └── lucid32
│ ├── Vagrantfile
│ ├── box.mf
│ ├── box.ovf
│ └── lucid.vmdk
├── logs
└── tmp
box(CDイメージとVMのデフォルト設定)の方は共通です。
$ vagrant destroy
$ cd ..
$ rm -rf env2
$ ls ~/Library/VirtualBox/HardDisks
lucid.vmdk windows_xp_ie6.vmdk
vagrant destroyで綺麗に消えるので気軽に作成・削除が出来ます。
作りがシンプルで気に入ってしまいました。当初の目的だったpostgresはデータを救い出したあと要らないのでVMごと消してしまいました。そのぐらい気軽に環境が作れるところがいいですね。
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
標準ライブラリでこんなに簡単に書けるとは知らなかったです・・・。