Archive: 2017

Starting as a new technical lead - Shaping a Team

Posted on by  
Joost van Weenen

Congratulations! Someone has made the wise decision to hire you as the new technical lead. It is an exciting time. You start in a new environment, will be working with a new team and maybe even have to learn new technologies along the way. This can be quite challenging. In the first article I wrote about introducing change. In this second article I want to share my personal views on shaping great teams. As team lead, there are certain values that are just part of me and they way I think about leadership. Fortunately, in JDriven I found a company that matches my values step by step. These values are #commit, #develop and #share. In this article I want to go into some of the values that I consider important to create a great team.

I consider sharing knowledge one of the most important values. Teams consist of people with different experience levels and backgrounds. It should be everyone’s goal to help each other grow and develop. You can share knowledge in many ways. Some examples are pair programming, help troubleshooting/debugging, collaborate on a design or technical sessions or writing articles. By doing this we grow as a team. Where one gains technical skills the other gains leadership skills or new insights. Also don’t forget that even experienced architects can learn about new technologies from new programmers. Asking for help from others also shows that you’re not some all knowing dictator and one man team. Working on complex projects is a team effort that benefits from actively helping each other.

Continue reading →

Slim modular Java 9 runtime Docker image with Alpine Linux

Posted on by  
Riccardo Lippolis

With the release of Java 9, and the introduction of Project Jigsaw (the Java Platform Module System), we no longer have the need for a full-blown JRE to run our Java applications. It is now possible to construct a stripped-down Java Runtime, containing the minimum set of required modules. This allows us to create slim Docker containers without excess baggage. The source code belonging to this blog post can be found at: https://github.com/rlippolis/java9-runtime-image

Our example application consists of two Java 9 modules (basically two JARs, with a module-info.java). We assume the concept of modules is familiar to the reader. If not, you can learn more about it e.g. here: http://openjdk.java.net/projects/jigsaw/ Firstly, we have a backend module consisting of a class which provides us with a String (to keep it simple). The backend module has no explicit dependencies on other modules (only an implicit dependency on java.base). Secondly, we have a frontend module consisting of an executable main class. This class gets the String from the backend and prints it to System.out (again, very straightforward). This module has an explicit dependency on backend, and an implicit dependency on java.base. To see the application in action, build it with Maven (mvn clean package), and run it from the command line:

(or use the provided run-app.sh) The -p option sets the module path (similar to the 'old' classpath). The -m option specifies the module and class to run.

Continue reading →

Starting as a new technical lead - Introducing change

Posted on by  
Joost van Weenen

Congratulations! Someone has made the wise decision to hire you as the new technical lead. It is an exciting time. You start in a new environment, will be working with a new team and maybe even have to learn new technologies along the way. This can be quite challenging. In this two-part article I want to share my personal views regarding Introducing change and shaping teams as a technical lead.

When starting in this new environment you probably bring lots of energy and want to leverage your experience to change things for the better. In my opinion introducing changes in a new environment requires some consideration.

Continue reading →

Awesome Asciidoctor: Use Diagram Block Macro To Include Diagrams

Posted on by  
Hubert Klein Ikkink

With the Asciidoctor diagram extension we can include diagrams that are written in plain text. For example PlantUML or Ditaa diagrams. The extension offers a block processor where we include the diagram definitions in our Asciidoctor document. But there is also a block macro processor. With the block macro processor we can refer to an external file. The file is processed and the resulting image is in our output document.

In the following example we see how to use the block macro for a Ditaa diagram:

Continue reading →

Groovy Goodness: Download Grab Dependencies In IntelliJ IDEA

Posted on by  
Hubert Klein Ikkink

In our Groovy scripts we can use the @Grab annotation. With this annotation we define dependencies for our script and they will be automatically downloaded and added to the class path when we run our script. When we use IntelliJ IDEA we can use a nice intention that is part of the IntelliJ IDEA Groovy support to download the dependencies from our IDE editor. IDEA downloads the dependencies and add it to the project module dependencies. This is useful, because this will also adds code completion for the classes in the dependency to our editor.

Let’s see this with a little example. We have the following Groovy script in our Groovy project in IntelliJ IDEA:

Continue reading →

Serverless Java with AWS Lambda: Introduction

Posted on by  
Niels Dommerholt

Just as we are over the crest of the microservice hype and can finally see how this architectural tool might (or might not) solve our problems the next hype is already here: serverless programming! In this first blog post I’m going to explain what serverless is, what it isn’t, and how it can change the way we create software. In the next posts I’m going to show a few simple examples using a well known 'serverless' platform: AWS Lambda. Originally posted here .

So what is serverless? It’s not uncommon to see developers joke about how silly the term is because there’s obviously still a server right? Of course there is. It’s impossible to run software without a CPU somewhere. So why the name? Well, let’s take a step back in history to how we did things a few decades ago (and how a lot of companies still work!).

Continue reading →

Maven: How to connect with Nexus using HTTPS

Posted on by  
Tom de Vroomen

Maven can be set up to use a private repository, i.e. Nexus. Usually the repository runs on http and there isn’t any problem to connect to the repository, but when the repository runs on https maven isn’t able to connect to it automatically. The solution to this is to add the server’s certificate to the default Java keystore. When connecting to your https-repository fails, Maven will show you an exception like

To resolve this, download the server’s certificate and add it to the default Java keystore. The easiest way to download the certificate is with the Java provided keytool. The following command is an example to download the certificate to a .pem file

Continue reading →

PlantUML Pleasantness: Creating Our Own Sprites

Posted on by  
Hubert Klein Ikkink

PlantUML supports sprites to be used in diagrams. A sprite is text encoded monochrome graphic we can reference using the syntax <$spriteName>. The sprite is defined using hexadecimal values. We can define a set of hexadecimal values to create our sprite, but we can also generate the correct values from for example a PNG image.

We start with a simple example where we create a small triangle using hexadecimal values:

Continue reading →

PlantUML Pleasantness: Layout Elements With Hidden Lines

Posted on by  
Hubert Klein Ikkink

In a previous post we learned how to use a together block to keep elements together. We can also layout elements in a different way: using hidden lines. We define our elements and by using the keyword [hidden] in our line definition the elements are layout as if there was a line, but we don’t see it. This gives us great flexibility on how we layout our elements.

In the following sample we first have a PlantUML definition where we rely on the default layout:

Continue reading →

PlantUML Pleasantness: Use Gradients In Diagrams

Posted on by  
Hubert Klein Ikkink

We have a lot of ways to customize our PlantUML diagrams. We can change the colors and we can even set gradients as color. A gradient has two colors and a direction. The direction of the gradient is set by the separator between the two colors. We can use the following separators to set the gradient direction:

  • /: direction top left to bottom right

  • \: direction bottom left to top right

  • |: direction left to right

  • -: direction top to bottom

Continue reading →

shadow-left