次世代Greasemonkey Tsukikage systemの開発

Document Sample
次世代Greasemonkey Tsukikage systemの開発 Powered By Docstoc
					 次世代Greasemonkey
Tsukikage systemの開発
     電気通信大学
 人間コミュニケーション学専攻
      中山心太
        自己紹介
u中山ところてん

u電気通信大学 人間コミュニケーション学専攻
 u修士1年 現在求職中
u研究分野 情報セキュリティ(とか)

uプログラマーじゃなくてSE
 uコーディングは嫌い
 u設計は大好き
    こんなことがしたかった
uWebの内容を自然言語処理
u自然言語処理結果からフィッシング判定
 u形態素解析(Mecab)
 uYahoo!検索API(HTTP)
 uGoogle検索API(SOAP)


u既存のソフトウェアで簡単に
 ブラウザに組み込んだ形で実装できるか?
         既存ソフトウェア
uGreasemonkey
 uFirefox拡張機能  (Operaにも同様機能あり)
 u任意のウェブページにJavaScriptを実行


uProxomitron
 uローカルProxy通過時に正規表現でデータ加工
 u正規表現で、JavaScript付加可能
         駄目っぽい
uJavaScriptの限界(文字列処理)
 u正規表現とDOM制御
 u構造は制御できるが、内容の書き換え不能


uたとえばこんなことが出来ない
 u漢字にルビを振る
 u文章中に企業名が出てきたら
  脇に株価チャートを表示
 uすべてのページではてなキーワード
    そのほかの駄目なところ
uJavaScriptの限界(ローカルリソースアクセス)
 uファイルアクセス
 uマルチスレッド
 uクロスドメイン(グリモンならできる)
 uDLLアクセス
 u外部デバイスの利用 iPod,PSP
 uデータベースアクセス
       Tsukikage system
u無いなら作ってしまえ
u自然言語処理機能を搭載した、
 HTML書き換えミドルウェア

u必要用件
 1   ブラウザと通信してHTML書き換え
 2   HTMLを処理するインタプリタエンジン
 3   ネイティブコードライブラリのコール機能
 4   自然言語処理エンジン
ブラウザと通信してHTML書き換え
u通信方法
 uIEプラグイン
 uFirefox拡張機能
 uProxy


u書き換え方法
 uJavaScript
 uブラウザの内部表現に手を入れる
       案1 Proxy方式
uローカルProxyサーバ
 uHTML通過時にデータを加工
 uスクリプトが走るようになったProxomitron


u問題点
 uProxy通過時に重い処理を行うことと、
  レイテンシーが増大してしまう。
 u動的コンテンツに対応できない
案1 Proxy方式
     案2 IEツールバー
uATL?何それ。
 u最後の書籍が出たのが99年
 u過去の遺産(負の遺産)
uテストコードをたたいてみた。
 uATLの癖が強すぎ
 uC#でいけるっぽい?


u開発効率が悪すぎるので破棄
案2 IEツールバー
    案3 Firefox拡張機能
u拡張機能からネイティブコード
 uいくら調べても見つけられなかった。


uそもそも俺は     ユーザーだ

uFirefoxの開発者向けリファレンス
 u全然和訳されてねぇ……
                 私のTOEIC
                 スコアは
                 350です。
案3 Firefox拡張機能
                 ですが英語論文が
                 読めないわけでは
                 ないので、ご心配なく
案3 Firefox拡張機能
 案4 Greasemonkey+CGI鯖
uLocalhostに任意のCGI鯖が立っていれば、
 GM_httpRequestで通信できる
uCGI鯖が任意コードを実行すればいよい。

u実験してうまくいくことは確認
uでも、本末転倒なので破棄
案4 Greasemonkey+CGI鯖
案5 Firefoxの拡張機能+CGI鯖
uGreasemonkeyじゃなくて、自作拡張機能に
uGreasemonkeyから作り直すことに……
 u全力で車輪の再発明


uだから俺はOperaユーザーなんだって。
案5 Firefoxの拡張機能+CGI鯖
        問題は何か
u複数のブラウザへの対応
uストレスなく使えるレイテンシー
 uProxy単体なら両方満たしている。
 u通過時に大規模に書き換えると、
  処理時間でレイテンシーが低下する。


uProxyの通過時にデータ書き換えではなく、
 通過後に書き換えればいいのでは?
 案6 Proxy+ローカルCGI鯖
uHTMLがProxy通過時にJavaScriptを付加
uxmlHttpRequestはクロスドメイン不能
 同じドメインの架空アドレスならいける
u架空アドレスへのアクセスをフックして、
 CGI鯖にリクエストを転送すればよい

uCGIはメモリを保持できない
 毎回ファイルに保存しなければならない
案6 Proxy+ローカルCGI鯖
   案7 Proxy+仮想CGI鯖
uProxyの中にCGI鯖を持ってしまえばいい。

uProxy本体がワーキングメモリを保持して、
 仮想CGIにワーキングメモリを渡せばよい

u案7を採用
案7 Proxy+仮想CGI鯖
システムのレイヤー構造
      Python実装のProxy
uTinyHTTPProxy.py
 uMITライセンスのProxy
 uOKI OSSの中の人に感謝


uHTTPのリクエスト、レスポンスを解析
 u任意のJavaScriptを付加できるように
 u特定のアドレスへの通信をフック
              JavaScirptの付加
uGreasemonkeyのJSはメタデータを持っている
// ==UserScript==
// @name             ユーザースクリプトの名称
// @namespace        開発者のURL
// @description      プログラムの説明
// @include          どのURLで実行するか
// @exclude          どのURLで実行しないか
// ==/UserScript==

u上位互換のために、この構文を踏襲
   u@charset         文字コードを設定
   u@library         Prototype.jsなどをインクルード
    架空アドレス通信のフック
元 http://hoge.co.jp/index.html
後 http://hoge.co.jp/index.html
  ??Tsukikage&pythonscript&param

uブラウザからは同一ドメインのアクセス
uProxyがこれをフックして、仮想CGI中の
 pythonscritpをparamで実行する。
        仮想CGIサーバ
uPythonのスクリプトをプラグイン方式で実行

uグローバルストレージはProxyが引数で与える

uスクリプト中から、C++のDLLリンク
 uMecabもこの方式で利用
 uBoost::python でライブラリ作成
        レイテンシー計測
uFirefox+Firebugで計測
uIPAのトップページ

                      100ms以下はエラー?
                      •直通 233ms
                      •串有 387ms

                      •遅延は150ms程度
御託並べてもしょうがないのでデ
       モ
1. 自然言語処理による特徴語抽出

2. Greasemonkeyスクリプトの上位互換

3. ハードウェアアクセス
   Greasemonkeyと比較した
        アドバンテージ
uxmlHttpRequestが使えるブラウザで動作
uPrototype.jsなどのライブラリが利用可能
 ライブラリでブラウザ互換性を吸収
uPython、C++の高い拡張性を利用可能
uコアがPythonなのでOSに依存しない
u第四世代携帯電話、Wiiなどから利用可能
uGreasemonkeyのスクリプトの上位互換
 Greasemonkeyに及ばない点
uGMはFirefoxの特権モードで動いている
 uJavaScriptからFirefoxのコアに触ることが出来る

uFirefox依存の機能を使ったスクリプトは、
 Tsukikageで動作させることが出来ない
 uライブラリで吸収させてほしい

uバグのあるプラグインがあると、
 セキュリティホールになる
 未踏の作業中に気づいたこと
uWebとローカルは切り離されている
 uセキュリティの都合
 uウェブOS


uマッシュアップ
 uウェブとウェブの融合


uWebとローカルのマッシュアップだ
ウェブとローカルのマッシュアップ
uニコニコ動画の動画をローカルに落とす
 uもう散々やられている
u落とすと同時にエンコードしてiPodへGO
 u専用ソフトなら出来る


uTsukikageならブラウザ上から出来る!
 uブラウザに何も導入することなく
  開発が終わっていない箇所
uネイティブコードライブラリコール
 uBoost::Pythonの実験
u自然言語処理エンジン
 uMecabの利用は実装済み (形態素解析)
 uCabochaは未実験 (構文木解析)


uインストーラー作成 PascalScriptと格闘中
uUI,デモアプリケーション
          おしまい
uGreasemonkeyの上位互換をProxyで作った
 uWebを簡単に自然言語処理する
  ミドルウェア(?)が開発できた。
 uブラウザに手を入れることなく、
  Greasemonkey以上の拡張性を得ることができた


u八月の予定
 u未実装箇所の実装、インストーラー
  サンプルアプリケーション
           利用した言語
uTsukikage本体
 uPython
uプラグイン
 uHTML+CSS
 uPython
 uJavaScript
 uC++
uインストーラー inno setup
 uPascal スクリプト
uバイト、趣味
 uEXCEL+VBA、HSP
        ソースコード量
uメインソースコード、コメント込み
u362行 14,370byte 8/1現在

u今回の未踏の中で一番コード量が少ない
 u自分が何もやってないわけじゃなくて、
  それくらいPythonが強力なんです
      開発スケジュール
u二月 卒論
u三月 リサーチと、息抜き
u四月 案2 IEツールバー
u五月 案3,4,5 Firefox関連
u六月 案6,7 Proxy関連の実装 論文執筆
u七月 ブラッシュアップ         論文発表
u八月 UI作成 ←今ここ

本格的にコーディング始めたのは六月から。

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:25
posted:11/25/2013
language:Unknown
pages:40