ReticularSpaces: activity-based computing support for physically distributed and collaborative smart spaces
design patterns : elements of reusable object - oriented software .