Skip to content

GSOC 2021 Ideas List

Timothy M. Shead edited this page Feb 19, 2021 · 8 revisions

Starter ideas for GSOC 2021

This page provides a set of ideas for GSOC student projects. Students: these are just conversation starters, we greatly prefer that you propose unique ideas of your own. Because Graphcat is an explicitly domain-agnostic toolkit, you should have no trouble finding a way to incorporate it into your current interests or research. Bottom line: you be you.

For details on participating in GSOC, see the Student Guide, particularly the section on Writing a Proposal. We recommend that you take a look at the Graphcat documentation and run through our Tutorial and the User Guide to get a good feel for how Graphcat works. Contact us via Chat at any time for questions and feedback on your ideas. And make sure you keep your eye on the Timeline!

Idea 1 - Integrate Graphcat with a domain of your choosing

Description: this is the job that Graphcat is designed for. In this scenario, you pick a domain that’s of interest to you (text processing, machine learning, signal processing, physics solvers, autonomous robots, you-name-it), and decompose that domain into a set of data structures and tasks that can be used with Graphcat. We like this idea because it highlights the domain-agnostic nature of Graphcat. Ideally, you want to create a set of tasks that can be combined in flexible ways using Graphcat’s computational graphs to solve lots of different problems for end-users.

Prerequisites: you’ll need to know Python, Graphcat, and your chosen domain well enough to decompose it into a set of data structures and tasks that work well with Graphcat.

Deliverables: you’ll need to publicly host your work so that we can link to it as an example of using Graphcat. You’ll also need to writeup a tutorial on how your integration works, which we will incorporate into the Graphcat documentation and website.

Difficulty: low, because your focus will be on your chosen domain.

Mentors: Tim, Andy, Gabe.

Idea 2 - Integrate Graphcat with multiple domains of your choosing

Description: This takes Idea 1 and dials it up to eleven. In this scenario, you pick two or more domains that are of interest to you and decompose them into a set of data structures and tasks that can be used with Graphcat. We especially like this idea, because it highlights the domain-agnostic nature of Graphcat, and how it can merge multiple domains together into a single computational graph. Want to combine cartographic data with audio to train machine learning algorithms? This is the idea for you. As with Idea 1, you’ll have to create sets of tasks that can be combined in flexible ways.

Prerequisites: you’ll need to know Python, Graphcat, and your chosen domains well enough to decompose them into a set of data structures and tasks that work well with Graphcat. Because you’ll be taking on multiple domains at once, you’ll have to scale back on the number of features you implement for each, and you’ll have to have plausible ways to combine and use the data.

Deliverables: you’ll need to publicly host your work so that we can link to it as an example of Graphcat in use. You’ll also need to writeup a tutorial on how your integration works, which we will incorporate into the Graphcat documentation and website.

Difficulty: medium, because your focus will be split across multiple domains.

Mentors: Tim, Andy, Gabe.

Idea 3 - Use Graphcat to implement a parallel workflow in the domain of your choosing

Description: In this scenario, you will develop examples of how Graphcat streaming computational graphs can be run in parallel. You’ll have to choose a problem where parallel processing makes sense, and develop streaming-friendly data structures, extents, and streaming-compatible tasks to solve that problem. We like this idea because streaming and parallelism are relatively new additions to Graphcat, and definitely need more examples for the documentation.

Prerequisites: you’ll need to know Python, Graphcat, and your chosen domain. You’re going to want to have a reasonable understanding of parallel processing, and familiarity with one or more ways to implement it, such as threading, multiprocessing, MPI, or something more exotic.

Deliverables: you’ll need to publicly host your work so that we can link to it as an example of Graphcat in use. You’ll also need to writeup a tutorial on how your integration works, which we will incorporate into the Graphcat documentation and website.

Difficulty: medium, because making parallel processing work correctly is never easy.

Mentors: Tim, Andy.

Idea 4 - Take a Graphcat subsystem like visualization or logging and expand it

Description: As a relatively new project, some of Graphcat’s functionality is a little thin. This is your opportunity to make contributions directly to the codebase. Debugging computational graphs can be somewhat tricky, which is why logging and visualization are the first two subsystems that come to mind, but any area where you think functionality could be expanded is fair game (make sure what you’re proposing is significant enough to justify the full summer’s level of effort).

Prerequisites: you’ll need to have excellent Python skills, demonstrate that you understand Graphcat at a deep level, and show that you can design an API that others will want to use. You’ll need to know how to use git, GitHub, branches, and pull requests. This task will require lots of communication with your mentor, a commitment to respect coding standards, and a willingness to iterate on your design.

Deliverables: fully documented code, regression tests, and an entry in our user guide.

Difficulty: hard, because we are sticklers when it comes to good API design, and we are uncompromising about maintaining 100% code coverage and excellent documentation.

Mentors: Tim.

Idea 5 - Design and implement a new computational graph type

Description: You’re choosing this scenario because you already know computational graphs like the back of your hand, and the static, dynamic, and streaming graphs we already provide just aren’t enough. You’ll be contributing code to the heart of Graphcat, in the form of a new implementation of the Graph interface.

Prerequisites: you’ll need to have excellent Python skills, demonstrate that you understand Graphcat at a deep level, have a concrete proposal for a new graph type, and show that you can design an API that others will want to use. You’ll need to know how to use git, GitHub, branches, and pull requests. This task will require lots of communication with your mentor, a commitment to respect coding standards, and a willingness to iterate on your design.

Deliverables: fully documented code, regression tests, and an entry in our user guide.

Difficulty: hard, because we are sticklers when it comes to good API design, and we are uncompromising about maintaining 100% code coverage and excellent documentation.

Mentors: Tim.