サーバサイド JavaScript の 歴史と未来 Shibuya.js Technical Talk #2 竹迫 良範 <[email protected]> 前回のshibuya.js#1の振り返り 最後に生き残るのはJavaScriptかもな JavaScriptのこれまでの10年とこれからの10年 これまでの10年でクライアントサイドを征覇した これからの10年でどこまで領域を広げるか etoさん基調講演 2006/06/30 #02 2 クライアントサイドは制覇した 2006/06/30 #02 3 昔:サーバサイドのプログラミング言語 Java #02 PHP 2006/06/30 Perl クライアントサイド (ブラウザ) Ruby サーバサイド (Webサーバ) JavaScript 4 今:サーバサイド言語でJavaScript生成 #02 JavaScript Java 2006/06/30 RJS とか PHP クライアントサイド (ブラウザ) Perl 本居宣長の方法 Ruby サーバサイド (Webサーバ) GWT J2S 5 未来:JavaScriptで全部書く! Java PHP Perl 夏目漱石の方法 Ruby サーバサイド (Webサーバ) JavaScript クライアントサイド (ブラウザ) 2006/06/30 #02 6 これからの時代は サーバサイド JavaScript 2006/06/30 #02 7 これまでの サーバサイドJavaScript 商用プロダクト編 サーバサイドJavaScriptの有名どころ Microsoft IIS ASP (Active Server Page) いろいろ VBScript / PerlScript / Jscript … LiveWire JavaScript から発展 Netscape Enterprise Server iPlanet Sun Java System Web server BroadVision One-To-One Enterprise 2006/06/30 #02 9 2006/06/30 #02 10 DreamArts ひびき®シリーズ http://hibiki.dreamarts.co.jp/index.html 2006/06/30 #02 11 DreamArts ひびき®シリーズ サーバサイドJavaScriptを採用 パッケージ製品である「ひびき」に対する 顧客要望別プラグインを JavaScript で記述 JavaScript処理系 Rhino + Velocity (Java) 2006/06/30 #02 12 DreamArts ひびき®シリーズ プラグインで可能なこと API を利用した内部データへのアクセス JDBCコネクションプールによるDBアクセス 製品で提供されている拡張ポイントを利用して 製品仕様を変更する トランザクション内のフックにより 他のシステムとのデータリアルタイム連携 製品内に保持しているデータのグラフ化 2006/06/30 #02 13 DreamArts ひびき®シリーズ サンプルプログラム function service(request, response) { var hibikidb = Hibiki.getDatabaseSession(); var isdb = Hibiki.getDatabaseSession('isdb'); if (hibikidb == null || isdb == null) { log.fatal("Failed to check my DB server!"); return sendError(response); } var f = new java.io.File(Hibiki.getDataDirectory() + "/health-check.dat"); if (!f.exists()) { log.fatal("Failed to check my file server!"); return sendError(response); } return "/success.vm"; } 2006/06/30 #02 /* * ロードバランサから監視する場合のヘルスチェックリスナーサンプル * 正常に稼働している場合には、/success.vm の内容が送信される。 * データベースおよびファイルのどちらかに異常がある場合には、 * HTTPステータスコード500を返して終了する。- sendError() */ 14 INSUITE®セキュリティアダプタ http://www.insuite.jp/merit/security.html 2006/06/30 #02 15 INSUITE®セキュリティアダプタ サーバサイドJavaScriptを採用 Apache2 の挙動を JavaScript でコントロール mod_perl や mod_python などと同じ Apache2 の各種ハンドラを JavaScript で記述 LDAP認証やリバースプロキシ、SSL証明書の 取り扱いなどの組み込みオブジェクトを用意 JavaScript処理系 SpiderMonkey + Apache2 2006/06/30 #02 16 INSUITE®セキュリティアダプタ サンプルプログラム SSL以外でリクエストされた場合に SSLにリダイレクトする $ cat redirect_to_https.js Apache.translateName = function { if (request.uri.match("^/images/(.*)")) decline(); if (request.uri.match("^/i/(.*)") || request.uri.match("^/_/(.*)")) decline(); redirect("https://" + request.hostname + request.uri); } 2006/06/30 #02 17 未踏ソフトウェア編 サーバサイドJavaScriptの実装 #02 http://www.ipa.go.jp/about/jigyoseika/04fy-pro/mito/2004-861a.pdf 2006/06/30 19 2006/06/30 #02 20 2006/06/30 #02 21 Mayaa – JavaServer Templates 2006/06/30 #02 22 Mayaa の位置づけ a 2006/06/30 #02 23 Java系オープンソースの サーバサイド JavaScript いくつか紹介 Sarugau JS(さるごーJS) サーバサイドDHTMLエンジン Java上で動作する JavaScript と DIコンテナを 使ったプレゼンテーション層用のフレームワーク JavaScript処理系 Rhino (Java) サーバサイドDHTML Rhino のラップドファクトリ機構を利用 ブラウザの innerHTML, style などのDOM拡張 2006/06/30 #02 25 Sarugau JS(さるごーJS) 2006/06/30 #02 26 firecat – JavaScript WebServer 処理系 W3C Jigsaw (HTTP) + FESI (ECMAScript) ライセンス LGPL http://betaworks.netbeans.jp/Wiki.jsp?page=Firecat 2006/06/30 #02 27 firecat – JavaScript WebServer サンプルプログラム <%@page content_type="text/html; charset=Shift-JIS"%> <% var msg = "あなたのIPアドレスは"; var remote_ip = request.getRemoteAddr(); msg = msg + remote_ip; %> <%=msg%> 2006/06/30 #02 28 その他 mod_gcj / Rhinola Rhino + GCJ4.0 + Apache mod_gcj http://mod-gcj.sourceforge.net/rhinola.html Helma - Javascript Web Application Framework Rhino + Jetty Helma License version 2.0 http://www.helma.org/ 2006/06/30 #02 29 今年の新たな動き JSAN関連 2006/06/30 #02 31 Oku Kazuho @ Cybozu Labs サーバサイドで JavaScript の単体テスト JSAN の Test.Simple を Windows Scripting Host (WSH) に移植 Test-Simple-WSH.patch runtests.js Windows のコマンドプロンプトで JavaScript ライブラリのテストが動く > cscript.exe runtests.js testsrc.js 2006/06/30 #02 32 Oku Kazuho @ Cybozu Labs JSAN-ASP.patch ASP で JSAN を使うパッチ (2006/3/24) <script language="JavaScript" src="JSAN.js" runat="server"></script> <script language="JavaScript" runat="server"> JSAN.use("Digest.MD5", ":all"); Response.write(md5Hex("hello")); </script> 2006/06/30 #02 33 これからの時代は サーバサイド JavaScript 2006/06/30 #02 34 プロジェクト AJAJA(仮称) 本日初公開 プロジェクトAJAJA(仮称) AJAJA Asynchronous JavaScript and JavaScript/ASP 最初の動機(構想) ブラウザ上で動く JavaScript と、ウェブサーバで動く JavaScript とを相互に通信させることで、JavaScript のみによる Ajax なシステムを作れるようにしてみよう 開発者 西田圭介さん (+アルファギークな仲間達) フリープログラマ OpenCOBOLの開発者 Gonzuiの開発者でもある 某商用VPNソフトウェアの開発者 2006/06/30 #02 36 プロジェクトAJAJA(仮称) オープンソースな JavaScript/ASP の実装 IIS の記法がそのまま使える(過去の資産の継承) 処理系 SpiderMonkey CGI で提供 /usr/bin/asp_js コマンド SQLite3標準サポート use('SQLite'); db = new SQLite('sample.db'); 2006/06/30 #02 37 サンプルプログラム hello.asp <%@ Language=JavaScript %> <% var hello = "Hello world"; %> <html> <head> <title><%= hello %></title> </head> <body> <h1><%= hello %></h1> </body> </html> 2006/06/30 #02 38 実行処理系のベンチマーク CPU: Pentium 4 3GHz OS: RHEL4 Update 3 (Linux 2.6.9-34) JS は SpiderMonkey を DEBUG モードでビルド JS(OPT=1)は SpiderMonkey を BUILD_OPT=1 でビルド 2006/06/30 #02 39 プロジェクト AJAJA(仮称) JavaScript/ASP デモ [ソース] 2006/06/30 #02 41 デモ製作:haltさん JavaScript/ASP demo – Simple BBS 2006/06/30 #02 42 Yet Another Demo 2006/06/30 #02 43 ただいま空前の素数ブーム LL Ring キミならどう書く 2.0 前哨戦 Round 1 お題「100までの整数から素数を列挙せよ」 Brainf*ckで100までの素数を列挙してみるテスト 2006/06/30 #02 45 2006/06/30 #02 46 2006/06/30 #02 47 function BF(str){ this.code = []; this.output = []; this.input = []; this.data = []; this.pc = this.sp = 0; this.debug = 0; this.step = function(){ var op = bf.code[this.pc]; if (bf.debug){ document.writeln([op, bf.sp, bf.pc].join(",")); } switch (op) { case '<' : bf.sp--; break; case '>' : bf.sp++; break; case '+' : if(!bf.data[bf.sp]) bf.data[bf.sp] = 0; bf.data[bf.sp]++ ; break; case '-' : if(!bf.data[bf.sp]) bf.data[bf.sp] = 0; bf.data[bf.sp]--; break; case '.' : bf.output.push(bf.data[bf.sp]) ; break; case ',' : bf.data[bf.sp] = bf.input.shift() ; break; case '[' : if (bf.data[bf.sp]) break; nest = 1; while(nest){ bf.pc++; nest += bf.code[bf.pc] == '[' ? +1 : bf.code[bf.pc] == ']' ? -1 : 0; } break; case ']' : nest = 1; while(nest){ bf.pc--; nest -= bf.code[bf.pc] == '[' ? +1 : bf.code[bf.pc] == ']' ? -1 : 0; }; #02 bf.pc--; 2006/06/30 48 Brainf*ck への応用 ./Brainfuck.js function BF(str)の定義 ./demo.asp クライアントサイド <script src=“Brainfuck.js”></script> サーバサイド <% use(‘Brainfuck’) %> 2006/06/30 #02 49 サーバ/クライアントで.jsを共有 有名なJavaScriptライブラリをサーバサイドでも prototype.js MotchiKit JSANモジュール JavaScriptライブラリをみんなでshare Validationロジックの共通化 フォームの入力値のチェック 数値、文字列の長さ DRYの原則(Don’t Repeat Yourself) 2006/06/30 #02 50 ToDo やりたい事 ToDo Apacheモジュール欲しい 最初に作ったのは mod_aspjs だが路線変更 スレッドまわりとか GC とかきちんと ライブラリの充実 サーバサイドのJSANモジュール SSI -> SSJ Extension 業務で使えるテンプレートエンジン サーバサイドでDHTML DOM操作、innerHTML のサポートとか… 2006/06/30 #02 52 近日公開予定 http://ajaja.alphageek.jp 2006/06/30 #02 53 共同開発者 募集中 (svn公開します) 2006/06/30 #02 54 サーバサイド JavaScript の 歴史と未来 ご清聴ありがとうございました
© Copyright 2024 ExpyDoc