Monthly Archives: 11月 2013

Jekyllで編集履歴リンクをつけてGitHubに飛ばす

世の中にはWeb上に公開した文書を”無断”で直すことを絶対に許さない人たちがいます。
そのせいで「削除」「[追記ここから]〜[追記ここまで]」みたいな変な文化もできています。

まるでバージョン管理がなかった時代のソースコードのような見づらさです。

そこで、有効なのが編集履歴の公開です。
履歴を公開していれば文句を言われる筋合いはないので、気軽に編集できるようになります。

で、本題。

Jekyll & GitHub Pagesでサイトを公開している場合、編集履歴はすでにWeb上で公開されています。
あとはそこにリンクを貼ればいいわけです。

例えば、
http://spritekit.jp/matome/2013/10/11/japanese-sites/
から
https://github.com/tnantoka/spritekit.jp/commits/gh-pages/_posts/2013-10-11-japanese-sites.md
に飛ばしたいときどうすればいいか。

Jekyllのドキュメントを見ると、page.pathというまさしくその用途の変数がありました。

page.path

The path to the raw post or page. Example usage: Linking back to the page or post’s source on GitHub. This can be overridden in the YAML Front Matter.

 

早速、

_config.ymlに

を追加して、

_layouts/post.htmlに、

と書いたらうまく動きました。

Jekyllをご利用中の方は是非。

Chromeでフォームにscriptタグ等を入力して送信すると”data:;”にリダイレクトされる

Rails 4.0.1、Chrome 31.0.1650.57 での開発中に遭遇した。

The XSS Auditor blocked access to ‘URL’ because the source code of a script was found within the request. The server sent an ‘X-XSS-Protection’ header requesting this behavior.

というエラーがコンソールに出て、画面は真っ白に。

エラーログにもある通り、理由はレスポンスヘッダに、

X-XSS-Protection: 1; mode=block

が含まれるようになったから。
参考:Ruby on Rails Security Guide — Ruby on Rails Guides

scriptタグだけじゃなく、iframeなどXSSを発生させそうな内容があるとChromeがはじく。
これらのタグの入力を許可したい場合は、

すればこの機能は無効になる。
CMSでHTML入力機能があるなどやむを得ない場合に。

そうじゃなければ、そもそもhtml_safeしなければいい。(エスケープされていればこの挙動にならないはず)

ChromeのデベロッパーツールでFirebugの持続

Firefoxの半分はFirebugでできていると思っています。
いや、ほんとにFirebugがなければ僕のメインブラウザはとっくにSafariがChromeになっていたことでしょう。

そんなFIrebugの機能の中でわりとお世話になるのが「持続」。
画面遷移した後もJSのエラーログなどをクリアせずに残してくれます。

例えば、”イベントハンドラ内でreturn falseする”ことでクリックイベントをキャンセルしているような、行儀の悪い(※)ライブラリの内部でエラーが起きて、予期せぬページ遷移が発生した時。この機能が犯人探しに役立ちます。
※ preventDefault()を使いましょう。return falseだとそこに辿り着くまでにJSエラー起きたらイベントキャンセルされないですよ!

というわけで、普段はFirefoxで開発しているんですが、今回Chromeだけで発生するややこしめのエラーに遭遇したので、デベロッパーツールでデバッグするはめになった。
で、よく考えると持続の仕方がわからなかったのでメモ。

1. 右下の設定(ギア)アイコンをクリック

chrome_devtool_keep_1

2. Preserve log upon navigation をチェック。

chrome_devtool_keep_2

 

たったこれだけ。知っていれば簡単。
ただ、Firebugと比べると切り替えるのが面倒だ…。

 Scroll to top