JDriven Blog

OpenAPI: Different API versions with Springdoc

Posted on by  
Michel Breevoort

With Springdoc you can create a Swagger UI and generate the OpenAPI spec file. In a project it is a good practice to support version n - 1 of the API for backwards compatibility. The problem is that some objects have the same name and then the last parsed object is used for all versions in the OpenAPI spec. In this post the solution with definitions is shown.

Continue reading →

Of wizards and functional magic

Posted on by  
Jacob van Lingen

Do you like stories? Tales that move you out of the ordinary into the extraordinary. Do you take satisfaction in programming? Where every bit, every keystroke means exactly one very thing. Do you esteem transparent functionality above all else? Then read on, to get introduced to a land of farmers, magick and wizards. But its wizards are programmers and its sorcery is called F#…​

Continue reading →

How to: Generic Derivation

Posted on by  
Chiel van de Steeg

A short story from reflection to shapeless

Coming from a Java background, reflection to me was a useful, albeit highly advanced tool in daily work. Being mostly used in libraries and frameworks, understanding its possibilities and usages was usually enough for me.

While advancing my career and moving to the scala ecosystem I learned about the existence of macros as a kind of compile-time reflection, used mostly by libraries. Still, it being a highly advanced language feature and not very ergonomic for daily programming, I felt more comfortable in the regular code world.

Then, during the development of a certain feature for the client I was working at, I felt the code I had written was so much boilerplate, there should be a way to shorten what I’ve written (unfortunately I cannot remember exactly what that was about, but it definitely had to do with some kind of mapping between data and their corresponding case classes…​). In Java I would have tried my hand at reflection to extract and generate POJO’s, which could be done in scala as well, but I’ve always felt reflection isn’t the right tool for custom written production code, it being a slow, purely runtime process, which is never optimized by the compiler. I asked a senior colleague if using a macro to extract the field names and values would be a way to solve this, since it would bring me some compile-time safety. He then introduced me to the shapeless library, and the rabbit-hole opened up.

Continue reading →

Why you should stop making Breadcrumbs

Posted on by  
Kees Nederkoorn

Breadcrumb navigation, known to some as cookie crumb navigation or navigational path to others, where a path like structure is displayed, most commonly at the top of the current page, that typically shows you the path of pages that you as the user took to get to the page where you are now is a well known staple of many websites. And, when implemented properly, is a very helpful feature on many websites. But for every good implementation there is a bad one, and all the bad ones are there usually due to an age old mistake: trying to fix a problem by addressing the symptoms instead of solving the actual underlying problem. A problem that should not have been here in the first place. A problem that even the good implementations usually fail to address which in turn has created a much larger problem.

Continue reading →

The problem with Functional Programming

Posted on by  
Ties van de Ven

Let me start off with saying I love functional programming. Although.. A better way of saying it would be I love what functional programming brings me. It reduces complexity, the code is nice and explicit and it eliminates certain bugs from occurring. But there are a few things that I wanted to discuss regarding functional programming.

Continue reading →

A Sense Of Reactive Streams

Posted on by  
Casper Rooker

In this blog post, I want to clear up some fuzziness that seems to surround Reactive Streams. It is all too easy to defeat the goals that can be achieved with Reactive Streams, especially where the application is part of an environment with both synchronous and asynchronous inputs and outputs.

Continue reading →

shadow-left