A recollection of all the articles posted on deque.blog, grouped into categories.
Architecture and Design
Random thoughts and experimentations on the complex endeavour of designing and architecting software:
- Hexagonal architecture and free monads
- A study of 4 Money class designs
- Follow up on the the study of 4 Money class designs
- Monoids: what they are, why there are useful, and what they teach us about software
- Free Monads: from the basics up to the implementation of composable and effectful stream processing
C++ Design Tips
A series presenting various design tips dedicated to C++. These tips are not rules and are not universal, but often helps me in the process of building simple, composable, reusable and easy to evolve APIs:
Testing
How to improve your testing by thinking in terms of invariants, properties, and finding good ways to encode them into tests:
- Code your own QuickCheck
- Code your own QuickCheck (Higher Order Functions)
- Code your own QuickCheck (shrinking)
- QuickCheck in action
- QuickCheck is fun, deal with it
- How to unit test code that uses polymorphic interfaces? (Haskell)
Advanced type systems
Exploring the world of dependent typing in Idris, its capabilities, and the opportunities it brings in terms of design and type checking:
- 10 things Idris improved over Haskell
- Type safety challenge: Idris Bowling Kata
- Transforming data structures into types
Open recursion
How to combine the effectiveness of dynamic programming while preserving the declarative nature of a recurrence formulas:
Recursion schemes
How to decouple the traversal of an Abstract Syntax Tree from the operations to perform on it, to build shorter, more maintainable and more composable DSLs:
- Catamorph your DSL: Introduction
- Catamorph your DSL: Deep Dive
- Catamorph your DSL: Trade-offs
- Catamorph your DSL (port to Clojure)
- Catamorph your DSL (port to C++)
- Paramorph your DSL (C++)
Web game programming
A tutorial on how to write simple but complete (with complex game logic and artificial intelligence) Web games using Clojurescript:
- Building a Clojurescript game
- Building a Clojurescript game: architecture POC
- Building a Clojurescript game: game logic
- Building a Clojurescript game: thoughts on spec
- Building a Clojurescript game: rendering
- Building a Clojurescript game: application state
- Building a Clojurescript game: AI
Open source libraries
Articles linked to the few open source libraries that I published on my GitHub. More details can be found on the page dedicated to projects.
- Building on the STL random header
- Weighted choice implementation
- Implementing Clojure-like transducers in Idris (Part 1)
- Implementing Clojure-like transducers in Idris (Part 2)
- IdrisPipes: a library for composable and effectful stream processing in Idris
LISP meta-programming for C++ developers series
How supporting reflection, being able to manipulate the AST of the language inside the language, and perform any computation at compile time can greatly improve and simplify your code.
- List meta-programming for C++ developers: Introduction
- List meta-programming for C++ developers: First macros
- List meta-programming for C++ developers: Compile time computations
- List meta-programming for C++ developers: Automatic traces
- List meta-programming for C++ developers: Automatic traces (part 2)
Event reports
Some reports on the events I was lucky enough to attend (such as Meetups, trainings or conferences) and their most interesting aspects.
- Meetup report: the philosophy of FP
- Meetup report: Kata night
- Thoughts on a software craftsmanship training that could have gone better
- My CppCon 2017 trip report: 10 great talks to watch and learn from
Fooling around with algorithms
Playing with interesting code puzzle to discover some interesting aspects and guide-lines around programming and software engineering.
- Fizz Buzz fun
- Algorithms as design tools
- Folding your merge sort
- Accumulating your merge sort
- Traversal dimensions: lenses (C++)
- Traversal dimensions: combinators (C++)
- Combining traversals by example (C++)
- Beautiful code: Control.Fold
- Lost in std::permutation complexity
- Still lost in std::permutation complexity
- Lost in std::permutation test complexity
- A Clojure.Spec for binary trees
- Clojure high performance fibonacci
- The alias method and data transformation
Miscellaneous
The remaining articles, including answers to other articles or talk, and including completely delirious random thoughts on software.
- Understanding NP complexity through the List monad
- How to make a better polymorphic clone
- Why template parameters of dependent types cannot be deduced, and what to do about it