<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Martin on Martin Ahrer</title><link>https://www.martinahrer.at/author/martin/</link><description>Recent content in Martin on Martin Ahrer</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 30 Sep 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://www.martinahrer.at/author/martin/index.xml" rel="self" type="application/rss+xml"/><item><title>Java 25 major language and API improvements</title><link>https://www.martinahrer.at/2025/09/30/java-25-major-language-and-api-improvements/</link><pubDate>Tue, 30 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2025/09/30/java-25-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java ㉕ has been released in September 2025.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API, the Java language, and the JVM introduced with Java Java ㉕.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview, follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>Java 24 major language and API improvements</title><link>https://www.martinahrer.at/2025/08/27/java-24-major-language-and-api-improvements/</link><pubDate>Wed, 27 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2025/08/27/java-24-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java ㉔ has been released in March 2025.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API, the Java language, and the JVM introduced with Java Java ㉔.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview, follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>Java 23 major language and API improvements</title><link>https://www.martinahrer.at/2025/08/26/java-23-major-language-and-api-improvements/</link><pubDate>Tue, 26 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2025/08/26/java-23-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java ㉓ has been released in September 2024.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API, the Java language, and the JVM introduced with Java ㉓.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview, follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>OpenTelemetry Backend</title><link>https://www.martinahrer.at/2025/03/29/opentelemetry-backend/</link><pubDate>Sat, 29 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2025/03/29/opentelemetry-backend/</guid><description>&lt;div class="paragraph">
&lt;p>The previous &lt;a href="https://www.martinahrer.at/code/spring-boot-open-telemetry.html">post&lt;/a> introduced OpenTelemetry and the OpenTelemetry collector (aka otel-collector) which is acting as gateway to the backends persisting emitted log, metrics, and trace data.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>With this post we have a more detailed look at the collector’s configuration and how it connects to the various databases&lt;/p>
&lt;/div></description></item><item><title>Spring Boot OpenTelemetry</title><link>https://www.martinahrer.at/2025/03/14/spring-boot-opentelemetry/</link><pubDate>Fri, 14 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2025/03/14/spring-boot-opentelemetry/</guid><description>&lt;div class="paragraph">
&lt;p>As applications and architectures become increasingly complex, monitoring application health is more critical than ever. Developers, support teams, and site reliability engineers need real-time insights into performance metrics, logs, and execution traces to ensure smooth operations.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>Traditionally, achieving this required integrating multiple frameworks and tools for data collection, analysis, and visualization—often leading to fragmented solutions.&lt;/p>
&lt;/div></description></item><item><title>Building Docker Images with bake</title><link>https://www.martinahrer.at/2024/12/03/building-docker-images-with-bake/</link><pubDate>Tue, 03 Dec 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/12/03/building-docker-images-with-bake/</guid><description>&lt;div class="paragraph">
&lt;p>Platform engineers and build pipeline engineers constantly are faced with the challenge of building container images for providing images to be used as application base or for running pipeline tasks. Probably such images have to be provided as multiple variants for multiple versions of software packages to be included.&lt;/p>
&lt;/div></description></item><item><title>Docker Multiplatform Build</title><link>https://www.martinahrer.at/2024/09/12/docker-multiplatform-build/</link><pubDate>Thu, 12 Sep 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/09/12/docker-multiplatform-build/</guid><description>&lt;div class="paragraph">
&lt;p>The Arm CPU architecture is getting more and more popular even on desktop developer devices.&lt;/p>
&lt;/div>
&lt;div class="quoteblock">
&lt;blockquote>
A comparative analysis of Arm, AMD, and Intel costs in the Amazon cloud has shown that Graviton2 processors can be significantly more cost-efficient than other platforms. The study compared the 16xlarge instances based on the m6g (Graviton2, Arm), m5a (EPYC1, AMD), and m5n (Xeon Cascade Lake, Intel) for the 64-vCPU count. Not only are the Arm-based instances cheaper than AMD and Intel, they can achieve 40% better performance per dollar when translating the time to completion of SPEC tests to hours and multiplying the result by hourly cost.
&lt;/blockquote>
&lt;div class="attribution">
— https://bell-sw.com/blog/application-cost-reduction-with-arm-servers
&lt;/div></description></item><item><title>Java 22 major language and API improvements</title><link>https://www.martinahrer.at/2024/09/10/java-22-major-language-and-api-improvements/</link><pubDate>Tue, 10 Sep 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/09/10/java-22-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java 22 has been released in March 2024.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API, the Java language, and the JVM introduced with Java 22.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview, follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>Java 21 major language and API improvements</title><link>https://www.martinahrer.at/2024/09/09/java-21-major-language-and-api-improvements/</link><pubDate>Mon, 09 Sep 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/09/09/java-21-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java 21 has been released in September 2023.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API, the Java language, and the JVM introduced with Java 21.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview, follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>Java 20 major language and API improvements</title><link>https://www.martinahrer.at/2024/09/06/java-20-major-language-and-api-improvements/</link><pubDate>Fri, 06 Sep 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/09/06/java-20-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java 20 has been released in March 2023.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API, the Java language, and the JVM introduced with Java 20.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview, follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>Java 19 major language and API improvements</title><link>https://www.martinahrer.at/2024/09/02/java-19-major-language-and-api-improvements/</link><pubDate>Mon, 02 Sep 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/09/02/java-19-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java 19 has been released in September 2022.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API, the Java language, and the JVM introduced with Java 19.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview, follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>Java 18 major language and API improvements</title><link>https://www.martinahrer.at/2024/08/29/java-18-major-language-and-api-improvements/</link><pubDate>Thu, 29 Aug 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/08/29/java-18-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java 18 has been released in March 2022.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API, the Java language, and the JVM introduced with Java 18.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview, follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>Java 17 major language and API improvements</title><link>https://www.martinahrer.at/2024/08/26/java-17-major-language-and-api-improvements/</link><pubDate>Mon, 26 Aug 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/08/26/java-17-major-language-and-api-improvements/</guid><description>&lt;div class="sect1">
&lt;h2 id="_java_lts_release_adoption">Java LTS Release Adoption&lt;/h2>
&lt;div class="sectionbody">
&lt;div class="paragraph">
&lt;p>Before we go into details of the enhancements and additions of Java ⑰ lets briefly look at new relic’s yearly State of the Java Ecosystem &lt;a href="https://newrelic.com/resources/report/2024-state-of-the-java-ecosystem">2024 report&lt;/a>.&lt;/p>
&lt;/div>
&lt;div class="imageblock">
&lt;div class="content">
&lt;img src="https://www.martinahrer.at/assets/2024/2024-newrelic-state-of-the-java-ecosystem.png" alt="new relic 2024 State of the Java Ecosystem"/>
&lt;/div>
&lt;/div>
&lt;div class="paragraph">
&lt;p>Even though Java ⑰ LTS was released in September 2021, in 2023 only ~19% of the projects have been using it.
Java ⑧ still had a share of 33%. and Java ⑪ was the dominant release with ~56%.&lt;/p>
&lt;/div></description></item><item><title>Java 16 major language and API improvements</title><link>https://www.martinahrer.at/2024/08/25/java-16-major-language-and-api-improvements/</link><pubDate>Sun, 25 Aug 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/08/25/java-16-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java ⑯ has been released in March 2021.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API, the Java language, and the JVM introduced with Java ⑯.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview, follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>Java 15 major language and API improvements</title><link>https://www.martinahrer.at/2024/08/23/java-15-major-language-and-api-improvements/</link><pubDate>Fri, 23 Aug 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/08/23/java-15-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java ⑮ has been released in September 2020.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API, the Java language, and the JVM introduced with Java ⑮.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview, follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>Java 14 major language and API improvements</title><link>https://www.martinahrer.at/2024/08/22/java-14-major-language-and-api-improvements/</link><pubDate>Thu, 22 Aug 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/08/22/java-14-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java ⑭ has been released in March 2020.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API, the Java language, and the JVM introduced with Java ⑭.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>Java 13 major language and API improvements</title><link>https://www.martinahrer.at/2024/08/08/java-13-major-language-and-api-improvements/</link><pubDate>Thu, 08 Aug 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/08/08/java-13-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java ⑬ has been released in September 2019.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API, the Java language, and the JVM introduced with Java ⑬.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview, follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>Java 12 major language and API improvements</title><link>https://www.martinahrer.at/2024/08/06/java-12-major-language-and-api-improvements/</link><pubDate>Tue, 06 Aug 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/08/06/java-12-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java ⑫ has been released in March 2019.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API and the Java language introduced with Java ⑫.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview, follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>Java 11 major language and API improvements</title><link>https://www.martinahrer.at/2024/07/24/java-11-major-language-and-api-improvements/</link><pubDate>Wed, 24 Jul 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/07/24/java-11-major-language-and-api-improvements/</guid><description>&lt;div class="sect1">
&lt;h2 id="_java_lts_release_adoption">Java LTS Release Adoption&lt;/h2>
&lt;div class="sectionbody">
&lt;div class="paragraph">
&lt;p>Before we go into details of the enhancements and additions of Java ⑪ lets briefly look at new relic’s yearly State of the Java Ecosystem &lt;a href="https://newrelic.com/resources/report/2024-state-of-the-java-ecosystem">2024 report&lt;/a>.&lt;/p>
&lt;/div>
&lt;div class="imageblock">
&lt;div class="content">
&lt;img src="https://www.martinahrer.at/assets/2024/2024-newrelic-state-of-the-java-ecosystem.png" alt="new relic 2024 State of the Java Ecosystem"/>
&lt;/div>
&lt;/div>
&lt;div class="paragraph">
&lt;p>Even though Java ⑪ LTS was released in 2018, in 2020 only ~11% of the projects have been using it.
Java ⑧ was still the dominant Java release.
In 2023 usage was still at 33% and only dropped to around 28% in 2024.&lt;/p>
&lt;/div></description></item><item><title>Java 10 major language and API improvements</title><link>https://www.martinahrer.at/2024/07/19/java-10-major-language-and-api-improvements/</link><pubDate>Fri, 19 Jul 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/07/19/java-10-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java ⑩ has been released in March 2018.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API and the Java language introduced with Java ⑩.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>For a more complete overview follow the links in the following sections referring to the official Oracle release documents.&lt;/p>
&lt;/div></description></item><item><title>Java 9 major language and API improvements</title><link>https://www.martinahrer.at/2024/07/16/java-9-major-language-and-api-improvements/</link><pubDate>Tue, 16 Jul 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/07/16/java-9-major-language-and-api-improvements/</guid><description>&lt;div class="paragraph">
&lt;p>Java ⑨ has been released in September 2017 and is the first release starting a new release cycle with a new release every 6 months.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>The following content is summarizing the most important changes to the Java API and the Java language introduced with Java 9.&lt;/p>
&lt;/div></description></item><item><title>Generating AsciiDoc using a Java annotation processor</title><link>https://www.martinahrer.at/2024/07/15/generating-asciidoc-using-a-java-annotation-processor/</link><pubDate>Mon, 15 Jul 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/07/15/generating-asciidoc-using-a-java-annotation-processor/</guid><description>&lt;div class="paragraph">
&lt;p>In the past I have helped a number of customers with their journey of migrating their Java 8 based applications to Java 17 (and Java 21 later on).
I came up with the idea of creating a slide deck covering the major Java language and API improvements to teach my customers and give some motivation to move on to the latest Java releases.&lt;/p>
&lt;/div></description></item><item><title>Hashicorp Nomad native workload</title><link>https://www.martinahrer.at/2023/02/25/hashicorp-nomad-native-workload/</link><pubDate>Sat, 25 Feb 2023 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2023/02/25/hashicorp-nomad-native-workload/</guid><description>&lt;div class="paragraph">
&lt;p>Earlier this week I presented my talk &amp;#34;&lt;em>Need something simpler than Kubernetes?&lt;/em>&amp;#34; to the &lt;a href="https://community.cncf.io/events/details/cncf-linz-presents-cloud-native-linz-feb-21-kubernetes-alternatives/">CNCF Linz community&lt;/a>.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>This post is a follow-up explaining how to deploy a native workload to Nomad.
Nomad is unique because of its hybrid support for many types of workload.
While Kubernetes has been designed for managing container-only workloads,
Nomad’s &lt;a href="https://developer.hashicorp.com/nomad/docs/drivers">pluggable task drivers&lt;/a> allows scheduling container, Java, native (raw), QEMU/KVM, etc. workloads.&lt;/p>
&lt;/div></description></item><item><title>Detect and alert common vulnerabilities and exposures (CVE) in 3rd-party dependencies</title><link>https://www.martinahrer.at/2022/08/03/detect-and-alert-common-vulnerabilities-and-exposures-cve-in-3rd-party-dependencies/</link><pubDate>Wed, 03 Aug 2022 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2022/08/03/detect-and-alert-common-vulnerabilities-and-exposures-cve-in-3rd-party-dependencies/</guid><description>&lt;div class="paragraph">
&lt;p>Using 3rd-party libraries makes developer’s lives so much easier but can turn them into a nightmare when they are unmanaged and we don’t have a good understanding what is being used in a project or even a larger organization.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>A few months ago we have seen quite a few popular frameworks widely used in many software products being hit by severe CVE (common vulnerabilities and exposures).&lt;/p>
&lt;/div></description></item><item><title>Hashicorp Nomad with Consul service discovery</title><link>https://www.martinahrer.at/2022/07/26/hashicorp-nomad-with-consul-service-discovery/</link><pubDate>Tue, 26 Jul 2022 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2022/07/26/hashicorp-nomad-with-consul-service-discovery/</guid><description>&lt;div class="paragraph">
&lt;p>With my previous &lt;a href="https://www.martinahrer.at/code/hashicorp-nomad-service-discovery.html">post&lt;/a> I demonstrated how simple it is to connect services through Nomad’s service discovery support.
I promised to follow-up showing this with Consul providing the service registry and use Consul’s service discovery.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>Le’s look into the &lt;a href="https://www.nomadproject.io/docs/job-specification/service#service-parameters">service stanza&lt;/a> documentation.
The &lt;code>provider&lt;/code> key allows 2 different values.
We already used &lt;code>nomad&lt;/code> implementing the Nomad service registry.
Before Nomad 1.3 only &lt;code>consul&lt;/code> was a supported service registry.
This was the default for this key and would register the service with the Consul service registry.
So we would go ahead and just would set &lt;code>provider = &amp;#34;consul&amp;#34;&lt;/code> for the &lt;code>api&lt;/code> and the &lt;code>db&lt;/code> service.&lt;/p>
&lt;/div></description></item><item><title>Hashicorp Nomad service discovery</title><link>https://www.martinahrer.at/2022/07/25/hashicorp-nomad-service-discovery/</link><pubDate>Mon, 25 Jul 2022 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2022/07/25/hashicorp-nomad-service-discovery/</guid><description>&lt;div class="paragraph">
&lt;p>With the recently released Nomad 1.3 a service registry backed by Nomad was added.
This is making building complex services dependent on others really easy.
Earlier we typically would have added Hashicorp Consul as service registry.
In a production environment that would have meant to a add a Consul cluster running along with the Nomad cluster.
Obviously this comes with some costs even when running such a cluster is really made simple by Hashicorp.&lt;/p>
&lt;/div></description></item><item><title>Introduction to Hashicorp Nomad</title><link>https://www.martinahrer.at/2022/07/20/introduction-to-hashicorp-nomad/</link><pubDate>Wed, 20 Jul 2022 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2022/07/20/introduction-to-hashicorp-nomad/</guid><description>&lt;div class="paragraph">
&lt;p>In the past 2 years I successfully architected and developed a new product for a customer and brought it to production. This product uses Hashicorp’s job scheduler &lt;a href="https://www.nomadproject.io/">Nomad&lt;/a> for managing workload.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>Nomad is an excellent alternative to Kubernetes.
It is known for its simplicity in regard to usage and maintainability and allows to schedule containerized and non-containerized applications.&lt;/p>
&lt;/div></description></item><item><title>TDD for infrastructure with ignite + firecracker</title><link>https://www.martinahrer.at/2020/10/01/tdd-for-infrastructure-with-ignite--firecracker/</link><pubDate>Thu, 01 Oct 2020 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2020/10/01/tdd-for-infrastructure-with-ignite--firecracker/</guid><description>&lt;div class="paragraph">
&lt;p>This is the last post in the series of posts about TDD for infrastructure.
If you wanted to follow along I recommend first reading &lt;a href="https://www.martinahrer.at/code/tdd-for-infrastructure-vagrant.html">TDD for infrastructure with Vagrant&lt;/a> and then &lt;a href="https://www.martinahrer.at/code/tdd-for-infrastructure-footloose.html">TDD for infrastructure with footloose&lt;/a>.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>In the previous post &lt;a href="https://www.martinahrer.at/code/tdd-for-infrastructure-footloose.html">TDD for infrastructure with footloose&lt;/a> I explored weaveworks&amp;#39; footloose to start containers that look like virtual machines.
Containers do no quite cope with the isolation that a real virtual machine can provide.
So in case we must use a real virtual machine we can go back to the approach with VirtualBox (or any other product) or investigate into other options.&lt;/p>
&lt;/div></description></item><item><title>TDD for infrastructure with footloose</title><link>https://www.martinahrer.at/2020/09/01/tdd-for-infrastructure-with-footloose/</link><pubDate>Tue, 01 Sep 2020 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2020/09/01/tdd-for-infrastructure-with-footloose/</guid><description>&lt;div class="paragraph">
&lt;p>In the previous post &lt;a href="https://www.martinahrer.at/code/tdd-for-infrastructure-vagrant.html">TDD for infrastructure with Vagrant&lt;/a> I explored Vagrant, VirtualBox and Chef Inspec for implementing a simple workflow for test driven development of infrastructure code.
I showed that using virtual machines as target machines for testing is just not fast enough and probably hard to run in a build environment.&lt;/p>
&lt;/div></description></item><item><title>blog</title><link>https://www.martinahrer.at/page/blog/</link><pubDate>Tue, 18 Aug 2020 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/page/blog/</guid><description>&lt;div class="paragraph">
&lt;p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.&lt;/p>
&lt;/div></description></item><item><title>Impressum</title><link>https://www.martinahrer.at/page/imprint/</link><pubDate>Tue, 18 Aug 2020 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/page/imprint/</guid><description>&lt;div class="paragraph">
&lt;p>Martin Ahrer&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>Libenauerstraße 69&lt;br/>
4040 Lichtenberg&lt;br/>
Österreich&lt;/p>
&lt;/div>
&lt;div class="paragraph imprint">
&lt;p>&lt;span class="icon">&lt;i class="fa fa-envelope">&lt;/i>&lt;/span> - office at martinahrer.at&lt;br/>
&lt;span class="icon">&lt;i class="fa fa-phone">&lt;/i>&lt;/span> - +43 699 11668668&lt;br/>&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>UID (VAT): &lt;em>ATU58077823&lt;/em>&lt;br/>&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>Behörde gem. ECG (E-Commerce Gesetz): &lt;em>Bezirkshauptmannschaft Urfahr-Umgebung&lt;/em>&lt;br/>
Anwendbare Rechtsvorschriften: &lt;a href="http://www.ris2.bka.gv.at">http://www.ris2.bka.gv.at&lt;/a>&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>&lt;a href="https://www.wkoecg.at/ecg.aspx?firmaid=2462e646-4400-4271-96ef-4e973b50e889">Informationspflicht lt. §5 E-Commerce Gesetz, §14 Unternehmensgesetzbuch bzw. §63 Gewerbeordnung und Offenlegungspflicht lt. §25 Mediengesetz&lt;/a>&lt;/p>
&lt;/div></description></item><item><title>Martin Ahrer</title><link>https://www.martinahrer.at/page/company/</link><pubDate>Tue, 18 Aug 2020 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/page/company/</guid><description>&lt;div class="paragraph">
&lt;p>Martin is a software engineer with 25+ years of experience as a professional software engineer.
He has worked for numerous companies in the healthcare and financial industry in Europe, Asia and the United States.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>Currently his focus is on continuous delivery, helping customers automating their software delivery processes.
This automation takes off with the first commit to a code repository and finishes when a feature is deployed to a life production system and generates business value.
He has a strong expertise in container technology (Docker) and has successfully implemented fully container driven software build pipelines for his customers.
Martin is also proficient in architecting distributed systems.&lt;/p>
&lt;/div></description></item><item><title>TDD for infrastructure with Vagrant</title><link>https://www.martinahrer.at/2020/08/01/tdd-for-infrastructure-with-vagrant/</link><pubDate>Sat, 01 Aug 2020 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2020/08/01/tdd-for-infrastructure-with-vagrant/</guid><description>&lt;div class="sect1">
&lt;h2 id="_introduction">Introduction&lt;/h2>
&lt;div class="sectionbody">
&lt;div class="paragraph">
&lt;p>For many years (almost decades) developers have been practicing &lt;a href="https://en.wikipedia.org/wiki/Test-driven_development">test driven development&lt;/a> and write tests to get confidence that their code works.&lt;/p>
&lt;/div>
&lt;div class="imageblock">
&lt;div class="content">
&lt;img src="https://www.martinahrer.at/assets/tdd-for-infrastructure/application-test.png" alt="application test" width="100%" height="100%"/>
&lt;/div>
&lt;/div>
&lt;div class="paragraph">
&lt;p>However, with the rise of infrastructure as code where DevOps engineers try to describe infrastructure provisioning using code, this is something that is not observed generally.
In many situations I have encountered infrastructure that&lt;/p>
&lt;/div></description></item><item><title>Google Container Tools - Jib</title><link>https://www.martinahrer.at/2020/04/19/google-container-tools-jib/</link><pubDate>Sun, 19 Apr 2020 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2020/04/19/google-container-tools-jib/</guid><description>&lt;div class="paragraph">
&lt;p>With this post we close the &lt;a href="https://www.martinahrer.at/tags/building-docker-images/">series&lt;/a> of articles taking a deep dive on building Docker images.
We look at a building Docker images for running Java applications in a Docker container with &lt;a href="https://github.com/GoogleContainerTools/jib">Jib&lt;/a> which is part of the &lt;a href="https://github.com/GoogleContainerTools">Google Container Tools&lt;/a>.&lt;/p>
&lt;/div>
&lt;div class="sect1">
&lt;h2 id="_jib">Jib&lt;/h2>
&lt;div class="sectionbody">
&lt;div class="paragraph">
&lt;p>Jib is highly opinionated about building Java Docker containers using Maven or Gradle as build tool.
So it offers plugin support for the above mentioned build tools.&lt;/p>
&lt;/div></description></item><item><title>Docker BuildKit</title><link>https://www.martinahrer.at/2020/04/16/docker-buildkit/</link><pubDate>Thu, 16 Apr 2020 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2020/04/16/docker-buildkit/</guid><description>&lt;div class="paragraph">
&lt;p>In the previous blog post of the building docker images series we had a look at Docker image build &lt;a href="https://www.martinahrer.at/code/docker-build-pipeline.html">pipelines&lt;/a>.
We revealed typical problems and looked at how to overcome some by utilizing multistage builds.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>In part 4 of this series we work with an addition to the Docker tooling which is &lt;a href="https://docs.docker.com/develop/develop-images/build_enhancements/">BuildKit&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>Docker image build pipeline</title><link>https://www.martinahrer.at/2019/08/30/docker-image-build-pipeline/</link><pubDate>Fri, 30 Aug 2019 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2019/08/30/docker-image-build-pipeline/</guid><description>&lt;div class="paragraph">
&lt;p>Let’s recap what we have covered in this blog post series so far.
In &lt;a href="https://www.martinahrer.at/code/docker-building-an-image.html">Building a Docker Image&lt;/a> we had a look at the anatomy of a Docker image.
And &lt;a href="https://www.martinahrer.at/code/docker-optimizing-build.html">Optimizing a Docker Image&lt;/a> shed some light on optimizations when building an image.&lt;/p>
&lt;/div></description></item><item><title>Optimizing a Docker Image</title><link>https://www.martinahrer.at/2019/08/20/optimizing-a-docker-image/</link><pubDate>Tue, 20 Aug 2019 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2019/08/20/optimizing-a-docker-image/</guid><description>&lt;div class="paragraph">
&lt;p>This post continues where we left off with &lt;a href="https://www.martinahrer.at/code/docker-building-an-image.html">Building a Docker Image&lt;/a>.
We are looking into how we can optimize the process of building a Docker image.
This optimization can aim at reducing the size of images built or the time it takes for packaging an image.&lt;/p>
&lt;/div></description></item><item><title>Building a Docker Image</title><link>https://www.martinahrer.at/2019/08/17/building-a-docker-image/</link><pubDate>Sat, 17 Aug 2019 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2019/08/17/building-a-docker-image/</guid><description>&lt;div class="paragraph">
&lt;p>This post starts a &lt;a href="https://www.martinahrer.at/tags/building-docker-images/">series&lt;/a> of articles taking a deep dive on building Docker images.
But before we look at building a Docker image let’s briefly recap the essentials we need to know about container images.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>A Docker image is built up from a series of layers where each layer represents an instruction in the image’s Dockerfile.
When Docker materializes an image and creates a container from this image, a storage driver handles the details about the way these layers interact with each other.
Different &lt;a href="https://docs.docker.com/v17.09/engine/userguide/storagedriver/imagesandcontainers/">storage drivers&lt;/a> are available, which have advantages and disadvantages in different situations (e.g. AUFS, overlay, overlay2, btrfs,zfs).
All drivers have in common that they use stackable image layers and the copy-on-write (&lt;a href="https://en.wikipedia.org/wiki/Copy-on-write">CoW&lt;/a>) strategy for writing files.&lt;/p>
&lt;/div></description></item><item><title>Continuous delivery infrastructure as code</title><link>https://www.martinahrer.at/2017/05/10/continuous-delivery-infrastructure-as-code/</link><pubDate>Wed, 10 May 2017 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2017/05/10/continuous-delivery-infrastructure-as-code/</guid><description>&lt;div id="preamble">
&lt;div class="sectionbody">
&lt;div class="paragraph">
&lt;p>This is part 1 of a series of posts covering Docker in a Continuous Delivery environment.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>Today I’m showing how simple it is to setup a continuous delivery build pipeline infrastructure using Docker.
In an upcoming post we will look at Jenkins pipeline as code creating Docker images and running integration tests against Docker containers.
The series will close with an article explaining how we can move all containers built throughout this series of posts in a Docker swarm environment.&lt;/p>
&lt;/div></description></item><item><title>docker-compose scripting</title><link>https://www.martinahrer.at/2017/02/07/docker-compose-scripting/</link><pubDate>Tue, 07 Feb 2017 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2017/02/07/docker-compose-scripting/</guid><description>&lt;div class="paragraph">
&lt;p>This time we look at managing large numbers of compose projects.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>When building complex infrastructure using docker-compose we soon end in a mess of scripts for starting, updating, etc. containers.
I will try to describe an approach that has helped to get this done in a very structured way.&lt;/p>
&lt;/div></description></item><item><title>docker-compose modularization</title><link>https://www.martinahrer.at/2017/02/06/docker-compose-modularization/</link><pubDate>Mon, 06 Feb 2017 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2017/02/06/docker-compose-modularization/</guid><description>&lt;div id="preamble">
&lt;div class="sectionbody">
&lt;div class="paragraph">
&lt;p>In this blog post we are looking into how we can create modular compose projects.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>With &lt;code>docker-compose&lt;/code> we can describe a bunch of containers and container related resources such as networks and volumes that make up an application. All this is usually going into a &lt;code>docker-compose.yml&lt;/code> file.&lt;/p>
&lt;/div></description></item><item><title>Bean Mapping of Transfer Objects</title><link>https://www.martinahrer.at/2016/03/08/bean-mapping-of-transfer-objects/</link><pubDate>Tue, 08 Mar 2016 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2016/03/08/bean-mapping-of-transfer-objects/</guid><description>&lt;div class="paragraph">
&lt;p>In the past years I have been working on multiple projects where the so-called &lt;strong>Data Transfer Object&lt;/strong>
(short DTO) pattern has been heavily used. This is a pattern that has even been a &lt;a href="http://www.oracle.com/technetwork/java/transferobject-139757.html">core pattern&lt;/a> in the
JEE world.
This pattern certainly has its justification for the right cases. But in many cases I have seen
it applied inappropriately. This &lt;a href="http://www.adam-bien.com/roller/abien/entry/dto_the_exceptions_from_the">blog posting&lt;/a> by Adam Bien, a JEE advocate, is outlining the case where it should be considered useful.
However when applied, this pattern comes at the cost of additional code to maintain and some extra CPU cycles for doing the mapping.&lt;/p>
&lt;/div></description></item></channel></rss>