Posts from July 2005

Comment Turbulence

Published 18 years, 1 month past

Some of you may have tried to comment recently and been hit with a “comments are closed for the time being” error.  That was Gatekeeper, actually, and it was being tripped even by valid responses to the Gatekeeper challenge.  The weird thing is that some people were able to comment, whereas others were not.  I have no idea why this was happening.

The point of this being to say that I’ve updated Gatekeeper to return a more helpful error message, and also believe some changes I made should make gatekeeper less random.  If I’m wrong and you get an error, please use the e-mail link in the error message to send the error to me.  If I’m right and you get no error, then no worries.

If I get a lot of error reports, I’ll hobble or disable Gatekeeper, but I hope it doesn’t come to that.  We’ll see.  In the meantime, my sincere apologies to anyone who got bitten by this bug, and I hope things will be better from here on out.

Opera and S5 1.1

Published 18 years, 1 month past

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 18 years, 2 months past

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!

On Blinksale

Published 18 years, 2 months past

Partially because it’s been touted as a great XHTML+CSS-based application, and partially because I could use better invoice management, I signed up for a free Blinksale account.  Having spent some time fiddling around with it, I’ll be the first to say that I’m pretty impressed by what’s under the hood.  The markup is just about as clean as a Web application gets, and it generally uses the right elements in the right places.  It might be a little div-heavy, but that’s not an easy thing to avoid.  The gang at Firewheel has done solid work there.

On the other hand, the visual design of Blinksale totally hurts my eyes.  Those are some amazing shades of green, boys.  I really wish they didn’t clash in quite that way.  Also, the entire application feels rather like a copy of Basecamp, from the way it’s organized to the ability to get activity feeds to the “Remember me for 2 weeks” login option.  Those are, of course, all nice options to have in this sort of application, but they still feel like copies.

The help system, on the other hand, turned out to be an enormously deep resource once I drilled in a bit.  Just about anything you could possibly want to know about Blinksale is in there somewhere, I’d wager.  Firewheel has definitely raised the bar there, and gets an enthusiastic round of applause for it.

Beyond that, Blinksale seems like it would be great for hourly consulting, or for invoicing items that are shipped to the customer.  For my purposes, though, it isn’t really an invoicing system.  Most of my work involves traveling to clients to conduct in-person training, so in addition to the consulting fee, there are expenses to bill and receipts to submit.  In some cases, there are clients who would likely refuse to accept a web-based invoice.

So I could use it as a way to track which invoices have gone out and which have been paid, but I could do that with an Excel spreadsheet or a Filemaker Pro database, or heck, I could even whip up my own little PHP/mySQL solution.  Adding in all the extra stuff, like e-mailed invoices and reminders and thank-yous, would be time-consuming, and it would be a truly major effort to add my own PayPal integration, as Blinksale has done.  It probably wouldn’t be anywhere near as polished (although it also wouldn’t have those retina-searing color combinations).  For basic invoice tracking, though, I’d be able to do everything Blinksale offers me, and not have limitations like only being able to store a total of three clients, or being limited to three invoices per month.

Now, remember, I’m talking about what it will do for me.  I’d like to stress that my situation is somewhat unique: not many freelance consultants earn a living in training.  For a freelance designer or even a small design shop, I can totally see Blinksale as being a great application to use.  I doubt I’ll see a need to upgrade to a paid account—but your mileage, as ever, may vary.

Mail Turbulence

Published 18 years, 2 months past

Between last night and late this morning, no mail was delivered to any address (mine, Kat’s, anyone else) at  This happened because the mail server was so overloaded by the latest joy and sunshine from our bretheren in the mass-mailing industry that it basically died.  Those lovable little spammers—is there anything they can’t ruin?

I’m told that, in theory, any mail that was sent during that period should eventually make its way to us.  However, there’s always a chance that an upstream mail server would decide to drop the mail instead of retry delivery, so there’s no guarantee of its arrival.  If you’ve sent us anything critical in the last 24 hours, you might want to send it again, just to be on the safe side.  If it’s non-critical, better to wait a few days to see if there’s a successful redelivery attempt.

Help Wanted: IE/Win Script Weirdness

Published 18 years, 2 months past

Okay, JavaScript / DOM scripting gurus, I need your help.  Explorer for Windows is completely baffling me and hopefully one of you out there can determine what’s making it act so peculiar.  To see the problems, go to the debug version of HYDEsim in IE/Win and compare the the results to those in Firefox.

Problem #1 is that the rounding function I wrote doesn’t seem to be working right (though this could be an effect of VirtualPC).  Here’s the function:

function round(x,dp) {
	var rt = Math.pow(10,dp);
	return Math.round(x*rt) / rt;

That’s it.  All it’s supposed to do is round off a number to the given number of decimal points.  Thus, var test = round(3.1415926539,3) should return 3.142.  In IE/Win, instead of the expected 0.71, I’m getting results like 0.7100000000000001.  Huh?  Where the heck did that come from?  Is this fallout from that Intel rounding bug everyone was smirking about five years ago, or what?

Problem #2 is perhaps more obvious: the Great Big Circles on the map.  I’m creating the GIcon objects correctly, passing in the height and width of each one.  The top left corner placement is correct for each marker.  They just haven’t been resized in any way at all, and so are being drawn at their inherent 1000-by-1000 size.  Is this a breakdown in IE/Win, the Google Maps API, or something else?  I tried passing pre-rounded values and it didn’t seem to help.  Am I stuck here, or is there a solution?

Many thanks for any help you can provide.

HYDEsim Update

Published 18 years, 2 months past

I’ve updated HYDEsim to include a key explaining the various overpressure effects—it’s at the bottom of the page—as well as to use generally improved code, having discovered the joys of for (var x in y).

I’ve also been pounding my head against the Google Maps API as I try to figure out how to read and set the map type correctly, so I can include the map type in the link parameters.  What’s in the documentation seems wildly different from what I’m getting.  When I query map.getCurrentMapType(), for example, I don’t get a type, I get a whole array of stuff that looks insanely cool and useful but is all apparently undefined and therefore useless.

On an even less happy note, the tool has completely broken in IE/Win.  Given the lack of anything resembling a useful JavaScript console in Explorer, I have no idea what’s happening, or why.  Sorry about that, IE users.  It works fine in Firefox and Safari.  If someone figures out the problem, let me know in a comment.

In the meantime, here are some approximations of a few famous historical high-yield explosions:

And, just for extra fun, here are two fictional explosions.

That last one assumes I got the yield right, which I may not have, since I don’t own the book and haven’t read since it came out in hardcover.  If I remembered incorrectly, let me know what the actual yield was (not the incorrect yield that was first estimated, but the correct one that came later in the book) and I’ll correct the link.  Thanks.

Update: thanks to assistance from some helpful folks and some fun hacking around IE/Win’s flaws, the tool is back to working in IE/Win.  Yay.

Why I Blog

Published 18 years, 2 months past

Molly asks why we blog.  I don’t know why you blog, but I know why I blog.  Therefore, it’s time to blog about blogging.  (Not nearly so brilliantly as did Shelley, I admit.)

Though I still detest the word “blog”.  I’m not too keen on the chronoillogical order of posting, either, but that’s a whole other barrel of fish.

My journal here is a way of communicating, which is one of the most powerful drives humans possess.  Just about everything I’ve done professionally has had, at its core, the intent of making it easier for people to communicate.  Back at CWRU, for example, I wrote a series of HTML tutorials in order to help lower the barrier to publishing information online.  For me, started life as a way to connect with readers of my then-forthcoming O’Reilly book, as well as with folks who were already familiar with my work in CSS.  Posts were mostly technical or book-related at first.  Over time, I started to mix more of myself and my personal view of the world into the site.

Like Molly, I’ve gotten negative feedback here and there.  Some people have attacked me for views I’ve expressed; others berated me for wasting their time with non-technical posts; a few even insulted and belittled me for daring to not precisely meet their expectations.  I did eventually set up separate technical and personal syndication feeds, along with a combined feed, although most of the reason I did it was so that my non-technical friends could keep up with the site, not the other way around.  I find it slightly depressing that the technical feed is one of the most popular URLs on the site.  Apparently, many of my readers are only interested in what I can teach them, and not in who I am.

In that light, it might seem foolish to continue putting time and energy into personal posts,  but I am steadfast in my conviction that suppressing the personal side of the site would be far  more foolish.  I can summarize why I believe this with a single incident.

Early this year, I posted a personal entry about communicating with Carolyn via sign language.  Soon after, I got e-mail from a reader—a name many of you would recognize, as it happens—thanking me for that post.

His son, you see, does not speak, and never has.  The son is more than old enough to be verbal, and is in all other ways mentally normal and healthy.  He has simply never started to talk.  It had never occurred to the correspondent that sign language might be an option for communication.  Learning that Kat and I had successfully taught sign language to Carolyn, a child less than half his son’s age, was a revelation for him.  It was, potentially, a truly life-changing moment for his entire family.

That is why I will never stop posting my thoughts, sharing my views, and trying to connect with readers on a personal level.  That is why the occasional complaints or flames that I’m too personal or too facile or too arrogant or too liberal or too whatever just roll off my back, as interesting and injurious to me as last month’s weather report.  And that is why I think the people who only read technical posts, here or on any site, are doing themselves a grave disservice.  They’re closing themselves off to more than they can possibly know.

Browse the Archive

Earlier Entries