authoring presentations with markdown (deckset gets you pretty far)

As I called out in viewing diffs between powerpoint decks (with a little help from adobe), I'm on a hunt for the ultimate approach to allow multiple folks to edit presentations without having them step on each other's toes and that allows for normal source code control to be applied to the "source" file(s).  Using markdown still seems like the best approach, but I still haven't found the perfect solutionDeckset (a Mac-only app) comes pretty darn close.

First and foremost, you are authoring the presentation in markdown with your favorite plain-jane text editor, or markdown-centric editor (I'm currently using MDEdit).  Here's a snippet of what that looks like (taken from presentation.md).

# Programming with Apache Spark

![](Gents.jpg)

^ Est. 45 mins for the slides, plus 30 mins for the lab at the end of the section

^ Spark 1.4.1 Programming Guide; http://spark.apache.org/docs/1.4.1/programming-guide.html 

---

## Learning Objectives

After you complete this lesson you should be able to:

- Start the Spark shell
- Understand what an RDD is
- Load data from HDFS and perform a word count
- Know the differences between Transformation and Action
- Explain Lazy Evaluation

--- 

## The Resilient Distributed Dataset

An *Immutable* collection of objects (or records) that can be operated in parallel

- **Resilient**: can be created from parent RDDs - An RDD keeps its lineage information
- **Distributed**: partitions of data are distributed across nodes in the cluster
- **Dataset**: a set of data that can be accessed

Each RDD is composed of 1 or more partitions - The user can control the number of partitions - More partitions => More parallelism

--- 

## What Does "Lazy Execution" Mean?

```python
file = sc.textFile("hdfs://some-text-file")
counts = file.flatMap(lambda line: line.split(" ")) \
    .map(lambda word: (word,1)) \
    .reduceByKey(lambda a,b: a+b)
```

DAG of transformations is built by Spark on driver side

```python
counts.saveAsTextFile("hdfs://wordcount-out")
```

Action triggers execution of whole DAG

As you can see, this text-only file (and its referenced image files) could quite easily work with something like github to maintain history of who changed what & when – not to mention allow concurrent development!

The following brief video shows what this looks like in presentation mode.  It works with multiple monitors and shows presenter notes, just like PowerPoint.

It can also create a PDF such as this one.

This whole approach gets me pretty far, but has the following list of issues you'd have to accept.

  1. While you can edit the file on any machine since it is just a plain text (markdown) file, you have to use the Mac software to "drive" it in presentation mode if you want to get the multi-screen mode complete with presenter notes and any builder slides you create.  Fortunately, you can export it to PDF as shown above.
  2. There are limited templates and no current way to develop your own.

While these limitations will not allow me to push too hard for this solution at my employer, I'm going to see if I can use Deckset for my next user group, or other public, presentation.