<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on belief driven design</title><link>https://belief-driven-design.com/posts/</link><description>Recent content in Posts on belief driven design</description><generator>Hugo</generator><language>en</language><copyright>Ben Weidig</copyright><lastBuildDate>Tue, 12 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://belief-driven-design.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>What synchronized Actually Does</title><link>https://belief-driven-design.com/synchronized-42cb2/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/synchronized-42cb2/</guid><description>&lt;p&gt;Asked for a one-line mental model of what &lt;code&gt;synchronized&lt;/code&gt; does, most have a simple answer:
making sure only one thread at a time can access the &lt;em&gt;synchronized&lt;/em&gt; block or method.&lt;/p&gt;</description></item><item><title>The Secret Life of a Java String</title><link>https://belief-driven-design.com/java-strings-7213a/</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/java-strings-7213a/</guid><description>&lt;p&gt;&lt;a href="https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/String.html"&gt;&lt;code&gt;String&lt;/code&gt;&lt;/a&gt; is the most-used type in any Java codebase, without much competition.
And yet, most developers don&amp;rsquo;t know much about what &lt;em&gt;actually&lt;/em&gt; happens under the hood.&lt;/p&gt;</description></item><item><title>GC-Free Indexing and Compaction (Part 3)</title><link>https://belief-driven-design.com/storage-from-scratch-03-e5543/</link><pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/storage-from-scratch-03-e5543/</guid><description>&lt;p&gt;After Part I gave us raw I/O performance and Part II gave us safety and durability, there are still two fundamental flaws currently present:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reads are slow:&lt;/strong&gt;&lt;br&gt;
Every lookup requires scanning the entire segment.
This means an &lt;code&gt;O(n)&lt;/code&gt; operation, and that&amp;rsquo;s unacceptable.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Disk usage is unbounded:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Updates&lt;/em&gt; and &lt;em&gt;deletes&lt;/em&gt; leave garbage bytes on the disk behind forever.
So eventually, we run out of space.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this final article, it&amp;rsquo;s time to tackle both issues.&lt;/p&gt;</description></item><item><title>Designing a Crash-Resilient Binary Format (Part 2)</title><link>https://belief-driven-design.com/storage-from-scratch-02-f200b/</link><pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/storage-from-scratch-02-f200b/</guid><description>&lt;p&gt;In the previous article, we built a fast append-only log using Java’s Panama FFM API.&lt;/p&gt;
&lt;p&gt;It was &lt;em&gt;clean&lt;/em&gt;, &lt;em&gt;efficient&lt;/em&gt;, and&amp;hellip; &lt;em&gt;fundamentally broken&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Building a Storage Engine in Modern Java with Panama (Part 1)</title><link>https://belief-driven-design.com/storage-from-scratch-01-602d1/</link><pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/storage-from-scratch-01-602d1/</guid><description>&lt;p&gt;Java has often been dismissed for latency-sensitive systems programming in the past.
Not because it&amp;rsquo;s slow, but because it&amp;rsquo;s unpredictable.&lt;/p&gt;</description></item><item><title>UUIDv7 in Java</title><link>https://belief-driven-design.com/uuid-v7-java-3ccbb/</link><pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/uuid-v7-java-3ccbb/</guid><description>&lt;p&gt;UUIDs are the dark matter of modern software.
You rarely look at them directly, but they hold the distributed universe together.
They are the easiest way to create a unique identifier, which is why they quietly power so many systems.&lt;/p&gt;</description></item><item><title>How Fast Are Streams Really?</title><link>https://belief-driven-design.com/how-fast-are-streams-really-ad9cc/</link><pubDate>Tue, 29 Apr 2025 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/how-fast-are-streams-really-ad9cc/</guid><description>&lt;p&gt;Java Streams have significantly impacted how we process data since their release in 2014.
The fluent and declarative API offers undeniable advantages in readability, conciseness, and safety, especially for complex transformations or large datasets.&lt;/p&gt;
&lt;p&gt;But what about the bread-and-butter tasks?&lt;/p&gt;</description></item><item><title>Shell Navigation 101</title><link>https://belief-driven-design.com/shell-navigation-00cca/</link><pubDate>Wed, 26 Feb 2025 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/shell-navigation-00cca/</guid><description>&lt;p&gt;Navigating the shell is an indispensable skill.
While GUIs might be more intuitive in some ways than the command line, they lack the speed and raw power a shell offers.
Therefore, efficient shell navigation that goes beyond &lt;em&gt;just&lt;/em&gt; &lt;code&gt;cd&lt;/code&gt; goes a long way.&lt;/p&gt;</description></item><item><title>Taking Out the Trash in Java</title><link>https://belief-driven-design.com/taking-out-trash-garbage-collectors-java-00d16/</link><pubDate>Wed, 05 Feb 2025 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/taking-out-trash-garbage-collectors-java-00d16/</guid><description>&lt;p&gt;Memory management is a critical aspect of any programming language.
It ensures that applications efficiently use the available resources without leaking memory or crashing.&lt;/p&gt;</description></item><item><title>Why Everyone Talks About Zig</title><link>https://belief-driven-design.com/why-zig-d4db0/</link><pubDate>Tue, 21 Jan 2025 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/why-zig-d4db0/</guid><description>&lt;p&gt;There&amp;rsquo;s a new contender in the ever-evolving landscape of programming languages everyone seems to talk about: &lt;em&gt;Zig&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>What Happens After We Hit Compile in Java?</title><link>https://belief-driven-design.com/what-happens-after-compile-java-315fe/</link><pubDate>Wed, 08 Jan 2025 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/what-happens-after-compile-java-315fe/</guid><description>&lt;p&gt;When writing Java code, our primary focus is the classes, methods, and best coding practices.
However, once we hit &amp;ldquo;compile,&amp;rdquo; the source code undergoes quite a transformation before execution.&lt;/p&gt;</description></item><item><title>Templating with Thymeleaf: Custom Dialects and More (Part&amp;nbsp;3)</title><link>https://belief-driven-design.com/thymeleaf-part-3-custom-dialects-0beee/</link><pubDate>Mon, 04 Nov 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/thymeleaf-part-3-custom-dialects-0beee/</guid><description>&lt;p&gt;In the previous articles, we explored the fundamentals of Thymeleaf and focused on reusability with fragments and the Layout Dialect.&lt;/p&gt;
&lt;p&gt;Now, in this final installment, we&amp;rsquo;ll dive into the more advanced features, like creating a custom dialect, processors, and more.&lt;/p&gt;</description></item><item><title>Templating with Thymeleaf: Fragments and Reusability (Part&amp;nbsp;2)</title><link>https://belief-driven-design.com/thymeleaf-part-2-fragments-reusability-b2e61/</link><pubDate>Thu, 24 Oct 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/thymeleaf-part-2-fragments-reusability-b2e61/</guid><description>It&amp;rsquo;s time to dive into one on Thymeleaf&amp;rsquo;s most powerful aspects: layout management and reusability. These concepts are essential for creating maintainable and efficient templates.</description></item><item><title>Templating with Thymeleaf: The Basics (Part&amp;nbsp;1)</title><link>https://belief-driven-design.com/thymeleaf-part-1-basics-3a1d9/</link><pubDate>Wed, 16 Oct 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/thymeleaf-part-1-basics-3a1d9/</guid><description>&lt;p&gt;Thymeleaf is a modern Java template engine for both web and standalone applications.
Although widely used in the Spring ecosystem, it can be integrated into any JVM environment.
If you need a dynamic, flexible, and extensible templating engine, Thymeleaf might be just what you need.&lt;/p&gt;</description></item><item><title>The Bytecode Chicken-Egg Problem</title><link>https://belief-driven-design.com/bytecode-chicken-egg-73510/</link><pubDate>Mon, 30 Sep 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/bytecode-chicken-egg-73510/</guid><description>&lt;p&gt;Bytecode is the (mostly) invisible superpower of the Java Virtual Machine (JVM).
Even though it&amp;rsquo;s an essential part of the Java ecosystem puzzle, it&amp;rsquo;s also a niche topic and behind-the-scenes feature that many of us do only have surface knowledge of.
However, there&amp;rsquo;s a chicken-egg problem lurking within Bytecode libraries which the OpenJDK team intends to fix with &lt;a href="https://openjdk.org/jeps/484"&gt;JEP 484&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Using Indexed and Associative Arrays in Bash</title><link>https://belief-driven-design.com/bash-arrays-74ea8/</link><pubDate>Wed, 10 Jul 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/bash-arrays-74ea8/</guid><description>&lt;p&gt;Shell scripting is vital for automating repetitive tasks and simplifying complex commands into a more straightforward format.
Understanding the details of shell scripting enables us to write more robust, portable, and efficient scripts.&lt;/p&gt;</description></item><item><title>Understanding Java Generics: Key Features and Common Pitfalls</title><link>https://belief-driven-design.com/java-generics-101-969ee/</link><pubDate>Wed, 26 Jun 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/java-generics-101-969ee/</guid><description>&lt;p&gt;Generics are an indispensable feature in the world of Java programming, shaping how we write and interact with code.
Despite their ubiquity and importance, many developers only scratch the surface of what Generics can do.&lt;/p&gt;</description></item><item><title>Reclaim Your Gmail Inbox with Google Scripts</title><link>https://belief-driven-design.com/gmail-tickler-2b42a/</link><pubDate>Mon, 10 Jun 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/gmail-tickler-2b42a/</guid><description>&lt;p&gt;&lt;em&gt;Inbox Zero&lt;/em&gt; aims to declutter your mind and remove any anxiety over unread or missed emails lingering in your inbox.
Instead of answering each email as soon as it arrives or letting it &amp;ldquo;rot&amp;rdquo; in the inbox, a tickler file relegates them until they become a priority and must be reviewed.
So, let&amp;rsquo;s create our own tickler file with the help of &lt;a href="https://www.google.com/script/start/"&gt;Google Apps Scripts&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Exploring Java's Units of Measurement API (JSR 385)</title><link>https://belief-driven-design.com/java-measurement-jsr-385-210f2/</link><pubDate>Wed, 29 May 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/java-measurement-jsr-385-210f2/</guid><description>&lt;p&gt;Dealing with unit conversion is always a pain point.
At first, it seems simple enough until you hit the first edge-case.
Just like with Date and Time (JSR 310), there&amp;rsquo;s a well-specified solution available, although not directly in the JDK: the &lt;em&gt;Units of &lt;em&gt;Measurement&lt;/em&gt; API&lt;/em&gt; (JSR 385).&lt;/p&gt;</description></item><item><title>Looking at Java 22: Multi-File Source-Code Programs</title><link>https://belief-driven-design.com/looking-at-java-22-multi-file-source-code-5b248/</link><pubDate>Tue, 21 May 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-22-multi-file-source-code-5b248/</guid><description>&lt;p&gt;Software development is a dynamic process, especially in the early stages of a project or when experimenting with new ideas.
During these phases, files and overall structures can change frequently.
Java, traditionally known for its strict organizational requirements, has made impressive strides to accommodate this fluidity and become more beginner-friendly.&lt;/p&gt;</description></item><item><title>Shell Traps and Posix Signals</title><link>https://belief-driven-design.com/shell-traps-posix-signals-0faa0/</link><pubDate>Wed, 08 May 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/shell-traps-posix-signals-0faa0/</guid><description>&lt;p&gt;Shell traps catch POSIX signals (and more) to allow asynchronous inter-process communication to inform any process or particular thread of various events and do some work.
But do you know about all the different signals and ways to use the &lt;code&gt;trap&lt;/code&gt; command?&lt;/p&gt;</description></item><item><title>Looking at Java 22: Stream Gatherers</title><link>https://belief-driven-design.com/looking-at-java-22-stream-gatherers-9485d/</link><pubDate>Mon, 29 Apr 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-22-stream-gatherers-9485d/</guid><description>&lt;p&gt;The Stream API provides a rich and versatile set of intermediate operations, even though certain ops are still missing or are hard to implement with the given ones.&lt;/p&gt;
&lt;p&gt;Whereas terminal ops are quite customizable by writing our own &lt;a href="https://belief-driven-design.com/java-stream-collectors-explained-42f69943c64/"&gt;&lt;code&gt;Collector&lt;/code&gt;&lt;/a&gt;, an equivalent wasn&amp;rsquo;t available until now as a preview: &lt;em&gt;Stream Gatherers&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Looking at Java 22: Foreign Function &amp; Memory API</title><link>https://belief-driven-design.com/looking-at-java-22-foreign-function-memory-api-57fde/</link><pubDate>Wed, 17 Apr 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-22-foreign-function-memory-api-57fde/</guid><description>&lt;p&gt;The &lt;em&gt;Foreign Function &amp;amp; Memory API&lt;/em&gt;, part of &lt;a href="https://openjdk.org/projects/panama/"&gt;&lt;em&gt;Project Pananama&lt;/em&gt;&lt;/a&gt;, improves Java&amp;rsquo;s interoperability with code and data outside the JVM.
Calling native libraries and working with native memory becomes safer and more straightforward than using the fragile and often dangerous JNI.&lt;/p&gt;</description></item><item><title>Looking at Java 22: Class-File API</title><link>https://belief-driven-design.com/looking-at-java-22-class-file-api-d323c/</link><pubDate>Tue, 09 Apr 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-22-class-file-api-d323c/</guid><description>&lt;p&gt;Class files and the underlying Bytecode serve as the universal language within the Java ecosystem.
Parsing, generating, and transforming class files are essential tasks enabling many of the tools and libraries we use daily.&lt;/p&gt;</description></item><item><title>Working with Numbers in Java</title><link>https://belief-driven-design.com/working-with-number-in-java-b42a9/</link><pubDate>Tue, 02 Apr 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/working-with-number-in-java-b42a9/</guid><description>&lt;p&gt;There&amp;rsquo;s more than one way to work with numbers in Java.
We have access to 7 numeric primitive types and their boxed counterparts, high-precision object types, multiple concurrency-akin types and helpers, and more.&lt;/p&gt;</description></item><item><title>Looking at Java 22: Unnamed Variables &amp; Patterns</title><link>https://belief-driven-design.com/looking-at-java-22-unnamed-variables-and-patterns-a34d2/</link><pubDate>Tue, 19 Mar 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-22-unnamed-variables-and-patterns-a34d2/</guid><description>&lt;p&gt;In this article, I want to talk about a non-preview feature belonging to &lt;a href="https://openjdk.org/projects/amber/"&gt;Project Amber&lt;/a&gt;, JEP 456.&lt;/p&gt;
&lt;p&gt;With Java 9, the &lt;code&gt;_&lt;/code&gt; (underscore) became a reserved keyword and no longer a valid identifier.
Now, with the release of Java 22, the new keyword finally gets a specific meaning: something not having a name.&lt;/p&gt;</description></item><item><title>Grabbing Screen Text with a Shell Script</title><link>https://belief-driven-design.com/grabbing-screen-text-with-a-shell-script-f6bdd/</link><pubDate>Mon, 18 Mar 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/grabbing-screen-text-with-a-shell-script-f6bdd/</guid><description>&lt;p&gt;Recently, I stumbled upon an OCR tool for Linux.
However, I didn&amp;rsquo;t like the idea of needing a GUI app, so I wrote a shell script connecting the right CLI tools instead.&lt;/p&gt;
&lt;p&gt;This article dissects &amp;ldquo;&lt;em&gt;grab-text&lt;/em&gt;&amp;rdquo;, a simple POSIX-compatible shell script I wrote for grabbing text from your screen.&lt;/p&gt;</description></item><item><title>Looking at Java 22: Statements before super</title><link>https://belief-driven-design.com/looking-at-java-22-statements-before-super-5c833/</link><pubDate>Thu, 14 Mar 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-22-statements-before-super-5c833/</guid><description>&lt;p&gt;The first (preview) feature of Java 22 I want to talk about is one I&amp;rsquo;m quite excited about!&lt;/p&gt;
&lt;p&gt;JEP 447 introduces a significant change by relaxing the strict rules for constructors.
It finally allows (certain) statements to be executed before calling the &lt;code&gt;super(...)&lt;/code&gt; call.&lt;/p&gt;</description></item><item><title>Looking at Java 22: Intro</title><link>https://belief-driven-design.com/looking-at-java-22-3e86c/</link><pubDate>Tue, 12 Mar 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-22-3e86c/</guid><description>&lt;p&gt;Java 22 is just around the corner (GA 2024-03-19), so it&amp;rsquo;s time to look at (most of the) included goodies, much like we did with &lt;a href="https://belief-driven-design.com/looking-at-java-21-b41a3/"&gt;the previous version&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This time around, the new version includes 12 JEPs in total, with 7 being previews and a single incubator one.&lt;/p&gt;</description></item><item><title>Better Code Snippets in JavaDoc</title><link>https://belief-driven-design.com/better-code-snippets-in-javadoc-b27f5/</link><pubDate>Wed, 06 Mar 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/better-code-snippets-in-javadoc-b27f5/</guid><description>&lt;p&gt;Effective documentation is an essential staple of every software project.
Still, way too often, we neglect it at the moment.
If we&amp;rsquo;re lucky, our future selves will take care of it.
But let&amp;rsquo;s be honest here for a moment&amp;hellip; it won&amp;rsquo;t happen!&lt;/p&gt;
&lt;p&gt;Consequently, any improvement that makes writing documentation more straightforward and easily accessible is an important and welcomed one.&lt;/p&gt;</description></item><item><title>Java Enums 101</title><link>https://belief-driven-design.com/java-enums-101-db34b/</link><pubDate>Tue, 20 Feb 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/java-enums-101-db34b/</guid><description>&lt;p&gt;Introduced in 2004 alongside Java 5, Enums are a distinct type identified by their own keyword.
They encapsulate a predefined, fixed set of named constants.
This simple characteristic already provides ample value in our day-to-day code.
However, their application extends beyond merely consolidating constants within a single type.&lt;/p&gt;</description></item><item><title>Test Swift Packages with a Test Host</title><link>https://belief-driven-design.com/testing-swift-packages-with-a-test-host-56bf1/</link><pubDate>Wed, 24 Jan 2024 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/testing-swift-packages-with-a-test-host-56bf1/</guid><description>&lt;p&gt;Swift packages are a neat and simple way to bundle up and share code.
They remove the overall complexity by not requiring an Xcode project but instead relying on a filesystem-based project layout.
That&amp;rsquo;s all fine and well until your code needs an &lt;a href="https://developer.apple.com/documentation/bundleresources/entitlements"&gt;Entitlement&lt;/a&gt; for it to be tested.&lt;/p&gt;</description></item><item><title>Looking at Java 21: Structured Concurrency</title><link>https://belief-driven-design.com/looking-at-java-21-structured-concurrency-39a81/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-21-structured-concurrency-39a81/</guid><description>Project Loom, with its aim to deliver &amp;ldquo;easy-to-use, high-throughput, lightweight concurrency&amp;rdquo;, will most likely change how we approach concurrency in the future. Today, we will look at the &amp;ldquo;glue&amp;rdquo; that can hold it all together: &lt;em&gt;Structured Concurrency&lt;/em&gt;.</description></item><item><title>Looking at Java 21: The Little Things</title><link>https://belief-driven-design.com/looking-at-java-21-little-things-ecb3a/</link><pubDate>Thu, 12 Oct 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-21-little-things-ecb3a/</guid><description>&lt;p&gt;Besides the &amp;ldquo;big&amp;rdquo; features that often aggregate under well-known project names, like &amp;ldquo;Amber&amp;rdquo;, &amp;ldquo;Loom&amp;rdquo;, or &amp;ldquo;Panama&amp;rdquo;, there are many little things in every release that are easy to miss.
These API and tool improvements might not be as visible as other features, as they&amp;rsquo;re not represented by a JEP.
That doesn&amp;rsquo;t mean we don&amp;rsquo;t need to know about them.&lt;/p&gt;</description></item><item><title>Looking at Java 21: Virtual Threads</title><link>https://belief-driven-design.com/looking-at-java-21-virtual-threads-bd181/</link><pubDate>Thu, 05 Oct 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-21-virtual-threads-bd181/</guid><description>&lt;p&gt;One of the most significant features of Java 21 is Virtual Threads (&lt;a href="https://openjdk.org/jeps/444"&gt;JEP 444&lt;/a&gt;).
These lightweight threads reduce the effort needed for writing, maintaining, and observing high-throughput concurrent applications.&lt;/p&gt;</description></item><item><title>Shell Redirection 101</title><link>https://belief-driven-design.com/shell-redirection-101-dc238/</link><pubDate>Mon, 02 Oct 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/shell-redirection-101-dc238/</guid><description>&lt;p&gt;Shell redirection can be confusing.
I&amp;rsquo;ve always wondered what &lt;code&gt;2&amp;gt;&amp;amp;1&lt;/code&gt; means and why it&amp;rsquo;s needed, but as many others, I just copy/pasted things from the internet into my terminal and hoped for the best.
What could possibly go wrong?&lt;/p&gt;</description></item><item><title>Revisiting Java for Shell Scripting</title><link>https://belief-driven-design.com/revisiting-java-for-shell-scripting-7ff3e/</link><pubDate>Thu, 21 Sep 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/revisiting-java-for-shell-scripting-7ff3e/</guid><description>&lt;p&gt;Around 6 years ago, I wrote about &lt;a href="https://belief-driven-design.com/java-for-shell-scripting-cafd6de3fa2/"&gt;using Java for shell scripts&lt;/a&gt;.
It was a hacky and fragile way to convert some Java code into a shebanged file containing the content of a Jar file.&lt;/p&gt;
&lt;p&gt;However, Java evolved quite a bit since that article, so it&amp;rsquo;s time to look at it again.&lt;/p&gt;</description></item><item><title>Xcode String Catalogs 101</title><link>https://belief-driven-design.com/xcode-string-catalogs-101-672f5/</link><pubDate>Tue, 19 Sep 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/xcode-string-catalogs-101-672f5/</guid><description>Localization, or &lt;code&gt;l10n&lt;/code&gt;, is an important step for any app to reach a broader market and be more inclusive. With Xcode 15, the IDE gained a versatile and easy-to-use way of handling localization: &lt;em&gt;String catalogs&lt;/em&gt;.</description></item><item><title>Looking at Java 21: Generational ZGC</title><link>https://belief-driven-design.com/looking-at-java-21-generational-zgc-e5c1c/</link><pubDate>Tue, 12 Sep 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-21-generational-zgc-e5c1c/</guid><description>A new garbage collector was introduced in Java 11, a low latency/high scalability GC called &lt;em&gt;ZGC&lt;/em&gt;. And now, with Java 21, it has evolved into a &lt;em&gt;generational&lt;/em&gt; GChugo .</description></item><item><title>Looking at Java 21: Record Patterns</title><link>https://belief-driven-design.com/looking-at-java-21-record-patterns-b5282/</link><pubDate>Tue, 05 Sep 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-21-record-patterns-b5282/</guid><description>Pattern matching is a declarative and composable approach for more powerful and expressive code. Java 16 added pattern matching for the &lt;code&gt;instanceof&lt;/code&gt; operator, and we looked at pattern matching for &lt;code&gt;switch&lt;/code&gt; before. Let&amp;rsquo;s look at another new kind of pattern matching: &lt;em&gt;Record Patterns&lt;/em&gt;.</description></item><item><title>Looking at Java 21: Feature Deprecations</title><link>https://belief-driven-design.com/looking-at-java-21-feature-deprecations-03fff/</link><pubDate>Mon, 28 Aug 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-21-feature-deprecations-03fff/</guid><description>&lt;p&gt;Even though Java is one of the most backward-compatible languages and environments I&amp;rsquo;ve ever worked with, there&amp;rsquo;s always the possibility of feature deprecations and even removals.&lt;/p&gt;</description></item><item><title>Xcode Breakpoints 101</title><link>https://belief-driven-design.com/xcode-breakpoints-101-42764/</link><pubDate>Tue, 22 Aug 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/xcode-breakpoints-101-42764/</guid><description>&lt;p&gt;Knowing how to debug a problem is essential in any project.
But there&amp;rsquo;s way more to it than just stopping at a certain point with a breakpoint.
From running custom code, over symbolic breakpoints, to sharing breakpoints via Git, Xcode has something for everyone.&lt;/p&gt;</description></item><item><title>Looking at Java 21: Switch Pattern Matching</title><link>https://belief-driven-design.com/looking-at-java-21-switch-pattern-matching-14648/</link><pubDate>Tue, 08 Aug 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-21-switch-pattern-matching-14648/</guid><description>&lt;p&gt;The &lt;code&gt;switch&lt;/code&gt; control structure has quite an evolution lately since its inception.
First, there were &lt;code&gt;switch&lt;/code&gt; expressions (&lt;a href="https://openjdk.org/jeps/325"&gt;JEP 325&lt;/a&gt;, &lt;a href="https://openjdk.org/jeps/354"&gt;354&lt;/a&gt;, &lt;a href="https://openjdk.org/jeps/361"&gt;361&lt;/a&gt;).
And now, we get pattern matching for &lt;code&gt;switch&lt;/code&gt; statements and expressions!&lt;/p&gt;</description></item><item><title>Looking at Java 21: Scoped Values</title><link>https://belief-driven-design.com/looking-at-java-21-scoped-values-a78f1/</link><pubDate>Mon, 17 Jul 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-21-scoped-values-a78f1/</guid><description>&lt;p&gt;Today we look at &lt;em&gt;Scoped Values&lt;/em&gt;, another interesting preview feature that&amp;rsquo;s incubating since Java 20 (&lt;a href="https://openjdk.org/jeps/429"&gt;JEP 429&lt;/a&gt;).
It&amp;rsquo;s a new way to store and share immutable data with a bounded lifetime within a thread and its child threads.&lt;/p&gt;</description></item><item><title>Looking at Java 21: Sequenced Collections</title><link>https://belief-driven-design.com/looking-at-java-21-sequenced-collections-46c96/</link><pubDate>Thu, 29 Jun 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-21-sequenced-collections-46c96/</guid><description>&lt;p&gt;Dealing with Collections is improving with Java 21, as three new interfaces get retro-fitted right into the existing type hierarchies.
These &lt;em&gt;Sequenced Collections&lt;/em&gt; give us a uniform API to access the first and last elements, and process Collections in reverse.&lt;/p&gt;</description></item><item><title>Looking at Java 21: Simpler Main Methods and Unnamed Classes</title><link>https://belief-driven-design.com/looking-at-java-21-simpler-main-unnamed-classes-30e12/</link><pubDate>Thu, 22 Jun 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-21-simpler-main-unnamed-classes-30e12/</guid><description>Java&amp;rsquo;s known (and often criticized) for its vast amount of required boilerplate and ceremony for perceived mundane tasks, at least compared to other languages. JEP 445 is explicitly targeted to make the first introduction to Java a breeze, though.</description></item><item><title>Looking at Java 21: String Templates</title><link>https://belief-driven-design.com/looking-at-java-21-string-templates-c7cbc/</link><pubDate>Tue, 20 Jun 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-21-string-templates-c7cbc/</guid><description>Java&amp;rsquo;s String type is a ubiquitous type that&amp;rsquo;s used in every program out there. Over the years, it received many improvements. And now, another exciting improvement is coming that makes String safer and easier to use: String templates.</description></item><item><title>Looking at Java 21: Intro</title><link>https://belief-driven-design.com/looking-at-java-21-b41a3/</link><pubDate>Fri, 16 Jun 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/looking-at-java-21-b41a3/</guid><description>&lt;p&gt;&lt;a href="https://openjdk.org/projects/jdk/21/"&gt;Java 21&lt;/a&gt; has recently entered &amp;ldquo;rampdown phase one&amp;rdquo;, and is planned for general availability in September!
This new LTS release comes with many new features, that&amp;rsquo;s why I want to take the next few weeks to take a deeper look at the ones that excite me the most!&lt;/p&gt;</description></item><item><title>"A Functional Approach to Java" is finally here!</title><link>https://belief-driven-design.com/a-functional-approach-to-java-is-finally-here-b4619/</link><pubDate>Fri, 19 May 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/a-functional-approach-to-java-is-finally-here-b4619/</guid><description>&lt;p&gt;I&amp;rsquo;m happy to announce that my book, &amp;ldquo;A Functional Approach to Java: Augmenting Object-Oriented Java Code with Functional Principles&amp;rdquo; is finally available 🥳&lt;/p&gt;</description></item><item><title>Traveling with (only) an iPad</title><link>https://belief-driven-design.com/traveling-with-only-an-ipad-88e319a308b/</link><pubDate>Mon, 03 Apr 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/traveling-with-only-an-ipad-88e319a308b/</guid><description>After becoming a workaholic in the last three years and spending 7 days almost every week in the office, it was time for a vacation and change of scenery: a 25 days trip to South Korea and Japan. But I still needed to work on my book, so I had to take at least one device capable of doing that with me.</description></item><item><title>Deploying Hugo with GitHub Actions</title><link>https://belief-driven-design.com/deploying-hugo-with-github-actions-a78c2117aae/</link><pubDate>Wed, 01 Mar 2023 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/deploying-hugo-with-github-actions-a78c2117aae/</guid><description>Almost 3½ years ago, I moved this blog from GitHub pages to my own little machine in the ether. The deployment process was based on Docker and a single Git hook. To simplify my setup further, I revamped it to use GitHub Actions instead.</description></item><item><title>Functional Programming With Java: Method References</title><link>https://belief-driven-design.com/functional-programming-with-java-method-references-c9103cdf5f8/</link><pubDate>Mon, 19 Sep 2022 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/functional-programming-with-java-method-references-c9103cdf5f8/</guid><description>&lt;p&gt;Besides lambdas expressions, Java 8 introduced another language syntax change in the form of a new operator, &lt;code&gt;::&lt;/code&gt; (double colon), to create so-called &lt;em&gt;method references&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>BASHŌ (芭蕉) - An Exporter for Calibre</title><link>https://belief-driven-design.com/basho-calibre-exporter-2f618ea3b0b/</link><pubDate>Mon, 03 Jan 2022 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/basho-calibre-exporter-2f618ea3b0b/</guid><description>&lt;p&gt;The first version of my Calibre export tool got released today!&lt;/p&gt;</description></item><item><title>Custom Operators in Swift</title><link>https://belief-driven-design.com/custom-operators-in-swift-58c5ea06e21/</link><pubDate>Mon, 15 Nov 2021 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/custom-operators-in-swift-58c5ea06e21/</guid><description>&lt;p&gt;Swift is quite a flexible language, providing you with many tools to modify and augment it as you seem fit.
One of these augmentations is the support for custom and overloaded operators.&lt;/p&gt;</description></item><item><title>Build-Time Variables in Go</title><link>https://belief-driven-design.com/build-time-variables-in-go-51439b26ef9/</link><pubDate>Sat, 23 Oct 2021 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/build-time-variables-in-go-51439b26ef9/</guid><description>Setting variables at build-time provides valuable metadata that wasn&amp;rsquo;t available when writing the code or even at runtime. We can control feature-flags, or build information, like a version number, without updating the Go-code constantly.</description></item><item><title>Java Interfaces vs. Abstract Classes</title><link>https://belief-driven-design.com/java-interface-vs-abstract-class-c5d41514cdd/</link><pubDate>Wed, 31 Mar 2021 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/java-interface-vs-abstract-class-c5d41514cdd/</guid><description>&lt;p&gt;Even though interfaces and abstract classes have many similarities at first look, especially after introducing &lt;code&gt;default&lt;/code&gt; methods, they have different use cases and capabilities.&lt;/p&gt;</description></item><item><title>Java Spliterator Explained</title><link>https://belief-driven-design.com/java-spliterator-explained-45434919ec7/</link><pubDate>Mon, 15 Mar 2021 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/java-spliterator-explained-45434919ec7/</guid><description>The concept of traversing elements with Iterators is supported since Java 1.2, but got a new relative in Java 8: java.util.Spliterator&lt;T&gt;</description></item><item><title>How to Iterate with Java</title><link>https://belief-driven-design.com/how-to-iterate-with-java-b94d197897b/</link><pubDate>Tue, 23 Feb 2021 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/how-to-iterate-with-java-b94d197897b/</guid><description>&lt;p&gt;Iterating data structures is one of the most common tasks.
Everyone knows the classics, like &lt;code&gt;for&lt;/code&gt; or &lt;code&gt;while&lt;/code&gt;. But there are more ways to iterate in Java, providing a lot more functionality.&lt;/p&gt;</description></item><item><title>Essentials of Java’s Time API (JSR-310)</title><link>https://belief-driven-design.com/essentials-of-java-time-59cff478fdf/</link><pubDate>Thu, 07 Jan 2021 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/essentials-of-java-time-59cff478fdf/</guid><description>&lt;p&gt;Dealing with date and time is a cumbersome task in many programming languages.
But with Java 8, the JDK provides us with a comprehensive and completely new API, changing the way we deal with time-related concepts.&lt;/p&gt;</description></item><item><title>Functional Programming With Java: map, filter, reduce</title><link>https://belief-driven-design.com/functional-programm-with-java-map-filter-reduce-77e479bd73e/</link><pubDate>Wed, 30 Sep 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/functional-programm-with-java-map-filter-reduce-77e479bd73e/</guid><description>The concept of map/filter/reduce is a cornerstone of any functional programming. Data pipelines consist of one or more intermediate operations that represent one of these three methods.</description></item><item><title>Local Variable Type Inference in Java 10</title><link>https://belief-driven-design.com/local-variable-type-inference-java-10-91bf1586632/</link><pubDate>Thu, 20 Aug 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/local-variable-type-inference-java-10-91bf1586632/</guid><description>&lt;p&gt;Java is often criticized as being too verbose.
One aspect contributing to this characterization is the requirement to specify every type explicitly, which leads to a lot of additional &lt;a href="https://belief-driven-design.com/signal-to-noise-ratio-942acbcbe03/"&gt;noise&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Localization Changes in Java 9</title><link>https://belief-driven-design.com/localization-changes-java-9-b727e28ef9f/</link><pubDate>Tue, 21 Jul 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/localization-changes-java-9-b727e28ef9f/</guid><description>java.util.Locale is used to format dates, numbers, currency, and more. But with JDK 9, a few changes were introduced, leading to subtle (and sometimes not so subtle) bugs.</description></item><item><title>Why We Should Build Our Own Tools: The Story of Tortuga</title><link>https://belief-driven-design.com/story-of-tortuga-021248869fb/</link><pubDate>Fri, 17 Jul 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/story-of-tortuga-021248869fb/</guid><description>As developers, we perform many repetitive tasks, big and small. Many of these tasks might be made easier by using an appropriate tool instead. So let&amp;rsquo;s build them ourselves!</description></item><item><title>9 Tips For Writing Safer Shell Scripts</title><link>https://belief-driven-design.com/9-tips-safer-shell-scripts-5b8d6afd618/</link><pubDate>Sun, 05 Jul 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/9-tips-safer-shell-scripts-5b8d6afd618/</guid><description>&lt;p&gt;Shell scripting is a powerful tool available on all platforms, even Windows, thanks to &lt;a href="https://docs.microsoft.com/en-us/windows/wsl/install-win10"&gt;WSL&lt;/a&gt;.
But it can be easy to make mistakes. Here are some tips to improve our scripts and avoid many problems.&lt;/p&gt;</description></item><item><title>Nested Classes in Java</title><link>https://belief-driven-design.com/nested-classes-in-java-814dff35bef/</link><pubDate>Mon, 29 Jun 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/nested-classes-in-java-814dff35bef/</guid><description>OOP allows us to nest classes that are logically bound together, to increase encapsulation, for more concise and maintainable code. Here’s a quick, non-deep-dive overview of the 4 types of nested classes in Java.</description></item><item><title>Functional Programming With Java: Exception Handling</title><link>https://belief-driven-design.com/functional-programming-with-java-exception-handling-e69997c11d3/</link><pubDate>Tue, 23 Jun 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/functional-programming-with-java-exception-handling-e69997c11d3/</guid><description>Dealing with Exceptions in Java is a must, and functional programming doesn&amp;rsquo;t make it easier. Let&amp;rsquo;s take a look at the available options.</description></item><item><title>Java Benchmarks with JMH</title><link>https://belief-driven-design.com/java-benchmarks-with-jmh-dc58837c0b3/</link><pubDate>Wed, 10 Jun 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/java-benchmarks-with-jmh-dc58837c0b3/</guid><description>&lt;p&gt;Almost every developer knows the phrase &lt;em&gt;&amp;ldquo;premature optimization is the root of all evil&amp;rdquo;&lt;/em&gt;, coined by &lt;a href="https://dl.acm.org/doi/10.1145/356635.356640"&gt;Donald Knuth in 1974&lt;/a&gt;.
But how are we supposed to know what is worthy of being optimized?&lt;/p&gt;</description></item><item><title>Choosing the Right Data Types</title><link>https://belief-driven-design.com/choosing-the-right-data-types-e458eadb397/</link><pubDate>Mon, 08 Jun 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/choosing-the-right-data-types-e458eadb397/</guid><description>When we create a new data structure, deciding on its data types is usually a simple decision: text will become a &lt;code&gt;String&lt;/code&gt;, non-floating-point numbers will be &lt;code&gt;int&lt;/code&gt;, and so forth. But is it the right choice?</description></item><item><title>All You Ever Wanted to Know About Java Exceptions</title><link>https://belief-driven-design.com/all-you-ever-wanted-to-know-about-java-exceptions-63d838fedb3/</link><pubDate>Sun, 17 May 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/all-you-ever-wanted-to-know-about-java-exceptions-63d838fedb3/</guid><description>Exception handling is a mechanism used to handle disruptive, abnormal conditions to the control flow of our programs. Let&amp;rsquo;s take a deep-dive how Java deals with them.</description></item><item><title>How Fluent Interfaces Can Lead to More Meaningful Code</title><link>https://belief-driven-design.com/fluent-interfaces-b11b901f1eb/</link><pubDate>Mon, 20 Apr 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/fluent-interfaces-b11b901f1eb/</guid><description>&amp;ldquo;Any fool can write code that a computer can understand. Good programmers write code that humans can understand.&amp;rdquo; –Martin Fowler</description></item><item><title>Formatting Strings With Java</title><link>https://belief-driven-design.com/formatting-strings-with-java-42648c25697/</link><pubDate>Tue, 14 Apr 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/formatting-strings-with-java-42648c25697/</guid><description>&lt;p&gt;We all know &lt;a href="https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#format%28java.lang.String,%20java.lang.Object...%29"&gt;&lt;code&gt;String.format(...)&lt;/code&gt;&lt;/a&gt;.
But there are other options. Java has multiple ways of formatting, aligning, padding, and justifying Strings.&lt;/p&gt;</description></item><item><title>Utility Classes of the JDK: Dealing With I/O</title><link>https://belief-driven-design.com/utility-classes-jdk-io-ecc9a62fd80/</link><pubDate>Fri, 27 Mar 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/utility-classes-jdk-io-ecc9a62fd80/</guid><description>Java NIO (&amp;ldquo;non-blocking I/O&amp;rdquo;) is a great feature set for dealing with I/O operations. Introduced by Java 1.4, it was further improved in Java 7.</description></item><item><title>The JDK Ecosystem</title><link>https://belief-driven-design.com/the-jdk-ecosystem-b2b6d4de862/</link><pubDate>Thu, 26 Mar 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/the-jdk-ecosystem-b2b6d4de862/</guid><description>&lt;p&gt;About 10 years after Java’s inception in 1996, Sun Microsystems released OpenJDK in 2007, a free and open-source implementation of Java SE.
Many companies started to join as contributors.&lt;/p&gt;</description></item><item><title>Utility Classes of the JDK: Collections and Arrays</title><link>https://belief-driven-design.com/utility-classes-jdk-collections-arrays-2cd3f829da8/</link><pubDate>Tue, 10 Mar 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/utility-classes-jdk-collections-arrays-2cd3f829da8/</guid><description>The JDK is evolving with every new release, adding more and improving existing features. Beneath the surface are hidden gems that make our lives much easier.</description></item><item><title>Decouple Your Code With Dependency Injection</title><link>https://belief-driven-design.com/decouple-your-code-with-dependency-injection-77b8d39cc93/</link><pubDate>Tue, 25 Feb 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/decouple-your-code-with-dependency-injection-77b8d39cc93/</guid><description>Not many components live on their own, without any dependencies on others. Instead of tightly coupling them, we can improve the separation of concerns with dependency injection (DI).</description></item><item><title>JShell, the Java REPL</title><link>https://belief-driven-design.com/jshell-the-java-repl-82d804e6cbf/</link><pubDate>Wed, 19 Feb 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/jshell-the-java-repl-82d804e6cbf/</guid><description>&lt;p&gt;Many languages contain a &lt;a href="https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop"&gt;REPL&lt;/a&gt;, a Read-Evaluate-Print Loop.
It evaluates declarations, statements, and expressions as they are entered and immediately shows the results.
With Java 9, we finally got one too.&lt;/p&gt;</description></item><item><title>10 Git Tips To Save Time And Improve Your Workflow</title><link>https://belief-driven-design.com/10-git-tips-dfe5d6a72ce/</link><pubDate>Mon, 17 Feb 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/10-git-tips-dfe5d6a72ce/</guid><description>Git is packed with features and some can be very intimidating. So we resort to just using the same few commands we can memorize, over and over again.</description></item><item><title>Functional Programming With Java: Immutability</title><link>https://belief-driven-design.com/functional-programming-with-java-immutability-ae3372311b9/</link><pubDate>Sun, 16 Feb 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/functional-programming-with-java-immutability-ae3372311b9/</guid><description>Immutability is one of the core concepts of functional programming. &amp;ldquo;Fully&amp;rdquo; functional programming languages support it by design, at a language-level. But in Java, we need to design and implement it ourselves, at code-level.</description></item><item><title>Habit-Driven Development and Finding Your Own Style</title><link>https://belief-driven-design.com/habit-driven-development-d8e7764502e/</link><pubDate>Fri, 07 Feb 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/habit-driven-development-d8e7764502e/</guid><description>&lt;p&gt;By designing and writing code, we naturally start to develop our own personal style and habits, good and bad.
The more code we write with the intent to improve, the better we’ll get eventually.&lt;/p&gt;</description></item><item><title>Functional Programming With Java: Streams</title><link>https://belief-driven-design.com/functional-programming-with-java-streams-190eda591a5/</link><pubDate>Tue, 04 Feb 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/functional-programming-with-java-streams-190eda591a5/</guid><description>&lt;p&gt;Java 8 gave us the &lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html"&gt;Stream API&lt;/a&gt;, a lazy-sequential data pipeline of functional blocks.&lt;/p&gt;</description></item><item><title>Java Annotations Explained</title><link>https://belief-driven-design.com/java-annotations-explained-4f54e6e6c3f/</link><pubDate>Mon, 27 Jan 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/java-annotations-explained-4f54e6e6c3f/</guid><description>&lt;p&gt;With &lt;a href="https://www.jcp.org/en/jsr/detail?id=175"&gt;JSR-175&lt;/a&gt;, Java 5 gained a &lt;a href="https://en.wikipedia.org/wiki/Metadata_facility_for_Java"&gt;metadata facility&lt;/a&gt;, allowing us to annotate our code with &lt;em&gt;decorative syntactic metadata&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Functional Programming With Java: What’s in the Box</title><link>https://belief-driven-design.com/functional-programming-with-java-whats-in-the-box-d3ad1fc94da/</link><pubDate>Tue, 21 Jan 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/functional-programming-with-java-whats-in-the-box-d3ad1fc94da/</guid><description>Java&amp;rsquo;s new functional abilities come with a plethora of included types. Let&amp;rsquo;s take a look into the box of provided tools.</description></item><item><title>Equality and Comparison in Java: Pitfalls and Best Practices</title><link>https://belief-driven-design.com/equality-and-comparison-in-java-a5e0f05b808/</link><pubDate>Wed, 15 Jan 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/equality-and-comparison-in-java-a5e0f05b808/</guid><description>&lt;p&gt;Java has different methods of comparing objects and primitives, each with its own semantics. Using the “wrong” one can lead to unexpected results and might introduce subtle, hard-to-catch bugs.&lt;/p&gt;</description></item><item><title>Functional Programming With Java: An Introduction</title><link>https://belief-driven-design.com/functional-programming-with-java-introduction-43481e645ee/</link><pubDate>Wed, 08 Jan 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/functional-programming-with-java-introduction-43481e645ee/</guid><description>&lt;p&gt;Java is a &lt;a href="https://en.wikipedia.org/wiki/General-purpose_language"&gt;&lt;em&gt;general-purpose programming language&lt;/em&gt;&lt;/a&gt; &lt;em&gt;with class-based object-orientation&lt;/em&gt; at its core.&lt;/p&gt;
&lt;p&gt;But, with the release of version 8, a more functional programming style became viable.&lt;/p&gt;</description></item><item><title>Java Stream Collectors Explained</title><link>https://belief-driven-design.com/java-stream-collectors-explained-42f69943c64/</link><pubDate>Thu, 02 Jan 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/java-stream-collectors-explained-42f69943c64/</guid><description>With Java 8 came one of the greatest additions to Java: the Stream API. And one of its important aspects is collecting its results.</description></item><item><title>I (don’t) want to be a Digital Nomad</title><link>https://belief-driven-design.com/i-dont-want-to-be-a-digital-nomad-24b1f712a73/</link><pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/i-dont-want-to-be-a-digital-nomad-24b1f712a73/</guid><description>For a long time, I wanted to be more like a digital nomad: traveling the world and working wherever I got wifi. But after some trial runs, my views changed.</description></item><item><title>Introduction to CSS Custom Properties</title><link>https://belief-driven-design.com/introduction-to-css-custom-properties-cb3e9ecb3fa/</link><pubDate>Tue, 24 Dec 2019 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/introduction-to-css-custom-properties-cb3e9ecb3fa/</guid><description>Since its proposition in 1994, CSS has evolved from a static description of simple styles to a cornerstone of modern web design.</description></item><item><title>Bikes, Yaks, Airplanes, and Arguing About Unimportant Things in Engineering</title><link>https://belief-driven-design.com/bikes-yaks-airplanes-e00db940ffb/</link><pubDate>Thu, 19 Dec 2019 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/bikes-yaks-airplanes-e00db940ffb/</guid><description>&lt;p&gt;The human mind loves to simplify concepts to more natural, understandable terms.
That’s why &lt;em&gt;bike sheds&lt;/em&gt;, &lt;em&gt;shaved yaks&lt;/em&gt;, and &lt;em&gt;airplane landing strips&lt;/em&gt; can teach us something about software development and project management.&lt;/p&gt;</description></item><item><title>Better Null-Handling With Java Optionals</title><link>https://belief-driven-design.com/better-null-handling-with-java-optionals-da974529bae/</link><pubDate>Tue, 17 Dec 2019 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/better-null-handling-with-java-optionals-da974529bae/</guid><description>&lt;p&gt;Until Java 8, there was no better way to handle &lt;code&gt;null&lt;/code&gt; references than checking your variables at every turn.
The new class &lt;code&gt;java.util.Optional&amp;lt;T&amp;gt;&lt;/code&gt; changed that significantly.&lt;/p&gt;</description></item><item><title>Know Your Dependencies</title><link>https://belief-driven-design.com/know-your-dependencies-e3e769e891b/</link><pubDate>Wed, 11 Dec 2019 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/know-your-dependencies-e3e769e891b/</guid><description>Almost no software project lives isolated without dependencies. The spectrum goes from &amp;ldquo;just use the &lt;em&gt;stdlib&lt;/em&gt;&amp;rdquo; up to &amp;ldquo;use dependencies for every single line of code&amp;rdquo;.</description></item><item><title>DIY Swift Package Manager Dependencies</title><link>https://belief-driven-design.com/diy-swift-package-manager-dependencies-2489e1063d2/</link><pubDate>Mon, 09 Dec 2019 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/diy-swift-package-manager-dependencies-2489e1063d2/</guid><description>What to do if your favorite dependency is not SPM-compatible (yet)? We do it ourselves!</description></item><item><title>Signal-to-Noise Ratio</title><link>https://belief-driven-design.com/signal-to-noise-ratio-942acbcbe03/</link><pubDate>Fri, 06 Dec 2019 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/signal-to-noise-ratio-942acbcbe03/</guid><description>The signal-to-noise ratio is a measure used in science and engineering that compares the level of the desired signal to the level of background noise.</description></item><item><title>Best of: Java 8</title><link>https://belief-driven-design.com/best-of-java-8-e57b6068d73/</link><pubDate>Tue, 03 Dec 2019 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/best-of-java-8-e57b6068d73/</guid><description>We looked at version 7 of Java before. Now it’s time to look at its successor, Java 8, a really big update with lots of great new features!</description></item><item><title>Surface Pro 7 as portable Linux Dev Machine</title><link>https://belief-driven-design.com/surface-pro-7-linux-5843fc1460d/</link><pubDate>Sun, 01 Dec 2019 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/surface-pro-7-linux-5843fc1460d/</guid><description>I&amp;rsquo;m always looking for a small-footprint laptop for traveling supporting my Linux-based workflow. So &lt;em&gt;naturally&lt;/em&gt;, I decided to use a machine with no first-class Linux support: a &lt;em&gt;Surface Pro 7&lt;/em&gt;.</description></item><item><title>Column 80</title><link>https://belief-driven-design.com/column-80-e2c486ccadb/</link><pubDate>Sat, 30 Nov 2019 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/column-80-e2c486ccadb/</guid><description>Code lines shouldn’t be too long, and many of us use &lt;em&gt;80 columns&lt;/em&gt; as a (flexible) limit. But do you know why it is precisely 80, and not 60 or 120?</description></item><item><title>Best of: Java 7</title><link>https://belief-driven-design.com/best-of-java-7-42773b498c5/</link><pubDate>Thu, 03 Oct 2019 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/best-of-java-7-42773b498c5/</guid><description>&lt;p&gt;Java was never the quickest language regarding new features compared to newer languages, but IMHO, this is one of the reasons why most of the enterprise world still depends on it and will in the future.&lt;/p&gt;</description></item><item><title>Moving from GitHub pages to self-hosted</title><link>https://belief-driven-design.com/moving-from-github-pages-to-self-hosted-ab1231fb7fa/</link><pubDate>Mon, 23 Sep 2019 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/moving-from-github-pages-to-self-hosted-ab1231fb7fa/</guid><description>&lt;p&gt;Initially, this &lt;a href="https://belief-driven-design.com"&gt;blog&lt;/a&gt; was hosted with &lt;a href="https://pages.github.com/"&gt;GitHub pages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It’s a great way to serve static content via &lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt;, but it lacks any traffic analytics if you’re not willing to include it yourself, which I didn’t want to.&lt;/p&gt;</description></item><item><title>Running a JavaFX app with Java 11</title><link>https://belief-driven-design.com/running-javafx-java-11-f750654099b/</link><pubDate>Sun, 22 Sep 2019 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/running-javafx-java-11-f750654099b/</guid><description>&lt;p&gt;Thanks to the &lt;a href="https://www.oracle.com/corporate/features/understanding-java-9-modules.html"&gt;module system of Java 9&lt;/a&gt; and the removal of JavaFX from Java 11, we got some problems running JavaFX apps without older versions of Java.&lt;/p&gt;</description></item><item><title>Naming Stuff is Hard: Why Proper Names Matter</title><link>https://belief-driven-design.com/naming-stuff-is-hard-17fca2ee582/</link><pubDate>Sun, 15 Sep 2019 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/naming-stuff-is-hard-17fca2ee582/</guid><description>&lt;p&gt;Good and clean code starts with proper names.
It’s not easy to name every little thing in a concise and meaningful way, but it’s worth the effort.&lt;/p&gt;</description></item><item><title>(Not) Everything needs JavaScript</title><link>https://belief-driven-design.com/not-everything-needs-javascript-a64352a70b5/</link><pubDate>Sun, 16 Sep 2018 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/not-everything-needs-javascript-a64352a70b5/</guid><description>&lt;p&gt;Working with JavaScript is easier than ever before. The ecosystem is continuously expanding, and the entry bar is lowering.&lt;/p&gt;
&lt;p&gt;But is this actually a good thing?&lt;/p&gt;</description></item><item><title>Your Comments Are Bad</title><link>https://belief-driven-design.com/your-comments-are-bad-74cee29b5a6/</link><pubDate>Sun, 05 Aug 2018 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/your-comments-are-bad-74cee29b5a6/</guid><description>Comments help readers to more easily understand code better by explaining our intentions, clarifying, or annotating it. But we tend to comment too much on the wrong things and too little on the right things.</description></item><item><title>How to Hotfix Carthage Dependencies</title><link>https://belief-driven-design.com/how-to-hotfix-carthage-dependencies-d97c4bf5b39/</link><pubDate>Mon, 12 Jun 2017 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/how-to-hotfix-carthage-dependencies-d97c4bf5b39/</guid><description>We’ve all been there: One of our dependencies is just a little off for our needs. There might be a decision by the developer we don’t agree or even a nasty bug. What should we do now?</description></item><item><title>Java for Shell Scripting</title><link>https://belief-driven-design.com/java-for-shell-scripting-cafd6de3fa2/</link><pubDate>Mon, 20 Feb 2017 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/java-for-shell-scripting-cafd6de3fa2/</guid><description>No matter what your daily driver is, most of us also have to write some shell scripts to automate stuff. Usually, bash script, Python, Perl, etc. is used. But what if we could use a compiled language instead?</description></item><item><title>Java 8 Interfaces: default Methods for Backward Compatibility</title><link>https://belief-driven-design.com/java-8-interfaces-default-methods-17366cd5442/</link><pubDate>Wed, 01 Feb 2017 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/java-8-interfaces-default-methods-17366cd5442/</guid><description>A new addition to the Java repertoire are &lt;em&gt;default methods&lt;/em&gt; for interfaces: Non-abstract methods directly in an interface.</description></item><item><title>Java Streams: Order Matters</title><link>https://belief-driven-design.com/java-streams-order-matters-b8658d5b0ad/</link><pubDate>Tue, 20 Dec 2016 00:00:00 +0000</pubDate><guid>https://belief-driven-design.com/java-streams-order-matters-b8658d5b0ad/</guid><description>&lt;p&gt;Streams are one of my most used features of Java 8, especially in combination with lambdas.
They make code more concise, and we all love shorter, more readable code.
But a lot can go wrong along the way.&lt;/p&gt;</description></item></channel></rss>