Posts in the S5 Category

Published 11 years, 6 months ago

Over the past year-plus-a-half, S5 has grown from a small hack of a compact slide show script written by Tantek Çelik into a relatively complex bit of work.  In the beginning, there was simply a way to take a single document and turn it into a series of slides.  I added basic keyboard controls, a navigation menu, and the ability to have the navigation controls show and hide, and then threw it out into the public eye.  People loved it, and with a lot of help from a lot of people, all manner of features were added: slide bookmarks, much better keyboard controls, incremental progress, a notes view, and more.

Despite all this community involvement, though, the code base was in a single set of hands: mine.  Anything that was added to the “official” S5 code was done by me, as time and understanding allowed.  As anyone could have predicted, this has slowed the advancement of S5 over time, and of late it’s brought advancement to a near standstill as I’ve struggled to keep up with other demands.  The only thing I’ve added since 1.2a2 is the ability to blank the screen by hitting the “B” key, and that change has yet to become public.

Of course, the code is explicitly in the public domain, so anyone can add to S5—and many have.  ZohoShow, for example, outputs S5 1.1 code.  I’ve seen S5 used for product tours of medical software and board games.  Jonathon Snook added a “live preview” version of the notes view, which I totally want to see in the primary code base.  David Goodger made a bunch of useful Docutils-compatibility additions that I never managed to fold in.  I also know of four different implementations of remote-control functionality, where one person runs a slide show and changes are reflected in remote copies.  This is a feature perfect for distance learning, corporate netconferences, and other situations.

And all this time, there was still no way to have those enhancements, or any others, “come home” to the source of S5 unless I did it myself.  Until now.

Thanks to Ryan King, we now have S5 Project, which will be the official home of S5.  Besides the blog and mailing list S5-discuss, there will be a wiki, a source code repository, and a bug-and-feature-request tracking system.  If you’re an S5 hacker, or even a frequent user, please do join the mailing list (I know, I know—another one?) or at least subscribe to the S5Project RSS feed to keep track of what’s going on.  I expect the mailing list to become the place for coders to talk about additions they want to make and bugs they’re trying to squash, even after the bug-tracking software gets set up, and it will be a primary source of content for the wiki-to-come.

While it’s been the case that anyone may add to S5 in their own way, for whatever purpose they see fit, now there will truly be community access to what’s always been a community project.  I hope you’ll join us there!

S5 1.2a2

Published 11 years, 10 months ago

The alpha 2 release of S5 1.2 is now available (177KB ZIP file; also available for previewing in the testbed).  There isn’t any major change here, but I did add some notable enhancements to the notes window.  These are:

  • On any slide with incrementals, an indicator of incremental progress will appear in square brackets next to the overall slide show progress on the title line.  It’s a little crude, I admit, but it serves the purpose well enough.
  • Clicking on the title of either the Elapsed Time or Remaining Time counters will “minimize” them.  Click a minimized title to maximize the box.  The actual minimum and maximum effects are purely CSS-driven, hooked onto a collapsed class name.  I’m still pondering the best way to handle this feature, so the class name may change, as for that matter may the mechanism by which one can min/max the boxes.  Suggestions are welcome.
  • Keypresses and clicks are passed from the note window back to the slide show.  In other words, the slide show fully is fully operable from either the slide show window or the notes window.  The only difference is that the notes window doesn’t have the navigation links and popup navigation menu (said difference to disappear in a future release).

That’s it.  In the process, though, I uncovered a bug that shows up in Safari 1.3.1 and 2.0, where it’s ignoring the show-first feature for incrementals.  I’m going to assume that the problem lies in the getIncrementals() function, though of course I could be wrong.  If anyone can spot the error and provide a fix, I’d be grateful.

Update 2 Mar 06: in addition to the Safari problem, I’ve discovered that IE/Win doesn’t seem to share event information between windows.  Thus, if you try to run the slide show from the notes window, errors get thrown.  I managed to fix this in clicker() by adding a test for notes-window events, but trap() has a very different structure and I’m not sure how to fix it.  Thus the testbed in IE/Win currently lets you advance the slide show from the notes window by clicking the mouse button, but keyboard navigation throws an error.  If anyone can tell me how to get around this, even with a pointer to a good article on passing events from one window to another, I’d be very grateful.

Opera and S5 1.2a1

Published 12 years, 6 days ago

Just as a quick update, I’ve done some testing of S5 1.2a1 in the latest version of Opera I have available (which, under OS X, is version 8.51).  I’m happy to report that this copy of Opera has all of the S5 features supported in other browsers.  Incremental display, font scaling, keyboard navigation, and even the notes window are all present and account for.

To use the notes feature, here’s what I do.  Upon loading the base slideshow into Opera, I position the window on my secondary monitor, which is here taking the role of an LCD projector.  Then I hit “n”, causing the notes window to appear on my laptop’s monitor (in the role of the presenter’s machine).  After bringing the slide show window back to the fore, I select “Full Screen” in the “View” menu, and the presentation maximizes itself to the secondary monitor.  As I navigate through the slide show, the notes window stays perfectly synched with the presentation.

There may be better ways to get the notes window on the primary monitor and the presentation on the secondary monitor, but that one worked for me.

I did notice some odd bugs here and there in Opera 8.02, a copy of which I also have hanging around, but nothing that was a show-stopper.  The one that sticks out in my mind was that multi-slide jumping wasn’t cleared out after the jump.  For example, from the first slide I’d type “3 (right arrow)” to skip to slide four.  Hitting the right arrow again jumped me to slide 7, which is wrong.  Opera 8.5 acted as intended, so I’m going to assume that it has something to do with how the JavaScript is written.

If there are problems in Opera 8.5 or Opera 9 that my testing didn’t uncover, let me know.  I’ll fix anything I can—and if there’s anything I can’t, I’ll turn it over to the Opera community to figure out.  Members of that community have already been invaluable in figuring out how to work around bugs in Opera’s CSS handling in order to make the controls available, so I’m confident they’ll be able to handle anything I can’t figure  out.

S5 1.2a1

Published 12 years, 1 week ago

It’s back: S5 1.2 alpha 1 is now available (177 KB Zip archive), and you can play with either the OSF or XOXO versions of the latest development version if you just want to preview it online.  In addition, I’ve set up a contact address specifically for S5 questions and feedback.  You can find a link to this new address on the main S5 page.

New to S5 1.2:

  • The progress indicator (e.g., 6/10) is now a permalink to the currently-displayed slide.  This will require an update to any S5 1.1-era themes, but it’s a minimal thing.  Granted, the current alpha doesn’t have updated styles to handle the presence of a link.  I’ll get to it.

  • Bug fixes intended to make it more Konqueror-friendly.  I do not know if Konqueror will run S5 1.2.  I do not have access to Konqueror.  The fixes I included were sent to me by helpful S5 users, and may or may not have resolved all problems.  If there are still bugs in S5 when displayed in Konqueror, you are invited to submit bug fixes in the comments, or via the contact address I mentioned before.  Bug reports should be done in the comments, where other Konqueror users can see them, and not via the contact address.

  • Vastly improved integration with Opera.  As chronicled in “Opera and S5 1.1“, S5 was originally intended to be a cross-browser emulation of OperaShow.  As time went on and features were added, the two diverged.  Thanks to efforts by Hallvord Steen, Opera should now be shut out of a lot less of S5 than it was.  In fact, it may well be feature-complete as compared to S5 1.1, and will get most of S5 1.2’s features.  With one possible exception…

  • A “notes” window capability.  The notes view is largely the work of Shaun Inman, who wrote me last week to say, “Hey, I did this.  Interested?”  Was I ever!  I’d been meaning to do it ever since I saw the notes view in Keynote, but Shaun got there first, clever wolf that he is.

    To see this in action, in either the OSF or XOXO versions, hit “n”, or call up the controls and click on the three-line icon on the left.  A new “notes” window will open, looking very much like the “notes” view in Keynote.  This window displays whatever notes the author has created for the current and next slides; these are done by placing content in an element with a class of notes, pretty much exactly like the handout feature from earlier versions of S5.  The notes window also includes timers showing the time elapsed since the presentation was opened and the time elapsed since the current slide was loaded.  There’s also a pauseable countdown timer for those who prefer to keep track of time that way.  (I added the countdown timer.  Yay me!)

    The general idea is that you load up your presentation, open the notes window, and put the presentation up on the projector while keep the notes window on your presentation machine.  (Which is of course only possible if you turn off video mirroring.)  As you move through the slide show, you can see notes to yourself and keep track of time so you don’t run over.  Keen.  I don’t know how much I personally will use the notes, but I’m all over the timers like they were a stack of pancakes and I were Mrs. Butterworth.

    At the moment, the JavaScript that opens the notes window is minimal, so the notes window is fairly chromeless and not resizeable in IE/Win.  It’s also a bit rough in terms of some of its layout, as befits the alpha status.  I’m also considering adding a keyboard command for “fullscreen”, which would maximize all open S5 windows to fill the screen they’re currently occupying, and possibly also strip away the browser chrome.  I did a few experiments along those lines, but wasn’t satisfied with the results, so it didn’t get into this release.

    On a related note, I’m not sure that notes can be made to use with Opera so long as S5 relies on OperaShow, because OperaShow by its very nature makes all browser windows fullscreen.  If there’s a way to get OperaShow to put one window on one monitor, and a second on a second monitor, then that would be the answer.  If not, I’m not sure what to do short of abandoning OperaShow usage entirely, which seems strange and wrong.  But we’ll see.  If nothing else, we can verify that everything in S5 besides the notes feature works in Opera, and push those changes into an S5 1.1.1 release.

One known problem is that when Firefox displays an S5 show using the text/xml or text/xhtml+xml MIME types, which is necessary for slide shows that incorporate things like MathML and SVG, things break because innerHTML ceases to be supported.  I have a proposed fix submitted by an S5 user, but did not get it into 1.2a1.  I plan to correct this before reaching the first beta release.

A number of people have asked for a merging of effects libraries like and FACE, and there have even been scattered implementations of same.  It’s definitely tempting.  I’m not at all confident that this will happen for 1.2, though, mostly because I don’t understand enough programming to make the connections.  I’m also not sure how many of these I could pile into the code before the whole thing came crashing down.  I have hopes that we’ll be able to work out a “best practices” way to add such capabilities to any S5 presentation file, and let each author add them or not as they see fit.

So there you go.  Have at it!

Opera and S5 1.1

Published 12 years, 5 months ago

Oh, sure, I build a slide show system specifically because of a bug in Opera 7.5, and despite that I go fairly far out of my way to make sure that Opera will still be able to display the slide show using its unique and groundbreaking feature, OperaShow, and now I’m the bad guy.

A little history: the first version of S5 was meant to recreate what OperaShow did, except do it in other browsers.  That was pretty much it—but as I was fiddling with the JavaScript to make that work, I realized I could build my own navigation menu in the JavaScript.  So I did.  Then, when I tested to see if it worked in Opera, it didn’t.  I tried for a while, but couldn’t make it work.  So I decided to hide the menu from Opera.  Better no feature than a broken feature, and besides, it was the only one so hidden.

When I tossed S5 out to the public, I figured maybe twelve other people in the world would be interested.  It was one of those, “Hey, this is something I hacked together, look how geeky I am!”

And the crowd, against all expectations, went wild.

So the list of things I thought would be interesting to add some day suddenly took on extra weight.  There were people out there who actually wanted to use S5, and wanted things like font scaling and incremental display of slide content.  Furthermore, there were people contributing code to improve the system.  Out of nowhere, a little open source project erupted in the comments of my posts.

In order to keep things from bogging down, I defined a feature list for S5 1.0 and shipped it out.  All along, I made sure that the slide show would fall back to OperaShow in Opera.  To do so, I had to write a routine (called notOperaFix() because it had to fix things for browsers that aren’t Opera) that swapped around the media values for various linked style sheets, among other things.  I also had to define the S5 format so it was compatible with the OperaShow Format specification.  That meant changing some things from my original file format, and in my opinion not always for the better.

Despite a few people telling me to just drop OperaShow and OSF support because it wasn’t worth the effort, I kept those mechanisms in place as we moved to version 1.1.  I figured that since Opera had a slide show system, I’d let people use it.  Besides, any time I created a test copy of S5 that didn’t let Opera drop back to OperaShow, it completely failed to display the slide show.

Now S5 1.1 is out, and it has more features that people asked for—font scaling based on window size changes, incremental display, more keyboard commands, and so on.  Throughout it all, I made sure OperaShow would still work.  And it does.  It doesn’t get the keyboard commands, or the font scaling, or the incremental display.  I did try.  I couldn’t figure it out.

Now, there are those who apparently think that this means I’m a liar when I say S5 is cross-browser.  I admit it—S5 doesn’t work in Mosaic 1.0.  It also quite likely fails in IE5.0/Win.  Actually, I think it fails in IE5/Mac, which is ironic since my starting point for S5 was a rudimentary slide show system written by Tantek Çelik.  But it does not fail in Opera, because it’s quite intentionally designed to be OperaShow compatible.  It isn’t feature-identical, but then, the features in (and version number of) Opera for the Mac usually lag behind Opera for Windows.

Lying about S5’s cross-browser nature?  Giving Opera the cold shoulder?  Utterly wrong on both counts.  I’ve done everything I can to make sure Opera is still at this particular table.  Giving Opera the cold shoulder would have been me saying, “Screw it, I’m not providing a fallback to OperaShow and if Opera users don’t like it, they can install Firefox”.  And I’ll be totally honest: I’m sort of tempted.  I could clean up the markup; cut out some JavaScript gymnastics, including a backflip over a Gecko bug when dynamically changing media types, which I wouldn’t have to do if I weren’t still supporting OperaShow compatibility; and simplify my life.

After all, it’s not like I sprang this on the world.  The last eight beta and release candidate versions of S5 were published here.  Comments and contributions were solicited and welcomed, and many were received.  The state of Opera support has not changed one iota in all that time.  There were several months in which anyone could have stepped up to the plate and contributed fixes for Opera.  Did anyone?  No.

I’d do it myself, except I’m not sure I can.  For example, I just a few hours ago made a copy of the S5 package, unpacked it, and edited the JS file so it did no Opera detection: the scripts all ran on Opera the same as they do for any other browser.  I loaded it into both Opera 7.5 and 8.02 for OS X, which is what I have right now.  You know what happened?  Nothing.  The slide show didn’t happen.  The outline view came up, changed slightly, and then sat there.  And do you know why?  Because Opera defaults to identifying itself as Internet Explorer.

So I fixed that in the preferences, and tried again.  Everything worked just fine except for two things.  One, the browser window had a vertical scroll bar for no apparent reason.  Two, the controls were nowhere to be found, either by hovering over where they’re supposed to be or using the “C” key to toggle them.  I’m not sure why these two things are happening, because the JavaScript console reports nothing amiss.  That has me kind of stuck.

So here’s the deal.  Want S5 to be feature-equivalent in Opera?  Fine.  Take the S5 1.1 package and fix it for Opera—preferably version 6 or later, but I’ll take what I can get.  Liberally comment your code so I know what you did, and why, or else post fixes here.  I promise that, if this is done in such a way as to not degrade behavior in any other browser—because, remember, they don’t have anything like OperaShow on which they can fall back—and so that the code is maintainable, I’ll roll the changes into my version of S5, and release it as 1.1.1 or 1.1o or something.  (The same is true for any other browser, in fact.)

I’ll help out where I can, if anyone has questions about this bit of JS or that bit of CSS in the S5 directory.  Post them here and I’ll do my best to answer.  If I get hit with a bolt of genius and can suddenly fix the problems myself, I’ll do so, but odds are that won’t happen.  It will therefore be up to the community to help out.  This isn’t just me, as the credits page makes clear; S5 has long been a community effort.

Put another, more succinct way: don’t complain, contribute.  It’s more satisfying in the long run, and it’s more constructive.

S5 1.1

Published 12 years, 5 months ago

I admit, this took a lot longer than it should have, but at long last I’m publishing S5 1.1.  No beta number, no release candidate status—just the plain old version 1.1, final.  The S5 pages are updated to reflect this, and to make it a little easier to get around the S5 area of the site.  There’s also an updated introductory slide show for your consideration.

Here’s the biggest change: S5 is now explicitly in the Public Domain.  In the end, this best reflected what I wanted for the technology, and a poll of contributors-to-date indicated no objections to this change.  Version 1.0 will stay as it was, under a Creative Commons license, but version 1.1 and later will all be freely available to anyone to do with as they please without fear of licensing restriction.

As part of the 1.1 package, I’ve included the introductory slide show, the default and I18N themes, all relevant documentation, and XOXO versions of the introductory slide show and the structural references.  A future version of S5 will probably be better harmonized, so I don’t have to have two versions of the references.  I’d have done that for v1.1, except it’s already long past time to ship. 

As always, share and enjoy!

S5 1.1rc2

Published 12 years, 7 months ago

Thanks to a comment from Pritt, the Safari arrow-key bug in S5 1.1rc1 has been, so far as I can tell, fixed.  I’m therefore releasing S5 1.1rc2, which will be the final release candidate unless any major bugs are encountered.

Also new to this revision are some slight modifications to the CSS that drives the system’s presentation.  The changes were all in the vein of changing div.slide to .slide.  Why bother?  Because with these slightly more generic rules, it’s now possible to create your slide show using a XOXO format instead of the OSF-compatible div-based markup.  (And the XOXO version may be OSF-compatible; the only real difference is that you’re using a list instead of a series of divs, but I’m not sure how much OSF cares that each slide be in a div instead of some other element with the appropriate class.)

I’ve included a XOXOized version of the testbed slideshow in the rc2 package, so feel free to check it out, if you’re interested.  Long-delayed thanks to Tantek for helping me work out the few changes that needed to be made to the CSS, and providing me with an example XOXOized S5 file so I could use it as a reference.

S5 vs. BBEdit 8.2.1

Published 12 years, 7 months ago

Just a quick note for any of you who might be both a BBEdit user and an S5 author:  BBEdit 8.2.1, the latest update, will crash if you try to open any valid S5 presentation (I don’t know what happens with invalid files).  Apparently there’s a bug in BBEdit’s XHTML scanner that the S5 file structure triggers.  Version 8.2, which you can get from the Barebones FTP site if you don’t still have it locally, does not have the same bug, and will edit S5 files without any trouble.

The folks at Barebones are aware of the problem and have indicated that a fix will be in the next maintenance release of BBEdit.  For now, if you want to edit S5 files in BBEdit, stick to 8.2.

(And if anyone wants to take a crack at helping out with the problems in S5 1.1rc1, see my earlier post on the subject.  Thanks!)