GSoC 2019 @Open Data Kit
This summer, I was fortunate to be selected as a participant in the Google Summer of Code 2019 with Open Data Kit. It was a fulfilling and memorable experience. I participated in an open-source project while improving my coding ability, as well as, my teamwork ability.
This post is a summary of the three-months experience, including all the mistakes, learnings and progress I have made.
The most important task for this project was to build a secondary transferring method for Skunkworks-Crow, which allows forms exchanging in different mobile devices. Last year, we used a hotspot to send/receive data but hotspots have some limitations (e.g, in Android 9 devices, users cannot use the hotspot), so I added another method (Bluetooth) and made the two methods work well in the same application.
Summer of Code Proposal: Proposal for GSoC 2019
Github Repository: https://github.com/opendatakit/skunkworks-crow
Project Releases: https://github.com/opendatakit/skunkworks-crow/releases
Open Data Kit Forum: https://forum.opendatakit.org
What I’ve Done
- Refactor the application with a new structure (#256 closed #252)
- Refactor the style.xml (#258 closed #254)
- Build the bluetooth transferring method (#260 closed #253 #265)
- Create dialogs for bluetooth transferring method (#270 closed #268 #269 #297)
- Improve the bluetooth devices scanning progress (#272 closed #271)
- Add unit tests for most UI works and preference (#274 closed #265)
- Remove the unreachable bluetooth devices in list (#276 closed #275)
- Fix the socket closed and timeout issue while using bluetooth (#277 closed #267)
- Add the empty view of bluetooth scanning page (#279 closed #278)
- Fix the transferring results presenting (#281 closed #280 #293)
- Quick fix for the bluetooth devices list view (#283 closed #282)
- Bluetooth feature with android 9 adaptations (#286 closed #284)
- Build the default transferring mechanism and UI improvements (#290 closed #266)
- Handle the permission with storage in API level > 23 devices (#296 closed #295)
Still In Progress
- Add reset application option in the settings (#300 closes #299)
- Update the README.md with new feature (#307 closes #287)
- Test the two methods, and fix issues to make the application more robust.
- Add the scanning QR Code to connect feature for Bluetooth.
- Build a better UI for both the bluetooth method and hotspot (with an icon).
- Make hotspot feature works in Android 9 (and above) devices.
- Design and apply an app icon for Skunkworks-Crow.
Challenges & Learnings
Honestly, during this summer, the biggest challenge was my time is limited. I’m in my final college year and have lots of work to do apart from Skunkworks-Crow, so the most difficult thing was to allocate my time reasonably. In the first month, I worked slightly slower than planned, but my mentors were very nice, they gave suggestions and favors to me during that period and finally helped me catch up with the timeline.
Another challenge was communicating effectively with mentors. I’m not a native English speaker, so the first time when I had a call with my Indian mentors, I was really nervous and tried my best to understand what they said. The good news is, @dexter21 and @Shobhit_Agarwal are very nice and patient. I still remember after making a call the first time, @dexter21 wrote a very detailed meeting record in case something missed. Many things like that help me become less afraid to communicate. And I believe that is also the real goal of the open-source culture: sharing, communication and writing better code.
From the technological aspect, I didn’t have any issues. Everything went well during this summer. The most difficult part is debugging, running the program on different devices may result in some unknown issues that slow your progress and drives you crazy. So it’s necessary for developers to know how to debug like using breakpoints and loggers. I think my ability in this area has been greatly improved during this summer.
GSoC 2019 is an unforgettable experience that has improved my abilities in all aspects. And Open Data Kit is also a very cool organization, it helps people in some challenging environments collect and manage data. With the developments of society and technology, data plays an increasingly important role. For ODK, maybe we can do something more like using learning-based methods to help users manage their large data and get more value from big and structured datasets, anyway, hope ODK gets better and better.
Last but not least, thanks to my mentors @dexter21 and @Shobhit_Agarwal! You are great mentors and it was very nice to work along with you guys this summer. And I also appreciate the suggestions and favors given by @yanokwa and @LN , not only the project but some ideas for the future.