Skip to content
This repository has been archived by the owner on May 21, 2021. It is now read-only.

Web Lesson Outlines (by Module)

David M. Rogers edited this page Jun 17, 2020 · 10 revisions

0. Tutorial Introduction and Setup

Lead: DavidB

Lesson Outline

  • Establish and setup GitHub account
  • Other service accounts?
  • Access to development tools (local or remote)?

Notes on Future Content Revisions


1. Overview

Lead: DavidB

Lesson Outline

No lessons for this module

Notes on Future Content Revisions


2. Agile Project Management

Lead: JimW

Lesson Outline

  • Small Team Models, Challenges.
  • Agile workflow management for small teams.
    • Intro to terminology and approaches.
    • Overview of Kanban.
    • Free tools: Trello, GitHub.
  • Epic, story, task breakdown for common example
  • PSIP: Productivity and Sustainability Improvement Planning.

Notes on Future Content Revisions

For now, I just copied the existing outline for this talk, except that I added a bullet for speaking directly to our example.


3. Git Workflows

Lead: RinkuG and JimW

Lesson Outline

  • Distributed version control
  • Centralized workflows
  • Branches
  • More advanced workflows
  • Choosing a workflow for our example
    • Use cases for our example

Notes on Future Content Revisions

I started with the general outline for the existing git workflow talk, and added one bullet and one subbullet to speak directly to our example.


4. Introduction to Testing

Lead: DeborahS and AnshuD

Lesson Outline

Notes on Future Content Revisions


5. Software Design

Lead: AnshuD

Lesson Outline

Notes on Future Content Revisions


6. Testing Part 2

Lead: AnshuD

Lesson Outline

Notes on Future Content Revisions


7. Continuous Integration

Lead: @markcmiller86

Notes:

  • Can maybe use material from here
  • Might be good to demo GitLab CI for sake of nod to ECP-CI but probably can't do that and GitHub example

Lesson Outline

  • A CI check is not necessarily same as test. It may be but doesn't have to be.
  • What are your project's priorities?
    • What configurations (OS, compilers, math libs, etc.)
    • In the context of heat equation example...maybe initial value problems more important than boundary value?
    • Bit-for-bit identical (easy) vs. fuzzy (harder)?
  • Survey project's existing tests for candidates for CI.
    • We have some known inputs and outputs already we can use
  • Identify dependencies and how they'll be instantiated when needed.
    • Could have thread, MPI and/or GPU dependencies if we have parallel heat equation implementation
  • Identify services/resources to be used as well as their constraints.
    • Free: Travis, CircleCI, Azure, ...
    • ECP-CI resources
  • Example GitHub evolution
    • Simple compilation check
      • Write .travis.yml file
    • Compilation and run linear steady state check
      • Re-write .travis.yml file
      • Re-factor CI control logic to avoid re-write of .travis.yml
    • Could introduce an illustrative dependence such as Raja, Boost, PAPI counters or something
  • Define process for how to add new CI checks

Notes on Future Content Revisions


8. Refactoring

Lead: AnshuD

Lesson Outline

  • English Composition 101 - draft, revise, repeat
    • Carefully craft take-home message / key arguments / theorems to prove
      1. Starting idea: "We take 2nd order finite differences in each direction and add them together."
      2. Revised idea: "Given a finite element basis in H^1, the Laplacian operator can be represented by a sparse matrix acting on its coefficients."
      3. Starting idea: "The integral of the solution temperature should be tracked over time."
      4. Revised idea: "The total heat energy in the domain is a linear functional of the solution (temperature), and should only change due to heat flow into the domain."
      5. Starting idea: "Since the heat equation is first-order in time, we can use Euler or Adams-Bashforth methods to propagate a solution over a small time interval."
      6. Revised idea: "The solution coefficients at the next time-point can be computed by solving a sparse linear equation whose coefficients depend on integration method."
    • Arrange supporting points
    • Using an outline to map your software
  • Define main characters
    • data structures that don't hold state
    • data structures that respond to events (objects)
  • Define re-usable verbs
  • Re-consider whether your use cases match the design

Notes on Future Content Revisions


9. Reproducibility

Lead: PatG and DavidR (@frobnitzem)

Lesson Outline

  • Terminology - reproducible vs. replicable
  • Past Science Controversies
  • Importance for HPC Specifically
    • ACS TOMS
    • SC20
    • Increasing Attention to Computational Artifacts in other journals/confs.
    • Mini-conclusion: Reproducibility is Integral to Development
  • HOWTO
    • Don't prematurely optimize
    • During development
    • After development
    • Side-bar on experimental design
    • Side-bar on API design by contract
    • During experiments
    • After experiments
  • Other Resources

Notes on Future Content Revisions

  • Needs note on recent Covid pandemic models - flattening the curve is important, but some quantitative models were not replicable
  • Needs examples of reproducibility outputs for codes doing this well - tagging, output header notes, reproducible build processes & internal storage of compile-options, nightly checks, etc.
  • Needs examples of adding these to a small test code.

10. Licensing

Lead: DavidB

Lesson Outline

  • Choosing a software license
  • Documenting the license in your repository
  • Adding Developer Certificate of Origin sign-off to your repository
  • Other "community" files
    • Code of Conduct
    • Support
    • Citation

Notes on Future Content Revisions


11. Summary

Lead: DavidB

Lesson Outline

No lessons for this module

Notes on Future Content Revisions

12. Quick Review

Lead: JimW

Lesson Outline

Notes on Future Content Revisions