One page sites are a topic that is fairly well covered and yet I never get tired of seeing the various ways people have approached this style. Its hard to believe so much variety can be implemented within this single structure type. http://www.instantshift.com/2010/01/15/single-page-website-designs-70-latest-examples/
-
I posted to designmeltdown.com
One page sites
http://feedproxy.google.com/~r/designmeltdown/uecD/~3/sC7RgS5zBY4/
- Tags:
- One Page Site
February 12 2010, 10:00am | Comments »
-
I posted to smashingmagazine.com
Successful Strategies For Selling Ad Space On Low-Traffic Websites
http://feedproxy.google.com/~r/SmashingMagazine/~3/ECodrDUkAqs/
Upon first thinking about it, the idea of selling advertising on a website or blog with limited traffic seems a bit daft. After all, aren’t most advertisers interested in putting their product in front of the highest number of eyeballs possible? Approaching them with piddly visitor numbers seems like a surefire way to end up in the deleted folder.But though it may feel like putting the cart before the horse, there are many good reasons and ways to sell ad space on low-traffic websites. What you need to always keep in mind is that, while advertisers are drawn to high traffic numbers, they desire something else even more: high conversion rates. There are plenty of success stories of websites that have limited traffic but sell a ton of advertising. These websites succeed because they do one thing well: they deliver the right type of customer to the right type of business.You may also want to take a closer look at our previous related articles:Ad Management Plug-Ins And Tutorials For Your WebsiteOnline Advertising And Its Impact On Web Design[Offtopic: by the way, do you know the Smashing Network has its own Smashing Network RSS Feed? Only excerpts are displayed in the feed.]What Do You Have To Offer?Now, before you rush off and draft your first advertising offer, take a page from the Greeks and “know thyself.” This means you have to research your website first so that you can pitch it effectively to potential advertisers. Here are some good ways to research your website and its audience.ClickyClicky has the advantage of providing real-time analytics, unlike Google Analytics. Areas to look out for are:What do people look at when they visit my website?What are my most popular pages?What pages do people stay on the longest?What keywords do they use to find my website?With this knowledge, you can develop a picture of what interests your visitors and what kinds of advertisers would pay for access to people with those types of interests.Here are some other analytical tools:Piwik: Open-source analytics that you install on your server.Woopra: Real-time analytics. The free plan is limited to 30,000 page views per month.W3Counter: Free hosted website analytics.Poll Your TrafficTo delve even further into your visitors’ interests, put together a quick poll to find out what makes them tick. With a polling service, you can quickly put together a questionnaire that sheds further light on where your advertising focus should be. To get the best results from your survey, make it short, and perhaps even give away a gift to make it worth the respondents’ time. People rarely fill out surveys without an incentive.Polling services include the following:Survey MonkeyPollDaddyMicropollStrawPoll (Twitter polling)If you would rather not go this route, a simple request for feedback might work. Just put the word out that you are looking for input and then ask for comments.Keep Your Ear to the GroundHere, in the Smashing Magazine Team, we are monitoring all mentions of our products and services and reply to our customers when they have problems, ask for support or just share their opinion.Another great way to find out what interests your audience is to track what people say about you on social networking websites such as Twitter and Facebook. Twitter lets you track mentions of your website or a particular phrase in tweets. See which of your posts gets a lot of retweets or what people are saying about your website.Also, watch for articles that get bookmarked on Delicious and other social bookmarking websites. Searching for your domain name reveals articles that have been the most interesting to your visitors.Finding AdvertisersNow that you have a good understanding of your website’s traffic, it’s time to get out there and find advertisers. Is there a minimum number of visitors you should have before approaching advertisers? While nothing is set in stone, 500 to 1000 unique daily visitors is probably a good starting point. However, numbers below these can still be workable, especially if your audience is highly targeted.Here are some places to find advertisers:What websites link to yours? One place to look for advertisers is in your own analytics. Look for websites that currently link to yours and that offer a service or product you could advertise.Who’s commenting? Visit your commenters’ websites to find any advertising or promotional opportunities.Let Google AdWords lead the way. If you run Google AdWords, make note of which advertisements come up. After all, they are already spending money with Google, and Google is saying that your website is a good match for theirs. Approach them with an advertising opportunity that would give them greater visibility than what Google AdWords can deliver.Research websites with similar content. Who is advertising on those websites? They would probably be interested in your website, too.What names jump out? After compiling your visitor’s interests, some businesses may immediately spring to mind. These businesses will likely gel with your content. Make a list of them and contact them directly.Check out the following article for additional information:How to Find Advertisers for Your Website: The Ultimate GuideHow to Approach AdvertisersNow that you know about your website’s visitors, you will want to draft an advertising package to present to potential advertisers. Here are a few things you may want to include:Demonstrate visitor interest. List the interests of your website’s visitors. Advertisers want to know that what they’re selling will appeal to your visitors.Disclose bounce rate, average time on site and page views. Advertisers will want to know how sticky your website is. If much of your traffic stays for only a few seconds, advertisers would want to know that. The longer your traffic sticks around, the higher the chance that ads will be seen and clicked.Showcase your monthly stats. Advertisers will want to know your website’s statistics over several months to see what kind of increase you have had and how many unique visitors you are getting per month. A steady climb in traffic shows great potential.Track outbound links. You certainly don’t want to overpromise the number of clicks an ad will receive. If you’ve been tracking outbound links with a service such as Google Ad Manager, you will have pretty concrete numbers to work with when approaching advertisers (assuming, of course, that you have already run at least one test advertisement on your website).Keep it personal. Don’t blanket email advertisers with a cut-and-pasted pitch. Advertisers will more likely respond if they feel you have personally researched their product and matched it carefully to your website.These statistics will be a great help when you are ready to approach your first advertiser. Your goal is to show how you’ll be able to leverage your audience to deliver a highly targeted customer to them. Doing that successfully will show value even if your traffic is relatively low.To give you a real-life example, I recently ran some advertising on a website that averaged 92,000 daily page views, along with one that had only 2,000. The website with less traffic brought in 41 clicks, while the bigger website brought in only 2. Which website do you think I would spend my advertising dollars on? Traffic is one thing, but conversion numbers are much more important.Keep Advertisers HappySo, you’ve landed your first advertiser. Good work! But getting the advertiser is merely the first step. If you want to develop a long-term relationship with your advertisers, you’ll need to know how to keep them happy:Give them the information they want. Conversation rates are king. To keep advertisers happy, deliver information on how their ads are doing. The good news is that most ad-management services have built-in reporting that sends advertisers updates on how their ads are doing.Promote your website. Give your advertisers your best content and promotions. That may mean holding back some premium content while you get advertisers lined up, especially if you will be guest posting or foresee a huge spike in traffic. You want all of your ads positioned so that they can take advantage of that new traffic.Keep them informed. Introducing a new ad size? Writing a new series of articles? Give your current advertisers the first crack at these premium ads spots.Run promotions. Advertisers love a deal. Sweeten the pot with occasional promotions. This is a great way to bring back former advertisers that have recently dropped out.Get feedback. Ask your advertisers outright what they think. They’ll appreciate that you care, and you will receive a heap of useful information that you can use to improve your ad strategy.Sell Ads Yourself Or Join A Network?Handling your own advertising or joining a large advertising network each has its pros and cons. Some large networks may not give you the time of day if you don’t have enough traffic to begin with. Here are some ways to sell advertising; you can mix and match methods to come up with your own solution.Sell DirectlyIf you prefer the hands-on approach, then you’ll probably want to sell your advertising spots directly to advertisers. Using one of the following programs will alleviate some of the stress that comes with selling directly:OpenX Ad management for Drupal.OIO Publisher A WordPress and standalone ad manager.Random / Rotating Ads Ad plug-in for WordPressEasy Ad-Manager A standalone ad manger.For more options and management tips, check out the article Ad Management Plug-Ins And Tutorials For Your Website.Remember, handling your own ad sales will net you the biggest slice of the profit, but it also requires the most work.Limit your offering. No advertiser wants to see 10 different “Advertise Here” boxes on your website. Start small by offering one advertising slot, and then increase as you sell them.Get the word out. Use social network websites such as Twitter to spread the news that you have advertising spots available. You don’t want to spam your network, but an occasional reminder won’t hurt.Partner with websites with similar interests. If your traffic is too low to attract the kind of advertisers you’re interested in, why not partner with other websites that share your interest? Start your own mini-network, and then offer advertisers the opportunity to pay one price to advertise on multiple websites.Start a promotion. In the beginning, you may have to give away ad spots for nothing or next to nothing. So, offer a promotion to get advertisers in the door. If you’ve done your research and you deliver high-quality traffic, those advertisers will be much more willing to pay when the promotion runs out. Remember to track outbound traffic on these links because it contains valuable information that you can use when you contact your next advertiser.Selling Through Ad NetworksAd networks can put you in touch with many more advertisers, but they also take a chunk of your bottom line. Often this chunk will be negligible, considering the network will allow you to sell more ad space. Here are a few good networks to try:BuySellAds.comUnless you live in a cave, you’ve probably already heard of BuySellAds.com. Though a relative newcomer to the advertising scene, BuySellAds.com has achieved great market penetration. One caveat is that it focuses on websites for designers and developers. So, if your website falls beyond this category, you may want to try elsewhere.Project WonderfulProject Wonderful is a great place to start your advertising campaign because its prerequisite to join is relatively low. The idea behind the website is to allow potential advertisers to bid on your ad spots. The more that advertisers want what you offer, the higher your daily advertising rate. While Project Wonderful promises to bring advertisers to you, you may find yourself sitting in the $0 per day budget range as you build traffic or until an advertiser decides to take a chance on you.ChitikaChitika is a little different than other ad networks because it scans the search strings of people who are directed to your website and then serves up ads that match those search strings. Think of it like Google AdSense with a twist.Whichever ad network you choose, make sure it pays per click (i.e. pays money for every click the ad gets) rather than uses CPM (i.e. money for every thousand views your website gets).Here are some additional ad networks:AdBriteAdifyAdsDAQValueClick MediaGoogle AdSenseThe DeckYahoo! Publisher NetworkBe Careful With Your AdvertisingNot all advertisers will be a good fit for your website, and you may be forced to decide whether to run an ad that falls beyond your website’s objectives. For example, you’ve probably seen hundreds of websites lately that advertise teeth whitening and weight loss services. While the revenue from such ads is probably good, would the ads be appropriate for your audience?Ask yourself these questions before deciding to run an ad:Does this ad fit the content of my website?Would the ad offend or annoy my visitors?Would it distract visitors from the content?Would it call into question the integrity of my website?Always remember that any advertisement that drives away traffic from your website, even if it pays wells, will ultimately hurt rather than help. You will hear loud and clear from your community if it thinks you have sold out for advertising dollars. Don’t let it get to that point; set firm advertising standards ahead of time.You may be interested in the following further reading:Should Your Business Website Accept Paid Advertising?The Ethical Journalist’s Guide to Selling Ads on a WebsiteSummarySelling advertising on a low-traffic website doesn’t have to be mission impossible. With the right research and pitch, you’re well on your way to landing your first advertiser. Figuring out what works for you and your website doesn’t mean picking one strategy and sticking with it. Try multiple approaches, and track the results. Whether you prefer to sell your own ad spots, partner with other websites or join a network, mix and match methods to create a strategy that works for you. Advertising on your website is an ongoing organic process that takes research, patience and time.Have you had success in displaying ads on your website? What has worked for you? We’d love to hear your tips in the comments!Additional ResourcesAd Management Plug-Ins And Tutorials For Your WebsiteSelling Ad Space Tips From the Top Design BloggersDirect Advertising Sales for Beginners: How to Develop an Alternative Revenue SourceWhich Ad Network Should Work Best for Your blog?How to Set Your Own Advertising Rates for Direct Ad Sales: An Extensive GuideUniversal Ad Package SizesComparison of 13 Pay-per-Click NetworksSelling Advertising SpaceOnline Advertising And Its Impact On Web DesignAbout the AuthorWhen Travis King is not using all of his energy to survive the frozen Canadian tundra, he spends his time as a freelance Web designer and writer for FreelanceSwitch. In an attempt to control his obsession with Japan, he also runs one of Canada’s premier Japan travel websites: I Heart Japan.(al)© Travis King for Smashing Magazine, 2010. | Permalink | 2 comments | Add to del.icio.us | Digg this | Stumble on StumbleUpon! | Tweet it! | Submit to Reddit | Forum Smashing Magazine Post tags:
- Tags:
- workflow
February 12 2010, 2:27am | Comments »
-
I posted to designmeltdown.com
Retro business cards
http://feedproxy.google.com/~r/designmeltdown/uecD/~3/YyQKUrcXD_0/
While this set of business cards is titled retro, I would more describe it as pseudo retro. There are retro elements mixed in (and some are very retro), but overall it is a mix of just awesome designs. http://www.dzinepress.com/2010/01/40-latest-trend-vintage-and-retro-business-cards/
- Tags:
- Business Cards
February 11 2010, 11:00pm | Comments »
-
I posted to smashingmagazine.com
The Life, Times (and Death?) of Internet Explorer 6 (Comic Strip)
http://feedproxy.google.com/~r/SmashingMagazine/~3/LHYL-5U5eko/
In recent years Internet Explorer 6 has become the browser web designers love to hate. Security issues, JavaScript errors and inexplicable CSS rendering quirks have made it the brunt of many jokes. With IE6 in its twilight and big companies like Google dropping support, it seems like a good time to take a fond look back at our old foe. In this post we’re looking at what Internet Explorer 6 used to be and why its image changed over the years. You can also see the comic in a larger version.Do we need to review our projects in Internet Explorer 6? Can we stop supporting IE6? If not, how do we handle those users who are still using IE6? And if yes, how can we prompt IE6 users to upgrade? Or how do we convince those who don’t allow their employees to get rid of the legacy browser to upgrade? What do you think? We are looking forward to your opinions in the comments to this post!© Brad Colbow for Smashing Magazine, 2010. | Permalink | 9 comments | Add to del.icio.us | Digg this | Stumble on StumbleUpon! | Tweet it! | Submit to Reddit | Forum Smashing Magazine Post tags: ie, ie6, internet explorer
- Tags:
- design
- ie6
- ie
- internet explorer
February 11 2010, 1:39pm | Comments »
-
I posted to designmeltdown.com
Snazy slide shows
http://feedproxy.google.com/~r/designmeltdown/uecD/~3/M43taSnFhGY/
Slide shows are certainly nothing new to the web, but they have found a new home. This type of functionality is commonly found on many home pages and is a great tool for communicating a message or set of content in a small amount of space. It can be a very dramatic tool that shapes the flow of content. http://www.instantshift.com/2010/02/05/66-examples-of-perfect-slideshow-presentation-in-web-design/
- Tags:
- Slide Shows
February 11 2010, 10:00am | Comments »
-
I posted to designmeltdown.com
Page headers with flare
http://feedproxy.google.com/~r/designmeltdown/uecD/~3/cVosWf-_8GA/
Careful consideration should always be given to headers considering their placement in the page. This collection of headers shows us some of the crazy directions others have gone with this part of the design. http://www.1stwebdesigner.com/inspiration/trendy-unique-website-header-designs/
- Tags:
- Headers
February 11 2010, 6:00am | Comments »
-
I posted to smashingmagazine.com
Better User Experience With Storytelling, Part 2
http://feedproxy.google.com/~r/SmashingMagazine/~3/BUla2pFnBH4/
In the first part of this Better User Experience With Storytelling series, we explored some of the basic structures and story patterns found in myths and religions. We saw how these patterns continued into modern stories such as The Matrix and Star Wars. We also explored some of the basics of bringing storytelling into the user experience process and some places to get started.Concluding this two-part article, we hear from creative professionals who are leading the way in this relatively new world of combining the craft of storytelling with user experience. We’ll also see how storytelling can be applied to more than just interactive experiences: we find it in everything from packaging to architecture.[Offtopic: by the way, did you know that Smashing Magazine has one of the most influential and popular Twitter accounts? Join our discussions and get updates about useful tools and resources — follow us on Twitter.]A Few Modern-Day StorytellersAlthough the idea of using storytelling within the user experience process is fairly new, a few professionals are using it in their projects. I spoke with some of these modern-day storytellers to get their perspective and see how they are applying storytelling to their work.Dorelle RabinowitzDorelle is a storyteller who designs, illustrates and tells stories in a variety of media and contexts. Mostly she tells stories.Question: How do you approach storytelling in UX?Dorelle: I see it as another tool we can use as a catalyst for communicating during our design activities. For me as a designer, it’s about putting a human face on the design process and bringing people together. You can get designers, engineers, product managers, strategists and execs jazzed about a proposed feature because of a story, and it can be extremely fulfilling. As a person, it’s all about the emotional connection.Back in the day, I’d worked on an Oxygen media site called “Our Stories,” where we created short online digital stories with our audience. We called it co-creation, and when I moved more into designing user experiences I realized that stories helped me understand my users better. As I did more and more work, I realized that storytelling facilitates communication, that people respond emotionally to stories, bond over stories and share stories again and again, and that the more I integrated storytelling into my work the better the work was.So much of what we do isn’t only about the design but about how we deal with people, negotiate and plan. Storytelling can be effective in all of these situations as well as in driving towards our solutions. I think the value of using stories is independent of the type of experience.Question: In the end, business goals (i.e. profit) rules the day. How does storytelling tie into this?Dorelle: Stories help bridge understanding, so storytelling can help teams get on the same page and speak the same language—leading to expected results. Stories can help people work more collaboratively and thus help teams get it done faster—faster time to market. Stories can help reframe business problems so that projects solve the right problems and come to a better solution.Question: Where is the best place to learn more?Dorelle: Cindy Chastain’s article in Boxes and Arrows on Experience Themes is a great read.Curt CloningerCurt is an artist and writer. He says his art doesn’t really tell a standard narrative with a climax and resolution but rather tries to create a kind of event experience.Question: How do you approach storytelling in UX?Curt: Design, particularly graphic design, can be understood as a visual form of communication, and storytelling is a historically tested form of communication. Storytelling or narrative design is more like something to keep in mind when considering the user’s experience.To me, narrative design just means having a consistent “voice” and having every design element contributing to the same goal or conclusion. It also means allowing for an arc in the user experience. And it means allowing the user to have some kind of personal say in completing her experience. This is the difference between a novel (where the user mentally fills in lots of visual blanks) and a Hollywood action film (where all the blanks are filled in for the user). A novel is arguably more engaging.Question: In the end, business goals (i.e. profit) rules the day. How does storytelling tie into this?Curt: Hollywood tells stories, and they seem to make a lot of money. Politicians, journalists and large corporations often tell stories (i.e. lies), and they make money. The evolution of any brand over time is a kind of narrative. Corporations spend all sorts of money trying to convince us that their main character (Ronald McDonald) is the good guy. Narrative and capitalism have always enjoyed a fruitful relationship.Question: Where is the best place to learn more?Curt: I like Nathan Shedroff’s Experience Design book. It’s more about “XD” than “UX,” but it addresses narrative at several points throughout. Richard Schechner’s Performance Theory is good. It has nothing to do with user experience design per se, but it is about theater, tribal ritual and the cultural interfaces that people construct to give meaning to their worlds.Christian SaylorChristian is a storyteller who designs user experiences. He believes that the things around us have very powerful stories to tell.Question: How do you approach storytelling in UX?Christian: Storytelling gives us purpose and a sense of place. So, it hasn’t been so much a “discovery” of storytelling as a natural progression towards uncovering an experience buried deep within a narrative that wants to be told. So this idea of adopting “storytelling” as a means to uncover a rich experience for the “end” user, whoever they may be, just makes sense.At the end of the day, the job of the (UX) designer is to help tell a story that is relevant and meaningful, regardless of time, device or even location. We use “personas” (characters in our story) and “scenarios” (narratives that tell a story about the persona) in order to fully understand not only the target audience but also their goals and desires, which will ultimately help to create a meaningful experience for them.I strongly believe that everything has a story associated with it. Every business, social group, concept, methodology and relationship is desperately seeking out better ways to engage with its audience. Some just happen to do it on a large scale (Apple), while others quietly create a pattern of life that goes unnoticed until it disappears (the remote control). From packaging that sits on the store shelf to the applications that follow us throughout our days, story influences just about every aspect of our lives. Story is all around us. It gives us a sense of understanding and knowledge of the people and things that are important to us.I think the most important aspect of storytelling for me is that it has the ability to change the way we view and interact with our world.Question: In the end, business goals (i.e. profit) rules the day. How does storytelling tie into this?Christian: If you’re telling the right story to the wrong audience, or even telling the right story the wrong way, then your business or product will ultimately fade away. Design and technology are the catalysts of change in the “experience economy.” And if we don’t seek out better ways to tell our story, then our business, product or service will be in jeopardy of losing its vitality. And as we all know, the business world is constantly looking at the bottom line. We live in a world saturated by products and services that vie for our attention, and the experience—the way in which a story is unfolded—will be the difference between a company’s success and failure.Question: Where is the best place to learn more?Christian: Lovemarks (the future beyond brands) by Saatchi & Saatchi. It has unbelievable insight into the way we fall in love with the companies and products that surround us.(Disclosure: Both Christian and the author are employees of Universal Mind.)Cindy ChastainCindy is a trained filmmaker and screenwriter. She continues to make films and write scripts and considers herself a visual and dramatic storyteller.Question: How do you approach storytelling in UX?Cindy: Storytelling is another discipline that can be used in the context of design as 1) a device, 2) a framework and/or 3) a craft to draw upon. In other words, we can use story as a way to capture and sell an idea; we can use it as a way to frame an approach to the design of a product or service; or we can use narrative techniques to craft an interaction and, hence, a variety of behavioral and emotional responses to a story.We tell stories that seek to order chaos, provide meaning and engage the emotions of our listeners. We design experiences that hopefully do something similar. But in the context of design, meaning is also about what this experience, product or service will do for a person. It’s about how something fits into or enhances his life. It’s about understanding how something is supposed to function.As designers we do well at facilitating the dialogue between people and the interactive products they use. But we often neglect to consider the more intangible layer of experience, the stories that evolve dynamically through interactions that people have with the things we make. We also lack an approach to holistic design. If we can learn to approach design more like writers approach stories, we will not only build richer experiences but start to develop a craft in our work that knows how and when certain narrative techniques can be used to engage the minds, emotions and imaginations of users.Knowing the craft of narrative will help us build better stories, which will help us turn a set of lifeless features and functions into a whole experience that engages the minds and emotions of customers.Question: In the end, business goals (i.e. profit) rules the day. How does storytelling tie into this?Cindy: Brand message is no longer the thing that sells. Experience sells. If the intangible pleasure, emotion or meaning we seek can be made tangible through the use of story and narrative techniques, we will build more compelling product experiences. And if the experience is more compelling, businesses will profit from droves of loyal, experience-discerning customers.Without this understanding, choices about what features should be included and how they should behave seem both uninspired and disconnected. Sure, we have business goals, user needs, design principles and best practices to draw on, but these things won’t get us to a place where a team is collaborating in the same conceptual space, let alone designing for emotion and meaning.Question: Where is the best place to learn more?Cindy: Start with the discipline itself, such as Story, Robert McKee’s book about screenwriting. I also recommend The Elements of Cinema by Stefan Sharff. It’s a book that examines how cinematic structures can be used to forward narrative, some of which can be applied directly to interaction design.The Storytelling Experiences Around UsThere are many experiences in which storytelling is used to create a compelling message that draws users in. The stories are not always visible or apparent right away, but underneath many good experiences we can find great stories. They may appear in a series of interactions that tie into a larger story or simply in an emotional connection that we form with a product or brand.In Packaging: Apple Image source: Re.Mo and Typical Story Arc.One company the excels at delivering a powerful story is Apple. Laid over the image of the iPhone box above is the story arc (introduced in part 1) that most screenplays and novels follow. Purchasing an Apple product and opening the many beautiful layers of the packaging follow a similar story arc in building anticipation. As you move through the process, you find compelling photography and clever writing. These build a sort of satisfying tension until you finally arrive at the climax of the experience and uncover the iPhone. A more common anti-climactic approach would be to wrap the iPhone in bubble plastic, reducing the story to a mere “Buy me.”In Technology: Microsoft CourierThe Microsoft Courier device is in the “late prototype” stage of development. This is more of a booklet than Apple’s iPad, with dual multi-touch screens. This video uses storytelling to take you through the user experience of the booklet. Instead of simply running through some of its cool features, it tells us the compelling story of a project in which the potential of the Courier is exploited.In Marketing: Six Scents PerfumeThe Six Scents range of fragrances is created annually by pairing six prominent artists with six celebrated perfumers. The goal is to help raise awareness for a specific charitable cause. For the second series, each bottle comes with a DVD that contains a film and photography. The film and imagery create a story around each scent to evoke a certain feeling and theme.In Architecture: HBO StoreThe HBO Store (in mid-town Manhattan) is designed with storytelling built seamlessly into an immersive experience. The architecture and technology allow the space to become a new way to experience the props and merchandise for the HBO-based shows. The goal of the store (designed in part by design and branding studio Imaginary Forces) was to create an intelligent and memorable experience for visitors.In Data: Taxi07:Roads ForwardIn her comments on storytelling, Dorelle Rabinowitz shows how storytelling can be used to communicate otherwise boring data and turn it into a more accessible experience. One example of this was Taxi07:Roads Forward. It was a report for the New York City Taxi & Limousine Commission on the current state of the taxi cab industry in New York. The information was presented through stories in comic book form and beautiful infographics.In Websites: Showtime SportsIn a project for Showtime Sports, Cindy Chastain and the team at Interactive Partners created an engaging experience for fans using experience themes. Fans would be able to follow and learn about the full fight story online interactively through video. The experience themes guided not just the content but the functional requirements and website architecture.The End Is The Beginning Of This StoryMany aspects of storytelling and user experience could not be covered in a few articles. This series is meant to give you a starting point to explore and learn more. The end of this story hasn’t been written. This is just the beginning of using storytelling in new ways.Here are a few good tools to start with:Personas Template;Experience Themes Matrix;Storytelling for User Experience Design (book to be released this year).ResourcesExperience Themes by Cindy ChastainStorytelling: A Compelling Design Tool by Dorelle RabinowitzThe Art of Storytelling by Christian SaylorA Case for Web Storytelling by Curt CloningerAuthors note: A special thanks to the storytellers interviewed for this article for taking time to share their thoughts and experiences with me.(al)© Francisco Inchauste for Smashing Magazine, 2010. | Permalink | One comment | Add to del.icio.us | Digg this | Stumble on StumbleUpon! | Tweet it! | Submit to Reddit | Forum Smashing Magazine Post tags:
- Tags:
- design
February 11 2010, 4:37am | Comments »
-
I posted to designmeltdown.com
Sporty sites that don’t suck
http://feedproxy.google.com/~r/designmeltdown/uecD/~3/wwAuMC1Tvaw/
It seems that the nature of the sports industry leads it to a very cluttered news type feel. I imagine this is do to the massive amount of data that flows in and out of these types of sites. As such, they would tend to be focused on the flow of data and less on design. This collection of sports sites singles out the better looking ones and are an excellent study in how to design for large amounts of constantly changing data. http://www.thewebdesignsource.com/showcase-of-beautiful-sports-websites/
- Tags:
- Sports
February 10 2010, 6:00pm | Comments »
-
I posted to smashingmagazine.com
Developing Sites With AJAX: Design Challenges and Common Issues
http://feedproxy.google.com/~r/SmashingMagazine/~3/7GlFdfRRgTs/
Almost every movie has a scene in which a character pull the protagonist aside and says, “There’s something you should know about [insert another character's name here].” Most of the time, we find out some dark secret about a supposed friend of the protagonist or that the main ally is actually an evil overlord. This is that moment, and I am here to tell you a few things about our friend in the Web 2.0 world: AJAX.We seem to have AJAX licked. The Web technology is ubiquitous, and libraries and frameworks make it dead easy for us to create highly interactive Web applications and to spice up our static pages and blogs.For example, we could take the following HTML…<div id="target"></div> <p><a href="#" class="ajaxtrigger">Let there be AJAX magic</a></p>… and add this jQuery code:$('.ajaxtrigger').click(function(){ $('#target').load('ajaxcontent.html'); });In a browser, if we clicked on the link labelled “Let there be AJAX magic,” the content of the HTML document ajaxcontent.html would be loaded and written into the element with the ID target. You can try this very simple AJAX example here. It’s simple and easy to use, but what’s really happening there? What is AJAX?[Offtopic: by the way, do you know the Smashing Network has its own Smashing Network RSS Feed? Only excerpts are displayed in the feed.]What Is AJAX?After the main HTML document has loaded, AJAX loads content from the server and replaces parts of the document with that content rather than reload the main document. It’s as simple as that. AJAX stands for “Asynchronous JavaScript and XML” and was meant to load only XML documents, but we soon used it to load everything under the sun, and so the XML part was quickly forgotten. The asynchronous part is the killer feature; but what is it?The traditional model for web applications (left) compared to the Ajax model (right).Let’s start by analysing how a normal Web interaction works:The user enters a URI (like http://wait-till-i.com/index.php) into a user agent (usually a browser).The browser turns this URI into an IP and requests the file located at the URI specified endpoint.The browser loads the file and, if it recognizes the document type, tries to display it.If the document is in HTML, we get an interface that we can interact with; for example, by clicking a link or entering data into a form and submitting it.In both cases, the whole document is replaced and the sequence restarts.This has worked since the beginning of the Web and has become expected behaviour for Web surfers. With AJAX, we disrupt this sequence of events. Instead of reloading the document or loading a new one, we replace only a part of the interface, either when the user requests it or automatically every few seconds to display new information.The benefits of AJAX are pretty clear:We maintain a consistent interface, rather than discard it only to bring it up again with a few slight changes after a long and annoying loading process.We request only the data that we need, when we need it, saving us a lot of server traffic.We are able to offer data without wrapping HTML around it to make it an interface.We allow for simultaneous interaction; a user would be able, for example, to fill out a form while an attachment uploads in the background.However, with great power comes great responsibility, and with AJAX we have taken it upon ourselves to simulate browser behavior for end users.AJAX Should Not Break The WebThe first thing to make sure of is that you do not break the Web with your AJAX solutions. The above example would, though:<div id="target"></div> <p><a href="#" class="ajaxtrigger">Let there be AJAX magic</a></p>This is not useful HTML. If JavaScript is not available or anything else goes wrong, you would be offering the end user a link that goes nowhere. This is annoying; I’ve come to your website, took the step of clicking a link, got excited by the prospect of awesome content but don’t get anything. Not good. So, rather than keep the URI in the JavaScript part of the AJAX solution, leave it in the HTML:<div id="target"></div> <p><a href="ajaxtest-fullpage.html" class="ajaxtrigger"> Let there be AJAX magic </a></p>This would ensure that the link works; if there is a JavaScript error, the browser would simply move on to load and display ajaxcontent.html. The jQuery code would change accordingly:$('.ajaxtrigger').click(function(){ var url = $(this).attr('href'); $('#target').load(url); return false; });Instead of hard-wiring a URI to load, we just read the href attribute of the link. The return false is needed to stop the browser from following the link after jQuery has initiated the AJAX request. This also means that any link with the class ajaxtrigger will load content via AJAX and display it in the element with the ID target. You can try this reusable AJAX example here.There is a problem, of course, because the document we load might be a full HTML document, with a head and a body and so on. This works well in the browser, but the AJAX request would load and inject this document it into another document, which is invalid HTML and would cause display issues. Try this out by clicking the “Load a full document” link on the page referred to above.Let’s say that ajaxtest-fullpage.html is the following:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> [... some links and title and so on ...] </head> <body> <div id="doc" class="yui-t7"> <div id="hd" role="banner"><h1>Excerpt from Alice's Adventure Underground</h1></div> <div id="bd" role="main"> <blockquote cite="http://ia341030.us.archive[...]-h.htm"> <p>Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, and where is the use of a book, thought Alice, without pictures or conversations? So she was considering in her own mind, (as well as she could, for the hot day made her feel very sleepy and stupid,) whether the pleasure of making a daisy-chain was worth the trouble of getting up and picking the daisies, when a white rabbit with pink eyes ran close by her.</p> </blockquote> <p>Excerpt taken from <a href="http://ia341030.us.archive[...]-h.htm">archive.org</a>. </p> </div> <div id="ft" role="contentinfo"> <p>Demo by <a href="http://wait-till-i.com">Chris Heilmann</a></p> </div> </div> </body> </html>jQuery is all about selectors, which is why the load() function allows you to cut down on the returned HTML by defining a selector. This means that you can change the script to the following (you can try the selector filtering example for yourself):$('.ajaxtrigger').click(function(){ var url = $(this).attr('href'); $('#target').load(url+' #bd blockquote'); return false; });This loads only the blockquote into the other document, so you wouldn’t be creating invalid HTML with the AJAX call. However, we lose the other benefit of AJAX, which is to load less content. If the page is 100 KB and you want to show only the main text, which is 2 KB, why should your users have to wait for 98 KB to load?To work around this, you need to go server-side. In PHP, you can get information about the request that was sent to load the page. One bit of information is the request method; JavaScript libraries such as jQuery send a specific header across when they load a document with AJAX. You can use this in PHP to set up conditional content:<?php if($_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest'){?> This is content requested by AJAX. <?php }?>
<?php if($_SERVER['HTTP_X_REQUESTED_WITH']==''){?> This is the normal content requested in a browser <?php }?>Try this header, switching out example for yourself: click the “Load a document with AJAX” link, and then right-click (or Command-click) the same link to open it in a new tab (or hit the “Load the same document without AJAX” link). The results should be “This is content requested by AJAX” and “This is the normal content requested in a browser” respectively.This way, you can keep all of the header and footer information in includes and load them only when the request could not be done with AJAX. Try the header includes example to see it in action:<?php if($_SERVER['HTTP_X_REQUESTED_WITH']==''){?> include('header.php'); <?php }?>
<blockquote cite="http://ia341030.us.archive[...]-h.htm"> <p>Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, and where is the use of a book, thought Alice, without pictures or conversations? So she was considering in her own mind, (as well as she could, for the hot day made her feel very sleepy and stupid,) whether the pleasure of making a daisy-chain was worth the trouble of getting up and picking the daisies, when a white rabbit with pink eyes ran close by her.</p> </blockquote> <p>Excerpt taken from <a href="http://ia341030.us.archive[...]-h.htm">archive.org</a>. </p>
<?php if($_SERVER['HTTP_X_REQUESTED_WITH']==''){?> include('footer.php'); <?php }?>Using this “unobtrusive AJAX” approach does a few things:You don’t create broken links, ever.You make it easier to maintain functionality; no need to hunt for URIs in the JavaScript—everything is in the HTML.You allow users to open links in another window or tab.You maintain the AJAX-enabled and AJAX-disabled content in the same document without duplicating content.“Unobtrusive JavaScript” is the term for this method of developing highly interactive websites. It was coined by Stuart Langridge in 2002, and I wrote a self-training course for it in 2004. Incidentally, Stuart was also the first author to cover AJAX in a JavaScript book, the unfortunately named DHTML Utopia. My own not-quite-so-succinctly-titled book Beginning JavaScript with DOM Scripting and AJAX was, I think, the second. Both books follow the approach shown here and create AJAX solutions that fall back to non-JavaScript versions.Jeremy Keith tried to further popularize this idea of “safer AJAX” in 2006 by calling it “Hijax”, and he wrote a book titled Bulletproof AJAX in 2007. Sadly, though, I have encountered people who use this as an excuse, saying, “We’re building an AJAX solution now, and we’ll move it to Hijax later.” This will not work! Do it right the first time and you’ll have a stable solution. There is no “We’ll fix it in the next iteration” when it comes to essential functionality in Web development: 12 years of professional development have taught me that much.AJAX Design ChallengesIn dealing with AJAX as designers, we have to reconsider the ways in which we define interfaces. Rather than concentrate on the look and feel of the page and subsequent pages, we need to drill down to an atomic level. Each part of an AJAX interaction needs to be defined. Also, think about non-JavaScript versions of widgets.With AJAX interfaces, we move into a world of applications that have states and views and out of a world in which our document or page model was based on ideas carried over from print. This for me is a good thing. The Web is a rich medium, not a sequence of linked designs.AJAX And UsabilityAs mentioned, we use AJAX to disrupt the normal browsing behaviour of our users. This can be a good thing: no one claims that browsers do everything right, but understanding just how many things we should take care of when taking over the browser is important.What Browsers Do That You Need to SimulateWe sometimes forget just how many things the browser does for us:When we click a link, an indicator alerts us to a loading process (whether an animated icon, progress bar, etc.).For large files, the progress bar gives us an idea of how far we’ve reached in the loading process.If we get tired of waiting, we can hit the “Stop” button or try again by reloading the page.If a page cannot be found, we are shown an error page.If a page takes too long to load, we are shown an error page.Other errors we encounter (for example, a page that needs authentication, or a document that has been moved) are also displayed on a special page.We can right-click a link to open it in a new tab or window, instead of replacing the current document.We can bookmark a page and come back to it at any time in the future.When we need to undo something that’s gone wrong, a “Back” button takes us back one step in our journey.All of this needs to be accounted for in a full-fledged AJAX application, because AJAX should improve the end user’s experience rather than make it harder. Let’s now enhance our AJAX script until we can say that we’ve covered the basics.Bookmarking and the Back ButtonOne thing I won’t go into in detail is the “Back” button and bookmarking functionality. To make this work, you need to update the URI of the current page with a fragment and reload a hidden frame in the page. There are all kinds of annoying differences between browsers, too, and you can use something like the history plug-in for jQuery to get this to work.Alerting the User That Something Is LoadingProbably the first thing to fix is to tell the user that something is loading when they click a link or push a button. If the page shows no apparent change, the user will think something is wrong and keep clicking. This is an unfortunate human reflex, because the more you tell a computer to do something, the slower and more confused it gets.A simple way to provide the user with feedback is to show a loading message. To do this in jQuery, we need to get away from the load() method and instead use ajax(), which gives us information about what happens to the request, such as:The beforeSend event that is fired before the AJAX request is initiated, andThe success event that is fired when the AJAX request is successful.Putting them together, we can add a loading message to the target element when the AJAX request starts, which is replaced when the data has successfully loaded:$(document).ready(function(){ var container = $('#target'); $('.ajaxtrigger').click(function(){ doAjax($(this).attr('href')); return false; }); function doAjax(url){ $.ajax({ url: url, success: function(data){ container.html(data); }, beforeSend: function(data){ container.html('<p>Loading...</p>'); } }); } });Error HandlingAs you may have guessed, the next logical step is to handle error cases. This is something far too many AJAX solutions haven’t gotten right, and seeing a great application become useless just because one call has timed out is very frustrating.We have to prepare for three different errors:The user tries to load an external file that is not available because of AJAX security settings;There is some server error (for example, “Page not found”);The resource takes too long to load.The following script takes care of all this, and you can see it in action on the error handling demo page.$(document).ready(function(){ var container = $('#target'); $('.ajaxtrigger').click(function(){ doAjax($(this).attr('href')); return false; }); function doAjax(url){ if(url.match('^http')){ var errormsg = 'AJAX cannot load external content'; container.html(errormsg); } else { $.ajax({ url: url, timeout:5000, success: function(data){ container.html(data); }, error: function(req,error){ if(error === 'error'){error = req.statusText;} var errormsg = 'There was a communication error: '+error; container.html(errormsg); }, beforeSend: function(data){ container.html('<p>Loading...</p>'); } }); } } });The changes (shown in bold) are:We test whether the link URI starts with http and then report an error that loading it with AJAX is not possible.If the link doesn’t begin with http, we start a new AJAX request. This one has a few new features:We define a timeout of 5 seconds (i.e. 5000 milliseconds);We add an error handler.The error handler either sends us what happened on the server as req.statustext or gives us the error message timeout when the 5 seconds are up. So, we need to check what we got before we write out the error message.Highlighting ChangesWe’re almost done enhancing the usability of our AJAX solution. One last touch is to make it very obvious that something on the page has changed. The standard way of doing this is called the yellow fade and was introduced in 2004 by 37signals in its Basecamp application.With this technique, you change the background colour of the element to yellow and then fade it smoothly back to white. This grabs the user’s attention without overloading them (unlike zooming in on the content in or popping it up, PowerPoint style, which would overwhelm), and it is pretty easy to implement.jQuery has a plug-in in the effects package called Highlight that does exactly that. Using it, we can highlight the AJAX returns, making it very obvious that something has changed:$(document).ready(function(){ var container = $('#target'); $('.ajaxtrigger').click(function(){ doAjax($(this).attr('href')); return false; }); function doAjax(url){ if(url.match('^http')){ var errormsg = 'AJAX cannot load external content'; container.html(errormsg). effect('highlight',{color:'#c00'},1000); } else { $.ajax({ url: url, timeout:5000, success: function(data){ container.html(data). effect("highlight",{},1000); }, error: function(req,error){ if(error === 'error'){error = req.statusText;} var errormsg = 'There was a communication error: '+error; container.html(errormsg). effect('highlight',{color:'#c00'},1000); }, beforeSend: function(data){ container.html('<p>Loading...</p>'); } }); } } });Notice the different colors for the error case and success case.This is about all we need to do to make AJAX more usable. But to make it accessible to everyone out there, we have to do a bit more.AJAX And AccessibilityAccessibility does not mean much more than hard-core usability. If the “average” user is confused by an interface that doesn’t work as they expect, imagine the predicament of users who cannot see the interface at all. Or think someone who has trouble noticing changes from one page to the next and all of a sudden has to deal with small changes on individual pages—changes they are not notified about. Imagine a keyboard user tabbing through a document to activate a link and out of the blue being confronted by 10 more links. There are a lot more cases such as these, and your interface should be able to handle them at least at a very basic level.Much Ado About Screen ReadersIf you research the topic of AJAX and accessibility, you will come across a lot of tutorials that deal with the problem of screen readers. I won’t go into details—this could be its own article—but here are the main points:Screen readers are tools that read out to visually impaired users what is on the screen (or in the HTML and hidden by CSS).Screen readers work on top of the normal browser and enhance its functionality. Specifically, they allow for quicker keyboard navigation (for example, jumping from headline to headline with a shortcut).They take a copy of a document after it has loaded and apply changes to it.This means that screen readers understand JavaScript, but they only execute a request when the page has loaded. If you change a document with JavaScript and AJAX after it has loaded, you need to notify the screen reader somehow that something has changed and refresh the copy of the page. This can be done by refreshing a form field as a hack.The real problem with screen readers, and any assistive technology, is that they add yet another level of complexity to our Web interaction.We have HTML interfaces such as links and forms that need to work with all kinds of input devices: keyboard, mouse, voice recognition software, to name a few. Then the browser needs to somehow tell the assistive software (whether a screen reader or software that zooms the screen or a voice recognition tool) that something has changed, and that other tool has to translate it into an understandable format. All of this can, and frequently does, fail.Much like how HTML 5 is being pushed to replace HTML 4 because the latter is not rich enough to support the interfaces we want to build, WAI-ARIA is a standard that works around the problem of assistive technology and browsers not talking to each other.With WAI-ARIA, you can tell a screen reader, for example, that a particular element on the page changes frequently and will be refreshed with AJAX. Again, this topic is too big to cover here, but some good articles are out there in case you are interested.Important Feature #1: Keyboard AccessOne very important requirement of accessibility and AJAX is providing keyboard access, and doing this in a very basic way is not hard. The element that triggers the AJAX call has to be something that users can access with the keyboard (i.e. either a link or a button). You can test this yourself: simply use the Tab key to jump from one keyboard-accessible element to the next in your document. Can you access all of the functionality, and is it obvious where you are at any given moment?This is where you as a designer can do a lot to make your AJAX interface more accessible. Patrick Lauke has written a wonderful article on keyboard-access styling to get you on your way.Important Feature #2: Notify at the SourceThe second, very important, part is to notify users in the element that they activated that something is happening. You’ll often see interfaces where the activation button or link is in one spot but the content gets loaded somewhere else on the screen. One example of this is the contact form on Get Satisfaction:Large viewWhen we can see the screen in full, everything is pretty obvious. But consider an end user who has to magnify the screen to 1600% to be able to read it. Or someone who gets easily confused and uses a tool to focus on the part of the screen they are interacting with and blur out the rest. Their experience is different:By clicking this, the user expects to be able to submit feedback. Instead, all they get is a darker screen, which could be a hardware problem (running out of battery?) or something else entirely. They have no information on which to base their next move.You don’t even have to go as far as considering people with disabilities: just use a netbook whose viewport is a mere 300-pixels high (like my first-generation Eee PC) or a mobile interface that zooms into a certain part of the page (like my Blackberry with Opera Mini).In any of these cases, your AJAX solution will be neither usable nor accessible if the section that is replaced is far removed from the button that fires the AJAX request.You have two workarounds. The most obvious one is to keep the elements close together. If that is not possible, the other workaround is to change the content of the element that fires the AJAX request once the user clicks on it. This indicates to the end user what is going on.As an added assistance, you can shift the keyboard focus to the target element when the AJAX request has been processed. Be aware, though, that this could confuse some users; being jumped around the screen without meaning to can be scary. Pretty, smooth-transitioning solutions look good to the rest of us, but they can be a total nightmare for users with learning disabilities.Putting all of this together, take a look at this more accessible example. It adds a span to the link to show the state of the AJAX request, it highlights the content when it has finished loading, and then it shifts the focus to the new element. Here is the final code. Check the comments (// example) to see what is going on.$(document).ready(function(){
// this is the container we'll load content into var container = $('#target');
// adding a tabIndex of -1 makes it keyboard accessible, // and we can set the focus to it container.attr('tabIndex','-1');
// if a user clicks on an element with the class ajaxtrigger... $('.ajaxtrigger').click(function(){
// define trigger as the link var trigger = $(this); // read its href attribute (which is the URI we'll load with AJAX) var url = trigger.attr('href'); // if the element does not have a class called "loaded" if(!trigger.hasClass('loaded')){ // add a new span to the element. trigger.append('<span></span>'); // add a class called 'loaded' to the element trigger.addClass('loaded'); // and define msg as the last span in the element var msg = trigger.find('span::last'); // otherwise, simply define msg as the last span in the element } else { var msg = trigger.find('span::last'); } // ^ this condition means we only add the span once and not // every time users click the element. // call the doAjax function with the URI to load, // the span inside the link to change and the // target element to replace. doAjax(url,msg,container); // tell the browser to not follow the link return false;});
// here's where the AJAX magic happens function doAjax(url,msg,container){
// if the URI starts with http... if(url.match('^http')){ // show an error and set the class of the span to 'error' msg.html(' (error!)').addClass('error'); // tell the end user in the target element what the error is var errormsg = 'AJAX cannot load external content'; // update the container with the error updateContainer(errormsg,'#c00'); // if the URI does not start with http } else { // start an AJAX request using the url $.ajax({ url: url, // give the request five seconds time, otherwise call it // a timeout error timeout:5000, // if all went well success: function(data){ // set the span content to ready msg.html(' (ready.)'); // update the container with the right data updateContainer(data,'#ff9'); }, // if there was an error error: function(req,error){ // say in the link that there was an error and set the // class of the span to 'error' msg.html(' (error!)').addClass('error'); // if the error just says error, get the real status // text from the browser (jQuery doesn't do this right) if(error === 'error'){error = req.statusText;} // tell the user that there is a communication error var errormsg = 'There was a communication error: '+error; // update the container with the error updateContainer(errormsg,'#c00'); }, // if the link was clicked but the AJAX request was not fired... beforeSend: function(data){ // remove any "error" classes and set the span message to loading msg.removeClass('error').html(' (loading...)'); } }); }};
// update the container function updateContainer(content,colour){ container. // set the content html(content). // shift the browser focus focus(). // flash the container for a second in the // specified colour effect('highlight',{color:colour},1000); }
});The code is a bit longer than in that our other examples, but the payoff makes it very much worthwhile.Important Feature #3: De-Clutter Your InterfaceWith a library such as jQuery, you can make anything on the page interactive and make it initiate AJAX requests. You could use roll-overs or drag-and-drop interfaces, and these are great to look at, but ask yourself: are they really intuitive? Browsers do not yet have any drag-and-drop functionality or even roll-overs. Roll over your menu bar; you have to click to initiate any action.But by using JavaScript tricks, you can make any element keyboard accessible. And if you build widgets, go even further by following the rules of keyboard navigation. You could even create a screen reader-compatible drag-and-drop interface. But again, ask yourself a few questions:Is it worth the hassle?Does it really make the interface easier to understand?Does it make it more natural to use?Does it help all users reach their goal faster, or have you implemented the feature just because it looks cool?Making the interface as simple as possible does not mean neutering your creativity. On the contrary, the easiest and simplest interfaces are the ones that have gone through a lot of research and design iterations. Great usability means not recognizing that something has been done to make the interface easy.What Not To Use AJAX ForNever rely on AJAX to handle sensitive information, because modern debugging tools allow anyone to see what is happening on the page. Using the Firebug extension, I can get all of the information about the HTTP traffic of a certain document, including the AJAX requests:By analyzing these requests, I could glean information that you wouldn’t want to show the world; for example, the endpoints of the services on your system (such as mail scripts), which I could exploit for my own purposes.Nothing in your JavaScript or HTML is secure. I can change it on the fly and work around your protection mechanisms.If you are not building a Web application but are merely offering articles for people to read or a catalogue to flip through, you probably shouldn’t go the AJAX route anyway.The other thing to consider is search engines. If you load all of your content with AJAX, you aren’t offering much in your documents for search engines to index. Static HTML content is still best for search engine indexing—as well as performance, because pages can be packed and cached nicely on your server, if you do it right. Loading via AJAX brings up the content much faster for users and saves on bandwidth, but you will see less traffic from search engines. Something to consider.The External Content ProblemOne built-in security setting of AJAX is that you cannot load content on another server. This is critical, otherwise people would be able to call and inject whatever script they please from the Web. Definitely a bad idea.You may sometimes need, though, to retrieve third-party content; i.e. load external content in your document as data (because you can always use iFrames to embed other documents). This is where we have to get clever with the technologies at our disposal.The most common workaround for AJAX not being able to load something like http://icant.co.uk/index.php is to write a server-side script that loads the page and then prints it out. This is called a proxy, and you can see an example of the solution here.Of utmost importance when using a proxy is to whitelist the URIs that you want to load. Do not simply load any URI off the Web, or else attackers would be able to read files from your server and use your server to send out spam and attack other servers, making it look as though you were the perpetrator.Other ways to retrieve external content is by getting data in a special format called JSON-P or by using a hosted proxy service such as YQL. I’ll keep this brief because there are several solutions to this problem. If you are interested in learning more, check out this blog post on the subject.What To Use AJAX ForWhen used wisely, AJAX makes our life on the Web easier. If you’re wondering when and how to use it, check out the examples in the Design Pattern Gallery, which are based on real user research. For starters, think about these use cases:Adding a large attachment to a message. Nothing is more annoying than waiting for your browser to upload something without having a clue how fast and how far along it is. Browser progress bars give us a hint but no real numbers. The Yahoo User Interface uploader, as well as jQuery implementations such as Uploadify, show how that would look like in the browser.Handling a lot of small data sets. A great example of this is the comments section in WordPress. Rather than having to click a lot of checkboxes or reload the page every time I want to delete or approve comments, all I do is click a few links.Rating content. No need to reload the entire page if you just want a simple Yay or Nay from the user in response to a question.Displaying constantly changing content. For example, financial tickers or instant updates from Twitter and Facebook.Add your own use here.I hope you’ve gained a few more insights into what AJAX is and how you can use it to improve the user experience in a way that is safe and doesn’t leave certain segments of users out in the cold. AJAX makes stuff smoother, but nothing is more annoying than a supposed enhancement spoiling the whole experience.(al)© Christian Heilmann for Smashing Magazine, 2010. | Permalink | Be the first to comment | Add to del.icio.us | Digg this | Stumble on StumbleUpon! | Tweet it! | Submit to Reddit | Forum Smashing Magazine Post tags: AJAX, js
February 10 2010, 6:59am | Comments »