2012/10/19 帰社日

1. PostgreSQL9.2 リリース
• 2012/09/10にリリース
• マルチコアにおけるスケーラビリティが向上。
• JSONをネイティブサポートし、インデックスやレプリケーションの機
能を強化。Index-onlyスキャン、CPU消費電力削減などを実現。
• 最大で毎秒35万件のリードクエリ(従来の4倍強)、データウェアハ
ウスクエリのIndex-onlyスキャン(同2~20倍)、最大で毎秒1万
4000件のデータ書き込み(同5倍)に対応。
• カスケーディング・レプリケーションが加わったことにより、水平方
向の拡張性が強化された。
• いくつかの機能について少し掘り下げて説明していきます。
【参考】
http://www.sraoss.co.jp/technology/postgresql/9.2/verification_re
port.php
1-1. Index-onlyスキャン
• Oracle、MYSQL、DB2などには既に実装されてい
る機能
• Indexに格納されたデータのみを検索する場合、
Indexからテーブルを参照しなくても結果を返却
できる
• その分、性能向上が見込める
→OracleだとB-Treeのみスキャン対象になるっぽい
• B-Tree Index知らない人は自分で調べてください。
【参考】 http://www.shift-theoracle.com/index/btree-index.html
1-2. カスケーディング・レプリケーション
• PostgreSQL9.0から通常のレプリケーション(非
同期)は実装された
• 9.2でカスケーディング・レプリケーション対応
• 簡単に説明するとレプリケーションされるスタ
ンバイ機にさらにレプリケーションできるスタ
ンバイ機を設定可能
• 以前はプライマリからのみスタンバイ機を設
定が可能
1-3. JSON型
• BETA3から日本語対応
• JSON型をカラムにしているとJSON形式で登録できる
→検索できないのでどういった意味が??誰か使い方
調べて教えてください。
• row_to_json関数が便利
→SELECT row_to_json(row(id, name)) FROM EMP;
→{“f1”:4649, “f2”:”moguro”}
• キーが自動に付与?使い勝手が・・・。
→SELECT row_to_json(tmp) FROM
→(SELECT id, name FROM EMP) tmp
→ {“id”:4649, “name”:”moguro”}
1-4. Range Types (範囲型)
• 文字通り範囲を指定できる型
• 今まで日付のFrom、Toは2カラム必要だったのに
1カラムで対応できる
• 使用できる型はint4range、int8range、 numrange、
daterange、tsrange (timestamp)、 tstzrange
(timestamptz)
• よく調べていないので下記参照してください
【参照】
http://postgresql.g.hatena.ne.jp/pgsql/20120416
2. BYOD
• 「Bring Your Own Device」の略で私物端末を業務
利用すること
• 最近、いろいろな記事などで賑わっている!
• スマートフォン普及に伴い、増えてきている
• 会社としても経費削減が見込める
• ただし、私物端末を業務で使うとセキュリティ事
故のリスクあり
• 各企業がいろいろな対策を行っている
• 例えば社内システムに私用端末から繋げる場合、
位置情報を取得して社内以外からアクセス不可
3. JQuery関連
• 本日、石○氏が目からうろこの「JQuery
Mobile」の説明があります。
• JQueryライセンスの統一
• JQuery Mobile1.2 新機能
• JQuery Mobile絡みで少し補足します
→私は簡単な説明ですけど、石○氏は超大作
らしいですよ!
3-1. JQueryライセンス
• 今まで「MIT」ライセンスと「GNU GPL」をサポート
していた
• 今後はGPLを廃止し、MITライセンスに統一
• MITライセンスの特徴
(1) 無料で無制限に扱うことが可能
(2) 著作権表示および本許諾表示をソフトウェアの
すべての複製または重要な部分に記載
(3) 作者または著作権者は、ソフトウェアに関して
なんら責任を負わない
3-2. JQuery Mobile1.2 新機能
• 2012/10/02にJQuery Mobile1.2 発表
• 主な新機能は以下の通り
(1) Popup
(2) Collapsible Lists
(3) Listview Autodividers
・・・などなど
• 新機能はきっと石○氏が説明してくれるでしょ
う・・・
• 以下にデモ画面を見れるサイトがあります
【参照】 http://jquerymobile.com/demos/1.2.0/
3-2-1. Popup
•
•
•
•
•
せっかくなので一つだけ説明
ツールチップやメニューなどをPopupできる
Popup画面以外をクリックすると閉じる
ダイアログと同じような感じ
Popupを表示する元は「data-rel=“popup”」を
記述する
• Popup画面は「data-role=“popup”」で指定
• では、ソース例を見ていきましょう
3-2-1. Popupソース
// ポップアップでツールチップを表示させる
<a href=“#popupTip” data-rel=“popup” data-role=“button” data-inline=“true”>ツールチップ</a>
<div data-role="popup" id=“popupTip" class="ui-content" data-theme="e”>
これはTooltipですよ
</div>
// ポップアップでメニューを表示させる
<a href="#popupMenu" data-rel="popup" data-role="button" data-inline="true">Menu</a>
<div data-role="popup" id="popupMenu" data-theme="a">
<ul data-role="listview" data-inset="true“ data-theme="b">
<li data-role=“divider” data-theme=“a“>お食事メニュー</li>
<li><a href=“xxxxx.html”>ラーメン</a></li>
<li><a href=“yyyyy.html”>チャーハン</a></li>
</ul>
</div>
3-3. 脆弱性
• 1.2以前のJQuery Mobileでは読み込んでいるだけで
脆弱性(XSS)を埋め込んでしまうので注意!
• 1.2 Betaでは脆弱性(XSS)が改修されたのに
1.2RC1/RC2では別で脆弱性が・・・。
• プロジェクトで使用する時は注意してください。
→1.2 安定版では直っているのかな?
• 詳しく説明してくれているサイトがありますので興味あ
る方はどうぞ
【参考】 http://masatokinugawa.l0.cm/2012/09/jquerymobile-location.href-xss.html
4. Tポイントツールバー
• ブラウザにアドオンするツール
• 検索するだけでTポイントがたまる
• このツールがWeb閲覧履歴をサーバへ送信
→利用規約に記載していますが・・・。
• SSL通信でもパラメータを取得可能
• クレーム多数・・・。まあそうですよね。
→サーバへの履歴送信やめたそうです・・・。
• ツールを使用するときはパケットキャプチャー必
須ですかね・・・。
5. Android4.1
• Android4.1(Jelly Beans)の新機能
→2012/06のGoogle I/Oで発表された
• だいぶ経っているので新機能っていうと・・・。
• 日本でも4.1のNexus7(16GB)が発売
→今購入して、クレジット登録すると2千円貰えるよ
• 新機能が沢山あるので気になった3点を紹介
(1) Google Now
(2) Notificationの拡張
(3) Android Beam
5-1. Google Now
• パーソナルアシスタント機能
• Android上のカレンダー、スケジュール、GPS等か
ら予測して情報を表示
• 例えば「2012/10/03 10:00 羽田空港」とカレン
ダーに登録しておくと目的地への所要時間、空
港に到着すると便情報などが表示
• 音声などにも反応
• まあ、iコンシェルですね・・・。
• なんか、電池に減りがさらに悪くなりそうな・・・。
5-2. Notificationの拡張
• 今までは通知内容の表示のみ
• 拡張できることによってボタンやアイコンを表示
できるようになる
• 「Notification.Builder」に設定
→例えば「setLargeIcon()」などでアイコン設定
• そこにアクションを設定できるため、通知内容か
らアクションを起こせる。つまり、わざわざアプリ
を起動しなくてもいい!
→アクションを追加するには「addAction()」
5-3. Android Beam
• 何かビームってかっこいい・・・。
• NFCベースの通信で実現
• NFC対応携帯をお互いにタッチすることでアプリ
情報を共有できる
→電話帳、ブラウザのURLなど
• Bluetooth経由でデータを転送することも可能
• やり取りは「NDEF メッセージ」を使用する
【参照】
http://developer.android.com/guide/topics/conn
ectivity/nfc/
5-3-1. NFC
• さすがに知らない人はいないと・・・
• SonyとPhilips社が開発した規格
• 2003/12もISO/IEC IS 18092の国際標準になって
いる
• NFCとはFeiCaなどの非接触ICカードと互換性が
ある近距離無線通信規格です
→「Near Field Communication」の略
• 13.56MHzの周波帯で10cm程度の距離を100~
400kbpsの双方向通信が可能
5-3-2. NFC用途
• カードシュミレーション機能
→駅などで定期、お店の支払いカードなど他規格
との連携
• リーダ・ライタ機能
→ポスターなどICカード、タグなどから情報読み取
ることが可能
• 端末間通信(P2P)
→携帯端末同士の連絡先交換など
• NFC端末間ペアリング
【参考】 http://www.nfc-world.com/about/02.html
5-3-3. NFC端末間ペアリング
• 大きいデータを通信するときに利用
• ペアリングだけをNFCで行い、大きいデータ通信
を「Bluetooth」、「Wifi」などで行うことが可能であ
る
• この処理を「ハンドオーバー」と言う
• 例えば駅などでWifi接続するとき、SSIDと暗号
キーを事前登録しますがアクセスキー登録済の
NFC端末を用意しておけばOKとなる
• また、近距離でしか通信できないため、盗聴の
可能性が限りなく低い
5-4. Titanium 3.0
• 4.1新機能ではないけど、Android4.1に対応・・・。
• Titanium 3.0 が10/21~10/23に開催される
「CODESTRONG」で発表されるらしい
→【URL】http://codestrong.com/
• 2.0までは標準のフレームワークが無かった
→自由に記述できるが統一性が無い
• 3.0以降ではMVCフレームワーク「Alloy」が標準
になる
• 実機でのリモートデバックに対応(すばらしい)
• コマンドラインツール「Titanium Studio」を用意
5-4-1. Alloy
• Titanium Mobileの開発元「appcelerator」がGitHubで提供
• RoRっぽいMVCフレームワーク
• npmでインストールして、「alloy new」でセットアップ
→「Play」なんかと同じ感じですね。
• 構成は以下のような感じ
• app/controllers/配下にコントローラ(JS)
• app/views/配下にビュー(HTML)
• app/models/配下にモデル(モデル定義のJSON)
• app/config/配下に設定(設定ファイルもJSON)
【参考】
http://www.slideshare.net/donayama/appceleratoralloy
5-5. J2ObjC
• スマートフォン絡みということで・・・
• Googleが公開したオープンソース
• JavaソースをObjective-Cソースに変換するツール
• JavaSE6をサポート
• ただし、GUIは作成することはできない
• 開発ツールはサポートする予定は無い
• 興味があれば自分で調べてください
→それほど興味がわかなかったので・・・
5-6. Selenium WebDriver
• これもスマートフォン絡みということで・・・
• Webアプリケーションのテスト自動化サポート
ツール
• テストコードはJava、C#、Python、Rubyで記述可
能
• iPhone、Androidを含む複数ブラウザ対応
• テストソースは容易に実装可能
• 画面の崩れなどはわからないので繰り返し行う
ようなシナリオ試験などに有効なのかな?
• JUnitと組み合わせると結果確認も自動化
5-6-1. Selenium WebDriver(サンプル)
• 画面A表示(①)、text(name=“xxx”)に文字入力
(②)、サブミット(③)までの流れ
WebDriver driver = new FirefoxDriver();//④
driver.get(“http://www.test.com/test”);//①
WebElement element =
driver.findElement(By.name(“xxx”)); //②
element.sendKeys(“sekainoHD”);//②
element.submit(); //③
driver.quit(); //⑤
※④、⑤はブラウザのオープン、クローズ
6. WebPlatform.org
• Web Platform Docsというプロジェクト
• Microsoft、Google、Apple、Adobe、Facebook
などが参加企業
• Webプログラミングでオープンかつ標準づくり
を目指しているらしい
• メインはHTML5、CSSなど
【参考】 http://www.webplatform.org/
7. 今月のScala
• わが社一押し?の「Scala」情報です
• 毎月、徐々に慣れていくためにScala情報を展開
していこうかと思います
• 日経コンピュータ9月号に関数型特集が掲載
→次の主役って題名。名古屋大学等でScalaを使用
したシステムを説明
• 今月は2トピックス
(1) Developer Contest開催(Typesafe社)
(2) 命令型スタイルと関数型スタイル
7-1. Developer Contest
•
•
•
•
Scalaプログラミングのコンテストです
提出期限が11月末までですが・・・
賞金は一位が$1,000です!
「Typesafe Stack can do」と記述されているので
「Typesafe Stack」を使うことが条件っぽい
• 「Typesafe Stack」とはScalaベースで「Akka」、「Play」な
どが含まれるオープンソースのプラットフォーム
【参照】 http://www.typesafe.com/resources/developercontest
7-1-1. Akka
• イベント駆動ミドルウェアフレームワーク
• 分散アプリケーションを作成するのに向いている(Java、Scalaで開
発可能)
• スレッド、ロック、非ブロッキングIOなどを意識することなく実装でき
る
• 実装する部分はActorなどを使用して、メッセージの送受信を行う
• Akka2.0ではScala2.10標準のFutureの実装が行われている
→Scala2.9のFuture(Actor用)ではない
【Akkaを試しているソース】
http://www.brainsellers.com/blog/inastream/2011/08/akka.html
【Futureを試しているソース】
http://modegramming.blogspot.jp/2012/09/scala-tips-scala-2104future2.html
7-1-2. Play
• 社内システムで使用する予定のフルスタックフ
レームワークです
• MVCモデルを実現し、「設定より規約」を重視し
ている
• Scala用ではビルドツールにsbtを採用
• 「Iteratee I/O」を実装しているため、追加設定無
しでWebSocketやCometなどが可能
【Iteratee I/Oの説明】
http://d.hatena.ne.jp/tanakh/20100824#p1
7-2.命令型スタイルと関数型スタイル
• Java、C++などは命令型
• Scalaは命令型、関数型の両方可能
• 例えばfor式を使う場合、関数リテラルを使用
することができる
• まあ、何を言っているか意味わからないと思
うのでソースで説明します
• 配列argsすべてを標準出力します
7-2-1. 命令型スタイル
while (i < args.length) {
println(args(i))
i += 1
}
• 命令型の説明のためであり、Scalaで推奨され
る記述方法ではない
• インデントは2つが推奨されているらしい
7-2-2. 関数型スタイル
args.forearch(println)
• この()内に関数を関数リテラルと呼ぶ
• 省略しすぎなので以下の記述もできる
【パターン1】
args.forearch(arg => println(arg))
【パターン2】
args.forearch((arg:String) => println(arg))
8. JavaEE7
•
•
•
•
JavaOne Conferenceが9/30~10/4開催
JavaEE7は2013/4リリース予定
噂されたクラウド対応は見送りっぽい
HTML5対応として「WebSocket」、HTML5ではないが
JSONサポートなどが含まれる
• JavaEE8以降の対応としてPaaS、NoSQLなどが予定され
ている
→NoSQLはJPAからアクセス可能する
• HTML5強化として、Avatarプロジェクトとして進めてい
る
→詳しい記事みつからない、誰か教えて・・・
8-1. WebSocketソース
• Java API for WebSocket1.0のサンプル
@webSocketEndPoint(path=“/ws/test”)
public class WsServer {
@WebSocketOpen
public void onOpen(Session peer) {
// 処理
}
}
8-2. JSONソース
• Java API for JSON 1.0のサンプル
JsonObject json = new JsonBuilder()
.beginArray(“emp”)
.beginObject().add(“No”, “1”).add(“Name”, “John”)
.beginObject().add(“No”, “2”).add(“Name”, “Mark”)
.beginObject().add(“No”, “3”).add(“Name”, “HD”)
.endObject()
.build();
8-3. Apache TomEE
• APサーバ繋がりでついでに説明
• 10/8に「Apache TomEE1.5」がリリース
→JavaEE6ですけど・・・
• TomEEとはTomcat、OpenWebBeans、OpenEJB、
MyFaces、Bean Validationなどで構成
→正確にはベースにしているだけっぽい
• Tomcatとの違いは使っているJarなどが異なる(追加 or
削除している)
→詳しくは以下のURLに載っている
【参照】http://blog.teamextension.com/comparingapache-tomcat-and-tomee-913
8-4. Apache Lucene
• いつの間にかApache繋がりに・・・
• 10/12「Apache Lucene4.0」がリリース
• 同時に「Apache Solr4.0」もリリース
• LuceneとはJavaで実装できる全文検索フレームワーク
→日本語検索用のアナライザ(JapaneseAnalyzer)も別途
用意されている
• SolrとはLuceneベースのエンタープライズ対応の検索
サーバー
→4.0はNoSQL検索プラットフォーム
• 個人的には凄い興味が10年前から・・・