Sign in

Nicolai Parlog

@nipafx.dev
2.3K followers 255 following 283 posts

Java enthusiast with a passion for learning and sharing. Developer Advocate at Oracle but views and posts are my own.

PostsRepliesMedia
Nicolai Parlog @nipafx.dev · 29/09/2026
Am Donnerstag und Freitag kommt der #Java Community Process nach BaWü. 😍 Und das beste ist: Jeder kann dabei sein! (Zumindest ein bisschen.) Am 01.10. ab 1400 in der Hochschule #Karlsruhe (Details: 👇🏾) und ab 1830 bei SAP in Walldorf (Details: www.jug-da.de/2026/10/JCP-...).
Die Grafik enthält folgenden Text:

Hochschule Karlsruhe University of Applied Sciences
Fakultät für Informatik und Wirtschaftsinformatik

Meet the People Behind Java!

Das Java Community Process Executive Committee (JCP EC) ist zu Gast an der Hochschule Karlsruhe. 1. Oktober 2026 / 14:00 - 17:00 Uhr / Geb. B / Foyer

+ Begrüßung durch die HKA Franz Quint, Prorektor für Forschung, Kooperationen und Transfer
+ Welcome to the Java Community Heather VanCura, Oracle
+ Why Java Matters - From Education to Al Zoran Sevarac, Deep Netts
+ Working on OpenJDK - How Java Is Developed Götz Lindenmaier, SAP
+ Modern Java: Pattern Matching and Beyond Nicolai Parlog, Oracle
+ Diskussion und Q&A mit den JCP EC Vertretern von Alibaba, Amazon, BellSoft, Deep Netts, JetBrains, Microsoft, Oracle, SAP sowie Java Champions Moderation Carsten Sinz, HKA

Danach offener Austausch. Wir freuen uns über großes Interesse! Keine Anmeldung nötig.

Organisation: Carsten Sinz (Fakultät für Informatik und Wirtschaftsinformatik / HKA) und Götz Lindenmaier (SAP)
134
Nicolai Parlog @nipafx.dev · 17/03/2026
Early bird and everything. See you later! #JavaOne
060
Nicolai Parlog @nipafx.dev · 27/01/2026
HTTP/3 support is coming in #Java 26. 👇🏾
1104
Nicolai Parlog @nipafx.dev · 06/11/2025
As always, #JFall was a blast - thanks for having me and letting me tell people about the latest #Java features. 🙏 Slides: slides.nipafx.dev/java-x/2025-...
3D J-Fall logo
0121
Nicolai Parlog @nipafx.dev · 01/11/2025
The next Inside Java Newscast will be episode #100. 🤩🥂 It'll be about the recent Valhalla news, but after that, to celebrate the jubilee, I'll answer your questions about the show and the team behind it. Put your questions below. 👇🏾
A collage of 99 Inside Java Newscast thumbnails with a "100" superimposed on it
2154
Nicolai Parlog @nipafx.dev · 09/10/2025
The best #Devoxx session (in my book) is about to start: Ask the Architects. Bring your questions about Java and the OpenJDK architects will answer them. See you in five!
0122
Nicolai Parlog @nipafx.dev · 15/09/2025
Setup for tomorrow... 🤓 www.youtube.com/live/duIceCX...
3221
Nicolai Parlog @nipafx.dev · 01/04/2025
Java stream's terminal operations `findFirst` and `findAny` are neat but one use cases isn't covered: "find the only one" - a terminal operation you'd use after a filter that's supposed to let exaxctly one element pass through. There's now a JDK preview with that operation, named `highlander`. ⚔️
Screenshot of the following code:

Stream.of("AB", "C", "DEF").filter(string -> string.length() == 1).highlander();

This shows no compile error, but is still an April Fool's joke. 😁
4364
Nicolai Parlog @nipafx.dev · 26/03/2025
"Everybody wants code reviews until they get punched in the face." - Mike Tyson (pretty much)
Prime Mike Tyson in the ring, staring off camera
180
Nicolai Parlog @nipafx.dev · 18/03/2025
Just leaving this here... #JavaOne
Valhalla Roadmap
* JEP 401 - value classes
* JEP nnn - null-restricted types (separate from value classes)
* JEP mmm - null-restricted value types
* JEP 402 - minimize gaps between int and Integer!
* and surely more
3333
Nicolai Parlog @nipafx.dev · 17/03/2025
Until then, here's a little behind-the-scenes footage from the build-up. 🤩
Time lapse of workers setting up a conference venue
020
Nicolai Parlog @nipafx.dev · 07/02/2025
If you're using #Java​'s source-file launcher, you may eventually want to drop some dependencies into your little project. But how to get them without a build tool? One answer is JPM - give it a shot, it's cool: github.com/codejive/jav...
Terminal command "jpm search"JPM search for "jfiglet" and selection of one of three search resultsJPM prompt how to process the selected dependencyTerminal command "tree" and its result showing that JPM installed the selected JAR in its .m2 folder and created a symlink in the current project
3275
Nicolai Parlog @nipafx.dev · 29/01/2025
The #Java YouTube channel just passed 200.000 subscribers. Woot! 🥳 Thank you, everybody, for watching, commenting, sharing, and just in general for being an active member of this awesome community. 🧡💙 www.youtube.com/java
A small Duke standing in front of YouTube's 100k subscriber plaque with a 200k sticker on it.
15212
Nicolai Parlog @nipafx.dev · 19/01/2025
How should I know what I think without reading what I wrote?
A human-sized laptop playing a video that shows, among other things, somebody typing on a keyboard. Behind the laptop is an old, wooden desk illuminated by a 2x human-sized desk lamp.
040
Nicolai Parlog @nipafx.dev · 09/01/2025
I'm coming for you, @odrotbohm.de!
The JUG KArlsruhe Hall of Fame showing the top speakers and the respective number of talks: 1. Oliver Drotbohm: 9; 2. Nicolai Parlog: 7; 3. Michael Plöd: 5
150
Nicolai Parlog @nipafx.dev · 09/01/2025
That's all the recommendation I need.
Screenshot of a purchase confirmation of the SINGULARITY bundle (volumes 1-3) by William Hertling
010
Nicolai Parlog @nipafx.dev · 04/10/2024
The next time you accidentally call a Java release "an LTS version", remember: * it happens to the best (in this case the authors of JEP 14) * it's easy to fix Friends don't let friends use misnomers.
041
Nicolai Parlog @nipafx.dev · 05/08/2024
OpenJDK is on a roll right now! Leyden just submitted its first JEP: "Ahead-of-Time Class Loading & Linking". openjdk.org/jeps/483 #Java
050
Nicolai Parlog @nipafx.dev · 01/08/2024
JVMLS takes place next week - be there or be... on YouTube: youtube.com/java That's what I'll do and I can't wait to watch the talks with updates on Babylon, HAT, Valhalla, Lilliput, and so many more. #Java
031
Nicolai Parlog @nipafx.dev · 19/03/2024
When you're about to start live-coding but don't know the API by heart. 😬 www.youtube.com/watch?v=AjjA...
Post-it notes with hand-written code next to a laptop
020
Nicolai Parlog @nipafx.dev · 08/03/2024
Java 22 is coming! Join us on March 19th at 17:00 UTC for a live-stream event to celebrate another great release with technical deep dives, expert guests, a community update, and an exciting announcement. dev.java/community/ja...
0116
Nicolai Parlog @nipafx.dev · 08/02/2024
As always, Jfokus was a blast! I'm so happy to have been invited to talk about the amazing features in Java 21 and newer. Slides from the deep dive with @ammbra1508.bsky.social: slides.nipafx.dev/java-x/2024-... Live coding slides: slides.nipafx.dev/java-x-actio... Code: github.com/nipafx/moder...
160
Nicolai Parlog @nipafx.dev · 10/01/2024
New year - time to go on the road again. 😃 In the coming weeks, I'll be at: * JUG Bielefeld today * JUG Munich on the 15th (www.meetup.com/de-DE/Java-U...) * Voxxed CERN on 21st/22nd * Jfokus (Stockholm) on Feb 5th-7th I'll see you there!
Java's Duke spinning the globe like a ball
151
Nicolai Parlog @nipafx.dev · 15/12/2023
A nice little end-of-year achievement. 😊 Turns out, when you publish videos, people subscribe to your channel - who would've thought? youtube.com/nipafx
020
Nicolai Parlog @nipafx.dev · 13/12/2023
TIL: mvn versions:display-plugin-updates www.mojohaus.org/versions/ver... (From @richardfichtner.bsky.social at IT-Tage)
020
Nicolai Parlog @nipafx.dev · 01/12/2023
Solving today's Advent of Code part 2, I accidentally built a non-deterministic program. 🙈 Can you spot where the non-determinism comes from? (Knowing the problem helps understanding the code but it's not necessary to spot my bug.)
void main() {
	System.out.println(sumCalibrationValues(inputs));
}

int sumCalibrationValues(Collection<String> inputs) {
	return inputs.stream()
		.mapToInt(this::extractCalibrationValue)
		.sum();
}

int extractCalibrationValue(String line) {
	var digits = replaceNumberWords(line)
		.chars()
		// integers [0-9] are in interval [48-57]
		.mapToObj(c -> c - 48)
		.filter(digit -> 0 <= digit && digit <= 9)
		.toList();
	System.out.println(STR."\{line} -> \{digits}");
	return digits.getFirst() * 10 + digits.getLast();
}String replaceNumberWords(String line) {
	for (var pair : numberWords.entrySet()) {
		line = line.replaceAll(pair.getKey(), pair.getValue());
	}
	return line;
}

final Map<String, String> numberWords = Map.of(
	"zero", "0",
	"one", "1",
	"two", "2",
	"three", "3",
	"four", "4",
	"five", "5",
	"six", "6",
	"seven", "7",
	"eight", "8",
	"nine", "9"
);
030
Nicolai Parlog @nipafx.dev · 29/09/2023
Got questions about Java? We're here to answer them! Ask us anything in the replies below ( your question if it was already asked) and we'll answer as many as possible in the Inside Java Newscast on October 19th.
021
Nicolai Parlog @nipafx.dev · 21/09/2023
Couldn't be there on Tuesday for the Java 21 live stream? Or maybe just not the entire 8 hours? No worries, the video is up under the same URL (youtube.com/watch?v=E8NV...) and I just added time stamps, so you can easily skip to the portion you find most interesting. Enjoy!
Screenshot of YouTube chapters:

~~ Chapters ~~
0:00 Countdown
0:23 Java 21 preview
31:29 Playground reveal
1:03:57 Virtual threads tutorial
        #RoadTo21 ⇝    • Java 21 new feature: Virtual Threads ...  
1:37:22 Virtual thread Q&A with Ron Pressler
2:00:02 Virtual thread support by Helidon (Tomas Langer) and Weblogic (Sid Joshi)
2:26:48 CloudWorld Java panel
3:15:17 dev.java community contributions
3:27:48 Pattern matching tutorial
        #RoadTo21 ⇝    • Java21 Brings Full Pattern Matching #...  
3:51:23 Pattern matching Q&A with Brian Goetz
4:29:06 Java 21 performance improvements
        #RoadTo21 ⇝    • Java 21 JVM & GC Improvements #RoadTo21  
4:41:11 Conversation with Geoffrey de Smet
4:59:33 OpenJDK release process with Mark Reinhold
5:31:03 Live at Paris JUG
5:58:49 Live at JUG Karlsruhe
6:23:23 Java 17-21 API improvements
        #RoadTo21 ⇝    • Java 21 API New Features #RoadTo21  
6:40:12 API Q&A with Stuart Marks
7:31:27 Ground floor at Oracle CloudWorld with Georges
050
Nicolai Parlog @nipafx.dev · 15/09/2023
We'll be diving into all the great things 21 has on offer: * virtual threads with Ron Pressler and others * pattern matching with Brian Goetz * performance with Timefold's Geoffrey De Smet * API improvements with Stuart Marks And there's even more! 👇
110
Nicolai Parlog @nipafx.dev · 15/09/2023
Excited for the Java 21 launch? So are we! 🥳 So much so that we'll be talking about it for 8 hours straight: technical explorations, expert interviews, and community voices at JUGs Paris and Karlsruhe. Be there on Tuesday, Sep 19th, 13:00-21:00 UTC! Details: dev.java/community/ja...
230
Nicolai Parlog @nipafx.dev · 28/08/2023
I'm looking forward to a nice end-of-August and busy September: * a small JUG CH tour * presentations at JUG Paderborn and Karlsruhe * a talk at Java Forum Nord * a Java 21 release event on Sep 19th on youtube.com/@java (probably) * live streams on twitch.tv/nipafx See you there! 👋
000
Nicolai Parlog @nipafx.dev · 06/08/2023
010
Nicolai Parlog @nipafx.dev · 08/07/2023
Scripts don't write themselves but there are better places than others to write them. (And arguably better times than Saturday evening but let's ignore that. Look, nice photo!)
A very vertical photo with a laptop, speaker, sunglasses, and a cup at the bottom, then (upwards) a park with lots of people, a treeline with setting sun behind it, and blue sky.
020
Nicolai Parlog @nipafx.dev · 06/07/2023
Companies build JDKs 👶, make them available to their customers or to us, for free or paid, and they may offer commercial support 🛠️ with SLAs, etc. on top of that, possibly for a long time. And that's LTS: a commercial offer by Java vendors for their JDK builds.
A diagram that visualizes what the Twitter thread explained so far
110
Nicolai Parlog @nipafx.dev · 06/07/2023
What happens after these six months? That's up to the OpenJDK community! Rob offers the repo lead role to the community and for some versions (e.g. 11, 17, probably 21) somebody takes over and it is "maintained" (not an official term) for a few more years. Others are abandoned.
A diagram that visualizes what the Twitter thread explained so far
121
Nicolai Parlog @nipafx.dev · 06/07/2023
JDK 21 is backed by jdk fork github.com/openjdk/jdk21 that OpenJDK develops until release. Then, fixes come through github.com/openjdk/jdk21u, which is lead by OpenJDK Updates Project Lead Rob McKenna for the first 6 months after release. That was the case for all JDK releases >9.
A diagram that visualizes what the Twitter thread explained so far
110
Nicolai Parlog @nipafx.dev · 06/07/2023
"Java 21" is misleading. It's short for "Java Platform, Standard Edition 21" but that's just a specification and *can't* get support. Its reference implementation is JDK 21, which *could* but doesn't (more on that 👇) - what does are the JDK 21 builds you download and run.
A diagram that visualizes what the Twitter thread explained so far
110
Nicolai Parlog @nipafx.dev · 22/06/2023
And because you've all asked for case-folded IETF BCP 47 language tags (don't act like you didn't!) `Locale` got the method `caseFoldLanguageTag`: download.java.net/java/early_access…
var lang = Locale.caseFoldLanguageTag("fi-fi");
// prints "fi-FI" (note the RFC5646-correct case)
System.out.println(lang);
100
Nicolai Parlog @nipafx.dev · 22/06/2023
`Locale.availableLocales()` returns a stream of all available locales: download.java.net/java/early_access…
var locales = Locale
	.availableLocales()
	.map(Locale::toString)
	.filter(locale -> !locale.isBlank())
	.sorted()
	.collect(Collectors.joining(", "));
// prints af, af_NA, af_ZA, af_ZA_#Latn, agq, ...
System.out.println(locales);
110
Nicolai Parlog @nipafx.dev · 22/06/2023
An `HttpClient` can now be instructed to `close`, to `shutdown`, or to `awaitTermination` (those are best-effort implementations): download.java.net/java/early_access… It also now implements `AutoCloseable`.
var httpClient = HttpClient.newHttpClient();
// use the client
httpClient.close();

// or call `shutdown` and `awaitTermination`
// yourself for more control:
var httpClient = HttpClient.newHttpClient();
// use the client
httpClient.shutdown();
httpClient.awaitTermination(Duration.ofMinutes(1));

// it also implements `AutoCloseable`
try (var httpClient = HttpClient.newHttpClient()) {
	// use the client
}
211
Nicolai Parlog @nipafx.dev · 22/06/2023
Need to shuffle a `List` in place with a `RandomGenerator`? You can now pass both to `Collections::shuffle` and... it shuffles the list: download.java.net/java/early_access…
var words = new ArrayList<>(List.of("Hello", "new", "Collections", "shuffle", "method"));
var randomizer = RandomGenerator.getDefault();
// using this API makes way more sense, when you're not using the default generator
Collections.shuffle(words, randomizer);
// prints the words above but with 99.17% chance in a different order
System.out.println(words);
110
Nicolai Parlog @nipafx.dev · 22/06/2023
`String`'s new method `splitWithDelimiters` behaves like `split` but includes the delimiters in the returned array: download.java.net/java/early_access…
var hello = "Hello; World";
var semiColonSplit = hello.splitWithDelimiters(";", 0);
//prints [Hello, ;,  World]
System.out.println(Arrays.toString(semiColonSplit));
100
Nicolai Parlog @nipafx.dev · 22/06/2023
`String`'s `indexOf` methods got overloads that take a `maxIndex`: download.java.net/java/early_access…
var hello = "Hello, World";
var earlyCommaIndex = hello.indexOf(",", 0, 3);
// prints "-1"
System.out.println(earlyCommaIndex);
110
Nicolai Parlog @nipafx.dev · 22/06/2023
`StringBuilder` and `StringBuffer` got `repeat` methods, which allow you to add a character sequence or a code point multiple times to the string that is being built: download.java.net/java/early_access…
var builder = new StringBuilder();
builder.append("Hello");
builder.append(", ");
builder.repeat("World", 3);
builder.append("!");
// prints "Hello, WorldWorldWorld!"
System.out.println(builder);
100
Nicolai Parlog @nipafx.dev · 22/06/2023
`Math` got static `clamp` methods that take a `value`, a `min`, and a `max` and return a value that is forced into the `[min, max]` interval: download.java.net/java/early_access…
double number = 83.32;
double clamped = Math.clamp(number, 0.0, 42.0);
// prints "42.0"
System.out.println(clamped);
110
Nicolai Parlog @nipafx.dev · 22/06/2023
`Character` got a few static checks that let you identify emojis, first and foremost `isEmoji`: download.java.net/java/early_access…
var codePoint = Character.codePointAt("😃", 0);
var isEmoji = Character.isEmoji(codePoint);
// prints "😃 is an emoji: true"
System.out.println("😃 is an emoji: " + isEmoji);
110
Nicolai Parlog @nipafx.dev · 08/06/2023
Went out for another sunrise on the last day... 🌅 (That's the last BlueSky pun, I'll start posting some Java later. 😊)
000
Nicolai Parlog @nipafx.dev · 03/06/2023
(Is it allowed to post anything but blue-sky photos here?)
100
Nicolai Parlog @nipafx.dev · 03/06/2023
Not just blue.
220