Skip to content

1. SENG475/ECE596C — Advanced Programming Techniques for Robust Efficient Computing (With C++) — 2024-05

Note

Please be sure to use the "refresh" button in your web browser to ensure that you are viewing the most recent version of this web document.

1.1 Please Show Your Support for Open-Access Learning Resources for Students

Textbook and Lecture Slides. The instructor invested a very substantial amount of time preparing the textbook and lecture slides used in the course. If you find the textbook and lecture slides to be a valuable resource for learning, the instructor would appreciate very much if you could show your support of them by posting reviews of them online. Reviews can be posted using the following links:

(Information about posting reviews can also be found in the handout Showing Your Support for Affordable Learning Resources for Students.)

Video Lectures. The instructor also spent a very considerable amount of time in preparing all of the video lecture content used in the course, including both the course video lectures as well as all of the supplemental video lectures. If you find the videos to be particularly helpful for learning, the instructor would appreciate very much if you could "like" some of them on YouTube or subscribe to his YouTube channel:

Additional Remarks. Since the textbook, lecture slides, and video lectures are all publicly available, you are also most welcome to share these learning resources with people outside the course.

1.2 What is the Course About?

1.2.1 Motivation Behind The Course

Collectively, the programming-related courses offered by various programs in the Faculty of Engineering and Computer Science tend to go for breadth of coverage of programming languages rather than depth. That is, students are typically exposed to several programming languages at a relatively basic level, with no one language being covered in great depth. While there is certainly considerable value in breadth of knowledge, not knowing at least one programming language commonly used in industry in depth places the student at a significant disadvantage when seeking employment and can also limit the scope of projects that the student can reasonably undertake as part of their studies. The course SENG475 (which is crosslisted as the graduate-level course ECE596C) is intended to address this problem.

1.2.2 The Course (SENG475/ECE596C)

The course SENG475 (which is crosslisted as the graduate-level course ECE596C) studies advanced programming techniques for robust efficient computing in the context of the C++ programming language. The course affords students the opportunity to apply, in depth, the concepts learned over a number of courses in the context of a single programming language commonly used in industry (namely, C++). For a variety of programming concepts, the student will learn in detail how each of these concepts maps into particular features of the C++ programming language and how to use these features in an effective manner. Although SENG475 carries the "SENG" designation, the course is open to any students in the Faculty with the necessary prerequisites.

In order to accommodate graduate students, SENG475 is crosslisted as the graduate-level course ECE596C (Selected Topics in Electrical and Computer Engineering).

If you would like an approximate idea of what subset of the material from the lecture-slide deck will be covered in the course, the videos of all of the lectures for the 2019-05 offering of the course can be found in the Video Lectures section. This also includes a list of the slides covered from the slide deck.

1.3 Testimonials from Past Students

In spite of SENG475 being a very challenging course, many students have found taking the course to be a very positive experience and extremely beneficial to their career. Below are a few examples of unsolicited comments from students regarding the course.

  • Email from student who took SENG475 in 2019-05:

    Date: Fri, 1 Nov 2019 11:46:10 -0700
    From: Zachary Dirk [email address omitted for privacy reasons]
    To: Michael Adams [email address omitted for privacy reasons]
    Subject: Thanks for SENG475!
    
    Hi Dr. Adams,
    I just wanted to send a personal thank you letter for SENG 475. I took the
    course with you in my graduating semester this past summer, and this week I've
    received two very generous job offers for C++ programming positions. The
    material you covered in your course was extremely useful in my technical
    interviews, even for non C++ questions. It's not hyperbole to say that I would
    not have received these offers had I not taken your course. I know you put a lot
    of effort into SENG 475, and I just want to make sure you know that at least one
    student appreciated it a whole lot.
    
    Sincerely,
    
    Zach
    

  • Email from student who took SENG475 in 2019-05:

    Date: Thu, 31 Oct 2019 11:02:56 -0700
    From: Paul Molina-Plant [email address omitted for privacy reasons]
    To: Michael Adams [email address omitted for privacy reasons]
    Subject: A small thank you.
    
    Hi Dr. Adams,
    
    I want to thank you for being a great teacher. I can easily say that seng475 was
    the most influential course in my degree and has prepared me well for the
    future. I used C++ while interviewing for Amazon and ended up getting a great
    offer from them. 
    
    [other non-SENG475 comments deleted]
    
    Sincerely,
    Paul
    

1.4 When is the Course Offered?

SENG475 (which is crosslisted as the graduate-level course ECE596C) is typically offered in the Summer (May-August) term. The course is planned to be offered in the Summer 2024 term (and likely will be offered in each Summer term for the foreseeable future). Please check this section periodically for updates in case this schedule might change. For information about which courses are being offered by the ECE Department in the current year (such as SENG475), please refer to the Courses section of the ECE Department website.

Incidentally, if SENG475 (or ECE596C) is not offered in a time frame that is feasible for you to take it, you might find the course ECE486/586 to be of interest.

1.5 Prerequisite Knowledge and Requirements of the Course

1.5.1 Prerequisite Knowledge of C++

The course SENG475 is taught using the programming language C++. It is important to understand, however, that this course does not attempt to teach rudimentary C++. It is assumed that the student already has a basic working knowledge of C++. In particular, it is assumed that the student is familiar with the following aspects of C++:

  • basics: objects, types, values; operators and expressions; control-flow constructs; functions; namespaces
  • classes: members and access specifiers; constructors and destructors; operator overloading; lambdas; other basics of classes
  • templates: function templates; class templates; variable templates; alias templates
  • standard library: containers, iterators, and algorithms; a few of the commonly-used types, such as std::vector and std::string

If you are lacking such knowledge, please read the section below titled "What To Do If You Are Lacking the Prerequisite Knowledge of C++". (I have been led to believe that CSC 116 uses C++ and recent offerings of that course cover much of this material, but I cannot make any guarantees about this as I did not teach that course myself.) If SENG475 were to devote a significant amount of time to teaching rudimentary C++, no time would be left to cover advanced programming techniques, which is the true purpose of the course. This said, however, some limited time in the lectures and/or tutorials will be devoted to discussing some common problems/misunderstandings about the basics of the language (e.g., const correctness and temporary objects). These discussions will be done under the assumption that students already have basic familiarity with C++, however.

1.5.2 What To Do If You Are Lacking the Prerequisite Knowledge of C++

In order to accommodate students with strong programming skills but no prior knowledge of C++, detailed video lectures are available that cover the necessary prerequisite material. In particular, numerous video lectures related to C++ can be found in the video-lecture catalog at:

The material that is assumed as prior knowledge in the course is covered by the lectures in the following video-lecture categories:

  • Basics
  • Classes
  • Templates
  • Standard Library

The material in the following video-lecture categories would also be helpful to know, since students are required to learn this material in the first week of classes for SENG475 (by watching these video lectures):

  • Software Tools
  • Version Control Systems (Git)
  • Build Tools (excluding the video lecture on Make, since CMake is used in the course, not Make)

In order to avoid unnecessary stress, it is strongly recommended that the student learn this material in advance of the term in which they plan to take the course instead of cramming in the first week of the term (which is likely not possible to do).

Since it is impossible to learn C++ without writing code, you are strongly encouraged to write, build, and test code as part of the learning process. If you need a software development environment for learning C++ prior to taking the course, several possibilities exist (listed in decreasing order of desirability):

  1. Using virtual machine disk images that contain the Software Development Environment (SDE) for the course. See the section Accessing the SDE via Virtual Machine Disk Images for more details.

  2. Using the Software Development Environment (SDE) on the machines in the lab used by the course. If close enough to the term in which the course is taught, the software may be available on the lab machines (even though the course has not yet started). See the section Accessing the SDE on the Lab Machines for more details.

  3. Using various departmental/faculty computer labs. Most Linux systems in the ECE Department (and likely the CS Department as well) tend to have the GCC C++ compiler installed (which is accessible via the g++ command).

1.6 Registering for the Course

SENG475 is expected to have relatively high enrollment, as the course is quite popular with students. Since the instructor runs the (computer-based) tutorial himself in addition to his regular teaching load, it is only feasible for the course to have a single instance of the tutorial (i.e., the tutorial must be scheduled at the same time and location for all students in the course). This limits the enrollment of the course to the capacity of the lab in which the tutorial is held (which is about 45). In addition, the marking load for the assignments and projects in the course is quite high, which places constraints the number of students that can be accommodated in the course. For this reason, it is recommended that students register as soon as possible for the course in order to avoid the possibility of being placed on a long waitlist. If a student is waitlisted for the course, there is always some chance that the student will able to register. Of course, the chances are much better if the student is near the start of the waitlist, rather than the end. Students who are waitlisted often ask if they will be able to register later. Unfortunately, it is impossible to answer such a question. Due to the fast pace of the course, however, it is probably not advisable to register too much after the start of the term, even if possible to do so.

1.6.1 Scheduling Conflicts with the Tutorial

The tutorial sessions are taught by the instructor (not a TA) and cover core course content. Therefore, tutorial attendance is mandatory. In some cases, a student may (depending on the specifics of the student's situation) be permitted to register for the course if they have a conflict that would only result in them missing a small part of the tutorial sessions. If a student is considering taking the course, but has a conflict with the tutorial, they should contact the instructor for guidance in advance of the start of the course. When contacting the instructor, such a student should provide the following information:

  • the details of the scheduling conflict, including what part of the tutorial overlaps with the other conflicting course (e.g., the first 30 minutes or the last 20 minutes)
  • their program and year of study (e.g., 4th-year software engineering)
  • the level of their programming skills
  • the extent of their knowledge of C++

1.7 Accessing Course Materials

Some of the materials associated with this website may be stored in a private (i.e., password-protected) area. Typically, links to private areas of the website are marked by a padlock . In order to access protected areas of the website, you will need to know the appropriate username and password to use for the web server. The username and password can be found in a post in the Announcements section of the Brightspace site for this course. See the section Brightspace for more information.

1.8 Instructor

Michael Adams
E-Mail: mdadams (append "@ece.uvic.ca" for the complete address)
Office: EOW 311

More sordid details about the instructor can be found on his personal page.

1.9 Teaching Assistants (TAs)

The teaching assistants (TAs) for the course will be posted as soon as they are known.

The marker TAs and their email addresses are as follows:

Information on which TAs marked which assignments can be found in the following document:

1.10 Course Outline

The course outline is available via the following links:

1.11 General Teaching Strategy

This course employs a flipped classroom approach to teaching. With this approach, students are first introduced to the course materials through prerecorded video lectures prepared by the instructor. Then, students are given the opportunity to engage with the course materials in interactive lecture sessions held by the instructor during the lecture time slots. For more details on how the lecture sessions will be run, see the Lecture Sessions section.

1.12 Brightspace Site

The course has a Brightspace site. This said, however, the primary source of information for the course is the website that is currently being viewed, not the Brightspace site. Information such as handouts and submission deadlines are all available from the course website (currently being viewed). Brightspace is only used in a very limited capacity for the course. In particular, the Brightspace site is used only for the following:

  • posting certain types of announcements and other information related to the course, such as the username and password to be used for accessing password-protected areas of the course website; and
  • providing students with a means to review their grades in the course.

A direct link to the Brightspace site for the course is as follows:

1.13 Online Meetings

Some meetings in the course are either held exclusively online or have the provision for online attendance. So, it is important for students to know how to attend online meetings. Detailed information on how to attend online meetings in the course can be found in the following document:

Meeting IDs and Passwords. The meeting IDs and passwords needed to join online meetings in the course can be found at the following password-protected link:

(Refer to the course outline for information on where to find the username and password required for accessing password-protected areas of this website.)

1.14 Lecture Sessions

The lecture time slots will be used by the instructor to hold interactive lecture sessions that are intended to assist students in learning the course materials more effectively. The lecture sessions will employ one of the following two formats:

  1. face-to-face with provisions for online attendance;
  2. face-to-face only (i.e., no provisions for online attendance).

If the instructor has the hardware and software necessary in order to accommodate online attendance, the first of these formats will be used. Otherwise, the second format will be employed as a fallback. (If online attendance is supported, details on how to attend online meetings can be found in the Online Meetings section. How exactly the lecture sessions will be utilized will depend on the needs, interests, and preferences of the students. Some of potential uses of these sessions include (but are not limited to):

  • discussing aspects of the course materials that are typically more problematic for students and addressing common misunderstandings;
  • answering student questions about the course materials;
  • giving software demonstrations; and
  • discussing some extra topics not officially covered by the course that may be helpful to students when seeking employment.

First Lecture Session. The first lecture session will be used to provide an overview of the course and address numerous administrative matters. All students are required to attend the first lecture session.

Lecture Session Attendance. Since the core instructional content is delivered through prerecorded video lectures, students are not required to attend the lecture sessions, except when explicitly indicated by the instructor. This said, however, each student is strongly encouraged to attend at least some of the lecture sessions, as this will very likely lead to an improved understanding of the course materials. Students are responsible for all material covered in lecture sessions for which the instructor has indicated attendance is mandatory. If a student is unable to attend a mandatory-attendance lecture session due to illness or some other reason, the student is responsible for any information missed (including any course-related announcements).

Recording of Lecture Sessions. Normally, the lecture sessions will not be recorded. There are several important reasons for this:

  • the main objective of the lecture sessions is to provide an opportunity for the instructor and students to engage with one another interactively in real time, and recording the lecture sessions would run completely contrary to this objective;
  • recording any interactions with students raises many privacy concerns which are best avoided whenever possible;
  • some students are much less likely to participate (or may not participate at all) in lecture sessions if they are being recorded;
  • students are permitted to take photos/screenshots of materials presented during the lecture sessions (which reduces the need to record materials for future reference); and
  • all of the core instructional content for the course is already available in video format so none of the material covered in the lecture sessions is essential for the course.

1.15 Office Hours

Office-hour sessions will be held by the instructor in order to provide extra help with the course materials as well as discuss other course-related matters with students. These sessions will be offered online only. (For details on how to attend online meetings, see the Online Meetings section.) Any private/confidential matters will be discussed one-on-one with the student in a breakout room. Any questions about course materials will be answered in the main room (i.e., not one-on-one) so that all students can benefit from the questions asked.

Office-Hour Schedule. The office-hours sessions are held via Zoom only (i.e., not face-to-face) using the same Zoom meeting ID/password employed for the lecture sessions. The office-hour sessions are scheduled (as determined via Brightspace survey) as follows:

  • Fridays 13:00-13:50 with the following exceptions (due to conflicts):
    • none (currently)

Changes to the above schedule may sometimes be necessary. The above information will be updated as the term progresses, and changes to this information will be announced to the class as well.

Other Remarks on Office Hours. The instructor's office hours are cancelled during reading break (and on holidays). Also, the above office hours only apply up until the last day of classes. So, these office hours do not apply during the final exam period. Since the course has no final exam, no office hours will be held during the final exam period.

1.16 Tutorial Sessions

The tutorial time slots will be used by the instructor to hold interactive tutorial sessions that are intended to assist students in learning the course materials more effectively. Each of the tutorial sessions will be held in one of two formats:

  • face-to-face in the computer lab used by the course (with no provision for online attendance);
  • online only.

Which of these formats will be used for a particular tutorial session will depend on the specific manner in which the session is being used. The precise manner in which the tutorial sessions are to be used will be driven by the needs and preferences of the students taking the course. Some potential uses of these sessions include (but are not limited to) the following:

  • discussing aspects of the course materials that are typically more problematic for students and addressing common misunderstandings;
  • answering student questions about the course materials;
  • giving software demonstrations; and
  • conducting student interviews regarding code submitted for programming assignments (to guard against plagiarism).

Number and Frequency of Tutorial Sessions. Normally, only a subset of the available tutorial time slots will be used to hold tutorial sessions. The number and frequency of tutorial sessions will depend on the needs of students in the course. Any tutorial time slots that are not used for tutorial sessions are reserved for other purposes (such as additional office hours) as needed during the term.

Attendance of Tutorial Sessions. Students are required to attend all tutorial sessions, except for those for which the instructor explicitly indicates that attendance is optional. Students are responsible for all material covered in tutorial sessions for which the instructor has indicated attendance is mandatory. If a student is unable to attend a mandatory-attendance tutorial session due to illness or some other reason, the student is responsible for any information missed (including any course-related announcements).

1.17 Video Lectures

The core instructional material for the course is delivered via prerecorded videos that are available on YouTube. In the sections that follow, this video content is described in detail. A schedule for viewing this content is also provided.

1.17.1 Video Lectures from 2019-05 Offering of SENG475

When SENG475 was taught in the 2019-05 term (prior to the COVID-19 pandemic), the lectures were delivered in the traditional manner in a physical classroom with students present. Since the instructor thought it would be helpful to have this lecture material in video format for students to reference, he recorded all of the lectures using desktop capture (with audio) on his notebook. After editing the videos, they were posted to the instructor's channel on YouTube (i.e., https://www.youtube.com/iamcanadian1867). In the case of a few lectures, the videos had to be redone (i.e., recorded again) after the fact, due to technical glitches that caused the original lecture not to be recorded properly. The videos that were redone after the fact are the ones in which there is no interaction with students (such as student questions) during the video. The other videos include student questions from the lectures. Only tangential discussions, which were unlikely to be of interest to anyone in the future, were edited out.

1.17.1.1 Video-Lecture Information Package

As mentioned above, all of the lecture content from the 2019-05 offering of SENG475 is available on YouTube. In order to help students more easily locate and navigate this content, an information package is provided that includes:

  • the 2019-09-01-SENG475 edition of the lecture slides (in PDF format), which should match the slides used in the videos reasonably closely;
  • a fully-cataloged list of the slides covered in the lectures, where each slide in the list has a link to the corresponding time offset in the YouTube video where the slide is covered; and
  • numerous supplemental documents referenced by the slide deck.

This information package is available in the form of the following Zip archive:

A short video describing the contents of this package can be found at:

Extracting the Zip Archive. When extracting the above Zip archive, it is important to preserve the directory/file layout and naming used by the archive (i.e., do not rename the extracted directories/files or move them relative to one another). If the layout and naming are preserved, the hyperlinks in the slide deck that point to the external documents in the slides_supplemental directory should be able to be used to jump directly to those documents, assuming the use of a reasonable PDF viewer. If this does not work for you, it is recommended that you try using a different PDF viewer.

Remark on Lecture Slide Editions. Please note that the official edition of the lecture slides for the course (i.e., the edition identified on the course outline) is different from the 2019-09-01-SENG475 edition (used in the video lectures) and contains a few corrections, additions, and other improvements. Therefore, the official version of the lecture slides should be used as the main reference in the course. The 2019-09-01-SENG475 edition is only provided in case it might be helpful to have when watching the videos.

Video-Lecture Catalog. For convenience, the catalog of the slides used in the course video lectures (which is included in the above information package) can also be accessed directly via the following links:

Known Errors in the Video Lectures. A list of all known errors in the video lectures (e.g., errors due to typos on the lecture slides or the instructor misspeaking) can be found in the following document:

1.17.2 Supplemental Video Lectures (for Prerequisite Knowledge and Additional Reference Material)

The course instructor has developed a fairly comprehensive library of video lectures that cover various topics related to programming in C++. The supplemental video lectures mainly cover material that is not intended to be part of the course proper. A list of these videos can be found in the textbook used for the course in the appendix titled "Video Lectures". Students are not required to watch any of the supplemental videos, unless explicitly indicated by the instructor. In any case, students may find some of these video lectures to be helpful at various points in time. In particular, the video lectures are expected to be extremely helpful to students who have no (or very limited) prior experience with C++ and need to quickly get up to speed with this language prior to the start of the course.

1.17.3 Other Instructional Videos

Links to several other video lectures on YouTube are as follows:

1.17.4 Video Lectures for Delivery of Core Course Content

The videos made during the 2019-05 offering of SENG475 will, for the most part, serve as the lectures for the current offering of the course, with a few exceptions. These videos will also be supplemented by a number of other videos mentioned above (either directly or indirectly on handouts). The video lectures that will be used for the course are listed in the following document:

Although all of these video lectures can be accessed through playlists on YouTube, it is very strongly recommended that they instead be accessed through the catalog found in the video-lecture information package. This information package allows for much easier navigation of the lecture material than the YouTube playlists. (The video-lecture information package was discussed earlier in the Video-Lecture Information Package section.)

1.18 Required Texts/Materials

The required texts/materials for the course are listed on the course outline handout.

The textbook and lecture slides are available in PDF format from:

Note that multiple versions of these documents are available. So, be certain to obtain the correct version for the course (i.e., the version identified on the course outline).

1.19 Important Dates

The following important dates should be noted, which include submission deadlines for assignments and the project (proposal and software):

  • Consent Form (Use of Student Source Code for Research Purposes):
    • Due Fri May 17 (2024) at 16:00
    • To be submitted via the "Consent Form" assignment on the Brightspace site.
    • The blank form to be completed can be found in the Miscellany section.
  • Assignment 0 (cpp_tools):
    • Due Fri May 17 (2024) at 16:00 in the student's GitHub Classroom Git repository.
  • Assignment 1 (cpp_basics):
    • Due Fri May 24 (2024) at 16:00 in the student's GitHub Classroom Git repository.
  • Assignment 2 (cpp_compile_time):
    • Due Fri Jun 7 (2024) at 16:00 in the student's GitHub Classroom Git repository.
  • Assignment 3 (cpp_arithmetic):
    • Due Wed Jun 26 (2024) at 16:00 in the student's GitHub Classroom Git repository.
  • Project Proposal (SENG475 and ECE596C):
    • Due Wed Jul 3 (2024) at 16:00.
    • To be submitted by email to the instructor.
    • Note: Students are very strongly encouraged to submit their project proposal very far in advance of the deadline in order to maximize the amount of time available to work on the project software.
  • Assignment 4 (cpp_containers):
    • Due Wed Jul 10 (2024) at 16:00 in the student's GitHub Classroom Git repository.
  • Assignment 5 (cpp_cache):
    • Due Fri Jul 19 (2024) at 16:00 in the student's GitHub Classroom Git repository.
  • Assignment 6 (cpp_concurrency):
    • Due Thu Aug 1 (2024) at 16:00 in the student's GitHub Classroom Git repository.
  • Course Feedback Questionnaire (Optional for Extra Credit):
    • Due at the date/time indicated on the Brightspace site (which is typically sometime either during the last week of lectures or early during the final exam period).
    • The questionnaire takes the form of a Brightspace survey and must be submitted via Brightspace.
    • This survey is for extra credit and is optional.
  • Project Software (SENG475 and ECE596C):
    • Early submission deadline (for bonus): Tue Aug 6 (2024) at 09:00.
    • Normal (i.e., not early) submission deadline (no bonus): Mon Aug 12 (2024) at 09:00.
    • In the case of the early submission bonus, the project-software grade is multiplied by a factor of 1.05 (and clipped at 100%).
    • Submission must be be placed in the GitHub Classroom Git repository.
    • Must notify instructor by email that submission is available in GitHub Classroom Git repository.

1.20 Course-Materials Bug-Bounty Program (CMBBP)

By participating in the Course-Materials Bug-Bounty Program (CMBBP), you can earn extra marks in the course. If you are interested in obtaining extra marks, then read the following document on the CMBBP:

The following document lists all bugs reported to date as part of the CMBBP:

1.21 Feedback on Course/Teaching

Feedback on the course and teaching is always most welcome! The instructor will never hold any of your comments against you, but please be constructive in your criticism.

Several options are available for providing feedback. You can provide feedback through:

1.22 Assignments

Calculation of Assignment Component of Course Grade. As mentioned in the course outline, the assignments are not equally weighted in the calculation of the assignment component of the course grade. The specific manner in which assignment marks are combined and weighted in order to determine the assignment component of the course grade is described in detail in the following document:

Assignment Submission. Assignment submission is via GitHub Classroom, as explained in detail in the Assignment General Information Handout. The assignment invitation URLs needed to start work on an assignment can be found in the GitHub and GitHub Classroom section.

Solutions to Programming Exercises. Since there is typically no one correct solution to the programming exercises, solutions to such exercises are not posted.

As part of preparations for teaching the course, the instructor prepared his own solution to each of the programming exercises. If a student would like to know how the instructor handled some aspect of a programming exercise, the instructor would be quite happy to discuss his solutions with the student. The instructor, however, will not provide a copy of his code to the student.

Grading Issues. If you have any concerns about the grading of an assignment, please directly contact the TA who graded the assignment. Contact information for TAs and a list of which TAs graded which assignments can be found in the Teaching Assistants section.

Grading Information. The following documents are available regarding assignment grading and solutions for non-programming exercises:

Handouts and Related Information. The following downloads are available for assignments:

1.23 Project (SENG475/ECE596C)

The following handout describes the project in detail:

Please read this handout carefully at the start of the term in order to have a clear understanding as to what is required for the project component of the course.

Project Proposal Early Submission Bonus. For details on the early submission bonus for the project proposal, please refer to the following document:

Instructor Presentation on Course Project. In one of the tutorial sessions, the instructor gives a detailed presentation on the course project. The slides used in this presentation are included in the course-introduction slide deck. Please note, however, that the slides on the project are often modified when the instructor prepares for the presentation. So, be sure to download the slide deck after the presentation is given in order to ensure that you have the most up-to-date slides on the project.

The following are some examples of past evaluation forms used for the project, in case they might be helpful:

1.23.1 Examples of Past Projects

Students have considerable flexibility in their choice of course project. For this reason, many different types of projects have been undertaken by students in past offerings of the course. Some examples of these past projects are given below. In particular, links to the presentation videos for numerous projects are given. Although the quality of the presentations vary, they should all be good enough to convey the basic essence of each project. It is hoped that these examples may provide students with a better idea as to what might constitute a suitable project for the course and further inspire students to develop novel ideas for projects of their own.

1.24 Software Development Environment (SDE) for the Course

A highly-customized software development environment (SDE) has been setup for this course by the instructor. The SDE includes very recent (usually the most recent) versions of software such as:

It is critically important that all students use the SDE and not the system-installed versions of various software, as the non-SDE versions are too outdated (or have other compatibility issues) and will not function correctly for the purposes of the course. The SDE will be used for the grading all programming assignments in the course. So, it is absolutely critical that student code works correctly in this environment.

1.24.1 Accessing the SDE on the Lab Machines (Fully Supported)

Lab and Lab Machines. The complete SDE is only available on the machines in the computer lab used for the course, namely, the ECE Undergraduate Linux Lab in ELW B238. Since it is possible to remotely login to the machines in the lab via SSH, it is still possible to use the SDE without physically being present in the lab. The machines in the lab can be accessed by remotely logging in (via SSH) to the generic hostname ugls.ece.uvic.ca. Specific lab machines can also be accessed via the hostnames ugls1.ece.uvic.ca, ugls2.ece.uvic.ca, and so on (up to something like ugls46.ece.uvic.ca). Is it strongly recommended, however, that the generic hostname ugls.ece.uvic.ca be used in order to take advantage of potential load balancing (i.e., ugls.ece.uvic.ca will get mapped to the specific machine that is currently least loaded).

Initializing the SDE. To access the SDE (on one of the lab machines), you should run the following command in your shell:

  • /home/frodo/public/ugls_lab/bin/sde_shell

This command will start a new subshell that is correctly configured to use the SDE. Only this new subshell will be configured in this way, however.

Do not try to use the SDE on machines in the ECE Department other than the machines in the lab for the course, as this will not work properly. Although you will be able to access the sde_shell script on most ECE Department machines since the directory /home/frodo/public/ugls_lab is accessible on most ECE Department machines, the software installed under /home/frodo/public/ugls_lab will only work on the machines in the lab. Extremely bizarre failure modes are very likely to be encountered if the SDE is used on machines outside the lab for the course. Such failure modes include, amongst many others:

  • CMake complains that it was installed incorrectly.
  • CMake reports that the C++ compiler does not work.
  • The GCC and Clang compilers do not work properly.
  • The linker (i.e., the ld program) complains that it cannot find certain objects files (e.g., crt1.o) or libraries (e.g., the math library as in "-lm").

In order to use the SDE on a machine outside the lab, you would need to install the SDE yourself (from scratch) on that machine. Since installing the SDE is a very time-consuming and tedious process, it is not recommended that students attempt to do this.

1.24.1.1 Common Problems With the SDE

The most common problems with the SDE are as follows:

  • Attempting to use the SDE on a machine with a configuration different from the ones for which the SDE was built (i.e., attempting to use the SDE on machines outside the lab for the course). The SDE was built on the lab machines and therefore can only be guaranteed to work correctly on the lab machines. It is almost guaranteed that the SDE will not work if used on machines outside the lab for the course. For information about the lab and the hostnames of the machines in this lab, see the information above.

  • Failing to initialize the SDE. The SDE is not enabled by default. If you do not initialize it, you will not be using it. For instructions on how to properly initialize the SDE, see the information above.

1.24.2 Accessing the SDE With Virtual Machine (VM) Software (Very Strongly Recommended)

Although the most-recent version of the full SDE is only available on the lab machines, some other options for accessing most of the SDE functionality are also available. Of these options, the only one that is recommended for a typical student is the one based on virtualization, as described below.

A (type-2) hypervisor is a software application that allows one operating system (called the guest operating system) to be run as an application program on another possibly different operating system (called the host operating system). Some popular (type-2) hypervisors include:

  • GNOME Boxes

    • open source
    • supports many UNIX-like operating systems (e.g., Linux)
  • VirtualBox

    • open source with proprietary extensions
    • supports many operating systems (e.g., Linux, MacOS, Windows, and many UNIX variants)
  • VMWare Workstation Player

    • proprietary, free for personal non-commercial use
    • supports many operating systems (e.g., Linux, MacOS, Windows, and many UNIX variants)

VM disk images are available that contain an installation of a relatively recent version of the SDE without the SENG475 Assignments package (i.e., the software package that contains the assignment definitions for the course). If you have a hypervisor on your computer, you may find these disk images to be helpful. Please note, however, that these disk images do not include the SENG475 Assignments package. Consequently, programs like assignment_precheck are not functional in these disk images. For this reason, these disk images cannot be used as a complete substitute for the lab machines. That is, assignment_precheck must be run on a machine in the lab.

The VM disk images can be found at:

1.24.3 Installing the SDE from Scratch (Not Officially Supported and Not Recommended)

If a student would like to build and install the SDE on their own computer (from source code), the SDE is available from its official Git repository, hosted by GitHub. The home page for the SDE on GitHub can be found at:

The Git repository has the URL:

Installation instructions for the SDE can be found in the file README.md in the top-level directory of the repository.

The instructor does not officially support the build and installation of the SDE from source code by students. So, if a student encounters problems when attempting to build and install (or use) the SDE, the instructor cannot provide assistance. The SDE only supports Unix-based systems. It should have a reasonable chance of working with Linux distributions that are fairly complete and stay current with recent software versions. For example, it is known to work with recent versions of Fedora. It will probably not work for MacOS (due to Apple using older versions of some software in MacOS and not including other software at all). Note that installing the SDE will likely take several hours, since building software like GCC and Clang (and downloading TeX Live) is very time consuming.

1.25 GitHub and GitHub Classroom

GitHub Classroom is used for assignment submission. Information on how to use GitHub personal-access tokens (PATs) and credential caching can be found in:

The GitHub Classroom invitation URLs for the various assignments in the course can be found in the following document:

1.26 Miscellany

The following handouts were associated with the first lecture in the course: