<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>AddThis Blog &#187; Engineering</title>
	<atom:link href="http://www.addthis.com/blog/category/engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.addthis.com/blog</link>
	<description>News and updates from AddThis</description>
	<lastBuildDate>Fri, 24 May 2013 14:00:14 +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>
		<item>
		<title>The Secret Life of Concurrent Data Structures</title>
		<link>http://www.addthis.com/blog/2013/04/25/the-secret-life-of-concurrent-data-structures/</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>
		</item>
		<item>
		<title>Building a Distributed System with Akka Remote Actors</title>
		<link>http://www.addthis.com/blog/2013/04/16/building-a-distributed-system-with-akka-remote-actors/</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>
		</item>
		<item>
		<title>&#8220;Honey, I lost the buttons!&#8221;</title>
		<link>http://www.addthis.com/blog/2013/04/09/honey-i-lost-the-buttons/</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>
		</item>
		<item>
		<title>Follow Button Social Profiles</title>
		<link>http://www.addthis.com/blog/2013/02/27/follow-button-profiles/</link>
		<comments>http://www.addthis.com/blog/2013/02/27/follow-button-profiles/#comments</comments>
		<pubDate>Wed, 27 Feb 2013 17:52:35 +0000</pubDate>
		<dc:creator>Greg Franko</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features & Tips]]></category>
		<category><![CDATA[What's New]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5672</guid>
		<description><![CDATA[Today, we are happy to offer the new Find Profiles feature to help you with creating AddThis Follow buttons. The Find Profiles feature helps you find all of your Twitter and Facebook profiles (usernames and pages), and then allows you &#8230; <a href="http://www.addthis.com/blog/2013/02/27/follow-button-profiles/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Today, we are happy to offer the new <em>Find Profiles</em> feature to help you with creating <a href="http://addthis.com/get/follow">AddThis Follow buttons</a>.</p>
<div id="internal-source-marker_0.9718998116441071" align="center"><img src="https://lh4.googleusercontent.com/HlLvziw42IDS2zCTiSluEoPH7YufTu9VL8yv7b8z4srq-WPhHI2Me188KDQVjTH6yB0GmO7cLrTYRaz66oUY5iFtSoG5x2gv4F1a6ta4YHZOzWnXja7uDmpjOQ" alt="" width="402" height="109" border="0" class="pic" /></div>
<p>The <em>Find Profiles</em> feature helps you find all of your Twitter and Facebook profiles (usernames and pages), and then allows you to select which profile(s) to use for your follow buttons.<span id="more-5672"></span></p>
<p>This feature currently works with both Facebook and Twitter, and will be integrated with more social networks in future releases.</p>
<p><strong id="internal-source-marker_0.9718998116441071"><img src="https://lh4.googleusercontent.com/Eyt_6JjDpFVDsi3IZKWGFUQoAPnFJPRmeYy1fnWXFC55XBjJVeE3z0J-yKaXgtDka9NlQlpNVI6nP0dyBg38Gupf5hU4O_g0dvCNIsq8bh-VQGoZ0alxuxjUuw" alt="" width="547px;" height="260px;" /></strong></p>
<p>It is important to note that you <strong>do not</strong> need to <a href="https://www.addthis.com/login">create an AddThis account</a> to use the <em>Find Profiles</em> feature.  But, if you do already have an AddThis account (and have <a href="https://www.addthis.com/settings/user">linked</a> your Facebook and/or Twitter accounts), then <a href="https://www.addthis.com/login">sign into your AddThis account</a> for your follow buttons to automatically use your social profiles.</p>
<p>Create your <a href="http://addthis.com/get/follow">AddThis follow buttons</a> today!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2013/02/27/follow-button-profiles/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>An Introduction to AddThis Analytics Profiles</title>
		<link>http://www.addthis.com/blog/2012/12/11/an-introduction-to-addthis-analytics-profiles/</link>
		<comments>http://www.addthis.com/blog/2012/12/11/an-introduction-to-addthis-analytics-profiles/#comments</comments>
		<pubDate>Tue, 11 Dec 2012 14:49:16 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features & Tips]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5493</guid>
		<description><![CDATA[One of the most powerful features of AddThis analytics is our profiles. These allow you to separate analytics collected under your account however you want. In this post, I&#8217;ll explain how to create new profiles in your account, and then &#8230; <a href="http://www.addthis.com/blog/2012/12/11/an-introduction-to-addthis-analytics-profiles/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>One of the most powerful features of AddThis analytics is our profiles. These allow you to separate analytics collected under your account however you want. In this post, I&#8217;ll explain how to create new profiles in your account, and then give a couple examples of how you can use them.</p>
<h2>Creating a new profile</h2>
<p>Creating profiles is really easy. Just go to <a href="http://www.addthis.com/settings/publisher">http://www.addthis.com/settings/publisher</a> and click the &#8220;Add Profile&#8221; button.</p>
<p><img title="" src="http://i.imgur.com/uU358.png" alt="Profile Manager Screenshot" /></p>
<p>Then, enter the name for your new profile and click &#8220;Add&#8221;</p>
<p><img title="" src="http://i.imgur.com/J17uP.png" alt="Profile Creator Screen" /></p>
<p>This will create a profile with that name and create a random profile ID that&#8217;s associated with that profile. A couple things to note:</p>
<ul>
<li>Profiles can have the same names</li>
<li>Profile IDs can&#8217;t be changed</li>
</ul>
<p>Now that you&#8217;ve got a profile you can click on the name of the profile to edit its settings.</p>
<p><img title="" src="http://i.imgur.com/eX42Q.png" alt="Profile settings page" /></p>
<p>Here&#8217;s a quick explanation of these settings:</p>
<ul>
<li><em>Email Reports:</em> When checked AddThis will send you weekly analytics reports for this profile</li>
<li><em>Alerts:</em> This allows you to set email alerts for when shares, or clicks change for the entire profile, a specific domain that this profile tracks, or for a specific URL tracked by this profile, as well as adjust the frequency.</li>
<li><em>Sharing:</em> You can share the profile with anyone who has an email address and give them either full control over it or just allow them to view the analytics.</li>
<li><em>Blocked Websites:</em> If your profile ID is somehow used on a domain that you don&#8217;t want reports for you can manage that domain here.</li>
<li><em>Email Templates:</em> This section lets you create specific email templates that are used when someone shares using our email system. <a href="http://support.addthis.com/customer/portal/articles/381246-email-templates">More information on email templates is available here.</a></li>
<li><em>Content Feeds:</em> These allow you to create <a href="http://en.wikipedia.org/wiki/RSS">RSS</a> or <a href="http://en.wikipedia.org/wiki/JSON">JSON</a> feeds for shares, clicks, and trending content for this profile.</li>
<li><em>Applications:</em> This allows you to manage which iOS or Android apps can use this profile.</li>
<li><em>Labels</em>: These allow you to group profiles together and see a roll-up of the analytics collected with these profiles. More on these later.</li>
<li><em>Bit.ly Shortener Settings</em>: This allows you to set a specific Bit.ly login and API key on our servers. Then you&#8217;ll just have to configure your page to shorten using Bit.ly</li>
<li><em>Delete Profile:</em> Just what it says &#8211; you can delete the profile if you don&#8217;t need it anymore.</li>
</ul>
<h2>Some ways you can use profiles</h2>
<h3>As a consultant</h3>
<p>Profiles provide consultants with a way to both monitor the effectiveness of their clients&#8217; sites and give their clients a way to keep an eye on things.</p>
<p>First, create profiles for each of your clients. Then, share those profiles with the relevant stakeholders for each client. If you want, you can group these clients by using labels based on their industry, the type of client, or the level of support they&#8217;ve purchased. Then you can generate reports for each one of these labels.</p>
<h3>As an editor</h3>
<p>If you run a site with multiple contributors, profiles can give you a way to get detailed information about how well each contributor&#8217;s content is performing, as well as seeing an overall view of what links are generating the most social traffic.</p>
<p>Just create profiles for each one of your editors. Then adjust your content management system to put that editor&#8217;s profile ID on their stories. You could also share these profiles with the editors so they can make use of the analytics to increase social sharing.</p>
<h3>As an online store owner</h3>
<p>If you run an ecommerce site selling multiple types of product you can get more granular information about sharing by using profiles. Create profiles for each product or group of products and use your theming system to set the profile ID.</p>
<h2>One Caveat</h2>
<p>Unfortunately our application plugins don&#8217;t currently support assigning different profiles for different criteria. To set a different profile you&#8217;ll have to add this to the page:</p>
<pre class="prettyprint">&lt;script type="text/javascript"&gt;
var addthis_config = addthis_config||{};
addthis_config.pubid = 'THE PROFILE ID';
&lt;/script&gt;</pre>
<p>Just replace THE PROFILE ID with the relevant profile ID.</p>
<p>If you&#8217;ve used multiple profiles on your site, let us know how! If you have any other questions about profiles, don&#8217;t hesitate to <a href="mailto:support@addthis.com">reach out</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/12/11/an-introduction-to-addthis-analytics-profiles/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Even More Metrics!</title>
		<link>http://www.addthis.com/blog/2012/11/19/even-more-metrics/</link>
		<comments>http://www.addthis.com/blog/2012/11/19/even-more-metrics/#comments</comments>
		<pubDate>Mon, 19 Nov 2012 13:58:21 +0000</pubDate>
		<dc:creator>Chris Burroughs</dc:creator>
				<category><![CDATA[Engineering]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5422</guid>
		<description><![CDATA[We are big fans of Coda Hale&#8217;s Metrics library. Virtually all of our applications emit copious metrics that we use to monitor application state, optimize performance and resource allocation, and keep tabs on business metrics. In short: to know what &#8230; <a href="http://www.addthis.com/blog/2012/11/19/even-more-metrics/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>We are big fans of <a href="http://metrics.codahale.com/">Coda Hale&#8217;s Metrics library</a>. Virtually all of our applications emit copious metrics that we use to monitor application state, optimize performance and resource allocation, and keep tabs on business metrics. In short: to know what is going on. We like it so much for our Java applications that we made it easy for any language with a network stack to participate with <a href="http://www.addthis.com/blog/2012/01/05/advanced-metrics-tracking-for-webapps">MetricCatcher</a> and <a href="http://www.addthis.com/blog/2012/02/07/phetric-persistent-metrics-for-php-applications/">Phetric</a>.</p>
<p>All of these metrics are sent to <a href="http://ganglia.info">Ganglia</a> and <a href="http://graphite.wikidot.com/">Graphite</a> for dashboards, big screens filled with graphs, and fault detection. Ganglia has a solid architecutre of distributed metrics collection out of the box, and Graphite is known for its <a href="http://www.flickr.com/groups/webopsviz/">sweet graphs</a>. We have contributed to both the Metrics Ganglia reporter and one of the available Ganglia-Graphite <a href="https://github.com/ganglia/ganglia_contrib/tree/master/gang2graph">bridges</a>.</p>
<p>Unfortunately, we ended up with a messy slew of ways to configure <em>where</em> we were sending metrics&#8211;Java properties files, Spring XML, even the occasional hard coded in-app configuration. It also annoyed our engineers that the Ganglia configuration was repeated both in each app and in the local <code>gmond.conf</code>.</p>
<p>Shocking though it may be, it&#8217;s also possible to have too many metrics. We have on occasion, for example, had a distributed service keep a Timer for every other service it talked through. This was totally awesome for <em>in situ</em> performance debugging, but the combinatorial explosion of unique host-metric-service tuples was too expensive to keep around.</p>
<p><a href="https://github.com/addthis/metrics-reporter-config">Metrics-Reporter-Config</a> tries to solve both of these problems:</p>
<ul>
<li>Configuration of multiple reporters is in a single yaml file. This should fit particularly nicely into any <a href="http://dropwizard.codahale.com/">Dropwizard</a> services you might have written.</li>
<li>Ganglia <code>udp_send_channel</code>s can be extracted from a gmond.conf instead of repeating them for each app.</li>
<li>It&#8217;s easy to add white or black lists for which metrics go to which reporters. We usually use this to expose some of those timing metrics only via JMX.</li>
</ul>
<p>There are a bunch of options there, but usually we just use a simple config that looks like this:</p>
<pre><code>ganglia:
 - 
   period: 60
   timeunit: 'SECONDS'
   gmondConf: '/etc/ganglia/gmond.conf'
   predicate:
     color: "black"
     patterns:
     - ".*JMXONLY$"
</code></pre>
<p>Jars are already on their way to Maven Central. Check out the <a href="https://github.com/addthis/metrics-reporter-config/blob/master/README.mdown">README</a> and get started. We hope that others find this code as useful as we have. Feedback, comments, patches, bugs, and forks are all welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/11/19/even-more-metrics/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Debugging CSS &amp; JavaScript for AddThis</title>
		<link>http://www.addthis.com/blog/2012/10/22/debugging-css-javascript/</link>
		<comments>http://www.addthis.com/blog/2012/10/22/debugging-css-javascript/#comments</comments>
		<pubDate>Mon, 22 Oct 2012 14:44:06 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features & Tips]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5314</guid>
		<description><![CDATA[Most of the support issues I see involve AddThis styles or scripts that are conflicting with the AddThis code. Debugging these sorts of conflicts is pretty easy with the right tools, and these are usually built into every browser. In &#8230; <a href="http://www.addthis.com/blog/2012/10/22/debugging-css-javascript/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Most of the support issues I see involve AddThis styles or scripts that are conflicting with the AddThis code. Debugging these sorts of conflicts is pretty easy with the right tools, and these are usually built into every browser. In this post I&#8217;ll be using <a href="https://developer.apple.com/technologies/safari/developer-tools.html">Safari&#8217;s Web Developer Tools</a>, but <a href="https://developers.google.com/chrome-developer-tools/">Google Chrome&#8217;s Web Inspector</a> or <a href="http://getfirebug.com/">Firebug for Firefox</a> can do similar things.</p>
<h2>Debugging CSS Conflicts</h2>
<p>Since AddThis code is built from <a href="https://developer.mozilla.org/en-US/docs/DOM/element">DOM elements</a>, instead of Flash objects or similar non-standard elements, other scripts CSS rules can affect them. This is both a good thing, for instance when you want to <a href="http://support.addthis.com/customer/portal/articles/84700-how-do-i-center-the-toolbox-">center the toolbox</a>, but can be a problem if your stylesheets have overly-broad rules in them. For example, this rule:</p>
<pre><code>&lt;style&gt; a { color:white !important; } &lt;/style&gt; </code></pre>
<p>Will result in something like this:</p>
<p><img title="" src="http://i.imgur.com/vgnYj.png" alt="The counter text is white" /></p>
<p>It looks like the counter isn&#8217;t loaded, but it&#8217;s there, and you can see it if you select it:</p>
<p><img title="" src="http://i.imgur.com/mzdZ9.png" alt="Like magic!" /></p>
<p>To debug overly broad CSS rules, control &#8211; or right-click &#8211; on the element you wish to inspect, then select &#8220;Inspect Element&#8221;:</p>
<p><img title="" src="http://i.imgur.com/GGggR.png" alt="Inspect Element Selection" /></p>
<p>This will take you to a window where you can see all the CSS rules that apply to that element. Search through them to find the one that&#8217;s not from AddThis and then click the check box to the left to disable it. You&#8217;ll notice that it also gives you the filename and line number of the rule you&#8217;re disabling, so you can go straight to that rule in your CSS file and fix it.</p>
<h2>Debugging JavaScript Problems</h2>
<p>Debugging JavaScript can be a bit more difficult. The first thing to check if AddThis isn&#8217;t showing up at all is if the proper variables are set on the page. First, right click anywhere on the page and select &#8220;Show Page Source.&#8221; Then, type &#8216;addthis_config&#8217; into the small area at the bottom of the window, next to the blue greater-than sign and then push enter. If the code is set up properly on your page you should see something like this:</p>
<p><img title="" src="http://i.imgur.com/R2Xn5.png" alt="addthis_config Output" /></p>
<p>This will let you check whether your configuration values are correct or if they&#8217;re possibly getting overridden by re-declaring the addthis_config variable elsewhere on the page. Other good ones to check are addthis_share, which lets you check the sharing configuration, and just addthis, which will verify that our code is being loaded properly.</p>
<p>Another problem I see a lot is errors in other JavaScript on the page causing the buttons not to render. AddThis buttons are rendered, or put on the page, using JavaScript. If there is an error in other JavaScript on the page that halts the execution of scripts on the page then our buttons won&#8217;t show up:</p>
<p><img title="" src="http://i.imgur.com/MIxwY.png" alt="They're not there" /></p>
<p>This page has an onload attribute in the body that isn&#8217;t a valid function:</p>
<pre><code>&lt;body onload="AFunctionThatDoesntExist()"&gt; </code></pre>
<p>To find out where this error is, right-click on the page and select &#8220;Show Page Source&#8221; again. Then, select the error icon in the upper left corner of the Developer Tools window. (You may have to display the window&#8217;s left sidebar to see it.)</p>
<p><img title="" src="http://i.imgur.com/LLoOi.png" alt="Onload Error Window" /></p>
<p>Now that we know what the problem is, we can fix it. In this case, all we have to do is define a function named AFunctionThatDoesntExist, like this:</p>
<pre><code>&lt;script type="text/javascript"&gt; function AFunctionThatDoesntExist(){ var docBody = document.getElementsByTagName('body'); var mySubheading = document.createElement('h2'); var myText = document.createTextNode('That function does exist!'); mySubheading.appendChild(myText); docBody[0].appendChild(mySubheading); } &lt;/script&gt; </code></pre>
<p>Then the AddThis buttons will show up after the function runs:</p>
<p><img title="" src="http://i.imgur.com/vbk5P.png" alt="AddThis displaying after the function appends text to the document" /></p>
<h2>Debugging Bigger Problems</h2>
<p><strong>Note: This is for advanced users who don&#8217;t mind editing HTML or using a command line</strong></p>
<p>Sometimes you&#8217;re not sure what file has the CSS or JavaScript conflict in it. In these case you&#8217;ll have to disable the CSS and/or JavaScript on the page until you get the buttons to work, then figure out what conflicts are occurring.</p>
<p>Here&#8217;s how I&#8217;d do it on a Mac, but the steps are similar for a PC. First, get a web server. For Mac users this is built in. Just go into the Sharing preference pane in System Preferences and check &#8220;Web Sharing.&#8221;</p>
<p>Then, open up the Terminal app in your Applications folder, which will give you something like this:</p>
<p><img title="" src="http://i.imgur.com/4QxCK.png" alt="A Terminal Window" /></p>
<p>At the prompt, type this command (without the dollar sign.)</p>
<pre><code>$ curl http://www.example.com/ &gt; Sites/example.html </code></pre>
<p>(Replace http://www.example.com/ with the URL of the page you want to debug.) This will download the source of the page to your Sites folder in a file example.html. Open this file in a text editor and add the following just after the &lt;head&gt; tag:</p>
<pre><code>&lt;base href="http://www.example.com/"/&gt; </code></pre>
<p>(Again, replace http://www.example.com with the URL of the page you&#8217;re debugging.) Now open your browser and go to: http://localhost/~[user]/example.html where [user] is replaced with your username. Your page should show up with all the images and scripts.</p>
<p><img title="" src="http://i.imgur.com/pgKYn.png" alt="Example page from my local server" /></p>
<p>Once you&#8217;ve got that, edit the page in the same text editor to start removing JavaScript and CSS, refreshing the page after each edit to see if it fixed the issue. Once you find the AddThis buttons behaving like you should, replace all but the last item you removed to see if that&#8217;s the culprit.</p>
<p>Once you&#8217;ve found the culprit it&#8217;s up to you to decide whether to keep using it, upgrade to a newer version that might not have a bug (if it&#8217;s a third-party library), or <a href="mailto:support@addthis.com">contact us</a> to see if we have a workaround. Please note that we don&#8217;t support any external JavaScript beyond helping you find out that there&#8217;s a problem.</p>
<p>Looking for errors like this before you contact our support team might help you save time and frustration when AddThis is acting up.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/10/22/debugging-css-javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>October Hackathon 2012: Robotics for the Remote Worker and Plenty of Plants</title>
		<link>http://www.addthis.com/blog/2012/10/08/october-hackathon-2012-robotics-for-the-remote-worker-beer-bowl-and-plenty-of-plants/</link>
		<comments>http://www.addthis.com/blog/2012/10/08/october-hackathon-2012-robotics-for-the-remote-worker-beer-bowl-and-plenty-of-plants/#comments</comments>
		<pubDate>Mon, 08 Oct 2012 14:08:13 +0000</pubDate>
		<dc:creator>Kori Hill</dc:creator>
				<category><![CDATA[Company News]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[hackathon]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5220</guid>
		<description><![CDATA[Another successful AddThis Hackathon is in the books! We measure the success of a Hackathon in a few different ways: Lots of extra cross-team collaboration Many amazing and brilliant project presentations Developers passed out across the office For those not &#8230; <a href="http://www.addthis.com/blog/2012/10/08/october-hackathon-2012-robotics-for-the-remote-worker-beer-bowl-and-plenty-of-plants/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Another successful AddThis Hackathon is in the books! We measure the success of a Hackathon in a few different ways:</p>
<ul>
<li>Lots of extra cross-team collaboration</li>
<li>Many amazing and brilliant project presentations</li>
<li>Developers <a href="http://farm9.staticflickr.com/8182/8066733324_d4ff6557c0_b.jpg">passed out</a> <a href="http://farm9.staticflickr.com/8312/8066734667_2d6a951c89_b.jpg">across the office</a></li>
</ul>
<p>For those not familiar with <a href="http://www.addthis.com/blog/tag/hackathon/">hackathons</a>, they are our 24-hour sprints of innovation. A-Teamers group up, or work alone, on a new project outside of what they are currently working on in their day-to-day. The energy surrounding a hackathon is always fun and familial. They are a very important part of the AddThis <a href="http://www.addthis.com/careers">culture</a>.</p>
<p><strong>WINNER: Telepresence Roomba Robot</strong></p>
<p>The winning project of this installment of all-night coding was quite impressive. The team went out to solve a common challenge we face at AddThis. Since we have multiple offices across the country, sometimes communicating and collaborating requires extra effort. So, the team created a telepresence robot using a Roomba, a MacBook Air, foamcore and a rocket launcher. And the entire thing was controlled from a Google Hangout! See it in action:</p>
<p><iframe width="584" height="329" src="http://www.youtube.com/embed/-jTpfPVIxOQ?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Congratulations to the winning team! It was well deserved.</p>
<p><strong>Honorable Mention: AddThis Garden</strong></p>
<p>The unofficial &#8220;runners-up&#8221; also deserve Earth Day Award 2012. “AddThis Plant” went on a mission to “green” our new HQ office in Virginia. It is an extensive project of plant growing, caring and loving with the end goal to have a nice array of beautiful oxygen-producing decorations for our work space. Check them out:</p>
<p><img class="aligncenter" title="Team Green" src="http://farm9.staticflickr.com/8174/8066733242_67d80ac96d.jpg" alt="" width="500" height="282" /></p>
<p><img class="aligncenter" title="AddThis Plant" src="http://farm9.staticflickr.com/8453/8066950353_d5bac149cd.jpg" alt="" width="500" height="282" /></p>
<p>And those are just the official winners! There were many other brilliant and noteworthy projects that did not go unnoticed or under-appreciated. Some of which will be used to make everyday AddThis processes more efficient &#8212; a win all by itself!</p>
<p>Like this? Check out more posts about <a href="http://www.addthis.com/blog/category/engineering/#.UHLf3_nuUzM">AddThis Engineering</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/10/08/october-hackathon-2012-robotics-for-the-remote-worker-beer-bowl-and-plenty-of-plants/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Service Outage</title>
		<link>http://www.addthis.com/blog/2012/09/20/service-outage/</link>
		<comments>http://www.addthis.com/blog/2012/09/20/service-outage/#comments</comments>
		<pubDate>Thu, 20 Sep 2012 18:41:06 +0000</pubDate>
		<dc:creator>Charlie Reverte</dc:creator>
				<category><![CDATA[Engineering]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5123</guid>
		<description><![CDATA[We had a network outage for several hours yesterday afternoon (US time).  Our buttons continued to serve into web pages but sharing was down and our website, analytics, and web services were unavailable.  We truly apologize for the outage.  We &#8230; <a href="http://www.addthis.com/blog/2012/09/20/service-outage/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>We had a network outage for several hours yesterday afternoon (US time).  Our buttons continued to serve into web pages but sharing was down and our website, analytics, and web services were unavailable.  We truly apologize for the outage.  We want to be a critical part of your social infrastructure and we can’t keep your trust unless our service is always available.  We take this responsibility very seriously.  The root cause was an administrative error by one of our service providers and we’ve made changes to reduce the risk of further network outages.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/09/20/service-outage/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PennApps 2012 Wrapup</title>
		<link>http://www.addthis.com/blog/2012/09/18/pennapps-2012-wrapup/</link>
		<comments>http://www.addthis.com/blog/2012/09/18/pennapps-2012-wrapup/#comments</comments>
		<pubDate>Tue, 18 Sep 2012 22:00:01 +0000</pubDate>
		<dc:creator>Joe Sullivan</dc:creator>
				<category><![CDATA[Company News]]></category>
		<category><![CDATA[Engineering]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5064</guid>
		<description><![CDATA[6:33am Sunday: the sun rises on the final day of PennApps This past weekend Matt Keesan and I traveled down to Philadelphia for PennApps, America&#8217;s largest student-run hackathon. 48 hours, 91 teams, 320 hackers, $10K+ in prizes&#8211;any way you look &#8230; <a href="http://www.addthis.com/blog/2012/09/18/pennapps-2012-wrapup/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div style="margin-bottom: 40px;"><img style="width: 100%;" src="http://farm9.staticflickr.com/8458/8000928800_8796f132f8.jpg" alt="Sunrise at PennApps" /><br />
<small>6:33am Sunday: the sun rises on the final day of PennApps</small></div>
<p>This past weekend <a href="http://www.twitter.com/keesan" target="_blank">Matt Keesan</a> and <a href="http://www.twitter.com/itsjoesullivan" target="_blank">I</a> traveled down to Philadelphia for <a href="http://2012f.pennapps.com/" target="_blank">PennApps</a>, America&#8217;s largest student-run hackathon. 48 hours, 91 teams, 320 hackers, $10K+ in prizes&#8211;any way you look at it, the event was huge. So before getting into some of our favorite hacks of the weekend, congratulations to the whole PennApps team, including frontman <a href="https://twitter.com/pulakm" target="_blank">Pulak Mittal</a>, for keeping the wifi, food, and energy flowing all weekend. AddThis was a proud sponsor and we&#8217;re looking forward to next semester!</p>
<h2><a href="https://twitter.com/vivekpanyam" target="_blank">Vivek Panyam</a>, <a href="http://fb.forgrandma.net/" target="_blank">Facebook for Grandma</a></h2>
<div style="margin-bottom: 60px;"><img style="width: 100%;" src="http://farm9.staticflickr.com/8444/8000928994_b588069b93_o.jpg" alt="Vivek Panyam with his AddThis-infused Facebook for Grandma app" /><br />
<small style="line-height: 1.8em;">Advice for solo-hackers-to-be: Vivek worked in high-traffic areas of the hackathon and was accordingly flush with advice and attention from the 40 sponsors at the event. What’s more, he took the advice seriously.<br />
</small></div>
<p>Solo-hacker and UPenn <em>freshman</em> Vivek Panyam won the &#8220;most delicious UI&#8221; award for Facebook for Grandma, a pared-down Facebook app offering a compelling subset of features in an even more compelling package. Seriously, your grandmother just got 30 clicks closer to your photos; you&#8217;ve been warned.</p>
<h2><a href="http://twitter.com/dproi" target="_blank">Devon Peticulas</a> and <a href="http://www.processthings.com/" target="_blank">Dan Mundy</a>, <a href="http://www.bbcat.co" target="_blank">bbcat</a></h2>
<p>PennApps veterans Devon Peticulas and Dan Mundy won big style points for scoping out and executing on a deceptively simple tamagotchi-inspired pet. Get your own at <a href="http://www.bbcat.co" target="_blank">bbcat.co</a>, then share it with your significant other to either test his or prove your own commitment. What impressed me most about the duo is that at the 11th-hour, when most teams were tracing syntax errors, Devon and Dan were sitting pretty, chatting about node.js design patterns and that perfect shade of beige found on the <a href="http://en.wikipedia.org/wiki/Atari_8-bit_family" target="_blank">Atari 800</a>. What&#8217;s more, they are coordinating <a href="http://www.hackru.org" target="_blank">HackRU</a> at Rutgers next month. Maybe they&#8217;ll throw us dog-lovers a bone.</p>
<div style="margin-bottom: 60px;"><img style="width: 100%;" src="http://farm9.staticflickr.com/8438/8000927241_c46b837dd9_b.jpg" alt="Devon Peticulas of team bbCat models AddThis shades" /><br />
<small style="line-height: 1.3em;">Devon Peticulas wears AddThis sunglasses at night. And a Venmo t-shirt for three consecutive days.<br />
</small></div>
<h2><a href="http://rjvir.com/" target="_blank">Raj</a>, <a href="http://facebook.com/davefontenot" target="_blank">Dave</a>, and <a href="http://twitter.com/shivakilaru" target="_blank">Shiva</a>: BuddyHack, <a href="http://www.buddymeme.com" target="_blank">BuddyMeme</a></h2>
<p>Were there an award for the most roguish team at PennApps, the entire UMich contingent would have had to split it. Instead, we gave our own &#8220;Most Viral&#8221; award to BuddyHack, the only project that was developed, deployed, HackerNews&#8217;d, and banned before the demos even began! Luckily the team is prolific and their <a href="http://www.buddymeme.com" target="_blank">BuddyMeme</a> project is still up from the Michigan Facebook Hackathon held this March. By creating a dead-simple meme generator (<a href="https://github.com/BuddyMeme/Meme.js" target="_blank">open-sourced</a>, by the way) and leveraging the tight-knit nature of Facebook&#8217;s network, BuddyMeme allows memes to thrive within small social groups.</p>
<div style="margin-bottom: 60px;"><img style="width: 100%;" src="http://farm9.staticflickr.com/8175/8000927085_b219c2fbfd_c.jpg" alt="My humble self with the BuddyHack crew" /><br />
<small style="line-height: 1.3em;">I can has internship? Me and the BuddyHack team.</small></div>
<p>There were <a href="https://www.hackerleague.org/hackathons/pennapps-fall-2012/hacks" target="_blank">too many cool projects</a> for me to list. AddThis was super happy to share the weekend with so many talented developers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/09/18/pennapps-2012-wrapup/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PennApps 2012</title>
		<link>http://www.addthis.com/blog/2012/09/14/pennapps-2012/</link>
		<comments>http://www.addthis.com/blog/2012/09/14/pennapps-2012/#comments</comments>
		<pubDate>Fri, 14 Sep 2012 16:23:30 +0000</pubDate>
		<dc:creator>Matthew Keesan</dc:creator>
				<category><![CDATA[Company News]]></category>
		<category><![CDATA[Engineering]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=5031</guid>
		<description><![CDATA[Joe Sullivan and I are headed down to Philadelphia today for Penn Apps 2012, an awesome bi-annual 48-hour hackathon for university students, run by Penn students themselves. There&#8217;s thousands of dollars in prizes, not to mention mentors from sponsors like &#8230; <a href="http://www.addthis.com/blog/2012/09/14/pennapps-2012/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.addthis.com/blog/author/joe">Joe Sullivan</a> and I are headed down to Philadelphia today for <a href="http://2012f.pennapps.com/">Penn Apps 2012</a>, an awesome bi-annual 48-hour hackathon for university students, run by <a href="http://dp.seas.upenn.edu/">Penn students</a> themselves. There&#8217;s thousands of dollars in prizes, not to mention mentors from sponsors like us, Facebook, Google, Dropbox, Mongo, Mozilla, the New York Times, Quora, Zappos, and more. They&#8217;ll even reimburse your bus fare (which is extra rad since the price of a ticket from New York has risen substantially from the $5 I paid as an undergrad). </p>
<p>This session is already completely full, but <a href="http://pennapps12f.eventbrite.com/">there&#8217;s a waiting list</a> for student hackers, and the next PennApps is just six months away. (All developers in the area are invited to come by to help advise teams in their areas of expertise.)</p>
<p>If you&#8217;re a student looking for help, or live in Philly and just want to meet your friendly local AddThis developers, please <a href="mailto:matt@addthis.com">drop me a line</a> or send a tweet (<a href="http://twitter.com/itsjoesullivan">@itsjoesullivan</a> or <a href="http://twitter.com/keesan">@keesan</a>)! We&#8217;re excited to be sponsoring our first university hackathon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/09/14/pennapps-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing Our Newest Sharing Experience</title>
		<link>http://www.addthis.com/blog/2012/09/13/introducing-our-new-sharing-experience/</link>
		<comments>http://www.addthis.com/blog/2012/09/13/introducing-our-new-sharing-experience/#comments</comments>
		<pubDate>Thu, 13 Sep 2012 13:00:50 +0000</pubDate>
		<dc:creator>Matthew Keesan</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features & Tips]]></category>
		<category><![CDATA[What's New]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=4987</guid>
		<description><![CDATA[We&#8217;re happy to announce major updates to the AddThis sharing tool suite: the new design we&#8217;ve been testing in AddThis Labs graduates today, with a slew of new features. Go grab the new code! We&#8217;ve written before about the mind-boggling &#8230; <a href="http://www.addthis.com/blog/2012/09/13/introducing-our-new-sharing-experience/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<style type="text/css">
div.wp-caption {
background-color:#fff!important;
display:block;
border:1px solid #eee;
}</style>
<p>We&#8217;re happy to announce major updates to the AddThis sharing tool suite: the new design we&#8217;ve been testing in AddThis Labs graduates today, with a slew of new features. Go <a href="http://www.addthis.com/get/sharing">grab the new code</a>!</p>
<p>We&#8217;ve written before about the <a href="http://www.addthis.com/blog/2012/06/18/big-data-part-ii-addthis-today">mind-boggling</a> amount of data every day, and how we use it to provide insights both to our publishers and into <a href="http://www.addthis.com/blog/category/data-trends">trends across our network</a>. But we also use data to drive and refine our own processes and designs. Today, we&#8217;ve used what we&#8217;ve learned to make sharing even easier, and more personal. That means more engagement from your visitors, more sharing, and more traffic for your site.</p>
<div class="wp-caption alignright">
<img src="http://farm9.staticflickr.com/8436/7981356024_012a27b7da_m.jpg"><br />
<small>Simpler design.</small>
</div>
<p>First, we have a new look. We&#8217;ve streamlined and simplified the compact menu. We&#8217;ve made our email form a lot easier to use, like the email clients you&#8217;re already familiar with. Our expanded menu&#8217;s been optimized for faster sharing to the most popular services in your region, and easier searching for your personal favorites. (As always, we&#8217;ll highlight the services you use for even easier sharing next time.) We&#8217;ll take advantage of jQuery on pages that already include it for simple but lovely transitions. And while our new platform takes advantage of HTML5 and loads of modern browser features, we won&#8217;t leave you out in the cold if you&#8217;re stuck on IE6&#8211;though, seriously guys, <a href="http://www.ie6countdown.com/">it&#8217;s time</a>.</p>
<p>In Labs, the updated design increased sharing by <strong>11%</strong>. In production, it&#8217;s going to do even better&#8211;due to our second major update.</p>
<div class="wp-caption alignleft">
<img src="http://farm9.staticflickr.com/8042/7981355984_c059c6047e_m.jpg"><small class="alignleft">Instant sharing.</small>
</div>
<p>Sharing to Facebook or Twitter used to mean popping a new window. That&#8217;s fast, but we figured if we made it even faster, more people would be sharing your content. To that end, we&#8217;re introducing &#8220;instant&#8221; inline sharing to the most popular social networks. If your users link their social accounts with AddThis, they&#8217;ll be able to share directly to Facebook or Twitter without even leaving your page. The new inline interface means there&#8217;s no extra page load&#8211;that means more unimpeded sharing. Even better, once a user authenticates, they&#8217;ll remain logged in on every single site with AddThis, until they log out. Everybody wins.</p>
<p>Adding social sign in to our sharing tools doesn&#8217;t just mean it&#8217;s easier to share. It also means it&#8217;s a lot easier to personalize your AddThis experience&#8211;easily choose the services you want to see once, and you&#8217;ll see them across all the sites that use AddThis.</p>
<div class="wp-caption alignright"><img src="http://farm9.staticflickr.com/8313/7981353399_77a9cf2df8_n.jpg"><small>Pain-free pinning.</small></div>
<p>Our recent updates for <a href="http://www.addthis.com/blog/2012/06/26/new-pinterest-features">Pinterest</a> are fully integrated with the new design. We&#8217;ve created the simplest and easiest way to integrate with Pinterest: almost no work necessary! Put AddThis on any page you want to make pinnable, and we&#8217;ll show a simple, elegant lightbox to showcase all the images on your page for your users to pick from. You can always specify your own image, too, if you want! We&#8217;ve found this feature can boost sharing to Pinterest by 20% or more.</p>
<p>You can add all these capabilities to your site with <a href="http://www.addthis.com/get/sharing">one simple code snippet</a>. Take a look and try it out!</p>
<p>Our plugins for WordPress, Magento, and Shopify will be updated this week to support the new surfaces.</p>
<p>Questions? Comments? As always, we&#8217;d love your feedback.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/09/13/introducing-our-new-sharing-experience/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Introducing Social Sign In</title>
		<link>http://www.addthis.com/blog/2012/08/21/introducing-social-sign-in/</link>
		<comments>http://www.addthis.com/blog/2012/08/21/introducing-social-sign-in/#comments</comments>
		<pubDate>Tue, 21 Aug 2012 14:00:34 +0000</pubDate>
		<dc:creator>Matthew Keesan</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features & Tips]]></category>
		<category><![CDATA[What's New]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=4793</guid>
		<description><![CDATA[We&#8217;re stoked to announce the newest addition to AddThis Labs: Social Sign In. You&#8217;ve probably noticed that many websites now allow you to register or sign in using one of your existing social network accounts, like your Facebook username or &#8230; <a href="http://www.addthis.com/blog/2012/08/21/introducing-social-sign-in/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<style type="text/css">
div.wp-caption {
background-color:#fff!important;
display:block;
border:1px solid #eee;
}</style>
<p>We&#8217;re stoked to announce the newest addition to AddThis Labs:<br />
<a href="http://www.addthis.com/labs/social-sign-in">Social Sign In</a>.</p>
<p>You&#8217;ve probably noticed that many websites now allow you to register or sign in using one of your existing social network accounts, like your Facebook username or your Twitter ID. It&#8217;s not just a startup fad; in fact, there&#8217;s solid science behind it. Blue Research studied the holiday shopping habits of US consumers and noticed that <a href="http://www.retailcustomerexperience.com/article/179281/Survey-Majority-of-consumers-resist-registering-online-prefer-social-sign-in">the vast majority of us</a> are annoyed by having to create a new account to use a site, and would generally rather use one of our existing social network accounts.</p>
<p>If you&#8217;ve ever had to register on an obscure website just to buy one perfect gift, you probably know exactly how this feels! Even outside of retail applications, users are much more likely to register for and engage with your site if the process is bootstrapped with their existing online identity&#8211;some research has shown users authenticating socially spend up to 50% more time on site than the rest.</p>
<p>Seeing the value of social authentication is easy. Building it, though, hasn&#8217;t been. Most existing social authentication solutions have either required a lot of complicated server-side programming; mastering the ins and outs of OpenID, OAuth, and other specifications; or paying for a hosted solution and thus giving up control over your users&#8217; data, not to mention some of your budget!</p>
<p>Our approach is simpler. And it might be the right one for you.</p>
<div class="wp-caption alignright">
<img title="Social Sign In buttons" src="http://farm8.staticflickr.com/7257/7830591980_5857c1522c_m.jpg" alt="Example of Google, Twitter and Facebook sign in buttons" width="240" height="37" /><br />
<small>Use their standard buttons, or design your own.</small>
</div>
<p>Social Sign In by AddThis is a straightforward JavaScript library that makes it easy to strengthen your relationship to your users by adding Facebook, Twitter or Google authentication to your site.You provide the application keys for each service you&#8217;d like to integrate. We take care of rendering the buttons and managing the authentication flow. When a user successfully authenticates, we provide the data directly to you, via JavaScript. </p>
<div class="wp-caption alignleft">
<img src="http://farm9.staticflickr.com/8285/7831107850_abe1779d74_m.jpg" title="I probably should have signed up for Lifelock first." width="240" style="padding:5px"/><br />
<small style="text-align:left;float:left;">Some of the social data you&#8217;d get,</small><br/><small style="margin-top:-9px;padding-top:0;text-align:left;float:left;">if I logged into your site using Social Sign In.</small>
</div>
<p>From then on, it&#8217;s your show, whether you want to pre-fill a registration form, directly create a new account, or store the data for later analysis. Our goal is just to make it easy to bring your users&#8217; social data to your site, whether for registration, authentication, or personalization. You can try it out live on our <a href="http://www.addthis.com/labs/social-sign-in#demo">Labs page</a>.</p>
<p>Want to offer as many services as possible? No problem. Regardless of the network used, the data comes back in the same format &#8212; so you only have to write code once.</p>
<p>Like all our tools, you&#8217;ll get data in our analytics dashboard, too. We&#8217;re starting by keeping track of what networks your users are logging in with, but we&#8217;d love your thoughts on other information that might be relevant.</p>
<p>To make integration even easier, we&#8217;ve open sourced a fully functional demo in JavaScript, PHP and MySQL, with a simple user registration system based on Social Sign In. If you&#8217;ve always wanted a user system, feel free to start with ours! Or you can use our code as a basis for integrating Social Sign In into your existing registration and authentication system.</p>
<p>Questions? Comments? We&#8217;d love your feedback!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/08/21/introducing-social-sign-in/feed/</wfw:commentRss>
		<slash:comments>52</slash:comments>
		</item>
		<item>
		<title>Pride, Glory and Scotch: A Wrap-Up of Hackathon Summer 2012</title>
		<link>http://www.addthis.com/blog/2012/07/20/pride-glory-and-scotch-announcing-our-hackathon-winners/</link>
		<comments>http://www.addthis.com/blog/2012/07/20/pride-glory-and-scotch-announcing-our-hackathon-winners/#comments</comments>
		<pubDate>Fri, 20 Jul 2012 16:12:18 +0000</pubDate>
		<dc:creator>Kori Hill</dc:creator>
				<category><![CDATA[Company News]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[hackathon]]></category>
		<category><![CDATA[summer 2012]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=4531</guid>
		<description><![CDATA[Innovation, collaboration &#8230; sleep deprivation. Put all those together and you know that AddThis Hackathon Summer 2012 was a great success! Over a dozen amazing presentations were given this morning from individuals and teams, showing off some of the most &#8230; <a href="http://www.addthis.com/blog/2012/07/20/pride-glory-and-scotch-announcing-our-hackathon-winners/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Innovation, collaboration &#8230; sleep deprivation. Put all those together and you know that <a href="http://www.addthis.com/blog/2012/07/19/addthis-hackathon-summer-2012-is-underway/">AddThis Hackathon Summer 2012</a> was a great success!</p>
<p>Over a dozen amazing presentations were given this morning from individuals and teams, showing off some of the most impressive projects to date! Fun new products, feature overhauls and internal tools for improved efficiency &#8211; our talented crew covered all the bases.</p>
<p>While the grand prize &#8212; a fancy bottle of scotch, some gift certificates, and bragging rights until the next hackathon &#8212; could only go to one project, every participant is a winner in teamwork, creativity and dedication.</p>
<p>We&#8217;ll be sharing more information about the various projects as we roll some of them out in the coming months but to give you an idea, topics and tools ranged from new Pinterest solutions for publishers to usage of gestural and voice control technology. It was an impressive array of presentations and they made one thing very clear: the A-Team is proving that the future is now!</p>
<p>Here is a look back at the past 24 hours. Now excuse us while we go catch some Zzz&#8217;s!</p>
<div class="wp-caption aligncenter" style="width: 510px"><img src="http://farm8.staticflickr.com/7262/7610080576_640b1c946d.jpg" alt="" width="500" height="375" /><p class="wp-caption-text">The winners with their most important prize.</p></div>
<div class="wp-caption aligncenter" style="width: 510px"><img title="sleepy hackers" src="http://farm8.staticflickr.com/7138/7610080886_1432d2f06a.jpg" alt="" width="500" height="375" /><p class="wp-caption-text">Shhh! Sleepy hackers! ...</p></div>
<div class="wp-caption aligncenter" style="width: 510px"><img title="cats can hack too" src="http://farm9.staticflickr.com/8434/7610080792_a0c7017791.jpg" alt="" width="500" height="375" /><p class="wp-caption-text">Cats hacking?! Only at AddThis.</p></div>
<div class="wp-caption aligncenter" style="width: 385px"><img title="omeletes! " src="http://farm9.staticflickr.com/8294/7610080678_a1a507ab21.jpg" alt="" width="375" height="500" /><p class="wp-caption-text">Hungry, hungry hackers enjoying our early morning omelete bar!</p></div>
<p>If this looks like fun to you, check out our<a href="http://www.addthis.com/careers"> careers page</a>. We&#8217;re hiring hackers and other great minds to join the party!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/07/20/pride-glory-and-scotch-announcing-our-hackathon-winners/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AddThis Hackathon Summer 2012 is Underway!</title>
		<link>http://www.addthis.com/blog/2012/07/19/addthis-hackathon-summer-2012-is-underway/</link>
		<comments>http://www.addthis.com/blog/2012/07/19/addthis-hackathon-summer-2012-is-underway/#comments</comments>
		<pubDate>Thu, 19 Jul 2012 14:55:32 +0000</pubDate>
		<dc:creator>Kori Hill</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[hackathon]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=4511</guid>
		<description><![CDATA[Coders crack your fingers, on your keyboards, ready, set, GO! It&#8217;s Hackathon time &#8212; one of our favorite pastimes here at AddThis. What is a Hackathon exactly? Hackathons are our 24-hour full-team sprints of innovation.  Individuals can work alone or as &#8230; <a href="http://www.addthis.com/blog/2012/07/19/addthis-hackathon-summer-2012-is-underway/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Coders crack your fingers, on your keyboards, ready, set, GO! It&#8217;s Hackathon time &#8212; one of our favorite pastimes here at AddThis.</p>
<p>What is a Hackathon exactly? Hackathons are our 24-hour full-team sprints of innovation.  Individuals can work alone or as part of teams. The only real rules are:</p>
<ol>
<li>The projects have to have something loosely to do with AddThis.</li>
<li>They should be compelling.</li>
<li>And finally, <a href="http://photo.shockya.com/wp-content/uploads/2011/11/home-alone-ahh.png">they must be built and demoed within 24 hours</a>!</li>
</ol>
<p>Not only are Hackathons a great way to reinforce the importance of teamwork, but some <em>amazing</em> products and tools have been born out of the tradition.</p>
<p>Keep checking in on our <a href="http://twitter.com/addthis">Twitter</a> account, where we&#8217;ll be live tweeting photos and other fun  behind-the-scenes Hackathon action! Here are some early snapshots:</p>
<p><img class="aligncenter" title="Hackathon1" src="http://farm8.staticflickr.com/7131/7603705624_2492b5d7d7.jpg" alt="" width="500" height="375" /></p>
<p><img class="aligncenter" title="Hackathon2" src="http://farm8.staticflickr.com/7255/7603698218_3e493f41e9.jpg" alt="" width="375" height="500" /></p>
<p><img class="aligncenter" title="Hackathon3" src="http://farm9.staticflickr.com/8016/7603698396_36ecfbb1c9.jpg" alt="" width="375" height="500" /></p>
<p><img class="aligncenter" title="Hackathon4" src="http://farm8.staticflickr.com/7136/7603698314_451a06d7df.jpg" alt="" width="500" height="375" /></p>
<p>Look at all that collaboration! We love it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/07/19/addthis-hackathon-summer-2012-is-underway/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Big Data Part III: A Simple Decision &#8211; Performance, Predictability, Price</title>
		<link>http://www.addthis.com/blog/2012/06/19/big-data-part-iii-a-simple-decision-performance-predictability-price/</link>
		<comments>http://www.addthis.com/blog/2012/06/19/big-data-part-iii-a-simple-decision-performance-predictability-price/#comments</comments>
		<pubDate>Tue, 19 Jun 2012 13:09:27 +0000</pubDate>
		<dc:creator>Stewart Allen</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[data processing]]></category>
		<category><![CDATA[infrastructure]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=4120</guid>
		<description><![CDATA[This is the last in a three part series on the processing and infrastructure of AddThis. Make sure to check out part one and part two. In the end, our decisions rest on cost and control.  For our uses, CPU cycles in &#8230; <a href="http://www.addthis.com/blog/2012/06/19/big-data-part-iii-a-simple-decision-performance-predictability-price/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This is the last in a three part series on the processing and infrastructure of <a href="http://addthis.com">AddThis</a>. Make sure to check out <a href="http://www.addthis.com/blog/2012/06/15/big-data-part-i-sailing-past-the-clouds/">part one</a> and <a href="http://www.addthis.com/blog/2012/06/18/big-data-part-ii-addthis-today/">part two</a>.</p>
<p>In the end, our decisions rest on cost and control.  For our uses, CPU cycles in the cloud are about 3x more expensive than the fully loaded cost of dedicated cycles in our own data center.  Data stored in the cloud is at least 10x more expensive than in our own clusters.  Even if data storage were free, we would still be paying for CPU cycles to process the data and network costs to expose it.  But the killer is still latency and IO bottlenecks.  At our scale, there aren’t meaningful pricing options to overcome these in the cloud.</p>
<p>As both our business and cloud offerings have matured, we would still make the same choices around internal build-out vs shared cloud.  If there is one reason that drives this decision, it’s the fact that we have a business in which our needs can be modeled and anticipated.  And with the ability to predict comes the ability to optimize resources for both cost and performance.  With our own build-outs, we are able to regain control and apply it to the bottom line.  But to achieve this goodness requires a clear understanding of your needs, a skilled dev/ops team, a hacker mentality and focus.</p>
<ul>
<li>clouds remain king for spot capacity, typical web apps, development</li>
<li>they do not solve complex management problems or magically scale apps</li>
<li>operations at even modest scale still requires skilled, creative staff</li>
<li>once a baseline of capacity is known, dedicated hardware can’t be beat</li>
</ul>
<p>Depending on the profile of your business, cloud computing could be a game changer.  Our decision to bypass the traditional cloud was game changing for us;  we are noticeably stronger, faster and larger than our competitive set.  And with our developed abilities in large scale data and processing, we are in control of our destiny, ready for what comes next.</p>
<p>If you have any questions or want to hear more about our data processing capabilities, please feel free to <a href="mailto:support@addthis.com">reach out to us</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/06/19/big-data-part-iii-a-simple-decision-performance-predictability-price/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Big Data Part II: AddThis Today</title>
		<link>http://www.addthis.com/blog/2012/06/18/big-data-part-ii-addthis-today/</link>
		<comments>http://www.addthis.com/blog/2012/06/18/big-data-part-ii-addthis-today/#comments</comments>
		<pubDate>Mon, 18 Jun 2012 16:52:50 +0000</pubDate>
		<dc:creator>Stewart Allen</dc:creator>
				<category><![CDATA[Engineering]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=4116</guid>
		<description><![CDATA[This is the second in a three part series on the processing and infrastructure of AddThis. Make sure to check out part one and part three. Fast forward to today. Our data infrastructure supports AddThis code deployments on more than 14 million domains, ingesting billions &#8230; <a href="http://www.addthis.com/blog/2012/06/18/big-data-part-ii-addthis-today/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This is the second in a three part series on the processing and infrastructure of AddThis. Make sure to check out <a href="/blog/2012/06/15/big-data-part-i-sailing-past-the-clouds/">part one</a> and <a href="/blog/2012/06/19/big-data-part-iii-a-simple-decision-performance-predictability-price/">part three</a>.</p>
<p>Fast forward to today. Our data infrastructure supports AddThis code deployments on more than 14 million domains, ingesting billions of events and terabytes of logs daily.  Scores of machines has grown to around a thousand totalling tens of terabytes of RAM and petabytes of disk space.</p>
<p>The majority of our internal compute capacity is dedicated to our custom data processing platform.  This platform is highly dependent on large IO capacity and low latency more than CPU cycles.  Virtualization, generally speaking, can be manageable for many CPU and memory-bound tasks, but is almost always destructive to the performance of network and disk subsystems.  As a result, we employ no virtualization save for a few test machines.  And while we run relatively commodity network gear, our decisions around topology and infrastructure have been made deliberately and carefully to maximize performance.  In our experience, the compounding effects of latency and IO bottlenecks quickly become a non-linear problem.</p>
<ul>
<li>even with the best of intentions, virtualization kills performance</li>
<li>compress everything, keep it compressed even in RAM until it’s needed</li>
<li>all data must stream (compressed!), remote procedure calls are evil</li>
<li>data must be sharded for locality of processing, not physical locality (see previous)</li>
<li>model around simple tasks that can checkpoint and replicate</li>
<li>anything that provides transactional safety between checkpoints works against you</li>
<li>design for (constant) failure whether in a public or private cloud</li>
</ul>
<p>AddThis employs top-tier CDNs for most static web-asset serving, but we have still chosen to internalize our http-based APIs.  Even though cloud offerings excel at many web-service scenarios, they mainly rely on traditional LAMP stacks with limited back-end commitments beyond scripting and modest databases.  In these environments, virtualization is usually OK because most instances vastly under-utilize system resources. But when contention rears its head in the cloud, there is no recourse other than take the penalty or provision random new hardware.</p>
<p>Our “edge” and eventing API are http services that require maniacal tuning for performance and reliability.  With billions of requests a day spread across millions of domains, our code is trusted by site owners to respond quickly.  Latency *is* supreme.  Flowing from our edge and eventing APIs to the backend are terabytes of real-time data.  This live stream is forked into log storage and real-time systems.  Proximity to our compute clusters enables both faster and more economical processing of data by avoiding repeating data across high-cost, high-latency links to remote data centers.</p>
<ul>
<li>commodity network gear with the right topology and software can work wonders</li>
<li>optimization of networks, proxies and kernels remains a high art</li>
<li>chrome does unspeakable things (for another day)</li>
</ul>
<p>AddThis’ compute clusters are constantly processing and re-processing hundreds of terabytes of data, applying new algorithms, generating new metrics and finding deeper insights.  Our current model supports complete visibility into optimizing our stack.  With a top to bottom view on hardware and software, we can squeeze out more than 10 times the performance per dollar than we can get from cloud-based offerings.  Equally important, we can do this reliably and predictably.</p>
<p>Continue to <a href="/blog/2012/06/19/big-data-part-iii-a-simple-decision-performance-predictability-price/">Part III: A Simple Decision – Performance, Predictability, Price</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/06/18/big-data-part-ii-addthis-today/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Big Data Part I: Sailing Past The Clouds</title>
		<link>http://www.addthis.com/blog/2012/06/15/big-data-part-i-sailing-past-the-clouds/</link>
		<comments>http://www.addthis.com/blog/2012/06/15/big-data-part-i-sailing-past-the-clouds/#comments</comments>
		<pubDate>Fri, 15 Jun 2012 16:43:24 +0000</pubDate>
		<dc:creator>Stewart Allen</dc:creator>
				<category><![CDATA[Engineering]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=4106</guid>
		<description><![CDATA[This is the first in a three part series on the processing and infrastructure of AddThis. Be sure to check out part two and part three. Sailing Past the Clouds The emergence and maturation of multi-tenant, virtualized, commodity computing (“the cloud”) has enabled entirely &#8230; <a href="http://www.addthis.com/blog/2012/06/15/big-data-part-i-sailing-past-the-clouds/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This is the first in a three part series on the processing and infrastructure of AddThis. Be sure to check out <a href="/blog/2012/06/18/big-data-part-ii-addthis-today/">part two</a> and <a href="/blog/2012/06/19/big-data-part-iii-a-simple-decision-performance-predictability-price/">part three</a>.</p>
<p><strong>Sailing Past the Clouds</strong></p>
<p>The emergence and maturation of multi-tenant, virtualized, commodity computing (“the cloud”) has enabled entirely new business models by bringing large scale distributed computing at an affordable price point.  But by designing systems flexible enough to function well in most scenarios, but tackling no specific problem, cloud vendors have made architectural trade-offs that are particularly challenging to us.  Over the last five years, we’ve built a lower cost, more effective, more scalable solution that is closely tailored to the needs of a large scale data, low latency businesses like ours.  And in doing so we have gained control over performance, predictability and price.</p>
<p><strong>A Little History</strong></p>
<p>AddThis’ success in the Widget business, starting in 2006 / 2007, catapulted us directly into scale problems that early clouds of that time were not ready to handle.  At that time, our platform was providing real-time analytics for hundreds of thousands of widgets being viewed hundreds of millions of times a day.  It doesn’t seem like much compared to the billions of events we’re tracking today, but it was on par with the social giant of that time: MySpace.</p>
<p>Early decisions, which were formative to our thinking, were based on pragmatism.  We were small and the price to upgrade databases at the scale we needed was out of the question.  The performance of scripted / hosted commodity web stacks could not predictably meet our needs.  Before long, we were forced to replace our SQL databases with a much faster (and simpler) in-house developed noSQL store just to keep up with massive data growth (the term noSQL, like Hadoop itself, didn’t exist yet). We found we could get better scale with operational safety and huge cost savings by architecting around a few key learnings:</p>
<ul>
<li>Databases can be fast, but network connections and serialization are slow</li>
<li>Transactional safety is untenable overhead for real-time anything</li>
<li>In-process local data CRUD is at least 1000 times faster</li>
<li>Have hot spares/replicas, stagger checkpoints</li>
<li>Backup only logs, not databases</li>
<li>Design around replay from logs</li>
</ul>
<p>Continue to <a href="/blog/2012/06/18/big-data-part-ii-addthis-today/">Part II: AddThis Today</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/06/15/big-data-part-i-sailing-past-the-clouds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Source at AddThis</title>
		<link>http://www.addthis.com/blog/2012/06/15/open-source-at-addthis/</link>
		<comments>http://www.addthis.com/blog/2012/06/15/open-source-at-addthis/#comments</comments>
		<pubDate>Fri, 15 Jun 2012 13:30:17 +0000</pubDate>
		<dc:creator>Aaron Jorbin</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[ossbbq]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=4096</guid>
		<description><![CDATA[If you have followed this blog in the past, you know that AddThis has worked to lead the way with open standards like OExchange and Web Intents. What you might not know is the engineers at AddThis are also leading the way &#8230; <a href="http://www.addthis.com/blog/2012/06/15/open-source-at-addthis/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>If you have followed this blog in the past, you know that AddThis has worked to lead the way with open standards like <a class="c0" href="http://www.addthis.com/blog/2010/06/02/our-plans-with-oexchange/#.T9iD5uJYveE">OExchange</a> and <a class="c0" href="http://www.addthis.com/blog/2012/02/27/web-intents-design-push-recap/">Web Intents</a>. What you might not know is the engineers at AddThis are also leading the way with Open Source Software.</p>
<p>This month we sponsored the Second Annual Open Source Software BBQ in Washington, DC.  Four local open source meetups, <a class="c0" href="http://www.meetup.com/wordpressdc/">WordPress DC</a>, <a class="c0" href="http://www.meetup.com/DC-PHP/">DC PHP</a>, <a class="c0" href="http://www.meetup.com/DC-jQuery-Users-Group/">jQuery DC</a>, and <a class="c0" href="http://www.meetup.com/DC-Droids/">DC Droids</a> came together to celebrate open source software with some delicious pulled pork and an array of sides. In the past we have also sponsored individual open source meetups that focus on other open source projects including <a href="http://www.meetup.com/Cassandra-DC-Meetup/">Cassandra</a> and regularly host and sponsor the <a href="http://www.meetup.com/bigdatadc/">Big Data DC</a> meetup which often discusses Open Source Software.</p>
<div class="wp-caption alignnone" style="width: 510px"><img title="Members of the A-Team enjoing some BBQ" src="http://farm8.staticflickr.com/7236/7372046954_a3fc1ee5ab.jpg" alt="" width="500" height="333" /><p class="wp-caption-text">Members of the AddThis team eating BBQ and chatting about Open Source</p></div>
<p>In addition to supporting the local open source communities, the engineers at AddThis contribute to many open source projects, both the popular and the obscure.  <a class="c0" href="http://wordpress.org/">WordPress</a>, <a class="c0" href="http://www.gnu.org/software/emacs/">GNU Emacs</a>, <a class="c0" href="http://www.clisp.org/">CLISP</a>, and <a class="c0" href="http://incubator.apache.org/kafka/">Apache Kafka</a> are some of the best known projects that we have contributed to.</p>
<p>If that isn’t enough, the <a class="c0" href="https://github.com/clearspring/stream-lib">Stream-Lib</a>, <a class="c0" href="https://github.com/clearspring/MetricCatcher">MetricCatcher</a>, <a class="c0" href="https://github.com/clearspring/Phetric">Phetric</a>, and <a class="c0" href="https://github.com/clearspring/tracboard">TracBoard</a> projects all have grown from work we do at AddThis and have been made available to the larger development community.  Checkout our <a class="c0" href="https://github.com/clearspring">github</a> account to see some of the things we are working on now.</p>
<p><em>If working on open source software and open standards interests you, checkout out our <a class="c0" href="http://www.addthis.com/careers#.T9n_kOJYveF">job openings.</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/06/15/open-source-at-addthis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web Intents and You (and AddThis)</title>
		<link>http://www.addthis.com/blog/2012/05/16/web-intents-and-you-and-addthis/</link>
		<comments>http://www.addthis.com/blog/2012/05/16/web-intents-and-you-and-addthis/#comments</comments>
		<pubDate>Wed, 16 May 2012 15:56:50 +0000</pubDate>
		<dc:creator>Joe Sullivan</dc:creator>
				<category><![CDATA[Engineering]]></category>

		<guid isPermaLink="false">http://www.addthis.com/blog/?p=3976</guid>
		<description><![CDATA[Google Chrome 19 landed yesterday, bringing with it Web Intents, a new method for web sites/apps to communicate with one another. We wrote about Web Intents earlier this month, but now that it’s here we are making good on our &#8230; <a href="http://www.addthis.com/blog/2012/05/16/web-intents-and-you-and-addthis/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Google Chrome 19 <a href="http://blog.chromium.org/2012/05/connect-with-web-intents.html" target="_blank">landed</a> yesterday, bringing with it Web Intents, a new method for web sites/apps to communicate with one another. We wrote about Web Intents <a href="http://www.addthis.com/blog/2012/05/01/a-step-for-open-sharing-addthis-integrates-web-intents/" target="_blank">earlier this month</a>, but now that it’s here we are making good on our promise and rolling out <a href="http://www.addthis.com/technology/web-intents" title="Technology/Web-Intents" target="_blank">a suite of AddThis features</a> to help publishers and users take advantage of Web Intents right off the bat:</p>
<p><strong>Web Intents Support</strong></p>
<p>Want to add Web Intent support to your site? If you use AddThis, you already have. Just drop this line into your addthis_toolbox:</p>
<p><span style="font-family: Monaco, Courier, monospace; font-size: 12px;">&lt;a class=&#8221;addthis_button_intent_share_url&#8221;&gt;&lt;/a&gt;</span></p>
<p>Web Intents users will be able to share your page through their favorite intent handler just like any other service.</p>
<p><strong>Intents support for non-Chrome users</strong></p>
<p>Web Intents are great for Chrome users, but what about the other two-thirds of visitors? AddThis provides another one-liner to make web intents work no matter what. Set:</p>
<p><span style="font-family: Monaco, Courier, monospace; font-size: 12px;">addthis_config.webintents = true;</span></p>
<p>and AddThis will handle Intent events in the absence of native support. Implement Web Intents however you like—in the AddThis toolbox or not—and rest assured that your visitors will have access to their preferred service.</p>
<p><img src="https://lh3.googleusercontent.com/gOPigUhIbN84DJxSihWet-NO7bmSggmTAv-zlLytEuC-KxY-7fdvoiDWT2GxQYM8aebRtUGv8K3VKSIrTI72ryQ4arAnBwbB62UCfEI5WiWawMWJBlo" alt="" width="580px;" /><br />
<center>Chrome’s response to a share intent.</center></p>
<p><strong>The AddThis Intent Handler</strong></p>
<p>For those of you testing out your brand-spanking-new Chrome installs, remember that not all of your favorite services have an intent handler in the Chrome Web Store yet. Not to worry—<a href="https://chrome.google.com/webstore/detail/hipddggflcfmojcegmgdcolgoheelefp" target="_blank">AddThis does</a>! Install it as you would a normal Chrome extension and<a href="http://support.addthis.com/customer/portal/articles/540684-the-google-chrome-addthis-web-intent" target="_blank"> give it a spin</a> on a demo intent.</p>
<p><strong>Watch this Space</strong></p>
<p dir="ltr">As Web Intents grows, so will our support for it. Meanwhile, we&#8217;re developing tools to enable <a href="http://www.oexchange.org/" target="_blank">OExchange</a> providers to handle Web Intents and integrating intent handling into our browser extensions.</p>
<p>Web Intents is a new tool in your sharing arsenal, and AddThis is thrilled to support it! Your feedback on our Web Intents support is invaluable, both now and in the coming months as your implementation of intents evolves alongside Web Intents itself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.addthis.com/blog/2012/05/16/web-intents-and-you-and-addthis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
