It seems like it’s never been easier to start writing a simple program that can be turned into a more advanced one as development progresses. Let’s explore possibilities delivered by JDK 23 release…
A Stream API meets the requirements for most standard use cases, but when an additional complex conditional transformation is required, these steps lead to a complex definition of a terminal function, which is represented by the use of a Collector. Such collector usage can be not only difficult to understand but also difficult to maintain. In other words, there is an obvious lack of ability to define advanced intermediate operations on the pipeline…
The factory design may be a good fit for many cases but it may also create obstacles due to the pattern code centralized nature. In this post we review how to shift an object initiation process across various parties with creational pattern builder and JEP-455…
The newest release JDK 23 comes with a neat extension to pattern matching for switch and instanceof statements, JEP-455: Primitive Types in Patterns, instanceof and switch. While the introduction of pattern matching can be considered a crucial element in moving the Java platform into a functional paradigm, it introduced several limitations…
Lately released JDK 23 has arrived together with great collection of new enhancements. This blog post reviews one particular, namely JEP-482: Flexible contructors bodies. This JEP is one of many kicking the Java platform into a long-term pursuit of a functional programming style. How? Let’s review Factory method, one of the most used creational design patterns…
The power of observability becomes visible when you combine signals and put it all together. Checks performed by Checkly can provide a piece of the puzzle that gives you a better view of what is happening.
Based on my previous post I have been in contact with Checkly about two parts that were not working as expected. I have some updates on these topics today.
This week I came across Checkly, a code-first synthetic monitoring solution that can do API checks and browser checks using PlayWright. It would have saved me a lot of time if this had been around 8 years ago.
The blog post, part of the Project Code Green series, explores how AI tools like ChatGPT function, focusing on concepts such as Large Language Models (LLMs), vectors, semantic meaning, and the attention mechanism. It aims to provide a foundational understanding of AI’s role in sustainable software development.
Curious about how much energy your code consumes? In this blog, we explore the impact of software efficiency on energy consumption and introduce Project Code Green, a research initiative aimed at optimizing code for sustainability using AI tools. Dive in to learn how careful code optimization can not only save energy but also sharpen your development skills.
Recently, our director Roy van Rijn, was featured in a CBC article discussing Neuralink’s ambitious data compression challenge. Read his vision on the complexities of the challenge in this blog post.
An announcement was made at GrafanaCON. Alloy is introduced in the family of Grafana tools. Alloy is an open source distribution of the OpenTelemetry Collector, but is will also replace Promtail.
Grafana Scenes can enhance your experience with Grafana dashboards by bringing observability data together and guiding users to the right data. But how to get started with Grafana Scenes? In this blog post, I will share several tips based on my experience over the last few months.
Last year I was involved in the investigation of major incidents where I used Promtail, Loki and Grafana to find the cause. Colleagues asked: Can you share the setup you use locally? Of course, and I shared a zip file with a docker-compose.yml and some config files. That is what I want to share with Observability Toolkit.
One of the great things about OpenTelemetry is the standardisation of span attributes and resource attributes. An example of this is deployment.environment. With Grafana Faro you can configure the environment. This adds the environment variable to the setup. The data is sent as logs and as traces. The logs include the environment attribute which you can find as `app_environment1 attribute.
With Grafana Scenes it is possible to create more than just dashboards. There are options to create dashboards that guide the user. But how do you start developing with Grafana Scenes? One trend is to develop remotely, rather than on your local machine. Let’s see how we can combine this.
As shown in my previous post, you can add Grafana Faro to get more information about users who visit a website, in my case my own blog. But what kind of data is available now?
This blog is the Part 2 of the “Communication our APIs” series. In this part we implement a Recipes API based on Code First, API First and Consumer First methodologies and analyze how each approach impacts the interactions between a fictional provider and consumer.
This blog is the Part 1 of the “Communication our APIs” series. It explores communication involved during API development, along with practical tips to enhance it.
If you use Hugo to create a blog or website, as I do, and you use GitHub Pages to host the blog, it is hard to get observability signals in your usual observability stack.
This blog explores fine-tuning GPT-2 to generate scientific abstracts, comparing its efficiency and accuracy with custom transformer models, demonstrating GPT-2’s superior performance in text generation quality and training time.
In short, this post explains why and how Foojay with a group of enthusiastic people from OpenValue and other organizations is implementing a new sort of developer certification that objectively measures dev skills. We also invite you to join our initiative if your interested via #certification on the Foojay slack
This blog article covers the SOLID principle, a set of guidelines for creating maintainable and scalable object-oriented code. It outlines each of the five components, their benefits, and includes Java examples to demonstrate their implementation.
Recently at work guidelines were being developed for the department. Part of those guidelines were related to SonarQube quality gates that would be used inside of our CI/CD pipelines. I noticed during the discussion that even though everyone agrees that code coverage is not a direct measure of quality, it is still quite hard to argue that it therefore should not be part of the quality gate. I decided to write down my thoughts in a bit more of a structured way to see if I can convince my peers.
OpenValue’s 11 team has visited JavaOne 2022 in Las Vegas. One talk given, over hundred of sessions attended and a couple of weeks to let it soak in later - here is what we have to share with you!
by Sebastian Konieczek and Miro Wengner and Christoph Ahlers and Yevgeniy Sanitskiy and Alexei Bratuhin
Tekton CI/CD is all about leveraging your existing Kubernetes cluster to build, test and deploy your applications and uses the same syntax as you’re used to when creating resources on Kubernetes using YAML.
Managing available resources on demand in a cloud environment can be a very challenging topic. It is worth the effort, since it may however utilize resources far more efficiently. Companies or projects are therefore very keen to migrate to the cloud providers, such as Azul, AWS, Google Cloud or others….
The goal of this article is to examine known facts about an upcoming Java threading model extension. No, no-worries, the current java threading model remains but behind the curtains something good is already knocking . Yes, we are talking about JEP-425: Virtual Threads…
About a year ago Rabobank started fully embracing Kotlin. This change happened due to the efforts of a small group of engineers who thought Kotlin is a fun but powerful language that could benefit Rabobank a great deal.
In the age of cloud computing it is very handy to have the ability to run very simple web-server. A simple web-server that delivers static content, like JSON, read more…
The article investigates the code verbosity in three different JVM languages. It examines a program selection control mechanism in naive factory pattern implementation. For the example puroses the command-line is used for compiliation and programs execution…
Spring Core on JDK9+ is vulnerable to remote code execution, as described in CVE-2022-22965, also known as Spring4Shell. But what is Spring4Shell? How does it work? What types of attacks are possible and which mitigations exist? We’ll answer these questions in this article.
Time is running forward without any compromises and the six month JDKrelease period is over. Similar to people expecting spring and nice weather, the Java community is excited about the next SE and JDK release that holds number 18. Yes, Java 18 is here and in this article we explore the most important changes together with features added since the preview.
How to verify your Kotlin project in a Kotlin way? Simone is talking about test coverage and about style linter. Wouldn’t it be great if we can really use Kotlin in the full spectrum and use tools that support those features?
In the time of cloud and distributed applications it is becoming more and more important to be able to evaluate a functionality at runtime, an aspect which is referred to as observability. A cloud based application is usually set up as the collection of different subsystems that may be located in one or more network zones or machines. These subsystems communicate between each other by passing messages (signals) and executing desired actions to each other. The whole collection then appears to the end user as a single coherent system.
How do you build a career as a speaker? What are the ingredients for a great talk? Why is sharing knowledge important? Watch this interview with our CTO Bert Jan Schrijver and learn how to kickstart your speaking career.
Log4Shell (CVE-2021-44228) is a zero-day vulnerability in Log4j, a popular Java logging framework. But what is the Log4Shell vulnerability? How does it work? What types of attacks are possible and which mitigations exist? Watch this video for answers!
We developed our website using the Hugo framework. The result is a server-side generated, static HTML website while keeping control of reusable code snippets.
Nowadays the IT world often spells terms like SRE or latencies, but how to measure this in an accurate way without relying on ‘random’ samples. The goal of this article is to examine the possibilities of profiling a Kotlin and a similar Java application with Java Flight Recorder to get a better understanding of their behavior compared to each other.
Most modern software teams strive for Continuous Delivery of business impact with a DevOps mindset: you build it, you run it. With short iterations and continuous feedback loops, teams deploy new software to production daily. But how about the role of a software architect in such a fast-paced world? With daily deployments, is there even time for software architecture?
There are hundreds, if not thousands of blogs, papers, videos and talks that describe how and what to test and especially why! In my talk I want to shed light on possible reasons for test fatigue and show possible solutions on how test coverage can be increased in large enterprise projects and how developers can enjoy testing more!
Debugging distributed systems is not easy. When two components don’t play nice together, the cause could be virtually anything: software, DNS, routing, firewalls, proxies, load balancers, TLS.. and more! In this talk, I’ll share my experience with debugging distributed systems. We’ll look at typical issues and I’ll introduce a structured ways to debug those issues and find their root causes.
When you’re building (micro)services, you have lots of framework options. Spring Boot is no doubt a popular choice. But there’s more! Take Quarkus, a framework that’s considered the rising star for Kubernetes-native Java. It always depends what’s best for your situation, but how to choose the best solution if you’re comparing 2 frameworks?
Kotlins ecosystem for server-side development is growing very fast. While Spring is also hopping on the Kotlin train, the rest of Kotlins ecosystem is growing fast. More and more new frameworks are popping up implementing different point of views on how to build your service. Those new frameworks might change our ways of developing back-end applications. Lets have a look out there!
During this talk we’ll explore several algorithms that can be used to make a program play games, we’ll start simple (Tic Tac Toe) and as the games get harder, the A.I.’s need to become smarter.
Sending emails or receiving and processing emails is something that a lot of applications feature to their users. But how do you know that the code doing this actually works? GreenMail is an open source, intuitive and easy-to-use suite of mock email servers for testing purposes. In this presentation you will learn how to leverage GreenMail to manually and integration test your email functionality.
In this talk, I will show you how you can connect your remote Java application with your local IDE to start debugging. You’ll learn how to use SSH to connect to a secured environment for debugging and profiling the Java application. And I’ll also show you some easy tricks, you can use for your future analyzing sessions. After this talk, you’ll be ready to start remote debugging Java applications yourself!
In the past 20 years I’ve been able to work with many developers. Together we’ve worked on very large to the tiniest of projects, from huge corporate applications to simple web forms that deliver enormous business value. From beautiful new ‘greenfield’ applications to software written long before I was born.
Most developers love working with command-line interfaces (CLI’s) to speed up and automate tasks. But how about building a beautiful and feature rich CLI in a JVM language? Sounds impractical, since JVM languages need a virtual machine to run on. Well, not anymore! With Clikt and GraalVM, it is possible to create these CLIs with ease, and even create native platform binaries for every major platform architecture.
We write tests to tackle bugs, verify functionality and to ease maintenance. Using code coverage as our metric we might deem ourselves safe and our tests flawless. But how can we be sure that our tests are okay? In this talk we will enter the world of mutation testing. We will cover mutation tools, how they work, how to get started and how to integrate it in your builds.
The Java HotSpot compilers support a suite of advanced optimizations to enable high performance programs. Some of these optimizations include method inlining, removing unnecessary checks and loop unrolling. The compiler does this at different times, but what do you already know about these optimizations? In this talk, Ill test your knowledge of different optimizations via an interactive quiz.
With the rise of Distributed Architecture, independent DevOps teams and automated CI/CD the End-to-End test environments needs to be reconsidered. They become flaky, shaky, untrustworthy and hard to maintain. Why are End-to-End test environments a dead End road and what are the alternatives.
The first time I used Shazam (the music matching app) it felt just like that: pure magic. The app shortly listens with the microphone and tells you which song is playing. After a weekend of studying, reading scientific papers and experimenting and coding: I had a working Shazam clone written in Java. During this talk I’ll reveal what I’ve learned and what algorithms and tricks being used.
REST is a great convention on paper, but is it actually good enough for today’s variety of clients like web, mobile, IoT etc? Is there a better alternative? GraphQL’s query language can drastically change the way you think about data models and state-management. In this talk we’ll learn how to put GraphQL (Java) in front of an existing Java REST backend and how to introduce compile time coupling between clients and server.
Concurrent software is hard to get right, as we’ve seen in the previous article, “When flows split”. Concurrency is even harder to express. Most concurrent code is being written in a way that makes our heads spin every time we need to read it. Let us see how Kotlin helps us write concurrent code that is clearer and more efficient from the start.
A computer program is a nicely ordered flow of instructions, executed one after the other from start to finish… Except when it is not. We often wish to split this flow. Let’s see why and when to do it.
Cypress is a complete end-to-end testing experience for anything that runs in a browser. Cypress promises to be more developer friendly than Selenium; let’s see if that’s true. In this session we’ll show how we’ve used Cypress to make feature development easier at a Dutch education company, write end-to-end tests at a Kenyan healthcare company, and test individual components at bol.com.
Spring Boot has been around for some time and still seems to be the most popular framework when it comes to building modern web applications. Similarly about Kotlin language. It’s not as old as Spring framework but it’s been highly accepted and used by many developers. In this post, we’ll look at moving from Java Web MVC to Kotlin WebFlux.
When working on microservices in the Java ecosystem, especially using Spring (Boot), you will notice the long start-up time that applications will have, let alone the high memory consumption they will have. Looking at a framework such as Micronaut could help out to reduce this overhead without loosing any developer’s productivity. Let’s dive into it!
This article will cover a deep learning introduction and create a ML model that will be able to classify Star Wars aircrafts in just a few lines of code using Java Specification Request #JSR-381 (“JSR-381”).
We started OpenValue almost 2 years ago. One of the key values of our company is sharing knowledge. Next to fun and craftsmanship. This all comes together with our activities in the international Java community. I’ll explain why.