diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b85731841..8b0684820 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,13 +5,22 @@ Multiple tools are provided for contributors to make slideshows, leader-guided w ## Table of contents -- [Content organization](#content-organization) -- [Lesson slides with Reveal.js](#lesson-slides-with-revealjs) - - [Developing slides](#developing-slides) - - [Check embedded links](#check-embedded-links) -- [Exercises, workshops and activities](#exercises-workshops-and-activities) - - [Stand-alone Rust workshops and activities](#stand-alone-rust-workshops-and-activities) - - [Conceptual workshops and exercises](#conceptual-workshops-and-activities) +- [Polkadot Blockchain Academy Contributors Guide](#polkadot-blockchain-academy-contributors-guide) + - [Table of contents](#table-of-contents) + - [Content organization](#content-organization) + - [Lesson slides with Reveal.js](#lesson-slides-with-revealjs) + - [_Quick start_](#quick-start) + - [Node.js](#nodejs) + - [Yarn](#yarn) + - [Using speaker notes](#using-speaker-notes) + - [Presenting](#presenting) + - [Formatting Markdown, TOML, JSON](#formatting-markdown-toml-json) + - [Check embedded links](#check-embedded-links) + - [Exercises, workshops and activities](#exercises-workshops-and-activities) + - [Stand-alone Rust workshops and activities](#stand-alone-rust-workshops-and-activities) + - [Local IDE](#local-ide) + - [Online IDE](#online-ide) + - [Conceptual workshops and activities](#conceptual-workshops-and-activities) ## Content organization @@ -95,42 +104,6 @@ yarn --- -**To see what reveal can do, please view the slides and their source for details:** -[](./faculty_resources/0-how_to_use_reveal_slides.md) - -- [How-to use reveal slides](./faculty_resources/0-how_to_use_reveal_slides.md) for an overview reveal's _powerful_ features. -- [Lecture template slides](./faculty_resources/1-TEMPLATE_lecture_slides.md) that gives the structure most lessons should use to start with. -- [Copy & paste slide templates](./faculty_resources/2-TEMPLATE_copy_paste_reveal_slides.md) that are styled to use in your content. - ---- - -### Developing slides - -Running this command will open a new browser tab and _watch for file changes_ (update on every time you save a file in this repo): - -```sh -yarn start -``` - -**There is a [base slide template example](./faculty_resources/2-TEMPLATE_copy_paste_reveal_slides.md) that is highly suggested to use as a base to start all lesson slides.** -This template can be used just copy and change slide by slide the content, and not worry with styling. -If you do need custom style, please just comment in the slides with a code comment that says as much: - -```md -tilted! - - -``` - -
-If you need more of an explanation on how to use `reveal-md`'s features, see below (click to toggle) - -When writing slides, separate each one using `---`. - -Optionally, you can separate slides vertically using `---v` between slides. - -For distinct parts of the lecture, with some core topic being presented as the, it may be a good idea to stack those slides vertically for easier navigation. - #### Using speaker notes It's sometimes useful to have speaker notes for your slides. @@ -146,67 +119,6 @@ This is a note just for you. All these lines are just seen in speaker view only. ``` -#### Transitions - -To add transitions in a slide: - -```md -_This will render only once the right or down arrow is pressed by presenter._ - - -``` - -TODO: update this once we're more familiar with the css stuff. - -#### Code highlighting - -You can add code snippets to your slides with line highlighting. -You can also animate to step through each highlight with `|` delimited sections of lines as a _fragment_: - -````md - - - - -```rust [0|1,13|4-8] -fn largest_i32(list: &[i32]) -> i32 { - let mut largest = list[0]; - - for &item in list { - if item > largest { - largest = item; - } - } - - largest -} - -fn largest_char(list: &[char]) -> char { - let mut largest = list[0]; - - for &item in list { - if item > largest { - largest = item; - } - } - - largest -} -``` -```` - -#### Custom theme and CSS - -The templates can be used just copy and change slide by slide the content, and not worry with styling. - -If you do need custom style, please just comment in the slides with a code comment that says as much: - -```md -tilted! - - -``` - #### Presenting Once you've followed the set-up instructions and have the repository running locally, here are the basic ways to navigate through presenting your slides: diff --git a/faculty_resources/0-how_to_use_reveal_slides.md b/faculty_resources/0-how_to_use_reveal_slides.md deleted file mode 100644 index 64f801cc5..000000000 --- a/faculty_resources/0-how_to_use_reveal_slides.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: How-to use Reveal.js -description: How to use reveal.js -duration: 5 minuets ---- - -# How-to use Reveal.js - -These slides are built with [reveal.js](https://revealjs.com/). - -Please first view the [CONTRIBUTING.md](../CONTRIBUTING.md) guide on how to use these slides. - -These slides serve as a feature demo of reveal for you! 🎉 - ---- - -## What are we going to see: - -- How to use Reveal.js Features - - - Useful `reveal.js` tips - - Speaker Notes - -- [Template Slides](#template-slides) - ---- - -## How to use Reveal.js Features - -_Press the `down/up` keys to navigate \_vertical_ slides\_ - -Try doing down a slide. - - - ----v - -### Use the keybindings! - -- **Overview mode**: “O” to see a birds-eye view of your presentation, “ESC” to return to the highlighted slide (you can quickly navigate with arrows) - -- **Full-screen**: “F”, “ESC” to exit full-screen mode - -- **Speaker mode**: “S” it synchronizes 2 windows: one with the presentation, and another with a timer and all speaker notes! - -- **Zoom-in**: ALT+click make the view zoom at the position of your mouse’s pointer; very useful to look closely at a picture or chart surrounded by too much bullet points. - ----v - -## Speaker Notes & Viewer - -_Press the `s` key to bring up a popup window with speaker view_ - -**You need to unblock popups to have the window open** - -Notes: - -This is a note just for you. Set under a line in your slide starting with "`Note`:" all -subsequent lines are just seen in speaker view. - ---- - -# Template slides - -😎 Copy&paste development with the [lesson template slides](./1-TEMPLATE_lecture_slides.md) - ---- - -# How to use Polkadot icons - -All Polkadot icons exist under the directory `/assets/icons/polkadot/{type}/{icon_name}.svg`, where: - -- `type` can be one of: `line`, `solid`, `2color`; -- `icon_name` is the name of the icon (e.g. `Alice`, `Oracles` etc); - -> You can find the icons' relative names by browsing to [Polkadot icons set - https://icons.polkadot.network](https://icons.polkadot.network) - ----v - -In order to effectively use those icons in their default form (meaning `line` in white, `solid` in Polkadot pink and `2color` in a combination of white and Polkadot pink) you can simply do: - -```html - - - -``` - -
and the outcomes, accordingly, will be: - -
-
- - ----v - -For using custom colors and/or css attributes, you will need to add the `style` attribute on the `img` tag with the needed changes: - -```html - -``` - -
and the outcome, will be: - - - -> For altering color the `filter` arg should be used[ a filter generator](https://angel-rs.github.io/css-color-filter-generator/) can be used for extracting code from hex color) - ---- - -# More help needed? - -👋 Please reach out to the academy content & docs team on element for support! diff --git a/faculty_resources/1-TEMPLATE_lecture_slides.md b/faculty_resources/1-TEMPLATE_lecture_slides.md deleted file mode 100644 index a32deac31..000000000 --- a/faculty_resources/1-TEMPLATE_lecture_slides.md +++ /dev/null @@ -1,163 +0,0 @@ ---- -title: Lecture Template Slides # Also update the h1 header on the first slide to the same name -description: Describe your slides here -duration: 1 hour ---- - -# Lecture Title - ---- - -### Outline - - - - - -1. [Pre-requisites](#pre-requisites) -1. [Major topic A](#major-topic-a) -1. Major topic B -1. [Exercise X](#exercise-title) -1. Major topic C -1. [Conclusion](#conclusion) -1. [Next Steps](#next-steps) -1. [References](#references) - - - ---- - -## Pre-requisites - -No background in X is necessary. - -However, the following are expected: - - - -- Y -- Z -- \\(\alpha\\) - - - ---- - -### _At the end of this lecture, you will be able to:_ - - - - - -- Describe ... -- Navigate ... -- Justify ... - - - ---- - -## Major topic A - - - -- Use some bullets -- To make a few points - - - -More context here. - -And even more here... and more and more... - -Notes: - -Speaker view ONLY notes - ---- - -# An Important Point - -### _Make it clear_ - -Notes: - -Stuff you should remember to say - ---- - -# Exercise Title - -### _Describe it here_ - ---- - -## Exercise Instructions - - - - - -1. Uno -1. Dos -1. Tres - - - -Notes: - -Make sure to include things here to say to students, perhaps a hint or two. -Realize that students will be able to view the speaker's notes, as they will have access to them on their devices. - ---- - -## Conclusion - - - ---- - -## Next Steps - - - - - -1. Eins -1. Zwei -1. Drei - - - ---- - -## References - - diff --git a/faculty_resources/2-TEMPLATE_copy_paste_reveal_slides.md b/faculty_resources/2-TEMPLATE_copy_paste_reveal_slides.md deleted file mode 100644 index 113ffb4fa..000000000 --- a/faculty_resources/2-TEMPLATE_copy_paste_reveal_slides.md +++ /dev/null @@ -1,1082 +0,0 @@ ---- -title: Copy and Paste Slide Templates # Also update the h1 header on the first slide to the same name -description: A sentence for what these slides are about. -duration: 15 minuets -# PBA has a theme: "reveal-md/PBA-theme.css", alternatively, you can use a named default like "night" from this list: https://github.com/hakimel/reveal.js/tree/master/css/theme/source -# Add custom css files for your slides here, comma separated: -separator: "\r?\n---\r?\n" -verticalSeparator: "\r?\n---v\r?\n" -# Below can be any of these: https://revealjs.com/config/ -revealOptions: - transition: "slide" # animation between slides = none/fade/slide/convex/concave/zoom - backgroundTransition: "fade" # background swap between slides = none/fade/slide/convex/concave/zoom - slideNumber: true - controls: true - progress: true ---- - -# Copy and Paste Slide Templates - ---- - -### _At the end of this lecture, you will be able to:_ - -- Describe ... -- Navigate ... -- Justify ... - ---- - -## Here is a topic - -- Use some bullets -- To make a few points - -Notes: - -Speaker view ONLY notes - ---- - -## Here is an important point - -#### _Make it clear_ - -Notes: - -Stuff you should remember to say - ---- - -## Pictures - - - - -#### _Leave a note on why this one matters_ - ---- - -## Code Highlight & Transitions - -Syntax for many langs is possible, and very easy to style. -You can _and should_ use highlighting of lines in a large snippets of code. - -You an also add comments to make "fragments" for specific components - - - -_They can ordered how you see fit!_ - - - -See the source for syntax - - - ---- - -## Rust Example - -```rust [0|1,6|15-25|30-31] -#![cfg_attr(not(feature = "std"), no_std)] -// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] - -// Make the Wasm binary available. -#[cfg(feature = "std")] -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -mod weights; -pub mod xcm_config; - -/// BlockId type as expected by this runtime. -pub type BlockId = generic::BlockId; - -/// The SignedExtension to the basic transaction logic. -pub type SignedExtra = ( - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, - frame_system::CheckWeight, - pallet_transaction_payment::ChargeTransactionPayment, -); - -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; - -/// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; - -/// Executive: handles dispatch to the various modules. -pub type Executive = frame_executive::Executive< - Runtime, - Block, - frame_system::ChainContext, - Runtime, - AllPalletsWithSystem, ->; -``` - ---- - -## Design system examples - -Use `o` to open the overview mode and explore slides here. - -You can see the source of these slides to copy&paste
-as slide templates in your slides! - - - -1. Columns -1. Images -1. MarkDown examples - - - ---- - -## Two Column - - - - -### Center 1 - -Using
`` - - - - -### Center 2 - -Using
`` - - -
- ----v - -## Two Column - - -```html - - - -### Center 1 - -Using
`` - - - - -### Center 2 - -Using
`` - - -
-``` - ---- - -## Three Columns - - - - -### Left - -Using
`` - - - - -### Center - -Using
`` - - - - -### Right - -Using
`` - - -
- ----v - -## Three Columns - - -```html - - - -### Left - -Using
`` - - - - -### Center - -Using
`` - - - - -### Right - -Using
`` - - -
-``` - ---- - - - - -### This column has a bit of a statement to make. - - - - -- Lorem ipsum dolor sit amet, consectetur adipiscing elit -- Ut enim ad minim veniam, quis nostrud exercitation -- Duis aute irure dolor in reprehenderit in -- Excepteur sint occaecat cupidatat non proident, sunt in - - - - ----v - - -```html - - - -### This column has a bit of a statement to make. - - - - -- Lorem ipsum dolor sit amet, consectetur adipiscing elit -- Ut enim ad minim veniam, quis nostrud exercitation -- Duis aute irure dolor in reprehenderit in -- Excepteur sint occaecat cupidatat non proident, sunt in - - - -``` - ---- - -## Images - - - ----v - - -```html - -``` - ---- - - - -More info on reveal/reveal-md backgrounds: - -- https://revealjs.com/backgrounds/ -- https://www.npmjs.com/package/reveal-md custom styles attributes - ----v - - -```html - - -More info on reveal/reveal-md backgrounds: - -- https://revealjs.com/backgrounds/ -- https://www.npmjs.com/package/reveal-md custom styles attributes -``` - ----v - - - - -```html - - - - - -### Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. - - - - -- Lorem ipsum dolor sit amet, consectetur adipiscing elit -- Ut enim ad minim veniam, quis nostrud exercitation -- Duis aute irure dolor in reprehenderit in -- Excepteur sint occaecat cupidatat non proident, sunt in - - - -``` - ---- - - - -# Section title - ----v - - - - -```html - - -# Section title -``` - ---- - -> A quote of myself, saying great stuff, as always. - -Source: me™ at the last event - ---- - -Testing **bold** and _italic_ markdown texts! - - -```html -Testing **bold** and *italic* markdown texts! -``` - ---- - -## Rust Example - -```rust [0|1,6|15-25|30-31] -#![cfg_attr(not(feature = "std"), no_std)] -// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] - -// Make the Wasm binary available. -#[cfg(feature = "std")] -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -mod weights; -pub mod xcm_config; - -/// BlockId type as expected by this runtime. -pub type BlockId = generic::BlockId; - -/// The SignedExtension to the basic transaction logic. -pub type SignedExtra = ( - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, - frame_system::CheckWeight, - pallet_transaction_payment::ChargeTransactionPayment, -); - -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; - -/// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; - -/// Executive: handles dispatch to the various modules. -pub type Executive = frame_executive::Executive< - Runtime, - Block, - frame_system::ChainContext, - Runtime, - AllPalletsWithSystem, ->; -``` - ----v - - -~~~ - -## Rust Example - -```rust [0|1,6|15-25|30-31] -#![cfg_attr(not(feature = "std"), no_std)] -// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] - -// Make the Wasm binary available. -#[cfg(feature = "std")] -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -mod weights; -pub mod xcm_config; - -/// BlockId type as expected by this runtime. -pub type BlockId = generic::BlockId; - -/// The SignedExtension to the basic transaction logic. -pub type SignedExtra = ( - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, - frame_system::CheckWeight, - pallet_transaction_payment::ChargeTransactionPayment, -); - -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; - -/// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; - -/// Executive: handles dispatch to the various modules. -pub type Executive = frame_executive::Executive< - Runtime, - Block, - frame_system::ChainContext, - Runtime, - AllPalletsWithSystem, ->; -``` - -~~~ - ---- - - - - -### Column + Code - -- Some -- Observations -- Others - - - - -```rust [0|1,13|4-8] -fn largest_i32(list: &[i32]) -> i32 { - let mut largest = list[0]; - - for &item in list { - if item > largest { - largest = item; - } - } - - largest -} - -fn largest_char(list: &[char]) -> char { - let mut largest = list[0]; - - for &item in list { - if item > largest { - largest = item; - } - } - - largest -} - -fn main() { - let number_list = vec![34, 50, 25, 100, 65]; - - let result = largest_i32(&number_list); - println!("The largest number is {}", result); - assert_eq!(result, 100); - - let char_list = vec!['y', 'm', 'a', 'q']; - - let result = largest_char(&char_list); - println!("The largest char is {}", result); - assert_eq!(result, 'y'); -} -``` - - - - ----v - - -```html - - - -### Column + Code - -- Some -- Observations -- Others - - - - - -```rust [0|1,13|4-8] -fn largest_i32(list: &[i32]) -> i32 { - let mut largest = list[0]; - - for &item in list { - if item > largest { - largest = item; - } - } - - largest -} - -fn largest_char(list: &[char]) -> char { - let mut largest = list[0]; - - for &item in list { - if item > largest { - largest = item; - } - } - - largest -} - -fn main() { - let number_list = vec![34, 50, 25, 100, 65]; - - let result = largest_i32(&number_list); - println!("The largest number is {}", result); - assert_eq!(result, 100); - - let char_list = vec!['y', 'm', 'a', 'q']; - - let result = largest_char(&char_list); - println!("The largest char is {}", result); - assert_eq!(result, 'y'); -} -``` - - - -```` - ---- - -## Tables - -| Tables | Are | Cool | -| ------------------- | :-----------------: | ----------------------: | -| col 1 is | left-aligned | $1600 | -| col 2 is | centered | $12 | -| col 3 is | right-aligned | $1 | -| This row sure has a | _lot_ of text so it | spaces the columns outs | - ----v - -``` -| Tables | Are | Cool | -| ------------------- | :-----------------: | ----------------------: | -| col 1 is | left-aligned | $1600 | -| col 2 is | centered | $12 | -| col 3 is | right-aligned | $1 | -| This row sure has a | _lot_ of text so it | spaces the columns outs | -``` - ---- - -## Math - -KaTeX/LaTeX rendered within blocks with "`$$`" delimiters - -$$J(\theta_0,\theta_1) = \sum_{i=0}$$ - -In line uses "`\\(`" and "`\\)`" to render: \\(\alpha\beta\gamma\\) -. - -More info: https://revealjs.com/math/ - ---- - -## Charts - -

-A plugin for Reveal.js allowing to easily add charts using Chart.js. -

- -

There is a known bug:
Chart (meaning the < canvas > tag) needs to be in a full HTML slide (no md allowed); this means that the whole slide that contains a chart MUST be written in plain HTML. - ----v - - - - - ----v - -### The code - -```html - - - -``` - - - Note : < !-- and --> are intentional - - ----v - -

-
Bar chart with CSV data
-
- - January, February, March, April, May, June, July - My first dataset, 65, 59, 80, 81, 56, 55, 40 - My second dataset, 28, 48, 40, 19, 86, 27, 90 - -
-
- ----v - -### Previous slides' code: - -```html -
-
Bar chart with CSV data
-
- - January, February, March, April, May, June, July My first dataset, 65, 59, 80, 81, 56, 55, 40 My second dataset, - 28, 48, 40, 19, 86, 27, 90 - -
-
-``` - ----v - -
-
Stacked bar chart from CSV file with JSON configuration
-
- - - -
-
(There is a data.csv file located under same dir in order for this slide to work
-
- ----v - -### Previous slide's code: - -```html -
-
Stacked bar chart from CSV file with JSON configuration
-
- - - -
-
-``` - ---- - -# Mermaid Diagrams - -[Mermaid](https://mermaid.js.org) lets you create diagrams and visualizations using text and code. - -It is a JavaScript based diagramming and charting tool that renders Markdown-inspired text definitions to create and modify diagrams dynamically. - -First of all lets see some examples of diagrams that Mermaid can show with its integration with revealJS; - ----v - -### [A Flowchart](https://mermaid.js.org/syntax/flowchart.html) - - - %%{init: {'theme': 'dark', 'themeVariables': { 'darkMode': true }}}%% - flowchart TD - A(Start) --> B{Is it?}; - B -- Yes --> C(OK); - C --> D(Rethink); - D --> B; - B -- No ----> E(End); - - ----v - -### And its code - - -```html - - %%{init: {'theme': 'dark', 'themeVariables': { 'darkMode': true }}}%% - flowchart TD - A(Start) --> B{Is it?}; - B -- Yes --> C(OK); - C --> D(Rethink); - D --> B; - B -- No ----> E(End); - -``` - ----v - -### Entity relationship diagram - - - erDiagram - Node ||--o{ Wallet : places_order - Wallet ||--|{ Account : owner - Node }|..|{ Some-IP : uses - - ----v - -### And its code - - -```html - - erDiagram - Node ||--o{ Wallet : places_order - Wallet ||--|{ Account : owner - Node }|..|{ Some-IP : uses - -``` - ----v - -### Sequence diagram - - - sequenceDiagram - Alice->>John: Hello John, how are you? - John-->>Alice: Great! - Alice-)John: See you later! - - ----v - -### And its code - - -```html - - sequenceDiagram - Alice->>John: Hello John, how are you? - John-->>Alice: Great! - Alice-)John: See you later! - -``` - ----v - -### Class Diagram - - - classDiagram - note "From Duck till Zebra" - Animal <|-- Duck - note for Duck "can fly\ncan swim\ncan dive\ncan help in debugging" - Animal <|-- Fish - Animal <|-- Zebra - Animal : +int age - Animal : +String gender - Animal: +isMammal() - Animal: +mate() - class Duck{ - +String beakColor - +swim() - +quack() - } - class Fish{ - -int sizeInFeet - -canEat() - } - class Zebra{ - +bool is_wild - +run() - } - - ----v - -### And its code - - -```html - - classDiagram - note "From Duck till Zebra" - Animal <|-- Duck - note for Duck "can fly\ncan swim\ncan dive\ncan help in debugging" - Animal <|-- Fish - Animal <|-- Zebra - Animal : +int age - Animal : +String gender - Animal: +isMammal() - Animal: +mate() - class Duck{ - +String beakColor - +swim() - +quack() - } - class Fish{ - -int sizeInFeet - -canEat() - } - class Zebra{ - +bool is_wild - +run() - } - -``` - ----v - -### State diagram (v2) - - - stateDiagram-v2 - [*] --> Still - Still --> [*] - - Still --> Moving - Moving --> Still - Moving --> Crash - Crash --> [*] - - - ----v - -### And its code - - -```html - - stateDiagram-v2 - [*] --> Still - Still --> [*] - - Still --> Moving - Moving --> Still - Moving --> Crash - Crash --> [*] - -``` - ----v - -### User Journey - - - journey - title My working day - section Go to work - Make tea: 5: Me - Go upstairs: 3: Me - Do work: 1: Me, Cat - section Go home - Go downstairs: 5: Me - Sit down: 5: Me - - ----v - -### And its code - - -```html - - journey - title My working day - section Go to work - Make tea: 5: Me - Go upstairs: 3: Me - Do work: 1: Me, Cat - section Go home - Go downstairs: 5: Me - Sit down: 5: Me - -``` - ----v - -### Gantt - - - gantt - apple :a, 2017-07-20, 1w - banana :crit, b, 2017-07-23, 1d - cherry :active, c, after b a, 1d - - ----v - -### And its code - - -```html - - gantt - apple :a, 2017-07-20, 1w - banana :crit, b, 2017-07-23, 1d - cherry :active, c, after b a, 1d - -``` - ----v - -### Pie Chart - - - pie title Pets adopted by volunteers - "Dogs" : 386 - "Cats" : 85 - "Rats" : 15 - - ----v - -### And its code - - -```html - - pie title Pets adopted by volunteers - "Dogs" : 386 - "Cats" : 85 - "Rats" : 15 - -``` - ----v - -### Git Graph - - - gitGraph - commit - commit - branch develop - checkout develop - commit - commit - checkout main - merge develop - commit - commit - - ----v - -### And its code - - -```html - - gitGraph - commit - commit - branch develop - checkout develop - commit - commit - checkout main - merge develop - commit - commit - -``` - ----v - -### Useful links - -- [Mermaid Syntax](https://mermaid.js.org/syntax/flowchart.html) -- [Mermaid Live Editor with examples](https://mermaid.live/) - ---- - -# More help needed? - -_Please reach out to the academy content & docs team on element for support!_ diff --git a/faculty_resources/3-content_workshop_slides.md b/faculty_resources/3-content_workshop_slides.md deleted file mode 100644 index 40041b55a..000000000 --- a/faculty_resources/3-content_workshop_slides.md +++ /dev/null @@ -1,599 +0,0 @@ ---- -title: Content Workshop - Faculty Briefing -description: Briefing for Instructors and TAs contributing to the Academy -duration: 1 hour ---- - -# Content Workshop - -### _Faculty Briefing_ - ---- - - - -# Kahoot Game - -Notes: - -- start quiz game: https://play.kahoot.it/v2/?quizId=54f680c9-5040-4c6d-9d02-480843ee53a4 -- edit : https://create.kahoot.it/share/academyretreatsession/54f680c9-5040-4c6d-9d02-480843ee53a4 - ---- - -## Session Overview - - - -1. Introductory Game -1. Logistics (times, dates, location) -1. Curriculum Overview -1. Formal commitments from Faculty -1. Pedagogy - Teaching Tips -1. Content Brainstorming -1. Guest Lessons - - - ---- - -## Typical Day at the Academy - - - -- 8:00 - 9:00: Breakfast (Catered) -- 9:00 - 12:00: Morning Session -- 12:00 - 13:00: Lunch Break (Catered) -- 13:00 - ~16:00: Afternoon Session - - Session can end between 15:00 and 16:30 at instructor's discretion - - Allows finding a good stopping point - - No need to "fill" (aka waste) time - - No need to rush to finish a point -- Dinner is NOT Catered -- Some nights will have a Guest Lesson - - - ---- - -## Modules and Assignments - - - - - - -1. Cryptography - 2 Days -2. Econ & Game Theory - 2 Days -3. Assignment 1 -4. Blockchain - 2.5 Days -5. Substrate - 2.5 Days -6. Assignment 2 -7. FRAME - _5 Days_ - - - - -8. Assignment 3 -9. Polkadot - 2.5 Days -10. Smart Contracts - 2.5 Days -11. Assignment 4 -12. XCM - 2.5 Days -13. Maybe Optional Ungraded Assignment - - - - - - ---- - -## Universidad De Buenos Aires - - - ----v - - - ----v - - - ----v - - - ----v - - - ----v - - - ----v - - - ---- - - - -## Commitment Time - - - -1. Review exact dates for each module -1. Make some **Formal Commitments** - - - -Notes: - -This is the part where I'm asking each of you to make a formal commitment in front of each other. Don't take this lightly! Don't say you will expecting this to be low priority and last minute work for you. -This endeavor will only succeed with everyone doing their part. If you cannot commit to the dates & to deliver content, we need to know now. - ----v - -## What am I signing up for? - -### Instructors are the _Owner_ of content creation and delivery. - - - - -
- -
- -
- - -- Ultimately responsible for the success of the module. -- Coordinate with edu. team and TAs to do this. - - -
- - - ----v - -### Module 1 - Cryptography - - - -- Instructor: (Hopefully) Isaac DeFrain -- TAs: Dan, Giulia, Hector -- Dates: January 10 - 11 - -**_Do you commit?_** - -Notes: - -We are still struggling to get an offer to Isaac. I've done everything I can to make this happen. Can the TAs commit? - ----v - -### Module 2 - Economics - - - -- Instructors: Samuel -- TAs: Jonas, Florian, Alfonso -- Dates: January 12 - 13 - -**_Do you commit?_** - -Notes: - -Understood that, unfortunately, Jonas cannot be present this time. He has done great work revising already. Can the others commit. - ----v - -### Module 3 - Blockchain - - - -- Instructor: Joshy Orndorff -- TAs: Dan, Andrew, Isaac (Hopefully) -- Dates: January 16 - 18 - -✅ Already committed - -Notes: - -Except Isaac doesn't have an offer yet. He is willing to commit but we're waiting on... IDK - ----v - -### Module 4 - Substrate - - - -- Instructor: Kian -- TAs: Andrew, Shawn, Dan, Joshy -- Dates: January 18 - 20 - -**_Do you commit?_** - ----v - -### Module 5 - FRAME - - - -- Instructor: Shawn -- TAs: Kian, Dan, Hector, Alex T -- Dates: January 23 - 27 - -**_Do you commit?_** - ----v - -### Module 6 - Polkadot - - - -- Instructors: Rob, Andronik -- TAs: Kian, Shawn -- Dates: January 30 - February 1 - -**_Do you commit?_** - -Notes: - -Understood that Rob cannot be present for February 1st. - ----v - -### Module 7 - Smart Contracts - - - -- Instructors: Michi, Alex T -- TAs: Ricardo, Hector -- Dates: February 1 - 3 - -**_Do you commit?_** - ----v - -### Module 8 - XCM - - - -- Instructors: Kieth, Gorka -- TAs: Hector, Andrew -- Dates: February 6 - 8 - -**_Do you commit?_** - -Notes: - -Gorka is from the Moonbeam team and has already committed. - ----v - - - -## Alright! We have a TEAM! - - - ---- - -## Pedagogy - - - -_The approach to teaching, is the theory and practice of learning,_ - -Biggest feedback from wave 1: -**_Too much boring lecture_** - - - - - -Notes: - -You are all very smart and have many interesting things to teach our students. But nobody can maintain focus for three straight hours. Nor do they want to. Nor do they deserve to be subjected to that. - ----v - -### Common Fallacy: Lectures in all Lessons - -> I want to do more hands-on stuff... -> -> but the time is short and I **have** to lecture first.... - -### This is WRONG! - - - -**_Lecture for 50% of time maximum!_** - - - -Notes: - -Even if you decide that you absolutely must do a long lecture, you aren't going to be delivering the value you think. - ----v - -### Teachers Imagine - - - -Notes: - -Teachers imagine eery student is like this one guy. But look at most of them. - ----v - -### But Really - - - ----v - -### But Really - - - ----v - -### What to do Instead - -- Consider assigning pre-reading or _short_ pre-recorded lectures: explore the [flipped classroom](https://en.wikipedia.org/wiki/Flipped_classroom) and [active learning](https://bokcenter.harvard.edu/active-learning) -- Treat them as **apprentices** - - - -Notes: - -In the old day, the long long ago, it was expensive to duplicate books and impossible to distribute video. In that setting a teacher explaining a concept live really added value. Today we have the internet and it is trivial to distribute text or video resources. In this setting the teacher's biggest value is interacting with students, answering questions, guiding their work, giving feedback. -It's okay to treat students as apprentices. Let them learn through their work. It's okay to assign them a task that they don't yet know how to do. This will get them to ask you how and they will be motivated to hear and understand the answer. - ----v - -### Flipped Classroom - -1. **Decide how you will use your class time and design those activities.** -1. **Find or create resources for students to use outside class time.** You do not need to create all sources, but you must make sure that all students have a way to access these materials. -1. **Teach students how to use the material at home.** Unlike when they are in a lecture, students cannot ask question as they arise, making note taking especially important to bring to class. _Be mindful of other demands on their time at the academy._ - -Notes: - -If you create the materials for students to use at home, solicit for and use their feedback to revise it. - ----v - -## Active Learning - -- Real-time feedback about what students are learning. -- By grappling with ideas, students connect new concepts to prior knowledge in meaningful ways and construct their own understanding. -- Collaborating with classmates promotes community and connection between students, which can enhance a sense of belonging as well as motivation. -- It creates a low bar to participation for quiet or passive students by encouraging every student to think and do. - ----v - -## Active Learning - -- **Think-pair-share**: In this exercise, students are given a minute to think about—and perhaps respond in writing—to a question on their own. Students next exchange ideas with a partner. Finally, some students share with the entire class. - -- **Statement correction, or intentional mistakes**: The instructor provides a prompt containing errors. The students are charged with finding and correcting the errors. Concepts that students commonly misunderstand are well suited for this activity. - -Notes: - -A think-pair-share engages every student, and also encourages more participation than simply asking for volunteers to respond to a question. - -Errors -> Concepts that students commonly misunderstand are well suited for this activity. - ----v - -## Active Learning - -- **Code-along**: student write the same code as you real time. Consider pauses to allow students to try some parts themselves or in small groups, or simply ask what they think should be next. Write in a few bugs for them to spot. - -- **Concept map**: Students are provided with a list of terms.They arrange the terms on paper and draw arrows between related concepts, labeling each arrow to explain the relationship. - ----v - -### When you must lecture for > 30min - - - -### Break it up - - - -- Coffee Break -- Kahoot Game -- Physical Exercise (_yes, seriously_) - -Notes: - -I'm skeptical that it's ever necessary to lecture continuously this long, but some of us are new to teaching, and I'm not going to be an anti-lecture extremist. -Exercise: Students will do it if you tell them to. I've gotten theaters of 50+ adults to do pushups together. It honestly helps a lot. Gets the blood flowing, stimulates conversation and laughing, encourages class bonding. The key is to make sure everyone feels comfortable and welcome. Not everyone can do perfect pushups. It's okay to do them on your knees or against the wall or do situps or squats instead. Consider setting a cumulative goal for the class and add up everyone's contribution. - ---- - - - -# Content Brainstorming - -**Coding exercises, module by module** - - - -...in-class activities
-...after-class assignments
-...active learning ideas - -
- -There are no stupid ideas!
-Keep 'em coming...
-**📝 write them down! 📝** - -Notes: - -Everyone is welcome to contribute ideas for any module -We can also brainstorm along the lines of what content to teach, but I'm trying to focus on non-lecture stuff so people start thinking in that direction. -Flip through the repository instead of showing this slide - ---- - -## Guest Lessons - -> Guest lessons are 60-90 min one-off lessons (could be Q and A, live coding, hands-on activity, or even just a lecture) where the guest covers any topic that they find interesting and relevant. They are not expected to advance our curriculum directly. - -- Suggest topics -- Suggest Speakers -- Volunteer -- We especially need these early in the course - ---- - -## Instructor Action Items - -1. Inventory & review of your content. - -- Note **in an issue** the outstanding items to be updated/added/removed -- More code content needed throughout all modules! - -2. **Get an outline of what work needs to be done for content ASAP to Dan&Joshy and your TAs** - -- Kickoff meeting with your TAs to outline work -- Put your TAs to some tasks _now_ so we can get moving! - ---- - - - -https://github.com/Polkadot-Blockchain-Academy/pba-content - - - -Everyone should have access to this repo, let Dan know if not. - -**_📝 New issue by instructors on inventory to kick things off ⏰_** - -Notes: - -Dan will push you before sub0 to do this! - ---- - - - - - -Notes: - -Education team is counting on you and we are here in full force to help you succeed! -Please reach out anytime and don't wait for us to get started or ask you how things are going. - ---- - -### Moooor Slides - ---- - -## Beta Testing 🧪 - -Eager internal contributors and wannabe students... - -**_What do \*you\* need they could assist with?_** - -Notes: - -We don't explicitly require working with those interested, but it's an option we should consider as a team! - ----v - -## Beta Testing 🧪 - -Maybe...? - - - -- Review content -- Try exercises & activities -- Add fresh ideas -- Inform on what is confusing or missing - - - ----v - -## Beta Testing 🧪 - -They need fresh content to help us... - -### ⏰ The sooner you create this, the more we can help! ⭐ - ---- - -## `#BUILD` a Thing! - -Idea: Students produce a portfolio project to showcase a _synthesis_ of their work. - -Perhaps A capstone style project _composed_ of the products of assignments and exercises. - -### 🤔 WDYT? 🤔 - -Notes: - -Ideally, we can work together to coordinate across modules to have students build upon their work from previous modules as they progress. -Similar in flavor to the final project last time, but here it can be a bigger, more complete, and on the way to a deployable product. - ----v - -## Kudos Idea - -### _A fully functional parachain, incorporating custom pallets, contracts, and XCM integrations_ - ----v - -## Kudos Idea (Mod 4&5) - -1. Build a minimal chain with: - - identity style pallet serving as an address book (perhaps on a relay chain) for individuals and eventually for parachains (XCM to send to other people via address book) - - assets and uniques pallets for managing tokens, add required remark in transfer extrinsic for reasoning behind sending (a Kudos), consider adding "soul bound" option for minting assets. - ----v - -## Kudos Idea (Mod 6) - -2. Migrate to parachain with group: - - coordinate with group to add a minimal gov pallet - - Consensus update to allow any group member to run a collator node, with tiny PoW or first to make a block (unix time) wins to progress testnet parachain. - - Setup ID pallet profiles on a common good parachain (collectives) registrar is edu team - ----v - -## Kudos Idea (Mod 7) - -3. Contracts integrations: - - Make contracts that build on top of assets pallet (chain extensions) to compose logic - - plan on another chain extension from hector to execute xcm from this student's chain to another chain (student with same or similar pallet, common good one perhaps) - ----v - -## Kudos Idea (Mod 8) - -4. XCM integrations: - - Setup channels to other groups - - Add IDs of other peers in other chains with multi-locations - - XCM reserve-backed tx Kudos to people on other parachains. Thus you have a double entry accounting method (check sending and receiving side for assets, to assert no manipulation by one side) - -Notes: - -XCM flow: - -- Deposit asset in sov account -- Send XCM notification of deposit and request mint of asset derivative diff --git a/faculty_resources/4-github-classroom-assigments.md b/faculty_resources/4-github-classroom-assigments.md deleted file mode 100644 index 202f1f7bb..000000000 --- a/faculty_resources/4-github-classroom-assigments.md +++ /dev/null @@ -1,79 +0,0 @@ -## GitHub Classroom How-to - -[GitHub Education](https://education.github.com/) provides a lot of nice features for formal educational institutions and their students. -One of the tools we can leverage in the PBA is [GitHub Classroom](https://classroom.github.com/) that allows for **using a base git repo as a source for assignments**. -Our [Rust Entrance Exam](https://github.com/Polkadot-Blockchain-Academy/Rust-Entrance-Exam) uses this feature, so we can have individuals or groups work privately from each other, while faculty can see and assess everyone's work. -It also can allow for automated testing (via a version of GitHub Actions / CI). - -> If you want to create an assignment, please let the **owners of the [PBA org](https://github.com/orgs/Polkadot-Blockchain-Academy/people?query=role%3Aowner)** know so, as you will need to get permissions updated. -> Best contact at the time of writing is Nuke: https://matrix.to/#/@nuke:parity.io - -## Create a activity or assignment - -The basic workflow for this for an instructor is to: - -1. Create a **private** stand-alone repository in the [PBA org](https://github.com/orgs/Polkadot-Blockchain-Academy/ for an assignment or activity. - - 1. Ensure a README exists with clear instructions. - 1. Create a _dedicated branch_ to write up a solution. - 1. Integrate unit and/or integration tests that students can run to check their work.
- > These can be run as [GitHub Actions](https://docs.github.com/en/actions) on student's pushing commit's to their work, like a `cargo test ...` or script for example. - > See [docs on autograding](https://docs.github.com/en/education/manage-coursework-with-github-classroom/teach-with-github-classroom/use-autograding) - 1. Ensure `main` of the repository is the assignment as it should be delivered to students. - 1. In the github repo's general settings, switch the repository to a [template](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-template-repository). - -1. Create a new assignment on [GitHub Classroom](https://classroom.github.com/) under the right one, there is one per cohort. - 1. Unless otherwise needed, best to keep default settings as the student repo will be private and not give them admin to it. - Don't add a "supported editor". - 1. Select your template repository for this assignment. - 1. Enable a Feedback PR - 1. Enable the invite link, and give it a test yourself! - -## Sending, working on, and finishing assignments - -With the new invitation link, anyone can generate a fork of the repo with zero history (fresh git history). -Their repository will default to private to let them work on it without other student's able to view their work. -Each push to `main` on their copy of the assignment will, if configured, trigger CI (autograding) to be run, along with any workflows that exist already in the assignment. - -All student repo's should have a `PR #1` opened when they accept the classroom assignment as a feedback from instructor -> student of their work based on the generated 0th commit on the assignment & the head of `main`. -Feel free to use this as you like, and remind everyone to `@` you for attention if they need it there, as its otherwise likely to be missed. - -If configured, at the deadline students can still push to their fork, but there is a collection of a grade from the CI. -The classroom assignment page _does_ show the `Submitted` or `Not Submitted` and if they had work in, links to the last commit before the deadline. -Changing the deadline also re-evaluates, but it's not clear if that is at the right commit or the highest one. -It will be up to graders to decide on deadline compliance by either removing write access to each student's repo, and/or to inspect and grade the highest commit before the deadline. - -### Manual grading - -As the CI autograding is likely not sufficient, grading each repo is required. -In order to download all assignments it's likely we want to use https://classroom.github.com/assistant . -It's an electron app that lets to select an assignment and select some or all repos to clone in a batch into a single dir locally, with repos being only the github username of the student. - -> Note it's _old and not maintained_ but the [2.0.3 .deb release](https://github.com/education/classroom-assistant/releases/tag/v2.0.3) was working on 20.04 ubuntu (22.04 [likely broken](https://github.com/education/classroom-assistant/issues/235)) - -A superior solution is to [installing GitHub's command line client](https://github.com/cli/cli#installation), authenticating with it, and then using a simple bash script to clone all the relevant repos using `gh`: - -```sh -owner="Polkadot-Blockchain-Academy" -prefix="pba-assignment-1" - -mkdir -p $prefix -cd $prefix - -for repo in $(gh repo list $owner --limit 9000 --json name --jq '.[] | .name'); do - if [[ $repo = $prefix* ]]; then - git clone git@github.com:$owner/$repo ${repo#$prefix-} - fi -done -``` - -## Need more help? - -The PBA team is here for you! -Please reach out to ask us anything! - -### GitHub's Docs on Classroom - -- [Basics of setting up GitHub Classroom](https://docs.github.com/en/education/manage-coursework-with-github-classroom/get-started-with-github-classroom/basics-of-setting-up-github-classroom) -- [Create an individual assignment](https://docs.github.com/en/education/manage-coursework-with-github-classroom/teach-with-github-classroom/create-an-individual-assignment) -- [Create a group assignment](https://docs.github.com/en/education/manage-coursework-with-github-classroom/teach-with-github-classroom/create-a-group-assignment) diff --git a/faculty_resources/6a-how-to-use-evcxr-jupyter.ipynb b/faculty_resources/6a-how-to-use-evcxr-jupyter.ipynb deleted file mode 100644 index 642ae8137..000000000 --- a/faculty_resources/6a-how-to-use-evcxr-jupyter.ipynb +++ /dev/null @@ -1,187 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - }, - "tags": [] - }, - "source": [ - "# How to use [Evcxr](https://github.com/google/evcxr) in a Jupyter Notebook and/or REPL" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "## \\[Note on use\\] Reset, keeping build artifacts\n", - "\n", - "Run the below cell or commands in a shell to \"reset\" the kernel, keeping build artifacts:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - ":clear // Clear all state, **keeping compilation cache**, use this over a kernel restart when possible. You will need to re-run the :deps to have them loaded into state. \n", - ":last_compile_dir // Show where the target is for cargo for this kernel, in case you want to recover these" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Set the env var `EVCXR_TMPDIR=` to get the REPL to use this dir.\n", - "\n", - "```sh\n", - "# Launching jupyter-lab\n", - "EVCXR_TMPDIR= jupyter-lab\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - }, - "tags": [] - }, - "source": [ - "## Notebook Kernel & REPL Environment Setup\n", - "\n", - "The below should be run at kernel startup before you start.\n", - "All dependencies that we need to build _before_ anything else in this notebook will work.\n", - "\n", - "Instead of rebuilding see the `Reset, keeping build artifacts` section to clear REPL state only.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - ":dep sp-core = { version = \"7.0.0\", git = \"https://github.com/paritytech/substrate.git\", branch = \"polkadot-v0.9.36\" }\n", - "\n", - "// Loading & building dependencies crates here takes *a while*! \n", - "// Run this while you move on to the readings below.\n", - "// NOTE: A kernel restart removes all target artifacts except those in sccache!\n", - "// ONLY restart only if explicitly needed." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - }, - "tags": [] - }, - "source": [ - "## Digital Signatures Example\n", - "\n", - "Here we demonstrate a few parts of the [Substrate Primitives (`sp_core`)](https://paritytech.github.io/substrate/master/sp_core/index.html) library for interacting with keys and signatures." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "use sp_core::{\n", - "\tblake2_256,\n", - "\tcrypto::{Derive, Ss58Codec, Ss58AddressFormatRegistry},\n", - "\tDeriveJunction,\n", - "\thexdisplay::HexDisplay,\n", - "\tPair as _,\n", - "\tsr25519::{Pair, Public},\n", - "};" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Key Generation" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "// Generate a secret key.\n", - "let (pair, mnemonic, _) = Pair::generate_with_phrase(None);" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "// Reveal your Secret Seed Phrase\n", - "mnemonic" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "// Derive the public key.\n", - "let pk = pair.public();" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "// Print public key as raw bytes\n", - "pk.0" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "// Print public key hex encoded \n", - "::from(&pk.0)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Rust", - "language": "rust", - "name": "rust" - }, - "language_info": { - "codemirror_mode": "rust", - "file_extension": ".rs", - "mimetype": "text/rust", - "name": "rust", - "pygment_lexer": "rust", - "version": "" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/faculty_resources/6b-how-to-use-evcxr-in-a-shell.md b/faculty_resources/6b-how-to-use-evcxr-in-a-shell.md deleted file mode 100644 index d62b73542..000000000 --- a/faculty_resources/6b-how-to-use-evcxr-in-a-shell.md +++ /dev/null @@ -1,75 +0,0 @@ -# How to use [Evcxr](https://github.com/google/evcxr) in a Jupyter Notebook and/or REPL - -## \[Note on use\] Reset, keeping build artifacts - -Run the Rust commands in an Evcxr shell to "reset" the kernel, keeping build artifacts: - -```rust -:clear // Clear all state, **keeping compilation cache**, use this over a kernel restart when possible. You will need to re-run the :deps to have them loaded into state. -:last_compile_dir // Show where the target is for cargo for this kernel, in case you want to recover these -``` - -Set the env var `EVCXR_TMPDIR=` to get the REPL to use this dir. - -```sh -# Launching Evcxr from a shell -EVCXR_TMPDIR= evcxr -``` - -## Notebook Kernel & REPL Environment Setup - -The below should be run at kernel startup before you start. -All dependencies that we need to build _before_ anything else in this notebook will work. - -Instead of rebuilding see the `Reset, keeping build artifacts` section to clear REPL state only. - -```rust -:dep sp-core = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.36" } - -// Loading & building dependencies crates here takes *a while*! -// Run this while you move on to the readings below. -// Notice: A kernel restart removes all target artifacts except those in sccache! -// ONLY restart only if explicitly needed. -``` - -## Digital Signatures Example - -Here we demonstrate a few parts of the [Substrate Primitives (`sp_core`)](https://paritytech.github.io/substrate/master/sp_core/index.html) library for interacting with keys and signatures. - -```rust -use sp_core::{ - blake2_256, - crypto::{Derive, Ss58Codec, Ss58AddressFormatRegistry}, - DeriveJunction, - hexdisplay::HexDisplay, - Pair as _, - sr25519::{Pair, Public}, -}; -``` - -## Key Generation - -```rust -// Generate a secret key. -let (pair, mnemonic, _) = Pair::generate_with_phrase(None); -``` - -```rust -// Reveal your Secret Seed Phrase -mnemonic -``` - -```rust -// Derive the public key. -let pk = pair.public(); -``` - -```rust -// Print public key as raw bytes -pk.0 -``` - -```rust -// Print public key hex encoded -::from(&pk.0) -``` diff --git a/faculty_resources/7-Grading-scheme-slides.md b/faculty_resources/7-Grading-scheme-slides.md deleted file mode 100644 index 438e48476..000000000 --- a/faculty_resources/7-Grading-scheme-slides.md +++ /dev/null @@ -1,497 +0,0 @@ ---- -title: Graded Assignments Scheme -description: How and why the PBA creates and grades assessments -duration: 30 minuets ---- - - - -

⏰ TODOs before Berkeley ⏰

- ----v - -## 🗣️ Dry Runs (Lectures) - -- New faculty (required!) -- New and Major refactored content (required!) - -Notes: - -Anyone still need this? We have VERY little time! - ----v - -## 💻 Beta Testing (Hands-on/Code) - -- New Material -- Assignments - -Notes: - -Anyone still need this? We have VERY little time! - ----v - -## 📆 Founders Track Lessons required - -- Flag what is applicable for Founders track in module README - -Notes: - -- founders track pilot program (30% of class, branching off 1/3 of day starting in the smart contracts module) - - working with daily play-by-play on core content, but need to identify what founders will get most value from: the non-hands-on stuff and concepts most of all past the SC mod - - internal calendar of events getting close to final draft, will go student and faculty facing ASAP - ----v - -## 🤙 1on1 checking pre-UCB - -- Modules to meet with Nuke to cover their key milestones (???) - ----v - -## 🙌 Assignment Grading Plan - -- Rubrics and solutions (required!) -- Who owns grading? - - VERY tight turnaround (Start Sunday, ideally done Monday) - ----v - -## ✅ Create Learning Outcomes - -1. Update your module `lesson-plan.md` with LOs -1. Map overall LOs to define assignment specific LOs in README -1. Map assignment LOs to Competency Checklist -1. _Granular list of tests per checklist item that (a fraction of) must pass_ - -- Scope mapping LOs->tests for now in an issue, impl autograding where possible soon - -Notes: - -Tests are not mission-critical, but the checklists are to generate a score. -Defining the tests lays the foundation for autograding. -WIP [assignment template](https://github.com/Polkadot-Blockchain-Academy/pba-autograded-assigment-template) we can work together to put in place for each assignment when it's ready - ---- - - - -# Graded Assignments Scheme - ----v - -## 🤷 Motivations from Faculty - -- Variability in educational standards/best practices for assignments & grading, leading to large subjectivity in scores awarded. -- Workload is high for manual grading of 50 to 100 students with _very_ tight deadlines. - -Notes: - -Based on lessons learned in the first two cohorts about assessment. - ----v - -## 🤷 Motivations from Students - -- Rightly critical of totally opaque grading resulting only in a score with minimal written feedback -- Certification cutoffs leading to _anger and toxicity_ around the program and our ecosystem -- Over-focused on obtaining certification via assignments vs. excellence in their work - ----v - -## 🎯 Goals - -**Objective, easy to concretely define achievement, and concrete measures on assessment - qualitative and quantitative** - -- Grading to be uniform and transparent for _everyone_ - - Test suites for code to _test_ functionality -- Maps _exactly_ with learning outcomes -- _Confine_ and make explicit where subjectivity of graders impacts scores -- Rubrics and complete _solutions_ for all graded material - -Notes: - -SME graders' subjectivity is still very important, topics like code quality, great use of patters/syntax, and "code beauty". -BTU we need to be confine that outside of hard skills & competencies in any assessments/scores/pass or fail -A "Perfect" example for the solution, and ideally various levels of score categories as example for each - ----v - -## 🎯 Goals - -**Minimize faculty's time spent on grading _on-site_** - -- Time on site is quite limited, interacting face-to-face is far more valuable than async reviewing and grading -- Minimize grading turn-around time to enable actionable feedback, iterations, and seeking support from SMEs -- (For now) the end of the in-person cohort defines absolute deadline for all grades - -Notes: - -We must balance between: - - - -1. Providing detailed feedback from SME to all students on all graded assignments - - (At least option to request this, this can be TA's primary role) -1. Minimizing time and effort needed to assess work during a cohort - - - ----v - -## 🎯 Goals - -**Student focus on growth & learning, not _only_ certification** - -- [Learning, not earning! 📺](https://www.youtube.com/watch?v=CnSkOXe90WI) -- Foster intrinsic motivation & drive -- No points system can be high "rigor", focus must be on quality of work -- Encourages unique work & creative thinking -- Better granularity via skills and competencies, vs. "some number" that encompasses overall growth/accomplishment - ----v - -## 🎯 Goals - -**Enable a pathway to thesis based model for multi-track future** - -- Flexibility to break "out of the mold" to follow passions & dig deep -- More [latter in this deck](#pba-thesis-driven-certifications) - ----v - -## 🙅 Anti-goals - -- "Shame" under-achievement that leads to exiting the ecosystem. - - _We want to Maximize continued high-impact involvement post academy for all students and alumni_ -- Normalization for the sake of specific percent not certifying -- "Gossip" and personal gripes/bias about students leading to bias & keep (by default, without good cause) _any_ subjective details on students out of the picture _between graders_. -- Unclear and subjective points systems with no clear definition that leads to grader interpretation of what a score means - ---- - - - -# Assessment Framework - -Notes: - -Research for the curious in the [Alternative Grading Frameworks](#alternative-grading-frameworks) section latter. - ----v - -## Assessment Framework - -- Competency Checklist -- Automated Grading Suite -- PR Reviews for Feedback -- Rubric and Solutions -- Scoring System -- Certification Criteria - ----v - -## 🛂 Competency Checklist - -Each assignment must define a set of **learning outcomes** in: - - - -1. Comprehension or Understanding -1. Skills or Abilities - - - -Notes: - -This is evaluated in a pass/fail manner, with grader feedback per item noted. - -Some are explicitly defined to be optional-to-do items that if completed qualify for a higher level of grade. - ----v - -## 🛂 Competency Checklist - - - -A "report card" of an assignment,
concatenated into one for the _entire academy_. - -Notes: - -Competencies are for the course overall, not just the assignment - there will be overlap between assignments. - ----v - -## 🤖 Automated Grading Framework - -Based on Joshy's awesome work on the [📑 qualifying exam](https://github.com/Polkadot-Blockchain-Academy/Rust-Entrance-Exam) and [📑 assignment 0](https://github.com/Polkadot-Blockchain-Academy/pba-pre-course-assignment) we strongly suggest all (Rust based) assignments follow this standard: - - - -- Templated starting point with faculty to craft concrete assignments with `todo!("some things here...")` skeleton code defined -- Include "sanity check" and minimal unit tests that students _must_ complete -- Automated test suite (closed/private) to score granular pass/fail (based on learning objectives) - - - ----v - -## 🤖 Automated Grading Framework - -Fully realized test suites will: - -- Push creators to craft very well defined assessments -- Externalize _most_ effort to CI job for grading -- Enable resubmission by students anytime, iterating to passing - -Notes: - -Goal is to have "black box" that returns only pass/fail on tests, and a score of 1, 2, or 3. - ----v - -## 🧐 PR Reviews as Feedback - -**Submissions include a README and/or PR comment** - -- Points explicitly to what the SME should review -- Reflection on the work: key learning, things still to do, unresolved questions/issues the student had - ----v - -## 🧐 PR Reviews as Feedback - -- Github Classrooms feedback PR can be used to comment directly on the work of each student easily -- An issue (template) opened on all classroom submission repos for manual grading - - This is then the grading rubric and/or checklist for the grader to evaluate if the PR closes the issue. - ----v - -## 🧙 Rubric and Solutions - -All assignments _must_ provide examples of end-to-end completed work to be included in grading, **for each possible score** - -Notes: - -For reference for faculty only for now, perhaps in a fully open course this should be open sourced.a - ----v - -## 📊 Scoring System - -**0 to 4 integer system, awarded _per assignment_** - -- 0 = Nothing submitted or grossly poor performance -- 1 = Incomplete submission, under minimal requirements -- 2 = Passing all minimal requirements, pre-defined percent of test suite passing -- 3 = Passing all test suite items, including explicitly marked optional ones -- 4 = Grader discretion of going above the call of the assignment - - Taking into account the level expected of students in context - - Examples of what should qualify defined by creator(s) - -Notes: - -Here we use the automated grading (where possible) to arrive at a score of 0,1,2, or 3. -A 4 is only manually awarded by graders based on their review of an individual's work. - ----v - -## ✅ Certification Criteria - -**Average of integer scores for all assignments (effectively GPA)** - -Future may include: - - -1. Bundling of checklist items overall (above a 2) -1. Bundling of assignments total score (above a 2) - - pre-defined - - contract negotiated -1. Thesis Defense (only) - - - -Notes: - -All students can come away with a "report card" of all their competencies to (at their discretion) accompany their overall certification and overall score(s). -If we have many assignments we may move to bundles (4 is not enough) - ---- - - - -# Learning Resources for Faculty - -_We encourage all content creators to review these!_ - ----v - -## [📺 Developing Quality Assessments](https://www.youtube.com/watch?v=hDjWjbng40U) - -A _wonderful_ overview and workshop around various exercise and activity models that we **highly encourage everyone watch**! - -- Blooms taxonomy as basis with _explicit_ terms to use when defining learning objectives and outcomes -- WHY give this assignment? in context with content -- We assess on: - - Process (thinking through) and/or product (shipped solution {code}) - - Express ideas concisely and coherently - - Convergent (coming to conclusion based on given) or divergent (hypothesis from predictions & unstated things) - ----v - -## [📺 Best Practices for Grading
Objectively and Efficiently](https://www.youtube.com/watch?v=hiUXBr4sgnM) - -> Note that this is for typical grading systems (out of 100, A->F) that we will _not_ employ. - ----v - -## [📺 Make Grading Point-less: Eliminating Points to Foster Student Motivation](https://www.youtube.com/watch?v=CnSkOXe90WI) - -Motivation around alternative grading schemes that are rigorous _and_ do not assign points. - ---- - - - -# Alternative Grading Frameworks - -_Research for reference_ - ----v - -## Alternative Grading Frameworks - -- Overview: [📰 UC Berkeley Alternative Grading Frameworks](https://teaching.berkeley.edu/resources/course-design-guide/design-effective-assessments/alternative-grading-frameworks) -- Also [📰 University of Miami Alternative Grading Frameworks](https://academictechnologies.it.miami.edu/explore-technologies/technology-summaries/alternative-grading/index.html) -- There are many other interesting but even less common frameworks, not discussed in this presentation. - ----v - -## [📰 Grading for Equity](https://www.insidehighered.com/views/2020/01/27/advice-how-make-grading-more-equitable-opinion) - -- Subjective criteria to minimum or zero -- Transparent scoring -> Are mathematically accurate to validly describe a student’s level of mastery -- No normalization -- Support hope and a growth mind-set -- “Lift the veil” on how to succeed - -Notes: - -- Transparent scoring -> Are mathematically accurate to validly describe a student’s level of mastery - - They apply a more proportionately structured 0-4 scale instead of the 0-100 scale, which is mathematically oriented toward failure - - They also use sound mathematical principles that reflect recent performance and growth instead of averaging performance over time -- Support hope and a growth mind-set - - They allow test/project retakes to emphasize and reward learning rather than penalize it, and they override previous scores with current scores that build learning persistence -- “Lift the veil” on how to succeed - - They create explicit descriptions of what constitutes demonstration of content mastery through rubrics or proficiency scales. - - In addition, they simplify grade books and expand the methods of assessments to generate more accurate feedback and reporting about each student’s learning relative to the expected outcomes - ----v - -## [📰 Specification Grading](https://www.insidehighered.com/views/2016/01/19/new-ways-grade-more-effectively-essay) - -- Pass fail only, based on a concrete specification givin to start -- Style is very similar to issues -> PRs, **great fit for our faculty's skill set** -- Bundles of specs fulfilled to achieve various levels - -Notes: - -Here we craft what students must do to be considered passing. -This is almost a one-to-one mapping with github based workflows, and thus is not only well suited to the style of assigning and completing work that our faculty does daily, but also a bit of on-the-job-training for students. - ----v - -## [📰 Contract Grading](https://en.wikipedia.org/wiki/Contract_grading) - -- Collaboratively define grade qualifications with students (not completely pre-defined) -- Completion of a _contracted_ number of assignments of specified quality that correspond to specific letter grades - - Instructors and students know exactly what is expected from them to receive a certain letter grade (no normalization) - - Any student who completes the work that corresponds to a "B" grade will receive a "B" (everyone can pass) -- The grade the student receives is a reflection of how well they completed the pre-determined syllabus. - -- _Variant: Labor-based contract grading = writing assessment be based on effort rather than on a subjective evaluation_ - ----v - -## [📰 Ungrading](https://www.insidehighered.com/advice/2017/11/14/significant-learning-benefits-getting-rid-grades-essay) - -- Clear instructions, although not necessarily criteria or contracts, for students to follow -- Flexibility with assignment deadlines and provide opportunities for revision -- Open conversations about performance (bi-weekly conferences, feedback surveys, or asking outright what grade they deserve) - - Self-assessment drives the grade, not nearly as much a grader. - -Notes: - -Reflection and Dialogue are key: Ungrading builds upon similar aspects of specifications and contract grading -Ungrading does encourage instructors to have more open conversations with students about their performance, whether it is through bi-weekly conferences, feedback surveys, or asking students outright what grade to put in the system at the end of the term (Blum & Kohn, 2020) -These conversations in addition to other self-reflective exercises (i.e. minute tickets, process letters, peer feedback, etc.) require students to think critically about what they’ve learned and articulate how they have developed their knowledge and skills throughout the semester - ----v - -## [Competency Grading 📺](https://www.youtube.com/watch?v=YQInjf8UjOo) - -Great explainer in [three](https://www.nciea.org/blog/what-do-i-need-to-know-about-competency-based-grading) - [part](https://www.nciea.org/blog/what-do-i-need-to-know-about-competency-based-grading-2) - [series](https://www.nciea.org/blog/what-do-i-need-to-know-about-competency-based-grading-3) - -**This is the basis for assessments we will mostly embrace** - -Notes: - -More concrete implementation in the [Assessment Framework](#assessment-framework) section. - ---- - - - -# PBA Thesis Driven Certifications - -_For now, just and idea to discuss_ - ----v - -## Thesis Model Motivation - -- Students can dig deep into passions, with structure and support to arrive at some tangible result from it -- Ability _subjectively_ assess students' novel work could be PBA's SMEs _unique_ value proposition -- Removes time constraint of cohort closing ceremonies -- _Con: new, extra time, different work scope required from faculty_ - -Notes: - -Especially if course content is much more open, we need things that make the PBA long term value adding over maintaining and running content. - ----v - -## Thesis Driven Certification Integration - -- Certifications based on scoring system remain, with option for _participation only_ if student opts-out of graded work to focus on thesis during the academy - - Similar in concept to Founders Track (ungraded) -- Post-cohort successful thesis defense lead to specific "proper" certifications/degrees (engineering, founder, etc.) - -Notes: - -The cert. exception may be the Application Engineers (parachain and solochain engineering) for completion of some level in all assignments. - ----v - -## Thesis Driven Certification Flow - -Successful completion of a PBA cohort is akin to a "mini-masters" program, the thesis track kickoff during, and continue _post cohort_: - - - -1. Commit to Thesis Advisor (During or shortly after PBA) - - Student & advisor mutually agree on relationship -1. Thesis Proposal: defines work to be done,
approved by Advisor (and retries as needed) - - Modeled like W3F grant (if not actually one) -1. Thesis work: async support from Advisor and PBA -1. Thesis Committee: SMEs to evaluate thesis -1. Thesis Defense -1. Certification Awarded - -
- -Notes: - -This is somewhat akin to a on-the-job training program or internship before a student is hired within our ecosystem. -It is a fantastic chance to help build a relationship with the committee and showcase your ability in a formalized way that is not possible presently (AFAIK). diff --git a/faculty_resources/README.md b/faculty_resources/README.md deleted file mode 100644 index 5077e61c9..000000000 --- a/faculty_resources/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Faculty Resources - -## _For internal use only_ - -The content in this meta-module is for Academy faculty to learn the tools and techniques we use. -Materials here include templates for various forms of content to help accelerate development. -Presentations also outline methodologies and policies for faculty to follow around content delivery, grading, etc. - -**Please first ready [CONTRIBUTING.md](../CONTRIBUTING.md) that directs to many of the files here.** diff --git a/faculty_resources/data.csv b/faculty_resources/data.csv deleted file mode 100644 index db73c2ce5..000000000 --- a/faculty_resources/data.csv +++ /dev/null @@ -1,3 +0,0 @@ -January, February, March, April, May, June, July -My first dataset, 65, 59, 80, 81, 56, 55, 40 -My second dataset,28, 48, 40, 19, 86, 27, 90 diff --git a/syllabus/Graded_Assignments.md b/syllabus/Graded_Assignments.md deleted file mode 100644 index 21ab2c0d9..000000000 --- a/syllabus/Graded_Assignments.md +++ /dev/null @@ -1,96 +0,0 @@ -# Graded Projects - -In order to assess student understanding and provide hands-on learning experience, we assign roughly one graded assignment per week throughout the course. - -The exact assignment schedule will vary by cohort depending on content order, where the weekends fall, and instructors' preferences. -Some cohorts may include a pre-course assignment or a final assignment as well. -Some cohorts may choose to omit an assignment on a particular week. - -## Assignment Style - -Some assignments will be more like problem sets where students must complete each of several small exercises. Others will be like larger projects where students must choose one larger assignment and complete only that one. - -## Grading - -Currently each assignment is graded in its own bespoke way. -We are moving toward a more unified system where as much grading is automated as possible. -If you are creating a new assignment or grading one for the first time, checkout https://github.com/Polkadot-Blockchain-Academy/ucb-qualifier-grading/ as a tool that may help you in your endeavors. - -## Menus of Assignments - -This section contains links to individual assignments that may be useful throughout the course. - -Typically an assignment covers content from more than one module. -Therefore some assignments may only be useful when content is taught in a particular order. - -This list links to all graded assignments used in the PBA, roughly in order of where they will appear in the course. - -| Offered In | Link | Description | -| ---------- | ------------------------------------------ | ----------------------------------------------------------------------------------------------- | -| BA | Cryptography CTF, Merkle Tree, Nash Solver | https://github.com/Polkadot-Blockchain-Academy/pba-ctf-assignment--master | -| UCB | On-chain Bridge Contract al la BTC-Relay | https://github.com/Polkadot-Blockchain-Academy/bridge-assignment-master | -| BA | Accounts/Utxo Cryptocurrency runtime | https://github.com/Polkadot-Blockchain-Academy/frameless-node-template--master | -| Camb | Review and Critique a Whitepaper | https://github.com/Polkadot-Blockchain-Academy/pba-content/tree/cambridge-2022/syllabus/midterm | -| Camb, BA | Write a FRAME-based Runtime | https://github.com/Polkadot-Blockchain-Academy/frame-assignment--master | -| BA | Reserve Asset Transfers in XCM | https://github.com/Polkadot-Blockchain-Academy/xcm-assigment--master | - -## Idea Stubs - -Sometimes you have an idea for an assignment but don't need to write it up formally right now. -We can brainstorm such ideas that may be useful in the future here. -If the list gets too long we can split it into files based on the part of the course. - -### Commit Reveal Scheme - -Implement a hash-based commit reveal-scheme. -The user takes these actions: - -1. Enter some data they want to commit to. -1. Receive a Salt and a Commitment in exchange. -1. Commit to data by sharing the commitment publicly -1. Reveal by sharing the Salt publicly -1. Check others' commitments by providing a commitment and a salt - -### Auctions - -```rust -/// A bid cast in an auction -struct Bid { - bidder: String, - price: u32, - time: Duration, -} - -/// The result of an auction -struct AuctionWinner { - bidder: String, - price: u32, -} -``` - -Implement three function that takes in a bunch of bids and return the winner and the price they pay. - -#### English Auction - -The highest bidder wins and pays the price they bid - -```rust -fn english_auction(Vec) -> AuctionWinner; -``` - -#### Dutch Auction - -The highest bidder wins and pays the price bid by the second highest bidder - -```rust -fn dutch_auction(Vec) -> AuctionWinner; -``` - -#### Candle Auction - -Only the bids that are placed before the ending time are actually counted. -Of these bids, the highest bidder wins and pays the price they bid - -```rust -fn candle_auction(Vec, end_time: Duration) -> AuctionWinner -```