# Group Project
**Due: Dec 1, 2021, 11:59:59 pm, v1.03**

## Requirements
The Semester Project is intended to be the capstone to this course. Your
team should use the basics we learned in the first half of the course
as a springboard to a project that contains elements we have not
discussed in class, or at least not in any detail. The requirements
are as follows:

- build an app using novel technologies or ideas, where novel means
  something that we have not discussed in detail in the class. Note
  that in class ~~we will be doing a small amount of augmented reality~~, of
  ~~machine learning~~, and networking with Firebase. These are still fine
  for the project.
- write a five-ten page report describing the evolution of your ideas,
  the process you went through to end up at the final app, and of
  course the app project itself.
- A five-minute screen-capture video (with audio desribing the
  app's features). I will choose among these for the last full week of
  classes. Each such team gets a 10% bonus.
- Turn in the app. It must compile and work as in the video/presentation.

## Group Assignment
This is totally up to you:
- You can form your own group if you know others that you want to work
with.
- You can advertise for teammates for teammates on piazza at
[@5](https://piazza.com/class/kqis2c9qzre3wr?cid=5).

Groups sizes are three or fewer students. You *may* work alone, but I
will require you to justify why you can now work in a group in an
email directly to me. If I disagree, you will be placed in a
randomly-created group.

I expect groups with either two or three members to produce projects
of roughly equivalent sophistication. Individuals would be expected to
do somewhat less.


## Group Communication and Workspace
You and your teammates can communicate any way you
wish. [Elms](https://myelms.umd.edu/courses/1275375/groups#) (**build your
team under the "Semester Project" tab, not "Student Groups"**) has
a mechanism to build group collaboration spaces 
that allow group members to message and share files.
However, I expect email and messaging to be more commonly used. 

Each group will be assigned __a new gitlab repository__ for development once
groups have been defined.

## Topics
Your app topic should satisfy the following constraints:
1. be a significant departure from what we have explicitly covered in
class.
1. be an app is more suited to a mobile device that somehow
takes advantage of the abilities or characteristics inherent to mobile phones
circa 2020, i.e. mobile, (almost) always-connected, good graphics,
useful hardware (camera, audio and video recording, gyroscope, GPS
antenna, etc.). 

Your team must write up and propose a topic (see below for
specifics). I may disallow it if I consider it not innovative/novel
enough, or not sufficient for a month-long project with multiple team
members.

**You will generally be expected to use techniques and/or APIs that we have not
discussed at length
in class**. The ARKit and machine learning libraries are expansive
enough that I encourage you to build on what we discuss in
class, if we get there. FireBase may or may be considered novel, depending on how you are using it.

# Project Ideas

These are ideas, you can either choose one of them to build on, or define your
own. However, you need explicit permission for a proposed app from Dr. Keleher
before proceeding.

1. Asteroids-equivalent arcade game (but NOT asteroids), including:
   - spritekit,
   - sound,
   - artwork.
1. Clever puzzle games, like ToonBlast
1. Augmented Reality (ARKit)
  - Placing Objects and Handling 3D Interaction
  - Scanning and Identifying 3D Objects
  - Pokeman Go-lite  (ARSCNView)
1. Apple watch complications
1. Bike route planner / tracker
   - track route with line on map
   - export to a .fit
   - upload to strava
   - plan from current location (this would require google map sdk)
1. Healthkit data mining and presentation.
1. Machine learning:
  - Models at
    [https://developer.apple.com/machine-learning/models/](https://developer.apple.com/machine-learning/models/),
    [https://github.com/SwiftBrain/awesome-CoreML-models](https://github.com/SwiftBrain/awesome-CoreML-models)
	Build an app to recognize specific types of objects and pull up
    online information and links for those recognized objects.
1. Something else.

## Artifacts to be turned in
1. **Due 10/7 midnight**: 
   - Project Name
   - Group Name
   - Group Members (names)
   - Minimal product goals  (1 paragraph)
   - Stretch goals  (1 paragraph)
   - Projected timeline, w/ milestones and assignment of work to group members.
   - Sample [here](sampleSemesterProjectWeek1.pdf)
   - Submit on form [here](https://forms.gle/gdF2PqCM3BjZpcmZ9)
1. [Weekly updates](sampleSemesterProjectWeekly.pdf) of current progress will be submitted
   each Sunday night starting by midnight 4/12, possibly via Google Forms. Exact format of this will be
   defined once we find out how many groups we have.
1. **What to Turn in  12/1**: Final project, including video, due.
- write a five-ten page report describing the evolution of your ideas,
  the process you went through to end up at the final app, and of
  course the app project itself.
- A five-minute screen-capture video (with audio desribing the
  app's features). I will choose among these for the last full week of
  classes. Each such team gets a 10% bonus.
- Turn in the app. It must compile and work as in the video/presentation.

## Grading

You grade for this project will be composed of:
- 25% novelty/innovation of idea
- 25% degree of difficulty
- 25% overall execution of product
- 25% overall polish, look and feel

These are rough overall guides. If you propose a beautiful new idea for an app but do
nothing, you still get a zero. If your propose something beautiful and ambitious but run
out of time you might still get a very high score.

The weekly checkpoints are not graded, but they are required, and will influence the final
grade, especially if the project falls short in the end.

## Submitting

More details of the group repositories and submissions are forthcoming.