SoK/2022/StatusReport/Samarth Raj
Adding new Activity to GCompris
GCompris is an educational software for kids in the age group 2-10 years old. It has more than 150 activities. This software has a huge userbase, with over 50K+ downloads on the Google Play store alone. GCompris is used to help older children understand the relationship between numbers, learn basic arithmetic operations, train them in analytical reasoning, and improve communicative skills as well as spelling, reading, and writing.
Task
The objective for SoK'22 is to add a new activity. I proposed adding left and right-click training activity to the project.
In this activity, the user decides which click to press to move the animal to their respective houses placed on the top left and right sides of the screen.
Blog Posts
- Season of KDE 2022 - An Introductory Blog about my project and me.
- SoK’22 Week 4: Functioning of the Animal Cards
- SoK’22 Week 8: Random and Uniform Placement of the Animal Cards
Timeline
January (Week 1 -> 24 Jan to 30 Jan)
During the first week, I mostly tried to read and understand other activities and see the implementation in their code. I initialized my activity in the GCompris this week and started working on the basic layout of the activity.
February (Week 2 and 3 -> 31 Jan to 13 Feb)
I applied the basic layout of the activity inside the project and placed the rectangles on the screen for the animal houses and for the animal display area. During this time, I became more familiar with the documentation of Qt/QML, as I spent significant time trying to understand the implementation of the elements(rectangles, images, types of variable declaration) I have to add to the activity.
February (Week 4 and 5 -> 14 Feb to 28 Feb)
After the layout, I started making these components functional. This was a time when I struggled to implement the functionality. Mentors advised me to read about animation and states in Qt/QML, this helped, and I saw others' implementations too for better understanding. I learned that in Qt/QML, we could implement anything if we knew about the right thing.
March (Week 6 and 7 -> 1 Mar to 14 Mar)
In March, I started by making the initial implemented code clean, so others may understand it easily. Removed the hard coding from the animation part of the animal card from their initial position to their final position (their houses). Improved the implementation of house images of animals so that their proportion doesn't mess up in smaller windows. After correcting the initial mistakes, the next task was to find a way to randomly place the animal cards avoiding overlapping with each other. With the help of my mentors, I found a way to implement this too. I've briefly explained my approach in the blog.
March (Week 8 and 9 -> 15 Mar to 29 Mar)
The activity was still a single-level activity, so the next task was to add multiple datasets to the activity to make it more interactive. After discussing with my mentors, we agreed to add five levels to the activity, and we'll have four animals cards on the first level and, after that, to increase two cards for each level. So at the final (5th) level, there will be 12 cards. But after that, we decided to have three levels only as there is not much difference in the difficulty of the activity level wise. We're only increasing the number of cards, so three levels are ideal. And level 1 has more right-side animal cards, level 2 has left-side care, and level 3 has an equal number of left and right-side animal cards. As the activity is towards its completion, I've written the description of the activity.
April (Week 10 and 11 -> 30 Mar to 13 April)
As the activity was completed, it was time to clean the code add and make it ready to be merged. All the activity objectives were done except for the detection of a mouse in the device, as this activity is suitable only for devices that have a mouse attached to them. I tried finding solutions for it, and one of the possible solutions is available in Qt 6.0, but our application is currently using Qt 5. When we migrate to Qt 6, we can implement this idea. I have created a phabricator task for the same.