Overall, I'm quite impressed with it. It makes it very easy to build simple presentations, and comes with better themes than Powerpoint does (although I bet you they'll start getting annoying as people overuse them). The alignment guide thing is neat. It is, however, a little slow on my iBook. It takes about a fifth of a second to flick from slide to slide, which only involves blitting 100 or so characters to the screen. That's slow. And it gets very slow when dealing with hundreds of slides... but I'm getting ahead of myself.
Take these two facts: Keynote's presentation format is XML, and I'm doing a tech talk next week entitled "Core Perl Modules You Might Not Know About". Clearly, the only sane thing to do would be to autogenerate slides for each core module, with each slide having the module name as title, the module description, and the synopsis. So I hack up some code with File::Find::Rule and Pod::POM, build a small presentation which displays a module how I want, dig into the XML code produced, and glue it all together with Template Toolkit. The TT stuff in question is fairly simple, and I know you all love angle brackets, so here we go:
[% # 4909 lines of boring theme-describing XML above here %]
[% count = 3 %]
[% FOREACH module = modules %]
<slide master-slide-id="master-slide-2">
<drawables>
<body visibility="tracks-master" vertical-alignment="tracks-master"/>
<title visibility="tracks-master" vertical-alignment="tracks-master"/>
</drawables>
<transition-style type="inherited"/>
<thumbnails>
<thumbnail file="thumbs/st[% count %].tiff" byte-size="3108" size="60 45"/>
[% count = count + 1 %]
</thumbnails>
<bullets>
<bullet marker-type="inherited" level="0">
<content tab-stops="L 96" font-size="84" font-name="MyriadPro-Semibold" paragraph-alignment="center">[% module.name %]</content>
</bullet>
<content tab-stops="L 96" font-size="84" font-name="MyriadPro-Semibold" paragraph-alignment="center">[% module.name %]</content>
</bullet>
<bullet marker-type="inherited" level="1">
<content paragraph-head-indent="7" tab-stops="L 58" font-size="42" font-name="AJensonPro-Subh" paragraph-first-line-indent="7">\342\200\234[% module.description %]\342\200\235</content>
</bullet>
<bullet marker-type="none" level="1">
<content paragraph-head-indent="7" tab-stops="L 58" font-size="36" font-name="Courier" paragraph-first-line-indent="7">
<![CDATA[[% module.synopsis %]]]>
</content>
</bullet>
<bullet marker-type="character" level="1">
<content paragraph-head-indent="7" tab-stops="L 58" font-size="36" font-name="Courier" paragraph-first-line-indent="7">
<span font-size="42" font-name="AJensonPro-Subh">Tip</span>
<![CDATA[
]]>
</content>
<character-bullet-style size-technique="relative" offset="5" size="1.71429">
<bullet-characters tab-stops="L 84" font-size="11" font-color="1 0.498039 0" font-name="GillSans">\342\200\242</bullet-characters>
</character-bullet-style>
</bullet>
<bullet marker-type="inherited" level="1">
<content paragraph-head-indent="7" tab-stops="L 58" font-size="42" font-name="AJensonPro-Subh" paragraph-first-line-indent="7"/>
</bullet>
</bullets>
</slide>
[% END %]
[% # 16 lines of boring UI-describing XML below here %]
Icky XML. Some of that is definitely silly (the thumbnail image
probably shouldn't be in the presentation XML, for one thing), and the
fact that they use SVG-like-but-not-quite-SVG. But
to be honest, I can ignore all that, all I want to do is autogenerate
my presentation. Which I do. And it all works, especially when I remember to use
> etc.
Now can I be bothered to do an AxPoint -> Keynote converter...
Module! (Score:2)
Re:Module! (Score:2)
More seriously, there's so much XML in there I don't know where to start. Or if I should do it at all...
Re:Module! (Score:2)
My vision is to create a "template" that sets up the basic look of a slide (or slides), and then use Perl to generate all the individual slides. Right now I use a custom program called makeslides to take a text (YAML-ish) outline and creates pretty HTML with CSS etc. It'd be sweet if I could make it generate Keynote presentations too.
But I'll probably just end up doing as you've apparently done, create a few slides, then pull out the XML I want, and use that as a template.
Re:Module! (Score:2)
I'd guess that if you're using HTML+CSS, the HTML must be very semantically structured and it'd be trivial to output XML instead. Starting from that, a YourML-to-KeynoteML XSLT should be trivial.
-- Robin Berjon [berjon.com]
html filters, SAX (Score:2)
[% thingy | html %]Will automatically do the > for you, but you knew that.
Cool hack. Shouldn't you be doing this with SAX though? Just place <acmepresentation:tagname/> in the right place and using a nice filter...Re:html filters, SAX (Score:2)
[1] Stop complaining that I complain about SAX too. It may be simple, but isn't practical.
Re:html filters, SAX (Score:2)
Hmm, you could do a presentation on that itself. "How I created this presentation: A fully recursive talk".
Re:html filters, SAX (Score:2)
TBH I'm not sure that SAX would be a good idea to do that. SAX is meant to be low-level, and works marvels at that. It's as close as you can get to XML without going lexical. Anyone using it for higher-level things will find it impractical, and rightly so.
Other XML-orientated options that would be fit here could be XSLT (which acme also hates) or a number of modules from Barrie Slaymaker that deal with SAX at higher levels (eg XML::Essex or XML::Filter::Dispatcher).
-- Robin Berjon [berjon.com]
Hrrmm... (Score:1)
Which is probably down to the fact that Keynote was written for Steve, and when was the last time Steve explained any code?