Hello to everyone.
So this is the final report on the work I completed throughout the Google Summer of Code contribution period (May-September). There's a lot to share and discuss, but I'll try to keep this brief.
Mentors:
Project:
Make GNOME Platform demos for Workbench
About Workbench:
Workbench lets you experiment with GNOME technologies, no matter if tinkering for the first time or building and testing a GTK user interface.
Among other things, Workbench comes with
Live GTK/CSS preview
Library of 100+ examples
JavaScript, Rust and Vala support
Declarative user interface syntax
Autosave, sessions and projects
Code linter and formatter
Offline documentation
Terminal output
1000+ icons
Tasks performed:
✅ Created beginner-friendly and easy-to-understand examples/demos for all widgets of GTK 4.10 and Libadwaita 1.3 to help newcomers understand how to use them effectively.
✅ Provided ready-to-use code snippets of the widgets/APIs covered, making it easier for developers to integrate them into their projects.
✅ Covered GLib/GIO and Libportal APIs and create relevant examples to help developers understand how to use them in their applications
✅ Created demos while taking UI and UX design concepts into account to showcase how to make aesthetically pleasing and functional user interfaces.
✅ Covered GNOME HIG Patterns to ensure that the examples and demos follow the GNOME Human Interface Guidelines, making them consistent with other GNOME applications and user-friendly for users
✅ Implemented Search function in Workbench
Further Tasks to be performed:
Port and integrate the existing implemented search function from a demo as a feature into Workbench.
Adding new demos with the forthcoming GTK and Adwaita releases.
Update existing demos as GJS, GIO, and GLib versions are updated and new features are added.
My Contributions:
I was amazed and thrilled to learn that I had written about 3800 lines of code in the previous few months. I have contributed the following:
Documentation(GTKCssLanguageServer)
CodeFind Feature:
Apart from the demo coverage I also implemented a codefind feature as a library entry in the workbench.
Implemented a code-search feature similar to GNOME Text Editor
Highlights matched search results
Supports both case and non-case-sensitive search
Implemented move to next search and move to previous search functions
Keybindings for ease of access
Currently, this feature is implemented as a library entry in Workbench, which is further planned to be integrated shortly.
Going Beyond:
I was thrilled to have the opportunity to contribute to GJS (GNOME Javascript) because we completed what we had planned a week or two before the last week of the coding period, and my mentor allowed me to concentrate on something apart from the project.
Made console.log format GError correctly
Before:
gjs> try {imports.gi.Gio.File.new_for_path('/foo').load_contents(null) } catch (err) { console.error(err) } (gjs:68852): Gjs-Console-CRITICAL **: 21:22:41.833: { "stack": "@typein:7:47\n@<stdin>:1:42\n", "fileName": "typein", "lineNumber": 7, "columnNumber": 47 }
After:
gjs> try {imports.gi.Gio.File.new_for_path('/foo').load_contents(null) } catch (err) { console.error(err) } (gjs:68852): Gjs-Console-CRITICAL **: 21:22:41.833: Gio.IOErrorEnum: Error opening file /foo: No such file or directory @typein:9:47 @<stdin>:1:42
-
Before:
gjs> console.log(new TextDecoder()) Gjs-Console-Message: 21:38:35.467: { "encoding": "utf-8", "ignoreBOM": false, "fatal": false }
After:
gjs> console.log(new TextDecoder()) Gjs-Console-Message: 21:38:35.467: TextDecoder { "encoding": "utf-8", "ignoreBOM": false, "fatal": false }
More information about this issue can be found here
Post GSoC plans:
Dive deeper into GNOME technologies and contribute more, particularly in GJS (GNOME Javascript).
Continuing exploration of other Open-Source Communities.
Creating more complex projects using what I learned here.
Engaging with newcomers more regularly to assist them in breaking into open-source software development
Hardships during GSoC:
Keeping up with coding and schoolwork (yes, I attended normal, full-time classes for the majority of the coding period)
Keeping up with the time zone differences (my mentors and I are in completely different time zones)
Proactively learning and adjusting to new tasks. (Each week, we were given a new topic to demonstrate, ensuring continual and adaptable learning.)
My learnings:
Working as a team to resolve issues.
Communicating with team members ensuring no blockers
Iterative Development
Writing clean code
Remote software development practices
Documentation and technical writing skills
Work Discipline
Personal growth
Achievement:
I am thrilled to share that Workbench now has over 100+ interactive demos!
THANK YOU!
GNOME , my mentors Sonny Piers and Andy Holmes, my teammates, and everyone who supported me during this period. This summer has been a roller coaster journey for me, from coding to documentation to an international sponsored trip; it's been a blast. I'm looking forward to contributing more actively and learning to the best of my ability.