Archive: 2021

Production ready Kafka Connect

Posted on by  
Tim te Beek

Kafka Connect is a great tool for streaming data between your Apache Kafka cluster and other data systems. Getting started with with Kafka Connect is fairly easy; there’s hunderds of connectors avalable to intregrate with data stores, cloud platfoms, other messaging systems and monitoring tools. Setting up a production grade installation is slightly more involved however, with documentation at times scattered across the web.

In this post we’ll set up a complete production grade Kafka Connect installation, highlighting some of the choices and configuration quirks along the way.

For illustrative purposes we will set up a JDBC source connector that publishes any new table rows onto a Kafka Topic, but you can substitute any other source or sink connector. All configuration is available on GitHub.

Continue reading →

PlantUML Pleasantness: Change Look-and-feel With Themes

Posted on by  
Hubert Klein Ikkink

When we convert our PlantUML diagrams we get a default look-and-feel for our diagrams that is mostly red and yellow based. We can alter the style and color of individual elements using the skinparam command. But we can also apply so-called themes to our diagram that will alter the look-and-feel of our diagram with a simple theme reference.

We can define the name of the theme in our diagram markup using the !theme directive. Or we can use the command-line option -theme when we generate a diagram from our markup. We can even combine both methods where the end result is also a combination of both themes.

Continue reading →

Single return vs Multiple returns

Posted on by  
Ties van de Ven

Recently I gave a talk that included a slide where I briefly discussed single return vs multiple returns. The purpose of this slide was only to give an example of a dogma and basically had nothing to do with the rest of the talk. Therefore it was kinda funny to see that this particular slide caused a lot of discussion afterwards, so it seems natural to write a blog about this topic.

So…​ should a function only have a single return statement or is it better to allow multiple returns?

Continue reading →

Quantum software engineering

Posted on by  
Erik Pronk

Will Quantum Technology change the world of Software Engineering completely?

Let’s start by saying that I am no expert in the field of Quantum technology. I am just very interested in what the possible impact of this shift in technology will be in our field of Software Engineering.

If you would like to know more about the basics of Quantum technology, I highly recommend checking out the website of the QuTech Academy for further reading.

In this blog I am sharing my thoughts on how Quantum Technology can impact the world of Software engineering and hopefully inspire you to think about the possibilities that lie ahead.

Continue reading →

Zero Trust for developers

Posted on by  
Kees Nederkoorn

Zero Trust; you’ve probably, at the very least, heard of the term. Some may have worked on a project where a Zero Trust policy was in effect, and others may well be working for a company with a company wide Zero Trust policy in effect. But do you know what Zero Trust actually entails? And if you know, do you know how best to develop software that has to comply to a Zero Trust policy?

Depending on your level of exposure to Zero Trust, you may well have had a bad experience with it, may not want to have anything to do with it, or may not want to develop in such an environment at all. If you had a bad experience, it is most likely due to the company or project not understanding the Zero Trust methodology and implementing it incorrectly; but that is a subject for different blog post. Regardless of your experience with (or opinion of) Zero Trust, this post will give you some helpful hints on how to best develop for a Zero Trust environment.

Continue reading →

Propagating the Spring SecurityContext to your Kotlin Coroutines

Posted on by  
Riccardo Lippolis

Spring Security provides a lot of convenience to develop secure web applications. However, it relies strongly on a SecurityContext stored in a thread-local (inside the SecurityContextHolder class). If not mitigated, this causes issues in multi-threaded contexts. When using Kotlin Coroutines, there is an additional abstraction layer where you don’t really know (and don’t want to know) on which thread(s) your code will be running. Luckily, there is a relatively easy solution!

Continue reading →

Inhale, exhale, release

Posted on by  
Jacob van Lingen

In the modern western world, a watered down version of Haṭha yoga is becoming more and more populair. Many describe the focus on physical posture and breathing techniques to be both pleasant and calming. In everyday’s world of stress and deadlines, a moment to relax and release can come for some not often enough. If you ask your common developer about ‘release’ though, chances are high they do not talk of relaxation but of stress and hard work. I was thinking about this when I wanted to release a Gradle based Java FP library I am writing for my specialization.

Continue reading →

How tech culture can contribute to growth

Posted on by  
Erik Pronk

In my last blog How tech culture can contribute to quality I focused on how passion and motivation builds a tech culture. This helps people develop themselves in a positive way while organisations are more successful in delivering high quality solutions. So basically everyone wins. In this post I want to dive into how we can help educate the community in a way that they understand not only what to do with certain knowledge, but also why things work in a specific way.

Continue reading →

Configure Hikari Connection Pool when using AWS RDS IAM

Posted on by  
Tom de Vroomen

Amazon Web Services offers a way to connect to a MySQL or PostgreSQL database without having a password, instead an authentication token can be used.
Within AWS this type of authentication is called RDS IAM.
Users don’t need to store an username and password and credentials don’t need to be stored in the database, which makes this a secure authentication method.

So, this makes it interesting to use this in your Spring Boot application. Spring Boot will use a HikariCP connection pool by default, but HikariCP 4.0.3 doesn’t support the use of authentication tokens.

So, how do I make this work within my Spring Boot application?

  1. Enable RDS IAM for your database

  2. Create a custom Hikari DataSource

  3. Update application properties

Continue reading →

Create a Docker image running Robot Framework

Posted on by  
Justus Brugman

Robot Framework is easy enough to set up. When you have Python installed on your system, it can be as easy as running pip install robotframework && pip install robotframework-appiumlibrary. This is not how I want to do it. For this intro, I want to run the Robot Framework in a Docker image.

Robot Framework is a generic open source automation framework. It can be used for robotic process automation (RPA), and also for acceptance level testing and acceptance test-driven development (ATDD). In this blog I want to focus on the first steps to start working with it.

Continue reading →

Register your Avro Schemas in Production with Schema Registry Maven Plugin

Posted on by  
Tim te Beek

Apache Kafka is often used together with Confluent Schema Registry, as the schema registry allows you to store and retrieve your Avro, JSON Schema and Protobuf schemas for Kafka message (de)serialization. By storing a versioned history of schemas for topic values, with configurable enforced compatibility, you ensure producers and consumers can continue to exchange compact serialized messages even as schemas evolve.

By default, client applications automatically register new schemas. If they produce new messages to a new topic, then they will automatically try to register new schemas. This is very convenient in development environments, but in production environments we recommend that client applications do not automatically register new schemas. Best practice is to register schemas outside of the client application to control when schemas are registered with Schema Registry and how they evolve.
— On-Premises Schema Registry Tutorial
On Auto Schema Registration

Continue reading →

shadow-left