Web 2.0 時代の Ajax Binary Hacks

Slides:



Advertisements
Similar presentations
10: ファイル入出力 Linux にログインし、以下の講義ページ を開いておくこと teachers/w483692/CPR1/ C プログラミング入門 総機 1 ( 月 1) 1.
Advertisements

JavaScript における DOM 操作 XML 読み込み Ajax( 動的 HTML 編集 ) 情報システム工学科ラシキアゼミ 3年 H 107072 田中直樹.
Integrated Personal Page C05823 森本万里子 C05829 西山礼恵 C05899 高木華子.
© Copyright the Seasar Foundation and the others all rights reserved. 1 S2Axis2 による Web2.0 らくらく実践 2006/05/14 Seasar Conference 2006 Spring 鈴木 貴典.
Copyright © Ariel Networks, Inc. AJAX 勉強会 アリエル・ネットワーク株式会社.
© 2005 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます prototype.js と Perl で Ajax 株式会社はてな 伊藤 直也
PowerPoint スライドの HTML 化支援ツール dcppt version 1 Yasuhiro Morikawa Copyright © 2005 GFD Dennou Club. All rights reserved. GFD Dennou Club.
1 なんとなく Ajax ~新しくて古い XMLHttp 川合孝典 (Kansai.pm) 2005/5/22.
IIS 4.0で開発をするコツ Webアプリケーション構築.
D2-301 現時点の本資料は 完成版のスライドではありません。
The Perl Conference Japan ’98 朝日奈アンテナによる コンテンツ情報の取得と利用
Flash 書き換え PHP extension “SWF Editor”
Webサービスに関する基本用語 Masatoshi Ohishi / NAOJ & Sokendai
ハルビン絵葉書コレクションシステムの再構築と機能追加 -サーバ側:PHPとMySQLを用いて
第11回JavaScriptゼミ セクション8-2 発表者 直江 宗紀.
自社製ミドルウエアをDalvikと連携させることが可能になる
Ibaraki Univ. Dept of Electrical & Electronic Eng.
<TITLE OF PRESENTATION>
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
REST型Webサービスによる 楽曲検索システムの開発
オペレーティングシステムⅡ 第5回 講師 松本 章代 VirtuaWin・・・仮想デスクトップソフト 2009/11/6.
Hot Pepper for iPod touch
CSSを利用したWebデザイン 理工学部 情報学科 3回生 喜多 亮輔.
アプレット (Applet)について.
早稲田大学大学院理工学研究科 情報科学専攻修士2年 後藤滋樹研究室 坂本義裕
XSSで使えるかもしれないJavaScriptテクニック
徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野
第4回 個人の動画配信補足のためのWeb構築
PowerPoint スライドの HTML化支援ツール epppt version 3
Flash 書き換え PHP extension “SWF Editor”
JavaScript Language Update
Perlを用いた 学内専用アップローダの作成
HTTPプロトコルとJSP (1) データベース論 第3回.
JQueryでAjax 藤田@ジャストプレイヤー ※参考しまくり文献 jQuery日本語リファレンス.
押さえておきたいIE8の セキュリティ新機能
HTTPプロトコル J2EE I 第7回 /
Windows Summit /8/2017 © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満
サーバ構成と運用 ここから私林がサーバ構成と運用について話します.
端末およびサービス透過的な 情報閲覧支援システムの構築
10: ファイル入出力 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
第8章 Web技術とセキュリティ   岡本 好未.
ガジェット・マスターへの まわり道!? ~Ajaxを理解しよう~
第3回 2007年4月27日 応用Java (Java/XML).
Java Bytecode Modification and Applet Security
Cisco Umbrella のご紹介 2018 年 1 月.
制作技術ー3 双方向通信 : CGIシステムと環境変数
Webセキュリティ 情報工学専攻 1年 赤木里騎 P226~241.
平成19年10月19日 図書系のための アプリケーション開発講習会
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
デジタル画像とC言語.
端末およびサービス透過的な 情報閲覧支援システムの構築
端末およびサービス透過的な 情報共有支援システムの構築
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
端末およびサービス透過的な 情報閲覧支援システムの構築
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
画像のディジタル化 Copyright(C)2003 Yoshihiro Sato All rights reserved.
B演習(言語処理系演習)第2回 田浦.
手書き文字の自動認識アプリケーション 15K1013 坂本 倖輝
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
ASP.NET 2.0による Webサービスの構築 2008年10月18日 こくぶんまさひろ.
「マイグレーションを支援する分散集合オブジェクト」
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
卒業論文に向けて(3) 学部4年生 島本 大輔 2004年11月11日.
ASP.NET 2.0による Webサービスの構築 2008年10月18日 こくぶんまさひろ.
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
今の俺にシカクはねぇ!! 資格取得支援システム.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
HTTPプロトコルの詳細 M1 峯 肇史.
Presentation transcript:

Web 2.0 時代の Ajax Binary Hacks 竹迫 良範 <takesako@shibuya.pm.org>

はじめに

アンケート 説明できる人いますか?

Web 2.0 って何?  最近話題のWeb2.0をパソコンにインストールしようと思っているのですが、パソコンに詳しい友人に聞いたところ初回版はバグが多いから、Web2.1のバージョンまで待った方がいいとのことでした。   そうなんでしょうか?       またWeb2.1はいつごろでるのでしょうか? http://oshiete1.goo.ne.jp/kotaeru.php3?qid=1770566 えっ!?そうだったのかー(汗) http://oshiete1.goo.ne.jp/kotaeru.php3?qid=1770566

Tim O’Reilly による Web2.0 の概念

2.0 ブーム到来 Web 2.0 Binary 2.0 Moe 2.0 第2世代のWeb、再評価(2.0) HTML+JavaScript+CSS(Ajax) Binary 2.0 Binary 2.0 カンファレンス開催 Web 2.0 を裏で支える基盤技術 Moe 2.0 3.0次元に萌えるのは邪道 2.0次元で萌える→原点回帰

Binary 2.0 x Moe 2.0 のマッシュアップ

さて

ここで、バイナリアンの 皆様に問題です

Quiz. どちらがWeb2.0的か?

5秒でわかる解説 ロングテール

(^^;)

YappoLogs: 信頼のおけるブロガー

orz

人生: stable <-> unstable UNIXにみる世代間の断絶 Binary 2.0 Web 2.0 人生: stable <-> unstable http://0xcc.net/misc/ggap.html

本題

Web 2.0 時代の Ajax Binary Hacks とは? 越えられない壁 Web 2.0 の裏を支える サーバ側の基盤技術 クライアント側 Ajax技術 (JavaScript, CSS)

私の手元には Binary Hacks の 献本が届きませんでした! orz

Web Browser is Text Parser ELF x86 実行形式… HTML, CSS, JavaScript そのものが実行形式 ELF x86 実行形式…

そこで

Bio通信 Binary Image Object 究極の非同期クロスドメイン通信APIの実装 画像ファイルにバイナリ情報を埋め込んで Ajax通信を実現する新しいプロトコル Binary Image Object communications Protocol Bio通信

従来:Ajaxでクロスドメイン通信する方法 1. XMLHttpRequest + Local proxy 非同期通信APIの元祖 XMLHttpRequest レスポンスはXML形式とは限らない(HTML, JSON…) クロスドメイン通信ができないので Local proxy パフォーマンスの問題(自サーバのProxy経由でアクセス) セキュリティの問題(Open Proxy悪用の危険性) 2. Flash + crossdomain.xml SocketJS の実装アリ 3. Script tag の動的生成 JSONP とかで最近ちょっとブーム http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/

http://server/crossdomain.xml を設置 クロスドメイン通信を可能にするため http://server/crossdomain.xml を設置 <?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*" /> </cross-domain-policy>

JSONPの動作原理 function callback(data) { // … ここに処理を書く … } callback( { (1)コールバック関数の定義 function callback(data) { // … ここに処理を書く … } (2)script tag の動的生成 <script src=“http://example.com/data.json?jsonp=callback” /> (3)サーバからのレスポンス callback( { foo: 'This is foo.', bar: 'This is bar.', moe: 'This is moe.' } ); クロスドメインで JavaScript関数を実行

JSONPのロードされるタイミング Safari Firefox IE Opera 並列リクエストされてロードされた順に実行 並列リクエストされるけど実行順は固定 IE 並列リクエストされて実行順はほぼ固定? 応答が遅いと後回しにされてるような気が… Opera 並列リクエストされない 最速インターフェース研究会より http://la.ma.la/blog/diary_200610131704.htm

communications Protocol Bio通信 Binary Image Object communications Protocol

<img src=“null.gif?q=param" onload=“callback(this.width)"> Bio通信の動作原理 (1)コールバック関数の定義 function callback(data) { //… ここに処理を書く… } (2)以下の img タグを生成 <img src=“null.gif?q=param" onload=“callback(this.width)"> クロスドメインもOK http://example.com/webapi/null.gif?q=hogehoge

画像ファイルのサイズ比較 画像サイズ 1x1(モノクロGIF) 画像サイズ 1000x1000(モノクロGIF) 35 byte 画像サイズ 1000x1000(モノクロGIF) 1,735 byte 画像サイズ 1000x1000(24bpp BMP) 3,000,054 byte (約3MB) 画像サイズ 65535x65535(24bpp BMP) 約12GB ワークエリア足りません…orz

Graphics Interchange Format (tm) A standard defining a mechanism G I F (tm) Graphics Interchange Format (tm) A standard defining a mechanism for the storage and transmission of raster-based graphics information June 15, 1987 (c) CompuServe Incorporated, 1987 All rights reserved http://members.aol.com/royalef/gif87a.txt

GIF87a 仕様書 bits 7 6 5 4 3 2 1 0 Byte # +---------------+ | | 1 | | 1 +-Screen Width -+ Raster width in pixels (LSB first) | | 2 | | 3 +-Screen Height-+ Raster height in pixels (LSB first) | | 4 +-+-----+-+-----+ M = 1, Global color map follows Descriptor |M| cr |0|pixel| 5 cr+1 = # bits of color resolution +-+-----+-+-----+ pixel+1 = # bits/pixel in image | background | 6 background=Color index of screen background +---------------+ (color is defined from the Global color |0 0 0 0 0 0 0 0| 7 map or default map if none specified)

つまり32bitの情報をサーバ側で GIF形式にエンコードして渡せる Bio通信の戦略 Image Block の存在しない GIF Header だけ 画像の幅と高さのサイズ情報をサーバで生成 最小で20byte固定長 Perlのサンプルコード sub create_gif { my ($width, $height) = @_; my $size = pack "S2", $width, $height; return "\x47\x49\x46\x38\x37\x61$size\xf0\x00\x00\x00\x00\x00\xff\xff\xff\x3b"; } widthとheightの16bitずつ つまり32bitの情報をサーバ側で GIF形式にエンコードして渡せる

Firefox ではサイズ情報を読めた!

しかし、IE では壊れた画像と認識 … orz サイズ情報を読み出せない…

とほほのWWW入門より http://www.tohoho-web.com/wwwgif.htm

GRAPHICS INTERCHANGE FORMAT(sm) Version 89a (c)1987,1988,1989,1990 Copyright CompuServe Incorporated Columbus, Ohio http://www.w3.org/Graphics/GIF/spec-gif89a.txt

とほほのWWW入門より http://www.tohoho-web.com/wwwgif.htm

1x1のダミーの Image Block を挿入すると IEでも解釈するように クロスブラウザ対策 GIF89aの形式にして 1x1のダミーの Image Block を挿入すると IEでも解釈するように とほほの WwwCounter で使用されている GIF画像連結ライブラリの動作原理にインスパイア 独立した一つの Image Block http://www.tohoho-web.com/soft/wcnt.htm

GIFファイルのデータ構造 20 byte 35 byte +-----------------------+ | +-------------------+ | | | GIF Signature | | | | Screen Descriptor | | | | Global Color Map | | |- GIF Terminator -| +-----------------------+ | +-------------------+ | | | GIF Signature | | 5byte (GIF89a) | | Screen Descriptor | | 7 byte (width x height) | | Global Color Map | | 6 byte (2 colors) | | IMAGE DESCRIPTOR | | 15 byte (1 x 1) |- GIF Terminator -| 1 byte (;)

任意pixelの幅・高さの固定長GIFを出力 Perl のサンプルコード #!/usr/bin/perl use strict; use warnings; sub create_gif { my $size = pack "S2", @_; return "GIF89a$size\xf0\x00\x00\x00\x00\x00\xff\xff\xff," . "\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02L\x01\x00;"; } print "Content-Length: 35\n"; print "Content-Type: image/gif\n\n"; binmode(*STDOUT); print create_gif(65535, 65535); 1;

ここに注目

ファイルサイズが固定長 35 byte 65535 x 65535 pixel の画像も 35 byte で Bio

オールドタイプのためのC言語ライブラリ putchar(','); \ #include <stdio.h> putchar(0x00); \ putchar(0x01); \ putchar(0x02); \ putchar('L'); \ putchar(';'); \ } while (0) #include <stdio.h> #define print_gif_head() do { \ printf( \ "Content-Length: 35\n" \ "Content-Type: image/gif\n" \ "\n"); \ } while (0) #define print_gif_body(x,y) do { \ putchar('G'); \ putchar('I'); \ putchar('F'); \ putchar('8'); \ putchar('9'); \ putchar('a'); \ putchar(0xff & (x)); \ putchar(0xff & (x >> 8)); \ putchar(0xff & (y)); \ putchar(0xff & (y >> 8)); \ putchar(0xf0); \ putchar(0x00); \ putchar(0xff); \ int main() { print_gif_head(); print_gif_body(65535, 65535); }

それ ニンテンドーDS ブラウザーで(ry

ごにょごにょ

!!

まとめ

歴史の古いGIF規格 GIF XML JSON GIF87a(1987年) GIF89a(1989年) 1996年~(?) 1998年に規格化 JSON 1999年~(?) 2006年にRFC4627 約20年前の バイナリ フォーマット コンピュータにやさしい バイナリアンにやさしい

温故知新 原点回帰

弊社では モヒカン族・バイナリアンも歓迎しております ご清聴ありがとうございました 弊社では モヒカン族・バイナリアンも歓迎しております