From cd3f497316c0c2e86b309098ff8e6a59147211a7 Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Sun, 19 Mar 2023 18:36:31 +1100 Subject: [PATCH 01/15] Added acknowledgement to authors and contributors Added welcome page. --- src/acknowledgements.md | 14 ++++++++++++++ src/chapter1/chapter1.md | 2 ++ src/home.md | 30 +++++++++++++++++++++++++++++- 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/acknowledgements.md b/src/acknowledgements.md index de67a3a..f9e95f7 100644 --- a/src/acknowledgements.md +++ b/src/acknowledgements.md @@ -1 +1,15 @@ # Acknowledgements + +This book is part of Monash DeepNeurons collection information and training resources. It is built and maintained internally by members of Monash DeepNeuron. + +## Authors + +- [Tyler Swann](https://github.com/oraqlle) +- [Osman Haji](https://github.com) +- [Yuki Kume](https://github.com) +- [Jasper Martin](https://github.com) + +## Contributors + +- [Mitchell Mibus](https://github.com) +- [Ankita Gosavi](https://github.com) diff --git a/src/chapter1/chapter1.md b/src/chapter1/chapter1.md index bad5562..e9dee6f 100644 --- a/src/chapter1/chapter1.md +++ b/src/chapter1/chapter1.md @@ -1 +1,3 @@ # Getting Started + + diff --git a/src/home.md b/src/home.md index 573707c..b8f3e20 100644 --- a/src/home.md +++ b/src/home.md @@ -4,7 +4,35 @@ Welcome and congratulations on joining the HPC team. This is the HPC Training Bo ## What is HPC? -~ +HPC stands for high performance computing. In involves using extremely powerful machines to perform complex tasks. It combines aspects of network management, parallel computing techniques and distributed computers to solve highly complex problems. The main focus of HPC is to build and use computer clusters; collections or grids of powerful computers that can communicate information between each other, to solve advanced computational problems that involve a lot of data or process power and time. + +## HPC at Monash DeepNeuron + +The HPC branch at Monash DeepNeuron works on many different projects. Everything from creating mini clusters, to using supercomputer clusters to simulate complex, real world systems for research and technology development in may different scientific disciplines. Within the HPC branch you will learn a lot about HPC development starting with the foundational concepts and ideas involved in HPC to working on various projects that implement and utilise these techniques in order to solve many different complex problems. + +## HPC Training + +### What is all this and what is it for? + +This is a book. More specifically it is the book containing all the content, training resources and learning materials that you will be using to complete you HPC training. The purpose of this book is to provide clear and concise learning resources that you can utilise effectively; not just in your HPC training, but for the entirety of your time at Monash DeepNeuron. + +### What are you going to learn? + +During your HPC training, you are going to learn all about HPC concepts and various tools that exist that allow us to perform HPC development. You will start with the setup process which involves downloading some tools you will be using throughout your training as well as creating a GitHub account. You will then learn about the C programming language and to effectively use it to create powerful and fast computer programs. You will then gain access to M3; Monash's cluster environment, where you will learn hwo to distribute jobs across one or many different computers. You'll also learn about concepts involved in parallel and distributed computing and development programs using these techniques to improve the speed of software applications. + +Along the way you will learn how to effectively use developer tools like Git and GitHub as well as solving various challenges each week to test and practice what you have learnt in each chapter. + +### How to use this book + +Using the book is pretty self explanatory. The content is split up into chapters which covers a particular topic which can be further broken down sections. You navigate through the book mostly chronologically using the arrow buttons on either side of the page (can't miss them). You can also look through the chapters and sections to find particular topics or using the search bar, which can be activated by pressing S. + +Each chapter has a challenges section. These contain quizzes and tasks to complete related to the content of each chapter. + +### Contributing + +You can contribute to the book by accessing its GitHub repository (GitHub log in the top right hand corner of any page). Follow the contributing guidelines on the repository for more details. + +---
From 32a516a682119966a5ba52ee15c0536f04341dd0 Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Mon, 20 Mar 2023 12:05:10 +1100 Subject: [PATCH 02/15] Chapter 1 landing page Git and GitHub sections --- src/chapter1/chapter1.md | 2 +- src/chapter1/github.md | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/chapter1/chapter1.md b/src/chapter1/chapter1.md index e9dee6f..6cb287c 100644 --- a/src/chapter1/chapter1.md +++ b/src/chapter1/chapter1.md @@ -1,3 +1,3 @@ # Getting Started - +In this chapter you'll setup some essential software tools that you will be using throughout your training. Note that some sections are specific to particular platform and devices. Only complete the section that is specific to your platform. The GitHub you must complete no matter which platform you are on. diff --git a/src/chapter1/github.md b/src/chapter1/github.md index c27f953..2be1f06 100644 --- a/src/chapter1/github.md +++ b/src/chapter1/github.md @@ -1 +1,13 @@ # GitHub + +## Git. What is it? + +Git is a Source Control Management tool (SCM). It keeps a history of multiple files and directories in a bundle called a repository. Git tracks changes using save points called commits. Commits use `.diff` files to track the difference in files between commits. Repositories can have multiple branches allow many different developers to create new changes and fixes to a codebase that are separate from each other. You can also switch between branches to work on many different changes at once. These branches can then later be merged back together to a `main` branch, integrating the various changes. + +## What is GitHub? + +GitHub is a remote Git service. This allows you to store Git repositories online so that individuals and teams can access and work on Git repositories and projects remotely. It offers many features on top of basic version control such as branch, issue and feature tracking, releases, CI/CD pipelines, project management and more. Its predominately used through its website which offers control of these features through a simple GUI. Throughout your time at Monash DeepNeuron, university and probably for the rest of your career (if in a software based role), you will use service like GitHub to help management the development of projects. + +Your first task is to sign up for a GitHub account, if you haven't already. I would highly recommend using a personal email address (not a university one) as you will most likely want access to your account after university. + +[GitHub - Join](https://github.com/join) From e63af7e8e7ce2b63ed830a4eb31ff382f0fac111 Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Mon, 20 Mar 2023 12:56:23 +1100 Subject: [PATCH 03/15] Skeleton for device setup --- src/chapter1/linux.md | 18 ++++++++++++++++++ src/chapter1/mac.md | 32 ++++++++++++++++++++++++++++++++ src/chapter1/windows.md | 27 +++++++++++++++++++++++++++ src/chapter1/wsl.md | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 116 insertions(+) diff --git a/src/chapter1/linux.md b/src/chapter1/linux.md index fc7d8aa..b56e738 100644 --- a/src/chapter1/linux.md +++ b/src/chapter1/linux.md @@ -1 +1,19 @@ # Linux Setup + +For your training you will need a few tools. Namely: + +- Git +- C compiler toolchain (GCC) +- A text editor (VSCode) + +## Installing Packages + +~ + +## Installing VSCode + +~ + +## VSCode Setup + +~ diff --git a/src/chapter1/mac.md b/src/chapter1/mac.md index 3f37b3a..7f849fa 100644 --- a/src/chapter1/mac.md +++ b/src/chapter1/mac.md @@ -1 +1,33 @@ # Mac Setup + +For your training you will need a few tools. Namely: + +- Homebrew +- Xcode +- Git +- C compiler toolchain (GCC) +- A text editor (VSCode) + +## Installing Homebrew + +~ + +## Installing Xcode + +~ + +## Installing Git + +~ + +## Installing GCC + +~ + +## Installing VSCode + +~ + +## VSCode Setup + +~ diff --git a/src/chapter1/windows.md b/src/chapter1/windows.md index 3e7d02a..2db0466 100644 --- a/src/chapter1/windows.md +++ b/src/chapter1/windows.md @@ -1 +1,28 @@ # Windows Setup + +For your training you will need a few tools. Namely: + +- Git +- MingW +- C compiler toolchain (GCC) +- A text editor (VSCode) + +## Installing Git + +~ + +## Installing MingW + +~ + +## Installing GCC + +~ + +## Installing VSCode + +~ + +## VSCode Setup + +~ diff --git a/src/chapter1/wsl.md b/src/chapter1/wsl.md index c161cd4..f1db382 100644 --- a/src/chapter1/wsl.md +++ b/src/chapter1/wsl.md @@ -1 +1,40 @@ # WSL Setup + +For your training you will need a few tools. Namely: + +- Windows Terminal +- Windows Subsystem for Linux +- Installing Ubuntu +- Git +- C compiler toolchain (GCC) +- A text editor (VSCode) + +This section will cover how to install WSL on Windows. If you already have a WSL setup you can skip these steps + +## Installing Windows Terminal + +~ + +## Installing WSL + +~ + +## Installing Ubuntu + +~ + +## Installing Packages + +~ + +## Installing GCC + +~ + +## Installing VSCode + +~ + +## VSCode Setup + +~ From c4a19782cee0be67b81e7392639c92b1a20b612a Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Mon, 20 Mar 2023 17:41:47 +1100 Subject: [PATCH 04/15] WSL setup section completed --- src/chapter1/taskmanager.png | Bin 0 -> 67199 bytes src/chapter1/wsl.md | 69 ++++++++++++++++++++++++++++------- 2 files changed, 56 insertions(+), 13 deletions(-) create mode 100644 src/chapter1/taskmanager.png diff --git a/src/chapter1/taskmanager.png b/src/chapter1/taskmanager.png new file mode 100644 index 0000000000000000000000000000000000000000..4e7046719716dc731dee7f12e5ac9411d2286941 GIT binary patch literal 67199 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 literal 0 HcmV?d00001 diff --git a/src/chapter1/wsl.md b/src/chapter1/wsl.md index f1db382..4403d37 100644 --- a/src/chapter1/wsl.md +++ b/src/chapter1/wsl.md @@ -9,32 +9,75 @@ For your training you will need a few tools. Namely: - C compiler toolchain (GCC) - A text editor (VSCode) -This section will cover how to install WSL on Windows. If you already have a WSL setup you can skip these steps +This section will cover how to install WSL on Windows. If you already have a WSL setup you can skip these steps. ## Installing Windows Terminal -~ +The first thing you will need is the new Windows Terminal app. This makes it easier to have multiple shells open, even different shells. This will be used to access your WSL instance. -## Installing WSL +[Windows Terminal Download](https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701) -~ +> Note: +> +> Shells are an environments that allow access to the operating system (OS), hardware and other system processes through simple shell commands, usually a shell language like Bash or Powershell. -## Installing Ubuntu +## Installing and Setting Up WSL -~ +Before you begin make sure to update Windows to make sure you have the latest version. You will then need to check in order to see if you can install WSL is if virtualization is enabled for your device. You can check this by opening 'Task Manager', clicking on the performance tab and looking at the CPU details. There will be an option called 'Virtualization' which should say 'Enabled'. + +![Task Manager Image](taskmanager.png) + +Next, open Powershell with Administrative Privileges and run the following command. + +```ps +wsl --install -d Ubuntu-22.04 +``` + +Once this has finished, you may need to restart your machine. With that WSL is installed. You should be able to open a Ubuntu shell using Windows Terminal by clicking the arrow icon next to the default tab and selecting Ubuntu. On your first launch, this may require you to setup your user credentials. ## Installing Packages -~ +To begin, you will need to install some packages. This will be done using `apt`, Ubuntu's system package manager. Run the commands in the shell. + +```sh +# `sudo` represents 'super user do'. + +# This runs a command with admin. privileges. +# Update apt's local package index. +sudo apt update + +# The `-y` flag means upgrade yes to all. +# This bypasses confirming package upgrades. +# Upgrade packages with new versions +sudo apt upgrade -y + +# Installs specified packages (separated by spaces). +sudo apt install git curl wget ca-certificates build-essential +``` + +And that's it. WSL is setup and installed. + +## VSCode Installation and Setup + +Now that WSL is installed and setup we will want to setup a text editor so we can easily edit and build our programs. For usage with WSL ans your training in general I recommend using VSCode as it allows you to customize you developer environment to your needs. It also can access the WSL filesystem allowing you to work on projects in a native Linux environment on Windows. If you prefer another editor such as Vim, Emacs or Neovim, feel free to use them as you please. -## Installing GCC +First download VSCode for Windows [VSCode Download](https://code.visualstudio.com/download) -~ +Once installed, open (on the Windows side) and navigate to the extensions tab (icon on the left size made of four boxes). Using the search bar, install the following extensions. -## Installing VSCode +- C/C++ +- GitLens +- Git Graph +- GitHub Pull Requests and Issues +- Sonarlint +- Remote development +- WSL +- Remote SSH -~ +You can then navigate to the window with the Ubuntu shell from before and run: -## VSCode Setup +```sh +code . +``` -~ +This will installed VSCode on the WSL from your Windows version and open it in the home directory. And thats it, you are done. From e3694d154ceac7a3d8e8c9e647b0bc137c97e99e Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Mon, 20 Mar 2023 17:57:02 +1100 Subject: [PATCH 05/15] Added preliminary vscode instructions for all sections. Linux setup (ubuntu) Added Git and GitHub link to WSL setup --- src/SUMMARY.md | 2 +- src/chapter1/linux.md | 47 ++++++++++++++++++++++++++++++++++++----- src/chapter1/mac.md | 16 ++++++++++---- src/chapter1/windows.md | 20 ++++++++++++++---- src/chapter1/wsl.md | 15 ++++++++++--- 5 files changed, 83 insertions(+), 17 deletions(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ead2775..4da9e89 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -3,11 +3,11 @@ [Welcome](home.md) - [Getting Started](./chapter1/chapter1.md) + - [GitHub](./chapter1/github.md) - [Windows](./chapter1/windows.md) - [Mac](./chapter1/mac.md) - [Linux](./chapter1/linux.md) - [WSL](./chapter1/wsl.md) - - [GitHub](./chapter1/github.md) - [M3](./chapter1/m3.md) - [Brief Introduction to C](./chapter2/intro-to-c.md) diff --git a/src/chapter1/linux.md b/src/chapter1/linux.md index b56e738..7d96946 100644 --- a/src/chapter1/linux.md +++ b/src/chapter1/linux.md @@ -6,14 +6,51 @@ For your training you will need a few tools. Namely: - C compiler toolchain (GCC) - A text editor (VSCode) + For this section I will be assuming a Debian system, namely Ubuntu. Replace `apt` commands with your distributions relevant package manager. + ## Installing Packages -~ +To begin, you will need to install some packages. This will be done using `apt`, Ubuntu's system package manager. Run the commands in the shell. + +```sh +# `sudo` represents 'super user do'. + +# This runs a command with admin. privileges. +# Update apt's local package index. +sudo apt update + +# The `-y` flag means upgrade yes to all. +# This bypasses confirming package upgrades. +# Upgrade packages with new versions +sudo apt upgrade -y + +# Installs specified packages (separated by spaces). +sudo apt install git curl wget build-essential +``` + +And that's it. Linux is setup and installed. + +## Connect Git & GitHub + +Next we will link your GitHub account to you local Git install. Run the following commands, replacing the username and email section with your details (keeping the quotation marks). + +```sh +git config --global user.name "" +git config --global user.email "" +``` + +## VSCode Installation and Setup + +Now that GCC is installed and setup we will want to setup a text editor so we can easily edit and build our programs. For your training, I recommend using VSCode as it allows you to customize you developer environment to your needs. If you prefer another editor such as Vim, Emacs or Neovim, feel free to use them as you please. -## Installing VSCode +First download VSCode for Linux [VSCode Download](https://code.visualstudio.com/download) -~ +Once installed, open the app and navigate to the extensions tab (icon on the left size made of four boxes). Using the search bar, install the following extensions. -## VSCode Setup +- C/C++ +- GitLens +- Git Graph +- GitHub Pull Requests and Issues +- Sonarlint -~ +And thats it, you are all setup. diff --git a/src/chapter1/mac.md b/src/chapter1/mac.md index 7f849fa..5f18b6d 100644 --- a/src/chapter1/mac.md +++ b/src/chapter1/mac.md @@ -24,10 +24,18 @@ For your training you will need a few tools. Namely: ~ -## Installing VSCode +## VSCode Installation and Setup -~ +Now that Homebrew, Xcode and GCC are installed and setup we will want to setup a text editor so we can easily edit and build our programs. For your training, I recommend using VSCode as it allows you to customize you developer environment to your needs. If you prefer another editor such as Neovim, feel free to use them as you please. -## VSCode Setup +First download VSCode for Mac [VSCode Download](https://code.visualstudio.com/download) -~ +Once installed, open the app and navigate to the extensions tab (icon on the left size made of four boxes). Using the search bar, install the following extensions. + +- C/C++ +- GitLens +- Git Graph +- GitHub Pull Requests and Issues +- Sonarlint + +And thats it, you are all setup. diff --git a/src/chapter1/windows.md b/src/chapter1/windows.md index 2db0466..354ae2c 100644 --- a/src/chapter1/windows.md +++ b/src/chapter1/windows.md @@ -11,6 +11,10 @@ For your training you will need a few tools. Namely: ~ +### Connect GitHub + +~ + ## Installing MingW ~ @@ -19,10 +23,18 @@ For your training you will need a few tools. Namely: ~ -## Installing VSCode +## VSCode Installation and Setup -~ +Now that MingW and GCC are installed and setup we will want to setup a text editor so we can easily edit and build our programs. For your training, I recommend using VSCode as it allows you to customize you developer environment to your needs. If you prefer another editor such as Neovim, feel free to use them as you please. -## VSCode Setup +First download VSCode for Windows [VSCode Download](https://code.visualstudio.com/download) -~ +Once installed, open the app and navigate to the extensions tab (icon on the left size made of four boxes). Using the search bar, install the following extensions. + +- C/C++ +- GitLens +- Git Graph +- GitHub Pull Requests and Issues +- Sonarlint + +And thats it, you are all setup. diff --git a/src/chapter1/wsl.md b/src/chapter1/wsl.md index 4403d37..58969aa 100644 --- a/src/chapter1/wsl.md +++ b/src/chapter1/wsl.md @@ -57,13 +57,22 @@ sudo apt install git curl wget ca-certificates build-essential And that's it. WSL is setup and installed. +## Connect Git & GitHub + +Next we will link your GitHub account to you local Git install. Run the following commands, replacing the username and email section with your details (keeping the quotation marks). + +```sh +git config --global user.name "" +git config --global user.email "" +``` + ## VSCode Installation and Setup -Now that WSL is installed and setup we will want to setup a text editor so we can easily edit and build our programs. For usage with WSL ans your training in general I recommend using VSCode as it allows you to customize you developer environment to your needs. It also can access the WSL filesystem allowing you to work on projects in a native Linux environment on Windows. If you prefer another editor such as Vim, Emacs or Neovim, feel free to use them as you please. +Now that WSL, Ubuntu and Git are installed and setup we will want to setup a text editor so we can easily edit and build our programs. For usage with WSL ans your training in general I recommend using VSCode as it allows you to customize you developer environment to your needs. It also can access the WSL filesystem allowing you to work on projects in a native Linux environment on Windows. If you prefer another editor such as Vim, Emacs or Neovim, feel free to use them as you please. First download VSCode for Windows [VSCode Download](https://code.visualstudio.com/download) -Once installed, open (on the Windows side) and navigate to the extensions tab (icon on the left size made of four boxes). Using the search bar, install the following extensions. +Once installed, open the app (on the Windows side) and navigate to the extensions tab (icon on the left size made of four boxes). Using the search bar, install the following extensions. - C/C++ - GitLens @@ -80,4 +89,4 @@ You can then navigate to the window with the Ubuntu shell from before and run: code . ``` -This will installed VSCode on the WSL from your Windows version and open it in the home directory. And thats it, you are done. +This will installed VSCode on the WSL from your Windows version and open it in the home directory. And thats it, you are all setup. From bede0e3c68b9fb8267512a82ab5943a93cf5d6b3 Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Tue, 21 Mar 2023 10:54:11 +1100 Subject: [PATCH 06/15] Initial setup for Windows --- src/chapter1/windows.md | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/chapter1/windows.md b/src/chapter1/windows.md index 354ae2c..10a27a9 100644 --- a/src/chapter1/windows.md +++ b/src/chapter1/windows.md @@ -3,25 +3,35 @@ For your training you will need a few tools. Namely: - Git -- MingW -- C compiler toolchain (GCC) +- C compiler toolchain (MSVC) - A text editor (VSCode) ## Installing Git -~ +First, you will need to install Git. This allows you to use Git from the terminal and also gives you access to a bash shell environment. While following the install wizard, make sure to select the option that adds Git to your `PATH`. This important as it allows you to use Git in 'PowerShell'. Keep the other default operations. Git may require you to restart you machine. + +[Git Download](https://git-scm.com/downloads) ### Connect GitHub -~ +Once Git has installed, open a new 'Git Bash' that was installed. This can be found in the Windows 'Start' menu. Once it is open, run the following commands, replacing the username and email section with your details (keeping the quotation marks). + +```sh +git config --global user.name "" +git config --global user.email "" +``` + +## Installing MSVC -## Installing MingW +Next we will need to install a C compiler toolchain. There a many different environments such as CygWin, MinGW but the most ideal environment is Microsoft's official development environment, MSVC. Download the Community Edition of Visual Studio and launch the installer. Under the 'Workloads' tab of the installer select the 'C++ Build Tools' bundle and click install. This may take a while. Once installed (may require restart) open the 'Start' menu and navigate to the 'Visual Studio' folder. There should a variety of different terminal environment applications. This is because Windows has slightly different toolchains and environments for x86 (32-bit) and x86_64 (64-bit). Select the 'Developer Command Prompt for VS 2022' app. In the terminal that spawns, run the command. -~ +```cmd +cl +``` -## Installing GCC +This will display the help options for `cl`, Window's C compiler. -~ +[Download MSVC](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019) ## VSCode Installation and Setup From dda4eacd31514f8095a32c25b784663385b937c4 Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Tue, 21 Mar 2023 17:37:42 +1100 Subject: [PATCH 07/15] Mac setup instructions --- src/chapter1/mac.md | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/chapter1/mac.md b/src/chapter1/mac.md index 5f18b6d..f8508ce 100644 --- a/src/chapter1/mac.md +++ b/src/chapter1/mac.md @@ -10,19 +10,35 @@ For your training you will need a few tools. Namely: ## Installing Homebrew -~ +Homebrew is a package manager for MacOS. It offers thousands of developer libraries that would be difficult to obtain on the Mac platform. To install open the Terminal app and run the following command: + +```sh +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +``` + +[Homebrew](https://brew.sh/) ## Installing Xcode -~ +Next we will need Xcode, Apple's compiler toolchain. Open the App Store and search for 'xcode' and press install. ## Installing Git -~ +Git may already be installed with your copy of Xcode. To check run the following in the Terminal: + +```sh +git --version +``` + +If it prompts you to install Git, follow the install wizard keeping the default options. ## Installing GCC -~ +To install the GCC compiler, we'll use the Homebrew program we installed before. + +```sh +brew install gcc-12 +``` ## VSCode Installation and Setup From fda759d2924901e81bf62e2a8deee75135038318 Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Tue, 21 Mar 2023 17:45:44 +1100 Subject: [PATCH 08/15] Updated GitHub section --- src/chapter1/github.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/chapter1/github.md b/src/chapter1/github.md index 2be1f06..1642dfd 100644 --- a/src/chapter1/github.md +++ b/src/chapter1/github.md @@ -11,3 +11,13 @@ GitHub is a remote Git service. This allows you to store Git repositories online Your first task is to sign up for a GitHub account, if you haven't already. I would highly recommend using a personal email address (not a university one) as you will most likely want access to your account after university. [GitHub - Join](https://github.com/join) + +It is also a good idea to install the GitHub mobile app. This allows you track and manage projects and reply to messages and issues from your phone. + +## Joining Monash DeepNeuron's GitHub Organisation + +Once you have signed up for GitHub, you will need to provide your instructors with your GitHub username. This is so we can invite you as a member of the Monash DeepNeuron's organisation on GitHub. This will give you access to projects and allow you to communicate with other members. This will also allow you to gain specific privileges for your future projects at Monash DeepNeuron. + +## Watching Repositories + +GitHub allows you 'watch' repositories. This means you'll be notified of changes to the repository so that you can keep on top of is happening with various projects. You'll be using this later in your training. From df4a8c5c5e4c776d0ba410e4a64a0b2c81f64128 Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Tue, 21 Mar 2023 17:46:53 +1100 Subject: [PATCH 09/15] Clarification for GitHub setup --- src/chapter1/github.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chapter1/github.md b/src/chapter1/github.md index 1642dfd..73536d3 100644 --- a/src/chapter1/github.md +++ b/src/chapter1/github.md @@ -16,7 +16,7 @@ It is also a good idea to install the GitHub mobile app. This allows you track a ## Joining Monash DeepNeuron's GitHub Organisation -Once you have signed up for GitHub, you will need to provide your instructors with your GitHub username. This is so we can invite you as a member of the Monash DeepNeuron's organisation on GitHub. This will give you access to projects and allow you to communicate with other members. This will also allow you to gain specific privileges for your future projects at Monash DeepNeuron. +Once you have signed up for GitHub, you will need to provide your instructors with your GitHub username. This is so we can invite you as a member of the Monash DeepNeuron's organisation on GitHub. This will give you access to projects and allow you to communicate with other members. This will also allow you to gain specific privileges for your future projects at Monash DeepNeuron. You're invitation to the organisation will be sent via the email used for your account. ## Watching Repositories From 0d92f65ce648c4b0296af75b49049ff8e96ae35c Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Tue, 21 Mar 2023 18:18:25 +1100 Subject: [PATCH 10/15] Reworded sentence in Getting Started chapter preface. Thanks to @jasparm --- src/chapter1/chapter1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chapter1/chapter1.md b/src/chapter1/chapter1.md index 6cb287c..c956017 100644 --- a/src/chapter1/chapter1.md +++ b/src/chapter1/chapter1.md @@ -1,3 +1,3 @@ # Getting Started -In this chapter you'll setup some essential software tools that you will be using throughout your training. Note that some sections are specific to particular platform and devices. Only complete the section that is specific to your platform. The GitHub you must complete no matter which platform you are on. +In this chapter you'll setup some essential software tools that you will be using throughout your training. Note that some sections are specific to particular platform and devices. Only complete the section that is specific to your platform. The GitHub section you must complete no matter which platform you are on. From e12b7c9841c4cee52da9ded2e8589034538eaf3c Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Tue, 21 Mar 2023 18:27:53 +1100 Subject: [PATCH 11/15] Updated contributors part of README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b84b877..b6d7e8d 100644 --- a/README.md +++ b/README.md @@ -27,8 +27,11 @@ $ mdbook serve --open - Tyler Swann - Ankita Gosavi -- Nikhil Kannachel - Mitchell Mibus +- Nikhil Kannachel +- Jaspar Martin +- Yuki Kume +- Osman Haji ## Code of Conduct, License & Contributing From 965576a66f33491e6bcf4aabbad0d311c51e9acd Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Tue, 21 Mar 2023 18:33:01 +1100 Subject: [PATCH 12/15] Removed M3 from the 'Getting Started' chapter --- src/SUMMARY.md | 1 - src/chapter1/m3.md | 1 - 2 files changed, 2 deletions(-) delete mode 100644 src/chapter1/m3.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 4da9e89..31edfdc 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -8,7 +8,6 @@ - [Mac](./chapter1/mac.md) - [Linux](./chapter1/linux.md) - [WSL](./chapter1/wsl.md) - - [M3](./chapter1/m3.md) - [Brief Introduction to C](./chapter2/intro-to-c.md) - [Hello World](./chapter2/helloworld.md) diff --git a/src/chapter1/m3.md b/src/chapter1/m3.md deleted file mode 100644 index 3152926..0000000 --- a/src/chapter1/m3.md +++ /dev/null @@ -1 +0,0 @@ -# M3 From 86d911d6f0267397db33754d40b1bda298b2c2d9 Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Tue, 21 Mar 2023 20:03:17 +1100 Subject: [PATCH 13/15] Adjusted the mac setup section to be more accurate --- src/chapter1/mac.md | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/src/chapter1/mac.md b/src/chapter1/mac.md index f8508ce..40f17b4 100644 --- a/src/chapter1/mac.md +++ b/src/chapter1/mac.md @@ -2,44 +2,32 @@ For your training you will need a few tools. Namely: -- Homebrew - Xcode - Git - C compiler toolchain (GCC) - A text editor (VSCode) -## Installing Homebrew +## Installing Xcode, Git & GCC -Homebrew is a package manager for MacOS. It offers thousands of developer libraries that would be difficult to obtain on the Mac platform. To install open the Terminal app and run the following command: +First, we will need Xcode command line tool utilities, to do so, open the 'Terminal' app and run the following command: ```sh -/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +xcode-select --install ``` -[Homebrew](https://brew.sh/) - -## Installing Xcode - -Next we will need Xcode, Apple's compiler toolchain. Open the App Store and search for 'xcode' and press install. - -## Installing Git - -Git may already be installed with your copy of Xcode. To check run the following in the Terminal: +This will prompt you to accept the install and will download Git and GCC onto your device. To verify installation was successful, run: ```sh -git --version -``` +$ xcode-select -p -If it prompts you to install Git, follow the install wizard keeping the default options. - -## Installing GCC - -To install the GCC compiler, we'll use the Homebrew program we installed before. - -```sh -brew install gcc-12 +# Should print this +/Library/Developer/CommandLineTools ``` +> ### Note +> +> Here, `$` indicates the prompt of the terminal. Do not include it in the command. This may be a different symbol on your device. + ## VSCode Installation and Setup Now that Homebrew, Xcode and GCC are installed and setup we will want to setup a text editor so we can easily edit and build our programs. For your training, I recommend using VSCode as it allows you to customize you developer environment to your needs. If you prefer another editor such as Neovim, feel free to use them as you please. From 2b6251f725e2a8e4f529f00138813bb22ce953ec Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Wed, 22 Mar 2023 08:50:39 +1100 Subject: [PATCH 14/15] Renamed chapter 1 chapter file to 'getting-started' --- src/SUMMARY.md | 2 +- src/chapter1/{chapter1.md => getting-started.md} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/chapter1/{chapter1.md => getting-started.md} (100%) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 31edfdc..891e69a 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -2,7 +2,7 @@ [Welcome](home.md) -- [Getting Started](./chapter1/chapter1.md) +- [Getting Started](./chapter1/getting-started.md) - [GitHub](./chapter1/github.md) - [Windows](./chapter1/windows.md) - [Mac](./chapter1/mac.md) diff --git a/src/chapter1/chapter1.md b/src/chapter1/getting-started.md similarity index 100% rename from src/chapter1/chapter1.md rename to src/chapter1/getting-started.md From 16b8e2ed6357c80fb24f19faf25540eb19211504 Mon Sep 17 00:00:00 2001 From: oraqlle <41113853+oraqlle@users.noreply.github.com> Date: Mon, 27 Mar 2023 17:35:57 +1100 Subject: [PATCH 15/15] Added summary on how challenges work --- src/SUMMARY.md | 1 + src/chapter1/challenges.md | 33 +++++++++++++++++++++++++++++++++ src/home.md | 4 +--- 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 src/chapter1/challenges.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 891e69a..8977551 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -8,6 +8,7 @@ - [Mac](./chapter1/mac.md) - [Linux](./chapter1/linux.md) - [WSL](./chapter1/wsl.md) + - [Challenges](./chapter1/challenges.md) - [Brief Introduction to C](./chapter2/intro-to-c.md) - [Hello World](./chapter2/helloworld.md) diff --git a/src/chapter1/challenges.md b/src/chapter1/challenges.md new file mode 100644 index 0000000..7299469 --- /dev/null +++ b/src/chapter1/challenges.md @@ -0,0 +1,33 @@ +# Challenges + +As you progress through each chapter you will be given a small set of challenges to complete. In order to complete the challenges there is a complementary GitHub template repository found on the Monash DeepNeuron GitHub organisation called [HPC Training Challenges](https://github.com/MonashDeepNeuron/HPC-Training-Challenges). As a template you are able to create your own copy of the repository and complete the challenges completely independent of the other recruits. + +## Setting Up Challenges Repository + +To get setup: + +- Click the link above to got to the repository on GitHub. +- Click 'Use this template' button (green) and select 'Create a new repository'. +- Give it a name and make sure it is private. +- Click 'Create repository from template'. +- This will open the page for the repository. Click the '<> Code' button (green), make sure you are in the HTTPS tab and copy the link. +- Open a terminal in your dev directory. +- Run: + +```sh +git clone +code +``` + +And thats it, you can now edit any of the files and complete the challenges. When you want to save your changes to GitHub simply add them and push to them to GitHub. + +```sh +git add . # Add any untracked or modified files +git push origin # Push to GitHub +``` + +## Challenges Repository + +The challenges repository is broken down into different directories for each chapter. For each chapter their will be a series of additional directories corresponding to the specific challenge. These will contain any and all the resources needed for the challenge except programs that you are required to complete. + + diff --git a/src/home.md b/src/home.md index b8f3e20..7111a29 100644 --- a/src/home.md +++ b/src/home.md @@ -24,9 +24,7 @@ Along the way you will learn how to effectively use developer tools like Git and ### How to use this book -Using the book is pretty self explanatory. The content is split up into chapters which covers a particular topic which can be further broken down sections. You navigate through the book mostly chronologically using the arrow buttons on either side of the page (can't miss them). You can also look through the chapters and sections to find particular topics or using the search bar, which can be activated by pressing S. - -Each chapter has a challenges section. These contain quizzes and tasks to complete related to the content of each chapter. +Using the book is pretty self explanatory. The content is split up into chapters which covers a particular topic which can be further broken down sections. You navigate through the book mostly chronologically using the arrow buttons on either side of the page (can't miss them). You can also look through the chapters and sections to find particular topics or using the search bar, which can be activated by pressing S. Each chapter has a challenges section. These contain various tasks to complete related to the content of each chapter. ### Contributing