Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

display pacing advice based on slide timings #1564

Merged
merged 13 commits into from
Apr 21, 2017
Merged

Conversation

aspiers
Copy link
Contributor

@aspiers aspiers commented Apr 16, 2016

Display advice on whether the current pace of the presentation is on track for the right timing, and if not, whether the presenter should speed up or has the luxury of slowing down.

By default this assumes 120 seconds per slide, which can be a reasonable rule of thumb, but this can be configured by the defaultTiming parameter in the Reveal configuration block, and also per slide <section> by setting the data-timing attribute. Both values are the number of seconds.

Here is a screenshot:

pacing

The pacing advice changes red when you are behind, and blue when ahead.

@fghaas
Copy link
Contributor

fghaas commented Apr 18, 2016

So I had a look at this and it's certainly useful, if not quite as useful as it could be. A few issues:

  • What's a typical reason for not finishing a slide on time? Taking a question. Would you want to discourage taking questions? I hope not. So maybe you'd want to be able to to pause the countdown while taking a question, and intuitively you might want to click on the timer. Currently that resets the whole talk timer to zero, meaning your pacing now assumes that you have an additional buffer equal to the combined time budget of all prior slides. So that's a missing feature (which is fine, can always be added later) combined with somewhat counter-intuitive and illogical behavior (which really should be fixed).
  • What do you typically do to account for that in your time budget? You plan a reserve at the end of the talk. Defining a reserve is something you may want to consider, as in "you're over time on this particular slide, but you've only used 30 seconds of a 5-minute buffer".
  • Setting the default to 120s is problematic. The "2 minutes per slide" rule gets repeated just as often as the "no more than 7 bullets per slide" rule, and both are equally wrong — the time you spend on a slide is inherently flexible based on a number of factors, just as 7 bullets is way too many. I'd suggest having the default be set to 0, in which case the pacing information should also be suppressed in the speaker console.

@aspiers
Copy link
Contributor Author

aspiers commented Apr 18, 2016

Would you want to discourage taking questions?

I think there are two approaches to talks:

  1. Insist that people hold their questions until the end (important with large audiences)
  2. Welcome questions at any point (better with smaller audiences, at less formal events)

Clearly, a strict timing plan will not work as well with the latter, but it should with the former. But having said that ...

So that's a missing feature (which is fine, can always be added later) combined with somewhat counter-intuitive and illogical behavior (which really should be fixed).

Congratulations for correctly predicting my next plans for this feature :-) I was thinking of adding +1 and +5 minute buttons to add more time - not just for questions, but also sometimes the event organizer decides to give you more time during the middle of the talk. But your pause button idea is a great idea - probably even better. Maybe we can have both.

Defining a reserve is something you may want to consider

Another excellent idea! Yes - allocating a 5 min reserve would mean that it could be used up accumulatively at any points during the talk. Saving it to the end is ideal, but having flexibility to take questions earlier is even better. Question: should a pause button always toggle countdown between the main timer and the reserve timer? Or sometimes do you really want to pause everything? That would have the effect of delaying the end of the presentation, of course.

the time you spend on a slide is inherently flexible based on a number of factors

This is of course true. However in my experience, when averaged out over a whole presentation, 2 minutes per slide is startlingly accurate as rules of thumb go, for my personal presentation style. Your style tends to use far sparser slides, so I doubt it would work as well for you. That said, you may well be right that it makes more sense for this feature to be suppressed by default.

@aspiers
Copy link
Contributor Author

aspiers commented Apr 18, 2016

The other problem I have noticed is that generally we don't want the timer to start until the 2nd slide or so, e.g. if the 1st slide is a QR code or other cover slide which is to be shown whilst waiting for the audience to get settled. Suggestions very welcome for how best to handle this.

@fghaas
Copy link
Contributor

fghaas commented Apr 18, 2016

I'd say for any slide that doesn't count toward the time budget, the onus is on the speaker to set data‑timing="0", which should be interpreted as "this slide has no time budget," rather than "this slide has a time budget of zero, except when massless and traveling at c which would make the time budget ∞".

@aspiers
Copy link
Contributor Author

aspiers commented Apr 18, 2016

I was thinking "-1" might be a more apt value, but it doesn't matter much. The difficult bit is figuring out how to pause the timer when it's on that slide. Would you say this would only happen for slides at the beginning?

@fghaas
Copy link
Contributor

fghaas commented Apr 18, 2016

I'd say if a slide has data‑timing="0" (or "-1", whichever you prefer), then just pause the pacing timer as soon as you get to that slide. For the overall time budget count it as zero. Doesn't matter whether the slide is at the beginning or midway through.

Yes of course you should also have an option to pause the timer, rather than only be able to reset it, but reveal currently doesn't have that for the "elapsed time" timer either. So that's icing on the cake.

@aspiers
Copy link
Contributor Author

aspiers commented Apr 18, 2016

Just thought of a second use case for "pause" slides: a long session (e.g. hands-on training) where you want to allocate flexible breaks at various points. So yes, something like data-timing="pause" seems to make sense.

Current thinking:

  • add a new totalIgnoredTime variable
  • add a pauseStart variable which is normally null, but gets set to wall-clock time when either a slide with data-timing="pause" is entered, or a pause button is manually clicked
  • when a "pause" slide is exited or the pause button is released, the elapsed time since pauseStart is added to totalIgnoredTime and then pauseStart set back to null
  • calculation of time left for the current slide adds totalIgnoredTime to the time available
  • clicking +1 min or +5 min buttons would add to totalIgnoredTime accordingly

I still haven't figured out the best UI regarding a "reserve" timer though. Intuitively, allowing setting of a reserve timer to (say) 5 minutes as a buffer for unplanned questions makes sense. However if the presenter presses the Pause button, that could be either

a) to answer a question, in which case it should start eating away at the reserve, or
b) it could be for the kind of break mentioned above, in which case everything should be paused.

So how to distinguish between these two types of pause in the UI?

Would also be nice to show:

  • how much of reserve is remaining
  • current ETA for session finish
  • estimate of how long the remaining material should take

whilst somehow retaining a simple and intuitive UI.

@fghaas
Copy link
Contributor

fghaas commented Apr 19, 2016

You're burrowing deep in a rabbit hole here. I'd say keep your changes as they are for now, except setting the default to 0 and not showing the pacing timer if the pacing value for the current slide (either via data-timing or by default) is <=0, and get this merged. Then add bells and whistles.

Or, drop this PR and start your own plugin.

@aspiers
Copy link
Contributor Author

aspiers commented Apr 19, 2016

Sure, those enhancements can come in a separate PR to this one.

It definitely doesn't make sense to start another plugin though, because it's inextricably linked with the existing built-in notes plugin.

@fghaas
Copy link
Contributor

fghaas commented Apr 19, 2016

Point taken. (I've never really understood how some plugins live in the main repo and others don't, but that's a different story.)

@aspiers
Copy link
Contributor Author

aspiers commented May 4, 2016

FWIW this plugin helped me and a colleague successfully deliver > 50 slides and 2 demo videos within 36 minutes ;-) https://www.openstack.org/videos/video/high-availability-for-pets-and-hypervisors-state-of-the-nation

@fghaas
Copy link
Contributor

fghaas commented May 25, 2016

@hakimel This looks like a very useful feature to me at this point; would you consider merging it?

@hakimel
Copy link
Owner

hakimel commented Jun 9, 2016

This is really nice! Thanks @aspiers.

I'd be happy to merge this with one change; can you make it so that this is disabled by default? Don't want to make assumptions about how long someone wants to spend per slide (we can suggest 2 mins in the readme though), and I think seeing a countdown there without having opted into it is a bit surprising.

@aspiers
Copy link
Contributor Author

aspiers commented Jun 11, 2016

@hakimel Sure, I can do that. Do you think it would be reasonable if it was enabled by the presence of the defaultTiming configuration parameter?

@hakimel
Copy link
Owner

hakimel commented Jun 12, 2016

Thanks! Yea, I think basing it on the presence of that config value makes
sense. Matches how other config values work as well.
On Sat, 11 Jun 2016 at 22:03, Adam Spiers notifications@github.com wrote:

@hakimel https://github.com/hakimel Sure, I can do that. Do you think
it would be reasonable if it was enabled by the presence of the
defaultTiming configuration parameter?


You are receiving this because you were mentioned.

Reply to this email directly, view it on GitHub
#1564 (comment),
or mute the thread
https://github.com/notifications/unsubscribe/AAmatRkSFfTnWVJeFj6AdRhOc1qZwkT6ks5qKxSIgaJpZM4II-WK
.

This can be used by plugins which are concerned with helping the
presenter with their pace.
This can be used by plugins which are concerned with helping the
presenter with their pace.
This will allow us to reuse the display code for displaying
an additional pacing timer.
This allows us to use different colours for different timers,
which will be useful when we add a pacing timer.
and make muting work for negative values
Add an option to display advice on whether the current pace of the
presentation is on track for the right timing (shown as green), and if
not, whether the presenter should speed up (shown as red) or has the
luxury of slowing down (blue).

The pacing timer can be enabled by configuring by the `defaultTiming`
parameter in the `Reveal` configuration block, which specifies the
number of seconds per slide.  120 can be a reasonable rule of thumb.
Timings can also be given per slide `<section>` by setting the
`data-timing` attribute.  Both values are in numbers of seconds.

When the option is enabled, clicking on the timers will reset the timer
to the beginning of the current slide, i.e. as if pacing was perfectly
on track, not to zero as if the presentation had just begun.
@aspiers
Copy link
Contributor Author

aspiers commented Apr 20, 2017

@hakimel I have just rebased this branch and made the feature optional as requested, so that it's only activated when defaultTimings is configured. /cc @fghaas

@hakimel hakimel merged commit 715cf0b into hakimel:dev Apr 21, 2017
hakimel added a commit that referenced this pull request Apr 21, 2017
@hakimel
Copy link
Owner

hakimel commented Apr 21, 2017

Thanks for the update – this has been merged.

Made a minor tweak; instead of appending "to finish current slide" to the clock where the text is so large I added it into the "PACING" label.

I wonder if you ever want to have both the elapsed time and pacing... Feels like if you opt into pacing the elapsed time counter is only visual clutter that makes it harder to follow your pacing. Maybe we should hide the elapsed time when pacing is turned on?

@fghaas
Copy link
Contributor

fghaas commented Apr 21, 2017

Awesome! Thanks for merging this @hakimel, and congrats to @aspiers for getting it landed.

@aspiers
Copy link
Contributor Author

aspiers commented Apr 21, 2017

I wonder if you ever want to have both the elapsed time and pacing... Feels like if you opt into pacing the elapsed time counter is only visual clutter that makes it harder to follow your pacing. Maybe we should hide the elapsed time when pacing is turned on?

Personally I prefer to have it there, and the colouring distinguishes the pacing timer from the previous one - but we could do that, or make it optional.

@bdarcus
Copy link

bdarcus commented Apr 30, 2017

I wonder if you ever want to have both the elapsed time and pacing... Feels like if you opt into pacing the elapsed time counter is only visual clutter that makes it harder to follow your pacing. Maybe we should hide the elapsed time when pacing is turned on?

I agree with your impulse on this, and your conclusion.

pm-nsimic pushed a commit to chriwu/ps-tec-2017 that referenced this pull request May 1, 2017
* resolves hakimel#1324 allow display property to be configured

- allow display property apply to current slide to be configured

* add 'npm build' script that launch grunt

* Allow switching off preview links

The data-preview-link=false tag can be used to switch off preview links

* Support sass extension for custom themes

* Shift `dependencies` to `devDependencies`.

The `reveal.js` npm module is typically installed to access the CSS/JS
assets for Reveal.js. For those that want to run the plugins, they would
clone the whole repository. Hence, it doesn’t make sense to include
those as `dependencies`, which will increase download times.

Closes hakimel#1734.

* Allow background images without protocols to have query hashes/parameters.

Closes hakimel#1603.

* hakimel#1770, resume playback for paused media.

* hakimel#1770, fixed function name.

* hakimel#1770, added second argument for setAttribute

* hakimel#1770, set 'data-paused-by-reveal' attribute only for the media elements, which are not already in paused state.

* support complex markdown

support <textarea data-template> `some code` </textarea>

* Remove 'history: true' from index.html

Readme says the default is 'history: false', so it may be surprising
for users - it's easy to miss the contradicting setting in index.html

* wait for in-slide video/audio to load before playing, reuse same autoplay logic for slide backgrounds

* prevent autoplaying backgrounds from playing if slide is hidden

* fix race condition by updating backgrounds after slide visibility

*  works with video, defaults to  (same as for images)

* remove unused argument

* make backgrounds (iframes) interactive when the foreground is empty

* 2017

* merge info links in index

* fix empty pages in pdf exports (closes hakimel#1804)

* additional fix for empty pages in pdf exports hakimel#1804

* adjust pdf margins instead of heights to fix hakimel#1804

* typo

* note about showNotes in PDF exports hakimel#1800

* fix markdown typo, update comment hakimel#1780

* recommend using textarea wrapper for inline markdown hakimel#1780

* make background videos work on ipad hakimel#1778

* improved fragment notes support hakimel#1636

* warning about cube/page being deprecated hakimel#1774

* adjust comment for display config value hakimel#1325

* added toggleHelp function 

this way a key can be given ability to toggleHelp on and off.  Previously Reveal.showHelp could open the help screen, but no way to close it.

* added override parameter to toggleHelp function

* update deserialize regex to work with decimals

* docs for hakimel#1816 and remove showHelp

* phantom export throws error if reveal.js isn't present

* fix overview rendering issues in latest chrome hakimel#1649

* allow configuration of which view slide number appears on - fixes hakimel#1791

* correct config name in README

* note about deploying multiplex server with now hakimel#1830

* tweaks to showSlideNumber config hakimel#1833

* avoid npe on iframe postMessage

* print-pdf using callback iso timer

Use window.callPhantom icw page. onCallback to wait for pdf-ready event.
From: http://stackoverflow.com/a/28925479/129269

* print-pdf layout slide contents to fit stretch elements

layout() and thereby layoutSlideContents() is never invoked
when isPrintingPdf() is true so stretch elements are not
sized correctly.
This is ensured now by invoking the layoutSlideContents
from SetupPDF(). There seems no need to scale down
like in other PR's is suggested.

* Fix video background autoplay on iOS

* add autoPlayMedia config option, overrides individual autoplay settings

* allow fullscreen for background iframes

* new cli and in-browser pdf printing compatible fix for hakimel#1804

* make pdf page height offset configurable

* replace cdn.mathjax.org with cdnjs

cdn.mathjax.org is shutting down: https://www.mathjax.org/cdn-shutting-down/

This changes the default MathJax URL in the math plugin, as well as
references in README.md and test/examples/math.html

* formatting

* formatting

* clarify meaning of getProgress() value

* expose getPastSlideCount() via public API

This can be used by plugins which are concerned with helping the
presenter with their pace.

* clarify getTotalSlides() returns the number of slides

* add new getSlides() API

This can be used by plugins which are concerned with helping the
presenter with their pace.

* Allow popup window access to Reveal API

* extract time display code into new _displayTime() function

This will allow us to reuse the display code for displaying
an additional pacing timer.

* use opacity for muted clock elements

This allows us to use different colours for different timers,
which will be useful when we add a pacing timer.

* don't mute minutes when hours is unmuted

* avoid deleting existing classes when muting time elements

and make muting work for negative values

* don't show negative signs inside minutes/seconds elements

* round decreasing timers to mirror increasing timers

* document clock and timer in speaker notes window

* optionally display pacing advice based on slide timings

Add an option to display advice on whether the current pace of the
presentation is on track for the right timing (shown as green), and if
not, whether the presenter should speed up (shown as red) or has the
luxury of slowing down (blue).

The pacing timer can be enabled by configuring by the `defaultTiming`
parameter in the `Reveal` configuration block, which specifies the
number of seconds per slide.  120 can be a reasonable rule of thumb.
Timings can also be given per slide `<section>` by setting the
`data-timing` attribute.  Both values are in numbers of seconds.

When the option is enabled, clicking on the timers will reset the timer
to the beginning of the current slide, i.e. as if pacing was perfectly
on track, not to zero as if the presentation had just begun.

* minor tweak for hakimel#1564

* 3.5.0

* * updated big picture slide
* added schema image
* added deployment texts

* * update big picture svg
* adjusted big picture styles
* moved authors and company slides to the end
*

* * added styles for codelistings
* tweaked dockerfile
* added kubernetes cheatsheet
* moved tldr slide to end of presentation

* * added version number to html source
* added config file for CircleCI integration
* added deploy.sh

* * updated status badge
* troubleshooting deploy script

* * bugfix as suggested in https://goo.gl/W1XnSk

* * changed circle badges in readme
* finetuning deploy.sh
* moved sha label to span inside presentation

* * optimized Dockerfile to leverage docker caching

* * added key ‘v’ to toggle display of GIT sha in upper right corner

* * added PS_VERSION_NUMBER to big picture slide
* shortened stateflow texts

* * removed unneeded files

* * added link to github project on tldr

* * changed port for k8-service

* wip

* * finetuning deployment

* debug

* * editorial finetuning

* * extended deploy script to update dyndns with public cluster ip address

* * added shell scripts for starting and stopping the kubernetes (k8) cluster on GCP
* moved it all to subfolder k8

* * huge commit. The best. No seriously, it’s way to big and it can easily serve as a bad example.

* * added seniority
* finetuning claims on last slide
* controls are now hidden

* * extended collaboration slide

* * added samples for collaboration

* * replaced slide bgnd by collage

* * modified collage
* swapped slide order
* added notes
* reduced size of leafs bgnd

* * tweakd tldr slide

* * replaced the bgnd image on the collaboration slide - new one has some effects applied

* * ignoring .vscode folder

* * added data-timing values for every slide
* extended readme section of the repo

* * changed the way how the schema image is built into the slide

* * windows millenium. and why you may never have heard of it
derheap pushed a commit to derheap/reveal.js that referenced this pull request Feb 22, 2018
R0bes pushed a commit to R0bes/Terraform-Presentation that referenced this pull request Jun 7, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants