Smart Home Automation is an important paradigm in today's sensor-driven world. Homes and buildings are being continously instrumented with sensors like kinects, energy meters, cameras, occupancy sensors, digital televisions, and smart switches. Home automation systems form an interesting confluence of sensors systems, operating systems, and cloud-driven data analytics. This course will study the challenges in smart home automation systems from a hands-on and systems perspective. This class will use an innovative and emerging platform, Lab of Things, from Microsoft Research to build software systems for smart home automation. This would include writing drivers and applications using Lab of Things. Knowledge of an Object Oriented Language is a must. Knowledge of C# is a plus, however, the instructor would review C# towards the beginning of class. There would be three-four short assignemnts and a course project. There will be one in class midterm for the class but no finals.
Mobile phones are one of the most ubiquitously used devices around. With different brands like the Android, Windows Mobile, and the iPhone, mobile phones have revolutionized the way we look at computing. There are thousands of applications such as social networking and games that have cropped up on mobile phones. With the help of cloud services, even sophisticated applications such as multi-player games, image processing, and speech processing has become feasible. This course will cover mobile phone programming components like UI programming, data management, localization, and programming sensors like the accelerometer and compass, mobile OS services, and mobile phone games from a systems and implementation perspective. Students will also learn how to use cloud services in applications. The course will focus on the Android platform. Android tablets may be given out based on availability. The evaluation of the course will include a in-class midterm, three assignments, and a final project (mobile phone application of your choice). This will be a very hands on course where the students should learn to write fairly sophisticated applications on mobile phones. The course will culminate in a Poster/Demo session where groups will demonstrate their mobile application to an audience.
This class covers the basics of modern computer operating systems, including processes and synchronization, memory management, I/O, file systems, and security / protection. Students taking this class should have completed CMSC 341 (Data Structures) and some combination of hardware courses depending on whether they are CMSC or CMPE majors. The precise combinations are specified above. You MUST have completed ALL the prerequisites before you take this course. In addition, students must be familiar with C / C++ because the projects will require a significant amount of programming effort and constitute a significant chunk of the grade. Students not comfortable with their programming skills under UNIX would benefit from the Stevens text. Students not comfortable with the C Programming language will benefit from the K & R book. The projects will involve modifying the Linux kernel which is written in C. Copious documentation on the Linux kernel is available on the internet, and we shall provide you with links to several appropriate sites. If you prefer to have that in a book form however, we will suggest the book shortly. Tannenbaum's text is an interesting alternative to our main textbook, and does a better job of presenting some of the material. Note however that the recommended texts are just that . recommended. You are not required to buy any of them.
An examination of a range of advanced data structures, with an emphasis on an object-oriented approach. Topics include asymptotic analysis; various binary search trees, including red-black and splay trees; skip lists as alternatives to binary search trees; data structures for multidimensional data such as K-D trees; heaps and priority queues, including binary heaps, binomial heaps, leftist heaps (and/or other mergeable heaps); B-trees for external storage; other commonly used data structures, such as hash tables and disjoint sets. Programming projects in this course will focus on implementation issues for data structures and on empirical analysis of their asymptotic performance.