├── .editorconfig ├── .github ├── config.yml ├── dependabot.yml ├── stale.yml └── workflows │ ├── template.yml │ └── website.yml ├── .gitignore ├── .pre-commit-config.yaml ├── AUTHORS ├── CITATION ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Gemfile ├── LICENSE.md ├── Makefile ├── README.md ├── _config.yml ├── _episodes ├── .gitkeep ├── 01-introduction.md ├── 02-mltechnical.md ├── 03-nn.md ├── 04-Comfort-Break.md ├── 05-Resources.md ├── 06-Data_Discussion.md ├── 07-Data_Preprocessing.md ├── 08-Comfort-Break.md ├── 09-Model_Training.md ├── 10-Overfitting_Check.md ├── 11-Model_Comparison.md ├── 12-Experimental_Data.md ├── 13-TensorFlow.md └── 14-ttZ.md ├── _episodes_rmd ├── .gitkeep ├── 01-introduction.md └── data │ └── .gitkeep ├── _extras ├── .gitkeep ├── about.md ├── discuss.md ├── figures.md └── guide.md ├── _includes ├── aio-script.md ├── all_keypoints.html ├── base_path.html ├── carpentries.html ├── curriculum.html ├── dc │ ├── intro.html │ ├── schedule.html │ ├── syllabus.html │ └── who.html ├── episode_break.html ├── episode_keypoints.html ├── episode_navbar.html ├── episode_overview.html ├── episode_title.html ├── favicons.html ├── gh_variables.html ├── javascript.html ├── lc │ ├── intro.html │ ├── schedule.html │ ├── syllabus.html │ └── who.html ├── lesson_footer.html ├── life_cycle.html ├── links.md ├── main_title.html ├── manual_episode_order.html ├── navbar.html ├── sc │ ├── intro.html │ ├── schedule.html │ ├── syllabus.html │ └── who.html ├── syllabus.html ├── workshop_ad.html ├── workshop_calendar.html └── workshop_footer.html ├── _layouts ├── base.html ├── break.html ├── episode.html ├── lesson.html ├── page.html ├── post.html ├── reference.html └── workshop.html ├── aio.md ├── assets ├── css │ ├── bootstrap-theme.css │ ├── bootstrap-theme.css.map │ ├── bootstrap.css │ ├── bootstrap.css.map │ ├── lesson.scss │ └── syntax.css ├── favicons │ ├── cp │ │ ├── apple-touch-icon-114x114.png │ │ ├── apple-touch-icon-120x120.png │ │ ├── apple-touch-icon-144x144.png │ │ ├── apple-touch-icon-152x152.png │ │ ├── apple-touch-icon-57x57.png │ │ ├── apple-touch-icon-60x60.png │ │ ├── apple-touch-icon-72x72.png │ │ ├── apple-touch-icon-76x76.png │ │ ├── favicon-128.png │ │ ├── favicon-16x16.png │ │ ├── favicon-196x196.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── favicon.ico │ │ ├── mstile-144x144.png │ │ ├── mstile-150x150.png │ │ ├── mstile-310x150.png │ │ ├── mstile-310x310.png │ │ └── mstile-70x70.png │ ├── dc │ │ ├── apple-touch-icon-114x114.png │ │ ├── apple-touch-icon-120x120.png │ │ ├── apple-touch-icon-144x144.png │ │ ├── apple-touch-icon-152x152.png │ │ ├── apple-touch-icon-57x57.png │ │ ├── apple-touch-icon-60x60.png │ │ ├── apple-touch-icon-72x72.png │ │ ├── apple-touch-icon-76x76.png │ │ ├── favicon-128.png │ │ ├── favicon-16x16.png │ │ ├── favicon-196x196.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── favicon.ico │ │ ├── mstile-144x144.png │ │ ├── mstile-150x150.png │ │ ├── mstile-310x150.png │ │ ├── mstile-310x310.png │ │ └── mstile-70x70.png │ ├── hsf │ │ ├── android-icon-144x144.png │ │ ├── android-icon-192x192.png │ │ ├── android-icon-36x36.png │ │ ├── android-icon-48x48.png │ │ ├── android-icon-72x72.png │ │ ├── android-icon-96x96.png │ │ ├── apple-icon-114x114.png │ │ ├── apple-icon-120x120.png │ │ ├── apple-icon-144x144.png │ │ ├── apple-icon-152x152.png │ │ ├── apple-icon-180x180.png │ │ ├── apple-icon-57x57.png │ │ ├── apple-icon-60x60.png │ │ ├── apple-icon-72x72.png │ │ ├── apple-icon-76x76.png │ │ ├── apple-icon-precomposed.png │ │ ├── apple-icon.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── favicon.ico │ │ ├── ms-icon-144x144.png │ │ ├── ms-icon-150x150.png │ │ ├── ms-icon-310x310.png │ │ └── ms-icon-70x70.png │ ├── lc │ │ ├── apple-touch-icon-114x114.png │ │ ├── apple-touch-icon-120x120.png │ │ ├── apple-touch-icon-144x144.png │ │ ├── apple-touch-icon-152x152.png │ │ ├── apple-touch-icon-57x57.png │ │ ├── apple-touch-icon-60x60.png │ │ ├── apple-touch-icon-72x72.png │ │ ├── apple-touch-icon-76x76.png │ │ ├── favicon-128.png │ │ ├── favicon-16x16.png │ │ ├── favicon-196x196.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── favicon.ico │ │ ├── mstile-144x144.png │ │ ├── mstile-150x150.png │ │ ├── mstile-310x150.png │ │ ├── mstile-310x310.png │ │ └── mstile-70x70.png │ └── swc │ │ ├── apple-touch-icon-114x114.png │ │ ├── apple-touch-icon-120x120.png │ │ ├── apple-touch-icon-144x144.png │ │ ├── apple-touch-icon-152x152.png │ │ ├── apple-touch-icon-57x57.png │ │ ├── apple-touch-icon-60x60.png │ │ ├── apple-touch-icon-72x72.png │ │ ├── apple-touch-icon-76x76.png │ │ ├── favicon-128.png │ │ ├── favicon-16x16.png │ │ ├── favicon-196x196.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── favicon.ico │ │ ├── mstile-144x144.png │ │ ├── mstile-150x150.png │ │ ├── mstile-310x150.png │ │ ├── mstile-310x310.png │ │ └── mstile-70x70.png ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 ├── img │ ├── cp-logo-blue.svg │ ├── dc-icon-black.svg │ ├── dc-logo-black.svg │ ├── hsf-logo.png │ ├── lc-icon-black.png │ ├── lc-icon-black.svg │ ├── lc-logo-black.png │ ├── lc-logo-black.svg │ ├── swc-icon-blue.svg │ ├── swc-logo-blue.png │ ├── swc-logo-blue.svg │ ├── swc-logo-white.png │ └── swc-logo-white.svg └── js │ ├── bootstrap.min.js │ ├── jquery.min.js │ ├── jquery.min.map │ └── lesson.js ├── bin ├── boilerplate │ ├── .travis.yml │ ├── AUTHORS │ ├── CITATION │ ├── CONTRIBUTING.md │ ├── README.md │ ├── _config.yml │ ├── _episodes │ │ └── 01-introduction.md │ ├── _extras │ │ ├── about.md │ │ ├── discuss.md │ │ ├── figures.md │ │ └── guide.md │ ├── index.md │ ├── reference.md │ └── setup.md ├── chunk-options.R ├── dependencies.R ├── generate_md_episodes.R ├── install_r_deps.sh ├── knit_lessons.sh ├── lesson_check.py ├── lesson_initialize.py ├── markdown_ast.rb ├── repo_check.py ├── run-make-docker-serve.sh ├── test_lesson_check.py ├── util.py └── workshop_check.py ├── code └── .gitkeep ├── codespell.txt ├── data └── .gitkeep ├── fig └── .gitkeep ├── files └── .gitkeep ├── index.md ├── make_plots.ipynb ├── plots ├── GradDescent.PNG ├── Kaggle_register.png ├── act_functions.png ├── copy_edit.png ├── flower.jpeg ├── intro_image.png ├── ml_populatir.PNG ├── nn.PNG ├── overfit.png ├── overfitted.png ├── tree.png ├── ttZ-2L-6j2b-SR.png └── underfit_overfit.png ├── reference.md └── setup.md /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | insert_final_newline = true 6 | trim_trailing_whitespace = true 7 | 8 | [*.md] 9 | indent_size = 2 10 | indent_style = space 11 | max_line_length = 100 # Please keep this in sync with bin/lesson_check.py! 12 | 13 | [*.r] 14 | max_line_length = 80 15 | 16 | [*.py] 17 | indent_size = 4 18 | indent_style = space 19 | max_line_length = 79 20 | 21 | [*.sh] 22 | end_of_line = lf 23 | 24 | [Makefile] 25 | indent_style = tab 26 | -------------------------------------------------------------------------------- /.github/config.yml: -------------------------------------------------------------------------------- 1 | # === IMPORTANT: CENTRALLY MAINTAINED FILE === 2 | # This file was automatically added via the scripts at the maintenance repository. 3 | # Please do not change it. Rather, update the blueprint in the maintenance repository and propagate 4 | # the changes from there. 5 | # IF YOU REALLY WANT TO MAKE REPOSITORY SPECIFIC CHANGES TO THIS FILE, PLEASE REMOVE THIS NOTICE! 6 | # Tag @klieret for any questions. 7 | # ====== 8 | 9 | # Configuration for welcome - https://github.com/behaviorbot/welcome 10 | 11 | # Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome 12 | 13 | # Comment to be posted to on first time issues 14 | newIssueWelcomeComment: > 15 | Thanks for opening your first issue here 💖! If you have any questions, feel free to mention one of the conveners, previous contributors, or attend our weekly meeting (see https://hepsoftwarefoundation.org/workinggroups/training.html). Also, sometimes issues go unnoticed, so don't hesitate to @mention some of us, if we do not come back to you within a few days. 16 | 17 | # Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome 18 | 19 | # Comment to be posted to on PRs from first time contributors in your repository 20 | newPRWelcomeComment: > 21 | Thanks for opening your first pull request here 🚀! If you have any questions, feel free to mention one of the conveners, previous contributors, or attend our weekly meeting (see 22 | [our homepage](https://hepsoftwarefoundation.org/workinggroups/training.html)). Also, sometimes PRs go unnoticed, so don't hesitate to @mention some of us, if we do not come back to you within a few days. 23 | 24 | # Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge 25 | 26 | # Comment to be posted to on pull requests merged by a first time user 27 | firstPRMergeComment: > 28 | Congrats on merging your first pull request 🎉! We greatly appreciate it. 29 | 30 | You might be eligible to be added to the [HSF Training Community](https://hepsoftwarefoundation.org/training/community_by_year) page (see the instructions on the page for how to create a profile). If you already have created a profile previously, make sure you're also added to the current year. 31 | If this repository features a list of contributors at the bottom of the readme, you might also be eligible to add yourself there. -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | # Maintain dependencies for GitHub Actions 4 | - package-ecosystem: "github-actions" 5 | directory: "/" 6 | schedule: 7 | interval: "weekly" 8 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # === IMPORTANT: CENTRALLY MAINTAINED FILE === 2 | # This file was automatically added via the scripts at the maintenance repository. 3 | # Please do not change it. Rather, update the blueprint in the maintenance repository and propagate 4 | # the changes from there. 5 | # IF YOU REALLY WANT TO MAKE REPOSITORY SPECIFIC CHANGES TO THIS FILE, PLEASE REMOVE THIS NOTICE! 6 | # Tag @klieret for any questions. 7 | # ====== 8 | 9 | # Configuration for probot-stale - https://github.com/probot/stale 10 | 11 | # Number of days of inactivity before an Issue or Pull Request becomes stale 12 | daysUntilStale: 60 13 | 14 | # Number of days of inactivity before an Issue or Pull Request with the stale label is closed. 15 | # Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. 16 | daysUntilClose: false 17 | 18 | # Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled) 19 | onlyLabels: [] 20 | 21 | # Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable 22 | exemptLabels: 23 | - pinned 24 | - security 25 | - "[Status] Maybe Later" 26 | 27 | # Set to true to ignore issues in a project (defaults to false) 28 | exemptProjects: false 29 | 30 | # Set to true to ignore issues in a milestone (defaults to false) 31 | exemptMilestones: false 32 | 33 | # Set to true to ignore issues with an assignee (defaults to false) 34 | exemptAssignees: false 35 | 36 | # Label to use when marking as stale 37 | staleLabel: stale 38 | 39 | # Comment to post when marking as stale. Set to `false` to disable 40 | markComment: > 41 | This issue or pull request has been automatically marked as stale because it has not had 42 | recent activity. Please manually close it, if it is no longer relevant, 43 | or ask for help or support to help getting it unstuck. 44 | Let me bring this to the attention of @klieret @wdconinc @michmx for now. 45 | 46 | # Comment to post when removing the stale label. 47 | # unmarkComment: > 48 | # Your comment here. 49 | 50 | # Comment to post when closing a stale Issue or Pull Request. 51 | # closeComment: > 52 | # Your comment here. 53 | 54 | # Limit the number of actions per hour, from 1-30. Default is 30 55 | limitPerRun: 30 56 | # Limit to only `issues` or `pulls` 57 | # only: issues 58 | 59 | # Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': 60 | # pulls: 61 | # daysUntilStale: 30 62 | # markComment: > 63 | # This pull request has been automatically marked as stale because it has not had 64 | # recent activity. It will be closed if no further activity occurs. Thank you 65 | # for your contributions. 66 | 67 | # issues: 68 | # exemptLabels: 69 | # - confirmed -------------------------------------------------------------------------------- /.github/workflows/template.yml: -------------------------------------------------------------------------------- 1 | name: Test template 2 | on: 3 | push: 4 | branches: gh-pages 5 | pull_request: 6 | jobs: 7 | check-template: 8 | name: ${{ matrix.lesson-name }} (${{ matrix.os-name }}) 9 | if: github.repository == 'carpentries/styles' 10 | runs-on: ${{ matrix.os }} 11 | strategy: 12 | fail-fast: false 13 | matrix: 14 | lesson: [swcarpentry/shell-novice, datacarpentry/r-intro-geospatial, librarycarpentry/lc-git] 15 | os: [ubuntu-latest, macos-latest, windows-latest] 16 | include: 17 | - os: ubuntu-latest 18 | os-name: Ubuntu 19 | - os: macos-latest 20 | os-name: macOS 21 | - os: windows-latest 22 | os-name: Windows 23 | - lesson: swcarpentry/shell-novice 24 | lesson-name: (SWC) Shell novice 25 | - lesson: datacarpentry/r-intro-geospatial 26 | lesson-name: (DC) R Intro Geospatial 27 | - lesson: librarycarpentry/lc-git 28 | lesson-name: (LC) Intro to Git 29 | defaults: 30 | run: 31 | shell: bash # forces 'Git for Windows' on Windows 32 | env: 33 | RSPM: 'https://packagemanager.rstudio.com/cran/__linux__/bionic/latest' 34 | steps: 35 | - name: Set up Ruby 36 | uses: actions/setup-ruby@main 37 | with: 38 | ruby-version: '2.7.1' 39 | 40 | - name: Set up Python 41 | uses: actions/setup-python@v5 42 | with: 43 | python-version: '3.x' 44 | 45 | - name: Install GitHub Pages, Bundler, and kramdown gems 46 | run: | 47 | gem install github-pages bundler kramdown 48 | 49 | - name: Install Python modules 50 | run: | 51 | if [[ $RUNNER_OS == macOS || $RUNNER_OS == Linux ]]; then 52 | python3 -m pip install --upgrade pip setuptools wheel pyyaml==5.3.1 requests 53 | elif [[ $RUNNER_OS == Windows ]]; then 54 | python -m pip install --upgrade pip setuptools wheel pyyaml==5.3.1 requests 55 | fi 56 | 57 | - name: Checkout the ${{ matrix.lesson }} lesson 58 | uses: actions/checkout@master 59 | with: 60 | repository: ${{ matrix.lesson }} 61 | path: lesson 62 | fetch-depth: 0 63 | 64 | - name: Determine the proper reference to use 65 | id: styles-ref 66 | run: | 67 | if [[ -n "${{ github.event.pull_request.number }}" ]]; then 68 | echo "::set-output name=ref::refs/pull/${{ github.event.pull_request.number }}/head" 69 | else 70 | echo "::set-output name=ref::gh-pages" 71 | fi 72 | 73 | - name: Sync lesson with carpentries/styles 74 | working-directory: lesson 75 | run: | 76 | git config --global user.email "team@carpentries.org" 77 | git config --global user.name "The Carpentries Bot" 78 | git remote add styles https://github.com/carpentries/styles.git 79 | git config --local remote.styles.tagOpt --no-tags 80 | git fetch styles ${{ steps.styles-ref.outputs.ref }}:styles-ref 81 | git merge -s recursive -Xtheirs --no-commit styles-ref 82 | git commit -m "Sync lesson with carpentries/styles" 83 | 84 | - name: Look for R-markdown files 85 | id: check-rmd 86 | working-directory: lesson 87 | run: | 88 | echo "::set-output name=count::$(shopt -s nullglob; files=($(find . -iname '*.Rmd')); echo ${#files[@]})" 89 | 90 | - name: Set up R 91 | if: steps.check-rmd.outputs.count != 0 92 | uses: r-lib/actions/setup-r@master 93 | with: 94 | r-version: 'release' 95 | 96 | - name: Install needed packages 97 | if: steps.check-rmd.outputs.count != 0 98 | run: | 99 | install.packages(c('remotes', 'rprojroot', 'renv', 'desc', 'rmarkdown', 'knitr')) 100 | shell: Rscript {0} 101 | 102 | - name: Query dependencies 103 | if: steps.check-rmd.outputs.count != 0 104 | working-directory: lesson 105 | run: | 106 | source('bin/dependencies.R') 107 | deps <- identify_dependencies() 108 | create_description(deps) 109 | saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) 110 | writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") 111 | shell: Rscript {0} 112 | 113 | - name: Cache R packages 114 | if: runner.os != 'Windows' && steps.check-rmd.outputs.count != 0 115 | uses: actions/cache@v3 116 | with: 117 | path: ${{ env.R_LIBS_USER }} 118 | key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} 119 | restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- 120 | 121 | - name: Install system dependencies for R packages 122 | if: runner.os == 'Linux' && steps.check-rmd.outputs.count != 0 123 | working-directory: lesson 124 | run: | 125 | while read -r cmd 126 | do 127 | eval sudo $cmd 128 | done < <(Rscript -e 'cat(remotes::system_requirements("ubuntu", "18.04"), sep = "\n")') 129 | 130 | - run: make site 131 | working-directory: lesson 132 | -------------------------------------------------------------------------------- /.github/workflows/website.yml: -------------------------------------------------------------------------------- 1 | name: Website 2 | on: 3 | push: 4 | branches: gh-pages 5 | pull_request: [] 6 | jobs: 7 | build-website: 8 | if: github.repository != 'carpentries/styles' && (github.repository_owner == 'swcarpentry' || github.repository_owner == 'datacarpentry' || github.repository_owner == 'librarycarpentry' || github.repository_owner == 'carpentries') 9 | runs-on: ubuntu-latest 10 | defaults: 11 | run: 12 | shell: bash 13 | steps: 14 | - name: Set up Ruby 15 | uses: actions/setup-ruby@main 16 | with: 17 | ruby-version: '2.7.1' 18 | 19 | - name: Set up Python 20 | uses: actions/setup-python@v5 21 | with: 22 | python-version: '3.x' 23 | 24 | - name: Install GitHub Pages, Bundler, and kramdown gems 25 | run: | 26 | gem install github-pages bundler kramdown 27 | 28 | - name: Install Python modules 29 | run: | 30 | python3 -m pip install --upgrade pip setuptools wheel pyyaml==5.3.1 requests 31 | 32 | - name: Checkout the lesson 33 | uses: actions/checkout@master 34 | with: 35 | fetch-depth: 0 36 | ref: ${{ github.event.pull_request.head.sha }} 37 | 38 | - name: Look for R-markdown files 39 | id: check-rmd 40 | run: | 41 | echo "::set-output name=count::$(shopt -s nullglob; files=($(find . -iname '*.Rmd')); echo ${#files[@]})" 42 | 43 | - name: Set up R 44 | if: steps.check-rmd.outputs.count != 0 45 | uses: r-lib/actions/setup-r@master 46 | with: 47 | r-version: 'release' 48 | 49 | - name: Install needed packages 50 | if: steps.check-rmd.outputs.count != 0 51 | run: | 52 | install.packages(c('remotes', 'rprojroot', 'renv', 'desc', 'rmarkdown', 'knitr')) 53 | shell: Rscript {0} 54 | 55 | - name: Query dependencies 56 | if: steps.check-rmd.outputs.count != 0 57 | run: | 58 | source('bin/dependencies.R') 59 | deps <- identify_dependencies() 60 | create_description(deps) 61 | saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) 62 | writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") 63 | shell: Rscript {0} 64 | 65 | - name: Cache R packages 66 | if: steps.check-rmd.outputs.count != 0 67 | uses: actions/cache@v3 68 | with: 69 | path: ${{ env.R_LIBS_USER }} 70 | key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} 71 | restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- 72 | 73 | - name: Install system dependencies for R packages 74 | if: steps.check-rmd.outputs.count != 0 75 | run: | 76 | while read -r cmd 77 | do 78 | eval sudo $cmd 79 | done < <(Rscript -e 'cat(remotes::system_requirements("ubuntu", "18.04"), sep = "\n")') 80 | 81 | - run: make site 82 | - run: make lesson-check 83 | if: always() 84 | - run: make lesson-check-all 85 | if: always() 86 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *~ 3 | .DS_Store 4 | .ipynb_checkpoints 5 | .sass-cache 6 | .jekyll-cache/ 7 | __pycache__ 8 | _site 9 | .Rproj.user 10 | .Rhistory 11 | .RData 12 | .bundle/ 13 | .vendor/ 14 | vendor/ 15 | .docker-vendor/ 16 | Gemfile.lock 17 | .*history 18 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | # === IMPORTANT: CENTRALLY MAINTAINED FILE === 2 | # This file was automatically added via the scripts at the maintenance repository. 3 | # Please do not change it. Rather, update the blueprint in the maintenance repository and propagate 4 | # the changes from there. 5 | # IF YOU REALLY WANT TO MAKE REPOSITORY SPECIFIC CHANGES TO THIS FILE, PLEASE REMOVE THIS NOTICE! 6 | # Tag @klieret for any questions. 7 | # ====== 8 | 9 | ci: 10 | autoupdate_schedule: monthly 11 | 12 | repos: 13 | - repo: https://github.com/pre-commit/pre-commit-hooks 14 | rev: v4.6.0 15 | hooks: 16 | - id: check-added-large-files 17 | - id: check-case-conflict 18 | - id: check-merge-conflict 19 | - id: check-symlinks 20 | - id: debug-statements 21 | - id: end-of-file-fixer 22 | files: ^(_episodes|README.md|setup.md) 23 | - id: mixed-line-ending 24 | - id: trailing-whitespace 25 | files: ^(_episodes|code|README.md|setup.md) 26 | 27 | - repo: https://github.com/codespell-project/codespell 28 | rev: "v2.2.6" 29 | hooks: 30 | - id: codespell 31 | args: ["-I", "codespell.txt"] 32 | files: '.*\.md' 33 | # === END CENTRALLY MAINTAINED FILE === 34 | 35 | - repo: https://github.com/asottile/blacken-docs 36 | rev: 1.16.0 37 | hooks: 38 | - id: blacken-docs 39 | additional_dependencies: [black==22.6.0] 40 | files: '.*\.md' -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Meirin Oan Evans 2 | Luke Polson 3 | Samuel Meehan 4 | -------------------------------------------------------------------------------- /CITATION: -------------------------------------------------------------------------------- 1 | FIXME: describe how to cite this lesson. -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Contributor Code of Conduct" 4 | --- 5 | As contributors and maintainers of this project, 6 | we pledge to follow the [Carpentry Code of Conduct][coc]. 7 | 8 | Instances of abusive, harassing, or otherwise unacceptable behavior 9 | may be reported by following our [reporting guidelines][coc-reporting]. 10 | 11 | {% include links.md %} 12 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | [HSF training][hsf-training] is an open source project, 4 | and we welcome contributions of all kinds: 5 | new lessons, 6 | fixes to existing material, 7 | bug reports, 8 | and reviews of proposed changes are all welcome. 9 | 10 | ## Contributor Agreement 11 | 12 | By contributing, 13 | you agree that we may redistribute your work under [our license](LICENSE.md). 14 | In exchange, 15 | we will address your issues and/or assess your change proposal as promptly as we can, 16 | and help you become a member of our community. 17 | Everyone involved in [HSF training][hsf-training] 18 | agrees to abide by our [code of conduct](CODE_OF_CONDUCT.md). 19 | 20 | ## How to Contribute 21 | 22 | The easiest way to get started is to file an issue 23 | to tell us about a mistake, 24 | some awkward wording, 25 | a factual error. 26 | This is a good way to introduce yourself 27 | and to meet some of our community members. 28 | 29 | 1. If you do not have a [GitHub][github] account, 30 | you can write the convenors an email. 31 | However, 32 | we will be able to respond more quickly if you use one of the other methods described below. 33 | 34 | 2. If you have a [GitHub][github] account, 35 | or are willing to [create one][github-join], 36 | but do not know how to use Git, 37 | you can report problems or suggest improvements by [creating an issue][issues]. 38 | This allows us to assign the item to someone 39 | and to respond to it in a threaded discussion. 40 | 41 | 3. If you are comfortable with Git, 42 | and would like to add or change material, 43 | you can submit a pull request (PR). 44 | Instructions for doing this are [included below](#using-github). 45 | 46 | ## What to Contribute 47 | 48 | There are many ways to contribute, 49 | from writing new exercises and improving existing ones 50 | to updating or filling in the documentation 51 | and submitting [bug reports][issues] 52 | about things that do not work, aren not clear, or are missing. 53 | If you are looking for ideas, please see the 'Issues' tab for 54 | a list of issues associated with this repository, 55 | or you may also look at all issues in [hsf-training][hsf-training-issues] 56 | 57 | There is also [a list](hsf-training-gfis) of all issues that are particularly easy and suitable 58 | for first contributions. 59 | 60 | Comments on issues and reviews of pull requests are just as welcome: 61 | we are smarter together than we are on our own. 62 | Reviews from novices and newcomers are particularly valuable: 63 | it is easy for people who have been using these lessons for a while 64 | to forget how impenetrable some of this material can be, 65 | so fresh eyes are always welcome. 66 | 67 | ## Using GitHub 68 | 69 | If you choose to contribute via GitHub, you may want to look at 70 | [How to Contribute to an Open Source Project on GitHub][how-contribute]. 71 | To manage changes, we follow [GitHub flow][github-flow]. 72 | Each lesson has two maintainers who review issues and pull requests or encourage others to do so. 73 | The maintainers are community volunteers and have final say over what gets merged into the lesson. 74 | To use the web interface for contributing to a lesson: 75 | 76 | 1. Fork the originating repository to your GitHub profile. 77 | 2. Within your version of the forked repository, move to the `gh-pages` branch and 78 | create a new branch for each significant change being made. 79 | 3. Navigate to the file(s) you wish to change within the new branches and make revisions as required. 80 | 4. Commit all changed files within the appropriate branches. 81 | 5. Create individual pull requests from each of your changed branches 82 | to the `gh-pages` branch within the originating repository. 83 | 6. If you receive feedback, make changes using your issue-specific branches of the forked 84 | repository and the pull requests will update automatically. 85 | 7. Repeat as needed until all feedback has been addressed. 86 | 87 | When starting work, please make sure your clone of the originating `gh-pages` branch is up-to-date 88 | before creating your own revision-specific branch(es) from there. 89 | Additionally, please only work from your newly-created branch(es) and *not* 90 | your clone of the originating `gh-pages` branch. 91 | Lastly, published copies of all the lessons are available in the `gh-pages` branch of the originating 92 | repository for reference while revising. 93 | 94 | ## Other Resources 95 | 96 | More information on how to contribute or how to contact us: [HSF training home][hsf-training] 97 | 98 | [hsf-training-issues]: https://github.com/issues?q=user%3Ahsf-training+is%3Aopen 99 | [hsf-training]: https://hepsoftwarefoundation.org/workinggroups/training.html 100 | [email]: mailto:https://groups.google.com/forum/#!forum/hsf-training-wg 101 | [github]: https://github.com 102 | [github-flow]: https://guides.github.com/introduction/flow/ 103 | [github-join]: https://github.com/join 104 | [how-contribute]: https://docs.github.com/en/get-started/quickstart/contributing-to-projects 105 | [issues]: https://guides.github.com/features/issues/ 106 | [hsf-training-gfis]: https://github.com/issues?q=is%3Aissue+is%3Aopen+archived%3Afalse+sort%3Aupdated-desc+label%3A%22good+first+issue%22+org%3Ahsf-training 107 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | source 'https://rubygems.org' 4 | 5 | git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } 6 | 7 | # Synchronize with https://pages.github.com/versions 8 | ruby '>=2.5.5' 9 | 10 | gem 'github-pages', group: :jekyll_plugins 11 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Licenses" 4 | root: . 5 | --- 6 | ## Instructional Material 7 | 8 | All HEP Software Foundation instructional material is 9 | made available under the [Creative Commons Attribution 10 | license][cc-by-human]. The following is a human-readable summary of 11 | (and not a substitute for) the [full legal text of the CC BY 4.0 12 | license][cc-by-legal]. 13 | 14 | 15 | You are free: 16 | 17 | * to **Share**---copy and redistribute the material in any medium or format 18 | * to **Adapt**---remix, transform, and build upon the material 19 | 20 | for any purpose, even commercially. 21 | 22 | The licensor cannot revoke these freedoms as long as you follow the 23 | license terms. 24 | 25 | Under the following terms: 26 | 27 | * **Attribution**---You must give appropriate credit (mentioning that 28 | your work is derived from work that is Copyright © Software 29 | Carpentry and, where practical, linking to 30 | http://hepsoftwarefoundation.org/), provide a [link to the 31 | license][cc-by-human], and indicate if changes were made. You may do 32 | so in any reasonable manner, but not in any way that suggests the 33 | licensor endorses you or your use. 34 | 35 | **No additional restrictions**---You may not apply legal terms or 36 | technological measures that legally restrict others from doing 37 | anything the license permits. With the understanding that: 38 | 39 | Notices: 40 | 41 | * You do not have to comply with the license for elements of the 42 | material in the public domain or where your use is permitted by an 43 | applicable exception or limitation. 44 | * No warranties are given. The license may not give you all of the 45 | permissions necessary for your intended use. For example, other 46 | rights such as publicity, privacy, or moral rights may limit how you 47 | use the material. 48 | 49 | ## Templates and Framework from software carpentries 50 | 51 | This lesson is built on a framework developed by Software Carpentry. Below is their license: 52 | 53 | ### Instructional material 54 | 55 | All Software Carpentry, Data Carpentry, and Library Carpentry instructional material is 56 | made available under the [Creative Commons Attribution 57 | license][cc-by-human]. The following is a human-readable summary of 58 | (and not a substitute for) the [full legal text of the CC BY 4.0 59 | license][cc-by-legal]. 60 | 61 | You are free: 62 | 63 | * to **Share**---copy and redistribute the material in any medium or format 64 | * to **Adapt**---remix, transform, and build upon the material 65 | 66 | for any purpose, even commercially. 67 | 68 | The licensor cannot revoke these freedoms as long as you follow the 69 | license terms. 70 | 71 | Under the following terms: 72 | 73 | * **Attribution**---You must give appropriate credit (mentioning that 74 | your work is derived from work that is Copyright © Software 75 | Carpentry and, where practical, linking to 76 | http://software-carpentry.org/), provide a [link to the 77 | license][cc-by-human], and indicate if changes were made. You may do 78 | so in any reasonable manner, but not in any way that suggests the 79 | licensor endorses you or your use. 80 | 81 | **No additional restrictions**---You may not apply legal terms or 82 | technological measures that legally restrict others from doing 83 | anything the license permits. With the understanding that: 84 | 85 | Notices: 86 | 87 | * You do not have to comply with the license for elements of the 88 | material in the public domain or where your use is permitted by an 89 | applicable exception or limitation. 90 | * No warranties are given. The license may not give you all of the 91 | permissions necessary for your intended use. For example, other 92 | rights such as publicity, privacy, or moral rights may limit how you 93 | use the material. 94 | 95 | ### Software 96 | 97 | Except where otherwise noted, the example programs and other software 98 | provided by Software Carpentry and Data Carpentry are made available under the 99 | [OSI][osi]-approved 100 | [MIT license][mit-license]. 101 | 102 | Permission is hereby granted, free of charge, to any person obtaining 103 | a copy of this software and associated documentation files (the 104 | "Software"), to deal in the Software without restriction, including 105 | without limitation the rights to use, copy, modify, merge, publish, 106 | distribute, sublicense, and/or sell copies of the Software, and to 107 | permit persons to whom the Software is furnished to do so, subject to 108 | the following conditions: 109 | 110 | The above copyright notice and this permission notice shall be 111 | included in all copies or substantial portions of the Software. 112 | 113 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 114 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 115 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 116 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 117 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 118 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 119 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 120 | 121 | ### Trademark 122 | 123 | "Software Carpentry" and "Data Carpentry" and their respective logos 124 | are registered trademarks of [Community Initiatives][CI]. 125 | 126 | [cc-by-human]: https://creativecommons.org/licenses/by/4.0/ 127 | [cc-by-legal]: https://creativecommons.org/licenses/by/4.0/legalcode 128 | [mit-license]: https://opensource.org/licenses/mit-license.html 129 | [ci]: https://communityinitiatives.org/ 130 | [osi]: https://opensource.org 131 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | ## ======================================== 2 | ## Commands for both workshop and lesson websites. 3 | 4 | # Settings 5 | MAKEFILES=Makefile $(wildcard *.mk) 6 | JEKYLL=bundle config --local set path .vendor/bundle && bundle install && bundle update && bundle exec jekyll 7 | PARSER=bin/markdown_ast.rb 8 | DST=_site 9 | 10 | # Check Python 3 is installed and determine if it's called via python3 or python 11 | # (https://stackoverflow.com/a/4933395) 12 | PYTHON3_EXE := $(shell which python3 2>/dev/null) 13 | ifneq (, $(PYTHON3_EXE)) 14 | ifeq (,$(findstring Microsoft/WindowsApps/python3,$(subst \,/,$(PYTHON3_EXE)))) 15 | PYTHON := python3 16 | endif 17 | endif 18 | 19 | ifeq (,$(PYTHON)) 20 | PYTHON_EXE := $(shell which python 2>/dev/null) 21 | ifneq (, $(PYTHON_EXE)) 22 | PYTHON_VERSION_FULL := $(wordlist 2,4,$(subst ., ,$(shell python --version 2>&1))) 23 | PYTHON_VERSION_MAJOR := $(word 1,${PYTHON_VERSION_FULL}) 24 | ifneq (3, ${PYTHON_VERSION_MAJOR}) 25 | $(error "Your system does not appear to have Python 3 installed.") 26 | endif 27 | PYTHON := python 28 | else 29 | $(error "Your system does not appear to have any Python installed.") 30 | endif 31 | endif 32 | 33 | 34 | # Controls 35 | .PHONY : commands clean files 36 | 37 | # Default target 38 | .DEFAULT_GOAL := commands 39 | 40 | ## I. Commands for both workshop and lesson websites 41 | ## ================================================= 42 | 43 | ## * serve : render website and run a local server 44 | serve : lesson-md 45 | ${JEKYLL} serve 46 | 47 | ## * site : build website but do not run a server 48 | site : lesson-md 49 | ${JEKYLL} build 50 | 51 | ## * docker-serve : use Docker to serve the site 52 | docker-serve : 53 | docker pull carpentries/lesson-docker:latest 54 | docker run --rm -it \ 55 | -v $${PWD}:/home/rstudio \ 56 | -p 4000:4000 \ 57 | -p 8787:8787 \ 58 | -e USERID=$$(id -u) \ 59 | -e GROUPID=$$(id -g) \ 60 | carpentries/lesson-docker:latest 61 | 62 | ## * repo-check : check repository settings 63 | repo-check : 64 | @${PYTHON} bin/repo_check.py -s . 65 | 66 | ## * clean : clean up junk files 67 | clean : 68 | @rm -rf ${DST} 69 | @rm -rf .sass-cache 70 | @rm -rf bin/__pycache__ 71 | @find . -name .DS_Store -exec rm {} \; 72 | @find . -name '*~' -exec rm {} \; 73 | @find . -name '*.pyc' -exec rm {} \; 74 | 75 | ## * clean-rmd : clean intermediate R files (that need to be committed to the repo) 76 | clean-rmd : 77 | @rm -rf ${RMD_DST} 78 | @rm -rf fig/rmd-* 79 | 80 | 81 | ## 82 | ## II. Commands specific to workshop websites 83 | ## ================================================= 84 | 85 | .PHONY : workshop-check 86 | 87 | ## * workshop-check : check workshop homepage 88 | workshop-check : 89 | @${PYTHON} bin/workshop_check.py . 90 | 91 | 92 | ## 93 | ## III. Commands specific to lesson websites 94 | ## ================================================= 95 | 96 | .PHONY : lesson-check lesson-md lesson-files lesson-fixme install-rmd-deps 97 | 98 | # RMarkdown files 99 | RMD_SRC = $(wildcard _episodes_rmd/??-*.Rmd) 100 | RMD_DST = $(patsubst _episodes_rmd/%.Rmd,_episodes/%.md,$(RMD_SRC)) 101 | 102 | # Lesson source files in the order they appear in the navigation menu. 103 | MARKDOWN_SRC = \ 104 | index.md \ 105 | CODE_OF_CONDUCT.md \ 106 | setup.md \ 107 | $(sort $(wildcard _episodes/*.md)) \ 108 | reference.md \ 109 | $(sort $(wildcard _extras/*.md)) \ 110 | LICENSE.md 111 | 112 | # Generated lesson files in the order they appear in the navigation menu. 113 | HTML_DST = \ 114 | ${DST}/index.html \ 115 | ${DST}/conduct/index.html \ 116 | ${DST}/setup/index.html \ 117 | $(patsubst _episodes/%.md,${DST}/%/index.html,$(sort $(wildcard _episodes/*.md))) \ 118 | ${DST}/reference/index.html \ 119 | $(patsubst _extras/%.md,${DST}/%/index.html,$(sort $(wildcard _extras/*.md))) \ 120 | ${DST}/license/index.html 121 | 122 | ## * install-rmd-deps : Install R packages dependencies to build the RMarkdown lesson 123 | install-rmd-deps: 124 | @${SHELL} bin/install_r_deps.sh 125 | 126 | ## * lesson-md : convert Rmarkdown files to markdown 127 | lesson-md : ${RMD_DST} 128 | 129 | _episodes/%.md: _episodes_rmd/%.Rmd install-rmd-deps 130 | @mkdir -p _episodes 131 | @bin/knit_lessons.sh $< $@ 132 | 133 | ## * lesson-check : validate lesson Markdown 134 | lesson-check : lesson-fixme 135 | @${PYTHON} bin/lesson_check.py -s . -p ${PARSER} -r _includes/links.md 136 | 137 | ## * lesson-check-all : validate lesson Markdown, checking line lengths and trailing whitespace 138 | lesson-check-all : 139 | @${PYTHON} bin/lesson_check.py -s . -p ${PARSER} -r _includes/links.md -l -w --permissive 140 | 141 | ## * unittest : run unit tests on checking tools 142 | unittest : 143 | @${PYTHON} bin/test_lesson_check.py 144 | 145 | ## * lesson-files : show expected names of generated files for debugging 146 | lesson-files : 147 | @echo 'RMD_SRC:' ${RMD_SRC} 148 | @echo 'RMD_DST:' ${RMD_DST} 149 | @echo 'MARKDOWN_SRC:' ${MARKDOWN_SRC} 150 | @echo 'HTML_DST:' ${HTML_DST} 151 | 152 | ## * lesson-fixme : show FIXME markers embedded in source files 153 | lesson-fixme : 154 | @grep --fixed-strings --word-regexp --line-number --no-messages FIXME ${MARKDOWN_SRC} || true 155 | 156 | ## 157 | ## IV. Auxililary (plumbing) commands 158 | ## ================================================= 159 | 160 | ## * commands : show all commands. 161 | commands : 162 | @sed -n -e '/^##/s|^##[[:space:]]*||p' $(MAKEFILE_LIST) 163 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![HSF Training Center][training-center-badge]][hsf-training-center] 2 | [![Upcoming Events][schools-badge]][schools] 3 | [![Twitter Follow][twitter-badge]][twitter] 4 | 5 | 6 | 7 | 8 | [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/hsf-training/hsf-training-ml-webpage/main.svg)](https://results.pre-commit.ci/latest/github/hsf-training/hsf-training-ml-webpage/main) 9 | [![pages-build-deployment](https://github.com/hsf-training/hsf-training-ml-webpage/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/hsf-training/hsf-training-ml-webpage/actions/workflows/pages/pages-build-deployment) 10 | 11 | # Machine Learning for Particle Physics 12 | 13 | > **Note** 14 | > Click [here](https://hsf-training.github.io/hsf-training-ml-webpage/) for the training website! 15 | 16 | This tutorial explores Machine Learning using scikit-learn and PyTorch for applications in high energy physics. 17 | 18 | Extended from a [version developed by Luke Polson for the 2020 USATLAS Computing Bootcamp](https://lukepolson.github.io/HEP_ML_Lessons/). 19 | 20 | ## 📅 Past events and videos 21 | 22 | * 🎥 [Fixme Sample event Dec 1 - 13, 2022](indico.cern.ch/) 23 | 24 | Emoji key: 🎥 (full video recordings availabile), ⛏️ (hackathon) 25 | 26 | ## 🤗 Contributing 27 | 28 | 29 | 30 | We welcome all contributions to improve the lesson! Maintainers will do their best to help you if you have any 31 | questions, concerns, or experience any difficulties along the way. 32 | 33 | If you make non-trivial changes (i.e., more than fixing a simple typo), you are eligible to be added to the [HSF Training Community page][hsf-training-community], 34 | as well as to the list of contributors [below](#contributors-). 35 | 36 | We'd like to ask you to familiarize yourself with our [Contribution Guide](CONTRIBUTING.md) and have a look at 37 | the [more detailed guidelines][lesson-example] on proper formatting, ways to render the lesson locally, and even 38 | how to write new episodes. 39 | 40 | Quick summary of how to get a local preview: Install [jekyll][jekyll] and then run 41 | 42 | ``` 43 | bundle install 44 | bundle update 45 | bundle exec jekyll serve 46 | ``` 47 | 48 | Unless we change framework versions, only the last command needs to be typed after the first time. 49 | 50 | Before committing anything, we also ask you to install the [pre-commit][pre-commit] hooks of this repository: 51 | 52 | ```bash 53 | pip3 install pre-commit 54 | pre-commit install 55 | ``` 56 | 57 | Please see the current list of [issues][issues] for ideas for contributing to this 58 | repository. For making your contribution, we use the GitHub flow, which is 59 | nicely explained in the chapter [Contributing to a Project][progit] in Pro Git 60 | by Scott Chacon. 61 | Look for the tag [![good_first_issue]][gfi-badge], which marks particularly simple issues to get you started. 62 | 63 | 64 | 65 | ## Authors 66 | * Meirin Oan Evans 67 | 68 | ## 💖 Authors 69 | 70 | 71 | 72 | Thanks goes to these wonderful people ([emoji key][allcontrib-emoji-key]) who contributed to 73 | the content of the lesson: 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | Even more people contributed to the framework, but they are too many to list! 85 | Instead, all regular contributors are listed on our [HSF Training Community page][hsf-training-community]. 86 | 87 | 88 | [lesson-example]: https://carpentries.github.io/lesson-example 89 | [pre-commit]: https://pre-commit.com/ 90 | [hsf-training-community]: https://hepsoftwarefoundation.org/training/community 91 | [hsf-training-center]: https://hepsoftwarefoundation.org/training/curriculum.html 92 | [training-center-badge]: https://img.shields.io/badge/HSF%20Training%20Center-browse-ff69b4 93 | [schools]: https://hepsoftwarefoundation.org/Schools/events.html 94 | [issues]: https://github.com/hsf-training/hsf-training-ml-webpage/issues 95 | [progit]: http://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project 96 | [jekyll]: https://jekyllrb.com/ 97 | [allcontrib-emoji-key]: https://allcontributors.org/docs/en/emoji-key 98 | [gfi-badge]: https://img.shields.io/badge/-good%20first%20issue-gold.svg 99 | [schools-badge]: https://img.shields.io/badge/upcoming%20events-browse-ff69b4 100 | [twitter-badge]: https://img.shields.io/twitter/follow/hsftraining?style=social 101 | [twitter]: https://twitter.com/hsftraining 102 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------ 2 | # Values for this lesson. 3 | #------------------------------------------------------------ 4 | 5 | # Which carpentry is this ("swc", "dc", "lc", or "cp")? 6 | # swc: Software Carpentry 7 | # dc: Data Carpentry 8 | # lc: Library Carpentry 9 | # cp: Carpentries (to use for instructor traning for instance) 10 | carpentry: "hsf" 11 | 12 | # Overall title for pages. 13 | title: "Introduction to Machine Learning" 14 | 15 | # Life cycle stage of the lesson 16 | # possible values: "pre-alpha", "alpha", "beta", "stable" 17 | life_cycle: "stable" 18 | 19 | #------------------------------------------------------------ 20 | # Generic settings (should not need to change). 21 | #------------------------------------------------------------ 22 | 23 | # What kind of thing is this ("workshop" or "lesson")? 24 | kind: "lesson" 25 | 26 | # Magic to make URLs resolve both locally and on GitHub. 27 | # See https://help.github.com/articles/repository-metadata-on-github-pages/. 28 | # Please don't change it: / is correct. 29 | repository: / 30 | 31 | # Email address, no mailto: 32 | email: "hsf-training-wg@googlegroups.com" 33 | 34 | # Sites. 35 | amy_site: "https://amy.carpentries.org/workshops" 36 | carpentries_github: "https://github.com/carpentries" 37 | carpentries_pages: "https://carpentries.github.io" 38 | carpentries_site: "https://carpentries.org/" 39 | dc_site: "https://datacarpentry.org" 40 | example_repo: "https://github.com/carpentries/lesson-example" 41 | example_site: "https://carpentries.github.io/lesson-example" 42 | lc_site: "https://librarycarpentry.org/" 43 | swc_github: "https://github.com/swcarpentry" 44 | swc_pages: "https://swcarpentry.github.io" 45 | swc_site: "https://software-carpentry.org" 46 | template_repo: "https://github.com/carpentries/styles" 47 | training_site: "https://carpentries.github.io/instructor-training" 48 | workshop_repo: "https://github.com/carpentries/workshop-template" 49 | workshop_site: "https://carpentries.github.io/workshop-template" 50 | cc_by_human: "https://creativecommons.org/licenses/by/4.0/" 51 | hsf_site: "https://hepsoftwarefoundation.org" 52 | 53 | # Surveys. 54 | pre_survey: "https://carpentries.typeform.com/to/wi32rS?slug=" 55 | post_survey: "https://carpentries.typeform.com/to/UgVdRQ?slug=" 56 | instructor_pre_survey: "https://www.surveymonkey.com/r/instructor_training_pre_survey?workshop_id=" 57 | instructor_post_survey: "https://www.surveymonkey.com/r/instructor_training_post_survey?workshop_id=" 58 | 59 | 60 | # Start time in minutes (0 to be clock-independent, 540 to show a start at 09:00 am). 61 | start_time: 0 62 | 63 | # Specify that things in the episodes collection should be output. 64 | collections: 65 | episodes: 66 | output: true 67 | permalink: /:path/index.html 68 | extras: 69 | output: true 70 | permalink: /:path/index.html 71 | 72 | # Set the default layout for things in the episodes collection. 73 | defaults: 74 | - values: 75 | root: . 76 | layout: page 77 | - scope: 78 | path: "" 79 | type: episodes 80 | values: 81 | root: .. 82 | layout: episode 83 | - scope: 84 | path: "" 85 | type: extras 86 | values: 87 | root: .. 88 | layout: page 89 | 90 | # Files and directories that are not to be copied. 91 | exclude: 92 | - Makefile 93 | - bin/ 94 | - .Rproj.user/ 95 | - .vendor/ 96 | - .docker-vendor/ 97 | 98 | # Turn on built-in syntax highlighting. 99 | highlighter: rouge 100 | -------------------------------------------------------------------------------- /_episodes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/_episodes/.gitkeep -------------------------------------------------------------------------------- /_episodes/03-nn.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Neural Networks" 3 | teaching: 10 4 | exercises: 10 5 | questions: 6 | - "What is a neural network?" 7 | - "How can I visualize a neural network?" 8 | objectives: 9 | - "Examine the structure of a fully connected sequential neural network." 10 | - "Look at the TensorFlow neural network Playground to visualize how a neural network works." 11 | keypoints: 12 | - "Neural networks consist of an input layer, hidden layers and an output layer." 13 | - "TensorFlow Playground is a cool place to visualize neural networks!" 14 | --- 15 | 16 | 17 | 18 | # Neural Network Theory Introduction 19 | Here we will introduce the mathematics of a neural network. You are likely familiar with the linear transform $$y=Ax+b$$ where $$A$$ is a matrix (not necessarily square) and $$y$$ and $$b$$ have the same dimensions and $$x$$ may have a different dimension. For example, if $$x$$ has dimension $$n$$ and $$y$$ and $$b$$ have dimensions $$m$$ then the matrix $$A$$ has dimension $$m$$ by $$n$$. 20 | 21 | Now suppose we have some vector $$x_i$$ listing some features (height, weight, body fat) and $$y_i$$ contains blood pressure and resting heart rate. A simple linear model to predict the label features given the input features is then $$y=Ax+b$$ or $$f(x)=Ax+b$$. But we can go further. Suppose we also apply a *simple* but *non-linear* function $$g$$ to the output so that $$f(x) = g(Ax+b)$$. This function $$g$$ does not change the dimension of $$Ax+b$$ as it is an *element-wise* operation. This function $$g$$ is known as an **activation function**. The activation function defines the output given an input or set of inputs. The purpose of the activation function is to introduce non-linearity into the output [(Wikipedia)](https://en.wikipedia.org/wiki/Activation_function). Non-linearity allows us to describe patterns in data that are more complicated than a straight line. A few activation functions $$g$$ are shown below. 22 | 23 | ![Quadratic model and data points](../plots/act_functions.png){:width="80%"} 24 | 25 | (No general picture is shown for the Maxout function since it depends on the number of *w* and *b* used) 26 | 27 | Each of these 6 activation functions has different advantages and disadvantages. 28 | 29 | Now we can perform a sequence of operations to construct a highly non-linear function. For example; we can construct the following model: 30 | 31 | $$f(x) = g_2(A_2(g_1(A_1x+b_1))+b_2) $$ 32 | 33 | We first perform a linear transformation, then apply activation function $$g_1$$, then perform another linear transformation, then apply activation function $$g_2$$. The input $$x$$ and the output $$f(x)$$ are not necessarily the same dimension. 34 | 35 | For example, suppose we have an image (which we flatten into a 1d array). This array might be 40000 elements long. If the matrix $$A_1$$ has 2000 rows, we can perform one iteration of $$g_1(A_1x+b_1)$$ to reduce this to a size of 2000. We can apply this over and over again until eventually only a single value is output. This is the foundation of a **fully connected neural network**. Note we can also increase the dimensions throughout the process, as seen in the image below. We start with a vector $$x$$ of size 3, perform the transformation $$g_1(A_1x+b_1)$$ so the vector is size 4, then perform one final transformation so the vector is size 2. 36 | 37 | ![Quadratic model and data points](../plots/nn.PNG){:width="80%"} 38 | 39 | * The vector $$x$$ is referred to as the **input layer** of the network 40 | * Intermediate quantities (such as $$g_1(A_1x+b_1)$$) are referred to as **hidden layers**. Each element of the vector $$g_1(A_1x+b_1)$$ is referred to as a **neuron**. 41 | * The model output $$f(x)$$ is referred to as the **output layer**. Note that *activation functions are generally not used in the output layer*. 42 | 43 | Neural networks require a careful training procedure. Suppose we are performing a regression task (for example we are given temperature, wind speed, wind direction and pressure, and asked to predict relative humidity). The final output of the neural network will be a single value. During training, we compare the outputs of the neural network $$f(x_i)$$ to the true values of the data $$y_i$$ using some loss function $$L$$. We need to tune the parameters of the model so that $$L$$ is as small as possible. What are the parameters of the model in this case? The parameters are the elements of the matrices $$A_1, A_2, ...$$ and the vectors $$b_1, b_2, ...$$. We also need to adjust them in an appropriate fashion so we are moving closer to the minimum of $$L$$. For this we need to compute $$\nabla L$$. Using a clever technique known as back-propagation, we can determine exactly how much each parameter (i.e. each entry in matrix $$A_i$$) contributes to $$\nabla L$$. Then we slightly adjust each parameter such that $$\vec{L} \to \vec{L}-\alpha \nabla{L}$$ where, as before, $$\alpha$$ is the learning rate. Through this iterative procedure, we slowly minimize the loss function. 44 | 45 | 46 | # TensorFlow Playground 47 | 48 | See [here](https://playground.tensorflow.org/) for an interactive example of a neural network structure. Why not play around for about 10 minutes! 49 | 50 | Your feedback is very welcome! Most helpful for us is if you "[Improve this page on GitHub](https://github.com/hsf-training/hsf-training-ml-webpage/edit/gh-pages/_episodes/03-nn.md)". If you prefer anonymous feedback, please [fill this form](https://forms.gle/XBeULpKXVHF8CKC17). 51 | -------------------------------------------------------------------------------- /_episodes/04-Comfort-Break.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Comfort break!" 3 | teaching: 0 4 | exercises: 15 5 | questions: 6 | - "Get up, stretch out, take a short break." 7 | objectives: 8 | - "Refresh your mind." 9 | keypoints: 10 | - You'll be back. 11 | - They're the jedi of the sea. 12 | --- 13 | 14 |
15 | 16 |
17 | 18 | {% include links.md %} 19 | -------------------------------------------------------------------------------- /_episodes/05-Resources.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Resources" 3 | teaching: 10 4 | exercises: 0 5 | questions: 6 | - "Where should I go if I want to get better at Python?" 7 | - "What are the machine learning libraries in Python?" 8 | objectives: 9 | - "Provide links to tutorials and textbooks that will help you get better at Python." 10 | - "Provide links to machine learning library documentation." 11 | keypoints: 12 | - "NumPy and pandas are the main libraries for scientific computing." 13 | - "scikit-learn and PyTorch are two good options for machine learning in Python." 14 | --- 15 | 16 | 17 | 18 | # Proficiency in Python 19 | 20 | If you are unfamiliar with Python, the following tutorials will be useful: 21 | 22 | * [Python novice inflammation](https://swcarpentry.github.io/python-novice-inflammation/) 23 | * [Python novice gapfinder](http://swcarpentry.github.io/python-novice-gapminder/) 24 | 25 | For non-trivial machine learning tasks that occur in research, one needs to be proficient in the programming libraries discussed in the tutorial here. There are two main python libraries for scientific computing: 26 | 27 | 1. **NumPy**: the go-to numerical library in Python. See the [documentation](https://numpy.org/). NumPy's main purpose is the manipulation of multi-dimensional arrays: this includes both 28 | 29 | * *slicing*: taking "chunks" out of arrays. Slicing in Python means taking elements from one given index to another given index. For 1 dimensional arrays this reduces to selecting intervals, but these operations can become quite advanced for multidimesional arrays. 30 | * *functional operations*: applying a function to an entire array. This code is highly optimized: there is often a myth that Python is slower than languages like C++; while this may be true for things like for-loops, it is not true if you use NumPy properly. 31 | 32 | 2. **pandas**: pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of the Python programming language. See the [documentation](https://pandas.pydata.org/). The most important datatype in the pandas library is the *DataFrame*: a "spreadsheet-type object" with row and column names. It is preferred to use pandas DataFrames rather than NumPy arrays for managing data sets. 33 | 34 | If you are unfamiliar with these packages, I would recommend reading the introduction to the documentation pages for [NumPy slicing](https://numpy.org/doc/stable/reference/arrays.indexing.html), [NumPy operations](https://scipy-lectures.org/intro/numpy/operations.html) and [pandas DataFrames](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html) or sitting down with [this textbook](https://www.amazon.ca/Python-Data-Analysis-Wrangling-IPython-ebook/dp/B075X4LT6K/ref=sr_1_1?crid=WLIHOCVH891S&dchild=1&keywords=python+for+data+analysis%2C+2nd+edition&qid=1593460237&sprefix=python+for+data+%2Caps%2C196&sr=8-1) if you have it available and reading/coding along with chapters 4 and 5. In a few hours, you should have a good idea of how these packages work. 35 | 36 | # Machine Learning Libraries in Python 37 | 38 | There are many machine libraries in Python, but the two discussed in this tutorial are scikit-learn and PyTorch. 39 | 40 | 1. **scikit-learn**: features various classification, regression and clustering algorithms and is designed to interoperate with the Python numerical and scientific libraries NumPy and SciPy. See [the documentation](https://scikit-learn.org/stable/). 41 | 2. **PyTorch**: PyTorch is an end-to-end open-source platform for machine learning. It is used for building and deploying machine learning models. See [the documentation](https://www.tensorflow.org/). 42 | 43 | > ## What about GPUs? 44 | > **scikit-learn** doesn't have GPU support, therefore should only be used for training simple neural networks. 45 | > 46 | > **PyTorch** does have GPU support, therefore can be used to train complicated neural network models that require a lot of GPU power. 47 | > 48 | > Take a look at our tutorial ["Machine Learning on GPUs"](https://hsf-training.github.io/hsf-training-ml-gpu-webpage/) if you're interested. 49 | {: .callout} 50 | 51 | Note that the four Python programming packages discussed so far are interoperable: in particular, datatypes from NumPy and pandas are often used in packages like scikit-learn and PyTorch. 52 | 53 | Your feedback is very welcome! Most helpful for us is if you "[Improve this page on GitHub](https://github.com/hsf-training/hsf-training-ml-webpage/edit/gh-pages/_episodes/05-Resources.md)". If you prefer anonymous feedback, please [fill this form](https://forms.gle/XBeULpKXVHF8CKC17). 54 | -------------------------------------------------------------------------------- /_episodes/08-Comfort-Break.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Comfort break" 3 | teaching: 0 4 | exercises: 15 5 | questions: 6 | - "Water? Juice? Coffee? Tea?" 7 | objectives: 8 | - "Refresh your mental faculties with comfort and conversation" 9 | keypoints: 10 | - "Breaks are helpful in the service of learning" 11 | --- 12 | 13 |
14 | 15 |
16 | 17 | {% include links.md %} 18 | -------------------------------------------------------------------------------- /_episodes/10-Overfitting_Check.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Overfitting Check" 3 | teaching: 5 4 | exercises: 5 5 | questions: 6 | - "How do I check whether my model has overfitted?" 7 | objectives: 8 | - "Determine whether your models are overfitted." 9 | keypoints: 10 | - "It's a good idea to check your models for overfitting." 11 | --- 12 | 13 | 14 | 15 | # Is there any overfitting? 16 | 17 | In this section we will check whether there has been any overfitting during the model training phase. As discussed in the [lesson on Mathematical Foundations](https://hsf-training.github.io/hsf-training-ml-webpage/02-mltechnical/index.html), overfitting can be an unwanted fly in the ointment, so it should be avoided! 18 | 19 | Comparing a machine learning model's output distribution for the training and testing set is a popular way in High Energy Physics to check for overfitting. The compare_train_test() method will plot the shape of the machine learning model's decision function for each class, as well as overlaying it with the decision function in the training set. 20 | 21 | There are techniques to prevent overfitting. 22 | 23 | The code to plot the overfitting check is a bit long, so once again you can see the function definition [-->here<--](https://www.kaggle.com/meirinevans/my-functions/edit) 24 | 25 | ~~~ 26 | from my_functions import compare_train_test 27 | 28 | compare_train_test( 29 | RF_clf, X_train_scaled, y_train, X_test_scaled, y_test, "Random Forest output" 30 | ) 31 | ~~~ 32 | {: .language-python} 33 | 34 | If overfitting were present, the dots (test set) would be *very far* from the bars (training set). Look back to the figure in the Overfitting section of the [Mathematical Foundations lesson](https://hsf-training.github.io/hsf-training-ml-webpage/02-mltechnical/index.html) for a brief explanation. Overfitting might look something like this 35 | 36 | ![Overfitted](../plots/overfitted.png){:width="40%"} 37 | 38 | As discussed in the [Mathematical Foundations lesson](https://hsf-training.github.io/hsf-training-ml-webpage/02-mltechnical/index.html), there are techniques to prevent overfitting. For instance, you could try reduce the number of parameters in your model, e.g. for a neural network reduce the number of neurons. 39 | 40 | Our orange signal dots (test set) nicely overlap with our orange signal histogram bars (training set). The same goes for the blue background. This overlap indicates that no overtaining is present. Happy days! 41 | 42 | > ## Challenge 43 | > Make the same overfitting check for your neural network and decide whether any overfitting is present. 44 | > 45 | > > ## Solution 46 | > > ~~~ 47 | > > compare_train_test(NN_clf, X_train_scaled, y_train, X_test_scaled, y_test, 'Neural Network output') 48 | > > ~~~ 49 | > > {: .language-python} 50 | > {: .solution} 51 | {: .challenge} 52 | 53 | Now that we've checked for overfitting we can go onto comparing our machine learning models! 54 | 55 | Your feedback is very welcome! Most helpful for us is if you "[Improve this page on GitHub](https://github.com/hsf-training/hsf-training-ml-webpage/edit/gh-pages/_episodes/10-Overfitting_Check.md)". If you prefer anonymous feedback, please [fill this form](https://forms.gle/XBeULpKXVHF8CKC17). 56 | -------------------------------------------------------------------------------- /_episodes_rmd/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/_episodes_rmd/.gitkeep -------------------------------------------------------------------------------- /_episodes_rmd/01-introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Introduction" 3 | teaching: 10 4 | exercises: 0 5 | questions: 6 | - "What is machine learning?" 7 | - "What role does machine learning have in particle physics?" 8 | - "Where should I start if I want to become fluent using machine learning techniques?" 9 | objectives: 10 | - "Discuss the possibilities and limitations of machine learning." 11 | - "Classification" 12 | - "Regression" 13 | keypoints: 14 | - "Machine learning ..." 15 | - "can be used for ..." 16 | - "If you want to become proficient in machine learning, sit down with the textbook ... and spend 30 mins every day coding through the book" 17 | --- 18 | 19 | # What is Machine Learning? 20 | 21 | General definition 22 | 23 |
    24 | [Machine Learning is the] field of study that gives computers the ability to learn without being explicitly programmed 25 |
      26 | -Arthur Samuel, 1959 27 |
    28 |
29 | 30 | In a **traditional approach** to solving problems, one would study a problem, write rules (i.e. laws of physics) to solve that problem, analyze errors, then modify the rules. A **machine learning approach** automates this process: *a machine learning model modifies its rules based on the errors it measures*. 31 | 32 |
    33 | For example, consider `$z = x + y_i$` fitting some data \\( (x_i, y_i) \\) to a quadratic curve $y=ax^2+bx+c$. In this case, one might define the error to be the difference of squares: namely $`\sum_i (y_i-(ax_i^2+bx_i+c))`$. This error function depends on 3 input parameters $a$, $`b`$ and $`c`$. Once can tweak these parameters to **minimize the loss function**. 34 |
35 | {% include links.md %} 36 | -------------------------------------------------------------------------------- /_episodes_rmd/data/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/_episodes_rmd/data/.gitkeep -------------------------------------------------------------------------------- /_extras/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/_extras/.gitkeep -------------------------------------------------------------------------------- /_extras/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | --- 4 | {% include carpentries.html %} 5 | {% include links.md %} 6 | -------------------------------------------------------------------------------- /_extras/discuss.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Discussion 3 | --- 4 | FIXME 5 | 6 | {% include links.md %} 7 | -------------------------------------------------------------------------------- /_extras/figures.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Figures 3 | --- 4 | 5 | {% include base_path.html %} 6 | {% include manual_episode_order.html %} 7 | 8 | 67 | 68 | {% comment %} Create anchor for each one of the episodes. {% endcomment %} 69 | 70 | {% for lesson_episode in lesson_episodes %} 71 | {% if site.episode_order %} 72 | {% assign episode = site.episodes | where: "slug", lesson_episode | first %} 73 | {% else %} 74 | {% assign episode = lesson_episode %} 75 | {% endif %} 76 |
77 | {% endfor %} 78 | 79 | {% include links.md %} 80 | -------------------------------------------------------------------------------- /_extras/guide.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Instructor Notes" 3 | --- 4 | FIXME 5 | 6 | {% include links.md %} 7 | -------------------------------------------------------------------------------- /_includes/aio-script.md: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | As a maintainer, you don't need to edit this file. 3 | If you notice that something doesn't work, please 4 | open an issue: https://github.com/hsf-training/hsf-styles/issues/new 5 | {% endcomment %} 6 | 7 | {% include manual_episode_order.html %} 8 | 9 | {% for lesson_episode in lesson_episodes %} 10 | 11 | {% if site.episode_order %} 12 | {% assign e = site.episodes | where: "slug", lesson_episode | first %} 13 | {% else %} 14 | {% assign e = lesson_episode %} 15 | {% endif %} 16 | 17 |

{{ e.title }}

18 | 19 | {% include episode_overview.html teaching_time=e.teaching exercise_time=e.exercises episode_questions=e.questions episode_objectives=e.objectives %} 20 | 21 | {{ e.content }} 22 | 23 | {% include episode_keypoints.html episode_keypoints=e.keypoints %} 24 |
25 | {% endfor %} 26 | -------------------------------------------------------------------------------- /_includes/all_keypoints.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Display key points of all episodes for reference. 3 | {% endcomment %} 4 | 5 | {% include base_path.html %} 6 | {% include manual_episode_order.html %} 7 | 8 |

Key Points

9 | 10 | {% for lesson_episode in lesson_episodes %} 11 | {% if site.episode_order %} 12 | {% assign episode = site.episodes | where: "slug", lesson_episode | first %} 13 | {% else %} 14 | {% assign episode = lesson_episode %} 15 | {% endif %} 16 | {% unless episode.break %} 17 | 18 | 21 | 28 | 29 | {% endunless %} 30 | {% endfor %} 31 |
19 | {{ episode.title }} 20 | 22 |
    23 | {% for keypoint in episode.keypoints %} 24 |
  • {{ keypoint|markdownify }}
  • 25 | {% endfor %} 26 |
27 |
32 | -------------------------------------------------------------------------------- /_includes/base_path.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | This is adapted from: https://ricostacruz.com/til/relative-paths-in-jekyll 3 | 4 | `page.url` gives the URL of the current page with a leading /: 5 | 6 | - when the URL ends with the extension (e.g., /foo/bar.html) then we can get 7 | the depth by counting the number of / and remove - 1 8 | - when the URL ends with a / (e.g. /foo/bar/) then the number / gives the depth 9 | directly 10 | {% endcomment %} 11 | 12 | {% assign relative_root_path = '' %} 13 | 14 | {% assign last_char = page.url | slice: -1 %} 15 | 16 | {% if last_char == "/"} 17 | {% assign offset = 0 %} 18 | {% else %} 19 | {% assign offset = 1 %} 20 | {% endif %} 21 | 22 | {% assign depth = page.url | split: '/' | size | minus: offset %} 23 | {% if depth <= 1 %}{% assign relative_root_path = '.' %} 24 | {% elsif depth == 2 %}{% assign relative_root_path = '..' %} 25 | {% elsif depth == 3 %}{% assign relative_root_path = '../..' %} 26 | {% elsif depth == 4 %}{% assign relative_root_path = '../../..' %} 27 | {% endif %} 28 | -------------------------------------------------------------------------------- /_includes/carpentries.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | General description of Software, Data, and Library Carpentry. 3 | {% endcomment %} 4 | 5 | {% include base_path.html %} 6 | 7 |
8 |
9 | HEP Software Foundation logo 10 |
11 |
12 |

13 | HEP Software Foundation (HSF) facilitates cooperation and common efforts in 14 | High Energy Physics software and computing internationally. 15 |

16 |

17 | The objectives of the HSF as a community-wide organization are in sharing expertise; 18 | raising awareness of existing software and solutions; catalyzing new common projects; 19 | promoting commonality and collaboration in new developments to make the most of limited resources; 20 | aiding developers and users in creating, discovering, using and sustaining common software; 21 | and supporting career development for software and computing specialists. 22 |

23 |

24 | The HSF Training working group is developing a 25 | software training curriculum that serves 26 | HEP newcomers the software skills needed as they enter the field, and in parallel, instill best practices for writing 27 | software. The training material is developed using the framework built up by The Carpentries. 28 |

29 |
30 |
31 |
32 |
33 | The Carpentries logo 34 |
35 |
36 |

The Carpentries comprises 37 | Software Carpentry, Data Carpentry, and Library Carpentry communities of Instructors, Trainers, 38 | Maintainers, helpers, and supporters who share a mission to teach 39 | foundational coding and data science skills to researchers and people 40 | working in library- and information-related roles. In January, 41 | 2018, The Carpentries was formed by the merger of Software Carpentry and 42 | Data Carpentry. Library Carpentry became an official Carpentries Lesson Program in November 2018.

43 | 44 |

While individual lessons and workshops continue to be run under each 45 | lesson project, The Carpentries provide overall staffing and governance, as 46 | well as support for assessment, instructor training and mentoring. 47 | Memberships are joint, and the Carpentries project maintains a shared Code 48 | of Conduct. The Carpentries is a fiscally sponsored project of Community 49 | Initiatives, a registered 501(c)3 non-profit based in California, USA.

50 |
51 |
52 |
53 |
54 | Software Carpentry logo 55 |
56 |
57 |

Since 1998, Software Carpentry has 58 | been teaching researchers across all disciplines the foundational coding 59 | skills they need to get more done in less time and with less pain. Its 60 | volunteer instructors have run hundreds of events for thousands of learners 61 | around the world. Now that all research involves some degree of 62 | computational work, whether with big data, cloud computing, or simple task 63 | automation, these skills are needed more than ever.

64 |
65 |
66 |
67 |
68 |
69 | Data Carpentry logo 70 |
71 |
72 |

Data Carpentry develops and teaches 73 | workshops on the fundamental data skills needed to conduct research. Its 74 | target audience is researchers who have little to no prior computational 75 | experience, and its lessons are domain specific, building on learners' 76 | existing knowledge to enable them to quickly apply skills learned to their 77 | own research. Data Carpentry workshops take researchers through the entire 78 | data life cycle.

79 |
80 |
81 |
82 |
83 |
84 | Library Carpentry logo 85 |
86 |
87 |

Library Carpentry develops lessons and 88 | teaches workshops for and with people working in library- and 89 | information-related roles. Its goal is to create an on-ramp to empower this 90 | community to use software and data in their own work, as well as be 91 | advocates for and train others in efficient, effective and reproducible data 92 | and software practices.

93 |
94 |
95 | -------------------------------------------------------------------------------- /_includes/curriculum.html: -------------------------------------------------------------------------------- 1 |
2 |

The HSF Training Curriculum

3 |
4 | 5 | HSF Logo 6 | 7 |
8 |
9 | This training module is part of the 10 | Training Curriculum, a 11 | series of training modules that serves HEP newcomers the 12 | software skills needed as they enter the field, 13 | and in parallel, instill best practices for writing software. 14 |
15 |
16 | -------------------------------------------------------------------------------- /_includes/dc/intro.html: -------------------------------------------------------------------------------- 1 |

2 | Data Carpentry 3 | aims to help researchers get their work done 4 | in less time and with less pain 5 | by teaching them basic research computing skills. 6 | This hands-on workshop will cover basic concepts and tools, 7 | including program design, version control, data management, 8 | and task automation. 9 | Participants will be encouraged to help one another 10 | and to apply what they have learned to their own research problems. 11 |

12 |

13 | 14 | For more information on what we teach and why, 15 | please see our paper 16 | "Best Practices for Scientific Computing". 17 | 18 |

19 | -------------------------------------------------------------------------------- /_includes/dc/schedule.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Day 1

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
09:00 Automating tasks with the Unix shell
10:30 Coffee
12:00 Lunch break
13:00 Building programs with Python
14:30 Coffee
16:00 Wrap-up
12 |
13 |
14 |

Day 2

15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
09:00 Version control with Git
10:30 Coffee
12:00 Lunch break
13:00 Managing data with SQL
14:30 Coffee
16:00 Wrap-up
23 |
24 |
25 | -------------------------------------------------------------------------------- /_includes/dc/syllabus.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

The Unix Shell

4 |
    5 |
  • Files and directories
  • 6 |
  • History and tab completion
  • 7 |
  • Pipes and redirection
  • 8 |
  • Looping over files
  • 9 |
  • Creating and running shell scripts
  • 10 |
  • Finding things
  • 11 |
  • Reference...
  • 12 |
13 |
14 |
15 |

Programming in Python

16 |
    17 |
  • Using libraries
  • 18 |
  • Working with arrays
  • 19 |
  • Reading and plotting data
  • 20 |
  • Creating and using functions
  • 21 |
  • Loops and conditionals
  • 22 |
  • Defensive programming
  • 23 |
  • Using Python from the command line
  • 24 |
  • Reference...
  • 25 |
26 |
27 | 40 | 53 |
54 | 55 |
56 |
57 |

Version Control with Git

58 |
    59 |
  • Creating a repository
  • 60 |
  • Recording changes to files: add, commit, ...
  • 61 |
  • Viewing changes: status, diff, ...
  • 62 |
  • Ignoring files
  • 63 |
  • Working on the web: clone, pull, push, ...
  • 64 |
  • Resolving conflicts
  • 65 |
  • Open licenses
  • 66 |
  • Where to host work, and why
  • 67 |
  • Reference...
  • 68 |
69 |
70 | 86 |
87 |

Open Refine

88 |
    89 |
  • Introduction to OpenRefine
  • 90 |
  • Importing data
  • 91 |
  • Basic functions
  • 92 |
  • Advanced Functions
  • 93 |
  • Reference...
  • 94 |
95 |
96 |
97 | -------------------------------------------------------------------------------- /_includes/dc/who.html: -------------------------------------------------------------------------------- 1 |

2 | Who: 3 | The course is aimed at graduate students and other researchers. 4 | 5 | You don't need to have any previous knowledge of the tools 6 | that will be presented at the workshop. 7 | 8 |

9 | -------------------------------------------------------------------------------- /_includes/episode_break.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Display a break's timings in a box similar to a learning episode's. 3 | {% endcomment %} 4 |
5 |

Overview

6 | 7 |
8 |
9 | Break: {{ page.break }} min 10 |
11 |
12 |
13 |
14 | 15 |
16 | -------------------------------------------------------------------------------- /_includes/episode_keypoints.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Display key points for an episode. 3 | {% endcomment %} 4 | 5 | {% if page.keypoints == nil %} 6 | {% assign episode_keypoints = include.episode_keypoints %} 7 | {% else %} 8 | {% assign episode_keypoints = page.keypoints %} 9 | {% endif %} 10 | 11 |
12 |

Key Points

13 |
    14 | {% for keypoint in episode_keypoints %} 15 |
  • {{ keypoint|markdownify }}
  • 16 | {% endfor %} 17 |
18 |
19 | -------------------------------------------------------------------------------- /_includes/episode_navbar.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | For some reason, the relative_root_path seems out of scope in this file, so we 3 | need to re-assign it here 4 | {% endcomment %} 5 | 6 | {% include base_path.html %} 7 | 8 | {% comment %} 9 | Navigation bar for an episode. 10 | {% endcomment %} 11 | 12 | {% include manual_episode_order.html %} 13 | {% comment %} 14 | 'previous_episode' and 'next_episodes' are defined in 'manual_episode_order.html'. 15 | These replace 'page.previous' and 'page.next' objects, correspondingly. 16 | {% endcomment %} 17 | 18 |
19 |
20 |

21 | {% if previous_episode %} 22 | previous episode 23 | {% else %} 24 | lesson home 25 | {% endif %} 26 |

27 |
28 |
29 | {% if include.episode_navbar_title %} 30 |

{{ site.title }}

31 | {% endif %} 32 |
33 |
34 |

35 | {% if next_episode %} 36 | next episode 37 | {% else %} 38 | lesson home 39 | {% endif %} 40 |

41 |
42 |
43 | -------------------------------------------------------------------------------- /_includes/episode_overview.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Display episode's timings and learning objectives. 3 | 4 | Regarding the `if page.*** == nil` below: 5 | all-in-one page combines all episodes into one. 6 | It, therefore, does not define its own objectives, exercises, 7 | and questions, which 'normal' episodes define in the front matter. 8 | 9 | To display episodes' teaching and exercise times, as well as episode 10 | questions and objectives, we pass them as parameters to the Liquid's 11 | `include` statement when we generate the page: 12 | 13 | include episode_overview.html teaching_time=e.teaching ... 14 | 15 | Here we obtain the information we need either from the episode itself or 16 | from the parameters passed in. 17 | {% endcomment %} 18 | 19 | {% if page.teaching == nil %} 20 | {% assign teaching_time = include.teaching_time %} 21 | {% else %} 22 | {% assign teaching_time = page.teaching %} 23 | {% endif %} 24 | 25 | {% if page.exercises == nil %} 26 | {% assign exercise_time = include.exercise_time %} 27 | {% else %} 28 | {% assign exercise_time = page.exercises %} 29 | {% endif %} 30 | 31 | {% if page.questions == nil %} 32 | {% assign episode_questions = include.episode_questions %} 33 | {% else %} 34 | {% assign episode_questions = page.questions %} 35 | {% endif %} 36 | 37 | {% if page.objectives == nil %} 38 | {% assign episode_objectives = include.episode_objectives %} 39 | {% else %} 40 | {% assign episode_objectives = page.objectives %} 41 | {% endif %} 42 | 43 | 44 |
45 |

Overview

46 | 47 |
48 |
49 | Teaching: {{ teaching_time }} min 50 |
51 | Exercises: {{ exercise_time }} min 52 |
53 |
54 | Questions 55 |
    56 | {% for question in episode_questions %} 57 |
  • {{ question|markdownify }}
  • 58 | {% endfor %} 59 |
60 |
61 |
62 | 63 |
64 |
65 |
66 |
67 | Objectives 68 |
    69 | {% for objective in episode_objectives %} 70 |
  • {{ objective|markdownify }}
  • 71 | {% endfor %} 72 |
73 |
74 |
75 | 76 |
77 | -------------------------------------------------------------------------------- /_includes/episode_title.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |

{{ page.title }}

6 |
7 |
8 |
9 |
10 | -------------------------------------------------------------------------------- /_includes/favicons.html: -------------------------------------------------------------------------------- 1 | {% assign favicon_url = relative_root_path | append: '/assets/favicons/' | append: site.carpentry %} 2 | 3 | {% if site.carpentry == 'swc' %} 4 | {% assign carpentry = 'Software Carpentry' %} 5 | {% elsif site.carpentry == 'dc' %} 6 | {% assign carpentry = 'Data Carpentry' %} 7 | {% elsif site.carpentry == 'lc' %} 8 | {% assign carpentry = 'Library Carpentry' %} 9 | {% elsif site.carpentry == 'cp' %} 10 | {% assign carpentry = 'The Carpentries' %} 11 | {% elsif site.carpentry == 'hsf' %} 12 | {% assign carpentry = 'Hep Software Foundation' %} 13 | {% endif %} 14 | 15 | {% if site.carpentry == 'hsf' %} 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | {% else %} 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | {% endif %} 54 | -------------------------------------------------------------------------------- /_includes/gh_variables.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | When rendering websites locally, `site.github.url` doesn't get resolved properly 3 | unless a GitHub Personal Access Token is set up and available in the 4 | environment. This leads to warnings and errors when trying to serve the site 5 | locally. To work around this, we use the `jekyll.environment` variable which is 6 | set to `development` when rendering the site locally, and set to `production` on 7 | GitHub where `site.github.url` is defined. 8 | {% endcomment %} 9 | 10 | {% if jekyll.environment == "production" %} 11 | 12 | {% comment %} 13 | First, get the name of the repository 14 | {% endcomment %} 15 | {% assign repo_name = site.github.repository_name %} 16 | 17 | {% comment %} 18 | `site.github.public_repositories` contains comprehensive information for all public repositories for the organization. We use `where` to extract the part 19 | of the metadata that is relevant to the present repository. 20 | {% endcomment %} 21 | {% assign repo_info = site.github.public_repositories | where: "name", repo_name %} 22 | 23 | {% comment %} 24 | Now, we can extract the default branch for the repo 25 | {% endcomment %} 26 | {% assign default_branch = repo_info[0].default_branch %} 27 | 28 | {% comment %} 29 | Other variables requested by the template 30 | {% endcomment %} 31 | {% assign repo_url = site.github.repository_url %} 32 | {% assign search_domain_url = site.github.url %} 33 | {% assign project_title = site.github.project_title %} 34 | {% assign source_branch = site.github.source.branch %} 35 | 36 | {% elsif jekyll.environment == "development" %} 37 | 38 | {% assign repo_name = "" %} 39 | {% assign repo_url = "" %} 40 | {% assign default_branch = "" %} 41 | {% assign search_domain_url = "" %} 42 | {% assign project_title = "" %} 43 | {% assign source_branch = "" %} 44 | 45 | {% endif %} 46 | -------------------------------------------------------------------------------- /_includes/javascript.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | JavaScript used in lesson and workshop pages. 3 | {% endcomment %} 4 | 5 | 6 | 7 | 15 | -------------------------------------------------------------------------------- /_includes/lc/intro.html: -------------------------------------------------------------------------------- 1 |

2 | Library Carpentry 3 | is made by people working in library- and information-related roles to help you: 4 |

5 |
    6 |
  • automate repetitive, boring, error-prone tasks
  • 7 |
  • create, maintain and analyze sustainable and reusable data
  • 8 |
  • work effectively with IT and systems colleagues
  • 9 |
  • better understand the use of software in research
  • 10 |
  • and much more...
  • 11 |
12 |

13 | 14 | Library Carpentry introduces you to the fundamentals of computing 15 | and provides you with a platform for further self-directed learning. 16 | For more information on what we teach and why, please see our paper 17 | "Library Carpentry: software skills training for library professionals". 18 | 19 |

20 | -------------------------------------------------------------------------------- /_includes/lc/schedule.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Day 1

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
09:00 Data Intro for Librarians
10:30 Coffee
12:00 Lunch break
13:00 Shell Lessons for Libraries
14:30 Coffee
16:00 Wrap-up
12 |
13 |
14 |

Day 2

15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
09:00 Git Intro for Librarians
10:30 Coffee
12:00 Lunch break
13:00 OpenRefine for Librarians
14:30 Coffee
16:00 Wrap-up
23 |
24 |
25 | -------------------------------------------------------------------------------- /_includes/lc/syllabus.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Data Intro

4 |
    5 |
  • Intro to data
  • 6 |
  • Jargon busting
  • 7 |
  • Keyboard shortcuts
  • 8 |
  • Plain text formats
  • 9 |
  • Naming files
  • 10 |
  • Regular expressions
  • 11 |
  • Reference...
  • 12 |
13 |
14 |
15 |

The Unix Shell

16 |
    17 |
  • Files and directories
  • 18 |
  • History and tab completion
  • 19 |
  • Counting and sorting contents in files
  • 20 |
  • Pipes and redirection
  • 21 |
  • Mining or searching in files
  • 22 |
  • Reference...
  • 23 |
24 |
25 | 26 |
27 | 28 |
29 |
30 |

Version Control with Git

31 |
    32 |
  • Creating a repository
  • 33 |
  • Configuring git
  • 34 |
  • Recording changes to files: add, commit, ...
  • 35 |
  • Viewing state changes with status
  • 36 |
  • Working on the web: clone, pull, push, ...
  • 37 |
  • Where to host work, and why
  • 38 |
  • Reference...
  • 39 |
40 |
41 |
42 |
43 |

Open Refine

44 |
    45 |
  • Introduction to OpenRefine
  • 46 |
  • Importing data
  • 47 |
  • Basic functions
  • 48 |
  • Advanced Functions
  • 49 |
  • Reference...
  • 50 |
51 |
52 |
53 |
54 | 70 | -------------------------------------------------------------------------------- /_includes/lc/who.html: -------------------------------------------------------------------------------- 1 |

2 | Who: 3 | The course is for people working in library- and information-related roles. 4 | 5 | You don't need to have any previous knowledge of the tools that 6 | will be presented at the workshop. 7 | 8 |

9 | -------------------------------------------------------------------------------- /_includes/lesson_footer.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Footer for lesson pages. 3 | {% endcomment %} 4 | 5 | {% include gh_variables.html %} 6 | 7 | 61 | -------------------------------------------------------------------------------- /_includes/life_cycle.html: -------------------------------------------------------------------------------- 1 | 2 | {% if site.life_cycle == "pre-alpha" %} 3 | 4 |
5 |
6 | This lesson is still being designed and assembled (Pre-Alpha version) 7 |
8 |
9 | 10 | 11 | {% elsif site.life_cycle == "alpha" %} 12 | 13 |
14 |
15 | This lesson is in the early stages of development (Alpha version) 16 |
17 |
18 | 19 | 20 | {% elsif site.life_cycle == "beta" %} 21 | 22 |
23 |
24 | This lesson is being piloted (Beta version) 25 |
26 |
27 | 28 | {% elsif site.life_cycle == "stable" %} 29 | 30 | {% comment %} 31 | We don't do anything special for now 32 | {% endcomment %} 33 | 34 | {% endif %} 35 | -------------------------------------------------------------------------------- /_includes/links.md: -------------------------------------------------------------------------------- 1 | {% include base_path.html %} 2 | [cc-by-human]: https://creativecommons.org/licenses/by/4.0/ 3 | [cc-by-legal]: https://creativecommons.org/licenses/by/4.0/legalcode 4 | [ci]: http://communityin.org/ 5 | [coc-reporting]: https://docs.carpentries.org/topic_folders/policies/incident-reporting.html 6 | [coc]: https://docs.carpentries.org/topic_folders/policies/code-of-conduct.html 7 | [concept-maps]: https://carpentries.github.io/instructor-training/05-memory/ 8 | [contrib-covenant]: https://contributor-covenant.org/ 9 | [contributing]: {{ repo_url }}/blob/{{ source_branch }}/CONTRIBUTING.md 10 | [cran-checkpoint]: https://cran.r-project.org/package=checkpoint 11 | [cran-knitr]: https://cran.r-project.org/package=knitr 12 | [cran-stringr]: https://cran.r-project.org/package=stringr 13 | [dc-lessons]: http://www.datacarpentry.org/lessons/ 14 | [email]: mailto:team@carpentries.org 15 | [github-importer]: https://import.github.com/ 16 | [importer]: https://github.com/new/import 17 | [jekyll-collection]: https://jekyllrb.com/docs/collections/ 18 | [jekyll-install]: https://jekyllrb.com/docs/installation/ 19 | [jekyll-windows]: http://jekyll-windows.juthilo.com/ 20 | [jekyll]: https://jekyllrb.com/ 21 | [jupyter]: https://jupyter.org/ 22 | [kramdown]: https://kramdown.gettalong.org/ 23 | [lc-lessons]: https://librarycarpentry.org/lessons/ 24 | [lesson-aio]: {{ relative_root_path }}{% link aio.md %} 25 | [lesson-coc]: {{ relative_root_path }}{% link CODE_OF_CONDUCT.md %} 26 | [lesson-example]: https://carpentries.github.io/lesson-example/ 27 | [lesson-license]: {{ relative_root_path }}{% link LICENSE.md %} 28 | [lesson-mainpage]: {{ relative_root_path }}{% link index.md %} 29 | [lesson-reference]: {{ relative_root_path }}{% link reference.md %} 30 | [lesson-setup]: {{ relative_root_path }}{% link setup.md %} 31 | [mit-license]: https://opensource.org/licenses/mit-license.html 32 | [morea]: https://morea-framework.github.io/ 33 | [numfocus]: https://numfocus.org/ 34 | [osi]: https://opensource.org 35 | [pandoc]: https://pandoc.org/ 36 | [paper-now]: https://github.com/PeerJ/paper-now 37 | [python-gapminder]: https://swcarpentry.github.io/python-novice-gapminder/ 38 | [pyyaml]: https://pypi.org/project/PyYAML/ 39 | [r-markdown]: https://rmarkdown.rstudio.com/ 40 | [rstudio]: https://www.rstudio.com/ 41 | [ruby-install-guide]: https://www.ruby-lang.org/en/downloads/ 42 | [ruby-installer]: https://rubyinstaller.org/ 43 | [rubygems]: https://rubygems.org/pages/download/ 44 | [styles]: https://github.com/carpentries/styles/ 45 | [swc-lessons]: https://software-carpentry.org/lessons/ 46 | [swc-releases]: https://github.com/swcarpentry/swc-releases 47 | [training]: https://carpentries.github.io/instructor-training/ 48 | [workshop-repo]: {{ site.workshop_repo }} 49 | [yaml]: http://yaml.org/ 50 | -------------------------------------------------------------------------------- /_includes/main_title.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Main title for lesson pages. 3 | {% endcomment %} 4 | 5 | {% include base_path.html %} 6 | 7 | {% if site.kind == "lesson" %} 8 |

{{ site.title }}{% if page.title %}: {{ page.title }}{% endif %}

9 | 10 | {% else %} 11 | 12 |

{{ page.title }}

13 | 14 | {% endif %} 15 | -------------------------------------------------------------------------------- /_includes/manual_episode_order.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | This file enables manual episode ordering until 3 | GitHub Pages switches to Jekyll that supports it 4 | without any major hackery. Note, some logic will 5 | be required even when this transition happens 6 | but it won't be as involved as what we have to do 7 | in this file. 8 | 9 | To order lesson episodes or extras manually 10 | (instead of the default alpha-numerical order), 11 | create array variables 'episode_order' and 12 | 'extras_order' in `_config.yml` like so: 13 | 14 | episode_order: 15 | - episodeA 16 | - episodeB 17 | 18 | extras_order: 19 | - extraA 20 | - extraB 21 | 22 | Note that "Reference" page is currently always 23 | added to "Extras" as the first item. 24 | 25 | The main outcomes of the code in this file are: 26 | - 'lesson_episodes' variable that replaces 27 | 'site.episodes' variable when manual episode 28 | order is defined. 29 | - 'lesson_extras' variable that replaces 30 | 'site.extras' variable when manual ordering of 31 | files in '_extras' is used 32 | - 'previous_episode' and 'next_episode' objects 33 | that replace 'page.previous' and 'page.next' variables, 34 | correspondingly, and that have such properties 35 | as 'url' and 'title' and that are used in 36 | 'episode_navbar.html'. 37 | 38 | When episode order is specified manually, the 'lesson_episodes' 39 | variable contains a list of episode names ("slugs", to be precise; 40 | "slug" is the episode name without '.md'). Therefore, when we 41 | iterate over 'lesson_episodes' (in syllabus.html and navbar.html) , 42 | we have to check whether we use manual episode ordering and, if so, 43 | find the corresponding episode object. This is what we do with the 44 | following code in every loop over 'lesson_episodes': 45 | 46 | {% if site.episode_order %} 47 | {% assign episode = site.episodes | where: "slug", lesson_episode | first %} 48 | {% else %} 49 | {% assign episode = lesson_episode %} 50 | {% endif %} 51 | {% endcomment %} 52 | 53 | {% comment %} 54 | Manual ordering of Episodes begins here 55 | {% endcomment %} 56 | 57 | {% if site.episode_order %} 58 | {% assign lesson_episodes = site.episode_order %} 59 | {% else %} 60 | {% assign lesson_episodes = site.episodes %} 61 | {% endif %} 62 | 63 | 64 | {% comment %} 65 | If 'episode_order' is defined, we need to determine 66 | - previous episode object ('previous_episode') 67 | - and next episode object ('next_episode') 68 | {% endcomment %} 69 | 70 | 71 | {% if site.episode_order %} 72 | {% for lesson_episode in lesson_episodes %} 73 | 74 | {% comment %} 75 | We iterate over the specified lesson episodes using 76 | a 'for' loop because we can use 77 | 'forloop.first', 'forloop.last', and 'forloop.index0'. 78 | {% endcomment %} 79 | 80 | {% unless lesson_episode == page.slug %} {% continue %} {% endunless %} 81 | 82 | {% if forloop.first %} 83 | {% assign previous_episode = nil %} 84 | {% else %} 85 | {% assign p_idx = forloop.index0 | minus: 1 %} 86 | {% assign p_name = lesson_episodes[p_idx] %} 87 | {% assign previous_episode = site.episodes | where: "slug", p_name | first %} 88 | {% endif %} 89 | 90 | {% if forloop.last == true %} 91 | {% assign next_episode = nil %} 92 | {% else %} 93 | {% assign n_idx = forloop.index0 | plus: 1 %} 94 | {% assign n_name = lesson_episodes[n_idx] %} 95 | {% assign next_episode = site.episodes | where: "slug", n_name | first %} 96 | {% endif %} 97 | {% endfor %} 98 | {% else %} 99 | {% assign previous_episode = page.previous %} 100 | {% assign next_episode = page.next %} 101 | {% endif %} 102 | 103 | 104 | {% comment %} 105 | Manual ordering of Extras begins here 106 | {% endcomment %} 107 | 108 | {% if site.extras_order %} 109 | {% assign lesson_extras = site.extras_order %} 110 | {% else %} 111 | {% assign lesson_extras = site.extras %} 112 | {% endif %} 113 | 114 | {% comment %} 115 | We do not need to determine "previous" or "next" extra. 116 | {% endcomment %} 117 | -------------------------------------------------------------------------------- /_includes/sc/intro.html: -------------------------------------------------------------------------------- 1 |

2 | Software Carpentry 3 | aims to help researchers get their work done 4 | in less time and with less pain 5 | by teaching them basic research computing skills. 6 | This hands-on workshop will cover basic concepts and tools, 7 | including program design, version control, data management, 8 | and task automation. 9 | Participants will be encouraged to help one another 10 | and to apply what they have learned to their own research problems. 11 |

12 |

13 | 14 | For more information on what we teach and why, 15 | please see our paper 16 | "Best Practices for Scientific Computing". 17 | 18 |

19 | -------------------------------------------------------------------------------- /_includes/sc/schedule.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Day 1

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
09:00 Automating tasks with the Unix shell
10:30 Coffee
12:00 Lunch break
13:00 Building programs with Python
14:30 Coffee
16:00 Wrap-up
12 |
13 |
14 |

Day 2

15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
09:00 Version control with Git
10:30 Coffee
12:00 Lunch break
13:00 Managing data with SQL
14:30 Coffee
16:00 Wrap-up
23 |
24 |
25 | -------------------------------------------------------------------------------- /_includes/sc/syllabus.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

The Unix Shell

4 |
    5 |
  • Files and directories
  • 6 |
  • History and tab completion
  • 7 |
  • Pipes and redirection
  • 8 |
  • Looping over files
  • 9 |
  • Creating and running shell scripts
  • 10 |
  • Finding things
  • 11 |
  • Reference...
  • 12 |
13 |
14 |
15 |

Programming in Python

16 |
    17 |
  • Using libraries
  • 18 |
  • Working with arrays
  • 19 |
  • Reading and plotting data
  • 20 |
  • Creating and using functions
  • 21 |
  • Loops and conditionals
  • 22 |
  • Defensive programming
  • 23 |
  • Using Python from the command line
  • 24 |
  • Reference...
  • 25 |
26 |
27 | 40 | 53 |
54 | 55 |
56 |
57 |

Version Control with Git

58 |
    59 |
  • Creating a repository
  • 60 |
  • Recording changes to files: add, commit, ...
  • 61 |
  • Viewing changes: status, diff, ...
  • 62 |
  • Ignoring files
  • 63 |
  • Working on the web: clone, pull, push, ...
  • 64 |
  • Resolving conflicts
  • 65 |
  • Open licenses
  • 66 |
  • Where to host work, and why
  • 67 |
  • Reference...
  • 68 |
69 |
70 | 86 |
87 |

Open Refine

88 |
    89 |
  • Introduction to OpenRefine
  • 90 |
  • Importing data
  • 91 |
  • Basic functions
  • 92 |
  • Advanced Functions
  • 93 |
  • Reference...
  • 94 |
95 |
96 |
97 | -------------------------------------------------------------------------------- /_includes/sc/who.html: -------------------------------------------------------------------------------- 1 |

2 | Who: 3 | The course is aimed at graduate students and other researchers. 4 | 5 | You don't need to have any previous knowledge of the tools 6 | that will be presented at the workshop. 7 | 8 |

9 | -------------------------------------------------------------------------------- /_includes/syllabus.html: -------------------------------------------------------------------------------- 1 | {% include base_path.html %} 2 | 3 | {% comment %} 4 | Display syllabus in tabular form. 5 | Days are displayed if at least one episode has 'start = true'. 6 | {% endcomment %} 7 | 8 | {% include manual_episode_order.html %} 9 | 10 |
11 |

Schedule

12 | 13 | {% assign lesson_number = 0 %} 14 | {% assign day = 0 %} 15 | {% assign multiday = false %} 16 | {% for lesson_episode in lesson_episodes %} 17 | {% if site.episode_order %} 18 | {% assign episode = site.episodes | where: "slug", lesson_episode | first %} 19 | {% else %} 20 | {% assign episode = lesson_episode %} 21 | {% endif %} 22 | {% if episode.start %}{% assign multiday = true %}{% break %}{% endif %} 23 | {% endfor %} 24 | {% assign current = site.start_time %} 25 | 26 | 27 | 28 | {% if multiday %}{% endif %} 29 | 30 | 31 | 32 | 33 | {% for lesson_episode in lesson_episodes %} 34 | {% if site.episode_order %} 35 | {% assign episode = site.episodes | where: "slug", lesson_episode | first %} 36 | {% else %} 37 | {% assign episode = lesson_episode %} 38 | {% endif %} 39 | {% if episode.start %} {% comment %} Starting a new day? {% endcomment %} 40 | {% assign day = day | plus: 1 %} 41 | {% if day > 1 %} {% comment %} If about to start day 2 or later, show finishing time for previous day {% endcomment %} 42 | {% assign hours = current | divided_by: 60 %} 43 | {% assign minutes = current | modulo: 60 %} 44 | 45 | {% if multiday %}{% endif %} 46 | 47 | 48 | 49 | 50 | {% endif %} 51 | {% assign current = site.start_time %} {% comment %}Re-set start time of this episode to general daily start time {% endcomment %} 52 | {% endif %} 53 | {% assign hours = current | divided_by: 60 %} 54 | {% assign minutes = current | modulo: 60 %} 55 | 56 | {% if multiday %}{% endif %} 57 | 58 | 62 | 76 | 77 | {% assign current = current | plus: episode.teaching | plus: episode.exercises | plus: episode.break %} 78 | {% endfor %} 79 | {% assign hours = current | divided_by: 60 %} 80 | {% assign minutes = current | modulo: 60 %} 81 | 82 | {% if multiday %}{% endif %} 83 | 84 | 85 | 86 | 87 |
SetupSetup ready for the lesson
{% if hours < 10 %}0{% endif %}{{ hours }}:{% if minutes < 10 %}0{% endif %}{{ minutes }}Finish
{% if episode.start %}Day {{ day }}{% endif %}{% if hours < 10 %}0{% endif %}{{ hours }}:{% if minutes < 10 %}0{% endif %}{{ minutes }} 59 | {% assign lesson_number = lesson_number | plus: 1 %} 60 | {{ lesson_number }}. {{ episode.title }} 61 | 63 | {% if episode.break %} 64 | Break 65 | {% else %} 66 | {% if episode.questions %} 67 | {% for question in episode.questions %} 68 | {{question|markdownify|strip_html}} 69 | {% unless forloop.last %} 70 |
71 | {% endunless %} 72 | {% endfor %} 73 | {% endif %} 74 | {% endif %} 75 |
{% if hours < 10 %}0{% endif %}{{ hours }}:{% if minutes < 10 %}0{% endif %}{{ minutes }}Finish
88 | 89 |

90 | The actual schedule may vary slightly depending on the topics and exercises chosen by the instructor. 91 |

92 | 93 |
94 | -------------------------------------------------------------------------------- /_includes/workshop_ad.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Advertising box at the top of a workshop website home page. 3 | {% endcomment %} 4 |
5 |
6 |
7 |

{{page.venue}}

8 |
9 |
10 |

{{page.humandate}}

11 |

{% if page.humantime %}{{page.humantime}}{% endif %}

12 |
13 |
14 |

15 | Instructors: 16 | {% if page.instructor %} 17 | {{page.instructor | join: ', ' %}} 18 | {% else %} 19 | to be announced. 20 | {% endif %} 21 |

22 | {% if page.helper %} 23 |

24 | Helpers: 25 | {{page.helper | join: ', ' %}} 26 |

27 | {% endif %} 28 |
29 |
30 |
31 |
32 |
33 | -------------------------------------------------------------------------------- /_includes/workshop_calendar.html: -------------------------------------------------------------------------------- 1 | {% if page.carpentry != "hsf" %} 2 | Add to your Google Calendar. 3 | {% endif %} 4 | -------------------------------------------------------------------------------- /_includes/workshop_footer.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Footer for a standard workshop. 3 | {% endcomment %} 4 | 29 | -------------------------------------------------------------------------------- /_layouts/base.html: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | {% include base_path.html %} 4 | {% include gh_variables.html %} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 24 | {% include favicons.html %} 25 | 26 | 27 | 28 | 32 | 33 | 34 | {% if page.title %}{{ page.title }}{% endif %}{% if page.title and site.title %} – {% endif %}{% if site.title %}{{ site.title }}{% endif %} 35 | 36 | 37 | 38 | 39 | 40 | {% include life_cycle.html %} 41 | 42 |
43 | {% include navbar.html %} 44 | {{ content }} 45 | {% if site.kind == "workshop" %} 46 | {% include workshop_footer.html %} 47 | {% else %} 48 | {% include lesson_footer.html %} 49 | {% endif %} 50 |
51 | {% include javascript.html %} 52 | 53 | 54 | -------------------------------------------------------------------------------- /_layouts/break.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: base 3 | --- 4 | {% include episode_navbar.html episode_navbar_title=true %} 5 |
6 | {% include episode_title.html %} 7 | {% include episode_break.html %} 8 | {{content}} 9 |
10 | {% include episode_navbar.html episode_navbar_title=false %} 11 | -------------------------------------------------------------------------------- /_layouts/episode.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: base 3 | --- 4 | {% include episode_navbar.html episode_navbar_title=true %} 5 |
6 | {% include episode_title.html %} 7 | {% include episode_overview.html %} 8 | {{content}} 9 | {% include episode_keypoints.html %} 10 |
11 | {% include episode_navbar.html episode_navbar_title=false %} 12 | 13 | -------------------------------------------------------------------------------- /_layouts/lesson.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: base 3 | --- 4 | {% include main_title.html %} 5 |
6 | {{ content }} 7 |
8 | {% include syllabus.html %} 9 | -------------------------------------------------------------------------------- /_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: base 3 | --- 4 | {% include main_title.html %} 5 |
6 | {{content}} 7 |
8 | -------------------------------------------------------------------------------- /_layouts/post.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /_layouts/reference.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Reference" 4 | --- 5 | {% include all_keypoints.html %} 6 | {{content}} 7 | -------------------------------------------------------------------------------- /_layouts/workshop.html: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | {% include base_path.html %} 4 | {% include gh_variables.html %} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 26 | {% endif %} 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | {% include favicons.html %} 38 | 39 | 40 | 41 | 45 | {{ page.venue }}: {{ page.humandate }} 46 | 47 | 48 |
49 | {% include navbar.html %} 50 | {% include workshop_ad.html %} 51 | {{ content }} 52 | {% include workshop_footer.html %} 53 |
54 | {% include javascript.html %} 55 | 56 | 57 | -------------------------------------------------------------------------------- /aio.md: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /aio/index.html 3 | --- 4 | 5 | {% comment %} 6 | As a maintainer, you don't need to edit this file. 7 | If you notice that something doesn't work, please 8 | open an issue: https://github.com/hsf-training/hsf-styles/issues/new 9 | {% endcomment %} 10 | 11 | {% include base_path.html %} 12 | 13 | {% include aio-script.md %} 14 | -------------------------------------------------------------------------------- /assets/css/syntax.css: -------------------------------------------------------------------------------- 1 | .highlight .hll { background-color: #ffffcc } 2 | .highlight { background: #f8f8f8; } 3 | .highlight .c { color: #387d7d; font-style: italic } /* Comment */ 4 | .highlight .err { border: 1px solid #FF0000 } /* Error */ 5 | .highlight .k { color: #008000; font-weight: bold } /* Keyword */ 6 | .highlight .o { color: #666666 } /* Operator */ 7 | .highlight .ch { color: #387d7d; font-style: italic } /* Comment.Hashbang */ 8 | .highlight .cm { color: #387d7d; font-style: italic } /* Comment.Multiline */ 9 | .highlight .cp { color: #BC7A00 } /* Comment.Preproc */ 10 | .highlight .cpf { color: #387d7d; font-style: italic } /* Comment.PreprocFile */ 11 | .highlight .c1 { color: #387d7d; font-style: italic } /* Comment.Single */ 12 | .highlight .cs { color: #387d7d; font-style: italic } /* Comment.Special */ 13 | .highlight .gd { color: #A00000 } /* Generic.Deleted */ 14 | .highlight .ge { font-style: italic } /* Generic.Emph */ 15 | .highlight .gr { color: #FF0000 } /* Generic.Error */ 16 | .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 17 | .highlight .gi { color: #00A000 } /* Generic.Inserted */ 18 | .highlight .go { color: #888888 } /* Generic.Output */ 19 | .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ 20 | .highlight .gs { font-weight: bold } /* Generic.Strong */ 21 | .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 22 | .highlight .gt { color: #0044DD } /* Generic.Traceback */ 23 | .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ 24 | .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ 25 | .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ 26 | .highlight .kp { color: #008000 } /* Keyword.Pseudo */ 27 | .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ 28 | .highlight .kt { color: #B00040 } /* Keyword.Type */ 29 | .highlight .m { color: #666666 } /* Literal.Number */ 30 | .highlight .s { color: #BA2121 } /* Literal.String */ 31 | .highlight .na { color: #7D9029 } /* Name.Attribute */ 32 | .highlight .nb { color: #008000 } /* Name.Builtin */ 33 | .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ 34 | .highlight .no { color: #880000 } /* Name.Constant */ 35 | .highlight .nd { color: #AA22FF } /* Name.Decorator */ 36 | .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ 37 | .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ 38 | .highlight .nf { color: #0000FF } /* Name.Function */ 39 | .highlight .nl { color: #A0A000 } /* Name.Label */ 40 | .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ 41 | .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ 42 | .highlight .nv { color: #19177C } /* Name.Variable */ 43 | .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ 44 | .highlight .w { color: #bbbbbb } /* Text.Whitespace */ 45 | .highlight .mb { color: #666666 } /* Literal.Number.Bin */ 46 | .highlight .mf { color: #666666 } /* Literal.Number.Float */ 47 | .highlight .mh { color: #666666 } /* Literal.Number.Hex */ 48 | .highlight .mi { color: #666666 } /* Literal.Number.Integer */ 49 | .highlight .mo { color: #666666 } /* Literal.Number.Oct */ 50 | .highlight .sa { color: #BA2121 } /* Literal.String.Affix */ 51 | .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ 52 | .highlight .sc { color: #BA2121 } /* Literal.String.Char */ 53 | .highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ 54 | .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ 55 | .highlight .s2 { color: #BA2121 } /* Literal.String.Double */ 56 | .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ 57 | .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ 58 | .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ 59 | .highlight .sx { color: #008000 } /* Literal.String.Other */ 60 | .highlight .sr { color: #BB6688 } /* Literal.String.Regex */ 61 | .highlight .s1 { color: #BA2121 } /* Literal.String.Single */ 62 | .highlight .ss { color: #19177C } /* Literal.String.Symbol */ 63 | .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ 64 | .highlight .fm { color: #0000FF } /* Name.Function.Magic */ 65 | .highlight .vc { color: #19177C } /* Name.Variable.Class */ 66 | .highlight .vg { color: #19177C } /* Name.Variable.Global */ 67 | .highlight .vi { color: #19177C } /* Name.Variable.Instance */ 68 | .highlight .vm { color: #19177C } /* Name.Variable.Magic */ 69 | .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ 70 | -------------------------------------------------------------------------------- /assets/favicons/cp/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /assets/favicons/cp/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /assets/favicons/cp/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /assets/favicons/cp/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /assets/favicons/cp/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /assets/favicons/cp/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /assets/favicons/cp/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /assets/favicons/cp/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /assets/favicons/cp/favicon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/favicon-128.png -------------------------------------------------------------------------------- /assets/favicons/cp/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/favicon-16x16.png -------------------------------------------------------------------------------- /assets/favicons/cp/favicon-196x196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/favicon-196x196.png -------------------------------------------------------------------------------- /assets/favicons/cp/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/favicon-32x32.png -------------------------------------------------------------------------------- /assets/favicons/cp/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/favicon-96x96.png -------------------------------------------------------------------------------- /assets/favicons/cp/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/favicon.ico -------------------------------------------------------------------------------- /assets/favicons/cp/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/mstile-144x144.png -------------------------------------------------------------------------------- /assets/favicons/cp/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/mstile-150x150.png -------------------------------------------------------------------------------- /assets/favicons/cp/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/mstile-310x150.png -------------------------------------------------------------------------------- /assets/favicons/cp/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/mstile-310x310.png -------------------------------------------------------------------------------- /assets/favicons/cp/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/cp/mstile-70x70.png -------------------------------------------------------------------------------- /assets/favicons/dc/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /assets/favicons/dc/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /assets/favicons/dc/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /assets/favicons/dc/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /assets/favicons/dc/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /assets/favicons/dc/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /assets/favicons/dc/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /assets/favicons/dc/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /assets/favicons/dc/favicon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/favicon-128.png -------------------------------------------------------------------------------- /assets/favicons/dc/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/favicon-16x16.png -------------------------------------------------------------------------------- /assets/favicons/dc/favicon-196x196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/favicon-196x196.png -------------------------------------------------------------------------------- /assets/favicons/dc/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/favicon-32x32.png -------------------------------------------------------------------------------- /assets/favicons/dc/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/favicon-96x96.png -------------------------------------------------------------------------------- /assets/favicons/dc/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/favicon.ico -------------------------------------------------------------------------------- /assets/favicons/dc/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/mstile-144x144.png -------------------------------------------------------------------------------- /assets/favicons/dc/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/mstile-150x150.png -------------------------------------------------------------------------------- /assets/favicons/dc/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/mstile-310x150.png -------------------------------------------------------------------------------- /assets/favicons/dc/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/mstile-310x310.png -------------------------------------------------------------------------------- /assets/favicons/dc/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/dc/mstile-70x70.png -------------------------------------------------------------------------------- /assets/favicons/hsf/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/android-icon-144x144.png -------------------------------------------------------------------------------- /assets/favicons/hsf/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/android-icon-192x192.png -------------------------------------------------------------------------------- /assets/favicons/hsf/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/android-icon-36x36.png -------------------------------------------------------------------------------- /assets/favicons/hsf/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/android-icon-48x48.png -------------------------------------------------------------------------------- /assets/favicons/hsf/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/android-icon-72x72.png -------------------------------------------------------------------------------- /assets/favicons/hsf/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/android-icon-96x96.png -------------------------------------------------------------------------------- /assets/favicons/hsf/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/apple-icon-114x114.png -------------------------------------------------------------------------------- /assets/favicons/hsf/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/apple-icon-120x120.png -------------------------------------------------------------------------------- /assets/favicons/hsf/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/apple-icon-144x144.png -------------------------------------------------------------------------------- /assets/favicons/hsf/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/apple-icon-152x152.png -------------------------------------------------------------------------------- /assets/favicons/hsf/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/apple-icon-180x180.png -------------------------------------------------------------------------------- /assets/favicons/hsf/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/apple-icon-57x57.png -------------------------------------------------------------------------------- /assets/favicons/hsf/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/apple-icon-60x60.png -------------------------------------------------------------------------------- /assets/favicons/hsf/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/apple-icon-72x72.png -------------------------------------------------------------------------------- /assets/favicons/hsf/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/apple-icon-76x76.png -------------------------------------------------------------------------------- /assets/favicons/hsf/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/apple-icon-precomposed.png -------------------------------------------------------------------------------- /assets/favicons/hsf/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/apple-icon.png -------------------------------------------------------------------------------- /assets/favicons/hsf/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/favicon-16x16.png -------------------------------------------------------------------------------- /assets/favicons/hsf/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/favicon-32x32.png -------------------------------------------------------------------------------- /assets/favicons/hsf/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/favicon-96x96.png -------------------------------------------------------------------------------- /assets/favicons/hsf/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/favicon.ico -------------------------------------------------------------------------------- /assets/favicons/hsf/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/ms-icon-144x144.png -------------------------------------------------------------------------------- /assets/favicons/hsf/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/ms-icon-150x150.png -------------------------------------------------------------------------------- /assets/favicons/hsf/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/ms-icon-310x310.png -------------------------------------------------------------------------------- /assets/favicons/hsf/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/hsf/ms-icon-70x70.png -------------------------------------------------------------------------------- /assets/favicons/lc/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /assets/favicons/lc/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /assets/favicons/lc/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /assets/favicons/lc/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /assets/favicons/lc/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /assets/favicons/lc/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /assets/favicons/lc/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /assets/favicons/lc/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /assets/favicons/lc/favicon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/favicon-128.png -------------------------------------------------------------------------------- /assets/favicons/lc/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/favicon-16x16.png -------------------------------------------------------------------------------- /assets/favicons/lc/favicon-196x196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/favicon-196x196.png -------------------------------------------------------------------------------- /assets/favicons/lc/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/favicon-32x32.png -------------------------------------------------------------------------------- /assets/favicons/lc/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/favicon-96x96.png -------------------------------------------------------------------------------- /assets/favicons/lc/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/favicon.ico -------------------------------------------------------------------------------- /assets/favicons/lc/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/mstile-144x144.png -------------------------------------------------------------------------------- /assets/favicons/lc/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/mstile-150x150.png -------------------------------------------------------------------------------- /assets/favicons/lc/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/mstile-310x150.png -------------------------------------------------------------------------------- /assets/favicons/lc/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/mstile-310x310.png -------------------------------------------------------------------------------- /assets/favicons/lc/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/lc/mstile-70x70.png -------------------------------------------------------------------------------- /assets/favicons/swc/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /assets/favicons/swc/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /assets/favicons/swc/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /assets/favicons/swc/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /assets/favicons/swc/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /assets/favicons/swc/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /assets/favicons/swc/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /assets/favicons/swc/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /assets/favicons/swc/favicon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/favicon-128.png -------------------------------------------------------------------------------- /assets/favicons/swc/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/favicon-16x16.png -------------------------------------------------------------------------------- /assets/favicons/swc/favicon-196x196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/favicon-196x196.png -------------------------------------------------------------------------------- /assets/favicons/swc/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/favicon-32x32.png -------------------------------------------------------------------------------- /assets/favicons/swc/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/favicon-96x96.png -------------------------------------------------------------------------------- /assets/favicons/swc/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/favicon.ico -------------------------------------------------------------------------------- /assets/favicons/swc/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/mstile-144x144.png -------------------------------------------------------------------------------- /assets/favicons/swc/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/mstile-150x150.png -------------------------------------------------------------------------------- /assets/favicons/swc/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/mstile-310x150.png -------------------------------------------------------------------------------- /assets/favicons/swc/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/mstile-310x310.png -------------------------------------------------------------------------------- /assets/favicons/swc/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/favicons/swc/mstile-70x70.png -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /assets/img/cp-logo-blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /assets/img/dc-icon-black.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 18 | 19 | 21 | image/svg+xml 22 | 24 | 25 | 26 | 27 | 28 | 30 | 54 | 59 | 64 | 69 | 74 | 75 | -------------------------------------------------------------------------------- /assets/img/dc-logo-black.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 18 | 19 | 21 | image/svg+xml 22 | 24 | 25 | 26 | 27 | 28 | 30 | 54 | 59 | 64 | 69 | 74 | 75 | -------------------------------------------------------------------------------- /assets/img/hsf-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/img/hsf-logo.png -------------------------------------------------------------------------------- /assets/img/lc-icon-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/img/lc-icon-black.png -------------------------------------------------------------------------------- /assets/img/lc-logo-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/img/lc-logo-black.png -------------------------------------------------------------------------------- /assets/img/swc-icon-blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /assets/img/swc-logo-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/img/swc-logo-blue.png -------------------------------------------------------------------------------- /assets/img/swc-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/assets/img/swc-logo-white.png -------------------------------------------------------------------------------- /assets/js/lesson.js: -------------------------------------------------------------------------------- 1 | // Make all tables striped by default. 2 | $("table").addClass("table table-striped"); 3 | 4 | 5 | // Handle foldable challenges and solutions (on click and at start). 6 | $(".solution").click(function(event) { 7 | var trigger = $(event.target).has(".fold-unfold").length > 0 8 | || $(event.target).filter(".fold-unfold").length > 0; 9 | if (trigger) { 10 | $(">*:not(h2)", this).toggle(400); 11 | $(">h2>span.fold-unfold", this).toggleClass("glyphicon-collapse-down glyphicon-collapse-up"); 12 | event.stopPropagation(); 13 | } 14 | }); 15 | $(".solution").each(function() { 16 | $(">*:not(h2)", this).toggle(); 17 | var h2 = $("h2:first", this); 18 | h2.append(""); 19 | }); 20 | 21 | 22 | // Handle searches. 23 | // Relies on document having 'meta' element with name 'search-domain'. 24 | function google_search() { 25 | var query = document.getElementById("google-search").value; 26 | var domain = $("meta[name=search-domain]").attr("value"); 27 | window.open("https://www.google.com/search?q=" + query + "+site:" + domain); 28 | } 29 | 30 | // function to shrink the life cycle bar when scrolling 31 | $(function(){ 32 | $('#life-cycle').data('size','big'); 33 | }); 34 | 35 | $(window).scroll(function(){ 36 | if($(document).scrollTop() > 0) 37 | { 38 | if($('#life-cycle').data('size') == 'big') 39 | { 40 | $('#life-cycle').data('size','small'); 41 | $('#life-cycle').stop().animate({ 42 | padding: '5px' 43 | },100); 44 | } 45 | } 46 | else 47 | { 48 | if($('#life-cycle').data('size') == 'small') 49 | { 50 | $('#life-cycle').data('size','big'); 51 | $('#life-cycle').stop().animate({ 52 | padding: '15px' 53 | },100); 54 | } 55 | } 56 | }); 57 | -------------------------------------------------------------------------------- /bin/boilerplate/.travis.yml: -------------------------------------------------------------------------------- 1 | # Travis CI is only used to check the lesson and is not involved in its deployment 2 | dist: bionic 3 | language: ruby 4 | rvm: 5 | - 2.7.1 6 | 7 | branches: 8 | only: 9 | - gh-pages 10 | - /.*/ 11 | 12 | cache: 13 | apt: true 14 | bundler: true 15 | directories: 16 | - /home/travis/.rvm/ 17 | - $R_LIBS_USER 18 | - $HOME/.cache/pip 19 | 20 | env: 21 | global: 22 | - NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer 23 | - R_LIBS_USER=~/R/Library 24 | - R_LIBS_SITE=/usr/local/lib/R/site-library:/usr/lib/R/site-library 25 | - R_VERSION=4.0.2 26 | 27 | before_install: 28 | ## Install R + pandoc + dependencies 29 | - sudo add-apt-repository -y "ppa:marutter/rrutter4.0" 30 | - sudo add-apt-repository -y "ppa:c2d4u.team/c2d4u4.0+" 31 | - sudo add-apt-repository -y "ppa:ubuntugis/ppa" 32 | - sudo add-apt-repository -y "ppa:cran/travis" 33 | - travis_apt_get_update 34 | - sudo apt-get install -y --no-install-recommends build-essential gcc g++ libblas-dev liblapack-dev libncurses5-dev libreadline-dev libjpeg-dev libpcre3-dev libpng-dev zlib1g-dev libbz2-dev liblzma-dev libicu-dev cdbs qpdf texinfo libssh2-1-dev gfortran jq python3.5 python3-pip r-base 35 | - export PATH=${TRAVIS_HOME}/R-bin/bin:$PATH 36 | - export LD_LIBRARY_PATH=${TRAVIS_HOME}/R-bin/lib:$LD_LIBRARY_PATH 37 | - sudo mkdir -p /usr/local/lib/R/site-library $R_LIBS_USER 38 | - sudo chmod 2777 /usr/local/lib/R /usr/local/lib/R/site-library $R_LIBS_USER 39 | - echo 'options(repos = c(CRAN = "https://packagemanager.rstudio.com/all/__linux__/bionic/latest"))' > ~/.Rprofile.site 40 | - export R_PROFILE=~/.Rprofile.site 41 | - curl -fLo /tmp/texlive.tar.gz https://github.com/jimhester/ubuntu-bin/releases/download/latest/texlive.tar.gz 42 | - tar xzf /tmp/texlive.tar.gz -C ~ 43 | - export PATH=${TRAVIS_HOME}/texlive/bin/x86_64-linux:$PATH 44 | - tlmgr update --self 45 | - curl -fLo /tmp/pandoc-2.2-1-amd64.deb https://github.com/jgm/pandoc/releases/download/2.2/pandoc-2.2-1-amd64.deb 46 | - sudo dpkg -i /tmp/pandoc-2.2-1-amd64.deb 47 | - sudo apt-get install -f 48 | - rm /tmp/pandoc-2.2-1-amd64.deb 49 | - Rscript -e "install.packages(setdiff(c('renv', 'rprojroot'), installed.packages()), loc = Sys.getenv('R_LIBS_USER')); update.packages(lib.loc = Sys.getenv('R_LIBS_USER'), ask = FALSE, checkBuilt = TRUE)" 50 | - Rscript -e 'sessionInfo()' 51 | ## Install python and dependencies 52 | - python3 -m pip install --upgrade pip setuptools wheel 53 | - python3 -m pip install pyyaml 54 | 55 | script: 56 | - make lesson-check-all 57 | - make --always-make site 58 | -------------------------------------------------------------------------------- /bin/boilerplate/AUTHORS: -------------------------------------------------------------------------------- 1 | FIXME: list authors' names and email addresses. -------------------------------------------------------------------------------- /bin/boilerplate/CITATION: -------------------------------------------------------------------------------- 1 | FIXME: describe how to cite this lesson. -------------------------------------------------------------------------------- /bin/boilerplate/README.md: -------------------------------------------------------------------------------- 1 | # FIXME Lesson title 2 | 3 | [![Create a Slack Account with us](https://img.shields.io/badge/Create_Slack_Account-The_Carpentries-071159.svg)](https://swc-slack-invite.herokuapp.com/) 4 | 5 | This repository generates the corresponding lesson website from [The Carpentries](https://carpentries.org/) repertoire of lessons. 6 | 7 | ## Contributing 8 | 9 | We welcome all contributions to improve the lesson! Maintainers will do their best to help you if you have any 10 | questions, concerns, or experience any difficulties along the way. 11 | 12 | We'd like to ask you to familiarize yourself with our [Contribution Guide](CONTRIBUTING.md) and have a look at 13 | the [more detailed guidelines][lesson-example] on proper formatting, ways to render the lesson locally, and even 14 | how to write new episodes. 15 | 16 | Please see the current list of [issues][FIXME] for ideas for contributing to this 17 | repository. For making your contribution, we use the GitHub flow, which is 18 | nicely explained in the chapter [Contributing to a Project](http://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project) in Pro Git 19 | by Scott Chacon. 20 | Look for the tag ![good_first_issue](https://img.shields.io/badge/-good%20first%20issue-gold.svg). This indicates that the maintainers will welcome a pull request fixing this issue. 21 | 22 | 23 | ## Maintainer(s) 24 | 25 | Current maintainers of this lesson are 26 | 27 | * FIXME 28 | * FIXME 29 | * FIXME 30 | 31 | 32 | ## Authors 33 | 34 | A list of contributors to the lesson can be found in [AUTHORS](AUTHORS) 35 | 36 | ## Citation 37 | 38 | To cite this lesson, please consult with [CITATION](CITATION) 39 | 40 | [lesson-example]: https://carpentries.github.io/lesson-example 41 | -------------------------------------------------------------------------------- /bin/boilerplate/_config.yml: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------ 2 | # Values for this lesson. 3 | #------------------------------------------------------------ 4 | 5 | # Which carpentry is this ("swc", "dc", "lc", or "cp")? 6 | # swc: Software Carpentry 7 | # dc: Data Carpentry 8 | # lc: Library Carpentry 9 | # cp: Carpentries (to use for instructor traning for instance) 10 | # hsf: HEP Software Foundation carpentry 11 | carpentry: "hsf" 12 | 13 | # Overall title for pages. 14 | title: "Lesson Title" 15 | 16 | # Life cycle stage of the lesson 17 | # See this page for more details: https://cdh.carpentries.org/the-lesson-life-cycle.html 18 | # Possible values: "pre-alpha", "alpha", "beta", "stable" 19 | life_cycle: "pre-alpha" 20 | 21 | #------------------------------------------------------------ 22 | # Generic settings (should not need to change). 23 | #------------------------------------------------------------ 24 | 25 | # What kind of thing is this ("workshop" or "lesson")? 26 | kind: "lesson" 27 | 28 | # Magic to make URLs resolve both locally and on GitHub. 29 | # See https://help.github.com/articles/repository-metadata-on-github-pages/. 30 | # Please don't change it: / is correct. 31 | repository: / 32 | 33 | # Email address, no mailto: 34 | email: "hsf-training-wg@googlegroups.com" 35 | 36 | # Sites. 37 | amy_site: "https://amy.carpentries.org/" 38 | carpentries_github: "https://github.com/carpentries" 39 | carpentries_pages: "https://carpentries.github.io" 40 | carpentries_site: "https://carpentries.org/" 41 | dc_site: "https://datacarpentry.org" 42 | hsf_site: "https://hepsoftwarefoundation.org" 43 | example_repo: "https://github.com/carpentries/lesson-example" 44 | example_site: "https://carpentries.github.io/lesson-example" 45 | lc_site: "https://librarycarpentry.org/" 46 | swc_github: "https://github.com/swcarpentry" 47 | swc_pages: "https://swcarpentry.github.io" 48 | swc_site: "https://software-carpentry.org" 49 | template_repo: "https://github.com/carpentries/styles" 50 | training_site: "https://carpentries.github.io/instructor-training" 51 | workshop_repo: "https://github.com/carpentries/workshop-template" 52 | workshop_site: "https://carpentries.github.io/workshop-template" 53 | cc_by_human: "https://creativecommons.org/licenses/by/4.0/" 54 | 55 | # Surveys. 56 | pre_survey: "https://carpentries.typeform.com/to/wi32rS?slug=" 57 | post_survey: "https://carpentries.typeform.com/to/UgVdRQ?slug=" 58 | instructor_pre_survey: "https://www.surveymonkey.com/r/instructor_training_pre_survey?workshop_id=" 59 | instructor_post_survey: "https://www.surveymonkey.com/r/instructor_training_post_survey?workshop_id=" 60 | 61 | 62 | # Start time in minutes (0 to be clock-independent, 540 to show a start at 09:00 am). 63 | start_time: 0 64 | 65 | # Specify that things in the episodes collection should be output. 66 | collections: 67 | episodes: 68 | output: true 69 | permalink: /:path/index.html 70 | extras: 71 | output: true 72 | permalink: /:path/index.html 73 | 74 | # Set the default layout for things in the episodes collection. 75 | defaults: 76 | - values: 77 | root: . 78 | layout: page 79 | - scope: 80 | path: "" 81 | type: episodes 82 | values: 83 | root: .. 84 | layout: episode 85 | - scope: 86 | path: "" 87 | type: extras 88 | values: 89 | root: .. 90 | layout: page 91 | 92 | # Files and directories that are not to be copied. 93 | exclude: 94 | - Makefile 95 | - bin/ 96 | - .Rproj.user/ 97 | - .vendor/ 98 | - vendor/ 99 | - .docker-vendor/ 100 | 101 | # Turn on built-in syntax highlighting. 102 | highlighter: rouge 103 | -------------------------------------------------------------------------------- /bin/boilerplate/_episodes/01-introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Introduction" 3 | teaching: 0 4 | exercises: 0 5 | questions: 6 | - "Key question (FIXME)" 7 | objectives: 8 | - "First learning objective. (FIXME)" 9 | keypoints: 10 | - "First key point. Brief Answer to questions. (FIXME)" 11 | --- 12 | FIXME 13 | 14 | {% include links.md %} 15 | 16 | -------------------------------------------------------------------------------- /bin/boilerplate/_extras/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | --- 4 | {% include carpentries.html %} 5 | {% include links.md %} 6 | -------------------------------------------------------------------------------- /bin/boilerplate/_extras/discuss.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Discussion 3 | --- 4 | FIXME 5 | 6 | {% include links.md %} 7 | -------------------------------------------------------------------------------- /bin/boilerplate/_extras/figures.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Figures 3 | --- 4 | 5 | {% include base_path.html %} 6 | {% include manual_episode_order.html %} 7 | 8 | 67 | 68 | {% comment %} Create anchor for each one of the episodes. {% endcomment %} 69 | 70 | {% for lesson_episode in lesson_episodes %} 71 | {% if site.episode_order %} 72 | {% assign episode = site.episodes | where: "slug", lesson_episode | first %} 73 | {% else %} 74 | {% assign episode = lesson_episode %} 75 | {% endif %} 76 |
77 | {% endfor %} 78 | 79 | {% include links.md %} 80 | -------------------------------------------------------------------------------- /bin/boilerplate/_extras/guide.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Instructor Notes" 3 | --- 4 | FIXME 5 | 6 | {% include links.md %} 7 | -------------------------------------------------------------------------------- /bin/boilerplate/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: lesson 3 | root: . # Is the only page that doesn't follow the pattern /:path/index.html 4 | permalink: index.html # Is the only page that doesn't follow the pattern /:path/index.html 5 | --- 6 | FIXME: home page introduction 7 | 8 | 9 | 10 | {% comment %} This is a comment in Liquid {% endcomment %} 11 | 12 | > ## Prerequisites 13 | > 14 | > FIXME 15 | {: .prereq} 16 | 17 | {% include links.md %} 18 | -------------------------------------------------------------------------------- /bin/boilerplate/reference.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: reference 3 | --- 4 | 5 | ## Glossary 6 | 7 | FIXME 8 | 9 | {% include links.md %} 10 | -------------------------------------------------------------------------------- /bin/boilerplate/setup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Setup 3 | --- 4 | FIXME 5 | 6 | 7 | {% include links.md %} 8 | -------------------------------------------------------------------------------- /bin/chunk-options.R: -------------------------------------------------------------------------------- 1 | # These settings control the behavior of all chunks in the novice R materials. 2 | # For example, to generate the lessons with all the output hidden, simply change 3 | # `results` from "markup" to "hide". 4 | # For more information on available chunk options, see 5 | # http://yihui.name/knitr/options#chunk_options 6 | 7 | library("knitr") 8 | 9 | fix_fig_path <- function(pth) file.path("..", pth) 10 | 11 | 12 | ## We set the path for the figures globally below, so if we want to 13 | ## customize it for individual episodes, we can append a prefix to the 14 | ## global path. For instance, if we call knitr_fig_path("01-") in the 15 | ## first episode of the lesson, it will generate the figures in 16 | ## `fig/rmd-01-` 17 | knitr_fig_path <- function(prefix) { 18 | new_path <- paste0(opts_chunk$get("fig.path"), 19 | prefix) 20 | opts_chunk$set(fig.path = new_path) 21 | } 22 | 23 | ## We use the rmd- prefix for the figures generated by the lessons so 24 | ## they can be easily identified and deleted by `make clean-rmd`. The 25 | ## working directory when the lessons are generated is the root so the 26 | ## figures need to be saved in fig/, but when the site is generated, 27 | ## the episodes will be one level down. We fix the path using the 28 | ## `fig.process` option. 29 | 30 | opts_chunk$set(tidy = FALSE, results = "markup", comment = NA, 31 | fig.align = "center", fig.path = "fig/rmd-", 32 | fig.process = fix_fig_path, 33 | fig.width = 8.5, fig.height = 8.5, 34 | fig.retina = 2) 35 | 36 | # The hooks below add html tags to the code chunks and their output so that they 37 | # are properly formatted when the site is built. 38 | 39 | hook_in <- function(x, options) { 40 | lg <- tolower(options$engine) 41 | style <- paste0(".language-", lg) 42 | 43 | stringr::str_c("\n\n~~~\n", 44 | paste0(x, collapse="\n"), 45 | "\n~~~\n{: ", style, "}\n\n") 46 | } 47 | 48 | hook_out <- function(x, options) { 49 | x <- gsub("\n$", "", x) 50 | stringr::str_c("\n\n~~~\n", 51 | paste0(x, collapse="\n"), 52 | "\n~~~\n{: .output}\n\n") 53 | } 54 | 55 | hook_error <- function(x, options) { 56 | x <- gsub("\n$", "", x) 57 | stringr::str_c("\n\n~~~\n", 58 | paste0(x, collapse="\n"), 59 | "\n~~~\n{: .error}\n\n") 60 | } 61 | 62 | hook_warning <- function(x, options) { 63 | x <- gsub("\n$", "", x) 64 | stringr::str_c("\n\n~~~\n", 65 | paste0(x, collapse = "\n"), 66 | "\n~~~\n{: .warning}\n\n") 67 | } 68 | 69 | knit_hooks$set(source = hook_in, output = hook_out, warning = hook_warning, 70 | error = hook_error, message = hook_out) 71 | -------------------------------------------------------------------------------- /bin/dependencies.R: -------------------------------------------------------------------------------- 1 | install_required_packages <- function(lib = NULL, repos = getOption("repos")) { 2 | 3 | if (is.null(lib)) { 4 | lib <- .libPaths() 5 | } 6 | 7 | message("lib paths: ", paste(lib, collapse = ", ")) 8 | missing_pkgs <- setdiff( 9 | c("rprojroot", "desc", "remotes", "renv"), 10 | rownames(installed.packages(lib.loc = lib)) 11 | ) 12 | 13 | install.packages(missing_pkgs, lib = lib, repos = repos) 14 | 15 | } 16 | 17 | find_root <- function() { 18 | 19 | cfg <- rprojroot::has_file_pattern("^_config.y*ml$") 20 | root <- rprojroot::find_root(cfg) 21 | 22 | root 23 | } 24 | 25 | identify_dependencies <- function() { 26 | 27 | root <- find_root() 28 | 29 | required_pkgs <- unique(c( 30 | ## Packages for episodes 31 | renv::dependencies(file.path(root, "_episodes_rmd"), progress = FALSE, error = "ignore")$Package, 32 | ## Packages for tools 33 | renv::dependencies(file.path(root, "bin"), progress = FALSE, error = "ignore")$Package 34 | )) 35 | 36 | required_pkgs 37 | } 38 | 39 | create_description <- function(required_pkgs) { 40 | d <- desc::description$new("!new") 41 | lapply(required_pkgs, function(x) d$set_dep(x)) 42 | d$write("DESCRIPTION") 43 | } 44 | 45 | install_dependencies <- function(required_pkgs, ...) { 46 | 47 | create_description(required_pkgs) 48 | on.exit(file.remove("DESCRIPTION")) 49 | remotes::install_deps(dependencies = TRUE, ...) 50 | 51 | if (require("knitr") && packageVersion("knitr") < '1.9.19') { 52 | stop("knitr must be version 1.9.20 or higher") 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /bin/generate_md_episodes.R: -------------------------------------------------------------------------------- 1 | generate_md_episodes <- function() { 2 | 3 | 4 | ## get the Rmd file to process from the command line, and generate the path 5 | ## for their respective outputs 6 | args <- commandArgs(trailingOnly = TRUE) 7 | if (!identical(length(args), 2L)) { 8 | stop("input and output file must be passed to the script") 9 | } 10 | 11 | src_rmd <- args[1] 12 | dest_md <- args[2] 13 | 14 | ## knit the Rmd into markdown 15 | knitr::knit(src_rmd, output = dest_md) 16 | 17 | # Read the generated md files and add comments advising not to edit them 18 | add_no_edit_comment <- function(y) { 19 | con <- file(y) 20 | mdfile <- readLines(con) 21 | if (mdfile[1] != "---") 22 | stop("Input file does not have a valid header") 23 | mdfile <- append( 24 | mdfile, 25 | "# Please do not edit this file directly; it is auto generated.", 26 | after = 1 27 | ) 28 | mdfile <- append( 29 | mdfile, 30 | paste("# Instead, please edit", basename(y), "in _episodes_rmd/"), 31 | after = 2 32 | ) 33 | writeLines(mdfile, con) 34 | close(con) 35 | return(paste("Warning added to YAML header of", y)) 36 | } 37 | 38 | vapply(dest_md, add_no_edit_comment, character(1)) 39 | } 40 | 41 | generate_md_episodes() 42 | -------------------------------------------------------------------------------- /bin/install_r_deps.sh: -------------------------------------------------------------------------------- 1 | Rscript -e "source(file.path('bin', 'dependencies.R')); install_required_packages(); install_dependencies(identify_dependencies())" 2 | -------------------------------------------------------------------------------- /bin/knit_lessons.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Only try running R to translate files if there are some files present. 4 | # The Makefile passes in the names of files. 5 | 6 | if [ $# -eq 2 ] ; then 7 | Rscript -e "source('bin/generate_md_episodes.R')" "$@" 8 | fi 9 | -------------------------------------------------------------------------------- /bin/lesson_initialize.py: -------------------------------------------------------------------------------- 1 | """Initialize a newly-created repository.""" 2 | 3 | 4 | import sys 5 | import os 6 | import shutil 7 | 8 | BOILERPLATE = ( 9 | '.travis.yml', 10 | 'AUTHORS', 11 | 'CITATION', 12 | 'CONTRIBUTING.md', 13 | 'README.md', 14 | '_config.yml', 15 | os.path.join('_episodes', '01-introduction.md'), 16 | os.path.join('_extras', 'about.md'), 17 | os.path.join('_extras', 'discuss.md'), 18 | os.path.join('_extras', 'figures.md'), 19 | os.path.join('_extras', 'guide.md'), 20 | 'index.md', 21 | 'reference.md', 22 | 'setup.md', 23 | ) 24 | 25 | 26 | def main(): 27 | """Check for collisions, then create.""" 28 | 29 | # Check. 30 | errors = False 31 | for path in BOILERPLATE: 32 | if os.path.exists(path): 33 | print('Warning: {0} already exists.'.format(path), file=sys.stderr) 34 | errors = True 35 | if errors: 36 | print('**Exiting without creating files.**', file=sys.stderr) 37 | sys.exit(1) 38 | 39 | # Create. 40 | for path in BOILERPLATE: 41 | shutil.copyfile( 42 | os.path.join('bin', 'boilerplate', path), 43 | path 44 | ) 45 | 46 | 47 | if __name__ == '__main__': 48 | main() 49 | -------------------------------------------------------------------------------- /bin/markdown_ast.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | # Use Kramdown parser to produce AST for Markdown document. 4 | 5 | require "kramdown" 6 | require "json" 7 | 8 | markdown = STDIN.read() 9 | doc = Kramdown::Document.new(markdown) 10 | tree = doc.to_hash_a_s_t 11 | puts JSON.pretty_generate(tree) 12 | -------------------------------------------------------------------------------- /bin/run-make-docker-serve.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | 8 | bundle install 9 | bundle update 10 | exec bundle exec jekyll serve --host 0.0.0.0 11 | -------------------------------------------------------------------------------- /bin/test_lesson_check.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | 3 | import lesson_check 4 | import util 5 | 6 | 7 | class TestFileList(unittest.TestCase): 8 | def setUp(self): 9 | self.reporter = util.Reporter() # TODO: refactor reporter class. 10 | 11 | def test_file_list_has_expected_entries(self): 12 | # For first pass, simply assume that all required files are present 13 | 14 | lesson_check.check_fileset('', self.reporter, lesson_check.REQUIRED_FILES) 15 | self.assertEqual(len(self.reporter.messages), 0) 16 | 17 | 18 | if __name__ == "__main__": 19 | unittest.main() 20 | -------------------------------------------------------------------------------- /code/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/code/.gitkeep -------------------------------------------------------------------------------- /codespell.txt: -------------------------------------------------------------------------------- 1 | hist 2 | fpr 3 | -------------------------------------------------------------------------------- /data/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/data/.gitkeep -------------------------------------------------------------------------------- /fig/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/fig/.gitkeep -------------------------------------------------------------------------------- /files/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/files/.gitkeep -------------------------------------------------------------------------------- /index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: lesson 3 | root: . # Is the only page that doesn't follow the pattern /:path/index.html 4 | permalink: index.html # Is the only page that doesn't follow the pattern /:path/index.html 5 | --- 6 | 7 | 8 | 9 | This tutorial explores Machine Learning using scikit-learn and PyTorch for applications in high energy physics. 10 | 11 | Extended from a [version developed by Luke Polson for the 2020 USATLAS Computing Bootcamp](https://lukepolson.github.io/HEP_ML_Lessons/). 12 | 13 | This lesson leads directly into a lesson ["Machine Learning on GPU"](https://hsf-training.github.io/hsf-training-ml-gpu-webpage/) originally developed by Anna Scaife. 14 | 15 | 16 | 17 | {% comment %} This is a comment in Liquid {% endcomment %} 18 | 19 | 20 | > ## Prerequisites 21 | > * A [Kaggle](https://www.kaggle.com/) account. Click [here to create an account](https://www.kaggle.com/account/login?phase=startRegisterTab&returnUrl=%2F) as described in the [Setup page](https://hsf-training.github.io/hsf-training-ml-webpage/setup.html) 22 | > * Basic Python knowledge, e.g. through the [Software Carpentry Programming with Python lesson](https://swcarpentry.github.io/python-novice-inflammation/) 23 | {: .prereq} 24 | 25 | Introduction 26 | ------------ 27 | 28 | Machine learning is everywhere in modern "big-data" science. As physicists and big-data scientists, it's a good idea to know a bit about machine learning. 29 | 30 | The aim of this lesson is to: 31 | - explore what it means to build a machine learning model 32 | - expand on concepts in machine learning that are essential to anyone working in big-data science 33 | 34 | > ## The skills we'll focus on: 35 | > 36 | > 1. Understanding a bit about machine learning 37 | > 2. Preparing data for machine learning 38 | > 3. Training some machine learning models 39 | > 4. Comparing some machine learning models 40 | {: .checklist} 41 | 42 | {% include curriculum.html %} 43 | 44 | Videos are provided at the top of each page to help guide you. For the sections without coding (Introduction, Mathematical Foundations, Neural Networks) the videos essentially take you through the text, so choose whichever way you learn best: video or reading. For the remaining sections, the videos take you through the coding live. 45 | 46 | {% include links.md %} 47 | -------------------------------------------------------------------------------- /plots/GradDescent.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/plots/GradDescent.PNG -------------------------------------------------------------------------------- /plots/Kaggle_register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/plots/Kaggle_register.png -------------------------------------------------------------------------------- /plots/act_functions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/plots/act_functions.png -------------------------------------------------------------------------------- /plots/copy_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/plots/copy_edit.png -------------------------------------------------------------------------------- /plots/flower.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/plots/flower.jpeg -------------------------------------------------------------------------------- /plots/intro_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/plots/intro_image.png -------------------------------------------------------------------------------- /plots/ml_populatir.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/plots/ml_populatir.PNG -------------------------------------------------------------------------------- /plots/nn.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/plots/nn.PNG -------------------------------------------------------------------------------- /plots/overfit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/plots/overfit.png -------------------------------------------------------------------------------- /plots/overfitted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/plots/overfitted.png -------------------------------------------------------------------------------- /plots/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/plots/tree.png -------------------------------------------------------------------------------- /plots/ttZ-2L-6j2b-SR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/plots/ttZ-2L-6j2b-SR.png -------------------------------------------------------------------------------- /plots/underfit_overfit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsf-training/hsf-training-ml-webpage/e32b05cda32f9fa001814cbac09c78029b180da9/plots/underfit_overfit.png -------------------------------------------------------------------------------- /reference.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: reference 3 | --- 4 | 5 | ## Glossary 6 | 7 | FIXME 8 | 9 | {% include links.md %} 10 | -------------------------------------------------------------------------------- /setup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Setup 3 | --- 4 | For this tutorial we will be using [Kaggle](https://www.kaggle.com/). Kaggle offers a no-setup, customizable, Jupyter Notebooks environment. Make sure you have 5 | 6 | * [Created an account by clicking here](https://www.kaggle.com/account/login?phase=startRegisterTab&returnUrl=%2F) <--- 7 | 8 | ![Kaggle register](plots/Kaggle_register.png){:width="40%"} 9 | 10 | * Signed in 11 | 12 | Once you are signed in, you will be given access to the full resources of a Kaggle Jupyter notebook kernel (16 GB of RAM). Once you are signed in please use the following link: 13 | 14 | * [Please click here](https://www.kaggle.com/meirinevans/introduction-to-machine-learning/edit) <--- 15 | 16 | ![Copy and Edit](plots/copy_edit.png){:width="40%"} 17 | 18 | * Click Copy and Edit in the top-right corner to have your own version of the notebook! 19 | 20 | Your feedback is very welcome! Most helpful for us is if you "[Improve this page on GitHub](https://github.com/hsf-training/hsf-training-ml-webpage/edit/gh-pages/setup.md)". If you prefer anonymous feedback, please [fill this form](https://forms.gle/XBeULpKXVHF8CKC17). 21 | 22 | {% include links.md %} 23 | --------------------------------------------------------------------------------