Skip to content

GSoC: Google Summer of Code 2019

Timofey Chudakov edited this page Jan 25, 2020 · 1 revision

NOTE: it turns out JGraphT is not participating in GSoC 2019, but if you're a student interested in contributing to the project anyway, this page will give you an idea of how we can work together.

Why Choose JGraphT?

JGraphT is a popular open-source Java library that provides mathematical graph-theory objects and algorithms. Here's what students can expect from collaborating with us:

  • write code for a mature and stable project, used by numerous organizations worldwide in their production systems and in academic research projects
  • write highly efficient code using Java 8 features
  • implement highly efficient data structures and algorithms
  • do all your work on Github with review and support from a community of experts in the field
  • graphs are fun!

GSoC 2018

JGraphT was accepted as a mentoring organization for GSoC 2018. GSoC 2018 was a great success: we had a 100% pass rate of our students. Below are their project descriptions, as well as the project proposals we accepted during the student selection phase. These proposals may serve as an example to write your own proposal.

Prerequisites

Candidates are expected to have the following prerequisite knowledge and skills:

  • Java 8 programming
  • Background in data structures, and algorithmic implementations
  • Background in math, and in particular graph theory

GSoC 2019 Application Process

  1. Sign up for our GSoC mailing list, and our user mailing list and optionally our dev-list and announce list. Remember to star the JGraphT repository on github.
  2. Read the GSoC student guide. Realize that GSoC is very competitive, and highly time-consuming. You are expected to work full-time on your projects. If university work, holidays, jobs, family responsibilities, graduation, thesis writing or internships overlap with GSoC, then you should reconsider.
  3. Read the wiki (both user pages and developer pages) and get familiar with our codebase
  4. Complete the warmup challenge (to be announced soon). This simple exercise increases your familiarity with our library, and ensures that your development environments are setup correctly. Notice that completing this exercise is not a speed contest! Due to the vast number of applications we receive, we cannot provide individualized feedback w.r.t. your warmup challenge. Challenge results can however be used in the evaluation of candidates.
  5. Fill out the google form. This form collects a limited amount of information including (1) your name, (2) your e-mail address and (3) a link to the solution of your warmup assignment. This information is treated confidentially, and will be deleted after the GSoC application phase has ended.
  6. Start contributing. Last year's accepted candidates already made significant contributions to the library during the application phase. This is a great way to show off your skills, and to learn about the project and process. A list of potential tasks can be found here. In addition you are welcome to propose your own ideas, e.g. based on your own experience, algorithms you used in your own research projects/studied in class, or functionality you encountered in other mathematical libraries but is missing in JGraphT. Make sure you do read our contributor guidelines.
  7. Start working on your GSoC project proposal. Use the aforementioned examples to get an idea of what is expected. Do not underestimate the time it takes the write a solid proposal. You are welcome to propose your own project, or to work on an idea from our project list.

GSoC proposal writing

Writing a good proposal is a time-consuming and challenging process. This subsection provides some guidelines to help you structure your proposal.

  • Scope: clearly define the scope and boundaries of your project. What is/isn't included in your project?
  • What are the deliverables of your project?
  • It is better to have 1 large, coherent project, than a collection of small topics. GSoC enables you to dedicate several months to a project. This means that we really want to use this time to tackle some of the larger, more complex problems that are beyond the scope of regular community projects. A long list of small algorithmic contributions would not make a good proposal. We really are looking for the state-of-the-art!
  • Structure your project. Identify a sequence of tasks and steps that have to be taken in order to complete your project. It is important that by the end of GSoC, there is a finished result. We want to avoid situations where we end up with a lot of unfinished code. It is OK to identify potential extensions of your project in case there is time left.
  • Planning: your proposal must include a project plan. Specify for each of the subcomponents in your project how much time it will take to complete, and when you intent to finish each component. Is your time planning realistic, i.e. can you complete everything in time? Is your project ambitious enough?
  • In case you want to make an algorithmic contribution, it is important that you specify (and read!) the necessary academic literature. Which sources will you use to implement your algorithm? Are there already existing implementations of this particular algorithm which you can use for inspiration? Often there exist different algorithms to solve a specific problem. What are their trade-offs? What is the state-of-the-art? Use the time you have to write your proposal well: the better you prepare your project, the higher the quality of your proposal will be.
  • Evaluation: how are you going to evaluate the correctness and performance of your code? Are there benchmark instances? Are there other libraries or software packages containing similar implementations against which you can compare? Does your implementation improve upon existing code in JGraphT? Without evaluation, code cannot be accepted: we want to ensure that the code is correct, and that the performance is equal (or preferably) better than alternative implementations.
  • Most important, you need to convey that you have a clear understanding of your project, what it entails, what you have to do to complete it. Just referencing some papers and related literature is not enough. Based on your proposal we need to be confident that you have the knowledge, background and sufficient understanding of the topic to be successful.
  • If you propose your own project, remember to add a section describing why this is a good addition for JGraphT. During GSoC, we can only accept a small number of students. Big impact projects are therefore preferred.

GSoC coding process

The coding process is well described in the GSoC student guide. In summary you are expected to work full-time on your project during the GSoC coding period. To support you in this process, we team up every student with 2 mentors: a primary and a secondary mentor. This way, you will always have someone you can contact. Each student will have weekly or biweekly Skype meetings with their mentors. During those meetings, we typically discuss progress, technical, and if necessary, personal issues you may be facing. Our mentors are there to support you. But most importantly, you have to take ownership of your own project: ensure that everything is finished in time, and that you can be proud of the final result.

All our code lives in a Github repository. During the coding process, you will work on your own local copy (fork) of the repository. You will be asked to share a link to your local github repository with your mentors such that they can monitor your progress and help you out with technical issues or design choices.

Finally, we like you to interact with our other GSoC students, to share experiences, and to help each other throughout this process. This is a fun and rewarding experience.

Life after GSoC

By the end of GSoC you are expected to have a finished project. You and your mentors will be working together to iron out any remaining issues such that your code can be merged into our stable branch. After that, your project will become part of the next JGraphT release. Typically, JGraphT has 2 releases per year. Once GSoC ends, we'd like you to stay active within our organization (obviously with a lower intensity than during GSoC). We invite you to work on extensions of your project, take up new projects, review code from other collaborators, etc. In short, we'd like you to become good ambassadors for JGraphT. If all goes well, then you'll have a chance to become a JGraphT mentor for next year's GSoC!

Clone this wiki locally