Embedded Software Development for the Internet Of Things: The Basics, the Technologies and Best Practices