2013year技術動向

169
最近の技術動向 2013年

Upload: fumio-sagawa

Post on 15-Jan-2015

2.719 views

Category:

Documents


6 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 2013year技術動向

最近の技術動向2013年

Page 2: 2013year技術動向

自己紹介

Page 3: 2013year技術動向

Name:

佐川 夫美雄@albatrosary

http://ameblo.jp/sgw3a/

Users Group:Tokyo.R/html5j.org/jsug/mybatis-users/(ソフトウェア品質技術者のための)データ分析会

Page 4: 2013year技術動向

様々な勉強会に出席したときの内容を

まとめます

Page 5: 2013year技術動向

今日聞いた内容は自己責任原則でお願いします。信用して損失を被ったとしても一切の責任は負いかねます。エンジニアの皆様が自らのリスク判断でその行為を行い、その損失は自らの負担で行って下さい。

Page 6: 2013year技術動向

アジェンダ

Page 7: 2013year技術動向

HTML5/JavaScript/CSS

HTTP2/SPDY

WebSocket

git/github:E

開発インフラマネージメント

R言語 Python,Ruby,Java

JUnit/DBUnit

Jenkins

品質管理

分析

maven

開発

Mixer2

Native

Page 8: 2013year技術動向

インターネット技術の歴史

Page 9: 2013year技術動向

SGML(standard Generalized Markup Language)1986年

HTML(HyperText Markup Language)1989年

HTML 4.0(HyperText Markup Language)1997年

XML(eXtensible Markup Language)1998年

XHTML(eXtensible HyperText Markup Language)2000年

HTML 5.0(HyperText Markup Language)2012年

CSS 11996年

CSS 21998年

CSS 2.12004年

CSS 32011年

HTTP 1.11999年

HTTP 1.01996年

HTTP 0.91993年

HTTP 2(draft)2012年

SPDY2011年

Googleサービスの90%がSPDY化

XHTML 2.0(eXtensible HyperText Markup Language)2010年 打ち切り

Page 10: 2013year技術動向

ここ10年技術変革が無かった!

Page 11: 2013year技術動向

大きく動こうとしている

Page 12: 2013year技術動向

いまのHTTPの問題

Page 13: 2013year技術動向

・1回のコネクションにつき1リクエストしか遅れない・リクエストがクライアントからしか開始できない・リクエスト/レスポンスヘッダが非圧縮のためヘッダサイズが大きい・ヘッダが冗長・データ圧縮の使用が強制ではない

Page 14: 2013year技術動向
Page 15: 2013year技術動向

既存のHTTPを拡張し通信の高速化を目指したプロトコル単一のSPDYセッションで複数のリクエストを送受信することが可能

Page 16: 2013year技術動向
Page 17: 2013year技術動向

サーバヒントクライアント側からコンテンツをダウンロードする際に、コンテンツの展開に必要と思われる付属データを提案する

サーバプッシュサーバ側からクライアントに対しデータをプッシュする

Page 18: 2013year技術動向

すでにあります

Page 19: 2013year技術動向

Google Chrome, ChromiumMozilla FirefoxOperaがSPDYを用いた通信に対応

Page 20: 2013year技術動向

Jetty が v7.6.2/v8.1.2 で対応Apache に SPDY モジュール(mod_spdy)がある

Page 21: 2013year技術動向

実際に確認してみる

chrome://net-internals/#spdy

Firefoxではabout:config

Page 22: 2013year技術動向

ブラウザ 最大接続数IE6 2IE7 2IE8 6IE9 6Firefox 6Chrome 6Safari 6

Page 23: 2013year技術動向

HTTP 2.0

Page 24: 2013year技術動向

SPDY が HTTP 2.0 の規格ベース

Page 25: 2013year技術動向

HTTPbisワーキンググループでHTTP 2.0 を策定する作業を公式に開始

Page 26: 2013year技術動向

圧縮方法多重化通信TLSの必須化クライアントプルとサーバプッシュフロー制御WebSocket

Page 27: 2013year技術動向

SPDY 対 WebSocket

Page 28: 2013year技術動向

このふたつのプロトコルは相補的です。WebSocketsはサーバとの最初のハンドシェイクをHTTPで行い、ws://プロトコルがサポートされているかどうかを調べます。一方、SPDYはHTTPリクエストのヘッダを圧縮しキャッシュすることで最適化を図ります。したがって、SPDYを使い、リアルタイムの通信にはWebSocketsを使うのが、RESTfulなリクエストをベースにしたウェブの理想的なかたちです。このふたつのプロトコルは似ています。

by Brit GArdner

Page 29: 2013year技術動向

より早く、双方向に

Page 30: 2013year技術動向
Page 31: 2013year技術動向

HTML5の特徴

いっぱいあります!!

Page 32: 2013year技術動向

header, footer, articleなど記述部分がどこか区別されるようになったaudio.video,canvasタグにより、動画編集が可能になったアップルがflashを採用しない

Page 33: 2013year技術動向

CanvasCanvas テキストビデオビデオフォーマットローカルストレージWeb Workersオフライン Web アプリケーションGeolocationinput タイププレースホルダフォームのオートフォーカスマクロデータ

Page 35: 2013year技術動向

DOCTYPE<!DOCTYPE html public “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>

<!DOCTYPE html>

Page 36: 2013year技術動向

ルート要素<html xmlns=”http://www.w3.org/1999/xhtml” lang=”en” xml:lang=”en”>

<html lang=”en”>

Page 37: 2013year技術動向

文字エンコーディング<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8”>

<meta charset=”utf-8”>

Page 38: 2013year技術動向

リンクタイプrel=”stylesheet”rel=”alternate”rel=”archives”rel=”author”rel=”external”rel=”start”, rel=”prev”, rel=”next”rel=”up”rel=”icon”rel=”license”rel=”nofollow”rel=”noreferrer”rel=”pingback”rel=”prefetch”rel=”search”rel=”sidebar”rel=”tag”

Page 39: 2013year技術動向

新しい意味要素<section>

文書またはアプリケーションの汎用的なセクションを示す

<nav>

別のページまたはページ内の別の場所にリンクするセクションを示す

<article>

例えばフィードなど独立して配布または再利用されることを意図した文書、ページ、アプリケーションまたはサイト中の自己完結した構成物を示す

<aside>

その周りのコンテンツにあまり関係ないコンテンツから構成されるページのセクションであって、周りのコンテンツから離れていると見なされるものを示す

<hgroup>

セクションの見出しを示す

<header>

導入またはナビゲーションの助けとなるグループを示す

<footer>

その一番近い祖先のセクションを構成するコンテンツまたはセクションを構成するルートのフッターを示す

<time>

24時間表示の時刻、または補外グレゴリオ暦による日付(時刻とタイムゾーンを含むことができる)を示す

Page 40: 2013year技術動向

ヘッダー<div class=”header”><h1>My Weblog</h1><p class=”tagline”>A lot of effort went into making this effortless.</p></div>

<header><h1>My Weblog</h1><p class=”tagline”>A lot of effort went into making this effortless.</p></header>

Page 41: 2013year技術動向

Article 要素<div class=”entry”><p class=”post-date”>October 22, 2009<p><h2><a href=”#” rel=”bookmark” title=”link to this post”>Travel day</a></h2></div>

<article><p class=”post-date”>October 22, 2009<p><h1><a href=”#” rel=”bookmark” title=”link to this post”>Travel day</a></h1></article>

Page 42: 2013year技術動向

日付と時間<div class=”entry”><p class=”post-date”>Ovtober 22, 2009</p><h2>Travel day</h2></div>

<time datetime=”2009” pubdate>October 22, 2009</time>

timeタグは3つの部分に分けられる・検索可読なタイムスタンプ・人間が読むためのテキスト・オプションのpubdate フラグ

<time datetime=”2009-10-22”>last Thursday</time>機械可読な日付やタイムスタンプが datetime 属性が指定されていればテキストは何でもよい

Page 43: 2013year技術動向

ナビゲーション<div id=”nav”><ul><li><a href=”#”>home</a></li><li><a href=”#”>blog</a></li><li><a href=”#”>gallery</a></li></ul></div>

<nav><ul><li><a href=”#”>home</a></li><li><a href=”#”>blog</a></li><li><a href=”#”>gallery</a></li></ul></nav>

Page 44: 2013year技術動向

フッター<div id=footer><p>&#167;</p><p>&#167; 2001&#8211;9 <a href=”#”>Mark Pilgrim</a></p><div>

<footer><p>&#167;</p><p>&#167; 2001&#8211;9 <a href=”#”>Mark Pilgrim</a></p></footer>

Page 45: 2013year技術動向

イメージ

Page 46: 2013year技術動向

HTML4 HTML5

Page 47: 2013year技術動向

inputタイプ検索ボックススピンボックススライダカラーピッカー電話番号Webページのアドレスメールアドレスカレンダーやデートピッカー月の入力週の入力時刻の入力詳細な日時や時刻の入力自分のいる地域の日付と時刻

Page 49: 2013year技術動向

イケテルサイト

Page 51: 2013year技術動向

Geolocation API による位置情報通知

Page 52: 2013year技術動向

position オブジェクトのプロパティcoords.latitudecoords.longitudecoords.altitudecoords.accuracycoords.altitudeAccuracycoords.headingcoords.speed

Page 53: 2013year技術動向

geo.js は W3C の Geolocation API や Gears のAPI 各種モバイルプラットフォームの提供する API の間の違いを吸収するオープンソースのライブラリ

Page 54: 2013year技術動向

スマフォの Chrome で天気予報を検索すると見れます

Page 55: 2013year技術動向

Web SQL Database

Page 56: 2013year技術動向

Web SQL Database ではSQLite ベースの SQL によってデータにアクセス

Page 57: 2013year技術動向
Page 58: 2013year技術動向

中小規模用組み込み型データベース

Page 59: 2013year技術動向

デモ<script type=”text/javascript”><!--function test() { var db = openDatabase("testDB", "", "Test Database", 1000); db.transaction( function(tr) { tr.executeSql("SELECT * FROM test", [], function(rt, rs) { print("SELECT: SUCCESS"); for (var i = 0; i < rs.rows.length; i++) { var row = rs.rows.item(i); print(row.id + " / " + row.name); } } ); }, );}//--></script>

Page 60: 2013year技術動向

特定のソフトウェア(SQLite)の実装に基づくのは中立性に欠ける

Page 61: 2013year技術動向

Google Chrome 8Opera 10.6Safari 5モバイル(Android/Safari)

Page 62: 2013year技術動向

仕様策定が停止!!

Page 63: 2013year技術動向

Microsoft はたぶん取り込みません

Page 64: 2013year技術動向

Indexed Database API を利用することを推奨

Page 65: 2013year技術動向

ここでちょっとブラウザお話

Page 66: 2013year技術動向

いきなりですが

Page 67: 2013year技術動向

WebKit

Page 68: 2013year技術動向

Apple が中心となって開発されているオープンソースのHTMLレンダリングエンジン

HTML, CSS, JavaScript, SVGを解釈

Page 69: 2013year技術動向

Chromiumベース→ Google Chrome

WebKit2→ Safari

Page 70: 2013year技術動向

Internet Explorer は?

Page 71: 2013year技術動向

IE9でやっとHTML5準拠

Page 72: 2013year技術動向

Flash はお荷物

Page 73: 2013year技術動向

ブラウザって HTML5対応 どこまで出来てるの?

Page 74: 2013year技術動向

点数をつけてみよう!http://html5test.com/

Page 75: 2013year技術動向

Indexed Database API

Page 76: 2013year技術動向

W3C により仕様策定が行われている値とオブジェクトをローカルデータベースに保持する標準インターフェース

Page 77: 2013year技術動向

インデックスを張るトランザクション処理

特徴

Page 78: 2013year技術動向

indexedDBIDBTransactionIDBKeyRangeIDBCursor

オブジェクト

Page 79: 2013year技術動向

実際にはめんどくさい

Page 80: 2013year技術動向

理由は・・・

Page 81: 2013year技術動向

Indexed Database APIは、まだ仕様が完全には確定しておらず、 現時点では、実装されているブラウザで利用する場合でも、 そのブラウザに合わせたベンダープレフィックスを付けてやる必要がある

Page 82: 2013year技術動向

chrome webkitIndexedDBFirefox 4.8 moz_indexedDBFirefox 4.9 mozindexedDBie10 msIndexedDB

Page 83: 2013year技術動向

で!こうなります

Page 84: 2013year技術動向

var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.moz_indexedDB || window.msIndexedDB;

var IDBCursor = window.IDBCursor || window.webkitIDBCursor || window.mozIDBCursor || window.moz_IDBCursor || window.msIDBCursor;

var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.mozIDBTransaction || window.moz_IDBTransaction || window.msIDBTransaction;

var IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.mozIDBKeyRange || window.moz_IDBKeyRange || window.msIDBKeyRange;

Page 85: 2013year技術動向

きもくね?

Page 86: 2013year技術動向

Web Storage

Page 87: 2013year技術動向

W3C により仕様策定が行われている

key-Value型

Page 88: 2013year技術動向

sessionStoragelocalStorageのストレージが用意されている

IE8から使える

Page 89: 2013year技術動向

クッキーの大きなもの

Page 90: 2013year技術動向

データ保存容量が大きい有効期限がない

クッキーと比べて

Page 91: 2013year技術動向

比較

別ウィンドウのデータ共有

データの有効期限 データ量の上限 サーバへのデー

タ送信

クッキー ○ 指定期限まで有効 4KB サーバへのアク

セスごと

session ×別ウィンドウ/タブを閉じるまで有効

5MB jsにて

local ○ 永続的に有効 5MB jsにて

Page 92: 2013year技術動向

length:保存されているデータ数key(n):保存されているn番目のkeygetItem(key):keyに対応するvaluesetItem(key, value):keyとvalueのペアでデータを保存removeItem(key):keyに対応するvalueを削除clear():データをすべてクリア

インターフェース

Page 93: 2013year技術動向

データの同期は?

Page 94: 2013year技術動向

Online/Offline eventsNetwork Information API

Shared Worker

Page 95: 2013year技術動向

オフラインの状態if ( navigator.onLine ) { console.log(‘ONLINE’);} else { console.log(‘OFFLINE’);}

Page 96: 2013year技術動向

オフラインイベントwindow.addEventListener(‘online’, function(e)) { // 同期処理}, false);

Page 98: 2013year技術動向

Shared Worker

バックグラウンドで JavaScriptを動作させる

Page 99: 2013year技術動向

オブジェクトの検出方法

Page 100: 2013year技術動向

(1) グローバルオブジェクト(window や navigtor など)に特定のプロパティがあるかチェック(2) 要素を作成し、次にその要素に特定のプロパティが存在するかチェック(3) 要素を作成し、その要素に特定のメソッドが存在するかチェックし、次にそのメソッドを呼んで戻り値をチェック(4) 要素を作成し、プロパティを特定の値に設定し、次にそのプロパティが設定した値を保持しているかチェック

Page 101: 2013year技術動向

ところで jsp ってめんどくね??

Page 102: 2013year技術動向

Mixer2

Page 103: 2013year技術動向

Mixer2 is a template engine for java application. You can write template by XHTML. 100% pure, XHTML and CSS. You can also use html5 with xml syntax.

Page 104: 2013year技術動向

いつものように Helloworld

Page 105: 2013year技術動向

Mixer2Engine m2e = new Mixer2Engine();Html html = m2e.loadHtmlTemplate( new File("/Users/albatrosary/Documents/workspace/Mixer2Sample/src/sample.html"));html.getById("msg",Div.class).getContent().clear();html.getById("msg",Div.class).getContent().add("Hello World !"); File file = new File("/Users/albatrosary/Documents/workspace/Mixer2Sample/src/sampleout.html");PrintWriter pw = null;try { pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); pw.println(m2e.saveToString(html)); }finally { if(pw!=null) pw.close();}

Page 106: 2013year技術動向

テンプレート

<html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body> <div id="msg">here comes message.</div></body></html>

Page 107: 2013year技術動向

こーなります

Page 108: 2013year技術動向

Spring + Mixer2

Page 110: 2013year技術動向

SAStruts + Mixer2

Page 112: 2013year技術動向

Super Agile Struts(SAStruts)は、Strutsを使った開発をSuper Agileに行なうためのフレームワーク設定ファイルを書かなくて良いようにしてます

http://sastruts.seasar.org/

Page 113: 2013year技術動向

Java EE 7

Page 114: 2013year技術動向
Page 115: 2013year技術動向

簡単開発というポリシーの元

・Java Caching・Batch Application・JSON・WebSocket・JSF:コンポーネント・ベース開発(View とロジックを分離して開発)

Page 116: 2013year技術動向

JSPは捨てられました

Page 117: 2013year技術動向

こんな風に書けます<input jsf:id=”” jsf:value=”” />

Page 118: 2013year技術動向

でも・・・これなら Mixer2 の方がいいような・・・

Page 119: 2013year技術動向

Swing の未来!!

Page 120: 2013year技術動向

ありません

Page 121: 2013year技術動向

なくなります

Page 122: 2013year技術動向

Swing は JavaFX に統合

WebKit ベースのブラウザ WebView コンポーネントがあります

Page 123: 2013year技術動向

ちょっと戻ります

Page 124: 2013year技術動向

Node.js

Page 125: 2013year技術動向

http://nodejs.org/

サーバサイドJavaScriptNon-blocking I/O環境

Page 126: 2013year技術動向

Node.js(WebSocket)でリアルタイムWebの実現

Page 127: 2013year技術動向

他にもあります

Page 128: 2013year技術動向

jaxser(http://www.jaxer.org/)RingoJS(http://ringo.org/)v8cgi(http://code.google.com/p/v8cgi)

Page 129: 2013year技術動向

Node.js の導入

$ wget http://nodejs.org/dist/node-v0.6.9.tar.gz$ tar zxvf node-v0.6.9.tar.gz$ ./configure$ make$ sudo make install$ node -vv0.6.9

http://lab.informarc.co.jp/javascript/websocket_real_time_web.html

Page 130: 2013year技術動向

とりあえず node を動かしてみる

Page 131: 2013year技術動向

console.log(“Hellow World”);$ node helloworld.js

Page 132: 2013year技術動向

var http = require("http");

http.createServer( function(req, res) { res.writeHead(200, {"Content-Type": "text/plain"}); res.write("Hello World"); res.end(); }).listen(8080);

$ node server_helloworld.js

Page 133: 2013year技術動向

WebSocket

Page 134: 2013year技術動向

従来のXMLHttpRequest(Ajax)の欠点を解決する技術Ajax は pushWebSocket は push/pull

Page 135: 2013year技術動向

Ajax の復習

Page 136: 2013year技術動向

Webブラウザ内で非同期通信とインターフェースの構築などを行う技術の総称。XMLHttpRequest(JavaScript)による非同期通信を利用し、通信結果に応じてダイナミックHTMLで動的にページの一部を書き換える

Asynchronous JavaScript + XML

Page 137: 2013year技術動向

WebSocket の 前に Socket

Page 138: 2013year技術動向

サーバJava ApplicationJava.net.Socket

クライアントFlash(ActionScript3.0)flash.net.Socket

Page 139: 2013year技術動向

Flash(クライアント)からJava(サーバ)へ送信

public static const TALK:int = 0x000;public function writeData(bytes:ByteArray):void { var bytes:ByteArray = new ByteArray(); bytes.writeByte(TALK); bytes.writeUFT(message); bytes.writeUnsignedInt(color);}

Page 140: 2013year技術動向

Java(サーバ)で受信public static final short TALK = 0x000;public class TalkData implements CommandData { public void readData(ByteBuilder in) { byte commandId = in.getByte(); String message = in.getUTF(); int color = in.getInt();

talk(user, message, color); }

Page 141: 2013year技術動向

Flash(クライアント)の受信public static const TALK_RESULT:int = 0x001;public function readData(bytes:ByteArray):void { commandId = bytes.readUTF(); message = bytes.readUTF(); color = bytes.readUnsignedInt(); id = bytes.readUTF(); name = bytes.readUTF();}public function talk(msg:String, color:unit):void { _chat.addBubble(new ChatBubble(msg, color));}

Page 142: 2013year技術動向

これからは WebSocket

Page 143: 2013year技術動向

WebSocket < Socket

リアルタイム・ウェブをもたらす技術→つなぎっぱということです!!

Page 144: 2013year技術動向

(1) クライアントから HTTP GET で接続(2) ヘッダー情報に「WebSocket だよ」情報が入っている(3) さっきも言った通り つなぎっぱ!

Page 145: 2013year技術動向

これにより双方向通信が可能になります!!

Page 146: 2013year技術動向

URLはws://wss://

ポートはws:80wss:443

Page 147: 2013year技術動向

Node.js に websocket.ioを入れてみる

$ npm install websocket.io

Page 149: 2013year技術動向

最後です

Page 150: 2013year技術動向
Page 151: 2013year技術動向

分散型バージョン管理システム

Page 152: 2013year技術動向

github:E が出てきて爆発的な人気者

Page 153: 2013year技術動向

github:E を使っているところ

GREEクックパッドはてなペパボDeNA

その他多数(知りません)

Page 154: 2013year技術動向

それぞれのファイルの差分を個別に管理

スナップショットとしてデータを管理

Page 155: 2013year技術動向
Page 156: 2013year技術動向

集中型バージョン管理システム

Page 157: 2013year技術動向

こんなことある?

Page 158: 2013year技術動向

ねぇねぇ、この前、学校のグループワークのレポートを作ってたら、共有ファイルサーバに保存したファイルがグループのほかの人に上書き保存されてたんだー。せっかくレポートに書いた内容が、消えて、また書き直さなくいけなくなっちゃって大変だったんだよ(T_T)。

Page 159: 2013year技術動向
Page 161: 2013year技術動向

アジャイルは女子高生が教えてくれます

Page 162: 2013year技術動向

cherry-pick が楽ソーシャルな環境が手元にくる自分(開発者)中心分散しているのでリポジトリがなくなっても何とかなる

Page 163: 2013year技術動向

ちなみに

Page 164: 2013year技術動向

gitgithubgithub:E(github Enterprise)

これ違うものですよ

Page 165: 2013year技術動向

git は 分散型バージョン管理システムgithub は git を使うためのハブgithub:E(github Enterprise) は github の イメージ(VMを含め)をローカル環境に置けるもの

Page 167: 2013year技術動向
Page 168: 2013year技術動向

Github は 現代のアレクサンドリア図書館

Page 169: 2013year技術動向

ご清聴ありがとうございました