Everyone:
Welcome to CSE 30872 Programming Challenges, which (as the syllabus states) is a "course that revolves around solving brain-teaser and puzzle-type problems that often appear in programming contests, online challenges, and job interviews". What this means is that we will be studying common data structures, algorithms, and programming techniques that are useful in tackling a variety of problems.
For this week, you familiarize yourself with using Zoom and Slack and then setup your GitHub assignments repository.
Last year, many of you took the Data Structures course where you learned about the properties and characteristics of different data structures (and perhaps you even implemented a few). The focus of this class, however, is not in the construction of these data structures, but rather their application. This means we will focus on when to use these data structures and algorithms and how to utilize them effectively rather than what they are. In concrete terms, we will not be implementing say a hash table; instead we will use one to solve a variety of problems.
Following the Hands-On Imperative, you will have the opportunity to put the material we discuss in class into practice via a respectful number of weekly programming challenges (three a week). Along with these challenges will be reading assignments to ensure you have a context or background knowledge for what we will be discussing in class. As with last semester in Systems Programming, the reading assignments will be automatically graded.
In fact all of your assignments will be automatically graded by dredd via the continuous integration system provided by GitHub. As you may be realizing during your internship or research experience this summer, testing is an important part of software engineering and we will therefore explore various aspects of software development including debugging, profiling, testing, and more throughout the course (if there is time).
Although each class will involve some amount of lecture, there will also be a lot of in-class activities and hands-on learning. Because of this, participation is a component of your grade and you are expected to come to class regularly and on-time.
Fortunately, however, there are no exams in this class. Instead, we
will have a final in-class programming contest where you will get to
work in groups of 3
(similar to the ACM Programming Contest).
Likewise, you will also have to participate in two external programming
contests such as those provided by HackerRank or LeetCode.
For all of our class meetings, we will be using Zoom to video conference. Before our first class meeting, make sure you can login to the Zoom system and access our meeting link:
For communication outside of our meeting time, we will be using Slack,
specifically the #cse-30872-su23
channel:
There is a class mailing list, but most day-to-day communication (including office hours and homework help) should take place on Slack.
All of your work will be submitted to GitHub using git. Your final task is to setup your GitHub repository by doing the following:
Sign-in or create a GitHub account if you do not already have one.
Fork the class assignments repository from the following template:
This will create a private cse-30872-su23-assignments-$USERNAME
repository under your own account and linked to the nd-cse-30872-su23
organization.
You are responsible for ensuring that your GitHub assignments repository is in proper order, which means you have the correct settings and permissions set. Failure to properly configure your repository will adversely impact your grade.
While you are free to use any machine you wish to do your work, the department provides a set of student machines that you can login to and do remote work in an environment crafted for the course. The following steps allow you to clone the assigments you just created to any machine of your choosing.
As a reminder, students in this class have access to the following student machines:
student05.cse.nd.edu
student10.cse.nd.edu
student11.cse.nd.edu
student12.cse.nd.edu
student13.cse.nd.edu
To access the student machines from off-campus, you can either setup
VPN access or login to jumpbox.nd.edu
first, and then to any of the
student machines.
Before you can clone your git repository, you will need to determine which form of authentication, you wish to use with GitHub.
To remotely access your repository from the command-line, you have two options:
Setup a Personal Access Token: With this method, GitHub will generate an application specific passsword that you can use with HTTPS. As the PAT is a long string of characters, it is recommended that you use it in conjunction with a password manager or keyring.
Setup SSH Keys: With this method, you generate a local public and private key pair on your computer and then upload the public key to GitHub. When accessing GitHub from the command-line, you will use the private key to authenticate to the server.
This is the recommended way to setup your repository as it will allow for passwordless access.
Here is a quick tutorial on how to Setup SSH Keys on the student machines (if you have not already):
Generate SSH keys if you don't have them yet:
# Accept the defaults, don't make a password if you want to go passwordless
$ ssh-keygen
Copy the contents of ~/.ssh/id_rsa.pub
to the SSH Keys section of
your GitHub settings page:
# Copy and paste the contents of this file into GitHub
$ cat ~/.ssh/id_rsa.pub
Edit/create ~/.ssh/config
to use this key with GitHub:
# Add the following to your config (replace $NETID with your netid)
$ vim ~/.ssh/config
Host github.com
User git
Hostname github.com
PreferredAuthentications publickey
IdentityFile /escnfs/home/$NETID/.ssh/id_rsa
Once this is done, you should be able to do git operations without a password. You will need to accept the host key the first time by typing in "yes".
Any time you see references to vim
in example commands, remember that
you can use any text editor such as nano
or emacs
instead.
Clone your git repository to your local machine (or the student machines):
# Example of cloning GitHub assignments repository to local or student machine
$ git clone git@github.com:nd-cse-30872-su23/cse-30872-su23-assignments-$USERNAME.git
Edit the README.md
file in your assignments repository such
that the Name and NetID fields are completed (i.e. replace "Domer
McDomerson" and "dmcdomer"). You should commit your change and then
push them to GitHub.
# Example on editing README in assignments repository and pushing changes to GitHub
$ cd cse-30872-su23-assignments-$USERNAME # Go into the assignments directory
$ nano README.md # Edit the README.md file
$ git add README.md # Mark the file for recording
$ git commit -m "Update README" # Record the change
[master c550fa1] Update README
1 file changed, 2 insertions(+), 2 deletions(-)
$ git push # Send your local changes to GitHub
Once you have setup Slack, GitHub, and have a working development environment on your local machine or on a student machine, then you have completed all the necessary tasks for this reading assignment.