CSCI 3907/6907 - Internet of Things - Systems and Security
Posted on January 1, 2020
by Gabriel Parmer
This class focuses on the aspects of system design and security in the Internet of Things (IoT). IoT centers around the tight collaboration between the physical environment, The workload for this class centers around a semester-long project that is programming intensive.
Course Info
Class Time/Location:
- Class: Tuesdays/Thursdays @ 12:45-2:00, Location: ROME 459
Office Hours:
- For general class questions, use Piazza.
- Gabe’s office hours in SEH 4600, Time: Wednesday 1-2 and Thursday 4-5
- We can always walk and chat after class
TODO
- Register for the class on Piazza.
- On Piazza, you will find a link to the course’s github page. You have a lot of reading to do there.
- Once the class starts, on Piazza you’ll find a link to the course survey. You must fill this out ASAP. You will receive no grades till you do.
Course Overview
Learning Outcomes
Objectives - In completing this class, students will…
- understand what IoT and edge systems are, why they are important, and what some of their major challenges are
- understand the purpose, function, and trade-offs in OSes and distributed systems in IoT
- understand the security concerns in the IoT, and some of their major mitigations
- design and implement a non-trivial IoT system to apply the understanding above
Structure - This class is broken into five main activities: lectures, reading, presentations, project, and peer-review.
- Lectures will investigate the core concepts and concerns in the IoT.
- You’ll learn how to read research papers, and will provide critiques for them.
- Students will perform presentations of these research papers to investigate the cutting edge of IoT research. They are a core component of the class, and require student commitment to successfully present the work.
- Projects are conducted in groups of 3 or 4, and focus on the “full-stack” of IoT systems, from the IoT device, to the cloud.
- Some classes will be devoted to peer feedback for each project. Your job is to pitch your project, and, more importantly, your technical approach, and to provide feedback for other’s projects.
Direct Instruction and Independent Learning
Each semester, you’re expected to spend at least:
- 35 hours in class for direct instruction, and
- 110 hours out of class working on your project, reading, and presentations.
Course Prerequisites and Student Responsibilities
Prerequisites:
- Undergraduates: Software Engineering.
- Graduates: Architecture is highly suggested.
Responsibilities - Students must
- IoT is a very diverse area that requires many different technologies, many of which will not be covered in the class instruction.
- You’re expected to spend time independently learning technologies, becoming capable with them, and apply them in your project.
- Attend all classes unless you are sick or there is an emergency in which cases you must contact the professor via email before class. If you’re sick, please provide a doctor’s note.
- Interact, ask questions, and generally participate in class discussions. Presentations must incite questions and comments from the class.
- Work productively as a group on an extended project with many “moving parts”.
- Complete all work in accordance with the academic honesty rules for the university and for the class (see below).
- Work to digest and process all provided material including Piazza content (you cannot ignore Piazza).
- Follow the syllabus and instructions on the courses’ github page.
- Contact the Professor if you are worried about completing any responsibilities.
Professor and Instructional Staff Responsibilities
You should depend on Gabe for the class to
- be clear about student’s responsibilities in the class,
- convey the course’s materials on this webpage, on Piazza, on the course github page, and in class in a manner that is approachable and understandable to every single student,
- provide an environment in which everyone feels open to ask questions, and seek to remedy any misunderstandings or confusions, and
- provide additional material on demand if anyone is curious about knowledge beyond the scope of the class.
These can be remembered as “I’m here to make it clear what you should do, what you should know, and what to do if you don’t feel like you know what you’re supposed to do or know”. If at any point, you have concerns about any of these, of if I’m dropping the ball on any of them, please let us know and we’ll do better.
Above all, it is important that this class provides an environment for learning and self improvement. Gabe takes this very seriously, so if it is not adequately serving that purpose, don’t hesitate to let him know why.
Class Experiment
Part of keeping a course “fresh” and successful is trying new things, and keeping the things that work. Given this, the experiment I’m running this year:
Collaborative class policies and material. IoT is immensely diverse, and requires collaboration between developers working in varying fields, and an adaptability to handle unforeseen challenges. This class is structured to mimic that environment:
- The class’ materials are an amalgamation of online resources, to be extended throughout the course of the class.
- Each student will contribute to the knowledge-base of the class.
- The policies of the class can change to best-accommodate the goals of the class.
Thus, the course’s webpage is split between this page, and the course’s github page. The course’s webpage is open for pull requests (PRs). You can propose to change the schedule, the grading policies, and the course material. I’ll decide if a PR should be applied or not, but everyone for the class can chime in on the PR’s discussion on github.
Course Schedule, Grading, and Projects
Syllabus: The schedule and syllabus can be found on the course’s github page.
Grading and deadlines: Most policies are on the course’s github account (thus can be modified via PRs), but the one immutable policy: project, presentation, and reading deadlines are hard. You cannot get any credit for late work.
Projects: The projects will live in the course’s github organization. You must use the github issues and project facilities there. We can discuss exceptions if they are well-motivated.
Course Material
The class’ material is spread across four resources, each of which services a specific purpose:
- This webpage: The fixed (immutable) policies for the class, and general information.
- The
collaboration
repo for this class on github. This repository includes all of the mutable policies for this class. If you think that the class would be better served by slight changes, please do a PR there. Any PR should include a discussion before it is adopted.
- The class’ github organization and your project repository. The
gwu-iot
organization includes the collaboration
repo, and your project repos (unless otherwise exempted).
- The class’ Piazza messaging board. This is used for general class communication. As questions and make comments about the class here. You can ask about papers and discuss general issues with your project here. I’ll make all class announcements here. All accepted PRs that change class policies will be announced here.
There are no required books for the class. There is a list of documentation in collaboration/resources
on the course’s github page (that you should augment with PRs). However, the project requires equipment. The class will provide some of this equipment, but you might need to augment that if you need parts quickly.
Academic Honesty
Academic honesty centers around
- ensuring that you receive credit for the course commensurate with the effort you put in, and the results of your work, and
- guaranteeing that if you use resources external to your group, they are clearly attributed.
Academic honesty for paper critiques:
- You must read the papers yourself, and form your own judgments about them.
- You must write your own critique that is independent of Internet material, and your classmates.
- You may watch presentations associated with the papers, but these are not a replacement for reading the paper.
Academic honesty for your project:
- You will use many Internet resources for your project. You must attribute these sources. I suggest adding a
resources.md
file in your repository that lists all of the resources you’ve leveraged.
- If you use someone else’s code, you must attribute this usage in a comment in your code.
- You must accurately represent the work you’ve done on the project. You cannot say that you’ve done a piece of work, when one of your teammates, or an online resource actually did that work.
I encourage you to share any resources and knowledge you believe might be useful to others in the shared collaboration/resources/
repository. In this way, we will all learn together, and build a strong corpus of IoT knowledge. If you use some of these resources, please attribute them appropriately.
Academic honesty for this class is summarized as:
- you must have done the work you say you did, and
- you must attribute any help and/or resources you used.