Stories
Slash Boxes
Comments

News for nerds, stuff that matters

DHTML Utopia

Posted by timothy on Mon Aug 01, 2005 04:00 PM
from the ah-heaven dept.
Bruce Lawson submits the review below of Stuart Langridge's Excellent guide to creating dynamic web pages; scalable and sensible., writing "Don't be put off by the title: the DHTML here bears no resemblance to the stupid Web tricks of the late 90s that allowed animated unicorns to follow your cursor or silly Powerpoint-like transitions between Web pages." Read on for the rest.
DHTML Utopia: Modern web design using JavaScript and DOM
author Stuart Langridge
pages 300
publisher Sitepoint
rating 8
reviewer Bruce Lawson
ISBN 0957921896
summary Excellent guide to creating dynamic web pages; scalable and sensible.


This book is the opening salvo in the latest battle in the Web Standards war -- the battle for unobtrusive JavaScripting, or Unobtrusive DOMscripting as many call it, in order to rid it of all the negative connotations that "DHTML" and "JavaScript" bring. Combined with the non-standard XMLHttpRequest object, it's sometimes referred to as "Ajax". Terminology aside, though, what are the substantive differences between the old-skool and the "modern" of the title?
  • Graceful degradation. A great example of this is Google Suggest in which the DOMscripting enhances functionality by making the page feel more responsive, but if you don't have JavaScript for some reason, the page still works.
  • Separation of structure, presentation and behaviour. The DOMscript deals with the behaviour in the same way as CSS defines the presentation in the brave new Web standards world, and the three remain separate. The html has no JavaScript in it at all -- everything is handled by in separate code files.
  • No browser sniffing. This aims to future-proof code by testing for features rather than sniffing for browser name and version. So, before using the TimeTravelCureCancer method, the current browser is tested to see whether it's supported. If it is, the script continues. If it isn't,the script silently fails with graceful degradation.

Theory sounds cool -- how's the damn book?

I was pleasantly surprised by how quickly the book gets to work. Even before page numbering begins, the introduction has a lucid and compelling argument for using HTML 4.01 rather than XHTML as the markup language of choice.

Chapter 1 has a brief (6-page) overview of the importance of valid code and separating presentation into CSS, and a short description of the unobtrusive nature of Langridge's scripts: no script in the mark-up at all; instead, the .js files contain "event listeners." The reasons why this is desirable are promised later.

Chapter 2-4: The basics

Now that document.write in the html is no longer needed, you need to know the "proper" way to add text or elements to a Web document. So Langridge gives us a tour of the DOM, showing how to walk the DOM tree and create, remove and add elements to the tree. It's methodical, and by the time I was beginning to get a bit tired of theory and thinking that you'll have to prise document.write out of my cold, dead hands, we get an "Expanding form" which allows us to expand a form ad infinitum to sign up as many friends as you want to receive free beer, without ever going back to the server. (You can see such a thing in action in gmail, when you want to attach multiple documents to an email).

I started to warm to the author and his style. 33 pages into the book, and we get a real-world working example to examine (I like my theory liberally garnished with practice). I also feel a kinship with authors who fantasise about mad millionaire philanthropists giving away beer.

By chapter 3, we've really got going. Apart from one rather pedantic edict (the event is mouseover, the event handler is onmouseover and we should separate the nomenclature, even though it makes no practical difference), the focus here is on real-life browsers. And, as we all know, in Web dev books, real-life browsers means grotesque exceptions to our ideal-world rules .Strangely -- and oddly satisfyingly to this PC user -- the culprit isn't only the perennially despised IE/ Win; shiny Safari comes in for a good bit of stick!

The real-world example here is a data table that highlights the whole row and column of any cell that's being moused-over. Now, in any modern browser except for IE/ Win, the row could be given a hover pseudoclass (IE/ Win only allows :hover on anchors). But as there is (weirdly) no HTML construct for a column, this effect can only be achieved through DOMscripting. What the script does is to dynamically append a class name to every cell in the row and column at run time -- and the pre-defined CSS file determines the styling of that class.

Herein lies an advantage in Unobtrusive DOMscripting: you could just take this script and plug it into a Web site without changing any of the html (except to add a link to the script file in the head). But the script is relatively complex for a newbie to code, and for the techniques to be widely used, I suspect that the billion old-skool cut'n'paste JavaScript sites will need to be replaced with a single, canonical library of modern scripts for people to cut and paste from. For those who find CSS challenging, JavaScript is probably even more complex. .

Chapters 5 - 7: blurring the division between Web UI and application UI

It's a truism that the Web has set back UI development some years -- in fact, back to the old dumb-terminal paradigm of filling in a screen full of data, pressing the button to send it back to the mainframe and waiting for the next page to be sent -- or the old one returned with errors noted.

Langridge shows that we can make the experience smarter than this, going beyond the traditional JavaScript client-side validation interactivity by adding animation to allow text to fade in and out over time, styling tooltips to be sexier than the default yellow box and which can gently appear into view rather than the browser default on/ off state are examples that struck me.

When I first read these, I thought they were cheesy gimmicks -- the modern equivalent cursor-following unicorn -- until I considered more deeply and realised that many of the UI elements that we enjoy in modern desktop apps are precisely these small, cosmetic effects: abrupt transitions, lack of transparency, sharp edges to UI widgets all feel like old operating systems or clunky Web pages.

It's not all touchy-feely; we get auto-complete text entry, degradable calendar pop-ups, flyout menus and lessons in OOP, encapsulating code for re-usability, and avoiding Internet Explorer memory leaks.

Chapters 8- 10: seamlessly working with the Server

So far, so client-side. Where Unobtrusive DOMscripting really gets developers juices flowing is the ability to communicate with the server without obviously refreshing the page. Chapter 8 takes you through a variety of methods. Some, like the hacky iframe method or hideous 204 piggyback method are so gruesome that I breathed a sigh of relief loud enough to wake the cat when I finally turned the page to read "XMLHTTP". This method (which is non-standard and introduced by Microsoft) has ushered in the Next Great Web Thing: asynchronous communication with the server. Langridge walks through using the Sarissa library to make a user registration form that checks whether the user name you choose is taken, and if so, suggest some alternatives without refreshing the page.

There's a lot of unresolved accessibility problems with the Ajax method (how does a screenreader alert the listener to the fact that something new has appeared on the page? How do they navigate and hear the new stuff in context?) and while it is laudable that Langridge notes these issues exists, I'd hoped he would have suggested some solutions. He doesn't, but as he's a member of the Web Standards Project's DOMscripting task force I'm guessing it's being worked on.

The project that really kicks ass in this section is a file manager, like the one in most people's Web site control panels, where you can actually drag and drop the icons, like an operating system, and the server does the work. Langridge carefully goes through all of the steps, all of the pitfalls and all of the code needed to make this happen in any modern browser.

It doesn't take a lot of imagination to realise just how this could revolutionise the Web experience. Drag and drop products into a shopping cart. Drag the shopping cart to the checkout icon. Moving money around bank accounts in some integrated internet banking application. The possibilities are huge.

Conclusion

The whole technique of unobtrusive DOMscripting needs further research before it's ready for prime time -- particularly from an accessibility point of view, but then as an accessibility bore you'd expect me to say that. I think it's beyond question that there's ideas in here that radically enhance the usability of Web-based applications by making them more intuitive and more like the desktop drag-and-drop interface we know from our desktops.

This is a good-humoured, thoroughly-researched book that combines theory with practical learn-by-doing examples. To this reviewer, the code appears scalable and sensible. This book is never going to appeal to the quivering aesthete designers -- probably because it's fundamentally about code. But precisely because it proposes a complete separation of code and design, it facilitates the advancement of the Web.


You can purchase DHTML Utopia: Modern web design using JavaScript and DOM from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
This discussion has been archived. No new comments can be posted.
Display Options Threshold:
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
  • Unicorns (Score:5, Funny)

    by onion2k (203094) on Monday August 01 2005, @04:07PM (#13217497)
    (http://www.phpgd.com/)
    stupid Web tricks of the late 90s that allowed animated unicorns to follow your cursor

    If my boss reads Slashdot I think I know what I'll be asked to add to the corporate website tomorrow morning..
  • Birth of Ajax (Score:4, Informative)

    by webword (82711) on Monday August 01 2005, @04:07PM (#13217504)
    (http://imsimple.com/)
    For your reference, this is how "Ajax" got started. I'd say about 75% of the article is useless, but about 25% is actually useful. The main value of the article can be summed up in two words: Mi>eye candy. Jesse James Garrett is good with graphics.

    Ajax: A New Approach to Web Applications [adaptivepath.com]
  • Why do it yourself? (Score:5, Interesting)

    by MosesJones (55544) on Monday August 01 2005, @04:10PM (#13217528)
    (http://service-architecture.blogspot.com/)
    The challenge with Ajax, and complex DHTML is that a slight error produces big problems. Its a shame that the book doesn't look at the tooling approaches for instance the Ajax plug-in [java.net] that Sun have released (via Open Source). DHTML and these active elements can be great, but as a practice I'd be more inclined to have a few people invest time in developing components that the majority of people can use, rather than having lots of people trying to understand the complexities, and buggering it up.

    Interesting technology, but too easy to use REALLY badly. It would have been nice if the the book had covered how to build SOLUTIONS using DHTML, rather than focusing on how an individual can use it.

  • by DevanJedi (892762) on Monday August 01 2005, @04:14PM (#13217558)
    (http://www.scienceaddiction.com/ | Last Journal: Thursday June 16 2005, @08:20PM)
    Only in the past few years has client-side web scripting come out of its 'kiddie' version to demonstrate some really cool hacks (many google examples come to mind) which- coupled with CSS- have changed how we interact with web sites and how they are built. Standards-compliance and strict separation of content and presentation makes CSS+'AJAX' seem like a leap forward in technology when it is actually just a prudent and smart use of old technology. It is a matured technology and with the latest news of IE7 coming closer to compliance, things will only get better. Now if only we could get those kids at home building their first web pages with MS Frontpage to learn...
    • 1 reply beneath your current threshold.
  • Please... Don't (Score:4, Insightful)

    by esconsult1 (203878) on Monday August 01 2005, @04:14PM (#13217559)
    (http://www.afrobattle.com/ | Last Journal: Monday April 22 2002, @12:06PM)
    It doesn't take a lot of imagination to realise just how this could revolutionise the Web experience. Drag and drop products into a shopping cart. Drag the shopping cart to the checkout icon. Moving money around bank accounts in some integrated internet banking application. The possibilities are huge.
    I'd really hate having to do the above. What would be better and smarter (IMHO), is to:
    1. click on the "Add to Cart" button
    2. AJAX adds the product to the card without refreshing the page.
    It seems to me that AJAX works worderfully in limited cases that gets rid of the annoying browser refresh problem.

    Expect to see flooding the internets(tm) over the next few months annoying over-use of AJAX in every single way that programmers can -- even if they don't need to.

  • Ruby on Rails (Score:2)

    by threaded (89367) on Monday August 01 2005, @04:15PM (#13217560)
    (http://www.threaded.com/index.html)
    Ruby on Rails is really sweet for that AJAX stuff.
    • Re:Ruby on Rails by willCode4Beer.com (Score:2) Tuesday August 02 2005, @10:53AM
      • Re:Ruby on Rails by JamesOfTheDesert (Score:3) Wednesday August 03 2005, @11:37PM
      • 1 reply beneath your current threshold.
    • 1 reply beneath your current threshold.
  • Bookpool has this book for $24.95 with no club to join. Bn.com has it for $39.95 (save $5 if you're a club member).
  • I give up (Score:2, Interesting)

    by Locke2005 (849178) on Monday August 01 2005, @04:30PM (#13217657)
    (http://whitehouse.com/)
    Why is HTML 4.01 better than XHTML?
    • Re:I give up by goldspider (Score:2) Monday August 01 2005, @04:36PM
      • Re:I give up by eddy the lip (Score:2) Monday August 01 2005, @05:11PM
        • Re:I give up by Brandybuck (Score:2) Monday August 01 2005, @06:14PM
          • Re:I give up by AstroDrabb (Score:2) Monday August 01 2005, @07:55PM
            • Re:I give up by Brandybuck (Score:1) Monday August 01 2005, @08:35PM
              • Re:I give up by serber (Score:1) Monday August 01 2005, @08:56PM
              • Re:I give up by Brandybuck (Score:2) Monday August 01 2005, @10:12PM
              • Re:I give up by Baricom (Score:2) Tuesday August 02 2005, @02:03AM
              • Re:I give up by Brandybuck (Score:2) Tuesday August 02 2005, @12:04PM
              • Re:I give up by Baricom (Score:2) Wednesday August 03 2005, @12:59AM
              • 1 reply beneath your current threshold.
            • Re:I give up by Pollardito (Score:1) Tuesday August 02 2005, @01:43AM
    • simple by Anonymous Coward (Score:2) Monday August 01 2005, @04:48PM
      • Re:simple by bad-badtz-maru (Score:2) Monday August 01 2005, @08:15PM
      • Re:simple by Professor Cool Linux (Score:1) Monday August 01 2005, @10:54PM
        • Re:simple by Baricom (Score:2) Tuesday August 02 2005, @02:11AM
          • 1 reply beneath your current threshold.
        • Re:simple by zootm (Score:2) Tuesday August 02 2005, @06:16AM
    • Re:I give up by gusnz (Score:3) Monday August 01 2005, @04:52PM
      • Re:I give up by rebug (Score:1) Monday August 01 2005, @05:09PM
        • Re:I give up by Linus Torvaalds (Score:2) Monday August 01 2005, @08:38PM
      • I see by Locke2005 (Score:2) Monday August 01 2005, @06:54PM
    • Re:I give up by brianmf (Score:2) Monday August 01 2005, @05:19PM
      • 1 reply beneath your current threshold.
  • browser problem (Score:4, Interesting)

    by MatD (895409) on Monday August 01 2005, @04:39PM (#13217727)

    A lot of the annoyance of 'web apps' comes from the fact that browsers can't just refresh a simple tag on the page from the server. They have to re-render the entire page, causing a jarring visual experience for the user.

    Browsers should be able to realize that since the url is the same, diff the previous stream, and the current one, and modify the current page inline.

    As it stands now, web developers have to jump through a lot of hoops to get that sort of functionality. They shouldn't.

  • Stupid Web Tricks From The 90s... (Score:1, Offtopic)

    by creimer (824291) on Monday August 01 2005, @04:49PM (#13217781)
    (http://www.creimer.ws/ | Last Journal: Friday January 26 2007, @12:40PM)
    ... stupid Web tricks of the late 90s that allowed animated unicorns to follow your cursor or silly Powerpoint-like transitions between Web pages.

    Wow! I been running my website [creimer.ws] since 1998 and I never came across a web book with stupid web tricks like that. Did I missed something?
  • It's still just stupid hackery (Score:2, Interesting)

    by melted (227442) on Monday August 01 2005, @04:59PM (#13217859)
    (http://slashdot.org/)
    Granted, the reach is good and for some tasks there's nothing better than web UI, but as soon as you find yourself in need of building something more than just a bunch of web pages with links it all turns into mind-boggligly weir hackery. You start using javascript for layout. You need to manage state. The most trivial UI things become a fucking mess of JS and CSS "hacks", etc., etc. It's also a pain to turn all this crap into components for future reuse, so chances are next time you do something similar you'll have to reinvent the wheel.

    The web was originally invented for publishing hyperlinked documents. It's nice to see it come this far, but web as it is is not designed for writing _applications_.

    As far as I'm concerned XAML and XUL are the way of the future. Do as much as you can on the client, communicate only what you need to the server, don't re-render everything every time the user needs to change something, concentrate rendering on the client as well.

    Remember these simple mantras if you plan on doing a lot of web development in the coming years.
  • Good review! (Score:2)

    by gusnz (455113) on Monday August 01 2005, @05:03PM (#13217896)
    (http://www.twinhelix.com/)
    I haven't read the book myself, but well done on a coherent review that covers the resurgence of unobtrusive scripting. The author [kryogenix.org] is quite well respected in the community, and I can only hope books like these begin to replace the "omg dhtml netscape 4!!11one" fare usually found on shelves.

    I think AJAX et. al. could be a bit of a diversion though from the ideals of "unobtrusive scripting" though. Many sites using XMLHttpRequest and similar techniques aren't easy to degrade in older, non-JS-supporting browsers. GMail, for instance, had to write another whole separate version using plain HTML for legacy useragents; this seems a little beyond the "progressive enhancement" ideals in which JavaScript adds to, rather than replaces, essential page functionality. I'm putting together my own LGPL'd AJAX library [twinhelix.com] that operates via plain HTML links and forms (and yes, those IFRAME hacks you speak of are really hard to get right!). So in theory it should degrade well.

    And what the heck, while I'm self promoting, here's my free event manager [twinhelix.com] script that works around IE memory leaks [microsoft.com], as well as making the whole cross-browser-event-handling stuff easier (which is still the main annoyance when writing cross-browser code -- hurry up and implement DOM Events, MS!). Hope any other JS coders here find it useful.
  • by baadger (764884) on Monday August 01 2005, @05:40PM (#13218130)
    Can anyone tell me why Microsoft's "XML Data Islands [w3schools.com]" didn't take off in the mainstream given that IE has had a 90% browser share? For external XML they are simple and neat and don't require any javascript whatsoever for basic fetch-and-display use (but you can enhance functionality using javascript).

    Here's a demo [w3schools.com] (use IE5 or later). I figure they must be in use somewhere because there's even a Mozilla article [mozilla.org] on getting them working in Mozilla.
  • by zymano (581466) on Monday August 01 2005, @06:21PM (#13218377)
    Websites are now using these instead of regular popups to get by the popup blockers.

  • For your enjoyment (Score:2)

    by Eil (82413) on Monday August 01 2005, @06:22PM (#13218379)
    (http://bityard.net/ | Last Journal: Thursday August 08 2002, @04:18PM)

    Animated Unicorns. [chrismullins.net]
    • 1 reply beneath your current threshold.
  • by geniusj (140174) on Monday August 01 2005, @06:28PM (#13218418)
    (http://www.ods.org/)
    For an example of drag and drop in use, check out Panic's website [panic.com]
  • Extreme DHTML? (Score:1)

    by Bemmu (42122) <lomise@ u t a.fi> on Monday August 01 2005, @07:28PM (#13218696)
    (http://www.bemmu.com/ | Last Journal: Friday August 22 2003, @10:01AM)
    Try this small DHTML thingy we made :-)

    http://assembly.mbnet.fi/asm05/compos/browser_demo /pure_javascript_demo_by_IKU.zip [mbnet.fi]

    If you use 800 x 600 resolution you can see it fullscreen. It placed third in the Assembly 2005 demo competition. IE recommended for watching, though it runs on Firefox as well.
  • Separate this... (Score:1)

    by Eric Pierce (636318) on Monday August 01 2005, @08:04PM (#13218840)
    I'm so far ahead of this guy it hurts...

    My pages are nothing but a single, empty html and body tag... and EVERYTHING is dynamically cross format focused in Nashian triplicate (yeah! it goes there) on the back-end.

    You cannot touch this!
  • by squirrelhack (785883) on Monday August 01 2005, @08:52PM (#13219012)
    Whenever I see books like this, I always wonder why people do not use the dynlayer api. DynLayer Api at SourceForge [sourceforge.net] This has been around for quite sometime. Handles drags, moves, events, layers, z index, etc. Everything. True, it is now a bit big, but do like I do and remove what you do not need and away you go. You can AJAX as a separate piece.
  • table of contents? (Score:2)

    by subtropolis (748348) on Monday August 01 2005, @10:49PM (#13219472)

    Neither B&N nor Amazon see fit to display the TOC for this book. If somebody knows of somewhere it's listed could you post that here? I'd especially like to know if 1/3 of the book is appendices we don't need.

    Good review, BTW. Too bad about the book's cover. What's up with that? Although it did make me think of the Brazil dream sequences. Perfect for those dreary winter afternoons in the cubicle farm.

  • by Evets (629327) on Tuesday August 02 2005, @01:34AM (#13219907)
    (http://www.stevekallestad.com/ | Last Journal: Thursday May 31, @03:02AM)
    Funny, this book arrived today at my house. I was hoping the section on AJAX would be more extensive, but it's relatively slim.

    IMO, the layout of the book is good and it's written well - from first glance anyways.

    Can anybody point out any strong online resources on AJAX development? I guess it's not that difficult to grasp, but I would like a little more of a foundation.
  • by beowulfcluster (603942) on Tuesday August 02 2005, @01:44AM (#13219934)
    If '404 not found' is graceful degradation I don't want to see ungraceful degradation.
  • AJAX (Score:1)

    by Elixon (832904) on Tuesday August 02 2005, @04:27AM (#13220260)
    (http://www.webdevelopers.cz/)
    I love AJAX. It's fast for development and powerfull. JS+XUL=POWER ;-)
  • by curious.corn (167387) on Tuesday August 02 2005, @06:42AM (#13220498)

    ... as a herd of corporate lawyers stumble against each other to file a new non obvious technology: drag & drop... but on the internet!

    It doesn't take a lot of imagination to realise just how this could revolutionise the Web experience. Drag and drop products into a shopping cart. Drag the shopping cart to the checkout icon. Moving money around bank accounts in some integrated internet banking application. The possibilities are huge.

  • by Evil Grinn (223934) on Tuesday August 02 2005, @07:21AM (#13220641)
    The one part that I don't get about the "new Javascript" philosophy that has been going around is, why people are so obsessed with keeping the scripts optional.

    Why not use the full power of DHTML and build applications that totally rely on it?

    The one piece of the Ajax puzzle that I could see being optional is XMLHttpRequest, as it is only a de-facto standard. ECMA script, CSS, and DOM are standards, and the browsers can be expected to support them.

    Attempting to maintain support for non-conforming browsers seems to add a lot of time (read: money) for little benefit. Too many bucks for too little bang.

    Also, you can't point at CSS and say that just like good CSS is unobtrusive, so is good scripting. Apples to orange. CSS is about presentation. And unless you're a marketing person, presentation IS optional. A colorful, three-column positioned blog done with CSS that degrades to plain black on white text laid out from top to bottom, is a good thing. Or at least it's fun to develop and then brag about how well it degrades. But scripting is NOT presentation, or at least it is not JUST presentation. If what you are developing is not a "web page" but a "web application", then scripting is part of what the application does.

    Finally, don't anybody trot out the line about companies that forbid their employees from running browsers with JavaScript enabled. I haven't seriously known of a policy like that since about 1998. You also hear the same thing about cookies, and that's BS as well.

    I am not trolling I actually don't get it.
  • Re:Save Some Money (Score:1, Informative)

    by soniCron88 (870042) on Monday August 01 2005, @04:06PM (#13217489)
    (http://www.solaristudios.com/)
    Sure, so you can get referral bucks for it? Whatever. Interested parties can get it from this untracked link. [amazon.com]
    [ Parent ]
  • Re:Save Some Money (Score:1, Informative)

    by Anonymous Coward on Monday August 01 2005, @04:07PM (#13217495)
    Or HERE [amazon.com] without this guy's referer code included.
    [ Parent ]
  • After enhancing my dietary supplements with Roland Piquepaille's ball sack sweat, I can tell you that my hair is growing back, my penis is longer and harder and with bigger girth, and the chicks like me.
    [ Parent ]
  • by Linus Torvaalds (876626) on Monday August 01 2005, @08:46PM (#13218993)

    Unnecessary != not useful. Possibly buggy is irrelevent so long as you test properly.

    Does it take an Einstein to see which is the lowest-cost, lowest-bandwidth, most reliable solution?

    Does it take an Einstein to realise that it depends on what you are doing?

    Example: If you have something like Hotmail's signup page, you can save bandwidth by using XMLHttpRequest, because you'll get a hell of a lot of people constantly going back and forth on the registration pages trying to get a username that isn't already taken. Those registration pages might be in the region of 40K per request or more. An XMLHttpRequest script could do it in around 1K per request.

    As with anything else, declaring one thing to be the best solution in all situations is a blanket statement that doesn't hold true in all cases.

    This is an application of Occam's Razor: use only what is necessary and avoid unnecessary complication.

    So you don't use CSS or images either then? Even links are unnecessary, users can copy & paste the URIs or type them in by hand. Maybe what's necessary isn't the only thing that's important.

    [ Parent ]
  • Re:Save Some Money (Score:1)

    by zakkie (170306) on Monday August 01 2005, @09:19PM (#13219123)
    (http://www.carfolio.com/)
    Instead of modding this fool up, down or sideways, complain to Amazon's Associates program directly. Include his referrer tag and they will almost certainly revoke his affiliate status because of unacceptable spamming in violation of Amazon's Affiliate agreement. His Amazon affiliate ID is kaleidojewel-20 and associates@amazon.com is the place to email your complaints to. If we nip this in the bud, there'll be no more incentive for such spam. Please be polite when emailing Amazon - this *is* against their policies, they just need it to be brought to their attention.

    HTH

    Ciao

    Zak
    [ Parent ]
    • 1 reply beneath your current threshold.
  • Re:Save Some Money (Score:1)

    by HeroreV (869368) <HeroreV@yahoo.com> on Monday August 01 2005, @10:46PM (#13219458)
    (http://jamesjustinharrell.com/)
    What?! It costs money?! But information wants to be free!
    [ Parent ]
  • 14 replies beneath your current threshold.