Presentation is loading. Please wait.

Presentation is loading. Please wait.

サーバサイド JavaScript の 歴史と未来 Shibuya.js Technical Talk #2 竹迫 良範.

Similar presentations


Presentation on theme: "サーバサイド JavaScript の 歴史と未来 Shibuya.js Technical Talk #2 竹迫 良範."— Presentation transcript:

1 サーバサイド JavaScript の 歴史と未来 Shibuya.js Technical Talk #2 竹迫 良範

2 #02 2006/06/30 2 前回の shibuya.js#1 の振り返り 最後に生き残るのは JavaScript かもな JavaScript のこれまでの 10 年とこれからの 10 年 これまでの 10 年でクライアントサイドを征覇した これからの 10 年でどこまで領域を広げるか eto さん基調講演

3 #02 2006/06/30 3 クライアントサイドは制覇した

4 #02 2006/06/30 4 昔:サーバサイドのプログラミング言語 JavaScript Ruby Perl PHP Java サーバサイド (Webサーバ) クライアントサイド (ブラウザ)

5 #02 2006/06/30 5 今:サーバサイド言語で JavaScript 生成 JavaScript Ruby Perl PHP Java サーバサイド (Webサーバ) クライアントサイド (ブラウザ) RJS とか GWT J2S 本居宣長の方法

6 #02 2006/06/30 6 未来: JavaScript で全部書く! Ruby Perl PHP Java サーバサイド (Webサーバ) クライアントサイド (ブラウザ) JavaScript 夏目漱石の方法

7 #02 2006/06/30 7 これからの時代は サーバサイド JavaScript

8 これまでの サーバサイド JavaScript 商用プロダクト編

9 #02 2006/06/30 9 サーバサイド 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 いろいろ

10 #02 2006/06/30 10

11 #02 2006/06/30 11 DreamArts ひびき ® シリーズ http://hibiki.dreamarts.co.jp/index.html

12 #02 2006/06/30 12 DreamArts ひびき ® シリーズ サーバサイド JavaScript を採用 パッケージ製品である「ひびき」に対する 顧客要望別プラグインを JavaScript で記述 JavaScript 処理系 Rhino + Velocity (Java)

13 #02 2006/06/30 13 DreamArts ひびき ® シリーズ プラグインで可能なこと API を利用した内部データへのアクセス JDBC コネクションプールによる DB アクセス 製品で提供されている拡張ポイントを利用して 製品仕様を変更する トランザクション内のフックにより 他のシステムとのデータリアルタイム連携 製品内に保持しているデータのグラフ化

14 #02 2006/06/30 14 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"; } /* * ロードバランサから監視する場合のヘルスチェックリスナーサンプル * 正常に稼働している場合には、 /success.vm の内容が送信される。 * データベースおよびファイルのどちらかに異常がある場合には、 * HTTP ステータスコード 500 を返して終了する。 - sendError() */

15 #02 2006/06/30 15 INSUITE® セキュリティアダプタ http://www.insuite.jp/merit/security.html

16 #02 2006/06/30 16 INSUITE® セキュリティアダプタ サーバサイド JavaScript を採用 Apache2 の挙動を JavaScript でコントロール mod_perl や mod_python などと同じ Apache2 の各種ハンドラを JavaScript で記述 LDAP 認証やリバースプロキシ、 SSL 証明書の 取り扱いなどの組み込みオブジェクトを用意 JavaScript 処理系 SpiderMonkey + Apache2

17 #02 2006/06/30 17 INSUITE® セキュリティアダプタ サンプルプログラム SSL 以外でリクエストされた場合に SSL にリダイレクトする Apache.translateName = function { if (request.uri.match("^/images/(.*)")) decline(); if (request.uri.match("^/i/(.*)") || request.uri.match("^/_/(.*)")) decline(); redirect("https://" + request.hostname + request.uri); } $ cat redirect_to_https.js

18 未踏ソフトウェア編 サーバサイド JavaScript の実装

19 #02 2006/06/30 19 http://www.ipa.go.jp/about/jigyoseika/04fy-pro/mito/2004-861a.pdf

20 #02 2006/06/30 20

21 #02 2006/06/30 21

22 #02 2006/06/30 22 Mayaa – JavaServer Templates

23 #02 2006/06/30 23 Mayaa の位置づけ a

24 Java 系オープンソースの サーバサイド JavaScript いくつか紹介

25 #02 2006/06/30 25 Sarugau JS (さるごー JS ) サーバサイド DHTML エンジン Java 上で動作する JavaScript と DI コンテナを 使ったプレゼンテーション層用のフレームワーク JavaScript 処理系 Rhino (Java) サーバサイド DHTML Rhino のラップドファクトリ機構を利用 ブラウザの innerHTML, style などの DOM 拡張

26 #02 2006/06/30 26 Sarugau JS (さるごー JS )

27 #02 2006/06/30 27 firecat – JavaScript WebServer 処理系 W3C Jigsaw (HTTP) + FESI (ECMAScript) ライセンス LGPL http://betaworks.netbeans.jp/Wiki.jsp?page=Firecat

28 #02 2006/06/30 28 firecat – JavaScript WebServer サンプルプログラム <% var msg = " あなたの IP アドレスは "; var remote_ip = request.getRemoteAddr(); msg = msg + remote_ip; %>

29 #02 2006/06/30 29 その他 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/

30 今年の新たな動き JSAN 関連

31 #02 2006/06/30 31

32 #02 2006/06/30 32 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

33 #02 2006/06/30 33 Oku Kazuho @ Cybozu Labs JSAN-ASP.patch ASP で JSAN を使うパッチ (2006/3/24) JSAN.use("Digest.MD5", ":all"); Response.write(md5Hex("hello"));

34 #02 2006/06/30 34 これからの時代は サーバサイド JavaScript

35 プロジェクト AJAJA (仮称) 本日初公開

36 #02 2006/06/30 36 プロジェクト AJAJA (仮称) AJAJA Asynchronous JavaScript and JavaScript/ASP 最初の動機(構想) ブラウザ上で動く JavaScript と、ウェブサーバで動く JavaScript とを相互に通信させることで、 JavaScript のみによる Ajax なシステムを作れるようにしてみよう 開発者 西田圭介さん (+アルファギークな仲間達) フリープログラマ OpenCOBOL の開発者 Gonzui の開発者でもある 某商用 VPN ソフトウェアの開発者

37 #02 2006/06/30 37 プロジェクト AJAJA (仮称) オープンソースな JavaScript/ASP の実装 IIS の記法がそのまま使える(過去の資産の継 承) 処理系 SpiderMonkey CGI で提供 /usr/bin/asp_js コマンド SQLite3 標準サポート use('SQLite'); db = new SQLite('sample.db');

38 #02 2006/06/30 38 サンプルプログラム hello.asp <% var hello = "Hello world"; %>

39 #02 2006/06/30 39 実行処理系のベンチマーク JS は SpiderMonkey を DEBUG モードでビルド JS(OPT=1)は SpiderMonkey を BUILD_OPT=1 でビルド CPU: Pentium 4 3GHz OS: RHEL4 Update 3 (Linux 2.6.9-34)

40 プロジェクト AJAJA (仮称) JavaScript/ASP デモ

41 #02 2006/06/30 41 [ ソース ]

42 #02 2006/06/30 42 デモ製作: halt さん JavaScript/ASP demo – Simple BBS

43 #02 2006/06/30 43 Yet Another Demo

44 ただいま空前の素数ブーム LL Ring キミならどう書く 2.0 前哨戦 Round 1 お題「 100 までの整数から素数を列挙せよ」

45 #02 2006/06/30 45 Brainf*ck で 100 までの素数を列挙してみるテスト

46 #02 2006/06/30 46

47 #02 2006/06/30 47

48 #02 2006/06/30 48 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; }; bf.pc--; break; }; bf.pc++; }

49 #02 2006/06/30 49 Brainf*ck への応用./Brainfuck.js function BF(str) の定義./demo.asp クライアントサイド サーバサイド

50 #02 2006/06/30 50 サーバ / クライアントで.js を共有 有名な JavaScript ライブラリをサーバサイド でも prototype.js MotchiKit JSAN モジュール JavaScript ライブラリをみんなで share Validation ロジックの共通化 フォームの入力値のチェック 数値、文字列の長さ DRY の原則( Don’t Repeat Yourself )

51 ToDo やりたい事

52 #02 2006/06/30 52 ToDo Apache モジュール欲しい 最初に作ったのは mod_aspjs だが路線変更 スレッドまわりとか GC とかきちんと ライブラリの充実 サーバサイドの JSAN モジュール SSI -> SSJ Extension 業務で使えるテンプレートエンジン サーバサイドで DHTML DOM 操作、 innerHTML のサポートとか …

53 #02 2006/06/30 53 http://ajaja.alphageek.jp 近日公開予定

54 #02 2006/06/30 54 共同開発者 募集中 (svn公開します)

55 サーバサイド JavaScript の 歴史と未来 ご清聴ありがとうございました


Download ppt "サーバサイド JavaScript の 歴史と未来 Shibuya.js Technical Talk #2 竹迫 良範."

Similar presentations


Ads by Google