Rafael Winterhalter
@rafaelcodes.bsky.social
software consultant who likes static typing, coding at http://github.com/raphw 🇧🇻🇩🇪🇪🇺
Reposted by Rafael Winterhalter
That was for developer interview...
"I was 30 seconds away from running malware on my machine." Malware hidden in the Code exercise.
blog.daviddodda.com/how-i-almost...
"I was 30 seconds away from running malware on my machine." Malware hidden in the Code exercise.
blog.daviddodda.com/how-i-almost...
How I Almost Got Hacked By A 'Job Interview'
I was 30 seconds away from running malware, Here's how a sophisticated scam operation almost got me, and why every developer needs to read this.
blog.daviddodda.com
October 17, 2025 at 7:11 AM
That was for developer interview...
"I was 30 seconds away from running malware on my machine." Malware hidden in the Code exercise.
blog.daviddodda.com/how-i-almost...
"I was 30 seconds away from running malware on my machine." Malware hidden in the Code exercise.
blog.daviddodda.com/how-i-almost...
Tried to give an introduction on the class file API that explains it to anybody working with Java: vimeo.com/1115458585 Courtesy of JavaZone. Thanks for having me.
Java Just Got Easier - Rafael Winterhalter
This is "Java Just Got Easier - Rafael Winterhalter" by JavaZone on Vimeo, the home for high quality videos and the people who love them.
vimeo.com
September 3, 2025 at 9:53 PM
Tried to give an introduction on the class file API that explains it to anybody working with Java: vimeo.com/1115458585 Courtesy of JavaZone. Thanks for having me.
Reposted by Rafael Winterhalter
Wow, TIL that LISTEN/NOTIFY in Postgres requires a global lock when committing transactions issuing a NOTIFY. Consider listening to the WAL via logical replication as an alternative with no impact on the write path.
www.recall.ai/blog/postgre...
www.recall.ai/blog/postgre...
July 11, 2025 at 7:09 AM
Wow, TIL that LISTEN/NOTIFY in Postgres requires a global lock when committing transactions issuing a NOTIFY. Consider listening to the WAL via logical replication as an alternative with no impact on the write path.
www.recall.ai/blog/postgre...
www.recall.ai/blog/postgre...
Reposted by Rafael Winterhalter
"Towards a JSON API for the JDK"
New proposal on the core-libs-dev list for adding a basic JSON API to #Java. That would be a more than welcome addition, in particular considering the envisioned usage once member patterns will be available. Make it So 🤩!
mail.openjdk.org/pipermail/co...
New proposal on the core-libs-dev list for adding a basic JSON API to #Java. That would be a more than welcome addition, in particular considering the envisioned usage once member patterns will be available. Make it So 🤩!
mail.openjdk.org/pipermail/co...
May 18, 2025 at 3:00 PM
"Towards a JSON API for the JDK"
New proposal on the core-libs-dev list for adding a basic JSON API to #Java. That would be a more than welcome addition, in particular considering the envisioned usage once member patterns will be available. Make it So 🤩!
mail.openjdk.org/pipermail/co...
New proposal on the core-libs-dev list for adding a basic JSON API to #Java. That would be a more than welcome addition, in particular considering the envisioned usage once member patterns will be available. Make it So 🤩!
mail.openjdk.org/pipermail/co...
Reposted by Rafael Winterhalter
Here's something I want but am too lazy to build: Take a picture of a huge pile of Lego, and get me a classification of what brick belongs to which set. The manual equivalent is quite something.
May 10, 2025 at 9:07 AM
Here's something I want but am too lazy to build: Take a picture of a huge pile of Lego, and get me a classification of what brick belongs to which set. The manual equivalent is quite something.
Reposted by Rafael Winterhalter
We just integrated a performance improvement to Java String that will provide a ~10x performance boost in some applications where Strings are used as keys and where the associated values are constant foldable. This will make JDK 25 faster.
github.com/openjdk/jdk/...
github.com/openjdk/jdk/...
April 22, 2025 at 3:14 PM
We just integrated a performance improvement to Java String that will provide a ~10x performance boost in some applications where Strings are used as keys and where the associated values are constant foldable. This will make JDK 25 faster.
github.com/openjdk/jdk/...
github.com/openjdk/jdk/...
Reposted by Rafael Winterhalter
Do I understand it correctly that the central-publishing-maven-plugin intends to replace the nexus-staging-maven-plugin? But not necessarily the maven-release-plugin? How would one otherwise handle tagging in Git? I'm confused.
April 9, 2025 at 4:08 PM
Do I understand it correctly that the central-publishing-maven-plugin intends to replace the nexus-staging-maven-plugin? But not necessarily the maven-release-plugin? How would one otherwise handle tagging in Git? I'm confused.
Reposted by Rafael Winterhalter
We’d love to see more talk proposals rolling in for #JavaZone2025!
Got something interesting to share? Big or small, wild or practical — we want to hear it! 🙌
2025.javazone.no/en/...
Got something interesting to share? Big or small, wild or practical — we want to hear it! 🙌
2025.javazone.no/en/...
April 7, 2025 at 11:19 AM
We’d love to see more talk proposals rolling in for #JavaZone2025!
Got something interesting to share? Big or small, wild or practical — we want to hear it! 🙌
2025.javazone.no/en/...
Got something interesting to share? Big or small, wild or practical — we want to hear it! 🙌
2025.javazone.no/en/...
My first question on Stack Overflow in four years. Any ideas why Kotlin reflect cannot observe an annotation if a class's "flag" is 6 and not 7? stackoverflow.com/questions/79...
Dynamically added annotation is not visible to Kotlin reflection
I am working with a Java agent that is adding an annotation dynamically to a class file. When this class file is a Kotlin class, and if it is investigated by Kotlin reflection, the annotation does ...
stackoverflow.com
March 23, 2025 at 9:45 PM
My first question on Stack Overflow in four years. Any ideas why Kotlin reflect cannot observe an annotation if a class's "flag" is 6 and not 7? stackoverflow.com/questions/79...
What frustrates me most about Kotlin and Scala is their closed world perspective on their own tooling. Java byte code is well-defined and easy to interop. It should not be hard to add an annotation to a class, but with Kotlin it somehow is: discuss.kotlinlang.org/t/dynamicly-...
Dynamicly added annotations are not visible
I am trying to add support for kotest for a test intelligence tool. To do so, I need to be able to add the Ignored annotation to classes dynamically using a Java agent, but the annotation seems to not...
discuss.kotlinlang.org
March 21, 2025 at 7:48 PM
What frustrates me most about Kotlin and Scala is their closed world perspective on their own tooling. Java byte code is well-defined and easy to interop. It should not be hard to add an annotation to a class, but with Kotlin it somehow is: discuss.kotlinlang.org/t/dynamicly-...
Reposted by Rafael Winterhalter
All folks who speak at conferences should read this and think long and hard about whether they want to risk speak in the US in the future.
Also anyone who works while traveling.
comicon.com/2025/03/18/f...
Also anyone who works while traveling.
comicon.com/2025/03/18/f...
March 19, 2025 at 10:02 AM
All folks who speak at conferences should read this and think long and hard about whether they want to risk speak in the US in the future.
Also anyone who works while traveling.
comicon.com/2025/03/18/f...
Also anyone who works while traveling.
comicon.com/2025/03/18/f...
Catch of the day: The Kafka client for Java logs a bunch of things on info level that likely should be debug, which resulted in Splunk logging for millions of crowns of repetitive things nobody needs. I argue that libraries should never log anything on the info level.
March 19, 2025 at 11:42 AM
Catch of the day: The Kafka client for Java logs a bunch of things on info level that likely should be debug, which resulted in Splunk logging for millions of crowns of repetitive things nobody needs. I argue that libraries should never log anything on the info level.
Reposted by Rafael Winterhalter
@vonderleyen.ec.europa.eu Here’s a potent idea for Europe: allow member states to charge VAT on online ads served within their borders. Why should platforms like Meta earn ad revenue from EU audiences without paying VAT locally?
March 7, 2025 at 8:19 PM
@vonderleyen.ec.europa.eu Here’s a potent idea for Europe: allow member states to charge VAT on online ads served within their borders. Why should platforms like Meta earn ad revenue from EU audiences without paying VAT locally?
Reposted by Rafael Winterhalter
One of my most radical political positions is that online ads should be treated like addictive substances (alcohol) and have something like 100% VAT.
This doesn’t exist because governments can’t technically charge VAT for online ads served in the country.
This doesn’t exist because governments can’t technically charge VAT for online ads served in the country.
March 7, 2025 at 5:26 PM
One of my most radical political positions is that online ads should be treated like addictive substances (alcohol) and have something like 100% VAT.
This doesn’t exist because governments can’t technically charge VAT for online ads served in the country.
This doesn’t exist because governments can’t technically charge VAT for online ads served in the country.
Finally found the time to make Mockito a proper named module: github.com/mockito/mock...
jdk.unsupported can still be used, but if Mockito is added as an agent and the package is not imported elsewhere, it still works fully without it on official API in the instrumentation API.
jdk.unsupported can still be used, but if Mockito is added as an agent and the package is not imported elsewhere, it still works fully without it on official API in the instrumentation API.
Add support for including module-info in Mockito. by raphw · Pull Request #3597 · mockito/mockito
Adds module-info.java to describe module descriptor.
github.com
March 3, 2025 at 8:50 AM
Finally found the time to make Mockito a proper named module: github.com/mockito/mock...
jdk.unsupported can still be used, but if Mockito is added as an agent and the package is not imported elsewhere, it still works fully without it on official API in the instrumentation API.
jdk.unsupported can still be used, but if Mockito is added as an agent and the package is not imported elsewhere, it still works fully without it on official API in the instrumentation API.
Reposted by Rafael Winterhalter
🎓 We are so happy that our great friend Rafael Winterhalter (@rafaelcodes.bsky.social) will be back to Sofia and will give his talk: "Exploring the Java Class File API"!
🗓️ 14-15 May, 2025
📍 Sofia, Bulgaria 🇧🇬
🎫 Grab your pass: jprime.io/tickets
🗓️ 14-15 May, 2025
📍 Sofia, Bulgaria 🇧🇬
🎫 Grab your pass: jprime.io/tickets
February 26, 2025 at 12:54 PM
🎓 We are so happy that our great friend Rafael Winterhalter (@rafaelcodes.bsky.social) will be back to Sofia and will give his talk: "Exploring the Java Class File API"!
🗓️ 14-15 May, 2025
📍 Sofia, Bulgaria 🇧🇬
🎫 Grab your pass: jprime.io/tickets
🗓️ 14-15 May, 2025
📍 Sofia, Bulgaria 🇧🇬
🎫 Grab your pass: jprime.io/tickets
Reposted by Rafael Winterhalter
Dette kan du gjøre for å støtte Ukraina: Trykk på «republiser-knappen» - slik at flest mulig får vite om den politiske markeringen på mandag.
February 20, 2025 at 3:34 PM
Dette kan du gjøre for å støtte Ukraina: Trykk på «republiser-knappen» - slik at flest mulig får vite om den politiske markeringen på mandag.
Reposted by Rafael Winterhalter
💘 Roses are red, commits turn green, JavaZone’s stage is calling—be seen! 💘
Every bug fix, late-night hack, and production horror story deserves an audience.
Your code has a story—share it at #JavaZone2025!
💌 talks.javazone.no/
ℹ️ https://2025.javazone.no/en/speaker
#JavaZone
Every bug fix, late-night hack, and production horror story deserves an audience.
Your code has a story—share it at #JavaZone2025!
💌 talks.javazone.no/
ℹ️ https://2025.javazone.no/en/speaker
#JavaZone
February 14, 2025 at 11:06 AM
💘 Roses are red, commits turn green, JavaZone’s stage is calling—be seen! 💘
Every bug fix, late-night hack, and production horror story deserves an audience.
Your code has a story—share it at #JavaZone2025!
💌 talks.javazone.no/
ℹ️ https://2025.javazone.no/en/speaker
#JavaZone
Every bug fix, late-night hack, and production horror story deserves an audience.
Your code has a story—share it at #JavaZone2025!
💌 talks.javazone.no/
ℹ️ https://2025.javazone.no/en/speaker
#JavaZone
So Apple.tv has no Android app, but if you open it in the browser, it automatically routes to /us. This I have to replace with /no manually, otherwise the page crashes loading a language bundle for a popup. Did someone make this page in Dreamweaver? Severance better be a good show.
January 30, 2025 at 6:12 PM
So Apple.tv has no Android app, but if you open it in the browser, it automatically routes to /us. This I have to replace with /no manually, otherwise the page crashes loading a language bundle for a popup. Did someone make this page in Dreamweaver? Severance better be a good show.
It took another release to iron out some issues with the Class File API Integration. Also, Byte Buddy now offers improved support for using constantdynamic in instrumentation, with fallback to invokedynamic if not yet available. github.com/raphw/byte-b...
Release Byte Buddy 1.17.0 · raphw/byte-buddy
Assure that implicit choice for class reader and class writer are always symmetric with regard to internal representation.
Retrofit MemberSubstitution to also allow for intercepting invokedynamic i...
github.com
January 30, 2025 at 10:36 AM
It took another release to iron out some issues with the Class File API Integration. Also, Byte Buddy now offers improved support for using constantdynamic in instrumentation, with fallback to invokedynamic if not yet available. github.com/raphw/byte-b...
I made a mistake in my changed build and 1.16.1 now offers the actual support for this.
Byte Buddy 1.16.0 now integrates the Java Class File API and is therefore compatible with any future JDK that retains its instruction set, without activating the experimental flag. github.com/raphw/byte-b...
Release Byte Buddy 1.16.0 · raphw/byte-buddy
Allow for erasure of types of bootstrapped methods in Advice within instrumented class. Rework Advice post-processing to allow for erasure of bootstrapped methods. Fix missing application of hashCo...
github.com
January 19, 2025 at 11:09 AM
I made a mistake in my changed build and 1.16.1 now offers the actual support for this.
Byte Buddy 1.16.0 now integrates the Java Class File API and is therefore compatible with any future JDK that retains its instruction set, without activating the experimental flag. github.com/raphw/byte-b...
Release Byte Buddy 1.16.0 · raphw/byte-buddy
Allow for erasure of types of bootstrapped methods in Advice within instrumented class. Rework Advice post-processing to allow for erasure of bootstrapped methods. Fix missing application of hashCo...
github.com
January 17, 2025 at 11:48 PM
Byte Buddy 1.16.0 now integrates the Java Class File API and is therefore compatible with any future JDK that retains its instruction set, without activating the experimental flag. github.com/raphw/byte-b...
Finally released the first version of my ASM-JDK bridge. It's as close as can be a drop-in replacement for ASM's ClassReader and ClassWriter where the alternative implementations use the JDK class file API in the JDK, and allow for limited forward compatibility. github.com/raphw/asm-jd...
GitHub - raphw/asm-jdk-bridge
Contribute to raphw/asm-jdk-bridge development by creating an account on GitHub.
github.com
January 17, 2025 at 9:26 PM
Finally released the first version of my ASM-JDK bridge. It's as close as can be a drop-in replacement for ASM's ClassReader and ClassWriter where the alternative implementations use the JDK class file API in the JDK, and allow for limited forward compatibility. github.com/raphw/asm-jd...