PythonAnyWhere – Well, that’s a long story 🙂 There have been a couple of turns along the way…
In 2005 a couple of friends and I decided to start a company to create a new kind of spreadsheet. We felt that Excel spreadsheets became unmanageable at scale, and a better solution for many use cases would be to create something that integrated a programming language more closely. There definitely seemed to be a market for it, especially in the financial world. We looked at the programming languages available, and Python stood out because it was very powerful, but also easy to learn. The existence of numerical libraries like NumPy/SciPy was also a huge plus point.
So we built our spreadsheet, a desktop application called Resolver One with Python deeply integrated, and released it in 2008. Unfortunately that coincided with a downturn in our target market of finance, and additionally we discovered that although many people were very keen on the product, there just weren’t enough of them to run a viable business based on it, especially under the desktop “buy a license and use it forever” kind of business model. Over the following years we tried moving into alternative markets, and tried different approaches to selling it, but eventually we decided we needed to pivot to a different business, based on the knowledge we’d built up while creating Resolver One.
Our first pivot was simply to take the idea of Resolver One, and turn it into a cloud-based application. This was codenamed “Project Dirigible”, and went live in 2010. It was a highly-programmable spreadsheet, displayed in a web browser. One of the most interesting things about it was that you could code the whole recalculation loop in Python — a default empty spreadsheet would contain code that looked something like this:
…so if you wanted to add your own functions, you could just def them above the code, and if you wanted to do something like goal-seeking, you could just put a while loop around the call to therecalculate_formulae function. You can see (a slightly cut-down version of) Dirigible’s source code here:<https://github.com/pythonanywhere/dirigible-spreadsheet>
Dirigible was an excellent product; you could run complex analysis with a spreadsheet-like interface, but you could also (for example) spread calculations over a cluster of servers by calling one spreadsheet from another, kind of like a function call, running multiple spreadsheets in parallel. And it started getting users, but again, not enough to keep the business going.
So we sat down and looked at how people were using it. We discovered that for many users, the spreadsheet itself was an irrelevance. What they wanted was an easy way to run a pre-configured Python distribution from their browser, without setting stuff up, configuring and maintaining machines, and so on.
We pivoted again, rapidly adjusted the code we had, and created PythonAnywhere. We took a very user-centric attitude for development, keeping up conversations with as many users as possible, implementing the features they asked for (weighted by votes) — a hosted database, websites, cron-style scheduled tasks, and so on. And that’s what has taken us to where we are today.
Right now, there are four people in the company including myself. We’re based in Clerkenwell, in London (just up the road from the “Silicon Roundabout” area around Old Street which is London’s tech hub). We have about 130,000 users, ranging from hobbyists playing around with ideas to data analysts, commercial websites, and startups. Between them they’ve created about 50,000 websites, and started over 2 million in-browser consoles. We provide the “Try Python now” in-browser console on Python.org, and also a popular “Try IPython” page for people who want to try it out as an alternative Python command-line.
PythonAnywhere- That’s hard for us to say. We provide a platform, and our users decide how to use it. Data scientists tend to know more about what they’re doing than website creators, so they tend to talk to us less…
It’s hard for teachers to get all of their students set up with a working Python environment. One person who does training for a living told us that in a five-day Python course, he can spend the first day simply getting Python and all of the appropriate packages installed on people’s laptops. Django Girls have a special multi-hour “install session” the evening before each of their one-day courses just to get enough basic stuff installed to do their web development tutorial.
So having a site where teachers and trainers can just tell their students to sign up, and then know that everyone has a working development environment in a known state is a huge plus.
We also support console sharing; if you’re working in an in-browser Python console and have a question about something you’re seeing, and your teacher can’t easily come and look over your shoulder, it’s useful to be able to share the console with them so that they can see it in their own browser, and help you out.
Recently, we’ve started specifically adding extra features for teachers and students — for example, a student can designate another user as their teacher, which gives the teacher access to all of their consoles and their files, so that they can — for example — help out with problems, collect homework assignments, and that kind of thing. More features along those lines are coming.
Finally (and perhaps less relevantly for your readers) people who are teaching website development love the way that it’s easy to deploy a website on PythonAnywhere. A webdev tutorial that ends with a website running on someone’s laptop is inherently unsatisfactory. If it’s a website, it should be online! But teaching a beginner web developer how to configure Apache/nginx, mod_wsgi/uWSGI, and how to secure a machine in the cloud, and so on, is a huge deal and better avoided if possible.
In terms of numbers, it’s hard to say how many people are using us for education, because we offer cut-down free accounts and some courses just use them (we can sometimes spot those when a bunch of people sign up for free accounts with email addresses on the same .edu domain, but often we just can’t tell). But we do know that there are about 2,000 students using our new education features, and it’s growing about 25% month-on-month.
PythonAnywhere- Absolutely — Jupyter is in private beta at the moment. If you’d like me to add you, just let me know the name of a PythonAnywhere account.
PythonAnywhere- Well, firstly you don’t have to do the installs yourself 🙂 Installing Python and its dependencies is a bit of a pain. Perhaps more importantly, maintaining everything is a huge pain. Security fixes are constantly being made, and you have to keep up-to-date with them to avoid getting hacked.
Additionally, there’s server size. We run on extra-large Amazon instances, and you can pay for as much or as little CPU seconds a day as you want, which makes it easier to scale up and down.
PythonAnywhere- We’re using Docker internally for a subset of our in-browser consoles, and are gradually rolling it out to more of them as we discover bottlenecks and errors in our own code that uses it.
It’s an excellent way of sandboxing executable code; we’re using it to replace the sandboxing code we’d written ourselves, and it seems to be superior. We think that in the future we may well move to a model where every console, every Jupyterhub kernel, every scheduled task, and every website worker process on PythonAnywhere runs in its own Docker container.
We are, however, also tracking alternatives with great interest. Docker is getting quite large, and adding features that we don’t need (possibly at the expense of performance or even security). rkt from CoreOS looks like it might be worth considering as an alternative at some point.