Project One: Real-Time Monitoring and Messaging

Due by Thursday, October 8, 2020

Project Description

For this project, you and a small team will leverage some combination of ExpressJS, Web Sockets/socket.io, Web Workers, Service Workers, and the Notifications API to create a web-based system that monitors a source for changes in data.

For example, you might periodically scrape the contents of the daily Congressional Record at congress.gov and run a diff against your last retrieved copy. Your project would then perhaps provide notifications of changes, as well as a page highlighting the changes as they’ve occurred–and that would also update in real-time as changes come in.

You can do this with any source of data that updates multiple times over the course of a typical day. Just be sure you do not run afoul of the copyright laws surrounding the data you’re using. (US Government publications, for example, generally are not protected by copyright because they are in the public domain.)

Deliverables and Deadlines

  1. Due by Thursday, September 3: Organize on Basecammp into teams for Project One. If you have an idea for what you’d like to build for Project One, you might share that in your post.
  2. Due by Thursday, September 10: Formally pitch your Project One idea to Basecamp. Once you and your team have organized yourselves, formally pitch your Project One idea on Basecamp for instructor feedback and approval.
  3. Due by Thursday, September 17: Post your Project One progress to Basecamp. Include a link to your GitHub repository. Be sure and also respond to the progress of other group projects.
  4. Due by Thursday, September 24: Post your Project One progress to Basecamp. Include a link to your GitHub repository and a short video where your group talks through your project running in a web browser. Be sure and also respond to the progress of other group projects.
  5. Due by Thursday, October 8: Submit your final Project One. Submissions should be both public on Basecamp and private to the instructor’s email. Your email should include:
    • Links to your group and individual repositories
    • A self-critique memo, written in the body of the email, about your work on the project and your progress in class to this point.
    • A short critique of each of your group members, also written in the body of the email.

Project Requirements

  1. Valid, semantic HTML; valid CSS; error-free JavaScript
  2. Feature detection for all JavaScript calls to Web APIs
  3. A centralized group repository that contains your ExpressJS app, which can be cloned and run locally
  4. A personal fork of the group repository in your GitHub account where you do most of your work
  5. Make good use of feature branches on your fork of the group repository
  6. All work submitted to the group repository should be done through pull requests on GitHub

Project Goals

  • Learn to programmatically access web-available resources, and run comparisons on the results
  • Learn to command established real-time communication APIs, including Web Workers, Web Sockets, and Web Notifications
  • Improve your ability to work with a centralized group repository and an individual fork
  • ITMD 545 Only: Learn to serialize data in a web-friendly format like XML or JSON

Project Two: Chat Plus Alpha Release

Due by Monday, November 23, 2020

Project Description

For this project, you and your chosen team will create a peer-to-peer (one single user to one other single user) chat-based application that enables realtime audio, video, and text/data communication over a WebRTC connection. The WebRTC portion will enable two users to connect, but your app should allow multiple separate pairs of users to join their own private “rooms.”

In addition to that (the plus part of Chat Plus), your app will allow your pairs of users to engage in some kind of shared realtime activity: playing a game, listening to music or watching videos, or collaborating on a document or some other kind of intellectual work.

The plus part of your app can either be a feature that your team builds itself, or it can leverage the open API of any service that makes itself available. For example, if you decide to create an app for listening to music in pairs, you might have a way to share mp3 files with users as streaming data, using the RTCDataChannel, from one user’s computer—or you might leverage something like the Spotify API. While there may be particular use cases for something like the HTML <iframe> element, the plus part of your app must be more technologically sophisticated than simply loading the same web resource in the browsers of both users.

Finally, while you will almost certainly have need of WebSockets/socket.io for certain signaling tasks, your app should leverage WebRTC peer connections to ensure that the bulk of peer-to-peer communication and data sharing takes place browser to browser, rather than through your app’s third-party server. For example, if you build a game that two users can play together, various moves and states of game play should be transferred from player to player over WebRTC. You may, however, opt to additionally store game-state information on a server for the purposes of game recover, score keeping, etc.

Note: the requirements for this project are subject to change. Monitor Basecamp for any changes, which will also be noted and discussed in class.

Deliverables and Deadlines

  1. Due by Thursday, October 15: Formally pitch your Project Two idea on Basecamp. Once you and your team have organized yourselves, formally pitch your Project Two idea on Basecamp for instructor feedback and approval.
  2. Due by Thursday, October 22: Weekly Project Two check-in Include a link to your GitHub repository. Be sure and also respond to the progress of other group projects.
  3. Due by Thursday, October 29: Weekly Project Two check-in Include a link to your GitHub repository. Be sure and also respond to the progress of other group projects.
  4. Due by Thursday, November 5: Post Project Two draft and walkthrough video Include a link to your GitHub repository and a short video where your group talks through your project running in a two web browsers. Be sure and also respond to the progress of other group projects.
  5. Due by Monday, November 23: Submit your final Project Two. Submissions should be both public on Basecamp and private to the instructor’s email. Your email should include:
    • Links to your group and individual repositories
    • A link to a video showing your app at work on two different browsers
    • A self-critique memo, written in the body of the email, about your work on the project and your progress in class to this point
    • A short critique of each of your group members, also written in the body of the email

Project Requirements

  1. Your app must rely on the latest implementations of the WebRTC specification and its protocols; use of adapter.js is however highly encouraged
  2. Your app must be able to auto-generate obfuscated, hard-to-guess room IDs for users
  3. You should use progressively enhanced, standards-compliant HTML, CSS, and JavaScript to build a satisfying mobile-first, responsive interface for your users
  4. You should do the appropriate feature- and constraint-detection steps necessary to ensure the smoothest, interoperable, platform-neutral operation of your app as possible
  5. The plus part of your app should either be something of your group’s creation (like a simple game) or leverage a third-party API or service
  6. You must maintain a centralized group repository that contains your ExpressJS app, which can be cloned and run locally
  7. You must also maintain a personal fork of the group repository in your GitHub account where you do most of your work
  8. You should make good use of feature branches on your fork of the group repository
  9. All work submitted to the group repository should be done through pull requests on GitHub

Project Goals

  • Learn to command established real-time communication APIs, including WebRTC, Web Workers, Web Sockets, and Web Notifications
  • Learn to build a WebRTC-based application that functions over a local-area network or a carefully configured wide-area network, with temporarily opened high-numbered ports and port-forwarding on your local network (if possible)
  • Improve your ability to work with a centralized group repository and an individual fork
  • ITMD 545 Only: Learn to develop long-term monitoring of the performance and effects of your WebRTC app on the networks of individual users

Project Three: Chat Plus Beta Release

Due by Thursday, December 10, 2020

Project Description

This project will be a refinement of Project Two, making fuller use of STUN/TURN signaling for more robust network interoperability and obviating the need for monkeying with firewalls, etc. Your group will make some kind of non-trivial revision, refactoring, or other improvement to your Chat Plus Alpha Release (Project Two). Additionally, your group will write a ~500-word proposal outlining a significant future improvement to your project.

Deliverables and Deadlines

  1. Due by Wednesday, December 2: Pitch your Project Three revisions on Basecamp. Your Basecamp post should include plans both for your non-trivial revision that your group will undertake, as well as a rough idea of the significant future improvement your group will write about.
  2. Due by Thursday, December 10: (Firm deadline.) Email instructor with final project deliverables. The email should contain:
    • Links to your group and individual repositories
    • Links to your group and individual feature branch for Project Three
    • A self-critique memo, written in the body of the email, about your work on the project and your progress in class this semester
    • A short critique of each of your group members, also written in the body of the email

Project Requirements

  1. All the requirements for Project Two
  2. A non-trivial revision to your Project Two, isolated on a feature branch in your upstream repository; you may elect to merge that reivsion in with your main branch, but preserve the feature branch for your final project submission
  3. A document outlining a significant future improvement to your project. Write this as a markdown file in your project’s repository. Name it something like PLANS.md or something else that the instructor can find easily.

Project Goals

  • Revise a previous project based on instructor feedback and any additional knowledge that you have gained since its original submission

Project Four: Academic Research in WebRTC

Due by Thursday, December 10, 2020

Project Description

This project, required only of ITMD 545 students, will expose you to the academic research going on in relation to WebRTC and related technologies. Each student will find a peer reviewed article from ACM, IEEE, or another respected venue that publishes academic research in computing, and then write and post to Basecamp a 250-word summary of the article.

Deliverables and Deadlines

  1. Due by Thursday, November 19: Find and get instructor approval on an academic article.
  2. Due by Thursday, December 10: Post article summary to Basecamp, in its own thread. Be sure to include:
    • The full citation to the article
    • A direct link to the article
    • Your 250-word summary of the article

Project Requirements

  1. Your chosen article must be between 3 and 8 pages in length.
  2. Your chosen article must be published in English.
  3. Your summary should be as close to 250 words long as possible (neither substantially longer nor shorter).

Project Goals

  • Learn to search in the academic research surrounding WebRTC.
  • Learn to read academic research effectively.
  • Learn to write concise but comprehensive summaries of academic research.