My Journey into Backend Development - Google Summer of Code Week 5-6

Introduction:

Hello everyone! Welcome back to my blog series documenting my Google Summer of Code (GSoC) journey. In the previous blogs, I shared my experiences of getting selected for GSoC and the exciting frontend work I accomplished in weeks 1-4. In this installment, I'll take you through the thrilling transition to backend development during weeks 5-6. Let's dive in!

A New Frontier: Exploring Backend and the Challenge Ahead With the frontend tasks behind me, I felt ready to take on new challenges. I noticed some unsupported implementations in Bowtie and decided to contribute to its backend development. There was a specific Java-based implementation on the Json schema website, which had weak support on Bowtie. An open ticket highlighted this issue, and I saw it as an opportunity to learn about the implementation harness (an environment where meta-validation takes place).

Learning Java and the Networknt Library:

Although I had experience with various programming languages, Java was new territory for me. To address this, I dedicated time to learn Java and become familiar with its concepts and syntax. After gaining some proficiency, I started exploring the Networknt library, the platform that provided the schema validation implementation.

Understanding Bowtie's IHOP Protocol:

To get started, I needed to understand how bowtie interacted with the harness. Bowtie uses an Input Harness Output Protocol (IHOP) to communicate with the backend. It sends requests to the harness via standard input and expects responses on standard output. At the beginning of the process, bowtie sends a request with data obeying the below specific schema.

{
    "start": {
        "description": "Sent once at program start to the implementation to indicate Bowtie is starting to send test cases.",
        "required": [
            "version"
        ],
        "properties": {
            "cmd": {
                "const": "start"
            },
            "version": {
                "description": "The version of the Bowtie protocol which is intended.",
                "$ref": "#/$defs/version"
            }
        }
    }
}

It then expects output adhering to another below schema,

  {
    "response": {
        "type": "object",
        "required": [
            "ready",
            "version",
            "implementation"
        ],
        "properties": {
            "ready": {
                "description": "Confirmation that the implementation is ready.",
                "const": true
            },
            "version": {
                "description": "Confirmation of the Bowtie version",
                "$ref": "#/$defs/version"
            },
            "implementation": {
                // some implementation specific data
            }
        }
    }
}

confirming the implementation's readiness.

Overcoming Challenges and Gaining Community Support:

As I progressed, I encountered a significant roadblock: unresolved schemas. These were references to schemas that the schema registry had failed to load correctly. Resolving a schema referred to the process of obtaining the schema content linked to the $ref keyword and making it available for validation. This was a critical step in ensuring smooth validation, but it was proving to be tricky.

Through thorough debugging and with invaluable support from Harrel, an active community member, I was able to resolve the schema issues. After creating the Java-based harness and fixing the problems, I submitted it for review by my mentor. The feedback was positive, and my harness was merged into the project.

Learning and Growth:

I must admit that creating the harness took longer than I initially anticipated. However, my mentor reassured me that it was normal for a first-time implementer to take more time. The learning experience throughout the process was immensely valuable, and I knew that challenges were part of the journey.

As week 7 approached, we reached the mid-term evaluation phase. I successfully passed the evaluation and received valuable feedback from my mentor, offering insights on how I could further improve my skills. It was heartening to see my hard work paying off, and it motivated me to push myself even further.

One fantastic surprise came during this time - my stipend arrived just 3-4 days after the evaluation. It was a delightful moment, acknowledging my efforts and contributions. The journey so far has been both exciting and fulfilling, packed with numerous learning opportunities.

Conclusion:

As I wrap up this blog, I want to express my gratitude to all of you who have been following my GSoC journey. Working on the Bowtie project and transitioning to backend development has been an enriching experience. I've gained valuable insights into the world of Java, backend implementation, and harness creation. I look forward to continuing my contributions and learning even more as the program progresses. Thank you for joining me on this adventure, and until next time!