kino_wardley 0.8.0 released

Wardley map with three component states

This version adds the three simple states. These can be repurposed to identify important things.

Here is the commands to create the above:

KinoWardley.Output.new("""
component Tea [0.5, 0.5] label [10, 0]
outsource Tea

component Milk [0.4, 0.4] label [10, 0]
buy Milk

component Sugar [0.3, 0.3] label [10, 0]
build Sugar
""")

Domain Storytelling In Plantuml


This image

Domain Storytelling Diagram

Can be generated from:

@startuml

!include https://raw.githubusercontent.com/tmorin/plantuml-libs/master/distribution/domainstorytelling/single.puml

Title("What is Domain Storytelling?", "From the book __Domain Storytelling__")

include('domainstorytelling/Actor/User')
include('fontawesome-6/Regular/CommentDots')
include('fontawesome-6/Regular/Image')

User('domain_expert', "domain expert")
User('developer', "developer")
CommentDots('domain_story_a', 'domain story')
Image('domain_story_b', 'domain story')

domain_expert -r-> domain_story_a : Activity("01", "tells")
domain_story_a -r-> developer : Activity("", "to")

developer -d-> domain_story_b : Activity("02", "draws")

domain_expert -d-> domain_story_b : Activity("03", "reads and corrects")

@enduml

Putting this in source control keeps the story in alignment with the code.

Credo Quietly Failed.

Yesterday I had a credo failure on a merged PR. The same code had made it through two passes of our CI server (once on the branch and once on merge).

Inspecting the logs revealed that Credo had timed out parsing a file and just gave up leaving an innoculous info message.

Looking at the docs https://hexdocs.pm/credo/config_file.html reveals a config value that can be used to raise the timeout value. parse_timeout defaults to 5000 but can be given a larger value.

Why Making State Unrepresentable Is Wrong

I have been working with some validation code for a UI.
One of the entry fields is a year so I added a range constraint to enforce a minimum.
For purposes of this example assume it is a year of birth.
Given that the oldest person alive is 118 it is fairly safe to assume that all dates of birth will be in the last 130 years.

Given that it is now 2022 this means that the value needs to be in the range 1892-2022.
Enforce this too strictly and if you enter 0 and tab away the field defaults to 1892.
This now becomes hard to edit as each time you change a digit the validation will restore the minimum value making this field really hard to edit. All you can do to make this easier is to warn that it is out of range.

The Budget That Was Not A Budget

Yesterday the British government held a mini-budget that made major changes to policy. Reducing taxes while increasing spending requires borrowing. Doing so on the edge of a recession is an interesting approach.

In the analysis of the budget there was a lot of discussion about the lack of growth in the UK economy over the last few years. Growth must be relative to our neighbours so that rules out Covid as a reason? What remains does not seem to be talked about. The reason why we have the economic mess is the act of economic self-sabotage that is Brexit. Why is no one calling this out.

After the Royal Funeral

The last 10 days have been official mourning for the death of the Queen. In traditional British practice the news coverage has been over the top.

There have been various comments made about how it is inappropriate to question the monarchy during the mourning period.

However it must now be appropriate to question the monarchy before the corronation.

Generative Programming: Wardley Map Analysis

The book “Generative Programming Methods Tools and Applications” was published in 2000. It made the hypothesis that software would follow the same pattern that car manufacturing does.

In the highly automated car production pipeline it is possible to order a highly customised car yet have it built on a stardard production line from standard parts. GP:MTA assumed that this would soon be possible in software.

Dollard 2005 [Code Generation in dotnet] provides some univetsal priniples for code generation that apply irrespective of the implementation language.

We now have the Wonder articles (phase I) but the process stalled there. Dollard 2005 gives the techniques needed. See github.com/chriseyre2000/perfectstorm for an old but distinct implementation of Dollards ideas.

These techniques did not get the required level of adoption so that reusable templates could be produced. This was left at the initial stages of evolution.

In order to be taken further it will require some big adoption that makes it to a confrence paper. This could bootstrap the reusable catalog idea.

Code generation like this is not a 4GL, merely a means of extracting the business details from the implementation technology. You can achieve reuse without using up key options (single inheretence languages can avoid using up this powerful tool).

Minimise noise in logs

Try to keep the logs quiet. If something is happening we need to know. Logs can tell you that things are happening or have gone wrong. A request for intervention should be made once, pteferably by opening an alert on OpsGenie

Try to keep error messages clean. If possible treat warnings as errors. Noisy compile messages will hide real errors.