nrnb / GoogleSummerOfCode

Main documentation site for NRNB GSoC project ideas and resources
114 stars 38 forks source link

jupyter-cytoscape : Adding support in Jupyter notebooks for Cytoscape.js #83

Closed maxkfranz closed 5 years ago

maxkfranz commented 7 years ago

Background

Cytoscape.js is a graph theory (a.k.a. network) library for the web. It supports both visualisation and analysis of relational data.

Jupyter is a tool for creating interactive notebooks on the web. A notebook contains text, blocks of code, and visualisations -- it's kind of like a mashup of Google Docs, Excel, and Codepen/JSFiddle.

Jupyter and Cytoscape.js are both used in scientific research. For example, Cytoscape (the desktop version) has support for Enrichment Map -- a plugin for gene-gene enrichment networks.

Goal

The goal of this project is to create a plugin for Jupyter to add support for Cytoscape.js. This would allow for accessing Cytoscape.js APIs within Jupyter code blocks and it would allow for interactive Cytoscape.js visualisations inside Jupyter visualisation blocks.

Jupyter supports several "kernels", a kernel adds support for a specific programming language to Jupyter so that notebooks may contain code blocks in the language. The Jupyter plugin would support JS, Python, and R --- but only JS and Python would be a part of this GSOC project.

Description

The project has the following steps:

  1. Complete a cytoscape-rpc npm package. This would accept JSON as input to specify commands (functions) to run on a remote instance of Cytoscape.js.
  2. Complete a cytoscape-api npm/Python package. This would just expose a JSON file that specifies the Cytoscape.js API. This could be based on the existing JSON doc specification.
  3. Complete a jupyter-cytoscape plugin for Jupyter.
    1. Add JS support to the plugin. This doesn't necessarily need to use RPC, because it doesn't have to go between languages.
    2. Add Python support to the plugin. This would need to use the RPC and API packages, because only JSON can be sent between Jupyter kernels of different languages. Basically, you would build up objects on the Python side using the JSON api spec such that the objects can be used just as though you were using the native JS objects. To achieve this, you'll need to send JSON commands using RPC for each function call on the objects. Each function would probably return a promise/future, because doing the RPC in Jupyter can be asynchronous.

Skills

JS, HTML, CSS, npm, Webpack, Python (essential) Cytoscape.js, Jupyter (nice to have)

Difficulty level 3

This project is relatively advanced and it will require someone well experienced with both JS and Python.

Public Repository

https://github.com/cytoscape/cytoscape.js

Potential mentors

Max Franz (maxkfranz@gmail.com), Paul Shannon (pshannon@systemsbiology.org)

SubhamRajgaria commented 7 years ago

Hello, I am interested in this project, though I am not familiar with npm and Webpack but am willing to work on it . Could you kindly provide inputs and guide me ? Regards, Subham Rajgaria.

maxkfranz commented 7 years ago

You can start by reading the docs:

SubhamRajgaria commented 7 years ago

Thank you Sir for the material, I will try completing it as soon as possible, I have my exams till the 21st, but I hope I will find enough time. Could you give me 3 to 4 days to complete reading the material?

Regards, Subham Rajgaria, 2nd Year Undergraduate Student, Department of Computer Science and Engineering, IIT Kharagpur. Contact: +91-9830331068 E-mail: subham.rajgaria@gmail.com subraj@iitkgp.ac.in

On Tue, Feb 14, 2017 at 9:04 PM, Max Franz notifications@github.com wrote:

You can start by reading the docs:

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/nrnb/GoogleSummerOfCode/issues/83#issuecomment-279740815, or mute the thread https://github.com/notifications/unsubscribe-auth/ARfES2Mddkh4SlowqCz9mr_to8c64WAQks5rccl2gaJpZM4LkyjH .

paul-shannon commented 7 years ago

Small addition: a prototype jupyter-widget extension for cytoscape.js exists.

See our github repo

Tivcrmn commented 6 years ago

Hello, @maxkfranz, I am a senior student in BUPT from China and also I am a frontend developer. I have done a lot of full-stack project using Vue, Express and MongoDB. And also I have some experience with some data visualization tools such as chart.js and g2. I am so interested in the project and look forward to participate in it. Please give me some suggestions about how to get started with it.Or should I get familiar with the tools used in the project and try to do some demos by myself? Looking forward to your reply!!! Thank you!!!!!

maxkfranz commented 6 years ago

Please see the NRNB instructions on how to write and submit a proposal: http://nrnb.org/gsoc.html

You should familiarise yourself with everything mentioned in the project description -- if you want to write demos to help you learn the tools, that's fine -- and write a proposal for GSOC.