JDriven Blog

The Agile Developer

Posted on by  
Ahmed Albaka

The Dutch are Europe’s champion sitters and we IT workers take the trophy. With an average of just over seven hours per day spent sitting, we’ve become exceptionally good at keeping our butts warm. Even after work. We all know it’s unhealthy, yet breaking a stubborn habit is, well, stubborn. Every time we sit down to log in, it gets a little worse. Sure, some of us are mindful. I often see sit-stand desks set to 'stand', slightly sweaty colleagues returning from an afternoon walk, and the boulderer rolling in with a gym bag. But it’s still nowhere near enough.

Continue reading →

Groovy Goodness: Get Next And Previous Characters

Posted on by  
Hubert Klein Ikkink

Since Groovy 1.8.2 the next and previous methods are added to the Character class. When you invoke the method next on a char or Character instance the next character the next character of the ASCII table is returned. And when you use the previous method the previous character is returned.
Groovy 5 adds an overloaded version of the next and previous method that accepts an int argument. With this argument you can specify the number of characters to skip before returning the next or previous character. For example 'a'.next(2) return 'c' and 'c'.previous(2) returns 'a'.

Continue reading →

The Home That Calls

Posted on by  
Jacob van Lingen

The waves crash upon Eilean Draoidheachd, the Island of Magic. From the mainland it is little more than a shadow, forever veiled in mist and salt-born fog. Sailors whisper that it is cursed, that the storm itself makes its home there. Others speak of endless wind and rain, bound to that shore by some forgotten spell.

But the islanders know better. They tell of An Naoimh, the Holy One, whose breath stirs the clouds and whose voice moves the sea. Some still name her An Cailleach, the ancient crone who weaves her will through storm and silence alike. And when the waves rise higher than the cliffs, they say she is speaking again, chanting her spells into the wind.

Continue reading →

Groovy Goodness: Grouping Iterables Using zip And zipAll

Posted on by  
Hubert Klein Ikkink

Groovy 5 adds the extension methods zip and zipAll for iterables and iterators. Using the method you can combine elements from two collections into a new collection. The new collection contains Tuple2 instances where the values come from the items at the same index from both collections. So the first item of the first collection is grouped with the first item of the second collection. The size of the resulting collection is determined by the size of the smallest collection that is zipped.
With the zipAll method you can combine iterables of different sizes and set default values for missing items. It is possible to set a default value if an item is missing from the first iterable or the second iterable.

Continue reading →

Team dynamics to the rescue!

Posted on by  
Erik Pronk

After 25 years in software engineering, I’ve witnessed many projects, from great success stories to those that never quite lived up to their promise. In our profession, success is not just about technology. Sure, we love our frameworks, CI/CD pipelines, and microservices. But the real power of a high-performing team lies in something much deeper: team dynamics.

In this blog I want to dive into the why, how and what of team dynamics and why it’s such a crucial element in the success of your project or organization.

Continue reading →

The product of Software Development

Posted on by  
Johan Kragt

Over the last few years, the software industry has been in the grasp of an all-overshadowing discussion on the use of AI and LLMs. What started as a fun experiment with ChatGPT showing this “intelligence” was sometimes capable of writing somewhat coherent compiling code has quickly grown into a plethora of LLMs, AIs, IDE plugins and tools built upon AIs influencing (or taking over) every aspect of software development.

While the discussions do address the value and shortcomings of the tools I find myself pondering the effect this will have on our profession more.

Continue reading →

Java Joy: Return Default Value For Null Value

Posted on by  
Hubert Klein Ikkink

Since Java 9 the methods requireNonNullElse and requireNonNullElseGet are part of the java.util.Objects class. The method requireNonNullElse accepts two arguments. The first argument is an object that will be returned if that object is not null. The second argument is an object to be returned when the first argument is null. With this method you can replace the following ternary operator if (a != null) ? a : b (or if (a == null) ? b : a) with Objects.requireNonNullElse(a, b).
The method requireNonNullElseGet allows to define a Supplier function as second argument. The Supplier is only invoked when the first argument is null, so it is lazy and will only be invoked when the first argument is null.

Continue reading →

Java 25: new features in latest LTS

Posted on by  
Thomas de Groot

Java 25 (the new Long Term Support version) was released on September 18th 2025, and with it, some new cool features have been released. Which features are available to help improve my code? In this blog, I will give you a brief introduction to the released features which you can use directly as a developer (previews, experimentals and incubators are not included).

Continue reading →

Nushell Niceties: Encoding And Decoding URL

Posted on by  
Hubert Klein Ikkink

Sometimes you want to transform a string value into a URL encoded value, so it can be used as part of a valid URL. For example a string with spaces or special characters can not be used in a URL as is, but needs to be URL encoded. Nushell has the url encode command to achieve this. You can simple run this command on a string value and the result is a URL encoded value. With the option --all or -a even more special characters like a dot (.) are encoded. The input of the command can be a string value or a list of string values. But it is also possible to use a record or table structure, but then you need to add as extra argument the name or names of the keys or columns of which the string values should be encoded.
Oppossed to URL encoding a value you can also decode a URL encoded value using the url decode command. This command doesn’t have a special option to run. Just like with the url encode command the url decode command works on strings, list of strings, records and tables. If the input is a record or table the name of key or column of which the values must be decoded must be passed as extra arguments.

Continue reading →

shadow-left