Search Logger
Archives for April, 2010.

Archive for April, 2010

Rey Bango of Ajaxian Interviews YUI Developers Adam Moore, Satyen Desai, and Luke Smith

4:25 pm - April 30, 2010 in Yahoo! User Interface Blog

Rey Bango of Ajaxian (and Microsoft) visited Yahoo! last week, and he has posted his interview of YUI core team members Adam Moore, Satyen Desai, and Luke Smith. Check it out on his blog or in the embed below.

 

Testing a New Homepage

11:21 am - April 30, 2010 in The Ask.com Blog

Some of you may have noticed a few changes to our homepage recently as we've recently started testing new versions of our site that highlight our focus on Q&A.  As part of the test we are more prominently featuring the Question of the Day and three popular questions.  The promotional units we introduced in January have proven popular with partners such as Autism Speaks, Avatar, Best Buy, Chili's, and Susan G. Komen for the Cure and so we created a 300x250 ad unit that will allow for larger and more interactive advertisements for our users without diminishing their experience.  You'll also notice some other changes including a new background hue that you can customize by installing one of the themes from the gallery.  In the header we have added links to our Web, Images, and Videos services.  As we mentioned in November, we are focused on providing the best question answering service available; the new design will allow us more flexibility to offer new features that we are hard at work on and hope to share more information about in the near future.  If you haven't yet seen the changes don't worry, you will soon.  Let us know what you think of the new design and stay tuned for more to come!

Tony Gentile

SVP, Product

A14 clean
 

 

 

Testing a New Homepage

11:21 am - April 30, 2010 in The Ask.com Blog

Some of you may have noticed a few changes to our homepage recently as we've recently started testing new versions of our site that highlight our focus on Q&A.  As part of the test we are more prominently featuring the Question of the Day and three popular questions.  The promotional units we introduced in January have proven popular with partners such as Autism Speaks, Avatar, Best Buy, Chili's, and Susan G. Komen for the Cure and so we created a 300x250 ad unit that will allow for larger and more interactive advertisements for our users without diminishing their experience.  You'll also notice some other changes including a new background hue that you can customize by installing one of the themes from the gallery.  In the header we have added links to our Web, Images, and Videos services.  As we mentioned in November, we are focused on providing the best question answering service available; the new design will allow us more flexibility to offer new features that we are hard at work on and hope to share more information about in the near future.  If you haven't yet seen the changes don't worry, you will soon.  Let us know what you think of the new design and stay tuned for more to come!

Tony Gentile

SVP, Product

A14 clean
 

 

 

A tale of two (and more) apps

8:16 pm - April 29, 2010 in Google Web Toolkit Blog

Robert Cooper gave a great lightning talk at our recent Atlanta GTUG meetup, where he discussed using a single codebase to target multiple mediums (e.g. Android, Facebook, Wave, etc.). This post was taken from his original post, which is a good read, providing sound pointers as to how you can maximize audience reach with minimal code changes.

Robert's original post

I love crossword puzzles.

In the time before time, I would stop at my local coffee shop and purchase a copy of the New York Times. I would flip to the crossword and with the classic "double fold" begin the crossword puzzle. Mobile devices soon took over the world, and subscribing to the electronic version soon made much more sense than killing all those trees. Last fall, I switched from the orchards of Cupertino to an Android device, alas, there was no good way for me to do the New York Times puzzle on my way to work anymore. Time to start a project.

I developed the original version of Shortyz for Android (named in honor of, and with apologies to, Will Shortyz of the NYT) in about three weekends. It had a number of usability issues and was rough around the edges, but it was "Good Enough for Me." Unfortunately, because of stolen laptop I lost some progress on the source and my market signing key (yeah, I know). So I decided to "do it right." Forgoing the Android classes I implemented my own two-dimensional scrolling, touch handling and rendering code. Now I am quite happy with the results.


Life is good. I am doing crosswords all the time! Enter other people. Pam Fox from Google emails me and asks about a version for Google Wave. Josh Marinacci of Palm IMs me and asks for a WebOS version. To borrow from jwz: "Some people when faced with a problem say, 'I'll use GWT.'" Unlike other technologies, I still only had one problem.

The new Shortyz code was much cleaner. I had implemented a Playboard class as the Controller of my MVC application and was completely independent of the UI code. I moved my IO classes out of the same package as my

Model classes, created a .gwt.xml file, and like that, I had the core of a GWT application. Implement a new UI and I am good to go.

Starting with my Android code, I had a playable web application in about five hours. Not bad, but like the first version of the Android code, I had some annoying usability issues and it was a little sluggish. After another day of work, I changed the UI code from using a play->render cycle like the Android app to use a more traditional MVC data binding system (based on Gwittir), and the performance problems were mitigated.

The next step was to take the web app and make it work everywhere! This is where Gin, a Google Guice DI for GWT apps, was key. My initial web app used a client side persistence mechanism to store play data (HTML5 LocalStorage, Gears, DOM Persistence, Flash). This works great for a standalone web app or a gadget, but for a Facebook version or Wave, I need alternative strategies. For my iGoogle version and Wave, I also need to make requests through the gadget.io API. Gin and Guice made this a breeze. Each of my versions simply becomes a new EntryPoint (or Gadget) class, a new Injector, and a new Module definition.

The real challenge came developing the Wave version. While Apache Shindig makes doing local development of Gadgets easy, there isn't an equivalent local harness for Wave gadgets, so you end up having to do a full build and deploy cycle to work on it. There are also some things that aren't clear from the Wave API docs that creep up, such as the maximum size allowed for the State object. After a solid 40 hours of work, though, I had a co-op play Wave gadget with player colors, remote cursors and nice playback support on the Wave.

So what is the take away here? "Extreme Source Compatibility" is a real thing. This is a Java application running on "Everything But The Java Platform" with the bulk of the code easily reused. Each subsequent version of the app took only a few hundred lines of code to get running. There are some important things to keep in mind. First, making sure your business logic and data models without dependencies on lots of external code is important. Since my Model layer was simple POJOs and my Controller layer pretty much just java.lang and java.util, there was a zero-hour ramp up time to make it work. Cleanly separating this code is also important. Since my input handling code and UI code was cleanly separated, this was much easier than it could have been to do the port. Finally, Guice rocks. While a lot of us in the "enterprisey" world understand the testability advantages of using a DI framework, many rarely have to provide lots of alternate implementations of classes. When you need it, though, it is amazingly handy to have a simple way to re-compose your whole application. Best of all, bugs I fixed in the core library while working on the web version rolled right into the original Android version unmodified.

As an interesting aside: GZipped, the GWT version is about the same size as the Android version; both are less than ~100K for the download. Custom code for each version makes up about 10% of the total LoC, with the exception of the Wave version where it is closer to 25%.

Quick colophon:
Wave for GWT via CoboGWave: http://code.google.com/p/cobogwave/
Gadget Support: http://code.google.com/p/gwt-google-apis/
Gin, Guice for GWT: http://code.google.com/p/google-gin/
Data binding, local storage and JSON serialization: http://code.google.com/p/gwittir/

 

HTML5 Video

4:52 pm - April 29, 2010 in IEBlog

There’s been a lot of posting about video and video formats on the web recently. This is a good opportunity to talk about Microsoft’s point of view.

The future of the web is HTML5. Microsoft is deeply engaged in the HTML5 process with the W3C. HTML5 will be very important in advancing rich, interactive web applications and site design. The HTML5 specification describes video support without specifying a particular video format. We think H.264 is an excellent format. In its HTML5 support, IE9 will support playback of H.264 video only.

H.264 is an industry standard, with broad and strong hardware support. Because of this standardization, you can easily take what you record on a typical consumer video camera, put it on the web, and have it play in a web browser on any operating system or device with H.264 support (e.g. a PC with Windows 7). Recently, we publicly showed IE9 playing H.264-encoded video from YouTube.  You can read about the benefits of hardware acceleration here, or see an example of the benefits at the 26:35 mark here. For all these reasons, we’re focusing our HTML5 video support on H.264.

Other codecs often come up in these discussions. The distinction between the availability of source code and the ownership of the intellectual property in that available source code is critical. Today, intellectual property rights for H.264 are broadly available through a well-defined program managed by MPEG LA.   The rights to other codecs are often less clear, as has been described in the press.  Of course, developers can rely on the H.264 codec and hardware acceleration support of the underlying operating system, like Windows 7, without paying any additional royalty.

Today, video on the web is predominantly Flash-based. While video may be available in other formats, the ease of accessing video using just a browser on a particular website without using Flash is a challenge for typical consumers. Flash does have some issues, particularly around reliability, security, and performance. We work closely with engineers at Adobe, sharing information about the issues we know of in ongoing technical discussions. Despite these issues, Flash remains an important part of delivering a good consumer experience on today’s web.

Dean Hachamovitch
General Manager, Internet Explorer

 

Additional publisher resources: Navigating DoubleClick Ad Planner

2:14 am - April 29, 2010 in Inside AdSense
In an effort to help our publishers navigate the array of Google products, we’re happy to announce the first part of our ‘Additional publisher resources’ video series. In these videos we aim to provide an introduction to other Google products that are of interest to AdSense publishers. We’ll cover topics such as how to maximize your site’s visibility to advertisers, how to ensure your site is properly indexed in Google’s search engine, how to make your site more interactive for users and how to gather information on your site’s traffic.

In the first part of our video series the AdSense team’s own Vijay Vachani will walk through the ins and outs of the DoubleClick Ad Planner. Vijay will explain how advertisers find information about your site through the Ad Planner, and how you can take advantage of the features available in the Ad Planner’s ‘Publisher Center”.



 

Product Feedback Systems

7:27 pm - April 28, 2010 in IEBlog

Several people on the Windows Internet Explorer team have written blog posts about our feedback mechanisms (our use of automated telemetry in Windows, how to write a great bug, how to submit bugs, etc) for IE9.  After looking at the many similarities and obvious differences between manual feedback systems and projects, we decided to use Microsoft Connect for IE9 and eliminate the invitation requirement for filing bugs.  In this post, I want to take a step back and talk about how we made that decision.

Every Internet Explorer user is a Windows customer.  Listening to customer feedback is vital to the success of any business.  As communication methods have evolved, how a business listens to its customers has changed as well.  Our customers have always been at the center of how we envision and design IE but the way we listen has evolved both with technology improvements and with the way our customers communicate with each other.

Our Internet Explorer 8 beta customers asked us to look at different options for how we listen.  We took their feedback to heart and looked deeply into all aspects of our feedback systems as well as those used by other software companies and in other industries.  We also looked into research regarding the effectiveness and efficiency of various ways of listening and responding to customers.  Most importantly, we listened to real customers, real enterprises, and real developers.

Each time we start a new project we begin by stepping back and looking across the feedback from the previous project and the engineering process by which we collected it.  We challenge all assumptions, especially those based on speed, size, or connectivity.  We also talk with people to see what they like and dislike about our competitors’ product and engineering process choices to see if Microsoft’s customers might benefit from something similar or more advanced.

One of the assumptions most software organizations appear to take for granted is the need for beta releases.  In fact, some companies have even taken this assumption well beyond its commonly understood meaning. So we asked ourselves, “Should we do betas and, if so, how many?  Should we do nightly builds?  Should we continue to use Microsoft Connect or move to something else?”

A group of us sat down and thought through the customer benefits and drawbacks of various models.  Ultimately, there are two main benefits to public releases:

  1. Feedback – customers reporting bugs on what is not working correctly
  2. Readiness – testing sites with the new browser, adding newly possible features to pages, preparing product support, writing documentation and books, adjusting tooling, etc.

There is a continuum of feedback models that ranges from completely closed to completely open.  Examples of completely closed betas include new PC models, cars, toasters, etc.  Examples of completely open models include some academic open source projects, school PTA projects, etc.  We’ve chosen something near the middle so we can get broad feedback on quality events but not completely anonymous or unstructured either because we believe in responsible engineering.

From our point of view, the most important thing about working on a consumer technology like a browser is respecting people’s scarce time and energy.  You can do this while still achieving your goals of getting everybody ready (from web developers to support professionals to corporations) for product launch and getting feedback on quality issues that only surface in unique configurations.  I want to call out a few important aspects about feedback systems:

  • Having a distinct start and end to the pre-release period is important.  Without this, people would gamble their business or personal browsing on the product always behaving in a predictable way.  Having beta customers running betas forever also neither respects their valuable time nor focuses that time on finding and reporting real defects. 
  • How often you send out builds depends heavily on your own ability to find defects.  We looked at the pros and cons of releasing “nightly builds” to beta testers.  Because we have a professional testing organization and a broad range of hardware on which we test, we find defects daily (many prior to checkin), fix those, and look for more.  When the IE team starts running low on new types of bugs to find, we get thousands of other professional Microsoft testers to start using IE9 to report any defects they find with IE9 as their daily default browser.  We call these folks “Self-host Testers” and they find an additional set of interesting bugs.  Again, when it appears that this group is running low on new bugs, we expand the scope even further and publish things like IE9 betas.  The risk of putting out daily builds across all audiences is that multiple beta testers waste their valuable time finding the same bug because they’re simply testing incomplete code. 
  • There is a decreasing effectiveness in the feedback as you expand the group of testers.  We looked at IE8 bug reports that were actionable versus those without enough data on which to make an effective code change to determine a signal vs. noise ratio.  For IE8, the signal to noise ratio in our bug database went from 3.1:1 to 2.6:1 when the code moved from Development to Test.  It dropped to 1.5:1 when other Microsoft testers started using it and reporting bugs.  It dropped to 0.73:1 when the rest of pre-release Windows users inside of Microsoft used it.  Finally, it dropped to just 0.64:1 across all the IE8 beta testers.  Closely related to the actual effectiveness of the bug reports is each group’s ability to produce a volume of effective bug reports.  The IE engineering teams produced more than five times the number of bug reports at six times the effectiveness of the beta program.  In other words, the IE engineering team was 30 times more efficient at finding actionable bugs than the IE beta testers in-aggregate over the same period of time.  Make no mistake though, the IE beta testers filed some great bug reports and we and Microsoft’s customers are glad they did!  For instance, bugs found on websites which require account login, special credentials such as smart cards, regionally-locked IP addresses, etc. are very important to us.
  • We really want to know if something doesn’t work as expected.  If you think there’s something wrong with a feature, please file a bug so we can make adjustments before IE is done.  We will manage that in a way that respects everyone’s time by helping people target their time and bug reports on reporting actual defects we haven’t yet found at Microsoft.  Bug reports come in all flavors and sizes.  They range from “I want feature x” to “Please add a whole new mode so I can use feature y this new way” to I tried feature x in the way you said it should work, but it doesn’t work that way.  Reports similar to the last example are the most useful.  When features don’t work like they should, we definitely want to know it

We also looked at various feedback tools when we started the project.  These included things like Bugzilla, Mantis, Launchpad, etc.  We compared them to Microsoft Connect, which is what nearly every Microsoft product uses to get beta feedback from customers.  It turns out that these tools are all amazingly similar.

We looked more deeply at Bugzilla and projects using it because it’s a tool that at least two other browser vendors use today.  We looked at the tool itself and how it handles bug workflow both from a beta site perspective and a product engineering perspective.  We found some really interesting similarities and differences:

  1. All of them require some kind of login.  Mozilla’s Bugzilla needs an email address to log-in. WebKit’s needs an email to log-in.  Both of them warn you of being spammed if you actually use your primary email account so you should get a new email account if you want to file bugs.  By contrast, Microsoft Connect uses a Windows Live account with either your current email account or a free new one.  In either case, your email address isn’t visible to people or web-bots mining the site to get email addresses for spamming campaigns.  We actually went one step further and require LiveID login to query the bugs, further reducing the risk to our beta users.  Connect also works for multiple Microsoft beta projects with a single account.
  2. They all handle entering issues by area, feature, or symptom.  All have some bug entry form where you fill out the details, including repro steps, title, etc.  They provide a way for you to give it a priority.  They let you provide great feedback (Bugzilla, Connect) or poor feedback (Bugzilla, Connect).
  3. Bug management differs considerably across projects though.  With IE8, we took action on every issue that was reported and we staffed our beta with Microsoft professional product support engineers so they could learn how to support the product while we built it.  By contrast, if you filed an issue with Firefox 3.5, it would sit at Unconfirmed until someone with “Can Confirm” privileges saw it, which may take years.  If a privileged person does happen to see it, it may eventually be seen by the engineers. 
  4. Bug closure also differs across Bugzilla and Connect.  For IE8, we took action on every bug and drove it to closure.  By contrast, as of 4/26/10, Mozilla’s Bugzilla had 12,779 unconfirmed bugs.  Webkit’s had 2,616 unconfirmed bugs across all versions but very few bugs against older versions.  Just like unemployment will never be 0%, it’s important to note that in-development projects will always have a non-zero number of bugs just as a normal part of bug management.  Each project team needs to understand and manage their inventory of bug reports to ensure a reasonable response time for their project testers.  For a project as complex as IE, that can be as large as a couple thousand issues active at any point during the project.

We made some engineering decisions on how to get the best possible feedback from our beta customers after doing all the research into different release cadences, feedback models, tools, and bug management processes. We want to respect our customers’ time and energy so we’re going to distribute more focused Platform Preview builds when there are new platform features ready for people to test drive. 

Thanks for all the great feedback in IE8. We’re looking forward to building a great IE9 release!

Jason Upton
Test Manager – Internet Explorer

 

In the YUI 3 Gallery: Peter Peterson’s Ratings Widget

11:46 am - April 28, 2010 in Yahoo! User Interface Blog

About the author: Peter Peterson is a lead front-end engineer for Yahoo!’s internal developer tools.

I wanted to get my feet wet with the finalized widget infrastructure presented in YUI 3.1.0, and I’ve always felt the best way to do that is to write some code. I wanted something easy, and I found that in a CSS ratings implementation I found on Komodo Media. The resulting widget is the YUI3 Ratings Widget (demo). The bulk of the work of the widget is handled by CSS and is described well in the Komodo Media article. The only trouble with that widget, was once a rating was chosen, nothing really happened unless the page was reloaded, and when the widget lost focus, it lost its rating. This is where the YUI 3 Gallery Ratings widget comes in.

My goals for the project were:

  • The code for the widget should be just enough to touch on the basics for how to create a YUI 3 widget
  • The widget would progressively enhance the page
  • The user’s interaction with the widget is easily captured
  • Add a clear rating button which does not exist in the original design
  • The widget should be accessible for people using screen readers
  • Make the instantiation and interaction with the widget dead simple with as little code as possible.

It is easy to add the ratings widget to your page using the YUI loader:

YUI({
    gallery: 'gallery-2010.04.14-19-47'
}).use('gallery-ratings','event', function(Y) {
    // Program logic...
});

You’ll also need the image assets and CSS file located located at github or from your own copy of the gallery.

Simply add a node in your source that contains the current rating (any number between 0 – 5) or is empty.

<span id="myWidget">2.5</span>

You can then instantiate the widget with the following code in your sandbox:

var myRating = new Y.Ratings({ srcNode: "#myWidget" });
myRating.render();

I felt that it was important to make this widget easy to customize and so I added some configuration to the constructor. inline when set to true will display the rating inline with text on the page (defaults to false). skin can be set to “small” to decrease the size of the widget ( Example: )

On its own, the ratings widget does little more that set up the rating interaction for the user. A little more work needs to be done to actually use the value. I’m leaving that up to the implementer to consider; whether to add a callback to the event fired when the rating changes, or to supply a plugin to the widget to handle it automatically. To get you started, whenever a rating is changed the ratingChange event fires. It is easy to set up an event listener to catch the ratingChange event for all the widgets on the page. In this example, I log the Rating Widget srcNode’s id, the previous rating, and the new rating for any rating widget on the page when the rating changes:

Y.on("ratings:ratingChange",function(e){
  var id = e.target.get("contentBox").get("id");
  Y.log(id+" New Value: "+e.newVal+" was: "+e.prevVal);
});

Future ideas for the project:

  • Progressively enhance form elements
  • Make the clear rating button optional
  • Make the rating range configurable
  • More skins, and combination of the CSS sprites
  • Internationalization
 

Discover v2009: Error handling in BulkMutateJobService.

7:03 am - April 28, 2010 in AdWords API Blog
In our previous blog post, we discussed how v2009 error handling works in synchronous APIs. In this blog post, we cover asynchronous error handling in BulkMutateJobService. If you are new to BulkMutateJobService, check out our introductory blog post and code.google.com article.

Due to its asynchronous nature, error handling in BulkMutateJobService is slightly different than in other services. Instead of throwing an ApiError object, BulkMutateJobService returns FailureResult or BatchFailureResult objects as its operation results. These objects in turn contain the relevant ApiErrors. BulkMutateJobService processes the operations within an operation stream in multiple atomic batches. If there is even one faulty operation in a batch, it causes the other non-faulty operations in the batch to fail as well. When a batch of n operations fails, you will get one FailureResult and n - 1 BatchFailureResults as results for the failed batch of operations. The FailureResult object will always be first in the batch, and will contain one ApiException object. The ApiException contains all the errors for the entire batch of operations, just like for other services. This will be followed by n - 1 BatchFailureResults, which can be viewed as placeholders, one for each operation in the batch.

For instance, assume that you are trying to create the following 9 text ads in a single OperationStream. For the purposes of this example, assume that the system processes operations in batches of 3. The errors are highlighted in red.



































































IndexAdDestination UrlError
0New York Budget Hotel
Clean and close to subway.
Students save 20%!
www.example.com/NewYork
http://www.example.com/NewYork

1Book New York Hotel Deals
Research your New York Stay. Deals
up to 70% from example.com.
www.example.com/NewYork
http://www.example.com/NewYork

2Hotels In New York
Book your hotel room online at a
lower price via example.com!!
www.example.com/NewYork
http://www.example.com/NewYork
Excessive punctuation in description2
3Manhattan Best Hotel
Experience the Best of Manhattan
For Rates As Low As $239/Night.
www.example.com/NewYork
www.example.com/NewYork
Missing schema in destination url.
4New York City Hotels Discount
Discounted Rooms in New York City.
Get Lowest Rates Available Today.
www.example.com/NewYork
http://www.example.com/NewYork

5New York City Hotels
Stay Smart in New York NY.
Free internet & breakfast bar.
www.example.com/NewYork
http://www.example.com/NewYork

670% Off New York Hostels
Why Pay More? From $10 We Guarantee
Lowest Prices - From 1 Night
www.example.com/NewYork
http://www.example.com/NewYork

7Stylish New Hotel in NYC
Enjoy Four-Star Amenities & Service
Chelsea/Fashion District. Book Now!
www.example.com/NewYork
http://www.example.com/NewYork

8Budget Lodging in NYC
Comfortable, Clean Modern Economy
Hotel.Great Downtown Location!
www.example.com/NewYork
http://www.example.com/NewYork





When BulkMutateJobService processes these operations, it will return the following results:


Result[0]: FailureResult.
ApiException.errors has one ApiError
PolicyViolationError @ operations[2].operand.ad.description2
Result[1]: BatchFailureResult, operationIndexInBatch = 1
Result[2]: BatchFailureResult, operationIndexInBatch = 2

Result[3]: FailureResult.
ApiException.errors have 1 ApiError
AdError.URL_NO_SCHEME @ operations[0].operand.ad.url
Result[4]: BatchFailureResult, operationIndexInBatch = 1
Result[5]: BatchFailureResult, operationIndexInBatch = 2

Result[6]: ReturnValueResult, successfully created Ad.
Result[7]: ReturnValueResult, successfully created Ad.
Result[8]: ReturnValueResult, successfully created Ad.

As shown in the results above, there is a 1:1 correspondence between the number of operations and number of results. You can get the successful operations by scanning the return value for results which are not FailureResult or BatchFailureResult (operations 6, 7 and 8 in this case). Then, scan through the results to locate FailureResult objects (which always appear at the beginning of the failed batch) to get the operation that actually failed (operations 2 and 3 in this case). You can now pick the failed operations that do not correspond to the ones obtained from FailureResult, and make a new job for them (0, 1, 4, 5). Note that the OGNL path in FailureResult is relative to the batch and not the operationstream, so you have to offset it by the index of FailureResult to get the failed operation (e.g. Results[3] is a FailureResult and its OGNL path is operations[0].operand.ad.url, so the failing operator in the original list is 3 + 0 = operations[3]).

A BulkMutateJob may also return the following error results, even though they're not common:

LostResult: This happens when BMJS has lost results for some of a job's operations. You can recover from this error by checking numFailedOperations and numUnprocessedOperations for the job. If both are zero, or if the number of errors in ApiError matches numFailedOperations, then the operations were successful, but the results are missing. In any other case, you have to retrieve the entities that were targeted by the operations and see if the operation actually succeeded or not.

UnprocessedResult: This indicates that the mutate operation was not processed. This could happen because the workflow implementation prevented the operation from being processed (e.g. the operations exceed API quota). You can recover from this issue by checking the job status, making sure that you have sufficient API quota left, and simply retrying the operations in a new job.

In an upcoming blog post, we will cover the most common errors you may get in v2009, and how to address them. We've included support for error handling in all of our client libraries to help get you started, so please try it out and share your feedback with us on the forum or the projects' issue trackers.

-- Anash P. Oommen, AdWords API Team
 

Bridging the gap: Branding campaigns

5:42 pm - April 27, 2010 in Inside AdSense
In the last post in our "Bridging the Gap" series, lets explore how advertisers build tailored campaigns to promote their businesses.

My team and I work mostly with medium-sized businesses that try to be as efficient as possible with their online ad spend. In the past, we found that direct response campaigns (which ask users to make a purchase or sign up for a newsletter) were more common than pure branding campaigns. However, I've seen firsthand that advertisers are slowly but surely beginning to understand the value of online advertising as an extremely cost-efficient, effective and measurable branding mechanism.

As publishers, this means that you'll have more opportunities to capitalize on the increased ad competition that brand campaigns bring. Below I'll explain what types of brand campaigns we see, how advertisers select publishers to include in brand media plans, and how you can ensure that your sites make it in.

Types of Branding Campaigns
The most important difference between direct response and brand campaigns is that brand campaigns aren't focused on driving direct conversions. The goals of online "pure brand" campaigns are very similar to offline ads: reach a specific audience with a sticky message that builds recognition, favor, and/or credibility of the brand. Another type of brand campaign called "brand response" aims to reach a targeted audience and elicit some form of action. Common types of brand response goals include increased searches on brand terms, unique visitors to the advertiser's site, and user interaction on site.

To achieve these goals, most brand campaigns have the following characteristics:
  • CPM pricing
  • Flighted dates (specific, short period of time for an advertising campaign)
  • Display ads
  • Placement targeting* (Brand advertisers, especially pure brand advertisers want to ensure that they reach a specific audience by targeting certain sites)
*Though placement targeting is the traditional method for branding, we are seeing a lot of successful brand response campaigns running both placement AND contextual targeting.

Building a Media Plan
When advertisers choose sites to include in the media plan for a brand campaign, they consider much more than 'will it convert?' The top things on their minds as they choose sites to target are:
  • Does it have a high composition of their target audience?
  • Is it aesthetically pleasing?
  • Does it have highly visible, above-the-fold inventory?
  • Does it accept image, flash and video ads?
  • What is the average CPM?
Boost Your Chances of Being Included in a Brand Media Plan
As mentioned, brand campaigns are great for publishers because advertisers are willing to pay a premium for sites they want to show on. This means more revenue for you.

One of the best ways to maximize the chances of being included in a media plan is to update your site information in the Ad Planner Publisher Center. Google Ad Planner is the media planning tool advertisers use to select inventory on the content network. Ad Planner allows advertisers to filter sites by audience composition, accepted ad formats and sizes, reach, unique visitors and daily pageviews.

Other important steps you can take:
  • Accept image and video ads
  • Provide above-the-fold, premium placement ad slots
  • Open up real estate on your homepage
  • Opt to receive placement targeted ads
 
 
 
 
 
 
It's All About Search | © clsc.net |
2012.02.0421:08
Tech used here: Valid HTML - Valid CSS - Valid RSS - JavaScript - PHP - Smarty - MySQL - and a partridge in a pear tree.