External Access to Computing Resources
Available Linux Systems
So that you have all the resources necessary to complete your assignment work on time we have provided you with 24x7 access to several hundred working Linux systems in the CAT suites in the Ingkarni Wardli and Engineering Maths buildings. You can also use your own systems if you wish but your programs may not work when submitted for assessment. Any failure of your own system or an inability to remotely connect to our systems are usually not grounds for an extension. You always have 24x7 access to the necessary resources on campus.
Common DIY Problems
Most practical work in Computer Science assumes that you are using a CAT suite Linux system and this is the same system used by the automatic test scripts run by the web submission system. If you can reproduce this environment for yourself then you should not have too many surprises when you submit work for assessment. That said, there are a number of issues that can cause your 'working programs' to not work when submitted.
When you use #include <....> in your C or C++ programs there may be differences in what is included between Linux systems and compilers. For example, if your Linux system includes additional files but the CAT suite systems do not, your 'working program' may not even compile when it is submitted. Testing your code on the system your customer expects it to run on is always a very good idea.
Different versions of a compiler can behave differently especially with C++. There are a number of different standards for C++ and different levels of support (or bugs) in each compiler version. In some cases the format of the compiled code can vary from one version to another. For example, GCC compilers from version 5 onwards changed the format of the standard library binaries. Code compiled with earlier versions of the compiler may not work with later versions or vice versa. The assignments in Computer Systems provide precompiled code so using a different compiler from the one in the CAT suites may not work.
Random Memory Allocation
A security feature of many modern Linux systems is to map code into randomly chosen memory locations each time a program runs. This aims to make buffer overflow security hacks more difficult to achieve. If you have a C or C++ program with a memory allocation / free bug then it may appear to be 'working perfectly' on your system by accident but sometimes fail to run when submitted for assessment. This just means that your program has a serious bug that you need to fix. This problem can arise using the docker images we provide because unlike the CAT suite systems the docker images do not do memory randomisation.
Another common problem arises if you compile and run your programs on Windows systems. The usual end of line marker in a text file is the newline character "\n", that is character code 10. On a Windows system the end of line marker is a carriage return followed by a newline "\r\n", that is character code 13 followed by character code 10. Not accounting for the differences can cause lots of confusion because if you display a file on your screen you cannot see these hidden characters. It is also easy to accidentally change them if you cut-paste text between applications on Windows.
You have a wide range of options available to you if you want to use your own systems but you do so at your own risk. The best way to avoid problems is to start early and remember to make frequent commits to svn. Then if you have a systems problem you have time to come on campus to complete your work and you always have a recent backup of your work in svn.
From home you can usually use secure shell (ssh) to login to uss.cs.adelaide.edu.au and you can run everything using the command line. This server is running the same Linux system as is used in the CAT suites. The connection to the server is encrypted so that no one else can see what you are doing. As long as your are comfortable working on the command line, including using a command line text editor, you should be able to do most assignment work in this way. You can login to the student server from a Linux or MacOS system by opening a terminal window and typing (% is the command line prompt):
% ssh uss.cs.adelaide.edu.au
If you are using a Windows system you may need to download a program that can login using secure shell. A popular example is putty but there are lots of other options too.
If the uss server fails for any reason you must phone Technology Services on 8313-3000 and report the problem. Problems with this server should be fixed promptly (hopefully within an hour) once they are reported and you can phone the service desk at any time of the day or night. After hours things may take a lot longer to be fixed. If it is not working you still have access to the on campus systems 24x7 so its failure is not grounds for an extension.
One of the programs that comes with secure shell is secure copy, scp. scp gives you the ability to copy files between computers over an encrypted connection too. You use scp in the same way that you use the Unix command cp except that you can put a computer's name followed by a colon (:) in front of a filename. For example, to copy a file bob.cpp from the current working directory to my login directory on the student server, you could use:
% scp bob.cpp uss.cs.adelaide.edu.au:bob.cpp
You need to be careful when working with files that have spaces in their names. So that the commands do not get confused you may need to put string quotes (") around the files names. For example, if our file was called Really Useful, we could copy it to the student server, using:
% scp "Really Useful" uss.cs.adelaide.edu.au:"Really Useful"
An alternative is to put the back slash character (\) in front of each space:
% scp Really\ Useful uss.cs.adelaide.edu.au:Really\ Useful
Another way to achieve remote access is to use the University's Citrix server, https://adapt.adelaide.edu.au/, which gives you remote access to a Windows desktop or just individual Windows applications. This will want to install the program Citrix Receiver which is a web browser plugin that helps the graphical display work as intended.
One option for Windows users is to install cygwin which provides a Unix style shell. You can ask cygwin to install useful tools such as subversion and various compilers. Once installed, you can use the ssh and scp commands as shown above. However, everything needs to be compiled to run on Windows so you cannot use this with precompiled Linux binaries.
Docker is available for MacOS, Windows and Linux systems. Docker uses a virtual machine to let you run a program in a container that looks like a particular Linux system. We have published a couple of docker images, csadelaide/cscli ad csadelaide/csvnc that contain an svn client as well as the C++ compilers used on the University systems and the nand2tetris tools used in Computer Systems. Our images require you to mount your work on the directory /project. On the Mac this seems to work really well. On Windows it is a bit messier but still seems straight forward. On Linux the tricky bit is how to not be running a container as root.
If you get into trouble trying to use docker you are responsible for fixing it yourself. That said, one common problem is to try compiling your code without starting docker first. You can then end up with binaries produced by different compilers and they will not link with each other. It is usually a good idea to clean up before compiling code on a docker image to avoid this issue.
Installing and managing your own Linux system is a potentially valuable learning experience. There are a number of different ways of doing this and a wider range of Linux systems to choose from. You can install Linux directly on a hard drive and boot your system using Linux. Alternatively, if you install a virtual machine environment you can then install Linux as its own virtual machine. This lets you run your MacOS or Windows system at the same time as the Linux system. VirtualBox, VMWare and Parallels are popular virtual machine environments - VirtualBox is free. Ubuntu is a popular Linux distribution but if you choose Centos 7 you will have something very similar to the Redhat Enterprise Linux 7 used in the CAT suites. We use Centos in our docker images for this reason.
Once you have a working Linux system you will need to install an svn client, your favourite text editor and a C++ compiler. Run "g++ --version" in the CAT suites to see what version of the compiler is being used there. This should let you do most of your assignment work without too many surprises when you finally submit work for assessment.
An alternative to all of the above is to use one of the web based programming environments such as Cloud9 (https://c9.io). The Cloud9 C++ workspace appears to work with the Computer Systems binaries and it has an svn client too. We have also used it with reasonable success in Engineering Software as Services to support Ruby / Rails development. If you choose to use Cloud9 or any of the other web based programming environments you must make your workspace private in order to avoid any issues with the University's plagiarism policies.