<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Arc90 Lab</title>
	
	<link>http://lab.arc90.com</link>
	<description>Web Application Design &amp; Development</description>
	<lastBuildDate>Tue, 03 Apr 2012 12:57:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Arc90Lab" /><feedburner:info uri="arc90lab" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>git-sweep</title>
		<link>http://feedproxy.google.com/~r/Arc90Lab/~3/ipZZ1u3nzkw/</link>
		<comments>http://lab.arc90.com/2012/04/03/git-sweep/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 11:57:26 +0000</pubDate>
		<dc:creator>Rob Madole</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://lab.arc90.com/?p=210</guid>
		<description><![CDATA[git-sweep is a command-line tool that helps you clean up Git branches that have been merged into master. One of the best features of Git is cheap branches. There are existing branching models like GitHub Flow and Vincent Driessen&#8217;s git-flow that describe methods for using this feature. The problem Your&#8230; <a href="http://lab.arc90.com/2012/04/03/git-sweep/">More</a>]]></description>
			<content:encoded><![CDATA[<p><em>git-sweep</em> is a command-line tool that helps you clean up Git branches that have been merged into master.</p>
<p>One of the best features of Git is cheap branches. There are existing branching models like <a href="http://scottchacon.com/2011/08/31/github-flow.html">GitHub Flow</a> and Vincent Driessen&#8217;s <a href="http://nvie.com/posts/a-successful-git-branching-model/">git-flow</a> that describe methods for using this feature.</p>
<h2>The problem</h2>
<p>Your <tt>master</tt> branch is typically where all your code lands. All features branches are meant to be short-lived and merged into <tt>master</tt> once they are completed.</p>
<p>As time marches on, you can build up <strong>a long list of branches that are no longer needed</strong>. They&#8217;ve been merged into <tt>master</tt>, what do we do with them now?</p>
<h2>The answer</h2>
<p>Using <tt>git-sweep</tt> you can <strong>safely remove remote branches that have been merged into master</strong>.</p>
<p>To install it run:</p>
<pre>pip install git-sweep || easy_install git-sweep</pre>
<h2>Try it for yourself (safely)</h2>
<p>To see a list of branches that git-sweep detects are merged into your master branch:</p>
<p>You need to have your Git repository as your current working directory.</p>
<pre>$ cd myrepo</pre>
<p>The <tt>preview</tt> command doesn&#8217;t make any changes to your repo.</p>
<pre>$ git-sweep preview
Fetching from the remote
These branches have been merged into master:

  branch1
  branch2
  branch3
  branch4
  branch5

To delete them, run again with `git-sweep cleanup`</pre>
<p>If you are happy with the list, you can run the command that deletes these branches from the remote, <tt>cleanup</tt>:</p>
<pre>$ git-sweep cleanup
Fetching from the remote
These branches have been merged into master:

  branch1
  branch2
  branch3
  branch4
  branch5

Delete these branches? (y/n) y
  deleting branch1 (done)
  deleting branch2 (done)
  deleting branch3 (done)
  deleting branch4 (done)
  deleting branch5 (done)

All done!

Tell everyone to run `git fetch --prune` to sync with this remote.
(you don't have to, yours is synced)</pre>
<p><em>Note: this can take a little time, it&#8217;s talking over the tubes to the remote.</em></p>
<p>You can also give it a different name for your remote and master branches.</p>
<pre>$ git-sweep preview --master=develop --origin=github
...</pre>
<p>Tell it to skip the <tt>git fetch</tt> that it does by default.</p>
<pre>$ git-sweep preview --nofetch
These branches have been merged into master:

  branch1

To delete them, run again with `git-sweep cleanup --nofetch`</pre>
<p>Make it skip certain branches.</p>
<pre>$ git-sweep preview --skip=develop
Fetching from the remote
These branches have been merged into master:

  important-upgrade
  upgrade-libs
  derp-removal

To delete them, run again with `git-sweep cleanup --skip=develop`</pre>
<p>Once git-sweep finds the branches, you&#8217;ll be asked to confirm that you wish to delete them.</p>
<pre>Delete these branches? (y/n)</pre>
<p>You can use the <tt>--force</tt> option to bypass this and start deleting immediately.</p>
<pre>$ git-sweep cleanup --skip=develop --force
Fetching from the remote
These branches have been merged into master:

  important-upgrade
  upgrade-libs
  derp-removal

  deleting important-upgrade (done)
  deleting upgrade-libs (done)
  deleting derp-removal (done)

All done!

Tell everyone to run `git fetch --prune` to sync with this remote.
(you don't have to, yours is synced)</pre>
<h2>Development</h2>
<p><a href="https://github.com/arc90/git-sweep">git-sweep is available on GitHub.</a></p>
<p>It uses <a href="http://nvie.com/posts/a-successful-git-branching-model/">git-flow</a> for development and release cycles. If you want to hack on this with us, fork the project and put a pull request into the <tt>develop</tt> branch when you get done.</p>
<p>To run the tests, bootstrap Buildout and run this command:</p>
<pre>$ git clone http://github.com/arc90/git-sweep.git
$ cd git-sweep
$ python2.7 bootstrap.py
...
$ ./bin/buildout
...
$ ./bin/test</pre>
<p>We also use <a href="http://pypi.python.org/pypi/tox">Tox</a>. It will run the tests for Python 2.6 and 2.7.</p>
<pre>$ ./bin/tox</pre>
<h2>Requirements</h2>
<ul>
<li>Git &gt;= 1.7</li>
<li>Python &gt;= 2.6</li>
</ul>
<h2>License</h2>
<p>Friendly neighborhood MIT license.</p>
<img src="http://feeds.feedburner.com/~r/Arc90Lab/~4/ipZZ1u3nzkw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lab.arc90.com/2012/04/03/git-sweep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lab.arc90.com/2012/04/03/git-sweep/</feedburner:origLink></item>
		<item>
		<title>Donahue</title>
		<link>http://feedproxy.google.com/~r/Arc90Lab/~3/9-LT18t7wi4/</link>
		<comments>http://lab.arc90.com/2011/03/21/donahue/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 22:41:06 +0000</pubDate>
		<dc:creator>Tim Meaney</dc:creator>
				<category><![CDATA[Experiments]]></category>

		<guid isPermaLink="false">http://lab.arc90.com/?p=142</guid>
		<description><![CDATA[[UPDATE: Visit the Donahue site or see Donahue presentations.] Donahue is a web app co-designed and built by Arc90 and Behavior Design. The original idea for Donahue was born out of frustration with the state of (in)attention paid to presenters at conferences. As the project evolved, the tool shifted to&#8230; <a href="http://lab.arc90.com/2011/03/21/donahue/">More</a>]]></description>
			<content:encoded><![CDATA[<p>[<strong>UPDATE:</strong> Visit the Donahue <a href="http://www.donahueapp.com/">site</a> or see Donahue <a href="http://go.donahueapp.com/">presentations</a>.]</p>
<p>Donahue is a web app co-designed and built by Arc90 and <a href="http://behaviordesign.com/">Behavior Design</a>. The original idea for Donahue was born out of frustration with the state of (in)attention paid to presenters at conferences. As the project evolved, the tool shifted to one that attempts to break down the wall between the presenter and the audience. By creating a frictionless environment for the audience to react, respond, reject or share the presenter&#8217;s ideas, Donahue shifts the standard presentation from a broadcast / consumer approach into a that of a conversation. And this is precisely the reason that people attend conferences &#8211; to engage in conversations.</p>
<p>Donahue &#8211; a new and unique presentation tool powered by Twitter &#8211; was unveiled at SXSW 2011, in a talk co-presented by Arc90&#8242;s Tim Meaney and Behavior Design&#8217;s Chris Fahey. Tim and Chris delivered the talk, titled &#8220;<a href="http://schedule.sxsw.com/events/event_IAP6389">Toss the Projector: Redefining the Audience / Presenter Dynamic</a>&#8220;, via Donahue. The ideas explored in this talk were reinforced by Donahue, including:</p>
<ul>
<li>Conference talks, like all media, have been transformed from broadcast to conversation.</li>
<li>The technology of the conference presentation is broken.</li>
<li>The audience insists upon having a conversation in real-time about the presenter’s ideas, and the presenter should embrace this.</li>
<li>A presenter’s goal for a talk should be to start a meme.</li>
<li>Our collective concept of attention is changing.</li>
</ul>
<p>Donahue uses Twitter as its conversation medium. Each &#8220;slide&#8221; unveiled in Donahue is actually a tweet sent out in real-time by the presenter. The audience reaction (i.e. the &#8220;back channel&#8221;) is collected and displayed by Donahue in a unique presentation console that participants &#8211; whether present at the talk or anywhere in the world &#8211; can enjoy and use to directly engage. The result is a uniquely intimate and engaging experience that is markedly different from the typically passive experience of sitting through an exposition accompanied by a slide deck.</p>
<p>Another premise behind Donahue is that while presentations have a beginning and end point, the chatter lingers on long after. Donahue leaves behind a <a href="http://go.donahueapp.com/presentations/view/tosstheprojector/points/0">permanent record</a> of the speaker&#8217;s ideas, and the audience&#8217;s reaction to their points. This eliminates the abstraction of uploading the slides for later review by the audience, as the speaker&#8217;s ideas are immediately and always available online.</p>

<a href='http://lab.arc90.com/2011/03/21/donahue/toss-1/' title='Presenter&#039;s ideas'><img width="150" height="106" src="http://lab.arc90.com/files/2011/03/toss-1.png" class="attachment-thumbnail" alt="Presenter&#039;s ideas" title="Presenter&#039;s ideas" /></a>
<a href='http://lab.arc90.com/2011/03/21/donahue/toss-2/' title='Participant&#039;s tweet'><img width="150" height="107" src="http://lab.arc90.com/files/2011/03/toss-2.png" class="attachment-thumbnail" alt="Participant&#039;s tweet" title="Participant&#039;s tweet" /></a>
<a href='http://lab.arc90.com/2011/03/21/donahue/donahue-meme/' title='Start a meme!'><img width="150" height="93" src="http://lab.arc90.com/files/2011/03/Donahue-meme.png" class="attachment-thumbnail" alt="Start a meme!" title="Start a meme!" /></a>

<p>As a real-time platform for having a conversation around a conference presentation, Donahue had to be extremely scalable and performant. The possibility for a huge amount of curious participants was very real, as Donahue reaches out immediately into Twitter (what we internally called <em>The O&#8217;Reilly Effect</em>, where one retweet from <a href="http://twitter.com/#!/timoreilly">Tim O&#8217;Reilly</a> could bring in tens of thousand viewers to the presentation). Donahue achieved this level of performance with an architecture built upon real-time consumption of the Twitter API, dedicated node.js servers for the presenter and projector views of the content, a replicated farm of node servers for serving content to participants and directly connected clients using WebSockets instead of aggressive polling. The <a href="http://go.donahueapp.com/presentations/view/tosstheprojector/points/80">kick-ass development team</a> behind Donahue will be sharing the architecture and technical thinking behind Donahue in future blog posts.</p>
<p>Arc90 and Behavior are exploring options for moving this project forward, <a href="http://twitter.com/#!/donahueapp">follow @donahueapp on Twitter</a> to stay informed of any news.</p>
<img src="http://feeds.feedburner.com/~r/Arc90Lab/~4/9-LT18t7wi4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lab.arc90.com/2011/03/21/donahue/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://lab.arc90.com/2011/03/21/donahue/</feedburner:origLink></item>
		<item>
		<title>JSDOM</title>
		<link>http://feedproxy.google.com/~r/Arc90Lab/~3/LI28cP1f0oQ/</link>
		<comments>http://lab.arc90.com/2010/11/22/jsdom/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 15:45:06 +0000</pubDate>
		<dc:creator>Rich Ziade</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://lab.arc90.com/?p=112</guid>
		<description><![CDATA[Over the past few years, Javascript has matured from an &#34;amateur&#8217;s programming language&#34; into a full-fledged platform. Projects like Google Chrome and JQuery have helped elevate the language into a serious platform for delivering applications. On the server side, projects like Google&#8217;s V8 show off Javascript&#8217;s prowess and power beyond&#8230; <a href="http://lab.arc90.com/2010/11/22/jsdom/">More</a>]]></description>
			<content:encoded><![CDATA[<p>Over the past few years, Javascript has matured from an &quot;amateur&#8217;s programming language&quot; into a full-fledged platform. Projects like Google Chrome and JQuery have helped elevate the language into a serious platform for delivering applications.</p>
<p>On the server side, projects like Google&#8217;s <a href="http://code.google.com/p/v8/">V8</a> show off Javascript&#8217;s prowess and power beyond the browser. Building on top of V8, <a href="http://nodejs.org/">Node.js</a> leverages sever-side Javascript to allow for incredibly powerful, scalable software. Unfortunately, what isn’t included in the box with Node.js is the ability to leverage the powerful DOM capabilities built into nearly every browser that exists today. Enter our latest Arc90 Lab tool, JSDOM.</p>
<p>Jsdom is a <a href="http://commonjs.org">CommonJS</a> implementation of the <a href="http://www.w3.org/DOM/">W3C Document Object Model (DOM)</a> designed to work with Node.js. It is intended to be platform independent and as minimal/light as possible while adhering to the <a href="http://www.w3.org/DOM/DOMTR">W3C DOM specifications</a>. </p>
<hr />
<ul>
<li><a href="#why">Why build this?</a> </li>
<li><a href="#how">How does it work?</a> </li>
<li><a href="#installation">Installation</a> </li>
<li><a href="#license">License</a> </li>
<li><a href="#acknowledgement">Acknowledgement</a> </li>
<li><a href="#blog">Discuss</a> </li>
</ul>
<h4 id="what">Why build this?</h4>
<p>One of the first things that a front-end developer coming to a server-side Javascript platform notices is the lack of a window and/or document object.&#160; Without a browser environment it is impossible to run the frameworks and libraries that we have all come to know and love.&#160; JSDOM provides such a browser environment making it easy load external scripts and execute them in the context of a browser Window on the server. </p>
<p>By allowing both the server and the browser to interpret and manipulate the DOM, a host of new possibilities arise. For example, graceful degradation from rich AJAX-style experiences to simpler page-driven experiences is now much easier with JSDOM. In addition, powerful server-side DOM manipulation (e.g. to extract or replace certain elements depending on certain conditions) is now possible. </p>
<h4 id="how">How does it work?</h4>
<p>Getting started with JSDOM is quite simple. You will need <a href="http://nodejs.org">node.js</a> and the <a href="https://github.com/tmpvar/jsdom">JSDOM library</a>, and of course, a basic understanding of Javascript.</p>
<p>The following example shows how to create a DOM Window, load the jQuery framework, and run some code &#8211; right on the server:</p>
<pre class="javascript" name="code">
    var html = '
    &lt;html&gt;\
      &lt;head&gt;\
      &lt;/head&gt;\
        &lt;body&gt;\
        &lt;h1>Hello World&lt;/h1&gt;\
        &lt;p>This is a &lt;em&gt;stupid simple&lt;/em&gt; example&lt;/p&gt;\
        &lt;/body&gt;\
    &lt;/html&gt;\
    ';

    // create a new window, with the above markup
    var window = require('jsdom').jsdom(html).createWindow(),

        // create a new script tag to load up jQuery
        script = window.document.createElement('script');

    script.src = 'http://code.jquery.com/jquery-1.4.2.js';

    // when jQuery finishes loading
    script.onload = function() {

      // Since this is not a browser we need to specify the window that jQuery has
      // been added to

      // Output: 'H1 Contents: Hello World'
      console.log(&quot;H1 Contents:&quot;, window.jQuery('h1').text());

      // do a simple replace on the `em` text above
      window.jQuery('p em').text('silly');

      // Output: 'P Contents: This is a silly example'
      console.log(&quot;P Contents:&quot;, window.jQuery('p').text());
    };

    // Append the element to the head element of the document
    window.document.head.appendChild(script);</pre>
<h4 id="installation">Installation</h4>
<p>JSDOM&#8217;s source code is hosted on <a href="http://github.com/tmpvar/jsdom">github</a> along with examples, use cases, and other useful information. You may also use <a href="http://npmjs.org">NPM</a> to install JSDOM by typing the following in your terminal `npm install jsdom`</p>
<h4 id="license">License</h4>
<p>This library is licensed under the <a href="http://www.opensource.org/licenses/mit-license.php">MIT Open Source</a> license.</p>
<h4 id="acknowledgement">Acknowledgement</h4>
<p>This ambitious project is the brainchild of Arc90 lead engineer <a href="http://arc90.com/people/elijah-insua/">Elijah Insua</a>.</p>
<h4 id="blog">Discuss</h4>
<p>If you have questions about JSDOM or would just like to share your thoughts, you can do so at the <a href="http://blog.arc90.com/2010/11/17/our-next-lab-experiment-jsdom/">Arc90 blog</a>.</p>
<img src="http://feeds.feedburner.com/~r/Arc90Lab/~4/LI28cP1f0oQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lab.arc90.com/2010/11/22/jsdom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lab.arc90.com/2010/11/22/jsdom/</feedburner:origLink></item>
		<item>
		<title>ActionScript 3 XPath Library</title>
		<link>http://feedproxy.google.com/~r/Arc90Lab/~3/SabNHoD2PAY/</link>
		<comments>http://lab.arc90.com/2010/04/28/actionscript-3-xpath-library/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 20:56:43 +0000</pubDate>
		<dc:creator>Andy Lewisohn</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xpath]]></category>

		<guid isPermaLink="false">http://lab.arc90.com/?p=74</guid>
		<description><![CDATA[One of the issues I&#8217;ve come across when dealing with XML in ActionScript 3 has been the inability to dynamically execute E4X queries. The need to do so arose several times, and one solution was to use RiaOne&#8217;s D.eval API. This solution is pretty robust; it&#8217;s a runtime parser/compiler for&#8230; <a href="http://lab.arc90.com/2010/04/28/actionscript-3-xpath-library/">More</a>]]></description>
			<content:encoded><![CDATA[<p>One of the issues I&#8217;ve come across when dealing with XML in ActionScript 3 has been the inability to dynamically execute E4X queries. The need to do so arose several times, and one solution was to use RiaOne&#8217;s <a href="http://www.riaone.com/products/deval/">D.eval API</a>. This solution is pretty robust; it&#8217;s a runtime parser/compiler for ActionScript code and it works pretty well. I have a couple of issues with it though. The first is that it&#8217;s like using an atomic bomb to kill a fly. When all you want to do is navigate through an XML document at runtime, a tool that can parse the entire ECMAScript specification seems like overkill. My second issue is that it&#8217;s a black box with hard to understand, diagnose, and catch runtime errors. At first, I thought that an implementation of just the E4X portions of the spec would provide a solution, but that soon led me into a labyrinthine maze of what to cut and what to keep. I wanted something a lot simpler and that&#8217;s where XPath 1.0 enters the picture.</p>
<p>The XPath specification is pretty simple, allowing for the searching (and limiting of those searches) within an XML document that is provided as context. I&#8217;m not going to go into how to write XPath, but I&#8217;ll point you to the <a href="http://www.w3.org/TR/xpath/">spec for 1.0</a>. I&#8217;m a firm believer in not reinventing the wheel, so the first thing I did was look for an XPath library written in ActionScript&#8217;s close cousin, JavaScript. It didn&#8217;t take much searching to find <a href="http://www.formfaces.com/">Form Faces</a>. The project appears to be defunct, but it provided the basis for my implementation. I have optimized the library where possible, but it is still not as fast as the native E4X implementation. <strong>The full feature set of the XPath 1.0 specification has been implemented.</strong> </p>
<p><em>One note on how to improve performance: position predicates in the form of <code>/document/element[1]</code> are much faster than boolean predicates in the form of <code>/document/element[@name = 'temp']</code></em>.</p>
<h4 id="use">How to use it</h4>
<p>The entry point for the library is the <code>com.watchthosecorners.xpath.XPath</code> class. It has two static methods and two instance methods that allow either the evaluation of an XPath query or the selection of a single node. Imagine we have the following XML document for use in our XPath queries (bear in mind that XPath uses 1 as its start index, not 0):</p>
<pre name="code" class="xml">&lt;document&gt;
   &lt;element&gt;Some Value&lt;/element&gt;
   &lt;element&gt;Some Other Value&lt;/element&gt;
&lt;/document&gt;</pre>
<p>The following snippet would retrieve the text value of an element. The evaluate method can return a string, a boolean, a number, or a node-set (an array of values):</p>
<pre name="code" class="as3">var string1:* = XPath.evaluate("/document/element[1]/text()", document);
var string2:* = new XPath("/document/element[2]/text()").evaluate(document);
trace(string1) // Output: Some Value
trace(string2) // Output: Some Other Value

var nodeSet:NodeSet = XPath.evaluate("/document/element", document);
trace(nodeSet) // Output: &lt;element&gt;Some Value&lt;/element&gt;,&lt;element&gt;Some Other Value&lt;/element&gt;

var boolean:Boolean = XPath.evaluate("1 = 1");
trace(boolean) // Output: true
boolean = XPath.evaluate("/document/element[1]/text() = 'Some Other Value'", document);
trace(boolean) // Output: false

var number:Number = XPath.evaluate("count(/document/element)", document);
trace(number) // Output: 2
</pre>
<p>The snippet below would select a single XML element (the value is returned as the native XML type):</p>
<pre name="code" class="as3">var result1:* = XPath.selectSingleNode("/document/element[1]", document);
var result2:* = new XPath("/document/element[2]").selectSingleNode(document);

trace(result1) // Output: &lt;element&gt;Some Value&lt;/element&gt;
trace(result2) // Output: &lt;element&gt;Some Other Value&lt;/element&gt;</pre>
<p>While the use cases above are simplistic, the XPath library allows for powerful searching of an XML document at runtime. One possible used could be to extend the <code>DataGrid</code> and <code>DataGridColumn</code> classes to support XPath as a value for the <code>dataField</code> property, thereby allowing more complex lookups of values.</p>
<h4 id="get_it">Get it</h4>
<p>The AS3 XPath Library is hosted on <a href="http://code.google.com/p/as3xpathlib/">googlecode</a>. It is built with Maven and consists of two modules.</p>
<ol>
<li>as3xpath-core: This is the core functionality and is all that&#8217;s required in a project. (<a href="http://watchthosecorners.com/as3xpath/as3xpath-core/asdoc/index.html">API Docs</a>)</li>
<li>as3xpath-ext-functions: This library contains a small set of functions that can be used in XPath queries, it is not required. (<a href="http://watchthosecorners.com/as3xpath/as3xpath-ext-functions/asdoc/index.html">API Docs</a>)</li>
</ol>
</p>
<p>For those who use Maven to manage dependencies, there is a maven repository <a href="https://as3xpathlib.googlecode.com/svn/releases">here</a> and the source for all releases and current development can be viewed <a href="http://code.google.com/p/as3xpathlib/source/browse">here</a>.</p>
<h4 id="issues">Issues</h4>
<p>Please report any bugs in the <a href="http://code.google.com/p/as3xpathlib/issues/list">issues</a> section of the googlecode project.</p>
<h4 id="license">License</h4>
<p>AS3 XPath Library is released under the Apache 2.0 license.</p>
<h4 id="discuss">Discuss</h4>
<p>Please offer feedback in the comments, or email me, Andy Lewisohn, at <a href="mailto:andrewl@arc90.com">andrewl@arc90.com</a>.</p>
<img src="http://feeds.feedburner.com/~r/Arc90Lab/~4/SabNHoD2PAY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lab.arc90.com/2010/04/28/actionscript-3-xpath-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lab.arc90.com/2010/04/28/actionscript-3-xpath-library/</feedburner:origLink></item>
		<item>
		<title>HashMask</title>
		<link>http://feedproxy.google.com/~r/Arc90Lab/~3/mVvJNBRI7VE/</link>
		<comments>http://lab.arc90.com/2009/07/09/hashmask-another-more-secure-experiment-in-password-masking/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 19:06:02 +0000</pubDate>
		<dc:creator>Arc90</dc:creator>
				<category><![CDATA[Experiments]]></category>

		<guid isPermaLink="false">http://lab.daniell.acr90-dev-02/2009/07/09/hashmask-another-more-secure-experiment-in-password-masking/</guid>
		<description><![CDATA[<p>HashMask attempts to provide an easier-to-view visual "fingerprint" for users to recognize the password they've entered. Within the password text box, a sparkline is drawn to aid the user in recognizing what they've entered.</p>]]></description>
			<content:encoded><![CDATA[<p>HashMask is an attempt to find a more secure middle ground between clear and masked passwords. It does this by visualizing a hashed representation of the password as a sparkline with color &#8211; the intent being that the user would become familiar with this image and be able to easily confirm that they typed the right (or wrong) password.</p>
<hr />
<h4 id="demo">Demo</h4>
<p><iframe src="http://lab.arc90.com/experiments/hashmask/demo.html" width="600" height="300" style="margin-left: 10px; border: 1px solid #CCC"></iframe></p>
<h4 id="why">Why?</h4>
<p>My original experiment, <a href="http://lab.arc90.com/2009/07/halfmask.php">HalfMask</a>, produced lots of good discussion, which is exactly what I had hoped for. As security expert Bruce Schneier said recently, <a href="http://www.schneier.com/blog/archives/2009/07/the_pros_and_co.html">password masking is not a panacea</a>. Finding a solution that provides both security and usability is the goal.</p>
<p>As with HalfMask, HashMask is purely an experiment. I&#8217;m not suggesting that this is the best middle ground between clear and masked passwords. I am just hoping to get the community thinking about different approaches.</p>
<h4 id="how">How does it work?</h4>
<p>HashMask is a <a href="http://www.jquery.com">jQuery</a> plugin that will produce a unique and non reversible visualization of a users password.  The hope being that they would be able to confirm that they entered their password correctly, but no one else would. It also degrades gracefully so that users without javascript or a poor browser (IE6) will just see a password field.</p>
<p>Technically speaking, it uses a subset of the sha1 hash of the password as the seed for the sparkline&#8217;s shape and color. It should be relatively safe from reverse engineering as a result. There is the potential to estimate a possible range of characters of the first section of the hash, but overall this should be a extremely low risk.</p>
<h4 id="use">Can I use it?</h4>
<p>HashMask is still alpha-level software, but it should be relatively safe to use on an experimental basis if you are interested. It should work on Firefox 3, Safari 4 and IE6+. It&#8217;s available here, as well as on <a href="http://code.google.com/p/hashmask">google code</a>.</p>
<h4 id="download">Download</h4>
<p><p>Click on the icon to go to the download directory at google code:</p>
<p><a href="http://code.google.com/p/hashmask/downloads/list"><img alt="Download" src="http://arc90.com/_img/download.gif" /></a></p>
<p>Additionally, you may <a href="http://code.google.com/p/hashmask/source/browse/trunk/jquery.hashmask.js">view the source directly in google code</a>.</p>
</p>
<h4 id="license">License</h4>
<p>HashMask is released under the BSD license.</p>
<h4 id="improvement">Room for Improvement</h4>
<p>I personally like this approach much better than HalfMask. It&#8217;s more secure at the loss of slight usability. That said, there is room for improvement, specifically with regard to more memorable and elegant visualizations. A colored sparkline works, but it&#8217;s not ideal. If you have suggestions, please let me know or feel free to fork and implement!</p>
<h4 id="discuss">Discuss</h4>
<p>Any feedback on the concept is welcome &#8211; feel free to post it on the <a href="http://blog.arc90.com/2009/07/newer_in_the_lab_hashmask_-_an.php">Arc90 Blog</a>, or <a href="http://twitter.com/chrisdary">Follow me on Twitter</a>.</p>
<img src="http://feeds.feedburner.com/~r/Arc90Lab/~4/mVvJNBRI7VE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lab.arc90.com/2009/07/09/hashmask-another-more-secure-experiment-in-password-masking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lab.arc90.com/2009/07/09/hashmask-another-more-secure-experiment-in-password-masking/</feedburner:origLink></item>
		<item>
		<title>HalfMask</title>
		<link>http://feedproxy.google.com/~r/Arc90Lab/~3/etl_XbL4Bsc/</link>
		<comments>http://lab.arc90.com/2009/07/08/halfmask-an-experiment-in-password-masking/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 15:03:11 +0000</pubDate>
		<dc:creator>Arc90</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://lab.daniell.acr90-dev-02/2009/07/08/halfmask-an-experiment-in-password-masking/</guid>
		<description><![CDATA[<p>HalfMask is an experimental approach to masking on password fields. Rather than just showing bullets or asterisks, HalfMask presents visual cues so the user can easily read their own password.</p>]]></description>
			<content:encoded><![CDATA[<p>HalfMask is an experimental approach to masking on password fields. Currently the standard shows bullets or asterisks to hide a user&#8217;s password completely as they type. Halfmask avoids this by obscuring the password with semi-visible random characters in the background. The intent is to only allow the user who typed the password to easily read it.</p>
<p><strong>Update: If you find HalfMask interesting, you may want to check out our newer experiment, <a href="http://lab.arc90.com/2009/07/hashmask.php">HashMask</a>.</strong></p>
<hr />
<h4 id="demo">Demo</h4>
<p><iframe src="http://lab.arc90.com/experiments/halfmask/demo.html" width="600" height="300" style="margin-left: 10px; border: 1px solid #CCC"></iframe></p>
<h4 id="why">Why?</h4>
<p>There&#8217;s been a lot of buzz in the tubes lately about password masking being A Bad Thing, specifically brought on by <a href="http://www.useit.com/alertbox/passwords.html">Jakob Nielsen&#8217;s AlertBox article, Stop Password Masking</a>. To be frank, I couldn&#8217;t disagree more with this. I think showing clear passwords would be a huge mistake, despite the obvious usability gains. But I&#8217;m all about compromise, so HalfMask is an attempt to meet Jakob halfway.</p>
<p>I&#8217;m not suggesting that this is the best way to mask passwords. I am just hoping to get the community thinking about different approaches by exploring one approach.</p>
<h4 id="how">How does it work?</h4>
<p>HalfMask is a <a href="http://www.jquery.com">jQuery</a> plugin that will obscure a password field with random characters. The intent is that to a casual observer the field will be unreadable at a glance, but the user inputting the text will be able to read it relatively clearly as they only need to confirm what they input, not read it fresh.</p>
<p>In this way, it is usable <em>enough</em>, by being visible to the author, but not <em>too usable</em>, in that shoulder surfers shouldn&#8217;t be able to read it. It also degrades gracefully so that users without javascript or with a poor browser (IE6) will still see a password field.</p>
<h4 id="use">Can I use it?</h4>
<p>Well sure, but I can&#8217;t recommend using this in any critical software. It should work in Firefox 3, Safari 3 and IE7. It&#8217;s available here, as well as on <a href="http://code.google.com/p/halfmask">google code</a>.</p>
<h4 id="download">Download</h4>
<p><p>Click on the icon to go to the download directory at google code:</p>
<p><a href="http://code.google.com/p/halfmask/downloads/list"><img alt="Download" src="http://arc90.com/_img/download.gif" /></a></p>
<p>Additionally, you may <a href="http://code.google.com/p/halfmask/source/browse/trunk/jquery.halfmask.js">view the source directly in google code</a>.</p>
</p>
<h4 id="license">License</h4>
<p>HalfMask is released under the BSD license.</p>
<h4 id="knownissues">Known Issues</h4>
<p>There are a few known issues with this approach:</p>
<ul>
<li>Text becomes nearly impossible to read at small fonts.</li>
<li>Password fields are still vulnerable to cameras/recording.</li>
<li>Colorblind people may have a harder time reading the correct text.</li>
</ul>
<p>These are issues which readers are welcome to solve with their own approach or with modifications to this one!</p>
<h4 id="discuss">Discuss</h4>
<p>Please offer feedback on the <a href="http://blog.arc90.com/2009/07/new_in_the_lab_halfmask_a_pass.php">Arc90 Blog</a>, or email me, Chris Dary, at <a href="mailto:chrisd@arc90.com">chrisd@arc90.com</a>.</p>
<img src="http://feeds.feedburner.com/~r/Arc90Lab/~4/etl_XbL4Bsc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lab.arc90.com/2009/07/08/halfmask-an-experiment-in-password-masking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lab.arc90.com/2009/07/08/halfmask-an-experiment-in-password-masking/</feedburner:origLink></item>
		<item>
		<title>TBUZZ</title>
		<link>http://feedproxy.google.com/~r/Arc90Lab/~3/8MKlLW3TUKA/</link>
		<comments>http://lab.arc90.com/2009/05/12/tbuzz/#comments</comments>
		<pubDate>Tue, 12 May 2009 12:16:54 +0000</pubDate>
		<dc:creator>Arc90</dc:creator>
				<category><![CDATA[Experiments]]></category>
		<category><![CDATA[tbuzz arc90]]></category>

		<guid isPermaLink="false">http://lab.daniell.acr90-dev-02/2009/05/12/tbuzz/</guid>
		<description><![CDATA[<p>Our wildly-popular Twitter client, TBUZZ lets you easily post to Twitter directly from your Web browser, and shows you what others are saying about that page. It works with all modern Web browsers.</p>]]></description>
			<content:encoded><![CDATA[<p>Following in the footsteps of our last lab experiment &#8211; <a href="http://lab.arc90.com/experiments/readability/">Readability</a> &#8211; we bring yet another bookmarklet. We wanted an easy way to twitter as we browse the Web. We also wanted to see what others were saying about the pages we were visiting.</p>
<p>Enter <a href="http://tbuzz.arc90.com/">TBUZZ</a>:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="450" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=4548135&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="600" height="450" src="http://vimeo.com/moogaloop.swf?clip_id=4548135&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>You can install <a href="http://tbuzz.arc90.com">TBUZZ</a> in just a few seconds by visiting:</p>
<h2 style="margin-bottom: 1em;text-align: center"><a href="http://tbuzz.arc90.com">http://tbuzz.arc90.com</a></h2>
<p>If you&#8217;ve got thoughts, feedback or suggestions regarding TBUZZ, feel free to <a href="http://blog.arc90.com/2009/05/introducing_tbuzz.php">leave a comment on the Arc90 blog</a>.</p>
<img src="http://feeds.feedburner.com/~r/Arc90Lab/~4/8MKlLW3TUKA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lab.arc90.com/2009/05/12/tbuzz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lab.arc90.com/2009/05/12/tbuzz/</feedburner:origLink></item>
		<item>
		<title>Readability</title>
		<link>http://feedproxy.google.com/~r/Arc90Lab/~3/xuzdc3TXgps/</link>
		<comments>http://lab.arc90.com/2009/03/02/readability/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 00:31:37 +0000</pubDate>
		<dc:creator>Andy Lewisohn</dc:creator>
				<category><![CDATA[Experiments]]></category>
		<category><![CDATA[readability arc90 reading web]]></category>

		<guid isPermaLink="false">http://lab.daniell.acr90-dev-02/2009/03/02/readability/</guid>
		<description><![CDATA[<p><em>Update February 1, 2011:</em> Readability has launched as <a href="http://www.readability.com">a full-blown reading platform</a> that delivers a great reading experience provides a mechanism for supporting writers and publishers. <br /><a href="http://www.readability.com">Read More»</a></p>

<p>You can still view the <a href="http://lab.arc90.com/2009/03/02/readability/">original post that started it all»</a></p>]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Update:</strong> On February 1, 2011, Readability was re-launched into a full-fledged reading platform that includes mobile support, queuing articles for reading later and a greatly improved reading view. In addition, the platform provides a unique model for supporting publishers and writers through your reading activity. Visit <a href="http://www.readability.com">http://www.readability.com</a> to learn more.</p></blockquote>
<p>Reading anything on the Internet has become a full-on nightmare. As media outlets attempt to eke out as much advertising revenue as possible, we&#8217;re left trying to put blinders on to mask away all the insanity that surrounds the content we&#8217;re trying to read.</p>
<p>It&#8217;s almost like listening to talk radio, except the commercials <em>play during </em>the program in the background. It&#8217;s a pretty awful experience. Our friend to date has been the trusty &#8220;Print View&#8221; button. Click it and all the junk goes away. I click it all the time and rarely print. It&#8217;s really become the &#8220;Peace &amp; Quiet&#8221; button for many.</p>
<p>Recently, <a href="http://www.aworkinglibrary.com/">Mandy Brown</a> wrote a wonderful article for A List Apart called <a href="http://alistapart.com/articles/indefenseofreaders"><em>In Defense Of Readers</em></a><em>. </em>It&#8217;s an attempt to awaken designers responsibility to those who <em>read </em>on the Web:</p>
<blockquote><p>Despite the ubiquity of reading on the web, readers remain a neglected audience. Much of our talk about web design revolves around a sense of movement: users are thought to be finding, searching, skimming, looking. We measure how frequently they click but not how long they stay on the page. We concern ourselves with their travel and participation&#8211;how they move from page to page, who they talk to when they get there&#8211;but forget the needs of those whose purpose is to be still. Readers flourish when they have space&#8211;some distance from the hubbub of the crowds&#8211;and as web designers, there is yet much we can do to help them carve out that space.</p></blockquote>
<p>Mandy is spot on &#8211; and her concerns are even more salient in today&#8217;s cram-all-the-ads-on-one-page Web.</p>
<p>In response to all this madness, we&#8217;d like to introduce <em>Readability:</em></p>
<p><a href="http://vimeo.com/3445774">Readability : An Arc90 Lab Experiment</a> from <a href="http://vimeo.com/arc90">Arc90</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Readability is a browser bookmarklet (sort of like a bookmark on steroids). You can install Readability by visiting the Readability setup page:</p>
<p><a title="http://lab.arc90.com/experiments/readability/" href="http://lab.arc90.com/experiments/readability/"><strong>http://lab.arc90.com/experiments/readability/</strong></a></p>
<p>Readability works with most major modern browsers and has been tested on many news sites and blogs. It isn&#8217;t 100% effective but works surprisingly well.</p>
<p>Our latest experiment was partly inspired by <a href="http://www.marco.org/">Marco Arment&#8217;s</a> awesome <a href="http://www.instapaper.com">Instapaper</a> application (and equally awesome Instapaper iPhone app). We hope you enjoy this little tool. If you find any issues, feel free to <a href="http://blog.arc90.com/2009/03/shhh_im_trying_to_read.php">comment on our blog</a>.</p>
<p>If you&#8217;d like to keep track of Readability and other experiments that may escape out of our lab, be sure to subscribe to our RSS feeds for the <a href="http://feeds.feedburner.com/arc90lab">lab</a> and <a href="http://feeds.feedburner.com/arc90blog">blog</a> or <a href="http://twitter.com/arc90">follow us on Twitter</a> for announcements.</p>
<p>The Readability code (including setup pages and supporting assets) is <a href="http://code.google.com/p/arc90labs-readability/">available on Google Code</a>.</p>
<p><strong>Readability is licensed under the </strong><a href="http://www.apache.org/licenses/LICENSE-2.0"><strong>Apache License, Version 2.0</strong></a><strong>.</strong></p>
<img src="http://feeds.feedburner.com/~r/Arc90Lab/~4/xuzdc3TXgps" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lab.arc90.com/2009/03/02/readability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lab.arc90.com/2009/03/02/readability/</feedburner:origLink></item>
		<item>
		<title>ActionScript XML Binding</title>
		<link>http://feedproxy.google.com/~r/Arc90Lab/~3/mPeywAFHx50/</link>
		<comments>http://lab.arc90.com/2009/02/12/actionscript-xml-binding/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 22:22:02 +0000</pubDate>
		<dc:creator>Arc90</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://lab.daniell.acr90-dev-02/2009/02/12/actionscript-xml-binding/</guid>
		<description><![CDATA[<p>&#8230; converting to and from XML is an often laborious, and certainly tedious, task.</p>]]></description>
			<content:encoded><![CDATA[<p>Working with XML in ActionScript has been made pretty simple by E4X. But many developers prefer to work with ActionScript objects rather than straight XML. Unfortunately, converting to and from XML is an often laborious, and certainly tedious, task. Java developers may be familiar with Java Architecture for XML Binding (<a href="https://jaxb.dev.java.net/">JAXB</a>) and will quickly note that it was the inspiration for ActionScript XML Biinding (ASXB). </p>
<p>ASXB is a concrete implementation of XML binding that used custom metadata as the means of annotation. This is the 0.1 release of ASXB and so it&#8217;s fairly rough around the edges and is intended to test the waters, so to speak, of the ActionScript developer community. If the ASXB project seems like it might be of use in your development, please comment on it over in <a href="http://blog.arc90.com/2009/02/actionscript_xml_binding.php">the arc90 blog</a>.</p>
<hr />
<ul>
<li><a href="#what">What is this?</a>
<li><a href="#how">How do I use it?</a>
<li><a href="#documentation">Documentation</a>
<li><a href="#licensing">Licensing</a>
<li><a href="#blog">Discuss <em>ActionScript XML Binding</em></a> </li>
</ul>
<h4 id="what">What is this?</h4>
<p>The ActionScript XML Binding (ASXB) project is intended to make the marshalling/unmarshalling of XML/ActionScript objects a much easier task. It&#8217;s a small library that allows a developer to use custom metadata to annotate his/her ActionScript objects for seamless marshalling and unmarshalling.</p>
</p>
<h4 id="how">How Do I Use It?</h4>
<p>To use <i>ASXB</i> in your Flex project, just follow these simple steps:</p>
<h5 id="one">Download The Code</h5>
<div class="howtouse">
<p>Click on the icon below to download the source code:</p>
<p><a href="http://www.arc90.com/_assets/asxb/asxb-0.1-with-dependencies.zip"><img alt="Download" src="http://arc90.com/_img/download.gif"></a>
<p>The file contains everything required to build the ASXB project, as well as a compiled release of the ASXB.swc.</p>
</div>
<h5 id="two">Add the code to your Flex or AIR project</h5>
<div class="howtouse">
<p>You can either add the compiled library, ASXB.swc, to your project&#8217;s library path, or include the source directly in your project. </p>
</div>
<h5 id="three">Add compiler settings</h5>
<div class="howtouse">
<p>Copy flex-config-template.xml to your project and change the name to flex-config.xml. Add the following compiler setting: -load-config+=&lt;path-to-config&gt;/flex-config.xml</p>
</div>
<h5 id="four">Annotate your ActionScript objects</h5>
<div class="howtouse">
<p>Below is a <i>very</i> basic example of an annotated object.</p>
<p>
<pre name="code" class="java">	[XmlRootElement(name="book")] 	public class Book 	{ 		[XmlAttribute(name="authorFullName")] 		public var author:String; 		 		[XmlAttribute] 		public var dateOfPublication:Date; 		 		[XmlAttribute(name="pageCount")]  		public var pages:int; 		 		[XmlElement] 		public var title:String; 		 		... 	} </pre>
</p>
<p>The above object maps to the following XML snippet. When the name of an annotated member is the same as the corresponding XML element or attribute, no name key/value pair is required.</p>
<p>
<pre name="code" class="xml" rows="5" cols="60">	&lt;book authorFullName="Alastair Reynolds" dateOfPublication="2003-5-27" pageCount="704"&gt; 		&lt;title&gt;Chasm City&lt;/title&gt; 	&lt;/book&gt; </pre>
</p>
</div>
<h5 id="five">Create an instance of <i>XMLService</i> using either MXML or ActionScript.</h5>
<div class="howtouse">
<p>MXML:</p>
<p>
<pre name="code" class="java" rows="5" cols="60">	&lt;arc90:XMLService id="service" url="http://example.url/service/" fault="faultHandler(event)" result="resultHandler(event)"/&gt;   </pre>
</p>
<p>ActionScript:</p>
<p>
<pre name="code" class="java" rows="5" cols="60">	import org.orpheus.xml.bind.XMLService; 	 	var service:XMLService = new XMLService(); 	service.url = "http://example.url/service/" 	service.addEventListener(FaultEvent.FAULT, faultHandler); 	service.addEventListener(ResultEvent.RESULT, resultHandler);   </pre>
</p>
</div>
<h5 id="six"><i>XMLService</i> functions <i>exactly</i> like mx.rpc.http.HTTPService</h5>
<div class="howtouse">
<p>To send data to a service just call send, passing an ActionScript object as the parameter, or by setting the request property.</p>
<p>
<pre name="code" class="java" rows="5" cols="60">	var book:Book = new Book(); 	book.author = "Alastair Reynolds"; 	book.title = "Chasm City"; 	 	service.send(book); 	 	// or 	 	service.request = book; 	service.send(); </pre>
</p>
<p>Any data returned as a result of a service call will be automatically unmarshalled into the appropriate data type. It is accessible via the result property of the ResultEvent object.</p>
<p>
<pre name="code" class="java" rows="5" cols="60">	private function resultHandler(event:ResultEvent):void 	{ 		var book:Book = event.result as Book; 		 		trace("You have retrieved " + book.title + " by " + book.author + "."); 		// OUTPUT: You have retrieved Chasm City by Alastair Reynolds.	 	} </pre>
</p>
</div>
<h4 id="documentation">Documentation</h4>
<p>Review the complete <a href="http://www.arc90.com/_assets/asxb/docs/index.html">documentation</a> for a full list of all properties, methods, and annotations of the <i>ActionScript XML Binding</i> project.</p>
<h4 id="licensing">Licensing</h4>
<p>This arc90 tool is licensed under the <a href="http://www.opensource.org/licenses/bsd-license.php">BSD license</a></p>
<h4 id="blog">Discuss <i>ActionScript XML Binding</i></h4>
<p>You can offer feedback on <i>ActionScript XML Binding</i> at the <a href="http://blog.arc90.com/2009/02/actionscript_xml_binding.php">arc90 blog</a>.</p>
<img src="http://feeds.feedburner.com/~r/Arc90Lab/~4/mPeywAFHx50" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lab.arc90.com/2009/02/12/actionscript-xml-binding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lab.arc90.com/2009/02/12/actionscript-xml-binding/</feedburner:origLink></item>
		<item>
		<title>Best Buy Remix API client (PHP)</title>
		<link>http://feedproxy.google.com/~r/Arc90Lab/~3/TBsYv_QhtqY/</link>
		<comments>http://lab.arc90.com/2009/02/06/best-buy-remix-api-client-php/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 15:29:18 +0000</pubDate>
		<dc:creator>Arc90</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://lab.daniell.acr90-dev-02/2009/02/06/best-buy-remix-api-client-php/</guid>
		<description><![CDATA[<p>BestBuy Remix API Client is a PHP library for placing HTTP calls to the <a href="http://remix.bestbuy.com/">Best Buy Remix</a> API.</p>]]></description>
			<content:encoded><![CDATA[<p>Best Buy has opened up its retail catalog in hopes that innovative developers will help to expand the company&#8217;s online presence. <a href="http://remix.bestbuy.com/" target="_blank">Best Buy Remix</a> (currently in Beta) exposes information about Best Buy products and stores.</p>
<p>Interested? <a href="http://remix.bestbuy.com/apps/register" target="_blank">Apply for an API key</a>, download the PHP client library and get started!</p>
<hr />
<ul>
<li><a href="#what">What is this?</a></li>
<li><a href="#how">How do I use it?</a></li>
<li><a href="#documentation">Documentation</a></li>
<li><a href="#licensing">Licensing</a></li>
<li><a href="#blog">Discuss <em>Best Buy Remix API Client</em></a></li>
</ul>
<h4 id="what">What is this?</h4>
<p>BestBuy_Service_Remix is a PHP library for placing HTTP calls to the <a href="http://remix.bestbuy.com/">Best Buy Remix</a> API.</p>
<h4 id="how">How Do I Use It?</h4>
<p>To use <em>BestBuy_Service_Remix</em> in your PHP project, just follow these simple steps:</p>
<h5 id="one">Download The Code From Google Code</h5>
<div class="howtouse">
<p>Click on the icon below to go get the source from Google Code:</p>
<p><a href="http://code.google.com/p/bestbuy-service-remix/"><br />
<img alt="Download" src="http://arc90.com/_img/download.gif" /><br />
</a></p>
<p>The most recent download will contain source code, usage instructions, and <a href="http://www.phpdoc.org/">documentation</a>.</p>
</div>
<h5 id="two">Add the code to your PHP project </h5>
<div class="howtouse">
<p>You&#8217;ll need to add the contents of the &#8216;lib&#8217; folder to <a href="http://www.php.net/set_include_path">your include path</a>.</p>
</div>
<h5 id="three">Create a <em>BestBuy_Service_Remix</em> API client with a valid API key</h5>
<div class="howtouse">
<p><pre name="code" class="php">
&lt;?php
require_once('BestBuy/Service/Remix.php');
$remix = new BestBuy_Service_Remix('YourApiKey');
</pre>
</p>
</div>
<h5 id="four"><em>BestBuy_Service_Remix</em> returns a response object containing API response data <strong>and</strong> <a href="http://www.php.net/manual/en/function.curl-getinfo.php">HTTP metadata</a> recorded by cURL</h5>
<div class="howtouse">
<p>Data may be requested in either XML (default) or JSON format.</p>
<p><pre name="code" class="php">
&lt;?php
require_once('BestBuy/Service/Remix.php');
$remix = new BestBuy_Service_Remix('YourApiKey');
// Retrieve a list of Movies containing the text "Bat"
$result = $remix-&gt;products(array('name=bat*','type=Movie'))-&gt;query();
if(!$result-&gt;isError())
{
echo $result;
}
else if(403 != $result-&gt;http_code)
{
// API errors result in an error document with detailed info
echo $result-&gt;toSimpleXml()-&gt;message;
}
else
{
// 403 errors do not contain a full document, only an h1 message
echo $result-&gt;toSimpleXml()-&gt;h1;
}
</pre>
</p>
</div>
<h4 id="documentation">Documentation</h4>
<p>Complete documentation is included with each download in the &#8216;docs&#8217; folder.</p>
<h4 id="licensing">Licensing</h4>
<p>This library is licensed under a <a href="http://www.opensource.org/licenses/bsd-license.php">BSD</a> license.</p>
<h4 id="blog">Discuss</h4>
<p>Share your thoughts, or just let us know what you&#8217;re up to over at <a href="http://blog.arc90.com/2009/02/best_buy_remix_big_retail_open.php">the Arc90 blog</a>.</p>
<img src="http://feeds.feedburner.com/~r/Arc90Lab/~4/TBsYv_QhtqY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lab.arc90.com/2009/02/06/best-buy-remix-api-client-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lab.arc90.com/2009/02/06/best-buy-remix-api-client-php/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.374 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-04-03 08:58:29 -->

