GSoC 2023: Final Report

GSoC 2023: Final Report

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:

Sonny Piers and Andy Holmes

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:

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
    
  • Improved console.log output

    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.


Did you find this article valuable?

Support SoNiC-HeRE by becoming a sponsor. Any amount is appreciated!