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