Recent update of GitLab brought renaming of several things. Most notably for us, Issues were generalized into Work items. We will try to update the materials to reflect the new naming as soon as possible.

This page describes how the on-site tests will look like and eventually will also contain description of the (big) homework assignment.

Please, have a look at the course guide page for details how the grading works.

On-site tests

This is the schedule for the on-site tests. The test will be held at the beginning of the lab (duration of the test is 45 minutes).

Week (date) Topic
09 (April 13 - April 17) T01: Git versioning system
12 (May 4 - May 7 + May 15) T02: Shell scripting
14 (May 18 - May 22) T03: make build tool

You are expected to come to the lab you have enrolled to.

Because of state holiday on May 8, the T2 examination for Friday labs will be postponed by a week. We are aware it is not optimal but the schedule for this semester has virtually no complete week (i.e., teaching in all days of a week) during the second half of the semester.

Test will be written on school machines. Make sure you can login there.

You are allowed to use our webpages, off-line manpages and you can consult your notes and solutions to examples that are part of the lab materials.

You are not allowed to use any other devices (cell phones, your own laptops etc.), consult other on-line resources (the machines will have restricted access to the Internet anyway) or communicate your solution to other students (and vice versa).

In other words, the on-site tests require that you can solve the tasks on your own with technical documentation only.

We kindly ask you to leave your devices in your backpacks during the exam and leave the backpacks in front of the blackboard or on some other visible (but unreachable) place to ensure equal conditions for everyone. Thank you!

Any attempt to bypass the above rules (e.g. trying to use AI assistant on your cell phone) means failing the course on the spot.

You are free to ask for clarification from your teacher if you do not understand the assignment, obviously. We can provide limited hints if it is clear that you are heading in the right direction and need only a little push.

Please, see also the general rules in the course guide.

Format of the exam

Your solution will be submitted to a Git repository: make sure you can perform a clone via a command-line client.

Test will be written on school machines. During the exam you will use a temporary account: you will not have access to any of your files from the AFS home. At the beginning of the exam, you will generate a new SSH key pair, upload it to our keyserver and then clone the Git repository with the actual exam.

The temporary account on the school machines will be prepared for the exam. There will be some shortcuts (see below) for easier access to the repositories you will need but for certain customizations your action will be needed.

Because you will be uploading the solution to a Git repository in Gitolite (you have worked with it during lab 05), there will be an exam alias available. Therefore, you will be able to clone the repositories simply by calling

git clone exam:REPO

instead of

git clone gitolite3@linux.ms.mff.cuni.cz:REPO

Similarly, for uploading your SSH key (that you will need to generate at the beginning of the exam), you would be able to use a shortcut of

ssh-copy-id keyserver

instead of

ssh-copy-id -p 2222 LOGIN@linux.ms.mff.cuni.cz

You will also have a read-only access to the config-LOGIN repository on Gitolite where you can store your own shell and Git customization (e.g., aliases, own prompt etc.).

You can also store your notes into the config-LOGIN repository so that you do not need to print them. Do not store there anything that might be contrary to the course rules (this includes, for example, AI agents or exam solutions from your colleagues). Also, please, keep the repository small (under 5MB). Thank you.

Detailed information about the config-LOGIN repository is on a separate page.

You can try to run the ssh-copy-id -p 2222 LOGIN@linux.ms.mff.cuni.cz even before the exam to try it but you will need to generate a new key pair during the exam anyway.

Notes for the Git CLI exam

Information for students enrolled to the special 25bNSWI177x13 Friday lab.

If your SIS/GitLab username starts with [a-j], please, come at 8:50; if your login starts with [k-z], please, come at 9:40.

Instructions for the exam will be provided in a printed form. They will also include a hint how to generate the SSH key pair and how to upload it to our keyserver.

You will be expected to perform the following tasks in Git from the command-line.

  • Configure your Git environment (author and e-mail)
  • Clone a repository (from gitolite3@linux.ms.mff.cuni.cz or generic HTTPS)
  • Create a commit
  • Create a branch
  • Switch between branches
  • Merge a branch (and solve any conflicts)
  • Push changes (branches) to server

You will not be required to write any script on your own from scratch but we will be working with a repository containing the following script for printing simple bar charts in the console. You will be required to make some small modifications (such as fixing typos) but we will always guide you to the right place in the code.

The focus of the exam is on working with Git but you must be able to make the above mentioned modifications correctly. In other words, the Python script has to be functional all the time (i.e. if you create a branch correctly but the script fails with a syntax error, it is a fundamental error).
import argparse
import sys

def parse_config():
    args = argparse.ArgumentParser(description='Console bar plot')
    args.add_argument('--columns', default=60, type=int, metavar='N')
    return args.parse_args()

def load_input(inp):
    values = []
    for line_raw in inp:
        line = line_raw.strip()
        if line.startswith('#') or not line:
            continue
        try:
            val = float(line)
        except ValueError:
            print(f"WARNING: ignoring invalid line '{line}'.", file=sys.stderr)
            continue
        values.append(val)
    return values

def print_barplot(values, scale, symbol):
    for val in values:
        print(symbol * round(val / scale))

def main():
    config = parse_config()
    values = load_input(sys.stdin)
    if not values:
        sys.exit(0)
    coef = max(values) / config.columns
    print_barplot(values, coef, '#')

if __name__ == '__main__':
    main()

Quizzes

Quizzes will be given on labs 02, 03, 04, 05, 06 and 07 (and 08 for Friday labs).

Small homework tasks