Tags
- Miscellaneous 44
- Productivity 64
- Unit Testing 177
- Article Series 33
- Software Design 307
- Code 41
- AutoFixture 78
- Sync 1
- Services 44
- ASP.NET MVC 20
- WPF 2
- Dependency Injection 113
- Castle Windsor 15
- Design Patterns 44
- StructureMap 2
- Azure 9
- xUnit.net 19
- Object-oriented Programming 12
- Languages 27
- F# 108
- REST 24
- ASP.NET Web API 35
- Albedo 2
- FsCheck 15
- Architecture 38
- Property-based Testing 26
- Functional Programming 99
- JavaScript 4
- Haskell 66
- Hedgehog 8
- Animation 2
Miscellaneous
- The end of trust?
- Serializing restaurant tables in C#
- Is software getting worse?
- Adding NuGet packages when offline
- Label persistent test data with deletion dates
- Changing your organisation
- New book: Code That Fits in Your Head
- Abstruse nomenclature
- The dispassionate developer
- Accountability and free speech
- Subjectivity
- We need young programmers; we need old programmers
- Where's the science?
- Modelling versus shaping reality
- TimeSpan configuration values in .NET Core
- Are shuffled plays random?
- The Rules of Attraction: Location
- The Rules of Attraction: Language
- AtomEventStore
- Encapsulation and SOLID Pluralsight course
- Hire me
- A Functional architecture with F#
- Not going to NDC London after all
- Albedo
- DI in .NET receives a Jolt Productivity Award
- Karma from bash on Windows
- Herding Code podcast
- Advanced Unit Testing Pluralsight course
- Ploeh blog syndication feed addresses
- Moving the blog to Jekyll
- Outside-In Test-Driven Development Pluralsight course
- Independency
- Joining AppHarbor
- My Christmas challenge has a winner
- My future is Azure
- Upcoming talks spring 2010
- CNUG TDD talk
- MEF TechTalk with me
- Dependency Injection Podcast with me
- WCF Podcast with me
- Tweet
- Speaking at 7N IT Conference 2009
- Joining Safewhere
- Living In Interesting Times
Productivity
- Continuous delivery without a CI server
- Fundamentals
- Gratification
- Variations of the Range kata
- Synchronizing concurrent teams
- AI for doc comments
- The Git repository that vanished
- Favour flat code file folders
- Visual Studio Code snippet to make URLs relative
- Are pull requests bad because they originate from open-source development?
- More functional pits of success
- On trust in software development
- Warnings-as-errors friction
- A thought on workplace flexibility and asynchrony
- Agilean
- In the long run
- GitHub Copilot preliminary experience report
- Some thoughts on the economics of programming
- When to refactor
- Readability verification
- Serendipity-driven development
- Am I stuck in a local maximum?
- Agile pull requests
- Fortunately, I don't squash my commits
- An XPath query for long methods
- Add null check without brackets in Visual Studio
- AFK
- Curb code rot with thresholds
- Conway's Law: latency versus throughput
- The Maître d' kata
- On doing katas
- 10x developers
- Yes silver bullet
- The programmer as decision maker
- Code quality isn't software quality
- What to test and not to test
- Typing is not a programming bottleneck
- Terse operators make business code more readable
- The Rules of Attraction: Location
- The Rules of Attraction: Language
- Code coverage is a useless target measure
- Visual Value Verification
- When x, y, and z are great variable names
- Idiomatic or idiosyncratic?
- 10 tips for better Pull Requests
- Using NuGet with autonomous repositories
- NuGet Package Restore considered harmful
- ZeroToNine
- Semantic Versioning with Continuous Deployment
- Verifying every single commit in a Git branch
- DI in .NET receives a Jolt Productivity Award
- Defensive coding
- How to change the Generate Property Stub refactoring code snippet in Visual Studio 2012
- Code readability hypotheses
- Beware of Productivity Tools
- TDD test suites should run in 10 seconds or less
- Feedback mechanisms and tradeoffs
- AutoFixture As Fixture Object
- Announcing: AutoFixture
- Fixture Object
- Constrained Non-Determinism
- Derived Values Ensure Executable Specification
- SUT Factory
- Zero-Friction TDD
Unit Testing
- Testing exceptions
- A Range kata implementation in Haskell
- Fakes are Test Doubles with contracts
- A first stab at the Brainfuck kata
- A first crack at the Args kata
- Replacing Mock and Stub with a Fake
- Test-driving the pyramid's top
- Works on most machines
- When is an implementation detail an implementation detail?
- Collatz sequences by function composition
- Is cyclomatic complexity really related to branch coverage?
- Refactoring pure function composition without breaking existing tests
- A restaurant example of refactoring from example-based to property-based testing
- An abstract example of refactoring from interaction-based to property-based testing
- Confidence from Facade Tests
- Warnings-as-errors friction
- Test Data Generator monad
- Epistemology of interaction testing
- Built-in alternatives to applicative assertions
- Error-accumulating composable assertions in C#
- When do tests fail?
- An initial proof of concept of applicative assertions in C#
- Applicative assertions
- Stubs and mocks break encapsulation
- Test Double clocks
- Some thoughts on naming tests
- Waiting to never happen
- Backwards compatibility as a profunctor
- The Equivalence contravariant functor
- Unit testing private helper methods
- Property-based testing is not the same as partition testing
- Tennis kata using the State pattern
- Structural equality for better tests
- When properties are easier than examples
- Self-hosted integration tests in ASP.NET
- Parametrised test primitive obsession code smell
- Waiting to happen
- Dynamic test oracles for rho problems
- Branching tests
- EnsureSuccessStatusCode as an assertion
- Properties for all
- Unit testing is fine
- Closing database connections during test teardown
- An F# implementation of the Maître d' kata
- Discerning and maintaining purity
- Put cyclomatic complexity to good use
- A red-green-refactor checklist
- Tautological assertion
- Devil's advocate
- Unit testing wai applications
- Picture archivist in F#
- Picture archivist in Haskell
- Naming newtypes for QuickCheck Arbitraries
- A pure Test Spy
- An example of state-based testing in C#
- An example of state based-testing in F#
- An example of state-based testing in Haskell
- An example of interaction-based testing in C#
- From interaction-based to state-based testing
- The Test Data Generator applicative functor
- What to test and not to test
- Typing and testing problem 23
- Project Arbitraries with view patterns
- Inlined HUnit test lists
- Parametrised unit tests in Haskell
- Convex hull monoid
- Money monoid
- The Test Data Generator functor
- Test data without Builders
- Builder as Identity
- The Builder functor
- Generalised Test Data Builder
- Test Data Builders in C#
- From Test Data Builders to the identity functor
- When variable names are in the way
- Decoupling decisions from effects
- Roman numerals via property-based TDD
- SUT Double
- TIE fighter FsCheck properties
- Ad-hoc Arbitraries - now with pipes
- Types + Properties = Software: other properties
- Types + Properties = Software: finite state machine
- Types + Properties = Software: composition
- Types + Properties = Software: properties for the Forties
- Types + Properties = Software: properties for the advantage state
- Types + Properties = Software: state transition properties
- Types + Properties = Software
- Make pre-conditions explicit in Property-Based Tests
- Integration Testing composed functions
- Code coverage is a useless target measure
- Unit testing internals
- Ad hoc Arbitraries with FsCheck.Xunit
- Functional design is intrinsically testable
- Test-Driven Development with F# Pluralsight course
- Introduction to Property based Testing with F# Pluralsight course
- Unit Testing with F# Pluralsight course
- Property Based Testing without a Property Based Testing framework
- A simpler Arbitrary for the Diamond kata
- Diamond kata with FsCheck
- The IsNullOrWhiteSpace trap
- Unit Testing methods with the same implementation
- Composed assertions with Unquote
- Exude
- Arbitrary Version instances with FsCheck
- Mocks for Commands, Stubs for Queries
- NDC 2013 session recordings
- A heuristic for formatting code according to the AAA pattern
- Where to put unit tests
- Herding Code podcast
- Advanced Unit Testing Pluralsight course
- Structural Inspection
- Why trust tests?
- Listen to trivial tests
- Auto-mocking Container
- Test trivial code
- Outside-In TDD versus DDD
- String Calculator kata with Autofixture exercise 8
- String Calculator kata with Autofixture exercise 7
- String Calculator kata with Autofixture exercise 6
- String Calculator kata with Autofixture exercise 5
- String Calculator kata with Autofixture exercise 4
- String Calculator kata with Autofixture exercise 3
- String Calculator kata with Autofixture exercise 2
- String Calculator kata with AutoFixture exercise 1
- String Calculator kata with AutoFixture
- Outside-In Test-Driven Development Pluralsight course
- NSubstitute Auto-mocking with AutoFixture
- Argument Name Role Hint
- Concrete Dependencies
- The order of AutoFixture Customizations matter
- Primitive Dependencies
- Facade Test
- Test-specific Equality versus Domain Equality
- Resemblance and Likeness
- The Resemblance idiom
- Bank OCR kata in F#: user stories 3 and 4
- Bank OCR kata in F#: user story 2
- Bank OCR kata in F#: user story 1
- TDD test suites should run in 10 seconds or less
- Testing Container Configurations
- TDD improves reusability
- Tennis Kata with immutable types and a cyclomatic complexity of 1
- Generic unit testing with xUnit.net
- Feedback mechanisms and tradeoffs
- Encapsulating AutoFixture Customizations
- Creating general populated lists with AutoFixture
- Creating specific populated lists with AutoFixture
- The TDD Apostate
- Rhino Mocks-based auto-mocking with AutoFixture
- Convention-based Customizations with AutoFixture
- AutoData Theories with AutoFixture
- AutoFixture as an auto-mocking container
- Introducing AutoFixture Likeness
- Upcoming talks spring 2010
- Fun with literal extensions and Ambient Context
- Why I'm migrating from MSTest to xUnit.net
- Mapping types with AutoFixture
- Freezing mocks
- More about frozen pizza
- AutoFixture Freeze
- Anonymous Get
- Anonymous Do
- Anonymous With
- A Fluent Interface For Testing INotifyPropertyChanged
- Disabling AutoProperties In AutoFixture
- AutoFixture As Test Data Builder
- Testability Is Really The Open/Closed Principle
- AutoFixture As Fixture Object
- Speaking at 7N IT Conference 2009
- Announcing: AutoFixture
- Fixture Object
- Explicit Expectations
- Specification-Driven Development
- Constrained Non-Determinism
- Derived Values Ensure Executable Specification
- SUT Factory
- Zero-Friction TDD
Article Series
- Implementation and usage mindsets
- Zippers
- Three data architectures for the server
- Simpler encapsulation with immutability
- Trying to fit the hype cycle
- The four tenets of SOA revisited
- Statically and dynamically typed scripts
- Variations of the Range kata
- Serialization with and without Reflection
- Epistemology of interaction testing
- Applicative assertions
- Type-safe DI composition
- New book: Code That Fits in Your Head
- Pendulum swings
- Validation, a solved problem?
- Fit URLs
- The IO Container
- Repeatable execution
- Functional file system
- From interaction-based to state-based testing
- From design patterns to category theory
- From Test Data Builders to the identity functor
- Pure interactions
- Pure times
- From dependency injection to dependency rejection
- Types + Properties = Software
- Type Driven Development
- Dependency Injection and events
- REST lessons learned
- String Calculator kata with AutoFixture
- Role Hints
- Poka-yoke Design: From Smell to Fragrance
- Zero-Friction TDD
Software Design
- Nested monads
- Traversals
- Functor compositions
- Functor sums
- The Const functor
- Functor products
- Keeping cross-cutting concerns out of application code
- An immutable priority collection
- A mutable priority collection
- A failed attempt at priority collection with inheritance
- Simpler encapsulation with immutability
- Conservative codomain conjecture
- Range as a functor
- Error categories and category errors
- Serialization with and without Reflection
- Domain Model first
- At the boundaries, static types are illusory
- Do ORMs reduce the need for mapping?
- NonEmpty catamorphism
- Validating or verifying emails
- Validation and business rules
- When is an implementation detail an implementation detail?
- Test Data Generator monad
- Contravariant functors as invariant functors
- The IO monad
- Functors as invariant functors
- Error-accumulating composable assertions in C#
- An initial proof of concept of applicative assertions in C#
- Decouple to delete
- The Reader monad
- Applicative assertions
- Refactoring a saga from the State pattern to the State monad
- Refactoring the TCP State pattern example to pure functions
- Coalescing DTOs
- The State pattern and the State monad
- Natural transformations as invariant functors
- Can types replace validation?
- Endomorphism as an invariant functor
- Invariant functors
- An applicative reservation validation example in C#
- Natural transformations
- Functor relationships
- Get and Put State
- The State monad
- Asynchronous monads
- The Lazy monad
- The Identity monad
- An Either monad
- At the boundaries, applications aren't functional
- The Maybe monad
- The List monad
- Monad laws
- Kleisli composition
- Monads
- Contravariant Dependency Injection
- A type-safe DI Container as a functor
- To ID or not to ID
- Backwards compatibility as a profunctor
- The Liskov Substitution Principle as a profunctor
- Postel's law as a profunctor
- Functions as pipes
- Types as sets
- Reader as a profunctor
- Profunctors
- Functor variance compared to C#'s notion of variance
- Reader as a contravariant functor
- The Equivalence contravariant functor
- The Specification contravariant functor
- The Command Handler contravariant functor
- Contravariant functors
- The Reader functor
- The Tennis kata revisited
- Referential transparency fits in your head
- The State functor
- A reading of Extensibility for the Masses
- From State tennis to endomorphism
- Simplifying code with Decorated Commands
- Leaky abstraction by omission
- Pendulum swing: pure by default
- Pendulum swings
- Validation, a solved problem?
- Monomorphic functors
- The IO functor
- Polymorphic Builder
- Builder as a monoid
- Builder isomorphisms
- Non-exceptional averages
- A rose tree functor
- Rose tree bifunctor
- Rose tree catamorphism
- Church-encoded rose tree
- Chain of Responsibility as catamorphisms
- Tester-Doer isomorphisms
- Payment types catamorphism
- Full binary tree catamorphism
- Composition Root location
- Tree catamorphism
- Either catamorphism
- List catamorphism
- Maybe catamorphism
- Peano catamorphism
- Boolean catamorphism
- Catamorphisms
- Applicative monoids
- Lazy monoids
- Asynchronous Injection
- How to get the value out of the monad
- Better abstractions revisited
- An Either functor
- Either bifunctor
- Tuple bifunctor
- Bifunctors
- The Lazy applicative functor
- Danish CPR numbers in F#
- Set is not a functor
- The Test Data Generator applicative functor
- Functional architecture: a definition
- Applicative validation
- The Maybe applicative functor
- Applicative combinations of functions
- An applicative password list
- Full deck
- Applicative functors
- Asynchronous functors
- The Lazy functor
- The Identity functor
- Reactive functor
- A Visitor functor
- A Tree functor
- Flattening arrow code using a stack of monads
- Dependency Injection revisited
- Angular addition monoid
- Visitor as a sum type
- Church-encoded payment types
- Church-encoded Either
- Church-encoded Maybe
- Church-encoded natural numbers
- Church-encoded Boolean values
- Church encoding
- Composite as a monoid - a business rules example
- Null Object as identity
- Endomorphic Composite as a monoid
- Coalescing Composite as a monoid
- Maybe monoids
- The Maybe functor
- Functors
- Functors, applicatives, and friends
- Composite as a monoid
- Some design patterns as universal abstractions
- Inheritance-composition isomorphism
- Abstract class isomorphism
- Object isomorphisms
- Uncurry isomorphisms
- Argument list isomorphisms
- Function isomorphisms
- Unit isomorphisms
- Software design isomorphisms
- Colour-mixing magma
- Rock Paper Scissors magma
- Magmas
- Quasigroups
- Semigroups accumulate
- Bounding box semigroup
- Semigroups
- Monoids accumulate
- Endomorphism monoid
- Function monoids
- Tuple monoids
- Convex hull monoid
- Money monoid
- Strings, lists, and sequences as a monoid
- Monoids
- Monoids, semigroups, and friends
- From design patterns to category theory
- Interception vis-à-vis Pure DI
- The Test Data Generator functor
- From Test Data Builders to the identity functor
- F# free monad recipe
- Combining free monads in F#
- Combining free monads in Haskell
- A pure command-line wizard
- Hello, pure command-line interaction
- Pure interactions
- Pure times in F#
- Pure times in Haskell
- Pure times
- Simple holidays
- Dependency rejection
- Partial application is dependency injection
- Dependency injection is passing an argument
- From dependency injection to dependency rejection
- Decoupling application errors from domain models
- From REST to algebraic data
- Domain modelling with REST
- Easy domain modelling with types
- Decoupling decisions from effects
- Conditional composition of functions
- CQS and server-generated Entity IDs
- Functional architecture is Ports and Adapters
- Types + Properties = Software: finite state machine
- Types + Properties = Software: initial state
- Types + Properties = Software: composition
- Types + Properties = Software: properties for the advantage state
- Types + Properties = Software: state transition properties
- Types + Properties = Software: designing with types
- Types + Properties = Software
- Service Locator violates encapsulation
- Command Query Separation when Queries should have side-effects
- Applications and their side effects
- Public types hidden in plain sight
- Temporary Field code smell
- Type Driven Development
- Functional design is intrinsically testable
- Library Bundle Facade
- From Primitive Obsession to Domain Modelling
- Composition Root Reuse
- Placement of Abstract Factories
- Exception messages are for programmers
- Name this operation
- The IsNullOrWhiteSpace trap
- Decommissioning Decoraptors
- Decoraptor
- CQS versus server generated IDs
- Why DRY?
- Encapsulation and SOLID Pluralsight course
- Drain
- DI-Friendly Framework
- DI-Friendly Library
- Service Locator violates SOLID
- SOLID: the next step is Functional
- A Functional architecture with F#
- REST efficiency
- Layers, Onions, Ports, Adapters: it's all the same
- Replace overloading with Discriminated Unions
- LINQ versus the LSP
- Defensive coding
- REST lesson learned: Consider a self link on all resources
- REST lesson learned: Consider a home link on all resources
- REST lesson learned: Avoid hackable URLs
- REST lesson learned: Avoid 204 responses
- REST lesson learned: Avoid user-supplied data in URI segments
- REST lessons learned
- Structural Inspection
- Listen to trivial tests
- Code readability hypotheses
- Outside-In TDD versus DDD
- AutoFixture 3
- Partial Type Name Role Hint
- Role Interface Role Hint
- Metadata Role Hint
- Argument Name Role Hint
- Type Name Role Hints
- Role Hints
- Zookeepers must become Rangers
- Rangers and Zookeepers
- Encapsulation of properties
- Primitive Dependencies
- Design patterns across paradigms
- IQueryable is Tight Coupling
- Is Layering Worth the Mapping?
- Loose Coupling and the Big Picture
- SOLID is Append-only
- Factory Overload
- Polymorphic Consistency
- SOLID concrete
- Weakly-typed versus Strongly-typed Message Channels
- Message Dispatching without Service Location
- Service Locator: roles vs. mechanics
- Composition Root
- SOLID Code isn't
- At the Boundaries, Applications are Not Object-Oriented
- Design Smell: Default Constructor
- Design Smell: Redundant Required Attribute
- Code Smell: Automatic Property
- Design Smell: Primitive Obsession
- Design Smell: Temporal Coupling
- Poka-yoke Design: From Smell to Fragrance
- Tennis Kata with immutable types and a cyclomatic complexity of 1
- Windows Azure migration smell: SQL Server over-utilization
- Provider is not a pattern
- MSDN Magazine article about CQRS on Windows Azure
- Commands are Composable
- Compose object graphs with confidence
- Injection Constructors should be simple
- Interfaces are access modifiers
- The BCL already has a Maybe monad
- Scalable doesn't mean fast
- The TDD Apostate
- On Role Interfaces, the Reused Abstractions Principle and Service Locators
- Towards better abstractions
- Interfaces are not abstractions
- Refactoring from Abstract Factory to Decorator
- Refactoring from Service Locator to Abstract Factory
- Pattern Recognition: Abstract Factory or Service Locator?
- Instrumentation with Decorators and Interceptors
- Don't call the container; it'll call you
- Domain Objects and IDataErrorInfo
- Dependency Injection is Loose Coupling
- Dependency Injection Inversion in .NET
- Enabling DI for Lazy Components
- Rebuttal: Constructor over-injection anti-pattern
- SOLID or COLDS?
- Testability Is Really The Open/Closed Principle
- Delegates Are Anonymous Interfaces
- Managing Loosely Coupled Projects
- Dealing With Constrained Input
- Updating Detached Entities With LINQ To Entities
Code
- CC golf
- The case of the mysterious comparison
- Do ORMs reduce the need for mapping?
- AI for doc comments
- Collatz sequences by function composition
- Favour flat code file folders
- Folders versus namespaces
- Is cyclomatic complexity really related to branch coverage?
- Warnings-as-errors friction
- GitHub Copilot preliminary experience report
- Coalescing DTOs
- Some thoughts on naming tests
- Unit testing private helper methods
- Against consistency
- Pendulum swing: sealed by default
- Pendulum swing: internal by default
- Parametrised test primitive obsession code smell
- Branching tests
- Name by role
- Good names are skin-deep
- An XPath query for long methods
- Significant whitespace is DRY
- Unit bias against collections
- Curb code rot with thresholds
- The case of the unbalanced brackets
- The case of the mysterious curly bracket
- Zone of Ceremony
- Put cyclomatic complexity to good use
- Small methods are easy to troubleshoot
- The 80/24 rule
- Terse operators make business code more readable
- Inlined HUnit test lists
- When variable names are in the way
- TIE fighter FsCheck properties
- Ad-hoc Arbitraries - now with pipes
- Code coverage is a useless target measure
- When x, y, and z are great variable names
- Idiomatic or idiosyncratic?
- A heuristic for formatting code according to the AAA pattern
- Code readability hypotheses
- Explicit Expectations
AutoFixture
- AutoFixture conventions with Albedo
- NDC 2013 session recordings
- How to automatically populate properties with AutoMoq
- How to configure AutoMoq to set up all properties
- AutoFixture 3
- String Calculator kata with Autofixture exercise 8
- String Calculator kata with Autofixture exercise 7
- String Calculator kata with Autofixture exercise 6
- String Calculator kata with Autofixture exercise 5
- String Calculator kata with Autofixture exercise 4
- String Calculator kata with Autofixture exercise 3
- String Calculator kata with Autofixture exercise 2
- String Calculator kata with AutoFixture exercise 1
- String Calculator kata with AutoFixture
- NSubstitute Auto-mocking with AutoFixture
- The order of AutoFixture Customizations matter
- Resemblance and Likeness
- SOLID is Append-only
- SOLID concrete
- AutoFixture goes Continuous Delivery with Semantic Versioning
- Tennis Kata with immutable types and a cyclomatic complexity of 1
- AutoFixture 2.1
- AutoFixture 2.1 beta 1
- Constructor strategies for AutoFixture
- Enumerables are dynamic - also in AutoFixture
- MSDN Magazine article about CQRS on Windows Azure
- Encapsulating AutoFixture Customizations
- Creating general populated lists with AutoFixture
- Creating specific populated lists with AutoFixture
- Integrating AutoFixture with ObjectHydrator
- Rhino Mocks-based auto-mocking with AutoFixture
- Convention-based Customizations with AutoFixture
- AutoFixture 2.0 Released
- AutoData Theories with AutoFixture
- Changing the behavior of AutoFixture auto-mocking with Moq
- AutoFixture as an auto-mocking container
- AutoFixture 2.0 beta 1
- Introducing AutoFixture Likeness
- AutoFixture 1.1
- Mapping types with AutoFixture
- AutoFixture 1.1 RC1
- Freezing mocks
- More about frozen pizza
- AutoFixture Freeze
- AutoFixture 1.0
- AutoFixture 1.0 RC2
- AutoFixture 1.0 RC1
- Anonymous Get
- Building and assigning arrays with AutoFixture
- Anonymous Do
- Creating length-constrained strings with AutoFixture
- AutoFixture beta 1
- Anonymous With
- Customizing A Type's Builder With AutoFixture
- AutoFixture .8.6 Released
- AutoFixture .8.5 Released
- Do Redux
- Omitting Only Certain Properties With AutoFixture
- Disabling AutoProperties In AutoFixture
- AutoFixture .8.4 And Roadmap
- AutoFixture As Test Data Builder
- AutoFixture .8.3 Released
- AutoFixture .8.2 Released
- Calling Methods While Building Anonymous Variables With AutoFixture
- AutoFixture Cheat Sheet
- Setting Property Values While Building Anonymous Variables With AutoFixture
- The AutoFixture Builder
- AutoFixture .8.1 Released
- AutoFixture As Fixture Object
- Anonymous Sequences With AutoFixture
- Dealing With Constrained Input
- Replacing AutoFixture's Default Algorithms
- Dealing With Types Without Public Constructors
- Creating Booleans With AutoFixture
- Creating Numbers With AutoFixture
- Creating Strings With AutoFixture
- How AutoFixture Creates Objects
- Announcing: AutoFixture
Sync
Services
- Using only a Domain Model to persist restaurant table configurations
- Using a Shared Data Model to persist restaurant table configurations
- Using Ports and Adapters to persist restaurant table configurations
- Service compatibility is determined based on policy
- Services share schema and contract, not class
- Services are autonomous
- Boundaries are explicit
- The four tenets of SOA revisited
- At the boundaries, static types are illusory
- Keep IDs internal with REST
- Consider including identity in URLs
- Redirect legacy URLs
- Fit URLs
- Retiring old service versions
- Domain modelling with REST
- Untyped F# HTTP route defaults for ASP.NET Web API
- REST implies Content Negotiation
- Single Writer Web Jobs on Azure
- A Functional architecture with F#
- REST efficiency
- Hyprlinkr 1.0.0
- Easy ASP.NET Web API DTOs with F# CLIMutable records
- Running a pure F# Web API on Azure Web Sites
- How to create a pure F# ASP.NET Web API project
- REST lesson learned: Consider a self link on all resources
- REST lesson learned: Consider a home link on all resources
- REST lesson learned: Avoid hackable URLs
- REST lesson learned: Avoid 204 responses
- REST lesson learned: Avoid user-supplied data in URI segments
- REST lessons learned
- Dependency Injection in ASP.NET Web API with Castle Windsor
- Dependency Injection and Lifetime Management with ASP.NET Web API
- Hyprlinkr
- Vendor Media Types With the ASP.NET Web API
- Wiring HttpControllerContext With Castle Windsor
- Injecting HttpControllerContext With the ASP.NET Web API
- Hyperlinking With the ASP.NET Web API
- Robust DI With the ASP.NET Web API
- Migrating from WCF Web API to ASP.NET Web API
- At the Boundaries, Applications are Not Object-Oriented
- Sneak view at Castle's WCF Facility
- ServiceHostFactory lifetime
- WCF Podcast with me
- Custom Tokens Over Non-HTTP Transports
ASP.NET MVC
- ASP.NET POCO Controllers: an experience report
- Self-hosted integration tests in ASP.NET
- Fortunately, I don't squash my commits
- Adding REST links as a cross-cutting concern
- An ASP.NET Core URL Builder
- Using the nameof C# keyword with ASP.NET 3 IUrlHelper
- Type Name Role Hints
- Vendor Media Types With the ASP.NET Web API
- Wiring HttpControllerContext With Castle Windsor
- Injecting HttpControllerContext With the ASP.NET Web API
- Hyperlinking With the ASP.NET Web API
- Robust DI With the ASP.NET Web API
- Migrating from WCF Web API to ASP.NET Web API
- Anonymous Get
- Wiring ASP.NET MVC Error Handling with Castle Windsor
- LoggingExceptionFilter
- Global Error Handling in ASP.NET MVC
- Using Castle Windsor's PerWebRequest lifestyle with ASP.NET MVC on IIS7
- Self-updating AJAX links with ASP.NET MVC
- DataTemplating In ASP.NET MVC
WPF
Dependency Injection
- Trimming a Fake Object
- Contravariant Dependency Injection
- Type-safe DI Containers are redundant
- A type-safe DI Container as a tuple
- A type-safe DI Container as a functor
- Nested type-safe DI Containers
- A type-safe DI Container C# example
- Type-level DI Container prototype
- Type-safe DI composition
- Repeatable execution in C#
- Composition Root location
- Asynchronous Injection
- On Constructor Over-injection
- Dependency Injection revisited
- Inheritance-composition isomorphism
- Abstract class isomorphism
- Interception vis-à-vis Pure DI
- F# free monad recipe
- A pure command-line wizard
- Hello, pure command-line interaction
- Pure interactions
- Dependency rejection
- Partial application is dependency injection
- Dependency injection is passing an argument
- From dependency injection to dependency rejection
- SUT Double
- Service Locator violates encapsulation
- Library Bundle Facade
- Composition Root Reuse
- Placement of Abstract Factories
- Decommissioning Decoraptors
- Decoraptor
- Passive Attributes
- Pure DI
- Compile-Time Lifetime Matching
- Captive Dependency
- Feedback on ASP.NET vNext Dependency Injection
- DI-Friendly Framework
- DI-Friendly Library
- Conforming Container
- Service Locator violates SOLID
- SOLID: the next step is Functional
- Layers, Onions, Ports, Adapters: it's all the same
- DI in .NET receives a Jolt Productivity Award
- DI and events: Composition
- DI and events: Reactive Extensions
- DI and events: Third-party Connect
- DI and events: Constructor Subscription
- Dependency Injection and events
- NDC 2013 session recordings
- Auto-mocking Container
- Partial Type Name Role Hint
- Role Interface Role Hint
- Metadata Role Hint
- Argument Name Role Hint
- Type Name Role Hints
- AppSettings convention for Castle Windsor
- When to use a DI Container
- Dependency Injection in ASP.NET Web API with Castle Windsor
- Dependency Injection and Lifetime Management with ASP.NET Web API
- Concrete Dependencies
- Primitive Dependencies
- Wiring HttpControllerContext With Castle Windsor
- Injecting HttpControllerContext With the ASP.NET Web API
- IQueryable is Tight Coupling
- Robust DI With the ASP.NET Web API
- Migrating from WCF Web API to ASP.NET Web API
- Implementing an Abstract Factory
- Is Layering Worth the Mapping?
- Loose Coupling and the Big Picture
- SOLID is Append-only
- Testing Container Configurations
- Factory Overload
- Polymorphic Consistency
- Weakly-typed versus Strongly-typed Message Channels
- Message Dispatching without Service Location
- Service Locator: roles vs. mechanics
- Composition Root
- Provider is not a pattern
- Constructor strategies for AutoFixture
- Resolving closed types with MEF
- Compose object graphs with confidence
- Injection Constructors should be simple
- Interfaces are access modifiers
- My Christmas challenge has a winner
- Challenge: Resolve closed types with MEF
- On Role Interfaces, the Reused Abstractions Principle and Service Locators
- Refactoring from Abstract Factory to Decorator
- Refactoring from Service Locator to Abstract Factory
- Pattern Recognition: Abstract Factory or Service Locator?
- The Register Resolve Release pattern
- Instrumentation with Decorators and Interceptors
- Don't call the container; it'll call you
- StructureMap PerRequest vs. Unique lifetimes
- Upcoming talks spring 2010
- Sneak view at Castle's WCF Facility
- ServiceHostFactory lifetime
- Fun with literal extensions and Ambient Context
- Changing Windsor lifestyles after the fact
- Dependency Injection is Loose Coupling
- Service Locator is an Anti-Pattern
- Refactoring to Aggregate Services
- What's so dangerous about a DI attribute?
- IWindsorInstaller
- Dependency Injection Inversion in .NET
- Enabling DI for Lazy Components
- Rebuttal: Constructor over-injection anti-pattern
- MEF TechTalk with me
- Wiring ASP.NET MVC Error Handling with Castle Windsor
- LoggingExceptionFilter
- Dependency Injection Podcast with me
- Using Castle Windsor's PerWebRequest lifestyle with ASP.NET MVC on IIS7
- Writing a book
Castle Windsor
- Auto-mocking Container
- AppSettings convention for Castle Windsor
- When to use a DI Container
- Dependency Injection in ASP.NET Web API with Castle Windsor
- Primitive Dependencies
- Wiring HttpControllerContext With Castle Windsor
- Implementing an Abstract Factory
- The Register Resolve Release pattern
- Instrumentation with Decorators and Interceptors
- Sneak view at Castle's WCF Facility
- Changing Windsor lifestyles after the fact
- IWindsorInstaller
- Dependency Injection Inversion in .NET
- Wiring ASP.NET MVC Error Handling with Castle Windsor
- Using Castle Windsor's PerWebRequest lifestyle with ASP.NET MVC on IIS7
Design Patterns
- Keeping cross-cutting concerns out of application code
- Trimming a Fake Object
- What's a sandwich?
- Refactoring a saga from the State pattern to the State monad
- Refactoring the TCP State pattern example to pure functions
- The State pattern and the State monad
- The Tennis kata revisited
- A reading of Extensibility for the Masses
- From State tennis to endomorphism
- Tennis kata using the State pattern
- An ASP.NET Core URL Builder
- Polymorphic Builder
- Impureim sandwich
- Builder as a monoid
- Builder isomorphisms
- Chain of Responsibility as catamorphisms
- Composition Root location
- Some thoughts on anti-patterns
- Visitor as a sum type
- Composite as a monoid - a business rules example
- Null Object as identity
- Endomorphic Composite as a monoid
- Coalescing Composite as a monoid
- Composite as a monoid
- Some design patterns as universal abstractions
- From design patterns to category theory
- Test Data Builders in C#
- From Test Data Builders to the identity functor
- Service Locator violates encapsulation
- Decommissioning Decoraptors
- Decoraptor
- Pure DI
- Conforming Container
- Service Locator violates SOLID
- A heuristic for formatting code according to the AAA pattern
- Auto-mocking Container
- The Resemblance idiom
- Design patterns across paradigms
- Composition Root
- Provider is not a pattern
- Pattern Recognition: Abstract Factory or Service Locator?
- The Register Resolve Release pattern
- Service Locator is an Anti-Pattern
- Rebuttal: Constructor over-injection anti-pattern
StructureMap
Azure
- Faking a continuously Polling Consumer with scheduled tasks
- Configuring Azure Web Jobs
- Single Writer Web Jobs on Azure
- Running a pure F# Web API on Azure Web Sites
- Windows Azure migration smell: SQL Server over-utilization
- MSDN Magazine article about CQRS on Windows Azure
- Scalable doesn't mean fast
- Windows Azure Migration Sanity Check
- My future is Azure
xUnit.net
- Built-in alternatives to applicative assertions
- Parametrised test primitive obsession code smell
- Closing database connections during test teardown
- TIE fighter FsCheck properties
- Ad-hoc Arbitraries - now with pipes
- Ad hoc Arbitraries with FsCheck.Xunit
- Unit Testing methods with the same implementation
- Exude
- String Calculator kata with Autofixture exercise 8
- String Calculator kata with Autofixture exercise 7
- String Calculator kata with Autofixture exercise 6
- String Calculator kata with Autofixture exercise 5
- String Calculator kata with Autofixture exercise 4
- String Calculator kata with Autofixture exercise 3
- String Calculator kata with Autofixture exercise 2
- String Calculator kata with AutoFixture exercise 1
- String Calculator kata with AutoFixture
- Bank OCR kata in F#: user stories 3 and 4
- Generic unit testing with xUnit.net
Object-oriented Programming
- Keeping cross-cutting concerns out of application code
- A mutable priority collection
- A failed attempt at priority collection with inheritance
- Simpler encapsulation with immutability
- Visitor as a sum type
- Abstract class isomorphism
- CQS and server-generated Entity IDs
- From Primitive Obsession to Domain Modelling
- CQS versus server generated IDs
- Encapsulation and SOLID Pluralsight course
- Service Locator violates SOLID
- At the Boundaries, Applications are Not Object-Oriented
Languages
- A restaurant sandwich
- Implementation and usage mindsets
- Fitting a polynomial to a set of points
- Extracting curve coordinates from a bitmap
- Extracting data from a small CSV file with Python
- Statically and dynamically typed scripts
- Dynamic test oracles for rho problems
- Zone of Ceremony
- Diamond rock
- Fractal trees with PureScript
- Tail Recurse
- The Rules of Attraction: Language
- Recurse
- Null has no type, but Maybe has
- Idiomatic or idiosyncratic?
- C# will eventually get all F# features, right?
- Less is more: language features
- Karma from bash on Windows
- How to create a pure F# ASP.NET Web API project
- Checking math homework with F#
- FizzBuzz kata in Clojure
- FizzBuzz kata in F#: stage 2
- FizzBuzz kata in F#: stage 1
- Bank OCR kata in F#: user stories 3 and 4
- Bank OCR kata in F#: user story 2
- Bank OCR kata in F#: user story 1
- Checking for exactly one item in a sequence using C# and F#
F#
- An immutable priority collection
- Conservative codomain conjecture
- Range as a functor
- A Range kata implementation in F#
- Serializing restaurant tables in F#
- CC golf
- Fakes are Test Doubles with contracts
- Compile-time type-checked truth tables
- Encapsulation in Functional Programming
- Contravariant Dependency Injection
- A conditional sandwich example
- To ID or not to ID
- Functor variance compared to C#'s notion of variance
- Structural equality for better tests
- Threading context through a catamorphism
- Table-driven tennis scoring
- Dynamic test oracles for rho problems
- An F# demo of validation with partial data round trip
- An F# implementation of the Maître d' kata
- Zone of Ceremony
- Refactoring registration flow to functional architecture
- Picture archivist in F#
- An example of state based-testing in F#
- Danish CPR numbers in F#
- The Test Data Generator applicative functor
- The Maybe applicative functor
- Applicative combinations of functions
- An applicative password list
- Full deck
- Flattening arrow code using a stack of monads
- Composite as a monoid - a business rules example
- Uncurry isomorphisms
- Convex hull monoid
- Test data without Builders
- The Builder functor
- F# free monad recipe
- Combining free monads in F#
- A pure command-line wizard
- Hello, pure command-line interaction
- Pure times in F#
- Pure times
- Using Polly with F# async workflows
- A reusable ApiController Adapter
- Dependency rejection
- Partial application is dependency injection
- Decoupling application errors from domain models
- From REST to algebraic data
- Easy domain modelling with types
- When variable names are in the way
- Decoupling decisions from effects
- Untyped F# HTTP route defaults for ASP.NET Web API
- Roman numerals via property-based TDD
- TIE fighter FsCheck properties
- Async as surrogate IO
- Composition with an Either computation expression
- Functional architecture is Ports and Adapters
- Ad-hoc Arbitraries - now with pipes
- Types + Properties = Software: other properties
- Types + Properties = Software: finite state machine
- Types + Properties = Software: initial state
- Types + Properties = Software: composition
- Types + Properties = Software: properties for the Forties
- Types + Properties = Software: properties for the advantage state
- Types + Properties = Software: state transition properties
- Types + Properties = Software: designing with types
- Types + Properties = Software
- Are shuffled plays random?
- Make pre-conditions explicit in Property-Based Tests
- Tail Recurse
- Integration Testing composed functions
- Recurse
- To log or not to log
- Null has no type, but Maybe has
- Visual Value Verification
- Ad hoc Arbitraries with FsCheck.Xunit
- When x, y, and z are great variable names
- Type Driven Development: composition
- Type Driven Development: implementing shouldIdle
- Type Driven Development
- Type Driven Development with F# Pluralsight course
- stringf
- Test-Driven Development with F# Pluralsight course
- Introduction to Property based Testing with F# Pluralsight course
- C# will eventually get all F# features, right?
- Unit Testing with F# Pluralsight course
- POSTing JSON to an F# Web API
- Property Based Testing without a Property Based Testing framework
- A simpler Arbitrary for the Diamond kata
- Diamond kata with FsCheck
- Good times with F#
- Faking a continuously Polling Consumer with scheduled tasks
- Composed assertions with Unquote
- Arbitrary Version instances with FsCheck
- SOLID: the next step is Functional
- How to use FSharp.Core 4.3.0 when all you have is 4.3.1
- A Functional architecture with F#
- ZeroToNine
- Replace overloading with Discriminated Unions
- Easy ASP.NET Web API DTOs with F# CLIMutable records
- Running a pure F# Web API on Azure Web Sites
- How to create a pure F# ASP.NET Web API project
- Checking math homework with F#
- FizzBuzz kata in F#: stage 2
- FizzBuzz kata in F#: stage 1
- Bank OCR kata in F#: user stories 3 and 4
- Bank OCR kata in F#: user story 2
- Bank OCR kata in F#: user story 1
- Checking for exactly one item in a sequence using C# and F#
REST
- Keep IDs internal with REST
- Consider including identity in URLs
- Redirect legacy URLs
- Checking signed URLs with ASP.NET
- Signing URLs with ASP.NET
- Fit URLs
- Adding REST links as a cross-cutting concern
- From REST to algebraic data
- Domain modelling with REST
- Applications and their side effects
- REST implies Content Negotiation
- REST efficiency
- Hyprlinkr 1.0.0
- REST lesson learned: Consider a self link on all resources
- REST lesson learned: Consider a home link on all resources
- REST lesson learned: Avoid hackable URLs
- REST lesson learned: Avoid 204 responses
- REST lesson learned: Avoid user-supplied data in URI segments
- REST lessons learned
- Hyprlinkr
- Vendor Media Types With the ASP.NET Web API
- Hyperlinking With the ASP.NET Web API
- Robust DI With the ASP.NET Web API
- Migrating from WCF Web API to ASP.NET Web API
ASP.NET Web API
- Using only a Domain Model to persist restaurant table configurations
- Using a Shared Data Model to persist restaurant table configurations
- Using Ports and Adapters to persist restaurant table configurations
- ASP.NET validation revisited
- ASP.NET POCO Controllers: an experience report
- Self-hosted integration tests in ASP.NET
- Redirect legacy URLs
- Checking signed URLs with ASP.NET
- Signing URLs with ASP.NET
- Fit URLs
- Fortunately, I don't squash my commits
- Adding REST links as a cross-cutting concern
- An ASP.NET Core URL Builder
- Using the nameof C# keyword with ASP.NET 3 IUrlHelper
- A reusable ApiController Adapter
- Untyped F# HTTP route defaults for ASP.NET Web API
- Async as surrogate IO
- Integration Testing composed functions
- POSTing JSON to an F# Web API
- Decoraptor
- Passive Attributes
- Web API Raygun error handler
- Hyprlinkr 1.0.0
- Easy ASP.NET Web API DTOs with F# CLIMutable records
- Running a pure F# Web API on Azure Web Sites
- How to create a pure F# ASP.NET Web API project
- Dependency Injection in ASP.NET Web API with Castle Windsor
- Dependency Injection and Lifetime Management with ASP.NET Web API
- Hyprlinkr
- Vendor Media Types With the ASP.NET Web API
- Wiring HttpControllerContext With Castle Windsor
- Injecting HttpControllerContext With the ASP.NET Web API
- Hyperlinking With the ASP.NET Web API
- Robust DI With the ASP.NET Web API
- Migrating from WCF Web API to ASP.NET Web API
Albedo
FsCheck
- A restaurant example of refactoring from example-based to property-based testing
- When properties are easier than examples
- The Test Data Generator functor
- Roman numerals via property-based TDD
- TIE fighter FsCheck properties
- Ad-hoc Arbitraries - now with pipes
- Types + Properties = Software: finite state machine
- Types + Properties = Software: properties for the Forties
- Types + Properties = Software: properties for the advantage state
- Types + Properties = Software: state transition properties
- Make pre-conditions explicit in Property-Based Tests
- Ad hoc Arbitraries with FsCheck.Xunit
- A simpler Arbitrary for the Diamond kata
- Diamond kata with FsCheck
- Arbitrary Version instances with FsCheck
Architecture
- A restaurant sandwich
- Using only a Domain Model to persist restaurant table configurations
- Using a Shared Data Model to persist restaurant table configurations
- Using Ports and Adapters to persist restaurant table configurations
- Three data architectures for the server
- Should interfaces be asynchronous?
- You'll regret using natural keys
- Service compatibility is determined based on policy
- Services share schema and contract, not class
- Services are autonomous
- Boundaries are explicit
- The four tenets of SOA revisited
- Synchronizing concurrent teams
- Domain Model first
- At the boundaries, static types are illusory
- What's a sandwich?
- Dependency Whac-A-Mole
- Do ORMs reduce the need for mapping?
- Decomposing CTFiYH's sample code base
- When is an implementation detail an implementation detail?
- Decouple to delete
- At the boundaries, applications aren't functional
- The Command Handler contravariant functor
- Repeatable execution in C#
- Repeatable execution in Haskell
- Repeatable execution
- Discerning and maintaining purity
- Functional file system
- Functional architecture: a definition
- Simple holidays
- Domain modelling with REST
- Functional architecture is Ports and Adapters
- Applications and their side effects
- Library Bundle Facade
- Placement of Abstract Factories
- Faking a continuously Polling Consumer with scheduled tasks
- Drain
- Single Writer Web Jobs on Azure
Property-based Testing
- Range as a functor
- A Range kata implementation in F#
- Fakes are Test Doubles with contracts
- A restaurant example of refactoring from example-based to property-based testing
- An abstract example of refactoring from interaction-based to property-based testing
- Test Data Generator monad
- Property-based testing is not the same as partition testing
- When properties are easier than examples
- Properties for all
- A pure Test Spy
- An example of state based-testing in F#
- An example of state-based testing in Haskell
- Typing and testing problem 23
- Roman numerals via property-based TDD
- Types + Properties = Software: other properties
- Types + Properties = Software: finite state machine
- Types + Properties = Software: initial state
- Types + Properties = Software: composition
- Types + Properties = Software: properties for the Forties
- Types + Properties = Software: properties for the advantage state
- Types + Properties = Software: state transition properties
- Types + Properties = Software
- Make pre-conditions explicit in Property-Based Tests
- Introduction to Property based Testing with F# Pluralsight course
- Property Based Testing without a Property Based Testing framework
- Diamond kata with FsCheck
Functional Programming
- A restaurant sandwich
- Short-circuiting an asynchronous traversal
- Nested monads
- Collecting and handling result values
- Traversals
- Functor compositions
- Functor sums
- FSZipper in C#
- Functor products
- A Binary Tree Zipper in C#
- A List Zipper in C#
- Zippers
- Range as a functor
- A Range kata implementation in C#
- A Range kata implementation in F#
- A Range kata implementation in Haskell
- Serializing restaurant tables in Haskell
- A C# port of validation with partial round trip
- What's a sandwich?
- Collatz sequences by function composition
- Refactoring pure function composition without breaking existing tests
- Anagrams kata as a one-liner
- More functional pits of success
- The IO monad
- Encapsulation in Functional Programming
- Refactoring a saga from the State pattern to the State monad
- Refactoring the TCP State pattern example to pure functions
- The State pattern and the State monad
- An applicative reservation validation example in C#
- Natural transformations
- Get and Put State
- The State monad
- Asynchronous monads
- The Lazy monad
- The Identity monad
- An Either monad
- At the boundaries, applications aren't functional
- The Maybe monad
- The List monad
- Monad laws
- Kleisli composition
- Monads
- Contravariant Dependency Injection
- A conditional sandwich example
- Enumerate Wordle combinations with an applicative functor
- The Tennis kata revisited
- Referential transparency fits in your head
- The State functor
- Structural equality for better tests
- Threading context through a catamorphism
- An F# demo of validation with partial data round trip
- A Haskell proof of concept of validation with partial data round trip
- Validation, a solved problem?
- Task asynchronous programming as an IO surrogate
- Implementation of the C# IO container
- Referential transparency of IO
- Syntactic sugar for IO
- The IO functor
- IO container in a parallel C# universe
- The IO Container
- An F# implementation of the Maître d' kata
- Repeatable execution in Haskell
- Repeatable execution
- Impureim sandwich
- Discerning and maintaining purity
- Algebraic data types aren't numbers on steroids
- Semigroup resonance FizzBuzz
- Refactoring registration flow to functional architecture
- Picture archivist in F#
- Picture archivist in Haskell
- Functional file system
- How to get the value out of the monad
- Functional architecture: a definition
- Flattening arrow code using a stack of monads
- Typing and testing problem 23
- Builder as Identity
- The Builder functor
- F# free monad recipe
- Combining free monads in F#
- Combining free monads in Haskell
- A pure command-line wizard
- Hello, pure command-line interaction
- Pure interactions
- Pure times in F#
- Pure times in Haskell
- Pure times
- Fractal trees with PureScript
- Dependency rejection
- Partial application is dependency injection
- From dependency injection to dependency rejection
- From REST to algebraic data
- When variable names are in the way
- Decoupling decisions from effects
- Functional architecture is Ports and Adapters
- Types + Properties = Software: designing with types
- Tail Recurse
- Recurse
- When x, y, and z are great variable names
- Functional design is intrinsically testable
JavaScript
- A regular grid emerges
- Fractal hex flowers
- Mazes on Voronoi tessellations
- Idiomatic or idiosyncratic?
Haskell
- Pendulum swing: no Haskell type annotation by default
- Legacy Security Manager in Haskell
- Das verflixte Hunde-Spiel
- Conservative codomain conjecture
- Extracting curve coordinates from a bitmap
- Extracting data from a small CSV file with Haskell
- Range as a functor
- A Range kata implementation in Haskell
- Serializing restaurant tables in Haskell
- Compile-time type-checked truth tables
- NonEmpty catamorphism
- Refactoring pure function composition without breaking existing tests
- Anagrams kata as a one-liner
- Natural transformations as invariant functors
- Can one flatten a statically typed list?
- Type-level DI Container prototype
- Enumerate Wordle combinations with an applicative functor
- Property-based testing is not the same as partition testing
- Threading context through a catamorphism
- A Haskell proof of concept of validation with partial data round trip
- Properties for all
- Repeatable execution in Haskell
- Algebraic data types aren't numbers on steroids
- Semigroup resonance FizzBuzz
- Zone of Ceremony
- A basic Haskell solution to the robot journeys coding exercise
- Unit testing wai applications
- Picture archivist in Haskell
- Naming newtypes for QuickCheck Arbitraries
- Rose tree catamorphism
- Payment types catamorphism
- Full binary tree catamorphism
- Tree catamorphism
- Either catamorphism
- List catamorphism
- Maybe catamorphism
- Peano catamorphism
- Boolean catamorphism
- Applicative monoids
- A pure Test Spy
- An example of state-based testing in Haskell
- Applicative validation
- An applicative password list
- Full deck
- Typing and testing problem 23
- Terse operators make business code more readable
- Church-encoded Boolean values
- Composite as a monoid - a business rules example
- Project Arbitraries with view patterns
- Inlined HUnit test lists
- Parametrised unit tests in Haskell
- Null Object as identity
- Endomorphic Composite as a monoid
- Uncurry isomorphisms
- Money monoid
- Test data without Builders
- Builder as Identity
- The Builder functor
- Combining free monads in Haskell
- Pure times in Haskell
- Pure times
- Dependency rejection
- Partial application is dependency injection
- Conditional composition of functions
- Async as surrogate IO
- Functional architecture is Ports and Adapters
Hedgehog
- Range as a functor
- A Range kata implementation in F#
- Test Data Generator monad
- GitHub Copilot preliminary experience report
- An example of state based-testing in F#
- The Test Data Generator applicative functor
- Convex hull monoid
- The Test Data Generator functor