{"id":25848,"date":"2017-07-07T10:01:10","date_gmt":"2017-07-07T10:01:10","guid":{"rendered":"https:\/\/blog.jetbrains.com\/idea\/?p=15528"},"modified":"2017-07-07T10:01:10","modified_gmt":"2017-07-07T10:01:10","slug":"java-annotated-monthly-july-2017","status":"publish","type":"idea","link":"https:\/\/blog.jetbrains.com\/ja\/idea\/2017\/07\/java-annotated-monthly-july-2017","title":{"rendered":"Java Annotated Monthly \u2013 July 2017"},"content":{"rendered":"<p style=\"text-align: justify;\">The start of\u00a0June brought the disappointing news that we&#8217;d have to wait longer for Java 9, so July and August news won&#8217;t be all about the big release. \u00a0However, there&#8217;s still plenty of Java 9 news, the usual handful of interesting Design and Architecture links, and this month a massive amount of Android and Kotlin news as\u00a0we try to catch up with\u00a0everything from Google I\/O.<\/p>\n<p style=\"text-align: justify;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-14180\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2016\/04\/idea-JavaAnnotatedMonthly@2x.png\" alt=\"JavaAnnotatedMonthly@2x\" width=\"800\" height=\"415\" \/><\/p>\n<p><!--more--><\/p>\n<h2>Java 9<\/h2>\n<p>We may be disappointed that Java 9 <a href=\"https:\/\/www.theregister.co.uk\/2017\/06\/01\/oracle_asks_for_more_time_to_finish_java_9\/\" target=\"_blank\" rel=\"noopener\">won&#8217;t be out this month<\/a>, but we know that it takes time to create something that&#8217;s good for everyone. \u00a0At least the <a href=\"https:\/\/www.jcp.org\/en\/jsr\/results?id=6016\" target=\"_blank\" rel=\"noopener\">JCP EC has voted in favour of the updated Jigsaw spec<\/a>, so it&#8217;s full steam ahead to the new September release date.<\/p>\n<ul>\n<li><a href=\"http:\/\/www.infoworld.com\/article\/3198989\/java\/the-road-to-java-9-the-current-status.html\" target=\"_blank\" rel=\"noopener\">The road to Java 9: The current status<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/06\/oracle-defends-jpms\" target=\"_blank\" rel=\"noopener\">Oracle Defends the Java Module System<\/a><\/li>\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2017\/06\/jhsdb-new-tool-jdk-9.html\" target=\"_blank\" rel=\"noopener\">jhsdb: A New Tool for JDK 9<\/a><\/li>\n<li><a href=\"http:\/\/www.javaspecialists.eu\/archive\/Issue248.html\" target=\"_blank\" rel=\"noopener\">Immutable Collections in Java 9<\/a><\/li>\n<li><a href=\"https:\/\/www.oreilly.com\/ideas\/ben-evans-on-java-9\" target=\"_blank\" rel=\"noopener\">Ben Evans on Java 9<\/a>\u00a0(podcast, discussing the upcoming release of Java 9, Jigsaw&#8217;s impact, and Java performance issues)<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/java9-flow-stream-api\" target=\"_blank\" rel=\"noopener\">Real World Java 9, QCon London<\/a>\u00a0(video, focus on Reactive Streams) &amp; <a href=\"https:\/\/www.youtube.com\/watch?v=watS54iWH9U\" target=\"_blank\" rel=\"noopener\">Real World Java 9, GOTO Amsterdam<\/a>\u00a0(video, more info on\u00a0Jigsaw &amp; other Java 9 features) &#8211; JetBrains&#8217; <a href=\"https:\/\/blog.jetbrains.com\/idea\/author\/trishagee\/\">Trisha Gee<\/a> shows Java 9 features and how to use them in IntelliJ IDEA.<\/li>\n<\/ul>\n<h2>Java In General<\/h2>\n<ul>\n<li><a href=\"https:\/\/dzone.com\/guides\/java-development-and-evolution\" target=\"_blank\" rel=\"noopener\">Java: Development and Evolution<\/a>\u00a0(DZone&#8217;s latest guide, featuring a short article on Java 8 features from\u00a0me, <a href=\"https:\/\/blog.jetbrains.com\/idea\/author\/trishagee\/\">Trisha<\/a>)<\/li>\n<li><a href=\"https:\/\/www.marcobehler.com\/series\/1-spring-boot-from-zero-to-rest\" target=\"_blank\" rel=\"noopener\">Spring Boot: From Zero to REST<\/a> (video series)<\/li>\n<li><a href=\"https:\/\/shipilev.net\/jvm-anatomy-park\/\" target=\"_blank\" rel=\"noopener\">JVM Anatomy Park<\/a> (blog series exploring the JVM under the covers)<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/tecniques-parallelism-java\" target=\"_blank\" rel=\"noopener\">From Concurrent to Parallel<\/a> (video:\u00a0excellent presentation from Brian Goetz\u00a0going into details about programming for performance in Java)<\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/concurrency-in-action-using-javas-completable-futu\" target=\"_blank\" rel=\"noopener\">Concurrency in Action: Using Java&#8217;s CompletableFuture With Work Manager<\/a><\/li>\n<li><a href=\"https:\/\/programmingmitra.blogspot.com.es\/2017\/02\/automatic-spring-data-jpa-auditing-saving-CreatedBy-createddate-lastmodifiedby-lastmodifieddate-automatically.html?1\" target=\"_blank\" rel=\"noopener\">Spring Data JPA Auditing<\/a><\/li>\n<li><a href=\"http:\/\/www.pavel.cool\/javaee\/cdi-events\/?1\" target=\"_blank\" rel=\"noopener\">CDI Events overview<\/a><\/li>\n<li><a href=\"http:\/\/redmonk.com\/sogrady\/2017\/06\/08\/language-rankings-6-17\" target=\"_blank\" rel=\"noopener\">The RedMonk Programming Language Rankings: June 2017<\/a> (Java is doing rather well in second place).<\/li>\n<li><a href=\"http:\/\/www.oracle.com\/technetwork\/articles\/java\/architect-benchmarking-2266277.html\" target=\"_blank\" rel=\"noopener\">Avoiding Benchmarking Pitfalls on the JVM<\/a>\u00a0(not a new article, but\u00a0the next section has a link to microbenchmarks, so\u00a0this seems relevant)<\/li>\n<\/ul>\n<h2>Android (&amp; Kotlin)<\/h2>\n<p>This Android section always ends up being a bit Kotlin-heavy. \u00a0It might surprise you to learn this isn&#8217;t a JetBrains bias, but represents the Android news feeds that go into creating this newsletter. It always leaves me with a bit of a quandary about whether Kotlin links belong in\u00a0an Android, Kotlin,\u00a0or JVM section, or if it even belongs in a &#8220;Java&#8221; newsletter at all,\u00a0so expect (as usual) to find the Kotlin news boiled down to a minimum and spread around a bit.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.raywenderlich.com\/161318\/beginning-android-development-part-one-installing-android-studio\" target=\"_blank\" rel=\"noopener\">Beginning Android Development Part One: Installing Android Studio<\/a> (very comprehensive guide)<\/li>\n<li>Functional Programming for Android Developers &#8211; <a href=\"https:\/\/medium.freecodecamp.org\/functional-programming-for-android-developers-part-1-a58d40d6e742\" target=\"_blank\" rel=\"noopener\">Part 1<\/a>, <a href=\"https:\/\/medium.freecodecamp.org\/functional-programming-for-android-developers-part-2-5c0834669d1a\" target=\"_blank\" rel=\"noopener\">Part 2<\/a> and <a href=\"https:\/\/medium.com\/@anupcowkur\/functional-programming-for-android-developers-part-3-f9e521e96788\" target=\"_blank\" rel=\"noopener\">Part 3<\/a>.<\/li>\n<li>Exploring Kotlin\u2019s hidden costs\u200a\u2014\u200a<a href=\"https:\/\/medium.com\/@BladeCoder\/exploring-kotlins-hidden-costs-part-1-fbb9935d9b62\" target=\"_blank\" rel=\"noopener\">Part 1<\/a>, <a href=\"https:\/\/medium.com\/@BladeCoder\/exploring-kotlins-hidden-costs-part-2-324a4a50b70\" target=\"_blank\" rel=\"noopener\">Part 2<\/a> and <a href=\"https:\/\/medium.com\/@BladeCoder\/exploring-kotlins-hidden-costs-part-3-3bf6e0dbf0a4\" target=\"_blank\" rel=\"noopener\">Part 3<\/a>\u00a0(written from the point of view of an Android developer, but not really Android-specific).<\/li>\n<li><a href=\"https:\/\/sites.google.com\/a\/athaydes.com\/renato-athaydes\/posts\/kotlinshiddencosts-benchmarks\" target=\"_blank\" rel=\"noopener\">Kotlin&#8217;s hidden costs &#8211; Benchmarks<\/a>\u00a0(a set of <a href=\"http:\/\/openjdk.java.net\/projects\/code-tools\/jmh\/\" target=\"_blank\" rel=\"noopener\">JMH<\/a> benchmarks to look at the impact of the hidden costs &#8211; some surprising results, but <a href=\"http:\/\/daniel.mitterdorfer.name\/articles\/2014\/benchmarking-flaws\/\" target=\"_blank\" rel=\"noopener\">always be wary of microbenchmarks<\/a>).<\/li>\n<li><a href=\"https:\/\/android.jlelse.eu\/a-first-walk-into-kotlin-coroutines-on-android-fe4a6e25f46a\" target=\"_blank\" rel=\"noopener\">A first walk into Kotlin coroutines on Android<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/google-developers\/lessons-learned-while-converting-to-kotlin-with-android-studio-f0a3cb41669\" target=\"_blank\" rel=\"noopener\">Lessons learned while converting to Kotlin with Android Studio<\/a><\/li>\n<li><a href=\"https:\/\/m.signalvnoise.com\/kotlin-its-the-little-things-8c0f501bc6ea\" target=\"_blank\" rel=\"noopener\">Kotlin: It\u2019s the little things<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/@andrew.kelly\/rxjava-the-first-3-patterns-4c112a85b689\" target=\"_blank\" rel=\"noopener\">RxJava\u200a\u2014\u200aThe first 3 patterns<\/a><\/li>\n<li><a href=\"http:\/\/hannesdorfmann.com\/android\/arch-components-purist\" target=\"_blank\" rel=\"noopener\">Architecture Components\u00a0&#8211;\u00a0I&#8217;m Not a Purist But&#8230;<\/a><\/li>\n<li><a href=\"https:\/\/tengio.com\/blog\/android-things-for-beginners\/\" target=\"_blank\" rel=\"noopener\">Android Things for beginners<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/@bherbst\/understanding-the-gradle-wrapper-a62f35662ab7\" target=\"_blank\" rel=\"noopener\">Understanding the Gradle Wrapper<\/a>\u00a0(not just applicable to Android developers)<\/li>\n<li>(Gradle) <a href=\"https:\/\/jeroenmols.com\/blog\/2017\/06\/14\/androidstudio3\/\" target=\"_blank\" rel=\"noopener\">Implementation vs API dependency<\/a><\/li>\n<li><a href=\"https:\/\/android.jlelse.eu\/how-to-speed-up-your-slow-gradle-builds-5d9a9545f91a\" target=\"_blank\" rel=\"noopener\">How to speed up your slow Gradle builds<\/a> (Android-specific)<\/li>\n<li><a href=\"https:\/\/medium.com\/@arturogdg\/using-gradle-script-kotlin-for-android-d6cd58c80d60\" target=\"_blank\" rel=\"noopener\">Using Gradle Script Kotlin for Android<\/a><\/li>\n<li><a href=\"https:\/\/commonsware.com\/blog\/2017\/06\/08\/random-musings-o-developer-preview-3.html\" target=\"_blank\" rel=\"noopener\">Random Musings on the O Developer Preview 3<\/a><\/li>\n<li><a href=\"https:\/\/blog.stylingandroid.com\/downloadable-fonts\" target=\"_blank\" rel=\"noopener\">Downloadable Fonts<\/a><\/li>\n<\/ul>\n<h2>Other JVM News &amp; Links<\/h2>\n<p>There&#8217;s still some fallout from the Google I\/O Kotlin announcement which I wanted to share, but to vaguely attempt to reduce the JetBrains-language-bias, I&#8217;ve specifically looked for and shared other interesting non-Java news.<\/p>\n<ul>\n<li><a href=\"https:\/\/redmonk.com\/sogrady\/2017\/05\/24\/kotlin\/\" target=\"_blank\" rel=\"noopener\">Five Things That Make Kotlin Interesting<\/a><\/li>\n<li><a href=\"https:\/\/www.bignerdranch.com\/blog\/what-first-party-kotlin-support-means-for-your-business\/\" target=\"_blank\" rel=\"noopener\">What First-Party Kotlin Support Means for Your Business<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/@enriquelopezmanas\/on-strategies-to-apply-kotlin-to-existing-java-code-6317974717ec?imm_mid=0f4065&amp;cmp=em-prog-na-na-newsltr_20170701\" target=\"_blank\" rel=\"noopener\">On Strategies to apply Kotlin to existing Java code<\/a><\/li>\n<li><a href=\"https:\/\/blog.playframework.com\/play-2-6-0-released\/\" target=\"_blank\" rel=\"noopener\">Play 2.6.0 released<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/gradle\/gradle\/releases\/tag\/v4.1.0-milestone-1\" target=\"_blank\" rel=\"noopener\">Gradle 4.1 milestone 1 is available<\/a> (includes runtime compatibility with Java 9, and I can&#8217;t wait to try it out).<\/li>\n<li><a href=\"http:\/\/guides.grails.org\/grails-codenarc\/guide\/index.html\" target=\"_blank\" rel=\"noopener\">Static code analysis in a Grails app with CodeNarc<\/a>\u00a0(I highly recommend using CodeNarc with your Groovy code, particularly if you&#8217;re new to Groovy).<\/li>\n<li><a href=\"http:\/\/mrhaki.blogspot.com.es\/2013\/08\/spocklight-using-old-method.html\" target=\"_blank\" rel=\"noopener\">Spocklight: Using the Old Method<\/a>\u00a0(old() is an awesome feature of Spock I wasn&#8217;t aware of, here&#8217;s <a href=\"http:\/\/blog.freeside.co\/2012\/02\/15\/spock-killer-features-the-old-method\" target=\"_blank\" rel=\"noopener\">how it works under the hood<\/a>).<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/panel-languages-future\" target=\"_blank\" rel=\"noopener\">Panel: What&#8217;s Next for Our Programming Languages?<\/a> (video, very well received panel at QCon London earlier this year).<\/li>\n<\/ul>\n<h2>Design and Architecture<\/h2>\n<ul>\n<li><a href=\"http:\/\/blog.cleancoder.com\/uncle-bob\/2017\/03\/03\/TDD-Harms-Architecture.html\" target=\"_blank\" rel=\"noopener\">TDD Harms Architecture<\/a>\u00a0(by Bob Martin. Spoiler: the clickbait title is not necessarily the conclusion of the article).<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/articles\/scs-microservices-done-right\" target=\"_blank\" rel=\"noopener\">Self Contained Systems (SCS): Microservices Done Right<\/a><\/li>\n<li><a href=\"https:\/\/genehughson.wordpress.com\/2017\/03\/31\/microservices-monoliths-and-modularity\/\" target=\"_blank\" rel=\"noopener\">Microservices, Monoliths, and Modularity<\/a><\/li>\n<li><a href=\"https:\/\/www.oreilly.com\/ideas\/the-evolution-of-scalable-microservices\" target=\"_blank\" rel=\"noopener\">The Evolution of Scalable Microservices<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/latency-sensitive-microservices\" target=\"_blank\" rel=\"noopener\">Latency Sensitive Microservices<\/a> (video)<\/li>\n<li><a href=\"https:\/\/developers.redhat.com\/blog\/2017\/03\/16\/naming-matters\/\" target=\"_blank\" rel=\"noopener\">Naming Matters<\/a><\/li>\n<li><a href=\"http:\/\/tidyjava.com\/strange-relationship-duplication-coupling\/\" target=\"_blank\" rel=\"noopener\">The Strange Relationship between Duplication and Coupling<\/a><\/li>\n<li><a href=\"http:\/\/blog.jessitron.com\/2017\/06\/the-most-productive-circumstances-for.html\" target=\"_blank\" rel=\"noopener\">Hyperproductive development<\/a> (or: one\u00a0explanation for the so-called 10x developer, and how to work in\u00a0an environment that has one).<\/li>\n<li><a href=\"https:\/\/spin.atomicobject.com\/2017\/06\/01\/how-to-read-code\/?imm_mid=0f25b0&amp;cmp=em-prog-na-na-newsltr_20170603\" target=\"_blank\" rel=\"noopener\">How to Read Code (Eight Things to Remember)<\/a> (great advice)<\/li>\n<li><a href=\"https:\/\/dev.to\/lovis\/gang-of-four-patterns-in-kotlin\" target=\"_blank\" rel=\"noopener\">Gang of Four Patterns in Kotlin<\/a><\/li>\n<\/ul>\n<h2>Events<\/h2>\n<p>It&#8217;s summertime! We&#8217;re not going to be at any more conferences in July and August. \u00a0Keep an eye out for the September conference rush.<\/p>\n<h2>And Finally<\/h2>\n<ul>\n<li>The <a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/06\/intellij-idea-2017-2-public-preview\/\">2017.2 Public Preview is available<\/a>.<\/li>\n<li>Check out our\u00a0new <a href=\"https:\/\/youtu.be\/JwPYjnhah3g\" target=\"_blank\" rel=\"noopener\">Working with Gradle in IntelliJ IDEA<\/a>\u00a0video.<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2017\/06\/kotlinnative-v0-3-is-out\/\">Kotlin native 0.3 is out<\/a>.<\/li>\n<li>Our friends at RebelLabs are running their annual <a href=\"https:\/\/rebellabs.typeform.com\/to\/IrpKbp\" target=\"_blank\" rel=\"noopener\">Java Tools and Technologies Survey<\/a>, feel free to take part (not that I&#8217;m\u00a0suggesting we overwhelm it with IntelliJ IDEA users&#8230;)<\/li>\n<\/ul>\n<p align=\"center\"><a class=\"jb-download-button\" title=\"Complete this form and get Java Annotated Monthly delivered fresh to your email\" href=\"http:\/\/info.jetbrains.com\/Java-Annotated-Subscription.html\" target=\"_blank\" rel=\"noopener\"><i class=\"download-icon\"><\/i>Subscribe to Java Annotated<\/a><\/p>\n","protected":false},"author":360,"featured_media":0,"comment_status":"open","ping_status":"open","template":"","categories":[89],"tags":[3140,3236],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/idea\/25848"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/idea"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/types\/idea"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/users\/360"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/comments?post=25848"}],"version-history":[{"count":0,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/idea\/25848\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/media?parent=25848"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/categories?post=25848"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/tags?post=25848"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/cross-post-tag?post=25848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}