2010
Sub-archives
May 24, 2010
Presentation Software Options
I have been exploring alternate presentation software options for a little while now. My mission is to find a way to write my slides in a simple plain text markup. There are several reasons that I would want to do this.
My talks are generally on a technical subject, so I want to be able to add syntax highlighting inside my slides. There are ways to do this with Keynote, but it is a pain to manage. I just want to write the code directly in the slide and have the output transform it for me.
If I can write slides in a plain text markup, that means I can check my changes in to a version control repository. I write code most of the day, and writing my presentation in a similar manner just makes sense to me. I would be able to write a single section or group of slides, get to a stopping point and then check in my changes. This means I could later see a diff of what I had done and even quickly revert back to a previous version. Another benefit is that I can check in my changes, switch to another machine or another operating system, and still be able to work on my presentation with no change in workflow.
Aside from the management of the slides, I would be able to collaborate with another person or a group of people. I've actually done this once in practice and it was a rewarding experience. We were able to work on different sections of the presentation at the same time. Then once we wanted to see what the other person had written so far, it was just a matter of updating the code!
The other big advantage is that I don't have to rely on any GUI software to write my slides. I can use vim (my editor of choice) to write my slides on any platform I choose. So far I have been writing my slides in Markdown and have been enjoying the ease of use.
The biggest disadvantage is that you can't get too fancy with your slides. If you want to place text in 10 different places on one slide, then you are really better off using something like Keynote, Powerpoint or OpenOffice Impress.
Here is a roundup of the options that I have used so far.
Slideshow and S9
Slideshow was the first plain text based system that I tried. It works fairly well but has quite a few downsides to it. The biggest disappointment for me was the weak syntax highlighting support. This system requires Ruby 1.8 because of the use of a deprecated library. This threw me off at first, but after that it was pretty straight forward to install.
PROS
- Use Markdown or Textile to write slides
- Can be version controlled
- Nice support for themes
- Open source
CONS
- Bases slides on headers, no way to have a slide without a header
- Default style is quite horrific
- Adding images to a presentation is a pain
- No PDF export option natively
- No way to easily preview changes (requires HTML generation)
- No way to link to a specific slide
- Syntax highlighter supports a limited set of languages
- Syntax highlighting inclusion is dirty
- Syntax highlighting default styles are no good
- No fancy transitions
- No presenter display
- No active development at the moment
Showoff
I first saw Showoff in use while watching Scott Chacon's "Hg and Git; Can't we all just get along?" talk at Pycon. He wrote this presentation software with bigger goals in mind. Right now it is fairly basic compared to the lofty goals that he has set. Out of the box the look of this software is much easier on the eyes than Slideshow.
I thought that this might be exactly what I was looking for, but it fell short in its ability to output the presentation in PDF and HTML formats with my custom theme.
This software also suffered from the same Ruby 1.8 support issue as Slideshow. Neither of the authors warn their users of this fact.
PROS
- Uses markdown
-
Bases slides on
!SLIDE
notation which makes it more flexible - Can be version controlled
- Easy syntax highlighting
- Command line demo mode
- Server based for easy updates
- PDF export
- Nice default style
- Default style is bound to a 1024 x 768 box, the typical projector resolution
- Nice set of transitions using jQuery Cycle plugin
- Open source
- Actively being developed on
CONS
- Applying a theme is not manageable across many presentations
- No way to link to a specific slide
- PDF export requires commercial software
- PDF export breaks easily with custom style
- PDF and HTML export have too many bugs at the moment to be useful
- No presenter display
Keynote
Keynote is the software I've used the most so far. Keynote is very easy to use and has a nice UI that goes along with it.
The biggest gain from using Keynote is the fact that it has a presenter display. None of the HTML based solutions have come up with a solid presenter display. When I'm giving a talk/training to my co-workers, this isn't an issue. When I'm standing in front of a couple hundred people, it is nice to have a visual guide there with you. You can customize the presenter display to show the information you want and in the layout that you prefer. This is really a killer feature.
Keynote also gives you a way to export to PDF or HTML. This is important to me because I want to share my presentation on a site like Slideshare or in a non-Flash friendly way using HTML.
PROS
- Easy to use
- Nice UI
- Fancy transitions
- Nice built-in themes
- Presenter display
CONS
- Requires OS X
- Syntax highlighting is a pain
- HTML export is available, but just generates images
- Not open source
Conclusion
For my next presentation I was going to try and use Showoff. It was looking quite promising until I tried to generate the PDF and accompanying HTML. The support for my custom theme and image handling in the PDF export failed for me. So for now, I'm going to stick with Keynote. My presentation will contain quite a few code snippets so I will be using Pygments to render them into rich text files, then pasting that into Keynote. Hopefully this won't drive me crazy!
Do you know of any other alternatives? Let me know in the comments.
Apr 09, 2010
Avert Your Eyes, I'm Naked
If you happened to find your way on to my site today (April 9th), you might have noticed something a bit odd. That's because today is CSS Naked day. This is the fifth year for the event which aims to promote web standards through semantic markup. I've known about it for a couple of years but have never participated. This year I decided to give it a go.
My site is Plone powered, so I was able to quickly make all the necessary changes through the web. I had planned on making a quick product, but laziness prevailed and the time had already arrived. With that premise, I just used the evil custom folder and friends to go naked.
First I added a quick (script) Python
into my custom folder named isNakedDay
. Zope's DateTime
module makes this pretty easy:
# The current time in GMT
now = DateTime().toZone('GMT')
# Dynamically get the year so this would work next year as well
this_year = now.year()
naked_date = DateTime('%s/04/09 0:01 GMT' % this_year)
# CSS naked day starts 12 hours before GMT
naked_start = naked_date - 0.5
# CSS naked day ends 36 hours after GMT
naked_end = naked_date + 1.5
return naked_start < now < naked_end
As the website points out, CSS Naked Day is actually two full days once you take into account all the time zones. The code above handles this with some date math.
In Plone's CSS registry, you can add conditions on each of the CSS files. In all the public facing CSS entries I added the following TALES expression:
not:portal/isNakedDay
I also added a warning at the top of the page so people don't think my site is broken. This was achieved quite simply by throwing the main_template
into the custom folder then adding the following just above the visual-portal-wrapper
:
<tal:naked define="portal context/@@plone_portal_state/portal"
condition="portal/isNakedDay">
<hr />
<h3>What happened to the design?</h3>
<p>To know more about why styles are disabled on this website visit the
<a href="http://naked.dustindiaz.com" title="Web Standards Naked Day Host Website">
Annual CSS Naked Day</a> website for more information.</p>
<hr />
</tal:naked>
Now the site is properly naked. Since the isNakedDay
script will run a bunch of times on each page load, I added it into the RAMCache
via the Cache
tab on the script object. The RAMCache
defaults to one hour, so that works out perfectly. Plone FTW!