Upload
emasaka
View
1.204
Download
0
Embed Size (px)
Citation preview
エコなWebサーバーemasaka
自己紹介
● twitterとかGitHubとか: emasaka● blog: 本を読む
http://emasaka.blog65.fc2.com/
● ダジャレをGoogle検索結果としてtwitterに流すメソッドのたぶん元祖
過去の実績
● Bash on Rails● pure Bashのメタプログラミングで、オブジェクト指向もどき+ActiveRecordもどき+ERBもどき+YAMLもどき、ほか
● sh.inatra● pure Bashでsinatraもどき
● 2008年LL future「キミならどう書く」● 数値をK/M/G/T表記● →ddでファイルを作ってls -lh
ヒキョーなネタ
本題
Webのページには余分なものがいっぱい
必要なのはここだけ
※GI○AZINEさん例にしてごめんなさい
エコじゃない!
MOTTAINAI!
● ブラウザでカット?● Adblock PlusとかGreaseMonkeyとか
● でも送ってくる分のHTMLが無駄
MOTTAINAI!
HTTPの仕様を見る
● HTTP 1.1 "Range Requests and Partial Responses"
● コンテンツの一部分をリクエストできる● リクエストヘッダーにRange:フィールド● 206 Partial Contentのレスポンス
Range: bytes=1000
使用例
● ダウンローダー● 分割ダウンロード● リジューム
● 2chブラウザ(追記型データ)
ただ
● バイト数指定なので、本文抽出には使いづらい● やっぱりDOMとかでやりたい
新しい指定方法が必要
メールヘッダを見てみる
● 1990年代に一部で流行(通信用語の基礎知識 http://www.wdic.org/w/WDIC/X-Moe より)
XMoe: CCSakura/Sakura(萌え属性表明)
X-*フィールド
● 勝手拡張フィールド● X-Mailer:とかX-ML-Name:とかはメジャー
HTTPのレスポンスヘッダでも
● Passengerで
XPoweredBy: Phusion Passenger (mod_rails/mod_rack) 2.2.5
● WordPress.comのHTTPレスポンスヘッダー● X-*:フィールドを使ってリクルート
Xhacker: If you're reading this, you should visit automattic.com/ jobs and apply to join the fun, mention this header.
※ネタ元http://www.1x1.jp/blog/2009/09/wordpress_http_heade.html
以上をふまえて、X-*拡張を使って
XPath:
というHTTPリクエストヘッダーを提唱します
XPathで指定
● X-Path:フィールドでXPathを指定● HTMLのうち、その部分だけ返ってくる
XPath: //p[@id="hello"]
<p id="hello">〜</p>
※厳密にはこの指定じゃNGみたいですが
(リクエスト)
(レスポンス)
さっそくサーバーを実装してみる
WEBrickなら
Rubyで簡単に拡張できて実験に便利
ですね
作りました
● 名付けて
WEBrick-DOM(ウェブリック・ドム)
←これはリックドム
サーバーのサンプル(WEBrick)
require 'webrick'
srv = WEBrick::HTTPServer.new({ :DocumentRoot => './', :BindAddress => '127.0.0.1', :Port => 20080 })trap('INT'){ srv.shutdown }srv.start
※ほぼRubyのリファレンスマニュアルから
サーバーのサンプル(WEBrick-DOM)
require 'webrick/dom'
srv = WEBrick::HTTPServer.new({ :DocumentRoot => './', :BindAddress => '127.0.0.1', :Port => 20080 })trap('INT'){ srv.shutdown }srv.start
やってること
● WEBrickのDefaultFileHandlerをラップするサブクラスを作る● X-Path:フィールドがあればnokogiriで処理● それ以外はsuper丸投げ
● FileHandler.add_handler()で、.htmlと.htmのハンドラーに指定
● 50行ぐらいのごく簡単なコードです※参考http://jp.rubyist.net/magazine/?0002-WEBrickProxy
※作ってから気付いた
問題点
わざわざ広告カットの
APIを自分で提供する
サイトってないだろJK
それ以前に
これキャッシュ効かなくない?
エコじゃない!
MOTTAINAI!
余った時間で
DEMO