<?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>Pursuit of Simplicity</title>
	<atom:link href="http://blogs.adobe.com/simplicity/feed" rel="self" type="application/rss+xml" />
	<link>http://blogs.adobe.com/simplicity</link>
	<description></description>
	<lastBuildDate>Fri, 11 Nov 2011 18:44:20 +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>Declarations, Logic, and Macros in Class Definitions</title>
		<link>http://blogs.adobe.com/simplicity/2011/11/declarations-logic-and-macros-in-class-definitions.html</link>
		<comments>http://blogs.adobe.com/simplicity/2011/11/declarations-logic-and-macros-in-class-definitions.html#comments</comments>
		<pubDate>Fri, 11 Nov 2011 18:44:20 +0000</pubDate>
		<dc:creator>Oliver Goldman</dc:creator>
				<category><![CDATA[programming languages]]></category>

		<guid isPermaLink="false">http://blogs.adobe.com/simplicity/?p=214</guid>
		<description><![CDATA[While nearly every current programming language has classes and objects, they have some radically different ideas about how one goes about defining classes. In strongly-typed languages like C++ and Java, classes are declared. This means compilers (and other tools) have &#8230; <a href="http://blogs.adobe.com/simplicity/2011/11/declarations-logic-and-macros-in-class-definitions.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>While nearly every current programming language has classes and objects, they have some radically different ideas about how one goes about defining classes.</p>
<p>In strongly-typed languages like C++ and Java, classes are <em>declared</em>. This means compilers (and other tools) have essentially complete information about the class during compilation, which in turn allows for certain classes of errors to be found and various optimizations to be applied. It can also be convenient for developers, in that it&#8217;s fairly straightforward to read declarative syntax and understand its meaning.</p>
<p>In script-oriented languages like JavaScript and Ruby, classes are defined by executing program logic at runtime. This is a powerful approach in that it may be much simpler to write a program to generate a given definition than to create the declarative version of it. On the other hand, it can defeat the application of analysis at compile time: some analysis can typically still be performed, but short of executing the class definition logic, it is impossible to fully analyze it.</p>
<p>Macros, such as those implemented by the C preprocessor, provide an interesting balance between the two approaches. The result of the macros is a class declaration, and it&#8217;s the declaration that&#8217;s available to the compiler. However, the macros can simplify class declarations by providing for generation of those declarations when the preprocessor executes. This is frequently used, for example, to generate declarations for class members that are used repeatedly across a set of (related) classes.</p>
<p>C++ provides another take in this space via its template facility. Unlike the generics capability in Java, C++ templates are themselves programs that are executed by the compiler at compilation time, and resulting typically in new class declarations. (This is referred to as &#8220;template metaprogramming.&#8221;) It&#8217;s an odd sort of programming language based primarily on recursively matching type patterns, but it&#8217;s still a programming language.</p>
<p>None of these techniques is necessarily better than another, but they certainly provide a different set of tradeoffs. With a more comprehensive view of the various approaches, one can hopefully be more effective in leveraging the strengths of whatever language is in use.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.adobe.com/simplicity/2011/11/declarations-logic-and-macros-in-class-definitions.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transitions</title>
		<link>http://blogs.adobe.com/simplicity/2011/11/transitions.html</link>
		<comments>http://blogs.adobe.com/simplicity/2011/11/transitions.html#comments</comments>
		<pubDate>Thu, 10 Nov 2011 19:39:45 +0000</pubDate>
		<dc:creator>Oliver Goldman</dc:creator>
				<category><![CDATA[AIR]]></category>

		<guid isPermaLink="false">http://blogs.adobe.com/simplicity/?p=211</guid>
		<description><![CDATA[As part of this week&#8217;s restructuring at Adobe, I&#8217;m moving to a new role on the Creative Cloud team. Thank you to everyone who has followed my ramblings here on various things AIR-related. While I don&#8217;t plan to continue to &#8230; <a href="http://blogs.adobe.com/simplicity/2011/11/transitions.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>As part of this week&#8217;s restructuring at Adobe, I&#8217;m moving to a new role on the Creative Cloud team. Thank you to everyone who has followed my ramblings here on various things AIR-related. While I don&#8217;t plan to continue to post further on AIR, I do plan to write about various things Creative Cloud-related as the project moves forward. I hope you&#8217;ll consider continuing to read.</p>
<p>regards,<br />
Oliver Goldman</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.adobe.com/simplicity/2011/11/transitions.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>AIR Native Extensions, ByteArray, and BitmapData</title>
		<link>http://blogs.adobe.com/simplicity/2011/10/air-native-extensions-bytearray-and-bitmapdata.html</link>
		<comments>http://blogs.adobe.com/simplicity/2011/10/air-native-extensions-bytearray-and-bitmapdata.html#comments</comments>
		<pubDate>Fri, 07 Oct 2011 21:35:58 +0000</pubDate>
		<dc:creator>Oliver Goldman</dc:creator>
				<category><![CDATA[AIR 3]]></category>
		<category><![CDATA[ANE]]></category>
		<category><![CDATA[API tips]]></category>

		<guid isPermaLink="false">http://blogs.adobe.com/simplicity/?p=205</guid>
		<description><![CDATA[[Note: Updated on October 11, 2011 to note that multiple ByteArrays or BitmapDatas can be acquired at the same time in the AIR 3 implementation. —Oliver] The new-to-AIR 3 native extensions capability includes not only a general-purpose API for manipulating ActionScript &#8230; <a href="http://blogs.adobe.com/simplicity/2011/10/air-native-extensions-bytearray-and-bitmapdata.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><em>[Note: Updated on October 11, 2011 to note that multiple ByteArrays or BitmapDatas </em>can<em> be acquired at the same time in the AIR 3 implementation. —Oliver]</em></p>
<p>The new-to-<a href="http://blogs.adobe.com/flashplatform/2011/09/announcing-flash-player-11-and-air-3.html">AIR 3</a> <a href="http://blogs.adobe.com/simplicity/2011/09/native-extensions-in-air-3.html">native extensions</a> capability includes not only a general-purpose API for manipulating ActionScript objects from native code, but also <em>fast-path</em> APIs that allow direct access to ByteArray and BitmapData objects.</p>
<p>Using these APIs, native code can get direct access to the memory that sits behind a <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/ByteArray.html">ByteArray</a> or <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html">BitmapData</a>—no copies, no translations. In order to achieve that, native applications have to declare when they want access via an <em>acquire</em> call, and when they&#8217;re done via a <em>release.</em> In between the two, we restrict access to the rest of the API in order to guarantee the pointer that&#8217;s returned remains valid.</p>
<p>Furthermore, it&#8217;s possible to acquire two or more byte arrays or bitmaps at the same time so long as there no intervening calls to the rest of the API. This can be used, for example, to take image as an input for a filter and write directly to a second as the output.</p>
<p>As always, if you have ideas for enhancements to this and other features, you can vote for them at ideas.adobe.com/air.</p>
<p>See the <a href="http://help.adobe.com/en_US/air/extensions/index.html">Native Extensions documentation</a> for more on <a href="http://help.adobe.com/en_US/air/extensions/WS460ee381960520ad-866f9c112aa6e1ad46-7ff5.html">working with ByteArray</a> and <a href="http://help.adobe.com/en_US/air/extensions/WS460ee381960520ad-866f9c112aa6e1ad46-7ff3.html">working with BitmapData</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.adobe.com/simplicity/2011/10/air-native-extensions-bytearray-and-bitmapdata.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>MAX 2011 Follow-up</title>
		<link>http://blogs.adobe.com/simplicity/2011/10/max-2011-follow-up.html</link>
		<comments>http://blogs.adobe.com/simplicity/2011/10/max-2011-follow-up.html#comments</comments>
		<pubDate>Fri, 07 Oct 2011 17:12:57 +0000</pubDate>
		<dc:creator>Oliver Goldman</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[AIR 3]]></category>
		<category><![CDATA[ANE]]></category>
		<category><![CDATA[MAX]]></category>

		<guid isPermaLink="false">http://blogs.adobe.com/simplicity/?p=201</guid>
		<description><![CDATA[Thanks to all of you who attended my MAX talks earlier this week! I had a great time presenting, and always enjoy the chance to meet people in person. Slides and video of my Adobe MAX 2011 presentations are now &#8230; <a href="http://blogs.adobe.com/simplicity/2011/10/max-2011-follow-up.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Thanks to all of you who attended my MAX talks earlier this week! I had a great time presenting, and always enjoy the chance to meet people in person.</p>
<p>Slides and video of my Adobe MAX 2011 presentations are now available online. The two talks are largely the same, with some mobile- versus desktop-specific details appearing in the last 15 minutes or so of each.</p>
<p><strong>How to Extend Your Mobile AIR Applications Using Native Extensions:</strong> <a href="http://tv.adobe.com/watch/max-2011-develop/how-to-extend-your-mobile-air-applications-using-native-extensions/">video on Adobe TV</a>, and <a href="https://acrobat.com/#d=8JQIGrK9xDA67X9sTmNFVQ">slides on Acrobat.com</a>.</p>
<p><strong>How to Extend Your Desktop AIR Applications Using Native Extensions:</strong> <a href="http://tv.adobe.com/watch/max-2011-develop/how-to-extend-your-desktop-air-applications-using-native-extensions/">video on Adobe TV</a>, and <a href="https://acrobat.com/#d=0zS9CylGghMPtmlwz*ZBfQ">slides on Acrobat.com</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.adobe.com/simplicity/2011/10/max-2011-follow-up.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New Installation and Deployment Options in AIR 3</title>
		<link>http://blogs.adobe.com/simplicity/2011/09/new-installation-and-deployment-options-in-air-3.html</link>
		<comments>http://blogs.adobe.com/simplicity/2011/09/new-installation-and-deployment-options-in-air-3.html#comments</comments>
		<pubDate>Fri, 23 Sep 2011 04:28:08 +0000</pubDate>
		<dc:creator>Oliver Goldman</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[AIR 3]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[install & update]]></category>

		<guid isPermaLink="false">http://blogs.adobe.com/simplicity/?p=199</guid>
		<description><![CDATA[It is with great pleasure (and a little bit of relief) that I report that AIR 3 will deliver new and much improved installation and deployment options for the desktop. These options enable installation without administrative rights, GPO-based deployment of &#8230; <a href="http://blogs.adobe.com/simplicity/2011/09/new-installation-and-deployment-options-in-air-3.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>It is with great pleasure (and a little bit of relief) that I report that AIR 3 will deliver new and much improved installation and deployment options for the desktop. These options enable <a href="http://blogs.adobe.com/simplicity/2009/04/does_installing_an_air_app_require_admin_rights.html">installation without administrative rights</a>, <a href="http://en.wikipedia.org/wiki/Group_Policy">GPO</a>-based deployment of AIR applications, <a href="http://en.wikipedia.org/wiki/XCOPY_deployment">XCOPY deployment</a>, run-in-place from flash drives, tight binding to specific versions of AIR, and more.</p>
<p>These advantages arise from two new key capabilities:</p>
<ol>
<li><em>Captive runtimes.</em> Already used on iOS, this capability allows a copy of the AIR runtime to be embedded with each AIR application. This capability is now supported across Mac OS, Windows, and Android, too.</li>
<li><em>Custom installers.</em> The application packaging tool, adt, can now be used to generate an application&#8217;s file set instead of a complete installer. The file set is a complete copy of the application, capable of being run in place. Or, you can package it up in your own custom installer, whether that&#8217;s an MSI for GPO, a PKG for Mac OS, or something else.</li>
</ol>
<div>For a more comprehensive overview, please see <a href="http://www.adobe.com/devnet/air/articles/air3-install-and-deployment-options.html">Installation and Deployment Options in AIR 3</a> on the <a href="http://www.adobe.com/devnet.html">Adobe Developer Connection</a>.</div>
]]></content:encoded>
			<wfw:commentRss>http://blogs.adobe.com/simplicity/2011/09/new-installation-and-deployment-options-in-air-3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AIR Native Extensions Samples Available</title>
		<link>http://blogs.adobe.com/simplicity/2011/09/air-native-extensions-samples-available.html</link>
		<comments>http://blogs.adobe.com/simplicity/2011/09/air-native-extensions-samples-available.html#comments</comments>
		<pubDate>Wed, 21 Sep 2011 17:58:19 +0000</pubDate>
		<dc:creator>Oliver Goldman</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[AIR 3]]></category>
		<category><![CDATA[ANE]]></category>
		<category><![CDATA[MAX]]></category>

		<guid isPermaLink="false">http://blogs.adobe.com/simplicity/?p=195</guid>
		<description><![CDATA[In conjunction with today&#8217;s announcement of AIR 3, we have now posted a Native Extensions for Adobe AIR page on the Adobe Developer Connection. It currently lists four extensions available for download from both Adobe and our developer community. We&#8217;ll &#8230; <a href="http://blogs.adobe.com/simplicity/2011/09/air-native-extensions-samples-available.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>In conjunction with today&#8217;s <a href="http://blogs.adobe.com/flashplatform/2011/09/announcing-flash-player-11-and-air-3.html">announcement of AIR 3</a>, we have now posted a <a href="http://www.adobe.com/devnet/air/native-extensions-for-air.html">Native Extensions for Adobe AIR page</a> on the <a href="http://www.adobe.com/devnet.html">Adobe Developer Connection</a>. It currently lists four extensions available for download from both Adobe and our developer community. We&#8217;ll post more here as they become available.</p>
<p>And, a reminder that there&#8217;s still time to register for <a href="http://max.adobe.com/">Adobe MAX 2011</a>. It&#8217;s a great place to find out about all of the new AIR 3 and Flash Player 11 features, including <a href="http://bit.ly/nVPKNw">native extensions</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.adobe.com/simplicity/2011/09/air-native-extensions-samples-available.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Native Extensions in AIR 3</title>
		<link>http://blogs.adobe.com/simplicity/2011/09/native-extensions-in-air-3.html</link>
		<comments>http://blogs.adobe.com/simplicity/2011/09/native-extensions-in-air-3.html#comments</comments>
		<pubDate>Wed, 07 Sep 2011 04:38:41 +0000</pubDate>
		<dc:creator>Oliver Goldman</dc:creator>
				<category><![CDATA[AIR]]></category>

		<guid isPermaLink="false">http://blogs.adobe.com/simplicity/?p=191</guid>
		<description><![CDATA[AIR 3 is nearly done; the release candidate is now available on labs.adobe.com. It includes a host of new features, one of my favorites being the new native extensions capability. That&#8217;s right: you can now extend AIR yourself, adding new capabilities &#8230; <a href="http://blogs.adobe.com/simplicity/2011/09/native-extensions-in-air-3.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>AIR 3 is nearly done; the <a href="http://labs.adobe.com/technologies/flashplatformruntimes/air3/">release candidate</a> is now available on labs.adobe.com. It includes a host of new features, one of my favorites being the new <em>native extensions</em> capability. That&#8217;s right: you can now extend AIR yourself, adding new capabilities and integrating them with ActionScript.</p>
<p>For an overview of the feature, please check out my latest article on the Adobe Developer Connection, <a href="http://www.adobe.com/devnet/air/articles/extending-air.html">Extending AIR</a>.</p>
<p>For even more information on the feature, attend <a href="http://max.adobe.com/">MAX</a> and join <a href="http://bit.ly/nVPKNw">my talks on the subject</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.adobe.com/simplicity/2011/09/native-extensions-in-air-3.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Disabling AIR Certificate Revocation Checks During Silent Install</title>
		<link>http://blogs.adobe.com/simplicity/2011/08/disabling-air-certificate-revocation-checks-during-silent-install.html</link>
		<comments>http://blogs.adobe.com/simplicity/2011/08/disabling-air-certificate-revocation-checks-during-silent-install.html#comments</comments>
		<pubDate>Thu, 25 Aug 2011 20:59:55 +0000</pubDate>
		<dc:creator>Oliver Goldman</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[code signing]]></category>
		<category><![CDATA[install & update]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blogs.adobe.com/simplicity/?p=188</guid>
		<description><![CDATA[Here&#8217;s a quick tip that doesn&#8217;t seem to be covered in the administrator&#8217;s guide for AIR, although it likely should be: You can control how revocation checks are performed during silent installs via the -revocationCheck flag. When digital signatures are &#8230; <a href="http://blogs.adobe.com/simplicity/2011/08/disabling-air-certificate-revocation-checks-during-silent-install.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Here&#8217;s a quick tip that doesn&#8217;t seem to be covered in the administrator&#8217;s guide for AIR, although it likely should be: You can control how revocation checks are performed during silent installs via the -revocationCheck flag.</p>
<p>When digital signatures are validated, one step in the process involves checking to see if the certificate used to sign has been revoked. This is how certification authorities defend against stolen certificates: they revoke stolen certificates by publishing them in a revocation list; software that validates signatures then checks those lists.</p>
<p>Revocation lists are published to web servers at URLs embedded in the certificates themselves. In order to check the lists, they need to be downloaded. This gives rise to a number of potential questions, like what to do when you are offline and can&#8217;t download the latest version. One needs to make a policy decision to answer such questions.</p>
<p>The -revocationCheck flag accepts four values, one for each supported policy:</p>
<ul>
<li><strong>never</strong> Don&#8217;t check the list, period. No network requests will be issued. (More on this below.)</li>
<li><strong>bestEffort</strong> Look for a revocation list, but if something goes wrong <em>other than the certificate being revoked</em>, proceed on the assumption that everything is ok.</li>
<li><strong>requiredIfInfoAvailable </strong>Assuming you can fetch the revocation list, then fail if any later errors occur. But if you can&#8217;t download the list at all, proceed as for bestEffort.</li>
<li><strong>alwaysRequired</strong> If the revocation list can&#8217;t be checked without error, don&#8217;t proceed.</li>
</ul>
<p>AIR defaults to &#8220;bestEffort&#8221;. That&#8217;s typically a reasonable choice, and it has the advantage of working both online and offline. But it does mean that for most installations, the AIR installer will at least attempt to issue a network request to download the list. (Lists are also cached, so you won&#8217;t always see the request, however.)</p>
<p>Now, there&#8217;s one particular case where &#8221;never&#8221; is a handy setting: Silent installation behind an HTTP proxy that requires authentication. In this situation, so long as AIR issues a network request, the OS will typically pop up a proxy authentication dialog, which of course halts the installation flow and requires manual intervention. To work around it, simply add &#8220;-revocationCheck never&#8221; to your command line arguments.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.adobe.com/simplicity/2011/08/disabling-air-certificate-revocation-checks-during-silent-install.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Unique ID Situation &amp; iOS</title>
		<link>http://blogs.adobe.com/simplicity/2011/08/the-unique-id-situation-ios.html</link>
		<comments>http://blogs.adobe.com/simplicity/2011/08/the-unique-id-situation-ios.html#comments</comments>
		<pubDate>Fri, 19 Aug 2011 23:06:14 +0000</pubDate>
		<dc:creator>Oliver Goldman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://blogs.adobe.com/simplicity/2011/08/the-unique-id-situation-ios.html</guid>
		<description><![CDATA[I&#8217;ve written earlier to explain that AIR doesn&#8217;t include a device identifier API because it doesn&#8217;t have a useable definition across platforms. (Also, it can be easily replaced for most use cases with a random identifier generated by the app.) &#8230; <a href="http://blogs.adobe.com/simplicity/2011/08/the-unique-id-situation-ios.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve written earlier to explain that AIR doesn&#8217;t include a device identifier API because it doesn&#8217;t have a useable definition across platforms. (Also, it can be easily replaced for most use cases with a random identifier generated by the app.)</p>
<p>Now comes news that this capability is becoming even less implementable: Apple is deprecating their own UDID API. TechCrunch has the story at http://techcrunch.com/2011/08/19/apple-ios-5-phasing-out-udid/.</p>
<p>Math.random() is your friend.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.adobe.com/simplicity/2011/08/the-unique-id-situation-ios.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Social Algorithm</title>
		<link>http://blogs.adobe.com/simplicity/2011/07/social-algorithm.html</link>
		<comments>http://blogs.adobe.com/simplicity/2011/07/social-algorithm.html#comments</comments>
		<pubDate>Mon, 25 Jul 2011 17:49:22 +0000</pubDate>
		<dc:creator>Oliver Goldman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.adobe.com/simplicity/?p=184</guid>
		<description><![CDATA[if( message.length &#60;= 140 &#38;&#38; message.isPublic ) { Twitter.tweet( message.text ); } else if( message.isPublic ) { if( !intersection( message.recipients, Contacts.facebookOnlyUsers ).isEmpty ) { FaceBook.setStatus( message.text ); } else { GooglePlus.share( message.text, GooglePlus.PUBLIC ); } } else { circles = &#8230; <a href="http://blogs.adobe.com/simplicity/2011/07/social-algorithm.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<pre>if( message.length &lt;= 140 &amp;&amp; message.isPublic ) {
    Twitter.tweet( message.text );
} else if( message.isPublic ) {
    if( !intersection( message.recipients, Contacts.facebookOnlyUsers ).isEmpty ) {
        FaceBook.setStatus( message.text );
    } else {
        GooglePlus.share( message.text, GooglePlus.PUBLIC );
    }
} else {
    circles = GooglePlusUtilities.computeRelevantCircles( message.recipients );
    GooglePlus.share( message.text, circles );
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blogs.adobe.com/simplicity/2011/07/social-algorithm.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
