Skip to main content

(in) Frequently Asked Questions

Reference books

Email policy

  • We will be using the discussion board on instead of email.
  • Before starting a new topic please check if the topic is already under discussion and check to see if your question has already been answered.
  • If you must email the instructor or TA directly then use your SFU email address to send the email (do not use any other provider), and use cmpt413: or cmpt825: (depending on if you are an undergrad or grad student) as the prefix in your subject line.


  • The grade for the course is computed using the final marks which are a weighted average of each activity as defined on the main page.
  • The grade cutoff are as follows:

    Final Grade Final marks
    A+ >95
    A >90
    A- >85
    B+ >80
    B >75
    B- >70
    C+ >65
    C >60
    C- >55
    D >50
    F ≤50

Homework Submission and Grace Days

  • Your group has to submit two deliverables for each homework:
    • Source code for your homework will be submitted electronically on
    • The output on the provided data has to be uploaded to the leaderboard server on Google App Engine.
  • Only one member of the group should upload to the leaderboard and use the valid group name.
  • Check your scores on the leaderboard and check that your group appears only once in the leaderboard.
  • All homeworks are due by 11:59PM on the homework due date.
  • Each homework comes with 2 grace days. However the grace days only apply to those who have a valid submission on the due date (a submission that scores -1 or -inf is invalid). For example, if your homework deadline is Tuesday 11:59PM and you submit a valid solution then you have until Thursday night 11:59PM to modify your homework submission.
  • We will make every attempt to release grades for each homework the day after it is due. However, this means that after we review the source code we might have to lower your official grade. If you cheated in some way, such as copying your submission or you have violated the ground rules for each homework, your grades will be decreased from the initial value.


  • The homework assignments will be solved in groups. Maximum group size is four. All groups must be formed before Homework 0 is due.
  • You are allowed to leave a group and form a group of size one at the start of each homework but not at the end.
  • Each group will create a single submission and upload it before the due date.
  • Each group member will be graded on their self report and any commit logs that are submitted. If the TA or the instructor perceives there is a problem with collaboration in a group, certain group members can get zero marks. If you are pair programming, take turns in switching the user doing the commits to the svn repository.
  • Effective group collaboration: We are looking to see effective collaboration to solve the homework assignment. People can play different roles and sometimes more than one role in the same homework:
    • Designer: creates a plan for implementation and coordinates activities of the group. Should create design docs (text files or markdown or equivalent only). Put these documents in the directory answer/docs and mention the files in your README.username file (where username is your SFU login username).
    • Code reviews: write a critical view of the implementation by the group. Points out what is missing, inelegant code, etc. and produces a code review document (text files or markdown or equivalent only). Put these documents in the directory answer/docs and mention the files in your README.username file.
    • Development: write the code. This can be done in collaboration.
    • Testcases: write testcases to stress test the code. Provide the testcases in your submission.
  • Warning: if you are missing a README.username file in your group source submission then that username might get zero marks.
  • Use git for version control and effective collaboration. See the section below on setting up git for this course.


  • Setup a source code version control system. The most convenient version control system is git and setup instructions are given below.
  • We will be using the Python-based NLTK: Natural Language Toolkit and Python 2.7.x for programming.
  • The easiest way to install Python with NLTK on your machine is to download Anaconda Python distribution
  • It is expected that your program will compile and run using the standard runtime environment on the Linux CSIL lab machines. If you are developing on a Linux, Apple or Microsoft operating system at home, you have to ensure that the code will run on the CSIL machines before you submit the assignment. Please either visit the CSIL lab machines or you can use ssh to login to the CSIL Linux machines and also use scp to copy over and test your programs on the CSIL Linux machines before you submit them. Check the CSIL Layout Map for the machine names.
  • Remote access to CSIL is allowed.
  • CSIL computers accept SSH connections on port 24 (rather than the usual port 22). They can only be accessed from within the SFU network. If you are outside it, you need to go through a directly accessable computer, most likely Here are some examples using the usual command line ssh and scp (from OpenSSH). Below $ is the command line shell on your home computer running Linux/MacosX/Cygwin. What follows is a recipe that will connect you remotely to a CSIL Linux machine:
  • If your local machine (e.g your laptop) has a different username from your SFU username (your username can be found by examining your SFU email address:, then prefix the SFU username to the ssh or scp command. ssh (username)`.
  • You may want to refer to a quick Unix tutorial. There are several on the web. The following one covers most of what you need to use the Linux shell effectively: Quick Unix Tutorial.
  • On some CSIL Linux machines, in some rare cases, you might have to extend your CPU time limit for a process. If you are using tcsh then run the command “limit cputime 1800” to extend CPU time to 1800 secs or 30 mins. If you are using bash then use the command “ulimit -t 1800”.

Using the computer from the command line shell

In the instructions that follow, you will operate the computer using the text-based command-line interface, known as the “shell”. Start off by reading the CSIL guide to Linux

Are you confident you know how to use the shell? Do the shell challenge to prove to yourself that you really know how to use the command shell.

Stop! We know that students skip over links! If you are new to Linux, you really need to read up on some basics. Read the CSIL guide to Linux now!

Setup your git repo

Git Basics

We never write code all at once, and entirely correctly the first time. We usually write some code, save it somewhere safe, then come back to it and modify it until we are done with our task. More importantly, we need to track our changes so that we can experiment with what works and what doesn’t. In order to help us do these steps we use a source code version control system (or VCS, for short). The source code are our programs and version control lets us manage all the changes we have made to our code.

Throughout this course, your programs will be managed and archived using Git. The basic idea is as follows:

  • Every student gets a private storage area called a repository on the SFU server machines, or “repo” for short.
  • Your code is stored in your repo. Every time you make a change to your code, you commit a new revision of your code to the repo for permanent storage. All revisions you ever commit are kept, and you can retrieve any committed revision any time. This means you have a combined backup and means to undo any changes you ever make. This is how software engineers manage their code projects.

Creating a repo

Go to the SFU Gitlab server which is on the web at Log in with your SFU username and password, the same one you use to check your e-mail on SFU Connect.

Once logged in, you will see a list of your existing repos. You probably have none right now, so let’s create one for CMPT413 or CMPT825 by clicking the New Project button at the top right of the page.

On the New Project page, give your repo a name to the right of the Project name field. Name your repo either: nlpclass-1777-groupname or nlpclass-1777-groupname where groupname is your group name.

It’s important to name the repo exactly as you see here. Leave all other settings as they are and click the Create Project button at the bottom left of the page.

Make sure you do not change the default setting of Private. Your repo must be visible only to yourself. In other words, no other student can access it by default. You must not give access to your repo to any other students - plagiarism is a serious academic offense, which applies as much to code as it does to essays and exams.

Your repo has now been created. You will be taken to a web page for your newly created repo.

The course instructor needs access to your repo in order to test and grade your code. Add the instructor as a member of your repo by clicking on the Settings menu which looks like a gear icon and selecting Members from the dropdown menu. On the page that loads up type in anoop in the Add new user box and then change the role permissions from Guest to Developer in the dropdown menu. Click on Add to Project to add the instructor to your gitlab repo. Do the same steps to add the TA usernames as a developer to your gitlab repo. The TA usernames are given on the main page.

Set up the Secure Shell (ssh) keys so you can access your repo without a password. First follow the instructions on setting up your SSH key pair available at

Now we have to copy your public key to the GitLab server.

The instructions ask you to use xclip which may not be installed on the CSIL machines. If you cannot use xclip then use the following steps to set up your ssh key.

If you have set up your SSH key correctly then you will have a public key. View it

cat ~/.ssh/

This will show you the public key. Use the Terminal copy command to copy this into your clipboard.

Then go to this page:

Use the web browser to paste command to paste your public key into the Key box and give it a Title (e.g. use the default name provided) and then Add key.

Logging in to CSIL

It’s time to get yourself set up in the CSIL Lab.

CSIL is open starting the second week of the semester, 24 hours a day, 7 days a week. All your CMPT 127 lab sessions are in CSIL. Log in to the Linux machines. Use the same username and password as before.

The machines in these rooms have Linux and Windows installed. If you a machine running Windows, simply restart the machine and select Linux when prompted.

Once logged into Linux, you should see a familiar desktop interface. In order to manipulate most of your work, you will need a terminal window which runs the “shell”.

Click the launcher in the upper-left corner of the desktop interface and start the “Terminal Emulator” application, or Terminal for short. It should be under the Accessories submenu. If you can’t find it, then try searching for Terminal in the search box.

The Terminal will allow you to type commands to manipulate, run and test programs in your labs. But there will be no programming in this lab. In this lab you are going to use Git.

Git clone (command line)

It’s time for you to download a copy of your repo to your CSIL machine. The action of making a local copy of your online repo is known as a “clone”.

In the terminal window, enter the commands

git config --global your-username 
git config --global
cd $HOME
git clone

Substitute your SFU username and groupname above.

If you did skipped any of the above steps in setting up your GitLab repo this command will not work. The system might prompt you for a username/password combo. Supply the usual answers. To avoid entering your username/password over and over again you can set up passwordless ssh.

Your repo will be cloned into a new directory (also known as a folder).

If you enter the command


it should give you a directory listing, a list of all files and subdirectories. If you see your repo directory you’ve managed a successful clone. If not, ask for help from the TAs.

The clone command downloads a copy of the entire repo into your local machone. It still exists on the server. Once you have a local clone, you can modify it and then inform the Git server about the changes you made. Let’s do that next.

Just a heads up about the directory $HOME/sfuhome on CSIL machines. You can clone inside your $HOME directory. You should not work inside your $HOME/sfuhome directory.


  • If you must miss an exam because of a medical problem, you should make an attempt to contact me prior to the exam either by email or a message in my mailbox.
  • To request an extension of the due date due to a medical problem, you must submit the offical SFU Health Care Provider statement.
  • If you miss an exam due to valid medical reasons you will be graded on your performance on the rest of the course.
  • Make up exams will not be given under any circumstances.

Academic Honesty

  • Some examples of unacceptable behaviour:
    • Handing in assignments that are not 100% your own work (in design, implementation, wording, etc.), without proper citation. There must be a README file in your submission with citations to any external code used.
    • Using any unpermitted resources during an exam.
    • Looking at, or attempting to look at, another student’s paper during an exam.
    • Submitting work that has been submitted before, for any course at any institution.
  • If you are unclear on what academic honesty is, see SFU’s Policy S10-01 and the University code of academic honesty.
  • All instances of academic dishonesty will be dealt with very severely.
  • In general, minimum requested penalties will be as follows:
    • For assignments: a mark of -100% on the assignment. So, academic dishonesty on an assignment worth 5% of your final mark will result in a zero on the assignment, and a penalty of 5% from your final grade.
    • For exams: an F in the course.
    • Please note that these are minimum penalties. At the instructor’s option, more severe penalties may be given/requested. All instances of academic dishonesty will be noted on your University record.
  • The instructor may use, or require students to submit assignments to, an automated service that will check for plagiarism.

Exams and Tests

  • Exams may be written in either pen or pencil. Calculators or other aids are not allowed unless explicitly stated.
  • Midterm exams and other tests will not be returned to you. You can examine them during office hours for the TA or the instructor.
  • Final exams are not returned to students by University policy; they are kept by the instructor.
  • If you miss a test or exam, you must present a note from a doctor to get a mark other than zero. Arrangements to make up the lost marks will be made on a case-by-case basis by the instructor. Make-up exams may be given as an oral examination.
  • You must get a pass on the weighted average of the exams and final course project (if this is applicable) to pass the course.

Mark Appeals

Except for final grades, this is how you can go about getting your mark changed:

  • Requests for a change in your mark must come to the course instructor. TAs will not change your mark, except for errors in addition or data entry.
  • Requests should come in the same form as you received your marks: if you got marks by email, forward that email to the instructor; if you had paper handed back, return that.
  • You should give a brief explanation of why you want your mark reevaluated.
  • The instructor will remark the entire assignment/test. This will be your mark, whether it is higher or lower than the original.
  • Appeals may be made up to two weeks after the mark is returned or until the final exam date, whichever is first. After that deadline, you must make a formal mark appeal for any changes.
  • For exams in particular, these are not reasons to get more marks:

Final Exam and Final Marks Appeals

If you’re concerned about your mark at the end of the course, you can see the instructor. Here are some guidelines:

  • You can come to the instructor’s office at designated times to review your final exam.
  • Like assignments, you can ask the instructor to reevaluate your final exam marking.
  • The following are not good reasons to get a higher final mark:
    • I want it.
    • I think I deserve it.
    • I need it.
    • I’m close to the next grade cutoff.
  • This is a good reason:
    • There’s a marking irregularity on my final or some other piece of work.
  • The marking scheme is fixed. If you did badly on a midterm, you can’t weight the final more heavily.

Disclaimers about this web page

  • All course information on this web page is tentative and could be in error. It can also change at any time. Confirm crucial dates or information with me in person during class. Double check with SFU calendar or schedule information for official class times and final exams time and location.
  • Students are expected to attend all classes: announcements about assigned readings, homeworks and exams will be made available at the start of each class. Such announcements may not be made on this web page, so don’t rely on information here instead of attending class.