All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added Pagination to Reclassify and Submissions
- Added in depth error handling for pages with data submissions
- Added caching for reclassification page
- Changed styling across application
- Changed buttons across application to be consistent and more obvious
- Added and configured nginx and gunicorn for production
- Configured and added settings to distinguish between production and development
- Added more detailed logging messages for production
- Added an endpoint to allow users to request researcher access
- Configured HTTPS for production
- Trained and improved machine learning model to classify the five most common species of moths in the database.
- Added more assets
- Added assets in smaller sizes to reduce bundle size for deployment
- Added some error checking to the API service to reduce fatal crashes
- Changed folder structure of screens to make link tree less complex
- Changed folder structure of services to reduce bundle size
- Changed a number of icons for better readability
- Changed UI in response to HCI demo critiques
- Removed unused files to reduce bundle size
- Removed some unused functions to decrease tree shake time during production builds
- Added a periodic celery task to generate a zip file for the training dataset every 24 hours if needed
- Wrote SLURM script for High Performance Web Scraping
- Changed the download_images service to use a pre-built training dataset to prevent a large training dataset zip file from being generated on every request
- Changed run.sh to run the celery and ml_subscribe services to run in the background and to redirect the output of each service to log files.
- Changed how duplicate images are handled. Duplicate images are now allowed in the system if they belong to different users. A single user cannot upload duplicate images.
- Added a secrets.py file to hold important passwords and private information
- Enabled throttling for anonymous users to avoid a large amount of requests from unknown users
- Added ability to filter by total number of images
- Added ability to clean up working directory for working on Cluster
- Changed parameters for increased model performance
- Changed layers and filters per layer
- Added custom Exceptions for more descriptive error handling with Login, Registration, API, and Authentication Token errors
- Added new pre-compile podfile dependency to optimize build times for iOS builds (from ~600 seconds avg to ~75 seconds avg buildtime) Link to Article Explanation.
- Added LitFirebaseAuth for authentication state
- Added dashboard page with links to other sections of the application instead of bottom bar navigation
- Added retry and sign out buttons for dashboard when a user with cached sign in information doesn't have an internet connection.
- Added ability to save and print debug information and refresh authentication tokens manually (option is only present in devices running the application in debug mode through flutter)
- Added ability to change profile name from within the application profile screen.
- Added more in depth documentation to the ApiService
- Added Device model for tracking notification handler state.
- Added Submissions tab to view a user's previously submitted images
- Added Details screen to both User submissions and Reclassifications
- Upgraded Versions for the following plugins:
- firebase_core: 0.5.3
- firebase_analytics: 6.3.0
- firebase_auth: 0.18.4
- cloud_firestore: 0.14.4
- firebase_messaging: 5.1.4
- google_sign_in: 4.5.6
- Changed login data flow to now make request for user information from API outside of the AuthService
- Changed SignIn and Registration pages to be more modern, now include animations
- Changed Authentication state sharing solution, now use LitAuth
- Changed Page Routing solution from Named routes to Component parameter based routes
- Third party authentication no longer errors out when cancelled, and will display a notification to indicate it was cancelled by the User.
- Changed how ApiService gathers User information, now all of a User's information is stored in a Global variable (referenceable anywhere by calling Global.currUserData and Global.currApiData)
- Changed submission screen so that the image submission is now compatible with MothClassifierApi setup (multipart/form-data)
- Changed how notification tokens are handled. Now on login check to see if token is registered. If not, register it. If yes, patch to mark as active. On Logout, mark notification token as inactive.
- Changed how global notification state is handled, now initialization and widget generation for notifications is done once globally and shared across app tree.
- Changed notification handler to display alert dialog on notification reciept
- Changed organization of application structure, now all screens are nested within their own folders and each folder contains all relevant screens for a specific task.
- No longer grabbing user collection reference from Firestore Collection at login
- Removed old authentication service.
- Removed old Login and Resgistration pages
- Removed all old screen refrences which are no longer actively used.
- Registration now requires a nontrivial password (as determined by firebase) and will throw an exception if firebase determines password is "too weak"
- Added functionality to register and update the information of mobile devices to the API
- Added functionality to send notifications to devices following job completion or failure
- Added service handler for communication over Pub/Sub channels with API Job Service
- Added functionality to communicate between Machine Learning model output and API with proper response formatting
- Google Cloud Function project
- Implemented cloud function to listen to database writes to a "notification" collection
- Added BottomBar builder to make modifying bottom bar behavior take less code
- Changed behavior of Bottom Navigation bar
- Changed behavior of routed navigation stack, now replaces old stack contents on new screen generation
- Removed old API service which was no longer being utilized
- Removed usage of previous bottomNavigationBar and associated references
- Added the pub/sub communication model with the Machine Learning service
- Added a
status_messagefield to the Job model and afile_namefield to MLModel model.
- Added test methods which extracts a zip file of unclassified data, returns prediction and confidence on each image
- Added visualization for output, shows prediction, input, and reference of prediction
- Changed functionality of temporary files for classification jobs (now folders generated will be removed and replaced with every run)
- Changed functionality load and test flow so that old files from previous jobs will not prevent the program from being run more than once
- Data Models for: Classification, Notification, Photo, and ReviewGridItem
- Review Grid that can be built using API
- API Service to handle fetching of async data
- Added ability to submit images from Camera
- Added Mock JSON API (and associated configuration) for improved local testing
- Added basic implementation of Notification Handler (only shows Snackbar of notification title for now)
- Added changelog file
- Bottom AppBar changes based on type of user's account
- Login authentication flow for Email Login
- Modified look of Submission Screen
- Output of a User image submission changed from Hex encoded string to multipart/form-data
- Adjusted Data Model for User
- Populating user data state from Firebase Firestore, will be replaced with API calls in the future
- UserModel from Firebase, replaced with Custom UserData model
- Added an endpoint to download a collection of images
- Refined the image endpoint by detecting duplicate images
- Wrote API usage guide
- Added permissions to each API endpoint
- Added tests for each API endpoint. Tests cover views, serializers, and services
- Added changelog file
- Endpoints relating to users now use uid instead of id
- Modified web scraper to utilize new authentication scheme
- Removed POST requests for the users endpoint as creating users is handled by Firebase Authentication
- Implemented API authentication with Firebase Authentication
- Added utility to get dataset from the Moth Classifier API
- Added functionality train a model based on moth image data
- Added utility to use a specified number of classes from dataset
- Modified zip file extraction to be compatible with dataset from Moth Classifier API
- Implemented basic functionality of Navigator between pages
- Implemented basic Email Registration and Sign In
- Implemented Google Sign In
- Implemented Apple Sign In
- Modeled Firestore Collection to maintain user information for Login and Authentication
- Implemented authentication with Firebase Authentication
- Implemented basic functionality of API by adding the users, images, jobs, classifications, and models endpoints
- Wrote shell script to automate starting up the API server
- Wrote a web scraper that utilizes multi-processing to extract moth images from Discover Life
- Configured Tensorflow
- Added a flower model in accordance with the Tensorflow tutorial
- Created a class that handles the Machine Learning service architecture