Skip to content

GSoC 2018

Harald Schilly edited this page Feb 19, 2018 · 15 revisions

GSoC 2018: CoCalc Project Ideas

ATTN: CoCalc applied for GSoC, but was not selected. You can still contact us in case you're interested in general about contributing.

CoCalc is an online web-service. It serves various open-source software applications for mathematical and scientific computing in managed projects, provides documents with real-time collaboration support (SageMath, Jupyter, LaTeX, Markdown, ...), course management utilities, chat, and much more.

Make an account here and check it out!

All GSoC projects require knowledge about modern web-technologies and its underlying technological stack.

In particular, the CoCalc is comprised of:

  • backend: Linux, Node.js, Python 3, PostgreSQL
  • frontend: HTML/CSS, React.js, Webpack, CoffeeScript, a bit of jQuery, ...
  • userland: Scientific Python stack, SageMath, Jupyter, R, hundreds of libraries, ...

Do these buzzwords sound familiar, are you excited to work this summer with us on a project, that will have immediate impact on all our users? We hope so!

Our source code: https://github.com/sagemathinc/cocalc

Below are our project ideas. Combined with the template, they should guide you in writing your application. We are equally happy with a well thought through idea of your own or a detailed write up of one of these projects.

Contact us or Harald while writing the application, such that we can assist you.

For more ideas: check out our open tickets.

3d Graphics

Mentor: William Stein

Display of 3d graphics in CoCalc could be improved in many ways.

If you're interested in this project, stop now, create a Sage Worksheet in CoCalc, and click on the "Plot" button at the top, and plot some 3d plots.

OK, now that you're back, do the same in a Jupyter notebook with the SageMath kernel. It'll suck, because it uses an old Java-based renderer called JMOL by default (instead of THREE.js).

This project: make everything work better, by solving as many of the open CoCalc 3D issues and Sage 3D issues as you can, and anything else related that you can think of.

Data Editor

Scientific work is increasingly data-centric. So far, CoCalc only supports text documents and interactive worksheets. The goal of this project is to help scientists at their daily work for entering data, modify existing data tables, and cleaning up datasets.

  • The basic structure is to write an interactive real-time synchronized editor for typed columnar data.
  • This should be based on top of the already existing infrastructure of the CoCalc webapp.
  • Regrading storage, as a first approximation a file-based approach is sufficient, e.g. CSV, HDF5 or SQLITE.
  • Once a minimal working prototype is functional, extend this by UI elements to filter, aggregate data, show plots of the data, convert it, annotate entries (rows), etc.

difficulty: medium

skills: python (scientific stack), coffeescript, react.js

Interactive Notebook Extensions

CoCalc has its own Jupyter Notebook implementation based on React.js. The goal of this summer project is to add small extensions to it. For example, the plan for the summer could be to start with a simple one and set the goal to complete with the first evaluation. Then, depending on progress and satisfaction, either one more complex project or two smaller ones until the end of the summer.

  • Variable inspection: introspect the current value of a variable, see which ones are currently set in the kernel, list their types and a compact representation of their value, etc.
  • Improve interactive help
  • Feedback for errors, such that there are clues about what to do with certain exceptions
  • Widget support
  • Presentation mode (change the front-end to render content suitable for a presentation, still with interactive cells, etc.)
  • Support exercises for students, with grading, etc.
  • Frozen cells – they cannot be modified/evaluated any more
  • Your ideas – come up with ideas of your own, like filtering cells based on a search string ... there are endless possibilities.

difficulty: medium, depends on the exact project

skills: react.js, understanding of html, possibly Python

Universal Jupyter Kernel

The goal of this project is to capture the unique advantages of Sage worksheets (.sagews files) and enable the same capabilities in CoCalc Jupyter notebooks. The project can be done in incremental steps and evaluation can be done as increments are completed. Students will learn inner workings of Jupyter client, back-end, and kernel.

  • run multiple instances of any kernel
  • connect to several different kernels in the same notebook
  • move data between kernels
  • "single-document" presentation, like Sage worksheets editing of cells

difficulty: medium

skills: python (scientific stack), coffeescript, react.js

Chat Functionality

Mentor: John Jeng

Chat in CoCalc is fairly basic compared to something like Slack or Messenger (though we support Markdown and in-line LaTeX). This project involves upgrading our chat in various ways. The following list is non-exhaustive and we are open to suggestions as always.

  • More emoji support 😀
  • Support Mentions ie. using @user-name
  • Make adjustable notifications
  • Add a history that loads only when you scroll far enough back

Webpack Tooling

Mentor: John Jeng

Webpack is an amazing tool that we don't utilize enough. We recently paid off some technical debt by upgrading from Webpack 1.X to 3.X. Many features that were more difficult should theoretically be easier. This project involves improving our usage in one of the following ways:

  • Code splitting: Load parts of the webapp at a time so that time to first interactivity is lower.
  • Code Hot Reloading: Make changes happen automatically without having to refresh the test window.
  • Optimize Rebuild time

Skills: Webpack, Dynamic imports, Webpack Hot Module Replacement,

Interactive Documentation

Mentor: Harald Schilly

The overall goal is to transform existing documentation for interactive learning and exploration. For example, write code that takes a standardized file format for documentation (sphinx, ...) and instead of generating a static html or pdf page, generate an interactive worksheet. The goal is to help students and teachers to familiarize with the content much more "hands on" than just reading. Part of this is also to survey existing solutions and how they can be bundled together to get a suitable result.

Skills: Python, Node.js, probably some html/css, and understanding data formats

Clone this wiki locally