IPython

Rationale

Python and IPython (a notebook software for “interactive computing”) are very popular among Bioinformaticians (e.g. BioPython) and we would like to make our visualizations components easily accessible for IPython users. One example is that instead of showing raw sequences in JSON or a pre-block, we could use an interactive multiple sequence alignment viewer. Our long term goal is to have a BioJS specification that allows to wrap all BioJS components into IPython.

Fig. 1: Example of how one could create an MSA visulization in IPython

Approach

In IPEP 23 IPython describes an API that enables the user to generate and manipulate the GUI of the IPython notebook viawidgets. As a start to familiarize yourself with IPEP23 you should port one or two components to IPython widgets. The most interesting question of this projects is how we infer knowledge about data types into BioJS components - a related project (biojs2galaxy) uses special template files for this. Moreover as every IPython Widget has to inherit from a special Backbone.View, we could also put some work into a BioJS core.

This project should also improve the widget management in IPython/Jupyter and therefore you will be working with the amazing people from the IPython community to build an extension manager for Jupyter widgets, so that it is super easy for IPython users to install and depend on custom widgets. This is a unique opportunity, because a good design of this extension manager could enhance the user experience drastically. Another amazing outcome of the work on the extension manager for Jupyter is that widget dependencies could also be resolved for static notebooks.

Fig. 2: Interactive IPython widgets - Angry Birds notebook from the CS110 course by Doug Blank

Challenges

  • Two-way synchronization (changes in the frontend should update the backend)
  • IPython widgets are currently only shown in running notebooks - static (exported) notebooks are quite common
  • IPython is growing - they recently rebranded to Jupyter to show that they are agnostic to the actual kernel. So, supporting other languages like R, Ruby or Scala would be an upcoming problem.
  • Resizable widgets

Resources

  • IPEP23
  • Discussion about the BioJS - iPython integration on GitHub

Mentors

Tim Ruffles (for BioJS) and Doug Blank (for IPython/Jupyter)