Day 8 — I made a terminal-based presentation tool!

For the last two days, I've been working on present.

I've been wanting to build something like this ever since I watched the North Bay Python 2017 keynote by Brandon Rhodes. The markdown slide format is similar to reveal.js because I want present to work with my existing slides. Now if I can just build a speaker notes view I won't have to use anything else ever again!


In the keynote, Brandon talks about the "guardrails" he has set in place for his talks, which I think are pretty useful. What follows is a lossy captioning of his words.

Per-slide timer

number_of_seconds_left / number_of_slides_left

When he exceeds the time for a slide, an assistant gets called in to start destroying the slide! (as a cue for Brandon to move to the next slide) I really want to add this feature to present!

Constrain the design space

He used to write slides in RestructuredText and convert them to HTML using some custom CSS. He mentions how ASCII presentations constrain the design space even further, so that he doesn't waste time fiddling on "pixel by pixel" detail.

Brief slides

He goes for really brief slides, which was made famous by Lawrence Lessig a decade or two ago. The idea is that short slides are less distracting for the audience, and make them listen to you rather than reading on ahead. Short slides also keep you on track, and decrease the load on your memory as a presenter.

Rule: if I discover during practice that a slide has two ideas inside, (that a slide is making me say one thing and then remember and say another), I split it into two slides. This presentation has a 129 slides for example, each of which is a simple idea that I say and then move on past. No big lectures that I have to give.

Big font

This is the biggest terminal font that still fits the code on slide 86. Literally. So, lay out your talk, use small code samples, and increase the font size until the largest slide barely fits the screen. I'm often stunned by the fonts people think I can see from the back row.


I think I can reuse some nbcommands code so that I'm able to present Jupyter notebooks (cell by cell)!