第四回 #渋谷java に参加しました
参加してきました。(スポット参戦中のプロジェクトから抜けて)
まとめ
- Grails 使ってみるのはありかも
- groovy 触ってみようかな(とりあえずテストからかな?)
- そのときはSpock を使ってみよう
- Gradle もそろそろ使いたいなー
- JUnitにおけるオブジェクトの等価比較って、他の人も悩んでたんだなー
- コード補完で頑張る以外にも、がんばれば方法はあるんだなー(JSONPath で除外はありかも)
- Servlet のURLって、きれーに出来ないのかなーって思ってたけど、UrlRewriteFilter を使えばよかったのか
- Reactive Extensions って、うまく使えれば便利そうだなー
- ただし、Java8のラムダを使わないと記述量が増えそう
- 並行処理とか、真面目に学ばないとなー
- テンプレートエンジンって、色んなのがあるんだなー
- Juzu Web Framework は、、、まぁ、いいか。
感想
- こういう、色んな技術を知れる場はいいですね〜
- 仕事が無ければ、もうちょっと他の参加者と話してみたかったけど、残念
本
Gradle
- 作者: 五十嵐啓人,伊野亘輝,近藤宇智朗,渡邊恵太,須藤耕平,中島聡,A-Listers,はまちや2,川添貴生,片山育美,池田拓司,濱崎健吾,佐藤太一,曾川景介,久保渓,門脇恒平,登尾徳誠,伊藤直也,mala,後藤秀宣,若原祥正,奥野幹也,大林源,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/24
- メディア: 大型本
- この商品を含むブログを見る
並行処理
Java並行処理プログラミング ―その「基盤」と「最新API」を究める―
- 作者: Brian Goetz,Joshua Bloch,Doug Lea
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/11/22
- メディア: 単行本
- 購入: 30人 クリック: 442回
- この商品を含むブログ (171件) を見る
groovy
- 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/06
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 392回
- この商品を含むブログ (154件) を見る
雑多なメモ
http://www.slideshare.net/kazuhiroserizawa988/shibuya-java4op ・_y_u_さん Grailsのちょっとイイ話 http://www.slideshare.net/sudoyu/20131116-shibuyajava-grailsgoodness NTTソフトウェアの Grails推進室の方 JGGUGの方 Grails ・Webアプリケーションフレームワーク ・Ruby on RailsのJavaVMで動く奴てきな ・XML設定不要 Groovyのコードで書ける イイところ Javaの世界と地続き JVM環境から逃げたいって人いないですよねー。 中身(一部) Spring Framework Hibernate Apache Tomcat Embed 7 Apache Ivy H2 Database ほとんどのServletコンテナで動く 性能 http://www.techempower.com/benchmarks/ Scala/Lift, Play、Ruby/Rails より速い! Javaの資産の活用 ・Grailsアプリはただのwar いままでの運用ノウハウが活かせる ・Spring / Hibernate の経験が活かせる 学習コストが抑えられる Groovyで書ける クロージャ メタプログラミング / MOP AST変換 DSLを簡単に作れる Groovy-JDK 演算子オーバーロード チェック例外のチェック省略 本:プログラミングGROOVY Spockでテスト JGGUGのワークショップ資料をご覧ください GVM rbenv Goとかぶってる・・・ Grails wrapper Gradle wrapper チェックアウト→コマンドでインストールが不要 Grails console dbconsole DBの中身をWebから見れる プラグイン機構 Security coreとか(View, Controller, Serviceとかがはいる) Serviceとトランザクション 勝手にトランザクション デメリットいところ Checkstyle / Findbugsが使えない CodeNarcを使うことになる パートナー探し Spring / Hibernateの経験があれば! メモリフットプリントが大きい PaaS利用では大きなデメリット ログ出力 log4j内蔵 スタックトレース development モードで画面に出てくる マルチデータソース デフォルトで対応 NoSQL プラグインで対応 Hibernateを使いたくない / SQLを生で書きたくない HibernateのネイティブSQL API Groovy SQLを使う(キャッシュ管理?が必要) MyBatis Grailsプラグインの一覧 list-pluginsコマンド Grailsに対応しているIDE IntelliJ IDEA が一番いい Struts1からの移行 変態プラグインがある Grailsの書籍 2.x系に対応した日本語の書籍は無い 本家のドキュメント 実際の案件で20件ぐらいやってる ものすごい大規模システムで使ったよ、というのはまだない jfluteさん MySQLのJDBCドライバに振り回されるDBFlute フリープログラマーさん 現場での教育や、フレームワークの拡張とかやってます 中がGroovyで出せる 0x1f004 MySQLさん なぜあなたは、バッチ更新しないの? for文で回っとる 別マシンへの通信コストとかあるから、ちゃんと考えようねって教えてたのに。。。 まじでー MySQLさん なぜあなたは、 カーソルフェッチしないの? 数十万件ぐらいだったら、メモリ上に全部乗っかる 本番運用に入って、大量の会員を抱えたあとに発生する(結合テストとかではみつからない) fetchSize に Integer.MIN_VALUE を設定すると、1件ずつの取得になる MIN_VALUEって、、、 い、Integer.MIN_VALUE技!? closeしないから、新しいSQLを発行出来ない。。。 sql_calc_found_rows limitが無かった時の件数が取得できる →MySQLちょっとやるじゃn grimroseさん Gradleについて https://github.com/grimrose/shibuya-java-04 Gradleって何? 現在 version 1.8 世界で一番イケてるビルドツール 本:WEB+DB PRESS val.76 英語ならオライリーにある Gradle 日本語ドキュメント 実験的なところは追いついてないところもある AntからGradle build.xmlのインポート 17章に書いてある project: "Ant + Ivy” MavenからGradle project: “maven” ひな形プロジェクト 1.9からコマンドが変わってる pom.xmlから生成可能 maven plugin→使えません コスト と メリット mavenのレールから外れてる pom.xmlがツライ pluginをそんなに使っていない 使いたいpluginがみつからない →上記に当てはまるひとは gradleへ “mvn …”.execute() プロジェクトに柔軟性を ・gradle wrapper ・custom task or plugin ・task test ・groovy komiya_atsushiさん Junitのオブジェクト透過比較を怠けたい https://github.com/komiya-atsushi/shibuya-java4 代々木の緑色の会社(渋谷じゃない) #TokyoWebmining 事務局 「あるメソッドから返却されるオブジェクトの内容が想定しているとおりか?」をテスト Dto ListBookDto アプローチ ・assertThat() をひたすら並べる →つらい ・equals() を実装する →普通にやるのはつらい、Commonsつかう? ・専用のMatcherを実装する →テストコード量が増える 汎用的な透過比較 Matcher を実装してみた komiya-atsushi/shibuya-java4 IsEquivalentTo の概要&機能 ・データ構造を再帰的にたどる ・equalsをオーバライド ・Json-path的な記法で ・比較的親切(?)なメッセージ 他の人の意見としては、 ・コード補完でがんばる ・toStringでわりきっちゃう kazurofさん UrlRewriteFilterに手を入れてみた http://sssslide.com/www.slideshare.net/kazurof/urlrewritefilterissue120 外向きには綺麗なURLを書き換えるライブラリ 外部:/data/123/… ↓ 内部:/data/get.do?id=123… 3系→4系 URL変換動作の${…}の 関数の連続はNG ネストはOK 木構造で解釈 Interpreterパターン 実際に実装してみることが大事ですね ngsw_taroさん RxJava使ってみた 夢と魔法の待ち時間 https://play.google.com/store/apps/details?id=com.taroid.parkwaittimegetter 自称Kotlinエバンジェリスト Reactive Extensions のJava実装 LINQのデータソースをイベントと非同期処理に拡張したもの ・学習コスト若干高め ・ 書きやすい、読みやすい ・SAM無名クラス(Java8 早く、、、) azusaさん 真にスレッドセーフなHashMapとは http://www.slideshare.net/setoazusa/hash-map-28306457 そのクラスが使われるコンテキストに強く依存する 本:Java並行処理プログラミング タイトルは釣り ConcurrentHashMap使えばいいんじゃね? 新規なら、それ一択 無条件には置き換えられない HashMap extends AbstractMap ConcurrentHashMap extends AbstractMap HashMap の値にnullは入る ConcurrentHashMap の値に nullはNullPointerException synchronizedMap を仕方ないので使う ループするときは呼び出し元で同期しないといけない シリアライズは同期できない ひっかかったケース HttpSessionにHashMapを格納 スレッドごとにオブジェクトを分割すればいい まとめ コレクションAPIには地雷があります スケールアウトの容易さという点では、railsが羨ましい Java並行処理プログラミング を読みましょう eiryuさん Thymeleafのすすめ TwFavViewの作者 Javaのテンプレートエンジン たいむりーふ 最新は2.1系 ブラウザで見てもJSPのように崩れない spring統合用のモジュールがある 属性にth:をつけるだけ data-xxxみたいなのはth:attr マニュアルは短いから、全部読めばいい サンプル:stfm th:text th:each th:remove=“all-but-first" JavaScript inlining URLとか、言語対応とか JSP書いてた人なら問題なく書けるはず スクリプトレットもりもり使ってなければ ブラウザで確認できることはかなり便利 デザイナさんとルール XHTMLで記述する JavaScriptで扱うためのclass名は、”js-“で始める 極力デザイナー作成部分は触らない。逆もまた然り。 追加するイメージ デメリット th:ifの制御 ヘッダ、フッタなど、include はコピペしないといけない Spring以外では、そんなに、、、 seri_k 謎のWAF Juzu FrameWorkを試してみたリベンジ あんまり使われてない? play 1.x系に近い ViewとController機能のみ薄いフレームワーク template は groovy ベース Annotationで機能や設定を指定 mavenでベースをサクッと作れる Annotation Processing を利用する factory pathにjuzu-core.jar 更新を検知して、ファイルが消えちゃう。。。? cleanすると、再生成