diff --git a/_toc.yml b/_toc.yml index 69ca7da2..e48ec51a 100644 --- a/_toc.yml +++ b/_toc.yml @@ -53,6 +53,9 @@ parts: sections: - file: programme_information/intro_to_version_control - file: programme_information/intermediate_version_control + - file: programme_information/gpus + sections: + - file: programme_information/intro_to_gpus - file: cfrr_program_details/course_feedback - caption: What Courses Should I Take? diff --git a/data/workshop_info.csv b/data/workshop_info.csv index 7f8b9498..864851ea 100644 --- a/data/workshop_info.csv +++ b/data/workshop_info.csv @@ -17,4 +17,5 @@ Introduction to Machine Learning,03/12/2024,27/02/2025,7th/14th/21st March 2025 Improve your R Code,19/02/2025,22/04/2025,29th April 2025 10am-1pm,https://forms.office.com/e/bUXinqvWja,In-person only,https://coding-for-reproducible-research.github.io/CfRR_Courses/programme_information/improve_your_r_code.html Introduction to Markdown in R,19/02/2025,05/06/2025,6th June 2025 10am-1pm,https://forms.office.com/e/8diVktHHzt,In-person only,https://coding-for-reproducible-research.github.io/CfRR_Courses/programme_information/Introduction_to_Markdown_in_R.html Using Markdown for Python,19/02/2025,09/06/2025,10th June 2025 10am-1pm,https://forms.office.com/e/5ixSXnxdHb,In-person only,https://coding-for-reproducible-research.github.io/CfRR_Courses/programme_information/markdown_with_python.html -Mixed Effects Regression with R,,,,,, \ No newline at end of file +Mixed Effects Regression with R,,,,,, +Introduction to GPUs,,,,,, \ No newline at end of file diff --git a/individual_modules/intro_to_GPUs/LICENSE.txt b/individual_modules/intro_to_GPUs/LICENSE.txt new file mode 100644 index 00000000..4611569b --- /dev/null +++ b/individual_modules/intro_to_GPUs/LICENSE.txt @@ -0,0 +1,36 @@ + +### Instructional Material + +The instructional material in this course is copyright © 2025 University of Exeter +and is made available under the Creative Commons Attribution 4.0 International +licence (https://creativecommons.org/licenses/by/4.0/). Instructional material +consists of material that is contained within the "individual_modules/python_for_data_analysis" directory, and images folders in +this directory, with the exception of code snippets and example programs found +in files within these folders. Such code snippets and example programs are +considered software for the purposes of this licence. + + +### Software + +Except where otherwise noted, software provided in this repository is made +available under the MIT licence (https://opensource.org/licenses/MIT). + +Copyright © 2025 University of Exeter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/individual_modules/intro_to_GPUs/conways_game_of_life.ipynb b/individual_modules/intro_to_GPUs/conways_game_of_life.ipynb index 71b3b102..7e8347b3 100644 --- a/individual_modules/intro_to_GPUs/conways_game_of_life.ipynb +++ b/individual_modules/intro_to_GPUs/conways_game_of_life.ipynb @@ -523,7 +523,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.2" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/individual_modules/intro_to_GPUs/setup.md b/individual_modules/intro_to_GPUs/setup.md index fd7848f6..ba71fce4 100644 --- a/individual_modules/intro_to_GPUs/setup.md +++ b/individual_modules/intro_to_GPUs/setup.md @@ -280,7 +280,7 @@ Ensure you can SSH into the remote machine from your terminal. If SSH is not alr 5. Add a new SSH configuration to the file, specifying the remote machine’s details. Here’s an example configuration: - ```ssh-config + ``` Host my-remote-machine HostName User diff --git a/individual_modules/intro_to_GPUs/theory.ipynb b/individual_modules/intro_to_GPUs/theory.ipynb index defc4202..30dc5148 100644 --- a/individual_modules/intro_to_GPUs/theory.ipynb +++ b/individual_modules/intro_to_GPUs/theory.ipynb @@ -38,7 +38,7 @@ "\n", "```{figure} figures/gpu_for_graphics.png\n", ":alt: A graphics card powering 3D rendering on a computer display.\n", - ":name: fig-gpu\n", + ":name: fig-gpu-graphics\n", ":width: 500px\n", ":align: center\n", "\n", @@ -75,7 +75,7 @@ "\n", "```{figure} figures/gpu_2048_regions.png\n", ":alt: A computer monitor showing an image of a sunset divided into many small grid regions, representing how a GPU processes tasks in thousands of parallel chunks.\n", - ":name: fig-gpu\n", + ":name: fig-gpu-2048-regions\n", ":width: 500px\n", ":align: center\n", "\n", @@ -84,7 +84,7 @@ "\n", "```{figure} figures/cpu_4_regions.png\n", ":alt: A computer monitor showing an image of a sunset divided into four large regions, representing how a CPU processes tasks in fewer, larger chunks.\n", - ":name: fig-gpu\n", + ":name: fig-gpu-4-regions\n", ":width: 500px\n", ":align: center\n", "\n", @@ -122,7 +122,7 @@ "\n", "```{figure} figures/cpu_architecture.png\n", ":alt: Illustration of a CPU with four cores, each core handling one task, showing limited parallel task execution.\n", - ":name: fig-gpu\n", + ":name: fig-cpu-architecture\n", ":width: 500px\n", ":align: center\n", "\n", @@ -131,7 +131,7 @@ "\n", "```{figure} figures/gpu_architecture.png\n", ":alt: Illustration of a GPU with many small cores, each working on parts of multiple tasks simultaneously, showing massive parallelism.\n", - ":name: fig-gpu\n", + ":name: fig-gpu-architecture\n", ":width: 500px\n", ":align: center\n", "\n", @@ -1787,7 +1787,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.2" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/individual_modules/introduction_to_julia/LICENSE.txt b/individual_modules/introduction_to_julia/LICENSE.txt index ac48f314..4611569b 100644 --- a/individual_modules/introduction_to_julia/LICENSE.txt +++ b/individual_modules/introduction_to_julia/LICENSE.txt @@ -1,10 +1,10 @@ ### Instructional Material -The instructional material in this course is copyright © 2024 University of Exeter +The instructional material in this course is copyright © 2025 University of Exeter and is made available under the Creative Commons Attribution 4.0 International licence (https://creativecommons.org/licenses/by/4.0/). Instructional material -consists of material that is contained within the "individual_modules/introduction_to_julia" directory, and images folders in +consists of material that is contained within the "individual_modules/python_for_data_analysis" directory, and images folders in this directory, with the exception of code snippets and example programs found in files within these folders. Such code snippets and example programs are considered software for the purposes of this licence. @@ -15,7 +15,7 @@ considered software for the purposes of this licence. Except where otherwise noted, software provided in this repository is made available under the MIT licence (https://opensource.org/licenses/MIT). -Copyright © 2024 University of Exeter +Copyright © 2025 University of Exeter Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -33,28 +33,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -The software in this repository is adapted from software that is covered by the -following copyright and permission notice: - - Copyright © 2024 Software Carpentry - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file +SOFTWARE. \ No newline at end of file diff --git a/programme_information/gpus.ipynb b/programme_information/gpus.ipynb new file mode 100644 index 00000000..e82e7c51 --- /dev/null +++ b/programme_information/gpus.ipynb @@ -0,0 +1,44 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c6492f92-e51d-4133-b27a-8b702f3411f0", + "metadata": {}, + "source": [ + "# GPUs\n", + "\n", + "Currently there is only a single GPU course avaiable as self-study materials: \n", + "- **Introduction to GPUs**: Introduction to GPUs introduces the fundamentals of GPU computing for scientific and technical applications. The course covers GPU architectures, running code on modern accelerators, and managing environments on HPC systems. With a focus on optimisation and performance, participants will gain hands-on experience through guided exercises and projects in numerical modelling and simulation." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e24bab45-4d69-4c0f-8459-9bda6574223e", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.19" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/programme_information/intro_to_gpus.ipynb b/programme_information/intro_to_gpus.ipynb new file mode 100644 index 00000000..aa6d82c9 --- /dev/null +++ b/programme_information/intro_to_gpus.ipynb @@ -0,0 +1,282 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "ad8a0fe0-9281-446f-aeed-2238d6f3c832", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "# Introduction to GPUs\n", + "\n", + "## Overview \n", + "Welcome to the Introduction to GPU Programming course! This course has been designed to give you a practical foundation in GPU computing for scientific and technical applications. You will learn the essential concepts of GPU architectures, explore how to run code on modern accelerators, and develop hands-on skills in managing environments, running jobs on HPC systems, and optimising performance. The focus will be on applying these skills through guided exercises and projects in numerical modelling and simulation.\n", + "\n", + "## Course Objectives\n", + "- Understand the fundamental principles of GPU architectures and parallel programming models. \n", + "- Configure and manage software environments for GPU computing using **Spack**. \n", + "- Submit and manage GPU-enabled jobs on HPC systems with **Slurm**. \n", + "- Diagnose performance bottlenecks using profiling tools, and apply strategies for performance optimisation. \n", + "- Implement GPU-accelerated numerical models, such as a **temperature diffusion solver**. \n", + "- Apply knowledge to a capstone project, extending **Conway’s Game of Life** to explore GPU performance, scalability, and custom extensions.\n", + "\n", + "## Pre-requisite Knowledge\n", + "\n", + "- An account on ISCA\n", + "- Attended [Introduction to HPC](../individual_modules/section_landing_pages/introduction_to_hpc.md) or equivalent experience.\n", + "- Attended [Introduction to UNIX](../individual_modules/section_landing_pages/introduction_to_unix.md) or equivalent experience.\n", + "- Attended [Introduction to Python](../individual_modules/section_landing_pages/introduction_to_python.md) or equivalent experience. \n", + "\n", + "## Sign-up \n", + "\n", + "To check for upcoming course dates and to register, please visit the Workshop Schedule and Sign-up page available [here](../cfrr_program_details/courses_overview.ipynb).\n", + "\n", + "\n", + "## Resources \n", + "\n", + "The job submission scripts specifically configured for use on the University of Exeter ISCA HPC system are available [here](../individual_modules/intro_to_GPUs/zip_files/exeter_isca_slurm_submission_scripts.zip). \n", + "\n", + "General-purpose job submission scripts, which can serve as a starting point for use on other HPC systems (with minor modifications required for this course), are available [here](../individual_modules/intro_to_GPUs/zip_files/slurm_submission_scripts.zip). \n", + "\n", + "The Python scripts used in this course can be downloaded [here](../individual_modules/intro_to_GPUs/zip_files/scripts.zip). \n", + "\n", + "All supplementary files required for the course are available [here](../individual_modules/intro_to_GPUs/zip_files/files.zip). \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5e8dca5b-4283-4adc-8bfc-8ffbab103ae6", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "from datetime import datetime\n", + "from IPython.display import display, HTML\n", + "\n", + "# Define the course that is being looked at\n", + "course_name = \"Introduction to GPUs\"\n", + "\n", + "# Load the CSV file\n", + "file_path = '../data/workshop_info.csv' # Adjust the path to your file location\n", + "courses_df = pd.read_csv(file_path)\n", + "\n", + "# Strip any extra spaces in the column names\n", + "courses_df.columns = courses_df.columns.str.strip()\n", + "\n", + "# Convert date columns to datetime\n", + "courses_df['Start Date'] = pd.to_datetime(courses_df['Start Date'], dayfirst=True, errors='coerce')\n", + "courses_df['End Date'] = pd.to_datetime(courses_df['End Date'], dayfirst=True, errors='coerce')\n", + "\n", + "# Get today's date\n", + "today = datetime.now()\n", + "\n", + "# Function to generate markdown text based on the course dates\n", + "def generate_html(row):\n", + " if pd.notna(row['Start Date']) and pd.notna(row['End Date']):\n", + " if row['Start Date'] <= today <= row['End Date']:\n", + " return f\"
This course is currently accepting applications.
\"\n", + " return \"\"\n", + "\n", + "# Apply the function and create a new column for Markdown\n", + "courses_df['HTML'] = courses_df.apply(generate_html, axis=1)\n", + "\n", + "# Variable for course name\n", + "\n", + "\n", + "# Filter the DataFrame for the given course name and display the HTML text\n", + "html_output = courses_df[courses_df['Course Name'] == course_name]['HTML'].values[0]\n", + "display(HTML(html_output))\n" + ] + }, + { + "cell_type": "markdown", + "id": "a502b994-5080-435c-83fe-5847f0406322", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "## Self Study Material Link \n", + "\n", + "The self-study material for this course is available [here](../individual_modules/section_landing_pages/introduction_to_GPUs.md).\n", + "\n", + "## Acknowledgements \n", + "\n", + "This course was developed by [Liam Berrisford](https://github.com/liamjberrisford) and [Stephen Cook](https://github.com/stephenpcook).\n", + "\n", + "## Course Delivery Content \n", + "\n", + "The presentation slides for this course can be accessed [here](../individual_modules/intro_to_GPUs/slides/GPU_Training_Day_Slides.pptx).\n", + "\n", + "## License Info " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ac67f5fd-172a-4988-b56d-7aadb66fb66a", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "\n", + "### Instructional Material\n", + "\n", + "The instructional material in this course is copyright © 2024 University of Exeter\n", + "and is made available under the Creative Commons Attribution 4.0 International\n", + "licence (https://creativecommons.org/licenses/by/4.0/). Instructional material\n", + "consists of material that is contained within the \"individual_modules/introduction_to_julia\" directory, and images folders in\n", + "this directory, with the exception of code snippets and example programs found\n", + "in files within these folders. Such code snippets and example programs are\n", + "considered software for the purposes of this licence. \n", + "\n", + "\n", + "### Software\n", + "\n", + "Except where otherwise noted, software provided in this repository is made\n", + "available under the MIT licence (https://opensource.org/licenses/MIT).\n", + "\n", + "Copyright © 2024 University of Exeter\n", + "\n", + "Permission is hereby granted, free of charge, to any person obtaining a copy\n", + "of this software and associated documentation files (the \"Software\"), to deal\n", + "in the Software without restriction, including without limitation the rights\n", + "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n", + "copies of the Software, and to permit persons to whom the Software is\n", + "furnished to do so, subject to the following conditions:\n", + "\n", + "The above copyright notice and this permission notice shall be included in all\n", + "copies or substantial portions of the Software.\n", + "\n", + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n", + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n", + "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n", + "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n", + "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n", + "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n", + "SOFTWARE.\n", + "\n", + "The software in this repository is adapted from software that is covered by the\n", + "following copyright and permission notice:\n", + "\n", + " Copyright © 2024 Software Carpentry\n", + "\n", + " Permission is hereby granted, free of charge, to any person obtaining\n", + " a copy of this software and associated documentation files (the\n", + " \"Software\"), to deal in the Software without restriction, including\n", + " without limitation the rights to use, copy, modify, merge, publish,\n", + " distribute, sublicense, and/or sell copies of the Software, and to\n", + " permit persons to whom the Software is furnished to do so, subject to\n", + " the following conditions:\n", + "\n", + " The above copyright notice and this permission notice shall be\n", + " included in all copies or substantial portions of the Software.\n", + "\n", + " THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n", + " EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n", + " MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n", + " NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n", + " LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n", + " OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n", + " WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import Markdown, display\n", + "\n", + "def display_markdown(file_path):\n", + " try:\n", + " with open(file_path, 'r') as file:\n", + " content = file.read()\n", + " display(Markdown(content))\n", + " except FileNotFoundError:\n", + " print(f\"The file {file_path} was not found.\")\n", + " except Exception as e:\n", + " print(f\"An error occurred: {e}\")\n", + "\n", + "# Example usage:\n", + "file_path = '../individual_modules/intro_to_GPUs/LICENSE.txt' # Replace with your file path\n", + "display_markdown(file_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e3770f86-b017-44f9-93a0-6233e9046cfe", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.19" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/short_courses/data_science_best_practices.md b/short_courses/data_science_best_practices.md index 7ae9af7b..a992d2ba 100644 --- a/short_courses/data_science_best_practices.md +++ b/short_courses/data_science_best_practices.md @@ -11,7 +11,6 @@ While it is not essential to follow every recommendation to the letter, thoughtf Most of the instructions in this guide require use of the commandline interface in a Unix based system (Mac and Linux). For use with Windows first install Gitbash via [Git for Windows](https://gitforwindows.org). Where `{project-name}` is referenced, replace this with the name of your project _without_ the curly braces. -To get started you will need to make sure [Python](#language-python), [Git](#version-control-git) and [Poetry](#packaging-and-dependency-management-poetry) are installed. Python and Git come pre-installed on both Mac and Linux systems, and Git is installed as part of Git for Windows, but Windows users will need to [download](https://www.python.org/downloads/) and install Python. You will need to additionally install Poetry, which can be done from the [website](https://python-poetry.org/) or by running: @@ -77,7 +76,7 @@ poetry add {package-name} ### Writing Code: -We recommend writing the majority of code using [VSCode](#ide-vscode) which will need [installing](https://code.visualstudio.com/Download) on all systems +We recommend writing the majority of code using VSCode which will need [installing](https://code.visualstudio.com/Download) on all systems Core project code can be added to a new `module_name.py` file in `src/{project-name}/` and then functions, classes and variables from that module can be imported into other files using: ```python @@ -167,7 +166,7 @@ A well-organized project structure is key to keeping code manageable, especially - **.gitignore**: Defines what is and is not to be included in the git repository fot the project. - **README.md**: Provides an overview of the project, setup instructions, and usage examples. -There will be some additional files created through use of [git](#version-control-git) and [VSCode](#ide-vscode). +There will be some additional files created through use of git and VSCode. NOTE: files beginning `.` are hidden files and will not appear unless showing hidden files is specified, i.e. using: