• Stars
    star
    186
  • Rank 207,316 (Top 5 %)
  • Language
    Python
  • License
    Other
  • Created over 11 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

zero configuration Python/Unix web based teaching env

JiffyLab

JiffyLab is a project to provide an entirely web based environment for the instruction, or lightweight use of, Python and UNIX shell environment with zero-configuration of the user's machine.

Currently in early development status

The Problem

Python is a wonderful first language, but sometimes introducing people to Python is bogged down by making sure that everyone has a usable development environment. This can often set a tone of frustration for beginners, as well as completely drain instructor and assistant's time, instead of letting everyone "dive in".

There are other advantages to having a standardized environment:

  • If the instructor is projecting the same thing as what the student sees, the student will be less likely to be thrown off by inconsequential details such as differences in the shell prompt (> vs $ etc), different syntax highlighting colors, or the use of some tool or feature not installed on the student's machine.
  • When all students are using the same exact setup, they are more likely to be capable of helping their neighbor, because if they got it working on their screen, they can probably get it working on their neighbor's - peers and instructors can more effectively visually "diff" what might be different.
  • Even if the setup of a student machine goes smoothly at a technical level, it can still take time, especially if a significant number of material needs to be downloaded over slow links, or requires significant build time.

Trade-offs

Messing around with tools and your machine's setup is of course part of being a developer - learning how to manage your system and Python 'PATH', learning an editor, virtualenvs, pip etc all need to happen. But not in your first hours as a new developer.

Another reason to have students work through the challenge of getting a working dev environment on their own machines is so that they can continue to teach themselves and learn on their own once past the introduction. This is very important, and should be built into any worthwhile instruction, it just doesn't need to happen at the beginning. Once students have learned some material, they will have much more context to understand what it is they are setting up, and will potentially have a greater motivation for getting it all working. So in the end I believe this trade-off is a bit of a red herring, as it is not about "either or", but "which comes first".

Finally there is some advantage to working in a "tunneled" environment if the primary way you may interact with tools or data is remotely on a server. When you have only learned with the aid of local GUI tools on hand, it can be a very difficult transition to doing things remotely.

Short Screencast

Direct link if embedding disabled

Quickstart

JiffyLab uses Docker which provides each student a sandboxed environment through the use of linux containers (think lightweight, process level virtual machines). Note that this technology is Linux specific, so does NOT run on Mac OS X. You can run this quite effectively inside a Linux virtual machine using vagrant (in fact, this project was developed on a Mac). A simple Flask app runs on the same machine as Docker and uses the Docker remote API to create or restart containers as needed.

Once you have a linux machine setup (see below for more details on Vagrant), you can execute the steps in the linux-setup.sh file. This will install Docker, and some python tools, pull the base Docker images needed, and start the webapp. You can then connect on port 80 to that machine. It is recommended you not run this on a server also used for any "Very Important Things", but instead run it on some sort of VM on its own.

Running on a Mac with Vagrant

Note - running this on a cloud based vagrant provider ends up getting set up much faster, usually due to the excellent speeds on cloud providers.

You will need Vagrant and Virtualbox (make sure you are using the latest version that is known to support vagrant, sometimes virtualbox breaks vagrant).

cd into the jiffylab folder and just run vagrant up in a terminal. Note that with the 'Ubuntu Raring' image used, I found that Vagrant would hang on first boot. If you are stuck on "waiting for VM to boot" for more than several minutes, ctrl-C, then do a vagrant halt followed by another vagrant up.

If you had this stalling issue, vagrant may not have provisioned properly, so you will have to run the linux-setup script, which should be found at /vagrant/linux-setup.sh

Running on Rackspace with Vagrant

You will need a an account and API key on Rackspace. You will also need to install the vagrant rackspace plugin:

$ vagrant plugin install vagrant-rackspace
$ vagrant box add dummy https://github.com/mitchellh/vagrant-rackspace/raw/master/dummy.box

You will need to set some environment variables for Rackspace - an easy way to do this is to follow the directions in cloud-credentials.sh, fill out your information, then:

$ source cloud-credentials.sh
$ vagrant up --provider=rackspace

After server building and provisioning, you should be able to access your instance on the IP address listed in your Rackspace dashboard.

Running on DigitalOcean with Vagrant

Install the DigitalOcean vagrant provider and dummy box:

$vagrant plugin install vagrant-digitalocean
$vagrant box add dummy https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box

# see notes on DigitalOcean plugin readme if you get errors

Sign up if you haven't already, then grab your client id and api key from DigitalOcean.

Plug these into cloud-credentials.sh, then:

$ source cloud-credentials.sh
$ vagrant up --provider=digital_ocean

Similar or related projects

  • wakari A really well done and far more complete version of this concept, using the ACE editor, OpenVZ linux containers instead of Docker, and the GateOne shell. The only knocks against it is that it is commercial (with a free EDU option) and not open source, but hey, well done.
  • notebookcloud is an app_engine app that will manage the spin up of EC2 instances. Requires you to upload your AWS credentials.
  • IPython-hydra a set of scripts to launch IPython notebook processes under dynamically created users.

This project still has plenty of rough edges, check out the current issues, submit a new one, feedback welcome.

More Repositories

1

pyosc

Python library for OSC (github clone/mirror)
Python
92
star
2

django-live

Django in the realtime playground
JavaScript
25
star
3

IPyApp

Fully Standalone IPython Notebook desktop application
JavaScript
19
star
4

Lumos

Lumos is a Python library for working with DMX512 lighting control signals sent over ethernet.
Python
18
star
5

BirdFish

A Python library for lighting control
Python
15
star
6

notifyore

A tool for receiving notifications from Convore.com
Python
14
star
7

django-packagemaker

A paster template tool to quickly create a scaffold for reusable django apps
Python
13
star
8

django-tickets

a reusable django app for selling tickets for events. Integrated with django-paypal
Python
10
star
9

curbside

An SMS to multi-user web portal application for SMB
Svelte
8
star
10

diff-coverage

A quick tool for checking the coverage of a patch
Python
7
star
11

promiot

Go
7
star
12

diskutil_completion

Bash shell completion for OS X/Darwin diskutil utility
Python
6
star
13

django-duo-auth

2 factor auth for django using Twilio SMS
Python
5
star
14

node-cloud-function-boiler

boilerplate for nodejs10 runtime and Typescript Google Cloud Functions
Shell
5
star
15

python-iphoto

Python
4
star
16

nbcast

JavaScript
4
star
17

django-modelish

A simple markup and processor to make initial models.py less tedious
Python
3
star
18

everdisq

Disqus comments for Evernote notes
Python
3
star
19

django-ldap-groups

Clone from http://code.google.com/p/django-ldap-groups/ supporting OS X Open Directory
Python
3
star
20

run-py-reload

quickly debug python in cloud run
Shell
2
star
21

enchilada-shop

Django sample/tutorial site that may some day become a mega sample site
Python
2
star
22

pygrowl

a github mirror of python Growl bindings from Growl SDK
Objective-C
2
star
23

addme

An easier way to ask someone to add a project to a service account.
Shell
2
star
24

teensy-crypto-demo

CBOR, ECDH, ChaChaPoly AEAD
C++
2
star
25

go-lutron

minimal golang library for interacting with telnet based Lutron integration protocol (for Caseta)
Go
2
star
26

watchedinstall

A tool to monitor installations on OS X and generate a report/transcript/manifest of those changes
Python
2
star
27

cockroach-cloud-run-sample

Python
1
star
28

midiutil

midi file utilities
Python
1
star
29

vimhome

My vim setup
Vim Script
1
star
30

__Demo-car-start

sample-repo-for-CD
Dockerfile
1
star
31

radwrap

This is a radmind running wrapper script inspired by Greg Neagle's run_radmind.pl and its ancestors
Python
1
star
32

bulk-firestore-experiments

some experiments with bulk operations on Firestore and IoT Core
TypeScript
1
star
33

run-go-plugin

experimental use of golang plugins for Cloud Run reload
Go
1
star
34

imagefoobar

see https://github.com/jdriscoll/django-imagekit/issues/63
Python
1
star
35

django-private-files

Control access to static files with Django
Python
1
star
36

gimme-kube

Get a nice single-node kube box in about a minute
Shell
1
star
37

radutil

Python library and command line tool for managing a radmind server
Python
1
star
38

swc-webapp

Exploratory webapp for bootcamp management
JavaScript
1
star