diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c1c19a9a6..dbca4b52b 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -10,8 +10,5 @@ ## A reference to a related issue in your repository (if applicable) -## @mentions of the person or team responsible for reviewing proposed changes (At least 2 people) -- - ## Checklist - [ ] I can confirm that my changes are working as intended diff --git a/.github/workflows/autograder.yml b/.github/workflows/autograder.yml new file mode 100644 index 000000000..6633bb1af --- /dev/null +++ b/.github/workflows/autograder.yml @@ -0,0 +1,36 @@ +name: Assignment autograder +on: + pull_request: + branches: + - main + types: [opened, synchronize, reopened] +jobs: + autograder: + name: Assignment autograder + if: startsWith(github.head_ref, 'assignment') && github.repository_owner != 'UofT-DSI' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: astral-sh/setup-uv@v5 + - name: Setup working directory for script + run: | + UUID=$(uuidgen) + echo "UUID=$UUID" >> $GITHUB_ENV + mkdir /tmp/$UUID + cp $GITHUB_WORKSPACE/02_activities/assignments/assignment.sh /tmp/$UUID + - name: Run assignment script + run: | + bash -c "bash assignment.sh 2>&1 | tee /tmp/${{ env.UUID }}_output.txt" + working-directory: /tmp/${{ env.UUID }} + - name: Grade responses + id: grade + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPO_OWNER: ${{ github.repository_owner }} + REPO_NAME: ${{ github.event.repository.name }} + PR_NUMBER: ${{ github.event.pull_request.number }} + REPO_BRANCH: ${{ github.event.pull_request.head.ref }} + WORKING_DIR: /tmp/${{ env.UUID }} + run: | + wget -O /tmp/autograder.py https://github.com/UofT-DSI/shell/raw/refs/heads/main/03_instructional_team/autograder/autograder.py + uv run --python 3.12 --with pandas,tabulate,requests /tmp/autograder.py diff --git a/.github/workflows/automatic_pr_comment.yaml b/.github/workflows/automatic_pr_comment.yaml new file mode 100644 index 000000000..48c71fda7 --- /dev/null +++ b/.github/workflows/automatic_pr_comment.yaml @@ -0,0 +1,48 @@ +name: UofT-DSI Main Repository PR Workflow + +on: + pull_request_target: + types: [opened, synchronize] + +jobs: + handle-pr: + if: github.repository_owner == 'UofT-DSI' + runs-on: ubuntu-latest + steps: + - name: Handle PR based on source branch + uses: actions/github-script@v6 + with: + script: | + const pr = context.payload.pull_request; + const branchName = pr.head.ref; + const issue_number = pr.number; + const repo = context.repo; + + if (branchName.startsWith('assignment')) { + const commentBody = `This pull request was made to the wrong repository. Please open it in your own fork instead. Refer to the [Assignment Submission Guide](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md) for detailed instructions.`; + + // Comment on the PR + await github.rest.issues.createComment({ + owner: repo.owner, + repo: repo.repo, + issue_number: issue_number, + body: commentBody + }); + + // Close the PR + await github.rest.pulls.update({ + owner: repo.owner, + repo: repo.repo, + pull_number: issue_number, + state: "closed" + }); + } else { + const commentBody = `Thanks for your contribution! πŸŽ‰\n\nPlease remember to tag or request a review from the DSI team. Give us up to 72 hours to review your pull request. We appreciate your patience and efforts.`; + + await github.rest.issues.createComment({ + owner: repo.owner, + repo: repo.repo, + issue_number: issue_number, + body: commentBody + }); + } diff --git a/.github/workflows/deploy_github_pages.yml b/.github/workflows/deploy_github_pages.yml new file mode 100644 index 000000000..a18df3c44 --- /dev/null +++ b/.github/workflows/deploy_github_pages.yml @@ -0,0 +1,42 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["main"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Pages + uses: actions/configure-pages@v5 + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: './03_instructional_team/githubpages' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index d526da250..bb6e98f01 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,19 @@ .DS_Store .vscode/ -./04_instructional_team/lessons/pdf/* -./04_instructional_team/lessons/html/* +03_instructional_team/lessons/pdf/* +03_instructional_team/lessons/html/* + +# local node modules +node_modules/ +package-lock.json +package.json + +### Running the assignment script unzips a large number of files into the tree +# Ignore all files in shell/02_activities/assignments/ +02_activities/assignments/* + +# Un-ignore the specific files +!02_activities/assignments/assignment.sh +!02_activities/assignments/github_actions.png +!02_activities/assignments/assignment_instructions.md + diff --git a/01_materials/bash_quick_reference.md b/01_materials/bash_quick_reference.md new file mode 100644 index 000000000..2cc1669bc --- /dev/null +++ b/01_materials/bash_quick_reference.md @@ -0,0 +1,108 @@ +# Bash Commands Reference + +## πŸ“‹ Commands Overview + +```bash +$ echo Rachael +Rachael + +$ conda activate dsi_participant +(dsi_participant) + +$ date +Tue, Nov 19, 2024 6:28:10PM + +$ asdkfjhgoipwhr +Command not found + +$ man ls +# Opens the manual for `ls` +# To exit, press 'q' + +$ help +# Lists available shell commands +``` + +--- + +## πŸ“ File & Directory Navigation + +| Command | Description | +|------------------------|------------------------------------------------------------| +| `pwd` | Show current working directory | +| `ls` | List folders & files in the working directory | +| `cd` | Move to home directory | +| `cd Desktop` | Move into Desktop directory | +| `cd ` | Move into a specific path | +| `cd ..` | Move one level up (parent directory) | + +--- + +## πŸ›  File & Directory Management + +| Command | Description | +|-------------------------------------|-----------------------------------------------------| +| `mkdir ` | Make new directories | +| `touch ` | Create a file | +| `rm ` | Remove a directory | +| `rm ` | Remove a file | +| `cp ` | Copy file from source to destination | +| `cp /* ` | Copy all files from source dir to destination dir | +| `mv ` | Rename/move file1 to file2 | +| `cat ` | Display content of the file | +| `echo "text" > file.txt` | Replace content in file with text | +| `echo "text" >> file.txt` | Append text to file | + +--- + +## ✏️ Editing Files + +| Command | Description | +|--------------------|------------------------------------| +| `nano ` | Open file in nano text editor | +| `code ` | Open file in VS Code | + +--- + +## 🧰 Useful Options + +| Option | Description | +|--------|-----------------------------------------------------------| +| `-i` | Prompt before overwriting an existing file | +| `-r` | Recursively copy directories and their contents | +| `-v` | Show informative messages during operations | +| `-f` | Force action (overrides `-i` if both are used together) | + +--- + +## πŸ”§ Hash-bang (Shebang) + +Place this at the top of every Bash script to indicate which shell to use: + +```bash +#!/bin/bash +``` + +--- + +## βš™οΈ Optional extras for customizing bash +#### Append to ~/.bash_profile for extra spacing between previous commands and the subsequent shell prompt** +``` +export PS1="\n\n$PS1" +``` + +#### Append to ~/.bash_profile to track live command history +``` +export PROMPT_COMMAND="history -a; $PROMPT_COMMAND" +alias showhistory="clear; tail -n0 -F ~/.bash_history | nl" +``` +* clear: clear the terminal +* tail: command for displaying the last few lines of a file +* -n0: display no lines currently in the file +* -F: watch the file for changes and display any new lines +* ~/.bash_history: command history file for bash +* | nl: line numbering + +#### To display live updated command history, run this in a separate window: +showhistory + diff --git a/01_materials/slides/optional_unix_slides.pdf b/01_materials/slides/optional_unix_slides.pdf new file mode 100644 index 000000000..2cab6d03d Binary files /dev/null and b/01_materials/slides/optional_unix_slides.pdf differ diff --git a/01_materials/slides/unix_slides.pdf b/01_materials/slides/unix_slides.pdf new file mode 100644 index 000000000..ad8a49edc Binary files /dev/null and b/01_materials/slides/unix_slides.pdf differ diff --git a/01_slides/optional_unix_slides.pdf b/01_slides/optional_unix_slides.pdf deleted file mode 100644 index de46546f9..000000000 Binary files a/01_slides/optional_unix_slides.pdf and /dev/null differ diff --git a/01_slides/unix_slides.pdf b/01_slides/unix_slides.pdf deleted file mode 100644 index 034f33479..000000000 Binary files a/01_slides/unix_slides.pdf and /dev/null differ diff --git a/02_activities/assignments/assignment.sh b/02_activities/assignments/assignment.sh new file mode 100644 index 000000000..c857545b0 --- /dev/null +++ b/02_activities/assignments/assignment.sh @@ -0,0 +1,55 @@ +#!/bin/bash +set -x + +############################################ +# DSI CONSULTING INC. Project setup script # +############################################ +# This script creates standard analysis and output directories +# for a new project. It also creates a README file with the +# project name and a brief description of the project. +# Then it unzips the raw data provided by the client. + +mkdir analysis output +touch README.md +touch analysis/main.py + +# download client data +curl -Lo rawdata.zip https://github.com/UofT-DSI/shell/raw/refs/heads/main/02_activities/assignments/rawdata.zip +unzip -q rawdata.zip + +########################################### +# Complete assignment here + +# 1. Create a directory named data +mkdir data + +# 2. Move the ./rawdata directory to ./data/raw +mv ./rawdata ./data/raw + +# 3. List the contents of the ./data/raw directory +ls data/raw + +# 4. In ./data/processed, create the following directories: server_logs, user_logs, and event_logs +mkdir -p data/processed/{server_logs,user_logs,event_logs} + +# 5. Copy all server log files (files with "server" in the name AND a .log extension) from ./data/raw to ./data/processed/server_logs + +cp data/raw/*server*.log data/processed/server_logs/ + +# 6. Repeat the above step for user logs and event logs +cp data/raw/*user*.log data/processed/server_logs/ +cp data/raw/*event*.log data/processed/server_logs/ + +# 7. For user privacy, remove all files containing IP addresses (files with "ipaddr" in the filename) from ./data/raw and ./data/processed/user_logs +rm data/raw/*ipaddr* +rm data/processed/user_logs/*ipaddr* + +# 8. Create a file named ./data/inventory.txt that lists all the files in the subfolders of ./data/processed +find data/processed -type f > data/inventory.txt + + +########################################### + +echo "Project setup is complete!" + +#amended diff --git a/02_activities/assignments/assignment_instructions.md b/02_activities/assignments/assignment_instructions.md new file mode 100644 index 000000000..71cf5a510 --- /dev/null +++ b/02_activities/assignments/assignment_instructions.md @@ -0,0 +1,97 @@ +# Shell / Git Assignment +You work in the data team at a consulting firm, and one of your team's products is helping companies optimize and manage their cloud hosting expenditures. + +Your team has an existing bash script that initializes an analysis directory for each new client. + +You've been asked to update this script to also automate the initial organization of data files provided by clients. + +## Instructions + +### Setup +1. **Forking the Repository**: If you have not already done so, fork this Shell learning module repository following these [instructions](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md#setting-up). + - Forking creates a copy of the main repository in your GitHub account. This allows you to work on your version without affecting the original repository. +2. **Create a Branch for Your Work**: To keep your changes organized, create a new branch named `assignment`: + ```bash + git checkout -b assignment + ``` + +--- + +### Part 1: Update the Data Ingest Script +1. **Modify the Script**: Using the template in ``02_activities/assignments/assignment.sh``, fill in the correct commands as described by the comments. + - It may help to paste your commands into the Terminal as you write your script (or vice versa) to test as you go +2. **Test Your Script Locally**: Execute your script to ensure it works as expected. You may need to make additional tweaks and re-run it until you are satisfied with the results. +3. **Commit Your Changes**: As you complete parts of your script and confirmed that it is working correctly, commit your changes to ensure your progress is saved. + ```bash + git commit assignment.sh -m "describe your changes here" + ``` + +--- + +### Part 2: Merge in Updates from Your Coworkers +Your coworkers have made some other changes to the script. You'll need to incorporate their updates and resolve any conflicts. +1. **Merge the Updates**: Use the following command to pull in changes from the coworker's branch: + ```bash + git pull https://github.com/UofT-DSI/shell coworker-changes --no-rebase + ``` +2. **Resolve Merge Conflicts**: If there are any conflicts, use ```git status``` to see which files are affected, resolve the conflicts manually, and then mark them as resolved. +3. **Commit the Merge**: Once all conflicts are resolved, commit the merge. + +--- + +### Part 3: Test Your Script +1. **Re-test Your Script**: Make sure that your script still works after merging the updates. +2. **Optional Clean Test Setup**: If you'd like to test your script in a clean environment, follow these steps: + ```bash + mkdir assignment_test_clean # make an empty directory + ``` + ```bash + cp assignment.sh assignment_test_clean # copy your script into the empty directory + ``` + ```bash + cd assignment_test_clean # change your working directory to the new clean directory + ``` +3. **Run Your Script**: + ```bash + bash assignment.sh + ``` +4. **Verify the Output**: + - Check if the expected directories are created. + - Verify that files are moved or copied as expected. + - Ensure that files that should be deleted are no longer present. + +--- + +### Submit Your Changes for Review +1. **Commit Your Final Changes**: Ensure all changes are committed in your `assignment` branch. You can verify this with: + ```bash + git status + ``` +2. **Enable GitHub Actions**: Click on the **Actions** tab in your repository and enable workflows if prompted. +![](./github_actions.png) +3. **Create a Pull Request**: + - Open a pull request from your `assignment` branch to your repository's `main` branch. + - The autograder will run automatically and post your assignment grade as a comment. + +--- + +## Submission Information + +🚨 **Please review our [Assignment Submission Guide](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md)** 🚨 for detailed instructions on how to format, branch, and submit your work. Following these guidelines is crucial for your submissions to be evaluated correctly. + +### Grading guidelines: +This assignment is considered complete if all autograder tests pass successfully, and incomplete otherwise. + +### Submission Parameters: +* Submission Due Date: `2025-01-15 - 23:59` +* The branch name for your repo should be: `assignment` +* What to submit for this assignment: + * One or more commits that update the `assignment.sh` script +* What the pull request link should look like for this assignment: `https://github.com//shell/pull/` + * Open a private window in your browser. Copy and paste the link to your pull request into the address bar. Make sure you can see your pull request properly. This helps the technical facilitator and learning support staff review your submission easily. + +Checklist: +- [ ] Create a branch called `assignment`. +- [ ] Ensure that your repository is public. +- [ ] Review [the PR description guidelines](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md#guidelines-for-pull-request-descriptions) and adhere to them. +- [ ] Verify that your link is accessible in a private browser window. diff --git a/02_activities/assignments/rawdata.zip b/02_activities/assignments/rawdata.zip new file mode 100644 index 000000000..fe36b0faf Binary files /dev/null and b/02_activities/assignments/rawdata.zip differ diff --git a/02_activities/practice/shell_advanced/dataset.zip b/02_activities/practice/shell_advanced/dataset.zip new file mode 100644 index 000000000..ef16cf78d Binary files /dev/null and b/02_activities/practice/shell_advanced/dataset.zip differ diff --git a/02_activities/practice/shell_advanced/shell_advanced.md b/02_activities/practice/shell_advanced/shell_advanced.md new file mode 100644 index 000000000..7132f96c3 --- /dev/null +++ b/02_activities/practice/shell_advanced/shell_advanced.md @@ -0,0 +1,65 @@ +# Unix Shell Advanced Practice Problems + +## Introduction +Kaylee and Simeon are biomedical engineering researchers trying to reanalyze data from an undergraduate project, where they collected electroencephalography (EEG), electromyography (EMG), and actigraphy (acceleration and rotational) recordings, and other information from subjects as they tried to keep their balance on a moving platform for a balance project. + +Unfortunately, when they were silly undergraduates, they didn't know to keep their data tidy. They'd like your help efficiently doing the following data management tasks using your newfound Bash knowledge. + +## Tasks +* Complete the listed tasks in Bash +* This problem set requires commands that were not covered in the teaching sessions. +* Feel free to use any commands or strategy that you'd like. Suggested commands are listed. + +### Task 1: Setup your environment +1. Download their undergraduate data package: [dataset.zip](dataset.zip?raw=1) +1. Unzip it into your directory + * *Hint*: Consider the `unzip` command +1. Change directory into the folder containing the data package contents + * *Hint*: Consider the `cd` command +1. To make sure we're keeping good records this time, print the current path to your working directory + * *Hint*: Consider the `pwd` command +1. Make a new folder named `tidied_data` + * *Hint*: Consider the `mkdir` command + +### Task 2: Taking inventory +1. List the contents of the data folder + * *Hint*: Consider the `ls` command +1. List all the EEG files and write this list to a text file in the tidied_data folder named `eeg_inventory.txt`. + * *Hint*: Consider the `ls` and `head` commands, and either the `>` file redirection operator or `|` pipe operator and the `tee` command + * Preview the **first 8 lines** of this file using the `head` command, does this look right? + +### Task 3: Taking inventory, part 2 +1. Let's double check: does the naming convention of the EEG files match `eeg_[subjectid]_[session].edf`? + * List the contents of the folder and inspect it visually! +1. Based on the `eeg_inventory.txt` file and the naming convention, generate a list of subject numbers and write it a file named `subject_ids_from_eeg.txt`. + * Preview the **first 8 lines** of this file. + * *Hint*: Consider the `cut` command +1. Sort the `subject_ids_from_eeg.txt` file and write the output to `subject_ids_from_eeg_sorted.txt`. + * Preview the **first 8 lines** of this file. +1. Let's double check: does each subject have multiple EEG files? Are their subject IDs duplicated? + * *Hint*: Look through the whole with the `less` command +1. Create a unique list of subject IDs and write the output to `subject_ids.txt`. + * *Hint*: Consider the `unique` command + * Preview the **first 8 lines** of this file. + +### Task 4: The life changing magic of tidying up +1. For each subject: + 1. create a folder named after the subject ID in the `tidied_data` directory + * *Hint*: Consider a `for` loop + 1. Move all files relating to that subject into their respective directories (eg. `tidied_data/[subjectid]/eeg_[subjectid]_[session].edf`) + * *Hint*: Consider the `mv` command +1. Notice that all the notes files have not been named consistently. Rename all the note files to `[subjectid]_notes.txt` within each subject folder. + * *Hint*: Consider the `mv` command inside a `for` loop or using `find ... -exec mv ...` + +### Task 5: Checking our work +1. Confirm that you've copied all the files over to the `tidied_data` directory + 1. Count the number of files copied: + 1. Generate a list of all the files within all the directories in `tidied_data` + * *Hint*: Consider the `find` command and look for files with the `-type` option + 1. Count the number of lines in the file list + * *Hint*: Consider the `wc` command. How do we make it count lines? + 1. Count the number of files in the original folder, using the same strategy as above +1. Do the file counts match? + * *Hint*: Consider using variables, an `if` statement, and `-eq` + + \ No newline at end of file diff --git a/02_activities/practice/shell_basics.md b/02_activities/practice/shell_basics.md new file mode 100644 index 000000000..888b7b6d4 --- /dev/null +++ b/02_activities/practice/shell_basics.md @@ -0,0 +1,4 @@ +# Unix Shell Basics Practice Problems + +Load the basic practice problems in your browser here: https://uoft-dsi.github.io/shell/interactive_problems.html#shell_basics + diff --git a/02_activities/practice/shell_moderate.md b/02_activities/practice/shell_moderate.md new file mode 100644 index 000000000..d169c2baa --- /dev/null +++ b/02_activities/practice/shell_moderate.md @@ -0,0 +1,4 @@ +# Unix Shell Moderate Practice Problems + +Load the moderate practice problems in your browser here: https://uoft-dsi.github.io/shell/interactive_problems.html#shell_moderate + diff --git a/02_assignments/assignment.md b/02_assignments/assignment.md deleted file mode 100644 index aa9d037a5..000000000 --- a/02_assignments/assignment.md +++ /dev/null @@ -1,50 +0,0 @@ -## Submission Information - -🚨 **Please review our [Assignment Submission Guide](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md)** 🚨 for detailed instructions on how to format, branch, and submit your work. Following these guidelines is crucial for your submissions to be evaluated correctly. - -### Submission Parameters: -* Submission Due Date: `11:59 PM - 27/04/2024` -* The branch name for your repo should be: `assignment` -* What to submit for this assignment: - * This markdown file (assignment.md) should be populated and should be the only change in your pull request. -* What the pull request link should look like for this assignment: `https://github.com//shell/pull/` - * Open a private window in your browser. Copy and paste the link to your pull request into the address bar. Make sure you can see your pull request properly. This helps the technical facilitator and learning support staff review your submission easily. - -Checklist: -- [ ] Create a branch called `assignment`. -- [ ] Ensure that the repository is public. -- [ ] Review [the PR description guidelines](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md#guidelines-for-pull-request-descriptions) and adhere to them. -- [ ] Verify that the link is accessible in a private browser window. - -# Assignment: The Secret Password - -You are stuck in a virtual room and can only leave if you figure out the password! Fortunately, somebody left behind 6 clues for you to find the secret password, but the messaging is not that clear. It is your job to discover what the secret password is! - -1. The very odd and inedible ingredient in a cake recipe -2. The season number that contains only 18 episodes (Hint: How do you list them?) -3. Fifth word of Season 6, Episode 21 of Friends -4. Fifth word of the fifth fictional Space Wars series -5. Second word of this song that's exactly 4 minutes long in this "colour" album -6. The fourth word to the fourth Hunger Games movie - -## Instructions -1. Fork this Shell learning module repository following these [instructions](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md#setting-up) -2. Use your bash skills (such as `cd`, `cat`, etc.) to figure out what the secret password is! You will be exploring the `clues` directory in your bash terminal. -3. Write the secret password in your own version of this markdown file in your forked repo. - -**What is the secret password?** -``` -Your answer here... - - - - -``` - -|Criteria|Complete|Incomplete| -|---|---|---| -|Secret Password|The user properly used the proper bash commands to find the secret password.|The user did not properly used the proper bash commands to find the secret password.| - - - -If you encounter any difficulties or have questions, please don't hesitate to reach out to our team via our Slack at `#cohort-3-help`. Our Technical Facilitators and Learning Support staff are here to help you navigate any challenges. diff --git a/02_assignments/clues/albums/fearless/song_1.txt b/02_assignments/clues/albums/fearless/song_1.txt deleted file mode 100644 index 8b1378917..000000000 --- a/02_assignments/clues/albums/fearless/song_1.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/02_assignments/clues/albums/fearless/song_2.txt b/02_assignments/clues/albums/fearless/song_2.txt deleted file mode 100644 index 8b1378917..000000000 --- a/02_assignments/clues/albums/fearless/song_2.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/02_assignments/clues/albums/fearless/song_3.txt b/02_assignments/clues/albums/fearless/song_3.txt deleted file mode 100644 index 8b1378917..000000000 --- a/02_assignments/clues/albums/fearless/song_3.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/02_assignments/clues/albums/fearless/song_4.txt b/02_assignments/clues/albums/fearless/song_4.txt deleted file mode 100644 index 8b1378917..000000000 --- a/02_assignments/clues/albums/fearless/song_4.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/02_assignments/clues/albums/fearless/song_5.txt b/02_assignments/clues/albums/fearless/song_5.txt deleted file mode 100644 index 8b1378917..000000000 --- a/02_assignments/clues/albums/fearless/song_5.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/02_assignments/clues/albums/lover/song_1.txt b/02_assignments/clues/albums/lover/song_1.txt deleted file mode 100644 index 8b1378917..000000000 --- a/02_assignments/clues/albums/lover/song_1.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/02_assignments/clues/albums/lover/song_2.txt b/02_assignments/clues/albums/lover/song_2.txt deleted file mode 100644 index 8b1378917..000000000 --- a/02_assignments/clues/albums/lover/song_2.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/02_assignments/clues/albums/lover/song_3.txt b/02_assignments/clues/albums/lover/song_3.txt deleted file mode 100644 index 8b1378917..000000000 --- a/02_assignments/clues/albums/lover/song_3.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/02_assignments/clues/albums/lover/song_4.txt b/02_assignments/clues/albums/lover/song_4.txt deleted file mode 100644 index 8b1378917..000000000 --- a/02_assignments/clues/albums/lover/song_4.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/02_assignments/clues/albums/lover/song_5.txt b/02_assignments/clues/albums/lover/song_5.txt deleted file mode 100644 index 8b1378917..000000000 --- a/02_assignments/clues/albums/lover/song_5.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/02_assignments/clues/albums/red/song_1.txt b/02_assignments/clues/albums/red/song_1.txt deleted file mode 100644 index 19297a449..000000000 --- a/02_assignments/clues/albums/red/song_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -Title: Red -Duration: 3:43 diff --git a/02_assignments/clues/albums/red/song_2.txt b/02_assignments/clues/albums/red/song_2.txt deleted file mode 100644 index ba1e13eaa..000000000 --- a/02_assignments/clues/albums/red/song_2.txt +++ /dev/null @@ -1,2 +0,0 @@ -Title: I Knew You Were Trouble -Duration: 3:39 diff --git a/02_assignments/clues/albums/red/song_3.txt b/02_assignments/clues/albums/red/song_3.txt deleted file mode 100644 index 218bc462a..000000000 --- a/02_assignments/clues/albums/red/song_3.txt +++ /dev/null @@ -1,2 +0,0 @@ -Title: Everything Has Changed -Duration: 4:05 diff --git a/02_assignments/clues/albums/red/song_4.txt b/02_assignments/clues/albums/red/song_4.txt deleted file mode 100644 index e5ce8acd2..000000000 --- a/02_assignments/clues/albums/red/song_4.txt +++ /dev/null @@ -1,2 +0,0 @@ -Title: Holy Ground -Duration: 3:22 diff --git a/02_assignments/clues/albums/red/song_5.txt b/02_assignments/clues/albums/red/song_5.txt deleted file mode 100644 index 889e390de..000000000 --- a/02_assignments/clues/albums/red/song_5.txt +++ /dev/null @@ -1,2 +0,0 @@ -Title: The Lucky One -Duration: 4:00 diff --git a/02_assignments/clues/food/cake/chocolate_cake.txt b/02_assignments/clues/food/cake/chocolate_cake.txt deleted file mode 100644 index 76543aef3..000000000 --- a/02_assignments/clues/food/cake/chocolate_cake.txt +++ /dev/null @@ -1,9 +0,0 @@ -Milk -Cake Flour -Eggs -Cocoa Powder -Dark Chocolate -Baking Powder -Sugar -Vanilla Extract -Butter diff --git a/02_assignments/clues/food/cake/red_velvet_cake.txt b/02_assignments/clues/food/cake/red_velvet_cake.txt deleted file mode 100644 index 0a6ab01bb..000000000 --- a/02_assignments/clues/food/cake/red_velvet_cake.txt +++ /dev/null @@ -1,9 +0,0 @@ -Baking Powder -Milk -Vanilla Extract -Red Food Colouring -Eggs -Cocoa Powder -Sugar -Butter -Cake Flour diff --git a/02_assignments/clues/food/cake/vanilla_cake.txt b/02_assignments/clues/food/cake/vanilla_cake.txt deleted file mode 100644 index 14cced4ac..000000000 --- a/02_assignments/clues/food/cake/vanilla_cake.txt +++ /dev/null @@ -1,8 +0,0 @@ -Milk -Sugar -Baking Powder -Cake Flour -Eggs -Butter -Vanilla Extract -Paper Rings diff --git a/02_assignments/clues/movies/hanger_games/movie_1.txt b/02_assignments/clues/movies/hanger_games/movie_1.txt deleted file mode 100644 index 2e5e16bba..000000000 --- a/02_assignments/clues/movies/hanger_games/movie_1.txt +++ /dev/null @@ -1 +0,0 @@ -Hanger Games & The Struggle of Power diff --git a/02_assignments/clues/movies/hanger_games/movie_2.txt b/02_assignments/clues/movies/hanger_games/movie_2.txt deleted file mode 100644 index cb99cc253..000000000 --- a/02_assignments/clues/movies/hanger_games/movie_2.txt +++ /dev/null @@ -1 +0,0 @@ -Hanger Games & The Revolution diff --git a/02_assignments/clues/movies/hanger_games/movie_3.txt b/02_assignments/clues/movies/hanger_games/movie_3.txt deleted file mode 100644 index ceafb79d5..000000000 --- a/02_assignments/clues/movies/hanger_games/movie_3.txt +++ /dev/null @@ -1 +0,0 @@ -Hanger Games: The Sequel diff --git a/02_assignments/clues/movies/hanger_games/movie_4.txt b/02_assignments/clues/movies/hanger_games/movie_4.txt deleted file mode 100644 index aa3abf56c..000000000 --- a/02_assignments/clues/movies/hanger_games/movie_4.txt +++ /dev/null @@ -1 +0,0 @@ -Hanger Games & the Stars of Darkness diff --git a/02_assignments/clues/movies/space_wars/fifth_movie.txt b/02_assignments/clues/movies/space_wars/fifth_movie.txt deleted file mode 100644 index 42eec78ac..000000000 --- a/02_assignments/clues/movies/space_wars/fifth_movie.txt +++ /dev/null @@ -1 +0,0 @@ -Space Wars: Future Legends and Past Legacies diff --git a/02_assignments/clues/movies/space_wars/first_movie.txt b/02_assignments/clues/movies/space_wars/first_movie.txt deleted file mode 100644 index d6150f03e..000000000 --- a/02_assignments/clues/movies/space_wars/first_movie.txt +++ /dev/null @@ -1 +0,0 @@ -Space Wars and the Rise of the Empire diff --git a/02_assignments/clues/movies/space_wars/fourth_movie.txt b/02_assignments/clues/movies/space_wars/fourth_movie.txt deleted file mode 100644 index 1dc4efaa9..000000000 --- a/02_assignments/clues/movies/space_wars/fourth_movie.txt +++ /dev/null @@ -1 +0,0 @@ -Space Wars: An Old Hope diff --git a/02_assignments/clues/movies/space_wars/second_movie.txt b/02_assignments/clues/movies/space_wars/second_movie.txt deleted file mode 100644 index 7d7bdfbbb..000000000 --- a/02_assignments/clues/movies/space_wars/second_movie.txt +++ /dev/null @@ -1 +0,0 @@ -Space Wars: The 5 years war diff --git a/02_assignments/clues/movies/space_wars/third_movie.txt b/02_assignments/clues/movies/space_wars/third_movie.txt deleted file mode 100644 index 8e984f24d..000000000 --- a/02_assignments/clues/movies/space_wars/third_movie.txt +++ /dev/null @@ -1 +0,0 @@ -Space Wars and the Downfall of the Empire diff --git a/02_assignments/clues/shows/friends/season_1/ep_1.txt b/02_assignments/clues/shows/friends/season_1/ep_1.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_10.txt b/02_assignments/clues/shows/friends/season_1/ep_10.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_11.txt b/02_assignments/clues/shows/friends/season_1/ep_11.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_12.txt b/02_assignments/clues/shows/friends/season_1/ep_12.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_13.txt b/02_assignments/clues/shows/friends/season_1/ep_13.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_14.txt b/02_assignments/clues/shows/friends/season_1/ep_14.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_15.txt b/02_assignments/clues/shows/friends/season_1/ep_15.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_16.txt b/02_assignments/clues/shows/friends/season_1/ep_16.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_17.txt b/02_assignments/clues/shows/friends/season_1/ep_17.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_18.txt b/02_assignments/clues/shows/friends/season_1/ep_18.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_19.txt b/02_assignments/clues/shows/friends/season_1/ep_19.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_2.txt b/02_assignments/clues/shows/friends/season_1/ep_2.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_20.txt b/02_assignments/clues/shows/friends/season_1/ep_20.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_21.txt b/02_assignments/clues/shows/friends/season_1/ep_21.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_22.txt b/02_assignments/clues/shows/friends/season_1/ep_22.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_23.txt b/02_assignments/clues/shows/friends/season_1/ep_23.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_24.txt b/02_assignments/clues/shows/friends/season_1/ep_24.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_3.txt b/02_assignments/clues/shows/friends/season_1/ep_3.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_4.txt b/02_assignments/clues/shows/friends/season_1/ep_4.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_5.txt b/02_assignments/clues/shows/friends/season_1/ep_5.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_6.txt b/02_assignments/clues/shows/friends/season_1/ep_6.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_7.txt b/02_assignments/clues/shows/friends/season_1/ep_7.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_8.txt b/02_assignments/clues/shows/friends/season_1/ep_8.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_1/ep_9.txt b/02_assignments/clues/shows/friends/season_1/ep_9.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_1.txt b/02_assignments/clues/shows/friends/season_10/ep_1.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_10.txt b/02_assignments/clues/shows/friends/season_10/ep_10.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_11.txt b/02_assignments/clues/shows/friends/season_10/ep_11.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_12.txt b/02_assignments/clues/shows/friends/season_10/ep_12.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_13.txt b/02_assignments/clues/shows/friends/season_10/ep_13.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_14.txt b/02_assignments/clues/shows/friends/season_10/ep_14.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_15.txt b/02_assignments/clues/shows/friends/season_10/ep_15.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_16.txt b/02_assignments/clues/shows/friends/season_10/ep_16.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_17.txt b/02_assignments/clues/shows/friends/season_10/ep_17.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_18.txt b/02_assignments/clues/shows/friends/season_10/ep_18.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_2.txt b/02_assignments/clues/shows/friends/season_10/ep_2.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_3.txt b/02_assignments/clues/shows/friends/season_10/ep_3.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_4.txt b/02_assignments/clues/shows/friends/season_10/ep_4.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_5.txt b/02_assignments/clues/shows/friends/season_10/ep_5.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_6.txt b/02_assignments/clues/shows/friends/season_10/ep_6.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_7.txt b/02_assignments/clues/shows/friends/season_10/ep_7.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_8.txt b/02_assignments/clues/shows/friends/season_10/ep_8.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_10/ep_9.txt b/02_assignments/clues/shows/friends/season_10/ep_9.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_1.txt b/02_assignments/clues/shows/friends/season_2/ep_1.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_10.txt b/02_assignments/clues/shows/friends/season_2/ep_10.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_11.txt b/02_assignments/clues/shows/friends/season_2/ep_11.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_12.txt b/02_assignments/clues/shows/friends/season_2/ep_12.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_13.txt b/02_assignments/clues/shows/friends/season_2/ep_13.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_14.txt b/02_assignments/clues/shows/friends/season_2/ep_14.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_15.txt b/02_assignments/clues/shows/friends/season_2/ep_15.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_16.txt b/02_assignments/clues/shows/friends/season_2/ep_16.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_17.txt b/02_assignments/clues/shows/friends/season_2/ep_17.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_18.txt b/02_assignments/clues/shows/friends/season_2/ep_18.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_19.txt b/02_assignments/clues/shows/friends/season_2/ep_19.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_2.txt b/02_assignments/clues/shows/friends/season_2/ep_2.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_20.txt b/02_assignments/clues/shows/friends/season_2/ep_20.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_21.txt b/02_assignments/clues/shows/friends/season_2/ep_21.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_22.txt b/02_assignments/clues/shows/friends/season_2/ep_22.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_23.txt b/02_assignments/clues/shows/friends/season_2/ep_23.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_24.txt b/02_assignments/clues/shows/friends/season_2/ep_24.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_3.txt b/02_assignments/clues/shows/friends/season_2/ep_3.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_4.txt b/02_assignments/clues/shows/friends/season_2/ep_4.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_5.txt b/02_assignments/clues/shows/friends/season_2/ep_5.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_6.txt b/02_assignments/clues/shows/friends/season_2/ep_6.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_7.txt b/02_assignments/clues/shows/friends/season_2/ep_7.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_8.txt b/02_assignments/clues/shows/friends/season_2/ep_8.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_2/ep_9.txt b/02_assignments/clues/shows/friends/season_2/ep_9.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_1.txt b/02_assignments/clues/shows/friends/season_3/ep_1.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_10.txt b/02_assignments/clues/shows/friends/season_3/ep_10.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_11.txt b/02_assignments/clues/shows/friends/season_3/ep_11.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_12.txt b/02_assignments/clues/shows/friends/season_3/ep_12.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_13.txt b/02_assignments/clues/shows/friends/season_3/ep_13.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_14.txt b/02_assignments/clues/shows/friends/season_3/ep_14.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_15.txt b/02_assignments/clues/shows/friends/season_3/ep_15.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_16.txt b/02_assignments/clues/shows/friends/season_3/ep_16.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_17.txt b/02_assignments/clues/shows/friends/season_3/ep_17.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_18.txt b/02_assignments/clues/shows/friends/season_3/ep_18.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_19.txt b/02_assignments/clues/shows/friends/season_3/ep_19.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_2.txt b/02_assignments/clues/shows/friends/season_3/ep_2.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_20.txt b/02_assignments/clues/shows/friends/season_3/ep_20.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_21.txt b/02_assignments/clues/shows/friends/season_3/ep_21.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_22.txt b/02_assignments/clues/shows/friends/season_3/ep_22.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_23.txt b/02_assignments/clues/shows/friends/season_3/ep_23.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_24.txt b/02_assignments/clues/shows/friends/season_3/ep_24.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_25.txt b/02_assignments/clues/shows/friends/season_3/ep_25.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_3.txt b/02_assignments/clues/shows/friends/season_3/ep_3.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_4.txt b/02_assignments/clues/shows/friends/season_3/ep_4.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_5.txt b/02_assignments/clues/shows/friends/season_3/ep_5.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_6.txt b/02_assignments/clues/shows/friends/season_3/ep_6.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_7.txt b/02_assignments/clues/shows/friends/season_3/ep_7.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_8.txt b/02_assignments/clues/shows/friends/season_3/ep_8.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_3/ep_9.txt b/02_assignments/clues/shows/friends/season_3/ep_9.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_1.txt b/02_assignments/clues/shows/friends/season_4/ep_1.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_10.txt b/02_assignments/clues/shows/friends/season_4/ep_10.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_11.txt b/02_assignments/clues/shows/friends/season_4/ep_11.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_12.txt b/02_assignments/clues/shows/friends/season_4/ep_12.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_13.txt b/02_assignments/clues/shows/friends/season_4/ep_13.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_14.txt b/02_assignments/clues/shows/friends/season_4/ep_14.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_15.txt b/02_assignments/clues/shows/friends/season_4/ep_15.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_16.txt b/02_assignments/clues/shows/friends/season_4/ep_16.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_17.txt b/02_assignments/clues/shows/friends/season_4/ep_17.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_18.txt b/02_assignments/clues/shows/friends/season_4/ep_18.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_19.txt b/02_assignments/clues/shows/friends/season_4/ep_19.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_2.txt b/02_assignments/clues/shows/friends/season_4/ep_2.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_20.txt b/02_assignments/clues/shows/friends/season_4/ep_20.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_21.txt b/02_assignments/clues/shows/friends/season_4/ep_21.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_22.txt b/02_assignments/clues/shows/friends/season_4/ep_22.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_23.txt b/02_assignments/clues/shows/friends/season_4/ep_23.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_24.txt b/02_assignments/clues/shows/friends/season_4/ep_24.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_3.txt b/02_assignments/clues/shows/friends/season_4/ep_3.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_4.txt b/02_assignments/clues/shows/friends/season_4/ep_4.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_5.txt b/02_assignments/clues/shows/friends/season_4/ep_5.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_6.txt b/02_assignments/clues/shows/friends/season_4/ep_6.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_7.txt b/02_assignments/clues/shows/friends/season_4/ep_7.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_8.txt b/02_assignments/clues/shows/friends/season_4/ep_8.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_4/ep_9.txt b/02_assignments/clues/shows/friends/season_4/ep_9.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_1.txt b/02_assignments/clues/shows/friends/season_5/ep_1.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_10.txt b/02_assignments/clues/shows/friends/season_5/ep_10.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_11.txt b/02_assignments/clues/shows/friends/season_5/ep_11.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_12.txt b/02_assignments/clues/shows/friends/season_5/ep_12.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_13.txt b/02_assignments/clues/shows/friends/season_5/ep_13.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_14.txt b/02_assignments/clues/shows/friends/season_5/ep_14.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_15.txt b/02_assignments/clues/shows/friends/season_5/ep_15.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_16.txt b/02_assignments/clues/shows/friends/season_5/ep_16.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_17.txt b/02_assignments/clues/shows/friends/season_5/ep_17.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_18.txt b/02_assignments/clues/shows/friends/season_5/ep_18.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_19.txt b/02_assignments/clues/shows/friends/season_5/ep_19.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_2.txt b/02_assignments/clues/shows/friends/season_5/ep_2.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_20.txt b/02_assignments/clues/shows/friends/season_5/ep_20.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_21.txt b/02_assignments/clues/shows/friends/season_5/ep_21.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_22.txt b/02_assignments/clues/shows/friends/season_5/ep_22.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_23.txt b/02_assignments/clues/shows/friends/season_5/ep_23.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_24.txt b/02_assignments/clues/shows/friends/season_5/ep_24.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_3.txt b/02_assignments/clues/shows/friends/season_5/ep_3.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_4.txt b/02_assignments/clues/shows/friends/season_5/ep_4.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_5.txt b/02_assignments/clues/shows/friends/season_5/ep_5.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_6.txt b/02_assignments/clues/shows/friends/season_5/ep_6.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_7.txt b/02_assignments/clues/shows/friends/season_5/ep_7.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_8.txt b/02_assignments/clues/shows/friends/season_5/ep_8.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_5/ep_9.txt b/02_assignments/clues/shows/friends/season_5/ep_9.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_6/ep_1.txt b/02_assignments/clues/shows/friends/season_6/ep_1.txt deleted file mode 100644 index 8b76e6355..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_1.txt +++ /dev/null @@ -1 +0,0 @@ -The One After Vegas diff --git a/02_assignments/clues/shows/friends/season_6/ep_10.txt b/02_assignments/clues/shows/friends/season_6/ep_10.txt deleted file mode 100644 index 6c6eba59f..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_10.txt +++ /dev/null @@ -1 +0,0 @@ -The One with the Routine diff --git a/02_assignments/clues/shows/friends/season_6/ep_11.txt b/02_assignments/clues/shows/friends/season_6/ep_11.txt deleted file mode 100644 index d18825823..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_11.txt +++ /dev/null @@ -1 +0,0 @@ -The One with the Apothecary Table diff --git a/02_assignments/clues/shows/friends/season_6/ep_12.txt b/02_assignments/clues/shows/friends/season_6/ep_12.txt deleted file mode 100644 index 44533a711..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_12.txt +++ /dev/null @@ -1 +0,0 @@ -The One with the Joke diff --git a/02_assignments/clues/shows/friends/season_6/ep_13.txt b/02_assignments/clues/shows/friends/season_6/ep_13.txt deleted file mode 100644 index 4b6766ce3..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_13.txt +++ /dev/null @@ -1 +0,0 @@ -The One with Rachel's Sister diff --git a/02_assignments/clues/shows/friends/season_6/ep_14.txt b/02_assignments/clues/shows/friends/season_6/ep_14.txt deleted file mode 100644 index c17cb0bc3..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_14.txt +++ /dev/null @@ -1 +0,0 @@ -The One Where Chandler Can't Cry diff --git a/02_assignments/clues/shows/friends/season_6/ep_15.txt b/02_assignments/clues/shows/friends/season_6/ep_15.txt deleted file mode 100644 index 85f736a5d..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_15.txt +++ /dev/null @@ -1 +0,0 @@ -The One That Could Have Been diff --git a/02_assignments/clues/shows/friends/season_6/ep_16.txt b/02_assignments/clues/shows/friends/season_6/ep_16.txt deleted file mode 100644 index 85f736a5d..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_16.txt +++ /dev/null @@ -1 +0,0 @@ -The One That Could Have Been diff --git a/02_assignments/clues/shows/friends/season_6/ep_17.txt b/02_assignments/clues/shows/friends/season_6/ep_17.txt deleted file mode 100644 index 7368e28a3..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_17.txt +++ /dev/null @@ -1 +0,0 @@ -The One with Unagi diff --git a/02_assignments/clues/shows/friends/season_6/ep_18.txt b/02_assignments/clues/shows/friends/season_6/ep_18.txt deleted file mode 100644 index a51f476f6..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_18.txt +++ /dev/null @@ -1 +0,0 @@ -The One Where Ross Dates a Student diff --git a/02_assignments/clues/shows/friends/season_6/ep_19.txt b/02_assignments/clues/shows/friends/season_6/ep_19.txt deleted file mode 100644 index 19f3b6cf3..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_19.txt +++ /dev/null @@ -1 +0,0 @@ -The One with Joey's Fridge diff --git a/02_assignments/clues/shows/friends/season_6/ep_2.txt b/02_assignments/clues/shows/friends/season_6/ep_2.txt deleted file mode 100644 index 78beef623..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_2.txt +++ /dev/null @@ -1 +0,0 @@ -The One Where Ross Hugs Rachel diff --git a/02_assignments/clues/shows/friends/season_6/ep_20.txt b/02_assignments/clues/shows/friends/season_6/ep_20.txt deleted file mode 100644 index 57ca54af3..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_20.txt +++ /dev/null @@ -1 +0,0 @@ -The One with Mac and C.H.E.E.S.E. diff --git a/02_assignments/clues/shows/friends/season_6/ep_21.txt b/02_assignments/clues/shows/friends/season_6/ep_21.txt deleted file mode 100644 index 86f35ec9c..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_21.txt +++ /dev/null @@ -1 +0,0 @@ -The One Where Ross Meets Elizabeth's Dad diff --git a/02_assignments/clues/shows/friends/season_6/ep_22.txt b/02_assignments/clues/shows/friends/season_6/ep_22.txt deleted file mode 100644 index 37da6a8cb..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_22.txt +++ /dev/null @@ -1 +0,0 @@ -The One Where Paul's the Man diff --git a/02_assignments/clues/shows/friends/season_6/ep_23.txt b/02_assignments/clues/shows/friends/season_6/ep_23.txt deleted file mode 100644 index 00aede0d8..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_23.txt +++ /dev/null @@ -1 +0,0 @@ -The One with the Ring diff --git a/02_assignments/clues/shows/friends/season_6/ep_24.txt b/02_assignments/clues/shows/friends/season_6/ep_24.txt deleted file mode 100644 index 0f43fb602..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_24.txt +++ /dev/null @@ -1 +0,0 @@ -The One with the Proposal diff --git a/02_assignments/clues/shows/friends/season_6/ep_25.txt b/02_assignments/clues/shows/friends/season_6/ep_25.txt deleted file mode 100644 index 0f43fb602..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_25.txt +++ /dev/null @@ -1 +0,0 @@ -The One with the Proposal diff --git a/02_assignments/clues/shows/friends/season_6/ep_3.txt b/02_assignments/clues/shows/friends/season_6/ep_3.txt deleted file mode 100644 index fe48785ed..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_3.txt +++ /dev/null @@ -1 +0,0 @@ -The One with Ross's Denial diff --git a/02_assignments/clues/shows/friends/season_6/ep_4.txt b/02_assignments/clues/shows/friends/season_6/ep_4.txt deleted file mode 100644 index b62a6b78b..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_4.txt +++ /dev/null @@ -1 +0,0 @@ -The One Where Joey Loses His Insurance diff --git a/02_assignments/clues/shows/friends/season_6/ep_5.txt b/02_assignments/clues/shows/friends/season_6/ep_5.txt deleted file mode 100644 index 37b5b4268..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_5.txt +++ /dev/null @@ -1 +0,0 @@ -The One with Joey's Porsche diff --git a/02_assignments/clues/shows/friends/season_6/ep_6.txt b/02_assignments/clues/shows/friends/season_6/ep_6.txt deleted file mode 100644 index 161184d37..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_6.txt +++ /dev/null @@ -1 +0,0 @@ -The One on the Last Night diff --git a/02_assignments/clues/shows/friends/season_6/ep_7.txt b/02_assignments/clues/shows/friends/season_6/ep_7.txt deleted file mode 100644 index c32f54af2..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_7.txt +++ /dev/null @@ -1 +0,0 @@ -The One Where Phoebe Runs diff --git a/02_assignments/clues/shows/friends/season_6/ep_8.txt b/02_assignments/clues/shows/friends/season_6/ep_8.txt deleted file mode 100644 index f4c06fea0..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_8.txt +++ /dev/null @@ -1 +0,0 @@ -The One with Ross's Teeth diff --git a/02_assignments/clues/shows/friends/season_6/ep_9.txt b/02_assignments/clues/shows/friends/season_6/ep_9.txt deleted file mode 100644 index fa5efb47a..000000000 --- a/02_assignments/clues/shows/friends/season_6/ep_9.txt +++ /dev/null @@ -1 +0,0 @@ -The One Where Ross Got High diff --git a/02_assignments/clues/shows/friends/season_7/ep_1.txt b/02_assignments/clues/shows/friends/season_7/ep_1.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_10.txt b/02_assignments/clues/shows/friends/season_7/ep_10.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_11.txt b/02_assignments/clues/shows/friends/season_7/ep_11.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_12.txt b/02_assignments/clues/shows/friends/season_7/ep_12.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_13.txt b/02_assignments/clues/shows/friends/season_7/ep_13.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_14.txt b/02_assignments/clues/shows/friends/season_7/ep_14.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_15.txt b/02_assignments/clues/shows/friends/season_7/ep_15.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_16.txt b/02_assignments/clues/shows/friends/season_7/ep_16.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_17.txt b/02_assignments/clues/shows/friends/season_7/ep_17.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_18.txt b/02_assignments/clues/shows/friends/season_7/ep_18.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_19.txt b/02_assignments/clues/shows/friends/season_7/ep_19.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_2.txt b/02_assignments/clues/shows/friends/season_7/ep_2.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_20.txt b/02_assignments/clues/shows/friends/season_7/ep_20.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_21.txt b/02_assignments/clues/shows/friends/season_7/ep_21.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_22.txt b/02_assignments/clues/shows/friends/season_7/ep_22.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_23.txt b/02_assignments/clues/shows/friends/season_7/ep_23.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_24.txt b/02_assignments/clues/shows/friends/season_7/ep_24.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_3.txt b/02_assignments/clues/shows/friends/season_7/ep_3.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_4.txt b/02_assignments/clues/shows/friends/season_7/ep_4.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_5.txt b/02_assignments/clues/shows/friends/season_7/ep_5.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_6.txt b/02_assignments/clues/shows/friends/season_7/ep_6.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_7.txt b/02_assignments/clues/shows/friends/season_7/ep_7.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_8.txt b/02_assignments/clues/shows/friends/season_7/ep_8.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_7/ep_9.txt b/02_assignments/clues/shows/friends/season_7/ep_9.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_1.txt b/02_assignments/clues/shows/friends/season_8/ep_1.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_10.txt b/02_assignments/clues/shows/friends/season_8/ep_10.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_11.txt b/02_assignments/clues/shows/friends/season_8/ep_11.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_12.txt b/02_assignments/clues/shows/friends/season_8/ep_12.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_13.txt b/02_assignments/clues/shows/friends/season_8/ep_13.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_14.txt b/02_assignments/clues/shows/friends/season_8/ep_14.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_15.txt b/02_assignments/clues/shows/friends/season_8/ep_15.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_16.txt b/02_assignments/clues/shows/friends/season_8/ep_16.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_17.txt b/02_assignments/clues/shows/friends/season_8/ep_17.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_18.txt b/02_assignments/clues/shows/friends/season_8/ep_18.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_19.txt b/02_assignments/clues/shows/friends/season_8/ep_19.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_2.txt b/02_assignments/clues/shows/friends/season_8/ep_2.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_20.txt b/02_assignments/clues/shows/friends/season_8/ep_20.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_21.txt b/02_assignments/clues/shows/friends/season_8/ep_21.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_22.txt b/02_assignments/clues/shows/friends/season_8/ep_22.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_23.txt b/02_assignments/clues/shows/friends/season_8/ep_23.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_24.txt b/02_assignments/clues/shows/friends/season_8/ep_24.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_3.txt b/02_assignments/clues/shows/friends/season_8/ep_3.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_4.txt b/02_assignments/clues/shows/friends/season_8/ep_4.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_5.txt b/02_assignments/clues/shows/friends/season_8/ep_5.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_6.txt b/02_assignments/clues/shows/friends/season_8/ep_6.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_7.txt b/02_assignments/clues/shows/friends/season_8/ep_7.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_8.txt b/02_assignments/clues/shows/friends/season_8/ep_8.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_8/ep_9.txt b/02_assignments/clues/shows/friends/season_8/ep_9.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_1.txt b/02_assignments/clues/shows/friends/season_9/ep_1.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_10.txt b/02_assignments/clues/shows/friends/season_9/ep_10.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_11.txt b/02_assignments/clues/shows/friends/season_9/ep_11.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_12.txt b/02_assignments/clues/shows/friends/season_9/ep_12.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_13.txt b/02_assignments/clues/shows/friends/season_9/ep_13.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_14.txt b/02_assignments/clues/shows/friends/season_9/ep_14.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_15.txt b/02_assignments/clues/shows/friends/season_9/ep_15.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_16.txt b/02_assignments/clues/shows/friends/season_9/ep_16.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_17.txt b/02_assignments/clues/shows/friends/season_9/ep_17.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_18.txt b/02_assignments/clues/shows/friends/season_9/ep_18.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_19.txt b/02_assignments/clues/shows/friends/season_9/ep_19.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_2.txt b/02_assignments/clues/shows/friends/season_9/ep_2.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_20.txt b/02_assignments/clues/shows/friends/season_9/ep_20.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_21.txt b/02_assignments/clues/shows/friends/season_9/ep_21.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_22.txt b/02_assignments/clues/shows/friends/season_9/ep_22.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_23.txt b/02_assignments/clues/shows/friends/season_9/ep_23.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_24.txt b/02_assignments/clues/shows/friends/season_9/ep_24.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_3.txt b/02_assignments/clues/shows/friends/season_9/ep_3.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_4.txt b/02_assignments/clues/shows/friends/season_9/ep_4.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_5.txt b/02_assignments/clues/shows/friends/season_9/ep_5.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_6.txt b/02_assignments/clues/shows/friends/season_9/ep_6.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_7.txt b/02_assignments/clues/shows/friends/season_9/ep_7.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_8.txt b/02_assignments/clues/shows/friends/season_9/ep_8.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/02_assignments/clues/shows/friends/season_9/ep_9.txt b/02_assignments/clues/shows/friends/season_9/ep_9.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/03_homework/homework.sh b/03_homework/homework.sh deleted file mode 100644 index 04b94726e..000000000 --- a/03_homework/homework.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -# Instructions: -# Please run the following command in the terminal where homework.sh is located to make the file executable. -# chmod +x ./homework.sh - -# On your terminal, input all the commands you have used to create the following: - -# 1. How would you create 5 directories? Feel free to use any name for your directories. - -# 2. How would you verify the creation of all 5 directories? - -# 3. In each directory, how would you create 5 .txt files and write "I love data" into each within the directories? - -# 4. How would you verify the presence of all 5 files? - -# 5. How would you append to one of the existing files " and machine learning!"? - -# 6. How would you verify that the text was indeed appended to the existing file? - -# 7. How would you delete all files except for the one with the appended text? - -# 8. How would you navigate back to the parent directory containing all the directories? - -# 9. How would you remove each directory along with its contents? - -# 10. How would you verify that all directories and files have been deleted? diff --git a/04_instructional_team/README.md b/03_instructional_team/README.md similarity index 81% rename from 04_instructional_team/README.md rename to 03_instructional_team/README.md index 562138f51..d16e11b24 100644 --- a/04_instructional_team/README.md +++ b/03_instructional_team/README.md @@ -1,7 +1,7 @@ # Instructional Team Playbook ## How do you interact with the repo? -The Technical Facilitator will deliver the content in the `/01_slides` directory. You are encouraged to live code with participants during live sessions. Please ensure that live-coding files are uploaded to a new directory called `/live-coding` under `/01_slides` in this repository using a new branch. Please open a pull request for it to be merged. +The Technical Facilitator will deliver the content in the `/01_materials/slides` directory. You are encouraged to live code with participants during live sessions. Please ensure that live coding files are uploaded to a new directory called `/live_code` under `/04_cohort_three` in this repository using a new branch. Please open a pull request for it to be merged. ## How does the module flow? The module is organized into 3 main directories: @@ -9,11 +9,11 @@ The module is organized into 3 main directories: 2. Assignments 3. Homework -The `/01_slides` directory contains the live learning session slides and the live-coding files. +The `/01_materials/slides` directory contains the live learning session slides. -The `/02_assignments` contains assignments participants should submit for evaluation as `complete` or `incomplete`. The assignments measure a participant's achievement of the learning outcomes, and help technical facilitators determine if a participant has successfully completed the learning module. +The `/02_activities/assignments` contains assignments participants should submit for evaluation as `complete` or `incomplete`. The assignments measure a participant's achievement of the learning outcomes, and help technical facilitators determine if a participant has successfully completed the learning module. -The `/03_homework` directory contains homework participants can complete to further develop and practice the skills covered in a learning module. Homework is optional, but participants are encouraged to complete as much as they can. +The `/02_activities/homework` directory contains homework participants can complete to further develop and practice the skills covered in a learning module. Homework is optional, but participants are encouraged to complete as much as they can. ### Week 1 diff --git a/03_instructional_team/autograder/autograder.py b/03_instructional_team/autograder/autograder.py new file mode 100644 index 000000000..6fdfcf230 --- /dev/null +++ b/03_instructional_team/autograder/autograder.py @@ -0,0 +1,344 @@ +import pandas as pd +import os +import requests +import glob +from itertools import compress + +# get environment variables for output +if 'GITHUB_TOKEN' in os.environ: + github_token = os.environ["GITHUB_TOKEN"] + github_step_output = os.environ['GITHUB_STEP_SUMMARY'] + github_repo_owner = os.environ["REPO_OWNER"] + github_repo_name = os.environ["REPO_NAME"] + github_repo_branch = os.environ["REPO_BRANCH"] + github_pr_number = os.environ["PR_NUMBER"] +else: + github_token = None + +working_dir = os.environ["WORKING_DIR"] + +status_c = 'βœ…' +status_i = '❌' +status_u = '⚠️' + + +# functions +def is_commit_in_branch( + owner, + repo, + branch, + other_owner, + other_repo, + other_branch, +): + headers = {} + if github_token: + headers['Authorization'] = f'token {github_token}' + + # Step 1: Get the latest commit SHA of the other repository's branch + other_commit_url = f'https://api.github.com/repos/{other_owner}/{other_repo}/commits/{other_branch}' + response = requests.get(other_commit_url, headers=headers) + response.raise_for_status() + other_commit_sha = response.json()['sha'] + print(f'Commit SHA of {other_owner}/{other_repo}/{other_branch}: {other_commit_sha}') + + # Step 2: Check if this commit exists in the given repository + commit_in_repo_url = f'https://api.github.com/repos/{owner}/{repo}/commits/{other_commit_sha}' + response = requests.get(commit_in_repo_url, headers=headers) + if response.status_code == 404: + # Commit does not exist in the given repository + print(f'Commit {other_commit_sha} not found in {owner}/{repo}') + return False + response.raise_for_status() + + # Step 3: Compare the commit with the branch in the given repository + compare_url = f'https://api.github.com/repos/{owner}/{repo}/compare/main...{branch}' + response = requests.get(compare_url, headers=headers) + response.raise_for_status() + compare_data = response.json() + + commit_shas = [commit['sha'] for commit in compare_data['commits']] + + # If the status is 'ahead' or 'identical', the commit is in the history + print(f'Commit SHAs in {owner}/{repo}/{branch}: {commit_shas}') + return other_commit_sha in commit_shas + + +# score table +s = [] + +# load script output +with open(working_dir + '_output.txt', 'r') as f: + script_rslt = f.read() + +script_rslt = script_rslt.split('\n+') +script_rslt = [{ + 'command': x.split('\n')[0][1:].strip(), + 'output': x.split('\n')[1:] +} for x in script_rslt] + +qn = 0 + +############################################################################################################ +# Step 1: Check if 'data' directory exists +qn += 1 +if os.path.isdir(os.path.join(working_dir, 'data')): + s.append({'question': f'Part 1 - Q{qn:d}', 'status': 1}) +else: + s.append({ + 'question': f'Part 1 - Q{qn:d}', + 'status': 0, + 'comment': 'data directory does not exist' + }) + +############################################################################################################ +# Step 2: Check that 'rawdata' directory was moved to 'data/raw' +qn += 1 +if os.path.isdir(os.path.join(working_dir, 'data/raw')) and not os.path.exists( + os.path.join(working_dir, 'rawdata')): + s.append({'question': f'Part 1 - Q{qn:d}', 'status': 1}) +else: + s.append({ + 'question': f'Part 1 - Q{qn:d}', + 'status': 0, + 'comment': 'rawdata not moved to data/raw' + }) + +############################################################################################################ +# Step 3: Check that 'ls data/raw' command was run +qn += 1 +indx = [i for i, x in enumerate(script_rslt) if x['command'].startswith('ls')] +if len(indx) > 0: + if any(['data/raw' in script_rslt[i]['command'] for i in indx]): + s.append({'question': f'Part 1 - Q{qn:d}', 'status': 1}) + else: + s.append({ + 'question': f'Part 1 - Q{qn:d}', + 'status': 0, + 'comment': '`ls` command run on wrong directory' + }) +else: + s.append({'question': f'Part 1 - Q{qn:d}', 'status': 0, 'comment': '`ls` command not run'}) + +############################################################################################################ +# Step 4: Check that in 'data/processed', the directories server_logs, user_logs, and event_logs were created +qn += 1 +dirs = [ + 'data/processed/server_logs', 'data/processed/user_logs', + 'data/processed/event_logs' +] +if all([os.path.isdir(os.path.join(working_dir, d)) for d in dirs]): + s.append({'question': f'Part 1 - Q{qn:d}', 'status': 1}) +else: + missing_dirs = [ + d for d in dirs if not os.path.isdir(os.path.join(working_dir, d)) + ] + s.append({ + 'question': f'Part 1 - Q{qn:d}', + 'status': 0, + 'comment': f'Missing directories: {", ".join(missing_dirs)}' + }) + + +############################################################################################################ +# Step 5: Check that server log files were copied from 'data/raw' to 'data/processed/server_logs' +def check_logs(log_type): + raw_logs = glob.glob( + os.path.join(working_dir, f'data/raw/*{log_type}*.log')) + processed_logs = glob.glob( + os.path.join(working_dir, f'data/processed/{log_type}_logs/*')) + if len(raw_logs) == 0: + return {'status': 0, 'comment': f'No {log_type} log files in data/raw'} + else: + raw_log_files = [os.path.basename(f) for f in raw_logs] + processed_log_files = [os.path.basename(f) for f in processed_logs] + if all([f in processed_log_files for f in raw_log_files]): + return {'status': 1} + else: + return { + 'status': 0, + 'comment': f'Missing files in data/processed/{log_type}_logs' + } + + +# Check server logs +qn += 1 +result = check_logs('server') +if result['status'] == 1: + s.append({'question': f'Part 1 - Q{qn:d}', 'status': 1}) +else: + s.append({'question': f'Part 1 - Q{qn:d}', 'status': 0, 'comment': result['comment']}) + +############################################################################################################ +# Step 6: Check that user logs and event logs were copied appropriately +qn += 1 + +result_user = check_logs('user') +result_event = check_logs('event') + +if result_user['status'] == 1 and result_event['status'] == 1: + s.append({'question': f'Part 1 - Q{qn:d}', 'status': 1}) +else: + comments = [] + if result_user['status'] == 0: + comments.append(result_user['comment']) + if result_event['status'] == 0: + comments.append(result_event['comment']) + s.append({'question': f'Part 1 - Q{qn:d}', 'status': 0, 'comment': '; '.join(comments)}) + +############################################################################################################ +# Step 7: Check that files containing 'ipaddr' in the filename were removed from 'data/raw' and 'data/processed/user_logs' +qn += 1 + +ipaddr_files_raw = glob.glob(os.path.join(working_dir, 'data/raw/*ipaddr*')) +ipaddr_files_user_logs = glob.glob( + os.path.join(working_dir, 'data/processed/user_logs/*ipaddr*')) + +if not ipaddr_files_raw and not ipaddr_files_user_logs: + s.append({'question': f'Part 1 - Q{qn:d}', 'status': 1}) +else: + comments = [] + if ipaddr_files_raw: + comments.append( + 'One or more files with ipaddr in data/raw not removed.') + if ipaddr_files_user_logs: + comments.append( + 'One or more files with ipaddr in data/processed/user_logs not removed' + ) + s.append({'question': f'Part 1 - Q{qn:d}', 'status': 0, 'comment': '; '.join(comments)}) + +############################################################################################################ +# Step 8: Check that 'data/inventory.txt' was created and contains all files in 'data/processed' subfolders +qn += 1 + +if os.path.isfile(os.path.join(working_dir, 'data/inventory.txt')): + with open(os.path.join(working_dir, 'data/inventory.txt'), 'r') as f: + inventory_files = [line.strip() for line in f.readlines()] + + # Now, find all files in 'data/processed' and its subfolders + processed_files = [] + for root, dirs, files in os.walk( + os.path.join(working_dir, 'data/processed')): + for name in files: + processed_files.append(name) + + files_in_inventory = [ + any([f in x for x in inventory_files]) for f in processed_files + ] + + missing = list(compress(processed_files, [not x for x in files_in_inventory])) + if len(missing) > 0: + print('Missing files in inventory: ' + ', '.join(missing)) + + # check if data/raw is present in the inventory + data_raw_present = any(['data/raw' in x for x in inventory_files]) + + if data_raw_present: + s.append({ + 'question': + f'Part 1 - Q{qn:d}', + 'status': + 0, + 'comment': + 'data/inventory.txt appears to list the contents of data/raw' + }) + elif all(files_in_inventory): + s.append({'question': f'Part 1 - Q{qn:d}', 'status': 1}) + else: + s.append({ + 'question': + f'Part 1 - Q{qn:d}', + 'status': + 0, + 'comment': + 'data/inventory.txt does not contain all files in data/processed' + }) +else: + s.append({ + 'question': f'Part 1 - Q{qn:d}', + 'status': 0, + 'comment': 'data/inventory.txt does not exist' + }) + +############################################################################################################ +# Step 2-1: Check if the coworker's commit ID is in the commit history + +try: + # Check if commit_id is in git rev-list HEAD using grep and wc -l + result = is_commit_in_branch( + github_repo_owner, + github_repo_name, + github_repo_branch, + 'UofT-DSI', + 'shell', + 'coworker-changes', + ) + if result: + s.append({'question': 'Part 2', 'status': 1}) + else: + s.append({ + 'question': + 'Part 2', + 'status': + 0, + 'comment': + f'`coworker-changes` branch not found in commit history' + }) + +except Exception as e: + s.append({ + 'question': 'Part 2', + 'status': pd.NA, + 'comment': f'Error checking git commit history.' + }) + print(f"Error checking git commit history: {e}") + +############################################################################################################ + +### Postprocessing ### +df = pd.DataFrame(s) +if 'comment' in df.columns: + df['comment'] = df['comment'].fillna('') + +# compute percentage correct +correct = df['status'].sum() +total = df.shape[0] + +# output the score table +df['status'] = df['status'].replace({1: status_c, 0: status_i, pd.NA: status_u}) +if github_token: + df.to_markdown(github_step_output, index=False) + +# also display markdown to console +render_md = df.to_markdown(index=False) +print(render_md) + +# create GitHub comment with markdown +if github_token: + headers = { + "Authorization": f"Bearer {github_token}", + "Accept": "application/vnd.github+json" + } + + if correct == total: + # also approve the PR + requests.post( + f"https://api.github.com/repos/{github_repo_owner}/{github_repo_name}/pulls/{github_pr_number}/reviews", + json={"event": "APPROVE", "body": "## Autograder results\n" + render_md }, + headers=headers) + else: + # request changes to the PR + requests.post( + f"https://api.github.com/repos/{github_repo_owner}/{github_repo_name}/pulls/{github_pr_number}/reviews", + json={"event": "REQUEST_CHANGES", "body": "## Autograder results\n" + render_md + "\n\nPlease address the issues listed above." }, + headers=headers) + +else: + print("GitHub token not found. Skipping comment creation.") + +if correct == total: + print('All tests passed!') + exit(0) +else: + print(f'Only {correct}/{total} tests passed.') + exit(0) diff --git a/03_instructional_team/autograder/requirements.txt b/03_instructional_team/autograder/requirements.txt new file mode 100644 index 000000000..60edec395 --- /dev/null +++ b/03_instructional_team/autograder/requirements.txt @@ -0,0 +1,3 @@ +pandas +tabulate +requests diff --git a/04_instructional_team/generate_slides.sh b/03_instructional_team/generate_slides.sh similarity index 86% rename from 04_instructional_team/generate_slides.sh rename to 03_instructional_team/generate_slides.sh index 594f16f7c..12c01991d 100755 --- a/04_instructional_team/generate_slides.sh +++ b/03_instructional_team/generate_slides.sh @@ -1,8 +1,8 @@ #!/bin/bash # CONFIGURATION -folder_md="lessons/" -folder_output="../01_slides" # This will be used for both PDF and HTML +folder_md="markdown_slides/" +folder_output="../01_materials/slides" # This will be used for both PDF and HTML # Clear the screen for the splash screen clear @@ -38,7 +38,7 @@ function show_help() { echo "" echo "Options:" echo " --html Generate slides in HTML format. This option" - echo " processes all Markdown files in the 'lessons'" + echo " processes all Markdown files in the 'markdown_slides'" echo " directory, outputting HTML files." echo "" echo " --pdf Generate slides in PDF format. Similar to --html," @@ -59,8 +59,8 @@ function show_help() { echo " $0 --pdf" echo "" echo "Note:" - echo " Ensure Marp CLI is installed and accessible in your system's PATH." - echo " The script processes Markdown (.md) files located in the 'lessons'" + echo " Ensure Node.js is installed and npm is accessible in your system's PATH." + echo " The script processes Markdown (.md) files located in the 'markdown_slides'" echo -e " directory, preserving filenames but changing extensions to .html or .pdf.\n\n" } @@ -71,11 +71,16 @@ if [ "$#" -lt 1 ]; then fi # Check for Marp CLI installation -if ! command -v marp &> /dev/null; then - echo "- Error: Marp CLI is not installed. Please install Marp CLI to proceed." +if ! command -v npx >/dev/null 2>&1; then + echo "- Error: npx is not installed. Please install Node.js to proceed." exit 1 fi +if ! npx marp --version >/dev/null 2>&1; then + echo "- Marp CLI is not installed. Installing Marp CLI in this repository..." + npm install --no-save @marp-team/marp-cli +fi + # Defaults output_type="" theme_path="" @@ -144,12 +149,12 @@ for markdown_file in $markdown_files; do # Generate HTML output_file+=".html" echo " - Generating HTML: $output_file" - marp "$markdown_file" --output "$output_file" --html --allow-local-files ${theme_path:+--theme-set $theme_path} # &> /dev/null + npx marp "$markdown_file" --output "$output_file" --html --allow-local-files ${theme_path:+--theme-set $theme_path} # &> /dev/null elif [ "$output_type" = "--pdf" ]; then # Generate PDF output_file+=".pdf" echo " - Generating PDF: $output_file" - marp "$markdown_file" --output "$output_file" --pdf --allow-local-files --pdf-notes ${theme_path:+--theme-set $theme_path} # &> /dev/null + npx marp "$markdown_file" --output "$output_file" --pdf --allow-local-files --pdf-notes ${theme_path:+--theme-set $theme_path} # &> /dev/null else # nahhh show_help diff --git a/03_instructional_team/githubpages/README for interactive problems.md b/03_instructional_team/githubpages/README for interactive problems.md new file mode 100644 index 000000000..5bd9fd619 --- /dev/null +++ b/03_instructional_team/githubpages/README for interactive problems.md @@ -0,0 +1,42 @@ +# Interactive Problems Rendering System + +The interactive problem set rendering system was developed by Simeon Wong for the Data Sciences Institute. + +The page is served through GitHub pages, and loads problem sets encoded in a YAML file with the following format: +```yaml +title: Problem Set Title +Problems + - title: Problem 1 + description: Solve this problem + questiontype: freeform + solution_template: `example code` + solutions: Long form solution with explanations + + - title: Problem 2 + description: Solve this problem + questiontype: parsons + options: + - code line 1 + - code line 2 + - code line 3 + - code line 4 + correct_options: [0, [1, 2], 3] + solutions: Long form solution + + - title: Problem 3 + description: Solve this problem + questiontype: multiplechoice + options: + - option 1 + - option 2 + correct_options: [0] + solutions: Long form solution +``` + +This system provides instructors with a convenient way to setup self-contained problem sets hosted entirely within a GitHub repository. + +### Setup +1. Copy `03_instructional_team/githubpages/interactive_problems.html` and `.github/workflows/static.yml` into your repository +2. Enable [GitHub Actions](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#managing-github-actions-permissions-for-your-repository) and [GitHub Pages](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-with-a-custom-github-actions-workflow) +3. Create a YAML file with your problems [[Example]](/03_instructional_team/githubpages/shell_basics.yml) +4. Create a Markdown file in your `02_activities/homework` folder linking to the interactive problems page [[Example]](02_activities/homework/shell_basics.md) diff --git a/03_instructional_team/githubpages/interactive_problems.html b/03_instructional_team/githubpages/interactive_problems.html new file mode 100644 index 000000000..f22597226 --- /dev/null +++ b/03_instructional_team/githubpages/interactive_problems.html @@ -0,0 +1,421 @@ + + + + + + + + + + + + + + +
+
+
+

+
+
+
+ + + + \ No newline at end of file diff --git a/03_instructional_team/githubpages/shell_basics.yml b/03_instructional_team/githubpages/shell_basics.yml new file mode 100644 index 000000000..7506e89e8 --- /dev/null +++ b/03_instructional_team/githubpages/shell_basics.yml @@ -0,0 +1,321 @@ +title: Shell Basics Practice Problems +problems: + - title: "Creating Directories" + description: | + Which command would you use to create a directory named `dir1`? + questiontype: multiplechoice + options: + - "`mkdir dir1`" + - "`touch dir1`" + - "`cd dir1`" + - "`ls dir1`" + correct_options: [0] + solution: | + The correct command to create a directory named `dir1` is: + ```bash + mkdir dir1 + ``` + + * `touch dir1` would create a file named `dir1`, not a directory. + * `cd dir1` would change into a directory named `dir1`, but it doesn't create it. + * `ls dir1` would list the contents of a directory named `dir1`, but it doesn't create it. + + - title: "Creating Directories" + description: | + How would you create directories named `dir2` and `dir3`, within a new directory named `dir1`? + questiontype: multiplechoice + options: + - | + ``` + mkdir dir1/dir2 dir1/dir3 + ``` + - | + ``` + mkdir dir1 + mkdir dir1/dir2 dir1/dir3 + ``` + - | + ``` + mkdir dir1 + mkdir dir2 dir3 + ``` + - | + ``` + cd dir1 + mkdir dir2 dir3 + ``` + - | + ``` + mkdir dir1 + cd dir2 + mkdir dir3 + ``` + correct_options: [1] + solution: | + First, we must create `dir1`, and then we can create `dir2` and `dir3` inside it. + + Alternatively, we can use the `mkdir -p` command to create the parent directory and subdirectories in one go: + ```bash + mkdir -p dir1/dir2 dir1/dir3 + ``` + This command would creates `dir1` and its subdirectories `dir2` and `dir3` in a single step. + + + The other options are incorrect. + ``` + mkdir dir1 + mkdir dir2 dir3 + ``` + * This would create `dir2` and `dir3` in the current directory, not inside `dir1`. + + + ``` + cd dir1 + mkdir dir2 dir3 + ``` + * This would fail because `dir1` does not exist yet. + + + ``` + mkdir dir1 + cd dir2 + mkdir dir3 + ``` + * This would fail because `dir2` does not exist yet. + + + - title: "Verifying Directory Creation" + description: | + You've just created the directories above. + + For reference, this is your current terminal session: + ```bash + user@computer:~$ pwd + /home/user + user@computer:~$ + ``` + + How might you verify the directories were created successfully? + questiontype: multiplechoice + options: + - "`ls`" + - "`ls -r`" + - "`ls dir1`" + - "`ls dir2 dir3`" + - "`find dir1 dir2 dir3`" + - "`cat dir1/*`" + - "`less dir1 dir1/dir2 dir1/dir3`" + + correct_options: [1, 2] + solution: | + To verify the directories were created successfully, you can use: + `ls dir1` or `ls -r` + - `ls dir1` lists the contents of `dir1`, which should include `dir2` and `dir3`. + - `ls -r` lists all files and directories in the current directory and its subdirectories. + + The other options are incorrect because: + * `ls` would list the contents of the current directory, but not specifically check for `dir2`, or `dir3` which are inside `dir1`. + * `ls dir2 dir3` would fail because `dir2` and `dir3` are inside `dir1` and do not exist in the current directory. + * `find dir1 dir2 dir3` is not a valid command. + * `cat dir1/*` would attempt to display the contents of files in `dir1`, but there are no files yet. + * `less dir1 dir1/dir2 dir1/dir3` would attempt to display the contents of `dir1`, `dir1/dir2`, and `dir1/dir3`, but these are directories, not files. + + - title: "Creating Text Files" + description: | + After verifying you've created the directories, how would you create two text files named `file1.txt` and `file2.txt` inside a folder named `text_files`? + + This is your current terminal session: + ```bash + user@computer:~$ pwd + /home/user + user@computer:~$ ls + dir1 + user@computer:~$ + ``` + questiontype: parsons + options: + - "`mkdir text_files`" + - "`cd text_files`" + - "`touch file1.txt file2.txt`" + - "`touch file1 file2`" + - "`new file1.txt file2.txt`" + - "`echo file1.txt file2.txt`" + - "`mv file1.txt file2.txt`" + - "`cp file1.txt file2.txt`" + - "`less file1.txt file2.txt`" + - "`cat file1.txt file2.txt`" + correct_options: [0, 1, 2] + solution: | + To create the text files, you can follow these steps: + ```bash + mkdir text_files + cd text_files + touch file1.txt file2.txt + ``` + This creates a new directory named `text_files`, navigates into it, and creates two empty text files named `file1.txt` and `file2.txt`. + + The other options are incorrect because: + * `touch file1 file2` would create files without the `.txt` extension. + * `new file1.txt file2.txt` is not a valid command. + * `echo file1.txt file2.txt` would just print `file1.txt file2.txt` to the terminal, not create files. + * `mv file1.txt file2.txt` would move files, but they don't exist yet. + * `cp file1.txt file2.txt` would copy files, but they don't exist yet. + * `less file1.txt file2.txt` would attempt to display the contents of non-existent files. + * `cat file1.txt file2.txt` would attempt to display the contents of non-existent files. + + - title: "Appending Text to a File" + description: | + Suppose your terminal session looks like this: + ```bash + user@computer:~$ pwd + /home/user + user@computer:~$ ls text_files + file1.txt file2.txt + user@computer:~$ + ``` + You want to *append* the text "Bash is hard!" to `file1.txt`. + questiontype: parsons + options: + - "`cd text_files`" + - "`echo 'Bash is hard!' > file1.txt`" + - "`echo 'Bash is hard!' >> file1.txt`" + - "`cat file1.txt`" + - "`less file1.txt`" + - "`mv file1.txt file2.txt`" + - "`cp file1.txt file2.txt`" + - "`rm file1.txt`" + correct_options: [0, 2] + solution: | + To append text to `file1.txt`, you can use: + ```bash + cd text_files + echo 'Bash is hard!' >> file1.txt + ``` + This command navigates to the `text_files` directory and appends the text "Bash is hard!" to `file1.txt`. + + The other options are incorrect because: + * `echo 'Bash is hard!' > file1.txt` would overwrite the contents of `file1.txt`, not append to it. + * `cat file1.txt` and `less file1.txt` would display the contents of the file but not modify it. + * `mv file1.txt file2.txt` would rename or move the file, not append text. + * `cp file1.txt file2.txt` would copy the file, not append text. + * `rm file1.txt` would delete the file. + + - title: "Verifying Appended Text" + description: | + Suppose your terminal session looks like this: + ```bash + user@computer:~/text_files$ + ``` + After appending text to a file, how would you verify that your text has been successfully added to `file1.txt`? + questiontype: parsons + options: + - "`cat file1.txt`" + - "`echo file1.txt`" + - "`rm file1.txt`" + - "`ls file1.txt`" + - "`cd text_files`" + correct_options: [0] + solution: | + To verify that the text has been successfully added to `file1.txt`, you can use: + ```bash + cat file1.txt + ``` + This command displays the contents of `file1.txt`, allowing you to confirm that the text "Bash is hard!" is present. + + The other options are incorrect because: + * `cd text_files` is not necessary since you are already in the `text_files` directory. + * `echo file1.txt` would just print the filename, not its contents. + * `rm file1.txt` would delete the file. + * `ls file1.txt` would list the file, but not its contents. + + - title: "Deleting Files and Globs" + description: | + Suppose you are inside `dir2`. + This is your current terminal prompt: + ``` + user@computer:~$ ls dir1 + file1.txt file2.txt dir2/ dir3/ + user@computer:~$ cd dir1/dir2 + /home/user/dir1/dir2 + user@computer:~/dir1/dir2$ + ``` + How would you delete all `.txt` files within `dir1`? + + questiontype: multiplechoice + options: + - "`rm .txt`" + - "`rm dir1/*.txt`" + - "`rm dir1/dir2/.txt`" + - "`rm ../*.txt`" + correct_options: [3] + solution: | + To delete all `.txt` files within `dir1`, you can use: + ```bash + rm ../*.txt + ``` + This command removes all `.txt` files in the parent directory (`dir1`) from your current location inside `dir2`. + + The other options are incorrect because: + * `rm .txt` would not match any files. + * `rm dir1/*.txt` and `rm dir1/dir2/.txt` would fail because you are currently in `dir2` + + - title: "File and Directory Management: Navigating to the Parent Directory" + description: | + This is your current terminal session: + ```bash + user@computer:~/dir1/dir2$ pwd + /home/user/dir1/dir2 + user@computer:~/dir1/dir2$ ls + user@computer:~/dir1/dir2$ + ``` + After working inside one of the directories, how would you navigate back to your home directory? + questiontype: multiplechoice + options: + - "`cd ..`" + - "`cd ../..`" + - "`cd`" + - "`cd /home/user`" + - "`cd dir1`" + correct_options: [1, 2, 3] + solution: | + To navigate back to your home directory, you can use: + - `cd` - This command takes you directly to your home directory. + - `cd /home/user` - This command takes you to the absolute path /home/user, which is your home directory. + - `cd ../..` - This command takes you two levels up from your current directory, which would also take you to your home directory. + + These other options are incorrect because: + - The command `cd ..` would take you one level up to `dir1`, not directly to your home directory. + - The command `cd dir1` would attempt to change into the `dir1` directory which will fail because there is no `dir1` in the current directory. + + - title: "Removing Directories and Their Contents" + description: | + This is your current terminal session: + ```bash + user@computer:~$ ls + Desktop/ dir1/ Documents/ Downloads/ Music/ Pictures/ Videos/ + user@computer:~$ + ``` + How would you remove directory `dir1` and all its contents, including `dir2`, `dir3`, and their files? Then confirm that all directories and files have been deleted. + questiontype: multiplechoice + options: + - "`rm dir1`" + - "`rm -r dir1`" + - "`rm -r dir1 dir2 dir3`" + - "`ls`" + - "`ls -r dir1`" + - "`ls dir1/*`" + correct_options: [1] + solution: | + To remove `dir1` and all its contents, including `dir2`, `dir3`, and their files, you can use: + ```bash + rm -r dir1 + ``` + This command recursively removes the directory and all its contents. + + The other options are incorrect because: + * `rm dir1` would fail because `dir1` is a directory and requires the `-r` option to remove it. + * `rm -r dir1 dir2 dir3` would attempt to remove `dir1`, `dir2`, and `dir3` but would fail because they are not in the current directory. + * `ls` would list the contents of the current directory, but not confirm that `dir1` has been deleted. + * `ls -r dir1` would list the contents of `dir1`, but it doesn't confirm that it has been deleted. + * `ls dir1/*` would list the contents of `dir1`, but it doesn't confirm that it has been deleted. + diff --git a/03_instructional_team/githubpages/shell_moderate.yml b/03_instructional_team/githubpages/shell_moderate.yml new file mode 100644 index 000000000..417bbbceb --- /dev/null +++ b/03_instructional_team/githubpages/shell_moderate.yml @@ -0,0 +1,248 @@ +title: Unix Shell Moderate Practice Problems +problems: + - title: "File and Directory Management 1" + description: | + You are working on a project and need to create a directory named `data` inside your project directory (`project3`) + and a file named `info.txt` inside it. + + This is your current terminal session: + ```bash + user@computer:~/project3/scripts$ pwd + /home/user/project3/scripts + + user@computer:~/project3/scripts$ + ``` + + Select and order the following commands to accomplish this task. + questiontype: parsons + options: + - "`cd ..`" + - "`mkdir data`" + - "`cd data`" + - "`touch info.txt`" + - "`ls`" + - "`echo info.txt`" + - "`cd scripts`" + correct_options: [0, 1, 2, 3] + solution: | + ```bash + user@computer:~/project3/scripts$ cd .. + user@computer:~/project3$ mkdir data + user@computer:~/project3$ cd data + user@computer:~/project3/data$ touch info.txt + ``` + + We start off in the `scripts` directory. + - First, we need to navigate to the project root directory using `cd ..` + - (`project3` is the parent directory of `scripts`) + - Then, we can create the `data` directory and navigate into it. + - Finally, we create the `info.txt` file. + + - we can also list the contents of the current directory using `ls` to check if the `data` directory and + `info.txt` file was created successfully + + + + - title: "File and Directory Management 2" + description: | + Create a directory structure for a project with the following hierarchy: + ``` + project/ + β”œβ”€β”€ src/ + β”‚ β”œβ”€β”€ main.py + β”‚ └── utils.py + β”œβ”€β”€ data/ + β”‚ β”œβ”€β”€ input.csv + β”‚ └── output.csv + └── README.md + ``` + questiontype: freeform + solution: | + To create the directory structure, you can use the following commands. + ```bash + mkdir -p project/src project/data + touch project/src/main.py project/src/utils.py project/data/input.csv project/data/output.csv project/README.md + ``` + - Since the problem asks us to create this in the current directory, we don't need to `cd` anywhere. + - `mkdir -p` creates the directories and any necessary parent directories. + - `touch` creates the files in the specified directories. + + **Alternative solution:** + ```bash + mkdir project + mkdir project/src + touch project/src/main.py + touch project/src/utils.py + mkdir project/data + touch project/data/input.csv + touch project/data/output.csv + touch project/README.md + ``` + - In this longer example, we create the `project` directory first, then create the `src` and `data` directories inside it. + - `touch` is called individually for each file + + Additionally: + - `cd` can also be used to change into each directory before creating files, but it is not necessary + + + + - title: "Output Redirection" + description: | + Which command correctly redirects the standard output of `ls` to a file named `filelist.txt` without overwriting? + questiontype: multiplechoice + options: + - "ls > filelist.txt" + - "ls < filelist.txt" + - "ls >> filelist.txt" + - "ls filelist.txt" + correct_options: [2] + solution: | + The correct command is: + ```bash + ls >> filelist.txt + ``` + This sends the output of `ls` into `filelist.txt`, without overwriting the file if it exists. + + - `ls > filelist.txt`: This command **overwrites** the contents of `filelist.txt` with the output of `ls`. + - `ls < filelist.txt`: This command tries to read from `filelist.txt` as input, which is not what we want. (*not covered in the main session*) + - `ls filelist.txt`: This command tries to list the contents of `filelist.txt`, instead of writing to it. + + + - title: "Debugging 1" + description: | + You are trying to run a script but encounter an error. The script is supposed to print the current date and time. + However, it fails with the following error: + ``` + bash: ./script.sh: No such file or directory + ``` + What is the likely cause of this error? + questiontype: multiplechoice + options: + - The script does not exist in the current directory. + - The script does not have execute permissions. + - The script is not in your PATH. + - There is a syntax error in the script. + correct_options: [0] + solution: | + The script does not exist in the current directory. + + - The script does not have execute permissions: If this were the case, the error would be `permission denied`, not `No such file or directory`. + - The script is not in your PATH: The error message indicates that the script is being called with `./`, which means it is expected to be in the current directory, not in the PATH. + - There is a syntax error in the script: A syntax error would occur after the script is found and executed, not before. + + - title: "Debugging 2" + description: | + Suppose this is the contents of a directory on your computer: + ```bash + user@computer:~$ ls ~ + myfile.txt mydata.csv myscript.sh myfolders/ + ``` + + When you type the following commands, you get an error: + ```bash + user@computer:~$ mv mydata.csv myfolder/ + mv: cannot move 'mydata.csv' to 'myfolder/': No such file or directory + user@computer:~$ mv myfile.txt myfolder/ + mv: cannot move 'myfile.txt' to 'myfolder/': No such file or directory + user@computer:~$ mv myscript.sh myfolder/ + mv: cannot move 'myscript.sh' to 'myfolder/': No such file or directory + ``` + + How can you fix this error? + questiontype: freeform + solution_template: | + mv mydata.csv myfolder/ + mv myfile.txt myfolder/ + mv myscript.sh myfolder/ + solution: | + ```bash + user@computer:~$ mv mydata.csv myfolders/ + user@computer:~$ mv myfile.txt myfolders/ + user@computer:~$ mv myscript.sh myfolders/ + ``` + + The error indicates that the directory `myfolder/` does not exist. + Ordinarily, we could create the directory using the `mkdir` command, but in this case, it looks like the directory is already created as `myfolders/`. + To fix the error, we can either create the directory `myfolder/` or move the files to `myfolders/` instead. + + Note the spelling of myfolder**s**/ + + - title: "Organizing files" + description: | + Suppose this is the contents of a folder on your computer: + ```bash + user@computer:~$ ls /data/MYPROJECT/scripts + analyze_data.py dataset1.db dataset2.db outputimg.png + outputimg2.png + ``` + + You've just opened a new terminal and want to organize the files by moving datasets and outputs in separate folders. + Select and order the following commands to accomplish this task. + questiontype: parsons + options: + - "`cd /data/MYPROJECT`" + - "`mkdir datasets`" + - "`mkdir outputs`" + - "`mv dataset* datasets/`" + - "`mv scripts/dataset* datasets/`" + - "`mv output* outputs/`" + - "`mv scripts/output* outputs/`" + - "`cd data`" + - "`cd outputs`" + - "`echo scripts/output*`" + - "`movefile dataset* datasets/`" + - "`movefile output* outputs/`" + - "`cd`" + - "`ls`" + correct_options: [0, [1, 2], [4, 6]] + + solution: | + ```bash + user@computer:~$ cd /data/MYPROJECT + user@computer:/data/MYPROJECT$ mkdir datasets + user@computer:/data/MYPROJECT$ mkdir outputs + user@computer:/data/MYPROJECT$ mv scripts/dataset* datasets/ + user@computer:/data/MYPROJECT$ mv scripts/output* outputs/ + ``` + + First, we need to navigate to the project directory, then create the `datasets` and `outputs` directories. + After that, we can move the dataset and output files into their respective directories. + + - Running `mv dataset* datasets/` won't work, because the `dataset*` files are in the `scripts` directory, not the current directory. + - The command `ls` can be run to check the contents of the current directory, but it is not necessary to accomplish the task. + + + - title: "Text files" + description: | + Suppose you have the following script: + ```bash + # preview all my data files + echo "Data file preview" + echo "=================" + cat mydata/*.txt + ``` + + When your project had fewer data files, this script worked fine. But now, the output is too long to read. + What are some approaches to fix this? + questiontype: freeform + solution: | + There are several ways to fix this issue. Here are a few options: + - Redirect the output to a file for later review with less + ```bash + cat mydata/*.txt > preview.txt + less preview.txt + ``` + + **More advanced strategies not covered in the main session:** + - Use the pipe operator to pipe the output to `less` directly. + ```bash + cat mydata/*.txt | less + ``` + - Use `head` or `tail` to preview only the first or last few lines of each file. + ```bash + head mydata/*.txt + tail mydata/*.txt + ``` + + + \ No newline at end of file diff --git a/03_instructional_team/markdown_slides/images/1-terminal.png b/03_instructional_team/markdown_slides/images/1-terminal.png new file mode 100644 index 000000000..9489e2955 Binary files /dev/null and b/03_instructional_team/markdown_slides/images/1-terminal.png differ diff --git a/03_instructional_team/markdown_slides/images/2-shell.png b/03_instructional_team/markdown_slides/images/2-shell.png new file mode 100644 index 000000000..21c356237 Binary files /dev/null and b/03_instructional_team/markdown_slides/images/2-shell.png differ diff --git a/03_instructional_team/markdown_slides/images/3-gitbash.png b/03_instructional_team/markdown_slides/images/3-gitbash.png new file mode 100644 index 000000000..9b56096ae Binary files /dev/null and b/03_instructional_team/markdown_slides/images/3-gitbash.png differ diff --git a/03_instructional_team/markdown_slides/images/4-windows_shells.png b/03_instructional_team/markdown_slides/images/4-windows_shells.png new file mode 100644 index 000000000..5388aa56b Binary files /dev/null and b/03_instructional_team/markdown_slides/images/4-windows_shells.png differ diff --git a/03_instructional_team/markdown_slides/images/5-windows_terminals.png b/03_instructional_team/markdown_slides/images/5-windows_terminals.png new file mode 100644 index 000000000..928455548 Binary files /dev/null and b/03_instructional_team/markdown_slides/images/5-windows_terminals.png differ diff --git a/03_instructional_team/markdown_slides/images/terminology_explainer.afdesign b/03_instructional_team/markdown_slides/images/terminology_explainer.afdesign new file mode 100644 index 000000000..97d2dc989 Binary files /dev/null and b/03_instructional_team/markdown_slides/images/terminology_explainer.afdesign differ diff --git a/03_instructional_team/markdown_slides/images/terminology_explainer.afdesign~lock~ b/03_instructional_team/markdown_slides/images/terminology_explainer.afdesign~lock~ new file mode 100644 index 000000000..cce471a78 Binary files /dev/null and b/03_instructional_team/markdown_slides/images/terminology_explainer.afdesign~lock~ differ diff --git a/04_instructional_team/markdown_slides/optional_unix_slides.md b/03_instructional_team/markdown_slides/optional_unix_slides.md similarity index 100% rename from 04_instructional_team/markdown_slides/optional_unix_slides.md rename to 03_instructional_team/markdown_slides/optional_unix_slides.md diff --git a/03_instructional_team/markdown_slides/unix_slides.md b/03_instructional_team/markdown_slides/unix_slides.md new file mode 100644 index 000000000..21246f56a --- /dev/null +++ b/03_instructional_team/markdown_slides/unix_slides.md @@ -0,0 +1,559 @@ +--- +marp: true +style: | + section { + font-family: Inter, -apple-system, BlinkMacSystemFont, 'Helvetica Neue', sans-serif; + } +_class: invert +paginate: true +--- + +# Unix Shell + +``` +$ echo "Data Sciences Institute" +``` + +--- +### What is Unix? + +Unix was a text-based operating system created in 1970. Many of its derivatives are commonly used today, including Linux and MacOS. + +Linux powers +* 90% of global cloud infrastructure +* 100% of the world's top 500 high performance computers +* 97% of embedded and IoT devices + +--- +*Bash* and similar shells +* are the primary way of interacting with most production Linux systems +* empower you to quickly and easily navigate the system, manipulate files, and automate tasks + +--- +### So what is the shell? + +A *shell* is any user interface/program that takes an input from the user, translates it into instructions that the operating system can understand, and conveys the output back to the user. + +--- +There are various types of user interfaces: + +- graphical user interfaces (GUI) +- touch screen interfaces +- command line interfaces (CLI) + +--- +### And what is Bash? + +We'll be focusing on command line interfaces (CLI), more +specifically Bash, which stands for the Bourne Again SHell. + +On Windows: open the **Git Bash** or **Windows Terminal** app +On MacOS or Linux: open the **Terminal** app + +On newer macs, the default shell is zsh, which is almost identical to Bash. + +--- +### Clearing up an abundance of terminology + + +--- +### Clearing up an abundance of terminology + + +--- +### Clearing up an abundance of terminology + + +--- +### Clearing up an abundance of terminology + + +--- +### Clearing up an abundance of terminology + + +--- +### Let's get started! + +First, we'll open our terminal. As mentioned earlier, this is most +likely called terminal and can be found by searching our +computer, which on a Mac would be through cmd + space + +--- +Let's take a look at the terminal. What do we notice? + +- last login +- name +- location +- shell + +--- +### Looking at the Shell +Let's start with a few commands and see what happens in our +terminal. + +```bash +$ echo Rachael +$ date +$ cal +$ lksjfs +``` + +--- +- What happens when we type something that does not exist? +- What happens with errors? + +--- +# Getting help and accessing documentation +Bash includes built-in documentation for all commands + +```bash +$ man ls +``` + +Retrieve the **man**ual for each commands using `man`. +* Many manuals are also available online + + +--- +View a list of commonly used Bash commands + +```bash +$ help +``` + +--- +# Navigate Files / Directories + +--- +## Directories + +Let's try three commands that help us navigate our system: + +1. When using Bash, we always have a *working directory*: + +```bash +$ pwd +``` + +`pwd` prints our current working directory. If we ever need to know +where we are, we can execute this command. + +--- +2. To know what files and folders exist in our working directory, + we can use the code below: + +```bash +$ ls +``` + +--- +3. We can change the working directory using the following command: + +```bash +$ cd +``` + +By default, `cd` changes your *working directory* to your *home +directory*. You can also use `cd` to set your *working directory* by +including the desired *pathname* + +```bash +$ cd Desktop +``` + +--- + +```bash +$ cd Desktop +``` + +Note #1: In this example +* We can change the behaviour of the `cd` command by providing *arguments* +* By default, `cd` changes the *working directory* to our *home directory* +* By adding `Desktop` after the `cd` command, we change to the `Desktop` directory instead +* Most other bash commands have their own *arguments* that allow you to modify the behaviour and effect of the command + +--- + +Let's try using a *pathname argument* with the `ls` command too! + +```bash +$ cd +$ ls Desktop +``` + +--- + +```bash +$ cd Desktop +``` + +Note #2: +* we were able to refer to the `Desktop` directory using only its directory name because it existed within our *working directory* at the time the command was *called* +* in this context, `Desktop` is a *relative pathname* +* to refer to paths outside our working directory, use the full path instead + + +If we wanted to change the working directory to a directory +outside of our working directory, we would need to specify an *absolute pathname*: + +```bash +$ cd /Users/rachellam/Documents +$ cd /c/Users/simeo/Downloads +``` + +--- +## Paths + +As we've seen, directory names separated by slashes are paths. +There are two types of paths, _absolute_ and _relative_. + +- An *absolute pathname* begins at the *root directory* and + includes each directory, separated by slashes until the + desired directory or file is reached. +- A *relative pathname* starts from the current *working directory* and + uses symbols `.` or `..` to represent relative positions in the + file tree. + +--- +Using `cd` and `pwd` let's take a look at how we can use +*absolute* and *relative pathnames*. + +```bash +$ cd /usr/bin +$ pwd +``` + +```bash +$ cd /usr +$ pwd +``` + +```bash +$ cd .. +$ pwd +``` + +--- +## Working with Files / Directories + +We're going to learn some basic commands to begin some +preliminary coding. We'll also be using these throughout the +module, so it's important to understand how they work now: + +- create directory `mkdir` +- create an empty file `touch` +- copy `cp` +- move and rename `mv` +- remove `rm` + +--- +## Commands + +--- +### mkdir + +First let's make a directory. It's important to remember what +directory you're working in currently, because that's where the +new directory will be made. Let's assume for now, we're working +on our Desktop. + +```bash +$ mkdir my_directory +``` + +We can also create multiple directories at the same time: + +```bash +$ mkdir dir1 dir2 dir3 +``` + +--- +### touch + +We can also make new empty files from the command line. +Using `touch`, we can make a new file in our +*working directory*. + +```bash +$ touch file1 +``` + +We can also create a specific file type by adding the extension: + +```bash +$ touch file1.txt +``` + +--- +### cp + +Now we're going to copy a file that we have in our *working directory*. It +can be any file but remember to include the extension or if it +has multiple characters, special characters and spaces, to wrap +it in quotes. + +```bash +$ cp file1 file2 +``` + +--- +We can also copy files or directories into a directory. + +```bash +$ cp file1 dir1/ +``` + +And all files from one directory into another using *wildcards*: + +```bash +$ cp dirl/* dir2 +``` + +--- +#### Wildcards +*Wildcards* enable us to use commands on more than one file at a time. +The `*` is a placeholder that represents zero or more characters when used in a *pathname*. + +For example: +* `./*` matches all files and folders in the current directory +* `./*.txt` matches all files and folders that have a txt extension in the current directory +* `/home/simeo/project1_*` matches all files and folders that begin with `project1_` in the `/home/simeo` directory + +--- +*Wildcards* are one of many reasons why bash so powerful! + +Many of the features in bash empower you to work with a large number of files easily. + + +--- +There are some useful *options* that accompany `cp`: +| Option | Description | +| ------ | ------------------------------------------------------------- | +| -i | Before overwriting an existing file, prompt the user for confirmation. | +| -R | Recursively copy directories and their contents. | +| -v | Display informative messages as the copy is performed. | + +--- +### mv + +The mv command enables us to move and rename files and +directories, depending on how it's used. In th example below, `mv` renames `file1` to `file2`. + +Rename a file: +```bash +$ mv file1 file2 +``` + +Here, `mv` moves `file1` from the *working directory* into `./dir1`: +```bash +$ mv file1 dir1 +``` + +--- +We can also move directories into other directories: + +```bash +$ mv dir1 dir2 +``` + +--- + +```bash +$ mv dir1 dir2 +``` + +In this case, if `dir2` exists, `dir1` will be moved into `dir2` (eg. from `./dir1` to `./dir2/dir1`). + +If `dir2` does not exist, `dir1` will be renamed to `dir2`. + +In both cases the entire directory will be affected (moved into another directory, or renamed), rather than the contents. + +--- +Let's say we're in the directory `Desktop` and we just moved +`file1` into `dir1` but now we want to put it back in `Desktop`. How would we move a file out of a directory into another one? Unfortunatly we can't just say + +```bash +$ mv file1 Desktop +``` + +because `file1` does not exist in `Desktop` any more and the command will try and rename `file1` to `Desktop`. + +--- +The answer involves using *absolute pathnames* and the tilde `~` notation: + +``` +$ mv dir1/file1 ~/Desktop +``` + +The `~` is shortform for your *home directory*. + +--- +If we just wanted to move `file1` into `dir2` (if `dir2` is in our *working directory*), we could type: + +```bash +$ mv dir1/file1 dir2 +``` + +--- +What if we want to move just the contents of dir1 to another +directory rather than the whole folder? + +HINT: it is very similar to copying (`cp`). + +--- +Move just the contents of dir1 to another +directory rather than the whole folder: + +```bash +$ mv dir1/* dir2 +``` + +This is a combination of the directory `dir1`, pathnames `/` and wildcards `*`. Here, `dir1/*` takes the all the contents of `dir1` and puts it in `dir2`. + +--- +We could also use the same technique to specify certain files to move rather than all of them. + +How would we move all txt files from `dir1` into `dir2`? + +--- +#### Questions? + +We're starting to combine our knowledge of files, directories and pathnames with some basic commands. How do we feel up to this point? + +--- +### rm + +To remove files we use the command `rm`. Because we're now +deleting files, it's important that you're sure of what you're deleting because there is no way to undo. Fortunately!! there +are ways to do this. + +```bash +$ rm file1 +``` + +Without specifying any *options*, `file1` will be deleted +without any feedback. + +--- +To ensure we want to delete something, we can use the option `-i` (interactive) that we learned earlier. + +```bash +$ rm -i file1 +``` + +This will prompt a question asking us if we want to delete `file1`. We can respond with `y` (yes) or `n` (no). + +--- +If we want to delete a directory, we need to use the option `-r` (recursive) as we did when copying (`cp`). This will recursively delete everything inside of the directory and the directory itself. + +```bash +$ rm -r dir1 +``` + +--- +If we're specifying multiple deletions and a directory does not exist, the shell will tell us. If we don't want that message, we can add the `-option`, `-f` (force). Force will override `-i` if it is included. + +1. How do you delete multiple directories? +2. What happens if you delete multiple directories with `-i`? +3. What happens if you delete multiple directories with `-i` but one does not exist? + +--- +Remember, it's extremely important to remember that you cannot undo `rm`. This means, if you start using wildcards to specify filenames and don't include `-i`, you could delete things by accident. For example, let's say you want to delete all `.txt` files in a directory: + +```bash +$ rm *.txt +``` + +If you accidently add a space between `*` and `.txt`,the `rm` command will delete all the files in the directory and then try to find a `.txt` file which does not exist because it delete everything. + + +--- +## Working with text files +--- +Output the contents of any text file using `cat` + +```bash +$ cat file1.txt +``` + +* Quick way to preview file contents +* Note, this might flood your terminal if the file is too big. + +--- +Write the output of a command to a text file using `>` or `>>` + +```bash +$ ls >> dirlist.txt +``` + +* `>` replaces the destination file (deletes existing content) +* `>>` appends to the destination file + +--- + +We can also write custom content + +```bash +$ echo "Hello, world!" > myfile.txt +``` + +--- +We can also edit text files in the command line using `nano` + +```bash +$ nano file1.txt +``` + +To exit `nano`, press Control + X. The shortcuts are also shown at the bottom of the terminal while in the `nano` editor, where `^` denotes the Control key. + +--- +For more complex edits, we can launch Visual Studio Code directly from the command line. + +```bash +$ code file1.txt +``` + +Note: MacOS users may need to setup the `code` command first. + +--- +## Bash scripts +--- +We can write down a list of commands in a *script*, useful for +* A set of commands we need to frequently *execute* together +* Sharing commands with others + +A bash *script* is a text file with commands on different lines. +* bash will *execute* each command in sequence + +--- +Lines that begin with a `#` are *comments* that are ignored by bash. +* Use *comments* to annotate your thought process + +```bash +# copy text files from temp directory +cp tempdir/*.txt data/ + +# delete the rest of the temporary files +rm tempdir/* +``` + +--- +Bash scripts usually have a special *comment* as the very first line that indicates which shell should be used to run the script. +* This is also known as the sh-bang (ha**sh** symbol + exclamation mark/**bang**) + +Typically, the shell used is bash: +```bash +#!/bin/bash + +# do stuff +cp file1 dir2/ +``` + +--- + +Execute a script by running: +```bash +$ bash myscript.sh +``` diff --git a/04_instructional_team/dsi_certificates_theme.css b/04_instructional_team/dsi_certificates_theme.css deleted file mode 100644 index 7d4f43a31..000000000 --- a/04_instructional_team/dsi_certificates_theme.css +++ /dev/null @@ -1,51 +0,0 @@ -/* dsi_certificates_theme.css */ -/* @theme dsi_certificates_theme */ - -@import 'uncover'; - -img[alt~="center"] { - display: block; - margin: 0 auto; -} - - -p { - text-align: left; - font-size: 35px -} -ul { - margin: 0; - font-size: 35px; -} -table { - font-size: 35px; -} -ol { - margin: 0; - font-size: 35px; -} - -blockquote { - border-left: 10px solid #ccc; - margin: 1.5em 10px; - padding: 0.5em 30px; - quotes: "\201C""\201D""\2018""\2019"; -} - -blockquote:before { - color: #ccc; - content: none; - font-size: 4em; - line-height: 0.1em; - margin-right: 0.25em; - vertical-align: -0.4em; -} - -blockquote:after{ - content: none; -} - -footer { - margin-bottom: 0px; - text-align: left; -} diff --git a/04_instructional_team/markdown_slides/unix_slides.md b/04_instructional_team/markdown_slides/unix_slides.md deleted file mode 100644 index cb0ab49cc..000000000 --- a/04_instructional_team/markdown_slides/unix_slides.md +++ /dev/null @@ -1,376 +0,0 @@ ---- -marp: true -theme: dsi_certificates_theme -_class: invert -paginate: true ---- - -# Unix Shell - -``` -$ echo "Data Sciences Institute" -``` - ---- -## Unix - -### What is Unix? - -Unix was created in 1970, and since then, has branched into other versions, including Linux. Linux was created from Unix with very similar features, although there are some minor differences in commands. - -Unix shells, more specifically Bash, are powerful tools for quickly and easily navigating and manipulating files, scaling automated tasks, accessing Git and processing data. - ---- -### So what is the shell? - -The shell is any user interface/program that takes an input from the user, translates it into instructions that the operating system can understand, and conveys the output back to the user. - ---- -There are various types of user interfaces: - -- graphical user interfaces (GUI) -- touch screen interfaces -- command line interfaces (CLI) - ---- -### And what is Bash? - -We'll be focusing on command line interfaces (CLI), more -specifically Bash, which stands for Bourne Again SHell. - -We'll also need a terminal emulator to interact with the shell. -This is most likely called "Terminal" on our menu. - ---- -### Let's get started! - -First, we'll open our terminal. As mentioned earlier, this is most -likely called terminal and can be found by searching our -computer, which on a Mac would be through cmd + space - ---- -Let's take a look at the terminal. What do we notice? - -- last login -- name -- location -- shell - ---- -### Looking at the Shell - -If we type echo $SHELL in our terminal, the output will tell us -what shell we are working with. Most often, our shell will -already be Bash but in newer Macs, it could be zsh which is -almost identical to Bash. We can also see where Bash is -located by typing: - ---- -- whereis Bash -- whence Bash -- which Bash - ---- -Let's start with a few commands and see what happens in our -terminal. - -``` -$ echo Rachael -$ date -$ cal -$ lksjfs -``` - ---- -- What happens when we type something that does not exist? -- What happens with errors? - ---- -# Navigate Files / Directories - ---- -## Directories - -Let's try three commands that help us navigate our system: - -1. First, let's run the code below and see what happens: - -``` -$ pwd -``` - -`pwd` prints our working directory. If we ever need to know -where we are, we can execute this command. - ---- -2. Now, let's run the code below and see again what happens: - -``` -$ cd -``` - -By default, `cd` changes your working directory to your home -directory. You can also use `cd` to set your working directory by -including the desired pathname - -``` -$ cd Desktop -``` - ---- -In the previous example, we were able to just state `Desktop` -because it is a directory in our working directory. If we changed -our working directory to `Desktop`, and then wanted to change -it again to a directory in `Desktop`, we could again just specify -the folder. -If we wanted to change the working directory to a directory -outside of our working directory, we would need to specify a -pathname: - -``` -$ cd /Users/rachaellam/Desktop -``` - ---- -3. To know what files and folders exist in our working directory, - we can use the code below: - -``` -$ ls -``` - -We can add a pathname at the end to list the contents of a -specified directory. - ---- -## Paths - -As we've seen, directory names separated by slashes are paths. -There are two types of paths, _absolute_ and _relative_. - -- An absolute pathname begins at the root directory and - includes each directory, separated by slashes until the - desired directory or file is reached. -- A relative pathname starts from the working directory and - uses symbols `.` or `..` to represent relative positions in the - file tree. - ---- -Using `cd` and `pwd` let's take a look at how we can use -absolute and relative pathnames. - -``` -$ cd /usr/bin -$ pwd -``` - -``` -$ cd /usr -$ pwd -``` - -``` -$ cd .. -$ pwd -``` - ---- -## Working with Files / Directories - -We're going to learn some basic commands to begin some -preliminary coding. We'll also be using these throughout the -module, so it's important to understand how they work now: - -- create directory mkdir -- create file touch -- copy cp -- move and rename mv -- remove rm - ---- -## Commands - ---- -### mkdir - -First let's make a directory. It's important to remember what -directory you're working in currently, because that's where the -new directory will be made. Let's assume for now, we're working -on our Desktop. - -``` -$ mkdir my_directory -``` - -We can also create multiple directories at the same time: - -``` -$ mkdir dir1 dir2 dir3 -``` - ---- -### touch - -We can also make new files from the command line. This is -particularly useful when we want to make scripts, which we'll -learn a bit later. Using touch, we can make a new file in our -working directory. - -``` -$ touch file1 -``` - -We can also create a specific file type by adding the extension: - -``` -$ touch file1.sh -``` - ---- -### cp - -Now we're going to copy a file that we have on our Desktop. It -can be any file but remember to include the extension or if it -has multiple characters, special characters and spaces, to wrap -it in quotes. - -``` -$ cp file1 file2 -``` - ---- -We can also copy files or directories into a directory. - -``` -$ cp file1 dir1 -``` - -And all files from one directory into another using wildcards: - -``` -$ cp dirl/* dir2 -``` - ---- -What does the `/*` in this command mean? - -There are some useful `β€”options` that accompany `cp`: -| Option | Description | -| ------ | ------------------------------------------------------------- | -| -i | Before overwriting an existing file, prompt the user for confirmation. | -| -R | Recursively copy directories and their contents. | -| -v | Display informative messages as the copy is performed. | - ---- -### mv - -The mv command enables us to move and rename files and -directories, depending on how it's used. In th example below, `mv` renames file1 to file2. - -``` -$ mv file1 file2 (Renames file1 to file2) -``` - -Here, `mv` moves file1 to dir1 - -``` -$ mv file1 dir1 (Moves file1 to dir1) -``` - ---- -We can also move directories into other directories: - -``` -$ mv dir1 dir2 -``` - ---- -In this case, if `dir2` exists, `dir1` will be moved to `dir2`. If `dir2` does not exist, it will be created and `dir1` will be moved to the newly created `dir2`. In both casesm the entire directory will be moved to another/new directory, rather than the contents. - ---- -Let's say we're in the directory `Desktop` and we just moved -`file1` into `dir1` but now we want to put it back in `Desktop`. How would we move a file out of a directory into another one? Unfortunatly we can't just say - -``` -$ mv file1 Desktop -``` - -because `file1` does not exist in `Desktop` any more and the command will try and rename `file1` to `Desktop`. - ---- -The answer involves using pathnames and the tilde `~` notation: - -``` -$ mv dir1/file1 ~/Desktop -``` - ---- -If we just wanted to move `file1` into `dir2` (if `dir2` is in our working directory), we could type: - -``` -$ mv dir1/file1 dir2 -``` - ---- -What if we want to move just the contents of dir1 to another -directory rather than the whole folder? HINT: it is very (exactly) similar to copying (`cp`). - -``` -$ mv dir1/* dir2 -``` - ---- -This is a combination of the directory `dir1`, pathnames `/` and wildcards `*`. Here, `di1/*` takes the all the contents of `dir1` and puts it in `dir2`. - -We could also use the same techqniue to specify certain files to move rather than all of them. How do you think this would be done? - ---- -#### Questions - -- We're starting to combine our knowledge of files, directories and pathnames with some basic commands. How do we feel up to this point? - ---- -### rm - -To remove files we use the command `rm`. Because we're now -deleting files, it's important that you're sure of what you're deleting because there is no way to undo. Fortunately!! there -are ways to do this. - -``` -$ rm file1 -``` - -Without specifying any `-options`, `file1` will be deleted -without any feedback. - ---- -To ensure we want to delete something, we can use the option `-i` (interactive) that we learned earlier. - -``` -$ rm -i file1 -``` - -This will prompt a question asking us if we want to delete `file1`. We can respond with `y` (yes) or `n` (no). - ---- -If we want to delete a directory, we need to use the option `-r` (recursive) as we did when copying (`cp`). This will recursively delete everything inside of the directory and the directory itself. - -``` -$ rm -r dir1 -``` - ---- -If we're specifying multiple deletions and a directory does not exist, the shell will tell us. If we don't want that message, we can add the `-option`, `-f` (force). Force will override `-i` if it is included. - -1. How do you delete multiple directories? -2. What happens if you delete multiple directories with `-i`? -3. What happens if you delete multiple directories with `-i` but one does not exist? - ---- -Remember, it's extremely important to remember that you cannot undo `rm`. This means, if you start using wildcards to specify filenames and don't include `-i`, you could delete things by accident. For example, let's say you want to delete all `.txt` files in a directory: - -``` -$ rm *.txt -``` - -If you accidently add a space between `*` and `.txt`,the `rm` command will delete all the files in the directory and then try to find a `.txt` file which does not exist because it delete everything. diff --git a/04_this_cohort/additional_resources/.keep b/04_this_cohort/additional_resources/.keep new file mode 100644 index 000000000..945c9b46d --- /dev/null +++ b/04_this_cohort/additional_resources/.keep @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/04_this_cohort/live_code/.keep b/04_this_cohort/live_code/.keep new file mode 100644 index 000000000..945c9b46d --- /dev/null +++ b/04_this_cohort/live_code/.keep @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/README.md b/README.md index 028a3b71c..366571400 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ * [Description](#description) * [Learning Outcomes](#learning-outcomes) -* [Assignments](#assignments) +* [Activities](#activities) * [Contacts](#contacts) * [Delivery of the Learning Module](#delivery-of-the-learning-module) * [Schedule](#schedule) @@ -12,7 +12,7 @@ * [Resources](#resources) + [Cheat sheet](#cheat-sheet) + [Videos](#videos) - + [How to get help](#how-to-get-help) + + [How to Get Help](#how-to-get-help) * [Folder Structure](#folder-structure) ## Description @@ -22,44 +22,51 @@ This module introduces the Unix shell language and covers file and directory nav Participants will acquire problem-solving skills through live coding sessions. Additionally, they will explore the concept of reproducibility and its integration into their work. ## Learning Outcomes - By the end of the module, participants will be able to: * Comfortably access and navigate the terminal * Create, modify and delete directories and files -## Assignments -1. [The Secret Password Assignment](https://github.com/UofT-DSI/shell/blob/main/02_assignments/assignment.md) +## Activities +This module has two types of activities. +1. Assignments are mandatory, and form part of your evaluation. +1. Practice problems are not assessed, but are provided to you for extra practice. We encourage you to work on them together and discuss solutions during Work Periods and on the Slack! +### Assignments Participants should review the [Assignment Submission Guide](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md) for instructions on how to complete assignments in this module. +Assignments are typically due on the Sunday following the module's live learning session. + +1. [Shell script assignment](./02_activities/assignments/assignment_instructions.md) + +### Practice Problems +1. [Shell Basics](https://uoft-dsi.github.io/shell/interactive_problems.html#shell_basics) +1. [Shell Moderate](https://uoft-dsi.github.io/shell/interactive_problems.html#shell_moderate) +1. [Shell Advanced](./02_activities/practice/shell_advanced/shell_advanced.md) + + ## Contacts -**Questions can be submitted to the _#cohort-3-help_ channel on Slack** +**Questions can be submitted to the _#dc-help_ channel on Slack** * Technical Facilitator: - * **Simeon Wong** (he/him) - simeonm.wong@utoronto.ca + * **Simeon Wong** + me@simeon.dev * Learning Support Staff: - * **Michaela Drouillard** (she/her) - michaela.drouillard@mail.utoronto.ca - * **Julia Gallucci** (she/her) - julia.gallucci@mail.utoronto.ca - * **Emma Teng** - e.teng@mail.utoronto.ca + * **Dmytro Bonislavskyi** + dmytro.bonislavskyi@gmail.com + * **Laura MacKew** + lauramackew@gmail.com + * **Moniz Chan** + moniz.chan@utoronto.ca Β  ## Delivery of the Learning Module -This module will include live learning sessions and optional, asynchronous work periods. During live learning sessions, the Technical Facilitator will introduce and explain key concepts and demonstrate core skills. Learning is facilitated during this time. Before and after each live learning session, the instructional team will be available for questions related to the core concepts of the module. Optional work periods are to be used to seek help from peers, the Learning Support team, and to work through the homework and assignments in the learning module, with access to live help. Content is not facilitated, but rather this time should be driven by participants. We encourage participants to come to these work periods with questions and problems to work through. +This module will include live learning sessions and optional, asynchronous work periods. During live learning sessions, the Technical Facilitator will introduce and explain key concepts and demonstrate core skills. Learning is facilitated during this time. Before and after each live learning session, the instructional team will be available for questions related to the core concepts of the module. Optional work periods are to be used to seek help from peers, the Learning Support team, and to work through the practice problems and assignments in the learning module, with access to live help. Content is not facilitated, but rather this time should be driven by participants. We encourage participants to come to these work periods with questions and problems to work through. Β  Participants are encouraged to engage actively during the learning module. They key to developing the core skills in each learning module is through practice. The more participants engage in coding along with the instructional team, and applying the skills in each module, the more likely it is that these skills will solidify. -## Schedule - -||Day 1|Day 2|Day 3|Day 4|Day 5| -|---|---|---|---|---|---| -|Week 1|Live Learning Session 1 (Shell)|Live Learning Session 2 (Shell)|Live Learning Session 3 ([Git & GitHub](https://github.com/UofT-DSI/git))|Work Period 1|Work Period 2| Β  ## Requirements @@ -67,7 +74,7 @@ Participants are encouraged to engage actively during the learning module. They * Participants are encouraged to ask questions, and collaborate with others to enhance their learning experience. * Participants must have a computer and an internet connection to participate in online activities. * Participants must not use generative AI such as ChatGPT to generate code in order to complete assignments. It should be used as a supportive tool to seek out answers to questions you may have. -* We expect Participants to have completed the steps in the [onboarding repo](https://github.com/UofT-DSI/onboarding/). +* We expect participants to have completed the steps in the [onboarding repo](https://github.com/UofT-DSI/onboarding/). * We encourage participants to default to having their camera on at all times, and turning the camera off only as needed. This will greatly enhance the learning experience for all participants and provides real-time feedback for the instructional team. ## Resources @@ -83,27 +90,55 @@ Feel free to use the following as resources: - [Deleting Files and Directories](https://www.youtube.com/watch?v=-L3XeZPwj_Y) - [Bash in 100 seconds](https://www.youtube.com/watch?v=I4EWvMFj37g) -### How to get help -![image](./steps_to_ask_for_help.png) - -
+### How to Get Help +#### 1. Gather information about your problem +- Copy and paste your error message +- Copy and paste the code that caused the error, and the last few commands leading up to the error +- Write down what you are trying to accomplish with your code. Include both the specific action, and the bigger picture and context +- (optional) Take a screenshot of your entire workspace + +#### 2. Try searching the web for your error message +- Sometimes, the error has common solutions that can be easy to find! + - This will be faster than waiting for an answer +- If none of the solutions apply, consider asking a Generative AI tool + - Paste your code, the error message, and a description of your overall goals + +#### 3. Try asking in your cohort's Slack help channel +- Since we're all working through the same material, there's a good chance one of your peers has encountered the same error, or has already solved it +- Try searching in the DSI Certificates Slack help channel for whether a similar query has been posted +- If the question has not yet been answered, post your question! + - Describe your the overall goals, the context, and the specific details of what you were trying to accomplish + - Make sure to **copy and paste** your code, your error message + - Copying and pasting helps: + 1. Your peers and teaching team quickly try out your code + 1. Others to find your question in the future + +#### Great resources on how to ask good technical questions that get useful answers +- [Asking for Help - The Odin Project](https://www.theodinproject.com/lessons/foundations-asking-for-help) +- [How do I ask a good question? - Stack Overflow](https://stackoverflow.com/help/how-to-ask) +- [The XY problem: A question pitfall that won't get useful answers](https://xyproblem.info/) +- [How to create a minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) ## Folder Structure Below is an outline of the folder structure for this module: -```markdown +``` . -β”œβ”€β”€ 01_slides -β”œβ”€β”€ 02_assignments -β”œβ”€β”€ 03_homework -β”œβ”€β”€ 04_instructional_team +β”œβ”€β”€ .github +β”œβ”€β”€ 01_materials +β”œβ”€β”€ 02_activities +β”œβ”€β”€ 03_instructional_team +β”œβ”€β”€ 04_this_cohort +β”œβ”€β”€ .gitignore β”œβ”€β”€ LICENSE -β”œβ”€β”€ README.md -└── steps_to_ask_for_help.png +└── README.md + ``` +* **.github**: Contains issue templates and pull request templates for the repository. +* **materials**: Module slides and interactive notebooks (.ipynb files) used during learning sessions. +* **activities**: Contains graded assignments and ungraded practice problems to apply concepts covered in the learning module. +* **instructional_team**: Resources for the instructional team. +* **this_cohort**: Additional materials for this cohort. +* **.gitignore**: Files to exclude from this folder, specified by the Technical Facilitator +* **LICENSE**: The license for this repository. +* **README**: This file. -* **slides:** Module slides as PDF files. -* **homework:** Homework to practice concepts covered in learning modules. -* **assignments:** Assignments. -* **instructors:** This folder guides Technical Facilitators and the Learning Support team on teaching methodologies and content delivery. -* README: This file! -* .gitignore: Files to exclude from this repo, specified by the instructing team.