GSoC '23 Final Work Submission

GSoC '23 Final Work Submission

What an experience!

Goals and deliverables for GSoC

My GSoC project was multi-faceted, consisting of two distinct components that aimed to enhance the Scribe iOS app. This two-fold project encompassed:

1. App Menu Revamp: The first part of the project involved a comprehensive revamp of the Scribe iOS app's menu system. This task required the creation of a new app menu that incorporated several key features and sections. One of the primary objectives was to implement a tab bar that allowed users to seamlessly switch between different screens and sections of the app.

In addition to the tab bar, I had to integrate user-friendly features that allowed users to customize their keyboard experience. This included the ability to save specific preferences and tailor the keyboard to their unique needs and preferences. I also had to add new screens dedicated to essential documentation, such as privacy policy, licenses, and detailed information about how Scribe and Wikidata collaboratively functioned together. This comprehensive revamp aimed to enhance the user experience, making Scribe more accessible and informative for its users.

Img: Menu app before GSoC

2. Expanding Language Support: The second part of the project was dedicated to expanding the language support within the Scribe app. Scribe relies on Wikidata to source data for its language offerings. To achieve this expansion, critical tasks include writing scripts to fetch the necessary data using SPARQL queries and Python.

Once the data is retrieved, it requires careful formatting to ensure compatibility with the iOS app. This data is then loaded into SQLite files, optimizing it for efficient use within the app. Beyond data processing, creating the essential layouts and structures was required for the new keyboards to function seamlessly.

The planned languages for this expansion encompassed English and either Danish or Norwegian.

These deliverables collectively aimed to not only improve the Scribe iOS app's functionality but also enhance its user-friendliness and accessibility while expanding its language offerings.

Brief about my work on the project

My GSoC journey commenced with a deep dive into the enhancement of the Scribe iOS app's user interface (UI), specifically focusing on the menu part. Given my prior experience with iOS development, I hit the ground running, and the initial pace was promising.

One of the most exciting aspects of this project was the opportunity to immerse myself in UIKit, especially since I had been predominantly using SwiftUI. This transition brought forth numerous new insights and findings about UIKit. However, it wasn't all smooth sailing. Scrollviews presented quite a challenge. Implementing auto layout for ScrollViews required some problem-solving, which I tackled by referring to various articles and video tutorials. I published a blog post sharing how I solved this problem. You can find it here.

Storyboard diagram of the Scribe app

Img: Storyboard diagram for the Scribe app post work.

A significant component of this endeavour was creating a user-friendly experience. To achieve this, I established app groups that were common across the different app targets, allowing us to save user preferences for every language seamlessly using UserDefaults. I also was able to put in extensive practice with UITableViews and the art of customizing cells. In fact, this experience led me to explore the concept of nested table views, a useful technique to manage common components across various screens while ensuring reusability.

Recognizing the importance of reusability, especially since many components were shared across screens, I diligently designed and implemented solutions to maximize efficiency. Additionally, I leveraged SwipeableTabBarController, an external package to introduce a swiping functionality that enabled users to switch tabs, going beyond the standard behaviour of a UITabBarController. This package significantly improved the overall user experience.

In the process of enhancing the Scribe menu, I faced the challenge of distinguishing Scribe keyboards from system keyboards to be able to list them in the menu to set preferences. This ended up requiring some deep exploration and experimentation. Refreshing the list of installed keyboards also proved tricky, and I had to devise a somewhat hacky solution which is definitely open to improvement. Will be working on it in the coming time. This linked PR directs to the changes for loading the installed keyboards.

My work on the menu app closely followed the designs outlined in the Scribe design files available on Figma, providing me with valuable hands-on experience in translating design concepts into functional UI elements. However, I initially faced a challenge in compartmentalizing issues in Git, as it often felt like many tasks overlapped. Nevertheless, I eventually found my stride, allowing me to work efficiently and effectively.

It was exciting to be able to enhance the UI of a vital tool while gaining valuable experience in navigating the intricacies of UIKit. Below is a quick screen capture of my complete work on the Scribe app menu.

In addition to my work on the Scribe iOS app's user interface, a portion of my GSoC journey was dedicated to the Scribe-Data repository. This repository is pivotal in sourcing and managing the data that fuels the app's language support. Here's a closer look at my contributions:

1. Streamlining Data Processing: The Scribe-data repository is divided into two primary directories: extract_transform and load. These directories play a crucial role in the data pipeline. "extract_transform" is responsible for bringing in data through SPARQL queries and then meticulously formatting it to align with Scribe's specific requirements. This step ensures that the data is prepared and structured in a way that the Scribe app can efficiently utilize. The "load" directory, on the other hand, is responsible for loading these formatted data, stored as JSON files, into an SQLite database. This database is the optimal choice for the Scribe app as it provides faster and more efficient data retrieval compared to working directly with JSON files.

2. Refining English Language Data: My work extended to the English language data, where I focused on formatting files written in Python. At the time, the English data primarily consisted of nouns and verbs. While there were existing SPARQL query files crafted by my mentor, they required updates and refinements. To ensure that the English language data met the evolving needs of Scribe, my mentor and I engaged in detailed discussions during our weekly meetings. These discussions led to valuable refinements in the SPARQL queries which were implemented by my mentor, enhancing the data quality for the app.

3. Open-Sourcing Layout Changes: As part of the collaborative spirit of open-source projects, the layout changes made during my GSoC tenure were open-sourced. This decision not only encouraged transparency but also extended a warm welcome to new contributors interested in improving Scribe's functionality. I'm particularly grateful for the contributions made by fellow developers who took charge of iPad layouts, ensuring that Scribe's interface was optimized for various devices.

It was a rewarding experience to not only work on the technical aspects but also to see the project grow through the involvement of new contributors. This journey was not only a chance to explore and expand my skills in iOS development but also a testament to the collaborative spirit that drives open-source projects like Scribe.

Following redirects to all my pull requests for:

OR you can find the individual pull requests below categorised by my GSoC task.

Pull requests for the Scribe app menu:

Pull requests for language data work:

misc:

Addressing failures

One of the primary areas where I fell short during my GSoC journey was the implementation of the Norwegian language into the Scribe app as part of my project. Although I had the task of contributing to the data processes for English, which we accomplished to gain valuable experience with Wikidata, I couldn't deliver the Norwegian language within the GSoC program timeline. It's a regrettable missed opportunity, and I wish I had managed my priorities differently to reach this milestone sooner. However, I remain committed to this task and intend to follow through with it, even if it may no longer count toward my official GSoC work.

Additionally, I also faced challenges with my commitment to bi-weekly blogging. Despite my initial determination and the organization's expectation, I struggled to meet this target as the GSoC journey progressed. The demands of a new internship, combined with the responsibilities of my GSoC project, proved to be more challenging than anticipated. Each time I opened my drafts, it felt like there were more pressing issues requiring my attention. Documenting the process and sharing my insights soon slipped down my list of priorities, and blogging became a seemingly low-priority task that could be deferred. Now, at the end of my GSoC journey, I find myself regretting not having a detailed record of the thoughts and experiences that shaped this remarkable adventure. However, I'm determined to make amends. I plan to document and share what I can recall from memory, in the hope of capturing at least some of the journey's essence.

These lessons in managing time and priorities have been valuable, and I'm determined to learn from these experiences to grow as a developer and contributor.

Community experience

Beyond the technical challenges and personal growth, my GSoC journey was significantly enriched by the vibrant and welcoming Wikimedia community. Wikimedia, with its vast ecosystem of projects, boasts a beautiful community that I am truly grateful to be a part of. While Scribe may be considered a smaller project compared to the grandeur of Wikimedia as a whole, it was a privilege to collaborate with other contributors under the Wikimedia Foundation umbrella.

What began as a project endorsed by Wikidata and Wikimedia evolved into a full-fledged Wikimedia project, enabling me to work alongside Wikimedia contributors and organization administrators. During one of our contributor meet-ups, I discovered that everyone was involved in some truly remarkable initiatives. It was exhilarating to learn about the diverse projects and hear the inspiring stories of fellow contributors.

Moreover, my bond with my mentor and unofficial co-mentor grew stronger over time. I am immensely grateful for the guidance, support, and friendship they offered throughout this journey. This sense of community, where knowledge-sharing and collaboration thrive, has been an invaluable aspect of my GSoC experience.

My learnings

My journey in Google Summer of Code (GSoC) was a profound learning experience, filled with both technical and personal growth. As I delved into coding, I discovered that there's always something new to learn, even in a tech stack I thought I knew inside out. I honed my skills in UIKit, exploring fresh approaches and techniques with each coding session. Debugging took on a new dimension as I adapted to having to cater to multiple targets in a single application, enriching my knowledge of efficient debugging practices. Implementing features became an exercise in creativity, as I scoured multiple references and resources to brainstorm innovative methods. Git, too, became a trusted ally in managing code versions effectively.

Beyond the technical aspects, GSoC taught me valuable lessons in time management. Juggling a full-time internship alongside GSoC was no small feat. The first month, spent as vacation, was a luxury. However, once the internship began, I found myself working on the project during late nights and weekends. It was a rollercoaster ride; there were days when exhaustion crept in, hindering progress, and a looming sense of burnout threatened to take hold. Thankfully, my mentor provided unwavering support during these challenging times. They helped me navigate the chaos and strike a balance, granting me the time and space to find my way through.

One of the unique aspects of this GSoC project was the opportunity to delve into Wikidata, guided by a mentor who was an employee in the field and had incredible experience working with Wikidata. This opened the door to a whole new world, as I gained insights into working with Wikidata and delved deep into SPARQL. Given the time constraints due to the prolonged UI development phase, learning SPARQL quickly became a necessity. My mentors, both primary and co-mentors, played a pivotal role in helping me transition to a different repository, providing guidance and support every step of the way. The sheer magnitude of data in Wikidata was awe-inspiring, making this journey an enriching experience in working with extensive datasets. In essence, GSoC was not just about code; it was a transformative adventure in knowledge, time management, and mentorship.

Amidst the GSoC adventure, I had the opportunity to witness and contribute to discussions about Continuous Integration and Continuous Deployment (CI/CD) workflows and the world of software testing. While I didn't personally set them up, I was part of the team that oversaw their implementation using GitHub Actions. These workflows brought automation and precision to our development process, making everything run smoother. While formal testing is still on the horizon for Scribe, we've already seen its benefits in Scribe-Data. This journey has been a great learning experience in the world of software engineering, showing me the importance of testing and efficient development practices. It's just one more aspect of my GSoC journey that's broadening my skills and helping me become a better developer.

Future plans

My involvement with Scribe didn't start with GSoC, and it definitely won't end there. I've been part of Scribe's journey even before GSoC, and I'm committed to continuing my contributions.

GSoC has been a real eye-opener. It showed me the vastness of the open-source community and how many exciting projects are out there, each with its own set of challenges and opportunities. This experience has ignited a desire to explore and participate in more open-source communities.

Additionally, GSoC has helped me see where I can improve technically, and I'm eager to dive into this journey of continuous growth. As I look ahead, I'm excited about the new adventures and contributions that lie ahead, whether it's in my ongoing work with Scribe or in my exploration of other open-source projects.

Get in touch

Thank you for taking the time to read my post and share in my journey. If you'd like to connect or collaborate on a project, whether it's related to development or just to say hi, feel free to reach out to me: