google / comprehensive-rust

This is the Rust course used by the Android team at Google. It provides you the material to quickly teach Rust.
https://google.github.io/comprehensive-rust/
Apache License 2.0
27.53k stars 1.64k forks source link

Add speaker notes to every page #1083

Open mgeisler opened 1 year ago

mgeisler commented 1 year ago

We currently have speaker notes on 165 out of 265 pages.

Notes are very helpful for both instructors and people who read the course on their own, so we want to be as complete as possible here.

michael-kerscher commented 2 months ago

Is there already an easy way to distinguish pages without speaker details from ones that already have them? The only way to find them currently is to actively click through "random" pages and try to see if speaker notes are available.

If there is no good mechanism yet that I just missed, what do you think about some automation and/or dashboard to easily get an overview on missing metadata?

mgeisler commented 2 months ago

Is there already an easy way to distinguish pages without speaker details from ones that already have them? The only way to find them currently is to actively click through "random" pages and try to see if speaker notes are available.

I think grep or rg is the only structured way. A command like this could be a start:

rg -g '*.md' -g '!{SUMMARY,README,exercise,solution*,welcome*}.md' --files-without-match '<details>' src | sort

This gives me this list right now:

src/android/aidl/birthday-service.md
src/android/aidl/example-service/deploy.md
src/android/aidl/example-service/implementation.md
src/android/aidl.md
src/android/aidl/types.md
src/android/aidl/types/parcelables.md
src/android/aidl/types/primitives.md
src/android/build-rules/binary.md
src/android/build-rules/library.md
src/android/interoperability/cpp/android-build-rust.md
src/android/interoperability/cpp/generated-cpp.md
src/android/interoperability/cpp.md
src/android/interoperability/java.md
src/android/interoperability.md
src/android/interoperability/with-c/bindgen/c-library.md
src/android/interoperability/with-c/bindgen.md
src/android/interoperability/with-c/calling-rust.md
src/android/interoperability/with-c/hand-written.md
src/android/interoperability/with-c.md
src/android/logging.md
src/android/testing.md
src/bare-metal/android.md
src/bare-metal.md
src/bare-metal/setup.md
src/bare-metal/useful-crates.md
src/borrowing.md
src/chromium/adding-third-party-crates/checking-in.md
src/chromium/adding-third-party-crates/configuring-cargo-toml.md
src/chromium/adding-third-party-crates/configuring-gnrt-config-toml.md
src/chromium/adding-third-party-crates/depending-on-a-crate.md
src/chromium/adding-third-party-crates/downloading-crates.md
src/chromium/adding-third-party-crates/keeping-up-to-date.md
src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-generate-code.md
src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-take-arbitrary-actions.md
src/chromium/adding-third-party-crates/resolving-problems.md
src/chromium/adding-third-party-crates/reviews-and-audits.md
src/chromium/build-rules/unsafe.md
src/chromium/interoperability-with-cpp/error-handling.md
src/chromium.md
src/chromium/policy.md
src/chromium/setup.md
src/chromium/testing/build-gn.md
src/chromium/testing/rust-gtest-interop.md
src/concurrency/about-the-speaker.md
src/concurrency/async-control-flow.md
src/concurrency/async-exercises/afternoon.md
src/concurrency/async-exercises/chat-app.md
src/concurrency/async-exercises.md
src/concurrency/async.md
src/concurrency/async-pitfalls.md
src/concurrency/channels.md
src/concurrency/send-sync/examples.md
src/concurrency/send-sync.md
src/concurrency/shared-state.md
src/concurrency/sync-exercises/dining-philosophers.md
src/concurrency/sync-exercises/link-checker.md
src/concurrency/sync-exercises.md
src/concurrency/threads.md
src/control-flow-basics/break-continue.md
src/control-flow-basics/loops/loop.md
src/control-flow-basics/loops.md
src/control-flow-basics.md
src/credits.md
src/error-handling.md
src/exercises/bare-metal/compass.md
src/exercises/bare-metal/rtc.md
src/exercises/chromium/testing.md
src/generics.md
src/glossary.md
src/hello-world.md
src/iterators.md
src/lifetimes.md
src/memory-management.md
src/methods-and-traits.md
src/modules.md
src/other-resources.md
src/pattern-matching.md
src/references.md
src/running-the-course/course-structure.md
src/running-the-course/keyboard-shortcuts.md
src/running-the-course.md
src/running-the-course/translations.md
src/smart-pointers.md
src/std-traits/read-and-write.md
src/std-types/std.md
src/testing.md
src/testing/other.md
src/thanks.md
src/tuples-and-arrays.md
src/types-and-values.md
src/unsafe-rust.md
src/user-defined-types.md

If there is no good mechanism yet that I just missed, what do you think about some automation and/or dashboard to easily get an overview on missing metadata?

Sure, that's a nice idea. This could be as simple as running the above command when we publish the course on the main branch. That will show the files somewhere in the CI log files, and we could refer to that output from this issue.