  We consider networks of processes which interact with beeps. In the basic
model defined by Cornejo and Kuhn (2010), processes can choose in each round
either to beep or to listen. Those who beep are unable to detect simultaneous
beeps. Those who listen can only distinguish between silence and the presence
of at least one beep. We refer to this model as $BL$ (beep or listen). Stronger
models exist where the nodes can detect collision while they are beeping
($B_{cd}L$), listening ($BL_{cd}$), or both ($B_{cd}L_{cd}$). Beeping models
are weak in essence and even simple tasks are difficult or unfeasible within.
  We present a set of generic building blocks (design patterns) which seem to
occur frequently in the design of beeping algorithms. They include multi-slot
phases: the fact of dividing the main loop into a number of specialised slots;
exclusive beeps: having a single node beep at a time in a neighbourhood (within
one or two hops); adaptive probability: increasing or decreasing the
probability of beeping to produce more exclusive beeps; internal (resp.
peripheral) collision detection: for detecting collision while beeping (resp.
listening). Based on these patterns, we provide algorithms for a number of
basic problems, including colouring, 2-hop colouring, degree computation, 2-hop
MIS, and collision detection (in $BL$). The patterns make it possible to
formulate these algorithms in a rather concise and elegant way. Their analyses
are more technical; one of them improves significantly upon that of the best
known MIS algorithm by Jeavons et al. (2016). Finally, inspired by a technique
from Afek et al. (2013), our last contribution is to show that any Las Vegas
algorithm relying on collision detection can be transposed into a Monte Carlo
algorithm without collision detection at the cost of a logarithmic slowdown,
which we prove is optimal.
