Skip to content
Snippets Groups Projects

Condensed project overview

Merged Alex Hall requested to merge ahall18-main-patch-95056 into main
1 file
+ 138
0
Compare changes
  • Side-by-side
  • Inline
+ 138
0
## 1. Description
Two parts:
1. Administrative program which loads data
2. Query program to query the database
### 1.1 Google Cloud Firestore Overview
Put code on the [UVM Gitlab](https://gitlab@uvm.edu).
Document: a single data instance with attributes, roughly analogous to a row in a relational database.
Collection: a group of documents, roughly analogous to a table in a relational database.
Firebase datastores:
- a field's data may or may not be present.
- fields have no enforced type.
- collections are hierarchical (rather than flat).
- documents must have a UUID (custom or c/o Firebase).
### 1.2 Data Description
- Top-level collection should have a single entity type.
- Entities should have at least 3 fields that are non-nullable.
- Entities should have at least 1 field that is nullable.
- Entities should have 1 optional field that is stored in a subcollection.
- There should be at least 30 top-level entities.
### 1.3 Datastore
Use Google's Firebase Cloud Datastore.
### 1.4 Data
The administrative program will load data from a `JSON` file into the datastore.
### 1.5 Interface
Your administrative program must have the following CLI:
```
<adminprogram> <JSON file path>
```
The query program, when started, should provide an input for the user to enter a query, and then return all data found by that query. It should then ask for another input. The user should be able to enter `quit` as a command to stop the program. There should also be a `help` command which can provide a useful message for using the query language.
### 1.6 Specifications
- Query commands: a useable grammar for a custom querying language.
- Help commands: useful help text.
- Multi-word data: must be able to handle multi-word data elements (e.g. names with spaces).
- Query breadth: can retrieve at least 3 top-level entities.
- Query depth: can retrieve data from a selected collection level.
- Compound queries: use the `AND` keyword.
- Optional fields: handle optional fields "gracefully".
- Input validation: handle bad queries/commands.
- Data store: data must be constructed from a JSON.
### 1.7 Programs
- Admin file should clear reset the database every time it is run.
- Use Python to create the query CLI.
- Use [Google's Python interface to Firebase](https://firebase.google.com/docs/admin/setup#python).
### 1.8 Security
- Generate a project-specific private key as a JSON file (see [here](https://firebase.google.com/docs/admin/setup#initialize_the_sdk_in_non-google_environments)).
- If preferred, use other authentication mechanisms so long as graders can access them.
## 2. System Design & Development
**System components:**
1. Data: A JSON file containing raw, cleaned data.
2. Datastore Structure: The document and collection structure used by the datastore.
3. Query Parser: Parser for user-inputted queries, independent of datastore operations.
4. Datastore operations: Wrapper functions for loading and querying the datastore.
5. Interface between parser and query engine.
At least 3 separate Python files:
1. Firebase connection and authentication, request wrappers.
2. Administrative program.
3. Query program.
Create a class for each entity type used.
## 3. Software Development Process
Recommended: Use a simplified Kanban process.
## 4. Deliverables
Four deliverables:
1. Data description:
- Name of top-level collection
- Description of top-level entities
- Name of a subcollection
- Description of subcollection entities
2. Query and interface specifications:
- Short document describing the querying language
- List of keywords
- A few example queries
- Description of the functional interface between the parser and the datastore (provide specific functions, with parameter and return value types)
3. Individual report:
- Description of the team's project management
- Description of the learning process and methods
- Evaluation of things that worked well
- Evaluation of things that worked poorly
- Speculation on what should be done better next time
- Two things you personally should do different next time
- Evaluation of whether the group did better or worse than the average CS 3050 team
- Assessment of teammates on a 1-5 scale rating the effectiveness of everyone's contributions
4. Final product:
- Link to the Gitlab repository
- Credentials JSON file (do not include this in the repository)
- Data JSON file
## 5. Evaluation
This project is worth 10% of your final grade.
### 5.1 Team Performance
Evaluation for the team will be based on:
1. Design quality: separation of concerns and encapsulation for parsing and querying.
2. Code quality: readability, consistency, documentation.
3. Robustness: input validation, testability.
4. Program correctness: meeting specifications, no logic errors.
5. Development process: quality of the team dynamic, communication, consistency, and synergy.
6. Demonstration:
### 5.2 Individual Performance
Evaluation for each individual will be based on:
1. Individual reports.
2. Ratings and notes from teammates.
## 6. Oral Presentation
Each team will give an oral presentation which must meet the following requirements:
- 10-15 minutes in duration
- Introduction to the product and its functionalities
- Demonstration of the system
- Summary of the analysis of the development process:
- Successes and failures
- Reflections on what should be done differently next time
- How the team communicated
# Important Dates
- 6 September (Wed): Check-in
- 8 September (Fri): Check-in
- 9 September (Sat): Deliverable 1
- 16 September (Sat): Deliverable 2
- 27 September (Wed): Deliverable 3
- 27 September (Wed): Deliverable 4
- 28 September (Thurs): Oral presentation
- 29 September (Fri): No class
\ No newline at end of file
Loading