エコな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とかでやりたい


      新しい指定方法が必要
メールヘッダを見てみる

    X­Moe: CCSakura/Sakura
                          (萌え属性表明)
●   1990年代に一部で流行
    (通信用語の基礎知識
    http://www.wdic.org/w/WDIC/X-Moe より)
X-*フィールド
●   勝手拡張フィールド
●   X-Mailer:とかX-ML-Name:とかはメジャー
HTTPのレスポンスヘッダでも


    X­Powered­By: Phusion Passenger
     (mod_rails/mod_rack) 2.2.5


●   Passengerで
X­hacker: If you're reading this,
     you should visit automattic.com/
     jobs and apply to join the fun, 
     mention this header.

●   WordPress.comのHTTPレスポンスヘッダー
●   X-*:フィールドを使ってリクルート
            ※ネタ元
            http://www.1x1.jp/blog/2009/09/wordpress_http_heade.html
以上をふまえて、X-*拡張を使って

X­Path:
というHTTPリクエストヘッダーを提唱します
XPathで指定
●   X-Path:フィールドでXPathを指定
●   HTMLのうち、その部分だけ返ってくる
    (リクエスト)

    X­Path: //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

エコなWebサーバー