
http://www.java-users.jp/?page_id=1663
先に感想
午前中は用事があったので、13:00〜参戦
- JJUG CCCは初参戦
- なんか知ってそうな話題のセッションは避けたり、見たことないけどフォローしてるひとを、という観点でセッションを選んだ
- Cassandra使いたくなった。ワークスアプリケーションズはやっぱ良い会社なんだろうなーと思った。パーフェクトJava持って行って井上さんにサイン貰えばよかった...
- 標準コレクションの効率の悪さの話はためになった
- 生のこざけさん初めて見た。業務でのAndroidこわくない!
- にゃんぱす〜
- ...しかし全体的にスライドが(まだ)上がってない...
AB-1 社長が脱RDBと言い出して困りましたが、開き直って楽しんでいる話 by 井上 誠一郎 #ccc_ab1
ワークスアプリケーションズ エグゼクティブフェロー
- 自己紹介
- Java8 会社でつかってるよ
- 著書多し、パーフェクトJavaも
- ☆Lotus Notes(Document DBのはしり)の開発
- 2000年代前半 アリエル 設立 → P2Pアプリ開発
- 2010年代前半 最近:脱RDB
- RDBを使わずに業務アプリを作れそうに「思えてきた」
- 捨てたほうがいいとまでは思ってはいない。
- はなさないこと
- NoSQLの個々の比較
- ☆CAP定理とかその周辺
- 今日の話の中では、DBにアクセスするものはAP(アプリケーション)として用語を統一
- さきに結論
- ミュータブルデータ→イミュータブルデータ&リトライ
- ☆楽観的CC(Concurency Controle)
- RDB(☆MVCC、☆ShadowPaging)
- 目次
- 前置き
- 何を目指す
- アーキテクチャ決定まで
- RDB無しの不安(たくさんある)
- まとめ
前置き
- ワークスアプリケーションズの、SaaS ERP「HUE」
- 「RDB遅い」は誤解。※ちゃんと使えば。
- NoSQLでの必要機能の実装により、最終てきには同じ早さになるよね(直感)。RDBMS枯れてるし、総合的には有利じゃね?
- 一方、教科書的なリレーショナルモデルだけでもともと業務アプリをつくっていない。
- キャッシュ、非正規化、アプリのバリデーション、アプリのトランザクション(楽観的並行制御、早い者勝ち)
- 今は...
- 脱RDBでも面白い
- 脱RDBで圧倒的に早くするにはデータモデル等、ちゃんとしないと
目指しているもの
応答速度100ミリ秒の業務アプリ
- ↑はトライアンドエラーを待たずに業務を遂行
- 例:キーワードを入力してすぐ候補がでる
- 例:帳票レイアウトの素早い切り替え
- 例:ゼロベースで作ったスプレッドシート。業務アプリとデータが連動している。スプレッドシートの数式候補。
- ↑はトライアンドエラーを待たずに業務を遂行
複雑なクエリをDBに寄せるか、アプリに寄せるか。
- DBに寄せたほうが効率だけど、複雑なバリデーション制御はアプリじゃないと
RDBの世界観
- リアルタイムインデクシング(シンプルインデクシング)と、リッチクエリの両立
- リッチさには限界があり、アプリで頑張らないといけない←ジレンマ
- リアルタイムインデクシング(シンプルインデクシング)と、リッチクエリの両立
宗教論争
- ☆OLTP、☆OLAPを統合する世界(SAP HANA、VoltDB)
- リアルタイムインデクシングを諦める世界
リアルタイムインデクシングの限界
- リッチなクエリ(自然言語処理、機械学習)は困難
- クエリのオプティマイザが優秀でも、性能劣化してしまう。
バックグラウンド処理で割り切る世界:更新系
- 更新は遅延OKとそうでないものがある。
- 遅延OKなのは、並列処理、☆投機処理で高速化
バックグラウンド処理で割り切る世界
- 並列処理のデータ構造、イミュータブル、楽観的CC
イミュータブルの、DBとプログラミングの対比(相関)
バックグラウンド処理で割り切る世界 が失うもの
- one fact in one place
- リアルタイムでの一貫性の維持が困難
Cassandraの特徴:データモデル
- KVS ☆ワイドローデータモデル
- ☆CQL(クエリ言語)により開発者の概念モデルをRDB風に
- ☆スーパーカラム(非推奨)
- 軽量トランザクション(☆CAS相当のアトミック操作)
Cassandraの特徴:ネットワークモデル
- 分散ハッシュテーブル(負荷分散、可用性)
Cassandraの特徴:ストレージモデル
- 行指向ストア(OLTP寄り)
- 書き込み性能も高い
選択した戦略:ネットワークモデルの設定
- ランダムパーティション
- 高いスケーラビリティ。レンジクエリが出来ない。
- レプリケーション
- 3つに冗長化
- ランダムパーティション
選択した戦略:データモデルの指針
- イベント、事実の蓄積
- チェンジセット、変更の蓄積
選択した戦略:アプリ開発者に見える世界
- アプリ開発者はDTOだけを意識。クエリの稲ペイ
- DTOの変更で、バックグラウンドで別テーブルを自動更新(RDBのCreateIndexとおなじ感覚で使う)
選択した戦略:主キーの設計例
RDBの再発明に近くなってるぶぶんが(コミットログ)
☆ラムダアーキテクチャ
- 裏のインデクシングと、インメモリのデータをマージして、表示する(インデクシングの遅延に対応)
RDBなしの不安
- リレーショナルモデルがなくても大丈夫?
- できるけど、効率化と整合性が問題。
- RDBは実行状態よりも永続状態を表現している、イメージ
- 結合、集計、ソート
- JOIN
- ACID
- 緩める、最悪直列でLOCK
- コンシステンシー
- 枯れた実装
- Cassandra安定してて困ってない
- 開発者の慣れ
- むしろ長くやっているひとが大変?
- RDBのアンチパターンが、そのままアンチパターンになるわけではなく、発送の転換が必要
- Cassandraの課題
- それでも残る懐疑心
- 本当に早くなる? 並列制御を考えずに普通に作ると、ある程度の複雑さを持つアプリでは遅くなっちゃう
まとめ
脱RDBが技術的に正しいか → 分からない
Cassandra Summit 2015 やるよー (2015)
G-2 クラウド時代の Spring Framework by 三宅 剛史 (Pivotalジャパン株式会社) #ccc_g2 @TsuyoshiMiyake
- メジャー番号のはなし:いまは4だよ~
- OSSで10年間残っている。なかなかないね
- Pivotalの人
- Pivotal
- Spring, RabbitMQ, redis, Tomcat, ☆CLOUD FOUNDARY, ☆GEMFIRE, ☆Greenplum
- 全部のプロダクトをOSSに。
- Pivotal
もくじ
- 振り返り
- 2015
- Cloud Foundary
- Spring Cloud
(spring の偏見(前セッションでぼろくそにw)を解きたい)
振り返り
- Spring → DI
- ハリウッドの原則
- Springより昔
- 「J2EE Development without EJB」の7章で初めて紹介。
- DI,AOP, DAO, JDBC, テンプレートパターン
- 「J2EE Development without EJB」の7章で初めて紹介。
Spring 2015
- 図
- Spring Foundationと、3rd party Dependencies が、SpringFrameworkと呼ばれる部分。
- Spring Boot
- ☆Spring IO Platform Distribution
- ☆Spring XD
- ☆Spring Data
- ☆Spring Cloud
Spring が使いにくい理由
- XML
- →コンフィグに変えるよー
- 依存性がややこしい
- →親の依存性を宣言しておけば、矛盾なく解決するよー(Spring IO)
- XML
SpringとCloudFoundaryのちょっとした歴史
- SpringがCloudFoundaryを買収
Spring/Javaの開発者にとってのCloudFoundary
- エンタープライズのセキュリティ
- ↑SpringSecurity(今までのエンタープライズで培ってきたもの)
- Eclipse CF Plugin
- GroovyとGrailsのPivotalやめちゃった
- エンタープライズのセキュリティ
Spring Cloud
- 分散環境でCloud Nativeなあアプリケーションを制作するためのフレームワーク
- Paas上で利用できるサービスをアプリから使いやすくするためのもの
- SpringCloudConfig
- 設定(Profile, Property)を外出しにして、REST経由でアクセス
- モノリシックなアプリ→マイクロサービスの組み合わせ
- ConfigServerが設定を提供
- バックエンドはGitのリポジトリ
- 暗号化のサポート
- Spring Cloud Bus
- ぶら下がっている分散環境の設定の同期をとる。
- AMQPのみサポート
Spring Cloud Netflix
- Netflix OSS (が公開されている)とSpring Bootと組み合わせて、便利に(アノテーションで)使う仕組み
- Netflix、Groovyつかってる Pivotalとのコラボ
- ☆Service Discovery(Eureka)
- Service Locator パターン
- 自動で負荷分散(ラウンドロビン)
- ☆Client Side Load Balancing(Ribbon)
- 負荷分散ルールがいくつか(ラウンドロビン、平均レスポンス時間、ランダム)
- Fault tolerance機能
- Spring のテンプレート → JDBCテンプレートが有名。SQLだけが違うようなものを吸収するラッパ
- ☆RestTemplate
- ☆Circuit Breaker (Hystrix)
- Circuilt Breakerパターン(家のブレーカみたいな。過電流でブレーカが上がる)
- 問題があったときのFallbackメソッドをアノテーションで定義
- ↑のアノテーションを定義したメソッドのメトリクスが取れる
- ☆Spring Cloud Connectors
- サービスの抽象化
- 対応は、CloudFoundry, Heroku, Local
- Springが昔目指したもの
- 図
- コンテナ上に乗っかるアプリ、アプリに対して、サービスとコンテキストがDIされる
- いま目指しているもの
- 図
- アプリはコンテナじゃなく、クラウドに乗っかる
- java コマンドでアプリが立ち上がって来るべき(Nodeのイメージ)
- ☆CloudFoundary
- Javaなら使えるよー。Springだともっと便利に。
- 新しいクラウド環境への拡張(CloudPlatform)
- Paasが増えてもつかえる
- CloudFonundaryの場合の実装例
JSUG 2015 5/8 にイベントあるよ~
F-3 GS CollectionsとJava 8:実用的で流暢なAPIで楽しい開発を! by 伊藤 博志(ゴールドマン・サックス) #ccc_f3
スライド http://www.goldmansachs.com/gs-collections/presentations/2015-04-11_JJUG_CCC.pdf
- Java8 本番環境使っている人 ノ →少ない
- GS Connections はJava5から使えるよー
- ゴールドマン・サックスのエンジニアリングについて
- 金融
- 自社開発、決済、トレーディング、社内クラウド
- 複雑な問題にSolutionを提供「We BUILD」
- 全社員の1/4がテクノロジスト(8000人くらい)
「GS Connections = Don Raab's passion」
目次
- イントロ
- 古き良き
- Java8のStreamAPI
- GSConnctions
- フレームワーク比較
イントロ
- Donが10年以上前に開発を始めた、OSSでコレクションフレームワーク
- GS Collections Kata
- トレーニング教材
- 1,500人以上のGS Javaエンジニアが受講
- ぎっはぶで公開済
古き良き時代
- ケント・ベックのSmalltalkのベストプラクティスパターン
- →実装パターン(ケント・ベック) Map, List, Set しか残らなかった
- GS Collections で
- 遅延実行(メソッドチェーンごとにイテレーションではなく、終端処理のときにまとめて) ## java 8 Stream API
- ↑は大海原(GS Collections)への入り口!
GS Collections
- 即時実行
- 豊富なイテレーションパターン
- ☆共変型の戻り値
- 新しいコレクション型
- メモリ効率の良い、SetとMapの実装
- プリミティブ型のコンテナ、イミュータブルなコンテナ
- 並列イテレータ
API
- UtilityとAPIの対比
- Java8とGS Collectionsの実装比較(※要スライド)
流暢さ
- Java8とGS Collectionsの実装比較(※要スライド)
メモリ効率
- Mapのメモリの比較グラフ
- JDKのHashMapのメモリ効率がそもそも悪い
- GS Connectionsと比べると、約半分(GSC UnifiedMap)
- JDKのHashMapのメモリ効率がそもそも悪い
Setのメモリの比較グラフ
- JDKのHashSetのメモリ効率悪い(GCS は約1/4)
プリミティブコレクションの比較グラフ
- GSC IntArrayList
メソッド参照
- KataをJava7→Java8へアップデート
- ※要スライド
フレームワーク比較
- 比較表 ※要スライド
付録
- 簡単な実行例
- ☆RichIterable(Java Doc)
- Kata
- TDD型のトレーニングマテリアル
- Scalaのカンファレンスにも(GSC)登壇したりとか...
G-4 あなたとAndroid!? 今すぐダウンロード!~Android開発で変わる SIerのJava技術事情について~ by こざけ(ほげ駆動 / 株式会社 第一コンピュータリソース) #ccc_g4
ナマのこざけさんを初めて見る...
https://github.com/kozake/jjug2015/blob/master/talk.txt
- ビールw
大阪支店所属、アーキテクト。
質問
- SIerのひと? そこそこ多い
- JJUG初参加の人? はんぶんくらい
- Android開発仕事したことある人? 半分くらい?
Android Beginner からの知見
アジェンダ
- 事例紹介
- ここが変わるよAndroid開発(Web系からの)
事例紹介
背景
- 300人月超えの、大規模、ミッションクリティカル案件
- 稼働率99:99%
- 結果的には無事成功(むしろ大成功) ↓
- 200人月超えのAndroidタブレット基幹システム
- 900人がつかうようなやつ
- 「Javaならなんとかなるだろ」
- チーム初のAndroid開発
- なぜAndroidか
- ベンダロックしたくない、端末代を安くしたい
- 技術者調達楽、Windowsで開発できる
- バージョン差異は大変だけど、今回は固定
システム構成
- タブレット900台、モバイルプリンタ、Oracle,Tomcat,MyBatis,NAS
ここが変わるよAndroid開発
- ☓Eclipse ◯Android Studio使おう
- Android Studio 勉強しないといけない?
- これだけじゃなくで勉強することいっぱいある
- 開発環境:Gradle, git bucket, Android Studio, Jenkins, Artifactory
- Gradle がキモ
- Maven、大規模になってくると大変な感じ
- AntとMavenの良い所どりしてる感じ
- 『Gradle徹底入門』が良書
- ロジック書ける
- GroovyのSimpleTempateEngineが強力。
- テーブル定義のXMLからDAOと、SQLのDDLが出るという例
- 何のライブラリ使うか
- いろいろ入れよう! → 容量が大きくなって怒られた
- 簡単な処理なのに、汎用的なライブラリ(容量大きめ)が必要かは要検討。バッテリーの持ちも考える。
- AndroidAnnotations
- 定形記述の省略化
- ↑はソースが自動生成されているのを見ればわかるよ
- ActiveAndroid
- Jackson
- クライアントとサーバで共通のものを使うときは、Javaのバージョンに気をつけましょう
- ☓MyBatis Generator Plugin ◯SQLite Open Helper
- ↑を生で使っているわけではない。ORM使ってる。
- ORMの比較
- ActiveAndroid
- こまったところ
- マスタをタブレットのDBにそのまま持って行きたい。副問い合わせの自作ライブラリ作った
- トランザクション
- 全然Activeじゃない(活動が)
- データベースファイルの中身を見たい
- パーミッションの問題
- こまったところ
- PDF生成。Jasper Reportつかいたい → AWT無い
- →PDFはサーバ側で生成することに。
- PDF作成は鬼門
- 写真管理
- UUID管理なら行けるはず → JavaのライブラリはUUIDはタイプ4だった。
- タイプ4は完全ランダム。一意かどうかは性能による
- UUIDはモバイルで取得するのはセキュリティ的にまずいという風潮
- UUID管理なら行けるはず → JavaのライブラリはUUIDはタイプ4だった。
HttpClient
- Androidにはすでにある。が、HttpURLConnectionがベスト
まとめ
- 業務へのタブレット導入
- 実はサーバサイドも新技術が必要だった(Java8、JAX-RS、☆Apache OLTE、☆Jersey)
- Android開発に強い会社と組むのがいい
- ネットワーク技術は必須
- 業務へのタブレット導入
M-5 プログラミング言語Clojureのニャンパスでの活用事例 by 太田 正悟 (ニャンパス株式会社) #ccc_m5
- clojureコントリビュータ
- アジェンダ
- 言語の概要
- 使う理由
- 活用事例
概要
- 使ったことがあるひと?ノ →少ない
- Lisp系言語
- S式
- Lisp系、言語の作りがシンプル
- 言語シンプル(覚えること少ない)
- マクロでの言語拡張
- REPLでのインタラクティブな開発
- S式
- 関数型言語
- 多くの値がイミュータブル
- vector, map
- ファーストクラスな関数
- 遅延シーケンス(無限個をあつかえる)
- 多くの値がイミュータブル
- JVM言語
- Javaオブジェクトを扱うことができる
- 無名クラスもつかえる
使う理由
- アジャイル開発
- REPL、イミュータブル、後付のポリモーフィズム
- データの表現をMapで。
- ?このあたりの説明、よくわからない
- ☆マルチメソッド
- 後付で振る舞いの追加。
実用性
- JVMで動作
- Javaとの相互運用性(ライブラリ)
- エコシステム ☆Leiningen, ☆Clojars
言語の自由度
- 実行時のプログラム変更、リロード、REPL
- 問題領域にあった言語の定義 → マクロ
- 静的型チェック
- 非同期プログラミング
- パターンマッチ
- 論理プロラミング
事例
「baasday」
- AWS
- MBaaS
- のべ20万インストール
- スループット 150req/sec
「Lesson Supporter」
- 個人レッスンの「先生」の支援サービス
- 簡易CMS
近日公開予定
CMSのデータを、Mapとして表現
- 着手から3日でCMSモデルと描画処理のコアが完成。
- ページテンプレート毎のカスタム描画方法をマルチメソッドで定義できるように
インタラクティブなAPIの確認
- WebPayのAPIをREPLで確認
Clojureコミュニティに向けた取り組み
- OSS
- ニャンパスで提供しているものが幾つか
- clojurnal (日本語情報のサイト)
- clojureのチャットボット
- 勉強会
- Tokyo.clj
- Laketown.clj
- テーマ特化勉強会
- HaLake(コワーキングスペース)
- ハンモック駆動開発
- Clojure割引
- チェックインアプリ HaLake API(OSS公開)
まとめ
日本でもちょっとずつコミュニティが活発化
社内、正社員は2人
JVMコンパイルだけじゃなく、JavaScriptコンパイルもある。
(わりと会場内にClojureユーザ多そうな感じ)
18:00前に退散!お疲れ様でした。