Posts in the S5 Category

Okay, so it’s been almost three months since the last time I updated S5. During that interval, I’ve been quite busy, but I still feel disappointed that I haven’t put more energy into the project.

As a partial salve, I’ve made a few changes to the S5 information pages. The main page now has links to the latest official version and latest revision, as well as quick links to useful information. I updated the FAQ a bit as well, to clarify the licensing situation. At some point, I hope to create a separate page that contains a feature list, but that’s on a back burner right now.

What I really want to do is finally make S5 1.1 a full, final reality. Therefore, I’m pushing it to version 1.1rc1 with the knowledge that there’s a new bug to be addressed. In Safari 1.3 (and I assume 2.0 as well, though I haven’t had a chance to install Tiger yet to find out) the arrow keys double-advance, or even more. So if you hit the “right” or “down” arrow keys, you’ll jump forward two slides; “up” or “left” moves you back two slides. On incremental slides, you’ll advance to the end of the slide, or the next incremental element. The space bar doesn’t evince the same problem.

I assume this is a keystroke handling problem, but I’m not entirely sure—the behavior of incremental slides makes me wonder if maybe it’s something else. Either way, if we can get that fixed and don’t uncover any other major problems, I’d be happy to call this bad boy done. Help, as always, is welcomed and appreciated.

There’s the World Tour, which is exciting and all that, but then there’s the fun of hometown gigs. It just so happens that I have two coming up in the near future. Here they are, along with some brief information on what I’ll be talking about.

Conference dates: 8-10 April 2005. Both my talks will be the morning of Saturday, 9 April.

The Construction of S5; or, How I Learned to Stop Worrying and Love the DOM — a look at where S5 started, why it grew, how its growth was accomplished, what kinds of design decisions had to be made, and where it’s headed in the future.

Humanely Wielding a Clue By Four: Reflections on Managing a Massive Mailing List — a look back at three-plus years of managing css-discuss, this will be an unvarnished peek into the life of a list administrator who actually cares about the list.

Rapid UI Prototyping and Easy A/B Usability Testing with CSS — an updated version of the short talk Molly Holzschlag and I gave last year at User Interface 9, this will look at ways to use CSS and standards-oriented design to quickly develop UI designs and to do comparison testing of different designs.

Neither event is free, but then, neither event is terribly expensive, either. So come on down! They should be a peck o’ fun.

I’m also speaking at the NASA Glenn Research Center this afternoon, but that’s an internal gathering, not a public event, which is why I didn’t mention it before. I haven’t been there since the late 1980s, so it’ll be interesting to see if anything’s really different.

I have two coding projects going, and both are for the moment stalled. Maybe you can help.

The more recent of the two is WP-Gatekeeper, which is almost ready to go from RC1 to RC2 except for one tiny little problem: I upgraded my local copy of MySQL, and it blew away my WordPress database. So I mysqldumped the database from meyerweb.com, copied it down to my hard drive, and tried to mysqlimport it. And tried, and tried, and tried, until eventually my eyes started bleeding. No dice. Therefore, no possible chance of my testing the update script, which is necessary because it actually deletes tables from the 1.0b1 version of Gatekeeper. I don’t want to put it out into the wild without making sure that it deletes the right tables, and no others.

Obviously, without a successful import of the dump file, I can’t test the script. I’ve read the MySQL documentation, and done everything it says to do. It fails. I tried logical variants, in case there was something the documentation was leaving out. No dice. Then I tried illogical variants, including some SQL statements that included words I wouldn’t ordinarily type, let alone say out loud. The error message is basically always the same, and it never helps. It goes something like this:

Well, no kidding, geniuses; there is no table called that, because it’s the name of the dump file, not anything in the database. And yes, when I dumped the DB from meyerweb, I did it so that it contained the CREATE and USE directives at the top of the dump file. They don’t seem to make any difference at all.

Plus all that was after I reinstalled MySQL about seventeen times because it refused to start up even though the installation was supposed to be point-and-click. Eventually I switched to a different, third-party install package, and it went like a charm. Serves me right, I suppose, for assuming that the MySQL.com folks could put together an install package that actually works. At this point, as far as I’m concerned, MySQL is the rotted corpses of the maggots that once infested the corn inside a pile of moose droppings.

Not that I’m bitter that this wasted four hours of my life or anything.

The other project is, of course, S5. It’s currently stuck at 1.1b5, because there’s this problem in Firefox for Windows that I simply cannot figure out. I commented on it a little over a month ago; the basic problem is that when viewing the testbed slide show in Firefox for Windows, it seems to “jiggle”, apparently from constant re-scaling of the fonts. I can’t figure out how to stop it.

So any ideas, anyone? At this stage, that’s pretty much the last major problem before going final. Safari still blocks use of Page Up and Page Down when in the outline view, but that’s something I can live with. The nervous-twitch display in Firefox for Windows isn’t acceptable in a non-beta version.

I’ll still be using S5 1.1b5 for my SXSW presentations, but that’s okay because I’ll be using Firefox for Macintosh, which doesn’t appear to suffer from the same problem. If it does start having problems, I’ll just switch to Safari. No big deal.

Anyway, that’s where things stand on those two projects. Hopefully I’ll get over the roadblocks soon, and be able to get them moving again.

And now, S5 1.1b5: try the testbed online, or download the 208KB ZIP file). There is one functional change since S5 1.1b4: the Home and End keys now jump to the first and last slides, respectively, when in the slide show view. In outline view, S5 will ignore those keystrokes (as it does all keys other than “T”) and allow the browser to do whatever it usually does. This is actually an addition, as neither key was being used in previous versions of S5.

There is still a major conflict between S5 and the AdBlock extension for Firefox/Mozilla. I don’t know what’s causing it, but I do know that if you’re running AdBlock and you load up an S5 presentation, you’re likely to find yourself trapped in the presentation, unable to use the back button or do much of anything else short of quit the program. Don’t say I didn’t warn you. I’ve started a thread in the AdBlock forum about it, and hopefully a solution will be found. I will not delay finalizing 1.1 for this, however. If a solution comes up after that and it calls for modifications to S5, then I’ll release a 1.1.1 version for AdBlock users.

A similar problem in Safari is still hanging about: in the outline view, the Page Up and Page Down keys are ignored. I still have no idea why. If anyone can find a solution, please let me know.

The PNG transparency fix introduced in 1.1b4 is still restricted to foreground images (i.e., those brought in via an img element). In the default directory, there are two .htc files. v1.1b5 uses pngbehavior.htc. The other file, iepngfix.htc, can theoretically confer alpha-channel recognition to background PNGs in IE/Win. I was unable to make this work, but the pieces are all there to experiment and find the fix I missed. The behaviors need to be attached using addRule calls in slides.js; there’s one there already. Hopefully a fix can be found in time to make it into 1.1 final.

Speaking of which, this is the last beta version before going final—I need to get it out the door so I can concentrate on other things for a bit. Bug reports beyond the AdBlock problem are welcome, and fixes even more so. I’m still open to feature requests for versions beyond v1.1, of course.

As promised, I now draw back the curtain on S5 1.1b4 (try the testbed online, or download the 263KB ZIP file). Here are the changes from 1.1b3:

“Meta” keys—function keys, command, control, alt, and option—should no longer be trapped by keys(). Thus, for those of you who discovered that you couldn’t use command-W to close the window in Firefox/OS X, that should be fixed; hitting F11 to invoke full-screen mode should also work; and so on, and so on.

While I was at it, I restructured keys() so that the only keystroke S5 pays attention to when in the outline view is “T”, to let you toggle back to the slide show view. Anything else gets passed up by S5. Despite this, Safari is still ignoring Page Up and Page Down while in the outline view. I can’t for the life of me figure out why.

At the suggestion of Romain Herault, I’ve modified clicker(e) so that it will ignore clicks inside of embed and object elements. This will allow you to interact with an embedded object, like a Flash file or a video, without advancing the slide show.

I’m aware that some people have run into problems adding videos to their presentations, but I’m not at this point able to take on the task of analyzing the problems and figuring out potential solutions. If someone else wants to work on fixes, there’s every chance I’ll be able to get fixes into the next version of S5, but very likely not this one. I have a similar stance regarding the long pause of unstyled content while the presentation loads. If someone devises a fix, I’ll study it for inclusion in the next version. I personally don’t have a problem with the pause, but I realize there are those who’d like to eliminate it, and if it can be done without causing problems I’ll certainly add it. Just likely not in this version.

PNG alpha channels are now honored in IE/Win, if only for img elements and not backgrounds. You can see this happening on slide 5 of the testbed. Woohoo! This happens thanks to Erik Arvidsson’s pngbehavior.htc, a copy of which now resides in the default directory. It may one day be replaced with IE7, but we’ll burn that bridge when we come to it.

The one sort-of drawback to using this approach is that it seems to require that the call to pngbehavior.htc sits in an embedded style sheet, or else nothing happens. This may very well have to do with the way the JavaScript monkeys around with external style sheets during startup. If any of you IE/Win JS gurus can figure out a way to get the behavior to fire without having to embed it into the presentation, that would be stellar. If not, it’ll just be documented as a “leave this in if you’re using alpha PNGs; otherwise you can take it out” thing.

One thing I’m still thinking about changing is the handling of the Home and End keys. Right now, they move you forward or backward by one slide, just like the arrow keys and several others. I’m thinking of making them jump to the first or last slide instead. I’m hesitant because making the change means it would be much easier for a presenter to accidentally jump to the beginning or end of a slideshow with a single keystroke, and you can already easily jump to any slide by typing the slide number and hitting Return. On the other hand, it’s a functionality that makes general sense, and it makes it much easier for a presenter to intentionally jump to the beginning or end of a slideshow with a single keystroke. What are your opinions?

At this point, I would anticipate that 1.1 will have one more beta version to eliminate any bugs that are discovered as well as adopt any optimizations, and then it’ll go final. I know there have been other feature requests (and may be more on this post, which is fine) but it’s really late in the beta cycle to add anything else. Any new features will have a chance to get into the next version.

I know it’s been a while since the last beta version of S5 was released, but between doing client work, flying to and from Albany (speaking of that, big ups to Dan “So Fine” Feinberg, Ed “The Shark” Skawinski, Ric “Darin” DiDonato, and the rest of the ITU Crew), diversions into PHP hacking, judging a markover contest, starting ballroom dancing classes, and spending time with my family, time has been a wee bit tight. Things will only get worse once March rolls into town, so I’m going to try to push 1.1 into final status before February is done.

In the meantime, I wanted to point to some cool things that I’ve heard about with regards to S5.

S5 was adapted to create an online tour of Epocrates, a popular medical reference package for handhelds. Kat uses it, as a matter of fact.

Pelle Braendgaard launched soapbx.com, a Web-driven S5 editor. You can pick a theme, write the content in a wiki-like form, and get a slideshow. It was apparently developed using Ruby On Rails.

Not quite ten hours after getting Pelle’s e-mail, a message from Lucas Carlson arrived regarding the creation of his own S5 creator: s5presents.com. It too was developed using Ruby On Rails.

Earlier today, Eric Eggert reported that S5 got coverage in the German version of Internet World magazine. I’m sort of hoping to see a scan of the article at some point. (Is it copyright infringement if I possess a scanned copy but can’t understand what it says? Just wondering.) Update: I’ve seen a copy of the article, so there’s no more need for scans.

In other, less specific news, I know that people have created or are working on creating translators of one kind or another. A popular request seems to be an OPML-to-S5 translator of some kind, and there’s always the Keynote-to-S5 idea. So I’m going to throw open comments for people to post links to S5-related projects, translators, and what have you. Heck, if you’ve recently done a presentation using S5, let’s see it, especially if you created a new theme. Just please leave this post’s comment clear of bug reports or feature requests. As of this writing, you can drop those on the S5 1.1b3 post, or else wait for the forthcoming post on 1.1b4. I hope that’ll go up in the next couple of days, but no promises.

Well, there was time off for the holidays, but now S5 is back and ready to increment its beta number. So, without too much ado: S5 1.1b3 (248KB ZIP file). Here’s the current testbed presentation, for those who just want to play around with it. Because of the long holiday break, I want to add another beta round or two just to work out as many kinks as possible. So this isn’t the last version before going final on 1.1; still, I’m interested in any problems that people encounter.

There’s really only one notable change from the previous version. I incorporated Jordan Liggitt’s “type slide number” code into this version. Why his, when others have done similar things? Because his version was well-marked with comments, and thus easy for me to figure out what he’d done and how he’d done it. So here’s how it works:

If the user types a number (multi-digit is allowed), the script stores the number. Inputting any non-number key clears the entered number.

If the user hits Enter/Return while there is a number stored, the slide show jumps to that slide. Any attempt to jump directly to a slide past the end of the slide show results in no action, although the number is still cleared.

Hitting any of the “Next” or “Previous” keys while there is a number entered causes the slide show to skip the number entered in the appropriate direction. Thus, entering “3” and hitting the space bar would jump forward three slides; entering 5 and hitting Page Up would jump backward five slides. Skipping past the end of the slide show will drop you on the title slide, which is something I’m thinking about changing, though I’m not entirely certain in what way.

I’m mulling over which keys should invoke which jumping behavior. For example, a couple of times I’ve typed a slide number and then hit the space bar to advance directly to that slide. Instead, I jumped forward by that number, which is correct but obviously not what I was subconsciously expecting. So I’m thinking about further restricting the keys that trigger the “jump n slides” behavior. Anyone have suggestions based on other slide show software?

At this stage, I’m likely to put off adding the multiple-author meta that I toyed with in earlier versions. The general need is still there, but I’m just not able to think the problem through with the kind of clarity I want. It will have to wait for another day. I’m also dithering a bit about the licensing, though at this point I’m leaning pretty heavily toward using Expat. My hesitation is largely based on my very desire to make the right choice so that I never, ever have to worry about it again, you know?

Behold: v1.1 beta 2 of S5. This version has a few of changes, all of which are being floated as trial balloons. Feedback on them all is appreciated.

Change in file structure. Now the ui/ directory will contain only directories. Thus, the default theme and scripts live in ui/default/. The reason for this is so that other themes can be put in the ui/ directory without things getting too confusing. For example, the current beta version has a v11b2/ directory (the beta’s version of ui/) that contains default/ and i18n/. Switching between them does require manual editing of the XHTML file, as I decided to punt on dynamic theme switching for now. This does, however, let an author carry around a single ui/ directory with a number of themes contained inside. That way, he might have four presentations to give, each one with a different theme, but all of them sharing the same ui/ directory.

Another advantage to changing the directory structure is that v1.0 presentations won’t be compatible with v1.1 themes. That’s actually a good thing, since the XHTML structure changed in small but significant ways in v1.1b1.

I thought about further splitting the default directory into “script” and “style” subdirectories, but this seemed like a bit of overkill. However, I’m starting to wonder how to handle things like IE/Win behaviors, which I suspect will be needed before too much longer. Why? Look at the images in the v1.1b2 testbed: they all have flat white backgrounds. I’d like to turn them all into PNGs with alpha channels, and I’d like to have those work as intended in IE/Win. The only way to make that work right now is via behaviors like this one. I’ll want to drop those behaviors into the default/ directory—my leading candidate would actually be IE7, once it gets close to being stable, mostly because it would add quite a lot to theme authors’ CSS toolkits. But all those behavior files could clutter up the directory, for which the easiest fix is to drop them all in a subdirectory… you probably see where I’m going with this.

That’s all for another version, though; v1.1 won’t have any behaviors packaged by default. It’s just on my radar, and I thought I’d toss it out to see if anyone has bright ideas.

A “header” file for themes. You can see an example at v11b2/i18n/00_head.txt. Briefly, this file contains material destined for the head element of any presentation that’s going to use this theme. In the case of i18n, the only thing that changes is the link element pointing to slides.css. Nevertheless, the header file provides all of the link and script elements that should appear in the presentation file. This should make it easier for an editor program to just grab each block and paste them over the existing block in the presentation file. It will also reduce ambiguity for anyone doing a manual edit to change themes. (Open header file, drag-select, copy; open presentation file, drag-select, paste, save, done.)

Changes to incremental class names. In earlier versions, incremental-display objects were marked with a class of inc, and any list that should start out already showing the first list item got a class of psf. I’ve changed those to incremental and show-first. The new names require a little more typing, but they’re much less ambiguous and therefore much more author-friendly. I’m interested to see if anyone has ideas for better names, especially for show-first.

As for the issue of licensing, I guess I’m little further along, but not all they way yet. The discussion did help me focus on what I want.

Presentation content should be under whatever license/terms the author desires. I do not want to force all S5 presentation content to be public domain, or GPL’ed, or whatever. If someone wants to give a highly confidential talk using S5, they should be able to put the most restrcitive license in the Universe on the content… but only on the content.

Themes should similarly have their licenses, or lack thereof, determined by each one’s author. If Joe Consultant wants to create a MyCoolCo theme and release it under copyright so that anyone can use the theme for their own presentations but nobody is allowed to re-use his images/look-and-feel/whatever outside the S5 theme, there should be nothing that stops him from doing so.

The S5 system (JS, core CSS, and the way they’re put together) should be forever free to use by anyone who wants to do so. It should be open for future development, in the event that I stop developing it and someone wants to keep going. This would also allow anyone to fork off their own variant on S5 at any time, but that’s okay too.

Here’s where it gets a little tricky: S5 should be able to be incorporated into any other project, commercial or not, without restriction. Attribution to the original source is to be strongly encouraged, but not an absolute requirement. But at no time, and in no way, should use of S5 in a closed environment ever cause a back-flow of restrictions to the original project.

In other words, anyone should be able to use S5 or a derivative work in their for-profit, wholly proprietary, patented software (or in any other circumstance). They can even make modifications, if they like. However, there should be no way for their use of it in a closed system to infect the original S5 source, and if their modifications make it into a future version of S5, the same should hold true. I don’t even know if that’s possible, but it’s in the spirit of the Share Alike terms in the Creative Commons licenses. You want to build S5 support into your $49.95 fully copyrighted and licensed editor? Fine, no problem. You want to extend S5 to do more cool stuff? Also fine, but freely contribute the changes back to the place you got the code in the first place. Don’t try to claim the original project has no right to the additions you made to it, or that the addition of those changes to the original project makes the whole thing yours.

(Not that I think any of you would do such a thing, but I have to think ahead to when S5 catches the interest of someone… well, let’s say less scrupulous.)

In a sense, I want to prevent major infection of licensing terms in both directions. I’m not entirely sure where that leaves me, but I’d like to work it out before 1.1 goes final.