mercuriete / android-musician-tools Goto Github PK
View Code? Open in Web Editor NEWTools for Musicians Android App (in development)
License: GNU General Public License v3.0
Tools for Musicians Android App (in development)
License: GNU General Public License v3.0
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do Azure pipelines sign so that i can do Azure pipelines sign
OK but now serious
I want to improve the azure continuous integration pipeline from only build to build, create a bundle and sign a bundle.
This is the second part of the epic #35
In order to achieve this goal we need to read some docs:
https://docs.microsoft.com/ca-es/azure/devops/pipelines/tasks/build/android-signing
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do Dagger 2 so that i can Dagger 2
OK but now serious
part of the job is actually in develop-dagger2 branch
I want to implement dagger 2 dependency injection in order to follow the MVP google architecture example
I like too much dependency injection framework because you can decouple your application following SOLID and then configuring the wiring with DI.
I dont need to explain more details because is already implemented and working, I only need a little bit of cleaning.
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do automatic version bump so that i can do automatic version bump.
OK but now serious
I want to implement automatic version bump because I dont want to make a commit everytime I need to do a release on Google Play.
We would like to follow semver but with semver is imposible to do automatic version bump so:
the app version will follow the following schema:
versionName => year.month.day
versionCode => number of commits from initial commit
git rev-list --count HEAD
With this changes I can deploy to Google Play a consistent version number but a different versionName per day.
This will have some pros and some cons.
It will fix the problem of having to hardcode the version and make a commit each time we want do do a release, but the problem is we cant do a version without fooling the system clock.
TLDR;
I don't want trash commits hardcoding version numbers.
So I want to automate versionCode and versionName.
Edit: the motivation of changing to a year.month.day schema is some projects in the wild are changing to that schema and I want to follow the convention.
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to clean shit so that i can clean shit
OK but now serious
I need to delete some ui elements from skeleton boilerplate.
Most of them are in MainActivity.
I want to delete all stuff but the BPM label and the button
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to add mailmap so that i can add mailmap
OK but now serious
I want to clean the git log because I had 2 mail addresses and I wanted to be the only contributor in github pulse.
Adding a mapping between all my mails fixes the problem of beeing two different commiters.
from logs
> Task :sonarqube
Could not find ref: master in refs/heads, refs/remotes/upstream or refs/remotes/origin
> Task :sonarqube FAILED
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to fragments so that i can do fragments
OK but now serious
research fragments usage on dagger2 and in android in general.
The deliverable of this spike will be that BPMCalculator now is an Activity and the presenter is injected to the activity. Intead of that, BPMCalculatorActivity will be BPMCalculatorFragment and the presenter will be injected to that fragment.
We need FragmentScoped annotation as well.
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do sonar coverage so that i can do sonar coverage
OK but now serious
I tried on previous attemps to send the jacoco report to sonarqube.
We need to insvestigate why coverage is not working.
This ticket blocks espresso-cucumber test because we need coverage report.
Here we can discuss the product backlog before create a new feature request and before add it to the
kanban board
Functional requirements
Non functional requirements
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do updates so that i can do updates
OK but now serious
Time to time we need to make some housekeeping of the project
Update Android Studio if possible.
Update kotlin plugin
Update all Android Studio plugins
Update al deps
Update gradle wrapper
Update gradle plugin
Fix warnings from Android Lint.
All this changes are non functional changes so... If is not broken why to fix it?
Because I want to lower the technical debt as a good developer.
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do editorconfig so that i can do editorconfig
OK but now serious
just do editorconfig
The version of Java (1.8.0_161) you have used to run this analysis is deprecated and we will stop accepting it from October 2020. Please update to at least Java 11.
https://travis-ci.com/github/mercuriete/android-musician-tools/jobs/350657731#L1449
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do CD to Google Play so that i can do CD to Google Play
OK but now serious
I want to implement Continuous Deployment to Google Play in order to be more efficient in this one man project.
In order to achieve this goal we need to split the effort in three steps.
First one is adding a new CI pipeline but using azure pipelines.
Second one is sign the bundle with my key
Third one is upload the bundle to Google Play
This is an Epic:
we need to go down to almost 0 bugs on sonarqube!!!
unit test on mac are broken.
I think is due to Thread.sleep() not being reliable.
We need to think how to test BPM Calculator in a multiplatform manner.
Creating more test I ended up with a FIFO array of 7 elements having more than 7 elements.
Bad implementation of a FIFO queue.
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
.github/workflows/android.yml
actions/checkout v3
actions/setup-java v3.11.0
reactivecircus/android-emulator-runner v2.28.0
.github/workflows/gitleaks.yaml
actions/checkout v3
zricethezav/gitleaks-action v1.6.0
gradle.properties
settings.gradle
build.gradle
com.android.tools.build:gradle 7.4.2
org.jetbrains.kotlin:kotlin-gradle-plugin 1.8.22
com.google.dagger:hilt-android-gradle-plugin 2.46.1
org.sonarsource.scanner.gradle:sonarqube-gradle-plugin 3.5.0.2730
com.hiya:jacoco-android 0.2
io.gitlab.arturbosch.detekt:detekt-gradle-plugin 1.23.0
org.jetbrains.kotlin:kotlin-stdlib-jdk7 1.8.22
io.cucumber:cucumber-android 4.4.+
io.cucumber:cucumber-picocontainer 4.4.+
com.google.dagger:hilt-android 2.46.1
com.google.dagger:hilt-android-compiler 2.46.1
com.google.dagger:hilt-android-testing 2.46.1
app/build.gradle
jacoco 0.8.10
androidx.appcompat:appcompat 1.4.2
androidx.constraintlayout:constraintlayout 2.1.4
com.google.android.material:material 1.6.1
android.arch.navigation:navigation-fragment 1.0.0
android.arch.navigation:navigation-ui 1.0.0
junit:junit 4.13.2
androidx.test.ext:junit 1.1.5
androidx.test:core-ktx 1.5.0
androidx.test.espresso:espresso-core 3.5.1
gradle/wrapper/gradle-wrapper.properties
gradle 7.6.1
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do BDD so that i can do BDD
OK but now serious
I want to implement behaviour driven development using cucumber on top of espresso.
Right now we only have 20% of coverage on test that is unacceptable.
but the problem is that code is all in fragment or activity and can't be tested as unit tests.
check this tutorial: https://medium.com/gumtree-dev-team/android-bdd-with-cucumber-and-espresso-the-full-guide-9c20cfcb8535
steps are
This is a simple test and not functional.
As optional we can do:
4. click twice on button
5. assert on BPM label
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do sonar so that i can do sonar.
OK but now serious
I want to improve the code quality using a free for opensource tool called sonarcloud.io.
To archive this goal we need to read the travis documentation:
https://docs.travis-ci.com/user/sonarcloud/
that automatically setup all the important sonar properties.
and follow this tutorial to archive sonar scanner with jacoco coverage report:
https://medium.com/@vialyx/android-code-coverage-metrics-with-sonarqube-jacoco-3f99bc700e84
Once we archive this, we need to enforce the checks in the github settings.
happy coding!
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do a bpm detector so that i can detect BPM
OK but now serious
part of the job is actually in develop branch
from the point of the user:
The user can tap a button several times and then in a label the BPM should appear in a label
form the point of the implementation:
The logic takes the user input and should save a system clock timestamp in an array.
Then some time later, the app can calculate the average of the deltas between taps and then we can convert from nanoseconds (period) to beat per minute (frequency).
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do bottom navigation so that i can do bottom navigation
OK but now serious
Now that we have all important features in the archichitectural skeleton, I need a simple navigation for the different views.
In the begining I thought that navigation with tabs was the best option, but then i change the opinion and i want to go for bottom navigation.
the first implmentation have to do the following:
User will be prompted to the beat calculator fragment when load the application
Then we need to implement a stupid blank fragment for the future setting view and the permission view.
The User can switch between this 2 views with bottom navigation buttons.
We have to use dagger 2 to inject those fragments and for lifecycle.
We have to think about memory issues. How to delete and reinstantiate those fragments or if we want to keep the presenters as Singletons.
Once we have this User Story done, we could start to think in Continous Deployment and deply our first app.
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do MVP so that i can be fancy
OK but now serious
I wanted to decuple the views and the logic, so i read some documentation about it and it seems that MVP is the best option for android.
I saw an example on android architecture-examples that makes use of dagger2 and MVP.
My goal is create a project with dagger2, MVP and kotlin.
The things to archive this goal are.
Out of main scope, I also wanted to delete an extra button, and tap directly to the label to test if decoupling is good (that i know that it is good).
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do Azure Pipelines only build so that i can do Azure pipelines only build
OK but now serious
I want to implement Continous Integration on Azure pipelines as part of the epic #35
In order to achieve this task I will copy and paste this pipeline from the Azure documentation:
https://github.com/MicrosoftDocs/pipelines-android/blob/master/azure-pipelines.yml
and read this:
https://docs.microsoft.com/en-us/azure/devops/pipelines/ecosystems/android?view=azure-devops
The difficulty of this task is 0.
Restrict access to exported components with appropriate permissions
If an Android component is exported and no permissions are defined then other mobile apps can interact with it and perform potential unauthorized actions.
For instance, an exported content provider can expose sensitive data, if no permissions are defined, to other mobile apps.
It's highly recommended to implement restrictive permissions on exposed components.
Dependencies are little bit old.
So upgrading.
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to do updates so that i can do updates
OK but now serious
Time to time we need to make some housekeeping of the project
Update Android Studio to 4.0
Update kotlin plugin
Update all Android Studio plugins
Update al deps
Update gradle wrapper
Update gradle plugin
Fix warnings from Android Lint.
At the point of updating I am hitting this bug:
arturdm/jacoco-android-gradle-plugin#72
so copiying this solution:
JuulLabs-OSS/mcumgr-android#74
All this changes are non functional changes so... If is not broken why to fix it?
Because I want to lower the technical debt as a good developer.
As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum
I as a product_owner/analyst/developer/tester/user, I want to update android so that i can have android updated
OK but now serious
We need to keep the android sdk level updated to the new android Q.
There are no more motivation than android recommends to update always to the latest sdk.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.