Geoff Chappell - Software Analyst
Every page at this site should present acceptably even with a dumb browser. However, navigational support and some other refinements come with some impositions.
It is surely uncontentious and perhaps not even worth mentioning, but the pages at this site simply assume support for cascading style sheets (CSS). This means that I do not defend against browsers that do not support CSS, nor even do I provide for graceful degradation if CSS support is deficient.
The dynamic table of contents (TOC) requires that your browser supports frames. I do not quite assume such support, but neither do I attend very much to guiding you around the lack of it. The need for frames is avoided entirely if you disable scripts and do not get to the site via a URL that has “viewer.htm” in it. In other cases without frames support, you may be treated to an error page and be asked to follow directions.
More contentious is that navigational support depends on client-side scripting. Many refinements, such as tooltips to elaborate on why inline text is bold or italic, also work through scripts. I write this text and I lay it out with the expectation that scripts will run. It will read better for you if the scripts run as intended.
That said, I do anticipate that scripting may be disabled and I intend that what you see without scripting should still be usable. Though the navigational support will be greatly reduced, you may be sure of seeing all of each page’s text or at least some notification of what you are missing.
This site is not one of those, which are much too frequently encountered, that give you a blank page because you had the temerity to browse with scripting disabled. Neither will this site dismiss you with notices such as “This site requires JavaScript to enable full functionality” when actually presenting you with no functionality. We should all be embarrassed that our world lets people get away with such euphemism. (That particular one is from Microsoft.) If you browse without scripting and feel insufficiently supported, then please write to me about it and I will do what I can to support you better for reading my work.
In practice, and certainly contentious, the scripts at this site may not run as intended unless your browser is Internet Explorer.
In supporting Internet Explorer, I have set out to avoid features that are marked in Microsoft’s documentation as requiring very recent versions of Internet Explorer, and I have checked briefly that the scripts work with Internet Explorer versions as far back as 5.0 (from Windows 2000). I do not expect to check version 5.0 or even 6.0 every time I edit the scripts. Indeed, I have several times come close to abandoning version 5.0, e.g., because of inadequate support for regular expressions. If you use these old versions and suspect a problem, then please write to me about it and I will do what I can.
When first writing these scripts, very much as a novice, my reference material was Microsoft’s, both for the JScript language and for what Microsoft has made scriptable in its browser. I have eventually reviewed the scripts for at least theoretical conformance to published standards and I have paid some attention to compatibility with Mozilla Firefox (version 3.0.10) in particular. Again, I do not expect to keep checking different browsers every time I edit the scripts. If the scripts “don’t work” for some browser other than Internet Explorer, then please write to me about it, but please also realise that attending to browser issues can never be more than second to building the site’s content, and it will more likely always be the lowest of low priorities. I simply do not have the resources—or, frankly, the will—to test browser after browser after browser. Indeed, I don’t have the will even to possess multiple browsers, and I don’t understand why anyone would.
If you think that by dismissing other browsers I pander to Microsoft’s dominance, I ask you to consider that I have done very much more than my fair share over many years to expose freely the sorts of programming details that are essential knowledge for any informed assessment of what Microsoft actually does in its software. Of well over a thousand pages of content at this site, almost all report on Microsoft’s products, often with critical comment supported by a technical depth that you likely cannot find elsewhere.
To require scripting is already as much compromise as I care for. Even simple scripts can cause all sorts of trouble, including to leave the browser seem hung and to induce the browser (and thence Windows) into stress conditions.
For instance, click on the “Show Demonstration” button immediately below to reveal both a small script and a “Run Demonstration” button. Click the button to run the script, which is just a simple function that keeps reallocating memory for an ever-larger string. Because the size increases only by one character each time, this loop executes only very slowly. Depending on the browser, it can be quite some time (hours, even) before the browser’s defences against hung scripts get triggered. For Internet Explorer 7.0 on Windows Vista, the browser is meanwhile hung. It does not respond even to its close box or system menu. You will likely want to close it from the Task Manager rather than wait for either the browser or Windows to notice that anything is wrong.
There is a demonstration here. To see it, please enable scripting and then refresh this page.
The second demonstration is similar, but places the browser under more stress more quickly and may trigger the browser’s defences much sooner. In this script, the string is doubled in size on each loop. Before very long, the browser is seeking such large amounts of memory for this string that all its requests are failed. Yet if your browser is Internet Explorer, the script is not aborted. Each loop continues to execute, unsuccessfully of course, but relatively fast. The tally of executed statements quickly reaches a configurable (though apparently undocumented) limit, so that the browser finally alerts you and offers to stop running the script. You should accept this offer.
There is a demonstration here. To see it, please enable scripting and then refresh this page.
Note that scripts can get run in all sorts of ways that may not be obvious to you while you read a page. Clicking here will run the first of the preceding demonstrations. Just passing the mouse over here will run the second.
The preceding two demonstrations cause trouble just by doing on a large scale things that are entirely reasonable on a small scale. Scripts can, however be devised to make specific mischief of a known defect in a browser. The script in the next demonstration targets Internet Explorer for a defect (in version 5.5 and higher) that gained some notoriety in January 2010 as having allegedly been used in cyber attacks of Google and others. The code is deliberately erroneous. An HTML element is created, inserted into the document and made the source of an event. The event handler saves a clone of the event object and removes the source element from the document. The defect is that the source element is freed from memory while the clone retains a pointer to it. By using this pointer after the event, the script typically triggers an access violation. Do not proceed with this demonstration unless you are prepared for Internet Explorer to crash:
There is a demonstration here. To see it, please enable scripting and then refresh this page.
As with the other demonstrations, this could easily be made to work without any user activity. Just visiting a page would bring Internet Explorer down. And that’s the good outcome: a program’s use of freed memory can sometimes be exploited so that the program doesn’t crash but is instead diverted according to the exploiter’s wishes. It may be that scripts are usually safe but they have their dangers and I therefore do mean to support you if you prefer to browse with scripts disabled.
If you browse this site with caching disabled, your experience will be very much poorer. I imagine it would be poorer just from repeated requests for scripts and style sheets, but you will be hit especially hard by asking over and over for tiny image files in the Table of Contents. Rightly or wrongly, the Table of Contents is designed with the expectation that the whole thing is downloaded once and cached.
Nothing at this site cares about your settings for things like cookies and Java applets, and certainly not for ActiveX controls or any sort of plug-ins. I try never to let these things loose on my computer when I browse the web, and I grumble at the many sites that misbehave, even embarrassingly badly, when these things are disabled. I therefore will not push them onto anyone else.
If you find anything at this site that causes you any concern for your privacy or for your computer’s security, and which isn’t clearly marked as a demonstration, then please believe that I did not intend it and please write to me about it so that I can know to correct it.