読者です 読者をやめる 読者になる 読者になる

気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

JJUG CCC 2015 Springのメモメモ

Java

JJUG CCC 2015 Springに行ってきました。
わたしが聞いたセッションについてメモとしてざっと書きます。


セッション1 Javaにおけるnull。これまでとこれから by 太一 (java-ja

各言語におけるnullの扱い

JAVA
null参照はあらゆる型にキャストできるw

public class NullCast
{
public static void main(String[] args)
{
Object obj = null;
String str = (String)obj;

System.out.println(str); // null
}
}

javaScript

undefinedはグローバルオブジェクトの属性値


<GO>

C言語を今っぽく書いたやつ
文字列と数値、それぞれのNillが存在
Nill型に対して文字列と数値においてそれぞれのAPIが呼べる


Scala

nullぽいものとして
Null型、Nothing型(型パラメータ用)、None、Nil型あり。


Javaでnullが起きるタイミング

・言語仕様において
拡張foreach
throw
try with resource


Javaでnullを表現するには

長さが0のコレクション
NullObjectパターン
java8のOptional(ちょっと残念)

モナドって良くわかん


Optionalについて

<特徴>
Optionalはクラスをラップするので
リフレクションなどで型が読めない。

メソッド
・Map#getOrDefalt
nullの場合、返却するデフォ値を設定する

・orElse
遅延設定。便利らしい

#fillter,#map

nullの代わりに呼ぶものOptional.empty


セッション2 Web開発における最新テスト手法 by tokuhirom (subtech)

■講演者の環境
外部APIを叩く系のBtoC系のお仕事らしい。
APサーバー:jetty,Nginxなどを使用。
DBMSmySQL

■補足情報
jetty:TomcatのようなServletコンテナを搭載したサーバー
軽量でHTTPサーバー(Apacheのような)の機能を備えている。連携の必要なし
パフォーマンスもTomcatより良好

nginx:軽量高速サーバー。Apacheサーバーは1000クライアントからのアクセスに耐えられない問題に対応するために生まれたらしい。

テストの肝は「DBアクセス処理と入出力」

<DBのお話>
テスト毎にDBを作成、削除する運用にしている。
速度が遅い場合はDBダンプして、DB作成したり。

テスト毎に柔軟にデータを作成するようにしている。


<外部APIにおけるテスト>
httpdリクエストでテスト。
APIのテストはAPIでテストする。

スライドに出てた、テストクラスにラムダを使ったり、
JAVAなのに読めんかった。
他の人のソース読むためにラムダ使ったコードなど書かなきゃだめかな。。


<コントローラーのテスト>

Apache HttpClientでアクセス


<HTMLのテスト>

変更ありまくり、デザイナーの気分で変わるので
自動化に見合わない。


<ダミーデータ作成>

その場、その場で作成。
エクセルやXMLで作成すると、メンテが大変
誰かが、修正しちゃって全体壊れたりしちゃう。


junit
assertjを使っている
→assertThatは覚えるmatcher覚えるのが大変。

メソッド追加追加で補完で便利に書ける。


<デプロイ>
jenkinsでソース、jarは自動でアップ

CIを回さないテストコードは意味がない。

CIは設定が面倒な場合は、check style・FindBugsのエラーレポートを
メールで送りつけるのもいい。


セッション3 金勘定のためのBigDecimal入門。そしてMoney and Currency APIへ by 宮川 拓(JJUG幹事)

<double/floatを使ってはいけない>

double/float
→メモリサイズを小さくするために使っている。
BigDecimalから変換すると10進少数に丸められてしまう。

1- 0.07 = 0.93 となるはずが 0.92になってしまう。。
1- 0.05 ではこのずれはおきない。
計算した場合に起こる。

平均値などざっくりした値のみを扱う場合のみ、double/floatを使いましょう。

BigDecimal

Decimal→10進数の意味
APIの説明が主だった。

落とし穴1
new BigDecimal(0.07)
→0.07にdoubleやfloatを指定するとアウト!文字列で渡しましょう。
new BigDecimal(String)が正しい

落とし穴2
比較でequalsを使うとスケールまで合わせる必要がある。ずれるとfalse
スケールを意識しない場合compareTOを用いる

java BigDecimalで比較する方法 – BigDecimalクラス
http://www.saka-en.com/java/java-bigdecimal-comparison/


セッション3 Embulk に見るモダンJavaの実践的テクニック ~並列分散処理システムの実装手法~by なひ (トレジャーデータ株式会社)

バルク転送 bulk transfer
データ転送方式の1つで、複数の通信回線を使用して大量のデータを一括で転送

http://www.slideshare.net/HiroshiNakamura/embulk-20150411

今回の例では
大容量のCSVデータ(読み込むだけで1ヶ月かかるデータ)の読み込みにおいて
不正データがまぎれた場合に対応しきれないという問題に対しての解としてembulkを
用いる話。

emblukは様々な不正データに対しての問題を解決するプラグイン(rubyGem)が用意されている。これにより、自分で個々の問題に対応する事なく大量データを扱うことができる。
なるほど、素晴らしい。

設定ファイル:yml

あんまし内容理解できなかった。。。