Code Monkey home page Code Monkey logo

witness's People

Contributors

dependabot[bot] avatar raffaelfoidl avatar

Stargazers

 avatar

witness's Issues

Feature Specification

In GitLab by @11775820 on Aug 4, 2021, 22:34

  • express features broadly in natural language
    • exact concept might still be necessary for later on
    • serves general scoping and requirement assessment of project
  • categorize them into priority ranges (e.g. low, medium, high priority)
  • create Gitlab issues based on feature list
  • define milestones based on feature list

Localization for User Interface

In GitLab by @11712616 on Aug 20, 2021, 19:44

  • do not use strings that are hardcoded in the source files to render the user interface
  • should be stored somewhere else in resource tables or the like

This issue is meant to introduce localization for all language-related user interface strings introduced by the mockups (#33). In the future, strings will be added in a localized manner.

Data Synchronization for Registered Users

In GitLab by @11775820 on Aug 27, 2021, 23:16

  • if a user is logged into the app, personalized data (saved exercises, logged workouts, training programs, ...) should be synchronized with the server
  • automatically at app startup and on demand

Localization for Exercises

In GitLab by @11712616 on Aug 20, 2021, 19:46

  • exercise names can be set by users - should be able to add exercise names in multiple languages
  • add translations to (published) exercises retrospectively
    • specify language (one of the ones supported by the app) and translation

Edit Exercise

In GitLab by @11712616 on Aug 20, 2021, 19:34

  • edit exercise
  • add user interface in app for doing so

Body Metrics Tracking

In GitLab by @11712616 on Aug 20, 2021, 19:44

  • track weight, measurements (waist, biceps, chest etc.), maybe body fat percentage
  • set date (and time?) of measurement entry
  • visualize metrics
  • calculate BMI

Delete User Account

In GitLab by @11712616 on Sep 30, 2021, 13:29

  • delete own account
  • all data related to the account should be deleted (logs, programs, exercises etc.)
  • irreversible operation

Utilize Published Workout

In GitLab by @11712616 on Aug 20, 2021, 19:47

This feature only makes sense if the feature described in issue #11 is implemented. However, as explained in the respective issue description, we decided not to add the feature, making this issue obsolete.


  • in order to use an online workout, the user has to explicitly download it first
  • when downloading a workout, the user is asked to associate the exercises it contains with exercises they already own
    • if they associate an exercise from the remote workout with an exercise they own, the remote one is replaced with the local one upon downloading
    • if they do not associate an exercise from the remote workout with an exercise they own, the remote one is downloaded and created as a new exercise the user then owns

Finer Publishing Granularity

In GitLab by @11712616 on Aug 20, 2021, 19:41

  • distinguish not only between private and public
  • one can choose from
    • share with everybody ("public")
    • share only with my followers
    • share with specific list of users
  • privacy concern: users can define in their profile if they want to be "public users"
    • only public users can publish exercises and training programs
    • only public users are displayed when sharing a training program with specific users
    • nobody has a means to "find out" that a private user exists in the system

Flutter Knowledge Build-Up

In GitLab by @11712616 on Aug 27, 2021, 19:43

all activities conducted in order to acquire expertise on Flutter

Follow Other Users

In GitLab by @11712616 on Aug 20, 2021, 19:44

  • users can follow other users
  • when somebody a user follows does something (publish an exercise, training program, ...), they get a push notification

Utilize Published Training Program

In GitLab by @11712616 on Aug 20, 2021, 19:41

  • in order to use an online training program, the user has to explicitly download it first
  • when downloading a program, the user is asked to associate the exercises it contains with exercises they already own
    • if they associate an exercise from the remote program with an exercise they own, the remote one is replaced with the local one upon downloading
    • if they do not associate an exercise from the remote program with an exercise they own, the remote one is downloaded and created as a new exercise the user then owns

Log Workout From Scratch

In GitLab by @11712616 on Aug 20, 2021, 19:34

For project management reasons, this issue has been split up into #57 and #58 halfway through. The accompanying merge request !16 has also been closed in favor of ones associated with the new issues. All changes from the branch initially corresponding to this issue - 8-log-workout-from-scratch - have been moved to 57-api-for-logging-workout-from-scratch and 58-log-workout-from-scratch. The branch 8-log-workout-from-scratch has since been removed.


  • one can log exercises (and possibly do other stuff in-between)
  • create workout from scratch
    • no default values for weight, resistance bands, reps, RPE
    • optionally add comment
  • it will be visualized in a calendar view
  • set workout duration
  • workout "schemes" do not exist independently from a training program (see this comment)

see this comment for a brief description of the corresponding use cases and workflows

workflow sketches:
Log_Workout_From_Scratch_Workflow.pdf

User Management

In GitLab by @11775820 on Aug 27, 2021, 23:13

  • management of user accounts that are registered to use the app (thus allowing synchronization functionalities)
  • authenticate users with email + password
  • use Firebase as authentication server only
    • Firebase exposes APIs to check if a certain token is valid that can be used to secure requests to our backend
    • there are also Flutter packages for Firebase integration
    • secure Spring Boot REST API using Firebase Spring security integration
  • role management
    • tokens should contain information about roles of users
    • requests should be guarded against unauthorized access using roles
    • a user has zero or one role (zero: regular user, one: premium oder admin)

Create New Workout

In GitLab by @11712616 on Aug 20, 2021, 19:37

After a discussion that arose while working on the UI mockups, we decided not to implement this feature since it is not very useful in practice. Furthermore, the main functionality that this issue would introduce is implicitly given by issue #40 which was added to the feature list instead.


  • consume API to create workout
  • add user interface in app for doing so

German Translation for User Interface

In GitLab by @11775820 on Aug 23, 2021, 18:57

  • localization capabilities introduced by #21 should be leveraged
  • add German as second language
  • the UI should offer the option to switch between English and German (e.g. in the Settings)

Client Mockups

In GitLab by @11712616 on Aug 26, 2021, 15:41

  • create mockups for client (Android) application, define UI concept
  • roughly implement mockups in Flutter project
  • set up skeleton for client application project (services, tests, state management, ...), not only strictly UI

should be completed before starting with the actual implementation of the features

Create Workout From Logged Workout

In GitLab by @11712616 on Aug 20, 2021, 19:37

This feature only makes sense if the feature described in issue #11 is implemented. However, as explained in the respective issue description, we decided not to add the feature, making this issue obsolete.


if an unnamed workout was logged, a user should be able to create a (saved) workout from it

Edit User Data

In GitLab by @11712616 on Sep 30, 2021, 12:06

  • edit user data:
    • user name
    • birthday
    • sex
    • height
  • add user interface in app for doing so

Internal Meetings

In GitLab by @11712616 on Aug 26, 2021, 14:58

meetings for internal discussion of project details

External Meetings

In GitLab by @11712616 on Aug 26, 2021, 14:57

meetings with lecture team, e.g. status reports and external reviews

Dynamically Fetch Chrome Binaries for Flutter Integration Tests

In GitLab by @11775820 on Aug 14, 2021, 10:31

After some consideration, the changes needed for this ticket were incorporated into #4, making this issue obsolete.


In order to execute Flutter intgeration tests via the GitLab CI, we rely on a chromedriver executable. For the time being, it is checked into the repository, which is not desirable. Apart from that, chromedriver itself relies on a chrome installation. A better solution would be to supply a custom Docker image (preferred alternative) that includes chrome and chromedriver.

The Docker image should use the cirrusci/flutter:2.2.3 as base image and additionally supply chromedriver and chrome executables on the PATH. This image can then be pushed to a Docker registry so that is may be used in the gitlab-ci.yml.

The chromedriver download page provides information about the latest version via special file on their FTP/file server which can be queried using curl. With this version number, the download link for the latest version can be constructed, which makes building and pushing a new docker image easily possible.

Example script that uses this strategy: https://gist.github.com/ziadoz/3e8ab7e944d02fe872c3454d17af31a5

Create New Exercise

In GitLab by @11712616 on Aug 20, 2021, 19:34

  • consume API to create exercise
  • for each exercise, it should be clear how sets can be logged (see this comment for an initial approach to this issue)
  • add user interface in app for doing so

37: Static Code Analysis for Dart - [merged]

In GitLab by @11775820 on Sep 3, 2021, 20:06

Merges 37-static-code-analysis-for-dart -> develop

Closes #37


I have deliberately configured the static code analysis to be quite pedantic. I am a big fan of Dart's type system and sound null safety which I would like to leverage as much as possible. Of course, it may very well be possible that in practice some of the rules I have turned on are impracticable (e.g. when we find ourselves ignoring them in code files more often than not). If I have messed up, there could even be rules that contradict each other - but I was relatively considerate, so that should not be the case.

However, in general, that's the route I want to go: Right now, start with a quite strict set of rules and potentially slim it down along the way (so that we don't miss out on cool rules). There are some rules which we will always have to selectively suppress that I really don't want to miss out on. For example, library_private_types_in_public_api is concerned with making sure that no "file-private" members are exposed via public APIs. This is quite a sensible approach I would like to have statically checked, but fails when using the StatefulWidget pattern - in those cases, that's just how Flutter is designed, which leaves us no other choice than suppressing the createState lines in StatefulWidget derivations.

The CI job outputs files with analysis warnings/errors/hints. Furthermore, if you want to invoke the analysis locally, run flutter format. As a side note, IntelliJ (the Dart plugin) should already do that by itself and provide the output in its own tool window Dart Analysis.

image

By the way: Perhaps you have already seen it, but I think turning on the following two options in Settings -> Languages & Frameworks -> Flutter (IntelliJ) greatly improves the experience:

image

Copy Previously Logged Workout

In GitLab by @11712616 on Sep 24, 2021, 16:51

  • one can copy a previously logged workout by selecting it in a calendar view
  • all exercises and sets will be copied
  • the workout is editable like a newly created workout

see this comment for a brief description of the corresponding use case and workflow

Declare Substitute Exercises in Training Program

In GitLab by @11712616 on Sep 25, 2021, 10:56

  • when creating/editing a training program, optionally define possible substitute exercises for exercises that are part of the training program
  • substitute exercises should be "global" inside of a training program
  • substitute exercises should be "local" to a specific training program so that different training programs stay completely independent from each other

Static Code Analysis for Dart

In GitLab by @11775820 on Sep 3, 2021, 09:53

Flutter and Dart offer static code analysis and linting. These capabilities should be used in order to produce higher-quality code.

  • add code analysis and linting to the project
  • add these checks to the CI, major violations should cause the respective job to fail

Basic Repository Setup

In GitLab by @11775820 on Aug 10, 2021, 19:04

  • initialize git repository
  • bootstrap maven-based Java Spring Boot application for the server backend
  • bootstrap Flutter application for mobile frontend(s)
  • set up CI for backend and frontend
    • verify formatting (checkstyle, dartfmt)
    • execute tests

Domain Model

In GitLab by @11712616 on Sep 22, 2021, 16:28

see designated Wiki Page


create a domain model

Export User Data

In GitLab by @11712616 on Sep 30, 2021, 13:30

  • export all data related to a user account
    • saved programs
    • saved exercises
    • logs
    • saved measurements
  • write to JSON file or something similar

Log Workout From Training Program

In GitLab by @11775820 on Sep 30, 2021, 10:54

  • one can log exercises (and possibly do other stuff in-between)
  • get program workout from training program
    • suggests values for reps/time/distance and RPE that were entered during training program creation as default
    • optionally add comment
  • it will be visualized in a calendar view
  • set workout duration
  • workout "schemes" do not exist independently from a training program (see this comment)

see this comment for a brief description of the corresponding use cases and workflows

Exercise History

In GitLab by @11712616 on Aug 20, 2021, 19:46

  • display all logs of an exercise for the current user
  • logs should contain all information about sets, reps etc.

Statistics per Exercise

In GitLab by @11712616 on Aug 20, 2021, 19:45

  • estimated 1RM (one rep maximum) based on common formula
  • max weight
  • max reps

API for Creating New Training Program

In GitLab by @11712616 on Aug 20, 2021, 19:39

  • backend infrastructure (database layout, service, public interface)
  • a training program consists of multiple weeks
  • assign name to training program
  • a week consists of multiple days
    • weeks are not calendar weeks (no dates)
    • automatically assign number
    • optionally assign name
  • a day consists of one (or multiple) workouts
    • automatically assign number
    • optionally assign name
  • a workout consists of multiple exercises
  • per exercise (and per set, if applicable):
    • set number of sets, number of reps
    • optionally set RPE
    • optionally set rest time between sets
    • optionally add comment
    • values above are set for the training program, not for the exercise itself

Publish Exercise

In GitLab by @11712616 on Aug 20, 2021, 19:39

  • choose visibility upon exercise creation (public/private)
    • private: only for me
    • public: visible for everyone
  • published exercises are visible for other users in a separate view

Create New Training Program

In GitLab by @11712616 on Aug 20, 2021, 19:39

  • consume API to create program
  • add user interface in app for doing so

Additional Login Options

In GitLab by @11712616 on Aug 20, 2021, 19:51

  • support standard login options, additionally to basic authentication via email + password enabled by #35
    • Google
    • maybe Microsoft?
    • maybe Apple?
  • possibly need to split up LoginCard in separate widgets for sign up and sign in (not one widget with two "modes" like right now)
  • if possible, organize role-related custom claims in JWT payload in the form "roles": ["ROLE_ADMIN", "ROLE_PREMIUM"] instead of {..., "ROLE_ADMIN": true, "ROLE_PREMIUM": true, ...}
  • make role-related methods in FirebaseService better testable (e.g. return the new user record containing new roles or the like - something to assert that confirms the operation was successful)

4: Basic Repository Setup - [merged]

In GitLab by @11775820 on Aug 12, 2021, 21:53

Merges 4-basic-repository-setup -> develop

Closes #4


Set up checkstyle conform auto-format in IntelliJ (CTRL+ALT+L):

  • Install the Checkstyle-IDEA plugin
  • File -> Settings -> Editor -> Code Style -> Java
  • Select "Scheme: Project" (don't want to override global settings)
  • Next to the combobox (the gear icon):
    • "Import Scheme" -> "Checkstyle Configuration"
    • choose checkstyle.xml
  • Don't forget to re-import xml as above after changes to the codestyle

dartfmt is configured to run automatically on CTRL+ALT+L as soon as the Dart and Flutter extensions are installed into IntelliJ.

Set max line length in Dart to 150:

  • File -> Settings -> Editor -> Dart
  • Line length: change from 80 to 150

Note: The artifact with the flutter test coverage was just inserted as an example so that we have a working CI configuration with a job that produces artifacts. Later on we could extend that to publishing the correctly formatted dart files (if there have been changes during the check phase) to the artifacts or, e.g. for a release build, attaching the build apk, jar and HTML files.

Organizational Issues

In GitLab by @11712616 on Aug 20, 2021, 19:24

all issues related to the project management

Infrastructure Maintenance

In GitLab by @11775820 on Sep 20, 2021, 11:11

Since we do not maintain our own docker image for integration tests anymore, we do not need active infrastructure maintenance anymore, making this ticket obsolete. We are currently running integration tests as widget tests in our CI which is not close to production yet.

There is a possibility that after #56, this ticket becomes relevant again, in which case it will be reopened.


This is an ongoing ticket related to periodic tasks that are relevant to the project's infrastructure. These may entail:

  1. Updating the Flutter Docker image cirrusci/flutter used in the CI builds to the newest version after major, minor or hotfix releases were published.
  2. Releasing a new version of the self-maintained Docker image raffaelfoidl/flutter-integration-test used for integration tests after major, minor or hotfix releases were published.
  3. Releasing a new version of the self-maintained Docker image raffaelfoidl/flutter-integration-test used for integration tests after major releases to Google Chrome and the accompanying Chromedriver are published.

If one of the events described above ensues, a comment is added to this comment is added to this issue such that the related task is done at a later time. These comments may be marked with different reactions:

  • โœ… : The task defined by the comment has been done.
  • โŒ : The task defined by the comment will not be done (e.g. because a newer version has already come out, making it obsolete).

33: Client Mockups - [merged]

In GitLab by @11775820 on Sep 21, 2021, 16:00

Merges 33-client-mockups -> develop

Closes #33


In the real implementation, we need to put a little more thought into what data we want to receive with each request and how they are organized (right now, for the purpose of creating mockups as quickly as possible, it is very naive and objects that should e.g. be "local per training program" are reused in multiple programs for the sake of quickness).

If you get error regarding the localization (something with AppLocalization and errors at package:flutter_gen/... imports), be sure to do a flutter clean, followed by a flutter pub get. Then, unfortunately, it might still be necessary to restart IntelliJ to get rid of the error messages (they are no real errors, building and running would still work fine, but popups and squiggly lines are annoying). This is a more or less known (or recurring) error in the Flutter IDE integration plugins.

Publish Workout

In GitLab by @11712616 on Aug 20, 2021, 19:46

This feature only makes sense if the feature described in issue #11 is implemented. However, as explained in the respective issue description, we decided not to add the feature, making this issue obsolete.


  • choose visibility when creating a workout (public/private)
    • private: only for me
    • public: visible for everyone
  • published workouts are visible for other users in a separate view

Publish Training Program

In GitLab by @11712616 on Aug 20, 2021, 19:40

  • choose visibility upon program creation (public/private)
    • private: only for me
    • public: visible for everyone
  • published training programs are visible for other users in a separate view

Frontend Technology Selection

In GitLab by @11775820 on Aug 4, 2021, 22:45

Outcome: Flutter
(see also https://reset.inso.tuwien.ac.at/repo/praktika/fitnessapp/-/wikis/Documents/2021_08_09_Frontend_Technology_Evaluation)


The two most likely candidates we want to use as frontend technology in our project are Flutter and React Native.

Analyze them according to the following aspects:

  • (initial) setup
    • installation of SDK, tools, ...
    • setup of IDE
    • process of project creation
  • development experience
    • debugging, hot reload, ...
    • separation of UI from business logic (easily) feasible
    • documentation (amount, quality)
    • extensibility (packages, libraries...) - is there a (monitored) repository similar to npm? are there curated packages, official libraries?
    • learning curve
  • presentational aspects
    • Does the technology aid in or prevent from presenting the product during an intermediary meeting?
  • UI aspects
    • typical navigation methods - tabs, hamburger menu, ...
    • buttons, input (processing), ...
    • important: customizable calendar view for workout tracking (one of the main UI elements)
  • testing
    • is it possible? are there testing frameworks that are convenient to use?
    • is there nice IDE integration?
    • how cumbersome is it to write tests?
  • interaction with other interfaces and standards
    • most important protocols/technologies: HTTP/REST, JSON (serialization), gRPC, Websockets
  • native or potentially deal-breaking functionality
    • push notifications
    • maybe have a look at file picker mechanisms
  • how to export the code to a deliverable
    • Android: .apk file
    • Webapp: javascript + html + css that can be statically served (e.g. via python3 -m http.server 8000)
    • (Desktop: OS-dependent executable - not really planned due to webapp, but if we can get it cheaply, very nice!)

After the deadline, we discuss the findings and decide on a winner that will serve as technology to build our (Android) app on.

Substitute Exercises

In GitLab by @11712616 on Aug 20, 2021, 19:43

  • when creating exercising, one needs to set attributes that apply to the exercise and are used to determine substitutions
    • muscle (groups), biomechanics (horizontal/vertical, pull/push), ...
    • attributes should be chosen such that potential users can be expected to understand which ones to apply
    • the controlled vocabulary of attributes might serve as a basis for an ontology
  • an exercise of a logged workout can be substituted
  • multiple suggestions the user may choose from are presented
  • if possible, display a reason for why the exercises are suggested

6: Flutter CI Job for Integration Tests Does Not Work - [merged]

In GitLab by @11775820 on Sep 4, 2021, 22:34

Merges 6-flutter-ci-job-for-integration-tests-does-not-work -> develop

Closes #6


You will probably notice that, effectively, this MR does not introduce many changes. I have simply compacted the Dockerfile and associated scripts and introduced a new naming scheme for the resulting image(s).

What really has changed is the manner in which integration test dependencies are installed into the container, google-chrome and its chromedriver. I have used some other dependencies of google-chrome now and, in order to avoid potential permission problems with the old location, have moved chromedriver to a neutral directory. To be frank: I am not exactly sure why it works this way and not also the other one.

Since it was already quite tricky to find out this working constellation, I hope it is okay for you that I did not dig any deeper. I have a strong suspicion that it came down to (silent) permission and/or dependency issues, but logs and verbose outputs could not undeniably prove it.

Resolve "Basic Repository Setup" - [closed]

In GitLab by @11775820 on Aug 12, 2021, 20:11

Merges 4-basic-technology-setup -> develop

This MR was closed because it corresponds to a incorrectly named branch that does not exist anymore.


Closes #4


Set up checkstyle conform auto-format in IntelliJ (CTRL+ALT+L):

  • Install the Checkstyle-IDEA plugin
  • File -> Settings -> Editor -> Code Style -> Java
  • Select "Scheme: Project" (don't want to override global settings)
  • Next to the combobox (the gear icon):
    • "Import Scheme" -> "Checkstyle Configuration"
    • choose checkstyle.xml
  • Don't forget to re-import after changes

Set up the checkstyle plugin to analyse your code files on the fly (real-time analysis) with the correct ruleset:

  • File -> Settings -> Tools - > Checkstyle
  • Configuration File, click on the "+" symbol
  • Description "CSPR Style", "Use a local Checkstyle file", "choose checkstyle.xml

dartfmt is configured to run automatically on CTRL+ALT+L as soon as the Dart and Flutter extensions are installed into IntelliJ.

Set max line length in Dart to 150:

  • File -> Settings -> Editor -> Dart
  • Line length: change from 80 to 150

Note: The artifact with the flutter test coverage was just inserted as an example so that we have a working CI configuration with a job that produces artifacts. Later on we could extend that to publishing the correctly formatted dart files (if there have been changes during the check phase) to the artifacts or, e.g. for a release build, attaching the build apk, jar and HTML files.

Flutter CI Job for Integration Tests Does Not Work

In GitLab by @11775820 on Aug 14, 2021, 14:37

The .gitlab-ci.yml already contains a command that starts the integration tests. However, after running the command, no tests are executed - the log stops at Application finished.. When starting chromedriver with the --verbose flag, one can see that the output differs from when integration tests are executed locally. As executing the integration tests also does not work from within the Docker container when testing it locally (same behaviour), something seems to be amiss - so it should not be an issue with the GitLab CI.

Executing the very same commands (to start the chromedriver and flutter drive) locally, without a Docker container, works as expected. Some investigations are necessary.

Inspiration for the CI job: https://gitlab.com/nicolalandro/flutter_test_app/-/tree/master. Maybe we need to have a look at the Docker image used there.

Utilize Published Exercises

In GitLab by @11712616 on Aug 20, 2021, 19:40

  • in order to use an online exercise, the user has to explicitly download it first
  • downloading an exercise automatically creates a new exercise that is equivalent to the remote exercise in the user's own profile; there is no connection to the online exercise

Status Reports

In GitLab by @11712616 on Sep 24, 2021, 20:45

At an interval of four weeks, we publish status reports containing a summary of what happened during the respective period of time as well as a short description of the problems that arose and the planned next steps.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.