CoCalc: Collaborative Calculation in the Cloud

Overview

logo CoCalc

Collaborative Calculation and Data Science

CoCalc is a virtual online workspace for calculations, research, collaboration and authoring documents. This includes working with the full scientific Python stack, SageMath, Julia, R Statistics, Octave, and many more. It also offers capabilities to author documents in LaTeX, R/knitr or Markdown, storing and organizing files, a web-based Linux Terminal, communication tools like a chatrooms, course management and more. It is the best choice for teaching remote scientific courses.

Website

Install CoCalc on your server or computer

You can easily use CoCalc on your own computer for free by running a Docker image.

History

CoCalc was formerly called SageMathCloud. It started to offer way more than just SageMath and hence outgrew itself. The name was coined in fall 2016 and changed around spring 2017.

Contributors

Current very active contributors

  • Harald Schilly
  • Hal Snyder
  • William Stein

Past contributors

  • Travis Scholl
  • John Jeng
  • Greg Bard
  • Rob Beezer
  • Keith Clawson
  • Tim Clemans
  • Andy Huchala
  • Jon Lee
  • Simon Luu
  • Nicholas Ruhland
  • Todd Zimmerman

... and many others: See https://github.com/sagemathinc/cocalc/graphs/contributors

Copyright/License

The copyright of CoCalc is owned by SageMath, Inc., and the source code here is released under the GNU Affero General Public License version 3+ subject to the "Commons Clause" License Condition v1.0.

See the included file LICENSE.md and Commons Clause.

None of the frontend or server dependencies of CoCalc are themselves GPL licensed; they all have non-viral liberal licenses. If want to host your own CoCalc at a company, and need a different AGPL-free license, please contact [email protected].

To clarify the above in relation to the "commons clause":

  • you can setup CoCalc at your own educational institution for teaching and research
  • any kind of work you do on CoCalc itself is not impacted
  • if you are unsure about whether your use of CoCalc is not allowed by "commons clause", do not hesitate to email us at [email protected].

Trademark

"CoCalc" is a registered trademark of SageMath, Inc.

Development

The scripts here might be helpful.  We do all of our development of CoCalc on https://cocalc.com itself.

Acknowledgements

Browserstack

We are grateful to BrowserStack for providing infrastructure to test CoCalc.

Google

We thank Google for donating over $150K in cloud credits since 2014 to support this project.

Comments
  • Bump ws from 6.1.4 to 6.2.2 in /src/smc-project

    Bump ws from 6.1.4 to 6.2.2 in /src/smc-project

    ⚠️ Dependabot is rebasing this PR ⚠️

    Rebasing might not happen immediately, so don't worry if this takes some time.

    Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


    Bumps ws from 6.1.4 to 6.2.2.

    Release notes

    Sourced from ws's releases.

    6.2.2

    Bug fixes

    • Backported 00c425ec to the 6.x release line (78c676d2).

    6.2.1

    Bug fixes

    • Fixed a bug that, under certain circumstances, prevented the close timer from being set (aa1dcd5).

    6.2.0

    Features

    • Added ability to follow redirects (#1490).

    Bug fixes

    • The opening handshake is now aborted if the Sec-WebSocket-Key header field value is invalid (160af45b).
    Commits
    • 9bdb580 [dist] 6.2.2
    • 78c676d [security] Fix ReDoS vulnerability
    • d57db27 [dist] 6.2.1
    • 40734d8 [minor] Add missing option in JSDoc comment
    • 0556f31 [doc] Add TOC to ws.md (#1539)
    • aa1dcd5 [fix] Make WebSocket#close() set the close timer immediately
    • 297f56d [minor] Remove unneeded if statement
    • bcab373 [test] Increase code coverage
    • 3a5a20a Revert "[ci] Cache dependencies"
    • 9a89e5d [ci] Cache dependencies
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 91
  • build(deps): bump three from 0.78.0 to 0.125.0 in /src/smc-webapp

    build(deps): bump three from 0.78.0 to 0.125.0 in /src/smc-webapp

    ⚠️ Dependabot is rebasing this PR ⚠️

    Rebasing might not happen immediately, so don't worry if this takes some time.

    Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


    Bumps three from 0.78.0 to 0.125.0.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 91
  • webapp changes for custom software images

    webapp changes for custom software images

    Description

    This will contain front-end modifications for custom software environments. So far

    • show the name of the chosen image

    Testing Steps

    Relevant Issues

    Checklist:

    • [ ] No debugging console.log messages.
    • [ ] All new code is actually used.
    • [ ] Non-obvious code has some sort of comments.

    Front end:

    • [ ] Restart at least one project and check its ~/.smc/local_hub/local_hub.log
    • [ ] Completely restart Webpack with ./w in /src
    • [ ] Completely restart the hub by killing and restarting ./start_hub.py in /src/dev/project
    • [x] Screenshots if relevant.

    in project settings, explaining which features are available

    default Screenshot from 2019-04-13 12-24-39

    old image, from a year ago Screenshot from 2019-04-13 12-26-20

    custom software, in that case it is just for a specific python library Screenshot from 2019-04-13 12-23-35

    PR-work in progress 
    opened by haraldschilly 52
  • Jupyter explicit kernel

    Jupyter explicit kernel

    Description

    Jupyter notebooks without a kernel or an unknown one are a source of confusion. This patch presents a clear selection dialog with some explanations about what a kernel actually is to the user.

    Reference: there are two situations the dialog shows up. either user requested, or when opening and the kernel is "bad". here is a side-by-side view of running this in two instances. The dialog only closes when a kernel is set by itself, when it wasn't opened by the user in the first place.

    Testing Steps

    important: switch to experimental image to see the suggestions.

    1. existing notebook with known kernel → this doesn't show up
    2. click on kernel info at the top right → kernel "change" dialog shows up
    3. open a new ipynb file → dialog asks what to do (slightly different from above)
    4. an unknown kernel can be created like that:
    ~$ cat <<EOF > unknown-7.ipynb
    {
     "cells": [ ],
     "metadata": {
      "kernelspec": {
       "name": "pythonXY"
      }
     },
     "nbformat": 4,
     "nbformat_minor": 0
    }
    EOF
    
    ~$ open unknown-7.ipynb
    

    Relevant Issues

    I didn't check

    Checklist:

    • [x] No debugging console.log messages.
    • [ ] All new code is actually used.
    • [ ] Non-obvious code has some sort of comments.

    Front end:

    • [x] Restart at least one project and check its ~/.smc/local_hub/local_hub.log
    • [x] Completely restart Webpack with ./w in /src
    • [ ] Screenshots if relevant.

    Back end:

    • [x] it touches the "project"!
    PR-needs review 
    opened by haraldschilly 44
  • Course grading dialog

    Course grading dialog

    First step towards "assisted" grading. The most fundamental idea is to assign points to files (later, also automatically via some magic™) . Everything syncs as usual, which is pretty neat.

    The most important aspect to review is the structure of the course file. It's modeled closely how grades are done. But additionally, there is a mapping from each file path in the collected files of the respective student to an integer (the points), and defaults to zero → see course/actions::set_points.

    PR-needs work needs-help 
    opened by haraldschilly 44
  • jupyter realtime sync is not sufficiently robust

    jupyter realtime sync is not sufficiently robust

    • On Firefox we disabled Jupyter entirely, temporarily (see #1537).

    • We have had regular reports from users of issues over the years, and no amount of rewrites or subtle bug fixes has 100% eliminated these.

    • Upgrading to new versions of Jupyter is terrifying since the API changes, so things randomly break (for our very brittle use of Jupyter).

    • We are massively abusing and monkey patching Jupyter as it is to get sync to work.

    The only viable solution I can think of is to completely rewrite Jupyter from scratch, except the backend kernel functionality. Thus this issue is labeled "insanely hard".

    I-bug A-jupyter M-high E-insanely-hard 
    opened by williamstein 35
  • Install cling jupyter kernel for interactive C++

    Install cling jupyter kernel for interactive C++

    cling is a C++ interpreter based on clang/llvm. Would it be possible to install it on cocalc, together with its kernel? I'll be using it for teaching C++ this coming semester. We will be using Jupyter locally on the university's machines, but having a backup solution on cocalc would be helpful!

    @SylvainCorlay implemented a Jupyter kernel implemented in C++ which is more robust than the one provided by cling. And will soon enable widgets and plots!

    Installation instructions with conda:

    conda install cling xeus-cling notebook -c QuantStack -c conda-forge
    

    One should be able to install the kernel in another Jupyter deployment, but I haven't tried that.

    A-install 
    opened by nthiery 30
  • support running a vs-code server in a CoCalc project

    support running a vs-code server in a CoCalc project

    Just like

    +New --> Jupyter Classic Server, and +New --> JupyterLab server 
    

    are 1-click ways to work with a CoCalc project through the Jupyter class and JupyterLab interfaces, we should also have a 1-click way to work with a CoCalc through VS Code. This is technically possible, and probably pretty easy, due to the open source MIT licensed code-server project. Here's an example of how that might feel:

    https://github.com/betatim/vscode-binder/tree/master

    NOTE that evidently a possible shortcoming of code-server is Microsoft's licensing for extensions, which "prohibits use with any non Microsoft product." Since probably any interesting use of CoCalc + VS Code would involve extensions -- e.g., LEAN or Jupyter/Python -- this might be a big problem. Or maybe not. I don't know.

    I-enhancement I-feature request A-install 
    opened by williamstein 26
  • sagews: sage 9.0 / python3 compatibility

    sagews: sage 9.0 / python3 compatibility

    Description

    This is for making smc_sagews compatible with Python 2&3 (Sage 9.0).

    My strategy is:

    1. make this work with sage 9 / py3 – but be intelligent to not break too much, aim for dual compatibility
    2. once it works, fix sage 8.9 running py2. having a diff of all changes at hand here will help to iron out the remaining problems.
    3. of course, check again for sage 9

    Testing Steps

    Relevant Issues

    Checklist:

    • [ ] Run eslint on new and edited files
    • [ ] All new code is actually used.
    • [ ] Non-obvious code has some sort of comments.

    Front end:

    • [ ] Restart at least one project and check its ~/.smc/local_hub/local_hub.log
    • [ ] Completely restart Webpack with ./w in /src
    • [ ] Completely restart the hub by killing and restarting ./start_hub.py in /src/dev/project
    • [ ] Screenshots if relevant.
    PR-needs review 
    opened by haraldschilly 24
  • about colors in surface plots

    about colors in surface plots

    here is the first step: distinguish 2 cases

    then one need to know what format should be send to the next step in the toolchain

    could you remind me where to find that ?

    PR-needs review 
    opened by fchapoton 22
  • Install some common Julia packages globally

    Install some common Julia packages globally

    Currently many of commonly used Julia packages are missing, and have to be installed on per-project basis. That makes it impossible to use them in free projects without internet access.

    Suggestion: Install PyPlot and Gadfly for plotting, and SymPy for symbolic math.

    PyPlot:

    Pkg.add("PyPlot")
    

    When done from a notebook, restart the kernel before proceeding!

    To test:

    using PyPlot
    ion()
    plot([1,2,3,4],[3,1,4,2],"-o")
    

    Gadfly:

    Pkg.add("Cairo")
    Pkg.add("Fontconfig")
    Pkg.add("Gadfly")
    

    When done form a notebook, restart the kernel before proceeding!

    To test:

    using Gadfly
    plot(x=[1,2,3,4],y=[3,1,4,2],Geom.point(),Geom.line())
    

    SymPy

    Pkg.add("SymPy")
    

    Test

    using SymPy
    x = symbol("x")
    factor(x^2 - 3x + 2)
    

    Number of other useful packages will be installed as dependencies.

    I-software request 
    opened by lahvak 22
  • software images: make 22.04 more prominent, but not yet the default

    software images: make 22.04 more prominent, but not yet the default

    Description

    Before merging #6284 it makes sense to introduce a stable version of 22.04, which is not the default yet. Also, this adds recent snapshots.

    Checklist:

    • [ ] Testing instructions are provided, if not obvious
    • [ ] Release instructions are provided, if not obvious
    PR-needs review 
    opened by haraldschilly 0
  • is our realtime sync implementation for strings impacted by an issue with surrogate pairs in diff match patch?

    is our realtime sync implementation for strings impacted by an issue with surrogate pairs in diff match patch?

    "Surrogate pairs are strings that contain a supplemental code point (especially emojis) that cause diff indices to be offset. It can either mess up the text or cause DMP to error (within toDelta/fromDelta)." See

    • https://github.com/google/diff-match-patch/issues/10
    • https://github.com/google/diff-match-patch/issues/59
    • https://github.com/google/diff-match-patch/issues/68

    I don't know whether, or to what extent, this might impact cocalc. I've so far never been aware of such an issue. Maybe (?) when CoCalc hits it, an error is thrown, and our diff algorithm generates a very large diff that is just "replace the entire document by this other one", so for us things are not efficient, but not broken either. I don't know. It also might be very unlikely to hit in the context of Jupyter notebooks, where most text is ascii, and markdown where we usually write emojis as :thing: instead of unicode.

    In any case, I'll look into this and report back here. Since the original author of DMP doesn't maintain it anymore, it could also make sense to try to modernize the library and make a new independent supported version, which contains fixes for the above issue. As some motivation, the @cocalc/util package has a copy of dmp with at least one important bugfix (from my point of view). That's in https://github.com/sagemathinc/cocalc/blob/master/src/packages/util/dmp.js

    NOTE: the file dmp.js had a GPL header applied to it by some automated script that @haraldschilly wrote. However, I just fixed that and reverted the license header back to the original Apache V2 license.

    A-sync E-unclear 
    opened by williamstein 0
  • undo when editing a past chat  -- not implemented (and possibly crashes)

    undo when editing a past chat -- not implemented (and possibly crashes)

    1. Create a chat message
    2. Send it
    3. Double click on it
    4. Edit, then hit control/cmd+z to undo
    5. See this
    image

    Undo in general might be difficult to implement in exactly this setting. However, it shouldn't show a crash warning!

    I-bug A-sage chat 
    opened by williamstein 1
  • jupyter: remove the Print preview" option">

    jupyter: remove the "File --> Print preview" option

    It doesn't really work and/or is slow and isn't really meaningful since there are so many very different ways to print anyways. Instead use Save and Download As.

    I-bug A-jupyter 
    opened by williamstein 0
Owner
SageMath, Inc.
The company behind "CoCalc", a service to collaboratively use open source math software, Jupyter, LaTeX, and terminals in your browser
SageMath, Inc.
nptsne is a numpy compatible python binary package that offers a number of APIs for fast tSNE calculation.

nptsne nptsne is a numpy compatible python binary package that offers a number of APIs for fast tSNE calculation and HSNE modelling. For more detail s

Biomedical Visual Analytics Unit LUMC - TU Delft 29 Jul 5, 2022
nptsne is a numpy compatible python binary package that offers a number of APIs for fast tSNE calculation.

nptsne nptsne is a numpy compatible python binary package that offers a number of APIs for fast tSNE calculation and HSNE modelling. For more detail s

Biomedical Visual Analytics Unit LUMC - TU Delft 24 Feb 3, 2021
FID calculation with proper image resizing and quantization steps

clean-fid: Fixing Inconsistencies in FID Project | Paper The FID calculation involves many steps that can produce inconsistencies in the final metric.

Gaurav Parmar 606 Jan 6, 2023
Python Library for Secp256k1 Bitcoin curve to do fast ECC calculation

secp256k1 Python Library for Secp256k1 Bitcoin curve to do fast ECC calculation Example Usage import secp256k1 as ice print('[C]',privatekey_to_addres

iceland 49 Jan 1, 2023
A course-planning, course-map rendering and GPA-calculation web service, designed for the SFU (Simon Fraser University) student.

SFU Course Planner What is the overall goal of the project (i.e. what does it do, or what problem is it solving)? As the title suggests, this project

Ash Peng 1 Oct 21, 2021
Regression Metrics Calculation Made easy

Regression Metrics Mean Absolute Error Mean Square Error Root Mean Square Error Root Mean Square Logarithmic Error Root Mean Square Logarithmic Error

Ashish Patel 12 Jan 2, 2023
Regression Metrics Calculation Made easy for tensorflow2 and scikit-learn

Regression Metrics Installation To install the package from the PyPi repository you can execute the following command: pip install regressionmetrics I

Ashish Patel 11 Dec 16, 2022
Two fast AUC calculation implementations for python

fastauc Two fast AUC calculation implementations for python: python-based is approximately 5X faster than the default sklearn.metrics.roc_auc_score()

Vsevolod Kompantsev 26 Dec 11, 2022
This is a tool for speculation of ancestral allel, calculation of sfs and drawing its bar plot.

superSFS This is a tool for speculation of ancestral allel, calculation of sfs and drawing its bar plot. It is easy-to-use and runing fast. What you s

null 3 Dec 16, 2022
Finite-temperature variational Monte Carlo calculation of uniform electron gas using neural canonical transformation.

CoulombGas This code implements the neural canonical transformation approach to the thermodynamic properties of uniform electron gas. Building on JAX,

FermiFlow 9 Mar 3, 2022
A web-based analysis toolkit for the System Usability Scale providing calculation, plotting, interpretation and contextualization utility

System Usability Scale Analysis Toolkit The System Usability Scale (SUS) Analysis Toolkit is a web-based python application that provides a compilatio

Jonas Blattgerste 3 Oct 27, 2022
torchsummaryDynamic: support real FLOPs calculation of dynamic network or user-custom PyTorch ops

torchsummaryDynamic Improved tool of torchsummaryX. torchsummaryDynamic support real FLOPs calculation of dynamic network or user-custom PyTorch ops.

Bohong Chen 1 Jan 7, 2022
Supporting information (calculation outputs, structures)

Supporting information (calculation outputs, structures)

Eric Berquist 2 Feb 2, 2022
Data collection, enhancement, and metrics calculation.

l3_data_collection Data collection, enhancement, and metrics calculation. Summary Repository containing code for QuantDAO's JDT data collection task.

Ruiwyn 3 Dec 23, 2022
Extract gene length based on featureCount calculation gene nonredundant exon length method.

Extract gene length based on featureCount calculation gene nonredundant exon length method.

laojunjun 12 Nov 21, 2022
IPV4 network calculation project in Python

Curso de Python 3 do Básico ao Avançado Desafio: Calculando redes IPV4 Criar um programa que obtem um numero de IP com o prefixo da mascara de rede. O

Diego Guedes 3 Jan 21, 2022
Apache Libcloud is a Python library which hides differences between different cloud provider APIs and allows you to manage different cloud resources through a unified and easy to use API

Apache Libcloud - a unified interface for the cloud Apache Libcloud is a Python library which hides differences between different cloud provider APIs

The Apache Software Foundation 1.9k Dec 25, 2022
💻 A fully functional local AWS cloud stack. Develop and test your cloud & Serverless apps offline!

LocalStack - A fully functional local AWS cloud stack LocalStack provides an easy-to-use test/mocking framework for developing Cloud applications. Cur

LocalStack 45.3k Jan 2, 2023
Cloud-native, data onboarding architecture for the Google Cloud Public Datasets program

Public Datasets Pipelines Cloud-native, data pipeline architecture for onboarding datasets to the Google Cloud Public Datasets Program. Overview Requi

Google Cloud Platform 109 Dec 30, 2022
Point Cloud Denoising input segmentation output raw point-cloud valid/clear fog rain de-noised Abstract Lidar sensors are frequently used in environme

Point Cloud Denoising input segmentation output raw point-cloud valid/clear fog rain de-noised Abstract Lidar sensors are frequently used in environme

null 75 Nov 24, 2022