carpentries / workbench

Repository for Discussions and Materials about The Carpentries Workbench
https://carpentries.github.io/workbench/
Creative Commons Attribution 4.0 International
17 stars 7 forks source link

Generate slides from the workbench #78

Open multimeric opened 1 year ago

multimeric commented 1 year ago

From the instructor training and also from discussions with trainers on Slack and elsewhere, it seems to be relatively common to use some amount of slides to accompany a Carpentries workshop. This is controversial because it risks contradicting the following:

One of the cornerstones of The Carpentries teaching is live coding: instructors do not use slides to teach coding, but work through the lesson material, typing in the code or instructions, with the workshop participants following along.

However, there are a few topics on which I can see slides being valuable, and where I think instructors are using slides:

Considering this, and considering that pandoc (which powers RMarkdown) can readily generate slides in a few different formats, I wonder if there is interest in adding a slide export feature which pulls out these key elements.

One way it might work is by pulling out blocks of interest from the lesson using Pandoc filters, such as figures, exercises etc, and converting them to a slide format.

zkamvar commented 1 year ago

The concept of having auto-extraction of slides is not necessarily a new concept in The Carpentries. (see https://github.com/carpentries/styles/issues/113 and https://github.com/swcarpentry/DEPRECATED-lesson-template/pull/13). For what its worth, there is space in the page design for a button to download slides from an episode and we have a mechanism for extracting and manipulating content from the lesson in {pegboard} before it even gets to pandoc. That being said, I will manage expectations and say that this is not a feature that we can confidently implement before 2024 and there is currently no priority to do so based on the challenges below.

Scope

The problem is not that they are discouraged (as @tobyhodges pointed out in an earlier slack thread), but rather the problem is scope: what to include in the slides is one of those sticky situations where there is no one right answer (akin to the "lumper" vs "splitter" arguments of evolutionary biologists). This conflict arises from the fact that there is no 1:1 translation between lesson content and slide content purely because effectively writing slides is approached from a different persepctive as prose (the lessons are indended to be companion reference material for the instructors and learners, and are not necessarily intended to be presented during live instruction).

Capacity

There is the secondary problem of capacity: Our funders have decided that it was no longer possible to retain a position dedicated to development of the lesson infrastructure and the maintainers are focussed on bugfixes only. Right now, the maintainers (@froggleston, @ErinBecker, and @klbarnes20) are focussed on understanding exactly what capacity they will have to implement bugfixes and approve features once I am no longer employed by The Carpentries.

Capability

We have the capability to isolate elements of interest in {pegboard} (though it's not well documented: https://carpentries.github.io/pegboard/dev/reference/isolate_elements.html), which is currently used to generate code handouts that contain code and text from the challenges (without solutions). When we can come up with a salient way of allowing lesson authors to specify what should be included in the slides, but the next challenge is how to format the slides in a way that allows the content to all fit?

multimeric commented 1 year ago

Hi, thanks for this detailed response. I discussed this with a colleague today, and I think we concluded that it would be fine to just have an HTML class that designates slide content. For example, a challenge block that should also generate a corresponding slide might be:

::: {.challenge .slide}

:::

Since it will be a class, this could apply to any content or enclose any content, including figures etc, but authors would be discouraged from putting large blocks of text there. A possible future extension which is not part of the MVP might be to add slide only content which doesn't show up on the main notes. In my view this meaningfully addresses scope. "What to include in the slides"? Whatever the author specifies! (as an aside, this class-based mechanism is standard pandoc stuff, so will be compatible when/if workbench becomes Quarto powered)

In terms of capacity, I totally understand the challenges there, but if we can hash out the details here, either I or some other contributor with time might be able to provide the implementation, if not one of the regular maintainers.

the next challenge is how to format the slides in a way that allows the content to all fit?

I would keep this out of scope for the moment. Let's just assume that it's the author's responsibility to tag only elements that fit on a slide as being .slide. Later on we could consider extensions like a .slide-shrink that shrinks the content down automatically to fit on the slide, or perhaps a mechanism for specifying manual font size.

zkamvar commented 1 year ago

In terms of capacity, I totally understand the challenges there, but if we can hash out the details here, either I or some other contributor with time might be able to provide the implementation, if not one of the regular maintainers.

I will bring this to the maintainer team, but you must be patient. Implementation is really only part of the equation. The vast majority of the work in adding a new feature comes with audience consideration, design, unit testing, integration testing, user testing, reiteration, release, and continued maintenance. All of this is very difficult to hash out over a single issue opened in the middle of Q4.

I have been working on a workbench developer's guide that includes a yet unfinished section on adding new features that may be helpful with guiding questions: https://carpentries.github.io/workbench-dev/features.html

multimeric commented 12 months ago

Thanks, let me know how and when I can help with any of that process.

multimeric commented 9 months ago

Hi @zkamvar, were you able to discuss this with the maintainer team?

zkamvar commented 9 months ago

I am no longer responsible for this product. Please direct your questions to either @ErinBecker or @froggleston.

ErinBecker commented 9 months ago

Hi @multimeric - @froggleston and myself have taken on maintenance of the Workbench as of January. Due to reduced capacity of The Carpentries Core Team, our focus this year is on maintenance and sustainability, which leaves little room for the development of new features. We're currently working through some backlog and have not had an opportunity to discuss this proposal.

multimeric commented 9 months ago

Hi Erin, this is totally understood. Just noting that I'm willing to implement (and maintain) this feature, so all I ask for is internal discussion and approval of the feature.

joelnitta commented 5 months ago

+1 to this feature request. I am willing to help @multimeric implement / maintain this. I know capacity of the core team is reduced right now. IMHO that is all the more reason members of the community should step up to help 🙂

multimeric commented 5 months ago

Some other details inspired by discussion in this thread:

svenvanderburg commented 4 months ago

I like this idea, but I would prefer embedding the slides in the lesson material itself. Such as in scikit-learn's machine learning course: https://inria.github.io/scikit-learn-mooc/ml_concepts/slides.html .

At the Netherlands eScience Center we teach 20+ carpentries (style) workshops per year and contribute to 10+ carpentries lessons. We are moving towards having markdown-based slides in a central repository using NEBULA. So at least we have an easy way to keep 'our' slides up to date with lesson material and can easily share it with the world. But this is not the ideal solution.

I can say that especially with more advanced lessons like https://github.com/carpentries-incubator/python-intermediate-development/ or https://github.com/carpentries-incubator/deep-learning-intro slides are a necessity.

svenvanderburg commented 5 days ago

Follow-up on https://github.com/carpentries/workbench/issues/78#issuecomment-2191629117 : Here is an example slidedeck that we developed for our 'Good practices for Research Software development' lesson using NEBULA

(You can see heavy borrowing from CodeRefinery)

Would there be interest in having something like this for Carpentries (it would be quite easy to change the theme). This would be a temporary solution until this is embedded in the workbench.

multimeric commented 5 days ago

I like this idea, but I would prefer embedding the slides in the lesson material itself. Such as in scikit-learn's machine learning course: https://inria.github.io/scikit-learn-mooc/ml_concepts/slides.html .

This would be good in that future users will be able to see the slides alongside the material, but I'm concerned that actually presenting embedded slides will be cluttered compared to having separate slides.

Follow-up on https://github.com/carpentries/workbench/issues/78#issuecomment-2191629117 : Here is an example slidedeck that we developed for our 'Good practices for Research Software development' lesson using NEBULA

Unfortunately your link doesn't seem to work?

I can tell that there's a lot of community interest in this, but I'm holding off until we hear from the Carpentries maintainers. Unfortunately they don't seem to be prioritising this feature.

froggleston commented 4 days ago

I'm afraid our answer will be the same - this is not a priority for us in the Core Team to support and maintain in the Workbench currently. There are a lot of implementation questions, as well as issues with content selection for generating slides, not to mention maintenance of not only the embedding but updating slide content when markdown content changes.

I'm afraid we won't be able to commit to this in the short or medium term.

multimeric commented 4 days ago

Well I would be happy to help discuss and implement this when it becomes prioritised.

If other instructors are interested in a short term solution, I've developed a separate slide generator: https://wehi-education.github.io/CarpentriesSlides/. This is of course not as ideal as a Workbench-integrated generator but it has been quite beneficial for workshops I have run. Generally I use as the basis for my slides and then make a few tweaks manually.

svenvanderburg commented 3 days ago

Well I would be happy to help discuss and implement this when it becomes prioritised.

If other instructors are interested in a short term solution, I've developed a separate slide generator: https://wehi-education.github.io/CarpentriesSlides/. This is of course not as ideal as a Workbench-integrated generator but it has been quite beneficial for workshops I have run. Generally I use as the basis for my slides and then make a few tweaks manually.

This is great! Thanks for sharing ❤️ Do you have an example running somewhere?

svenvanderburg commented 3 days ago

I like how Scikit-learn's introduction to machine learning embeds slides and videos.

Agree that there is a lot of interest from the community. You can see from these notes on a discussion on training at the intermediate level that took place this week during CarpentryConnect Heidelberg that slides are important.

@froggleston at the same time I agree we should not implement this in the workbench when capacity is so low.