Skip to content

Google Summer of Code 2020

Serge Koudoro edited this page Nov 7, 2020 · 16 revisions

Introduction to FURY

FURY is a free and open source software library for scientific visualization and 3D animations. FURY contains many tools for visualizing a series of scientific data including graph and imaging data. FURY is participating in GSoC this year for the first time under the umbrella of the Python Software Foundation (PSF).

How to become a part of FURY's Google Summer of Code 2020

GSoC is a program the allows students to learn by contributing to an open-source project while receiving a fellowship from Google, and mentorship from open-source software developers. For details about this year's GSoC, please refer to this page.

Before considering becoming part of the FURY GSoC, please read about our expectations.

All participants should have basic knowledge of computer graphics, scientific computing, and development in Python. For a comprehensive introduction to these topics, please refer to these 2 books:

However, you should be already familiar with data analysis using Python and Numpy before applying.

Be happy to ask questions directly by subscribing to our mailing list and sending a message to fury@python.org or by creating an issue and Select GSOC Request or by joining our discord community.

Getting Started

Potential candidates should follow all these steps before applying for the GSoC:

  1. Take a look at the guidelines on how to contribute to FURY.
  2. Go through the tutorials and examples on the website, make sure you're familiar with the library.
  3. Run the tests. FURY has unit tests that are at about 90% coverage (amount of lines of code tested). Make sure you know how to run them, and if you've never done Python unit tests before you might want to read up on Pytest library. Figure out how to run a single test! Running one test instead of all of them will speed up your workflow when you are writing your tests! (hint, it's in the contributing docs!)
  4. Make your first contribution to FURY !!! Making a small enhancement/bugfix/documentation fix/etc to FURY is really important! It shows your understanding of the library and your Github knowledge. The fix does not need to be related to your proposal. We have and will continue adding some beginner-friendly issues in Github. You can see some of them here

This a requirement from the PSF; it can help you get some idea how things would work during the GSoC.

Projects

We currently have 6 project ideas:

  • Project 1: Create new user interface widget. (Difficulty: intermediate). More information here
  • Project 2: Improve our animation framework via GLSL (Difficulty: Advanced). More information here
  • Project 3: Create the FURY showcase (Difficulty: easy). More information here
  • Project 4: Make FURY available in Jupyter (Difficulty: Intermediate). More information here
  • Project 5: Bring a Physics Engine to FURY (Difficulty: Advanced) More information here
  • Project 6: Bring your own idea! (Difficulty: Easy/Intermediate/Advanced) If you've got a brilliant idea you'd like to propose, please make a new issue and select GSOC request to discuss it!

Notice: We want to provide the best mentoring to our students, only 2 or 3 of these projects will be selected. Not more!

Projects in Details:

Project 1. Create new user interface widget

Description: In this project you will build scifi-like 3D and 2D user interfaces inspired from Guardians of the Galaxy video. FURY provides many visualization capabilities. However we were not happy with interactive capabilities found in existing GUIs. For this reason we built our own UI engine. No Qt! Everything is integrated in the VTK scene. This is an example of an orbital orbital menu.

In this project you will extend this work and add more futuristic widgets. The motto of this project is make everything interactive without performance issues. Here are the different steps to achieve:

  • Step 1: Get familiar with the library by fixing some issues like #75 #76 #108.
  • Step 2: Create ComboBox UI and improve FileDialog capabilities.
  • Step 3: Select, Explore and develop one of this 3 subjects: Tree UI, Tab UI, Layout management.

Difficulty: intermediate

Skills required: Python, OpenGL and VTK

Potential Mentors: Serge Koudoro and David Reagan

Project 2. Improve our animation framework using GLSL

Description: Our new visualization engine supports GLSL shading language. Join our effort to built stunning animations of scientific datasets. You will have to program vertex and fragment shaders to generate different effects on FURY primitives. Below, an example of fake animated sphere (look at PR #132)

Here are the different steps to achieve:

  • Step 1: Understand and Extend our current animation framework by fixing issues and adding new animation effects.
  • Step 2: Extend the framework to make it easy to combine animations.
  • Step 3: Create Demo of complex animation and generate videos.

Difficulty: high

Skills required: GLSL, Python, OpenGL and VTK

Potential Mentors: Javier Guaje, Serge Koudoro

Project 3. Create the FURY showcase

Description: FURY can be used with multiple different scientific data. As you can see at our gallery, our current showcases are primarily focusing on medical applications. We want to extend this gallery for different scientific fields so this will be your mission!

Here are the different steps to achieve:

  • Step 1: Build an application for visualizing warping fields.
  • Step 2: Build an application for molecular visualization.
  • Step 3: Build a GIS application.
  • Step 4: Build your own proposed application.

Difficulty: Intermediate

Skills required: Python, VTK, curiosity, creativity

Potential Mentors: David Reagan, Javier Guaje

Project 4. Make FURY available in Jupyter

Description: We would like to make FURY run in Jupyter notebook. Join our effort to built stunning extensions that convert our current python interactor to a vtk.js module. Therefore you will have to improve some of our scripts which are showing our community contribution on our website. If you feel talented, you could also improve the design too.

Here are the different steps to achieve:

  • Step 1: Convert our scenes to vtkjs
  • Step 2: Improve interactivity in javascript and think of a holistic design across python and javascript
  • Step 3: Check that shaders are imported properly

Difficulty: Intermediate

Skills required: Python, Sphinx, Html, css, javascript

Potential Mentors: Serge Koudoro, David Reagan

Project 5. Bring a Physics Engine to FURY

Description: We would like to add an optional physics engine to FURY. The student will need to understand PyBullet and build a realistic simulation that uses the engine to simulate physics (e.g. collisions) but use FURY to do the visualization.

Here are the different steps to achieve:

  • Step 1: Understand how PyBullet and FURY work
  • Step 2: Build minimalistic examples that integrate both engines
  • Step 3: Build a larger animation that showcases physics simulations

Difficulty: Advanced

Skills required: Python, PyBullet, FURY

Potential Mentors: Serge Koudoro