- JJUG CCC 2012 Fall – 開催概要 | 日本Javaユーザーグループ
- 2012/11/10(#jjug)JJUG CCC 2012 Fall_(〜12:00) - Togetterまとめ
- 2012/11/10(#jjug)JJUG CCC 2012 Fall(13:00〜16:00) - Togetterまとめ
- 2012/11/10(#jjug)JJUG CCC 2012 Fall(16:00〜) - Togetterまとめ
午後から行きました。メモったものを投下しておきますね。
R1-1 今さら Coin、されど Coin
資料 → (R1-1) いまさら Coin, されど Coin @ JJUG CCC 2012 Fall
Blog → JJUG CCC 2012 Fall で "Coin" の話をしました。 Java etc.../ウェブリブログ
- StringのSwitch-Case文
- CaseにStringが使える。式も書ける。
- 定数の式であれば良いが、変数が含まれる場合はNG
- IDEでもチェック出来ない場合もある
- 式がnullになるものはNG
- Switchにnullを入れるとNullPointerExceptionが発生する
- 事前にnullチェックしておく必要がある
- IntegerなどのAutoBoxingでやっている時も、nullチェックが必要
- 文字列と定数を混ぜた時に、同じになるものはコンパイルエラー
- JavaVMがどうやって動くのか。
- 2つのSwitc文になります。
- 1つはハッシュで順番付けします。2つ目は順番に処理が書かれるようになります。
- ハッシュなので、たまに違う文字列でも同じになってしまうことがあります。
- そういう場合は、caseの中でif文で分岐されます。
- デバッグしやすいために2つに分解している。
- CaseにStringが使える。式も書ける。
- 数値のアンダーバーなど
- 二進数が使えるようになっています。
- 2進数になると、見難くなるので、アンダーバーで区切れるようにしました。
- これは、10進でも16進でも使えるようになっています。
- 区切りはどこでも構いません。
- 整数だけではなく、浮動小数点でも利用が可能です。
- 2進数で32bit超えるときは、lまたはL最後につけること。
- アンダーバーは先頭と末尾には入れられない。
- 指数部のeやpの前後も入れられない。
- 10進の場合、先頭がアンダーバーだと、変数だと思われてます。
- 変数名の先頭に数値は許可されませんが、アンダーバーは許可されているためです。
- 文字列にアンダーバーを入れて、ParseIntとかすると実行時エラーになってしまいます。
- 例外
- 複数の例外をキャッチする場合。
- 今までは、親であるExceptionをキャッチしてサボっていましたが、|で区切って記述することで複数書けるようになりました。
- Exceptionをキャッチして、スローした時に、6までは、throwsにExceptionを書かなければいけなかったが、7からは、実体のthrowsでよくなりました。
- 今後は、throws句を親の例外で丸めるのではなく、ちゃんと書くようにしたほうが良いかも知れません。
- リフレクション系の例外は、RefrectiveOperationExceptionが追加されたので1つで済むようになっています。
- 複数定義した場合、キャッチした例外に別の例外を代入するとコンパイルエラーになります。
- e = new IOException(); など
- final変数として認識するためです
- 複数例外で、例外クラスの親子関係があるとコンパイルエラーになってしまう。
- FileNotFoundExceptionとIOExceptionを並べることが出来ません。
- VMでは
- tryもcatchも今までと変わりません。
- 例外とハンドリングのテーブル情報が変わるだけです。
- バイトコードは変わらないので、性能に影響は出ません。
- ダイヤモンド
- 自動リソース管理
- finallyでクローズしましょうが、楽になりました。
- 書かなくて良くなったのではなくて、書けなくなりました。書きたくても書けない。
- クローズ以外は書かなくてはいけません。
- catchの中でstreamはスコープに無いので、使えません。
- 今まではCauseを使って居ましたけれど、その逆になります。addSuppressedが用意されました。
- 再代入も出来ません。
- AutoClosableを実装している必要があります。
- Closeメソッドがあるだけではダメです。
- closeされるのは、リソース部分に定義したものだけで、tryの中で定義したものは自動で閉じてくれません。
- @SafeVarargsアノテーション
- ノイズ的な警告を抑制するためのものです。
- 警告メッセージを出さなくするためのものです。
- コーダーにムダな警告メッセージを見せないためのものです。
- 利用者側からは嬉しい。
- ライブラリを作っている側からすると、出さなくて良いということをコンパイラに伝えるためのものです。
- ノイズ的な警告を抑制するためのものです。
- まとめ
- 各々、出来ることと出来ないことがあります。
- 実行時例外となるところには要注意です。
R2-2 クラウド時代のSpring Frameworkの新たな試み。〜Spring Dataの全貌〜
資料 → Spring Data for JJUG for Cross Conference Fall
- Spring Dataとは?
- ビッグデータ
- Spring Data
- 慣れ親しんだSpringベースのプログラミングモデルとは?
- SpringFrameworkの特徴
- リポジトリ
- SpringやWebのレイヤー構造はMVC
- この考え方は基本的には変わらない。
- NoSQLになってもこの考え方は変わらない。変える必要はない。
- KeyValueStoreでも、RelationalDatabaseでも、Documentでも、GraphDBでも。
- 今までDataAccessレイヤーでやっていたこと。
- それぞれをDAOとして定義していました。DAOの中でそれぞれの実装を使い分けていた。
- しかしながら、下のレイヤを意識したプログラミングをしなければならなかった。
- Spring Dataでは統一化して、シンプルで一貫性のあるものにした。
- それが、Spring Data Repositoryになります。
- Repositoryを使えば、統一感を持って開発が出来る。
- Repositoryとは何か?
- 基本は、リポジトリのインタフェースです。
- Repository、CrudRepository、PagingRepository。
- 今まではリポジトリのインタフェースの実装は実装しなければならなかった。
- まとめ
- 共通のインタフェースで対応出来る
- お決まりごとのコードを書かなくていい
- クエリをアノテーションで設定出来る
- ドメインマッピング
- テンプレート
- まとめ。
- 一貫したSpringベースのプログラミングモデルを提供する。
- Springの特徴を活かしたPOJOセントリックなデータアクセスモデル
- 宣伝
- 12月9日 VMWare 浜松町オフィスで「Spring Dataの真髄を語る」をやります。
- Spring Dataの神髄を語る : ATND
Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ
- 作者: 長谷川裕一,大野渉,土岐孝平
- 出版社/メーカー: 技術評論社
- 発売日: 2012/11/02
- メディア: 大型本
- 購入: 8人 クリック: 115回
- この商品を含むブログ (14件) を見る
R3-3 テストコードのリファクタリング
資料 → テストコードのリファクタリング
Blog → JJUG CCC 2012 fall で登壇してきました #jjug #jjug_r33 - やさしいデスマーチ
Github → shuji/demo-refactering-unittest · GitHub
Togetter → テストコードのリファクタリング #jjug_r33 - Togetterまとめ
- 導入
- 継続的インテグレーションは強みでなくなった
- 継続インテグレーションは強みではなくなった:柴田 芳樹 (Yoshiki Shibata):So-netブログ
- 強みではなくなった、やってないところは弱みになってきている
- 3本柱
- 継続的インテグレーションは強みでなくなった
- なんのためにテストするんだ?
- ユニットテストとは?
- セーフネットである。
- 品質は?
- 直接的な関係はありません。
- 形上は上がります。
- ユニットテストを書くことによって、技術的負債が減る。そこが一番。
- よって、結果的に品質が上がる
- 品質の向上は受け入れテストなどが別途必要
- 品質は?
- ユニットテストは難しいか? YES!!
- 習得するには、それなりに書く必要がある
- テスト技法を学ぶ必要がある
- テストを書くプロジェクトに参加する必要がある
- チーム全体の意識改革が必要
- ユニットテストは簡単ですか? YES!!
- パターン化されている
- ユニットテストは有効? YES!!
- ユニットテストは開発の基盤である。
- 学習のコツは?
- たくさん書く。
- 書いて整理する。
- なんでも自動化する。
- 増えるテストコードへの対応
- テストコードの特徴。
- 似たようなコードが多くなる。
- パラメータが異なるものをテストするために、前提条件だけが違う場合が多い。
- リファクタリングしまくると、どこで何をやっているかわからない。
- 効率よくテスト増やしたい。テストを追加したい。
- 増やすのが楽でないとダメ
- 似たようなコードが多くなる。
- どうやんの?
- 重複を排除しすぎると可読性が落ちる
- テストケースごとに独立させる
- 勝利の鍵
- カスタムMatcherや、カスタムルール
- 比較部分を共通化することが出来る
- 構造化テスト、パラメータ化テストをする
- カスタムMatcherや、カスタムルール
- デモ : ArrayListのテスト
- 状態を持たないテストは簡単。常に同じ値を返すから。
- 状態を持つと難しくなる。
- voidも難しい。
- 戻り値以外で別の方法で検証しなければならないから。
- @Enclosedをしましょうか。
- @RunWithアノテーションでEnclosed.classを指定する
- 内部クラスを作っていきます。
- 色々な状態が混ざってしまうので、初期状態のテストをまとめましょう。
- 初期化処理をセットアップにまとめることが出来ます。つまり、コンテキストをまとめることが出来る
- 初期化処理のコードも、テストコード自体も減らすことが出来る
- 同じ階層で管理しないこと。デスクトップにファイルを並べるのと同じことです。
- デモ : 消費税計算
- パラメータ化のテストです。
- @Parameterizedと@Theoriesの2パターンある。
- @Parameterizedはコンストラクタでパラメータを指定する。
- @Theoriesはメソッドの引数で指定する。
- @RunWithアノテーションでTheories.classを指定する
- @Theoryを@Testの代わりに使う。
- パラメータを内部クラスを作る、Fixture
- @DataPointsのstaticフィールドかstaticメソッドを書く
- 配列を定義するか、もしくは配列を返すメソッドを定義する
- パラメータをいくらでも増やしても可読性を損なうことがありません。
- パラメータを増やすのが簡単
- 多くのパターンでテストする場合には有効
- 複雑な条件のテスト
- @Cucumberを使う
- JUnitでは書きにくいのでCucumberで書く
- ステップ定義をする。
- 前提と、もし、と、ならばを定義していく。
- オールペア法。
- 2項で組み合わせれば9割型カバーされる
- それ以上は費用対効果が薄い。
- 2項で組み合わせれば9割型カバーされる
- QA
JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)
- 作者: 渡辺修司
- 出版社/メーカー: 技術評論社
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- 購入: 14人 クリック: 273回
- この商品を含むブログ (69件) を見る
R3-4 WGPによるHadoopの可視化ソフトウェアをオープンソースで公開しました
- Acroquest Technology,Hadoop/HBaseの内部動作を可視化する「halook」をオープンソースとして公開,WGP1.0βおよびENdoSnipe5.0βを同時リリース:ニュースリリース|gihyo.jp … 技術評論社
- Halook
- Hadoop
- Googleが論文出してYahooが作ったものです。
- 輝かしい成功事例が多数ありますが、トラブルも結構あります。
- 分散処理で、分散したけど、データが偏って分散しないとか、HBaseの1箇所に書き込みが集中したりなど
- 数10代、数千台のものを束ねることでの難しさがある。
- 仕組みを説明するだけで大きな話
- 把握するだけでも大変
- HDFS View
- 使用状況を人目で確認したい。
- 円周上にViewを配置すれば、増えても一目で見れる
- ネットワーク上の距離も表現可能
- 使用状況を人目で確認したい。
- MapReduce
- HBase
- データを管理する単位のリージョン数の推移を表示
- 結構HBaseは管理するのが大変である。
- 熟練していないと性能を引き出すことが出来ない。
- リージョンがどの様にに増えていくのか、その推移を表現します。
- コンパクション発生もグラフ上に表現
- デモ
- 同時に動かせるJobには限りがあるので、時間がかかっているところを見れば良い。
- そのタイミングで他のJobが動いていると、止められる。
- 実際の動きを確認出来るので、トラブルを解析出来るし、回避も出来る。
- Taskの投機的実行
- 失敗した場合には、別のノードで実行する。
- 失敗しても良いように、別のノードであらかじめやっておくことが可能。
- 勝手に動いて欲しくない場合もある。
- リソースが余っていると、勝手に動かしてくれるけれど、確認が難しい。
- 裏で投機的に動いているのも可視化してくれる。
- 設定がどこにあるかはログを見ていかないとダメ。そこを分かりやすくしてくれる。
- Jobが失敗した場合も見れる。
- Reduceが失敗したので、Reduceが再実行されたのか。
- それとも、Mapからやり直したのか。
- リージョン分割
- データはリージョンに分割して管理、保存される。
- リージョンのサイズが大きくなると、自動的に分割される。
- データは行キーでソートして格納される。
- 自動Splitに任せると、一定速度でデータを投入しても、グラグは直線的にはならない。
- あるタイミングでドワッとくる。
- なので、自動ではなくて、手動でやることも可能。
- 何故かと言えば、キーの分布が一様ではないから、さらにバラつきが出来る。
- タイムスタンプをキーにしていると、最後だけが増えていく。それはそれで問題になる。1つに負荷が集中する。
- EndoSnipeとWGPをベースにしてHalookは作られている。
- WGP Web Graphical Platform
- HTML5、CSS3、JavaScriptベースのプラットフォーム
- Halookで、Hadoop、HBaseを可視化しよう
- 実際の挙動を確認することで、分散アプリケーションを使おう!
- 是非使ってみてください。
BOF1-1 Twitter4Jのプロモーション戦略
資料 → Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11
- Twitter4J
- 開発は2007年5月から
- オープンソースで、たくさん使ってもらいたい。
- 営利目的ではありません。
- プロモーション戦略、つまり、沢山使ってもらうためにしたこと。
- プロモーションって?
- プロモーションとは、活動のこと
- 手段として一般的なものは、広告とか、インセンティブとか、営業活動、口コミとか。
- 目的としては、知名度を上げる、ブランド向上、売上最大化。ユーザ増加。
- 活動として、プロモーション、ユーザ層を広げる、安心して使える、簡単に使える。
- その為の手段として・・・・
- その他工夫していること
- プラットフォームを増やせ
- 安心して使える
- 10年前まではOSSってだけ利用出来ない事もあった。
- 今は大丈夫・・・なはず。
- 10年前まではOSSってだけ利用出来ない事もあった。
- 自分だったら、どういうものを使うのか?
- 一般的なライセンスであること
- 開発がアクティブ
- JIRAで課題を管理する。有償製品だが、OSS向けは無料で利用可能
- コミュニティがアクティブ
- ggrks禁止。
- ロードマップが明確
- リリース時期は明記しないが、ロードマップを公開して、次に何をしようとしているのかを把握出来るようにする。
- ちゃんと取り組んでいる姿がわかる
- プロジェクトに設定しやすい
- 古典的な、ダウンロードしてクラスパスに通す方法もあるが、クラスパスを理解していないユーザも居る
- Maven、ivyなどなどに対応する
- MavenのCentral Repositoryには登録しておく
- 【最新版】Maven Central Repository へのライブラリ登録方法 #maven - #侍ズム
- 2012-05-07 - @vvakame の日記
- 簡単に使える
- サンプルコード
- ドキュメント
- 記述のコストが大変なので、対象を絞る。読むほうも大変。
- 簡単なサンプルコード例。設定方法。
- 注目が集まってきたら、開発に参加する方法や、ルールなど。
- ライブラリ、依存関係
- シンプルなパッケージ
- internalパッケージなどを利用して、ユーザが見なくても良いように。
- トラブルシュートを楽に
- スタックトレースにライブラリのバージョン番号を含める
- エラーコードを入れる。
- エラーコードでググれるURLを含めておくと、2回目以降の人はググれる。
Twitter API ポケットリファレンス (POCKET REFERENCE)
- 作者: 山本 裕介
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/15
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 247回
- この商品を含むブログ (43件) を見る
BOF1-2 作って学ぶデータベース 〜まずスモールデータから始めよう〜
元ネタ → かわいいリレーショナルデータベース作った - きしだのはてな
- ビッグデータが大流行
- とはいえ、一つ一つのデータをきちんと扱わなくてはならない
- なので、スモールデータの時代。
- リレーショナルモデル
- RDBのモデルの説明
- リレーション、テーブル、タプル、カラム
- 演算→選択(where)、射影(select)、結合(join)、和(union)
- インデックス
- ツリーインデックスとハッシュインデックスがある
- インデックスもRelationを継承
- ユニオン
- 使わなくない?でもORの計算がある
- Index張ってあれば、内部的にはORはUNIONとも言える
- MVCC
- Contextを用意
- Contextに対して、into(insert)などを行うようにする
- 他のContextからとは、見えるものが異なるようになる
- 全体像の話
- SQLパーサー、実行計画(論理実行計画と物理実行計画)、実行エンジン、バッファ管理、ストレージ管理
- まとめ
- 全体像の実行エンジン以降については、NoSQLでも重要になってくる
RDBMS解剖学 よくわかるリレーショナルデータベースの仕組み (DB Magazine SELECTION)
- 作者: 鈴木幸市,藤塚勤也
- 出版社/メーカー: 翔泳社
- 発売日: 2005/02/22
- メディア: 単行本
- 購入: 11人 クリック: 88回
- この商品を含むブログ (26件) を見る