The obvious choice is PropEr since there is the book on the topic,
However there is also StreamData which is documented at Elixir School
I have some parsing that has got complex, but is in a critical part of the system. Property tests could help ensure that the system is not broken by tis change.
When you are launching a product or a new version of a product the actual release can be exciting. However from a development perspective it should be much simpler. Turn on a feature flag and check a few logs.
It can be exciting to see the numbers, but the technical process of go live should be as dull as you can make it. You should have tested all of the possible failure modes up front and the system knows how to handle them (or tell you via the logs that it needs help).
There will be some small issues with integrations that can’t be tested in advance, especially when the partners production system does not work exactly in the same way as the test system.
My employer went live with two partners over the last two days!
Over the last few years I have have been working with software almost exclusively in the cloud. There has not been a single local server running. In order to do this we use an array of cloud services:. Databases, Content Management Systems, Content Delivery Networks.
By using these it is possible to operate.a system at scale without costing the earth or having a huge development team. You do need a development team as things will always change.
With enough items in your supply chain (you do know your own supply chain?) you will find in any given year at least one of the providers will decide that they don’t want to (or show that they can’t) run a stable reliable service. Sometimes this is an attempt to move you to another service. Sometimes it is no longer viable for them to run it.
You have a choice at this point. Do you move to a different provider or do you build it yourself? If you do move to a different provider how similar is it? I had one case of moving a MongoDB to an AWS MongoDB compatible service. In this instance the AWS Product had the same API for entering data but had vastly different performance characteristics and in one specific case could not store some data that existed in the old system. This is fun when migrating a database and getting “sorry I can’t store that due to an embedded unprintable character”.
When you choose a vendor keep the analysis of the second and third choices. They may be needed later. Always plan an exit strategy. Those fancy platform specific features that you like so much can be a real pain when the next platform does not have them.
Building it yourself may be an option, but you are now taking on complexities that you didn’t previously have.
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 """)
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.
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.
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.
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.
Its good that there are multiple tools exploring this space.
The ERG seems to have taken over the conservative party. The 40 odd members of this secret society (the membership list is available but not published) have a controlling interest. They have more than half the parties majority.
Where is the balancing group or moderates? Have we no-one ready to challenge them from within their own party?