Welcome to nipafx.dev. On here, it's:

You. Me. Java.

Nice of you to stop by. I'm nipafx, but you can call me Nicolai 😉, a Java enthusiast with a passion for learning and sharing, online and offline. If you want to sharpen your Java skills, you've come to the right place.

Image with slug inside-java-newscast-69
Module Imports in Java 23 - Inside Java Newscast #69#video#java‑23 #j_ms
To reduce the overhead of using APIs, particularly in single source files, Java 23 previews module import declarations of the form import module $moduleName, which import all packages exported by the named module
Image with slug inside-java-newscast-67
Java Withers - Inside Java Newscast #67#video#records
JEP 468 proposes a solution to the verbosity that can come from modeling mutable state with immutable records: derived record creation aka with expressions aka withers.
Image with slug inside-java-newscast-66
Java 23: Restoring the Balance with Primitive Patterns - Inside Java Newscast #66#video#java‑23 #pattern‑matching
The ongoing introduction of pattern matching to Java has unbalanced the language. Here's how primitive patterns (in Java 23) and other patterns (in future versions) will fix that.
Image with slug inside-java-newscast-64
(Dirty?) Tricks in Java 22 - Inside Java Newscast #64#video#pattern‑matching #optional #clean‑code
Pattern matching Optional, expanding sealed type hierarchies, nesting switches, reverting instanceof, and more - so many (dirty) tricks to play around with in modern Java
Image with slug inside-java-newscast-63
Does Java 22 Kill Build Tools? - Inside Java Newscast #63#video#java‑22 #on‑ramp
Java 22 brings multi source-file execution to the platform. It allows us to run programs consisting of multiple source files and even dependencies with just a simple java command. For experienced developers, this will make exploration and experimentation simpler but it's a real game changer for people just learning Java or even just to program: They can now write Java code from single to multiple source files and even add dependencies before they need to consider an IDE or build tool.
Image with slug talk-hot-lang
The Hottest Language You Didn't Have On Your Radar#talk#pattern‑matching #performance #records #virtual‑threads
With so much going on in the programming language space, it's easy to miss any specific language's success story and so in this talk I want to put a particularly hot one on your radar
Image with slug inside-java-newscast-62
Java 22 Previews Statements Before super(...) and this(...) - Inside Java Newscast #62#video#java‑22 #project‑amber
Whether for validation, preparation, or splitting and sharing arguments, it can be quite annoying that Java doesn't allow statements before the super(...) or this(...) call in a constructor. Luckily Java 22 is about to change that with JEP 447, which previews statements before the explicit constructor invocation.
Image with slug inside-java-newscast-61
Java's Plans for 2024 - Inside Java Newscast #61#video#project‑amber #project‑babylon #project‑leyden #project‑lilliput #project‑loom #project‑panama #project‑valhalla
In 2024, Java keeps evolving. Here's what the big OpenJDK projects (Amber, Leyden, Valhalla, and more) plan for this year and how that will push Java forward.
Image with slug inside-java-newscast-60
Java Highlights of 2023 - Inside Java Newscast #60#video#turn‑of‑the-year #on‑ramp #java‑8 #community #meta
2023 is coming to a close and it was quite a year for Java! Let's look back at some of the highlights: on-ramp improvements, why Java 8 is dying, JVMLS, community achievements, and how cool our YouTube channel is. 😊
Image with slug jspecify-valhalla
How Project Valhalla And JSpecify Can Kill NPEs#video#project‑valhalla #libraries #conversation
Project Valhalla's value types need to be aware of which instance can be null and which can't, so the JVM can inline them. So will Java get a null-aware type system after all? Not quite, but it may get close and JSpecify can help with some of those steps.
Image with slug jspecify-presentation
Java, null, and JSpecify#video#libraries
Kevin Bourrillion gives an introductory presentation on JSpecify, a project spearheading a set of standard annotations for Java static analysis, specifically for tracking null
Image with slug inside-java-newscast-59
Java 22 Unpacking - Inside Java Newscast #59#video#java‑22
JDK 22 will be released on March 19th 2024 but it's forked today (Dec 7th 2023) and so its feature set is final. Unnamed patterns and variables, the FFM API, and multi-source-file programs are the highlights but there is so much more. Let's unpack!
Image with slug talk-java-x
Java 22 - Better Language, Better APIs, Better Runtime#talk#java‑22
Java 21 was an explosive release, but 22 is no slouch either: Unnamed patterns, stream gatherers, multi-source-file launcher plus many new and improved features in preview
Image with slug inside-java-newscast-58
Java On The GPU - Inside Java Newscast #58#video#project‑babylon
Babylon is OpenJDK's newest big project, aimed at easing execution of Java code on the GPU, which will unlock machine learning and artificial intelligence on the JVM. Here's all about its background, prototypes, and plans.
Image with slug implementing-gatherers
Implementing New Java Stream Operations#video#streams
Implementing a bunch of Gatherers to better understand the proposed addition to the stream API
Image with slug inside-java-newscast-57
Better Java Streams with Gatherers - Inside Java Newscast #57#video#streams
Stream::gather is a new intermediate meta-operation that allows the JDK and us to implement all kinds of intermediate operations as Gatherers without overloading the Stream interface
Image with slug java-ama-devoxx-be
Java Architects Answer Your Java Questions#video#community #project‑amber #project‑loom #project‑valhalla #project‑leyden
Try/catch expressions? Valhalla timeline? Synchronizing virtual threads? And many more. Here's how Brian Goetz, Alan Bateman, Stuart Marks, and Kevin Rushforth answered your questions.
Image with slug inside-java-newscast-56
New Class-File API Will Make Java Updates Easier - Inside Java Newscast #56#video#java‑next #migration
How the new class-file API that Brian Goetz presented at JVMLS will greatly improve the situation around Java updates
Image with slug java-21-pattern-matching
Java 21 Pattern Matching Tutorial#video#java‑21 #pattern‑matching #java‑basics
Java 21 is the first Java release with all essential pattern matching features finalized: sealed types, type patterns, an improved switch, records, and record patterns. This tutorial puts them all together.
Image with slug talk-java-action
Modern Java in Action#talk#java‑21 #virtual‑threads #pattern‑matching #records
Let's write a GitHub Crawler and let's throw in everything Java (22) has to offer
Image with slug road-to-21-upgrade
Upgrading From Java 17 To 21: All You Need To Know#video#java‑21 #migration
Java 21 is chock-full of great features but that's for naught of you can't actually upgrade, so I've collected all potential upgrade hurdles and we'll go over every issue that you may encounter on the road from Java 17 to 21
Image with slug inside-java-newscast-52
Java 21 is no LTS Version - Inside Java Newscast #52#video#java‑21
Let's separate Java from JDK, OpenJDK from its vendors, and maintenance from support, so we better understand how the ecosystem functions and what long-term support really means.
Image with slug inside-java-newscast-51
Java 21 - The Other Side - Inside Java Newscast #51#video#java‑21
OMG, how is there even more in JDK 21?! Scoped values preview, key encapsulation mechanism API, a new JFR command, and various API improvements. Generational Shenandoah is out, though, and it doesn't look good for the 32-bit Windows port either.
Image with slug inside-java-newscast-50
All That is in Java 21?! 😱 - Inside Java Newscast #50#video#java‑21
JDK 21 is almost too good to be true: It finalizes virtual threads, sequenced collections, generational ZGC, and the pattern matching basics; and evolves and introduces over half a dozen other features.
Image with slug inside-java-newscast-49
Script Java Easily in 21 and Beyond - Inside Java Newscast #49#video#java‑basics #on‑ramp
To give Java and programming beginners a better learning path, JEP 445 proposes to allow stand-alone main methods that are non-public, non-static, and don't have an args array and we're also JEP draft for multi-file programs
Image with slug talk-virtual-threads
Scaling Simply with Virtual Threads#talk#project‑loom #java‑21
Virtual threads combine the simplicity of blocking code with the resource efficiency and scalability of reactive programming and in this talk you're going to learn how they do that and how you can use them in your project
Image with slug inside-java-newscast-48
Save 10-20% Memory With Compact Headers - Inside Java Newscast #48#video#performance
JDK Enhancement Proposal 450 proposes to merge a compressed class word into the mark word to reduce object header size on 64-but systems from 96-128 bits to 64 bits, thus saving 10-20% of heap space
Image with slug inside-java-newscast-46
Getting Rid Of Unused Variables (Finally) - Inside Java Newscast #46#video#pattern‑matching
JEP 443 proposes to add unnamed variables and patterns to Java. With them, unused variables and patterns can be replaced by a single underscore, which helps writing readable and maintainable code.
Image with slug inside-java-newscast-45
New (Sequenced) Collections In Java 21 - Inside Java Newscast #45#video#collections #java‑21
All lists, some sets, and some maps have an encounter order, but the collections framework has no type to capture this property and define operations like getting or removing first and last elements or iterating in reverse order. Sequenced collections will fix that in Java 21.
Image with slug java-20-guide
Java 20 🥱#post#java‑20
The list of big new features that can be used in production with Java 20 is rather short: . (That was it already.) Pretty boring, these six-month releases. We really don't need to take a closer look ...
Image with slug inside-java-newscast-43
The Holy Grail of Java Performance - Inside Java Newscast #43#video#project‑leyden
The goal of Project Leyden is to improve the startup time, time to peak performance, and footprint of Java programs. Project lead Mark Reinhold recently proposed to extend the Java programming model with features for selectively shifting and constraining computation with condensors. Let's look at his white paper and roadmap.
Image with slug inside-java-newscast-41
Prepare Your Code Bases For Future Java - Inside Java Newscast #41#video#deprecation #tools
What do the security manager, applet API, finalization, and primitive wrapper constructors have in common? What about CMS, Nashorn, RMI activation, and biased locking? And what does jdeprscan have to do with all of this?
Image with slug inside-java-newscast-40
Java's Plans for 2023 - Inside Java Newscast #40#video#project‑amber #project‑galahad #project‑leyden #project‑lilliput #project‑loom #project‑panama #project‑valhalla
A summary of what happened in 2022 and what will probably happen in 2023 for Projects Amber, Galahad & Leyden, Lilliput, Loom, Panama, and Valhalla
Image with slug inside-java-newscast-39
24 Java Features You Missed In 2022 - Inside Java Newscast #39#video#collections #documentation #java‑18 #java‑19 #pattern‑matching #performance #records
JDK 18 and JDK 19 preview a number of big ticket features but they also come with a lot of smaller improvements. Here are 24 less-known features that were added to Java in 2022. Among them additions to Future and ForkJoinPool, to HashSet and HashMap, Security and GC improvements, Custom Localized Date-Time Formats and an Internet Address Resolution SPI, and much more.
Image with slug talk-openjdk-features
From Idea to IDE - How Java Features Are Considered, Designed, And Shipped#talk#openjdk #community
How a community of Java enthusiasts drives innovation for 15 years, turning ideas into designs into code into features you can use in your IDE
Image with slug inside-java-newscast-36
GraalVM In OpenJDK And More JavaOne Announcements - Inside Java Newscast #36#video#community #java‑8 #java‑17 #openjdk #performance
Oracle will contribute GraalVM's just-in-time compiler and native image technology to OpenJDK. It will also create EA and GA builds for JavaFX 20+ and is hard at work at creating generational ZGC to vastly improve ZGC's already impressive performance. And then there's the Java SE Subscription Enterprise Performance Pack, a drop-in replacement for JDK 8 with JDK 17 performance.
Image with slug inside-java-newscast-35
The Simplest Hello World - Inside Java Newscast #35#video#project‑amber #on‑ramp
Visibility, classes, methods, instance and static members, parameters - a newcomer to programming needs to learn all of these concepts to truly understand a simple hello-world program in Java. Time to make that simpler and cut down on what needs to be known up front.
Image with slug talk-java-amber
The SolutionFactory To Java's Problems#talk#java‑next #project‑amber
Project Amber steadily and carefully chips away at Java's persistent pain points. This talk discusses released, previewing, and upcoming features achieve that and make Java more expressive, more succinct, and more readable.
Image with slug talk-java-pattern-matching
Data-Oriented Programming in Java (21)#talk#pattern‑matching #sealed #project‑amber
Data-oriented programming models data as data: records for entities and sealed types for alternatives. Combined with pattern matching we can define operations on the data without overloading it with functionality.
Image with slug inside-java-newscast-34
Loom in the Java Ecosystem - Inside Java Newscast #34#video#java‑19 #project‑loom #libraries
Among other things, Java 19 ships with virtual threads, structured concurrency APIs, sealed types, and pattern matching in switch - all of them as previews, but still very cool! I'm using these features here to create a GitHub crawler.
Image with slug inside-java-newscast-33
Java 19 in Action - Inside Java Newscast #33#video#java‑19 #project‑loom
Among other things, Java 19 ships with virtual threads, structured concurrency APIs, sealed types, and pattern matching in switch - all of them as previews, but still very cool! I'm using these features here to create a GitHub crawler.
Image with slug inside-java-newscast-32
String Templates, JavaFX 19, Deserialization, and more at JavaOne - Inside Java Newscast #32#video#javafx #java‑19 #serialization
String templates make it easy and safe to embed variables and expressions in strings; JavaFX 19 comes with many improvements, chief among them derived observables; and the deserialization filter can keep apps safe from certain attacks. More on all of this at JavaOne!
Image with slug inside-java-newscast-31
Sequenced Collections, Purity, and more at JavaOne - Inside Java Newscast #31#video#collections #lambda
Sequenced collections introduce an abstraction for collections with a known encounter order like all lists and some sets and maps. It will be easy to add, get, or remove the first and last elements and to iterate or stream in reverse order. We're also discussing immutable collections and pure functions. More on all of this at JavaOne!
Image with slug inside-java-newscast-30
Java Q&A - Inside Java Newscast #30#video#project‑leyden #project‑lilliput #project‑valhalla #project‑amber
We asked you for questions on YouTube, Reddit, and Twitter and are here to answer a bunch of them. From projects Amber to Valhalla, Leyden to Lilliput, from language to performance, from the immediate future to pipe dreams we covered a lot of ground.
Image with slug inside-java-newscast-29
Data-Oriented Programming - Inside Java Newscast #29#video#records #sealed #pattern‑matching #patterns #techniques
Data-oriented programming focuses on modeling data as data (instead of as objects). Records for data and sealed types for alternatives let us model immutable data where illegal states are unrepresentable. Combined with pattern matching we get a safe, powerful, and maintainable approach to ad-hoc polymorphism that lets us define operations on the data without overloading it with functionality.
Image with slug inside-java-newscast-28
What is OpenJDK? - Inside Java Newscast #28#video#openjdk #community #java‑basics
What's "OpenJDK" (or "the OpenJDK"?), how does it work, and what does it do? Here's the answer to these questions as well as explorations of JDK Enhancement Proposals, the Java Community Process, why there are so many JDK providers, and how long-term support works.
Image with slug inside-java-newscast-27
Java 19 - The Best Java Release? - Inside Java Newscast #27#video#java‑19 #project‑amber #project‑loom #project‑panama
Java 19 is the first release to preview Project Loom's virtual threads and structured concurrency, Project Amber's record patterns, and Project Panama's foreign memory and function APIs. It also continues previews of pattern matching in switch and vector API. Put together, this makes it the most groundbreaking Java release in years and probably for years to come!
Image with slug inside-java-newscast-26
Deconstructing Records in Pattern Matching - Inside Java Newscast #26#video#project‑amber #pattern‑matching
How record patterns use records' transparency to safely deconstruct them in pattern matching, allowing us to separate checking structure and value of data from processing it.
Image with slug inside-java-newscast-25
News Grab Bag: Loom Virtual Threads, Lilliput, Pattern Matching, ... - Inside Java Newscast #25#video#project‑loom #tools #project‑lilliput #project‑amber #pattern‑matching #community
Project Loom's virtual threads are merged and ship with JDK 19 - here's to prepare for them. Also, news on Project Lilliput, proposal for record patterns in pattern matching, some astonishing numbers from Sonatype on Maven Central, and the move of OpenJDK to openjdk.org.
Image with slug inside-java-newscast-24
when And null In Pattern Matching - Inside Java Newscast #24#video#project‑amber #pattern‑matching
JEP 427 proposes two changes to pattern matching in switch: 1. Guarded patterns, which belonged to patterns, are replaced with when clauses, which belong to the case. 2. null needs to be handled by a specific case null.
Image with slug java-switch
How To Use switch In Modern Java#post#switch #pattern‑matching
Since Java 14 introduced switch expressions, using switch isn't as straight-forward as it used to be: colons or arrows, statement or expression, labels or patterns? Here's how to best use switch in modern Java.
Image with slug inside-java-newscast-23
Virtual Thread Deep Dive - Inside Java Newscast #23#video#project‑loom
Now that Project Loom's JEP 425 officially proposes virtual threads, it's time to take a close look at them: scheduling and memory management; mounting, unmounting, capturing, and pinning; observability; and and what you can do for optimal scalability - this episode has (almost) everything on virtual threads!
Image with slug inside-java-newscast-21
All About JDK 18 - Inside Java Newscast #21#video#java‑18 #project‑amber #project‑panama #pattern‑matching #tools #reflection #documentation
Refinements in pattern matching and Panama's foreign and vector APIs; a new command jwebserver and a new IP address resolution SPI; preparing code for UTF-8 becoming the default character set and for the eventual removal of finalization; and a few more bits and pieces.
Image with slug talk-java-ama
Modern Java - Ask Me Anything#talk#java‑next #conversation
New language features, API additions, and JVM improvements; projects Amber, Loom, and Panama, Valhalla, Leyden, and Babylon; shorter release cadence and free Oracle JDK - there's a lot going on in modern Java. I'll do my best to answer all your questions about it.
Image with slug brian-goetz-pattern-matching-26h
State of Pattern Matching with Brian Goetz#video#project‑amber #pattern‑matching #conversation
Conversation with Project Amber lead Brian Goetz about pattern matching in Java: Why Map::get should be a pattern, the linear thinking trap and how it impacts null handling in pattern matched, exhaustiveness in switch statements and the rehabilitation of switch.
Image with slug javadoc-snippets-maven
Configuring Maven For Compiled And Tested Code In Javadoc#post#java‑18 #documentation #tools
For JDK 18's / JEP 413's embedded snippets to be compiled and tested by your Maven build, they need to be added to a source set, Surefire needs to pick them up, and Javadoc needs to know their location - here's how to do that.
Image with slug inside-java-newscast-20
Compiled And Tested Code In Javadoc - Inside Java Newscast #20#video#java‑18 #documentation
Short code snippets in Javadoc are a great way to document an API, but they're brittle. JDK 18 / JEP 413 solves that problem by allowing us to reference snippets from external files that are compiled and tested.
Image with slug java-optional-opinions
More Opinions On Optional#post#optional
How much work is it to wrap Optional? Do you need to null-check Optional arguments? What about serializability and framework support? And why consider the type in the first place? Answers in here!
Image with slug inside-java-newscast-19
Where to use Optional - Inside Java Newscast #19#video#optional
Is it ok to use Optional as parameter type? Overloading is an alternative, but how well does it stack up? Thoughts on this question (and other Optional-related ones) can usually be put into one of three (and a half) categories.
Image with slug inside-java-newscast-18
Java's Plans for 2022 - Inside Java Newscast #18#video#project‑amber #project‑loom #project‑panama #project‑valhalla
An update on Java's four key projects: Valhalla, Panama, Loom, and Amber - what they're about, where they are right now, and what their plans are for 2022 and beyond.
Image with slug inside-java-newscast-17
Project Loom Brings Structured Concurrency - Inside Java Newscast #17#video#java‑18 #project‑loom
Project Loom aims to bring structured concurrency to Java, a concept that compares to "regular" concurrency like structured programming compares to GOTO-programming - let's dip our toes into this new concept. Also: JDK 18 feature freeze, JDK migration guide, and nifty things to do with the new simple web server.
Image with slug inside-java-newscast-15
What Happens to Finalization in JDK 18? - Inside Java Newscast #15#video#java‑18 #deprecation #migration #reflection
Finalization was part of Java from day one to help developers manage resources but it turns out that it's really not good at that. Here's why and what's gonna happen next. Also, reflection and method handles.
Image with slug talk-java-next
Java Next#talk#java‑next #project‑amber #project‑babylon #project‑leyden #project‑loom #project‑panama #project‑valhalla
From Amber to Valhalla, from Loom to Leyden, from Babylon to Panama - six big projects are shaping Java's future and while some of them are already crossing the finishing line, others are just getting started. Let's take a closer look at how they will improve Java.
Image with slug inside-java-newscast-14
11 Tricks From dev.java - Inside Java Newscast #14#video#generics #lambda #pattern‑matching #records #serialization
From compact record constructors to boolean expressions in pattern matching, from generic wildcards to chaining predicates and comparators, from jpackage to jlink - here are 11 Java tricks handpicked from dev.java.
Image with slug inside-java-newscast-12
Faster LTS and free JDK with Java 17 - Inside Java Newscast #12#video#java‑17
Java 17 comes with more than just new features. A faster LTS cadence and free Oracle JDK make this the best-supported modern release ever.
Image with slug java-random-generator
Better Random Number Generation in Java 17#post#java‑17 #random
Java 17 expands the API for random number generation to make it more usable, extensible, and robust with RandomGenerator and RandomGeneratorFactory at its core.
Image with slug brian-goetz-valhalla-26h
The State of Project Valhalla with Brian Goetz#video#conversation #project‑valhalla
Conversation with Project Valhalla lead Brian Goetz about Java's original sin, unifying the type system, expanding generics, current work, the project timeline, and more.
Image with slug inside-java-newscast-11
Fast and Secure Inter-process Communication on JDK 16 - Inside Java Newscast #11#video#java‑16
JDK 16's socket channel / server-socket channel API can use Unix domain sockets for faster and more secure inter-process communication on the same host - also: JDK 17 final release candidate and Oracle Developer Live
Image with slug inside-java-newscast-9
Random Numbers and JDK Flight Recorder - Inside Java Newscast #9#video#java‑16 #java‑17 #random #performance #tools
The new API for random number generation in Java 17 - why it needed to change and how the new API is more usable, extensible, and robust - and how to get started with JDK Flight Recorder, particularly on Java 16.
Image with slug inside-java-newscast-8
Incremental Evolution, Pattern Switches vs Visitor Pattern, and Wayland Support - Inside Java Newscast #8#video#java‑17 #project‑panama #pattern‑matching #sealed #patterns
How the six-month release cadence enabled a more incremental evolution of the Java platform and how pattern switches and sealed classes are an alternative to the visitor pattern. Also, maybe Wayland support for Java.
Image with slug java-visitor-pattern-pointless
Visitor Pattern Considered Pointless - Use Pattern Switches Instead#post#patterns #pattern‑matching #sealed
In modern Java, the visitor pattern is no longer needed. Using sealed types and switches with pattern matching achieves the same goals with less code and less complexity.
Image with slug inside-java-newscast-7
Handling null and Upgrading Past Java 8 - Inside Java Newscast #7#video#migration #optional #switch #project‑valhalla
Dealing with null is never fun, so in this newscast, I explain how to best handle it, what tools can do, and how recent and upcoming language changes help dealing with it. I'll also look at a recent blog post about how Netflix upgraded from Java 8 to 16.
Image with slug maurizio-cimadamore-26h
The State of Project Panama with Maurizio Cimadamore#video#conversation #project‑panama
Conversation with Project Panama lead Maurizio Cimadamore about the project's core mission, the split into foreign-memory access and foreign linker APIs, jextract, performance, interaction with Project Valhalla, the timeline, and more.
Image with slug talk-java-modules-irl
Java Modules in Real Life#talk#j_ms #migration
Advice on why, when, when not, and how to use Java modules in real life for your projects
Image with slug ron-pressler-26h
The State of Project Loom with Ron Pressler#video#conversation #project‑loom
Conversation with Project Loom lead Ron Pressler about the project's core mission, challenges like interaction with debuggers and garbage collectors, the timeline for the next steps, compatibility and more.
Image with slug inside-java-newscast-6
Java 17: Features and Development - Inside Java Newscast #6#video#java‑17 #openjdk
Java 17, the next long-term support release, enters feature freeze and the release preparations begin today (June 10th). A good time to take a closer look at the list of JEPs as well as the development process.
Image with slug inside-java-newscast-5
Pattern Matching in Switches and Security Manager Deprecation - Inside Java Newscast #5#video#switch #pattern‑matching #deprecation
JEP 406, which is a candidate for Java 17, introduced pattern matching in switch statements and expressions, introduces guarded patterns, and improves null handling. Then we need to talk about JEP 411's deprecation of the security manager.
Image with slug 26h-java
26 Hours of Java#event#conversation #community
On May 29th we'll throw a late birthday party for Java, which turned 26 a few days before. With a 26-hour live stream relay race! 🥳
Image with slug inside-java-newscast-4
5 Secret Java API Tricks and Record Semantics - Inside Java Newscast #4#video#records
Five nifty Java API features that you need to know (and many more in the linked thread) and a quick explanation why Java records are not about reducing boilerplate.
Image with slug java-record-semantics
Why Java's Records Are Better* Than Lombok's @Data and Kotlin's Data Classes#post#java‑16 #records #rant
While all three remove boilerplate, the similarities don't go much further. Records have stronger semantics with important downstream benefits, which makes them better*. (* not always; depends on circumstances; excuse the clickbait)
Image with slug talk-just
Why Don't They Just... ?! The Deliberations Behind Evolving Java#talk#streams #optional #records #collections
There are many nifty features that Java could have but doesn't. Somewhat surprisingly, there are reasons for that and in this talk I'll discuss those for a few concrete cases as well as the deliberations behind such decisions.
Image with slug junit-pioneer-exploratory
JUnit Pioneer - An Exploratory Mission to Jupiter And Beyond#video#junit‑pioneer
From growing a community on Twitch to strong documentation, from squashing commits to one-click releases - this presentation covers JUnit Pioneer in all detail
Image with slug inside-java-newscast-3
Quicker Java and JDK 16 compatibility - Inside Java Newscast #3#video#java‑16 #vector #java‑17
A walk through language features, APIs, and JDK capabilities that make Java quicker to use with less ceremony and more immediate results. Also, a rundown of some of the projects with all tests green on JDK 16.
Image with slug java-generics-wildcards
Java Generics III - Wildcards#video#generics
Second part of a short series on Java Generics - this one explains generics. ? extends Number - that kinda thing.
Image with slug java-generics-bounded-type-parameters
Java Generics II - Bounded Type Parameters#video#generics
Second part of a short series on Java generics - this one explains bounded type parameters. T extends Number - that kinda thing.
Image with slug inside-java-newscast-2
Vector API, Record Serialization, And Java 17 Release Schedule - Inside Java Newscast #2#video#java‑16 #vector #java‑17
Short introduction to the Vector API (incubating in JDK 16) and an update on serializing records. Also, a quick mention of JEP 356 in JDK 17 and the proposed release schedule.
Image with slug inside-java-newscast-1
Java 16 Rundown, First Of Java 17 - Inside Java Newscast #1#video#java‑16 #java‑17
Java 16 got released, so I go over most of the additions like records, Stream APIs, Unix Domain Socket support, and much more. Then there's a first glimpse at Java 17.
Image with slug talk-junit-pioneer
To Jupiter And Beyond - On An Exploratory Mission With JUnit Pioneer#talk#junit‑pioneer #junit‑5 #community #documentation #tools
JUnit Pioneer gathers JUnit 5 extensions. This talk discusses the technical aspects, but also the mission, dev practices, automatic releases, and what Twitch has to do with all of this.
Image with slug java-16-guide
Definitive Guide To Java 16#post#java‑16
A detailed guide to Java 16: records, type patterns, sealed classes; Stream and HTTP/2 additions, Unix domain socket support; Project Panama previews, packaging tool, performance improvements, and more
Image with slug jdk-news-2
Patterns, switch, and Valhalla's Primitive Classes - JDK News #2#video#java‑next #openjdk #project‑amber #pattern‑matching #project‑valhalla #primitive‑classes
Project Amber brings new patterns and puts them into switch while Project Valhalla takes off and proposes introducing primitive classes
Image with slug java-unix-domain-sockets
Code-First Unix Domain Socket Tutorial#post#java‑16
Java's socket channel / server-socket channel API can use Unix domain sockets for faster and more secure inter-process communication on the same host
Image with slug java-type-pattern-matching
Type Pattern Matching with instanceof#post#java‑16 #java‑basics #pattern‑matching
Type patters with instanceof are Java's first step towards pattern matching. Motivation, syntax, details, and future applications - here's all you need to know.
Image with slug java-pattern-matching
Pattern Matching in Java#post#java‑basics #pattern‑matching
Java takes its first steps towards pattern matching but the topic is much larger than instanceof. Goals, terminology, flow scoping - these apply to all kinds of patterns.
Image with slug 25h-brian-goetz
Java's Quirks and Wrong (?) Defaults with Brian Goetz#video#conversation #migration #optional #serialization
Mutability, nullability, serialization, primitives - Nicolai Parlog discusses with Java language architect Brian Goetz why Java is the way it is.
Image with slug jdk-news-1
Pattern Matching Quartet - JDK News #1#video#java‑next #project‑amber #pattern‑matching
A summary of four recent discussions about pattern matching on the Project Amber mailing lists
Image with slug java-react-folders
Sorting A React App Into Java's Folder Structure#post#js #libraries #tools
How to use react-app-rewired to sort a React app into a Java folder structure with package.json at the root, and sources in src/{main|test}/js
Image with slug java-2077
Java 2077#post#java‑next #project‑amber #project‑jigsaw #project‑leyden #project‑loom #project‑panama #project‑valhalla
The year is 2077, the Java version is 128. It's not LTS. Here's how Loom, Valhalla, Panama, Leyden, Amber, and Jigsaw pushed humanity to the brink. And how you can save us.
Image with slug java-16-stream-mapmulti-group
Broken Stream::group with Java 16's mapMulti#post#java‑16 #streams
Java 16 adds a new method mapMulti to Stream and it can be abused to simulate a reverse-flatMap aka group operation (with shortcomings).
Image with slug java-16-stream-mapmulti
Faster flatMaps with Stream::mapMulti in Java 16#post#java‑16 #streams #performance
Java 16 adds a new method mapMulti to Stream. It fills the same role as flatMap, but is more imperative - and faster.
Image with slug build-modules
Java Modules Cheat Sheet#post#j_ms #java‑9 #java‑11
A cheat sheet for building and running Java modules from the command line with javac, jar, and java
Image with slug junit-pioneer-1-0-0
JUnit Pioneer 1.0#post#junit‑pioneer #junit‑5 #testing
Yesterday we released JUnit Pioneer 1.0 🥳 - here's a quick rundown of its features
Image with slug java-generics-basics
Java Generics I - The Basics#video#java‑basics #generics
First part of a short series on Java generics - this one explains the basics
Image with slug 25h-java
25 Hours of Java#event#conversation #community
On May 23rd 2020, Java turns 25 🥳 and what better way to celebrate its birthday than with a 25-hour live stream? (On Twitch: https://twitch.tv/nipafx)
Image with slug oliver-drotbohm-modularity
Modularity with Oliver Drotbohm#video#architecture #conversation #j_ms
Oliver and I discuss modularity in Java with a focus on the Java module system
Image with slug talk-java-after-n
Java After Seventeen#talk#java‑17 #java‑18 #java‑19 #java‑20 #java‑21
A live-coding talk during which I update a Java 11/17 code base to Java 21, making good use of new language features, additional and improved APIs, and JVM capabilities
Image with slug upgrade-from-java-8
How We Upgraded From Java 8 And Why You Can (And Should) Do It Too#video#community #migration
My two minutes of fame during the Oracle Code One 2019 keynote
Image with slug java-13-guide
Definitive Guide To Java 13#post#java‑13
A detailed guide to Java 13: text blocks, switch expressions with yield, ZGC, dynamic AppCDS archives
Image with slug java-application-class-data-sharing
Improve Launch Times On Java 13 With Application Class-Data Sharing#post#java‑10 #java‑12 #java‑13 #performance
On Java 10+, you can use application class-data sharing to reduce launch times, response time outliers, and memory footprint. By archiving class data with -Xshare:dump and loading it with -Xshare:on, the JVM's class loading workload can be reduced considerably.
Image with slug java-13-switch-expressions
Definitive Guide To Switch Expressions In Java 13#post#java‑13 #java‑basics #switch
Java 13 finalized switch expressions. Together with a new lambda-style arrow syntax, this makes switch more expressive and less error-prone.
Image with slug java-modules-jpms-maturity-model
The JPMS Maturity Model#post#j_ms
Java's module system requires consistent support by libraries, frameworks, and tools. This maturity model classifies a project's support for the JPMS.
Image with slug enable-preview-language-features
Evolving Java With ––enable–preview aka Preview Language Features#post#java‑next
Use --enable-preview (plus --source or --release during compilation) to experiment with Java's preview features
Image with slug java-13-text-blocks
Definitive Guide To Text Blocks In Java 13#post#java‑13 #java‑basics
Java 13 introduces text blocks: string literals that span multiple lines. Learn about syntax, indentation, escape sequences, and formatting.
Image with slug talk-best-practices-harmful
Best Practices Considered Harmful#talk#techniques
A lightning talk about how best practices promote a one-size-fits all mentality that harms our ability to create solutions that are tailored to the problems at hand
Image with slug immutable-collections-in-java
Immutable Collections In Java - Not Now, Not Ever#post#collections
The JDK contains immutable collections, but no type ImmutableCollection. Here's why that's so and why it won't change.
Image with slug java-module-system-sander-mak
The Java Module System with Sander Mak#video#conversation #j_ms
At J-Fall 2018 I talked to Sander Mak, modularity expert at Luminis, about the Java module system (J_MS), its adoption, how it compares to OSGi, and more.
Image with slug caliz-background-compilation
Caliz III: Hashing scripts and background compilation#video#performance #tools
Letting Caliz store native images and only create them for a given Java "script" (single source file) if needed
Image with slug jakarta-ee-javax-and-a-week-of-turmoil
Jakarta EE, javax, And A Week Of Turmoil#post#community #jakarta
During a week of turmoil, many people have written about Jakarta EE and javax. This post summarizes the community's opinions and gives you plenty of links.
Image with slug caliz-wrapping-graal
Caliz II: Wrapping Graal AOT#video#performance #tools
Extending Caliz to create native images of Java "scripts" (single source files) with with Graal
Image with slug caliz-learning-graal
Caliz I: Wrapping JVM 11 and learning about Graal AOT#video#performance #tools
First steps toward an acceptable scripting experience with single-source-file execution and Graal native images
Image with slug java-12-guide
Definitive Guide To Java 12#post#java‑12 #migration
Detailed Java 12 guide: migration, versions; switch expressions, teeing collectors, indenting/transforming strings (and more); default CDS, Shenandoah, G1.
Image with slug java-12-teeing-collector
Teeing Collector in Java 12#post#java‑12 #streams
The teeing collector, available since Java 12 as Collectors::teeing, forwards its input to two other collectors before merging their results with a function.
Image with slug java-12-experiments
Java 12 Experiments (Live Stream)#video#java‑12
In my first live stream ever (yay!), we explored Java 12's API improvements
Image with slug effective-java-utilities-singleton-dependency-injection
Utilities, Singletons and Dependency Injection - Effective Java, Items 3-5#video#book‑club #patterns
Mildly surprising (to me), it makes sense to discuss these three patters in one video - so here it goes
Image with slug java-11-gems
Eleven Hidden Gems In Java 11#post#java‑11
Eleven small but shiny additions in Java 11 to classes like String, Path, Files, Collection, Optional, and others that make coding a little more elegant.
Image with slug talk-java-var
Fun With var#talk#anonymous‑classes #default‑methods #generics #lambda #java‑10 #var
A live-coding talk where I show off all you need to know about var in Java. And then some.
Image with slug scripting-java-shebang
Scripting Java 11, Shebang And All#post#java‑11 #tools #on‑ramp
On Java 11+, you can run a single source file without compiling it. Beyond experimentation, you can write scripts this way. Even shebang is supported!
Image with slug robert-scholte-maven-3-4-5
Maven 3 / 4 / 5 with Robert Scholte#video#conversation #tools
Maven is one of the cornerstones of the Java ecosystem - here I talk with Robert Scholte, Chairman of the Apache Maven projects
Image with slug java-reactive-http-2-requests-responses
Reactive HTTP/2 Requests And Responses In Java 11#post#java‑11
With Java 11's new reactive HTTP/2 API, request and response bodies can be handled with reactive streams: you can throttle, stream, and cancel early.
Image with slug java-12-switch-expression
First Contact with Switch Expressions in Java 12#video#java‑12 #switch
With Java 12, switch is no longer just a statement, but becomes an expression. Let's take a look!
Image with slug java-http-2-api-tutorial
Java 11 HTTP/2 API Tutorial#post#java‑11 #java‑basics
Tutorial for Java 11's new HTTP/2 API with HttpClient, HttpRequest, and HttpResponse at its center. Shows synchronous and asynchronous request handling.
Image with slug effective-java-builders
Use Builders... Cautiously - Effective Java, Item 2#video#book‑club #patterns
Why and how to avoid the builder pattern and how to make best use of it if you can't
Image with slug java-11-releases-license-lts
Java 11: A New Dawn - Releases, Oracle JDK vs OpenJDK, and LTS#video#java‑11 #java‑next
Oracle's announcements of the six-month release cadence and new licensing caused quite a ruckus - now that things calmed down, lets discuss where we're headed
Image with slug java-11-migration-guide
All You Need To Know For Migrating To Java 11#post#java‑11 #migration
Migrating from Java 8 to Java 11? This has got you covered: licensing, long-term support, preparations, version requirements, migration challenges, and more.
Image with slug effective-java-static-factory-methods
Static Factory Methods - Effective Java, Item 1#video#book‑club #patterns
How to use static factory methods to overcome three shortcomings of constructors
Image with slug effective-java-kickoff
Kicking off a series on Effective Java, Third Edition#video#book‑club
Kick-off to
a YouTube series on Effective Java, Third Edition - let's find some angles Josh didn't cover
Image with slug junit-5-architecture-jupiter
JUnit 5 Architecture or "What's Jupiter?"#post#architecture #junit‑5 #libraries #testing
The JUnit 5 architecture promotes a better separation of concerns than JUnit 4 did. It also provides clear APIs for testers (Jupiter) and tools (Platform).
Image with slug junit-5-basics
JUnit 5 Basics: @Test, Lifecycle, Assertions, Assumptions, And More#post#java‑basics #junit‑5 #libraries #testing
The Basics of JUnit 5: How to use @Test, @BeforeAll, @BeforeEach, @AfterEach, @AfterAll, assertions, and assumptions. How to disable, name, and tag tests.
Image with slug junit-5-disabled-conditions
JUnit 5 Conditions: @Enabled, @Disabled, Customized#post#junit‑5 #libraries #testing
A detailed look at JUnit 5's @Disabled, @DisabledOnOs, @DisabledOnJre, etc. and how to create custom conditions to flexibly disable test methods.
Image with slug junit-5-dynamic-tests
JUnit 5 - Dynamic Tests#post#junit‑5 #lambda #libraries #testing
With JUnit 5's dynamic tests, we can create tests at run time, for example to parameterize tests, create hierarchical test plans, or define tests with lambdas.
Image with slug junit-5-extension-model
JUnit 5 Extension Model: How To Create Your Own Extensions#post#architecture #junit‑5 #libraries #testing
The JUnit 5 extension model enables detailed, flexible, and powerful additions to JUnit 5's core features. For that it provides specific extension points.
Image with slug junit-5-parameterized-tests
JUnit 5 - Parameterized Tests#post#junit‑5 #libraries #testing
Thorough introduction to parameterized tests in JUnit 5 with @ParameterizedTest, argument sources (eg @MethodSource, @CsvSource), and argument converters.
Image with slug junit-5-setup
JUnit 5 Setup in IntelliJ, Eclipse, Maven, and Gradle#post#tools #junit‑5 #libraries #testing
How to set up JUnit 5 so tests run in IntelliJ, Eclipse, Maven, Gradle or, if all else fails, via JUnit 4 or on the command line.
Image with slug java-var-traits
Unlocking Traits With var#post#default‑methods #java‑10 #lambda #var
In Java 10, var makes it is possible to ad-hoc combine traits into an instance that matches your exact requirements. Alas, it has some downsides.
Image with slug java-var-anonymous-classes-tricks
Tricks with var and anonymous classes (that you should never use at work)#post#anonymous‑classes #java‑10 #var
Local-variable type inference with var makes it easier to work with anonymous classes, e.g. for ad-hoc fields and methods. Don't do it, though!
Image with slug java-var-intersection-types
Unlocking Intersection Types With var#post#generics #java‑10 #var
Java 10's var makes intersection types in Java more approachable. Generics tricks are still needed, but var makes it easy to declare such variables.
Image with slug multi-release-jars-multiple-java-versions
How To Use Multi-release JARs To Target Multiple Java Versions#post#tools #java‑9
Multi-release JARs allow you to create a single JAR that contains bytecode for several Java versions with jar --version 9 (or 10, or...). Presented with a multi-release JAR, JVMs version 9 and later will load the code that was included for their version.
Image with slug java-9-tutorial
Code-First Java 9 Tutorial#post#java‑9 #migration #streams #optional #collections #j_ms
Showing code for the most important Java 9 features: private interface methods, stream and optional APIs, collection factories, reactive streams, stack walking, multi-release JARs, redirected platform logging, unified logging, the module system, and more. If you're new to Java 9, start here.
Image with slug goodbye-2017-hello-2018
Goodbye 2017, Hello 2018#post#turn‑of-the-year
2017 draws to a close and 2018 is knocking. My annual review and preview went to my newsletter, so subscribe or head over to Medium to read them.
Image with slug maven-on-java-9
Maven on Java 9 and later - Six Things You Need To Know#post#java‑9 #tools
How to use the compiler executable, toolchains, and mavenrc to run Maven on Java 9 and how to use mvn/jvm.config and profiles to configure your build.
Image with slug java-10-var-type-inference
First Contact With 'var' In Java 10#post#java‑10 #java‑basics #var
Java 10 introduces the var keyword, which lets the compiler infer local variable types. Here's how var works, why it exists, how it impacts readability.
Image with slug var-java-10
First contact with var in Java 10#video#java‑10 #var
How to use var, where it works and where it doesn't (and why), and how it might impact readability
Image with slug jsr-305-java-9
Making JSR 305 Work On Java 9#post#java‑9 #j_ms #migration
Using annotations from JSR-305 (@Nonnull, @Nullable) and javax.annotation (@Generated, @PostConstruct) on Java 9 causes a split package. Here's the fix.
Image with slug java-module-system-tutorial
Code-First Java Module System Tutorial#post#java‑9 #java‑basics #j_ms
Tutorial of Java 9 module system basics: declare modules with module-info.java, compile, package, launch them, learn of module path and readability graph.
Image with slug java-unified-logging-xlog
Unified Logging Of JVM Messages With The -Xlog Option#post#java‑9 #java‑basics
Java 9 introduces unified logging, a central mechanism configurable with -Xlog to observe class loading, threading, garbage collector, module system, etc.
Image with slug welcome-java-9
Welcome, Java 9!#video#community #java‑9
Java 9 is out today and with other members of the community I'm throwing a welcome party. Get an all around view on the new Java release with various opinions, tips, and great sources!
Image with slug impressions-javazone-2017
Impressions of JavaZone 2017#video#community
A few impressions of my stay at JavaZone 2017 to music from
WillRock
Image with slug five-command-line-options-hack-java-module-system
Five Command Line Options To Hack The Java Module System#post#java‑9 #j_ms
Get your code running on the Java 9 Module System with the command line options --add-exports, --add-opens, --add-modules, --add-reads, and --patch-module.
Image with slug planning-your-java-9-update
Planning Your Java 9 Update#post#java‑9 #jdeps #migration
A Java 9 update is not always trivial; quite the opposite, migrating to Java 9 can be challenging. Here's how to gather and categorize problems.
Image with slug talk-java-9-migration
To JAR Hell And Back#talk#java‑9 #java‑11 #j_ms #migration
A live-coding talk where we take a typical Java 8 code base and update it to Java 9 and beyond, overcoming some common and some less common hurdles like dependencies on internal APIs and split packages
Image with slug java-9-migration-guide
Java 9 Migration Guide: The Seven Most Common Challenges#post#java‑9 #j_ms #migration
Solutions to the seven most common challenges for a Java 9 migration. Each of them explained with background, symptoms, and fixes.
Image with slug jdeps-tutorial-analyze-java-project-dependencies
A JDeps Tutorial - Analyze Your Project's Dependencies#post#java‑basics #j_ms #jdeps #tools
JDeps is a dependency analysis tool for Java bytecode (class files and JARs). Learn how to use filters, aggregate results, and create diagrams.
Image with slug java-9-resources-talks-articles-blogs-books-courses
Java 9 Resources - Talks, Articles, Repos, Blogs, Books And Courses#post#java‑9
Java 9 draws and the number of posts and talks about it skyrocketed in the recent months. Here's a list of recommended talks and articles but also further resources where new, high-quality content will pop up.
Image with slug java-modules-optional-dependencies
Optional Dependencies with requires static#post#java‑9 #j_ms
The Java Platform Module System allows optional dependencies with requires static. They are accessible at compile but can be absent at run time.
Image with slug junit-5-parameterized-tests-nighthacking
Parameterized Tests in JUnit 5#video#junit‑5
At JavaLand 2017, I spent 15 minutes exploring JUnit 5's (then) brand-new parameterized test feature in a NightHacking session
Image with slug java-repackaging-exceptions-streams
Repackaging Exceptions In Streams#post#clean‑code #java‑8 #lambda #streams
How to repackage checked exceptions that get thrown in a Java stream pipeline so that they can be thrown without the compiler complaining about it.
Image with slug talk-expert-java-8
Expert Java 8#talk#java‑8 #lambda #streams #optional #default‑methods
With this talk, I help you get the most out of lambdas, Streams, Optionals, and default methods, helping you master Java 8's core features
Image with slug why-elvis-should-not-visit-java
Why Elvis Should Not Visit Java#post#clean‑code #optional #rant
The desire for the Elvis operator for easier null-handling echoes through the Java community. But due to Java's type system, it should never be introduced!
Image with slug spjcn-quo-vadis-scala
SPJCN IV: Quo Vadis Scala#post#community #scala
In the fourth issue of SitePoint’s Java Channel Newsletter (from October 21st 2016) I summarize the discussion of Scala's presumable demise.
Image with slug java-modules-reflection-vs-encapsulation
Reflection vs Encapsulation#post#java‑9 #j_ms #project‑jigsaw #reflection
Reflection wants to break into all code; encapsulation wants to give modules a safe space. How can this stand off be resolved?
Image with slug hello-2017
Hello 2017!#post#turn‑of-the-year
To finish all the projects I started in 2016, I will have to be disciplined and focused in 2017. Discipline and focus, what delightful words to start 2017.
Image with slug goodbye-2016
Goodbye 2016, Sorry For Fucking Up#post#turn‑of-the-year
Besides humanity as a whole fucking up 2016, it went well for me professionally. Maybe because I only cared about me? Possible...
Image with slug javaone-2016
SPJCN III: JavaOne 2016#post#community
In the third issue of SitePoint’s Java Channel Newsletter (from October 7th 2016) I summarize JavaOne 2016 and recommend interesting talks to watch.
Image with slug snapshots-gradle-maven-publish-plugin
Publishing Snapshots With Gradle's maven-publish Plugin#post#tools
A step by step tutorial how to use Gradle and the maven-publish plugin to publish snapshots to Sonatype's Maven snapshot repo.
Image with slug spjcn-whats-taking-long
SPJCN II: What's Taking So Long?#post#java‑9 #project‑jigsaw
In the second issue of SitePoint’s Java Channel Newsletter (from September 23rd 2016) I wonder why Java 9 takes so long.
Image with slug junit-5-rewrite-architecture-extensions
Rewrite, Architecture, Extensions Of JUnit 5#video#community #junit‑5
What were the reasons for the rewrite? How does JUnit 5 compare to JUnit 4? What's so special about the architecture and the extension points?
Image with slug what-future-java-might-look-like
What Future Java Might Look Like#post#java‑next #project‑valhalla #generics #pattern‑matching #primitive‑classes
Java's future is full of cool advances: data classes, value types, generics over primitives, pattern matching, etc. Let's peek into Java's future!
Image with slug spjcn-hello-world
SPJCN I: Hello World#post#community
In the first issue of SitePoint's Java Channel Newsletter (September 9th 2016) I babble about community and conferences.
Image with slug code-reviews-disy-part-3
Code Reviews At Disy - Observations#post#code‑review #techniques
After reviewing almost all code we wrote for 18 months, completing some 1'500 reviews, we want to share some recommendations.
Image with slug code-reviews-disy-part-2
Code Reviews At Disy - How We Review#post#code‑review #techniques
After setting out to create a peer review culture we came up with a workflow and picked a tool (yes, Crucible) that would help us get there.
Image with slug ultimate-guide-java-9
The Ultimate Guide To Java 9#post#java‑next #java‑9
Java 9 is coming! Besides Jigsaw it brings new language features and many new and improved APIs. Check out the ultimate guide.
Image with slug rebutting-5-common-java-stream-tropes
Rebutting 5 Common Stream Tropes#post#java‑8 #rant #streams
Articles about Java 8's streams often repeat a bunch of tropes: succinctness, ugly mechanics, anemic pipelines, weak exception handling. This is a rebuttal!
Image with slug code-reviews-disy-part-1
Code Reviews At Disy - Where We Were And What We Wanted#post#code‑review #techniques
At Disy we review almost all the code we write. Here, we want to share why that was not always the case and how we started with code reviews.
Image with slug goodbye-disy-hello-sitepoint
Goodbye Disy, Hello SitePoint#post#meta
I worked for Disy for about 2 years. Now I said goodbye to become the editor of SitePoint's burgeoning Java channel and have more time for other projects.
Image with slug java-9-stream-iterate
Oh No, I Forgot Stream::iterate!#post#java‑9 #streams
In Java 9 Stream gets a couple of new methods - one of them is an overload of iterate that takes a predicate and returns a finite stream.
Image with slug java-9-optional
Java 9 Additions To Optional#post#java‑9 #optional
Java 9 is coming! One of the changes are new methods on Optional: stream(), or(), and ifPresentOrElse(), which considerably improve Optional's API.
Image with slug talk-comment-your-code
Comment Your &*☠# Code!#talk#agile #clean‑comments #documentation
A heartfelt rant / thoughtful talk arguing for more comments in code
Image with slug java-9-stream
Java 9 Additions To Stream#post#java‑9 #streams
Java 9 is coming! One of the many changes are new Stream methods: takeWhile, dropWhile, and ofNullable. For more fun with streams!
Image with slug implement-java-hashcode-correctly
How To Implement hashCode Correctly#post#java‑basics
So you wrote a nice equals implementation? Great! But now you have to implement hashCode as well. Let’s see how to do it correctly.
Image with slug implement-java-equals-correctly
How To Implement equals Correctly#post#java‑basics
A fundamental aspect of any Java class is its definition of equality. It is determined by a class's equals method. Let's see how to implement it correctly.
Image with slug jeeconf-2016
JEEConf 2016#post#community
My take on JEEConf 2016: showing the talks I liked the best, raving about the community, romanticizing Kiev, and giving some feedback. Summary: awesome!
Image with slug talk-junit-5
JUnit 5#talk#junit‑5 #testing
In this talk, I introduce JUnit 5 from basic tests to more advanced features like nesting, parameterization, parallelization, and extensions. We also discuss its architecture and compatibility with JUnit 4.
Image with slug codefx-levels-up
CodeFX Leveled Up#post#meta
A lot of things are happening right now: I'm writing a book, I'll speak at conferences, you can hire me, and to top it off, I gave this blog a new look.
Image with slug doomed-code-review
A Doomed Code Review#post#code‑review #techniques
Code reviews should be brief, short, and focused. This is the story of how I fucked up on all those accounts and we still made it work.
Image with slug seven-reasons-against-blogging
Seven Reasons Against Blogging#post#meta #rant
Many people will tell you how great blogging is but there are downsides, too, and they are rarely discussed. So let me share some reasons against blogging.
Image with slug talk-java-module-system
The Java Module System Beyond The Basics#talk#j_ms #migration
In this talk, I go beyond the module system basics and present more advanced features for those who want to become their team's module system expert
Image with slug atom-on-gentoo
Building Atom On Gentoo#post#tools
See how to build Atom on Gentoo straight from the sources.
Image with slug comments-costs-benefits
Costs And Benefits Of Comments#post#clean‑comments #documentation
As with most things in software development the ultimate currency for comments is time. This is an analysis of the costs and benefits of comments.
Image with slug java-modules-implied-readability
Implied Readability With requires transitive#post#java‑9 #j_ms
In Java 9 a module must read another to use its API. With implied readability a 3rd module passes the dependency on, allowing the 1st to read the 2nd.
Image with slug java-stream-findfirst-findany-reduce
Beware Of findFirst() And findAny()#post#java‑8 #streams
Stream.findFirst() and findAny() work with any number of elements in the stream. Make sure to reduce(toOnlyElement()) if there should be at most one.
Image with slug hello-2016
Hello 2016!#post#turn‑of-the-year
In 2016 I want to continue blogging, branch out into new areas, work on my private projects, learn me a Haskell, and prevent exhaustion.Wow, so much to do.
Image with slug goodbye-2015
Goodbye 2015!#post#turn‑of-the-year
2015 is over and I'm looking back.How did it go, which things worked out and which didn't. And how come I'm feeling so tired recently.
Image with slug jigsaw-hands-on-guide
Jigsaw Hands-On Guide#post#java‑next #project‑jigsaw
A Jigsaw tutorial explaining how to create modules, state dependencies between them, and use the module system as a service locator to decouple modules.
Image with slug jdeps-maven-plugin-0-2
JDeps Maven Plugin 0.2 Released#post#java‑9 #jdeps #tools #project‑jigsaw
With v0.2 the JDeps Maven Plugin allows the creation of flexible exceptions from build-breaking for a self-paced preparation for Java 9 and Project Jigsaw.
Image with slug delay-of-java-9-release
Six-Month Delay Of Java 9 Release#post#java‑next #java‑9 #project‑jigsaw
Mark Reinhold proposed a six-month delay of JSR 376 / Project Jigsaw and thus of the Java 9 release. According to this JDK 9 would come out in March 2017.
Image with slug junit-lambda-prototype
JUnit Lambda - The Prototype#post#junit‑5 #libraries #testing
JUnit Lambda will eventually bring us JUnit 5. This is a discussion of the recent prototype, its features, core principles and compatibility considerations.
Image with slug javaone-2015-under-the-hood-of-project-jigsaw
JavaOne 2015: Under The Hood Of Project Jigsaw#post#java‑next #impulse #java‑9 #community #project‑jigsaw
JavaOne 2015 saw a series of talks by the Project Jigsaw team about modularity in Java 9. This one gives a peek under the hood discussing layers and class loaders.
Image with slug javaone-2015-advanced-modular-development
JavaOne 2015: Advanced Modular Development#post#java‑next #impulse #java‑9 #community #project‑jigsaw
JavaOne 2015 saw a series of talks by the Project Jigsaw team about modularity in Java 9. This one details different migration scenarios.
Image with slug javaone-2015-introduction-to-modular-development
JavaOne 2015: Introduction to Modular Development#post#java‑next #impulse #java‑9 #community #project‑jigsaw
JavaOne 2015 saw a series of talks by the Project Jigsaw team about modularity in Java 9. This one introduces the basic concepts.
Image with slug javaone-2015-prepare-for-jdk-9
JavaOne 2015: Prepare For JDK 9#post#java‑next #impulse #java‑9 #community #project‑jigsaw
JavaOne 2015 saw a series of talks by the Project Jigsaw team about modularity in Java 9. This one explains how to prepare for it.
Image with slug will-there-be-module-hell
Will There Be Module Hell?#post#java‑next #java‑9 #project‑jigsaw
Java 9's Project Jigsaw promises to solve JAR hell but falls short when it comes to conflicting versions. Will there be module hell instead?
Image with slug jar-hell
JAR Hell#post#java‑basics
A list of the problems that make up JAR hell (classpath hell, dependency hell) and how they relate to development tools like Maven and OSGi.
Image with slug apache-jmeter-tutorial
Apache JMeter Tutorial#post#performance #tools
Want to load test your web app? Then you should know about Apache JMeter! This tutorial explains the basics and how to create & execute a test plan.
Image with slug taxonomy-comments
A Taxonomy Of Comments#post#clean‑comments #documentation
A taxonomy of source code comments that enables further discussion about clean code and comments.
Image with slug java-stream-performance-your-ideas
Stream Performance - Your Ideas#post#java‑8 #performance #streams
Another post about stream performance - this one implements your ideas about how else to approach the topic.
Image with slug java-stream-performance
Stream Performance#post#java‑8 #performance #streams
A close look at stream performance. How do they compare to for and for-each loops oder arrays and lists. And what role plays boxing?
Image with slug stephen-colebourne-java-optional-strict-approach
Java 8 SE Optional, a strict approach#post#java‑8 #optional
Stephen Colebourne presented his pragmatic approach to using Optional. I argue for a stricter one that gets us further without considerable downsides.
Image with slug interview-about-comments-on-dzone
Interview About Comments On DZone#post#clean‑comments #documentation
Matt Werner from DZone interviewed me about my stance on comments.
Image with slug java-road-to-valhalla
Impulse: "Adventures On The Road to Valhalla"#post#java‑next #impulse #project‑valhalla #generics #primitive‑classes
A summary of Brian Goetz' talk "Adventures On The Road to Valhalla" given at JVMLS in August 2015. Focused on generic specialization and the two prototypes.
Image with slug project-jigsaw-on-infoq
All About Project Jigsaw On InfoQ#post#java‑next #java‑9 #project‑jigsaw
My posts about Project Jigsaw got polished and published on InfoQ.
Image with slug thoughts-on-comments
Thoughts On Comments#post#clean‑code #clean‑comments #documentation
My rant to comment your fucking code sparked some interesting conversations. Here we discuss some of your and my thoughts on the topic of comments.
Image with slug comment-your-fucking-code
Comment Your Fucking Code!#post#clean‑code #clean‑comments #documentation #rant
You think your code is so clean that it doesn't need comments? Then this rant is just for you!
Image with slug casting-in-java-8-and-beyond
Casting In Java 8 (And Beyond?)#post#java‑8 #optional #streams
Proposal to implement new casting methods on Java's Class. They aim to fulfill the need for improved ways to cast which was created by Java 8.
Image with slug features-project-jigsaw
The Features Project Jigsaw Brings To Java 9#post#java‑next #java‑9 #project‑jigsaw
A detailed presentation of the features Project Jigsaw brings to Java 9: modularization, encapsulation, configuration, performance, and more.
Image with slug motivation-goals-project-jigsaw
Motivation And Goals Of Project Jigsaw#post#java‑next #java‑9 #project‑jigsaw
A look at how Project Jigsaw (coming in Java 9) aims to solve JAR/classpath hell and at its goals to improve security, maintainability and performance.
Image with slug libfx-0-3-0
LibFX 0.3.0 Released#post#libfx
Release post for LibFX 0.3.0 including pointers to GitHub, feature descriptions, Maven coordinates and the Javadoc.
Image with slug java-transforming-collections
Transforming Collections#post#collections #libfx
Transforming collections are a view onto another collection, making it appear to be of a different parametric type. They are available in LibFX 0.3.0.
Image with slug javafx-project-jigsaw-jep-253
JavaFX, Project Jigsaw and JEP 253#post#java‑next #java‑9 #javafx #project‑jigsaw #patterns
JEP253 aims to prepare JavaFX for Project Jigsaw by defining public APIs for functionality that will become inaccessible due to modularization.
Image with slug jdeps-maven-plugin-0-1
First Release of JDeps Maven Plugin#post#java‑9 #jdeps #tools #project‑jigsaw
The JDeps Maven Plugin will break a project's build if it contains dependencies on JDK-internal APIs. This helps to prepare for Java 9.
Image with slug crafted-design
Impulse: "Crafted Design"#post#architecture #impulse
Summary of the architecture described by Sandro Mancuso in his talk "Crafted Design", held at GeeCON2014.
Image with slug libfx-0-2-1
LibFX 0.2.1 Released#post#libfx
Release post for LibFX 0.2.1 including pointers to GitHub, feature descriptions, Maven coordinates and the Javadoc.
Image with slug how-java-9-and-project-jigsaw-may-break-your-code
How Java 9 And Project Jigsaw May Break Your Code#post#java‑next #java‑9 #project‑jigsaw #deprecation #migration
With Java 9 comes Project Jigsaw - a modularization of the JDK - which will break existing code. An overview over the planned changes lets you see whether yours is affected.
Image with slug java-getting-rid-of-anonymous-classes
Getting Rid Of Anonymous Classes#post#java‑8 #lambda #techniques
Anonymous classes are verbose and obfuscating. Functional implementations can oust them from their last strongholds (mainly abstract classes).
Image with slug java-default-methods-interface-evolution-failure
Interface Evolution With Default Methods – Part II: Interfaces#post#default‑methods #generics #java‑8
Why interface evolution with default methods does not work for whole interfaces - at least not smooth enough to be practical.
Image with slug agile-architecture
Impulse: "Agile Architecture"#post#agile #architecture #impulse
A summary of the talk "Agile Architecture" given by Molly Dishman and Martin Fowler as the keynote at the O'Reilly Software Architecture Conference.
Image with slug java-pirate-elvis-operator
Roll Your Own Pirate-Elvis Operator#post#java‑8 #lambda #optional
Java has no Elvis operator (or null coalescing operator / null-safe member selection) but with lambda expressions / method references you can roll your own.
Image with slug test-collection-implementations-guava
Test Collection Implementations with Guava#post#collections #libraries #testing
Here's how to use Guava-Testlib to easily and thoroughly test your own Java collection implementations.
Image with slug java-default-methods-interface-evolution
Interface Evolution With Default Methods - Part I: Methods#post#default‑methods #java‑8 #patterns
Patterns for interface evolution with default methods: gradually add, replace and remove interface methods without breaking client code.
Image with slug java-value-based-classes
Value-Based Classes#post#java‑8 #java‑next #project‑valhalla #primitive‑classes
An explanation of value-based classes in Java 8. Why do they exist? What are their limitations? How (not) to use them?
Image with slug android-emulator-haxm-thinkpad-t440p
Running Android Emulator With HAXM On Thinkpad T440p#post#tools
Quick guide to how to use the Android emulator with HAXM (based on VT-x) on a Thinkpad T440p.
Image with slug java-default-methods-guide
Everything You Need To Know About Default Methods#post#default‑methods #java‑8 #java‑basics
Covering literally everything there is to know about Java 8's default methods.
Image with slug javadoc-tags-apiNote-implSpec-implNote
New Javadoc Tags @apiNote, @implSpec, and @implNote#post#java‑8 #tools
There are new Javadoc tags used in Java 8: @apiNote, @implSpec, and @implNote. Take a look at their history, meaning and use on command line and with Maven.
Image with slug hello-2015
Hello 2015!#post#turn‑of-the-year
I'm laying out my new year's resolutions for 2015.
Image with slug goodbye-2014
Goodbye 2014!#post#turn‑of-the-year
I'm taking a look at my open source contributions and blogging achievements in 2014.
Image with slug java-non-capturing-lambdas
Instances of Non-Capturing Lambdas#post#default‑methods #java‑8 #lambda
See how Java's creation of instances of non-capturing lambda expressions can lead to unexpected and possibly bug-inducing behavior.
Image with slug java-multiple-return-statements
Multiple Return Statements#post#clean‑code #java‑basics
An argument for using multiple return statements in a method (as opposed to adhering to the single return myth).
Image with slug java-listenerhandles
Don't Remove Listeners - Use ListenerHandles#post#clean‑code #javafx #libfx
Keeping references around to remove listeners is a hazard. ListenerHandles encapsulate the complexity and LibFX has an implementation.
Image with slug libfx-0-2-0
LibFX 0.2.0 Released#post#javafx #libfx
Release post for LibFX 0.2.0 including and pointers to GitHub, Feature descriptions, Maven coordinates and the Javadoc.
Image with slug javafx-sources-in-eclipse
JavaFX Sources in Eclipse#post#tools #javafx
A quick step by step guide how to use the JavaFX sources in Eclipse by attaching them to the current JDK.
Image with slug lambdas-java-peek-hood
Impulse: "Lambdas In Java: A Peek Under The Hood"#post#java‑next #impulse #java‑8 #lambda
Discussing the talk "Lambdas in Java: A peek under the hood" given by Brian Goetz at the goto; conference 2013 in Aarhus.
Image with slug serialize-java-optional
Serialize Optional#post#java‑8 #optional #serialization
A summary of why you can't serialize Optional and what can be done to deal with that limitation if necessary.
Image with slug java-serialization-proxy-pattern
The Serialization Proxy Pattern#post#clean‑code #patterns #serialization
A presentation of the Serialization Proxy Pattern as defined in Effective Java. It defines the pattern, describes its implementation and gives examples.
Image with slug java-concepts-serialization
Concepts of Serialization#post#java‑basics #serialization
A close look at serialization and a presentation of some key concepts of Java's serialization system.
Image with slug why-isnt-java-optional-serializable
Why Isn't Optional Serializable?#post#java‑next #java‑8 #optional #serialization #primitive‑classes
Discussing the reasons for not making Java 8's new type Optional serializable.
Image with slug design-java-optional
The Design of Optional#post#java‑next #java‑8 #optional
A digest of how Optional was introduced in Java 8, summarizing the many discussions about it and their key points based on the mail archive of JSR-335.
Image with slug intention-revealing-code-java-8-optional
Intention Revealing Code With Optional#post#clean‑code #java‑8 #optional
Write intention revealing code with Java 8's new type Optional and prevent most NPEs. This is not optional!
Image with slug architecture-lost-years
Impulse: "Architecture - The Lost Years"#post#architecture #impulse
Discussing the talk "Architecture - The Lost Years", which Robert C. Martin held on several occasions.
Image with slug decorator-pattern-default-methods
The Decorator Pattern With Default Methods#post#clean‑code #patterns #default‑methods #java‑8
Use Java 8's default methods to make the decorator pattern even more beautiful, which results in more concise and readable code.
Image with slug workflows-refactoring
Impulse: "Workflows of Refactoring"#post#impulse #techniques
Discussing the keynote "Workflows of Refactoring" by Martin Fowler at OOP 2014, where he categorizes different reasons for and ways of refactoring.
Image with slug decorator-pattern-saved-my-day
How The Decorator Pattern Saved My Day#post#clean‑code #patterns
A real-life example how the decorator pattern enables future changes and improves code quality by upholding the Single Responsibility Principle.
Image with slug codefx-up-and-running
CodeFX Up And Running#post#meta
Summer recess is officially over and shit got done! Finally, CodeFX is ready to take on the world.
Image with slug libfx-0-1-1
LibFX 0.1.1 Released#post#javafx #libfx
Release post for LibFX 0.1.1 including a description of Nestings and pointers to GitHub, Maven and the Javadoc.
Image with slug foobar
Foobar#post#meta #techniques #record‑args
A foobar post that may accidentally teach you about Foobar.