The test environment for this class is primarily automated using a framework that is provided to us by Udacity called Bonnie.  It is based upon Ubuntu Linux 16.04 for this semester.

You will develop your code in your own environment and when you are ready to test it, you will submit it to Bonnie.  The test harness then runs a series of tests and reports back if you pass or fail individual tests.  We have tried to make the text corresponding to the tests explanatory as to why a given test fails.  We're allowed to return about 10KB of output from your tested code back to you, which means we don't usually return console output from tests that pass and we may truncate the amount of information that is returned for failing tests.  The usual goal is to return you complete console output (up to that limit) for at least one test, even though other tests may fail.

One of your first goals in this class will be to construct your development and test environment.  You have latitude on how you do this.

Possible ways to construct your development environment:

If you are already running on Ubuntu 16.04, then you can simply ensure the necessary packages are installed. If you are running on a different Linux version, Mac OS X or UNIX variant, you should be able to figure out how to install the necessary packages. Please understand, we'll answer questions if we can, but you are responsible for your development environment - we're not experts on every possible configuration (e.g., "Why doesn't this package work on my Raspberry Pi running Kali Linux?" - we're not going to know.  Maybe someone else in the class does.) If you are running on Windows 10 (1607) or newer, you may install the Ubuntu environment.  Note however, that it is (1) a beta; (2) only available in developer mode so far; (3) based on Ubuntu 14.04; and (4) known to be incompatible with the default settings in the project makefile.  You can work around these issues. You can construct a virtual machine image.  This could include: Hyper-V on Windows (Hyper-V does not play well with other hypervisors.  You can get it to work, but it's a much more complex configuration.) Virtual Box on Windows, Mac OS or Linux KVM on Linux ESXi.  If you don't know what this is and don't recognize the term "bare metal hypervisor" then you probably don't want this particular option VMWare Workstation.  Note that this is a paid product but as a Georgia Tech student you get a free license.  Start here: and enter information about Georgia Tech.  For campus pick "Atlanta Main Campus" and then choose "College of Computing" - if you pick CoC from the first dropdown it tells you there is no store (which isn't true). If you take CS-6750 you'll learn all about these HCI failures and how to avoid them... You may use Vagrant to construct your environment: (instructions for using Vagrant) Vagrantfile (this is the configuration file for Vagrant) Most students have found this works well; however, sometimes something goes wrong and the error isn't reported back in which case you end up with an environment that doesn't quite work right.  If that happens, you should destroy the Vagrant image and recreate it - usually that does the trick. Vagrant is probably the least resource intensive environment - the image it gives you has no GUI (use ssh to access it). You may use a cloud environment Google will give you up to $300 in free time when you first sign up. AWS can provide you with EC2 instances for a nominal fee (cheaper than buying a new computer). Georgia Tech has virtual machine resources that you can use, though nobody in class has reported doing this so far: This list is not exhaustive.  There are other, more exotic ways that you could build a working development environment.  Feel free to experiment - and let us know how it goes so we can tell future students what works and what to avoid.

From an Ubuntu 16.04 base you should install the following packages (using sudo apt-get install): build-essential git pkg-config zip unzip software-properties-common python-pip python-dev libgmp-dev gcc-multilib valgrind openmpi-bin openmpi-doc libopenmpi-dev portmap rpcbind libcurl4-openssl-dev bzip2 imagemagick libmagickcore-dev libssl-dev libffi6 libffi-dev llvm

You should also ensure you have the latest version of pip (the python installer package):

pip install --upgrade pip

Finally, install the relevant python packages:

pip install future cryptography pyopenssl ndg-httpsclient pyasn1 nelson

You may need to do this as root (or via elevation using sudo) depending upon your environment.

But in the end, the grading environment will be the docker container, based upon Ubuntu 16.04 configured with the packages that I've listed.  I've found that this environment definitely seems to stress student code in ways that cause it to break.  I suspect some of this is because it's running on a large MP machine with plenty of resources and different behavior.

So feel free to work in an environment that is comfortable for you.  If you want to build and test all of your code in a different environment more comfortable to you, please feel free to do so. When you submit your code to the grader, it will run it, test it, and provide you with feedback. 1 Comment