<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>PixelMEDIA</title>
	
	<link>http://blog.pixelmedia.com</link>
	<description>The official staff chatter blox</description>
	<lastBuildDate>Wed, 11 Nov 2009 13:23:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Pixelmedia" type="application/rss+xml" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FPixelmedia" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FPixelmedia" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FPixelmedia" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/Pixelmedia" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FPixelmedia" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FPixelmedia" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FPixelmedia" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Getting Started With Bots in Google Wave</title>
		<link>http://feedproxy.google.com/~r/Pixelmedia/~3/ws5MxTLBXy0/</link>
		<comments>http://blog.pixelmedia.com/getting-started-with-bots-in-google-wave/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 13:22:05 +0000</pubDate>
		<dc:creator>Chris Dahlen</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[bots]]></category>
		<category><![CDATA[Google Wave]]></category>
		<category><![CDATA[Google Wave bots]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.pixelmedia.com/?p=779</guid>
		<description><![CDATA[Last month, our Director of Engineering landed a few Google Wave invites and shared them with the team.  When I started playing with mine, I wasn’t even interested in talking with other people: I wanted to start playing with bots.  Google Wave is a terrific environment for bots and other automated tools, and with Google, [...]]]></description>
			<content:encoded><![CDATA[<p>Last month, our Director of Engineering landed a few Google Wave invites and shared them with the team.  When I started playing with mine, I wasn’t even interested in talking with other people: I wanted to start playing with bots.  Google Wave is a terrific environment for bots and other automated tools, and with Google, they’re easy to code and deploy.</p>
<p>“Bot” is a term for any piece of software that can run tasks on the Internet.  Chatbots or chatterbots can carry on simple conversations or relay information to you; spyware bots can hack into your computer and plague your hard drive.  Used properly and legally, bots are convenient and helpful devices that can look up or process information for you.  Or they can just tell bad jokes.<span id="more-779"></span></p>
<p>For my first Google Wave bot, I decided to make a joke bot.  The concept was simple: you tell it a joke; it tells you a joke back.  The first version used a stock list of jokes that I had coded into it, but in the second iteration, I hooked it to a database and allowed it to learn and use every joke it heard.  This seemed like a good training exercise, and I managed to finish and debug it in about an afternoon.</p>
<p>Google makes the whole process very simple.  I started with these tutorials:</p>
<ul>
<li><a href="http://code.google.com/appengine/docs/whatisgoogleappengine.html" target="new">Getting Started with the Google App Engine</a>.  Your Google Wave bot will run on Google’s App Engine, which is free (up to a point).  The App Engine will host the app and its data, and it currently supports Java and Python.  I went with <a href="http://code.google.com/appengine/docs/java/gettingstarted/" target="new">Java</a>, and once I had installed Google’s SDK into Eclipse, I was able to compile and deploy my app with a single click.</li>
<li><a href="http://code.google.com/apis/wave/extensions/robots/java-tutorial.html" target="new">Google Wave Bots: Java Tutorial</a>.  A step-by-step guide to coding your first bot. </li>
</ul>
<p>Now, as simple as this was, working with Google Wave presents other problems.  Google Wave is still not in a “final” release state, so you may run into bugs <a href="http://www.bitsbythepound.com/2009/10/29/first-experience-with-google-wave-robot/" target="new">like this one</a>, where everything I coded my bot to say was printed twice.  (Luckily, hunting around the forums led me quickly to this workaround.)  At this stage, you also can’t deploy and test them locally; once it’s live, you’ll have to balance every new feature you’d like to add against the risk of breaking the bot while people are using it.</p>
<p>But aside from these early-release quirks, I was impressed by how much trouble Google had taken to get people up and running with their bots – and I was even more impressed by the potential of these applications.  I used the App Engine to tell simple jokes, but you could build an application of far greater complexity into this interface – or connect to a solution that you host yourself, and that you coded in the language of your choice, and use the App Engine as a proxy into Wave.</p>
<p>The next challenge is simply to spread the word about the bot and get people to use it.  There are several public waves where you can test or discuss bots, although “spambots” – basically, any bot that speaks when it isn’t spoken to – are discouraged.  But I ended up using older social media tools like Reddit.com and Twitter.com to spread the word.  Wave is a powerful tool &#8211; but until more people get invites, the community will still feel small.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fblog.pixelmedia.com%2Fgetting-started-with-bots-in-google-wave%2F';
  addthis_title  = 'Getting+Started+With+Bots+in+Google+Wave';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=ws5MxTLBXy0:bT-7MAlHhks:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=ws5MxTLBXy0:bT-7MAlHhks:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=ws5MxTLBXy0:bT-7MAlHhks:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=ws5MxTLBXy0:bT-7MAlHhks:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=ws5MxTLBXy0:bT-7MAlHhks:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=ws5MxTLBXy0:bT-7MAlHhks:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=ws5MxTLBXy0:bT-7MAlHhks:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=ws5MxTLBXy0:bT-7MAlHhks:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=ws5MxTLBXy0:bT-7MAlHhks:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=l6gmwiTKsz0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pixelmedia/~4/ws5MxTLBXy0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pixelmedia.com/getting-started-with-bots-in-google-wave/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.pixelmedia.com/getting-started-with-bots-in-google-wave/</feedburner:origLink></item>
		<item>
		<title>Can you hear me now? – Sprint solves an inner-building cell coverage issue</title>
		<link>http://feedproxy.google.com/~r/Pixelmedia/~3/_2L7RpBnt0w/</link>
		<comments>http://blog.pixelmedia.com/can-you-hear-me-now-sprint-solves-an-inner-building-cell-coverage-issue/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 21:17:47 +0000</pubDate>
		<dc:creator>James Spires</dc:creator>
				<category><![CDATA[Information Technology]]></category>
		<category><![CDATA[Sprint Cell Phone Repeater Spires Technology]]></category>

		<guid isPermaLink="false">http://blog.pixelmedia.com/can-you-hear-me-now-sprint-solves-an-inner-building-cell-coverage-issue/</guid>
		<description><![CDATA[We recently moved into a beautiful new LEEDS certified office space. One problem we quickly discovered &#8211; steel beam construction and high efficiency walls wreak havoc on our cell phone reception. Adding to this challenge is the fact that we are also located on the bottom floor of a three story building, so cell phone [...]]]></description>
			<content:encoded><![CDATA[<p>We recently moved into a beautiful new LEEDS certified office space. One problem we quickly discovered &#8211; steel beam construction and high efficiency walls wreak havoc on our cell phone reception. Adding to this challenge is the fact that we are also located on the bottom floor of a three story building, so cell phone coverage in most of the inner office space was non-existent. This caused the obvious cell problems for staff &#8211; specifically the IT and support teams, whom provide 24&#215;7 on-call support services for our vast client base.</p>
<p><span id="more-766"></span>After researching signal amplifiers we spoke to our local Sprint Rep. Al Johnson and asked about our options. Our challenge was to find a way to boost the cell phone signal from our carrier, Sprint, across an entire building. Talking with Al it became apparent that a string of low-end cell repeaters strewn through the office would not support the signal boost at the distances we needed to cover = roughly 27,000 sq ft.</p>
<p>Sprint’s solution was to install a set of commercial grade CDMA / IDEN signal boosters in our office with a set of cell repeater antennas on the roof of our facility. It took a couple technicians two days to complete the installation.</p>
<p>The system is comprised of three cone shaped, matte white, internal antennas that hang down a couple inches off the ceiling in various locations around our office. Two signal amplifier units are wall mounted in a back room (each roughly the size of a toaster oven). There are a pair of two inch thick antenna wires that run out through the building and up to the roof. This is some serious commercial grade cellular amplification.</p>
<p>Now that the system is installed an employee joked that they get 6 out of 5 bars on their Sprint phone. We now have full bars in every corner of the building.</p>
<p>This has proven to be a great solution, and Sprint&#8217;s support and responsiveness was impressive, so we thought we&#8217;d share it with you. Hats off to Al Johnson and the Sprint team that helped make this happen in short order.</p>
<p>and Yes, we can hear you now.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fblog.pixelmedia.com%2Fcan-you-hear-me-now-sprint-solves-an-inner-building-cell-coverage-issue%2F';
  addthis_title  = 'Can+you+hear+me+now%3F+%26%238211%3B+Sprint+solves+an+inner-building+cell+coverage+issue';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=_2L7RpBnt0w:3XtH6dsNZRA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=_2L7RpBnt0w:3XtH6dsNZRA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=_2L7RpBnt0w:3XtH6dsNZRA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=_2L7RpBnt0w:3XtH6dsNZRA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=_2L7RpBnt0w:3XtH6dsNZRA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=_2L7RpBnt0w:3XtH6dsNZRA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=_2L7RpBnt0w:3XtH6dsNZRA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=_2L7RpBnt0w:3XtH6dsNZRA:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=_2L7RpBnt0w:3XtH6dsNZRA:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=l6gmwiTKsz0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pixelmedia/~4/_2L7RpBnt0w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pixelmedia.com/can-you-hear-me-now-sprint-solves-an-inner-building-cell-coverage-issue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.pixelmedia.com/can-you-hear-me-now-sprint-solves-an-inner-building-cell-coverage-issue/</feedburner:origLink></item>
		<item>
		<title>Pay Attention to Your Landing Pages</title>
		<link>http://feedproxy.google.com/~r/Pixelmedia/~3/YQUEBkpHmd8/</link>
		<comments>http://blog.pixelmedia.com/pay-attention-to-your-landing-pages/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 14:30:31 +0000</pubDate>
		<dc:creator>Matt Umbro</dc:creator>
				<category><![CDATA[Client Services]]></category>
		<category><![CDATA[Search Engine Marketing]]></category>
		<category><![CDATA[landing pages]]></category>
		<category><![CDATA[pay-per-click]]></category>
		<category><![CDATA[ppc]]></category>

		<guid isPermaLink="false">http://blog.pixelmedia.com/?p=731</guid>
		<description><![CDATA[In my experience managing pay-per-click (PPC) campaigns, a frequently overlooked topic is the landing page.  Once your users click your ad, where are they going to go?  Setting up a structurally sound campaign is imperative, but it is only half the equation.  The user needs to land on a page that continues the messaging and [...]]]></description>
			<content:encoded><![CDATA[<p>In my experience managing pay-per-click (PPC) campaigns, a frequently overlooked topic is the landing page.  Once your users click your ad, where are they going to go?  Setting up a structurally sound campaign is imperative, but it is only half the equation.  The user needs to land on a page that continues the messaging and call to action that is used in the ad.</p>
<p>Several factors go into creating a good landing page, none of which should be ignored.  These techniques will determine how many of your clicks turn into conversions.  Conversion rate, as I have previously <a title="The Three Tiers of a PPC Campaign" href="http://blog.pixelmedia.com/the-three-tiers-of-a-ppc-campaign/" target="_blank">written about</a>, is a tier one success indicator of how well your campaign is doing.  Give your users an effective landing page, and you should see your conversion rates increase.</p>
<p><span id="more-731"></span></p>
<p>I am going to discuss the technique that has had the greatest impact on conversion rates in my campaigns.</p>
<p><strong>Clear Messaging</strong></p>
<p>Your landing pages need to clearly state what you want the user to do.  Never assume that the user knows what to do.  Make the conversion process as easy and forthright as possible.</p>
<p>Let’s take an example.  If I do a search for “Rawlings baseball gloves,” I see these ads:</p>
<p><img class="alignnone size-full wp-image-732" src="http://blog.pixelmedia.com/wp-content/uploads/2009/11/Rawlings_Ad_1.JPG" alt="Rawlings_Ad_1" width="205" height="55" /></p>
<p><img class="size-full wp-image-733 alignnone" src="http://blog.pixelmedia.com/wp-content/uploads/2009/11/Rawlings_Ad_2.JPG" alt="Rawlings_Ad_2" width="206" height="54" /></p>
<p>Both ads advertise Rawlings baseball gloves, but which company has the better landing page?  The first ad leads to a page that immediately shows Rawlings baseball gloves:</p>
<p><img class="alignnone size-full wp-image-734" src="http://blog.pixelmedia.com/wp-content/uploads/2009/11/Rawlings_Landing_Page.JPG" alt="Rawlings_Landing_Page" width="493" height="235" /></p>
<p>The second ad leads to the company’s homepage, where customers are forced to search for the product they’re ready to buy.  The second ad will most likely lead to a bounce, because it doesn’t take the user to a relevant page.  By contrast the first ad takes the user right to the product, capturing the user right away and increasing the chance of a purchase.</p>
<p>Another example of a landing page honed for lead generation is one that contains a specific download and a form:</p>
<p><img class="alignleft size-full wp-image-735" src="http://blog.pixelmedia.com/wp-content/uploads/2009/11/Landing_Page_Form.JPG" alt="Landing_Page_Form" width="452" height="446" /></p>
<p>This page combines the registration form and the download function.  Instead of working through two different screens, the user can fill out the form and read the content on the same page.</p>
<p>Here are some other techniques that I have found to improve conversion rates.</p>
<p><strong>Length of Form</strong></p>
<p>If you ask a user to complete a form, be careful not to ask for too much information.  Too often companies ask for everything within this first interaction.  Users see the length of the form and are scared away.  Even if many of the fields are optional, a user’s first instinct is to leave because the form is too long. By asking for less, you improve your chances of converting that user.  Further user information can be gathered by a follow up email or phone call.</p>
<p><strong>Appropriate Tabbing Structure</strong></p>
<p>When filling out the form the user should be able to hit the tab key to go to the next field.  It can be frustrating (and a bit annoying) to use the mouse to get to the next field.</p>
<p><strong>Privacy Policy</strong></p>
<p>Let’s face it, the internet is not the safest place in the world.  Users are weary of giving out their contact information.  For this reason you should include some sort of privacy statement on your landing page.  Whether it be a link to the site privacy policy or a message that assures your users their information will be kept confidential, this item is a must have.</p>
<p><strong>Browser Compatibility and Screen Resolution</strong></p>
<p>Ideally your landing pages should be compatible with all browsers, even the obscure ones.  At a minimum, though, make sure the pages are compatible with Internet Explorer, Firefox, Safari, and Chrome.  These pages should also be compatible with the different versions of these browsers.</p>
<p>Screen resolution is another important factor.  Your key messages and calls to action should appear “above the fold” even in lower resolutions.  Above the fold means the items in your landing page that users do not need to scroll down to see.  Users have several other options and are not going to wait around for you to make your point.</p>
<p><strong>Conclusion</strong></p>
<p>The most important advice is to make sure what you say in an ad is what the user sees on the landing page.  Ultimately you are throwing money away if you are not giving your customers the right user experience.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fblog.pixelmedia.com%2Fpay-attention-to-your-landing-pages%2F';
  addthis_title  = 'Pay+Attention+to+Your+Landing+Pages';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=YQUEBkpHmd8:SiHcL-FLfCk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=YQUEBkpHmd8:SiHcL-FLfCk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=YQUEBkpHmd8:SiHcL-FLfCk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=YQUEBkpHmd8:SiHcL-FLfCk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=YQUEBkpHmd8:SiHcL-FLfCk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=YQUEBkpHmd8:SiHcL-FLfCk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=YQUEBkpHmd8:SiHcL-FLfCk:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=YQUEBkpHmd8:SiHcL-FLfCk:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=YQUEBkpHmd8:SiHcL-FLfCk:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=l6gmwiTKsz0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pixelmedia/~4/YQUEBkpHmd8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pixelmedia.com/pay-attention-to-your-landing-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.pixelmedia.com/pay-attention-to-your-landing-pages/</feedburner:origLink></item>
		<item>
		<title>Good Service is Possible Anywhere</title>
		<link>http://feedproxy.google.com/~r/Pixelmedia/~3/uoWcC2egOIw/</link>
		<comments>http://blog.pixelmedia.com/good-customer-service/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 20:17:42 +0000</pubDate>
		<dc:creator>Chris Goodwin</dc:creator>
				<category><![CDATA[Client Services]]></category>
		<category><![CDATA[Customer Service]]></category>
		<category><![CDATA[PixelMEDIA]]></category>

		<guid isPermaLink="false">http://blog.pixelmedia.com/?p=720</guid>
		<description><![CDATA[This week, I had a client say to me, “I really appreciate your responsiveness – it’s refreshing”. The compliment itself, while nice and very much appreciated, is not noteworthy. I clung to the “it’s refreshing” portion. As a paid vendor, I expect that our clients demand service that is both high-quality and timely. Good service [...]]]></description>
			<content:encoded><![CDATA[<p>This week, I had a client say to me, “I really appreciate your responsiveness – it’s refreshing”. The compliment itself, while nice and very much appreciated, is not noteworthy. I clung to the “it’s refreshing” portion. As a paid vendor, I expect that our clients demand service that is both high-quality and timely. Good service should not be “refreshing”.</p>
<p><span id="more-720"></span>Another client of ours recently had a vendor tell them, “any change request will take a minimum of 2 – 3 weeks.” Hearing this immediately had my brain thinking about ways to accomplish the change while bypassing the other vendor. I could fly to the vendor’s office, get a job there, and personally make the change they requested in less time. Examples of poor service are everywhere and I’d bet my career everyone reading this can provide an example right now.</p>
<p>Good customer service surprises people and warrants notice? Has poor service become the norm? If so, why? Is it too expensive or difficult to make top-notch service a priority? I don’t think so.</p>
<p>As the Director of PixelMEDIA’s On-Demand Support &amp; Maintenance Team, my most important responsibility is to make sure all of our clients receive quality, timely, and consultative service. We’ve been successful doing this for the 10 years I’ve managed this team, but we are not overly clever or creative in the steps we take to do it.</p>
<p>For the benefit of anyone out there that is not satisfying their clients and customers to the standard we’re held to by PixelMEDIA, here’s a list of things we do everyday to be a successful service provider:</p>
<ul>
<li>We take this responsibility very seriously.</li>
<li>We are genuinely interested in helping our clients be successful.</li>
<li>Every member of the team is empowered to make decisions to benefit the client.</li>
<li>We push back on our clients when we feel a better solution can be found. Even if it’s a smaller-budget solution.</li>
<li>Our processes are designed around an optimal client experience.</li>
<li>We have well-defined escalation and backup procedures.</li>
<li>We don’t let factors within our control, such as the 5:00 whistle, prevent us from fulfilling our client’s needs.</li>
<li>Clients are encouraged to let us know if they’re even slightly disappointed.</li>
</ul>
<p>That’s about it. As I expected, there is nothing clever, creative, or innovative on that list. For me, it’s really just a matter of caring.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fblog.pixelmedia.com%2Fgood-customer-service%2F';
  addthis_title  = 'Good+Service+is+Possible+Anywhere';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=uoWcC2egOIw:UEe2chNP4-4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=uoWcC2egOIw:UEe2chNP4-4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=uoWcC2egOIw:UEe2chNP4-4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=uoWcC2egOIw:UEe2chNP4-4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=uoWcC2egOIw:UEe2chNP4-4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=uoWcC2egOIw:UEe2chNP4-4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=uoWcC2egOIw:UEe2chNP4-4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=uoWcC2egOIw:UEe2chNP4-4:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=uoWcC2egOIw:UEe2chNP4-4:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=l6gmwiTKsz0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pixelmedia/~4/uoWcC2egOIw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pixelmedia.com/good-customer-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.pixelmedia.com/good-customer-service/</feedburner:origLink></item>
		<item>
		<title>Run Your Geographic Reports</title>
		<link>http://feedproxy.google.com/~r/Pixelmedia/~3/i2L5AmsgrIE/</link>
		<comments>http://blog.pixelmedia.com/run-your-geographic-reports/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 13:00:12 +0000</pubDate>
		<dc:creator>Matt Umbro</dc:creator>
				<category><![CDATA[Search Engine Marketing]]></category>
		<category><![CDATA[Geographic Performance Report]]></category>
		<category><![CDATA[Google AdWords]]></category>
		<category><![CDATA[Pay-Per-Click (PPC)]]></category>

		<guid isPermaLink="false">http://blog.pixelmedia.com/?p=693</guid>
		<description><![CDATA[Google AdWords offers many great reports to help you determine the success of your pay-per-click (PPC) campaign.  I’ve already discussed the benefits of the Search Query Performance report, but today I’m going to discuss the importance of the Geographic Performance report.

The Geographic Performance report allows you to segment campaign data by geographic origin, down to [...]]]></description>
			<content:encoded><![CDATA[<p>Google AdWords offers many great reports to help you determine the success of your pay-per-click (PPC) campaign.  I’ve already discussed the benefits of the <a title="Run Your Search Query Reports" href="http://blog.pixelmedia.com/run-your-search-query-reports/" target="_blank">Search Query Performance report</a>, but today I’m going to discuss the importance of the Geographic Performance report.</p>
<p><span id="more-693"></span></p>
<p>The Geographic Performance report allows you to segment campaign data by geographic origin, down to the city level.  Here’s an example: of the 50 conversions you received last month, you can see that 28 came from California, while two came from Michigan.  Going even more granular into the report by checking the “City” option (see screenshot below), you find that 10 of the California conversions originated from Los Angeles while 5 came from Sacramento.</p>
<p><img class="size-full wp-image-695 alignnone" src="http://blog.pixelmedia.com/wp-content/uploads/2009/10/Campaign_Detail.jpg" alt="Image of Geographic Report Options" width="516" height="90" /></p>
<p>So what action items can you take from this report?  You may decide to change which region(s) receive most of your budget.  Let’s take the example from above.  Your campaign is targeting the entire United States with a budget of $150 per day.  You find that over half of your conversions originated in California so you might decide to create a new campaign that only targets California.  Of the original $150, you set aside $65 to be used in this campaign.  You are still targeting the entire country through two campaigns, but you are better exposing your ads in a region where you have a history of getting conversions.</p>
<p>You can also exclude your ads from running in regions where you are not seeing satisfactory results.   For example, while running the report you notice that the state of Pennsylvania has a lower conversion rate and a higher CPA than your national average.  You go deeper into the report and determine that the city of Pittsburgh is using a lot of your budget without delivering results.  You may decide to block your ads from showing in Pittsburgh.</p>
<p>Keep in mind that the Geographic Performance report should not be the only source of information when you decide to segment or exclude regions.  You also need to review your analytics and the quality of the leads you are receiving from each region.  Used in conjunction with these other factors, the Geographic Performance report can help you increase your revenue while excluding unproductive regions from the campaign.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fblog.pixelmedia.com%2Frun-your-geographic-reports%2F';
  addthis_title  = 'Run+Your+Geographic+Reports';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=i2L5AmsgrIE:MMfkxULTTY0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=i2L5AmsgrIE:MMfkxULTTY0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=i2L5AmsgrIE:MMfkxULTTY0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=i2L5AmsgrIE:MMfkxULTTY0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=i2L5AmsgrIE:MMfkxULTTY0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=i2L5AmsgrIE:MMfkxULTTY0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=i2L5AmsgrIE:MMfkxULTTY0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=i2L5AmsgrIE:MMfkxULTTY0:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=i2L5AmsgrIE:MMfkxULTTY0:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=l6gmwiTKsz0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pixelmedia/~4/i2L5AmsgrIE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pixelmedia.com/run-your-geographic-reports/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.pixelmedia.com/run-your-geographic-reports/</feedburner:origLink></item>
		<item>
		<title>My top 10 writing reminders.</title>
		<link>http://feedproxy.google.com/~r/Pixelmedia/~3/i3whdRR9SfI/</link>
		<comments>http://blog.pixelmedia.com/my-top-10-writing-reminders/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 21:27:01 +0000</pubDate>
		<dc:creator>Luke Michel</dc:creator>
				<category><![CDATA[Content Strategy]]></category>
		<category><![CDATA[Experience Design]]></category>

		<guid isPermaLink="false">http://blog.pixelmedia.com/?p=664</guid>
		<description><![CDATA[Even after all these years, I check off a handful of reminders whenever I sit down to write or edit a web page. It's not about being creative and using big words, it's about respecting the time and intelligence of the reader. ]]></description>
			<content:encoded><![CDATA[<p><strong></strong>Even after all these years, a handful of reminders help me get off to a good start whenever I sit down to write or edit a web page. It&#8217;s not about being creative and using big words, it&#8217;s about respecting the time and intelligence of the reader. By the way, most of these apply equally well when writing for print, direct mail, and everyday email.</p>
<p><strong><span id="more-664"></span>1.  Be brief.</strong></p>
<p>Most visitors come to your website to accomplish a specific task, and they do not want to spend a lot of time reading irrelevant copy. Write clearly, concisely, and assertively. Use better nouns and fewer adjectives.</p>
<p><strong>2.  Make your content easy to scan.</strong></p>
<p>To help impatient or hurried readers grasp what you’re trying to say, make your page easy to scan by breaking long copy into paragraphs of 150 to 200 words each, defined by meaningful subheadings (and don’t try to be cute or clever). The goal is to tell the essence of the story using only the subheadings, supported by the body copy.</p>
<p>Bulleted lists and the judicious use of <strong>bolded text</strong> can help readers scan the content.  Be sure bolding does not conflict with established standards for links and visited links.</p>
<p><strong>3.  Use the inverted pyramid.</strong></p>
<p>The “inverted pyramid” format presents a summary at the beginning of a story with subsequent paragraphs revealing more detail. It’s used in news and press releases to help readers grasp the important idea by reading the first paragraph. The readers can then decide whether the topic is of sufficient interest for them to read further.</p>
<p><strong>4.  Use keywords to stay on topic.</strong></p>
<p>Focusing on keywords and phrases can help you stay “on topic” and use terms that customers care about. If the list of keywords you want to include in the page copy is excessively long or diverse, consider creating separate pages. Using keywords and phrases in standard HTML headlines and subheadings (H1, H2, etc.) gives added weight in search engine rankings <em>and</em> makes the page easier to scan (see number 2).</p>
<p><strong>5.  Consider page length.</strong></p>
<p>To scroll or not to scroll? It depends on the page level and depth of information. On higher-level pages, which tend to guide users to more detailed pages, less scrolling is usually better. At the lower-level detail pages with longer content, assume the reader is interested in the subject matter. Scrolling is preferable to breaking the content into multiple pages.</p>
<p><strong>6.  Avoid excessive cross-linking.</strong></p>
<p>Too many highlighted links can distract the reader and clutter your content with multicolored links. Avoid linking to pages that are not related to the main topic.  If you want to cross-sell, make it clear that you are leading the reader to a different topic, for example, “You may also be interested in &#8230;&#8221;</p>
<p><strong>7.  Use technical terms consistently.</strong></p>
<p>Establish a guide to branded terms and industry terms and use them correctly and consistently to avoid confusion. Define any terms, abbreviations, and acronyms that are not familiar to the reader. If you use acronyms to save space, be sure to spell out the full name the first time it appears on each page.</p>
<p><strong>8.  Write for an international audience.</strong></p>
<p>Remember that your audience may come from non-English speaking countries. Keep the following guidelines in mind:</p>
<ul>
<li>Always      include the country in mailing addresses, and format it appropriately.</li>
<li>Do      not refer to toll-free telephone numbers that cannot be accessed      internationally; make sure you provide a means of making contact from      outside your country.</li>
<li>Avoid      references to politics, race, nationality, religion, or lifestyle.</li>
<li>Do      not use the term &#8220;domestic&#8221; to refer to your local country, or      “foreign” to refer to the rest of the world.</li>
<li>Avoid      cultural references, e.g., “American spirit,” or “German engineering.”</li>
<li>Avoid      abbreviations; they rarely translate correctly.</li>
<li>Avoid      jargon, slang, and idioms that are meaningless to other nationalities.</li>
<li>For      measurements, include both metric and American units if possible.</li>
<li>Do      not use #, `, or &#8220;to indicate pound, foot, or inch in American      measurements.</li>
</ul>
<p><strong>9.  Avoid overly self-referential copy.</strong></p>
<p>It’s good to imagine your web page as a “first date.” Limit &#8220;we&#8221; or &#8220;our&#8221; statements to a bare minimum (keep count).  Companies that talk about themselves a lot are often compensating for a lack of insight into what their customers want and need.</p>
<p><strong>10. Don’t forget the call to action.</strong></p>
<p>It’s amazing how many times this is forgotten. Most people come to your website to accomplish a task, so be sure to give them something to do. Better yet, give them a range of choices. Don’t rely on the general “Contact Us” link on every web page.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fblog.pixelmedia.com%2Fmy-top-10-writing-reminders%2F';
  addthis_title  = 'My+top+10+writing+reminders.';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=i3whdRR9SfI:IkQ-XZJ488A:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=i3whdRR9SfI:IkQ-XZJ488A:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=i3whdRR9SfI:IkQ-XZJ488A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=i3whdRR9SfI:IkQ-XZJ488A:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=i3whdRR9SfI:IkQ-XZJ488A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=i3whdRR9SfI:IkQ-XZJ488A:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=i3whdRR9SfI:IkQ-XZJ488A:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=i3whdRR9SfI:IkQ-XZJ488A:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=i3whdRR9SfI:IkQ-XZJ488A:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=l6gmwiTKsz0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pixelmedia/~4/i3whdRR9SfI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pixelmedia.com/my-top-10-writing-reminders/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blog.pixelmedia.com/my-top-10-writing-reminders/</feedburner:origLink></item>
		<item>
		<title>ASP.NET XML Caching Gotcha</title>
		<link>http://feedproxy.google.com/~r/Pixelmedia/~3/1LausOeviC0/</link>
		<comments>http://blog.pixelmedia.com/asp-net-xml-caching-gotcha/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 19:16:51 +0000</pubDate>
		<dc:creator>Kyle Heon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Caching]]></category>
		<category><![CDATA[Navigation]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XSL]]></category>

		<guid isPermaLink="false">http://blog.pixelmedia.com/?p=595</guid>
		<description><![CDATA[This entry is a slightly updated re-post of an article found on my personal blog.
Recently we had a site that was getting ready to go live, hosted on a 64-bit version of Windows Server 2008 (IIS7). I won&#8217;t bore you with all the details of all the issues we worked through but we had one [...]]]></description>
			<content:encoded><![CDATA[<p><em>This entry is a slightly updated re-post of an <a href="http://www.kyleheon.com/articles/2009/09/18/xml-caching-in-asp-net-can-be-dangerous-to-your-health" target="_blank">article</a> found on my personal blog.</em></p>
<p>Recently we had a site that was getting ready to go live, hosted on a 64-bit version of Windows Server 2008 (IIS7). I won&#8217;t bore you with all the details of all the issues we worked through but we had one nasty issue that, as soon as it occurred it brought the server down; 100% CPU usage by the w3wp.exe process and memory usage steadily climbing. Our error logger was catching primarily one xml argument exception (but with a few variations).</p>
<p><span id="more-595"></span>A partial stack trace looked like this:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">System.<span style="color: #0000FF;">Web</span></span>.<span style="color: #0000FF;">HttpUnhandledException</span><span style="color: #008000;">:</span> Exception of type <span style="color: #666666;">'System.Web.HttpUnhandledException'</span> was thrown. <span style="color: #008000;">---&amp;</span>gt<span style="color: #008000;">;</span> <span style="color: #000000;">System</span>.<span style="color: #0000FF;">ArgumentException</span><span style="color: #008000;">:</span> The node to be removed <span style="color: #008000;">is</span> not a child of <span style="color: #0600FF;">this</span> node.
<span style="color: #0000FF;">at</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Xml</span></span>.<span style="color: #0000FF;">XmlNode</span>.<span style="color: #0000FF;">RemoveChild</span><span style="color: #000000;">&#40;</span>XmlNode oldChild<span style="color: #000000;">&#41;</span>
at <span style="color: #000000;">System.<span style="color: #0000FF;">Xml</span></span>.<span style="color: #0000FF;">XmlNode</span>.<span style="color: #0000FF;">RemoveAll</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
at <span style="color: #000000;">System.<span style="color: #0000FF;">Xml</span></span>.<span style="color: #0000FF;">XmlElement</span>.<span style="color: #0000FF;">RemoveAll</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span></pre></div></div>

<p>This error was at the heart of our navigation framework which makes heavy use of xml and xsl. The process we go through for building a pages navigation looks something like this:</p>
<ul>
<li>Check to see if the xml navigation file has been cached, if so get it from cache, otherwise load it and cache it.</li>
<li>When navigation is ready to be rendered, it is first manipulated to add in an xml node section that stores the current pages selected states.</li>
<li>The modified (in memory) xml is then passed to the desired xsl which handles converting the xml to xhtml and returning the transformed string.</li>
</ul>
<p>Originally the process of modifying the xml (in memory) looked like this:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> <span style="color: #0600FF;">void</span> AddNavigationSelectedStates<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
XmlNode navigationScheme <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>._xml.<span style="color: #0000FF;">SelectSingleNode</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;navigationScheme&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
XmlNode selected <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>._xml.<span style="color: #0000FF;">CreateNode</span><span style="color: #000000;">&#40;</span>XmlNodeType.<span style="color: #0000FF;">Element</span>, <span style="color: #666666;">&quot;selected&quot;</span>, <span style="color: #666666;">&quot;&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">null</span> <span style="color: #008000;">!=</span> navigationScheme.<span style="color: #0000FF;">SelectSingleNode</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;selected&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
selected <span style="color: #008000;">=</span> navigationScheme.<span style="color: #0000FF;">SelectSingleNode</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;selected&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
selected.<span style="color: #0000FF;">RemoveAll</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>for (int i = 0; i &lt; base.Selected.Count; i++)<br />
{<br />
XmlElement choice = this._xml.CreateElement(&#8221;choice&#8221;);<br />
choice.SetAttribute(&#8221;level&#8221;, (i + 1).ToString());<br />
choice.InnerText = base.Selected[i].ToString();</p>
<p>selected.AppendChild(choice);<br />
}<br />
navigationScheme.InsertBefore(selected, this._xml.SelectSingleNode(&#8221;//navigationScheme/mainNav&#8221;));<br />
}</p>
<p>During stress testing we identified that the problem code was the <code>if (null != navigationScheme.SelectSingleNode("selected"))</code> block. As I was the original developer I struggled to remember why such code was there, given that this node should never exist as the page builds. So, after reproducing the errors locally with the above code I removed the if statement and retested. Not a single error. Quickly browsed the site and didn&#8217;t notice any issues (I should have looked harder, there were plenty).</p>
<p>We posted an updated build, stress tested the site, still no errors. Then another developer noticed that the site navigation wasn&#8217;t working properly. So, back into the source I went. Digging deep I eventually found that each time the <code>XmlNode navigationScheme = this._xml.SelectSingleNode("navigationScheme");</code> was run, the  section of the document grew with all previous &#8220;choices&#8221;.</p>
<p>Through more debugging and some pair programming with a <a href="http://blog.pixelmedia.com/author/rstorch/" target="_blank">fellow developer</a> (and a lot of discussion about what was really happening) we discovered that, while we were never stuffing the modified xml back into cache, it was indeed being updated. I&#8217;m still trying to determine why this is but I think I have read somewhere that XmlDocument objects are in memory structures that are passed by reference (and not by value as I originally thought).</p>
<p>Armed with this information we attempted to clone the document and modify that and while that ultimately worked, it didn&#8217;t fit into the system we had for navigation render behavior. With some changes to how we passed along the modified xml we ended up with this modified method (name changed to better reflect it&#8217;s newer intent):</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">virtual</span> XmlDocument SelectedStatesXml<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
XmlDocument xmlDoc <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>XmlDocument<span style="color: #000000;">&#41;</span><span style="color: #0600FF;">this</span>._xml.<span style="color: #0000FF;">CloneNode</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">true</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
XmlNode navigationScheme <span style="color: #008000;">=</span> xmlDoc.<span style="color: #0000FF;">SelectSingleNode</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;navigationScheme&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
XmlNode selected <span style="color: #008000;">=</span> xmlDoc.<span style="color: #0000FF;">CreateNode</span><span style="color: #000000;">&#40;</span>XmlNodeType.<span style="color: #0000FF;">Element</span>, <span style="color: #666666;">&quot;selected&quot;</span>, <span style="color: #666666;">&quot;&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>for (int i = 0; i &lt; base.Selected.Count; i++)<br />
{<br />
XmlElement choice = xmlDoc.CreateElement(&#8221;choice&#8221;);<br />
choice.SetAttribute(&#8221;level&#8221;, (i + 1).ToString());<br />
choice.InnerText = base.Selected[i].ToString();</p>
<p>selected.AppendChild(choice);<br />
}<br />
navigationScheme.InsertBefore(selected, xmlDoc.SelectSingleNode(&#8221;//navigationScheme/mainNav&#8221;));<br />
return xmlDoc;<br />
}</p>
<p>Be sure to note in the code above, the call to <code>(XmlDocument)this._xml.CloneNode(true);</code> as this is important. We are doing a deep copy of the entire XmlDocument. Manipulation is done strictly to the clone and never the master xml document. So now when we call out to render navigation, it looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">return</span> <span style="color: #0600FF;">base</span>.<span style="color: #0000FF;">OutputNavigation</span><span style="color: #000000;">&#40;</span>
<span style="color: #008000;">new</span> XslTransformBehaviour<span style="color: #000000;">&#40;</span>
<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>XmlNavigation<span style="color: #000000;">&#41;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Navigation</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">SelectedStatesXml</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>,
XslHelper.<span style="color: #0000FF;">GetTransformer</span><span style="color: #000000;">&#40;</span>path<span style="color: #000000;">&#41;</span>,
<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>XmlNavigation<span style="color: #000000;">&#41;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Navigation</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">NavigationArguments</span>
<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>I hope this helps someone someday. I don&#8217;t think this behavior is something I&#8217;m going to forget any time soon.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fblog.pixelmedia.com%2Fasp-net-xml-caching-gotcha%2F';
  addthis_title  = 'ASP.NET+XML+Caching+Gotcha';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=1LausOeviC0:4_zEvU0FC7o:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=1LausOeviC0:4_zEvU0FC7o:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=1LausOeviC0:4_zEvU0FC7o:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=1LausOeviC0:4_zEvU0FC7o:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=1LausOeviC0:4_zEvU0FC7o:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=1LausOeviC0:4_zEvU0FC7o:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=1LausOeviC0:4_zEvU0FC7o:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=1LausOeviC0:4_zEvU0FC7o:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=1LausOeviC0:4_zEvU0FC7o:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=l6gmwiTKsz0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pixelmedia/~4/1LausOeviC0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pixelmedia.com/asp-net-xml-caching-gotcha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.pixelmedia.com/asp-net-xml-caching-gotcha/</feedburner:origLink></item>
		<item>
		<title>Maximum CPCs: How High Should You Bid?</title>
		<link>http://feedproxy.google.com/~r/Pixelmedia/~3/Oxk37bf6Q9o/</link>
		<comments>http://blog.pixelmedia.com/maximum-cpcs-how-high-should-you-bid/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 12:35:36 +0000</pubDate>
		<dc:creator>Matt Umbro</dc:creator>
				<category><![CDATA[Search Engine Marketing]]></category>
		<category><![CDATA[maximum cost-per-click]]></category>
		<category><![CDATA[maximum cpc]]></category>
		<category><![CDATA[pay-per-click]]></category>
		<category><![CDATA[ppc]]></category>

		<guid isPermaLink="false">http://blog.pixelmedia.com/?p=580</guid>
		<description><![CDATA[Pay-per-click (PPC) is a highly competitive advertising platform. With more and more companies signing up for PPC campaigns every day, advertisers have to bid higher—not only be within the top three positions of the sponsored listings, but to be on the first page of results. Though bid position is not solely based on the maximum [...]]]></description>
			<content:encoded><![CDATA[<p>Pay-per-click (PPC) is a highly competitive advertising platform. With more and more companies signing up for PPC campaigns every day, advertisers have to bid higher—not only be within the top three positions of the sponsored listings, but to be on the first page of results. Though bid position is not solely based on the maximum amount of money you are willing to spend per click (also known as maximum cost-per-click, or CPC), it is one of the key components. The conundrum: how much you are willing to bid for your ads to show up as close to the top of the listings as possible?</p>
<p>Your budget plays a huge role in how much you are willing to bid, but other factors come into play as well. Among these are the importance of each targeted keyword to your campaign, the way the ad copy is written, and the landing page of each ad. Here’s a look at each of these factors in greater detail:</p>
<p><span id="more-580"></span></p>
<p><strong>Stretch Your Keywords and Your Budget:</strong> How much money you have for the campaign ultimately determines how much you can bid per keyword. If it takes a bid of $15 for your ad to show up within the top three positions and your monthly budget is only $200, you have a problem. Unfortunately, the advertisers with the most money are going to pay top dollar to get the first listings for their most popular keywords. However, the more terms you have in your keyword, the less expensive it is generally going to be. For example, the term “baseball bats” might cost $10 to be within the top three positions, but the term “wooden baseball bats” might only cost $6 because it is less competitive. Shorter terms might bring more clicks, but longer, more tailored terms will bring better qualified traffic.</p>
<p><strong>Use Strategic Keywords:</strong> Campaigns can have thousands of keywords, but not all hold equal weight. To determine which keywords you should bid on, you must assess your business objectives. For example: you own a sports shop and your top-selling product, baseball gloves, account for 75% of your revenue. The other 25% of your revenue comes from baseballs and baseball bats. Knowing these metrics allows you to put more of your budget toward your most lucrative products, in this case being the baseball gloves. So for “baseball glove” related terms, you bid to be within the top three positions, but for other terms, you make competitive bids but are not as concerned if they show up lower in the rankings.</p>
<p><strong>Write Effective Ad Copy:</strong> Being within the top three positions of the sponsored links is good, but ultimately meaningless if your ad does not have the targeted user search query and a strong call to action. Every ad should mention the targeted keyword at least twice within the message: once within the headline and once within the description. Every ad should also include a call to action. What do you want the user to do once he/she gets to your destination page? This action should be clearly spelled out. Using the example “wooden baseball bats” as the search query, here is an ad that just uses the generic “baseball bats” keyword and does not have a call to action:</p>
<p><img class="alignnone size-full wp-image-581" src="http://blog.pixelmedia.com/wp-content/uploads/2009/10/Ineffective_Text_Ad.jpg" alt="Ineffective_Text_Ad" width="195" height="61" /></p>
<p>This ad, however, specifically targets “wooden baseball bats” and has a defined call to action:</p>
<p><img class="alignnone size-full wp-image-582" src="http://blog.pixelmedia.com/wp-content/uploads/2009/10/Effective_Text_Ad.jpg" alt="Effective_Text_Ad" width="193" height="61" /></p>
<p>The second ad is much more likely to be clicked because the user sees his/her search query and there is a clear call to action.</p>
<p><strong>Tailor Your Landing Page:</strong> Not to be forgotten is the landing page that you are sending the user to once the ad is clicked. An ideal landing page should contain the targeted keyword and be a continuation of the ad. Using “wooden baseball bats” again, the call to action for this ad is to “browse the selection”. The landing page should allow the user to browse the selection of wooden baseball bats that the company offers. If the landing page does not immediately allow the user to take this course of action, it will most likely lead to a bounce, meaning the user will leave the site. Clearly getting that user to just click on your ad is not enough if your goal is to generate leads.</p>
<p>In the end, you must diagnose these four factors before determining your keyword bids. It is beneficial to show up near the top of the sponsored listings, but if you do not have clear conversion funnels and goals established for your ad, you are ultimately wasting your money.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fblog.pixelmedia.com%2Fmaximum-cpcs-how-high-should-you-bid%2F';
  addthis_title  = 'Maximum+CPCs%3A+How+High+Should+You+Bid%3F';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=Oxk37bf6Q9o:y_zhsKoLt94:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=Oxk37bf6Q9o:y_zhsKoLt94:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=Oxk37bf6Q9o:y_zhsKoLt94:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=Oxk37bf6Q9o:y_zhsKoLt94:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=Oxk37bf6Q9o:y_zhsKoLt94:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=Oxk37bf6Q9o:y_zhsKoLt94:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=Oxk37bf6Q9o:y_zhsKoLt94:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=Oxk37bf6Q9o:y_zhsKoLt94:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=Oxk37bf6Q9o:y_zhsKoLt94:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=l6gmwiTKsz0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pixelmedia/~4/Oxk37bf6Q9o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pixelmedia.com/maximum-cpcs-how-high-should-you-bid/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.pixelmedia.com/maximum-cpcs-how-high-should-you-bid/</feedburner:origLink></item>
		<item>
		<title>Social Media for Business – Step the Process</title>
		<link>http://feedproxy.google.com/~r/Pixelmedia/~3/puuIAy94JlE/</link>
		<comments>http://blog.pixelmedia.com/social-media-step-the-process/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 19:28:12 +0000</pubDate>
		<dc:creator>jonodonnell</dc:creator>
				<category><![CDATA[Social Media]]></category>
		<category><![CDATA[Business Process]]></category>
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://blog.pixelmedia.com/?p=548</guid>
		<description><![CDATA[
The landscape
With the enormous surge in popularity of Social Media and all the buzzwords and technologies surrounding it, we are seeing a “fog of business” going on right now as far as how to implement a successful social media plan that complements existing goals. So I thought breaking down the “why” and “how” would be [...]]]></description>
			<content:encoded><![CDATA[<h3><strong><br />
The landscape</strong></h3>
<p>With the enormous surge in popularity of Social Media and all the buzzwords and technologies surrounding it, we are seeing a “fog of business” going on right now as far as how to implement a successful social media plan that complements existing goals. So I thought breaking down the “why” and “how” would be helpful.</p>
<h3><strong><span id="more-548"></span>The takeaway</strong></h3>
<p><strong> </strong></p>
<p><strong>Plan – Listen – Engage &#8211; Track &#8211; Refine<br />
</strong></p>
<ol>
<li>Create a vision</li>
<li>Start with metrics</li>
<li>Research your audience</li>
<li>Develop a strategy</li>
<li>Phase your rollout</li>
<li>Listen and learn</li>
<li>Engage with purpose</li>
<li>Stay connected</li>
<li>Track your progress</li>
<li>Keep experimenting</li>
</ol>
<p><strong> </strong></p>
<p><strong>Why is social media so important?</strong></p>
<p>There is phenomenal growth taking place within the social sphere as is evident in this <a href="http://blog.nielsen.com/nielsenwire/online_mobile/social-networking-and-blog-sites-capture-more-internet-time-and-advertisinga/">Nielsen</a> study. A nearly 300% increase in the use of social networking sites over the last year alone is astounding. Your customers are out there using these sites every day for longer and longer periods of time. There clearly is a cultural shift going on and customers have come to expect more from the companies they deal with (and buy from). Choice is king and empowerment rules. Quality service is not an option, it’s mandatory.</p>
<p>Also, check your competitors on the social networks. You might be surprised to see how many of them are out there harnessing all that viral power.</p>
<h3><strong>The Process</strong></h3>
<p><strong>Develop a strategy</strong></p>
<p>So what are you going to do? More importantly <em>why </em>are you going to do it? What are the top three business objectives you are trying to accomplish? What is unique about your company? What is your value proposition? Do you have specific metrics in place?</p>
<p>Having clear understanding (vision) and a tangible strategy (written down) as to how your business is going to achieve its goals is critical to your success. Next is the prioritization of these goals. Finally, phasing these priorities (stepping the process) creates a manageable environment and increases the probability of success. This also allows staff to coalesce on messaging and tasks at hand.</p>
<p><strong>Research your audience</strong></p>
<p>While most corporations know a good bit about their existing customers through the traditional interactions with them (via live, website, phone, email, etc.), many are unfamiliar as to where else customers speak about their brand or what they have to say about the products and services they offer. If possible, ask your current customers through surveys, phone, site polls, and collect for future use.</p>
<p>Next, go out to the existing social networks (here is an excellent <a href="http://www.ovrdrv.com/social-media-map/">Social Media Map</a> to find them) and just cruise around. Look for niche sites in your vertical as well. Search them and look for terms related to your business, your company name, etc. and note the experts in the communities related to your products and services. Make a map customized to your business for future reference.</p>
<p><strong>Listen to your communities</strong></p>
<p><strong> </strong></p>
<p>Once you have researched and prioritized where you will put your efforts, it’s time to listen. There is now an exceptional amount of technology that allows you to “monitor your brand”. I think of this as listening to and taking care of your users’ needs. Think “people” and do right by them. The array of solutions—or “listening tools”—ranges from <a href="http://www.radian6.com/cms/home">Radian6</a> for enterprises to free tools such as <a href="http://www.google.com/alerts">Google Alerts</a> and <a href="http://search.twitter.com/">Twitter Advanced Search</a> with a wide assortment of options in between. Start with the free ones to get an idea of what’s out there and come to the listening table with a concept of what you are trying to accomplish (e.g., help frustrated customers, reach out to prospects looking for a solution, etc.). Otherwise, the amount of information coming back at you will be overwhelming.</p>
<p><strong> </strong></p>
<p><strong>Phase it</strong></p>
<p><strong> </strong></p>
<p>As far as what tools and applications to use, your customers should be the ones telling you where and what you should be doing. In some instances, just using Twitter may be a great first step for client support (<a href="http://www.cotweet.com/">CoTweet</a> and <a href="http://tweetdeck.com/beta/">TweetDeck</a> are great options), but maybe your audience is clamoring for a closed forum for deep conversations on highly specialized topics. That’s where the research and listening comes in, thus driving your planned phases and the next level of requirements.</p>
<p>Breaking out your new social solution is critical to the eventual outcome. There is an internal team ramp-up of knowledge on social media and how the tools physically work. The key is to think long-term, but with attainable shorter phases.</p>
<p><strong> </strong></p>
<p><strong>Engage your customers</strong></p>
<p><strong> </strong></p>
<p>Once you feel comfortable with the tools, and protocols that go with them, start to engage with the communities. Ask and answer questions. Be helpful. Don’t try to take over and get too preachy or “sales-y.” Just be supportive. This inspires trust (See <a href="http://www.chrisbrogan.com/">Chris Brogan</a>) and makes customers more likely to want to interact with you and—perhaps—become an evangelist for your company.</p>
<p>Now this is the hard part – sustainability. Stay engaged. Once you start to make inroads you have to let your communities know that you’re not going to abandon them. Don’t leave it all up to one individual. Recruit other staff to support areas in which they are subject matter experts. Create a schedule if you need to. Send meeting requests (really!) and make people accountable in your organization to fulfill their duties and your customers’ needs. This doesn’t need to be a chore. You may be surprised at the level of internal support you receive if you allow others to “take the helm”.</p>
<p><strong>Measure the impact</strong></p>
<p><strong> </strong></p>
<p>If you don’t know what’s going on, how will you know if you’re meeting or beating your metrics? Utilize analytics to track your goals. Use the metrics or benchmarks already in place as your reality check. Use the real world responses and conversations to guide you on tone, manner, and client satisfaction. Many of the monitoring tools used for listening also have capabilities to look at sentiment, trends, etc.</p>
<p><strong> </strong></p>
<p><strong>Keep learning</strong></p>
<p>I did (and still do). It’s been very helpful adding on this social layer to help support our clients’ business needs. Start with checking out some of the excellent blogs from writers like <a href="http://blog.guykawasaki.com/">Guy Kawasaki</a> and <a href="http://sethgodin.typepad.com/">Seth Godin</a>. <a href="http://www.mikevolpe.com/">Mike Volpe</a> also has blogs on inbound marketing, crucial to a successful social push.</p>
<h3><strong>Conclusion</strong></h3>
<p><strong> </strong></p>
<p>Ultimately, social media, and the various sites and apps that make it up, represent another channel to satisfy your customers and an opportunity to reach your business objectives.</p>
<p>Take the leap, your clients will love you for it!</p>
<h3><strong>Thoughts?</strong></h3>
<p><strong> </strong></p>
<p>It’s all a learning process and I would love to hear your thoughts on above. What’s your take?</p>
<p><strong>(Twitter)</strong> <a href="http://twitter.com/pixelmedia_inc">http://twitter.com/pixelmedia_inc</a></p>
<p><strong>(Vimeo)</strong> <a href="http://vimeo.com/channels/letstalk">http://vimeo.com/channels/letstalk</a></p>
<p><strong>(Facebook)</strong> <a href="http://bit.ly/PixelMEDIA-Facebook">http://bit.ly/PixelMEDIA-Facebook</a></p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fblog.pixelmedia.com%2Fsocial-media-step-the-process%2F';
  addthis_title  = 'Social+Media+for+Business+%26%238211%3B+Step+the+Process';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=puuIAy94JlE:xag_89o8MAA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=puuIAy94JlE:xag_89o8MAA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=puuIAy94JlE:xag_89o8MAA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=puuIAy94JlE:xag_89o8MAA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=puuIAy94JlE:xag_89o8MAA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=puuIAy94JlE:xag_89o8MAA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=puuIAy94JlE:xag_89o8MAA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=puuIAy94JlE:xag_89o8MAA:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=puuIAy94JlE:xag_89o8MAA:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=l6gmwiTKsz0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pixelmedia/~4/puuIAy94JlE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pixelmedia.com/social-media-step-the-process/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://blog.pixelmedia.com/social-media-step-the-process/</feedburner:origLink></item>
		<item>
		<title>Binding a click event inside a click event with jQuery</title>
		<link>http://feedproxy.google.com/~r/Pixelmedia/~3/oUcFLyqzZFk/</link>
		<comments>http://blog.pixelmedia.com/binding-a-click-event-inside-a-click-event-with-jquery/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 15:47:37 +0000</pubDate>
		<dc:creator>Jeff L</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.pixelmedia.com/?p=457</guid>
		<description><![CDATA[I was recently working on coding a design that included a simple type of faux select element. It was basically an unordered list that expanded and collapsed when you clicked a link. As it was styled similar to a select element, the JavaScript behaviors were similar as well. Clicking the link expanded the list underneath [...]]]></description>
			<content:encoded><![CDATA[<p>I was recently working on coding a design that included a simple type of faux select element. It was basically an unordered list that expanded and collapsed when you clicked a link. As it was styled similar to a select element, the JavaScript behaviors were similar as well. Clicking the link expanded the list underneath it, and you could then choose a link inside the list and navigate away from the page, or click the original link to close the list again.</p>
<p>The client, however, found this a bit confusing<span id="more-457"></span>—once they had expanded the hidden list, it wasn&#8217;t obvious to them how to close it. They wanted to be able to click somewhere else on the page and have the list close so they could continue browsing. No problem, I figured, a few JavaScript tweaks and we&#8217;d be all set. Simply putting a click event on the body element to close the list would be pretty straightforward.</p>
<p>Lets take a look at the code we used:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> initFauxSelect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'a.showSelect'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
e.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> $theList <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.fauxSelect'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.selectList'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
hideShow<span style="color: #009900;">&#40;</span>$theList<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>function hideShow(obj) {<br />
$theList = obj;<br />
if ($theList.is(&#8217;:visible&#8217;) ) {<br />
$theList.hide();<br />
} else {<br />
$theList.show();<br />
}<br />
}</p>
<p>It&#8217;s a simple click event on <code>a.showSelect</code> that calls the <code>hideShow()</code> function. If the list is visible, hide it, otherwise show it.</p>
<p>I figured it would be as simple as binding a new click event to the <code>body</code> tag whenever we show the list. The new event would hide the list when someone clicked elsewhere on the page. Let&#8217;s look at the updated <code>hideShow()</code> code:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> hideShow<span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
$theList <span style="color: #339933;">=</span> obj<span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>$theList.<span style="color: #000066; font-weight: bold;">is</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">':visible'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
$theList.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'body'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">unbind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click.fauxselect'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
$theList.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'body'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click.fauxselect'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
$theList.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'body'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">unbind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click.fauxselect'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Now, whenever we&#8217;re showing the list, we&#8217;re creating a new click event on the <code>body</code> that hides the list. It also unbinds itself once its job is done. If someone closes the list by clicking <code>a.showSelect</code> again, we also unbind the event just to keep things clean.</p>
<p>However, I ran into a problem. The event I was binding to the body was being called right away, which stopped the list from ever appearing! It seemed a bit strange, as my assumption was that you&#8217;d never want your new event to fire as the same time as the current event.</p>
<p>Thankfully, there&#8217;s an easy way prevent this from happening. In our original click event on the <code>.showSelect</code> element, we need to stop that event from bubbling up the DOM.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> initShortcutsSelect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'a.showSelect'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
e.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
e.<span style="color: #660066;">stopPropagation</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">// ----- ADDED THIS LINE</span>
<span style="color: #003366; font-weight: bold;">var</span> $theList <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.fauxSelect'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.selectList'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
hideShow<span style="color: #009900;">&#40;</span>$theList<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>}</p>
<p>By telling the event to stopPropagation, it never bubbles up the DOM, never reaches the <code>body</code> and never calls the new click event you bound there until the user actually clicks the body.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fblog.pixelmedia.com%2Fbinding-a-click-event-inside-a-click-event-with-jquery%2F';
  addthis_title  = 'Binding+a+click+event+inside+a+click+event+with+jQuery';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=oUcFLyqzZFk:OxnmjnQGVik:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=oUcFLyqzZFk:OxnmjnQGVik:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=oUcFLyqzZFk:OxnmjnQGVik:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=oUcFLyqzZFk:OxnmjnQGVik:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=oUcFLyqzZFk:OxnmjnQGVik:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=oUcFLyqzZFk:OxnmjnQGVik:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?i=oUcFLyqzZFk:OxnmjnQGVik:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=oUcFLyqzZFk:OxnmjnQGVik:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pixelmedia?a=oUcFLyqzZFk:OxnmjnQGVik:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Pixelmedia?d=l6gmwiTKsz0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pixelmedia/~4/oUcFLyqzZFk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pixelmedia.com/binding-a-click-event-inside-a-click-event-with-jquery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.pixelmedia.com/binding-a-click-event-inside-a-click-event-with-jquery/</feedburner:origLink></item>
	</channel>
</rss>
