Google Summer of Code | Week 10
This week — July 16 to July 22 — was the tenth week of the coding period of Google Summer of Code (GSoC) with Systers Open Source. If you want to know more about this you can read the introduction to my journey, my latest weekly blog posts or my weekly status report for this week.
Implementation decisions
This week a lot of the time I dedicated to studying Clean Architecture to apply to the Mentorship System Android application. We first thought of implementing the Android application using Clean Architecture with Kotlin. After following some video tutorials and started learning about the architecture and I noticed that it involved a lot of module separation, a lot of boilerplate by creating entity mappers and interfaces, which for the first version of the Android application, that has to be developed with the minimum features for a minimum functional product, seemed too complex. At this moment, I have 2 to 3 weeks to build the application so this architecture wouldn’t be a good fit because of the learning curve. So I decided to follow a simpler approach by experimenting with another Android Design architecture besides Model View Presenter (MVP). I’m now using Model View View Model (MVVM) also with Kotlin language.
As for Android library third-party libraries, I’m using Retrofit for communicating with a remote server. I’m also learning about RxJava which seems to be a very powerful tool used by Android developers, that would introduce a new programming paradigm to the community, reactive programming. Besides this tool I’m already taking advantage of Android Architecture components such as ViewModel and LiveData, also I’m using DataBinding with ViewModel. In the future for application persistence, as discussed in an Android general meeting within the community, we will use Room for the database.
This week I had a meeting with one of my mentors Murad where we discussed potential better ways to save Tasks related to a Mentorship Relation into the Database. I will study more about that but basically, Murad advised me of a potential scalability problem since tasks are entities that can be easily created in abundance for each relation, this can cause problems because to get tasks from a relation we will have to search in the whole table of all tasks of the system, to get all the tasks that are related to the specific relation. We agreed that I would search a bit on that to find a better solution that saving a task as a single item in a Tasks table.
Shout outs to great work from the development community
I was an Android Developer for 2 years at a company until April this year, then I started developing backend with flask and python. To refresh my memory and get back to Android development, by learning about design architectures and tools used by Android developers, I’m googling a lot! I found a lot of good resources, such as videos, talks, blog posts and open source projects, that have a huge role in my learning journey. So here are some shout-outs to these resources.
- Android Architecture Blueprints project: googlesamples/android-architecture repository on GitHub with a lot of Android design architecture patterns implemented;
- LiveData with SnackBar, Navigation and other events (the SingleLiveEvent case) by Jose Alcérreca — helped me a lot understanding LiveData android architecture component;
- ericmaxwell2003/MvvmTipCalculator GitHub project by Eric Maxwell;
- bufferapp/clean-architecture-components-boilerplate by Buffer;
- isabelcosta/MoviesApp GitHub project made by Me — this was my first application coded 100% with Kotlin app, to refresh my memory about the programming language;
- Advanced Networking with RxJava + Retrofit by Stephen D’Amico at Droidcon NYC 2017 conference;
- Intro to RxJava, a talk by Christina Lee at 360|AnDev 2016 conference— really nice talk about RxJava which made me feel a bit less intimidated about RxJava;
- Simple Android MVVM using RX and Kotlin, a blog post by Ovidiu Latcu;
- Android Architecture Components Part 2 — Dependency Injection, a blog post by Thomas Kioko — even though I might not use Dagger, for now, this really gave me the click I needed after through the last year reading and watching resources about Dagger.
Ultimately I found a lot of resources that helped me in one way or another, even if I only used the knowledge provided from just a paragraph of text or a gist of code. I cannot point to all the resources but I found these that I shared very helpful.
Development tasks
This week my development tasks revolved around fixing bugs that were found by new contributors to the project during Quality Assurance testing.
I did my first full review PR #105 from a new contributor on Mentorship System backend repository. I say full review because I’ve made some comments on other PRs from the community, but in this case, I was fully aware of the project so I made suggestions I considered important and needed for the issue that the PR was solving, like tests, extra data validation, commit message style, etc. It was really insightful giving suggestions and areas for improvements of other contributor’s work.
I also submitted the following pull requests:
- PR #95 regarding issue #94 to solve user registration data validation;
- PR #107 to fix a bug of validation when updating the User’s profile (issue #97) found by a newcomer!
Design tasks
I improved the Mentorship System UI prototype hosted on JustInMind. I had discussions with my mentors on the project weekly and with my project manager in the Office hours, about what would be the best UI for a good user experience for the users regarding the Tasks screen. From the screen alternatives that I shared last week with the community, my project manager, May, did a poll to know what option was preferred.
The majority of the voters chose option 2, so I updated the UI prototype to fit the community’s feedback.
New mentor and working with other GSoC student
This week I had a new mentor, Roopal, assigned to me to help us in this last phase of development. We had our first 1:1 for us to meet each other and to keep Roopal on the loop of all the development and things to know about the project which could be important for a mentor.
A fellow GSoC student, Sombuddha Chakravarty, that is developing a bot, Sysbot, used on Slack and GitHub to help mentors and community members interact with Systers Open Source, integrated the bot in the systers/mentorship-backend GitHub repository. So I took advantage of the Ask Me Anything session Sammy was hosting, to have a quick 1:1 where I could learn about the commands that I and my mentors should know to have a good workflow on GitHub in terms of assigning, approving issues and sending valid PRs that would not be closed by the bot.
I hosted more AMA sessions for newcomers to come and ask questions regarding open source in general, Google Summer of Code, how to get involved in the community.