Showing posts with label Devoxx. Show all posts
Showing posts with label Devoxx. Show all posts

Thursday, 1 May 2025

Links related to VoxxedDays Amsterdam

I had some links to useful websites that I needed to put somewhere.

Apache Calcite

It seems to be a kind of proxy that you can put between your application and your data layer. It allows for data manipulations, for example using SQL, and your data layer can be anything (and frequently is). If there's an Adapter for it, you can connect Calcite to your data thing. If there isn't you have to write your own adapter.

https://calcite.apache.org/

Cursor - The AI Code Editor

What it says on the box.

https://www.cursor.com/

Micrometer

A system to check what your software is doing (in the field).

https://micrometer.io/

Github - Oracle - graalvm-reachability-metadata

Find out if there's support for certain frameworks in the GraalVM for Native using this list.

https://github.com/oracle/graalvm-reachability-metadata

Baeldun - Code Snippets in Java API Documentation

Besides Markdown syntax in JavaDoc in the new versions of Java, it is also possible to add code snippets to your javadoc.

I think it's interesting. It would for example be a good idea to add a code snippet in the JavaDoc that refers to a specific Class in your testset.

https://www.baeldung.com/java-doc-code-snippets

GitLab - BeyondxScratch - hexagonal-architecture-java-springboot

There was a talk about hexagonal architecture, that I seem to have seen before.

https://gitlab.com/beyondxscratch/hexagonal-architecture-java-springboot

StarWars REST API

An interesting little website that can provide REST services about the Star Wars films. If you want to quickly test some REST responses. (Their certificate seems to have expired though)

Coolify - Self-hosting with superpowers.

What is says on the box. Easily selfhosting a cloud environment.

https://coolify.io

Cheap dedicated servers, cloud & hosting from Germany

Kind of an standard hosting company, but they seems to have Server Auctions? Buy some cloud with refurbished hardware, is basically the idea. I thought that was interesting.

https://www.hetzner.com/

Thursday, 10 April 2025

VoxxedDays Amsterdam - Roundup

How to survive as a developer in the exponential age of AI - Sander Hoogendoorn

Technical Debt

Ward Cunningham said it as follows:

The danger occurs when the debt is not repaid. Every minute spent on code that is not quite right for the programming task of the moment counts as interest on that debt.

Entire engineeering organizations can be bought to a stand-still under the debt load of an unfactored implementation, object-oriented or otherwise.

Shipping first-time code is like going into debt.

A little debt speeds development so long as it is paid back promptly with refactoring.

Have you gone MADR? - Johan Hutting

Short blurb on Javadoc. Markdown now suppported in new Java versions.

Also was very interested in the new @snippet javadoc tag.

See for more information on MADR at https://adr.github.io/madr/

MADR stands for Markdown Architectural Decision Records

Bring the Action: Using GraalVM in Production - Alina Yurenko

Nice deep dive about the different things they're working on.

There's a list of libraries that have some sort of support regarding metadata at https://github.com/oracle/graalvm-reachability-metadata.

Quotes

A code generation tool that gets you 80-90% of the way there is like a boat that takes you 80-90% of the way.

You'll need to be a strong swimmer.

Jason Gorman

If debugging is the process of removing bugs, then programming must be the process of putting them in.

Edsger W. Dijkstra

References

VoxxedDays Amsterdam
https://amsterdam.voxxeddays.com/
MyBlog - Voxxed days amsterdam 2025
https://randomthoughtsonjavaprogramming.blogspot.com/2025/04/voxxed-days-amsterdam-2025.html

Tuesday, 19 November 2024

Peak of Complexity

So, I was at Devoxx 2024. During the opening keynotes, Brian Goetz spoke regarding Peak of Complexity.

You can find it below at [1].

It's important to me on a personal level, as I do tend to make things more complex than they should be.

Often times, it means I overengineer my solutions and program for exceptional situations that are unlikely to occur.

One of those overengineered ways of thinking happened today.

A colleague asked if he was doing it right. He was reading in an XML file of about 5000 entries in a Batch process.

  1. First I thought we should use a stream, build the stream ourselves, so we can have an XMLReader that provides us each piece of information we need without loading the entire thing in memory.
  2. Then I found out that it's bloody hard to make your own streams. A default builder in the JDK uses a SpinedBuffer which is basically an ArrayList containing ArrayLists. Which means the entire thing is still read into memory.
  3. So I thought I could use a simple Consumer. The Consumer gets a new one from the XMLReader when he has one available.
  4. Then I found out that that doesn't really mesh well with the Batch Reader process. So I started thinking about using an iterator, instead of an Consumer.
  5. But in the end, after everything's said and done, the XML file contains only 5000 entries, and the entries are not very complex and the whole thing could be put into a List of simple POJOs. So now it's just a simple List.

Once again, in the end, I've managed to whittle it down to the simplest solution, but it would be nice if I started from the simplest solution, and only increase complexity when needed.

I guess I still need to work at it.

References

[1] Postcards from the Peak of Complexity by Brian Goetz
https://www.youtube.com/watch?v=Yiye8lqh0Ig

Monday, 14 October 2024

Devoxx 2024 - Writeup

So, I went to Devoxx 2024 and I thought it would be good idea to write up what I've witnessed, and what I've missed and thought was interesting.

What I would have liked to see

And since these things are available on the Internet, I'll see about viewing them afterwards.

Notes

The Security Manager will be removed, which makes sense. It's one of the last things left over from the "Java Apps running in your Browser" - days. Nowadays, all the security takes place in dockers and containers and operating systems etc.

JEP stands for Java Enhancement Proposal. But these can be very different. Apparently there are "Process" JEPs and "Informational" JEPS (for example JEP 14).

StringTemplates was removed from the JDK for now, next iteration of the design in the works soonish.

With the new Memory API, there's a focus on making it secure, because a lot of security breaches and hackers make use of badly written code that messes with memory. The white house even published something about it. See the references. In the future there might even be a Draft JEP for it "Integrity by Default".

In the early days, arithmetic and memory fetch had the same cost. Nowadays the CPUs are soo fast, arithmetic has a much faster operation speed, than a memory fetch. This needs to be taken into account when designing language features.

Quotes

Some relevant quotes that I picked up during talks, always fun:

“We do these things not because they are easy, but because we thought they would be easy.”
“I apologize for writing you a long letter. I did not have time to write a short one.”
- Blaise Pascal
“Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.”
- Antoine de Saint-Exupéry

References

Sheets - Java 23 Better Language, Better APIs, Better Runtime
https://slides.nipafx.dev/java-x/#/
Sheets - Memory API patterns, use cases and performance
https://speakerdeck.com/josepaumard/memory-api-patterns-use-cases-and-performance
Devoxx Google Cloud
https://cloud.google.com/developers/devoxxbelgium
WebForJ
https://documentation.webforj.com
Martin Fowler - Anemic Domain Model
https://martinfowler.com/bliki/AnemicDomainModel.html
Github - DevoxxGenie
https://github.com/devoxx/DevoxxGenieIDEAPlugin
IntellIJ Plugins - DevoxxGenie
https://plugins.jetbrains.com/plugin/24169-devoxxgenie
Amsterdam Voxxeddays
https://amsterdam.voxxeddays.com/
Google Notebook
https://notebooklm.google.com/?pli=1
Oracle Cloud
https://go.oracle.com/LP=144680
OpenJDK - JEP 14: The Tip & Tail Model of Library Development
https://openjdk.org/jeps/14
Crafting AI Prompts Framework - Adversarial Prompting
https://craftingaiprompts.org/documentation/adversarial-prompting#adversarial-prompting
Project Valhalla
https://openjdk.org/projects/valhalla/
The White House - Press Release: Future Software Should Be Memory Safe
https://www.whitehouse.gov/oncd/briefing-room/2024/02/26/press-release-technical-report/
Quarkus In Action
https://developers.redhat.com/e-books/quarkus-action
The best Java 22 feature: concurrent gathering
https://softwaregarden.dev/en/posts/new-java/gatherers/concurrent/
GitHub - Modern Java In Action
https://github.com/nipafx/modern-java-demo

Sunday, 6 October 2024

Devoxx 2024

Hello, there!

I am going to Devoxx 2024, in Antwerpen for the entire week (starting coming Monday, 6th October 2024). It's been quite a while since I went to a conference (two years?) and the last time I went to Devoxx is in 2019 (which was five years ago).

I'll try and write some blogposts on it.

Thursday, 14 November 2019

Devoxx 2019 - wrapup

I just thought I'd mention the sessions I saw, and the sessions that are on my "todo" list.

That which is Seen

Rust for Java Developers - by Paul Watson, Andy Bell
It's always a good thing to learn a new programming language. Rust is similar to C, with an interesting take on no-garbage-collectors and all sorts of goodies. Compiles to native.
The Web is on 🔥 F.I.R.E. 🔥 !!! - by Noël Macé
Progressive Web Apps, new standards that are not standard yet, but already available in Chrome or Chrome Canary.
Broken Buildtools and Bad Behaviors; The Maven Story - by Robert Scholte
An interesting take on what to do and what not to do with Maven.
Money, Money, Money, can be funny with JSR 354 - by Werner Keil
A bit boring, but only until you realize what kind of freakish money and money rules there are out there. Already it's available in standard Java, and there's no good reason not to use it.
Solving Memory Leaks in the JVM - by Kirk Pepperdine
just as it says, a very good explanation also about how the memory management in Java works.
Java 9 and Beyond - by Venkat Subramaniam
Hey, it's Venkat, always good.
Evolving a Pragmatic, Clean Architecture - A Craftsman's Guide - by Victor Rentea
a lot of the lessons seem hauntingly familiar. Some pieces were unknown. Some things I had doubts about.
Welcome to LWorld: The current state of value types in Java - by Tobi Ajila
a very good entry-level and advanced lecture about the new value inline types
Collections Corner Cases - by Stuart Marks
An awesome talk about things I didn't know, but have been using for ages.
What's coming in Scala 3 - by Josh Suereth, James Ward
Very interesting and advanced, must be easier for people who have more familiarity with Scala.
Why We Hate Java Serialization And What We're Doing About It - by Stuart Marks, Brian Goetz
Some ideas about extending Serialization to how it should have been. Right now only a rough plan.
A Gentle Introduction to Angular Schematics - by Matt Raible
Basically the stuff you can use to adapt the Angular CLI to what you want it to do. Think "templates" on speed.
The time relativity principle - by Jakub Marchwicki
Useful if only for the fact that we get up to some strange shenanigans when it comes to timezones
Ask the Java Architect - by Brian Goetz, Stuart Marks
Always fascinating to find out the reasons behind the new designs for Java.
Advancements in Angular - by Jeremy Elbourn
Fascinating talk on the internals by a core member of Google Angular team
Is your AI plotting to kill you? Why AI and Machine Learning is dangerous - by Ben Vermeersch
A nice talk for the tin-foil hat people, and people interested in finding out the weaknesses of AI en how to beat AI at their own game.
How to get properly hacked! - by Julien Topçu
informative, but most things I already knew. The xml entities hack was new for me, though.
From Java to Golang, the journey of the nexuzhealth team - by Dylan Meeus
fascinating talk about the pitfalls of moving to Golang. A little short on information on how to convert large legacy systems.
Java Language Futures: Late 2019 Edition - by Brian Goetz
Always a pleasure.

That which is Unseen

Exploring Collectors - by Venkat Subramaniam
It's Venkat!
Top Tips for Terrible Tech Talks - by Chet Haase
Heard good things about it.
Project Loom: Helping Write Concurrent Applications on the Java Platform - by Ron Pressler
Because Project Loom sounds interesting.
More Than a Query Language: SQL in the 21st Century - by Markus Winand
Learn things about SQL that you didn't know existed.
The 7 biggest mistakes we made in 10 years of running a major open source project. - by Roel Spilker, Reinier Zwitserloot
Colleagues liked it.
The past, present and future of the Java type system - by Alasdair Collinson
As Venkat put it, will we ever see a List<int>?
RSA is Dead. Long Live BB84! - by James Birnie
Because encryption is cool.
Beyond ByteBuffers - by Brian Goetz
ByteBuffers are bad? Really?
Memory footprint of a Java process - by Andrei Pangin
Perhaps could be interesting.

References

YouTube - Devoxx
https://www.youtube.com
Devoxx.be
https://devoxx.be/

Monday, 4 November 2019

Devoxx 2019

Hello, there!

I am currently at Devoxx 2019, in Antwerpen for the entire week.

I'll try and write some blogposts on it.

Tuesday, 13 November 2018

Devoxx 2018 - Deep Dive - Day One

Just writing down the sessions I followed, and some notes regarding the sessions.

Implementing Microservices with Jakarta EE and MicroProfile

The one point of issue that I had with the talk, is that it decided to tackle two issues. The talk was regarding JakartaEE and how to get about moving JavaEE over to Open Source, and what it takes. The talk was also about Eclipse MicroProfile. For me as a novice it is very hard afterwards to separate the characteristics of the two. I'm likely to mix it up.

It might have been better, if possible, to split the two items up into two talks.

JakartaEE

What I heard was that they are attempting to have an Eclipse Glassfish 5.1 version available on December 15th of this year, build from Open Source JavaEE specification 8.

There is already a staggering amount of building taking place of the different components in JakartaEE, see the EE4J CI/CD Progress2.

They're looking into getting JCP Standards Process replaced by "Something Else" called "Specification Process 1.0", because obviously they need some sort of process in place for JakartaEE. Hopefully without any of the problems that made JCP too slow.

The JNoSQL project is the guinea pig for the new Process.

They have TCK - test cases suites - to determine if application servers follow the specs.

Code First Mentality is what seems to work. Like Hibernate and Spring prove that something works very well, then standardize it and include it in Jakarta EE.

JakartaEE is apparently moving away from reference implementations.

It's going to be Community driven.

Eclipse MicroProfile

The project started as a way to easily move forward with JavaEE, without waiting for standards to catch up and to see what is possible. To get something quickly, the things implemented first was CDI+JAXRS+JSONP, in order to get some microservices running.

So we are already familiar with the Full Profile and the Web Profile regarding Application Servers. The MicroProfile is kind of like that, but without the whole application server behind it.

It's for quick progress and less about standards. The speed is quite impressive, 7 major releases in 2 years of existence. Features based on the "the honour system". If you say that it works, and that you've tested it, that's good enough.

This in stark contrast with Jakarta EE, a (future) standard with 1-2 major releases per year.

He did mention a cool article1 about what MicroProfile is bringing to JakartaEE.

Microservices

Now I am a novice when it comes to using microservices, how, when, where, etc.

Some interesting examples on how microservices are implemented:

Netflix
is running hundred and hundreds of microservices.
another company
could get by without with only 20 microservices that by definition might be a little more bulky.
third company

A good example of the use of microservices, is a company in Prague that computed hashes for passwords for people logging in. Apparently there were peaks in the system, for example when a new feature was announced, and people wanted to check what it did. It causes peaks, so the simple microservice for computing password hashes was deployed on every machine imaginable across all the branches of the company.

It's an excellent example of a very simple microservice that is computation intensive, without a lot of state required.

Java Streams vs. Reactive Streams: Which, When, How, and Why?

Venkat Subramaniam is a great speaker, and this was the first time I encountered him. The talk was amazing about the difference and common ground about the two. But also why you should use it, and when. Highly recommended.

Functional Exception Handling in Java with Vavr

A short talk but insightful. It basically boils down to using a Tuple to indicate success (the result value) or an error (the exception value) as a good work around of the fact that we cannot throw exceptions in lambdas.

Seems to be like the pattern used by Optional.

A Dozen Ways to Hack Your Brain to Write Fluently

It boils down to write a little bit, as soon as possible, and build it out from there.

There was a lot mroe to it than that, but I did not manage to follow the entire talk.

Exploring Java Heap Dumps

It was great. Apparently the Netbeans Java Profiler provides an API that makes it possible to drill down into the heap dumps you get to find out what the problem is. This way you can actually write a software application specifically for your problem and your application and attuned to your data model.

It can analyse the heap dump for you, but the javadoc specifically states for all functions in the API whether it can complete in normal time, or that the method you are using may require a long time (because it needs to access the entire heap dump).

It was actually not that big of an API. Apparently it is just a single package directory in the Netbeans Profiler source.

References

[1] How The MicroProfile Community Will Shape Jakarta EE
https://www.lightbend.com/blog/how-the-microprofile-community-will-shape-jakarta-ee
[2] JakartaEE CI/CD
https://ci.eclipse.org/
Getafix: How Facebook tools learn to fix bugs automatically
https://code.fb.com/developer-tools/getafix-how-facebook-tools-learn-to-fix-bugs-automatically/

Thursday, 8 November 2018

Attending Devoxx Belgium 2018

I shall be attending the Devoxx Belgium 2018 Java Conference in Antwerp, from 12th - 16th of November 2018.

My first time.

References

Devoxx Belgium 2018
https://devoxx.be/