<?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>AddThis Blog</title>
	
	<link>http://www.addthis.com/blog</link>
	<description>News and updates from AddThis</description>
	<lastBuildDate>Fri, 17 May 2013 13:00:05 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/addthis/community" /><feedburner:info uri="addthis/community" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>addthis/community</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Faddthis%2Fcommunity" 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%2Faddthis%2Fcommunity" 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%2Faddthis%2Fcommunity" 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/addthis/community" 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%2Faddthis%2Fcommunity" 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%2Faddthis%2Fcommunity" 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%2Faddthis%2Fcommunity" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item>
		<title>Learning About Microsoft Design and Demystifying Usability Testing</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/SENu1MGyQ90/</link>
		<comments>http://www.addthis.com/blog/2013/05/17/learning-about-microsoft-design-and-demystifying-usability-testing/#comments</comments>
		<pubDate>Fri, 17 May 2013 13:00:05 +0000</pubDate>
		<dc:creator>Jim Lane</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[nova ux meetup]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[usability testing]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=6095</guid>
		<description><![CDATA[For the May NoVA UX meetup, Microsoft Dev Evangelist Andrew Duthie gave the group a presentation on the design thinking behind Windows 8. He described three influences&#8211;Bauhaus design, Swiss typography, and motion cinematography&#8211;and five design principles that guided the team: Do &#8230; <a href="http://www.addthis.com/blog/2013/05/17/learning-about-microsoft-design-and-demystifying-usability-testing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><img src="http://farm8.staticflickr.com/7288/8745619754_74b0c71acb_o.jpg" width="100%" alt="andrew_duthie_novaux"></p>
<p>For the May <a title="NoVA UX Meetup" href="http://meetup.com/nova-ux" target="_blank">NoVA UX meetup</a>, Microsoft Dev Evangelist Andrew Duthie gave the group a presentation on the design thinking behind Windows 8. He described three influences&#8211;Bauhaus design, Swiss typography, and motion cinematography&#8211;and five design principles that guided the team: <span id="more-6095"></span></p>
<ul>
<li><span style="line-height: 15px;">Do more with less</span></li>
<li>Pride in craftmanship</li>
<li>Be fast and fluid</li>
<li>Be authentically digital</li>
<li>Win as one</li>
</ul>
<p>For more details about each, check out <a title="Andrew Duthie presentation on Windows 8 design" href="https://skydrive.live.com/view.aspx?resid=A90F9FD3DA8A4F9B!79419&amp;app=PowerPoint&amp;authkey=!ALcv8S3HJ7XxCgE" target="_blank">Andrew&#8217;s presentation</a>.</p>
<p><img src="http://farm8.staticflickr.com/7284/8745619748_b3eaabe811_o.jpg" width="100%" alt="bill_killam_novaux"></p>
<p>Next, applied psychologist and human factors engineer Bill Killam talked about how user perception and various kinds of cognitive biases can affect usability testing. Here&#8217;s an example from his talk:</p>
<blockquote><p>&#8220;You are shown a picture of a person running for office<br />
and asked if you think they will win. There are far to<br />
many variables for you to make a good prediction, so the<br />
task is too hard for us to work out consciously.<br />
As a result, our unconscious substitutes the hard<br />
question for an easier one – does the person look like a<br />
person who will win? Our unconscious provides an<br />
answer to that new question, but our conscious self<br />
reports it as the answer to the first question without<br />
realizing the substitution.&#8221;</p></blockquote>
<p>Read about other perception problems, biases you never knew you had, and how to apply testing techniques to overcome them in <a title="Bill Killam's Usability Testing Demystifed presentation (PDF)" href="http://www.user-centereddesign.com/files/UsabilityTestingDemystified.pdf" target="_blank">Bill&#8217;s presentation</a>.</p>
<p>Next month&#8217;s meetup will be the first birthday for NoVA UX. Stay tuned for details about the festivities!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/05/17/learning-about-microsoft-design-and-demystifying-usability-testing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/05/17/learning-about-microsoft-design-and-demystifying-usability-testing/</feedburner:origLink></item>
		<item>
		<title>4 Reasons Analytics Matter</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/s_3udh0zrAU/</link>
		<comments>http://www.addthis.com/blog/2013/05/14/4-reasons-analytics-matter/#comments</comments>
		<pubDate>Tue, 14 May 2013 13:00:08 +0000</pubDate>
		<dc:creator>Ifdy</dc:creator>
				<category><![CDATA[Data Decisions]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=6087</guid>
		<description><![CDATA[The word “analytics” makes some people cringe. (Not us at AddThis! We love data!) But this sentiment is understandable because, for most people, analytics can become more of a frustrating information overload experience. And that’s, well, a total turn off. &#8230; <a href="http://www.addthis.com/blog/2013/05/14/4-reasons-analytics-matter/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The word “analytics” makes some people cringe. (Not us at AddThis! <a href="http://www.addthis.com/technology" target="_blank">We love data!</a>) But this sentiment is understandable because, for most people, analytics can become more of a frustrating information overload experience. And that’s, well, a total turn off.</p>
<p>Understandable.</p>
<p>Without analytics, though, you’re shooting in the dark. Here’s what analytics can help you with. <span id="more-6087"></span></p>
<h3>1. Avoid Following Misleading Information</h3>
<p>Gut feelings, and personal impressions can be very misleading. Think about it. Your scope, or the perception of your colleague, can be very biased, and implementing a change that affects everyone (such as all the users of your site), can turn out to be a bad situation if you’ve made the wrong decision.</p>
<p>Before jumping to a conclusion, do your due diligence practices and check your analytics to see if the data supports your decision. Good data won’t be biased; it’s the good friend that won’t sugar-coat it for you, and help you avoid some headaches.</p>
<h3>2. Take the Shorter Route</h3>
<p>Supplementing your trial and error with data is a shorter route to reaching your goals. Analytics can tell you what you’re doing right or wrong, and give you a better indication of what you could do to improve. Maybe it tells you something really isn’t working––like your audience doesn’t care for your content about pies. (But seriously, who doesn’t like pie?)</p>
<p>On the flip side, maybe your strategy is working, and you should be spending more time on it. Maybe your users love your perspective on making pie crusts from scratch, and you should create tons more pie content!</p>
<h3>3. Give You a Solid Foundation</h3>
<p>What happens when you plant in good, fertile soil? Your seeds will grow and flourish. But what happens when you dig into dry, rocky soil? Your results won’t be as fruitful.</p>
<p>The same thing applies to building your website, even your business, upon analytics. The right data will enrich and fortify your ability to achieve your goals. It’s the only way to know the real lay of the land you need to deal with, and give you good indicators of what steps you should take next. It’ll always be there, as you improve and change, to continue feeding you the information you need to grow. Seriously, it’s your best friend. <a href="http://www.addthis.com/data/licensing" target="_blank">Take it from us</a>.</p>
<h3>4. Empower You</h3>
<p>We completely understand the feeling of being overwhelmed with numbers, data, and figuring out what to do with it. It’s tempting to go with an idea without taking the time to look at your data. But with the AddThis Analytics Dashboard, your information is simplified for you.</p>
<p><img src="http://farm8.staticflickr.com/7313/8736697532_d65f716ff1_o.png" width="100%"></p>
<p>The information about your site is imported into graphs, lists, and hyperlinks for you––all under your account. We’ll even email you a notification every week on how your site is doing.</p>
<p>Check out <a href="http://www.addthis.com/blog/2012/12/11/an-introduction-to-addthis-analytics-profiles" target="_blank">this blog post</a> showing you how to set it up, and navigate through the dashboard.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/05/14/4-reasons-analytics-matter/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/05/14/4-reasons-analytics-matter/</feedburner:origLink></item>
		<item>
		<title>Paint and Code Go Together: Latest AddThis Hackathon</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/97cVD2dJIoI/</link>
		<comments>http://www.addthis.com/blog/2013/05/10/paint-and-code-go-together-latest-addthis-hackathon/#comments</comments>
		<pubDate>Fri, 10 May 2013 18:20:13 +0000</pubDate>
		<dc:creator>Ifdy</dc:creator>
				<category><![CDATA[Company News]]></category>
		<category><![CDATA[addthis]]></category>
		<category><![CDATA[hackathon]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=6074</guid>
		<description><![CDATA[Last week, the AddThis team dropped what they were doing, and signed up to work on different projects in our latest 24-hour hackathon! Over 30 projects were submitted, and lots of cool things came about as a result. Here are &#8230; <a href="http://www.addthis.com/blog/2013/05/10/paint-and-code-go-together-latest-addthis-hackathon/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Last week, the AddThis team dropped what they were doing, and signed up to work on different projects in our latest 24-hour hackathon!</p>
<p>Over 30 projects were submitted, and lots of cool things came about as a result. Here are some highlights of how the day went.</p>
<p>Here&#8217;s the Virginia team gathered to kick off the hackathon in AddThis style!</p>
<p><img src="http://farm8.staticflickr.com/7296/8734402013_ea1d263ed5_o.jpg" width="100%" alt="May Hackathon 1"><span id="more-6074"></span></p>
<p><strong>Getting to Work</strong></p>
<p>Teams took off into different rooms to plan and code for their projects. Even offsite colleagues dialed in to be part of the event. Hi Rich!</p>
<p><img src="http://farm8.staticflickr.com/7295/8735520844_7a1f5f4974_o.jpg" width="100%" alt="May Hackathon 2"></p>
<p><strong>Bringing Out the Paint Brushes!</strong></p>
<p>Our quiet room project took a lot of coordination, and teamwork. But the process brought several of us from different departments together. It was awesome!</p>
<p>Check out the before, during, and after pictures:</p>
<p>Before: <img alt="quietroombefore" src="http://farm8.staticflickr.com/7445/8718897646_cdaf9b8b6e_o.jpg" width="100%"/></p>
<p>During: <img src="http://farm8.staticflickr.com/7287/8735520812_6350e51fa0_o.jpg" width="100%" alt="May Hackathon 3"></p>
<p>After: <img alt="DSC_0070" src="http://farm8.staticflickr.com/7285/8713897423_bb02fd4840_o.jpg" width="100%"/></p>
<p>Doesn’t it look like it’s straight out of a catalogue? <img src='http://www.addthis.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>After 24 Hours of Nonstop Work&#8230;</strong></p>
<p>We had almost every project presented to the team.</p>
<p><img src="http://farm8.staticflickr.com/7309/8735520776_83db36e8c0_o.jpg" width="100%" alt="May Hackathon 6"></p>
<p><img src="http://farm8.staticflickr.com/7288/8734401883_38cd8e246e_o.jpg" width="100%" alt="May Hackathon 7"></p>
<p><img src="http://farm8.staticflickr.com/7310/8735520716_bd0e84b344_o.jpg" width="100%" alt="May Hackathon 8"></p>
<p><strong>Fin!</strong></p>
<p>It was a great way to end the week! Have you ever been a part of a cool team-building project? Tell us about it in the comments!</p>
<p><img alt="messyoffice" src="http://farm8.staticflickr.com/7327/8717809905_9f36511c27_o.jpg" width="100%" height="512"/></p>
<p>Oops. Seems we left our furniture boxes in our colleague’s office. Guess we’ll get to that later. <img src='http://www.addthis.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/05/10/paint-and-code-go-together-latest-addthis-hackathon/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/05/10/paint-and-code-go-together-latest-addthis-hackathon/</feedburner:origLink></item>
		<item>
		<title>Everyone Ready for Mother’s Day?</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/wSvBVQnVdps/</link>
		<comments>http://www.addthis.com/blog/2013/05/09/everyone-ready-for-mothers-day/#comments</comments>
		<pubDate>Thu, 09 May 2013 17:00:13 +0000</pubDate>
		<dc:creator>Greg Cypes</dc:creator>
				<category><![CDATA[Data Trends]]></category>
		<category><![CDATA[mothers day]]></category>
		<category><![CDATA[shopping habits]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=6058</guid>
		<description><![CDATA[Last year we took a look at how people were preparing for Mother&#8217;s Day, and this year we thought we&#8217;d bring you a new take on the holiday. We analyzed the difference between the types of people who bought Mom &#8230; <a href="http://www.addthis.com/blog/2013/05/09/everyone-ready-for-mothers-day/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Last year we took a look at <a href="http://www.addthis.com/blog/2012/05/11/weve-got-a-mothers-day-load-of-data/" target="_blank">how people were preparing for Mother&#8217;s Day</a>, and this year we thought we&#8217;d bring you a new take on the holiday.</p>
<p>We analyzed the difference between the types of people who bought Mom a gift a couple of weeks ago, versus people who still haven&#8217;t bought anything for her yet. This information&#8217;s based on shoppers looking for Mother&#8217;s Day gifts online in the past few weeks!</p>
<p><span id="more-6058"></span></p>
<table cellspacing="10">
<tbody>
<tr>
<td><strong>Mother&#8217;s Day Planners</td>
<p></strong></p>
<td><strong>Mother&#8217;s Day Procrastinators</td>
<p></strong>
</td>
<tr>
<td>Lives in the South and West Coast</td>
<td>Lives on the East Coast</td>
</tr>
<tr>
<td>Single or Married without Kids</td>
<td>Married with kids</td>
</tr>
<tr>
<td>Less likely to own a pet</td>
<td>More likely to own a dog</td>
</tr>
<tr>
<td>Drives a sports car or convertible</td>
<td>Drives a minivan or SUV</td>
</tr>
<tr>
<td>3 times more likely to cook brunch</td>
<td>2 times more like to make brunch reservations</td>
</tr>
<tr>
<td>Shares to Pinterest and Tumblr</td>
<td>Shares to Facebook</td>
</tr>
<tr>
<td>Shopped for gifts on laptops and tablets</td>
<td>Currently shopping on iPhone and Android phones</td>
</tr>
<tr>
<td>Shopped for apparel and cooking gadgets</td>
<td>You might be getting flowers</td>
</tr>
</tbody>
</table>
<p>Whether you bought your gifts a week ago or are still shopping, we&#8217;ll be celebrating Moms this weekend. So make sure you go out and get her something nice!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/05/09/everyone-ready-for-mothers-day/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/05/09/everyone-ready-for-mothers-day/</feedburner:origLink></item>
		<item>
		<title>A Brief History of Using AddThis Dynamically</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/rG5DVabcvxE/</link>
		<comments>http://www.addthis.com/blog/2013/05/07/a-brief-history-of-using-addthis-dynamically/#comments</comments>
		<pubDate>Tue, 07 May 2013 15:42:52 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[Features & Tips]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=6049</guid>
		<description><![CDATA[AddThis provides several ways of making our code work on dynamic websites. Here&#8217;s a quick rundown for the JavaScript savvy audience out there. Asynchronous Loading Asynchronous loading allows you to put our bootloader script&#8211;addthiswidget.js&#8211;on your page without loading the other &#8230; <a href="http://www.addthis.com/blog/2013/05/07/a-brief-history-of-using-addthis-dynamically/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>AddThis provides several ways of making our code work on dynamic websites. Here&#8217;s a quick rundown for the JavaScript savvy audience out there.</p>
<h3>Asynchronous Loading</h3>
<p>Asynchronous loading allows you to put our bootloader script&#8211;<em>addthiswidget.js</em>&#8211;on your page without loading the other assets until you&#8217;re ready. To use it, just add the <em>#async=1</em> flag to the <em>addthiswidget.js</em> URL and then call <em>addthis.init()</em> in a JavaScript function when you&#8217;re ready. That will load the assets, and render the AddThis tools. <span id="more-6049"></span></p>
<pre class="prettyprint"><code>&lt;script src="http://s7.addthis.com/js/300/addthis_widget.js#async=1" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
// Call this function once the rest of the document is loaded
function loadAddThis() {
    addthis.init()
}
&lt;/script&gt;
</code></pre>
<h3>The Domready Option</h3>
<p>Our domready option allows you to load the AddThis bootloader script after the rest of the page. This could be useful if you want to put the AddThis buttons in a pop-over div but not include the tools on the page. Here&#8217;s an example script.</p>
<pre class="prettyprint"><code>&lt;script type="text/javascript"&gt;
var addthisScript = document.createElement('script');
addthisScript.setAttribute('src', 'http://s7.addthis.com/js/300/addthis_widget.js#domready=1')
document.body.appendChild(addthisScript)
&lt;/script&gt;
</code></pre>
<p>This will produce the same result as if the <em>addthis_widget.js</em> script was loaded on the page. You don&#8217;t have to call any other function to get the AddThis buttons to render.</p>
<h3>Rendering Buttons Dynamically</h3>
<p>Many people have sites that use dynamic HTML or AJAX to show content. A common example is endless scrolling, which loads content as the user gets to the end of the page so they don&#8217;t have to navigate to another page for more content. However, because AddThis code runs at page load, the AddThis buttons on this dynamic content don&#8217;t display.</p>
<p>We offer a few functions to render AddThis on dynamic content, once our assets have been loaded. But the most useful one is probably <em>addthis.toolbox()</em>. Here&#8217;s how you use it:</p>
<p><strong>First</strong>, add the <em>addthis_widget.js</em> to the page and make sure the assets have been loaded using the <em>addthis.init()</em> function or the domready option if you&#8217;re loading AddThis dynamically. This will ensure the <em>addthis.toolbox()</em> function is available.</p>
<p><strong>Then</strong>, make sure you&#8217;ve got the AddThis buttons in the dynamic content. Something like this:</p>
<pre class="prettyprint"><code>&lt;h1&gt;My Dynamic Content&lt;/h1&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas ut nibh vitae quam adipiscing tempor et vitae nisl. Sed vulputate sodales dignissim. Quisque sit amet ante at lorem scelerisque malesuada quis vitae odio.&lt;/p&gt;
&lt;!-- AddThis Button BEGIN --&gt;
&lt;div class="addthis_toolbox addthis_default_style "&gt;
    &lt;a class="addthis_button_preferred_1"&gt;&lt;/a&gt;
    &lt;a class="addthis_button_preferred_2"&gt;&lt;/a&gt;
    &lt;a class="addthis_button_preferred_3"&gt;&lt;/a&gt;
    &lt;a class="addthis_button_preferred_4"&gt;&lt;/a&gt;
    &lt;a class="addthis_button_compact"&gt;&lt;/a&gt;
    &lt;a class="addthis_counter addthis_bubble_style"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;!-- AddThis Button END --&gt;
</code></pre>
<p><strong>Finally</strong>, in the JavaScript callback that renders the dynamic content add the <em>addthis.toolbox()</em> function, using a CSS identifier as the first argument.</p>
<pre class="prettyprint"><code>function loadDynamicContent() {
    // Code that will load the dynamic content

    // Once that's all done, call addthis.toolbox()
    addthis.toolbox('.addthis_toolbox')
}
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/05/07/a-brief-history-of-using-addthis-dynamically/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/05/07/a-brief-history-of-using-addthis-dynamically/</feedburner:origLink></item>
		<item>
		<title>Don’t Panic! UX Methods Apply to Mobile</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/f1S-KwemxW8/</link>
		<comments>http://www.addthis.com/blog/2013/04/30/dont-panic-ux-methods-apply-to-mobile/#comments</comments>
		<pubDate>Tue, 30 Apr 2013 13:00:48 +0000</pubDate>
		<dc:creator>UXMatthew</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Features & Tips]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5998</guid>
		<description><![CDATA[Everywhere you look, people are talking about “mobile.” Mobile-first design, mobile responsive design, mobile apps, mobile sites, etc. “Mobile” is clearly a handy buzzword for all of the new devices, but&#8230; What does “mobile” actually mean? On the go? A &#8230; <a href="http://www.addthis.com/blog/2013/04/30/dont-panic-ux-methods-apply-to-mobile/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Everywhere you look, people are talking about “mobile.”<br />
Mobile-first design, mobile responsive design, mobile apps, mobile sites, etc.<br />
“Mobile” is clearly a handy buzzword for all of the new devices, but&#8230;</p>
<p><strong><strong>What does “mobile” actually mean?</strong></strong></p>
<p>On the go?<br />
A small screen?<br />
A touch screen?<br />
Handheld?</p>
<p><strong><strong>Unfortunately, the term “mobile” is used to describe many different things.</strong></strong><span id="more-5998"></span></p>
<p>So how do we design for something so vague?<br />
How do we know whether or not we should even try?</p>
<p dir="ltr">Rather than jump on a particular “mobile design” bandwagon, it’s more important than ever for us to <a href="https://gocardless.com/blog/unresponsive-design/" target="_blank">cast aside the generic cure-all solutions,</a> and instead embrace each product as its own unique design problem. This is precisely what User Experience (UX) professionals do best, and there are <a href="http://www.uxmatters.com/mt/archives/2011/01/design-thinking-employing-design-principles-defining-ease-of-use.php" target="_blank">many proven UX methods</a> that are ready to help us navigate these new, nuanced problems.</p>
<p dir="ltr">Let’s take it one principle at a time&#8230;<strong><br />
</strong></p>
<h3>1. We aren’t our users, so we need to research.</h3>
<p dir="ltr">We could listen to our gut, throw darts at a wall, or just start with the problems that we’d most like to solve, but I recommend <a href="http://www.uxbooth.com/articles/complete-beginners-guide-to-design-research/" target="_blank">UX research</a>. UX research aligns teams, removes fear, and improves chances of success.</p>
<p>Talk to your target audience (either in person or using <a href="http://support.google.com/drive/bin/answer.py?hl=en&amp;answer=87809" target="_blank">free surveys</a>). Ask them what they do now. Ask them why. Listen. Ask follow-up questions. Give them something to use. Watch them use it. Review <a href="http://www.google.com/analytics/" target="_blank">analytics</a>. Take lots of notes. Review your notes. Ignore one-off requests. Focus on underlying patterns.</p>
<p>UX research has always been about studying user contexts and <a href="http://www.slideshare.net/indi/mental-models-empathy-and-design" target="_blank">mental models</a>. These design considerations must now include screen sizes, input methods, physical contexts, attention levels, and more. With a little bit of research, you might find that you only need to design for a couple mobile devices––or none at all.</p>
<p dir="ltr" style="text-align: center">(Bonus: <a href="http://uxmatthew.com/assets/UX_Context_Bingo_r2.pdf" target="_blank">Download this free tracking tool</a>) <a href="http://uxmatthew.com/assets/UX_Context_Bingo_r2.pdf" target="_blank"><img class="aligncenter" alt="Grab a free research tracking tool" src="http://uxmatthew.com/assets/devices_and_contexts_r2_filled.png" width="480" height="444" /></a></p>
<h3>2. We have limited resources, so we need to prioritize.</h3>
<p dir="ltr">If you haven’t yet faced the cold hard truth, let’s face it now together: we cannot design for every user in every situation. Time and resources are limited. We can’t solve for every device in every context. We need to choose our battles. Make a list of the most likely use cases. Rank them by scope and impact. Separate the must-haves from the nice-to-haves. Decide if enough users are even trying to use your product on a new device.</p>
<p dir="ltr">By throwing out less common use cases, we open up opportunities to better serve our primary ones. If we have to design an app for a smartphone, this fact is amplified; there’s only so much room on the screen, space on the hard drive, power in the battery, etc.</p>
<h3>3. We can’t predict everything, so we need to design for flexibility.</h3>
<p dir="ltr">Even when we’ve done our research, there is still a lot we don’t know. People and technology will always surprise us with new contexts. There are thousands of potential ways in which a given product might need to work. Try (within reason) to design products so they still work with unexpected constraints. It doesn’t matter if the 320px window is on a desktop, a smartphone, or some new, unforeseen device; it would be nice if it didn’t break.</p>
<h3>The Result?</h3>
<p>If we follow tried-and-true UX methods, we should end up with a rather obvious product design strategy for all relevant devices. Whether it’s building an iPhone app with 3 features or a responsive website with 900 pages, the decision should be clear. It’s impossible for a product to work on every device, in every context, but it should work for the vast majority of users.</p>
<p>Here at AddThis, we serve millions of websites. So, we don’t get off too light. Our tools have to work for billions of users all over the world. But, if you find that all of your users still prefer a 1070px monitor, keyboard, and mouse, your job will be a bit easier.</p>
<p dir="ltr">But you might want check again in a few months.<b><b> </b></b> <img src='http://www.addthis.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/04/30/dont-panic-ux-methods-apply-to-mobile/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/04/30/dont-panic-ux-methods-apply-to-mobile/</feedburner:origLink></item>
		<item>
		<title>The Secret Life of Concurrent Data Structures</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/2bhXxpaHkrU/</link>
		<comments>http://www.addthis.com/blog/2013/04/25/the-secret-life-of-concurrent-data-structures/#comments</comments>
		<pubDate>Thu, 25 Apr 2013 18:35:39 +0000</pubDate>
		<dc:creator>Michael Spiegel</dc:creator>
				<category><![CDATA[Engineering]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5964</guid>
		<description><![CDATA[A concurrent data structure is &#8220;a particular way of storing and organizing data for access by multiple computing threads (or processes) on a computer.&#8221; In this blog entry, we&#8217;ll be covering one of the hidden sides of concurrent data structures that are not so documented &#8230; <a href="http://www.addthis.com/blog/2013/04/25/the-secret-life-of-concurrent-data-structures/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>A <a href="http://en.wikipedia.org/wiki/Concurrent_data_structure" target="_blank"><b>concurrent data structure</b></a> is &#8220;a particular way of storing and organizing data for access by multiple computing threads (or processes) on a computer.&#8221; In this blog entry, we&#8217;ll be covering one of the hidden sides of concurrent data structures that are not so documented in the literature. We&#8217;ll be looking at insertion and deletion operations, and comparing the relative complexity of implementing these two operations.</p>
<p>Let&#8217;s focus our attention to concurrent data structures in a shared-memory environment where multiple threads are concurrently reading and/or writing. <span id="more-5964"></span>For a thorough background into concurrent data structures, I recommend reading <a href="http://books.google.com/books?id=qGURkdAr42cC&amp;dq" target="_blank"><em>The Art Of Multiprocessor Programming</em></a> by Herlihy and Shavit (Morgan Kaufmann 2008, revised printing 2012). An assumption for this discussion will be that all concurrent data structures under consideration are <a href="http://en.wikipedia.org/wiki/Linearizability" target="_blank"><em>linearizable.</em></a></p>
<p>First question: How do we construct concurrent data-structures? There are at least three common techniques used today, plus a fourth technique that I&#8217;ll briefly go over.</p>
<h4><strong>Coarse-Grained Locking</strong></h4>
<p>The first method is coarse-grained locking. Take your precious data, and wrap a giant lock around it.</p>
<p>Several large open source projects have relied on course-grained locking. The Linux kernel used <a href="http://kerneltrap.org/Linux/Removing_the_Big_Kernel_Lock" target="_blank">a big kernel lock</a> when it first introduced support for simultaneous multithreading in Linux 2.0. Work began in 2008 to remove the big kernel lock, and it was carefully replaced with fine-grained locks until it was <a href="https://www.linux.com/learn/tutorials/447301:whats-new-in-linux-2639-ding-dong-the-big-kernel-lock-is-dead" target="_blank">removed in Linux 2.6.39</a>. The default Python interpreter (CPython) uses a <a href="http://wiki.python.org/moin/GlobalInterpreterLock" target="_blank">global interpreter lock</a> to prevent multiple native threads from executing Python bytecode concurrently.</p>
<h4><strong>Fine-Grained Locking</strong></h4>
<p>The second method is fine-grained locking. Smash that coarse-grained lock into multiple locks! Each fine-grained lock is responsible for protecting a region of the data. Operations on the data are responsible for acquiring one or more of these locks in order to read, modify, and/or write.</p>
<p>Fine-grained locking can improve the overall throughput of a concurrent system. However, one must be careful to avoid the perils of concurrency including deadlock, livelock, starvation, preemption, priority inversion, convoying, etc. You must also have a strategy for releasing shared resources when a thread unexpectedly dies.</p>
<h4><strong>Lock-Free Programming</strong></h4>
<p>The third method extends the concept of fine-grained locking its logical extreme, which is to have lock-free programming.</p>
<p><a href="http://en.wikipedia.org/wiki/Non-blocking_algorithm">Lock‑free programming</a> is programming without locks. Or more formally, a lock‑free implementation of a concurrent data structure is one that guarantees that some thread can complete an operation in a finite number of steps regardless of the execution of the other threads. Lock‑free programming uses atomic operations, such as atomic swap, test-and-set, fetch-and-add, compare-and-swap, load-link/store-conditional, etc., to maintain consistent state. Lock‑free programming can improve system throughput and has desirable liveness properties. It is also tricky to design and implement correctly. The term <i>wait‑free</i> was introduced in <a href="http://dl.acm.org/citation.cfm?id=102808">(Herlihy, 1991)</a>. One of the earliest formal definitions of <i>lock‑free</i> is found in <a href="http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.8065">(Massalin and Pu, 1991)</a>. Jeff Preshing has a clever <a href="http://preshing.com/20120612/an-introduction-to-lock-free-programming" target="_blank">introduction to lock‑free programming</a>.</p>
<h4><strong>Transactional Memory</strong></h4>
<p>The fourth method is to use <a href="http://en.wikipedia.org/wiki/Transactional_memory">transactional memory</a>. Transactional memory allows several memory operations to be grouped together, and execute atomically. Either the entire sequence of operations appear to occur atomically, or else the system state is unchanged.</p>
<p>Transactions are a very familiar concept in a database management system. Transactional memory is still somewhat of an exotic concept. It can be implemented either in software or in hardware, or as a hybrid in software with hardware support. The <a href="http://software.intel.com/en-us/blogs/2012/02/07/transactional-synchronization-in-haswell" target="_blank">Intel Haswell microarchitecture</a> will have support for transactional synchronization. Scala, Haskell, and Clojure have support for transactional memory semantics (as do other languages). There are active <a href="http://dl.acm.org/citation.cfm?id=1454466" target="_blank">con-</a> and <a href="http://dl.acm.org/citation.cfm?id=1924440" target="_blank">pro-</a> discussions on the benefits of transactional memory.</p>
<h2>More is Easy, Less is Hard</h2>
<p>What about the <em>secret life</em> of concurrent data structures? Imagine you are building your own concurrent data structure. Let&#8217;s imagine this data structure as an abstract blob. There are three basic operations that we will want to support: <code>get()</code>, <code>insert()</code>, and <code>delete()</code>. Make a prediction on the relative effort necessary to design and implement each of the tree operations.</p>
<p>My ballpark estimate is that the relative effort for these operations amounts to 10% <code>get()</code>, 30% <code>insert()</code>, and 60% <code>delete()</code>. Common sense dictates that the modify operations are more complex than the read operation. Common sense might also lead us to think that the <code>insert()</code> and <code>delete()</code> operations are approximately equal in complexity. This is almost never the case!</p>
<p>It is almost always easier to correctly move from a state of less information to a state of more information than it is to move from a state of more information to a state of less information. This is even ignoring the extra complexity of ensuring that you have hygienic access to objects in memory. In other words I&#8217;m assuming a runtime which cleans up memory references, and (mostly) eliminates the <a href="http://en.wikipedia.org/wiki/ABA_problem">ABA problem</a>.</p>
<p>The relative difficulty of the <code>delete()</code> operation increases as one moves from coarse-grained locking to fine-grained locking to lock-free programming. To illustrate the <code>delete()</code> complexity phenomenon let&#8217;s take a look into lock-free linked lists. If only <code>get()</code> and <code>insert()</code> operations are necessary, then the lock-free linked list is identical in structure to the sequential linked list.</p>
<h4><strong>Lock-free Linked Lists</strong></h4>
<p>A linked-list is a collection of nodes. Each node is composed of a value, and a possibly null link reference to another node. For simplicity, lets assume that values in the linked list are immutable. The <code>get()</code> operation performs an atomic read on each link reference as it traverses the list in search of the target element. The <code>insert()</code> operation locates the predecessor node where the new node is to be inserted and attempts a compare-and-swap (CAS) operation on the link reference on the predecessor node. If the CAS operation fails then rinse and repeat until successful.</p>
<p>What happens when we add support for the <code>delete()</code> operation? It is illustrative to look at the literature ,and see how the design of the lock-free linked list has evolved over time.</p>
<p><a href="http://dl.acm.org/citation.cfm?id=224988">Valois (1995)</a> introduced the first lock-free linked list algorithm. Consistency is maintained by using auxiliary nodes which are defined as nodes that do not store values. Every normal node in the list is required to have an auxiliary node as its predecessor and its successor. With this design, consistency is maintained at the cost of a x2 storage overhead.</p>
<p><a href="ftp://db.stanford.edu/pub/cstr/reports/cs/tr/99/1624/CS-TR-99-1624.pdf">Greenwald (1999)</a> constructed a lock-free linked list that does not rely on auxiliary nodes. The design relies on the double compare-and-swap operation (the ability to compare-and-swap two disjoint memory locations) which is not available on modern hardware.</p>
<p>The modern lock-free linked list design was introduced by <a href="http://dl.acm.org/citation.cfm?id=676105" target="_blank">Harris (2001)</a> and <a href="http://dl.acm.org/citation.cfm?id=564870.564881" target="_blank">Michael (2002)</a>. In this design two CAS operations are used to perform deletion. The first CAS operation marks the node as logically deleted. The second CAS operation physically removes the node. The <a href="http://en.wikipedia.org/wiki/Linearizability#Linearization_points" target="_blank">linearization point</a> is the first CAS operation. This <a href="http://en.wikipedia.org/wiki/Separation_of_concerns" target="_blank">separation of concerns</a> between logical deletion and physical deletion is a powerful technique. It forms the basis of many modern lock-free data structures. The <code>get()</code> and <code>insert()</code> implementations need to be revised in light of this technique. The other operations need to either ignore or eliminate logically deleted nodes.</p>
<p>The secret messiness of deletion is indirectly exposed throughout the literature. The seminal book <a href="http://books.google.com/books?id=SxPzSTcTalAC"><em>Purely Functional Data Structures</em></a> introduces immutable red-black trees that support <code>get()</code> and <code>insert()</code> <a href="http://okasaki.blogspot.com/2008/02/ten-years-of-purely-functional-data.html">but not <code>delete()</code></a> operations.</p>
<p>The <a href="http://research.microsoft.com/apps/pubs/default.aspx?id=178758" target="_blank">recent paper</a> on the design and implementation of Bw-trees includes the following innocent sentence: &#8220;[Node] merges are decidedly more complicated than splits, and we need more atomic actions to accomplish them.&#8221;</p>
<p>The Bw-tree paper is definitely worth a read. I have seen other papers in the literature on concurrent data structures that simply leave out the <code>delete()</code> operation. Possibly these papers have sufficient research contributions such that they stand on their own merit without this operation, or possibly the data structure is designed for those contexts in which information is never deleted.</p>
<h2>Conclusions</h2>
<p>When you are designing and/or implementing a concurrent data structure, the final task in your workflow is typically the deletion operation. But this is the most complex of the operations you will be supporting. You must plan ahead in your design with an eye on the deletion problem. Use the technique of separation of concerns to distinguish between logical deletion and physical deletion. To my knowledge, this is the most common approach used today in supporting lock-free deletions.</p>
<h4><i><strong>Caveat emptor</strong></i></h4>
<p>My personal experience with concurrent data structures has been primarily with ordered data structures. I have a hunch that the relative complexity of deletion for unordered concurrent data structures may not be as high. But I don&#8217;t have the evidence to back up that claim. A good place to start reading up on concurrent hash tables is <a href="http://dl.acm.org/citation.cfm?id=1432316" target="_blank">&#8220;Hopscotch Hashing.&#8221;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/04/25/the-secret-life-of-concurrent-data-structures/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/04/25/the-secret-life-of-concurrent-data-structures/</feedburner:origLink></item>
		<item>
		<title>Boston, Waco and How the People Empower Social Media</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/b18JnfcYAPU/</link>
		<comments>http://www.addthis.com/blog/2013/04/23/boston-waco-and-how-the-people-empower-social-media/#comments</comments>
		<pubDate>Tue, 23 Apr 2013 16:30:07 +0000</pubDate>
		<dc:creator>Ifdy</dc:creator>
				<category><![CDATA[Current Events]]></category>
		<category><![CDATA[Boston Bombings]]></category>
		<category><![CDATA[communicate]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[empower]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[Reddit]]></category>
		<category><![CDATA[social media]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[Waco fertilizer plant explosion]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5952</guid>
		<description><![CDATA[With wounds of the Boston Marathon bombings and Waco fertilizer plant explosions still fresh, we&#8217;re all witnessing the evolution of how we communicate, find facts, and even comfort ourselves in times of unexpected tragedy. We saw how social media was &#8230; <a href="http://www.addthis.com/blog/2013/04/23/boston-waco-and-how-the-people-empower-social-media/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>With wounds of the <a href="http://www.reuters.com/article/2013/04/22/us-usa-explosions-boston-shooting-idUSBRE93I0GQ20130422" target="_blank">Boston Marathon bombings</a> and <a href="http://www.reuters.com/article/2013/04/19/us-usa-explosion-texas-idUSBRE93H02A20130419" target="_blank">Waco fertilizer plant explosions</a> still fresh, we&#8217;re all witnessing the evolution of how we communicate, find facts, and even comfort ourselves in times of unexpected tragedy. We saw how social media was used to share and source information, amplify voices, and connect communities that are geographically far apart––all in real time.</p>
<p>Here’s what we saw happen.<span id="more-5952"></span></p>
<h3>Twitter was used 38% more than Facebook when it came to sharing the news.</h3>
<p>Twitter users went to the social network to catch live updates, and share them with their network in an incredibly fast pace. It was the go-to network when the news broke, and people highly engaged with each other to spread the word. We also saw the Boston Police Department primarily using Twitter to <a href="https://twitter.com/Boston_Police/status/324997446021308416" target="_blank">get the word out about the suspects</a>, <a href="https://twitter.com/Boston_Police/status/325230546928160768" target="_blank">polite scoldings</a>, <a href="https://twitter.com/Boston_Police/status/325380651027156992" target="_blank">safety alerts</a>, and <a href="https://twitter.com/Boston_Police/status/325413032110989313" target="_blank">details of the manhunt</a>.</p>
<h3>Email, Reddit, and Facebook were primarily used to have conversations.</h3>
<p>This isn’t to say breaking news weren’t shared on these channels, but people came to these channels to talk about the events more than to find facts. Email and Reddit were second and third, respectively, most used channels for conversation about the events, with Facebook coming in after that.</p>
<h3>Good and bad information amplified. Big time.</h3>
<p>Social media is a voice amplifier (and a fast one, too). Everyone was on high alert watching for any information that could be unveiled at any second. Even though at times <a href="http://www.theatlantic.com/technology/archive/2013/04/it-wasnt-sunil-tripathi-the-anatomy-of-a-misinformation-disaster/275155/" target="_blank">misinformation spread quickly</a>, social media was a primary force of sending <a href="http://blog.al.com/live/2013/04/outpouring_of_support_for_west.html" target="_blank">support</a> and <a href="http://mashable.com/2013/04/16/twitter-donates-one-boston-trend/" target="_blank">help</a> to these communities soon after the news broke. In fact, check out how <a href="http://mashable.com/2013/04/19/boston-bomb-jeff-bauman-donate/" target="_blank">the Internet sent its support to Jeff Bauman</a>, one of the survivors of the bombing. And grab a tissue box before you do.</p>
<p>Interestingly enough––though not totally unexpected nowadays––we saw a tremendous amount of crowdsourcing from authorities and news outlets on social.</p>
<h3>What’s the takeaway here?</h3>
<p>There’s one big lesson to learn here: the tools facilitate and amplify, but it’s the user that gives it a voice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/04/23/boston-waco-and-how-the-people-empower-social-media/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/04/23/boston-waco-and-how-the-people-empower-social-media/</feedburner:origLink></item>
		<item>
		<title>Building a Distributed System with Akka Remote Actors</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/nyREJMjdu8w/</link>
		<comments>http://www.addthis.com/blog/2013/04/16/building-a-distributed-system-with-akka-remote-actors/#comments</comments>
		<pubDate>Tue, 16 Apr 2013 13:00:35 +0000</pubDate>
		<dc:creator>Yuesong</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Akka]]></category>
		<category><![CDATA[Scala]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5917</guid>
		<description><![CDATA[At AddThis, we deployed our first production system written in Scala almost two years ago. Since then, a growing stack of new applications are built using this exciting language. Among the many native Scala libraries we have tried and adopted, &#8230; <a href="http://www.addthis.com/blog/2013/04/16/building-a-distributed-system-with-akka-remote-actors/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>At AddThis, we deployed our first production system written in Scala almost two years ago. Since then, a growing stack of new applications are built using this exciting language. Among the many native Scala libraries we have tried and adopted, <a href="http://akka.io/" target="_blank">Akka</a> stands out as the most indispensable.</p>
<p>Akka is a library for building concurrent scalable applications using the <a href="http://en.wikipedia.org/wiki/Actor_model" target="_blank">Actor Model</a>. Its fault-tolerance model is heavily influenced by Erlang. In this post, I will talk about our experience with using Akka (2.0.x) remote actors to build a distributed system, SAM. <span id="more-5917"></span></p>
<p>SAM is an internal tool for managing the data processing pipeline for billions of records daily. Much of the big data heavy lifting is done with <a href="http://www.addthis.com/blog/2011/05/05/clearsprings-big-data-architecture-part-1/" target="_blank">our home-grown Hydra system</a>. SAM functions as the command and control center that submits jobs and runs queries to advance the workflow. It also needs to do intermediary and post-processing of a non-trivial amount of data returned by Hydra.</p>
<p>SAM is designed to be horizontally scalable, such that it can scale out when the underlying Hydra cluster scales out, or when its own workload requires more processing power. It consists of a master and multiple slaves. The master is responsible for task allocation, bookkeeping (DB access), and providing a RESTful API. The slaves are responsible for task execution, such as running hydra queries and aggregating results.</p>
<p>A typical workflow starts when the master receives a user request as illustrated in the sequence diagram below (the participants are Actors, and interactions are message exchanges between them):</p>
<p><img id="internal-source-marker_0.24411562643575313" alt="" src="https://lh6.googleusercontent.com/nkVLgGNqxImW914X29QZL-xHjohWLanMC5wIsjzEr5DqQp6FI9_DJSJJFV9Kh_6e1xmuM-RkJfdK1Zu3GjyBBVq13Bs7hXiKMmquw3yjU3d2dogHHGHPgpA2" border="0" width="100%" /></p>
<ul>
<li>TaskCreator creates a task based on the user request and sends it to the TaskQueue</li>
<li>TaskQueue enqueues the task as well as the sender–the TaskCreator’s ActorRef</li>
<li>TaskQueue dequeues a task and sends it to a Slave’s TaskReceiver, which has registered itself as a task consumer. TaskQueue actually doesn’t know or care about the locality of a consumer–it is just an ActorRef</li>
<li>TaskReceiver receives the task and sends it to the appropriate TaskProcessor, with the original sender as the result receiver</li>
<li>TaskProcessor executes the task. When processing is done, it sends the result back to the receiver–the TaskCreator that created the task at the beginning. Here again, the locality of the receiver is transparent to TaskProcessor</li>
</ul>
<p>Remote message passing is enabled by a few lines of configuration:</p>
<pre class="prettyprint">akka {
...
	actor {
		provider = "akka.remote.RemoteActorRefProvider"
	}
	remote {
		transport = "akka.remote.netty.NettyRemoteTransport"
		netty {
			port = 2552
		}
	}
...
}</pre>
<p>Akka makes it easy to send messages to local or remote Actors. The code is exactly the same from the applications perspective. The Akka libraries automatically route the message to the correct actor.</p>
<p>Akka provides a very easy way to lookup remote actors:</p>
<p><code>val actor = actorSystem.actorFor("akka://actorSystemName@server:2552/user/actorName")</code></p>
<p>To minimize explicit knowledge of actors’ locality, however, we try to limit the use of such lookup in our code. The only place we use it is in the slaves for finding the MasterService actor defined by the master that allows the slaves to register themselves as TaskReceivers.</p>
<p>To detect cluster node connection/disconnection, we take advantage of <a href="http://doc.akka.io/docs/akka/2.0.5/scala/remoting.html#Remote_Events" target="_blank">Akka remote events</a>.</p>
<p>On the slave side, we created a MasterMonitor actor dedicated to monitoring the master connection status. It tries to reconnect when the master is disconnected. On startup, the actor subscribes to the global RemoteClientLifeCycleEvent, and pings MasterService:</p>
<pre class="prettyprint">override def preStart = {
	context.system.eventStream.subscribe(self, classOf[RemoteClientLifeCycleEvent])
	reconnect(Duration.Zero)
}</pre>
<p>The response of the ping message is not important–as a matter of fact, MasterService doesn’t even handle “ping”–it is a way to trigger the RemoteClientLifeCycleEvent that MasterMonitor is interested in:</p>
<pre class="prettyprint">def receive = {
	case _: RemoteClientConnected   =&gt; updateMasterStatus(newValue = true)
	case _: RemoteClientWriteFailed =&gt; updateMasterStatus(newValue = false)
	case _: RemoteClientShutdown    =&gt; updateMasterStatus(newValue = false)
}</pre>
<p>If the outbound connection is established, the actor will receive RemoteClientConnected, and it sets the master connection status to true. When the master is disconnected for whatever reason, this actor will receive either RemoteClientShutdown or RemoteClientWriteFailed, and it will set the master connection status to false. Based on the master status, other slave actors such as TaskReceiver can change its behavior accordingly.</p>
<p>The MasterService has a similar approach to handling status messages. Slave disconnection triggers a RemoteClientLifeCycleEvent:</p>
<pre>case RemoteClientShutdown(_, addr)          =&gt; unregisterSlave(addr)

case RemoteClientWriteFailed(_, _, _, addr) =&gt; unregisterSlave(addr)</pre>
<p>Because the master must maintain statuses of multiple slaves, it uses the remote address value of the event to tell which slave is disconnected. This simple implementation for detecting cluster node status has proven very robust in practice. It works equally well in case of normal shutdown/reconnect as well as abnormal exits (e.g. kill -9).</p>
<p>Even though Akka makes it easy to use remote actors it is still a good practice to understand how that distribution works. Specifically one should be aware that:</p>
<ul>
<li>
<p dir="ltr">Akka uses Java object serialization by default to serialize remote messages. Make sure the message objects you use can be serialized/deserialized properly (case class is always a good choice for message)</p>
</li>
<li>
<p dir="ltr">Default max message size is 1M, so be mindful about data transfer between remote systems via message passing. When the size of a message exceeds the limit, the error is not always obvious. (For example, if Master tried to send too large a message to Slave, a RemoteClientError would be triggered on the slave side, and RemoteClientShutdown on the master side. Had we not subscribed to RemoteClientLifeCycleEvent, it would appear that the message was simply lost.)</p>
</li>
</ul>
<p>As we build out SAM and gain more knowledge about Akka, we realize that a few things are less than ideal in the current design and implementation:</p>
<ul>
<li>In most master-slave setups, master tends to become the bottleneck/single point of failure. It’s no different for SAM. Heavy usage of the RESTful API sometimes puts the master under load, and even a short downtime of the master may affect other systems that depend on it</li>
<li>Master and slave have different code bases; this makes remoting more difficult. For example, we have to take extra care to make sure the classes we are using as messages between the master and slave are available in both. We ended up putting all those in a common module, which adds some complexity to the whole project</li>
<li>We designed the master to be the sole location for storing data files. When a task requires files to be exchanged between the master and slave, we can’t send the content of the files as messages because they are usually too large. To work around that we make the sender send a url that the receiver can use to download the file. That becomes tedious quickly. Using a distributed file system such as HDFS can be helpful here</li>
</ul>
<p>Going forward, we’d like to change the master-slave setup to a cluster of identical nodes with dynamic leader election. A major addition in Akka 2.1.x over 2.0.x is <a href="http://doc.akka.io/docs/akka/2.1.2/cluster/index.html" target="_blank">cluster support</a>, including a gossip protocol for cluster membership. That can potentially simplify things quite a bit for us. We can’t wait to try it out!</p>
<p>SAM is not the type of high throughput low latency systems that Akka is usually used for, nonetheless we still find Akka an invaluable tool. Its actor model implementation makes building correct concurrent applications easy. In this post, we covered our usage of remote actors, which is only one of many wonderful things Akka has to offer. We look forward to sharing more of our experiences with you.</p>
<p>Did you get this far? Are you interested in the type of scalable work we’re doing at AddThis?  If so, why not check out the <a href="http://www.addthis.com/careers" target="_blank">engineering openings on our careers page</a>?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/04/16/building-a-distributed-system-with-akka-remote-actors/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/04/16/building-a-distributed-system-with-akka-remote-actors/</feedburner:origLink></item>
		<item>
		<title>E-commerce UX Design with CustomInk and ThinkGeek</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/-iII-g0uU_Y/</link>
		<comments>http://www.addthis.com/blog/2013/04/11/how-customink-and-thinkgeek-do-e-commerce-ux-design/#comments</comments>
		<pubDate>Thu, 11 Apr 2013 17:00:40 +0000</pubDate>
		<dc:creator>Jim Lane</dc:creator>
				<category><![CDATA[Company News]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[addthis]]></category>
		<category><![CDATA[customink]]></category>
		<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[retail]]></category>
		<category><![CDATA[thinkgeek]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5886</guid>
		<description><![CDATA[For Wednesday night&#8217;s NoVA UX meetup I moderated a panel discussion about how two local retailers &#8212; CustomInk and ThinkGeek &#8212; approach user experience design in an e-commerce setting. Both companies use comprehensive testing strategies, and multiple analytics tools like &#8230; <a href="http://www.addthis.com/blog/2013/04/11/how-customink-and-thinkgeek-do-e-commerce-ux-design/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>For <a title="April NoVA UX e-commerce panel" href="http://www.meetup.com/nova-ux/events/101223272/" target="_blank">Wednesday night&#8217;s NoVA UX meetup</a> I moderated a panel discussion about how two local retailers &mdash; <a title="CustomInk" href="http://customink.com" target="_blank">CustomInk</a> and <a title="ThinkGeek" href="http://thinkgeek.com" target="_blank">ThinkGeek</a> &mdash; approach user experience design in an e-commerce setting.</p>
<p><img title="April NoVA UX E-commerce Panel" src="http://farm9.staticflickr.com/8239/8639359873_b059418560_o.jpg" alt="April NoVA UX E-commerce Panel" width="100%" class="pic" /></p>
<p>Both companies use comprehensive testing strategies, and multiple analytics tools like Google Analytics, Omniture, and Adobe&#8217;s Test and Target, to optimize conversions and revenue.<span id="more-5886"></span> CustomInk shared strategies for refining their unique online + offline ordering process, and ThinkGeek described how they do sophisticated testing with a very small team.</p>
<p>One of the popular quotes of the evening was from ThinkGeek&#8217;s Matt Chwat: &#8220;Our definition of Lean UX is that we&#8217;re lean on UX.&#8221;</p>
<p>CustomInk described their experiences developing faceted search for t-shirt ordering, and how its efficacy changes with different audiences and contexts. We also explored how both companies wrap customer service and community management feedback into their design and development processes, keeping the focus ultimately on their customers.</p>
<p>Both companies brought along some fun giveaways; six attendees scored gift bags from ThinkGeek, and one lucky attendee won a $200 gift certificate towards a CustomInk t-shirt order.</p>
<p><img title="April NoVA UX giveaway" src="http://farm9.staticflickr.com/8525/8640482344_f8ce5c9761_o.png" alt="April NoVA UX giveaway" width="100%" class="pic" /></p>
<p>As always, we had a lively Q&amp;A throughout the evening with an audience of local designers and developers in the Northern Virginia area.</p>
<p>We&#8217;ll look forward to seeing everyone next month, when Andrew Duthie will talk about how Microsoft designs for both mobile and desktop products, and Bill Killam will dive into strategies for usability testing.</p>
<p>If you&#8217;re interested in attending these events, join us at the <a title="NoVA UX meetup" href="http://meetup.com/nova-ux" target="_blank">NoVA UX meetup group</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/04/11/how-customink-and-thinkgeek-do-e-commerce-ux-design/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/04/11/how-customink-and-thinkgeek-do-e-commerce-ux-design/</feedburner:origLink></item>
		<item>
		<title>Latest AddThis Update: Joomla</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/_UuVl6ekjTM/</link>
		<comments>http://www.addthis.com/blog/2013/04/11/latest-addthis-update-joomla/#comments</comments>
		<pubDate>Thu, 11 Apr 2013 14:00:06 +0000</pubDate>
		<dc:creator>Ifdy</dc:creator>
				<category><![CDATA[Features & Tips]]></category>
		<category><![CDATA[What's New]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[product]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5878</guid>
		<description><![CDATA[In the latest round of product updates, we’ve got new plugins and modules in store for Joomla users. You can also get follow buttons for your Joomla page! Click here to download the sharing tools.]]></description>
				<content:encoded><![CDATA[<p>In the latest round of product updates, we’ve got new plugins and modules in store for <a href="http://www.joomla.org/" target="_blank">Joomla</a> users. You can also <a href="https://www.addthis.com/get/follow?where=joomla#.UWQePBnR3Lc">get follow buttons</a> for your Joomla page!</p>
<p align="center" style="padding:25px 0;"><img src="https://lh5.googleusercontent.com/fknFGZ9-jjENH2HuOkdHggPZUiqgNp9fB8P9PinY2BgiHujOh3EZCAl9vqp_iHN3XgIm1m_0SpF0UPJdS-qT7y5cJI_wU9xNrJOuZ1rvi8stEWbGa0t6fGg-IQ" alt="" width="436px;" height="124px;" /></p>
<p><a href="https://www.addthis.com/get/sharing?where=joomla#.UV8pRBnR1Uc">Click here</a> to download the sharing tools.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/04/11/latest-addthis-update-joomla/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/04/11/latest-addthis-update-joomla/</feedburner:origLink></item>
		<item>
		<title>AddThis Blog Refresh</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/2VTJK4If1tY/</link>
		<comments>http://www.addthis.com/blog/2013/04/10/addthis-blog-refresh/#comments</comments>
		<pubDate>Wed, 10 Apr 2013 14:04:52 +0000</pubDate>
		<dc:creator>foo</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[blog refresh]]></category>
		<category><![CDATA[design]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5873</guid>
		<description><![CDATA[With spring in the air and the cherry blossoms around DC blooming, it feels like the perfect time to roll out a new blog design, wouldn&#8217;t you agree? We rolled it out yesterday afternoon, and since then have received some &#8230; <a href="http://www.addthis.com/blog/2013/04/10/addthis-blog-refresh/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>With spring in the air and the cherry blossoms around DC blooming, it feels like the perfect time to roll out a new blog design, wouldn&#8217;t you agree? We rolled it out yesterday afternoon, and since then have received some good feedback – which we appreciate greatly – hopefully you like it as much as we do.</p>
<p><img src="http://farm9.staticflickr.com/8126/8636874472_4ed2451c79_o.png" alt="Responsive, Mobile Friendly" width="100%" /></p>
<p><span id="more-5873"></span></p>
<p>One of the driving factors behind this blog refresh was to make it more responsive and mobile-friendly&#8230; so whether you&#8217;re viewing it from your preferred browser, tablet or smartphone, it&#8217;s now be much easier to read than before.</p>
<p>The photos on the side were taken around the office, so you also get a glimpse of what it&#8217;s like here at AddThis. If you refresh it a few times, you&#8217;ll see new photos being loaded&#8230; and not to worry, we&#8217;ll be adding more shortly.</p>
<p>p.s. In case you&#8217;re curious, foosball remains king around here, though I still manage to sneak in some Halo 4 action every once in a while.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/04/10/addthis-blog-refresh/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/04/10/addthis-blog-refresh/</feedburner:origLink></item>
		<item>
		<title>“Honey, I lost the buttons!”</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/qpwrkfEghEY/</link>
		<comments>http://www.addthis.com/blog/2013/04/09/honey-i-lost-the-buttons/#comments</comments>
		<pubDate>Tue, 09 Apr 2013 17:00:49 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features & Tips]]></category>
		<category><![CDATA[addthis]]></category>
		<category><![CDATA[buttons]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[not showing up]]></category>
		<category><![CDATA[support]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5826</guid>
		<description><![CDATA[We’ve received some questions lately from folks whose AddThis buttons seem to have disappeared. Naturally, this would be really disconcerting, so here are a few things that you can look into to calm your nerves! Can you connect to AddThis? &#8230; <a href="http://www.addthis.com/blog/2013/04/09/honey-i-lost-the-buttons/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>We’ve received some questions lately from folks whose AddThis buttons seem to have disappeared. Naturally, this would be really disconcerting, so here are a few things that you can look into to calm your nerves!</p>
<p><span id="more-5826"></span></p>
<h3>Can you connect to AddThis?</h3>
<p>AddThis buttons are generated using JavaScript and CSS that&#8217;s stored on our servers, so if your computer doesn&#8217;t have access to these servers, you won&#8217;t be able to see the buttons. This can happen for a number of reasons, but is usually related to <a href="http://en.wikipedia.org/wiki/Adware" target="_blank">adware</a> or <a href="http://en.wikipedia.org/wiki/Malware" target="_blank">malware</a> blocking software. Verify you have access by going to these URLs:</p>
<ul>
<li><a href="http://www.addthis.com/" target="_blank">http://www.addthis.com/</a></li>
<li><a href="http://s7.addthis.com/js/300/addthis_widget.js" target="_blank">http://s7.addthis.com/js/300/addthis_widget.js</a></li>
<li><a href="http://ct1.addthis.com/static/r07/widget110.css" target="_blank">http://ct1.addthis.com/static/r07/widget110.css</a></li>
</ul>
<p>If you experience errors visiting any of those URLs, or see something that doesn&#8217;t look like AddThis, you don&#8217;t have access to AddThis and therefore the buttons won&#8217;t show up. If you can identify which software is blocking AddThis, follow the prompts to unblock us, and the buttons should show up.</p>
<h3>Do you have all the code on the page?</h3>
<p>If you&#8217;ve recently made changes to your site another problem might be that you didn&#8217;t put everything back on the page. View the source of your page (by right-clicking or Control-click your page, and select “View Source” or “View Page Source”) and use the find command to make sure you&#8217;ve got the following items on the page:</p>
<ul>
<li>The AddThis toolbox with buttons in it. (Note that the buttons inside of this might be different depending on which ones you use.)
<pre><code>&lt;div class="addthis_toolbox addthis_default_style "&gt; &lt;a class="addthis_button_preferred_1"&gt;&lt;/a&gt; &lt;a class="addthis_button_preferred_2"&gt;&lt;/a&gt; &lt;a class="addthis_button_preferred_3"&gt;&lt;/a&gt; &lt;a class="addthis_button_preferred_4"&gt;&lt;/a&gt; &lt;a class="addthis_button_compact"&gt;&lt;/a&gt; &lt;a class="addthis_counter addthis_bubble_style"&gt;&lt;/a&gt; &lt;/div&gt; </code></pre>
</li>
<li>Also, make sure you have our <strong>addthis_widget.js</strong> on the page. This script loads all the other code that shows our buttons. If it&#8217;s not on the page then none of the buttons will show up:
<pre><code>&lt;script src="http://s7.addthis.com/js/300/addthis_widget.js" type="text/javascript"&gt;&lt;/script&gt; </code></pre>
</li>
</ul>
<h3>Are you using WordPress?</h3>
<p id="internal-source-marker_0.8985455297889909" dir="ltr">First, make sure the plugin hasn&#8217;t somehow been deactivated. If you recently changed your theme, make sure it uses the the_content() function instead of get_the_content() as the latter doesn&#8217;t include the callback that adds the AddThis buttons to your posts.</p>
<p>Finally, if you&#8217;ve got a caching plugin like <a href="http://wordpress.org/extend/plugins/wp-super-cache/">WP Super Cache</a> make sure that you flush these to ensure the buttons get added to your posts.</p>
<h3>Still don&#8217;t see them?</h3>
<p id="internal-source-marker_0.8985455297889909" dir="ltr">If you&#8217;re still not seeing the buttons after checking the steps above, you may be having another issue. In that case, <a href="http://support.addthis.com/" target="_blank">contact our support team</a>, and we’ll be happy to help!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/04/09/honey-i-lost-the-buttons/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/04/09/honey-i-lost-the-buttons/</feedburner:origLink></item>
		<item>
		<title>Bring Your Ping Pong and Engineering Skills</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/y3Bt9r80tic/</link>
		<comments>http://www.addthis.com/blog/2013/04/05/bring-your-ping-pong-and-engineering-skills/#comments</comments>
		<pubDate>Fri, 05 Apr 2013 14:44:35 +0000</pubDate>
		<dc:creator>Jeffrey Wong</dc:creator>
				<category><![CDATA[Funness]]></category>
		<category><![CDATA[careers]]></category>
		<category><![CDATA[ping pong]]></category>
		<category><![CDATA[table tennis]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5804</guid>
		<description><![CDATA[We finally got a ping pong table! While many of my co-workers have claimed they&#8217;re the best, we haven&#8217;t actually ranked people yet. We&#8217;ll need to host a tournament sometime soon. If you&#8217;ve got ping pong and engineering skills, you &#8230; <a href="http://www.addthis.com/blog/2013/04/05/bring-your-ping-pong-and-engineering-skills/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>We finally got a ping pong table!
<p><img src="http://farm9.staticflickr.com/8529/8616969318_f1edf35316_b.jpg" alt="" width="100%" class="pic" /></p>
<p><span id="more-5804"></span>While many of my co-workers have claimed they&#8217;re the best, we haven&#8217;t actually ranked people yet. We&#8217;ll need to host a tournament sometime soon.</p>
<p><img src="http://farm9.staticflickr.com/8404/8616965594_4110c7b893_b.jpg" alt="" width="100%" class="pic" /></p>
<p>If you&#8217;ve got ping pong and engineering skills, you should come by. Check out our <a href="http://www.addthis.com/careers#.UVxQrqtATRw" target="_blank">careers page</a>–we&#8217;re hiring!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/04/05/bring-your-ping-pong-and-engineering-skills/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/04/05/bring-your-ping-pong-and-engineering-skills/</feedburner:origLink></item>
		<item>
		<title>Keeping It Simple with URL Design for RESTful Web Services</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/e5BYSfGMvOA/</link>
		<comments>http://www.addthis.com/blog/2013/04/03/keeping-it-simple-with-url-design-for-restful-web-services/#comments</comments>
		<pubDate>Wed, 03 Apr 2013 18:35:26 +0000</pubDate>
		<dc:creator>Charlie Reverte</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Charlie Reverte]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[endpoint]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[RESTful web services]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[VP Engineering]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5810</guid>
		<description><![CDATA[The following is a guest post by AddThis VP of Engineering, Charlie Reverte, posted today at APIUX.com. To read the rest of the blog post, click here to go over to their site. URL design discussions for RESTful web services &#8230; <a href="http://www.addthis.com/blog/2013/04/03/keeping-it-simple-with-url-design-for-restful-web-services/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><em>The following is a guest post by AddThis VP of Engineering, Charlie Reverte, posted today at APIUX.com. To read the rest of the blog post, click <a href="http://apiux.com/2013/04/03/url-design-restful-web-services/" target="_blank">here</a> to go over to their site.</em></p>
<p>URL design discussions for RESTful web services often degrade into debates over pluralization and parameter names. There are a couple of principles I like to use to keep things simple.<span id="more-5810"></span></p>
<h3>1) Using your API should feel like using a filesystem</h3>
<ul>
<li>Endpoints used to create, list, and search for entities should look like directories, e.g. <code><strong>/users</strong></code></li>
<li>Use a plural noun so it feels like a directory of users, not a user controller</li>
<li>Endpoints used to read, update, and delete individual entities should look like files, e.g. <code><strong>/users/charlie</strong></code></li>
</ul>
<p><img class="aligncenter" src="http://i.imgur.com/N24yRP1.png" alt="" width="426" height="113" /></p>
<h3>2) All calls to a given endpoint should return the same type</h3>
<ul>
<li>Either apples, or oranges, or a list of oranges, don’t mix them up</li>
<li>File-looking endpoints should return individual entities</li>
<li>Directory-looking endpoints should return lists of entities</li>
</ul>
<p><img class="aligncenter" src="http://cobornsdelivers.files.wordpress.com/2010/02/apples-and-oranges.jpg" alt="" width="281" height="188" />We may be bikeshedding here but I think your API will be more intuitive to newcomers if you model it this way.</p>
<ul>
<li>Consistent response type per endpoint simplifies deserialization for clients, no switching needed</li>
<li>Once you agree on a contract it’s easy to mock up with static files on a server</li>
<li>Clients can start working with your mockup before your code is finished</li>
</ul>
<p><em>To read the rest of this blog post, head over to <a href="http://apiux.com/2013/04/03/url-design-restful-web-services/" target="_blank">APIUX</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/04/03/keeping-it-simple-with-url-design-for-restful-web-services/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/04/03/keeping-it-simple-with-url-design-for-restful-web-services/</feedburner:origLink></item>
		<item>
		<title>Facebook Like Counters, AddThis, &amp; You</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/c-kx2pwWEb0/</link>
		<comments>http://www.addthis.com/blog/2013/03/28/facebook-like-counters-addthis-you/#comments</comments>
		<pubDate>Thu, 28 Mar 2013 18:30:38 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[Features & Tips]]></category>
		<category><![CDATA[+1]]></category>
		<category><![CDATA[counters]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[Facebook Like Counters]]></category>
		<category><![CDATA[google+]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5795</guid>
		<description><![CDATA[On Monday, around 1PM Pacific Time, Facebook had an issue with their comments and the counter for their Facebook Like button that made it appear for many people&#8211;including TechCrunch&#8211;that they had lost all their Facebook Likes. Unfortunately, this was out &#8230; <a href="http://www.addthis.com/blog/2013/03/28/facebook-like-counters-addthis-you/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>On Monday, around 1PM Pacific Time, Facebook had an issue with their comments and the counter for their Facebook Like button that made it appear for many people&#8211;including TechCrunch&#8211;that they had lost all their Facebook Likes.</p>
<p>Unfortunately, this was out of our hands since the problem happened on Facebook&#8217;s end. But I thought this would be a good time to explain how counter values work, and where those values are stored.<span id="more-5795"></span></p>
<h3>How counters work</h3>
<p>Counter values for all services are stored based on the URL of the page. So, for example, the URLs http://www.example.com/index.html and http://example.com/ will have different counts because the URLs are different, despite the fact that they&#8217;ll display the same page.</p>
<p>Take a look at this image:</p>
<p><img title="" src="http://i.imgur.com/HjtNhYx.png" alt="URL Diagram" /></p>
<p>If there is a difference in anything falling into the green sections, the counts for those URLs will be different.</p>
<p>There are ways around this; for example, you can set a <a href="http://support.google.com/webmasters/bin/answer.py?hl=en&amp;answer=139394" target="_blank">canonical link tag</a> or set the URL to share to be different, but if you do that, the counters will be the same regardless of the page you&#8217;re on.</p>
<p>So if you have the Facebook Like button on several pages of your site, and you don&#8217;t have any other configuration telling AddThis to use a specific URL you designate, each page of your site will have different count values.</p>
<p>Many people make the common mistake of thinking the Facebook Like button should have the same number of fan Likes on their Facebook Page. This isn&#8217;t true. The Facebook Like button doesn&#8217;t count Likes for your Facebook Page just like the Tweet button doesn&#8217;t count your Twitter followers, and the Google +1 button doesn&#8217;t count the number of people who have +1&#8242;ed your Google+ Page.</p>
<p>The Like/Tweet/+1 button counters specifically show the number of times the URL (the one you&#8217;ve configured to share) has actually been shared to those services.</p>
<p>The Facebook Like button counter also includes activity not tracked by AddThis analytics, such as likes, shares, and comments that happen on Facebook.com. Here&#8217;s a screenshot of what you&#8217;d see about your Facebook-related activity from your AddThis analytics page:</p>
<p><img title="" src="http://i.imgur.com/XTIzzqY.png" alt="Content Detail showing Facebook Like breakdown" /></p>
<p>Counters are also served from cached servers to improve performance. So, for instance, you share something to Twitter, and then immediately refresh your page, the counter won&#8217;t be updated until Twitter&#8217;s counter server updates its cache.</p>
<p>AddThis counters work a little differently. We cache the values, but we also store the counter value in a cookie on your computer after you share, so users are reassured their share was registered.</p>
<h3>Where counter values are stored</h3>
<p>Each service — whether that&#8217;s Facebook, Twitter, or AddThis — stores its counter values separately. This means that the value you see in Facebook&#8217;s Like counter is only stored on Facebook&#8217;s servers, not AddThis servers. The same goes for the Tweet, +1, and all of our <a href="http://support.addthis.com/customer/portal/articles/381237-third-party-buttons?t=89322" target="_blank">third-party buttons</a>. So when you see that your counter reset without having made any changes to your URL, it&#8217;s almost always something that happens outside of the AddThis tool.</p>
<p>The only counter values AddThis stores are the ones used in our compact menu and our pill-style menu. That is, for:</p>
<pre><code>&lt;a class="addthis_counter addthis_pill_style"&gt;&lt;/a&gt; </code></pre>
<p>and:</p>
<pre><code>&lt;a class="addthis_counter addthis_bubble_style"&gt;&lt;/a&gt; </code></pre>
<p>Our <a href="http://support.addthis.com/customer/portal/articles/968908-addthis-individual-share-counters" target="_blank">Individual Share Counters</a> use the services&#8217; APIs to get the counts, so we don&#8217;t store those counter values either.</p>
<p>I hope this answers all your questions about counts, counters, and what happens when you see your counter rest. If you have any questions for me, feel free to post them in the comment section below, or look for me over in our <a href="http://support.addthis.com/" target="_blank">support section!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/03/28/facebook-like-counters-addthis-you/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/03/28/facebook-like-counters-addthis-you/</feedburner:origLink></item>
		<item>
		<title>Sharing Tool Updates Coming Your Way! [Updated]</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/U2x10f82vEc/</link>
		<comments>http://www.addthis.com/blog/2013/03/26/sharing-tool-updates-coming-your-way/#comments</comments>
		<pubDate>Tue, 26 Mar 2013 15:05:00 +0000</pubDate>
		<dc:creator>Ifdy</dc:creator>
				<category><![CDATA[Features & Tips]]></category>
		<category><![CDATA[preview]]></category>
		<category><![CDATA[sharing tool]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5765</guid>
		<description><![CDATA[[Update 4/25: We updated the links in this blog post to get you to the latest Support FAQ on the upgrade.] We upgraded our sharing tool last fall, with a slick new interface which boosted sharing performance, and made it &#8230; <a href="http://www.addthis.com/blog/2013/03/26/sharing-tool-updates-coming-your-way/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p dir="ltr">[Update 4/25: We updated the links in this blog post to get you to <a href="http://support.addthis.com/customer/portal/articles/1109501-addthis-3-0-upgrade-faq#.UXl1DYLudUc" target="_blank">the latest Support FAQ</a> on the upgrade.]</p>
<p dir="ltr" id="internal-source-marker_0.801984265286145">We <a href="http://www.addthis.com/blog/2012/09/13/introducing-our-new-sharing-experience/#.UUuCFRmTYxd" target="_blank">upgraded our sharing tool last fall</a>, with a slick new interface which boosted sharing performance, and made it easier to use.</p>
<p dir="ltr">The new version of the AddThis boasts a sleek one-column design, enhanced email sharing, and personalization to show the services you use the most. Check out the picture below.</p>
<p><img class="aligncenter" alt="at30 upgrade" src="http://farm9.staticflickr.com/8387/8592843228_a375bfe0a1.jpg" width="500" height="239" /><span id="more-5765"></span></p>
<p dir="ltr">We also introduced our new instant share feature which lets visitors sign in and share your content without leaving your site! (The green dot on the icons in the picture shows that it’s enabled.)</p>
<p dir="ltr">This is just the tip of the iceberg of what <a href="http://www.addthis.com/press/addthis-updates-sharing-tools-to-drive-engagement-across-14-million-sites#.UUuCyxmTYxd" target="_blank">we can do</a>! Are you feeling the excitement yet?!</p>
<p dir="ltr">I know, me too. <img src='http://www.addthis.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p dir="ltr">The best part: you don’t have to do anything because we’ll do it for you.</p>
<p>On May 7th, 2013, we’re automatically upgrading any sites using old versions of our sharing tool to the latest version of AddThis. Check out <a href="http://support.addthis.com/customer/portal/articles/1109501-addthis-3-0-upgrade-faq#.UXl1DYLudUc" target="_blank">these instructions to preview</a> how it’ll look like on your site. (Tip: if you’re not sure which version you have, compare your menu to the image above, and if it doesn’t look like the menu on the right-side, you may have an older version.)</p>
<p>If you don’t want to wait until then, you can <a href="https://www.addthis.com/get/sharing?utm_expid=65470897-19&amp;utm_referrer=http%3A%2F%2Fwww.addthis.com%2F#.UUt10hmTYxc" target="_blank">grab the latest code right off our site</a>. But if you need a little more time with the older versions, we have <a href="http://support.addthis.com/customer/portal/articles/1109501-addthis-3-0-upgrade-faq#.UXl1DYLudUc" target="_blank">instructions</a> on how you can keep your current version for an additional 90 days.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/03/26/sharing-tool-updates-coming-your-way/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/03/26/sharing-tool-updates-coming-your-way/</feedburner:origLink></item>
		<item>
		<title>AddThis Named as One of 2013’s Greatest Places to Work in Greater Washington</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/qMCpkE9XfHg/</link>
		<comments>http://www.addthis.com/blog/2013/03/22/addthis-named-as-one-of-2013s-greatest-places-to-work-in-greater-washington/#comments</comments>
		<pubDate>Fri, 22 Mar 2013 18:38:03 +0000</pubDate>
		<dc:creator>Ifdy</dc:creator>
				<category><![CDATA[Company News]]></category>
		<category><![CDATA[Best Places to Work]]></category>
		<category><![CDATA[Greater Washington]]></category>
		<category><![CDATA[Ramsey McGrory]]></category>
		<category><![CDATA[Washington Business Journal]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5742</guid>
		<description><![CDATA[Today, the Washington Business Journal named AddThis as one of the greatest places to work in the Greater Washington area. It’s an honor to be mentioned among the few selected from thousands of companies who competed! &#8220;The AddThis A-team adds &#8230; <a href="http://www.addthis.com/blog/2013/03/22/addthis-named-as-one-of-2013s-greatest-places-to-work-in-greater-washington/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p dir="ltr">Today, the <a href="http://www.bizjournals.com/washington/event/78811#eventDetails" target="_blank">Washington Business Journal named AddThis</a> as one of the greatest places to work in the Greater Washington area. It’s an honor to be mentioned among the few selected from thousands of companies who competed!</p>
<p><span id="more-5742"></span>
<p dir="ltr">&#8220;The AddThis A-team adds passion, commitment, and incredible intellect everyday,” says Ramsey McGrory, CEO. “Our<a href="http://www.addthis.com/about#.UUuoGFtATrc" target="_blank"> core principles</a> focus on data, simplicity, community and adding value and fun in everything we do. I like to think being named as one of the best places to work in the DC area means we’re doing just that. We’re honored to be recognized.&#8221;</p>
<p>Many thanks to the Washington Business Journal!</p>
<p><img src="http://farm9.staticflickr.com/8109/8528273877_885438ae54.jpg" alt="AddThis Game Room" width="100%" class="pic" /></p>
<p>Want to work here? (We&#8217;ve got a foosball table!) Check out <a href="http://www.addthis.com/careers" target="_blank">our careers page</a> for details on openings.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/03/22/addthis-named-as-one-of-2013s-greatest-places-to-work-in-greater-washington/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/03/22/addthis-named-as-one-of-2013s-greatest-places-to-work-in-greater-washington/</feedburner:origLink></item>
		<item>
		<title>AddThis Community Manager, At Your Service</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/GcDfGmZX1bE/</link>
		<comments>http://www.addthis.com/blog/2013/03/21/addthis-community-manager-at-your-service/#comments</comments>
		<pubDate>Thu, 21 Mar 2013 17:11:19 +0000</pubDate>
		<dc:creator>Ifdy</dc:creator>
				<category><![CDATA[Company News]]></category>
		<category><![CDATA[community manager]]></category>
		<category><![CDATA[Ifdy]]></category>
		<category><![CDATA[social media]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5737</guid>
		<description><![CDATA[Hi! I’m Ifdy, and I just joined the AddThis team. I’ll be your new community manager, and my job is to be here for you. I’ll be behind the scenes on our AddThis social pages, and all the best platforms &#8230; <a href="http://www.addthis.com/blog/2013/03/21/addthis-community-manager-at-your-service/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p dir="ltr">Hi! I’m Ifdy, and I just joined the AddThis team. I’ll be your new community manager, and my job is to be here for you.</p>
<p dir="ltr">I’ll be behind the scenes on our AddThis social pages, and all the best platforms and forums to communicate with you. My job is to engage in a conversation with you—our amazing users.</p>
<p><span id="more-5737"></span></p>
<p dir="ltr">I’ve been doing this a while, and the thing I love the most about community management is watching the difference all of our personal connections make every day&#8211;in conversations, communities, industries, even in product features. And its all happening so fast! AddThis is listening and understands the power of connections and data. We’re making online experiences more engaging, and more meaningful.</p>
<p>Being your community manager means I’ll be on several social channels (<a href="https://twitter.com/addthis" target="_blank">Follow us!</a> <a href="https://www.facebook.com/AddThis" target="_blank">Like us!</a>) to connect with you, get to know you and learn from you. I’ll help answer questions, or direct you to the best resources to get you what you need.</p>
<p>I’m really looking forward to adding to the community! <a href="https://www.facebook.com/AddThis?ref=hl" target="_blank">Add yourself if you haven&#8217;t yet.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/03/21/addthis-community-manager-at-your-service/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/03/21/addthis-community-manager-at-your-service/</feedburner:origLink></item>
		<item>
		<title>Learning about UI testing and action design</title>
		<link>http://feedproxy.google.com/~r/addthis/community/~3/ejDNODTjvEU/</link>
		<comments>http://www.addthis.com/blog/2013/03/14/learning-about-ui-testing-and-action-design/#comments</comments>
		<pubDate>Thu, 14 Mar 2013 19:00:22 +0000</pubDate>
		<dc:creator>Jim Lane</dc:creator>
				<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5717</guid>
		<description><![CDATA[Last night AddThis hosted the the March NoVA UX meetup here in our Vienna, VA headquarters. We had two speakers: First up was Alex Kalinovsky, CEO of CreamTec LLC, who gave a talk about visual UI testing. Alex talked about the &#8230; <a href="http://www.addthis.com/blog/2013/03/14/learning-about-ui-testing-and-action-design/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><img src="http://farm9.staticflickr.com/8093/8558163166_5d2f3dd52f.jpg" alt="Steve Wendel's NoVA UX Action Design talk" width="100%" class="pic" /></p>
<p><span id="more-5717"></span>Last night AddThis hosted the the March <a title="NoVA UX meetup group" href="http://meetup.com/nova-ux" target="_blank">NoVA UX</a> meetup here in our Vienna, VA headquarters. We had two speakers:</p>
<p>First up was Alex Kalinovsky, CEO of <a title="CreamTec LLC" href="http://www.creamtecllc.com" target="_blank">CreamTec</a> LLC, who gave a talk about visual UI testing. Alex talked about the importance and challenges of visual interface testing, described current tools and methodologies, and then introduced his company&#8217;s solution called Screenster. You can check out <a title="Alex  Kalinovsky's NoVA UX slides on visual UI testing " href="http://www.slideshare.net/CreamTec/ui-testing-automation-17208623" target="_blank">his slides on SlideShare</a>.</p>
<p>Steve Wendel, Principal Scientist at <a title="HelloWallet" href="http://hellowallet.com" target="_blank">HelloWallet</a>, spoke next. He described strategies for designing products and interfaces that promote behavioral change – Action Design. He describes Action Design as building good products that are effective at changing behavior, so people can do things that they want to do but haven&#8217;t been able to do before. You can check out <a title="Steve Wendel's NoVA UX presentation on designing interfaces for behavioral change" href="http://actiondesign.hellowallet.com/slides-from-nova-ux-meetup/" target="_blank">his presentation on his company&#8217;s blog</a>. Steve also organizes the <a title="Action Design DC meetup" href="http://www.meetup.com/Action-Design-DC/" target="_blank">Action Design DC meetup</a>.</p>
<p>For <a title="April NoVA UX meetup" href="http://www.meetup.com/nova-ux/events/101223272/" target="_blank">next month&#8217;s meetup</a> I&#8217;ll be moderating a panel discussion about e-commerce user experience design with design leaders from local retailers <a title="ThinkGeek" href="http://thinkgeek.com" target="_blank">ThinkGeek</a> and <a title="CustomInk" href="http://customink.com" target="_blank">CustomInk</a>. If you&#8217;re a UX professional in the Northern Virginia or DC Metro area, come <a title="April NoVA UX meetup" href="http://www.meetup.com/nova-ux/events/101223272/" target="_blank">join us</a> on April 10th at 7pm here at AddThis HQ.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/03/14/learning-about-ui-testing-and-action-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.addthis.com/blog/2013/03/14/learning-about-ui-testing-and-action-design/</feedburner:origLink></item>
	</channel>
</rss>
