Author: Rob Smallshire

Software Process Dynamics
At the Software Architect 2015 conference in London I presented “What if? Supporting decisions with software dynamics simulations”. [1] This talk introduces the idea of performing numerical simulations of software development teams and the products they build. The value in such simulations is to inform policy decisions and guide deliberate …

Software Process Dynamics
At the Software Architect 2015 conference in London I presented “What if? Supporting decisions with software dynamics simulations”. [1] This talk introduces the idea of performing numerical simulations of software development teams and the products they build. The value in such simulations is to inform policy decisions and guide deliberate …

EventSourced Domain Models in Python at PyCon UK
At PyCon UK 2015 I led a very well attended workshop with the goal of introducing Python developers to the triedandtested techniques and patterns of Domain Driven Design (DDD), in particular when used as part of an eventsourced architecture.
The twoandahalf hour workshop was comprised of excerpts from our training …

EventSourced Domain Models in Python at PyCon UK
At PyCon UK 2015 I led a very well attended workshop with the goal of introducing Python developers to the triedandtested techniques and patterns of Domain Driven Design (DDD), in particular when used as part of an eventsourced architecture.
The twoandahalf hour workshop was comprised of excerpts from our training …

Event Processing with Transducers
In the previous article in this series on transducers we looked at lazily evaluating transducers. This time we’ll look not at pulling output through a transducer chain from downstream, but at pushing input items into the chain from upstream.
All of the uses of transducers we’ve demonstrated in Python so …

Event Processing with Transducers
In the previous article in this series on transducers we looked at lazily evaluating transducers. This time we’ll look not at pulling output through a transducer chain from downstream, but at pushing input items into the chain from upstream.
All of the uses of transducers we’ve demonstrated in Python so …

Lazy Transducer Evaluation
In the previous article in this series on transducers we looked at transducers which push more items downstream through the reducer chain than they receive from upstream. We promised that this would make lazy evaluation of transducer chains quite interesting.
When used with our transduce() function, our mapping and filtering …

Lazy Transducer Evaluation
In the previous article in this series on transducers we looked at transducers which push more items downstream through the reducer chain than they receive from upstream. We promised that this would make lazy evaluation of transducer chains quite interesting.
When used with our transduce() function, our mapping and filtering …

Item Injecting Transducers
In the previous article in our series on understanding transducers through Python we showed how to support early termination of a reduction operation. This time, we’ll demonstrate how transducers can produce more items than they consume. Although this may seem obvious, it leads to some important consequences for implementing lazy …

Item Injecting Transducers
In the previous article in our series on understanding transducers through Python we showed how to support early termination of a reduction operation. This time, we’ll demonstrate how transducers can produce more items than they consume. Although this may seem obvious, it leads to some important consequences for implementing lazy …

Terminating Transducers
In the previous article in this series on transducers, we showed how to implement stateful transducers, and how to deal with any leftover state or other cleanup operations when the reduction operation is complete. Sometimes, however, there is no need to process a whole series of items in order to …

Terminating Transducers
In the previous article in this series on transducers, we showed how to implement stateful transducers, and how to deal with any leftover state or other cleanup operations when the reduction operation is complete. Sometimes, however, there is no need to process a whole series of items in order to …

Stateful Transducers
In the previous article in this series on transducers we saw how we can develop the notion of the transducer from a single function which literally transforms reducers to a more capable protocol which supports two further capabilities: First of all, the association of initial ‘seed’ values with a reduction …

Stateful Transducers
In the previous article in this series on transducers we saw how we can develop the notion of the transducer from a single function which literally transforms reducers to a more capable protocol which supports two further capabilities: First of all, the association of initial ‘seed’ values with a reduction …

Enriching the Transducer Protocol
In the previous article in the series we looked at improving the experience of composing transducers together in Python, by introducing a compose() function. We finished by showing this snippet, which composes a filtering transducer with a mapping transducer to produce a primesquaring transducer. Recalling that transducers are used to …

Enriching the Transducer Protocol
In the previous article in the series we looked at improving the experience of composing transducers together in Python, by introducing a compose() function. We finished by showing this snippet, which composes a filtering transducer with a mapping transducer to produce a primesquaring transducer. Recalling that transducers are used to …

Improving Transducer Composition
In the previous article in this series we derived a Python implementation of transducers from first principles. We finished by showing how transducers can be composed together using regular function call application to give us a single composite reducer which can perform many operations with a single pass of reduce …

Improving Transducer Composition
In the previous article in this series we derived a Python implementation of transducers from first principles. We finished by showing how transducers can be composed together using regular function call application to give us a single composite reducer which can perform many operations with a single pass of reduce …

Deriving Transducers from First Principles
What is a transducer?
Transducers – a portmanteau of ‘transform reducers’ – are a new functional programming concept introduced into the Clojure programming language. Although transducers are actually pretty straightforward in retrospect, wrapping your brain around them, especially if you’re not already a competent Clojureist, can be challenging. In this series …

Understanding Transducers through Python
In this series we take an indepth look at transducers. Transducers – a portmanteau of “transform reducers” – are a new functional programming concept introduced into the Clojure programming language. Although transducers are actually pretty straightforward in retrospect, wrapping your brain around them, especially if you’re not already a competent Clojureist, can …

Deriving Transducers from First Principles
What is a transducer?
Transducers – a portmanteau of ‘transform reducers’ – are a new functional programming concept introduced into the Clojure programming language. Although transducers are actually pretty straightforward in retrospect, wrapping your brain around them, especially if you’re not already a competent Clojureist, can be challenging. In this series …

Understanding Transducers through Python
In this series we take an indepth look at transducers. Transducers – a portmanteau of “transform reducers” – are a new functional programming concept introduced into the Clojure programming language. Although transducers are actually pretty straightforward in retrospect, wrapping your brain around them, especially if you’re not already a competent Clojureist, can …

Predictive Models of Development Teams and the Systems They Build
In 1968 Melvin Conway pointed out a seemingly inevitable symmetry between organisations and the software systems they construct. Organisations today are more fluid than 40 years ago, with short developer tenure, and frequent migration of individuals between projects and employers. In this article we’ll examine data on the tenure …

Predictive Models of Development Teams and the Systems They Build
In 1968 Melvin Conway pointed out a seemingly inevitable symmetry between organisations and the software systems they construct. Organisations today are more fluid than 40 years ago, with short developer tenure, and frequent migration of individuals between projects and employers. In this article we’ll examine data on the tenure …

Rational Computational Geometry in Python
In the previous article, we looked at how a standard technique for determining the collinearity of points, based on computing the sign of the area of the triangle formed by two points on the line and a third query point. We discovered, that when used with Python’s float type [1 …

Rational Computational Geometry in Python
In the previous article, we looked at how a standard technique for determining the collinearity of points, based on computing the sign of the area of the triangle formed by two points on the line and a third query point. We discovered, that when used with Python’s float type [1 …

Robust Geometric Computation in Python
In this series we look in detail at the behaviour of one of the simplest geometric functions, demonstrate its flawed behaviour when implemented with floating point numbers, and fix it using an exact number type provided in the Python Standard Library.

The Folly of FloatingPoint for Robust Geometric Computation
Computational geometry – a world where lines have zero thickness, circles are perfectly round and points are dimensionless. Creating robust geometric algorithms using finite precision number types such as float is fiendishly difficult because it’s not possible to exactly represent numbers such as onethird, which rather gets in the way of …

Robust Geometric Computation in Python
In this series we look in detail at the behaviour of one of the simplest geometric functions, demonstrate its flawed behaviour when implemented with floating point numbers, and fix it using an exact number type provided in the Python Standard Library.

The Folly of FloatingPoint for Robust Geometric Computation
Computational geometry – a world where lines have zero thickness, circles are perfectly round and points are dimensionless. Creating robust geometric algorithms using finite precision number types such as float is fiendishly difficult because it’s not possible to exactly represent numbers such as onethird, which rather gets in the way of …

Top four JavaZone 2013 talk – The Unreasonable Effectiveness of Dynamic Typing
I’m very happy to see that my talk on The Unreasonable Effectiveness of Dynamic Typing was rated fourth of all the talks in the show. Thanks to everyone who attended and voted.
JavaZone 2013 top talks http://t.co/gfbMnJRsaU – 4th: “The Unreasonable Effectiveness of Dynamic Typing for Practical …” by …

Top four JavaZone 2013 talk – The Unreasonable Effectiveness of Dynamic Typing
I’m very happy to see that my talk on The Unreasonable Effectiveness of Dynamic Typing was rated fourth of all the talks in the show. Thanks to everyone who attended and voted.
JavaZone 2013 top talks http://t.co/gfbMnJRsaU – 4th: “The Unreasonable Effectiveness of Dynamic Typing for Practical …” by …