Matthias Noback's Avatar

Matthias Noback

@matthiasnoback

https://matthiasnoback.nl Work: Freelance programmer, trainer, writer, public speaker, consultant Topics: object-oriented and Domain-Driven Design, architecture, refactoring, Test-Driven Development, pair/mob programming Languages: PHP, Fortran

251
Followers
123
Following
42
Posts
19.11.2024
Joined
Posts Following

Latest posts by Matthias Noback @matthiasnoback

GitHub - matthiasnoback/fortran-test-framework: An experimental unit test framework for Fortran programs An experimental unit test framework for Fortran programs - GitHub - matthiasnoback/fortran-test-framework: An experimental unit test framework for Fortran programs

The link to the GitHub repository: github.com/matthiasnoba...

20.02.2026 13:36 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Testing - Improving the design of the test framework - Part 2 Extracting code into modules and creating a facade

New #Fortran post: Improving the design of the test framework, part 2. matthiasnoback.nl/2026/02/fort... A module of 400 lines is too big. We're splitting it into smaller modules, and consider the benefits this provides.

20.02.2026 13:36 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Preview
Fortran - Testing - Improving the design of the test framework - Part 1 Removing allocatables and temp variables

New #Fortran post: Improving the design of the test framework: matthiasnoback.nl/2026/02/fort... Getting rid of allocatable return values and temporary variables.

18.02.2026 15:28 πŸ‘ 3 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Testing - More assertion functions Comparing other internal types, and derived types

Next #Fortran Test framework post: adding assertion functions for comparing other internal types, but also derived types. matthiasnoback.nl/2026/02/fort...

13.02.2026 08:44 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Testing - Returning test and assertion errors Introducing new types to carry test and assertion results

Next #Fortran post: "Returning test and assertion errors".

We find more good reasons for using custom derived types in the test framework. Assertion functions no longer print their results directly to screen. matthiasnoback.nl/2026/01/fort...

28.01.2026 18:18 πŸ‘ 3 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Testing - Showing progress and printing results A polymorphic observer as progress printer

New #Fortran testing post: "Showing progress and printing results" matthiasnoback.nl/2026/01/fort... We introduce a polymorphic observer, so we can switch to a different way of producing output during a test run.

22.01.2026 15:24 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Testing - Towards a generic, testable test runner Separating logic from output generation, returning results

New #Fortran article: making the test framework testable, separating main logic from output, and returning results. matthiasnoback.nl/2026/01/fort...

20.01.2026 09:15 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Testing - Unit tests and test suites Introducing dedicated test modules and the foundation for a test framework

New #Fortran blog post: "Unit tests and test suites" matthiasnoback.nl/2026/01/fort...
The next step towards a generic test framework is to let test modules announce their own tests to the test runner. We introduce the types unit_test_t and test_suite_t that carry procedure pointers.

16.01.2026 09:47 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Testing - Improving temporary test programs By introducing assertions and error collection

New blog post about unit testing #Fortran programs: "Improving temporary test programs" Part 1 introduces assertions and an error counter. The series shows what the technical ingredients for a test framework are, and that they are quite easy to implement. matthiasnoback.nl/2026/01/fort...

12.01.2026 09:20 πŸ‘ 3 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Preview
Sulu 3.0 release: New content storage and performance boost Sulu 3.0 delivers faster performance with new Doctrine ORM storage, simplified dependencies, and improved developer experience. Major upgrade guide included.

Sulu 3.0 is here! πŸš€ Sulu 3.0 was released live at last week’s Sulu:Touch event — a major milestone and a proud moment for our team.

Read more on our blog: sulu.io/blog/sulu-3-...

03.12.2025 15:57 πŸ‘ 3 πŸ” 2 πŸ’¬ 1 πŸ“Œ 1
Model kit: Cross-section

Model kit: Cross-section

Model kit: Wijdschip/Smalschip

Model kit: Wijdschip/Smalschip

With 2 model kits in my portfolio it was time to start my own website/trademark! Noback Ship Models nobackshipmodels.com

06.10.2025 07:53 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
A proud Nicolas holding a physical copy of his book. The book is 200 pages long. Its cover is mostly red and titled "Legacy Code: First Aid Kit" with some bandage, and a subtitle: "14 techniques to quickly and safely rescue a codebase"

A proud Nicolas holding a physical copy of his book. The book is 200 pages long. Its cover is mostly red and titled "Legacy Code: First Aid Kit" with some bandage, and a subtitle: "14 techniques to quickly and safely rescue a codebase"

The book is open at page 85. The chapter is titled "Decouple Core from Infrastructure". We can see some explanations along code snippets that have syntax coloring and a font size large enough to be comfortable to read.

The book is open at page 85. The chapter is titled "Decouple Core from Infrastructure". We can see some explanations along code snippets that have syntax coloring and a font size large enough to be comfortable to read.

The book is opened at page 35. The current chapter is titled "The Mikado Method & The Parking". On this page we can see there is an image to illustrate the concept being explained. It's readable enough to be comfortable. We can also see a footnote that links to Philippe Bourgau's blog because he was a relevant source for this concept.

The book is opened at page 35. The current chapter is titled "The Mikado Method & The Parking". On this page we can see there is an image to illustrate the concept being explained. It's readable enough to be comfortable. We can also see a footnote that links to Philippe Bourgau's blog because he was a relevant source for this concept.

Alright, let's make it official…

I am super-proud to tell you that I have finally published the print version of my book: "Legacy Code: First Aid Kit" πŸŽ‰ πŸ“• πŸ₯²

17.09.2025 14:14 πŸ‘ 24 πŸ” 9 πŸ’¬ 4 πŸ“Œ 0
Preview
Fortran - Errors and error handling - Part 7 - Fatal errors Stop with error code, error message, and stack trace

New #Fortran post: "Errors and error handling - Part 7 - Fatal errors" matthiasnoback.nl/2025/07/fort...

Almost everywhere in our code should we allow errors to bubble up to higher abstraction levels, until we get to the point that we'd like to terminate the program. How to do that properly?

21.07.2025 07:19 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Errors and error handling - Part 6 - Guarantees The Evidence Pattern

New #Fortran post: "Errors and error handling part 6: Guarantees" matthiasnoback.nl/2025/07/fort...

If we want guarantees that data in a DT is correct, we have to use a custom constructor. Such a constructor then needs another Either return type so it can return a validated instance or an error.

18.07.2025 07:00 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Errors and error handling - Part 5 - Error propagation Error propagation and nesting

New #Fortran post: Errors and error handling part 5: Error propagation matthiasnoback.nl/2025/07/fort...

We redesign the error value so lower-level errors can be "wrapped" inside higher-level errors.

17.07.2025 06:56 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Errors and error handling - Part 4 - Using an Either type Dealing with parse errors

New #Fortran post: "Errors and error handling - Part 4 - Using an Either type" matthiasnoback.nl/2025/07/fort...

We consider a problem that involves parsing and find a solution to deal with errors: a parse function that returns an "Either" type, containing an error, or the expected result.

16.07.2025 06:14 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Errors and error handling - Part 3 - Preventing edge cases with types An alternative: the non-empty list type

New #Fortran post: Preventing edge cases with types matthiasnoback.nl/2025/07/fort...

We look at an alternative solution for calculating the average of an empty list; only offer such a procedure for a non-empty list.

15.07.2025 07:50 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Errors and error handling - Part 2 Optional results

New #Fortran post: "Errors & Error Handling Part 2 - Optional Results matthiasnoback.nl/2025/07/fort...

Instead of returning a success flag and use an intent(out) argument to return the actual function result, we implement an optional return value using an abstract derived type and two subtypes.

11.07.2025 07:14 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Errors and error handling - Part 1 - Exploration Exploring our options

New #Fortran post "Errors and error handling, part 1: Exploration": matthiasnoback.nl/2025/07/fort...

The first part in a series about dealing with errors: we explore some common approaches and what their downsides are.

10.07.2025 07:18 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Functional Programming Concepts - Reduce Reducing arrays to a single value

One extra #Fortran post for today: "Functional Programming Concepts - Reduce" matthiasnoback.nl/2025/06/fort...

Having discussed filter and map which transform arrays into new arrays, we still need another function: reduce, which transforms arrays into single values.

30.06.2025 12:06 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Functional Programming - List type Adding filter and map behavior to a list type

New #Fortran post: "Functional Programming - List Type" matthiasnoback.nl/2025/06/fort...

By introducing a list type we can bind the functional-style filter and map functions to a derived type, making it possible to "chain" multiple calls.

30.06.2025 07:35 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Functional Programming Concepts - Map Transforming arrays

New #Fortran post: "Fortran - Functional Programming Concepts - Map" matthiasnoback.nl/2025/06/fort...

After discussing filter functions, now it's time to work no a map function.

28.06.2025 08:47 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Functional programming - Closures Generic filtering

New #Fortran post: "Fortran - Functional Programming Concepts - Closures" matthiasnoback.nl/2025/06/fort...

Fortran doesn't have good support for higher-order functions and closures, can we replicate them?

27.06.2025 05:55 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Functional Programming Concepts - Generic Filtering Filtering arrays with other value types

New #Fortran post: "Functional Programming Concepts - Generic filtering" matthiasnoback.nl/2025/06/fort...

Fortran doesn't support generics, which would allow us to reuse the same filter function for arrays of different types of values. In this post we'll explore a work-around for this problem.

26.06.2025 07:16 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran - Functional Programming Concepts: Filter Introducing functional programming in Fortran with filtering integers

New #Fortran post: "Fortran - Functional Programming Concepts: Filter" matthiasnoback.nl/2025/06/fort...

Having looked at Object-Oriented programming concepts in Fortran, we now dive into Functional programming concepts. We start with filtering arrays of integers.

25.06.2025 10:24 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran: Enumeration, part 3 Adding more behavior and introducing enum subtypes

New #Fortran post: "Enumeration, part 3" matthiasnoback.nl/2025/06/fort...

It's surprising how much there is to explore about enumeration types, but here we are with the final part: we further improve the design by making log level an abstract type, and all the concrete levels subtypes.

20.06.2025 07:09 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran: Enumeration, part 2 Type safety, a log level factory, and operator overloading

New #Fortran post: "Enumeration, part 2" matthiasnoback.nl/2025/06/fort...

We increase type safety by narrowing the integer level argument to a derived type argument. A new factory type helps us separate responsibilities. Finally we compare levels using operator overloading.

19.06.2025 07:38 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran: Enumeration, part 1 In the post about decoration we declared log levels as follows: module logging_base ! ... integer, parameter, public :: LOG_DEBUG = 0 integer, parameter, public :: LOG_INFO = 1 integer, parameter,…

New #Fortran post: "Fortran: Enumeration, part 1" matthiasnoback.nl/2025/06/fort...

We are refactoring the integer parameters for the various log levels that we want to support. We want to accomplish type-safety and ease-of-use (pun intended).

18.06.2025 08:58 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran: Module Design Fortran projects are famous for their large modules. Actually, we may also find very large files in legacy projects written in other languages, like Java, PHP, etc. These projects sometimes have…

New #Fortran post: "Module Design" matthiasnoback.nl/2025/06/fort...

We splitt an existing module into smaller modules and put a faΓ§ade module in front of the smaller ones, so users only have to deal with a simple programming interface. Finally we fix compilation cascade with a submodule.

12.06.2025 10:23 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fortran: Service Composition, part 2: Decoration In the previous post we saw how to use an abstraction to compose an aggregation of services of that same abstraction. There we simply delegated a call, adding no specific behavior. But we might as…

New #Fortran post: Service Composition, part 2: Decoration matthiasnoback.nl/2025/06/fort...

In this post we explore another way of composing abstractions, which is called decoration. We prefix existing log messages with a timestamp and implement optional delegation based on a configured log level.

11.06.2025 13:53 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0