blog.ploeh.dk 4. 11. 2024Pendulum swing: no Haskell type annotation by default – blog.ploeh.dk 28. 10. 2024Functor compositions – blog.ploeh.dk 21. 10. 2024Legacy Security Manager in Haskell – blog.ploeh.dk 14. 10. 2024Functor sums – blog.ploeh.dk 7. 10. 2024The Const functor – blog.ploeh.dk 3. 10. 2024Das verflixte Hunde-Spiel – blog.ploeh.dk 23. 9. 2024FSZipper in C# – blog.ploeh.dk 16. 9. 2024Functor products – blog.ploeh.dk 9. 9. 2024A Binary Tree Zipper in C# – blog.ploeh.dk 2. 9. 2024Keeping cross-cutting concerns out of application code – blog.ploeh.dk 26. 8. 2024A List Zipper in C# – blog.ploeh.dk 19. 8. 2024Zippers – blog.ploeh.dk 12. 8. 2024Using only a Domain Model to persist restaurant table configurations – blog.ploeh.dk 5. 8. 2024Using a Shared Data Model to persist restaurant table configurations – blog.ploeh.dk 29. 7. 2024Using Ports and Adapters to persist restaurant table configurations – blog.ploeh.dk 25. 7. 2024Three data architectures for the server – blog.ploeh.dk 15. 7. 2024The end of trust? – blog.ploeh.dk 8. 7. 2024Should interfaces be asynchronous? – blog.ploeh.dk 1. 7. 2024An immutable priority collection – blog.ploeh.dk 24. 6. 2024A mutable priority collection – blog.ploeh.dk 17. 6. 2024A failed attempt at priority collection with inheritance – blog.ploeh.dk 12. 6. 2024Simpler encapsulation with immutability – blog.ploeh.dk 3. 6. 2024You'll regret using natural keys – blog.ploeh.dk 27. 5. 2024Continuous delivery without a CI server – blog.ploeh.dk 20. 5. 2024Fundamentals – blog.ploeh.dk 13. 5. 2024Gratification – blog.ploeh.dk 6. 5. 2024Conservative codomain conjecture – blog.ploeh.dk 29. 4. 2024Service compatibility is determined based on policy – blog.ploeh.dk 22. 4. 2024Fitting a polynomial to a set of points – blog.ploeh.dk 15. 4. 2024Services share schema and contract, not class – blog.ploeh.dk 8. 4. 2024Extracting curve coordinates from a bitmap – blog.ploeh.dk 1. 4. 2024Trying to fit the hype cycle – blog.ploeh.dk 25. 3. 2024Services are autonomous – blog.ploeh.dk 18. 3. 2024Extracting data from a small CSV file with Python – blog.ploeh.dk 11. 3. 2024Boundaries are explicit – blog.ploeh.dk 4. 3. 2024The four tenets of SOA revisited – blog.ploeh.dk 26. 2. 2024Testing exceptions – blog.ploeh.dk 19. 2. 2024Extracting data from a small CSV file with Haskell – blog.ploeh.dk 12. 2. 2024Range as a functor – blog.ploeh.dk 5. 2. 2024Statically and dynamically typed scripts – blog.ploeh.dk 29. 1. 2024Error categories and category errors – blog.ploeh.dk 22. 1. 2024A Range kata implementation in C# – blog.ploeh.dk 15. 1. 2024A Range kata implementation in F# – blog.ploeh.dk 8. 1. 2024A Range kata implementation in Haskell – blog.ploeh.dk 1. 1. 2024Variations of the Range kata – blog.ploeh.dk 25. 12. 2023Serializing restaurant tables in C# – blog.ploeh.dk 18. 12. 2023Serializing restaurant tables in F# – blog.ploeh.dk 11. 12. 2023Serializing restaurant tables in Haskell – blog.ploeh.dk 4. 12. 2023Serialization with and without Reflection – blog.ploeh.dk 27. 11. 2023Synchronizing concurrent teams – blog.ploeh.dk 20. 11. 2023Trimming a Fake Object – blog.ploeh.dk 14. 11. 2023CC golf – blog.ploeh.dk 13. 11. 2023Fakes are Test Doubles with contracts – blog.ploeh.dk 30. 10. 2023A C# port of validation with partial round trip – blog.ploeh.dk 23. 10. 2023Domain Model first – blog.ploeh.dk 16. 10. 2023At the boundaries, static types are illusory – blog.ploeh.dk 9. 10. 2023What's a sandwich? – blog.ploeh.dk 2. 10. 2023Dependency Whac-A-Mole – blog.ploeh.dk 25. 9. 2023The case of the mysterious comparison – blog.ploeh.dk 18. 9. 2023Do ORMs reduce the need for mapping? – blog.ploeh.dk 11. 9. 2023A first stab at the Brainfuck kata – blog.ploeh.dk 4. 9. 2023Decomposing CTFiYH's sample code base – blog.ploeh.dk 28. 8. 2023A first crack at the Args kata – blog.ploeh.dk 21. 8. 2023Compile-time type-checked truth tables – blog.ploeh.dk 14. 8. 2023Replacing Mock and Stub with a Fake – blog.ploeh.dk 7. 8. 2023NonEmpty catamorphism – blog.ploeh.dk 31. 7. 2023Test-driving the pyramid's top – blog.ploeh.dk 24. 7. 2023Is software getting worse? – blog.ploeh.dk 17. 7. 2023Works on most machines – blog.ploeh.dk 10. 7. 2023AI for doc comments – blog.ploeh.dk 3. 7. 2023Validating or verifying emails – blog.ploeh.dk 26. 6. 2023Validation and business rules – blog.ploeh.dk 19. 6. 2023When is an implementation detail an implementation detail? – blog.ploeh.dk 12. 6. 2023Collatz sequences by function composition – blog.ploeh.dk 5. 6. 2023The Git repository that vanished – blog.ploeh.dk 29. 5. 2023Favour flat code file folders – blog.ploeh.dk 23. 5. 2023Visual Studio Code snippet to make URLs relative – blog.ploeh.dk 15. 5. 2023Folders versus namespaces – blog.ploeh.dk 8. 5. 2023Is cyclomatic complexity really related to branch coverage? – blog.ploeh.dk 1. 5. 2023Refactoring pure function composition without breaking existing tests – blog.ploeh.dk 24. 4. 2023Are pull requests bad because they originate from open-source development? – blog.ploeh.dk 17. 4. 2023A restaurant example of refactoring from example-based to property-based testing – blog.ploeh.dk 10. 4. 2023Anagrams kata as a one-liner – blog.ploeh.dk 3. 4. 2023An abstract example of refactoring from interaction-based to property-based testing – blog.ploeh.dk 27. 3. 2023More functional pits of success – blog.ploeh.dk 20. 3. 2023On trust in software development – blog.ploeh.dk 13. 3. 2023Confidence from Facade Tests – blog.ploeh.dk 6. 3. 2023Warnings-as-errors friction – blog.ploeh.dk 27. 2. 2023Test Data Generator monad – blog.ploeh.dk 20. 2. 2023A thought on workplace flexibility and asynchrony – blog.ploeh.dk 13. 2. 2023Epistemology of interaction testing – blog.ploeh.dk 6. 2. 2023Contravariant functors as invariant functors – blog.ploeh.dk 30. 1. 2023Built-in alternatives to applicative assertions – blog.ploeh.dk 23. 1. 2023Agilean – blog.ploeh.dk 16. 1. 2023In the long run – blog.ploeh.dk 9. 1. 2023The IO monad – blog.ploeh.dk 2. 1. 2023Adding NuGet packages when offline – blog.ploeh.dk 26. 12. 2022Functors as invariant functors – blog.ploeh.dk 19. 12. 2022Error-accumulating composable assertions in C# – blog.ploeh.dk 12. 12. 2022When do tests fail? – blog.ploeh.dk 5. 12. 2022GitHub Copilot preliminary experience report – blog.ploeh.dk 28. 11. 2022An initial proof of concept of applicative assertions in C# – blog.ploeh.dk 21. 11. 2022Decouple to delete – blog.ploeh.dk 14. 11. 2022The Reader monad – blog.ploeh.dk 7. 11. 2022Applicative assertions – blog.ploeh.dk 31. 10. 2022A regular grid emerges – blog.ploeh.dk 24. 10. 2022Encapsulation in Functional Programming – blog.ploeh.dk 17. 10. 2022Stubs and mocks break encapsulation – blog.ploeh.dk 10. 10. 2022Refactoring a saga from the State pattern to the State monad – blog.ploeh.dk 3. 10. 2022Some thoughts on the economics of programming – blog.ploeh.dk 26. 9. 2022Refactoring the TCP State pattern example to pure functions – blog.ploeh.dk 19. 9. 2022When to refactor – blog.ploeh.dk 12. 9. 2022Coalescing DTOs – blog.ploeh.dk 5. 9. 2022The State pattern and the State monad – blog.ploeh.dk 29. 8. 2022Natural transformations as invariant functors – blog.ploeh.dk 22. 8. 2022Can types replace validation? – blog.ploeh.dk 15. 8. 2022ASP.NET validation revisited – blog.ploeh.dk 8. 8. 2022Endomorphism as an invariant functor – blog.ploeh.dk 1. 8. 2022Invariant functors – blog.ploeh.dk 25. 7. 2022An applicative reservation validation example in C# – blog.ploeh.dk 18. 7. 2022Natural transformations – blog.ploeh.dk 11. 7. 2022Functor relationships – blog.ploeh.dk 4. 7. 2022Get and Put State – blog.ploeh.dk 27. 6. 2022Test Double clocks – blog.ploeh.dk 20. 6. 2022The State monad – blog.ploeh.dk 13. 6. 2022Some thoughts on naming tests – blog.ploeh.dk 6. 6. 2022Asynchronous monads – blog.ploeh.dk 30. 5. 2022The Lazy monad – blog.ploeh.dk 23. 5. 2022Waiting to never happen – blog.ploeh.dk 16. 5. 2022The Identity monad – blog.ploeh.dk 9. 5. 2022An Either monad – blog.ploeh.dk 2. 5. 2022At the boundaries, applications aren't functional – blog.ploeh.dk 25. 4. 2022The Maybe monad – blog.ploeh.dk 19. 4. 2022The List monad – blog.ploeh.dk 11. 4. 2022Monad laws – blog.ploeh.dk 4. 4. 2022Kleisli composition – blog.ploeh.dk 28. 3. 2022Monads – blog.ploeh.dk 21. 3. 2022Contravariant Dependency Injection – blog.ploeh.dk 14. 3. 2022Type-safe DI Containers are redundant – blog.ploeh.dk 7. 3. 2022A type-safe DI Container as a tuple – blog.ploeh.dk 28. 2. 2022Can one flatten a statically typed list? – blog.ploeh.dk 21. 2. 2022A type-safe DI Container as a functor – blog.ploeh.dk 14. 2. 2022A conditional sandwich example – blog.ploeh.dk 7. 2. 2022Nested type-safe DI Containers – blog.ploeh.dk 31. 1. 2022A type-safe DI Container C# example – blog.ploeh.dk 24. 1. 2022Type-level DI Container prototype – blog.ploeh.dk 17. 1. 2022Enumerate Wordle combinations with an applicative functor – blog.ploeh.dk 10. 1. 2022Type-safe DI composition – blog.ploeh.dk 3. 1. 2022To ID or not to ID – blog.ploeh.dk 27. 12. 2021Label persistent test data with deletion dates – blog.ploeh.dk 20. 12. 2021Changing your organisation – blog.ploeh.dk 13. 12. 2021Backwards compatibility as a profunctor – blog.ploeh.dk 6. 12. 2021The Liskov Substitution Principle as a profunctor – blog.ploeh.dk 29. 11. 2021Postel's law as a profunctor – blog.ploeh.dk 22. 11. 2021Functions as pipes – blog.ploeh.dk 15. 11. 2021Types as sets – blog.ploeh.dk 8. 11. 2021Reader as a profunctor – blog.ploeh.dk 1. 11. 2021Profunctors – blog.ploeh.dk 25. 10. 2021Functor variance compared to C#'s notion of variance – blog.ploeh.dk 18. 10. 2021Readability verification – blog.ploeh.dk 11. 10. 2021Serendipity-driven development – blog.ploeh.dk 4. 10. 2021Reader as a contravariant functor – blog.ploeh.dk 27. 9. 2021The Equivalence contravariant functor – blog.ploeh.dk 20. 9. 2021Keep IDs internal with REST – blog.ploeh.dk 13. 9. 2021Unit testing private helper methods – blog.ploeh.dk 9. 9. 2021The Specification contravariant functor – blog.ploeh.dk 6. 9. 2021The Command Handler contravariant functor – blog.ploeh.dk 2. 9. 2021Contravariant functors – blog.ploeh.dk 30. 8. 2021The Reader functor – blog.ploeh.dk 9. 8. 2021Am I stuck in a local maximum? – blog.ploeh.dk 3. 8. 2021The Tennis kata revisited – blog.ploeh.dk 28. 7. 2021Referential transparency fits in your head – blog.ploeh.dk 19. 7. 2021The State functor – blog.ploeh.dk 12. 7. 2021A reading of Extensibility for the Masses – blog.ploeh.dk 5. 7. 2021Fractal hex flowers – blog.ploeh.dk 28. 6. 2021Property-based testing is not the same as partition testing – blog.ploeh.dk 21. 6. 2021Agile pull requests – blog.ploeh.dk 14. 6. 2021New book: Code That Fits in Your Head – blog.ploeh.dk 7. 6. 2021Abstruse nomenclature – blog.ploeh.dk 31. 5. 2021From State tennis to endomorphism – blog.ploeh.dk 24. 5. 2021Tennis kata using the State pattern – blog.ploeh.dk 17. 5. 2021Against consistency – blog.ploeh.dk 10. 5. 2021Simplifying code with Decorated Commands – blog.ploeh.dk 3. 5. 2021Structural equality for better tests – blog.ploeh.dk 26. 4. 2021Leaky abstraction by omission – blog.ploeh.dk 19. 4. 2021Consider including identity in URLs – blog.ploeh.dk 12. 4. 2021Threading context through a catamorphism – blog.ploeh.dk 5. 4. 2021Mazes on Voronoi tessellations – blog.ploeh.dk 29. 3. 2021Table-driven tennis scoring – blog.ploeh.dk 22. 3. 2021The dispassionate developer – blog.ploeh.dk 15. 3. 2021Pendulum swing: pure by default – blog.ploeh.dk 8. 3. 2021Pendulum swing: sealed by default – blog.ploeh.dk 1. 3. 2021Pendulum swing: internal by default – blog.ploeh.dk 22. 2. 2021Pendulum swings – blog.ploeh.dk 15. 2. 2021When properties are easier than examples – blog.ploeh.dk 9. 2. 2021Accountability and free speech – blog.ploeh.dk 1. 2. 2021ASP.NET POCO Controllers: an experience report – blog.ploeh.dk 25. 1. 2021Self-hosted integration tests in ASP.NET – blog.ploeh.dk 18. 1. 2021Parametrised test primitive obsession code smell – blog.ploeh.dk 11. 1. 2021Waiting to happen – blog.ploeh.dk 4. 1. 2021Dynamic test oracles for rho problems – blog.ploeh.dk 28. 12. 2020An F# demo of validation with partial data round trip – blog.ploeh.dk 21. 12. 2020A Haskell proof of concept of validation with partial data round trip – blog.ploeh.dk 14. 12. 2020Validation, a solved problem? – blog.ploeh.dk 7. 12. 2020Branching tests – blog.ploeh.dk 30. 11. 2020Name by role – blog.ploeh.dk 23. 11. 2020Good names are skin-deep – blog.ploeh.dk 16. 11. 2020Redirect legacy URLs – blog.ploeh.dk 9. 11. 2020Checking signed URLs with ASP.NET – blog.ploeh.dk 2. 11. 2020Signing URLs with ASP.NET – blog.ploeh.dk 26. 10. 2020Fit URLs – blog.ploeh.dk 19. 10. 2020Monomorphic functors – blog.ploeh.dk 12. 10. 2020Subjectivity – blog.ploeh.dk 5. 10. 2020Fortunately, I don't squash my commits – blog.ploeh.dk 28. 9. 2020EnsureSuccessStatusCode as an assertion – blog.ploeh.dk 21. 9. 2020An XPath query for long methods – blog.ploeh.dk 14. 9. 2020We need young programmers; we need old programmers – blog.ploeh.dk 7. 9. 2020Add null check without brackets in Visual Studio – blog.ploeh.dk 31. 8. 2020Properties for all – blog.ploeh.dk 24. 8. 2020Adding REST links as a cross-cutting concern – blog.ploeh.dk 17. 8. 2020Unit testing is fine – blog.ploeh.dk 10. 8. 2020An ASP.NET Core URL Builder – blog.ploeh.dk 3. 8. 2020Using the nameof C# keyword with ASP.NET 3 IUrlHelper – blog.ploeh.dk 27. 7. 2020Task asynchronous programming as an IO surrogate – blog.ploeh.dk 20. 7. 2020Closing database connections during test teardown – blog.ploeh.dk 13. 7. 2020Implementation of the C# IO container – blog.ploeh.dk 6. 7. 2020Referential transparency of IO – blog.ploeh.dk 29. 6. 2020Syntactic sugar for IO – blog.ploeh.dk 22. 6. 2020The IO functor – blog.ploeh.dk 15. 6. 2020IO container in a parallel C# universe – blog.ploeh.dk 8. 6. 2020The IO Container – blog.ploeh.dk 1. 6. 2020Retiring old service versions – blog.ploeh.dk 25. 5. 2020Where's the science? – blog.ploeh.dk 18. 5. 2020Modelling versus shaping reality – blog.ploeh.dk 11. 5. 2020AFK – blog.ploeh.dk 4. 5. 2020Significant whitespace is DRY – blog.ploeh.dk 27. 4. 2020An F# implementation of the Maître d' kata – blog.ploeh.dk 20. 4. 2020Unit bias against collections – blog.ploeh.dk 13. 4. 2020Curb code rot with thresholds – blog.ploeh.dk 6. 4. 2020Repeatable execution in C# – blog.ploeh.dk 30. 3. 2020Repeatable execution in Haskell – blog.ploeh.dk 23. 3. 2020Repeatable execution – blog.ploeh.dk 16. 3. 2020Conway's Law: latency versus throughput – blog.ploeh.dk 9. 3. 2020Polymorphic Builder – blog.ploeh.dk 2. 3. 2020Impureim sandwich – blog.ploeh.dk 24. 2. 2020Discerning and maintaining purity – blog.ploeh.dk 17. 2. 2020Builder as a monoid – blog.ploeh.dk 10. 2. 2020Builder isomorphisms – blog.ploeh.dk 3. 2. 2020Non-exceptional averages – blog.ploeh.dk 27. 1. 2020The Maître d' kata – blog.ploeh.dk 13. 1. 2020On doing katas – blog.ploeh.dk 6. 1. 2020The case of the unbalanced brackets – blog.ploeh.dk 30. 12. 2019Semigroup resonance FizzBuzz – blog.ploeh.dk 23. 12. 2019The case of the mysterious curly bracket – blog.ploeh.dk 16. 12. 2019Zone of Ceremony – blog.ploeh.dk 9. 12. 2019Put cyclomatic complexity to good use – blog.ploeh.dk 2. 12. 2019Refactoring registration flow to functional architecture – blog.ploeh.dk 25. 11. 2019TimeSpan configuration values in .NET Core – blog.ploeh.dk 18. 11. 2019Small methods are easy to troubleshoot – blog.ploeh.dk 11. 11. 2019Diamond rock – blog.ploeh.dk 4. 11. 2019The 80/24 rule – blog.ploeh.dk 28. 10. 2019A basic Haskell solution to the robot journeys coding exercise – blog.ploeh.dk 21. 10. 2019A red-green-refactor checklist – blog.ploeh.dk 14. 10. 2019Tautological assertion – blog.ploeh.dk 7. 10. 2019Devil's advocate – blog.ploeh.dk 30. 9. 201910x developers – blog.ploeh.dk 23. 9. 2019Unit testing wai applications – blog.ploeh.dk 16. 9. 2019Picture archivist in F# – blog.ploeh.dk 9. 9. 2019Picture archivist in Haskell – blog.ploeh.dk 2. 9. 2019Naming newtypes for QuickCheck Arbitraries – blog.ploeh.dk 26. 8. 2019Functional file system – blog.ploeh.dk 19. 8. 2019A rose tree functor – blog.ploeh.dk 12. 8. 2019Rose tree bifunctor – blog.ploeh.dk 5. 8. 2019Rose tree catamorphism – blog.ploeh.dk 29. 7. 2019Church-encoded rose tree – blog.ploeh.dk 22. 7. 2019Chain of Responsibility as catamorphisms – blog.ploeh.dk 15. 7. 2019Tester-Doer isomorphisms – blog.ploeh.dk 8. 7. 2019Payment types catamorphism – blog.ploeh.dk 1. 7. 2019Yes silver bullet – blog.ploeh.dk 24. 6. 2019Full binary tree catamorphism – blog.ploeh.dk 17. 6. 2019Composition Root location – blog.ploeh.dk 10. 6. 2019Tree catamorphism – blog.ploeh.dk 3. 6. 2019Either catamorphism – blog.ploeh.dk 27. 5. 2019List catamorphism – blog.ploeh.dk 20. 5. 2019Maybe catamorphism – blog.ploeh.dk 13. 5. 2019Peano catamorphism – blog.ploeh.dk 6. 5. 2019Boolean catamorphism – blog.ploeh.dk 29. 4. 2019Catamorphisms – blog.ploeh.dk 22. 4. 2019Applicative monoids – blog.ploeh.dk 15. 4. 2019Lazy monoids – blog.ploeh.dk 8. 4. 2019A pure Test Spy – blog.ploeh.dk 1. 4. 2019An example of state-based testing in C# – blog.ploeh.dk 25. 3. 2019An example of state based-testing in F# – blog.ploeh.dk 18. 3. 2019The programmer as decision maker – blog.ploeh.dk 11. 3. 2019An example of state-based testing in Haskell – blog.ploeh.dk 4. 3. 2019Code quality isn't software quality – blog.ploeh.dk 25. 2. 2019An example of interaction-based testing in C# – blog.ploeh.dk 18. 2. 2019From interaction-based to state-based testing – blog.ploeh.dk 11. 2. 2019Asynchronous Injection – blog.ploeh.dk 4. 2. 2019How to get the value out of the monad – blog.ploeh.dk
4. 11. 2024Pendulum swing: no Haskell type annotation by default – blog.ploeh.dk 28. 10. 2024Functor compositions – blog.ploeh.dk 21. 10. 2024Legacy Security Manager in Haskell – blog.ploeh.dk 14. 10. 2024Functor sums – blog.ploeh.dk 7. 10. 2024The Const functor – blog.ploeh.dk 3. 10. 2024Das verflixte Hunde-Spiel – blog.ploeh.dk 23. 9. 2024FSZipper in C# – blog.ploeh.dk 16. 9. 2024Functor products – blog.ploeh.dk 9. 9. 2024A Binary Tree Zipper in C# – blog.ploeh.dk 2. 9. 2024Keeping cross-cutting concerns out of application code – blog.ploeh.dk 26. 8. 2024A List Zipper in C# – blog.ploeh.dk 19. 8. 2024Zippers – blog.ploeh.dk 12. 8. 2024Using only a Domain Model to persist restaurant table configurations – blog.ploeh.dk 5. 8. 2024Using a Shared Data Model to persist restaurant table configurations – blog.ploeh.dk 29. 7. 2024Using Ports and Adapters to persist restaurant table configurations – blog.ploeh.dk 25. 7. 2024Three data architectures for the server – blog.ploeh.dk 15. 7. 2024The end of trust? – blog.ploeh.dk 8. 7. 2024Should interfaces be asynchronous? – blog.ploeh.dk 1. 7. 2024An immutable priority collection – blog.ploeh.dk 24. 6. 2024A mutable priority collection – blog.ploeh.dk 17. 6. 2024A failed attempt at priority collection with inheritance – blog.ploeh.dk 12. 6. 2024Simpler encapsulation with immutability – blog.ploeh.dk 3. 6. 2024You'll regret using natural keys – blog.ploeh.dk 27. 5. 2024Continuous delivery without a CI server – blog.ploeh.dk 20. 5. 2024Fundamentals – blog.ploeh.dk 13. 5. 2024Gratification – blog.ploeh.dk 6. 5. 2024Conservative codomain conjecture – blog.ploeh.dk 29. 4. 2024Service compatibility is determined based on policy – blog.ploeh.dk 22. 4. 2024Fitting a polynomial to a set of points – blog.ploeh.dk 15. 4. 2024Services share schema and contract, not class – blog.ploeh.dk 8. 4. 2024Extracting curve coordinates from a bitmap – blog.ploeh.dk 1. 4. 2024Trying to fit the hype cycle – blog.ploeh.dk 25. 3. 2024Services are autonomous – blog.ploeh.dk 18. 3. 2024Extracting data from a small CSV file with Python – blog.ploeh.dk 11. 3. 2024Boundaries are explicit – blog.ploeh.dk 4. 3. 2024The four tenets of SOA revisited – blog.ploeh.dk 26. 2. 2024Testing exceptions – blog.ploeh.dk 19. 2. 2024Extracting data from a small CSV file with Haskell – blog.ploeh.dk 12. 2. 2024Range as a functor – blog.ploeh.dk 5. 2. 2024Statically and dynamically typed scripts – blog.ploeh.dk 29. 1. 2024Error categories and category errors – blog.ploeh.dk 22. 1. 2024A Range kata implementation in C# – blog.ploeh.dk 15. 1. 2024A Range kata implementation in F# – blog.ploeh.dk 8. 1. 2024A Range kata implementation in Haskell – blog.ploeh.dk 1. 1. 2024Variations of the Range kata – blog.ploeh.dk 25. 12. 2023Serializing restaurant tables in C# – blog.ploeh.dk 18. 12. 2023Serializing restaurant tables in F# – blog.ploeh.dk 11. 12. 2023Serializing restaurant tables in Haskell – blog.ploeh.dk 4. 12. 2023Serialization with and without Reflection – blog.ploeh.dk 27. 11. 2023Synchronizing concurrent teams – blog.ploeh.dk 20. 11. 2023Trimming a Fake Object – blog.ploeh.dk 14. 11. 2023CC golf – blog.ploeh.dk 13. 11. 2023Fakes are Test Doubles with contracts – blog.ploeh.dk 30. 10. 2023A C# port of validation with partial round trip – blog.ploeh.dk 23. 10. 2023Domain Model first – blog.ploeh.dk 16. 10. 2023At the boundaries, static types are illusory – blog.ploeh.dk 9. 10. 2023What's a sandwich? – blog.ploeh.dk 2. 10. 2023Dependency Whac-A-Mole – blog.ploeh.dk 25. 9. 2023The case of the mysterious comparison – blog.ploeh.dk 18. 9. 2023Do ORMs reduce the need for mapping? – blog.ploeh.dk 11. 9. 2023A first stab at the Brainfuck kata – blog.ploeh.dk 4. 9. 2023Decomposing CTFiYH's sample code base – blog.ploeh.dk 28. 8. 2023A first crack at the Args kata – blog.ploeh.dk 21. 8. 2023Compile-time type-checked truth tables – blog.ploeh.dk 14. 8. 2023Replacing Mock and Stub with a Fake – blog.ploeh.dk 7. 8. 2023NonEmpty catamorphism – blog.ploeh.dk 31. 7. 2023Test-driving the pyramid's top – blog.ploeh.dk 24. 7. 2023Is software getting worse? – blog.ploeh.dk 17. 7. 2023Works on most machines – blog.ploeh.dk 10. 7. 2023AI for doc comments – blog.ploeh.dk 3. 7. 2023Validating or verifying emails – blog.ploeh.dk 26. 6. 2023Validation and business rules – blog.ploeh.dk 19. 6. 2023When is an implementation detail an implementation detail? – blog.ploeh.dk 12. 6. 2023Collatz sequences by function composition – blog.ploeh.dk 5. 6. 2023The Git repository that vanished – blog.ploeh.dk 29. 5. 2023Favour flat code file folders – blog.ploeh.dk 23. 5. 2023Visual Studio Code snippet to make URLs relative – blog.ploeh.dk 15. 5. 2023Folders versus namespaces – blog.ploeh.dk 8. 5. 2023Is cyclomatic complexity really related to branch coverage? – blog.ploeh.dk 1. 5. 2023Refactoring pure function composition without breaking existing tests – blog.ploeh.dk 24. 4. 2023Are pull requests bad because they originate from open-source development? – blog.ploeh.dk 17. 4. 2023A restaurant example of refactoring from example-based to property-based testing – blog.ploeh.dk 10. 4. 2023Anagrams kata as a one-liner – blog.ploeh.dk 3. 4. 2023An abstract example of refactoring from interaction-based to property-based testing – blog.ploeh.dk 27. 3. 2023More functional pits of success – blog.ploeh.dk 20. 3. 2023On trust in software development – blog.ploeh.dk 13. 3. 2023Confidence from Facade Tests – blog.ploeh.dk 6. 3. 2023Warnings-as-errors friction – blog.ploeh.dk 27. 2. 2023Test Data Generator monad – blog.ploeh.dk 20. 2. 2023A thought on workplace flexibility and asynchrony – blog.ploeh.dk 13. 2. 2023Epistemology of interaction testing – blog.ploeh.dk 6. 2. 2023Contravariant functors as invariant functors – blog.ploeh.dk 30. 1. 2023Built-in alternatives to applicative assertions – blog.ploeh.dk 23. 1. 2023Agilean – blog.ploeh.dk 16. 1. 2023In the long run – blog.ploeh.dk 9. 1. 2023The IO monad – blog.ploeh.dk 2. 1. 2023Adding NuGet packages when offline – blog.ploeh.dk 26. 12. 2022Functors as invariant functors – blog.ploeh.dk 19. 12. 2022Error-accumulating composable assertions in C# – blog.ploeh.dk 12. 12. 2022When do tests fail? – blog.ploeh.dk 5. 12. 2022GitHub Copilot preliminary experience report – blog.ploeh.dk 28. 11. 2022An initial proof of concept of applicative assertions in C# – blog.ploeh.dk 21. 11. 2022Decouple to delete – blog.ploeh.dk 14. 11. 2022The Reader monad – blog.ploeh.dk 7. 11. 2022Applicative assertions – blog.ploeh.dk 31. 10. 2022A regular grid emerges – blog.ploeh.dk 24. 10. 2022Encapsulation in Functional Programming – blog.ploeh.dk 17. 10. 2022Stubs and mocks break encapsulation – blog.ploeh.dk 10. 10. 2022Refactoring a saga from the State pattern to the State monad – blog.ploeh.dk 3. 10. 2022Some thoughts on the economics of programming – blog.ploeh.dk 26. 9. 2022Refactoring the TCP State pattern example to pure functions – blog.ploeh.dk 19. 9. 2022When to refactor – blog.ploeh.dk 12. 9. 2022Coalescing DTOs – blog.ploeh.dk 5. 9. 2022The State pattern and the State monad – blog.ploeh.dk 29. 8. 2022Natural transformations as invariant functors – blog.ploeh.dk 22. 8. 2022Can types replace validation? – blog.ploeh.dk 15. 8. 2022ASP.NET validation revisited – blog.ploeh.dk 8. 8. 2022Endomorphism as an invariant functor – blog.ploeh.dk 1. 8. 2022Invariant functors – blog.ploeh.dk 25. 7. 2022An applicative reservation validation example in C# – blog.ploeh.dk 18. 7. 2022Natural transformations – blog.ploeh.dk 11. 7. 2022Functor relationships – blog.ploeh.dk 4. 7. 2022Get and Put State – blog.ploeh.dk 27. 6. 2022Test Double clocks – blog.ploeh.dk 20. 6. 2022The State monad – blog.ploeh.dk 13. 6. 2022Some thoughts on naming tests – blog.ploeh.dk 6. 6. 2022Asynchronous monads – blog.ploeh.dk 30. 5. 2022The Lazy monad – blog.ploeh.dk 23. 5. 2022Waiting to never happen – blog.ploeh.dk 16. 5. 2022The Identity monad – blog.ploeh.dk 9. 5. 2022An Either monad – blog.ploeh.dk 2. 5. 2022At the boundaries, applications aren't functional – blog.ploeh.dk 25. 4. 2022The Maybe monad – blog.ploeh.dk 19. 4. 2022The List monad – blog.ploeh.dk 11. 4. 2022Monad laws – blog.ploeh.dk 4. 4. 2022Kleisli composition – blog.ploeh.dk 28. 3. 2022Monads – blog.ploeh.dk 21. 3. 2022Contravariant Dependency Injection – blog.ploeh.dk 14. 3. 2022Type-safe DI Containers are redundant – blog.ploeh.dk 7. 3. 2022A type-safe DI Container as a tuple – blog.ploeh.dk 28. 2. 2022Can one flatten a statically typed list? – blog.ploeh.dk 21. 2. 2022A type-safe DI Container as a functor – blog.ploeh.dk 14. 2. 2022A conditional sandwich example – blog.ploeh.dk 7. 2. 2022Nested type-safe DI Containers – blog.ploeh.dk 31. 1. 2022A type-safe DI Container C# example – blog.ploeh.dk 24. 1. 2022Type-level DI Container prototype – blog.ploeh.dk 17. 1. 2022Enumerate Wordle combinations with an applicative functor – blog.ploeh.dk 10. 1. 2022Type-safe DI composition – blog.ploeh.dk 3. 1. 2022To ID or not to ID – blog.ploeh.dk 27. 12. 2021Label persistent test data with deletion dates – blog.ploeh.dk 20. 12. 2021Changing your organisation – blog.ploeh.dk 13. 12. 2021Backwards compatibility as a profunctor – blog.ploeh.dk 6. 12. 2021The Liskov Substitution Principle as a profunctor – blog.ploeh.dk 29. 11. 2021Postel's law as a profunctor – blog.ploeh.dk 22. 11. 2021Functions as pipes – blog.ploeh.dk 15. 11. 2021Types as sets – blog.ploeh.dk 8. 11. 2021Reader as a profunctor – blog.ploeh.dk 1. 11. 2021Profunctors – blog.ploeh.dk 25. 10. 2021Functor variance compared to C#'s notion of variance – blog.ploeh.dk 18. 10. 2021Readability verification – blog.ploeh.dk 11. 10. 2021Serendipity-driven development – blog.ploeh.dk 4. 10. 2021Reader as a contravariant functor – blog.ploeh.dk 27. 9. 2021The Equivalence contravariant functor – blog.ploeh.dk 20. 9. 2021Keep IDs internal with REST – blog.ploeh.dk 13. 9. 2021Unit testing private helper methods – blog.ploeh.dk 9. 9. 2021The Specification contravariant functor – blog.ploeh.dk 6. 9. 2021The Command Handler contravariant functor – blog.ploeh.dk 2. 9. 2021Contravariant functors – blog.ploeh.dk 30. 8. 2021The Reader functor – blog.ploeh.dk 9. 8. 2021Am I stuck in a local maximum? – blog.ploeh.dk 3. 8. 2021The Tennis kata revisited – blog.ploeh.dk 28. 7. 2021Referential transparency fits in your head – blog.ploeh.dk 19. 7. 2021The State functor – blog.ploeh.dk 12. 7. 2021A reading of Extensibility for the Masses – blog.ploeh.dk 5. 7. 2021Fractal hex flowers – blog.ploeh.dk 28. 6. 2021Property-based testing is not the same as partition testing – blog.ploeh.dk 21. 6. 2021Agile pull requests – blog.ploeh.dk 14. 6. 2021New book: Code That Fits in Your Head – blog.ploeh.dk 7. 6. 2021Abstruse nomenclature – blog.ploeh.dk 31. 5. 2021From State tennis to endomorphism – blog.ploeh.dk 24. 5. 2021Tennis kata using the State pattern – blog.ploeh.dk 17. 5. 2021Against consistency – blog.ploeh.dk 10. 5. 2021Simplifying code with Decorated Commands – blog.ploeh.dk 3. 5. 2021Structural equality for better tests – blog.ploeh.dk 26. 4. 2021Leaky abstraction by omission – blog.ploeh.dk 19. 4. 2021Consider including identity in URLs – blog.ploeh.dk 12. 4. 2021Threading context through a catamorphism – blog.ploeh.dk 5. 4. 2021Mazes on Voronoi tessellations – blog.ploeh.dk 29. 3. 2021Table-driven tennis scoring – blog.ploeh.dk 22. 3. 2021The dispassionate developer – blog.ploeh.dk 15. 3. 2021Pendulum swing: pure by default – blog.ploeh.dk 8. 3. 2021Pendulum swing: sealed by default – blog.ploeh.dk 1. 3. 2021Pendulum swing: internal by default – blog.ploeh.dk 22. 2. 2021Pendulum swings – blog.ploeh.dk 15. 2. 2021When properties are easier than examples – blog.ploeh.dk 9. 2. 2021Accountability and free speech – blog.ploeh.dk 1. 2. 2021ASP.NET POCO Controllers: an experience report – blog.ploeh.dk 25. 1. 2021Self-hosted integration tests in ASP.NET – blog.ploeh.dk 18. 1. 2021Parametrised test primitive obsession code smell – blog.ploeh.dk 11. 1. 2021Waiting to happen – blog.ploeh.dk 4. 1. 2021Dynamic test oracles for rho problems – blog.ploeh.dk 28. 12. 2020An F# demo of validation with partial data round trip – blog.ploeh.dk 21. 12. 2020A Haskell proof of concept of validation with partial data round trip – blog.ploeh.dk 14. 12. 2020Validation, a solved problem? – blog.ploeh.dk 7. 12. 2020Branching tests – blog.ploeh.dk 30. 11. 2020Name by role – blog.ploeh.dk 23. 11. 2020Good names are skin-deep – blog.ploeh.dk 16. 11. 2020Redirect legacy URLs – blog.ploeh.dk 9. 11. 2020Checking signed URLs with ASP.NET – blog.ploeh.dk 2. 11. 2020Signing URLs with ASP.NET – blog.ploeh.dk 26. 10. 2020Fit URLs – blog.ploeh.dk 19. 10. 2020Monomorphic functors – blog.ploeh.dk 12. 10. 2020Subjectivity – blog.ploeh.dk 5. 10. 2020Fortunately, I don't squash my commits – blog.ploeh.dk 28. 9. 2020EnsureSuccessStatusCode as an assertion – blog.ploeh.dk 21. 9. 2020An XPath query for long methods – blog.ploeh.dk 14. 9. 2020We need young programmers; we need old programmers – blog.ploeh.dk 7. 9. 2020Add null check without brackets in Visual Studio – blog.ploeh.dk 31. 8. 2020Properties for all – blog.ploeh.dk 24. 8. 2020Adding REST links as a cross-cutting concern – blog.ploeh.dk 17. 8. 2020Unit testing is fine – blog.ploeh.dk 10. 8. 2020An ASP.NET Core URL Builder – blog.ploeh.dk 3. 8. 2020Using the nameof C# keyword with ASP.NET 3 IUrlHelper – blog.ploeh.dk 27. 7. 2020Task asynchronous programming as an IO surrogate – blog.ploeh.dk 20. 7. 2020Closing database connections during test teardown – blog.ploeh.dk 13. 7. 2020Implementation of the C# IO container – blog.ploeh.dk 6. 7. 2020Referential transparency of IO – blog.ploeh.dk 29. 6. 2020Syntactic sugar for IO – blog.ploeh.dk 22. 6. 2020The IO functor – blog.ploeh.dk 15. 6. 2020IO container in a parallel C# universe – blog.ploeh.dk 8. 6. 2020The IO Container – blog.ploeh.dk 1. 6. 2020Retiring old service versions – blog.ploeh.dk 25. 5. 2020Where's the science? – blog.ploeh.dk 18. 5. 2020Modelling versus shaping reality – blog.ploeh.dk 11. 5. 2020AFK – blog.ploeh.dk 4. 5. 2020Significant whitespace is DRY – blog.ploeh.dk 27. 4. 2020An F# implementation of the Maître d' kata – blog.ploeh.dk 20. 4. 2020Unit bias against collections – blog.ploeh.dk 13. 4. 2020Curb code rot with thresholds – blog.ploeh.dk 6. 4. 2020Repeatable execution in C# – blog.ploeh.dk 30. 3. 2020Repeatable execution in Haskell – blog.ploeh.dk 23. 3. 2020Repeatable execution – blog.ploeh.dk 16. 3. 2020Conway's Law: latency versus throughput – blog.ploeh.dk 9. 3. 2020Polymorphic Builder – blog.ploeh.dk 2. 3. 2020Impureim sandwich – blog.ploeh.dk 24. 2. 2020Discerning and maintaining purity – blog.ploeh.dk 17. 2. 2020Builder as a monoid – blog.ploeh.dk 10. 2. 2020Builder isomorphisms – blog.ploeh.dk 3. 2. 2020Non-exceptional averages – blog.ploeh.dk 27. 1. 2020The Maître d' kata – blog.ploeh.dk 13. 1. 2020On doing katas – blog.ploeh.dk 6. 1. 2020The case of the unbalanced brackets – blog.ploeh.dk 30. 12. 2019Semigroup resonance FizzBuzz – blog.ploeh.dk 23. 12. 2019The case of the mysterious curly bracket – blog.ploeh.dk 16. 12. 2019Zone of Ceremony – blog.ploeh.dk 9. 12. 2019Put cyclomatic complexity to good use – blog.ploeh.dk 2. 12. 2019Refactoring registration flow to functional architecture – blog.ploeh.dk 25. 11. 2019TimeSpan configuration values in .NET Core – blog.ploeh.dk 18. 11. 2019Small methods are easy to troubleshoot – blog.ploeh.dk 11. 11. 2019Diamond rock – blog.ploeh.dk 4. 11. 2019The 80/24 rule – blog.ploeh.dk 28. 10. 2019A basic Haskell solution to the robot journeys coding exercise – blog.ploeh.dk 21. 10. 2019A red-green-refactor checklist – blog.ploeh.dk 14. 10. 2019Tautological assertion – blog.ploeh.dk 7. 10. 2019Devil's advocate – blog.ploeh.dk 30. 9. 201910x developers – blog.ploeh.dk 23. 9. 2019Unit testing wai applications – blog.ploeh.dk 16. 9. 2019Picture archivist in F# – blog.ploeh.dk 9. 9. 2019Picture archivist in Haskell – blog.ploeh.dk 2. 9. 2019Naming newtypes for QuickCheck Arbitraries – blog.ploeh.dk 26. 8. 2019Functional file system – blog.ploeh.dk 19. 8. 2019A rose tree functor – blog.ploeh.dk 12. 8. 2019Rose tree bifunctor – blog.ploeh.dk 5. 8. 2019Rose tree catamorphism – blog.ploeh.dk 29. 7. 2019Church-encoded rose tree – blog.ploeh.dk 22. 7. 2019Chain of Responsibility as catamorphisms – blog.ploeh.dk 15. 7. 2019Tester-Doer isomorphisms – blog.ploeh.dk 8. 7. 2019Payment types catamorphism – blog.ploeh.dk 1. 7. 2019Yes silver bullet – blog.ploeh.dk 24. 6. 2019Full binary tree catamorphism – blog.ploeh.dk 17. 6. 2019Composition Root location – blog.ploeh.dk 10. 6. 2019Tree catamorphism – blog.ploeh.dk 3. 6. 2019Either catamorphism – blog.ploeh.dk 27. 5. 2019List catamorphism – blog.ploeh.dk 20. 5. 2019Maybe catamorphism – blog.ploeh.dk 13. 5. 2019Peano catamorphism – blog.ploeh.dk 6. 5. 2019Boolean catamorphism – blog.ploeh.dk 29. 4. 2019Catamorphisms – blog.ploeh.dk 22. 4. 2019Applicative monoids – blog.ploeh.dk 15. 4. 2019Lazy monoids – blog.ploeh.dk 8. 4. 2019A pure Test Spy – blog.ploeh.dk 1. 4. 2019An example of state-based testing in C# – blog.ploeh.dk 25. 3. 2019An example of state based-testing in F# – blog.ploeh.dk 18. 3. 2019The programmer as decision maker – blog.ploeh.dk 11. 3. 2019An example of state-based testing in Haskell – blog.ploeh.dk 4. 3. 2019Code quality isn't software quality – blog.ploeh.dk 25. 2. 2019An example of interaction-based testing in C# – blog.ploeh.dk 18. 2. 2019From interaction-based to state-based testing – blog.ploeh.dk 11. 2. 2019Asynchronous Injection – blog.ploeh.dk 4. 2. 2019How to get the value out of the monad – blog.ploeh.dk