From 2923ace2f1e02ea3e03b6724a31f32c74cd608da Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Tue, 4 Apr 2023 20:09:33 +0000 Subject: [PATCH 1/2] Created WhatTheHack template stub --- xxx-ConfluentCloudOnAzure/Coach/Lectures.pptx | Bin 0 -> 215788 bytes xxx-ConfluentCloudOnAzure/Coach/README.md | 99 +++++++++++++++++ .../Coach/Solution-00.md | 20 ++++ .../Coach/Solution-01.md | 20 ++++ .../Coach/Solution-02.md | 20 ++++ .../Coach/Solution-03.md | 20 ++++ .../Coach/Solution-04.md | 20 ++++ .../Coach/Solution-05.md | 20 ++++ .../Coach/Solution-06.md | 20 ++++ .../Coach/Solution-07.md | 20 ++++ .../Coach/Solution-08.md | 20 ++++ .../Coach/Solution-09.md | 20 ++++ .../Coach/Solution-10.md | 20 ++++ .../Coach/Solution-11.md | 20 ++++ .../Coach/Solution-12.md | 20 ++++ .../Coach/Solution-13.md | 20 ++++ .../Coach/Solution-14.md | 20 ++++ .../Coach/Solution-15.md | 20 ++++ .../Coach/Solutions/.gitkeep | 0 xxx-ConfluentCloudOnAzure/README.md | 60 +++++++++++ .../Student/Challenge-00.md | 100 ++++++++++++++++++ .../Student/Challenge-01.md | 99 +++++++++++++++++ .../Student/Challenge-02.md | 99 +++++++++++++++++ .../Student/Challenge-03.md | 99 +++++++++++++++++ .../Student/Challenge-04.md | 99 +++++++++++++++++ .../Student/Challenge-05.md | 99 +++++++++++++++++ .../Student/Challenge-06.md | 99 +++++++++++++++++ .../Student/Challenge-07.md | 99 +++++++++++++++++ .../Student/Challenge-08.md | 99 +++++++++++++++++ .../Student/Challenge-09.md | 99 +++++++++++++++++ .../Student/Challenge-10.md | 99 +++++++++++++++++ .../Student/Challenge-11.md | 99 +++++++++++++++++ .../Student/Challenge-12.md | 99 +++++++++++++++++ .../Student/Challenge-13.md | 99 +++++++++++++++++ .../Student/Challenge-14.md | 99 +++++++++++++++++ .../Student/Challenge-15.md | 99 +++++++++++++++++ .../Student/Resources/.gitkeep | 0 37 files changed, 2064 insertions(+) create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Lectures.pptx create mode 100644 xxx-ConfluentCloudOnAzure/Coach/README.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-00.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-01.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-02.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-03.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-04.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-05.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-06.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-07.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-08.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-09.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-10.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-11.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-12.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-13.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-14.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solution-15.md create mode 100644 xxx-ConfluentCloudOnAzure/Coach/Solutions/.gitkeep create mode 100644 xxx-ConfluentCloudOnAzure/README.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-00.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-01.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-02.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-03.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-04.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-05.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-06.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-07.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-08.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-09.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-10.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-11.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-12.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-13.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-14.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Challenge-15.md create mode 100644 xxx-ConfluentCloudOnAzure/Student/Resources/.gitkeep diff --git a/xxx-ConfluentCloudOnAzure/Coach/Lectures.pptx b/xxx-ConfluentCloudOnAzure/Coach/Lectures.pptx new file mode 100644 index 0000000000000000000000000000000000000000..e7303f385c01547d33a0643802b25c5d97401b04 GIT binary patch literal 215788 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
c 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
*OxCTl=5oa}+Z~w?(;4Mb(`tGn9tup}2a^miw*6 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 literal 0 HcmV?d00001 diff --git a/xxx-ConfluentCloudOnAzure/Coach/README.md b/xxx-ConfluentCloudOnAzure/Coach/README.md new file mode 100644 index 0000000000..50dfbfa3e0 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/README.md @@ -0,0 +1,99 @@ +# What The Hack - ConfluentCloudOnAzure - Coach Guide + +## Introduction + +Welcome to the coach's guide for the ConfluentCloudOnAzure What The Hack. Here you will find links to specific guidance for coaches for each of the challenges. + +This hack includes an optional [lecture presentation](Lectures.pptx) that features short presentations to introduce key topics associated with each challenge. It is recommended that the host present each short presentation before attendees kick off that challenge. + +**NOTE:** If you are a Hackathon participant, this is the answer guide. Don't cheat yourself by looking at these during the hack! Go learn something. :) + +## Coach's Guides + +- Challenge 00: **[Prerequisites - Ready, Set, GO!](./Solution-00.md)** + - Prepare your workstation to work with Azure. +- Challenge 01: **[Title of Challenge](./Solution-01.md)** + - Description of challenge +- Challenge 02: **[Title of Challenge](./Solution-02.md)** + - Description of challenge +- Challenge 03: **[Title of Challenge](./Solution-03.md)** + - Description of challenge +- Challenge 04: **[Title of Challenge](./Solution-04.md)** + - Description of challenge +- Challenge 05: **[Title of Challenge](./Solution-05.md)** + - Description of challenge +- Challenge 06: **[Title of Challenge](./Solution-06.md)** + - Description of challenge +- Challenge 07: **[Title of Challenge](./Solution-07.md)** + - Description of challenge +- Challenge 08: **[Title of Challenge](./Solution-08.md)** + - Description of challenge +- Challenge 09: **[Title of Challenge](./Solution-09.md)** + - Description of challenge +- Challenge 10: **[Title of Challenge](./Solution-10.md)** + - Description of challenge +- Challenge 11: **[Title of Challenge](./Solution-11.md)** + - Description of challenge +- Challenge 12: **[Title of Challenge](./Solution-12.md)** + - Description of challenge +- Challenge 13: **[Title of Challenge](./Solution-13.md)** + - Description of challenge +- Challenge 14: **[Title of Challenge](./Solution-14.md)** + - Description of challenge +- Challenge 15: **[Title of Challenge](./Solution-15.md)** + - Description of challenge + +## Coach Prerequisites + +This hack has pre-reqs that a coach is responsible for understanding and/or setting up BEFORE hosting an event. Please review the [What The Hack Hosting Guide](https://aka.ms/wthhost) for information on how to host a hack event. + +The guide covers the common preparation steps a coach needs to do before any What The Hack event, including how to properly configure Microsoft Teams. + +### Student Resources + +Before the hack, it is the Coach's responsibility to download and package up the contents of the `/Student/Resources` folder of this hack into a "Resources.zip" file. The coach should then provide a copy of the Resources.zip file to all students at the start of the hack. + +Always refer students to the [What The Hack website](https://aka.ms/wth) for the student guide: [https://aka.ms/wth](https://aka.ms/wth) + +**NOTE:** Students should **not** be given a link to the What The Hack repo before or during a hack. The student guide does **NOT** have any links to the Coach's guide or the What The Hack repo on GitHub. + +### Additional Coach Prerequisites (Optional) + +_Please list any additional pre-event setup steps a coach would be required to set up such as, creating or hosting a shared dataset, or deploying a lab environment._ + +## Azure Requirements + +This hack requires students to have access to an Azure subscription where they can create and consume Azure resources. These Azure requirements should be shared with a stakeholder in the organization that will be providing the Azure subscription(s) that will be used by the students. + +_Please list Azure subscription requirements._ + +_For example:_ + +- Azure resources that will be consumed by a student implementing the hack's challenges +- Azure permissions required by a student to complete the hack's challenges. + +## Suggested Hack Agenda (Optional) + +_This section is optional. You may wish to provide an estimate of how long each challenge should take for an average squad of students to complete and/or a proposal of how many challenges a coach should structure each session for a multi-session hack event. For example:_ + +- Sample Day 1 + - Challenge 1 (1 hour) + - Challenge 2 (30 mins) + - Challenge 3 (2 hours) +- Sample Day 2 + - Challenge 4 (45 mins) + - Challenge 5 (1 hour) + - Challenge 6 (45 mins) + +## Repository Contents + +_The default files & folders are listed below. You may add to this if you want to specify what is in additional sub-folders you may add._ + +- `./Coach` + - Coach's Guide and related files +- `./Coach/Solutions` + - Solution files with completed example answers to a challenge +- `./Student` + - Student's Challenge Guide +- `./Student/Resources` + - Resource files, sample code, scripts, etc meant to be provided to students. (Must be packaged up by the coach and provided to students at start of event) diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-00.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-00.md new file mode 100644 index 0000000000..8ca1a44d71 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-00.md @@ -0,0 +1,20 @@ +# Challenge 00 - - Coach's Guide + +**[Home](./README.md)** - [Next Solution >](./Solution-01.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-01.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-01.md new file mode 100644 index 0000000000..01d1e30c27 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-01.md @@ -0,0 +1,20 @@ +# Challenge 01 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-00.md) - **[Home](./README.md)** - [Next Solution >](./Solution-02.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-02.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-02.md new file mode 100644 index 0000000000..1ef8ca5035 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-02.md @@ -0,0 +1,20 @@ +# Challenge 02 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-01.md) - **[Home](./README.md)** - [Next Solution >](./Solution-03.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-03.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-03.md new file mode 100644 index 0000000000..9591196509 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-03.md @@ -0,0 +1,20 @@ +# Challenge 03 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-02.md) - **[Home](./README.md)** - [Next Solution >](./Solution-04.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-04.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-04.md new file mode 100644 index 0000000000..90a770fdb3 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-04.md @@ -0,0 +1,20 @@ +# Challenge 04 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-03.md) - **[Home](./README.md)** - [Next Solution >](./Solution-05.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-05.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-05.md new file mode 100644 index 0000000000..811c053840 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-05.md @@ -0,0 +1,20 @@ +# Challenge 05 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-04.md) - **[Home](./README.md)** - [Next Solution >](./Solution-06.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-06.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-06.md new file mode 100644 index 0000000000..0100770cfa --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-06.md @@ -0,0 +1,20 @@ +# Challenge 06 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-05.md) - **[Home](./README.md)** - [Next Solution >](./Solution-07.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-07.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-07.md new file mode 100644 index 0000000000..d0dce03848 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-07.md @@ -0,0 +1,20 @@ +# Challenge 07 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-06.md) - **[Home](./README.md)** - [Next Solution >](./Solution-08.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-08.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-08.md new file mode 100644 index 0000000000..dd606228fe --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-08.md @@ -0,0 +1,20 @@ +# Challenge 08 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-07.md) - **[Home](./README.md)** - [Next Solution >](./Solution-09.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-09.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-09.md new file mode 100644 index 0000000000..fb3e4977be --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-09.md @@ -0,0 +1,20 @@ +# Challenge 09 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-08.md) - **[Home](./README.md)** - [Next Solution >](./Solution-10.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-10.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-10.md new file mode 100644 index 0000000000..333d00f4e5 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-10.md @@ -0,0 +1,20 @@ +# Challenge 10 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-09.md) - **[Home](./README.md)** - [Next Solution >](./Solution-11.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-11.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-11.md new file mode 100644 index 0000000000..bfe08eb196 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-11.md @@ -0,0 +1,20 @@ +# Challenge 11 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-10.md) - **[Home](./README.md)** - [Next Solution >](./Solution-12.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-12.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-12.md new file mode 100644 index 0000000000..1298296f72 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-12.md @@ -0,0 +1,20 @@ +# Challenge 12 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-11.md) - **[Home](./README.md)** - [Next Solution >](./Solution-13.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-13.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-13.md new file mode 100644 index 0000000000..b2cd42e5c4 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-13.md @@ -0,0 +1,20 @@ +# Challenge 13 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-12.md) - **[Home](./README.md)** - [Next Solution >](./Solution-14.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-14.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-14.md new file mode 100644 index 0000000000..392d0d9f58 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-14.md @@ -0,0 +1,20 @@ +# Challenge 14 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-13.md) - **[Home](./README.md)** - [Next Solution >](./Solution-15.md) + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solution-15.md b/xxx-ConfluentCloudOnAzure/Coach/Solution-15.md new file mode 100644 index 0000000000..2630ab3d7e --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Coach/Solution-15.md @@ -0,0 +1,20 @@ +# Challenge 15 - <Title of Challenge> - Coach's Guide + +[< Previous Solution](./Solution-14.md) - **[Home](./README.md)** + +## Notes & Guidance + +This is the only section you need to include. + +Use general non-bulleted text for the beginning of a solution area for this challenge + +- Then move into bullets + - And sub-bullets and even + - sub-sub-bullets + +Break things apart with more than one bullet list + +- Like this +- One +- Right +- Here diff --git a/xxx-ConfluentCloudOnAzure/Coach/Solutions/.gitkeep b/xxx-ConfluentCloudOnAzure/Coach/Solutions/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/xxx-ConfluentCloudOnAzure/README.md b/xxx-ConfluentCloudOnAzure/README.md new file mode 100644 index 0000000000..d9ca7be1c4 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/README.md @@ -0,0 +1,60 @@ +# What The Hack - ConfluentCloudOnAzure + +## Introduction + +The IoT Hack of the Century will take you on a whirlwind tour in the world of IoT and how it is being used in the modern world of mineral extraction in exotic locations like the Arctic and the wilds of South Africa. + +## Learning Objectives + +In this hack you will be solving the common business problem that companies in the mineral extraction industry face and how IoT solutions from Azure are brought to bare + +1. Provision an IoT Hub +2. Set up an IoT Edge device +3. Bring Azure Sphere to your solution for scale and resiliency + +## Challenges + +- Challenge 00: **[Prerequisites - Ready, Set, GO!](Student/Challenge-00.md)** + - Prepare your workstation to work with Azure. +- Challenge 01: **[Title of Challenge](Student/Challenge-01.md)** + - Description of challenge +- Challenge 02: **[Title of Challenge](Student/Challenge-02.md)** + - Description of challenge +- Challenge 03: **[Title of Challenge](Student/Challenge-03.md)** + - Description of challenge +- Challenge 04: **[Title of Challenge](Student/Challenge-04.md)** + - Description of challenge +- Challenge 05: **[Title of Challenge](Student/Challenge-05.md)** + - Description of challenge +- Challenge 06: **[Title of Challenge](Student/Challenge-06.md)** + - Description of challenge +- Challenge 07: **[Title of Challenge](Student/Challenge-07.md)** + - Description of challenge +- Challenge 08: **[Title of Challenge](Student/Challenge-08.md)** + - Description of challenge +- Challenge 09: **[Title of Challenge](Student/Challenge-09.md)** + - Description of challenge +- Challenge 10: **[Title of Challenge](Student/Challenge-10.md)** + - Description of challenge +- Challenge 11: **[Title of Challenge](Student/Challenge-11.md)** + - Description of challenge +- Challenge 12: **[Title of Challenge](Student/Challenge-12.md)** + - Description of challenge +- Challenge 13: **[Title of Challenge](Student/Challenge-13.md)** + - Description of challenge +- Challenge 14: **[Title of Challenge](Student/Challenge-14.md)** + - Description of challenge +- Challenge 15: **[Title of Challenge](Student/Challenge-15.md)** + - Description of challenge + +## Prerequisites + +- Your own Azure subscription with Owner access +- Visual Studio Code +- Azure CLI +- An AVNET X231 device + +## Contributors + +- Jane Q. Public +- Joe T. Muppet diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-00.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-00.md new file mode 100644 index 0000000000..99c03958d6 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-00.md @@ -0,0 +1,100 @@ +# Challenge 00 - Prerequisites - Ready, Set, GO! + +**[Home](../README.md)** - [Next Challenge >](./Challenge-01.md) + +**_This is a template for "Challenge Zero" which focuses on getting prerequisites set up for the hack. The italicized text provides hints & examples of what should or should NOT go in each section._** + +**_We have included links to some common What The Hack pre-reqs in this template. All common prerequisite links go to the WTH-CommonPrerequisites page where there are more details on what each tool's purpose is._** + +**_You should remove any common pre-reqs that are not required for your hack. Then add additional pre-reqs that are required for your hack in the Description section below._** + +**_You should remove all italicized & sample text in this template and replace with your content._** + +## Introduction + +Thank you for participating in the ConfluentCloudOnAzure What The Hack. Before you can hack, you will need to set up some prerequisites. + +## Common Prerequisites + +We have compiled a list of common tools and software that will come in handy to complete most What The Hack Azure-based hacks! + +You might not need all of them for the hack you are participating in. However, if you work with Azure on a regular basis, these are all things you should consider having in your toolbox. + +<!-- If you are editing this template manually, be aware that these links are only designed to work if this Markdown file is in the /xxx-HackName/Student/ folder of your hack. --> + +- [Azure Subscription](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-subscription) +- [Windows Subsystem for Linux](../../000-HowToHack/WTH-Common-Prerequisites.md#windows-subsystem-for-linux) +- [Managing Cloud Resources](../../000-HowToHack/WTH-Common-Prerequisites.md#managing-cloud-resources) + - [Azure Portal](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-portal) + - [Azure CLI](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-cli) + - [Note for Windows Users](../../000-HowToHack/WTH-Common-Prerequisites.md#note-for-windows-users) + - [Azure PowerShell CmdLets](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-powershell-cmdlets) + - [Azure Cloud Shell](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-cloud-shell) +- [Visual Studio Code](../../000-HowToHack/WTH-Common-Prerequisites.md#visual-studio-code) + - [VS Code plugin for ARM Templates](../../000-HowToHack/WTH-Common-Prerequisites.md#visual-studio-code-plugins-for-arm-templates) +- [Azure Storage Explorer](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-storage-explorer) + +## Description + +_This section should clearly state any additional prerequisite tools that need to be installed or set up in the Azure environment that the student will hack in._ + +_While ordered lists are generally not welcome in What The Hack challenge descriptions, you can use one here in Challenge Zero IF and only IF the steps you are asking the student to perform are not core to the learning objectives of the hack._ + +_For example, if the hack is on IoT Devices and you want the student to deploy an ARM/Bicep template that sets up the environment they will hack in without them needing to understand how ARM/Bicep templates work, you can provide step-by-step instructions on how to deploy the ARM/Bicep template._ + +_Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack. You should leave the sample text below in that refers to the Resources.zip file._ + +**\*NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resources.zip file provided by the coach.\* + +**\*NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.\* + +_Sample challenge zero text for the IoT Hack Of The Century:_ + +Now that you have the common pre-requisites installed on your workstation, there are prerequisites specifc to this hack. + +Your coach will provide you with a Resources.zip file that contains resources you will need to complete the hack. If you plan to work locally, you should unpack it on your workstation. If you plan to use the Azure Cloud Shell, you should upload it to the Cloud Shell and unpack it there. + +Please install these additional tools: + +- [Azure IoT Tools](https://marketplace.visualstudio.com/items?itemName=vsciot-vscode.azure-iot-tools) extension for Visual Studio Code +- .NET SDK 6.0 or later installed on your development machine. This can be downloaded from [here](https://www.microsoft.com/net/download/all) for multiple platforms. + +In the `/Challenge00/` folder of the Resources.zip file, you will find an ARM template, `setupIoTEnvironment.json` that sets up the initial hack environment in Azure you will work with in subsequent challenges. + +Please deploy the template by running the following Azure CLI commands from the location of the template file: +``` +az group create --name myIoT-rg --location eastus +az group deployment create -g myIoT-rg --name HackEnvironment -f setupIoTEnvironment.json +``` + +## Success Criteria + +_Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach._ + +_The success criteria should not be a list of instructions._ + +_Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."_ + +_Sample success criteria for the IoT prerequisites challenge:_ + +To complete this challenge successfully, you should be able to: + +- Verify that you have a bash shell with the Azure CLI available. +- Verify that the ARM template has deployed the following resources in Azure: + - Azure IoT Hub + - Virtual Network + - Jumpbox VM + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +_Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario._ + +**\*Note:** Use descriptive text for each link instead of just URLs.\* + +_Sample IoT resource links:_ + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-01.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-01.md new file mode 100644 index 0000000000..fcf81ed831 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-01.md @@ -0,0 +1,99 @@ +# Challenge 01 - <Title of Challenge> + +[< Previous Challenge](./Challenge-00.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-02.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-02.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-02.md new file mode 100644 index 0000000000..459fb175d5 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-02.md @@ -0,0 +1,99 @@ +# Challenge 02 - <Title of Challenge> + +[< Previous Challenge](./Challenge-01.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-03.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-03.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-03.md new file mode 100644 index 0000000000..88656873ba --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-03.md @@ -0,0 +1,99 @@ +# Challenge 03 - <Title of Challenge> + +[< Previous Challenge](./Challenge-02.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-04.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-04.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-04.md new file mode 100644 index 0000000000..a032304040 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-04.md @@ -0,0 +1,99 @@ +# Challenge 04 - <Title of Challenge> + +[< Previous Challenge](./Challenge-03.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-05.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-05.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-05.md new file mode 100644 index 0000000000..bc2fa34b49 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-05.md @@ -0,0 +1,99 @@ +# Challenge 05 - <Title of Challenge> + +[< Previous Challenge](./Challenge-04.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-06.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-06.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-06.md new file mode 100644 index 0000000000..59e43d9bae --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-06.md @@ -0,0 +1,99 @@ +# Challenge 06 - <Title of Challenge> + +[< Previous Challenge](./Challenge-05.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-07.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-07.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-07.md new file mode 100644 index 0000000000..82cb7e727e --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-07.md @@ -0,0 +1,99 @@ +# Challenge 07 - <Title of Challenge> + +[< Previous Challenge](./Challenge-06.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-08.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-08.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-08.md new file mode 100644 index 0000000000..4fffe19429 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-08.md @@ -0,0 +1,99 @@ +# Challenge 08 - <Title of Challenge> + +[< Previous Challenge](./Challenge-07.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-09.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-09.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-09.md new file mode 100644 index 0000000000..0c74d60da8 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-09.md @@ -0,0 +1,99 @@ +# Challenge 09 - <Title of Challenge> + +[< Previous Challenge](./Challenge-08.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-10.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-10.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-10.md new file mode 100644 index 0000000000..9c3983adf6 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-10.md @@ -0,0 +1,99 @@ +# Challenge 10 - <Title of Challenge> + +[< Previous Challenge](./Challenge-09.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-11.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-11.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-11.md new file mode 100644 index 0000000000..2275ef98be --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-11.md @@ -0,0 +1,99 @@ +# Challenge 11 - <Title of Challenge> + +[< Previous Challenge](./Challenge-10.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-12.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-12.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-12.md new file mode 100644 index 0000000000..629ff23c7f --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-12.md @@ -0,0 +1,99 @@ +# Challenge 12 - <Title of Challenge> + +[< Previous Challenge](./Challenge-11.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-13.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-13.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-13.md new file mode 100644 index 0000000000..e4f6cbbaef --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-13.md @@ -0,0 +1,99 @@ +# Challenge 13 - <Title of Challenge> + +[< Previous Challenge](./Challenge-12.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-14.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-14.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-14.md new file mode 100644 index 0000000000..0ac99972f1 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-14.md @@ -0,0 +1,99 @@ +# Challenge 14 - <Title of Challenge> + +[< Previous Challenge](./Challenge-13.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-15.md) + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-15.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-15.md new file mode 100644 index 0000000000..364e5ea492 --- /dev/null +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-15.md @@ -0,0 +1,99 @@ +# Challenge 15 - <Title of Challenge> + +[< Previous Challenge](./Challenge-14.md) - **[Home](../README.md)** + +***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** + +## Pre-requisites (Optional) + +*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* + +## Introduction + +*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* + +*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* + +*For example:* + +When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. + +## Description + +*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* + +***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* + +***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* + +*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* + +***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* + +***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* + +***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* + +*Sample challenge text for the IoT Hack Of The Century:* + +In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. + +You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. + +Please configure the thingamajig with the following specifications: +- Use dynamic IP addresses +- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" +- Deny access to "IoTProxyShip" + +You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). + +## Success Criteria + +*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* + +*The success criteria should not be a list of instructions.* + +*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* + +*Sample success criteria for the IoT sample challenge:* + +To complete this challenge successfully, you should be able to: +- Verify that the IoT device boots properly after its thingamajig is configured. +- Verify that the thingamajig can connect to the mothership. +- Demonstrate that the thingamajic will not connect to the IoTProxyShip + +## Learning Resources + +_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ + +*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* + +***Note:** Use descriptive text for each link instead of just URLs.* + +*Sample IoT resource links:* + +- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) +- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) +- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) + +## Tips + +*This section is optional and may be omitted.* + +*Add tips and hints here to give students food for thought. Sample IoT tips:* + +- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. +- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. + +## Advanced Challenges (Optional) + +*If you want, you may provide additional goals to this challenge for folks who are eager.* + +*This section is optional and may be omitted.* + +*Sample IoT advanced challenges:* + +Too comfortable? Eager to do more? Try these additional challenges! + +- Observe what happens if your IoTDevice is separated from its thingamajig. +- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. diff --git a/xxx-ConfluentCloudOnAzure/Student/Resources/.gitkeep b/xxx-ConfluentCloudOnAzure/Student/Resources/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 From c1a0b974bab1f5e2e44895ce269ca5e8ae9278ac Mon Sep 17 00:00:00 2001 From: Israel Ekpo <isekpo@microsoft.com> Date: Wed, 7 Jun 2023 13:12:18 -0400 Subject: [PATCH 2/2] Adding Challenges 0 through 5 to Student Content --- xxx-ConfluentCloudOnAzure/README.md | 76 ++++++------ .../Student/Challenge-00.md | 75 ++++-------- .../Student/Challenge-01.md | 99 ++++------------ .../Student/Challenge-02.md | 105 ++++------------- .../Student/Challenge-03.md | 108 +++++------------- .../Student/Challenge-04.md | 102 ++++------------- .../Student/Challenge-05.md | 102 ++++------------- 7 files changed, 173 insertions(+), 494 deletions(-) diff --git a/xxx-ConfluentCloudOnAzure/README.md b/xxx-ConfluentCloudOnAzure/README.md index d9ca7be1c4..4fd7131475 100644 --- a/xxx-ConfluentCloudOnAzure/README.md +++ b/xxx-ConfluentCloudOnAzure/README.md @@ -1,60 +1,48 @@ -# What The Hack - ConfluentCloudOnAzure +# What The Hack - Confluent Cloud Integration with Microsoft Azure ## Introduction -The IoT Hack of the Century will take you on a whirlwind tour in the world of IoT and how it is being used in the modern world of mineral extraction in exotic locations like the Arctic and the wilds of South Africa. +This introductory hackathon will provide participants with hands-on experience on how to integrate the Confluent Cloud offering with Microsoft Azure platform services. ## Learning Objectives -In this hack you will be solving the common business problem that companies in the mineral extraction industry face and how IoT solutions from Azure are brought to bare +The objective of the hackathon is to demonstrate different strategies for integrating Confluent Cloud on Azure with Azure Platform products across various scenarios. -1. Provision an IoT Hub -2. Set up an IoT Edge device -3. Bring Azure Sphere to your solution for scale and resiliency +## Exit Competencies +Upon completion, the participants should be able to: +- Master basic concepts involved with event stream processing with Confluent Cloud leveraging the Apache Kafka Ecosystem components such as Producers, Consumers, Kafka Connect, Kafka Streams, KSQL and Schema Registry. +- Understand the different source and sink connectors available for integration on Microsoft Azure. +- Provision and configure Confluent Cloud and the various ecosystem components. +- Secure access to Confluent Cloud Resources. +- Integrate Azure Private Virtual Networks with Confluent Cloud +- Perform capacity planning and quota enforcement for Confluent Cloud resources. +- Manage availability, business continuity and disaster recovery. ## Challenges -- Challenge 00: **[Prerequisites - Ready, Set, GO!](Student/Challenge-00.md)** - - Prepare your workstation to work with Azure. -- Challenge 01: **[Title of Challenge](Student/Challenge-01.md)** - - Description of challenge -- Challenge 02: **[Title of Challenge](Student/Challenge-02.md)** - - Description of challenge -- Challenge 03: **[Title of Challenge](Student/Challenge-03.md)** - - Description of challenge -- Challenge 04: **[Title of Challenge](Student/Challenge-04.md)** - - Description of challenge -- Challenge 05: **[Title of Challenge](Student/Challenge-05.md)** - - Description of challenge -- Challenge 06: **[Title of Challenge](Student/Challenge-06.md)** - - Description of challenge -- Challenge 07: **[Title of Challenge](Student/Challenge-07.md)** - - Description of challenge -- Challenge 08: **[Title of Challenge](Student/Challenge-08.md)** - - Description of challenge -- Challenge 09: **[Title of Challenge](Student/Challenge-09.md)** - - Description of challenge -- Challenge 10: **[Title of Challenge](Student/Challenge-10.md)** - - Description of challenge -- Challenge 11: **[Title of Challenge](Student/Challenge-11.md)** - - Description of challenge -- Challenge 12: **[Title of Challenge](Student/Challenge-12.md)** - - Description of challenge -- Challenge 13: **[Title of Challenge](Student/Challenge-13.md)** - - Description of challenge -- Challenge 14: **[Title of Challenge](Student/Challenge-14.md)** - - Description of challenge -- Challenge 15: **[Title of Challenge](Student/Challenge-15.md)** - - Description of challenge +These are the 5 challenges for the Hack. +- Challenge 00: **[ Prerequisites, Sizing & Capacity Planning](Student/Challenge-00.md)** + - Prepare your workstation to work with Azure. Deploy the Confluent & Azure resources needed for starting the Hack. +- Challenge 01: **[Data Definition and Core Concepts for Storage](Student/Challenge-01.md)** + - DDL: Design, configure and create Kafka topics and Schema Registry instance for the Kafka events/messages. +- Challenge 02: **[Data Manipulation Reading and Writing Data Directly with Topics](Student/Challenge-02.md)** + - DML: Write data from Kafka producers and read data with Kafka consumers. Enrich and display events coming back from Kafka topics. +- Challenge 03: **[Kafka Connect Ecosystem and Architecture](Student/Challenge-03.md)** + - The glue: leverage the Kafka Connect ecosystem to bring data into Kafka topics from different data stores and write events out to different data stores using Kafka Connect. +- Challenge 04: **[Bringing it All Together, Processing Streams in Realtime with KSQLDB](Student/Challenge-04.md)** + - Real-time JOINS: Leverage Kafka Streams and KSQLDB to bring together multiple streams of events, facts and dimensions to enrich, filter, process and generate new events from existing streams. +- Challenge 05: **[Realtime Visualization of Streams](Student/Challenge-05.md)** + - A picture is worth 1024 words. Generate cool visualizations that captures the state of the streams in realtime. ## Prerequisites -- Your own Azure subscription with Owner access -- Visual Studio Code -- Azure CLI -- An AVNET X231 device +- Access to an Azure subscription with Owner access + - If you don’t have one, Sign Up for Azure [HERE](https://azure.microsoft.com/en-us/free/) + - Familiarity with [Azure Cloud Shell](https://learn.microsoft.com/en-us/azure/cloud-shell/overview#multiple-access-points) +- Access to [Confluent Cloud on Azure](https://learn.microsoft.com/en-us/azure/partner-solutions/apache-kafka-confluent-cloud/overview), an Azure Native ISV Services +- An IDE: [Visual Studio Code](https://code.visualstudio.com/), [WebStorm](https://www.jetbrains.com/webstorm/download/), [PyCharm](https://www.jetbrains.com/pycharm/download/) or [IntelliJ](https://www.jetbrains.com/idea/download/) ## Contributors -- Jane Q. Public -- Joe T. Muppet +- [Israel Ekpo](https://github.com/izzymsft) +- [Jacob Bogie](https://github.com/JakeBogie) diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-00.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-00.md index 99c03958d6..246284752c 100644 --- a/xxx-ConfluentCloudOnAzure/Student/Challenge-00.md +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-00.md @@ -1,18 +1,10 @@ -# Challenge 00 - Prerequisites - Ready, Set, GO! +# Challenge 00 - Prerequisites, Sizing & Capacity Planning **[Home](../README.md)** - [Next Challenge >](./Challenge-01.md) -**_This is a template for "Challenge Zero" which focuses on getting prerequisites set up for the hack. The italicized text provides hints & examples of what should or should NOT go in each section._** - -**_We have included links to some common What The Hack pre-reqs in this template. All common prerequisite links go to the WTH-CommonPrerequisites page where there are more details on what each tool's purpose is._** - -**_You should remove any common pre-reqs that are not required for your hack. Then add additional pre-reqs that are required for your hack in the Description section below._** - -**_You should remove all italicized & sample text in this template and replace with your content._** - ## Introduction -Thank you for participating in the ConfluentCloudOnAzure What The Hack. Before you can hack, you will need to set up some prerequisites. +Thank you for participating in the Confluent on Azure What The Hack. Before you can hack, you will need to set up some prerequisites. ## Common Prerequisites @@ -20,37 +12,32 @@ We have compiled a list of common tools and software that will come in handy to You might not need all of them for the hack you are participating in. However, if you work with Azure on a regular basis, these are all things you should consider having in your toolbox. -<!-- If you are editing this template manually, be aware that these links are only designed to work if this Markdown file is in the /xxx-HackName/Student/ folder of your hack. --> - - [Azure Subscription](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-subscription) -- [Windows Subsystem for Linux](../../000-HowToHack/WTH-Common-Prerequisites.md#windows-subsystem-for-linux) -- [Managing Cloud Resources](../../000-HowToHack/WTH-Common-Prerequisites.md#managing-cloud-resources) - - [Azure Portal](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-portal) - - [Azure CLI](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-cli) - - [Note for Windows Users](../../000-HowToHack/WTH-Common-Prerequisites.md#note-for-windows-users) - - [Azure PowerShell CmdLets](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-powershell-cmdlets) - - [Azure Cloud Shell](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-cloud-shell) +- [Azure Portal](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-portal) +- [Azure CLI](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-cli) +- [Note for Windows Users](../../000-HowToHack/WTH-Common-Prerequisites.md#note-for-windows-users) +- [Azure PowerShell CmdLets](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-powershell-cmdlets) +- [Azure Cloud Shell](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-cloud-shell) - [Visual Studio Code](../../000-HowToHack/WTH-Common-Prerequisites.md#visual-studio-code) - - [VS Code plugin for ARM Templates](../../000-HowToHack/WTH-Common-Prerequisites.md#visual-studio-code-plugins-for-arm-templates) +- [VS Code plugin for ARM Templates](../../000-HowToHack/WTH-Common-Prerequisites.md#visual-studio-code-plugins-for-arm-templates) - [Azure Storage Explorer](../../000-HowToHack/WTH-Common-Prerequisites.md#azure-storage-explorer) -## Description - -_This section should clearly state any additional prerequisite tools that need to be installed or set up in the Azure environment that the student will hack in._ +## Background Story +Contoso Retail is an online grocery platform that sells food that can be shipped to customers. Clients of Contoso Retail should be able to purchase the grocery items and also return items for any reason. Contoso Retail also works with suppliers that bring inventory daily for replenishment to the warehouse where customer orders are shipped from. The inventory is constantly been incremented or decremented from activities such as customer purchases, supplier replenishments and customer returns (if the item is still in good condition and can be resold). -_While ordered lists are generally not welcome in What The Hack challenge descriptions, you can use one here in Challenge Zero IF and only IF the steps you are asking the student to perform are not core to the learning objectives of the hack._ +One average, there are approximately 35,000 transactions every hour that gets generated across multiple orders. Each transaction generates about 500kB of data going into the Kafka cluster and these events have to be retained for at least 90 days as per department of commerce regulations. -_For example, if the hack is on IoT Devices and you want the student to deploy an ARM/Bicep template that sets up the environment they will hack in without them needing to understand how ARM/Bicep templates work, you can provide step-by-step instructions on how to deploy the ARM/Bicep template._ +The suppliers send notifications for inventory replenishments in various data formats including but not limited to CSV, JSON, Protobuf and Avro formats. The order database is a MySQL database that keeps track of all purchases and the returns databases is a Cosmos DB collection that tracks all the items returned. -_Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack. You should leave the sample text below in that refers to the Resources.zip file._ +## Description -**\*NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resources.zip file provided by the coach.\* +Based on the background story, determine the appropriate Confluent Cloud cluster and SKU as well as the necessary Kafka components as well as the Azure resources that is necessary to support the workload necessary for the solution that Contoso Retail needs. -**\*NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.\* +Deploy the ARM template for the Cosmos DB database, Data Generators and Azure functions and set up the initial Confluent Cloud Cluster. The Cosmos DB database contains collections for Users and Products -_Sample challenge zero text for the IoT Hack Of The Century:_ +For this hack, we will need to deploy a Confluent Cloud on Azure instance as well as other Azure data stores and compute resources needed for the hack. -Now that you have the common pre-requisites installed on your workstation, there are prerequisites specifc to this hack. +Now that you have the common pre-requisites installed on your workstation, there are prerequisites specific to this hack. Your coach will provide you with a Resources.zip file that contains resources you will need to complete the hack. If you plan to work locally, you should unpack it on your workstation. If you plan to use the Azure Cloud Shell, you should upload it to the Cloud Shell and unpack it there. @@ -69,32 +56,20 @@ az group deployment create -g myIoT-rg --name HackEnvironment -f setupIoTEnviron ## Success Criteria -_Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach._ - -_The success criteria should not be a list of instructions._ - -_Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."_ - -_Sample success criteria for the IoT prerequisites challenge:_ - To complete this challenge successfully, you should be able to: - Verify that you have a bash shell with the Azure CLI available. - Verify that the ARM template has deployed the following resources in Azure: - - Azure IoT Hub + - Azure Function App - Virtual Network - - Jumpbox VM + - Azure Cosmos DB Instance +- Verify that the Confluent Cloud on Azure instance has been deployed successfully ## Learning Resources -_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ - -_Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario._ - -**\*Note:** Use descriptive text for each link instead of just URLs.\* - -_Sample IoT resource links:_ +_Confluent and Azure resource links:_ -- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) -- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) -- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) +- [Apache Kafka for Confluent Cloud on Azure](https://learn.microsoft.com/en-us/azure/partner-solutions/apache-kafka-confluent-cloud/overview) +- [Azure Cosmos DB](https://learn.microsoft.com/en-us/azure/cosmos-db/introduction) +- [Azure Function Premium Plan](https://learn.microsoft.com/en-us/azure/azure-functions/create-premium-plan-function-app-portal) +- [Confluent Developer Courses](https://developer.confluent.io/learn-kafka/) diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-01.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-01.md index fcf81ed831..a472f905d7 100644 --- a/xxx-ConfluentCloudOnAzure/Student/Challenge-01.md +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-01.md @@ -1,99 +1,42 @@ -# Challenge 01 - <Title of Challenge> +# Challenge 01 - Data Definition and Core Concepts for Storage [< Previous Challenge](./Challenge-00.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-02.md) -***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** - -## Pre-requisites (Optional) - -*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* - ## Introduction -*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* - -*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* - -*For example:* - -When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. +Just like SQL tables, Apache Kafka has topics that serves to hold the events that are sent to be stored/buffered on the Kafka cluster. +The Confluent Schema Registry is a resources that helps to keep track of the different versions of messages/events that are stored in these topics. ## Description -*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* - -***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* - -***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* +There are some Azure functions that have been deployed to push retail activity data into the cluster. -*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* +These functions are currently disabled. These functions will be generating activities and events in the following categories, so we need to set up topics to store the events: +- Purchases +- Returns +- Inventory Replenishment +- Users +- Product Ratings +- Products +- Inventory on Hand -***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* +Each topic should have 4 partitions. -***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* +You will need to create topics and set up a schema registry instance and create topics for these event/message types on the cluster that will hold these event streams from the data generators (Azure Functions). -***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* - -*Sample challenge text for the IoT Hack Of The Century:* - -In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. - -You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. - -Please configure the thingamajig with the following specifications: -- Use dynamic IP addresses -- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" -- Deny access to "IoTProxyShip" - -You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). +Enable the functions and restart the function app with the correct configurations after your schema registry instance and Kafka topics have been created. ## Success Criteria -*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* - -*The success criteria should not be a list of instructions.* - -*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* - -*Sample success criteria for the IoT sample challenge:* - To complete this challenge successfully, you should be able to: -- Verify that the IoT device boots properly after its thingamajig is configured. -- Verify that the thingamajig can connect to the mothership. -- Demonstrate that the thingamajic will not connect to the IoTProxyShip +- Verify each of the topics listed are created using valid topic names. +- Verify that you can write events and read events from each topic using the CLI tools. +- Verify that the Schema Registry is aware of the data structure in each Kafka topic. ## Learning Resources -_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ - -*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* - -***Note:** Use descriptive text for each link instead of just URLs.* - *Sample IoT resource links:* -- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) -- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) -- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) - -## Tips - -*This section is optional and may be omitted.* - -*Add tips and hints here to give students food for thought. Sample IoT tips:* - -- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. -- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. - -## Advanced Challenges (Optional) - -*If you want, you may provide additional goals to this challenge for folks who are eager.* - -*This section is optional and may be omitted.* - -*Sample IoT advanced challenges:* - -Too comfortable? Eager to do more? Try these additional challenges! - -- Observe what happens if your IoTDevice is separated from its thingamajig. -- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. +- [Confluent Schema Registry](https://docs.confluent.io/platform/current/schema-registry/index.html) +- [Kafka CLI Tools](https://docs.confluent.io/kafka/operations-tools/kafka-tools.html) +- [Confluent Developer Courses](https://developer.confluent.io/learn-kafka/) diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-02.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-02.md index 459fb175d5..22b0b88c0f 100644 --- a/xxx-ConfluentCloudOnAzure/Student/Challenge-02.md +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-02.md @@ -1,99 +1,44 @@ -# Challenge 02 - <Title of Challenge> +# Challenge 02 - Data Manipulation Reading and Writing Data Directly with Topics [< Previous Challenge](./Challenge-01.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-03.md) -***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** - -## Pre-requisites (Optional) - -*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* - ## Introduction -*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* - -*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* - -*For example:* - -When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. - -## Description - -*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* - -***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* - -***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* - -*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* +When interacting with Kafka topics, clients generally fall into two categories: +- Producers +- Consumers -***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* +An Apache Kafka® Producer is a client application that publishes (writes) events to a Kafka cluster. -***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* +The producer is thread safe and sharing a single producer instance across threads will generally be faster than having multiple instances. -***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* +It typically publishes messages to topics as key-value pairs. The keys are used to route the events to different partitions of that topic. -*Sample challenge text for the IoT Hack Of The Century:* +A Kafka Consumer is a client that consumes or reads records from a Kafka cluster. This client transparently handles the failure of Kafka brokers, and transparently adapts as topic partitions it fetches migrate within the cluster. This client also interacts with the broker to allow groups of consumers to load balance consumption using consumer groups. The consumer maintains TCP connections to the necessary brokers to fetch data. Failure to close the consumer after use will leak these connections. The consumer is not thread-safe. See Multi-threaded Processing for more details. -In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. +## Description -You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. +Contoso Retail needs to create two Kafka clients that can perform the tasks of continually writing a review by sending in a rating between 1 to 5 stars every 15 seconds for a random product (1 out of 10 products in the database). This app will pick a random user out of the Cosmos DB database to write the review (rating) each time. -Please configure the thingamajig with the following specifications: -- Use dynamic IP addresses -- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" -- Deny access to "IoTProxyShip" +The first Kafka client will do the following: +- Create a product rating entry containing the product id, user id, rating and current date. +- Rating score should be between 1 and 5 inclusive +- Sent to the Product Ratings topic -You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). +The second Kafka client should do the following, combining data from the Cosmos DB collections: +- Retrieve the product rating from the topic as soon as it is written +- Display the full name, email address and country of the user as well as the full price, product name and rating of the product. +- Also display the offset, the key, partition id where the rating event was stored +- Start with one consumer, then 2 consumers and then increase to 7 consumers. Make a note of what you observe when the number of consumers exceed the number of partitions in the topic. ## Success Criteria -*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* - -*The success criteria should not be a list of instructions.* - -*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* - -*Sample success criteria for the IoT sample challenge:* - To complete this challenge successfully, you should be able to: -- Verify that the IoT device boots properly after its thingamajig is configured. -- Verify that the thingamajig can connect to the mothership. -- Demonstrate that the thingamajic will not connect to the IoTProxyShip +- Verify that the clients are able to write successfully to the topics +- Verify that the clients are able to read successfully from the topics +- ## Learning Resources - -_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ - -*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* - -***Note:** Use descriptive text for each link instead of just URLs.* - -*Sample IoT resource links:* - -- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) -- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) -- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) - -## Tips - -*This section is optional and may be omitted.* - -*Add tips and hints here to give students food for thought. Sample IoT tips:* - -- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. -- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. - -## Advanced Challenges (Optional) - -*If you want, you may provide additional goals to this challenge for folks who are eager.* - -*This section is optional and may be omitted.* - -*Sample IoT advanced challenges:* - -Too comfortable? Eager to do more? Try these additional challenges! - -- Observe what happens if your IoTDevice is separated from its thingamajig. -- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. +- [Kafka Consumer](https://docs.confluent.io/platform/current/clients/consumer.html) +- [Kafka Producer](https://docs.confluent.io/platform/current/clients/producer.html) +- [Schemas and Serializers](https://docs.confluent.io/platform/current/clients/app-development.html) diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-03.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-03.md index 88656873ba..c1c9b2b7a1 100644 --- a/xxx-ConfluentCloudOnAzure/Student/Challenge-03.md +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-03.md @@ -1,99 +1,47 @@ -# Challenge 03 - <Title of Challenge> +# Challenge 03 - Kafka Connect Ecosystem and Architecture [< Previous Challenge](./Challenge-02.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-04.md) -***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** - -## Pre-requisites (Optional) - -*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* - ## Introduction -*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* - -*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* - -*For example:* - -When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. - -## Description - -*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* - -***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* - -***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* - -*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* - -***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* - -***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* - -***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* - -*Sample challenge text for the IoT Hack Of The Century:* +Kafka Connect is a tool for scalably and reliably streaming data between Apache Kafka® and other data systems. -In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. +It makes it simple to quickly define connectors that move large data sets in and out of Kafka. -You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. +Kafka Connect can ingest entire databases or collect metrics from all your application servers into Kafka topics, making the data available for stream processing with low latency. -Please configure the thingamajig with the following specifications: -- Use dynamic IP addresses -- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" -- Deny access to "IoTProxyShip" +An export connector can deliver data from Kafka topics into secondary storage outside Kafka like Azure Cognitive Search, Cosmos DB and Blob Store -You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). -## Success Criteria +## Description -*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* +In this challenge we are going to bring in the Kafka Connect ecosystem and leverage it to stream changes from CosmosDB into Kafka as well as stream new events from the Apache Kafka topics into CosmosDB. In this challenge, create a Kafka Connect Sink and Source for the Cosmos DB resource you have deployed. -*The success criteria should not be a list of instructions.* +For the Cosmos DB Source Connector, configure it to stream changes from the following collections into their equivalent Kafka cluster topics +- Users +- Products -*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* +For the Cosmos DB Sink Connector, configure it to stream changes from the following topics into their equivalent Cosmos DB collections: +- Purchases +- Returns +- Inventory Replenishment +- Users +- Product Ratings +- Products +- Product Inventory Capacity (contains the expected number of inventory, the maximum and minimum) +- Inventory on Hand +- Top 5 Products -*Sample success criteria for the IoT sample challenge:* To complete this challenge successfully, you should be able to: -- Verify that the IoT device boots properly after its thingamajig is configured. -- Verify that the thingamajig can connect to the mothership. -- Demonstrate that the thingamajic will not connect to the IoTProxyShip +- Verify that all the users and products from the Cosmos DB database have been loaded into the Kafka topics. +- Verify that all the generated events have been successfully stored in the Cosmos DB collections. +- Verify that all the records from the users and products collections in Cosmos DB are accounted for in the Azure Cognitive Search instance ## Learning Resources -_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ - -*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* - -***Note:** Use descriptive text for each link instead of just URLs.* - -*Sample IoT resource links:* - -- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) -- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) -- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) - -## Tips - -*This section is optional and may be omitted.* - -*Add tips and hints here to give students food for thought. Sample IoT tips:* - -- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. -- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. - -## Advanced Challenges (Optional) - -*If you want, you may provide additional goals to this challenge for folks who are eager.* - -*This section is optional and may be omitted.* - -*Sample IoT advanced challenges:* - -Too comfortable? Eager to do more? Try these additional challenges! - -- Observe what happens if your IoTDevice is separated from its thingamajig. -- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. +- [Kafka Connect 101 Course](https://developer.confluent.io/learn-kafka/kafka-connect/intro/) +- [Kafka Connect Overview](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/kafka-connector) +- [Azure Cognitive Search Sink Connector](https://docs.confluent.io/kafka-connectors/azure-search/current/overview.html) +- [Cosmos DB Source Connector](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/kafka-connector-source) +- [Cosmos DB Sink Connector](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/kafka-connector-sink) diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-04.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-04.md index a032304040..e5bcf01897 100644 --- a/xxx-ConfluentCloudOnAzure/Student/Challenge-04.md +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-04.md @@ -1,99 +1,39 @@ -# Challenge 04 - <Title of Challenge> +# Challenge 04 - Bringing it All Together, Processing Streams in Realtime with KSQLDB [< Previous Challenge](./Challenge-03.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-05.md) -***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** - -## Pre-requisites (Optional) - -*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* - ## Introduction +Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simple yet efficient management and real-time querying of application state -*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* - -*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* - -*For example:* - -When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. +ksqlDB is a database that's purpose-built for stream processing applications. It is built on top of Kafka Streams and provides a SQL interface for defining and processing streams from Kafka topics and writing them back to destination topics. ## Description -*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* - -***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* - -***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* +In this challenge, our goal is to figure out in near-real-time how much inventory we have on-hand based on the activities from the following event streams: +- Inventory Replenishment +- Order Returns/Refunds +- Product Purchases from new orders -*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* +We will use events from 3 topics to compute in real time the amount of inventory at hand based on purchases, returns and replenishment events and store this data in a new topic called Inventory on Hand. This will have the name of the product, the product identifier and how much inventory we have on hand (an integer) -***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* +We will also create a new topic that stores the current top 5 products based on ratings at any given time. This topic will contain the following pieces of data +- Product name +- Unit Price +- Total Ratings: how many customers rated the product +- Highest Rating +- Lowest Rating +- Most Recent Rating +- Rating Score (average of all ratings so far) -***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* - -***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* - -*Sample challenge text for the IoT Hack Of The Century:* - -In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. - -You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. - -Please configure the thingamajig with the following specifications: -- Use dynamic IP addresses -- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" -- Deny access to "IoTProxyShip" - -You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). ## Success Criteria -*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* - -*The success criteria should not be a list of instructions.* - -*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* - -*Sample success criteria for the IoT sample challenge:* - To complete this challenge successfully, you should be able to: -- Verify that the IoT device boots properly after its thingamajig is configured. -- Verify that the thingamajig can connect to the mothership. -- Demonstrate that the thingamajic will not connect to the IoTProxyShip +- Verify that the inventory counts are accurate based on retail purchases, returns and inventory replenishment. +- Verify that the ratings displayed are accurate. ## Learning Resources -_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ - -*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* - -***Note:** Use descriptive text for each link instead of just URLs.* - -*Sample IoT resource links:* - -- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) -- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) -- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) - -## Tips - -*This section is optional and may be omitted.* - -*Add tips and hints here to give students food for thought. Sample IoT tips:* - -- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. -- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. - -## Advanced Challenges (Optional) - -*If you want, you may provide additional goals to this challenge for folks who are eager.* - -*This section is optional and may be omitted.* - -*Sample IoT advanced challenges:* - -Too comfortable? Eager to do more? Try these additional challenges! - -- Observe what happens if your IoTDevice is separated from its thingamajig. -- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. +- [Kafka Streams](https://kafka.apache.org/34/documentation/streams/core-concepts) +- [KSQLDB Overview](https://ksqldb.io/overview.html) +- [kSQLDB Documentation](https://docs.ksqldb.io/en/latest/) diff --git a/xxx-ConfluentCloudOnAzure/Student/Challenge-05.md b/xxx-ConfluentCloudOnAzure/Student/Challenge-05.md index bc2fa34b49..1792f6c98c 100644 --- a/xxx-ConfluentCloudOnAzure/Student/Challenge-05.md +++ b/xxx-ConfluentCloudOnAzure/Student/Challenge-05.md @@ -1,99 +1,39 @@ -# Challenge 05 - <Title of Challenge> +# Challenge 05 - Realtime Visualization of Streams [< Previous Challenge](./Challenge-04.md) - **[Home](../README.md)** - [Next Challenge >](./Challenge-06.md) -***This is a template for a single challenge. The italicized text provides hints & examples of what should or should NOT go in each section. You should remove all italicized & sample text and replace with your content.*** - -## Pre-requisites (Optional) - -*Your hack's "Challenge 0" should cover pre-requisites for the entire hack, and thus this section is optional and may be omitted. If you wish to spell out specific previous challenges that must be completed before starting this challenge, you may do so here.* - ## Introduction -*This section should provide an overview of the technologies or tasks that will be needed to complete the this challenge. This includes the technical context for the challenge, as well as any new "lessons" the attendees should learn before completing the challenge.* - -*Optionally, the coach or event host is encouraged to present a mini-lesson (with a PPT or video) to set up the context & introduction to each challenge. A summary of the content of that mini-lesson is a good candidate for this Introduction section* - -*For example:* - -When setting up an IoT device, it is important to understand how 'thingamajigs' work. Thingamajigs are a key part of every IoT device and ensure they are able to communicate properly with edge servers. Thingamajigs require IP addresses to be assigned to them by a server and thus must have unique MAC addresses. In this challenge, you will get hands on with a thingamajig and learn how one is configured. - -## Description - -*This section should clearly state the goals of the challenge and any high-level instructions you want the students to follow. You may provide a list of specifications required to meet the goals. If this is more than 2-3 paragraphs, it is likely you are not doing it right.* +Power BI with real-time streaming helps you stream data and update dashboards in real time. -***NOTE:** Do NOT use ordered lists as that is an indicator of 'step-by-step' instructions. Instead, use bullet lists to list out goals and/or specifications.* +Any visual or dashboard created in Power BI can display and update real-time data and visuals. -***NOTE:** You may use Markdown sub-headers to organize key sections of your challenge description.* +The devices and sources of streaming data can be factory sensors, Azure data stores, social media sources, service usage metrics, or many other time-sensitive data collectors or transmitters. -*Optionally, you may provide resource files such as a sample application, code snippets, or templates as learning aids for the students. These files are stored in the hack's `Student/Resources` folder. It is the coach's responsibility to package these resources into a Resources.zip file and provide it to the students at the start of the hack.* +With Azure services and Power BI, you can turn your data processing efforts into analytics and reports that provide real-time insights into your business. Whether your data processing is cloud-based or on-premises, straightforward, or complex, single-sourced or massively scaled, warehoused, or real-time, Azure and Power BI have the built-in connectivity and integration to bring your business intelligence efforts to life. -***NOTE:** Do NOT provide direct links to files or folders in the What The Hack repository from the student guide. Instead, you should refer to the Resource.zip file provided by the coach.* +Power BI has a multitude of Azure connections available, and the business intelligence solutions you can create with those services are as unique as your business. You can connect as few as one Azure data source, or a handful, then shape and refine your data to build customized reports. -***NOTE:** As an exception, you may provide a GitHub 'raw' link to an individual file such as a PDF or Office document, so long as it does not open the contents of the file in the What The Hack repo on the GitHub website.* - -***NOTE:** Any direct links to the What The Hack repo will be flagged for review during the review process by the WTH V-Team, including exception cases.* - -*Sample challenge text for the IoT Hack Of The Century:* - -In this challenge, you will properly configure the thingamajig for your IoT device so that it can communicate with the mother ship. - -You can find a sample `thingamajig.config` file in the `/ChallengeXX` folder of the Resources.zip file provided by your coach. This is a good starting reference, but you will need to discover how to set exact settings. +## Description -Please configure the thingamajig with the following specifications: -- Use dynamic IP addresses -- Only trust the following whitelisted servers: "mothership", "IoTQueenBee" -- Deny access to "IoTProxyShip" +Now that we have all these streams, we need to visualize the streams. -You can view an architectural diagram of an IoT thingamajig here: [Thingamajig.PDF](/Student/Resources/Architecture.PDF?raw=true). +- Create a PowerBI dashboard that displays the top 5 products as well as the inventory on hand for all 10 products at any given time. +- Create a PowerBI dashboard that displays the top 3 products returned in the last 5 minutes. +- Create a PowerBI dashboard that displays the top 3 products purchased in the last 15 minutes. +- Create a PowerBI dashboard that displays the top 3 products supplied via inventory replenishment in the last 10 minutes. +- Create a PowerBI dashboard for all out of stock products. +- Create a PowerBI dashboard for all products whose inventory counts are critical (below minimum count but above zero) ## Success Criteria -*Success criteria goes here. The success criteria should be a list of checks so a student knows they have completed the challenge successfully. These should be things that can be demonstrated to a coach.* - -*The success criteria should not be a list of instructions.* - -*Success criteria should always start with language like: "Validate XXX..." or "Verify YYY..." or "Show ZZZ..." or "Demonstrate you understand VVV..."* - -*Sample success criteria for the IoT sample challenge:* - To complete this challenge successfully, you should be able to: -- Verify that the IoT device boots properly after its thingamajig is configured. -- Verify that the thingamajig can connect to the mothership. -- Demonstrate that the thingamajic will not connect to the IoTProxyShip +- Verify that the events from the topics are visible within 3 seconds of landing in Cosmos DB and Cognitive Search +- Verify that there is no decline in performance after a certain amount of time. ## Learning Resources - -_List of relevant links and online articles that should give the attendees the knowledge needed to complete the challenge._ - -*Think of this list as giving the students a head start on some easy Internet searches. However, try not to include documentation links that are the literal step-by-step answer of the challenge's scenario.* - -***Note:** Use descriptive text for each link instead of just URLs.* - -*Sample IoT resource links:* - -- [What is a Thingamajig?](https://www.bing.com/search?q=what+is+a+thingamajig) -- [10 Tips for Never Forgetting Your Thingamajic](https://www.youtube.com/watch?v=dQw4w9WgXcQ) -- [IoT & Thingamajigs: Together Forever](https://www.youtube.com/watch?v=yPYZpwSpKmA) - -## Tips - -*This section is optional and may be omitted.* - -*Add tips and hints here to give students food for thought. Sample IoT tips:* - -- IoTDevices can fail from a broken heart if they are not together with their thingamajig. Your device will display a broken heart emoji on its screen if this happens. -- An IoTDevice can have one or more thingamajigs attached which allow them to connect to multiple networks. - -## Advanced Challenges (Optional) - -*If you want, you may provide additional goals to this challenge for folks who are eager.* - -*This section is optional and may be omitted.* - -*Sample IoT advanced challenges:* - -Too comfortable? Eager to do more? Try these additional challenges! - -- Observe what happens if your IoTDevice is separated from its thingamajig. -- Configure your IoTDevice to connect to BOTH the mothership and IoTQueenBee at the same time. +- [Power BI Desktop](https://learn.microsoft.com/en-us/power-bi/fundamentals/desktop-getting-started) +- [Visualize Cosmos DB Data with PowerBI](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/powerbi-visualize) +- [Using Cognitive Search in Power BI](https://learn.microsoft.com/en-us/power-bi/connect-data/service-tutorial-use-cognitive-services) +- [PowerBI and Knowledge Stores](https://learn.microsoft.com/en-us/azure/search/knowledge-store-connect-power-bi) +- [Streaming Dataasets in PowerBi](https://learn.microsoft.com/en-us/power-bi/connect-data/service-real-time-streaming)