こちらでご指摘を貰ってはじめて知ったんですが、
<a href="//example.com">foo</a>
こういう風に書けるのね・・・。
RFC 2396にちゃんと書いてあるらしい。
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
こう書けるのは嬉しいなー。
こちらでご指摘を貰ってはじめて知ったんですが、
<a href="//example.com">foo</a>
こういう風に書けるのね・・・。
RFC 2396にちゃんと書いてあるらしい。
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
こう書けるのは嬉しいなー。
最初からlisp環境には"あきらめが鬼なっていた"vimmerだがclojure環境はスゴイ揃ってる。
<LocalLeader>et
カーソルがあるとこのトップレベルのS式をreplに送る。
<LocalLeader>ef
ファイル全体をreplに送る。
<LocalLeader>eb
VISUALモードで選択した部分をreplに送る。
<LocalLeader>el
カーソルのある行をreplに送る。
<LocalLeader>ep
カーソルのあるカッコ内をreplに送る。
<LocalLeader>rf
ファイルを:reloadフラグを付けて読み込む。
<LocalLeader>rF
ファイルを:reload-allフラグを付けて読み込む。
<LocalLeader>rt
ファイルを:reloadフラグを付けて読み込んで、clojure.contrib.test-isのrun-testsでテスト実行する。
<LocalLeader>me
カーソルのある一番内側のマクロを展開する。
<LocalLeader>m1
MacroExpandと同じだけどmacroexpand-1を使う。(一回だけ展開する奴)
<LocalLeader>lw
カーソルのあるとこのwordのdocを探して表示する。
<LocalLeader>li
プロンプトに任意の文字を入れてdocを探して表示する。
<LocalLeader>fd
入力したパターンを元にdocを探して表示する。(find-doc)
<LocalLeader>jw
カーソルのあるとこのwordのjavadocを外部ブラウザで開く。
<LocalLeader>ji
プロンプトに任意の文字を入れてjavadocを探して外部ブラウザで表示する。
<LocalLeader>sw
カーソルのあるとこのwordのソースを表示する。ソースはCLASSPATHが通ってる必要がある。
<LocalLeader>si
プロンプトに任意の文字を入れてソースを探して表示する。ソースはCLASSPATHが通ってる必要がある。
<LocalLeader>gw
カーソルのある場所のwordのソースに飛ぶ。ソースはPATHが通ってる必要がある。CLOJURE_SOURCE_DIRS環境変数でPATHに追加しておく。
<LocalLeader>gi
プロンプトに任意の文字を入れてソースに飛ぶ。ソースはPATHが通ってる必要がある。CLOJURE_SOURCE_DIRS環境変数でPATHに追加しておく。
<LocalLeader>mw
カーソルのある場所のwordのメタデータを表示する。
<LocalLeader>mi
プロンプトに任意の文字を入れてメタデータを表示する。
<LocalLeader>sr
新しいバッファに新しいreplをスタートする。同時に複数のreplがあるかも。
<LocalLeader>sR
新しいバッファに新しいreplをスタートする。現在のバッファのnamespaceで初期化される。
<LocalLeader>aw
カーソルのある場所のwordをバッファのlispwordsオプションに追加する。これはフォームのインデントに使われる。
Heroku-ja Meetup #1 - 写真 - Google+
昨日行われたHeroku-ja Meetup #1でPaaS向けCMS LokkaというLTをさせていただきました。
正にHeroku三昧の時間で楽しかったです。会場のリクルート メディアテクノロジーラボ MTL Cafeも設備が整っていて、発表するのにとてもやり易かったです。Herokuオフィスの雰囲気や皆さんがどうやってHerokuを使っているのかというお話がとても為になりました。
Lokkaについてもruby1.9.2対応してくださった@tyabeさん(Herokuのデフォルトが1.9.2に変わって焦ったけど@tyabeさんのお陰でLokkaが動いてて良かった)に会えたり、@yagi_さんと次何実装するか話したり、Herokuユーザーの方々に宣伝できたりで行って良かったです。
RubyKaigi2011終わったらまたLokkathonやりたいです。
主催の@junyaさん、キャンセル待ちから運営側に回ることで滑り込むという裏技を使いつつ、ピザでみんな手がベタベタになるのに気を効かせて速攻ティッシュを買ってくるなどの名運営っぷりを見せた@rono23さんなどなど、皆さんありがとうございました。
$ sudo easy_install pip && sudo pip install dotcloud
$ dotcloud setup
$ dotcloud create dotcloudrack
# Gemfile:
source :rubygems
gem 'rack'
# config.ru:
require 'rubygems'
require 'bundler'
Bundler.setup
class App
def call(env)
[200, {'Content-Type' => 'text/plain'}, ['unk']]
end
end
run App.new
# dotcloud.yml:
www:
type: ruby
$ dotcloud push dotcloudrack
dotcloud open dotcloudrack
って出来てくれるといいな。
何も変えてないのにjenkinsのdailyのテストが通らなくなった。
% rake test
rake aborted!
no such file to load -- omniauth/password
(See full trace by running task with --trace)
手元でも確かに動かない。omniauthに何が起こった?bundleなどビルドプロセスが外部に依存してるとコードは変わってなくてもこういうことがあるのでdailyのテストも大事だな。
% bundle list | grep omniauth
* omniauth (0.0.1)
OMG!
何故だかバージョン指定無しだと0.0.1が入るようになっている。
# Gemfile:
gem 'omniauth', '~> 0.2.6'
バージョンを指定して凌ぎましたが、他でも起きたら怖いので原因知ってる人がいたら教えてもらえると嬉しいです。
先週の土曜日(6月25日)にtokyo.clj#12に行ってきました。
場所は四谷にある株式会社タイムインターメディア様の会議室。(下がオライリー・ジャパン)
自分のブログによるとclojureをはじめたのが6月15日らしいので初心者ですが、初心者の時こそ得る物が多いと思って行ってみました。
僕はHSQLDBを使ってみたり、スクリプトとして使う時の設定を探したりしてました。Hackthonなのでもくもくと作業できてよかったです。その後の懇親会もLisp/Clojure関係のお話を聞いてWeb/Ruby関係とはまた違った感じで新鮮で勉強になりました。
Clojureはまだ初心者ですが、Javaのライブラリがそのまま呼び出せる・呼び出しやすい為もあってか、周辺ツールが充実してる気がします。LispなのでみんなEmacsで書くため、CLI中心で行けるのも嬉しいです。(僕はvimですがVimClojureも期待より全然完成度高かったです)
JavaはIDEとXMLが障害となって避けてたんですが、Clojureにはその二つが苦手な人が沢山いるらしく、IDEをとXMLを使わなくていいツールを勝手に揃えてくれるので安心です。
ただ、カッコがついたファイルを「DSLだから設定ファイルとして使え」と言われても僕には未だにプログラムとしてしか見れないです。(project.cljとか.emacsとか)
"Trigger builds remotely"を選んで適当なTOKENを設定する。
Githubの"Post-Recieve URLs"にそのURLを設定する。
http://example.com/job/PROJECT_NAME/build?token=TOKEN
追記:
Github Pluginを0.5にアップしたらチェックボックスが出現してもっと簡単になりました!
追記2:
と思ったら上手くいってませんでした。何がどう動いてるのが理解出来てない感じ・・・
verifyと出るけどgithubにpushしてもbuildされない状態。以前のやり方に戻そうかな?
DTermからGUIアプリを立ち上げるには$ open -a /Applications/Safari.app
とかする必要があって面倒なので~/.macapp
にそれぞれのアプリをopenするスクリプトを作るスクリプトを書いてみた。
#!/usr/bin/env ruby
require 'fileutils'
def e(path) path.gsub(/[ ()]/) {|s| "\\#{s}"} end
FileUtils.rm_rf("#{ENV['HOME']}/.macapp")
FileUtils.mkdir("#{ENV['HOME']}/.macapp")
Dir.glob('/Applications/{,Utilities/}*.app') do |path|
script = "#{ENV['HOME']}/.macapp/#{path.split('/').last}"
open(script, 'w') {|f| f.write(<<-EOS) }
#!/bin/sh
open -a #{e(path)}
EOS
FileUtils.chmod(0755, script)
end
Make symlink from Mac GUI Apps. — Gist
~/.macapp
にPATHを通せば$ Safari.app
みたいな感じで立ち上がるようになる。(DTerm等のGUIの場合は/etc/launchd.confに書く必要がある)
理想のランチャー道は遠いな・・・。
ちゃんと書く場合はleiningenでproject作った方が楽だけど、手元で手軽にclojureしたい場合の為にsystem-wideにインストールする。
$ brew install clojure-contrib
# ~/.zshrc
export CLASSPATH=$CLASSPATH:/Users/komagata/homebrew/Cellar/clojure-contrib/1.2.0/clojure-contrib.jar
clojureも依存で入る。バージョンは2011/06/25現在だと1.2.0。ついでにちょっとした起動スクリプトもcljって名前で入れてくれる。
% clj
Clojure 1.2.0
user=> (+ 1 2 3)
6
引数無しだとreplが立ち上がる。
;; unk.clj
(println "unk")
% clj unk.clj
unk
スクリプトを渡せば実行される。
clojure.mainが標準入力からスクリプトを受け取れれば
#!clj
(println "unk")
って書けそうだけど、無理。