Distributed User Interfaces: How to Distribute User Interface Elements across Users, Platforms, and Environments