Designing for Interaction: Creating Smart Applications and Clever Devices