├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── api
├── examples
│ ├── certification-minimal
│ │ └── qwiklabs.yaml
│ ├── classroom-template-minimal
│ │ ├── qwiklabs.yaml
│ │ └── resources
│ │ │ └── choosing_compute_en.pdf
│ ├── course-minimal
│ │ ├── gcp-intro-course-badge.png
│ │ ├── gcp-intro-course-image.png
│ │ └── qwiklabs.yaml
│ ├── course-robust
│ │ ├── gcp-intro-course-badge.png
│ │ ├── gcp-intro-course-image.png
│ │ ├── qwiklabs.yaml
│ │ └── resources
│ │ │ ├── storage_options_en.pdf
│ │ │ └── storage_options_es.pdf
│ ├── course-survey-robust
│ │ └── qwiklabs.yaml
│ ├── exam-minimal
│ │ └── qwiklabs.yaml
│ ├── exam-robust
│ │ └── qwiklabs.yaml
│ ├── game-template-minimal
│ │ ├── game-badge.png
│ │ ├── game-image.png
│ │ ├── qwiklabs.yaml
│ │ └── resources
│ │ │ ├── choosing_compute_en.pdf
│ │ │ ├── choosing_compute_es.pdf
│ │ │ └── choosing_compute_ja.pdf
│ ├── lab-minimal
│ │ ├── instructions
│ │ │ └── en.html
│ │ └── qwiklabs.yaml
│ ├── lab-robust
│ │ ├── instructions
│ │ │ ├── en.html
│ │ │ └── es.html
│ │ ├── lab.template
│ │ ├── qwiklabs.yaml
│ │ ├── resources
│ │ │ ├── sample-en.pdf
│ │ │ └── sample-es.pdf
│ │ ├── startup_script
│ │ │ └── qwiklabs.jinja
│ │ └── student_policy.json
│ ├── lab-v1-gsuite
│ │ ├── instruction.html
│ │ └── qwiklabs.yaml
│ ├── lab-v1-minimal
│ │ ├── instruction.html
│ │ └── qwiklabs.yaml
│ ├── lab-v1-robust
│ │ ├── assessment.yaml
│ │ ├── dm.zip
│ │ ├── instructions
│ │ │ ├── en.html
│ │ │ └── es.html
│ │ ├── qwiklabs.yaml
│ │ └── resources
│ │ │ ├── sample-en.pdf
│ │ │ └── sample-es.pdf
│ ├── learning-path-minimal
│ │ ├── gcp-intro-path-badge.png
│ │ ├── qwiklabs.yaml
│ │ └── resources
│ │ │ └── choosing_compute_en.pdf
│ ├── peer-assignment-minimal
│ │ ├── instructions
│ │ │ └── en.html
│ │ └── qwiklabs.yaml
│ ├── peer-assignment-robust
│ │ ├── instructions
│ │ │ ├── en.html
│ │ │ ├── es.html
│ │ │ └── img
│ │ │ │ └── example.png
│ │ └── qwiklabs.yaml
│ ├── quiz-minimal
│ │ └── qwiklabs.yaml
│ ├── quiz-robust
│ │ └── qwiklabs.yaml
│ └── quiz-sections
│ │ └── qwiklabs.yaml
├── lab-bundle-spec-v1.md
└── lab-bundle-spec.md
├── classroom-template-bundle-spec.md
├── course-template-bundle-spec.md
├── exam-bundle-spec.md
├── examples
├── course-templates-robust
│ ├── qwiklabs.es.yaml
│ └── qwiklabs.yaml
├── lab-robust
│ └── v2
│ │ ├── assessments
│ │ └── step_one_check.rb
│ │ ├── cleanup
│ │ ├── qwiklabs.jinja
│ │ └── vm-type.jinja
│ │ ├── iam_policy.json
│ │ ├── instructions
│ │ ├── en.html
│ │ └── es.html
│ │ ├── lab.template
│ │ ├── qwiklabs.es.yaml
│ │ ├── qwiklabs.yaml
│ │ ├── resources
│ │ ├── sample-en.pdf
│ │ └── sample-es.pdf
│ │ └── startup
│ │ ├── qwiklabs.jinja
│ │ └── vm-type.jinja
└── peer-assignment-robust
│ ├── instructions
│ ├── en.html
│ ├── es.html
│ └── img
│ │ └── example.png
│ ├── qwiklabs.es.yaml
│ └── qwiklabs.yaml
├── game-template-bundle-spec.md
├── github-lab-bundle-spec.md
├── html
├── html-spec.md
└── images
│ ├── ql-code-01.png
│ ├── ql-code-02.png
│ ├── ql-code-block-01.png
│ ├── ql-code-block-02.png
│ ├── ql-code-block-03.png
│ ├── ql-variable-01.png
│ ├── ql-variable-02.png
│ └── ql-variable-03.png
├── lab_control_panel.png
├── learning-path-bundle-spec.md
├── peer-assignment-bundle-spec.md
├── preassessment-bundle-spec.md
├── quiz-bundle-spec.md
└── resource-spec.md
/.gitignore:
--------------------------------------------------------------------------------
1 | _site/
2 | .sass-cache/
3 | .jekyll-metadata
4 | .*-credentials
5 | .idea
6 | *.iml
7 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # How to Contribute
2 |
3 | We'd love to accept your patches and contributions to this project. There are
4 | just a few small guidelines you need to follow.
5 |
6 | ## Contributor License Agreement
7 |
8 | Contributions to this project must be accompanied by a Contributor License
9 | Agreement. You (or your employer) retain the copyright to your contribution;
10 | this simply gives us permission to use and redistribute your contributions as
11 | part of the project. Head over to
This course will teach people
24 |This course is intended for people who
33 |A basic understanding of serverless architecture is recommended but not required.
38 | 39 | tags: [sample, life-changing, gcp] 40 | product_tags: ['bigquery'] 41 | role_tags: ['database admin'] 42 | domain_tags: ['infrastructure', 'data'] 43 | level: 1 44 | image: gcp-intro-course-image.png 45 | badge: gcp-intro-course-badge.png 46 | 47 | estimated_duration_minutes: 60 48 | 49 | course_surveys: 50 | - survey-f59d1335-ul5lc0 51 | 52 | modules: 53 | - id: module-1 54 | title: 55 | locales: 56 | en: Module 1 57 | es: Módulo 1 58 | steps: 59 | - id: intro-to-gcp 60 | activity_options: 61 | - type: lab 62 | id: intro-to-gcp 63 | - id: intro-to-bigquery 64 | activity_options: 65 | - type: lab 66 | id: intro-to-bigquery 67 | - id: gcp-quiz 68 | activity_options: 69 | - type: quiz 70 | id: gcp-quiz 71 | -------------------------------------------------------------------------------- /api/examples/course-robust/gcp-intro-course-badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/course-robust/gcp-intro-course-badge.png -------------------------------------------------------------------------------- /api/examples/course-robust/gcp-intro-course-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/course-robust/gcp-intro-course-image.png -------------------------------------------------------------------------------- /api/examples/course-robust/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | entity_type: CourseTemplate 2 | schema_version: 1 3 | 4 | # CourseTemplate Attributes 5 | default_locale: en 6 | 7 | title: 8 | locales: 9 | en: GCP Intro Course 10 | es: Curso de introducción a GCP 11 | 12 | description: 13 | locales: 14 | en: Get a taste of what GCP has to offer. 15 | es: Prueba lo que GCP tiene para ofrecer. 16 | 17 | version: 18 | locales: 19 | en: v2.3 20 | es: v1 final 21 | 22 | auto_upgrade_to_latest_version: false 23 | 24 | objectives: 25 | locales: 26 | en: | 27 |This course will teach people
28 |Este curso enseñará a las personas
34 |This course is intended for people who
43 |Este curso está destinado a personas que
46 |A basic understanding of serverless architecture is recommended but not required.
51 | es:Se recomienda una comprensión básica de la arquitectura sin servidor, pero no es obligatorio.
52 | 53 | tags: [sample, life-changing, gcp] 54 | product_tags: ['app engine', 'kubernetes engine', 'cloud functions', 'cloud datastore', 'cloud sql', 'spanner', 'bigquery'] 55 | role_tags: ['cloud architect', 'developers backend', 'developers frontend', 'database admin'] 56 | domain_tags: ['infrastructure', 'application development', 'data'] 57 | level: 3 58 | image: gcp-intro-course-image.png 59 | badge: gcp-intro-course-badge.png 60 | 61 | estimated_duration_minutes: 60 62 | 63 | instructor_resources: 64 | - id: how-to-teach 65 | title: 66 | locales: 67 | en: How to teach 68 | es: Como enseñar 69 | uri: 70 | locales: 71 | en: https://www.wikihow.com/Teach 72 | es: https://www.wikihow.es/enseñar 73 | - id: how-to-teach-well 74 | title: 75 | locales: 76 | en: How to teach well 77 | es: Como enseñar bien 78 | uri: 79 | locales: 80 | en: https://www.wikihow.com/TeachingWell 81 | es: https://www.wikihow.com/TeachingWell 82 | 83 | resources: 84 | - type: video 85 | id: intro-video 86 | title: 87 | locales: 88 | en: Welcome to GCP! 89 | es: ¡Bienvenido a GCP! 90 | video_id: 91 | locales: 92 | en: oHg5SJYRHA0 93 | es: 7jjoyy7_RCk 94 | video_provider: YouTube 95 | description: 96 | locales: 97 | en: Overview of Google Cloud Platform 98 | es: Descripción general de Google Cloud Platform 99 | duration: 360 100 | - type: video 101 | id: outro-video 102 | title: 103 | locales: 104 | en: Wasn't that fun?! 105 | es: Eso fue divertido, ¿verdad? 106 | video_id: 107 | locales: 108 | en: oHg5SJYRHA0 109 | es: 7jjoyy7_RCk 110 | video_provider: YouTube 111 | duration: 100 112 | - type: link 113 | id: choosing-compute 114 | title: 115 | locales: 116 | en: Choosing a Compute Option 117 | es: Elegir una opción de cómputo 118 | uri: 119 | locales: 120 | en: https://cloud.google.com/docs/choosing-a-compute-option 121 | es: https://cloud.google.com/docs/choosing-a-compute-option 122 | - type: file 123 | id: storage-options 124 | title: 125 | locales: 126 | en: Storage Options 127 | es: Opciones de Almacenamiento 128 | uri: 129 | locales: 130 | en: resources/storage_options_en.pdf 131 | es: resources/storage_options_es.pdf 132 | 133 | course_surveys: 134 | - survey-f59d1335-ul5lc0 135 | - survey-ul5lc0 136 | - survey-f59d1335 137 | 138 | modules: 139 | - id: intro-module 140 | title: 141 | locales: 142 | en: Introduction 143 | es: Introducción 144 | description: 145 | locales: 146 | en: Some introductory material 147 | es: Algo de material introductorio 148 | learning_objectives: 149 | locales: 150 | en: 151 | - Objective for intro module 152 | es: 153 | - Objetivo para el módulo de introducción 154 | steps: 155 | - id: intro-video 156 | activity_options: 157 | - type: resource 158 | id: intro-video 159 | prompt: 160 | locales: 161 | en: If you've never used GCP, we recommend this overview video. 162 | es: Si nunca ha usado GCP, le recomendamos este video general. 163 | optional: true 164 | 165 | - id: intro-lab 166 | activity_options: 167 | - type: lab 168 | id: intro-to-gcp 169 | 170 | - id: learn-compute 171 | title: 172 | locales: 173 | en: Learn about compute 174 | es: Aprender acerca de la computadora 175 | learning_objectives: 176 | locales: 177 | en: 178 | - Objective for learn module 179 | es: 180 | - Objetivo para el módulo de aprendizaje 181 | steps: 182 | - id: choose-compute 183 | activity_options: 184 | - type: resource 185 | id: choosing-compute 186 | 187 | - id: learn-compute 188 | activity_options: 189 | - type: lab 190 | id: intro-to-appengine-python 191 | - type: lab 192 | id: intro-to-kubernetes-engine 193 | - type: lab 194 | id: intro-to-cloud-functions 195 | prompt: 196 | locales: 197 | en: Learn more about one of these common compute resources. 198 | es: Obtenga más información sobre uno de estos recursos informáticos comunes. 199 | - id: learn-storage 200 | title: 201 | locales: 202 | en: Learn about storage 203 | es: Aprende sobre almacenamiento 204 | learning_objectives: 205 | locales: 206 | en: 207 | - Objective for learn storage 208 | es: 209 | - Objetivo para el almacenamiento de información 210 | steps: 211 | - id: storage-options 212 | activity_options: 213 | - type: resource 214 | id: storage-options 215 | 216 | - id: learn-storage 217 | activity_options: 218 | - type: lab 219 | id: intro-to-datastore 220 | - type: lab 221 | id: intro-to-cloudsql 222 | - type: lab 223 | id: intro-to-spanner 224 | prompt: 225 | locales: 226 | en: Learn more about one of these common database technologies. 227 | es: Obtenga más información sobre una de estas tecnologías de base de datos comunes. 228 | 229 | - id: intro-to-bigquery 230 | activity_options: 231 | - type: lab 232 | id: intro-to-bigquery 233 | 234 | - id: bigquery-quiz 235 | activity_options: 236 | - type: quiz 237 | id: bigquery-quiz 238 | category: graded 239 | version: '1.0' 240 | 241 | - id: peer-assignment 242 | activity_options: 243 | - type: peer_assignment 244 | id: peer-assignment 245 | 246 | - id: outro-module 247 | title: 248 | locales: 249 | en: Finish up 250 | es: Termina 251 | learning_objectives: 252 | locales: 253 | en: 254 | - Objective for outro module 255 | es: 256 | - Objetivo para módulo outro 257 | steps: 258 | - id: advanced-gcp-task 259 | activity_options: 260 | - type: lab 261 | id: advanced-gcp-task 262 | optional: true 263 | prompt: 264 | locales: 265 | en: If you want to try your hand at this advanced task, go for it! 266 | es: Si quieres probar suerte en esta tarea avanzada, ¡hazlo! 267 | 268 | - id: outro-video 269 | activity_options: 270 | - type: resource 271 | id: outro-video 272 | 273 | retake_policies: 274 | - id: practice-quiz-policy 275 | activity_type: 'Quiz' 276 | activity_category: 'practice' 277 | retake_limit: 3 278 | retake_window: 1 279 | - id: graded-quiz-policy 280 | activity_type: 'Quiz' 281 | activity_category: 'graded' 282 | retake_cooldown: 283 | - 1 284 | retake_limit: 3 285 | retake_window: 1 286 | - id: default-lab-policy 287 | activity_type: 'Lab' 288 | retake_cooldown: 289 | - 1 290 | - 2 291 | - 5 292 | -------------------------------------------------------------------------------- /api/examples/course-robust/resources/storage_options_en.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/course-robust/resources/storage_options_en.pdf -------------------------------------------------------------------------------- /api/examples/course-robust/resources/storage_options_es.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/course-robust/resources/storage_options_es.pdf -------------------------------------------------------------------------------- /api/examples/exam-minimal/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | entity_type: Exam 3 | schema_version: 1 4 | default_locale: en 5 | title: 6 | locales: 7 | en: Sample Exam Questions 8 | passing_percentage: 100 9 | duration: 120 10 | randomize_items: true 11 | randomize_options: true 12 | randomize_prompts: true 13 | retake_cooldown: 14 | - 0 15 | forms: 16 | - name: Form A 17 | id: form-a 18 | sections: 19 | - name: Science 20 | id: form-a-sec-0 21 | items: 22 | - type: multiple-choice 23 | id: form-a-sec-0-item-0 24 | code: 1.1.1(a).SCI 25 | seed: false 26 | stem: 27 | locales: 28 | en: >- 29 | Who won the Nobel Prize for discovering the cause of the photoelectric effect? 30 | options: 31 | - id: form-a-sec-0-item-0-option-0 32 | title: 33 | locales: 34 | en: Albert Einstein 35 | is_answer: true 36 | - id: form-a-sec-0-item-0-option-1 37 | title: 38 | locales: 39 | en: Francis Crick 40 | is_answer: false 41 | - id: form-a-sec-0-item-0-option-2 42 | title: 43 | locales: 44 | en: Rosalind Franklin 45 | is_answer: false 46 | - id: form-a-sec-0-item-0-option-3 47 | title: 48 | locales: 49 | en: Max Planck 50 | is_answer: false 51 | 52 | - type: multiple-select 53 | id: form-a-sec-0-item-1 54 | code: 1.2.1(a).SCI 55 | seed: false 56 | stem: 57 | locales: 58 | en: >- 59 | Which of the following are scientific elements on the Periodic Table of Elements? 60 | options: 61 | - id: form-a-sec-0-item-1-option-0 62 | title: 63 | locales: 64 | en: Fibrium 65 | is_answer: false 66 | - id: form-a-sec-0-item-1-option-1 67 | title: 68 | locales: 69 | en: Manganese 70 | is_answer: true 71 | - id: form-a-sec-0-item-1-option-2 72 | title: 73 | locales: 74 | en: Plutonium 75 | is_answer: true 76 | - id: form-a-sec-0-item-1-option-3 77 | title: 78 | locales: 79 | en: Hydrogen 80 | is_answer: true 81 | 82 | - name: Geography 83 | id: form-a-sec-1 84 | items: 85 | - type: multiple-choice 86 | id: form-a-sec-0-item-2 87 | code: 1.3.1(a).GEO 88 | seed: true 89 | stem: 90 | locales: 91 | en: >- 92 | Where is Acadia National Park? 93 | options: 94 | - id: form-a-sec-1-item-2-option-0 95 | title: 96 | locales: 97 | en: Montana 98 | is_answer: false 99 | - id: form-a-sec-1-item-2-option-1 100 | title: 101 | locales: 102 | en: Massachusetts 103 | is_answer: false 104 | - id: form-a-sec-1-item-2-option-2 105 | title: 106 | locales: 107 | en: Maine 108 | is_answer: true 109 | - id: form-a-sec-1-item-2-option-3 110 | title: 111 | locales: 112 | en: Minnesota 113 | is_answer: false 114 | 115 | - type: match 116 | id: form-a-sec-1-item-3 117 | code: 1.4.1(a).GEO 118 | seed: false 119 | lead_in: 120 | locales: 121 | en: >- 122 | Match the following cities to their states. 123 | stems: 124 | - id: form-a-sec-1-item-3-prompt-0 125 | title: 126 | locales: 127 | en: San Francisco 128 | answer: form-a-sec-1-item-3-option-0 129 | - id: form-a-sec-1-item-3-prompt-1 130 | title: 131 | locales: 132 | en: Nashville 133 | answer: form-a-sec-1-item-3-option-1 134 | - id: form-a-sec-1-item-3-prompt-2 135 | title: 136 | locales: 137 | en: Salt Lake City 138 | answer: form-a-sec-1-item-3-option-2 139 | options: 140 | - id: form-a-sec-1-item-3-option-0 141 | title: 142 | locales: 143 | en: California 144 | - id: form-a-sec-1-item-3-option-1 145 | title: 146 | locales: 147 | en: Tennessee 148 | - id: form-a-sec-1-item-3-option-2 149 | title: 150 | locales: 151 | en: Utah 152 | 153 | # Second form 154 | - name: Form B 155 | id: form-b 156 | sections: 157 | - name: Science 158 | id: form-b-sec-0 159 | items: 160 | - type: multiple-choice 161 | id: form-b-sec-0-item-0 162 | code: 1.1.1(b).SCI 163 | seed: false 164 | stem: 165 | locales: 166 | en: >- 167 | Who won the Nobel Prize for discovering the cause of the photoelectric effect? 168 | options: 169 | - id: form-b-sec-0-item-0-option-0 170 | title: 171 | locales: 172 | en: Albert Einstein 173 | is_answer: true 174 | - id: form-b-sec-0-item-0-option-1 175 | title: 176 | locales: 177 | en: Francis Crick 178 | is_answer: false 179 | - id: form-b-sec-0-item-0-option-2 180 | title: 181 | locales: 182 | en: Rosalind Franklin 183 | is_answer: false 184 | - id: form-b-sec-0-item-0-option-3 185 | title: 186 | locales: 187 | en: Max Planck 188 | is_answer: false 189 | 190 | - type: multiple-select 191 | id: form-b-sec-0-item-1 192 | code: 1.2.1(b).SCI 193 | seed: false 194 | stem: 195 | locales: 196 | en: >- 197 | Which of the following are scientific elements on the Periodic Table of Elements? 198 | options: 199 | - id: form-b-sec-0-item-1-option-0 200 | title: 201 | locales: 202 | en: Uranium 203 | is_answer: true 204 | - id: form-b-sec-0-item-1-option-1 205 | title: 206 | locales: 207 | en: Manganese 208 | is_answer: true 209 | - id: form-b-sec-0-item-1-option-2 210 | title: 211 | locales: 212 | en: Brillium 213 | is_answer: false 214 | - id: form-b-sec-0-item-1-option-3 215 | title: 216 | locales: 217 | en: Hydrogen 218 | is_answer: true 219 | 220 | - name: Geography 221 | id: form-b-sec-1 222 | items: 223 | - type: multiple-choice 224 | id: form-b-sec-1-item-2 225 | code: 1.3.1(b).GEO 226 | seed: true 227 | stem: 228 | locales: 229 | en: >- 230 | Where is Glacier National Park? 231 | options: 232 | - id: form-b-sec-1-item-2-option-0 233 | title: 234 | locales: 235 | en: Montana 236 | is_answer: true 237 | - id: form-b-sec-1-item-2-option-1 238 | title: 239 | locales: 240 | en: Massachusetts 241 | is_answer: false 242 | - id: form-b-sec-1-item-2-option-2 243 | title: 244 | locales: 245 | en: Maine 246 | is_answer: false 247 | - id: form-b-sec-1-item-2-option-3 248 | title: 249 | locales: 250 | en: Minnesota 251 | is_answer: false 252 | 253 | - type: match 254 | id: form-b-sec-0-item-3 255 | code: 1.4.1(b).GEO 256 | seed: false 257 | lead_in: 258 | locales: 259 | en: >- 260 | Match the following cities to their states. 261 | stems: 262 | - id: form-b-sec-1-item-3-prompt-0 263 | title: 264 | locales: 265 | en: San Diego 266 | answer: form-b-sec-1-item-3-option-0 267 | - id: form-b-sec-1-item-3-prompt-1 268 | title: 269 | locales: 270 | en: Poughkeepsie 271 | answer: form-b-sec-1-item-3-option-1 272 | - id: form-b-sec-1-item-3-prompt-2 273 | title: 274 | locales: 275 | en: Seattle 276 | answer: form-b-sec-1-item-3-option-2 277 | options: 278 | - id: form-b-sec-1-item-3-option-0 279 | title: 280 | locales: 281 | en: California 282 | - id: form-b-sec-1-item-3-option-1 283 | title: 284 | locales: 285 | en: New York 286 | - id: form-b-sec-1-item-3-option-2 287 | title: 288 | locales: 289 | en: Washington 290 | -------------------------------------------------------------------------------- /api/examples/exam-robust/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | entity_type: Exam 3 | schema_version: 1 4 | default_locale: en 5 | title: 6 | locales: 7 | en: Sample Exam Questions 8 | introduction: 9 | locales: 10 | en: Please schedule your sample exam 11 | passing_percentage: 100 12 | duration: 120 13 | randomize_items: true 14 | randomize_options: true 15 | randomize_prompts: true 16 | show_score: true 17 | retake_cooldown: 18 | - 0 19 | forms: 20 | - name: Form A 21 | id: form-a 22 | sections: 23 | - name: Science 24 | id: form-a-sec-0 25 | items: 26 | - type: multiple-choice 27 | id: form-a-sec-0-item-0 28 | code: 1.1.1(a).SCI 29 | seed: false 30 | stem: 31 | locales: 32 | en: >- 33 | Who won the Nobel Prize for discovering the cause of the photoelectric effect? 34 | options: 35 | - id: form-a-sec-0-item-0-option-0 36 | title: 37 | locales: 38 | en: Albert Einstein 39 | is_answer: true 40 | - id: form-a-sec-0-item-0-option-1 41 | title: 42 | locales: 43 | en: Francis Crick 44 | is_answer: false 45 | - id: form-a-sec-0-item-0-option-2 46 | title: 47 | locales: 48 | en: Rosalind Franklin 49 | is_answer: false 50 | - id: form-a-sec-0-item-0-option-3 51 | title: 52 | locales: 53 | en: Max Planck 54 | is_answer: false 55 | 56 | - type: multiple-select 57 | id: form-a-sec-0-item-1 58 | code: 1.2.1(a).SCI 59 | seed: false 60 | stem: 61 | locales: 62 | en: >- 63 | Which of the following are scientific elements on the Periodic Table of Elements? 64 | options: 65 | - id: form-a-sec-0-item-1-option-0 66 | title: 67 | locales: 68 | en: Fibrium 69 | is_answer: false 70 | - id: form-a-sec-0-item-1-option-1 71 | title: 72 | locales: 73 | en: Manganese 74 | is_answer: true 75 | - id: form-a-sec-0-item-1-option-2 76 | title: 77 | locales: 78 | en: Plutonium 79 | is_answer: true 80 | - id: form-a-sec-0-item-1-option-3 81 | title: 82 | locales: 83 | en: Hydrogen 84 | is_answer: true 85 | 86 | - name: Geography 87 | id: form-a-sec-1 88 | items: 89 | - type: multiple-choice 90 | id: form-a-sec-0-item-2 91 | code: 1.3.1(a).GEO 92 | seed: true 93 | stem: 94 | locales: 95 | en: >- 96 | Where is Acadia National Park? 97 | options: 98 | - id: form-a-sec-1-item-2-option-0 99 | title: 100 | locales: 101 | en: Montana 102 | is_answer: false 103 | - id: form-a-sec-1-item-2-option-1 104 | title: 105 | locales: 106 | en: Massachusetts 107 | is_answer: false 108 | - id: form-a-sec-1-item-2-option-2 109 | title: 110 | locales: 111 | en: Maine 112 | is_answer: true 113 | - id: form-a-sec-1-item-2-option-3 114 | title: 115 | locales: 116 | en: Minnesota 117 | is_answer: false 118 | 119 | - type: match 120 | id: form-a-sec-1-item-3 121 | code: 1.4.1(a).GEO 122 | seed: false 123 | lead_in: 124 | locales: 125 | en: >- 126 | Match the following cities to their states. 127 | stems: 128 | - id: form-a-sec-1-item-3-prompt-0 129 | title: 130 | locales: 131 | en: San Francisco 132 | answer: form-a-sec-1-item-3-option-0 133 | - id: form-a-sec-1-item-3-prompt-1 134 | title: 135 | locales: 136 | en: Nashville 137 | answer: form-a-sec-1-item-3-option-1 138 | - id: form-a-sec-1-item-3-prompt-2 139 | title: 140 | locales: 141 | en: Salt Lake City 142 | answer: form-a-sec-1-item-3-option-2 143 | options: 144 | - id: form-a-sec-1-item-3-option-0 145 | title: 146 | locales: 147 | en: California 148 | - id: form-a-sec-1-item-3-option-1 149 | title: 150 | locales: 151 | en: Tennessee 152 | - id: form-a-sec-1-item-3-option-2 153 | title: 154 | locales: 155 | en: Utah 156 | 157 | # Second form 158 | - name: Form B 159 | id: form-b 160 | sections: 161 | - name: Science 162 | id: form-b-sec-0 163 | items: 164 | - type: multiple-choice 165 | id: form-b-sec-0-item-0 166 | code: 1.1.1(b).SCI 167 | seed: false 168 | stem: 169 | locales: 170 | en: >- 171 | Who won the Nobel Prize for discovering the cause of the photoelectric effect? 172 | options: 173 | - id: form-b-sec-0-item-0-option-0 174 | title: 175 | locales: 176 | en: Albert Einstein 177 | is_answer: true 178 | - id: form-b-sec-0-item-0-option-1 179 | title: 180 | locales: 181 | en: Francis Crick 182 | is_answer: false 183 | - id: form-b-sec-0-item-0-option-2 184 | title: 185 | locales: 186 | en: Rosalind Franklin 187 | is_answer: false 188 | - id: form-b-sec-0-item-0-option-3 189 | title: 190 | locales: 191 | en: Max Planck 192 | is_answer: false 193 | 194 | - type: multiple-select 195 | id: form-b-sec-0-item-1 196 | code: 1.2.1(b).SCI 197 | seed: false 198 | stem: 199 | locales: 200 | en: >- 201 | Which of the following are scientific elements on the Periodic Table of Elements? 202 | options: 203 | - id: form-b-sec-0-item-1-option-0 204 | title: 205 | locales: 206 | en: Uranium 207 | is_answer: true 208 | - id: form-b-sec-0-item-1-option-1 209 | title: 210 | locales: 211 | en: Manganese 212 | is_answer: true 213 | - id: form-b-sec-0-item-1-option-2 214 | title: 215 | locales: 216 | en: Brillium 217 | is_answer: false 218 | - id: form-b-sec-0-item-1-option-3 219 | title: 220 | locales: 221 | en: Hydrogen 222 | is_answer: true 223 | 224 | - name: Geography 225 | id: form-b-sec-1 226 | items: 227 | - type: multiple-choice 228 | id: form-b-sec-1-item-2 229 | code: 1.3.1(b).GEO 230 | seed: true 231 | stem: 232 | locales: 233 | en: >- 234 | Where is Glacier National Park? 235 | options: 236 | - id: form-b-sec-1-item-2-option-0 237 | title: 238 | locales: 239 | en: Montana 240 | is_answer: true 241 | - id: form-b-sec-1-item-2-option-1 242 | title: 243 | locales: 244 | en: Massachusetts 245 | is_answer: false 246 | - id: form-b-sec-1-item-2-option-2 247 | title: 248 | locales: 249 | en: Maine 250 | is_answer: false 251 | - id: form-b-sec-1-item-2-option-3 252 | title: 253 | locales: 254 | en: Minnesota 255 | is_answer: false 256 | 257 | - type: match 258 | id: form-b-sec-0-item-3 259 | code: 1.4.1(b).GEO 260 | seed: false 261 | lead_in: 262 | locales: 263 | en: >- 264 | Match the following cities to their states. 265 | stems: 266 | - id: form-b-sec-1-item-3-prompt-0 267 | title: 268 | locales: 269 | en: San Diego 270 | answer: form-b-sec-1-item-3-option-0 271 | - id: form-b-sec-1-item-3-prompt-1 272 | title: 273 | locales: 274 | en: Poughkeepsie 275 | answer: form-b-sec-1-item-3-option-1 276 | - id: form-b-sec-1-item-3-prompt-2 277 | title: 278 | locales: 279 | en: Seattle 280 | answer: form-b-sec-1-item-3-option-2 281 | options: 282 | - id: form-b-sec-1-item-3-option-0 283 | title: 284 | locales: 285 | en: California 286 | - id: form-b-sec-1-item-3-option-1 287 | title: 288 | locales: 289 | en: New York 290 | - id: form-b-sec-1-item-3-option-2 291 | title: 292 | locales: 293 | en: Washington 294 | -------------------------------------------------------------------------------- /api/examples/game-template-minimal/game-badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/game-template-minimal/game-badge.png -------------------------------------------------------------------------------- /api/examples/game-template-minimal/game-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/game-template-minimal/game-image.png -------------------------------------------------------------------------------- /api/examples/game-template-minimal/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | schema_version: 1 2 | entity_type: GameTemplate 3 | 4 | id: my-library/basic-game-template 5 | default_locale: en 6 | 7 | title: 8 | locales: 9 | en: Fun Game 10 | 11 | resources: 12 | - type: video 13 | id: a-resource 14 | title: 15 | locales: 16 | en: Welcome to GCP! 17 | es: ¡Bienvenido a GCP! 18 | video_provider: YouTube 19 | video_id: 20 | locales: 21 | en: oHg5SJYRHA0 22 | es: 7jjoyy7_RCk 23 | duration: 360 24 | 25 | modules: 26 | - id: my-module 27 | title: 28 | locales: 29 | en: My Module 30 | es: Mi módulo 31 | steps: 32 | - id: my-first-step 33 | activity_options: 34 | - type: lab 35 | id: my-library/a-lab 36 | - type: lab 37 | id: my-other-library/another-lab 38 | - id: my-second-step 39 | activity_options: 40 | - type: quiz 41 | id: my-library/a-quiz 42 | - id: my-other-module 43 | title: 44 | locales: 45 | en: My Other Module 46 | es: Mi otro módulo 47 | steps: 48 | - id: my-other-step 49 | activity_options: 50 | - type: resource 51 | id: a-resource 52 | -------------------------------------------------------------------------------- /api/examples/game-template-minimal/resources/choosing_compute_en.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/game-template-minimal/resources/choosing_compute_en.pdf -------------------------------------------------------------------------------- /api/examples/game-template-minimal/resources/choosing_compute_es.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/game-template-minimal/resources/choosing_compute_es.pdf -------------------------------------------------------------------------------- /api/examples/game-template-minimal/resources/choosing_compute_ja.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/game-template-minimal/resources/choosing_compute_ja.pdf -------------------------------------------------------------------------------- /api/examples/lab-minimal/instructions/en.html: -------------------------------------------------------------------------------- 1 |We’ve given you a GCP resource. Go ahead and play around with it.
5 | 6 |…
8 |…
9 | 10 |Huzzah! You’re ready to take on the world!
12 | -------------------------------------------------------------------------------- /api/examples/lab-minimal/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | entity_type: Lab 2 | schema_version: 2 3 | 4 | default_locale: en 5 | 6 | title: 7 | locales: 8 | en: Minimal Lab V2 Example 9 | 10 | description: 11 | locales: 12 | en: Just the basics, nothing more. 13 | 14 | duration: 20 15 | level: introductory 16 | 17 | instruction: 18 | type: html 19 | uri: 20 | locales: 21 | en: "./instructions/en.html" 22 | 23 | environment: 24 | resources: 25 | - type: gcp_project 26 | id: my_primary_project 27 | variant: gcpfree 28 | - type: gcp_user 29 | id: user_0 30 | permissions: 31 | - project: project_0 32 | roles: 33 | - roles/editor 34 | - roles/appengine.appAdmin 35 | - roles/bigquery.admin 36 | - roles/bigquery.user 37 | -------------------------------------------------------------------------------- /api/examples/lab-robust/instructions/en.html: -------------------------------------------------------------------------------- 1 |We’ve given you a GCP resource. Go ahead and play around with it.
5 | 6 |…
8 |…
9 | 10 |Huzzah! You’re ready to take on the world!
12 | -------------------------------------------------------------------------------- /api/examples/lab-robust/instructions/es.html: -------------------------------------------------------------------------------- 1 |Le hemos proporcionado un recurso GCP. Adelante y juega con eso.
4 |…
6 |¡Huzzah! ¡Estás listo para enfrentarte al mundo!
8 | -------------------------------------------------------------------------------- /api/examples/lab-robust/lab.template: -------------------------------------------------------------------------------- 1 | Outputs: 2 | InstanceId: 3 | Value: i-0ac32d6485a60f132 -------------------------------------------------------------------------------- /api/examples/lab-robust/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | entity_type: Lab 2 | schema_version: 2 3 | 4 | default_locale: en 5 | 6 | title: 7 | locales: 8 | en: Robust Lab Example 9 | es: Ejemplo de Robust Lab 10 | 11 | description: 12 | locales: 13 | en: Seriously the best lab you've ever taken. Bar none. 14 | es: En serio, el mejor lab que has tomado. Sin excepción. 15 | 16 | duration: 60 17 | max_duration: 90 18 | level: introductory 19 | tags: 20 | - sample 21 | - life-changing 22 | - gcp 23 | product_tags: ['app engine', 'kubernetes engine', 'cloud functions'] 24 | role_tags: ['cloud architect', 'developers backend', 'developers frontend'] 25 | domain_tags: 26 | - infrastructure 27 | - application development 28 | - data 29 | 30 | instruction: 31 | type: html 32 | uri: 33 | locales: 34 | en: "./instructions/en.html" 35 | es: "./instructions/es.html" 36 | 37 | resources: 38 | - type: file 39 | title: 40 | locales: 41 | en: Sample PDF 42 | es: Ejemplo de PDF 43 | description: 44 | locales: 45 | en: This PDF contains all of the code samples for the lab. 46 | es: Este PDF contiene todos los ejemplos de código para el laboratorio. 47 | uri: 48 | locales: 49 | en: "./resources/sample-en.pdf" 50 | es: "./resources/sample-es.pdf" 51 | - type: video 52 | id: intro-video 53 | title: 54 | locales: 55 | en: Welcome to GCP! 56 | es: ¡Bienvenido a GCP! 57 | uri: 58 | locales: 59 | en: https://youtube.com/oHg5SJYRHA0 60 | es: https://youtube.com/7jjoyy7_RCk 61 | description: 62 | locales: 63 | en: Overview of Google Cloud Platform 64 | es: Descripción general de Google Cloud Platform 65 | 66 | environment: 67 | resources: 68 | - type: gcp_project 69 | id: my_primary_project 70 | variant: gcpfree 71 | allowed_locations: 72 | - us-east1 73 | - us-central1-a 74 | startup_script: 75 | type: deployment_manager 76 | path: startup_script 77 | custom_properties: 78 | - key: userNameWindows 79 | value: student 80 | - key: Project ID 81 | reference: my_primary_project.project_id 82 | - key: Default Zone 83 | reference: my_primary_project.default_zone 84 | - key: Default Region 85 | reference: my_primary_project.default_region 86 | - key: username 87 | reference: gcp_user.username 88 | - key: userName 89 | reference: gcp_user.local_username 90 | - key: password 91 | reference: gcp_user.password 92 | - key: AWS Account Number 93 | reference: the_account.account_number 94 | parent: my_primary_folder 95 | - type: gcp_project 96 | id: my_secondary_project 97 | variant: gcp_low_extra 98 | startup_script: 99 | type: qwiklabs 100 | path: startup_script 101 | custom_properties: 102 | - key: userNameWindows 103 | value: student 104 | cleanup_script: 105 | type: qwiklabs 106 | path: cleanup_script 107 | - type: gcp_project 108 | id: my_tertiary_project 109 | variant: gcpd 110 | allowed_locations: 111 | - - us-west1 112 | - us-east1 113 | - us-central1 114 | - SAME_AS_FIRST 115 | - SAME_AS_FIRST 116 | allowed_locations_constraint: DIFFERENT_REGIONS 117 | - type: gcp_user 118 | id: user_0 119 | permissions: 120 | - project: project_0 121 | roles: 122 | - roles/editor 123 | - roles/appengine.appAdmin 124 | - roles/bigquery.admin 125 | - roles/bigquery.user 126 | - folder: my_primary_folder 127 | roles: 128 | - roles/compute.xpnAdmin 129 | - type: gsuite_domain 130 | id: primary_domain 131 | - type: cloud_terminal 132 | id: shell 133 | permissions: 134 | - project: my_primary_project 135 | roles: 136 | - roles/editor 137 | - type: linux_terminal 138 | id: no-script-linux 139 | variant: it_cert_extra 140 | - type: linux_terminal 141 | id: script-linux 142 | startup_script: 143 | path: startup.sh 144 | - type: windows_vm 145 | id: no-script-windows 146 | variant: it_cert 147 | - type: windows_vm 148 | id: script-windows 149 | startup_script: 150 | path: startup.bat 151 | - type: aws_account 152 | id: the_account 153 | variant: aws_vpc 154 | allowed_locations: 155 | - us-east-1 156 | - us-central-1 157 | startup_script: 158 | type: cloud_formation 159 | path: lab.template 160 | custom_properties: 161 | - key: userNameWindows 162 | value: student 163 | - key: Project ID 164 | reference: my_primary_project.project_id 165 | - key: GCP Username 166 | reference: gcp_user.username 167 | - key: GCP password 168 | reference: gcp_user.password 169 | - key: AWS Account Number 170 | reference: the_account.account_number 171 | - key: AWS SSH private key 172 | reference: the_account.ssh_key 173 | user_policy: student_policy.json 174 | account_restrictions: 175 | allow_dedicated_instances: false 176 | allow_spot_instances: false 177 | allow_subnet_deletion: false 178 | allowed_rds_instances: ['db.t2.micro'] 179 | - type: google_workspace_domain 180 | id: my_domain 181 | - type: looker_instance 182 | id: looker 183 | permissions: 184 | - project: my_primary_project 185 | roles: 186 | - roles/editor 187 | startup_script: 188 | path: startup.sh 189 | - type: ide 190 | id: ide 191 | startup_script: 192 | path: startup.sh 193 | student_files: 194 | - path: student_files/main.py 195 | - type: azure_resource_group 196 | id: rg_1 197 | variant: default 198 | startup_script: 199 | type: qwiklabs 200 | path: startup_script 201 | custom_properties: 202 | - key: key 203 | value: student 204 | - type: azure_user 205 | id: a_user_1 206 | variant: default 207 | permissions: 208 | - resource_group: rg_1 209 | roles: 210 | - reader 211 | - type: azure_user 212 | id: a_user_2 213 | - type: gcp_folder 214 | id: my_primary_folder 215 | 216 | student_visible_outputs: 217 | - label: 218 | locales: 219 | en: "Open Azure Console" 220 | es: "Abrir La Consola Azure" 221 | reference: rg_1.console_url 222 | - label: 223 | locales: 224 | en: "Azure Resource Group" 225 | reference: rg_1.resource_group_name 226 | - label: 227 | locales: 228 | en: "Azure Username" 229 | es: "Nombre de usuario Azure" 230 | reference: a_user_1.username 231 | - label: 232 | locales: 233 | en: "Azure Password" 234 | reference: a_user_1.password 235 | - label: 236 | locales: 237 | en: "Resource Group Location" 238 | reference: rg_1.startup_script.location 239 | - label: 240 | locales: 241 | en: "Open GCP Console" 242 | es: "Abrir La Consola GCP" 243 | reference: my_primary_project.console_url 244 | - label: 245 | locales: 246 | en: "GCP Project" 247 | es: "Proyecto GCP" 248 | reference: my_primary_project.project_id 249 | - label: 250 | locales: 251 | en: "GCP Project Default Zone 1" 252 | reference: my_tertiary_project.default_zone_1 253 | - label: 254 | locales: 255 | en: "GCP Project Default Zone 2" 256 | reference: my_tertiary_project.default_zone_2 257 | - label: 258 | locales: 259 | en: "GCP Project Default Zone 3" 260 | reference: my_tertiary_project.default_zone_3 261 | - label: 262 | locales: 263 | en: "GCP Folder Name" 264 | es: "Nombre de carpeta de GCP" 265 | reference: my_primary_folder.folder_name 266 | - label: 267 | locales: 268 | en: "GCP Folder Display Name" 269 | es: "Nombre para mostrar de la carpeta GCP" 270 | reference: my_primary_folder.display_name 271 | - label: 272 | locales: 273 | en: "Username" 274 | es: "Nombre de usuario" 275 | reference: user_0.username 276 | - label: 277 | locales: 278 | en: "SSH Key" 279 | es: "Clave SSH" 280 | reference: user_0.ssh_key 281 | - label: 282 | locales: 283 | en: "RDP Session" 284 | reference: script-windows.student_url 285 | - label: 286 | locales: 287 | en: "Public IP" 288 | reference: script-linux.external_ip 289 | - label: 290 | locales: 291 | en: "InstanceDns" 292 | reference: my_primary_project.startup_script.InstanceDns 293 | - label: 294 | locales: 295 | en: "InstanceId" 296 | reference: the_account.startup_script.InstanceId 297 | - label: 298 | locales: 299 | en: "Open AWS Console" 300 | es: "Abrir La Consola AWS" 301 | reference: the_account.console_url 302 | - label: 303 | locales: 304 | en: "AWS Access Key ID" 305 | reference: the_account.access_key_id 306 | - label: 307 | locales: 308 | en: "AWS Secret Access Key" 309 | reference: the_account.secret_access_key 310 | - label: 311 | locales: 312 | en: "Workspace Console" 313 | reference: my_domain.console_url 314 | - label: 315 | locales: 316 | en: "Workspace Admin User" 317 | reference: my_domain.admin_username 318 | - label: 319 | locales: 320 | en: "Workspace Admin Password" 321 | reference: my_domain.admin_password 322 | - label: 323 | locales: 324 | en: "Open Looker" 325 | reference: looker_instance.student_url 326 | - label: 327 | locales: 328 | en: "Looker Developer Username" 329 | reference: looker_instance.developer_username 330 | - label: 331 | locales: 332 | en: "Looker Developer Password" 333 | reference: looker_instance.developer_password 334 | 335 | assessment: 336 | passing_percentage: 75 337 | steps: 338 | - title: 339 | locales: 340 | en: Create a Cloud Storage bucket 341 | es: Crear un depósito de almacenamiento en la nube 342 | maximum_score: 5 343 | student_messages: 344 | success: 345 | locales: 346 | en: 347 | Great job! You created the bucket! 348 | es: 349 | ¡Gran trabajo! ¡Creaste el cubo! 350 | bucket_missing: 351 | locales: 352 | en: 353 | Oops! No bucket found. 354 | es: 355 | ¡Uy! No se ha encontrado el cubo. 356 | bucket_misconfigured: 357 | locales: 358 | en: 359 | Hmm. The bucket is there, but it is misconfigured. 360 | es: 361 | Hmm. El cubo está allí, pero está mal configurado. 362 | services: 363 | - my_primary_project.StorageV1 364 | code: |- 365 | def check(handles: handles, resources: resources, maximum_score: maximum_score) 366 | storage_handle = handles['my_primary_project.StorageV1'] 367 | 368 | # Check for bucket 369 | found_bucket = ... 370 | unless found_bucket 371 | return { score: 0, student_message: 'bucket_missing' } 372 | end 373 | 374 | # Check bucket configuration 375 | bucket_configured_correctly = ... 376 | unless bucket_configured_correctly 377 | return { score: 2, student_message: 'bucket_misconfigured' } 378 | end 379 | 380 | { score: maximum_score, student_message: 'success' } 381 | end 382 | -------------------------------------------------------------------------------- /api/examples/lab-robust/resources/sample-en.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/lab-robust/resources/sample-en.pdf -------------------------------------------------------------------------------- /api/examples/lab-robust/resources/sample-es.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/lab-robust/resources/sample-es.pdf -------------------------------------------------------------------------------- /api/examples/lab-robust/startup_script/qwiklabs.jinja: -------------------------------------------------------------------------------- 1 | outputs: 2 | - name: InstanceDns 3 | value: 35.238.252.133 4 | -------------------------------------------------------------------------------- /api/examples/lab-robust/student_policy.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /api/examples/lab-v1-gsuite/instruction.html: -------------------------------------------------------------------------------- 1 |We’ve given admin credentials for a GSuite domain. Go ahead and play around with it.
6 | 7 |…
10 | 11 |Huzzah! You’re ready to take on the world!
14 | -------------------------------------------------------------------------------- /api/examples/lab-v1-gsuite/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | entity_type: Lab 2 | schema_version: 1 3 | 4 | default_locale: en 5 | 6 | title: 7 | locales: 8 | en: Minimalist Gsuite Domain Example 9 | 10 | description: 11 | locales: 12 | en: Just the basics, nothing more. 13 | 14 | duration: 20 15 | level: introductory 16 | 17 | instruction: 18 | type: html 19 | locales: 20 | en: 'instruction.html' 21 | 22 | environment_resources: 23 | - type: gsuite_domain 24 | -------------------------------------------------------------------------------- /api/examples/lab-v1-minimal/instruction.html: -------------------------------------------------------------------------------- 1 |We’ve given you a GCP resource. Go ahead and play around with it.
6 | 7 |…
10 | 11 |Huzzah! You’re ready to take on the world!
14 | -------------------------------------------------------------------------------- /api/examples/lab-v1-minimal/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | entity_type: Lab 2 | schema_version: 1 3 | 4 | default_locale: en 5 | 6 | title: 7 | locales: 8 | en: Minialist Lab Example 9 | 10 | description: 11 | locales: 12 | en: Just the basics, nothing more. 13 | 14 | duration: 20 15 | level: introductory 16 | 17 | instruction: 18 | type: html 19 | locales: 20 | en: './instruction.html' 21 | 22 | environment_resources: 23 | - type: gcp_project_and_user 24 | -------------------------------------------------------------------------------- /api/examples/lab-v1-robust/assessment.yaml: -------------------------------------------------------------------------------- 1 | # This file is _not_ standardized at all. It is currently just an export of 2 | # activity tracking from the Qwiklabs interface and is subject to change. 3 | # Consider it an early alpha version of the file. 4 | --- 5 | name: 'BigQuery: Qwik Start - Web User Interface' 6 | description: "This lab has following steps:\r\n\r\n1. Create a dataset\r\n2. Load 7 | the data into a new table" 8 | pass_percent: 75 9 | notify: false 10 | score_completion_only: false 11 | steps: 12 | - title: Create a new dataset 13 | points: 5 14 | max: 30 15 | interval: 30 16 | multi_region: false 17 | api: GCP 18 | services: 19 | - BigqueryV2 20 | method_name: steponecheck 21 | code: | 22 | def steponecheck(handles, points) 23 | bq = handles[:BigqueryV2] 24 | ret_hash = {done: false, score: 0} 25 | datasets = bq.list_datasets&.datasets || [] 26 | if datasets.count > 0 27 | ret_hash[:score] += 2 28 | datasets.each do |dataset| 29 | if dataset.dataset_reference.dataset_id == 'babynames' 30 | ret_hash[:score] += 3 31 | end 32 | end 33 | end 34 | if ret_hash[:score] == points 35 | ret_hash = { :done => true, :score => points } 36 | end 37 | ret_hash 38 | end 39 | - title: Upload the table 40 | points: 5 41 | max: 30 42 | interval: 30 43 | multi_region: false 44 | api: GCP 45 | services: 46 | - BigqueryV2 47 | method_name: steptwocheck 48 | code: | 49 | def steptwocheck(handles, points) 50 | bq = handles[:BigqueryV2] 51 | ret_hash = {done: false, score: 0} 52 | datasets = bq.list_datasets&.datasets || [] 53 | if datasets.count > 0 54 | datasets.each do |dataset| 55 | if dataset.dataset_reference.dataset_id == 'babynames' 56 | tables = bq.list_tables('babynames')&.tables || [] 57 | if tables.count > 0 58 | ret_hash[:score] += 2 59 | tables.each do |table| 60 | if table.table_reference.table_id == 'names_2014' 61 | ret_hash[:score] += 3 62 | end 63 | end 64 | end 65 | end 66 | end 67 | end 68 | if ret_hash[:score] == points 69 | ret_hash = { :done => true, :score => points } 70 | end 71 | ret_hash 72 | end 73 | -------------------------------------------------------------------------------- /api/examples/lab-v1-robust/dm.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/lab-v1-robust/dm.zip -------------------------------------------------------------------------------- /api/examples/lab-v1-robust/instructions/en.html: -------------------------------------------------------------------------------- 1 |We’ve given you a GCP resource. Go ahead and play around with it.
5 | 6 |…
8 |…
9 | 10 |Huzzah! You’re ready to take on the world!
12 | -------------------------------------------------------------------------------- /api/examples/lab-v1-robust/instructions/es.html: -------------------------------------------------------------------------------- 1 |Le hemos proporcionado un recurso GCP. Adelante y juega con eso.
4 |…
6 |¡Huzzah! ¡Estás listo para enfrentarte al mundo!
8 | -------------------------------------------------------------------------------- /api/examples/lab-v1-robust/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | entity_type: Lab 2 | schema_version: 1 3 | 4 | default_locale: en 5 | 6 | title: 7 | locales: 8 | en: Robust Lab Example 9 | es: Ejemplo de Robust Lab 10 | 11 | description: 12 | locales: 13 | en: Seriously the best lab you've ever taken. Bar none. 14 | es: En serio, el mejor lab que has tomado. Sin excepción. 15 | 16 | credits: 5 17 | duration: 60 18 | level: introductory 19 | tags: 20 | - sample 21 | - life-changing 22 | - gcp 23 | product_tags: ['app engine', 'kubernetes engine', 'cloud functions'] 24 | role_tags: ['cloud architect', 'developers backend', 'developers frontend'] 25 | domain_tags: 26 | - infrastructure 27 | - application development 28 | - data 29 | 30 | instruction: 31 | type: markdown 32 | locales: 33 | en: "./instructions/en.md" 34 | es: "./instructions/es.md" 35 | 36 | resources: 37 | - type: file 38 | title: 39 | locales: 40 | en: Sample PDF 41 | es: Ejemplo de PDF 42 | description: 43 | locales: 44 | en: This PDF contains all of the code samples for the lab. 45 | es: Este PDF contiene todos los ejemplos de código para el laboratorio. 46 | uri: 47 | locales: 48 | en: "./resources/sample-en.pdf" 49 | es: "./resources/sample-es.pdf" 50 | - type: video 51 | id: intro-video 52 | title: 53 | locales: 54 | en: Welcome to GCP! 55 | es: ¡Bienvenido a GCP! 56 | uri: 57 | locales: 58 | en: https://youtube.com/oHg5SJYRHA0 59 | es: https://youtube.com/7jjoyy7_RCk 60 | description: 61 | locales: 62 | en: Overview of Google Cloud Platform 63 | es: Descripción general de Google Cloud Platform 64 | 65 | environment_resources: 66 | - type: gcp_project 67 | id: my_primary_project 68 | fleet: gcpfree 69 | dm_script: dm.zip 70 | - type: gcp_user 71 | id: user_0 72 | permissions: 73 | - project: project_0 74 | roles: 75 | - roles/editor 76 | - roles/appengine.appAdmin 77 | - roles/bigquery.admin 78 | - roles/bigquery.user 79 | - type: gcp_user 80 | id: gcp-only-user 81 | variant: gcp_only 82 | - type: gcp_user 83 | id: default-user 84 | variant: default 85 | 86 | assessment: 87 | name: 'BigQuery: Qwik Start - Web User Interface' 88 | description: "This lab has following steps:\r\n\r\n1. Create a dataset\r\n2. Load 89 | the data into a new table" 90 | pass_percent: 75 91 | notify: false 92 | score_completion_only: false 93 | steps: 94 | - title: Create a new dataset 95 | points: 5 96 | max: 30 97 | interval: 30 98 | multi_region: false 99 | api: GCP 100 | services: 101 | - BigqueryV2 102 | method_name: steponecheck 103 | code: | 104 | def steponecheck(handles, points) 105 | bq = handles[:BigqueryV2] 106 | ret_hash = {done: false, score: 0} 107 | datasets = bq.list_datasets&.datasets || [] 108 | if datasets.count > 0 109 | ret_hash[:score] += 2 110 | datasets.each do |dataset| 111 | if dataset.dataset_reference.dataset_id == 'babynames' 112 | ret_hash[:score] += 3 113 | end 114 | end 115 | end 116 | if ret_hash[:score] == points 117 | ret_hash = { :done => true, :score => points } 118 | end 119 | ret_hash 120 | end 121 | - title: Upload the table 122 | points: 5 123 | max: 30 124 | interval: 30 125 | multi_region: false 126 | api: GCP 127 | services: 128 | - BigqueryV2 129 | method_name: steptwocheck 130 | code: | 131 | def steptwocheck(handles, points) 132 | bq = handles[:BigqueryV2] 133 | ret_hash = {done: false, score: 0} 134 | datasets = bq.list_datasets&.datasets || [] 135 | if datasets.count > 0 136 | datasets.each do |dataset| 137 | if dataset.dataset_reference.dataset_id == 'babynames' 138 | tables = bq.list_tables('babynames')&.tables || [] 139 | if tables.count > 0 140 | ret_hash[:score] += 2 141 | tables.each do |table| 142 | if table.table_reference.table_id == 'names_2014' 143 | ret_hash[:score] += 3 144 | end 145 | end 146 | end 147 | end 148 | end 149 | end 150 | if ret_hash[:score] == points 151 | ret_hash = { :done => true, :score => points } 152 | end 153 | ret_hash 154 | end 155 | -------------------------------------------------------------------------------- /api/examples/lab-v1-robust/resources/sample-en.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/lab-v1-robust/resources/sample-en.pdf -------------------------------------------------------------------------------- /api/examples/lab-v1-robust/resources/sample-es.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/lab-v1-robust/resources/sample-es.pdf -------------------------------------------------------------------------------- /api/examples/learning-path-minimal/gcp-intro-path-badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/learning-path-minimal/gcp-intro-path-badge.png -------------------------------------------------------------------------------- /api/examples/learning-path-minimal/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | schema_version: 1 2 | entity_type: LearningPath 3 | 4 | id: my-library/basic-learning-path 5 | default_locale: en 6 | 7 | title: 8 | locales: 9 | en: Good Path 10 | 11 | description: 12 | locales: 13 | en: My learning path description 14 | 15 | modules: 16 | - id: my-module 17 | title: 18 | locales: 19 | en: My Module 20 | es: Mi módulo 21 | steps: 22 | - id: my-first-step 23 | activity_options: 24 | - type: lab 25 | id: my-library/a-lab 26 | - type: lab 27 | id: my-other-library/another-lab 28 | - id: my-second-step 29 | activity_options: 30 | - type: quiz 31 | id: my-library/a-quiz 32 | -------------------------------------------------------------------------------- /api/examples/learning-path-minimal/resources/choosing_compute_en.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/learning-path-minimal/resources/choosing_compute_en.pdf -------------------------------------------------------------------------------- /api/examples/peer-assignment-minimal/instructions/en.html: -------------------------------------------------------------------------------- 1 |Use this template for your storyboard.
5 | 6 |…
8 |…
9 | 10 |Huzzah! You’re ready to take on the world!
12 | -------------------------------------------------------------------------------- /api/examples/peer-assignment-minimal/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | entity_type: PeerAssignment 2 | schema_version: 1 3 | 4 | default_locale: en 5 | 6 | title: 7 | locales: 8 | en: Minimal Peer Assignment Example 9 | 10 | review_criteria: 11 | locales: 12 | en: Just the basics, nothing more. 13 | 14 | duration: 120 15 | 16 | instruction: 17 | type: html 18 | uri: 19 | locales: 20 | en: "./instructions/en.html" 21 | 22 | prompts: 23 | - id: prompt-1 24 | stem: 25 | locales: 26 | en: Upload a big picture storyboard. 27 | response_types: 28 | - file_upload 29 | rubric_items: 30 | - type: multiple-choice 31 | id: prompt-1-rubric-1 32 | stem: 33 | locales: 34 | en: The template is filled out. 35 | options: 36 | - id: prompt-1-rubric-1-option-1 37 | title: 38 | locales: 39 | en: 0 parts of the template are filled out. 40 | points: 0 41 | - id: prompt-1-rubric-1-option-2 42 | title: 43 | locales: 44 | en: Some parts of the template are filled out. 45 | points: 1 46 | - id: prompt-1-rubric-1-option-3 47 | title: 48 | locales: 49 | en: All parts of the template are filled out. 50 | points: 2 51 | - type: true-false 52 | id: prompt-1-rubric-2 53 | stem: 54 | locales: 55 | en: The big picture storyboard is clearly focused on a user. 56 | true_points: 1 57 | false_points: 0 58 | -------------------------------------------------------------------------------- /api/examples/peer-assignment-robust/instructions/en.html: -------------------------------------------------------------------------------- 1 |Use this template for your storyboard.
5 | 6 |…
8 |…
9 | 10 |Huzzah! You’re ready to take on the world!
12 | 13 |Utilice esta plantilla para su guión gráfico .
5 | 6 |…
8 |…
9 | 10 |¡Huzzah! ¡Estás listo para enfrentarte al mundo!
-------------------------------------------------------------------------------- /api/examples/peer-assignment-robust/instructions/img/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/api/examples/peer-assignment-robust/instructions/img/example.png -------------------------------------------------------------------------------- /api/examples/peer-assignment-robust/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | entity_type: PeerAssignment 2 | schema_version: 1 3 | 4 | default_locale: en 5 | 6 | title: 7 | locales: 8 | en: Robust Peer Assignment Example 9 | es: Ejemplo de Robust Peer Assignment 10 | 11 | review_criteria: 12 | locales: 13 | en: Just the basics, nothing more. 14 | es: Solo lo básico, nada más. 15 | 16 | duration: 120 17 | 18 | instruction: 19 | type: html 20 | uri: 21 | locales: 22 | en: "./instructions/en.html" 23 | es: "./instructions/es.html" 24 | 25 | objectives: 26 | locales: 27 | en: Learn how to do a peer assignment. 28 | es: Aprende a hacer una tarea entre compañeros. 29 | 30 | passing_score: 5 31 | 32 | prompts: 33 | - id: prompt-1 34 | stem: 35 | locales: 36 | en: Upload a big picture storyboard. 37 | es: Cargue el guión gráfico general. 38 | response_types: 39 | - file_upload 40 | - url 41 | rubric_items: 42 | - type: multiple-choice 43 | id: prompt-1-rubric-1 44 | stem: 45 | locales: 46 | en: The template is filled out. 47 | es: La plantilla está llena. 48 | options: 49 | - id: prompt-1-rubric-1-option-1 50 | title: 51 | locales: 52 | en: 0 parts of the template are filled out. 53 | es: Se completan 0 partes de la plantilla. 54 | points: 0 55 | - id: prompt-1-rubric-1-option-2 56 | title: 57 | locales: 58 | en: Some parts of the template are filled out. 59 | es: Algunas partes de la plantilla están llenas. 60 | points: 1 61 | - id: prompt-1-rubric-1-option-3 62 | title: 63 | locales: 64 | en: All parts of the template are filled out. 65 | es: Todas las partes de la plantilla están llenas. 66 | points: 2 67 | - type: true-false 68 | id: prompt-1-rubric-2 69 | stem: 70 | locales: 71 | en: The big picture storyboard is clearly focused on a user. 72 | es: El guión gráfico general está claramente centrado en un usuario. 73 | true_points: 1 74 | false_points: 0 75 | - id: prompt-2 76 | stem: 77 | locales: 78 | en: Upload a close-up storyboard. 79 | es: Cargue un guión gráfico de primer plano. 80 | response_types: 81 | - file_upload 82 | - url 83 | rubric_items: 84 | - type: multiple-choice 85 | id: prompt-2-rubric-1 86 | stem: 87 | locales: 88 | en: The template is filled out. 89 | es: La plantilla está llena. 90 | options: 91 | - id: prompt-2-rubric-1-option-1 92 | title: 93 | locales: 94 | en: 0 parts of the template are filled out. 95 | es: La plantilla está llena. 96 | points: 0 97 | - id: prompt-2-rubric-1-option-2 98 | title: 99 | locales: 100 | en: Some parts of the template are filled out. 101 | es: Algunas partes de la plantilla están llenas. 102 | points: 1 103 | - id: prompt-2-rubric-1-option-3 104 | title: 105 | locales: 106 | en: All parts of the template are filled out. 107 | es: Todas las partes de la plantilla están llenas. 108 | points: 2 109 | - type: true-false 110 | id: prompt-2-rubric-2 111 | stem: 112 | locales: 113 | en: The close-up storyboard is clearly focused on a user. 114 | es: El guión gráfico de primer plano está claramente centrado en un usuario. 115 | true_points: 1 116 | false_points: 0 117 | - type: reflective-text 118 | id: prompt-2-rubric-3 119 | stem: 120 | locales: 121 | en: Provide feedback on the close-up storyboard. 122 | es: Proporcione comentarios sobre el guión gráfico de primer plano. 123 | 124 | exemplars: 125 | - id: examplar-1 126 | prompt_responses: 127 | - id: prompt-response-1 128 | prompt_id: prompt-1 129 | response_type: url 130 | response_content: 131 | locales: 132 | en: http://www.google.com 133 | es: http://www.google.com 134 | 135 | - id: prompt-response-2 136 | prompt_id: prompt-2 137 | response_type: rich_text 138 | response_content: 139 | locales: 140 | en: This is my rich text answer 141 | es: This is my rich text answer in Spanish 142 | -------------------------------------------------------------------------------- /api/examples/quiz-minimal/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | entity_type: Quiz 2 | schema_version: 1 3 | 4 | title: 5 | locales: 6 | en: What is democracy? 7 | 8 | passing_percentage: 100 9 | default_locale: en 10 | 11 | items: 12 | - type: true-false 13 | id: item-1 14 | stem: 15 | locales: 16 | en: Direct democracy is a form of government where a single leader has ultimate ruling authority. 17 | answer: false 18 | true_rationale: 19 | locales: 20 | en: Sorry! A single leader having ultimate authority describes an autocracy. 21 | false_rationale: 22 | locales: 23 | en: Right! That form of government would be closer to an autocracy, not democracy. 24 | -------------------------------------------------------------------------------- /api/examples/quiz-robust/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | entity_type: Quiz 2 | schema_version: 1 3 | 4 | title: 5 | locales: 6 | en: Nobel Prizewinners 7 | 8 | passing_percentage: 67 9 | default_locale: en 10 | 11 | items: 12 | - type: multiple-choice 13 | id: item-1 14 | stem: 15 | locales: 16 | en: Who won the Nobel Prize for discovering the cause of the photoelectric effect? 17 | fr: Qui a remporté le prix Nobel pour avoir découvert la cause de l'effet photoélectrique? 18 | options: 19 | - title: 20 | locales: 21 | en: Albert Einstein 22 | fr: Albert Einstein 23 | id: item-1-option-1 24 | is_answer: true 25 | rationale: 26 | locales: 27 | en: Correct! Albert Einstein won the Nobel Prize in 1922 for work that forms the foundation for how modern solar panels work. 28 | fr: Correct! Albert Einstein a reçu le prix Nobel en 1922 pour des travaux qui constituent le fondement du fonctionnement des panneaux solaires modernes. 29 | - title: 30 | locales: 31 | en: Francis Crick 32 | fr: Francis Crick 33 | id: item-1-option-2 34 | is_answer: false 35 | rationale: 36 | locales: 37 | en: While Crick did win a Nobel Prize, it was for his discovery of DNA along with James Watson. 38 | fr: Bien que Crick ait remporté un prix Nobel, c'était pour sa découverte de l'ADN avec James Watson. 39 | - title: 40 | locales: 41 | en: Rosalind Franklin 42 | fr: Rosalind Franklin 43 | id: item-1-option-3 44 | is_answer: false 45 | rationale: 46 | locales: 47 | en: Sorry! While her work was instrumental in discovering DNA, Rosalind Franklin never won a Nobel Prize. 48 | fr: Désolé! Alors que son travail a joué un rôle déterminant dans la découverte de l'ADN, Rosalind Franklin n'a jamais remporté de prix Nobel. 49 | - title: 50 | locales: 51 | en: Max Planck 52 | fr: Max Planck 53 | id: item-1-option-4 54 | is_answer: false 55 | rationale: 56 | locales: 57 | en: Max Planck won the Nobel Price in Physics in 1918 for his work on quantum theory, and while his work was used in the discovery of the photoelectric effect, he actually rejected the initial theory. 58 | fr: Max Planck a remporté le prix Nobel de physique en 1918 pour ses travaux sur la théorie quantique. Bien que ses travaux aient servi à la découverte de l'effet photoélectrique, il a en réalité rejeté la théorie initiale. 59 | - type: multiple-select 60 | id: item-2 61 | stem: 62 | locales: 63 | en: Which of the following is a state in the United States? 64 | fr: Lequel des États suivants est un État aux États-Unis? 65 | options: 66 | - title: 67 | locales: 68 | en: Massachusetts 69 | fr: Massachusetts 70 | id: item-2-option-1 71 | is_answer: true 72 | rationale: 73 | locales: 74 | en: Yep! Massachusetts is located in the Northeast. 75 | fr: Oui! Le Massachusetts est situé dans le nord-est. 76 | - title: 77 | locales: 78 | en: Manitoba 79 | fr: Manitoba 80 | id: item-2-option-2 81 | is_answer: false 82 | rationale: 83 | locales: 84 | en: Sorry! Manitoba is a Canadian province, though it does share a border with the Midwest United States. 85 | fr: Désolé! Le Manitoba est une province canadienne, même s'il partage une frontière avec le Midwest américain. 86 | - title: 87 | locales: 88 | en: Oregon 89 | fr: l'Oregon 90 | id: item-2-option-3 91 | is_answer: true 92 | rationale: 93 | locales: 94 | en: Yep! Oregon is a state in the Pacific Northwest. 95 | fr: Oui! L'Oregon est un état du nord-ouest du Pacifique. 96 | - title: 97 | locales: 98 | en: Washington, D.C. 99 | fr: Washington, D.C. 100 | id: item-2-option-4 101 | is_answer: false 102 | rationale: 103 | locales: 104 | en: Washington, D.C. is specifically mentioned in the U.S. Constitution as as a district administered by the federal government for the purpose of being the Seat of the Government of the United States. It lacks several of the rights states have, such as full representation in Congress. 105 | fr: Washington, DC, est expressément mentionné dans la Constitution américaine comme un district administré par le gouvernement fédéral dans le but d’être le siège du gouvernement des États-Unis. Il manque plusieurs des droits des États, tels que la pleine représentation au Congrès. 106 | - type: true-false 107 | id: item-3 108 | stem: 109 | locales: 110 | en: Direct democracy is a form of government where a single leader has ultimate ruling authority. 111 | fr: La démocratie directe est une forme de gouvernement où un seul chef a l'autorité suprême. 112 | answer: false 113 | true_rationale: 114 | locales: 115 | en: Sorry! A single leader having ultimate authority describes an autocracy. 116 | fr: Désolé! Un seul chef ayant l'autorité ultime décrit une autocratie. 117 | false_rationale: 118 | locales: 119 | en: Right! That form of government would be closer to an autocracy, not democracy. 120 | fr: C'est ça! Cette forme de gouvernement serait plus proche d'une autocratie, pas d'une démocratie. 121 | - type: match 122 | id: item-4 123 | lead_in: 124 | locales: 125 | en: Match the following cities to their states. 126 | fr: Faites correspondre les villes suivantes à leurs États. 127 | stems: 128 | - title: 129 | locales: 130 | en: San Francisco 131 | fr: San Francisco 132 | answer: item-4-option-0 133 | - title: 134 | locales: 135 | en: Nashville 136 | fr: Nashville 137 | answer: item-4-option-1 138 | options: 139 | - id: item-4-option-0 140 | title: 141 | locales: 142 | en: Tennessee 143 | fr: Tennessee 144 | - id: item-4-option-1 145 | title: 146 | locales: 147 | en: California 148 | fr: Californie 149 | -------------------------------------------------------------------------------- /api/examples/quiz-sections/qwiklabs.yaml: -------------------------------------------------------------------------------- 1 | entity_type: Quiz 2 | schema_version: 1 3 | 4 | title: 5 | locales: 6 | en: Nobel Prizewinners 7 | 8 | passing_percentage: 67 9 | default_locale: en 10 | 11 | sections: 12 | - id: section-1 13 | name: Section 1 14 | item_count: 2 15 | items: 16 | - type: multiple-choice 17 | id: item-1 18 | stem: 19 | locales: 20 | en: Who won the Nobel Prize for discovering the cause of the photoelectric effect? 21 | fr: Qui a remporté le prix Nobel pour avoir découvert la cause de l'effet photoélectrique? 22 | options: 23 | - title: 24 | locales: 25 | en: Albert Einstein 26 | fr: Albert Einstein 27 | id: item-1-option-1 28 | is_answer: true 29 | rationale: 30 | locales: 31 | en: Correct! Albert Einstein won the Nobel Prize in 1922 for work that forms the foundation for how modern solar panels work. 32 | fr: Correct! Albert Einstein a reçu le prix Nobel en 1922 pour des travaux qui constituent le fondement du fonctionnement des panneaux solaires modernes. 33 | - title: 34 | locales: 35 | en: Francis Crick 36 | fr: Francis Crick 37 | id: item-1-option-2 38 | is_answer: false 39 | rationale: 40 | locales: 41 | en: While Crick did win a Nobel Prize, it was for his discovery of DNA along with James Watson. 42 | fr: Bien que Crick ait remporté un prix Nobel, c'était pour sa découverte de l'ADN avec James Watson. 43 | - title: 44 | locales: 45 | en: Rosalind Franklin 46 | fr: Rosalind Franklin 47 | id: item-1-option-3 48 | is_answer: false 49 | rationale: 50 | locales: 51 | en: Sorry! While her work was instrumental in discovering DNA, Rosalind Franklin never won a Nobel Prize. 52 | fr: Désolé! Alors que son travail a joué un rôle déterminant dans la découverte de l'ADN, Rosalind Franklin n'a jamais remporté de prix Nobel. 53 | - title: 54 | locales: 55 | en: Max Planck 56 | fr: Max Planck 57 | id: item-1-option-4 58 | is_answer: false 59 | rationale: 60 | locales: 61 | en: Max Planck won the Nobel Price in Physics in 1918 for his work on quantum theory, and while his work was used in the discovery of the photoelectric effect, he actually rejected the initial theory. 62 | fr: Max Planck a remporté le prix Nobel de physique en 1918 pour ses travaux sur la théorie quantique. Bien que ses travaux aient servi à la découverte de l'effet photoélectrique, il a en réalité rejeté la théorie initiale. 63 | - title: 64 | locales: 65 | en: All of the above 66 | fr: Tout ce qui précède 67 | id: item-1-option-5 68 | is_answer: false 69 | rationale: 70 | locales: 71 | en: Some of the answers are incorrect. Try again! 72 | fr: Certaines des réponses sont incorrectes. Réessayer! 73 | fixedPlace: true 74 | - type: multiple-select 75 | id: item-2 76 | stem: 77 | locales: 78 | en: Which of the following is a state in the United States? 79 | fr: Lequel des États suivants est un État aux États-Unis? 80 | options: 81 | - title: 82 | locales: 83 | en: Massachusetts 84 | fr: Massachusetts 85 | id: item-2-option-1 86 | is_answer: true 87 | rationale: 88 | locales: 89 | en: Yep! Massachusetts is located in the Northeast. 90 | fr: Oui! Le Massachusetts est situé dans le nord-est. 91 | - title: 92 | locales: 93 | en: Manitoba 94 | fr: Manitoba 95 | id: item-2-option-2 96 | is_answer: false 97 | rationale: 98 | locales: 99 | en: Sorry! Manitoba is a Canadian province, though it does share a border with the Midwest United States. 100 | fr: Désolé! Le Manitoba est une province canadienne, même s'il partage une frontière avec le Midwest américain. 101 | - title: 102 | locales: 103 | en: Oregon 104 | fr: l'Oregon 105 | id: item-2-option-3 106 | is_answer: true 107 | rationale: 108 | locales: 109 | en: Yep! Oregon is a state in the Pacific Northwest. 110 | fr: Oui! L'Oregon est un état du nord-ouest du Pacifique. 111 | - title: 112 | locales: 113 | en: Washington, D.C. 114 | fr: Washington, D.C. 115 | id: item-2-option-4 116 | is_answer: false 117 | rationale: 118 | locales: 119 | en: Washington, D.C. is specifically mentioned in the U.S. Constitution as as a district administered by the federal government for the purpose of being the Seat of the Government of the United States. It lacks several of the rights states have, such as full representation in Congress. 120 | fr: Washington, DC, est expressément mentionné dans la Constitution américaine comme un district administré par le gouvernement fédéral dans le but d’être le siège du gouvernement des États-Unis. Il manque plusieurs des droits des États, tels que la pleine représentation au Congrès. 121 | - type: true-false 122 | id: item-3 123 | stem: 124 | locales: 125 | en: Direct democracy is a form of government where a single leader has ultimate ruling authority. 126 | fr: La démocratie directe est une forme de gouvernement où un seul chef a l'autorité suprême. 127 | answer: false 128 | true_rationale: 129 | locales: 130 | en: Sorry! A single leader having ultimate authority describes an autocracy. 131 | fr: Désolé! Un seul chef ayant l'autorité ultime décrit une autocratie. 132 | false_rationale: 133 | locales: 134 | en: Right! That form of government would be closer to an autocracy, not democracy. 135 | fr: C'est ça! Cette forme de gouvernement serait plus proche d'une autocratie, pas d'une démocratie. 136 | - type: match 137 | id: item-4 138 | lead_in: 139 | locales: 140 | en: Match the following cities to their states. 141 | fr: Faites correspondre les villes suivantes à leurs États. 142 | stems: 143 | - title: 144 | locales: 145 | en: San Francisco 146 | fr: San Francisco 147 | answer: item-4-option-0 148 | - title: 149 | locales: 150 | en: Nashville 151 | fr: Nashville 152 | answer: item-4-option-1 153 | options: 154 | - id: item-4-option-0 155 | title: 156 | locales: 157 | en: Tennessee 158 | fr: Tennessee 159 | - id: item-4-option-1 160 | title: 161 | locales: 162 | en: California 163 | fr: Californie 164 | -------------------------------------------------------------------------------- /api/lab-bundle-spec-v1.md: -------------------------------------------------------------------------------- 1 | # Qwiklabs Lab Bundle Specification 2 | 3 | > **Version 1** 4 | > 5 | > This is a DRAFT document. We welcome feedback as this format evolves. 6 | 7 | Previously (in b6086b8f824aa398c1f4413b92351a4956e744cd), the robust example had 8 | some cool ideas for how deployment manager and activity tracking should look in 9 | the future. None of it is implemented yet but the ideas may be useful in the 10 | future. 11 | 12 | ## `qwiklabs.yaml` Structure 13 | 14 | Here's a sample `qwiklabs.yaml` file, with all nested details removed to make it 15 | easier to see the general file structure. 16 | 17 | ```yaml 18 | entity_type: Lab 19 | schema_version: 1 20 | default_locale: en 21 | 22 | title: 23 | locales: 24 | en: Best Lab Ever 25 | 26 | description: 27 | locales: 28 | en: No, seriously. It's the best lab ever. You're going to love it! 29 | 30 | duration: 60 31 | level: intro 32 | tags: [sample, life-changing, gcp] 33 | legacy_display_options: [ 34 | hide_connection_fleetconsole, 35 | show_connection_ssh, 36 | show_connection_vnc, 37 | show_connection_rdp, 38 | show_connection_custom, 39 | show_connection_access_key_id, 40 | allow_immediate_entry 41 | ] 42 | 43 | ... 44 | 45 | 46 | # The primary instruction content for this lab 47 | instruction: ... 48 | 49 | # Other resources the learner may access while taking this lab 50 | resources: ... 51 | 52 | # Lab resources that are provisioned by Qwiklabs 53 | # e.g. cloud account, databases, etc. 54 | environment_resources: ... 55 | 56 | # Checkpoint evaluation and quiz data 57 | assessment: ... 58 | ``` 59 | 60 | Two properties are critical for specifying your lab bundle: 61 | 62 | - `entity_type` 63 | 64 | This should be set to `Lab` for lab bundles. For other entity types such as 65 | `CourseTemplate` or `Quiz` please see their own bundle spec. 66 | 67 | - `schema_version` 68 | 69 | This notes which version of this spec the bundle is using. Currently, the 70 | only valid value is `1` but this will change as new features get added. 71 | 72 | ### Default Locale 73 | 74 | The lab bundle MUST specify a `default_locale`. It corresponds to the locale 75 | that the lab is originally authored in. Authoring tools can use this as a hint 76 | to notify localizers when content in the default locale is updated. Also, it 77 | provides a hint to the learner interface about which locale to display if an 78 | instruction/resource is not localized for the learner's current locale. 79 | 80 | ### Lab attributes 81 | 82 | attribute | required | type | notes 83 | ---------------------- | -------- | ----------- | ----------------------------------------- 84 | title | ✓ | locale dictionary | 85 | description | ✓ | locale dictionary | 86 | duration | ✓ | integer | Amount of time it should take an average learner to complete the lab (in minutes) 87 | max_duration | | integer | Maximum amount of time learner will be given to complete the lab (in minutes) 88 | credits | | integer | 89 | level | | string | 90 | logo | | file path | 91 | tags | | array | 92 | legacy_display_options | | array | Elements to hide/show in ql-lab-control-panel widget 93 | copyright | | string/enum | v2 feature after more research? 94 | 95 | ### Instructions 96 | 97 | attribute | required | type | notes 98 | --------- | -------- | ---------- | ----------------------------------------- 99 | type | ✓ | enum | [See list of valid types below] 100 | locales | ✓ | dictionary | Keys are locale codes, the values are paths to files in the bundle. 101 | 102 | ```yaml 103 | instruction: 104 | type: html 105 | locales: 106 | en: instructions/en.html 107 | es: instructions/es.html 108 | ``` 109 | 110 | #### Valid instruction types 111 | 112 | * `html` 113 | * `pdf` 114 | 115 | HTML is the preferred format for stored instructions. PDFs will be displayed 116 | embedded in the learner interface, but will lack any navigation or interactive 117 | functionality. 118 | 119 | ##### Qwiklabs supported HTML 120 | 121 | There are benefits to formatting lab instructions as HTML. 122 | 123 | * Instruction styling will be updated automatically as the Qwiklabs interface 124 | evolves. 125 | * Qwiklabs will help users navigate within your instruction document with a 126 | table of contents or direct links. It will also remember the learner's 127 | location in the document if they leave the page. 128 | * Authors can specify interactive elements that will be displayed inline with 129 | your instructions in the learner's interface (quizzes, checkpoints, etc). 130 | 131 | However, we will not accept arbitrary HTML. Your input will be heavily scrubbed. 132 | 133 | * Only a standard subset of HTML elements will be supported (``,
134 | ``, etc). All other tags will be stripped out of displayed content.
135 | * All styling will be removed.
136 | * All scripting will be removed.
137 |
138 | See the Instruction part of the [HTML spec](../html/html-spec.md) for details.
139 |
140 | ### Resources
141 |
142 | Resources are additional materials that learners may refer to while taking this
143 | lab.
144 |
145 | See [Resource Spec](../resource-spec.md) for details.
146 |
147 | ### Environment Resources
148 |
149 | The sandbox learning environment is a key feature of Qwiklabs. As the author of
150 | a lab, you need to tell us which cloud accounts to provision for a learner, and
151 | what resources we should create in that account before handing it over to the
152 | learner.
153 |
154 | The properties of each environment resource will depend on their type, i.e. AWS
155 | Accounts and GSuite Users require different configuration data. However, there
156 | are two properties that all resources have regardless of type:
157 |
158 | attribute | required | type | notes
159 | --------- | -------- | ------ | -----------------------------------------
160 | type | ✓ | enum | [See list of valid types]
161 | id | | string | Identifier that can be used throughout project bundle
162 |
163 | ```yaml
164 | environment_resources:
165 | - type: gcp_project
166 | id: my_primary_project
167 | dm_template:
168 | script: deployment_manager
169 | - type: gcp_user
170 | id: primary_user
171 | permissions:
172 | - project: my_primary_project
173 | roles:
174 | - roles/editor
175 | - roles/bigquery.admin
176 | - type: gcp_user
177 | id: secondary_user
178 | ```
179 |
180 | #### Valid types
181 |
182 | ##### GCP Project (gcp_project)
183 |
184 | attribute | required | type | notes
185 | ----------------------------- | -------- | ------- | --------------------------------------
186 | dm_template.script | | path | Relative path to a Deployment Manager directory tree.
187 | dm_template.custom_properties | | array | Array of key/value pairs.
188 | fleet | | enum* | Specify a Qwiklabs fleet to pull the project from.
189 |
190 | ```yaml
191 | - type: gcp_project
192 | id: secondary_project
193 | fleet: gcpfree
194 | dm_template:
195 | script: deployment_manager
196 | custom_properties:
197 | - key: userNameWindows
198 | value: student
199 | ```
200 |
201 | > **NOTE:** Not all GCP fleet names are supported.
202 | >
203 | > The existing concept of Qwiklabs' Fleets does not have a single analog in
204 | > content bundles. Notice that some fleet types map to resource types (e.g.
205 | > `gsuite_multi_tenant` fleet is now the `gsuite-domain` resource type). However
206 | > other fleets are "variants" of the same resource type (e.g. "free", "ASL", and
207 | > "standard" GCP projects). Therefore, not all fleet names that an experienced
208 | > Qwiklabs author may be familiar with, are allowed in the `fleet` field.
209 | >
210 | > Presently, authors are allowed to specify one of the following fleet types for
211 | > a gcp_project:
212 | >
213 | > * gcpd \[default\]
214 | > * gcpfree
215 | > * gcpasl
216 | >
217 | > Future versions of the Content Bundle spec may use different terminology for
218 | > resource_type variations to avoid conflation.
219 |
220 | ##### GCP User (gcp_user)
221 |
222 | attribute | required | type | notes
223 | ----------- | -------- | ---------- | ----------------------------------------
224 | permissions | | array | Array of project/roles(array) pairs
225 |
226 | ```yaml
227 | - type: gcp_user
228 | id: primary_user
229 | permissions:
230 | - project: my_primary_project
231 | roles:
232 | - roles/editor
233 | - roles/bigquery.admin
234 | ```
235 |
236 | ##### GSuite Domain (gsuite_domain)
237 |
238 | attribute | required | type | notes
239 | ----------- | -------- | ---------- | ----------------------------------------
240 | No additional attributes
241 |
242 | ```yaml
243 | - type: gsuite_domain
244 | id: primary_domain
245 | ```
246 |
247 | ##### Future Resource Types
248 |
249 | - AWS Account (aws-account)
250 | - iPython Notebook (ipython-notebook)
251 |
252 | > **NOTE:** A draft of the `aws-account` resource type was previously specified
253 | > in this document. See [previous version](https://github.com/CloudVLab/qwiklabs-content-bundle-spec/blob/93896ced4ae5b543132d7a10d838ac17bd5ae3e1/lab-bundle-spec.md) for details.
254 |
255 | ### Activity Tracking (Alpha)
256 |
257 | Activity tracking is a feature for evaluating a students performance in a lab by running a script at "checkpoints". These scripts can call APIs relevant to any environment resource to query their current state. For example, the script may inspect and validate the configuration of GCE instances running in `my-project`, to ensure the user is following the instructions properly.
258 |
259 | Lab bundles will provisionally support the JSON representation of Activity Tracking currently used in the Qwiklabs web interface. The JSON definition should be stored in file separately from (and referenced directly in) `qwiklabs.yaml`.
260 |
261 | ```yaml
262 | entity_type: Lab
263 |
264 | ...
265 |
266 | activity_tracking: ./assessment/activity_tracking.json
267 | ```
268 |
269 | > **Note:** Support for this format should be considered deprecated.
270 | >
271 | > Further work will be done to define a new DSL for expressing Activity Tracking logic. Exploratory sketches of this DSL can be found in the `./examples` directory of this repository.
272 |
--------------------------------------------------------------------------------
/classroom-template-bundle-spec.md:
--------------------------------------------------------------------------------
1 | # Qwiklabs ClassroomTemplate Bundle Specification
2 |
3 | **Version 1**
4 |
5 | > **Note: For Interim Use Only**
6 | >
7 | > This specification is for existing Qwiklabs platform users that are currently
8 | > using the `ClassroomTemplate` model. It should be used to help transition from
9 | > `ClassroomTemplates` to [`CourseTemplates`](./course-template-bundle-spec.md).
10 | > If you are not currently using `ClassroomTemplates`, please use
11 | > `CourseTemplates` instead.
12 |
13 | ## `qwiklabs.yaml` Structure
14 |
15 | Here's a sample `qwiklabs.yaml` file with all nested details removed to make it
16 | easier to see the general file structure.
17 |
18 | ```yaml
19 | entity_type: ClassroomTemplate
20 | schema_version: 1
21 |
22 | # ClassroomTemplate Attributes
23 | default_locale: en
24 |
25 | # Versions should be considered decorators, and are not used as a source of truth for revision history.
26 | version:
27 | locales:
28 | en: ver. 2
29 |
30 | # one of ["Self-paced", "Bootcamp/Workshop", "Instructor-led"]
31 | classroom_type: Instructor-led
32 |
33 | course_code: T-AHYXXX-I
34 |
35 | title:
36 | locales:
37 | en: Architecting with Google Cloud Platform.
38 |
39 | description:
40 | locales:
41 | en: Learn GCP basics in a classroom setting.
42 |
43 | objectives:
44 | locales:
45 | en: |
46 | This course will teach people This course is intended for people who A basic understanding of serverless architecture is recommended but not required. This course will teach people This course is intended for people who A basic understanding of serverless architecture is recommended but not required. Este curso enseñará a las personas Este curso está destinado a personas que Se recomienda una comprensión básica de la arquitectura sin servidor, pero no es obligatorio. This course will teach people This course is intended for people who A basic understanding of serverless architecture is recommended but not required. We’ve given you a GCP resource. Go ahead and play around with it. … … Huzzah! You’re ready to take on the world! Le hemos proporcionado un recurso GCP. Adelante y juega con eso. … ¡Huzzah! ¡Estás listo para enfrentarte al mundo! Use this template for your storyboard. … … Huzzah! You’re ready to take on the world! Utilice esta plantilla para su guión gráfico . … … ¡Huzzah! ¡Estás listo para enfrentarte al mundo! `,
117 | ``, etc). All other tags will be stripped out of displayed content.
118 | * All styling will be removed.
119 | * All scripting will be removed.
120 |
121 | See the Instruction part of the [HTML spec](./html/html-spec.md) for details.
122 |
123 | ### Prompt
124 |
125 | A prompt defines what a learner needs to do to complete the activity, and has rubric criteria to help the other learners evaluate. The full specification is as follows:
126 |
127 | attribute | required | type | notes
128 | -------------- | -------- | ----------------- | -----
129 | id | ✓ | string | A unique identifier for this module
130 | stem | ✓ | string | Prompt text
131 | response_types | ✓ | enum | One of: "url", "file_upload", "rich_text"
132 | rubric_items | ✓ | array | Array of rubric items. See [below](#rubric_item)
133 |
134 | Note: We do not allow more than 2 prompts in one peer assignment.
135 |
136 | ### Rubric Item
137 |
138 | Rubric items are used for peers to evaluate other learner submission. Rubric items are polymorphic - i.e. there are several different types that are defined slightly differently. `rubric_items` is an array of dictionaries with appropriate attributes for the given type. The allowed values for `type` are:
139 |
140 | * `multiple-choice`
141 | * `true-false`
142 | * `reflective-text`
143 |
144 | #### multiple-choice Rubric Item
145 |
146 | A rubric item that has multiple options, each associated with points.
147 |
148 | attribute | required | type | notes
149 | --------- | -------- | ----------------- | -----
150 | id | ✓ | string | A unique identifier for this item
151 | type | ✓ | enum | The item type, which is always `multiple-choice`
152 | stem | ✓ | string | e.g. _"The email includes the subject line, greeting, body, and closing."_
153 | options | ✓ | array | Array of `options`. See [below](#option)
154 |
155 | #### true-false Rubric Item
156 |
157 | A rubric item that has two predefined options (true and false), each associated with points.
158 |
159 | attribute | required | type | notes
160 | ------------ | -------- | ----------------- | -----
161 | id | ✓ | string | A unique identifier for this item.
162 | type | ✓ | enum | The item type, which is always `true-false`
163 | stem | ✓ | string | e.g. _"All parts of the big picture storyboard template are filled out."_
164 | true_points | ✓ | integer | Usually 1
165 | false_points | ✓ | integer | Usually 0
166 |
167 | #### reflective-text Rubric Item
168 |
169 | A rubric item that has an reflective text question, associated with no points.
170 |
171 | attribute | required | type | notes
172 | ------------ | -------- | ----------------- | -----
173 | id | ✓ | string | A unique identifier for this item.
174 | type | ✓ | enum | The item type, which is always `reflective-text`
175 | stem | ✓ | string | e.g. _"Provide constructive feedback for your classmates on their submission."_
176 |
177 | ### Option
178 |
179 | `multiple-choice` contains an array of all the `options` that the user may choose from. The full specification is as follows:
180 |
181 | attribute | required | type | notes
182 | ------------ | -------- | ----------------- | -----
183 | id | ✓ | string | A unique identifier for this option.
184 | title | ✓ | string | e.g. _"The email includes 2-3 of these elements."_
185 | points | ✓ | integer |
186 |
187 | ### Exemplar
188 |
189 | An exemplar is a sample answer for the prompts in this assignment:
190 |
191 | attribute | required | type | notes
192 | -------------- | -------- | ----------------- | -----
193 | id | ✓ | string | A unique identifier for this examplar
194 | prompt_responses| ✓ | array | Array of prompt response. See [below](#prompt_response)
195 |
196 |
197 | ### Prompt Response
198 |
199 | A prompt response is a sample answer for the prompt. The number of prompt
200 | responses is the same as the number of prompts.
201 |
202 | attribute | required | type | notes
203 | -------------- | -------- | ----------------- | -----
204 | id | ✓ | string | A unique identifier for this prompt response.
205 | prompt_id | ✓ | string | Corresponding prompt id.
206 | response_type | ✓ | enum | One of: "url", "rich_text"
207 | response_content | ✓ | string | url link or free text content
208 |
--------------------------------------------------------------------------------
/preassessment-bundle-spec.md:
--------------------------------------------------------------------------------
1 | # Preassessment Bundle Specification
2 |
3 | This bundle specification is used to define pre-assessment labs and the
4 | activities they test out of. A sample pre-assessment is provided below:
5 |
6 | ```
7 | preassessment:
8 | id: gcp-spl-content/gsp610-fundamentals-of-cloud-logging
9 | equivalencies:
10 | - preassessment_step: 1
11 | tested_out_type: lab
12 | tested_out_id: advanced-gcp-task
13 |
14 | - preassessment_step: 2
15 | tested_out_type: video
16 | tested_out_id: storage-options
17 | ```
18 |
19 | Pre-assessments are defined by a `preassessment` field, and contain the
20 | following required attributes:
21 |
22 | | attribute | type | notes |
23 | | ------------- | ------ | --------------------------------------------------- |
24 | | id | string | Reference to the unique identifier for the lab used as a pre-assessment - `library/slug` or `slug`. |
25 | | equivalencies | array | See [below](#equivalencies) |
26 |
27 | ## Equivalencies
28 |
29 | The `equivalencies` field is an array that defines the content the
30 | pre-assessment tests out of in terms of its assessment steps. Each entry in the
31 | array contains the following required attributes:
32 |
33 | | attribute | type | notes |
34 | | ------------------ | ------- | --------------------------------------------- |
35 | | preassessment_step | integer | The step number of one of the pre-assessment lab's activity tracking steps, starting from 1. |
36 | | tested_out_id | string | Reference to the unique identifier for the tested out activity - `library/slug` or `slug`. |
37 | | tested_out_type | string | The type of the tested out activity - `lab`, `quiz`, `video`, or `document`(refers to both `link` and `file` activities). |
38 |
39 | Pre-assessment bundle specifications also must adhere to the following rules:
40 |
41 | * The pre-assessment cannot test out itself.
42 | * `preassessment.equivalencies.tested_out_id` must refer to one of the
43 | activities in the underlying quest/course.
44 | * Duplicate equivalencies are not allowed. For example, the following would be
45 | invalid:
46 |
47 | ```
48 | - preassessment_step: 1
49 | tested_out_type: lab
50 | tested_out_id: slug1
51 | - preassessment_step: 1
52 | tested_out_type: lab
53 | tested_out_id: slug1
54 | ```
55 |
--------------------------------------------------------------------------------
/quiz-bundle-spec.md:
--------------------------------------------------------------------------------
1 | # Qwiklabs Quiz Bundle Specification
2 |
3 | **Version 1**
4 |
5 | > This is a DRAFT document. We welcome feedback as this format evolves.
6 |
7 | ## `qwiklabs.yaml` Structure
8 |
9 | Here's a sample `qwiklabs.yaml` file with all nested details removed to make it
10 | easier to see the general file structure.
11 |
12 | ```yaml
13 | entity_type: Quiz
14 | schema_version: 1
15 |
16 | passing_percentage: 67
17 | default_locale: en
18 |
19 | items: ...
20 | ```
21 |
22 | Note that all of the localized content (stem, option titles, rationales, etc)
23 | are HTML content that may be displayed in various contexts. All of these chunks
24 | will be sanitized according to the restricted set in the
25 | [HTML spec](./html/html-spec.md).
26 |
27 | ### Quiz attributes
28 |
29 | attribute | required | type | notes
30 | ------------------ | -------- | ---------- | -----
31 | default_locale | ✓ | string | Corresponds to the locale that the quiz is authored in. Authoring tools can use this as a hint to notify localizers when content in the default locale is updated. Also, it provides a hint to the learner interface about which locale to display if an instruction/resource is not localized for the learner's current locale.
32 | schema_version | ✓ | integer | Which version of the quiz bundle schema you are using
33 | title | ✓ | dictionary | A locale dictionary of the quiz title, such as "My Awesome Quiz"
34 | passing_percentage | ✓ | integer | The threshold grade that a student needs to achieve in order to count as "passing" the quiz.
35 | fixed_place | | boolean | `true` if the items should be presented in a fixed order rather than shuffled (this is treated as `false` if it's missing).
36 | duration | | integer | The default time a student is allotted for the quiz, in minutes. If unspecified, the quiz will not be timed.
37 | sections | | array | An ordered array of `sections` (see [below for details](#sections)) in this quiz; not allowed if `items` are specified; required if `items` are unspecified.
38 | items | | array | An ordered array of `items` (see [below for details](#items)) in a default section of this quiz; not allowed if `sections` are specified; required if `sections` are unspecified.
39 |
40 | ### Sections
41 |
42 | Sections are groupings of related quiz items. Can be used as item banks grouping
43 | "equivalent" items.
44 |
45 | ```yaml
46 | id: section-0
47 | name: Networking
48 | item_count: 2
49 | items: ...
50 | ```
51 |
52 | attribute | required | type | notes
53 | ---------- | -------- | ------- | -----
54 | id | ✓ | string | A unique identifier for this section
55 | name | | string | A name for this section
56 | item_count | | integer | The number of items to select from this section when composing the quiz displayed to the student. Can be used to indicate the number of items to choose from an item bank. If unspecified, defaults to the total number of `items` specified below.
57 | items | ✓ | array | An ordered array of `items` (see below for details) in this section
58 |
59 | ### Items
60 |
61 | Items are polymorphic - i.e. there are several different _item types_ that are
62 | defined slightly differently. `items` is an array of dictionaries with
63 | appropriate attributes for the given `type`. The allowed values for `type` are:
64 |
65 | * `multiple-choice`
66 | * `multiple-select`
67 | * `true-false`
68 | * `reflective-text`
69 | * `match`
70 |
71 | #### multiple-choice Items
72 |
73 | A quiz item that has multiple options and one answer. One option is the
74 | _answer_, and the rest are _distractors_. There must be exactly one answer.
75 |
76 | attribute | required | type | notes
77 | --------- | -------- | ---------- | -----
78 | id | ✓ | string | A unique identifier for this item
79 | type | ✓ | string | The item type, which is always `multiple-choice`
80 | stem | ✓ | dictionary | A locale dictionary of the text that asks the question, such as "Which of the following is a color?"
81 | options | ✓ | array | An array of `options` (see below for details); order does not matter
82 |
83 | #### multiple-select Items
84 |
85 | A quiz item that has multiple options, any number of which are answers. Correct
86 | options are _answers_, and incorrect options are _distractors_.
87 |
88 | attribute | required | type | notes
89 | --------- | -------- | ---------- | -----
90 | id | ✓ | string | A unique identifier for this item
91 | type | ✓ | string | The item type, which is always `multiple-select`
92 | stem | ✓ | dictionary | A locale dictionary for the text that asks the question, such as "Which of the following is a color?"
93 | options | ✓ | array | An array of `options` (see below for details); order does not matter
94 |
95 | #### true-false Items
96 |
97 | A quiz item that has two predefined options: true and false. The correct option
98 | (e.g. "True") is the answer and the other is the distractor.
99 |
100 | attribute | required | type | notes
101 | --------------- | -------- | ---------- | -----
102 | id | ✓ | string | A unique identifier for this item
103 | type | ✓ | string | The item type, which is always `true-false`
104 | stem | ✓ | dictionary | A locale dictionary of text that asks the question, such as "True or false: the world is round."
105 | answer | ✓ | boolean | The correct answer. `true` for "True", `false` for "False"
106 | true_rationale | ✓ | dictionary | A locale dictionary for the text that explains why "True" is correct or incorrect
107 | false_rationale | ✓ | dictionary | A locale dictionary for the text that explains why "False" is correct or incorrect
108 |
109 | #### reflective-text
110 |
111 | A quiz item that has a free-text question. No matter what a learner answers, it
112 | will always be correct as long as the answer has more than five words.
113 |
114 | attribute | required | type | notes
115 | --------- | -------- | ---------- | -----
116 | id | ✓ | string | A unique identifier for this item
117 | type | ✓ | string | The item type, which is always `reflective-text`
118 | stem | ✓ | dictionary | A locale dictionary for the text that asks the question, such as "What skills do you already have that can help you on your journey to becoming a UX designer?"
119 | feedback | ✓ | dictionary | A locale dictionary for the text that responses to the learner's written text, such as "Thank you for reflecting on the skills you bring to this certificate program."
120 |
121 | #### match Items
122 |
123 | A quiz item that has multiple stems with a "lead in" prompt. The correct option
124 | for each matching stem is directly specified as the answer. A match item will be
125 | scored based on correctly matching *all* the stems.
126 |
127 | attribute | required | type | notes
128 | --------- | -------- | ---------- | -----
129 | id | ✓ | string | A unique identifier for this item
130 | type | ✓ | string | The item type, which is always `match`
131 | lead_in | ✓ | dictionary | A locale dictionary of text that provides a lead-in, such as "Can You Match the Capital City to the Correct US State?"
132 | stems | ✓ | array | An array of `matching stems` (see below for details); order does not matter
133 | options | ✓ | array | An array of `options` (see below for details); order does not matter
134 |
135 | ### matching Stems
136 |
137 | Match items need an additional `stems` array which contains the question(s) for
138 | which the user must provide the matching answer.
139 |
140 | attribute | required | type | notes
141 | --------- | -------- | ---------- | -----
142 | id | ✓ | string | A unique ID for this matching Stem
143 | title | ✓ | dictionary | A locale dictionary for the content of this stem, such as "Springfield"
144 | answer | ✓ | string | ID for option that is the answer for this stem
145 |
146 | ### Option
147 |
148 | `multiple-choice`, `multiple-select` and `match` items all have an `options`
149 | array which contains all of the answer(s) and distractors that the user may
150 | choose from. Options are defined for these item types below:
151 |
152 | attribute | required | type | notes
153 | --------- | -------- | ---------- | -----
154 | id | ✓ | string | A unique ID for this Option
155 | title | ✓ | dictionary | A locale dictionary for the content of this option, such as "Blue"
156 | rationale | ✓ | dictionary | A locale dictionary for an explanation of why this option is correct or incorrect (optional for `match` type)
157 | is_answer | ✓ | boolean | `true` if this option is an answer, and `false` if it is a distractor (unused for `match` type)
158 | fixedPlace | | boolean | `true` if this option should be fixed in place when shuffling the answer (this is treated as `false` if it's missing)
159 |
--------------------------------------------------------------------------------
/resource-spec.md:
--------------------------------------------------------------------------------
1 | # Qwiklabs Resource Specification
2 |
3 | Resources are additional materials that learners may refer to while taking a lab
4 | or course. They show up in the student resources section of the lab's control
5 | panel ([example](https://screenshot.googleplex.com/5zaM3fpob85Yorw))
6 |
7 | We encourage content authors to use as few external links as possible. Qwiklabs
8 | cannot guarantee that those links will be available when a learner takes your
9 | lab or course. For instance, if you have a PDF that you wish to include, you
10 | should add it as a file in this bundle instead of referencing it as a link to
11 | Cloud Storage or S3.
12 |
13 | For files larger than 50MB, please use an externally referenced resource. Your
14 | entire content bundle should be less than 100MB.
15 |
16 | > **Note**: If you are linking to an external resource that has its own
17 | > understanding of source control, please link to the specific revision of that
18 | > resource. That way, if the external resource is updated, your learners will
19 | > not be affected. For example, if you are referencing a Github repo, include
20 | > the link to a specific tag, instead of the default branch.
21 | >
22 | > Brittle:
48 |
51 |
52 | audience:
53 | locales:
54 | en: |
55 |
57 |
58 | prerequisites:
59 | locales:
60 | en:
40 |
43 |
44 | audience:
45 | locales:
46 | en: |
47 |
49 |
50 | prerequisites:
51 | locales:
52 | en:
14 |
17 |
18 | audience: |
19 |
21 |
22 | prerequisites:
18 |
21 |
22 | audience: |
23 |
25 |
26 | prerequisites: Robust Lab Example
2 |
3 | Step 1: Take lab
4 | Step 2: …
7 | Step 3: Profit
11 | Ejemplo de Robust Lab
2 | Paso 1: tomar laboratorio
3 | Paso 2: …
5 | Paso 3: Ganancia
7 | Robust Peer Assignment Example
2 |
3 | Step 1: Access the template
4 | Step 2: Build a big picture storyboard
7 | Step 3: Build a close-up storyboard
11 |
14 |
15 | Template Link
16 |
--------------------------------------------------------------------------------
/examples/peer-assignment-robust/instructions/es.html:
--------------------------------------------------------------------------------
1 |
Ejemplo de Robust Peer Assignment
2 |
3 | Paso 1: Accede a la plantilla
4 | Step 2: Cree un guión gráfico de imagen grande
7 | Step 3: Cree un guión gráfico de primer plano
11 |
(the part of the URL after `?v=`)
385 | width | integer | false | Display width of the video, in pixels.
386 | height | integer | false | Display height of the video, in pixels.
387 | loop | boolean | false | Whether to loop this video automatically.
388 | autoplay | boolean | false | Whether to play this video immediately on page load.
389 | controls | boolean | false | Whether to show video playback and volume controls.
Only applicable to videos using `src`.
390 | lang | string | false | Subtitle preference for YouTube videos (2-letter language code)
391 |
392 | \* One of `src` or `youtubeId` must be present, but not both.
393 |
394 | ##### Direct Source Videos
395 |
396 | Source:
397 |
398 | ```html
399 | ` is the title of the document and will not be included in TOC.
426 | * `
`s will be navigable links in the TOC.
427 | * By not styling yourself, your instructions will not become outdated as the
428 | Qwiklabs learning interface changes.
429 |
--------------------------------------------------------------------------------
/html/images/ql-code-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/html/images/ql-code-01.png
--------------------------------------------------------------------------------
/html/images/ql-code-02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/html/images/ql-code-02.png
--------------------------------------------------------------------------------
/html/images/ql-code-block-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/html/images/ql-code-block-01.png
--------------------------------------------------------------------------------
/html/images/ql-code-block-02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/html/images/ql-code-block-02.png
--------------------------------------------------------------------------------
/html/images/ql-code-block-03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/html/images/ql-code-block-03.png
--------------------------------------------------------------------------------
/html/images/ql-variable-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/html/images/ql-variable-01.png
--------------------------------------------------------------------------------
/html/images/ql-variable-02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/html/images/ql-variable-02.png
--------------------------------------------------------------------------------
/html/images/ql-variable-03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/html/images/ql-variable-03.png
--------------------------------------------------------------------------------
/lab_control_panel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CloudVLab/qwiklabs-content-bundle-spec/ef06cb2e624d008c72f9138605fd214009a23e35/lab_control_panel.png
--------------------------------------------------------------------------------
/learning-path-bundle-spec.md:
--------------------------------------------------------------------------------
1 | # Qwiklabs LearningPath Bundle Specification
2 |
3 | **Version 1**
4 |
5 | > This is a DRAFT document. We welcome feedback as this format evolves.
6 |
7 | ## `qwiklabs.yaml` Structure
8 |
9 | The `LearningPath` bundle specification exactly matches the
10 | [CourseTemplate bundle spec](./course-template-bundle-spec.md), with the
11 | following exceptions:
12 |
13 | * `entity_type` should be set to `LearningPath`.
14 | * `LearningPath` does not have a `max_hot_labs` field.
15 | * `LearningPath` can have a `resources` section.
16 | * `LearningPath` does not have an `instructor_resources` section.
17 | * `LearningPath` must have exactly 1 module.
18 | * `LearningPath` can contain a pre-assessment lab that allows learners to test
19 | out of the `LearningPath`'s learning activities depending on their
20 | performance in the pre-assessment. The pre-assessment is defined by a
21 | `preassessment` section and its bundle specification can be found
22 | [here](./preassessment-bundle-spec.md).
23 |
--------------------------------------------------------------------------------
/peer-assignment-bundle-spec.md:
--------------------------------------------------------------------------------
1 | # Qwiklabs Peer Assignment Bundle Specification
2 |
3 | > **Version 1**
4 |
5 | ## `qwiklabs.yaml` Structure
6 |
7 | Here's a sample `qwiklabs.yaml` file, with all nested details removed to make it
8 | easier to see the general file structure.
9 |
10 | ```yaml
11 | entity_type: PeerAssignment
12 | schema_version: 1
13 | default_locale: en
14 |
15 | title: Create storyboards for your portfolio project
16 |
17 | review_criteria: "There are a total of 6 points for this activity. At least two of your peers will evaluate your project. Your final grade will be the median of these scores. You must get 5 out of 6 total points to pass."
18 |
19 | duration: 120
20 |
21 | # The primary instruction content for this peer assignment
22 | instruction: ...
23 |
24 | prompts: ...
25 |
26 | exemplars: ...
27 | ```
28 |
29 | Note that all of the main chunks of localized content (title, review_criteria,
30 | text, stem and title) are HTML content that may be displayed in various
31 | contexts. All of these chunks will be sanitized according to the restricted set
32 | in the HTML spec.
33 |
34 | ### Default Locale
35 |
36 | The peer assignment bundle MUST specify a `default_locale`. It corresponds to
37 | the locale that the peer assignment is originally authored in. Authoring tools
38 | can use this as a hint to notify localizers when content in the default locale
39 | is updated. Also, it provides a hint to the learner interface about which locale
40 | to display if an instruction/resource is not localized for the learner's current
41 | locale.
42 |
43 |
44 | Add an additional locale specific file of the form "qwiklabs.xx.yaml" for each
45 | locale to be included. For example, Japanese entries would be in a file named
46 | "qwiklabs.ja.yaml". Within a single piece of content, be sure to use consistent
47 | `ids` across all the "qwiklabs.xx.yaml" files for data that contains lists of
48 | objects.
49 |
50 |
51 | ### Attribute specification
52 |
53 | attribute | required | type | notes
54 | ---------------------- | -------- | ----------------- | -----
55 | entity_type | ✓ | string | Must be `PeerAssignment`
56 | schema_version | ✓ | integer |
57 | default_locale | ✓ | string | Must be a valid locale code
58 | instruction | ✓ | locale dictionary |
59 | title | ✓ | string |
60 | review_criteria | ✓ | string |
61 | objectives | | string | Objectives of the assignment
62 | duration | ✓ | integer | Estimated amount of time it should take an average learner to complete the assignment (in minutes)
63 | passing_score | | integer | If none, default is 0
64 | prompts | ✓ | array | See [below](#prompt)
65 | exemplars | | array | See [below](#exemplar)
66 |
67 | ### Instructions
68 |
69 | Place your instruction files under "instructions" folder. Name of the file MUST
70 | be same as the locale key.
71 |
72 | Your folder structure may look like:
73 | ```
74 | my-peer-assignment/instructions/en.md
75 | my-peer-assignment/instructions/es.html
76 | ```
77 | You can only have one file per locale.
78 |
79 | attribute | required | type | notes
80 | --------- | -------- | ----------------- | -----
81 | type | ✓ | enum | [See list of valid types below]
82 | uri | ✓ | string | Relative path to a file
83 |
84 | ```yaml
85 | instruction:
86 | type: html
87 | uri: instructions/en.html
88 | ```
89 |
90 | #### Valid types
91 |
92 |
93 | * `html`
94 | * `pdf`
95 | * `md`
96 |
97 |
98 |
99 | Markdown (MD) or HTML are the preferred formats for stored instructions. PDFs
100 | will be displayed embedded in the learner interface, but will lack any
101 | navigation or interactive functionality.
102 | ##### Qwiklabs supported markup
103 |
104 | There are benefits to formatting lab instructions as HTML.
105 |
106 | * Instruction styling will be updated automatically as the Qwiklabs interface
107 | evolves.
108 | * Qwiklabs will help users navigate within your instruction document with a
109 | table of contents or direct links. It will also remember the learner's
110 | location in the document if they leave the page.
111 | * Authors can specify interactive elements that will be displayed inline with
112 | your instructions in the learner's interface (quizzes, checkpoints, etc).
113 |
114 | However, we will not accept arbitrary HTML. Your input will be heavily scrubbed.
115 |
116 | * Only a standard subset of HTML elements will be supported (`
`, `