Submit Search
Upload
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
•
5 likes
•
11,701 views
なおき きしだ
Follow
JJUG CCC 2017 Springの資料です
Read less
Read more
Software
Report
Share
Report
Share
1 of 63
Download now
Download to read offline
Recommended
JJUG CCC 2017 Spring の発表スライドです。Haskell 互換なふたつの JVM 言語 Frege と Eta について、モナドを利用した Java ライブラリ呼び出しの技法を解説します。 関連ブログ記事 : http://ccvanishing.hateblo.jp/entry/2017/05/21/150903
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
JJUG CCC 2017 Spring L7セッションの発表資料です。
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
JustSystems Corporation
NL 名古屋の発表スライドです。Haskell ライクな JVM 言語 Frege を題材に、非正格な評価戦略を Java 上で実現する方法について解説します。なお、スライド中に登場するサンプルコードの詳細は、ブログ記事 http://ccvanishing.hateblo.jp/entry/2016/04/17/201842 を参照のこと。
Frege, What a Non-strict Language
Frege, What a Non-strict Language
y_taka_23
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
bitter_fox
日本Javaユーザーグループ JJUG ナイトセミナー 2 月 27 日(水) http://www.java-users.jp/?p=309 注:サンプルソースはあくまでも例であり、その修正例も完全なものではありません。
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
JJUG CCC 2017 Fall の LT 資料です。
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
YujiSoftware
JavaFX Night講演資料
Heap statsfx analyzer
Heap statsfx analyzer
Yasumasa Suenaga
Introduction to JShell: Official REPL tool for Java Platform
Introduction to JShell #JavaDayTokyo #jdt_jshell
Introduction to JShell #JavaDayTokyo #jdt_jshell
bitter_fox
Recommended
JJUG CCC 2017 Spring の発表スライドです。Haskell 互換なふたつの JVM 言語 Frege と Eta について、モナドを利用した Java ライブラリ呼び出しの技法を解説します。 関連ブログ記事 : http://ccvanishing.hateblo.jp/entry/2017/05/21/150903
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
JJUG CCC 2017 Spring L7セッションの発表資料です。
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
JustSystems Corporation
NL 名古屋の発表スライドです。Haskell ライクな JVM 言語 Frege を題材に、非正格な評価戦略を Java 上で実現する方法について解説します。なお、スライド中に登場するサンプルコードの詳細は、ブログ記事 http://ccvanishing.hateblo.jp/entry/2016/04/17/201842 を参照のこと。
Frege, What a Non-strict Language
Frege, What a Non-strict Language
y_taka_23
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
bitter_fox
日本Javaユーザーグループ JJUG ナイトセミナー 2 月 27 日(水) http://www.java-users.jp/?p=309 注:サンプルソースはあくまでも例であり、その修正例も完全なものではありません。
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
JJUG CCC 2017 Fall の LT 資料です。
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
YujiSoftware
JavaFX Night講演資料
Heap statsfx analyzer
Heap statsfx analyzer
Yasumasa Suenaga
Introduction to JShell: Official REPL tool for Java Platform
Introduction to JShell #JavaDayTokyo #jdt_jshell
Introduction to JShell #JavaDayTokyo #jdt_jshell
bitter_fox
Java SE 9を、新たに導入されたモジュール・システム(Jigsaw)を中心として紹介します。JJUG CCC 2017 Fallの発表資料です。 補足: p. 7 正しくは「JMX」→「JMS (Java Message Service)」。JMXはJava SE内の、モニタリング用の仕組みです。 p. 43 これに加えて、SPIの実装を提供するモジュールも、モジュールレイヤーに含まれます。具体的にはConfiguration.resolveAndBindの動きです。 p. 47「Oracle JDKでは、外部モジュールの非公開メンバへのリフレクションが可能」は、OpenJDKでも同じ動作です。「HotSpot系の」とすべきところでした。 このスライドはCC Attribution Licenseの元に、利用・改変・再配布をライセンスします。
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる(四則演算するだけだけど) #ccc_c5 このセッションでは、四則演算するだけの簡単なJVM言語の作り方を紹介します。 言語はCode -(Lexer)-> Tokens -(Parser)-> AST -(Compiler)-> JVM bytecodeと変換して、JVMで実行します。今回Lexer/Parserの部分にANTLRを、それ以降の部分にTruffleを使います。とくにANTLRやTruffleについての事前知識は必要ありません。BNFを定義してANTLRを使ってASTを構築し、それをTruffleのASTに変換して渡すという実装部分について、各ライブラリの概要やAPIを紹介しながら説明します。すべてを丁寧に説明する時間はありませんので、このセッションで出たキーワードを各自あとで調べて学びを深めていただくことになるでしょう。この点をご了承いただいて、ぜひお越しください! なお、このセッションはDevoxxUS 2017でのOleg Šelajev-sanのセッション"How to Create a New JVM Language"にインスパイアされたセッションです (https://speakerdeck.com/shelajev/how-to-create-a-new-jvm-language-devoxx-us-17)。 対象者:ANTLR/Truffleに興味がある人、オレオレJVM言語を作ってみたい人
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Koichi Sakata
第3回 LINQ勉強会のセッション資料です。
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
ShinichiAoyagi
2017/11/18 JJUG CCC 2017 Fallでの発表資料です。 #jjug_ccc #ccc_g5
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
JustSystems Corporation
JJUG CCC 2016 Springで発表した資料です. #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
bitter_fox
2012/09/26(Wed) JJUG Night Seminar at Oracle Japan, Tokyo
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
takezoe
すまべん関東 Rx資料
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
Yoshifumi Kawai
講演者:名雪 通(ユニティ・テクノロジーズ・ジャパン合同会社) :安原 祐二(ユニティ・テクノロジーズ・ジャパン合同会社) こんな人におすすめ ・C#プログラマー ・.NETで開発経験があり、これからUnityを使い始めるプログラマー ・「async/await完全に理解した」と言いたい人 受講者が得られる知見 ・async/awaitの知識
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Masatoshi Tada
Presentation slide of my session of Groovy at JJUG CCC 2015 Spring
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
福岡JavaOne2013報告会第2弾でのプレゼン ラムダ構文の文法よりも、その使い方とプログラミングスタイルについてを主にまとめました。
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
Java Day Tokyo 2016 のセッション3-Eの資料です。 Java8, Java9の新機能がシステムの設計にどういう影響があるのかを考えてみました。
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Yoshitaka Kawashima
JSON日の金曜日#1での発表です http://atnd.org/events/29927
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-Javaライブラリ
Yukiya Nakagawa
2016/9/3 なにわTECH道
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
なおき きしだ
JJUG CCC 2021 Fall の発表資料です。
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
Talked at CEDEC 2018, 2018/08/22 - https://2018.cedec.cesa.or.jp/session/detail/s5b559852a6405
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
It is easy to use JWT authentication token with Grails Spring Security REST plugin.
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
Uehara Junji
https://connpass.com/event/95696/ 2018/9/15 「Unity 非同期完全に理解した勉強会」にて登壇
async/await のしくみ
async/await のしくみ
信之 岩永
JJUG CCC 2015 FallのJava EEハンズオンの、当日映写するスライド資料です。PDFでダウンロードしていただくことができます。
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Masatoshi Tada
GlassFish Users Group Japan 勉強会 2017 Winterのセッション資料です #glassfish_jp
Java EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfile
Norito Agetsuma
JJUG CCC 2017 Spring #ccc_c5 の『15:45-16:30 Javaエンジニアから見たKotlinの魅力』の資料です。
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
JustSystems Corporation
jjug ccc 2017の登壇資料です #ccc_i4 https://jjug-cfp.cfapps.pez.pivotal.io/submissions/1fe23fa4-dd22-4319-a505-25fe7cbbad88 www.java-users.jp/ccc2017spring/
Arachne Unweaved (JP)
Arachne Unweaved (JP)
Ikuru Kanuma
More Related Content
What's hot
Java SE 9を、新たに導入されたモジュール・システム(Jigsaw)を中心として紹介します。JJUG CCC 2017 Fallの発表資料です。 補足: p. 7 正しくは「JMX」→「JMS (Java Message Service)」。JMXはJava SE内の、モニタリング用の仕組みです。 p. 43 これに加えて、SPIの実装を提供するモジュールも、モジュールレイヤーに含まれます。具体的にはConfiguration.resolveAndBindの動きです。 p. 47「Oracle JDKでは、外部モジュールの非公開メンバへのリフレクションが可能」は、OpenJDKでも同じ動作です。「HotSpot系の」とすべきところでした。 このスライドはCC Attribution Licenseの元に、利用・改変・再配布をライセンスします。
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる(四則演算するだけだけど) #ccc_c5 このセッションでは、四則演算するだけの簡単なJVM言語の作り方を紹介します。 言語はCode -(Lexer)-> Tokens -(Parser)-> AST -(Compiler)-> JVM bytecodeと変換して、JVMで実行します。今回Lexer/Parserの部分にANTLRを、それ以降の部分にTruffleを使います。とくにANTLRやTruffleについての事前知識は必要ありません。BNFを定義してANTLRを使ってASTを構築し、それをTruffleのASTに変換して渡すという実装部分について、各ライブラリの概要やAPIを紹介しながら説明します。すべてを丁寧に説明する時間はありませんので、このセッションで出たキーワードを各自あとで調べて学びを深めていただくことになるでしょう。この点をご了承いただいて、ぜひお越しください! なお、このセッションはDevoxxUS 2017でのOleg Šelajev-sanのセッション"How to Create a New JVM Language"にインスパイアされたセッションです (https://speakerdeck.com/shelajev/how-to-create-a-new-jvm-language-devoxx-us-17)。 対象者:ANTLR/Truffleに興味がある人、オレオレJVM言語を作ってみたい人
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Koichi Sakata
第3回 LINQ勉強会のセッション資料です。
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
ShinichiAoyagi
2017/11/18 JJUG CCC 2017 Fallでの発表資料です。 #jjug_ccc #ccc_g5
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
JustSystems Corporation
JJUG CCC 2016 Springで発表した資料です. #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
bitter_fox
2012/09/26(Wed) JJUG Night Seminar at Oracle Japan, Tokyo
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
takezoe
すまべん関東 Rx資料
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
Yoshifumi Kawai
講演者:名雪 通(ユニティ・テクノロジーズ・ジャパン合同会社) :安原 祐二(ユニティ・テクノロジーズ・ジャパン合同会社) こんな人におすすめ ・C#プログラマー ・.NETで開発経験があり、これからUnityを使い始めるプログラマー ・「async/await完全に理解した」と言いたい人 受講者が得られる知見 ・async/awaitの知識
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Masatoshi Tada
Presentation slide of my session of Groovy at JJUG CCC 2015 Spring
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
福岡JavaOne2013報告会第2弾でのプレゼン ラムダ構文の文法よりも、その使い方とプログラミングスタイルについてを主にまとめました。
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
Java Day Tokyo 2016 のセッション3-Eの資料です。 Java8, Java9の新機能がシステムの設計にどういう影響があるのかを考えてみました。
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Yoshitaka Kawashima
JSON日の金曜日#1での発表です http://atnd.org/events/29927
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-Javaライブラリ
Yukiya Nakagawa
2016/9/3 なにわTECH道
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
なおき きしだ
JJUG CCC 2021 Fall の発表資料です。
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
Talked at CEDEC 2018, 2018/08/22 - https://2018.cedec.cesa.or.jp/session/detail/s5b559852a6405
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
It is easy to use JWT authentication token with Grails Spring Security REST plugin.
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
Uehara Junji
https://connpass.com/event/95696/ 2018/9/15 「Unity 非同期完全に理解した勉強会」にて登壇
async/await のしくみ
async/await のしくみ
信之 岩永
JJUG CCC 2015 FallのJava EEハンズオンの、当日映写するスライド資料です。PDFでダウンロードしていただくことができます。
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Masatoshi Tada
GlassFish Users Group Japan 勉強会 2017 Winterのセッション資料です #glassfish_jp
Java EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfile
Norito Agetsuma
What's hot
(20)
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-Javaライブラリ
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
async/await のしくみ
async/await のしくみ
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfile
Viewers also liked
JJUG CCC 2017 Spring #ccc_c5 の『15:45-16:30 Javaエンジニアから見たKotlinの魅力』の資料です。
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
JustSystems Corporation
jjug ccc 2017の登壇資料です #ccc_i4 https://jjug-cfp.cfapps.pez.pivotal.io/submissions/1fe23fa4-dd22-4319-a505-25fe7cbbad88 www.java-users.jp/ccc2017spring/
Arachne Unweaved (JP)
Arachne Unweaved (JP)
Ikuru Kanuma
JJUG CCC 2017 Springの資料です #ccc_a7
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
yy yank
DevoxxPL 2016
Java libraries you can't afford to miss
Java libraries you can't afford to miss
Andres Almiray
2017年5月20日 JJUG CCC 2017 springの登壇資料です。
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
Kosuke Kida
deeplearning4j
Jjug ccc
Jjug ccc
Tanaka Yuichi
2017/5/20 JJUG CCC Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Hiroyuki Ohnaka
2017/5/20 JJUG CCC 2017 Spring 発表資料 エンプラ開発におけるレガシーアプリケーションの巻き取りとモジュール分割の戦い
2017spring jjug ccc_f2
2017spring jjug ccc_f2
Kazuhiro Wada
JJUG CCC 2017 spring http://www.java-users.jp/ccc2017spring/ #ccc_f6 株式会社U-NEXTの学生インターンとして、1年間かけてJava8とDBFluteとLastaFluteで社内用Webアプリを作りました。 しかしプログラミング経験がなかったので、Java8を学ぶ際に大変苦労しました。 その時に得た独特な発想や教育論も含めて、1年間の経験や学びをお話し致します。
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
hajime funaki
Presentation slides delivered at JJUG CCC 2017 Spring (English)
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)
Logico
Java開発を助けてくれるSpotBugs(FindBugs)について、大規模ERP開発でどのように使い生産性を高めているか話します。 静的解析ツールはコード品質の底上げに役立ちますが、実行が遅かったり用途が直感的でなかったりと開発プロセスに組み込むうえでの難しさがあります。その難しさといかに向き合ってきたか、実例を交えて紹介します。 また社内フレームワーク・社内ライブラリの正しい使い方を広めるためのプラグインの実装方法についても紹介します。
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
Works Applications
JJUG CCC 2017 Spring 発表資料 http://www.java-users.jp/ccc2017spring/
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Yahoo!デベロッパーネットワーク
JJUG CCC Spring 2017での発表です。 http://www.java-users.jp/ccc2017spring/ ER図作成ツールである、ERFluteへのプルリクを通したOSS活動についてお話ししました。
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
Yoshio Kajikuri
JJUG2017発表資料
グラフデータベース入門
グラフデータベース入門
Masaya Dake
2017年5月20日(土)に行いました日本Javaユーザーグループの2016年度定期総会での資料です。
日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug
日本Javaユーザーグループ
2011年にリリースした弊社フリューのアプリケーションは、利用者が年々増加し、1000万人を超えました。それに伴い、機能を追加、改修しているため肥大化したモノリシックアプリケーションとなりました。また開発チームも複数あり、それぞれが機能を開発し、毎日のようにデプロイ、リリースしています。 こうした現状から、ドメインごとにアプリケーションを分割したいという欲求が生まれ、マイクロサービスアーキテクチャに変えていくことにしました。もちろん今もサービスを運用、新機能開発していく中でゆるやかに実施していくため、完成したわけではありません。このセッションでは、現実に運用しているアプリケーションに対して、マイクロサービス構築に何を使い、どのように一歩踏み出し、その結果チームは何を実現し何を得られたか、ということを話します。 JJUG CCCでは弊社フリューのアーキテクチャの変遷について、2016 Spring、2016 Fallとセッションをしてきました。Springでは"Seasar2で作った俺たちのサービスの今"、Fallでは"10年運用している画像サービスでのJavaの活用と今後の展望"と、Seasar2からSpring Framework/MVCに移行した話をしました。今回は、このアプリケーションから特定の機能を取り出してマイクロサービスとしてSpring Boot、Spring Cloud Netflix(ribbon/Eureka/Hystrix)で構築し、既存の手動テストをパスさせるためSpring Cloud Contract Stub Runnerを活用した点を中心に話します。また、私以外Spring自体をほぼ知らないチームで、どのように習得を進めたかという点にも触れます。 すでにこれらの技術をご存知の方にはこのセッションは適切でない可能性があります。また、ベストプラクティスでも、Spring Cloudのすべてのプロダクトを使っているわけでもありません。それでも、1つの現場の事例としてみなさんのご参考になれば幸いです。
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
Koichi Sakata
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito
Introduction of Project Jigsaw 20 May 2017 Japan Java User Group "Cross Community Conference" Material
Introduction of Project Jigsaw
Introduction of Project Jigsaw
Yuichi Sakuraba
インターネット広告市場の拡大に伴い、ヤフーの広告レポート作成数は年間約2倍のペースで増え続けています。 処理サーバを増やすことで大量のレポートを作成することはできますが、既存のRDBによるジョブ管理システムでは並列数を上げていくと、RDBが高負荷となり耐えきれなくなるという問題に直面します。 この問題を解決するためにSpring Cloud Streamを導入した経緯を他の課題の変遷も交えてお話します。
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
Yahoo!デベロッパーネットワーク
JJUG CCC 2017 Fallの発表資料です。
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
Masatoshi Tada
Viewers also liked
(20)
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
Arachne Unweaved (JP)
Arachne Unweaved (JP)
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
Java libraries you can't afford to miss
Java libraries you can't afford to miss
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
Jjug ccc
Jjug ccc
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
2017spring jjug ccc_f2
2017spring jjug ccc_f2
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
グラフデータベース入門
グラフデータベース入門
日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Introduction of Project Jigsaw
Introduction of Project Jigsaw
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
Similar to Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java Doでしょう #01(8/23 札幌) http://javado.connpass.com/event/18278/
60分で体験する Stream / Lambda ハンズオン
60分で体験する Stream / Lambda ハンズオン
Hiroto Yamakawa
オープンソースカンファレンス2015 Spring/Tokyoでの 講演資料です。
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
Satoshi Yamada
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作った
CHY72
2017年1月21日 第34回PostgreSQL勉強会の発表資料です。
Jpug study-pq 20170121
Jpug study-pq 20170121
Kosuke Kida
lispmeetup#63の発表スライドです
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Satoshi imai
2012年2月24日に開催されたPostgreSQLカンファレンス2012のセッション「PostgreSQLアーキテクチャ入門」の講演資料です。
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
Uptime Technologies LLC (JP)
Complex Event Processingの概要と CEPエンジン Setsunaの紹介
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
Takahiro Iwase
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える
chonaso
2009年11月14日のインフラエンジニア勉強会(hbstudy)で使用したスライドです。 hbstudy#5 http://tinyurl.com/hbstudy5 ・パフォーマンスと初期設定 ・データベースの監視 ・性能劣化とメンテナンス を含んでいます。
PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5
Uptime Technologies LLC (JP)
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
Computational Materials Science Initiative
CTB57
Ctb57 with god7
Ctb57 with god7
kingtomo
「ITエンジニアのための機械学習理論入門」で提供しているサンプルコードに含まれるデータ分析ライブラリ(NumPy/pandasなど)を解説した資料です。 下記の書籍のサンプルコードが理解できるようになることが目標です。 - ITエンジニアのための機械学習理論入門(技術評論社) - http://www.amazon.co.jp/dp/4774176982/ 2015/10/25 ver1.0 公開 2015/10/26 ver1.1 微修正 2016/05/25 ver1.4 subplotの順番を修正 2016/11/15 ver2.0 改訂版公開 2016/11/16 ver2.1 改行幅修正 2017/01/10 ver2.2 微修正 2017/01/12 ver2.3 微修正
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編
Etsuji Nakai
Rユーザのためのspark入門
Rユーザのためのspark入門
Shintaro Fukushima
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
mitamex4u
Elixir Flow / Scala Akka / C# / Goを使った大量CSVの比較。C#版は後日PRを頂き動作を確認。 2018/8/17 カバーデザイン差し替え
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
Yoshiiro Ueno
トピックス:繰り返し(ループ), for, ステップ実行, 拡張 for 文, リスト Java の基本(スライド資料とプログラム例)(全17回) https://www.kkaneko.jp/pro/pi/index.html 金子邦彦研究室ホームページ https://www.kkaneko.jp/index.html
pi-6. 繰り返し
pi-6. 繰り返し
kunihikokaneko1
Write good parser in perl
Write good parser in perl
Jiro Nishiguchi
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
Hisateru Tanaka
Introduction pp.js
Introduction pp.js
Mizushima Kazuhiro
ネットワークプログラマビリティ勉強会 #9 http://network-programmability.connpass.com/event/29449/
Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析
npsg
Similar to Java8 コーディングベストプラクティス and NetBeansのメモリログから...
(20)
60分で体験する Stream / Lambda ハンズオン
60分で体験する Stream / Lambda ハンズオン
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作った
Jpug study-pq 20170121
Jpug study-pq 20170121
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える
PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
Ctb57 with god7
Ctb57 with god7
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編
Rユーザのためのspark入門
Rユーザのためのspark入門
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
pi-6. 繰り返し
pi-6. 繰り返し
Write good parser in perl
Write good parser in perl
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
Introduction pp.js
Introduction pp.js
Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析
More from なおき きしだ
ORar
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
なおき きしだ
2018/12/12 Fukuoka LTでの登壇資料です
GraalVM at Fukuoka LT
GraalVM at Fukuoka LT
なおき きしだ
登壇資料です(資料には12/10になってるけど12/8です)
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
なおき きしだ
2018年11月17日のOracle Code One 2018報告会 in 東京での登壇資料です
GraalVMについて
GraalVMについて
なおき きしだ
2018/10/12 大阪での「北海道応援プロジェクト 小春の大LT大会」での発表資料です
VRカメラが楽しいのでブラウザで見たくなった話
VRカメラが楽しいのでブラウザで見たくなった話
なおき きしだ
Fukuoka Engineers Day 2018の資料です
最近のJava事情
最近のJava事情
なおき きしだ
怖いコードの話です
怖いコードの話 2018/7/18
怖いコードの話 2018/7/18
なおき きしだ
JJUGナイトセミナーの資料です
Java新機能観察日記 - JJUGナイトセミナー
Java新機能観察日記 - JJUGナイトセミナー
なおき きしだ
2018/7/14学生エンジニアLT大会の参加者向けに話した資料です
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
なおき きしだ
最近のコンピューティングの変化と、それがプログラミングにどのようにかかわってくるかをまとめました。
これからのコンピューティングの変化とこれからのプログラミング at 広島
これからのコンピューティングの変化とこれからのプログラミング at 広島
なおき きしだ
Summary of JDK10 and What will come into JDK11 so far
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
なおき きしだ
Newer version is here https://www.slideshare.net/nowokay/summary-of-jdk10-and-what-will-come-into-jdk11-99363835 Summary of JDK10 and What will come into JDK11 so far
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
なおき きしだ
Newer version about JDK10 and 11 is here https://www.slideshare.net/nowokay/summary-of-jdk10-and-what-will-come-into-jdk11-99363835 The material for the presentation of the JJUG CCC 2018 Spring
Java10 and Java11 at JJUG CCC 2018 Spr
Java10 and Java11 at JJUG CCC 2018 Spr
なおき きしだ
JDK10
New thing in JDK10 even that scala-er should know
New thing in JDK10 even that scala-er should know
なおき きしだ
Java Release Model on Scala Matsuri 2018
Java Release Model (on Scala Matsuri)
Java Release Model (on Scala Matsuri)
なおき きしだ
JavaOne 2017 報告会 in 福岡での資料です
これからのJava言語と実行環境
これからのJava言語と実行環境
なおき きしだ
JavaOne2017報告
JavaOne報告2017
JavaOne報告2017
なおき きしだ
「JavaOne 2017 報告会 in 大阪」での資料に、実際に話した内容をふまえて加筆修正したものです。
JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪
なおき きしだ
合同勉強会 福岡での資料です
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
なおき きしだ
JavaOne SF 2016報告です
JavaOne2016報告
JavaOne2016報告
なおき きしだ
More from なおき きしだ
(20)
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVM at Fukuoka LT
GraalVM at Fukuoka LT
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
GraalVMについて
GraalVMについて
VRカメラが楽しいのでブラウザで見たくなった話
VRカメラが楽しいのでブラウザで見たくなった話
最近のJava事情
最近のJava事情
怖いコードの話 2018/7/18
怖いコードの話 2018/7/18
Java新機能観察日記 - JJUGナイトセミナー
Java新機能観察日記 - JJUGナイトセミナー
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
これからのコンピューティングの変化とこれからのプログラミング at 広島
これからのコンピューティングの変化とこれからのプログラミング at 広島
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
Java10 and Java11 at JJUG CCC 2018 Spr
Java10 and Java11 at JJUG CCC 2018 Spr
New thing in JDK10 even that scala-er should know
New thing in JDK10 even that scala-er should know
Java Release Model (on Scala Matsuri)
Java Release Model (on Scala Matsuri)
これからのJava言語と実行環境
これからのJava言語と実行環境
JavaOne報告2017
JavaOne報告2017
JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
JavaOne2016報告
JavaOne2016報告
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
1.
NetBeansのメモリ使用ログから 機械学習で きしだが働いてるかどうか判定する 2017/5/20 LINE Fukuoka
きしだ なおき Java8 コーディング ベストプラクティス &
2.
自己紹介 ● きしだ なおき ● LINE FukuokaでJavaを書いてます
3.
今日のはなし ● Java8コーディングベストプラクティス ● NetBeansのメモリログから、機械学習で きしだが働いてるかどうか判定する
4.
ところで、なぜ2本立て? ● Call for Papersに2本出した –
Java8コーディング〜(30分) – NetBeansのメモリログから〜(50分)
5.
ところで、なぜ2本立て? ● 両方とおった – お、おう
6.
ところで、なぜ2本立て? ● やっぱり1枠で。50分で – でもJava8のほうが人気タカカッタヨ
7.
ところで、なぜ2本立て? ● あ、45分で – Java8中心にやろう – 先にNetBeansのメモリログから〜をやります
8.
NetBeansのメモリログから 機械学習で きしだが働いてるかどうか 判定する
9.
メモリログ ● ヒープの使用量 あそんでる あそんでるなんかしてる
10.
どう取るか ● JMXという仕組みがある ● InfluxDBにつっこむ ● Grafanaで見る
11.
構成 なんかプログラム JMX https://github.com/kishida/analyzenb/blob/master/src/main/java/kis/analyzenb/JmxInflux.java
12.
問題 ● Javaのメモリ使用グラフは、GCがあるので波形データに なる – 単純な閾値では判定できない ● 時系列データの判定は単純な機械学習では難しい
13.
周波数解析する ● 時間ごとの周波数解析を行う ● フーリエ変換 – データ全体の周波数解析を行う – 三角関数で畳み込む ● 窓関数付きフーリエ変換 –
時間ごとにデータを切り出して フーリエ変換を行う ● ウェーブレット変換 – 短く切り出した三角関数などを使って 畳み込む – 処理も簡単 http://d.hatena.ne.jp/nowokay/20161227 ※畳み込み zip(data1, data2) .map((a, b) -> a * b) .sum()
14.
離散ウェーブレット変換 ● 隣同士を引いて2で割る – 移動差分 – ハイパスフィルタになる(高い周波数だけ残す) –
ウェーブレット値 ● 隣同士を足して2で割る – 移動平均 – ローパスフィルタになる(低い周波数だけ残す) – より低い周波数の解析に使う
15.
ウェーブレット変換でできること ● 情報圧縮 – JPEG2000で使われている ● 電子すかし(ステガノグラフィ) – 人間にはわからないように情報を画像などに埋め込む 上位1/4の周波数成分だけ残してウェーブレット逆変換 http://d.hatena.ne.jp/nowokay/20161229
16.
ウェーブレット変換の適用 ● 512データ(8分30秒)をウェーブレット変換 する ● 512 = 2^9 –
9+1=10周波数のデータができる
17.
機械学習 ● ディープじゃないラーニング ● 3層のニューラルネットワーク ● 各時間ごとに10個のデータ ● 出力は1つ ● 10 -> 5
-> 1 https://github.com/kishida/analyzenb/blob/master/src/main/java/kis/analyzenb/BackPropergation.java
18.
教師データはどうする? ● 機械学習では、学習用に、入力値とその入力が どう判定されるべきかという教師データが必要
19.
Thread count ● NetBeansが使っているスレッド数 ● NetBeansを触ってないときはスレッド数が32 ● 教師データに使える
20.
機械学習とか不要では? ● ロマンです
21.
結果 ● なんとなく判定できている https://github.com/kishida/analyzenb/blob/master/src/main/java/kis/analyzenb/UsageData.java
22.
他の手法 ● ニューラルネットではなくSVMで識別する ● RNN(循環ニューラルネットワーク)を使う – 学習がうまくいけばウェーブレット変換と 同じ計算になりうる ● 近傍法など障害検知手法を使う – 多値分類はできない –
学習が不要
23.
まとめ ● 時系列データのウェーブレット変換からなんと なく状態を把握することができた ● 常に働いていれば判定など不要
24.
Java8コーディング ベストプラクティス
25.
話すこと ● Java8でのコーディングで気をつけることを まとめる ● APIの使い方自体はちゃんと把握しておく
26.
Agenda ● 一般的なこと ● Java 8 ● Java 7以前
27.
一般的なこと ● Immutability ● 論理式をうまく使う ● 大事なものはインデントを浅く ● オーバーロード
28.
Immutability ● 変数への再代入を避ける ● ImmutableList/Mapを使う
29.
変数への再代入を避ける String message =
"default"; if (hoge) { message = "ほげ"; } String message; if (hoge) { message = "ほげ"; } else { message = "default"; }
30.
変数への再代入を避ける String message; if (hoge)
{ message = "ほげ"; } else { message = "default"; } ● 再代入がないほうが最適化がかかりやすい ● 代入を忘れた場合にコンパイルエラーになる
31.
ImmutableList/Mapを使う ● Guavaのライブラリ ● Collectors::toListの代わりに ImmutableList::toImmutableList ● ofが便利 – Java 9が待てない人のために
32.
toImmutableList strs.stream() .map(String::toUpperCase) .collect(ImmutableList.toImmutableList()); ● 値が変更されないことを明示する ● 並列実行で不具合が起きない
33.
ofが便利 ● 固定値のListやMapを作る場合 ● Java 9ではList.of/Map.ofが入る Map<String, String>
countries = ImmutableMap.of( "JP", "日本", "US", "アメリカ");
34.
論理式をうまく使う ● ド・モルガンの法則を活用する ● 片方が定数リテラルを返す条件演算子は 論理演算にできる ● ifでbooleanを反転させない
35.
ド・モルガンの法則を使う if (!(str !=
null && !str.isEmpty())) { ... } if (str == null || str.isEmpty()) { ... }
36.
リテラルを返す式を論理演算に ● 片方がbooleanリテラルの条件式は論理演算に boolean f
= str == null ? true : str.isEmpty(); boolean f = str == null || str.isEmpty();
37.
大事なものはインデントを浅く ● 早期リターン if (hoge) { Foo
foo = bar.getSomething(); return foo.getImportantValue(); } return null; if (!hoge) { return null; } Foo foo = bar.getSomething(); return foo.getImportantValue();
38.
ifでbooleanを反転させない ● booleanリテラルを返すとき、条件が なりたったときにはtrue、elseでは falseを返すようにする。 if (hoge) { someProc(); return
false; } else { anotherProc(); return true; } if (!hoge) { anotherProc(); return true; } else { someProc(); return false; }
39.
オーバーロード ● 引数省略のために使う ● 処理を集約させる ● 引数が多いものを前に void foo(int count,
String message) { IntStream.range(0, count) .mapToObj(i -> i + ":" + message) .forEach(System.out::println); } void foo(String message) { foo(1, message); } void foo() { foo(null); }
40.
処理が違うならメソッド名を変える List<Product> find(Author a); List<Product>
find(Category c); List<Product> findByAuthor(Author a); List<Product> findByCategory(Category c);
41.
Java 8 ● Stream ● Optional ● FunctionalInterface ● ラムダ ● Date and
Time
42.
Stream ● forEachのifをfilterにできる ● forEachでの値変換はmapにできる ● forEachの入れ子はflatMapにできる ● count() > 0は使わない
43.
forEachのifをfilterにできる strs.forEach(s -> { if
(s.length() >= 5) { return; } String upper = s.toUpperCase(); Stream.of(upper.split(",")) .forEach(Syastem.out::println); }); strs.stream() .filter(s -> s.length() < 5) .forEach(s -> { String upper = s.toUpperCase(); Stream.of(upper.split(",")) .forEach(System.out::println); });
44.
forEachでの値変換はmapにできる strs.stream() .filter(s -> s.length()
< 5) .forEach(s -> { String upper = s.toUpperCase(); Stream.of(upper.split(",")) .forEach(System.out::println); }); strs.stream() .filter(s -> s.length() < 5) .map(s -> s.toUpperCase()) .forEach(upper -> { Stream.of(upper.split(",")) .forEach(System.out::println); });
45.
forEachの入れ子はflatMapにできる strs.stream() .filter(s -> s.length()
< 5) .map(s -> s.toUpperCase()) .forEach(upper -> { Stream.of(upper.split(",")) .forEach(System.out::println); }); strs.stream() .filter(s -> s.length() < 5) .map(s -> s.toUpperCase()) .flatMap(upper -> Stream.of(upper.split(","))) .forEach(System.out::println);
46.
同じオブジェクトには同じ変数 strs.stream() .filter(s -> s.length()
< 5) .map(s -> s.toUpperCase()) .flatMap(upper -> Stream.of(upper.split(","))) .forEach(System.out::println); strs.stream() .filter(a -> a.length() < 5) .map(b -> b.toUpperCase()) .flatMap(upper -> Stream.of(upper.split(","))) .forEach(System.out::println);
47.
Streamで書くメリット ● 行われる操作が限定される ● 変数の行く先を追わなくてよい ● 結果、読みやすくなる strs.stream() .filter(s -> s.length()
< 5) .map(s -> s.toUpperCase()) .flatMap(upper -> Stream.of(upper.split(","))) .forEach(System.out::println);
48.
count() > 0は使わない strs.stream().filter(s
-> s.length() > 5).count() > 0 strs.stream().anyMatch(s -> s.length() > 5)
49.
例外処理はあきらめる ● 例外と関数型プログラミングは相性が悪い ● あきらめてtry〜catchを書く ● streamをあきらめてfor文を使う
50.
Optional ● ifPresentのifをfilterにできる ● ifPresentでの値変換はmapにできる ● ifPresentの入れ子はflatMapにできる ● 引数には使わない ● orElseThrowにException::newを書かない
51.
ifPresentのifをfilterに strOpt.ifPresent(s -> { if
(s.length() >= 5) { return; } String upper = s.toUpperCase(); findSome(upper) // return Optional .ifPresent(Syastem.out::println); }); strOpt.filter(s -> s.length() >= 5) .ifPresent(s -> { String upper = s.toUpperCase(); findSome(upper) // return Optional .ifPresent(System.out::println); });
52.
ifPresentでの値変換をmapに strOpt.filter(s -> s.length()
>= 5) .ifPresent(s -> { String upper = s.toUpperCase(); findSome(upper) // return Optional .ifPresent(System.out::println); }); strOpt.filter(s -> s.length() >= 5) .map(s -> s.toUpperCase()) .ifPresent(upper -> { findSome(upper) // return Optional .ifPresent(System.out::println); });
53.
ifPresentの入れ子をflatMapに strOpt.filter(s -> s.length()
>= 5) .map(s -> s.toUpperCase()) .ifPresent(upper -> { findSome(upper) // return Optional .ifPresent(System.out::println); }); strOpt.filter(s -> s.length() >= 5) .map(s -> s.toUpperCase()) .flatMap(upper -> findSome(upper)) .ifPresent(System.out::println);
54.
どこかで見た。 ● Optional.ifPresentはStream.forEachと同じ – Optionalを要素1つまでのStreamと考える
55.
引数にOptionalを使わない ● メソッド定義者がnullに対応する ● フレームワークの入り口は除く
56.
OrElseThrowにException::newを 渡さない ● なにかのキーから値を取得しようと思って失敗 している。 ● 例外の原因を究明するためにはキーの値が必要 ● 例外メッセージにキーの値を含める必要がある
57.
FunctionalInterface ● 実装したクラスを作らない ● ラムダを割り当てた変数を作らない String twice(String s)
{ return s + s; } strs.stream() .map(Util::twice) .forEach(System.out::println); Function<String, String> twice = s -> s + s; strs.stream() .map(twice) .forEach(System.out::println);
58.
ラムダ ● むやみにAtomicInteger/Longを使わない AtomicInteger count =
new AtomicInteger(0); strs.stream() .filter(s -> s.length() < 5) .forEach(s -> count.incrementAndGet()); int[] count = {0}; strs.stream() .filter(s -> s.length() < 5) .forEach(s -> ++count[0]);
59.
Date and Time ● 自分で時間を計算しない long
TIME_OUT_MILLIS = 3 * 60 * 60 * 1000; long TIME_OUT_MILLIS = Duration.ofHours(3).toMillis();
60.
Java7以前 ● LinkedListは使わない ● IOExeptionをRuntimeExceptionでラップ しない
61.
LinkedListは使わない ● ほとんどの場合、ArrayListのほうが速い ● LinkedList.remove/insertの実装がひどい – 値をたどってから操作を行う – 途中への値挿入・削除が効率いいという連結リスト のメリットを持っていない
62.
IOExceptionを RuntimeExceptionでラップしない ● UncheckedIOExceptionを使う try { readFile(); } catch
(IOException ex) { throw new RuntimeException(); } try { readFile(); } catch (IOException ex) { throw new UncheckedIOException(); }
63.
まとめ ● 細かいことを積み重ねるとケアレスミスが減っ ていきます。 ● 1ヶ月くらいで慣れて自然にバグが減ります(個 人の感想です)
Download now