AWS re:Invent 2016 Serverless Follow Up

AWS re:Invent 2016 Serverless Follow Upに行ってきたのでその殴り書きです。

What's new with Serverless

by 西谷さん

Lambda関連

  • Lambdaで環境変数をサポート
  • AWS Serverless Application Model(SAM)
    • 構成定義の共通言語(CloudFormationのエクステンション)
    • Lambdaベースのアプリケーションをパッケージしてデプロイするためのツール
    • YAML形式で記述可能
  • Serverless CI/CD pipeline
    • CodePipelineでGithubかCodeCommitから直接Pull
    • CodeBuildでサーバレスアプリのビルドとパッケージング
    • CloudFormationで完成したアプリをデプロイ
  • ICYMI: CloudWatchの新機能
    • Percentiles: あらゆるメトリクスでパーセンタイルの統計をサポート
  • AWS X-Rayとのインテグレーション
    • サービス間のイベント遷移を可視化
    • Lambdaから他サービス呼び出しと時間をトレース
    • 依存関係、関連性を可視化
    • 消えたイベントやスロットルといった状態を確認・診断が簡単に
    • 簡単なセットアップ
    • まだ使えないがもうすぐ
  • AWS Lambda新機能・エンハンス
    • Kinesisのイテレータとして新たにAT_TIMESTAMPをサポート
    • 任意の時点でのストリームデータ処理が可能
    • C#をサポート
    • デッドレターキュー
      3回実行しても処理されなかったイベントをSQSかSNSトピックへ送信
      コードに問題がある場合やスロットルされる場合もイベントを保存
      ファンクション単位
      全ての非同期呼び出しで可能
  • Lambda Everywhere(コンセプト)
    • Step Functions
      複数のLambdaを管理
      3回以上の施行
      非同期なファンクションに対するコールバックの追加
      待ち合わせのハンドリング
      連鎖的なファンクション実行
  • Amazon Lex
    • 音声ボットのようなもの
  • AWS Snowball Edge
  • AWS Greengrass(Preview)
    • AWSの処理をデバイス上でも
    • デバイス上でLambdaを実行
    • ラズパイとかで動かせる
  • Lambda@Edge(Preview)
    • 低レイテンシなリクエスト/レスポンスのカスタマイズ

API Gateway

  • バイナリのサポート
  • APIドキュメンテーション
    • コンソールから編集可能
    • Swagger インポート/エクスポート
  • AWS Marketplaceとのインテグレーション
    • APIのマネタイズ
    • 自分のAPIをマーケットプレイス上で販売
    • API利用者のための簡単な発見と調達
    • API利用料のトラッキング
  • Developer Portalの生成
    • API利用者のためのポータルサイトを生成
    • APIのリストやカタログと開発者のサインアップをするサーバーレスなアプリケーションを生成

Introducing C# in AWS Lambda

by 福井さん

  • .NET Coreで動作
    • Win32APIやCOMコンポーネントは呼べない
  • Visual Studioに統合された環境を利用可能
  • クラスの静的またはインスタンスメソッドとして定義可能
  • Contextオブジェクトを利用する場合はメソッドパラメータにILambdaContext型を指定
  • 以下のライブラリを提供
    • Amazon.Lambda.Core
    • Amazon.Lambda.Serialization.Json
    • Amazon.Lambda.Logging.AspNetCore
    • 全てNugetパッケージから取得可能

Introducing Amazon Lex, Amazon Polly and Amazon Recognition

by 西谷さん

Recognition

  • 画像認識
  • オブジェクトの種類を検知 花とかソファーとか
  • DetectFaces
    • 顔分析
    • 特徴の検出 男女とかメガネとか目が空いてるとか
    • Happy 96% とか
  • CompareFaces
    • 顔の比較
    • どのくらい似ているか 同じ人かどうか
  • IndexFaces/SearchFacesByImage
    • 顔画像をインデックス化して保存
    • 画像で検索できる
    • 違う写真から同じ人をさがす
  • ユースケース
    • 画像に自動でラベル付け
    • ベストな写真をリコメンド
    • 顧客がどういった層であるかや感情を認識
    • 同じ人の写真をグループ化
    • 施設内の立ち入り許可あるか
  • 日本はまだ
  • 管理コンソールから簡単に試せる

Amazon Polly

  • テキストをリアルな音声に変換するサービス
  • 24言語で47の声を提供
  • 低レンテンシ
  • 音声を保存・利用可能
  • 生まれた背景
    • UIで音声が増えてきた
    • 自然な音声が重要
  • SSML(Speech Synthesis Markup Language)
    • 音声言語マークアップ言語
    • スピーチの細かい調整が可能 音量、ピッチ等
  • Lexicons
    • 単語やフレーズの発音をカスタマイズ可能

Amazon Lex(Preview)

  • 音声とテキストを使った会話型インターフェースを作成
  • Alexaと同じ技術
  • チャットサービスへのデプロイ
  • バージョニングやエイリアスのサポート
  • AWS Mobile Hubとのインテグレーション

Amazon Pinpoint

by 清水さん

  • ユーザーの属性情報毎にプッシュ通知を送る
  • キャンペーンのスケジューリング
  • スタンダード通知とサイレント通知
  • キャンペーンとアプリケーション分析
  • 分析のためのS3自動エクスポート
  • A/Bテストとホールドアウトテスト
  • セグメント分析とファネル分析
  • Quietタイムとメッセージ制限
  • 1分に100万件可能
  • 料金
    • $1/100万メッセージ送信
    • $1/100万イベント受信
    • $0.0012/1ヶ月のユニークユーザー毎
    • 100万メッセージ、1億イベント、5000ユーザーまで無料

Introduction to AWS X-Ray

by 西谷さん

  • これまでのアプリケーションのデバッグとは
    • DEV/PRODで環境分ける
    • ブレークポイント設定して調査
    • 必要に応じてログを出力
    • サービス毎に異なるログフォーマット
    • 大変
  • X-Rayができること
    • リクエストをトレース
    • 記録
    • サービスマップで可視化
  • Java, .Net, Node.jsで利用可能
  • 各サービスのメタデータを自動的にキャプチャ
    • AWS SDKを利用したサービス
    • HTTP/HTTPS 等
  • UDPでSDKからデータを受信
  • こまかいサンプリングルールを定義可能

Ex-CTO meetup vol.3

Ex-CTO meetup vol.3 に行ってきました。

登壇者

株式会社カヤック 代表取締役CTO兼ゲーム事業部長
貝畑 政徳様

株式会社サイバーエージェント SGE事業部最高技術責任者
白井 英様

ウォンテッドリー株式会社 取締役CTO
川崎 禎紀様

モデレータ
稲荷 幹夫様

パネルディスカッション

各社の評価・育成

レコチョク

  • 社員150名 エンジニア85名
  • 答えはない
  • 人数によっても変わる
  • 20名くらいまでは全員見えるが40人超えてくるとそれもできない
  • 会社の成長によって変わってくる
  • 大きな企業が貢献度を定量的にするとあまり差が出なくなってくる
  • 個々人のやりたいことが違うのでモチベーションの維持が大変
  • 個人能力をどう引き出すか
  • 思想 離職後も通じる技術を育成すること
  • 評価者 チーム長が評価を実施。最終決定は部長+経営陣(多少の味付け程度)
  • 定量面 MBOにより半期での目標設定
  • 定性面 3年後のキャリアパスを考えさせた上で、スキル成長目標の設定
  • その他 年1度 吐出したエンジニアに社長賞(MAX 100万円)
  • 社長へ直接意見する口がある。CTOもしたから評価される
  • ビジネス研修2-3ヶ月
  • 上長メンタリング制度
  • 海外カンファレンスへの参加
  • 勉強会を労務時間

カヤック

  • 社員230名 エンジニア 110名
  • 思想 成長のための評価と月給の評価を分けている
  • 特徴 あなたが社長なら給料をあげたい順にならべろとしている
  • 評価者 PRJメンバー全員
  • 定量面 なし
  • 定性面 社長視点で考えた際に適切な給料額はいくらか
  • 評価時期 半年に1度
  • 年2回 全員社長合宿 お題を社長のつもりでブレストして翌日発表
  • 週1回 エンジニア勉強会
  • 月1回 つくっていいとも

サイバーエージェント

  • ゲーム事業のみ
  • 社員750名 エンジニア250名
  • 制度 成果評価と技術評価の2軸
  • 思想 チームとして成果が出せるように動いているか
  • 特徴 期初に自分で宣言して、それに対して評価
  • 表彰が多くて、人を目立たせる
  • 2つの某有名サービスを自分で設計・実装する
  • サーバーエンジニアはネイティブを、ネイティブはサーバーを学ぶ

Wantedly

  • 社員43名 エンジニア21名
  • 制度 Expectation制度 上長の期待に達したのか、Facebookを参考
  • 思想 自律的に働き、成長を実感できる環境
  • 特徴 状況の変化に素早く対応できる
  • 定量面 アクティブユーザーなどのサービスKPI
  • 定性面 Wantedly Way(mm PM 育成 文化 全体最適)
  • 時期 半期に1度
  • その他 5人ルール 1人が見るのはMAX5人まで、1on1(毎週) 上長と期待値合わせ、役員の全社員評価レビュー(毎月)、マネージャーへのフィードバック(毎Q)
  • インターンを積極的に取る 下に人をつけるようにする

ディスカッション

評価

  • 一人の上長がしっかり見られるのは6-10人
  • 増えると評価も教育もできない
  • 制度は大きく360度評価と、目標設定の2つ
  • 目標設定の技術レベルがあいまい
  • 設定の定め方や期待値の伝え方を今工夫、均質化している
  • カヤックは最初目標設定していたが、役員ができなかったので今はやっていない
  • 目標達成は個人のさじ加減になるので社員の評価できめる(カヤック)
  • 360度は結構辛辣なことを書かれることもある
  • アクセンチュア時代に相対評価で400人並べて上位10%給料上げるとかあった
  • 定期的に目標、進捗のすり合わせ。会社の方向とあっているか
  • 変化が早いので半年前の目標が合わなくなることもあるので、定期的に見直しが必要
  • 社外や関係者からの評価は職種によって有利不利あるので参考程度にしている。前回から上がったかとかは参考になる
  • 1on1は朝イチに予定入れる。予定がずれることがすくない。頭が働く
  • 面談は1日3人まで。自分の仕事ができなくなる
  • 評価制度はあるが、実際にどうやって運用するかが大事

育成

  • 新卒と中途は全く違う
  • 新卒は3年目までしっかり見る。守る
  • 新卒は1/4は結局やめていくが、できるだけ不安を潰していく
  • 中途は会社に馴染むかどうか。マインド、文化を相当気をつけないと上には入れられない
  • できるだけしたから育てる
  • 優秀なプログラマーが優秀なマネージャとは限らない
  • 成長を感じない時にやめていく。自分、会社、プロダクトなどの成長がある
  • 3つ事業部があり全然やり方違うので、やめたくなったらまずは移動してもらうと以外と楽しくなったりする
  • 新卒は最初ブレストしてキャリアパスを一旦設定する
  • CAは子会社戦略で組織を細かくして、裁量を渡す。決定をはやくする
  • みんなに発表やブログのアウトプットをしてもらう
  • 考えてることを言語化してもらう
  • 社内勉強会に外部の人も呼ぶ。内部だけだと甘えが出る
  • マネジメントしたくないエンジニアにもノウハウおぼえればできるので、早い時期から2,3人見るようにしてる
  • IT業界は若いうちから自分で考えて動けるようにするかは共通の課題。若いひとたちで業界が回っている。

質疑応答

評価が上がるときの基準はどうしているか

  • 昇級とグレードは別。ある程度は相関関係があるが、グレードは毎月変わる可能性もある
  • 職能ががるとグレードがあがる。上長ができると思ったら
  • 上長の期待値を満たすのが何回か続いたら上がる

本人と上長の評価に差が出た時どう開発するか

  • 基本的には上長がつけたものになる
  • ずれないために1on1をしている。本人もできないからだめだよねと納得感をだす
  • 意識合わせはオフィシャル、アンオフィシャルのどちらでもいい。ランチとか

JJUGナイトセミナー Java API訴訟問題を考える

JJUGナイトセミナー Java API訴訟問題を考える に行ってきました。

Oracleが訴えるまでの経緯について~SunとOSSとIBMとAndroid~

鈴木雄介さん(JJUG会長)

Oracle vs Googleの前に知っておいてほしいこと

Javaのエコシステム

Javaの魅力

  • 標準仕様と各社別の実装
  • 仕様の策定はオープン
    • 仕様はJCPを通じて作成される
    • 当時はSunを中心にベンダー各社が標準の組織
    • 2011年になってJUG(経由で個人)も参加可能に

各社別の実装

  • ベンダーはJava標準APIを実装した製品を販売する
  • 標準だからロックインが回避できる
    ベンダー独自実装への極端な拒否感があった時代

JCPの目的

  • 標準化の共有と追加実装の許容
  • ただし、標準認定にはSunによるテストが必要
  • パスするとJavaのロゴマークを使える(お金は払う必要がある)
  • とてもよくできたエコシステム

  • 一方Javaは肥大化するばかり

    • 当時は全てを実装しないといけなかった

OSSのエコシステム

  • Apache Software Foundation
    • 1999年設立 オープンソースを支援する任意団体
    • OSSをホストするためのプロセスがある
    • 基本的にApashce Software Licence(AL) 2.0
      • 商用製品やクローズドにも利用可能
      • 公開しなくてもいい

IBMとASF

  • WebSphereはASFの成果物を利用
    • ServletコンテナはTomcatベース
    • HTTPはApacheベース
  • オープンソースを戦略的に活用
    • Linux成功体験がベース
    • Eclipseを2001/11にOSS化
  • OSSを通じた実質的な標準化

  • 2004年 TomcatがRI(参照実装)に

  • コミュニティからのイノベーション

    • 2005年 IoC(後のDI)、Spring
    • 2006年 JBoss旋風
    • JavaSEがついていけてなかった
  • JavaSEでもTomcatのようなことができないか

JavaとOSS

  • 2005/5 ProjectHarmonyが提案
  • Apache Licencse2.0 て提供されるJ2SE 5 の実装を提供すること
  • モジューラーランタイム、つまりJavaVMやクラスライブラリの実装を自由に組み合わせられる仕組みにすること
  • 参加者多数 BEA、IBM、Intel 等
  • 2006/10 ApacheHarmony誕生

  • 2006/11 Sunが対抗してJ2SEをOSS化

    • のちのOpenJDK
    • ただしGPLv2(コード公開義務あり)
      ベンターは不満
  • 2006年 Apache Harmonyが認定を要求

    • Javaが規定するJavaseの利用目的に組み込み系への利用制限があったため適用せず
    • 2007年 公開書簡
      • Harmony 制限外せ
      • Sun やだ
  • 2007/8 SunがTCK(認定のテストキット)を公開

    • ただしGPLv2なら
    • どう見てもOpenJDK専用
    • Apacheが抗議活動をし、JCPでのJSR承認に全て反対する

AndroidとJava

2005年頃からGoogleのAndroid戦略

  • オープンソースによる共有資産を作ることでキャリアも端末メーカーも大きなメリット
  • MSを倒す
  • キャリアや端末メーカーに互換性を提供する
  • Androidコミュニティを構築する

  • この時点ではMozzilaライセンスを検討

  • Andy Rubin氏によるSunへの批判

    • Androidはプラットフォームであり、各社が自由に差別化できるべき
    • SunはOSSにしたとしても、独自実装を含むならSUNから認定を受けるためにロイヤリティを払う必要がある
  • Googleも当初は認定をとるつもり

Android

  • しかたなく独自JVMのDalvkを作る

  • ソフトウェアの呪縛から逃れたかったハードやキャリアが支持

  • Googleはソフトウェアの対価は不要。ユーザーベースが欲しい

  • 結果として分断が生まれた

    • Googleの責任もあり、メーカーのセンスのなさもある

その後

  • SunのOSS戦略は成功せず
  • 2009/4/20 Oracle買収発表

  • 2010/8 OracleがGoogleを提訴

  • 2010/10 IBMがOpenJDKに ー Harmonyは2011/11に活動停止

まとめ

  • Javahaベンダーによる標準システムのエコシステムをつくったのはよかった
  • しかし、OSSの実装の共有と独自実装の流れになった

個人的見解

  • GoogleがJavaを分断したは正しい
  • SunがOSSを利用したビジネスをできなかったことも問題

    • OSSを戦略的に利用できなかった
    • JavaをOSS化しなければもっと分断したと思われる
  • なぜ訴えたか

    • JavaMEで得ていたライセンスがなくなったのはAndroidのせい?
  • IBMすごい
    • Harmonyを始めたのも終わらせたのもIBMなのに訴訟の話には出てこない
    • うまく暗躍してる感じ

Oracle vs Google訴訟の全貌と概要 ~APIは著作権で保護されるべきか~

栗原潔さん(弁理士)

訴訟の概要と争点

論点は3つ
最初の二つは解決済み

  • 特許権侵害

    • OracleがSun買収に伴い獲得した特許権
    • Oracle敗訴
  • Javaライブラリ実装コード本体の無断複製

    • 対象はわずか rangeCheck() の9行のみ
    • 違反だが違反金は(たしか)$0
  • JavaAPIの著作権侵害

    • APIは書作権で保護されるか
    • API利用はフェアユースになるか
    • 2016/6 保護されるがフェアユースにあたるとの評決
    • Oracleは控訴の方針

法律議論の注意点

  • 解釈論
    現在の法律をどう解釈すべきか
  • 立法論
    そもそも法律はどうあるべきか

著作権制度の大原則

  • 申請しなくても創作したら自動的に生じる
  • 著作権法は表現を保護するものであって、アイデアを保護するものではない(二分論)
    • 表現とアイデアが常に明確に分離可能とは限らない
    • 特にプログラムについてはそう言える

そもそも論

  • なぜプログラムは著作権法で保護されるのか ー 本来音楽、美術、文学等に関連した法律で、技術産業とは縁が薄かった
  • 1980年代にプログラム保護が急務だったため、政策的に「文芸の著作物」として保護することが決められた
    • 日本は特別法による保護を主張していたが、米国の圧力で断念
    • ベルヌ条約で国際的調和を早期に実現する以上やむをえない決断だったと言える

米国フェアユース制度とは

著作権の例外規定

  • 日本
    • 法律に明記された制限規定に従う
  • 米国
    • 公正な利用であれば著作権が制限される(フェアユース)

社会にメリットがあると判断されればフェアユースとなる

  • 仕様の目的および性質(非営利だとフェアユースになりやすい)
  • 著作権のある著作物の性質
  • 全部コピーか一部か
  • 潜在的市場または価値に対する仕様の影響
    • 実際はこの要素が重要視されることが多い
    • コピーされたことで元の商品が本当に売れなくなったか等

例:家庭でテレビを録画しても侵害にならない理由

  • 日本
    • 私的利用目的のため
    • 判断基準は法律にどう書いてあるか
      • 予測可能性が高い
  • 米国
    • タイムシフト録画はフェアユースであると最高裁判決が出されたから
    • 後に法制化
    • 判断基準は実態として損害があったか等
      • 社会・技術の変化に迅速に対応

フェアユースに関するOracleとGoogleの言い分

Oracle

  • GoogleはAndroidから420億ドルの広告料を受けている
  • フェアユースは報道、教育、研究などに適用されるもの
  • Googleはスマホ市場の遅れを取り戻すために流用した

Google

  • APIの再利用はイノベーションの源泉
  • Javaは最初からフリーでオープンなものとして構築された。これにより産業と社会は大きな御社を受けた(証言:ジョナサン・シュバルツ)
  • Oracleはスマホ市場で競合しておらず、ライセンス収益を求めているだけ

一旦フェアユースとなったが、Googleが正しいとは必ずしも言い難く、ひっくり返る可能性はあると思う。

個人的見解

  • 実装コードの大量デッドコピーに限定されるべき
  • そもそもソフトウェアのSSOは著作権で保護されるべきではない
    • 車のエンジンで他社のを見て真似るようなことは普通にされていることで、プログラムだけ許されないのはおかしい。特許は別。
  • 互換プラットフォームのためのAPIは制限されるべきではない(ただし、こんかいは完全な互換PFとは言い難い)
  • 仮にGoogleが敗訴してもAndroidが販売禁止になることはなく、お金で解決されるだろう

JavaOne 2015 報告会 @ 東京

JavaOne 2015 報告会 @ 東京に行ってきました。

Opening & JavaOne 2015 over all

伊藤 敬さん(日本オラクル)

Keynoteはあまり見所がなかった。セッションが中心。 参加者は去年より微増。9000人くらいか。

キッズプログラムが非常に大きな規模で行われた。 小学3,4年から中高生までWebだけでなくIoTやロボットなんかもあった。 印象に残ったのは、社会人と同じくらいプログラムができる子供が非常に多かった。

Java人口は1000万人くらいに戻してきている。
ロードマップは今までと変わらなかった。OpenJDKはコミッターの数が136%伸びた。 UserGroupは倍増。南米で増えている。日本でも増えた。

JCPの法人会員を増やそうとしている。法人会員費を免除しようとしている。 あとは可決を待つだけで、実際は今問い合わせをすると無料にしてくれる。

Impressions of JavaOne & Java trends

鈴木 雄介さん(JJUG)

JavaOne感想

目玉は無し。20周年がなければ寂しかった。
Sunの創業者のスコットが登場。

コミュニティ・キーノートが開催されたが、学芸会のようなパーティーのノリ。 Kids are future.(子供達が未来)

OracleとJava

Oracleは予定通りに作業を進める会社。
Javaエヴァンジェリストを削減。
コミュニティの声を聞こうという姿勢。JCPにもJUGが関わっていくことも可能。Javaカラーは維持されている。

コミュニティを重視しているのは間違いない。一方でJavaビジネスは苦労していそう。OracleとJavaはいい関係でもあり微妙な関係でもある。

JJUGとしては引き続きエンジニアの地位と技術力の向上に貢献します!

技術トレンド

  • DevOps & Microservices
    Javaそのものが重要ではない(Javaは基盤)
    Javaという単語が出てこないセッションも結構あった。
    ITサービス運用が重要
    いかにITサービスを継続していけるか
    ソフトウェア開発は十分に成熟している

現時点では先端Webサービス系企業が取り組んだものが共有されて広がりつつある状態。
Netflix、Gilt、Twitter、Foursquare等

  • カナリアリリース
    現行システムに並行してNewバージョンを動かして、少しずつNewに移行していく。
    サーバー台数が倍必要。クラウドならではのリリース方式。

  • ダークカナリア
    開発者にしか見えないリリースを本番環境にする。(本番環境でのテスト)
    ステージングではなく、バグがあってもいきなり本番環境にリリースして、開発者だけがアクセスしてテストする。

  • Chaos Monkey
    ランダムにサーバーをダウンさせるOSS
    インスタンスは毎週、アベイラビリティゾーンあるいはリージョン丸ごとは毎月おとしている。

全体的にサービス品質を高めるために、部分的な品質劣化を許容する。
不運なユーザーはいるが、サービスがダウンすることにはならない。
エンタープライズ発想とは異なる。どちらがいい悪いではない。

重要なポイントが変化している。
昔は内部の構造(クラス図とか)が大事
-> プロセスや外部品質が大事(アジャイルやユニットテストとか)
-> サービスを維持することが重要に

Javaエンジニアだからと言ってサーバーのことを知らなくてもいい時代ではなくなった。

サマリ

来年のJavaOneに注目
Java9がリリース!

Javaだけではないトレンドにも注目
サービスにも目を向けてみよう。

JJUGをよろしく!
Javaコミュニティは引き続き元気です!
懇親会も大事だよ!

JDK Update

久保田 祐史さん(NTT)

Java SE - Oracleが出しているもの
JDK - Oracleが出しているとは限らない

なぜJavaOneに行くのか
課題:Javaの進化方向
人物:誰が何の担当か
詳細:技術内容等

Java9が2016/9/22にリリース
JavaOneの最終日に合わせてきたので、何が何でも出してくると思う。

Java9
Module導入(ProjectJigsaw)とそれ以外

JDK10+
ハードウェア、OSへの最適化
去年出ていた話とほぼ一緒なので今回は話さない。

Java9

Project Jigsaw以外の変更点

jshell
Java.Doc.Next
Cross ompiling and the javac -release
Miling Project Coin - "_"のみの変数名が禁止になるので互換性に問題ある
Deprecation and imports
Re-engineering javac - Diamond nest でコンパイルが遅くなるのを解消

6つの非推奨メソッド削除(JEP162)
JDK内部APIのカプセル化
JDK/JREのランタイムイメージ変更(JEP220)
ブートクラスパスを変えるものが削除(JEP261)

Project Jigsawの変更点

長いので全部話せないと思うが、資料を公開するので後でみてください。

JAR Hell - 例えばHadoopのクラスパスの指定がとてつもなく長い
紛失したライブラリはどれ?
コンフリクトはどこで発生?
内部APIを安全に変更できる?依存関係がよくわからない

JARの抽象化機構が必要 -> Moduleの導入

Moduleは複数のPackageをまとめたコンテナ
コンテナによって

  • 依存関係を明確化
  • 他コンテナを妨げない
  • 特定パッケージのみ公開する

Moduleの定義は module-info.java ファイルに記述

例:com.foo.barの場合

module com.foo.bar {
 requires java.sql; -> 依存するパッケージ
 exports com.foo.bar.alpha; -> 公開するパッケージはexports
 exports com.foo.bar.beta to -> toで公開先を限定できる
  com.foo.app,
  com.foo.xxx
}

以下のコマンドでモジュールのリストが表示できる。

java -listmods

jdepsコマンドで依存ライブラリ確認

java.baseモジュールは基底のモジュールなので、自動的に読み込まれる。

実行可能イメージ作成
jlinkコマンドでモジュールを指定して実行バイナリファイルが作成できる
組み込みやセキュリティで活躍するかも

Java SE 講演から

伊藤 博志さん(ゴールドマン・サックス)

Eclipse Collections

ゴールドマン・サックスがEclipse Foundation Memberになったので、これまでGS Collectionsとし作っていたものをEclipse Collectionsに移管することになった。

Java8 Streamを内包して便利な機能を追加したもの。Java8でなくても、5以降であれば使うことができる。

JDKのHashSetは非常にひどい実装。HashMapをラップしているだけ。Keyを使ってValueの方は使ってないのでメモリ効率が非常に悪い。
Eclipse Collectionsでは最大で6倍くらい速度が変わってくる。

Mapも2倍くらいメモリ効率がいい。プリィティブのリストを操作する場合にも効率的な方法で使える。

Java ME & IoT

大山 弘樹さん(Javaカンファレンス)

発表時間は20分と言われたが、正直そんなに内容が無い。3分で終わる。

Java ME Embeddedバージョンが8から8.2になった。
Linux対応になった。

ME Embedded と SE Embedded があるが、SE embedded はセッションが1つも無かった。無くなったのかもしれない。

Raspberry Piが2になった

KeynodeではEmbeddedのデモがなかった。初めてのこと。

Java EE Update

大中 浩行さん(グロースエクスパートナーズ), 上妻 宜人さん

Java EE 8 は2017年リリース予定
Java EE 8 はまだ検討中なので変更になる可能性があり。

Java EE 8 のアップデート

Servlet 4.0

サーブレットコンテナもHTTP/2に対応
サーバープッシュ(関連するリソースをまとめて返す)で既存の1リクエスト、1レスポンスが崩れるので、Servletを修正する必要がある。

JAX-RS2.1

非同期クライアントAPIの改善
並列で依存関係のあるWebAPIを呼び出したい
アノテーションによる依存関係制御が追加されるかもしれない

ノンブロッキングI/O
データ読み込みでブロックしていたのが問題。データが来た時だけreadを呼び出すように変更するアイデアが提案されていた。
本当に必要?ユーザーレベルでNIOを意識しなくてもいいのでは等の意見も。

JMS2.0

これまでMessageListenerを実装する必要があった。テキストが欲しいだけなのにキャストが必要。
MessageListenerを無くす案がある。

JPA2.2

Java SE 8対応
Date and Time API への対応
@NamedQueryのRepeatable対応

スクロール機能の標準化

Java EE 周辺の話

WildFly Swarm

Spring Boot風のJava EE
2015/5に1.0.0.Alphaリリース
まだ商用には早い

実行可能なjarファイルが作成される。
java -jar xxx でWildFlyが起動されてアプリケーションが実行される。
WildFly全体で約127MBなのでまだ大きい。最終的にはもっと小さくなるのでは。

MVC1.0

actionベースのMVCフレームワーク
現在はEarly Draft
リファレンス実装はozark

なぜJSFでなくMVCなのか? 見通しのよさ、簡便さ
RESTとの相性が良い
フロントエンドの流行り廃りの激しさ
定着した技術としてのサーバーサイドMVCへのニーズ

MVCのControllarはJAX-RSのresourceとして実装

Validation
Bean Validation(JSR349)ベース
ハンドリングの仕様がprimitiveな印象

JSON-P 1.1

1.0はJavaEE7で実装
現在はEarly Draft Review
なぜかbooleanが対応の型に入っていない

JSON-PATCH
JSON更新処理の標準化
2つのJSON間のdiffが取れる

JSON-MERGE PATCH
JSON間のmerge処理
nullの値をマージするとキーの削除ができる仕様が追加になった

JsonObject/JsonArrayをMap/Listとしてstream+Lambdaで使用可能に
streamモデルによる大容量JSONデータの処理

JSONに対する低レベル操作API
JSONとJavaオブジェクト(JavaBean)へのマッピング機能は持っていない
 -> JSON-B(JSR367)で解決できるかもしれないが、標準化に時間がかかりすぎる!

おまけ

セッションを聞いていると、既に日本で聞いたことのある話が多い。
ソフトウェア開発レベルでは日本は海外に遅れてはいない。

Speaker Panel: How to be a speaker at JavaOne?

モデレータ:
 伊藤 敬さん(日本オラクル)
パネル:
 寺田 佳央さん(日本マイクロソフト)
 谷本 心さん(Acroquest Technology)
 伊藤 博志さん(ゴールドマン・サックス)

Q1.JavaOneで講演してみてどうでしたか?率直な意見を聞かせてください

[谷本さん]
費用がでなくて自腹なので高い。金銭的なメリットはないが、コミュニティに貢献できていることがうれしい。
受かるテーマで申し込んだ。ログの可視化。トラブルシュートネタは受かりやすいと踏んだ。 自分の英語が通じるかどうかが怖かったが、ちゃんと準備していれば文法が間違っていてもみんなわかってくれる。

[伊藤さん]
初めてのJavaOne参加。登壇が決まったのは9月。とにかく楽しかった。
Eclipse Fundationで枠が余ってるのでやらない?と言われて軽いノリでやった。
日本ではみんなが楽しんでるかわからないところがあるが、JavaOneでは興味持ってくれていることがすぐわかる。

[寺田さん]
今回2回目。Oracleをやめることになったが今年のJavaOneは絶対出たかった。
自分で申し込んだのではなく、他の人のセッションに一緒に出させてもらった。1セッションに2,3人でられるので、1人で不安な人は一緒にやるのもいい。
発表する10分前にお願いして出させてもらった。スライドは全部日本語で書いてあったが、結構みんな理解してくれた。 1回目の時はすごい緊張した。セッションがつまらないとみんな一気に去っていくので緊張した。今回は結構気楽にできた。
日本でやるときとは少し変えた。日本は最後まで聞いてくれるので、最後に面白いことを持ってきてもいいが、JavaOneではみんなすぐ去っていくので、最初にどんな面白いことをやるか説明すると、そこまでは聞いてくれると思った。

Q2.今後、どんな人にJavaOneで講演してもらいたいと思いますか?

[谷本さん]
CCCとかのJJUGで発表している人はでて欲しい。
日本のレベルは高いので、そのまま英語にすれば十分通じると思う。
子供がスピーカーをやるのを見てみたい。

[伊藤さん]
日本のJJUGのツイートは圧倒的に多いと思う。日本のコミュニティのあり方はユニークだと思うので、それを発信していくといいと思う。

[寺田さん]
いまここに来ているみなさんに、まずは日本で情報発信していただきたい。
事例系の話は受かる確率が高いと思うので、そういったものがある人に行ってほしい。

Q3.あなたが習得した「JavaOneスピーカーになるための極意」を教えて下さい

[谷本さん]
プレゼン中にどんどん質問がくるので、英語が苦手なら最初にTwitterで質問してくださいという。手を上げてる人がいたが見ない振りをした。
今の仕事を頑張れ。仕事を頑張ってその内容を話せばいい。仕事頑張らずに趣味の範囲で話そうとすると事例として意味がなかったり面白くなかったりすると思う。自分が体験した痛みを通して話したほうがいい。小さい会社は知名度がないのでなにか泊をつけた方がいい。お客さんの名前を出すとか。
日本でJJUG等でどれだけ発表してきたかの経歴も書くので、そういったことがあると通りやすい。
過去のプレゼンの資料や動画チェックがある。全部日本語で出したが通った。楽しそうに話してるやつだったので、ちゃんと話せる人だと思われたのだと思う。
ボソボソ小声で喋ってたらダメだと思う。

[伊藤さん]
テクノロジー系のプレゼンは用語が既に英語なので、動詞だけ英語にする感じでいいと思う。会話をするよりはプレゼンの方が楽。
JavaOneのセッションは日本のCCCに比べるとそんなにすごい内容でないことも多いので、スキルよりもマインドの問題。勢いでやってしまった方がいい。

[寺田さん]
会社として出る。楽天のように事例を持っている会社がどんなことをやっているかのノウハウがあると通りやすいと思う。 LambdaとかJigsawとかの単品の技術を話そうと思うと、本家に話す人がいっぱいいると思うので、事例やトラブルシューティングとかの方が通りやすいと思う。
参加して見る人はセッションをちゃんとみた方がいい。スピーカーの人はキャッチーなタイトルを付けたりするので、行ってみたらつまらなかったということがある。

[櫻庭さん]
締め切り間際に出すと絶対落ちる。本当でやろうと思うなら早く応募した方が絶対良い。

Q4.JavaOneのスピーカーになるとこんなメリットがあるよ!という話を教えて下さい

[谷本さん]
転職しやすくなるかも。よく話が来る。

[伊藤さん]
専用のパスがもらえる。結構いい。

[寺田さん]
チケットがタダになる。
スピーカ専用のエリアが使える。

Q5.来年JavaOneのスピーカーになりたい!と思っている皆さんへ最後に一言

[谷本さん]
3年くらい応募して落ちていたこともある。
今日出た話をまとめると2つで、コミュニティを盛り上げていきましょうと仕事頑張れだとおもう。聞くだけでやっている気にならず、参加してほしい。

[伊藤さん]
自分の仕事をしっかりやるのは大事。今年のJavaDayTokyoで初めて登壇したばっかりだが、仕事をしっかりやっていたおかげで出られたと思う。
今は出るつもりはなくても、常にアンテナを張っておくことは大事。

[寺田さん]
JavaOne、JJUGに限らず、日本には優秀な技術者が本当に多いので、ずっと聞いているひとも是非今度は発表してほしい。そうすればコミュニティも盛り上がるし、日本はこんなことやってるというのを世界に発信できる。

Java8 ラムダ式で再帰処理

宮川さんときしださんがラムダ式で再起関数を実装する面白いエントリーを書かれていたので自分でも考えてみました。

不動点コンビネータを使ってラムダ式で再帰関数を定義する - 宮川拓の日記

Java8のラムダで再帰する - きしだのはてな

まず、クラス変数で定義するなら再帰は可能です。

public class Test {
    private static IntUnaryOperator fib;
    static {
        fib = (n -> n <= 1
                ? 1
                : (fib.applyAsInt(n - 2) + fib.applyAsInt(n - 1)));
    }

    public static void main(String[] args) throws Exception {
        IntStream.range(0, 10)
            .map(fib::applyAsInt)
            .forEach(System.out::println);
    }
}

main関数内でも定義できますが、この場合はstatic内がやはりいいかなと。
インスタンス変数ならコンストラクタで。

ただし1行で書くとエラーになります。

private static IntUnaryOperator fib =
        (n -> n <= 1
            ? 1
            : (fib.applyAsInt(n - 2) + fib.applyAsInt(n - 1)));
=> コンパイルエラー

他にはFunctionalInterfaceを用意して、パラメータで自分自身を渡すとか。

public class Test {
    public static void main(String[] args) throws Exception {
        Fibonacci fib = ((n, f) -> n <= 1
                ? 1
                : (f.apply(n - 2, f) + f.apply(n - 1, f)));

        IntStream.range(0, 10)
            .map(n -> fib.apply(n, fib))
            .forEach(System.out::println);
    }
}

@FunctionalInterface
interface Fibonacci {
    public int apply(int i, Fibonacci fib);
}

でもこれって再帰と呼んでいいのかどうか?(笑)

JavaOne 2014 サンフランシスコ報告会 Tokyo

JavaOne 2014 サンフランシスコ報告会 Tokyoに行ってきました。

基調講演から振り返る JavaOne 2014

寺田 佳央さん

今年19回目
参加者数 9010名 年々増加している
スピーカー 615名中382名がOracle以外の人
アジアからの参加者は全体の5%
Peter Utzschneider が取りまとめ
今年1年かけたJavaのメッセージはCREATE THE FUTURE JAVA

Javaの継続的な進化

  • コミュニティ
    • OpenJDK
    • JCP
      JCP.next 進化の継続
    • Java User Group
      今年世界で約80のJUGが出来ている
  • テクノロジー
    • Java SE
    • Java Embedded
    • Java EE JSR366が承認
  • Oracle Stewardship
    • Java啓蒙活動
    • OTN
    • Java.net

今年JCP15周年のイベントが多く開催されている

Java8リリース後の現状

今年3月に出たばかりなのに、8か国で80冊以上の本が出ている。これはすごいこと。

Lambda & Stream APIとは

  • Java Language を近代化するための大きな一歩
  • Java Libraries を近代化するための大きな一歩
  • 過去最大のアップグレード

ゴールドマンサックスがJava8をエンタープライズで使用。
リリース前から既に把握していて、リリースに対応するためのコードを既に書いていた。
無名インナークラスをLambdaに変換してテストコードを9%削減できた(10.5万行→9.5万行)

高速化されている。
Fork/Joinの改良
高速なAtomic変数、並列処理ライブラリ

セキュリティ関連対策を実施
年4回定期的なパッチ提供
今後の予定
 2015/01/20
 2015/04/14
 2015/07/14
 2015/10/20

Java SE 8u20の新機能
Advanced Management Console(AMC) 1.0 (ただし契約締結者専用)

  • Java Applet、WebStartの利用状況収集
  • アクセス制限が可能
  • 特定アプリに対し、古いJREでの動作指定が可能

ちょっと触ってみたが、まだ設定が難しい。

Java Embedded

50万ダウンロード
業界全体で体制が整ってきている
多くの人がオンラインで学んでいる

Javaとモバイルのイノベーション
MobileApplicationFramework(有償)
 Javaを書けばiOS、Androidで動く
 標準技術で実装
 デバイスの差異も吸収
 Apache Cordovaでも使用可能

Java SEの将来

Java SE9

  • Project Jigsaw
  • HTTP 2.0
  • Lightweight JSON
  • Cloudに最適化したVM

JDK EnhancementProposal(Java SE9に含まれる予定の機能)
http://openjdk.java.net/jeps

JEP182 -source, -target オプションのルール変更
 JEPには無い
 過去のSEのバージョンでコンパイルするオプション
 Java8でも既に警告が出る
 Java9では指定不可になる
 古いバージョンでのコンパイルが出来なくなる

SE9以降の新しいプロジェクト

  • Project Valhalla
    • value型の追加
      参照型オブジェクトに比べメモリ、パフォーマンスを改善
    • ジェネリクスにおけるプリミティブ型
  • Project Panama
    • JVMとネイティブライブラリ間の相互接続を可能にする新機能

JavaSE7 公式アップデート終了(有償サポートはある)

Java EE の将来

常に業界トレンドを深く観察
ユーザーグループにアンケートを取って新機能を選定
HTML5/Web層の拡張
簡単開発
Cloud稼働用のインフラ

Java EE8 (JSR366)は満場一致で承認がおりた
これから開発が進んでいく

みなさんに積極的に参加してほしい
JUGで開発メンバーにフィードバックできるようになっている
http://glassfish.org/contribute

2016年にJavaEE8が出る予定

その他

IntelがJavaOneに参加
今後Javaへの最適化がされていくと思う

SnapCode
子供向け学習用IDE&RADツール

Oracle感謝祭は遊園地を貸し切って開催
エアロスミスのコンサートも

録画済みセッションを全て近日公開予定

来年はJava20周年
様々なイベントが企画されると思う

Java One 2015 San Franciscoは
2015/10/25 - 2015/10/29

Java コミュニティアップデート

鈴木 雄介さん(JJUGのリーダー)

OUGLS参加報告

Oracle User Group Leader Summit
世界中のオラクル製品ユーザーグループのリーダーが集まる場
JavaOneの直前に2日間開催

アイスブレイクとしてコミュニティの未来を考えて絵にしたり

何をするのか

  • 地域コミュニティの話し合い
  • 各コミュニティからの報告
  • ユーザーグループの成長について
    今年主なテーマはソーシャルメディアの利用
    ソーシャルメディアを利用してどうやってユーザーやスポンサーを集められるか
  • Chief Customer Officeの話
    ORACLEがいかに顧客の声に興味があるかを延々と話してた。

感想

  • コミュニティ運営は世界中で苦労がある
    東京は特異性がある
     世界でも東京のメンバー数は多い方
     イベントにこんなに集まってくれるのはすごい
  • 面白いアイデア
    動画配信やリモート講師
     日本はタイムゾーン的に海外とのリアルタイムは難しい
    子供向けイベント
  • (相変わらず)Javaは仲が良い
    夜はBBQが恒例
    他のOracleコミュニティに比べると仲が良い
    ビジネスカジュアルって書いてあるのに余裕でTシャツでくる

JJUG視点でのJavaOneの感想

サプライズはない

  • Oracle is not Sun.
    今年1月のサミットで言われた言葉
    予定通りのスケジュール(Sunにはできなかった)
    顧客の声を聞く
  • 個人的には歓迎
    Sun好きには不評ですが成熟期のJavaには必要
    Javaはコミュニティを通じて顧客の声を聞こうとしている
    いろんなところで気遣いを感じた

特にEEはコミュニティ重視

  • コミュニティサーベイはたぶん初めて
  • JCPに基づくプロセスを重視
  • とにかくユースケースを知りたがっている

これからのJJUG

JJUG CCC 2014
 11/15 @ベルサール西新宿
 Simon Ritter参戦

フィードバックください
@JJUB #jjug
members@java-users.jp

常に幹事募集中です!

Java アーキテクチャトレンド

鈴木 雄介さん(JJUGのリーダー)

Javaに閉じないアーキテクチャのトレンドの話
バズワード多めで話します
具体的な実装の話はしません

世の中の流れ

IoT

  • あらゆるものがネットに接続
  • デバイスの多様化と大量化
  • 経験の一体化

サービスへ

アプリケーション開発からサービス運営へ

  • アプリケーション開発
    仕様を定義
    開発者が作る
    基本的には閉じられた世界
  • サービス運営
    利用からフィードバック
    様々な人が関わる
    外的要因に影響される

企画、開発、運用が協力(リーンとかDevOpsとか)

アーキテクチャ

Microservices Architecture

  • 考え方
    • 固有のドメインに固有のサービスがある
    • サービス同士はAPIとメッセージを介して連携
  • SOAとの違い
    • SOA
      モノシリックなアプリケーションをサービス化
    • MSA
      サービスを小さなサービスで構成

Reactive

  • 日本語では反応的な
  • 特徴
    • イベント駆動
    • 容易な拡張
    • 障害体制が高い
    • 応答性が高い(エラーが出ても何かを返す)

JavaOneで紹介された製品

  • OSGi
    MSAかは微妙だけどモジュールは大事
  • Play+Akka
  • Spring Boot・Dropwizard
    EoDだけではない監視や障害対応機能
  • RabbitMQ
  • Closure はこれから
    まだかっこいい実装のOSSが無い

JavaOneで話されていた設計

  • DDD(Domain Driven Design)を出す人が大半
  • 変化の境界線を見つけることが大事
  • とはいえ、手探りでって印象
    カオスの淵

NoSQL

  • CAP定理
  • とはいえ、ACIDは重要
  • 正解がないので、個別のプロダクトの特徴を見極めるのが大事
    JavaOneではMongoDBが多かった気がする

なぜJavaなのか

Javaがオープンだから

  • 企業が求める安定性と挑戦が両立している
  • 両輪がフィードバックするのが理想的

安定や後方互換性もある
変化はゆっくり
常に試行錯誤し、新しいことをやる

サマリ

エンターブライズも楽しくなってきた

  • 大量だけでなく多様になっている点に注意
  • 常に変化する全体にどうアプローチするか

バズワードに注意

  • 製品を安易にくくらない(NoSQLとか)
  • 銀の弾丸はない

Java Embedded 関連のアップデート

大山 弘樹さん(@ooyama)

去年も今年もIoTとRaspberryPiが多い
RaspberryPiが売りたいんじゃないか(笑)

ME EmbeddedとSE Embeddedの2つがある
ハードをがっつり使いたいならME
MEにはJNIが無い

Java SE & JavaFX 関連のアップデート

櫻庭 祐一さん(@skrb)

Project Valhalla

Value Types

配列の(メモリ的な)要素が実態を指すポインタではなくて実態そのものを入れる

value lass Point {
  final int x;
  final int y;
}

Immutableなのでスレッドセーフ

Specialized Generics

ジェネリクスにプリミティブ型が使える
今までのジェネリクスはコンパイルしたら型の情報が消えるが、プリィティブ型を使うといろいろ問題があるのでこれから議論されていくだろう。

Project Panama

Foreign Function Interface

ネイティブコードをコールする際、Javaのメソッドを呼ぶかのように使える。
ネイティブで扱いづらかったものが統一して使えるようになる。
ヒープの使い方を再度見直して効率よく使えるようにする。

Data Layout Control と Arrays2.0

セッションで話がなかった

Project Sumatra

GPGPUの話で、去年盛り上がっていたが今年はいまいち。
AMDからはスピーカが出ていたが、Oracleから出てなかった。

Project Jigsaw

いまいち進んでいない印象。
モジュールの関連性を図にする予定だったがあきらめたっぽい?
最初いろいろやる予定だったが、今はシュリンクさせてなんとかSE9に乗るのではないか。
MLの流通量は上がってきている。

JVMのイメージファイルが作れるようになる。
必要なモジュールだけをまとめたもの。
exeファイルも作りやすくなるのではないか。

JavaFX

JavaFX 8u40で追加されるもの

  • Accessibility
    音声で読み上げてくれる
  • Dialog
  • 法線(SE9から?)
    3Dの面に対するベクトル
    今まではJavaFXが勝手に決めていた
    法線を自分で決められるようになる。

Java EE 関連のアップデート

上妻 宜人さん

Java EE8 テーマ

  • HTML5/Web層の拡張
  • かんたん開発
  • クラウド上でのインフラ

まだ作業中なので、仕様は変わる可能性がある。

Servlet4.0

HTTP/2対応

  • GoogleのSPDYプロトコルが原型
  • バイナリフレーム/ヘッダ圧縮/多重化
  • ヘッダの意味合い(GET/POST/200 OK など)は基本的に踏襲

ストリームによる多重化
StreamIDへのアクセス

サーバープッシュ

  • WebSocketを置き換えるものではない
  • 関連リソースをサーバープッシュ
    例えば、htmlの要求が来たら関連するjs,png,cssをプッシュする
  • 問題点についての解決策については話がなかった

Java SE9 でもHTTP/2に対応予定
新たなHTTPのAPIを追加。(HTTP/2に限らず1にも対応)

MVC1.0

アクションベースMVC
そもそも必要か、JAX-RSに入れるかの議論があったが、結果的に独立した仕様として検討がスタート

テンプレートは対象外
既にJSPとFaceletsがある

既存仕様との連携
 CDI, Bean Validation

JSF 2.3

CDI連携の強化

@javax.faces.bean.ManagedBeanの扱いの見直し

  • 非推奨ではなく @java.inject.Named と同様として扱う

EL式のキャッシュによる性能向上

マルチコンポーネントのバリデーション

JAX-RS 2.1

パフォーマンス向上

  • Non-Blocking I/O APIのサポート(主にサーバーサイド)
  • Reactiveプログラミングモデル(主にクライアントサイド)

SSE - Serer Send Eventのサポート

Java EE内連係の強化

  • JSON-Bとの連携
  • MVC1.0との連携

JSON-B 1.0

JSONとJavaオブジェクトのマッピング

  • JAXB(XML Binding)と同様に相互互換
  • 既存実装としてJackson data bindingなど

JavaとJSONでのプロパティ名を変えるにはアノテーションを使用。

JSON-P 1.1

JSON Processing

  • JavaEE7導入のJSON処理API
  • JSONを出力するためのJavaAPI

JavaEE8 - JSON Patch

  • JSONデータの一部を置き換える仕組み(RFC6902)
  • HTTP "PATCH" と組み合わせてJSONデータの差分更新に使う
    • "PUT"は対象URLリソース全体を置き換えることを示す
    • "POST"はリソースの新規作成に用途を絞る

CDI 2.0

非同期イベント機能の導入
通知する側が通知される側の完了を待たない。
受け側は通知を受け取ったことだけを返す。

仕様のモジュール分割

  • CDI仕様が肥大化してきて、Weld以外の安定実装が少ない

Java EE Management API 2.0

REST APIによる監視・デプロイの標準化

REST APIによる管理

REST APIによるアプリケーションのデプロイ

Java EE Secrity 1.0

JavaOneではセッションが無く、これから検討されていく

スコープを整理中

Schedule

2016/Q3 リリース


井上誠一郎さん

Java EE8

Apache TomEE, Java EE Web Profile

  • 読み方はトミー
  • TomcatベースのJava EE実装
  • Tomitribe社がバックについた

Project Avatar

  • TSA(Thin Server Architecture)
  • サーバーサイドJavaScript

Avatarのセッションは4つくらい

  • Avatar2.0
  • TSAの言及はほとんどなくなった
  • Node.js互換アピールに完全シフト
    Node.js on the JVM
    ~95% Node.js API compatibiliry
    many of the node-modules work

Nodes.jsとの違い

  • Nashornベース:Competes with Googl V8
  • マルチスレッド
  • スレッドごとにイベントループ

ロードマップ

  • 2015年 Avatar Commercial Support
  • 公開資料に書いてあった

Spring Framework

前はOracleがSpringを敵視してる感があったが、今回はそれほどでもない。
あくまで個人の印象。

Spring Framework4の特徴

  • embedded Webサーバー(Spring Boot)
  • message centric architecture
  • async processing

Spring Boot Actuator

ほとんどコードを書かなくてもWebアプリがモニタリング可能(REST API)

http://localhost:8080/health を叩いて死活監視

http://localhost:8080/info を叩くと管理ビーンのメソッドコール数の統計情報

Webサイトの手順に従ってやれば15分でできる。

Springは実用的
ドキュメントやMaven等のツールとの連携がやっぱりすごい。

まとめ

Java EEは進化を継続
AvatarはNode.js互換路線
Spring Frameworkに復活の印象(Spring Boot以降)

HeapStats の発表と出展を通して見えた JavaOne2014

高雄 慎二さん(NTT OSSセンタ)

JavaOneを情報発信の場として考えるきっかけになればいい。

展示ホール出展

世界のユーザーに直接リーチ出来ることに魅力を感じて参加
150名以上が来訪
通訳の人もいたが忙しい時は通訳してる暇がないので直接対応

出展までの流れ

5月 申込フォームをDLしてメールで送信
費用は$7500
2名までJavaOne参加のフルチケットがつく
チケット無しの展示員は何人でもOK

6月 ExhibitorKitが届く
展示に必要なレンタル物品を注文
電源のレンタルも必要(別業者)

9月 展示物を用意
手荷物で直接運搬
チラシは必須。忘れたので現地で印刷

出展のメリット

世界の関連製品と肩を並べて比較される
世界のターゲットユーザの人々に直接リーチできる
他の会社から一緒にやろうよとか言われた
バッチスキャナの威力
 名刺交換する暇がなかったが、気軽に顧客情報を得た

注意点

他のブースでExhibitorKitの既製品を使ってるところはほとんどなかった
文字の多いパネルは良し悪しあり
細かいトラブルはあるので、ゆとりが必要
 注文したディスプレイが届かずに夜中まで待ったり

HeapStats発表

出席者

予約 63名
実際 約20名
国籍 Japan、USA、フィンランド等

Speakerのメリット

世界中の人に直接語り掛ける経験
反応が直接わかる
展示よりも長時間深い話ができる
参加登録が2名まで無料
Speaker専用の部屋がある(らしい)

発表までの流れ

Call For Proposals 3/4 - 4/15
採否通知 5中 - 6中
Speaker Portalからいろいろ登録
 発表資料の登録はぎりぎりでもOK ~9/28

Call For Proposals

Titleは短めに
Abstractは公開される
Summaryは選考用?
Video 過去のプレゼン実績の動画記録
 そんなに難しく考えずに、動画をとって送ればいいと思う

英語は?

日常の仕事で英会派はほとんどしない
英語ドキュメントはそれなりに読む
ネイティブチェックは依頼(展示パネルのみ)
 発表資料はぎりぎりまで作っていたので
現地の通訳を1名依頼

まとめ

参加者との距離が格段に近くなる
世界の中での自分の立ち位置が見える感覚
技術(Java)に国境なし
BOF(birds of a feather)は初めての発表の場としてちょうどよい

JJUG CCC 2014 Spring

JJUG CCC 2014 Springに行ってきました。

寝坊したり予定あったりで、結局聞けたのは1つだけ。
それすらも最後までいられませんでしたが。。。

Java トラブルに備えよう

上妻 宜人さん(JJUG)

OutOfMemoryError

GCログの出力

Java起動オプションにあらかじめ設定しておく
-XXloggc 出力先の指定(ファイル名に時分秒をつけた方が良い。再起動時に削除されない)
-XX:+PrintGCDetails 詳細情報の出力
-XX:+PrintGCDateStamps 日時を読みやすいフォーマットで出力

JDK7(8?)から、ログが自動でローテートできるオプションが追加された

GCViewerでログをグラフ化する

ヒープダンプ

コマンドラインで取得する方法
→ヒープサイズが大きいと数秒間フリーズする

エラー時に自動取得(Java起動オプション)
-XX:HeapDumpOnOutOfMemoryError

解析ではEclipseMemoryAnalyzerを使ってる

クラスヒストグラム

コマンドを打つと、ヒープを多く占めているクラスをテキストで取得できる
ヒープダンプに比べると負荷が少ない

jdk7,8 : jcmd GC.class_histgram

突出型のOOM

エラーが出た瞬間のダンプのみを出力してくれるオプション
-XX+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=出力先

じわじわ型のOOM

なるべく軽い負荷で継続的なログがほしい

定期的なヒストグラムの収集がいい
HeapSatsというオープンソースのツールが定期取得&グラフ化をしてくれる

スローダウン/タイムアウト

スローダウン

アプリケーションが停止→再起動で対処
 →確実に迷宮入り

再起動前にスレッドダンプを取りましょう
 1.4.2 : kill -3
 JDK5 : jstack
 JDK7u4 : jcmd Thread.print

・可視化ツールその1「侍」
スレッドの状態を時系列に表示

・可視化ツールその2「ThreadLogic」
怪しいスレッドをマーキングしてくれる
最初にみるならこちらの方が良い

無限ループ
 HashMapへのマルチスレッドアクセス
 →ConcurrentHashMapに変換する

原因がよくわからない場合

JDK標準のhprofプロファイラで調査

java -agentlib:hprof=CPU=samples,file=出力先

収集対象がアクティブなスレッドのみ
sleepやwaitによる遅延は検知できない

Solr4.x系で特殊文字が追加されてる

Solr(というかLucene)にクエリを投げる際は特殊文字をエスケープする必要がありますが、
4.x系から特殊文字に "/" が追加されてます。

そんなこともしらずに先日Solrをバージョンアップしたら見事はまりました orz

Solr3.6.2

Escaping Special Characters
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \

Solr4.6.1

Escaping Special Characters
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /

新機能でクエリに計算式が書けるみたいなことを聞いたことがあるのでその対応かな?
たしかスコアの計算式とか指定することができたようなできなかったような。。。

JJUG CCC 2013 Fall

JJUG CCC 2013 Fallに行ってきました。

基調講演-1 Javaと未来のこととCCC

鈴木雄介さん (日本Javaユーザーグループ 会長) 資料

Javaの現在と未来

世界中でユーザーグループ(JUG)の活動が活発になってきている。アフリカとかでも

IoT時代に向けて

2015年 → 2020年
接続されるデバイス数 250億 → 500億
一人当たりのデバイス数 3.47 → 6.58

Beyond Java 8

  • Modular Platform(Jigsaw)
  • Unified Type System
  • Language Interoperability
  • Memory-efficient data structure
  • Java on GPUs(Sumatora)

Project Avatar

  • HTML5+Java EE
  • Thin Serer Architecture(TSA)

IoT(Internet of Things)から考える未来

ブラジャーもネットにつながる時代に。

インターネットに接続するもの

  • GPS
  • テレマティクス
  • スマートグリッド
  • 人体情報の測定(医療)
  • などなど

テクノロジーの6つの要素(ガートナー)

  1. テクノロジによる人間の能力の増大
  2. マシンによる人間の作業の代行
  3. 人とマシンのコラボレーション
  4. マシンによる人と環境の認識力の向上
  5. マシンへの人の理解の高まり
  6. より賢くなる人とマシン

プログラミング対象の変化

ユーザーがITを意識しなくてもよくなる。渋滞情報を自動で通知等

ユーザーがどのボタンを押したら何が起きるか
 →
周りで何が起きたらユーザーに何をすべきか

  • トリガーがシステムの外側にある
  • オープンな世界、無限の可能性
  • テストとは何か

「人間の判断」から「外部化された判断基準」

  • 使うこと/考えることの自動化

ITの作り方

  • いかに効率よくソフトウェアを作るか

現在

  • サービスを提供し、フィードバックをもらう
     アジャイル、DevOps、リーンスタートアップ
  • いかに早くサイクルを回すか

基調講演-2 2013 エンタープライズ Java 最前線

寺田佳央さん (日本オラクル)

JavaEE7

EE6からEE7になって以下の機能が追加された

  • Concurrency Utilities for EE(JSR-236)
  • Batch Application(JSR-352)
  • Java API for JSON(JSR-353)
  • Java API for WebSocket(JSR-356)

JavaEEにこれから触れる人は、EE6を勉強してから上記の差分を学ぶのが良いと思う。

Projecct Avatar

PCの電源が切れたのでメモとれず orz

JSR 310 “Date and Time API” への招待 2

蓮沼賢志さん (GlassFish Users Group Japan) 資料

秒について

昔19世紀近く使われていた秒の定義は正確ではなかった。(太陽の位置を元に算出された値)
現在は原子の特性を利用した正確な秒の定義が利用されている。(数億年に1秒ずれるかどうか)

世界標準時について

イギリスのグリニッジ天文台を通る経度を標準時(GMT)として定められた。
ただし、観測地点によってその位置がずれる。

そこで、観測地点に依存しない世界時(UT)が定義された。(1928年) さらに原子時計に基づく原子時(TAI)(1955)が定義された。

しかし、太陽の公転との関係でずれが生じてきたため、UTとTAIの間をとって協定世界時(UTC)(1972年)が定められた。

Javaのミリ秒は1970年を起点になっているが、UTCが定められたのはその後。
ほとんどのプログラムでは、その際に生じた誤差は無視している。

タイムゾーン

各地域のタイムゾーンはtz database(tzdb)で定義されている。
tzdbはたまに更新されているので、できるだけ最新を使うように。

Javaのクラス

java.util.Data
日付・時刻の表現のみに徹する

java.util.Calendar
Javaの国際化対応(JDK1.1)で導入
日付・時刻の作成・編集に用いる

java.time.* (JSR310)
JDK8から導入
Date/Calendar代替が当初の目標
日付・時刻を総合的に扱うフレームワーク
Date/Calendarを置き換えるもの

java.util.Dateの課題

  • フィールド操作が面倒
  • 年フィールド+1900が実際の年
  • 月が0から始まる
  • 日付部と時刻部が混在している
  • 日付演算が貧弱

java.util.Calendarの課題

  • フィールド操作が面倒
  • 月が0から始まる → 定数でお茶を濁す
  • 日付演算が貧弱(Dateよりはまし)

JDK8よりCalendar.Builderを導入して多少改善された。
new alendar.Builder().setDate(2013, NOVEMVER,9).~

それでも貧弱

JSR310 Date and Time API

  • Date、Calendar、DateFormat等を置き換えることが目的→失敗
  • ISO8601形式の日付。時刻表現
  • ImmutableかつスレッドセーフなAPI

デメリット

  • JSK8 APIの中でも最大規模→複雑
  • 既存APIとの相互運用はガン無視→後から多少改善された

その他

OffsetDateTime vs ZonedDateTime

  • OffsetDateTime - UTCからの時差のみ考慮(計算が早い)
  • ZonedDateTime - タイムゾーンを考慮

タイムゾーン ≠ UTCからの時差
タイムゾーンは以下も考慮している

  • 夏時間
  • 時差の改定(ごくまれ発生に)

Chronology(暦)も対応。和暦とか

JSR310とDate/Calendarの変換は無い!必要なら自前で!

ThreeTen backport
JSR310からJDK8依存の部分を取り除いてJDK7でも使えるようにしたOSSライブラリ
リリース前の勉強とかにでも。

徹底解説!Project Lambdaのすべて

bitter_foxさん (立命館大学 立命館コンピュータクラブ) 資料

ラムダ式は既に知っていることが多かったので殴り書き程度で。。。

ラムダ式の引数ではアンダーバー("_")は使用不可。
Javaでは違うが、多言語では特殊な意味を持つので、混乱を避けるため。
また、将来のために予約語とされている。

なぜいろいろと省略できるのか
縦に長くなった匿名クラスを、ラムダにしたことで横に長くならないため。

スコープの注意点
thisが表すものが匿名クラスと異なる。

BufferReaderのStreamは br.lines()

非終端操作 : filterやmap等のStreamを返すメソッド
終端操作 : foreach、reduce等のStreamを返さないメソッド
終端操作が呼ばれるまで非終端操作は行われない。

JavaOne 2013 サンフランシスコ報告会 Tokyo

JavaOne 2013 サンフランシスコ報告会 Tokyoに行ってきました。

Java SE のアップデート(櫻庭 祐一氏)

Nandini Ramani 副社長の話

JavaSE/ME統合自体は2011年に発表していること。
重要なのはNandiniがIoTを担ぎ出してきたこと。
→Oracleが力を入れている。

教育用にRaspberry Piはくる。
LEGO Mindstorm、Arduinoも若い人にはいいのでは。

JavaDayTokyoにはロードマップにJDK8.1と8.2があったが、今回は飛ばされている。
JDK8.1に書いてあったJMC 6が個人的に重要。JDK8に入ってくるかもしれないが、おそらく9ではないか。もしくはEE8

Brian Goetzの話

Java 並行処理プログラミングの本の作者

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

Project Lambdaとは言っても

  • Lambda式
  • 型推論
  • Method Reference
  • Default Method
  • Stream

といろいろある。

Stream

注目すべきはStream。
マルチコアのためにStreamが重要。
Streamを実装するにも匿名クラスが面倒なのでLambda式が必要となった。

Streamは

  • 機能拡張版Iterator
  • 関数型言語の考えを導入

Stream自体は値を持たず、リストをなめていくだけ。

xxx.stream()
.filter(p->p.isXX())
.map(p->p.getXXX())
.redue(0, (x,y)->x+y);

の場合、実際のfilterとmapの処理はreduceの際に行われる。(処理遅延)
これによりパフォーマンスがかなりよくなっている。

Stephen Colebourne, Roger Riggsの話

Date&Time APIの話

Stephen ColebourneがDateとCarendarを嫌ってるので、全て置き換えたがっている。

Date/Calendarの置き換え
機能豊富/クラス大量
→いろいろ結局みんなZonedDateTimeを使うのではないか。

Alex Buckley, Joseph Darcyの話

Enhanced Metadataの話
要するにアノテーションのこと

SE8では、@Pathが複数書ける。

@Path("xxx"), @Path("yyy")
class XXX ...

いろんなところにアノテーションが入れられるようになった。
書けるようにはなっても、それをチェックするところがないから微妙。。。

NullをListに入れたくない場合

SE7
@NonNull List f;

SE8
List<@NonNull String> f;

John Rose, Gary Frost

Project Sumatraをやってる2人

Project Sumatra

GPGPU for Java
まだOracleとAMDの方向性が合ってない印象

Mark Reinholdの話

Project Jigsawをやっている人

Project Jigsaw

Javaをモジュール化しましょうという話。

jlinkというコマンドが新しくできた。
モジュールをリンクできる。

正直まだ微妙な感じ。

まとめ

JavaSE8

とにかくLambda
Date&TimeAPIもにぎわってた

JavaSE9

未だに曖昧模糊

JavaFX のアップデート(青江 崇氏)

JavaFXとは

モダンなGUIツールキット

  • FXMLの導入によるプレゼンとロジックの分離
  • アニメーション、エフェクト
  • CSSによるスタイリング
  • WebKitベースのブラウザコンポーネント

SE8からは標準コンポーネントに

FXML(HTMLっぽいやつ)の属性とJavaのプロパティが自動で紐付いたりする。

JavaFX8の新機能

  • 画面のテーマが新しくなった
    フラットデザイン風のとか
  • Lambdaを使用してコンパクトに書ける
  • 3Dを本格的に使えるようになった。これまでは限定的なサポートだった。
  • DatePickerの追加 Date&Time APIにも対抗
  • SwingNode
    JavaFxの上にSwingが乗せられるようになった
    SwingコンポーネントをSwingNodeでくるんで追加できる
  • 基本APIの強化
  • フルスクリーン機能の強化
  • 印刷APIの追加

などなど

JavaFXの向かう先

  • 採用事例が増え、ライブラリ、フレームワークも増えている
  • Windows、Mac、Linuxすべてで使えるGUIツールが減ってきている
    AdobeAirもLinuxを切り捨てたし、最近はAdobeがあまり力を入れていない
  • 組み込み機器向けGUI
  • IoT時代におけるGUI開発の主役になる可能性も

Java EE のアップデート(井上 誠一郎氏)

パーフェクトJavaの著者

パーフェクトJava (PERFECT SERIES) (PERFECT SERIES 2)

パーフェクトJava (PERFECT SERIES) (PERFECT SERIES 2)

  • 作者: アリエル・ネットワーク株式会社,井上誠一郎,永井雅人,松山智大
  • 出版社/メーカー: 技術評論社
  • 発売日: 2009/09/24
  • メディア: 大型本
  • 購入: 26人 クリック: 360回
  • この商品を含むブログ (35件) を見る

EE7の目玉機能

  • WebSocket
  • JSON標準API
  • Java Batch
  • Concurrency Utilities

CDI(Contexts and Dependency Injection)

  • DIの標準規格
  • JavaEE6で登場

JPA(Java Persistence API)

  • O/Rマッパーの標準規格
  • Hibernateも今ではJPA実装の一つ
  • JPA実装は独自実装を持つのが実情

JAX-RS

  • RESTfulなURLルーティングやHTTP処理の標準規格
  • アノテーションでURLとクラスやメソッドを対応づける
  • EE7のJAX-RS2.0で非同期APIとクライアントAPI追加

JavaOne2013のJavaEE概論

  • ProjectAvatarのオープンソース化が発表されたが、それほど盛り上がらず
  • EE全体的にも盛り上がらず
  • EEの扱いが軽い印象
  • MEにスポットライト

Java EEセッションのピックアップ

Java Caching

  • 12年かけてJCacheのスペックが纏まりそう
  • 今年の12月にスペック確定予定
  • javax.cacheパッケージのAPI
  • アノテーションはEE8とSpring4で実装予定
  • 実装:Ehcache、Oracle Coherence

JTA(Java Transaction Processing)

  • JTAが1.1から1.2に10年ぶりのバージョンアップ
  • CMT(コンテナによるトランザクション管理)がEJBの専売特許ではなくなる
  • CDI管理のBeanをCMT可能
  • 要はSpringの@Transactional

WebSocket

  • プログラマブルAPIとアノテーションAPIの両方あり
  • 同期処理APIと非同期処理APIの両方あり

Jersey 2 MVC

  • JerseyはJAX-RS規格の実装
  • JAX-RS自体はMVCではない
  • EEのMVCはJSFなので、JAX-RSがそこは踏み込めない
  • Jerseyは独自拡張でMVCを提供
  • Jersey MVCはSpring MVCと同じアーキテクチャ
  • ビュー処理のサポートテンプレートエンジン:JSP、Freemarker、Mustache

Spring

  • Spring Source社からPivotal社へ
  • ソースコードがGitHubへ
  • Spring4.0は、Java8およびJavaEE8対応
  • SpringのJdbcTemplateなどはJava8のLambdaと相性が良い
  • WebSocketやJava BatchでJavaEEと協力関係
  • Spring DataでNoSQLやSolrに対応
  • Spring for Hadoop
  • Spring XD(ストリームデータ処理)
  • WebSocket上にSTOMP(Simple(or Streaming) Text-Oriented Messaging Protocol)