<?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>Elliott C. Back &#187; AJAX</title>
	<atom:link href="http://elliottback.com/wp/category/computers-technology/web-20/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://elliottback.com/wp</link>
	<description>Internet &#38; Technology</description>
	<lastBuildDate>Tue, 03 Nov 2009 23:59:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Yahoo&#8217;s PIPE api</title>
		<link>http://elliottback.com/wp/yahoos-pipe-api/</link>
		<comments>http://elliottback.com/wp/yahoos-pipe-api/#comments</comments>
		<pubDate>Mon, 12 Feb 2007 05:31:41 +0000</pubDate>
		<dc:creator>Elliott Back</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://elliottback.com/wp/archives/2007/02/12/yahoos-pipe-api/</guid>
		<description><![CDATA[In a much better naming than Technorati&#8217;s immature WTF (Where&#8217;s the fire), Yahoo today released a labs product called Yahoo Pipes.  The name comes from linux file handle terminology:
Pipes is a hosted service that lets you remix feeds and create new data mashups in a visual programming environment. The name of the service pays [...]]]></description>
			<content:encoded><![CDATA[<p>In a much better naming than <a href="http://technorati.com/wtf/">Technorati&#8217;s immature WTF</a> (Where&#8217;s the fire), Yahoo today released a labs product called <a href="http://pipes.yahoo.com/">Yahoo Pipes</a>.  The name comes from linux file handle terminology:</p>
<blockquote><p>Pipes is a hosted service that lets you remix feeds and create new data mashups in a visual programming environment. The name of the service pays tribute to Unix pipes, which let programmers do astonishingly clever things by making it easy to chain simple utilities together on the command line.</p></blockquote>
<p>The idea is quite simple.  Yahoo Pipes lets users take everyday RSS feeds and mash them together with Yahoo APIs, other feeds, and programmatic building blocks in an easy to use graphical environment.  Unfortunately, the execution is terrible and buggy.  Take, for example, this <a href="http://pipes.yahoo.com/pipes/Fgz8mfO32xGuj2qGqu5lkA/">yahoo pipe</a> I created to scan the NYT feed for locations / keywords and insert flickr images as appropriate:</p>
<p><img id="image2124" src="http://elliottback.com/wp/wp-content/uploads/2007/02/pipes-01.jpg" alt="pipes-01.jpg" /></p>
<p>The first thing you might notice is that it doesn&#8217;t really do what it&#8217;s supposed to.  Well, we&#8217;ll come to that in a minute.  You&#8217;ll also notice a lot of &amp;amp; going around&#8211;every time I hit save it re-encoded the original ampersand.  How irritating.  Worse is how their pipes are so watered down they can&#8217;t do anything:</p>
<p><img id="image2125" src="http://elliottback.com/wp/wp-content/uploads/2007/02/pipes-02.jpg" alt="pipes-02.jpg" /></p>
<p>All I wanted to do was take some content, for each item do content analysis and geo analysis, and use those outputs as the input to a flickr search, then append the photo to the text snippet.  Well, first you can&#8217;t fork a data stream into two bits and recombine them later.  So scratch two kinds of analysis.  Second, the outputs of content/geo analysis can&#8217;t be used to populate the inputs of the flickr data source&#8211;an obvious problem.  And third, the annotation feature useless doesn&#8217;t annotate, it just replaces chunks messily. </p>
<p>Yahoo, your pipes are <a href="http://images.scripting.com/archiveScriptingCom/2007/02/08/oops.gif">indeed clogged</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://elliottback.com/wp/yahoos-pipe-api/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ajax Edit In Place with Yahoo UI API</title>
		<link>http://elliottback.com/wp/ajax-edit-in-place-with-yahoo-ui-api/</link>
		<comments>http://elliottback.com/wp/ajax-edit-in-place-with-yahoo-ui-api/#comments</comments>
		<pubDate>Fri, 09 Feb 2007 05:31:16 +0000</pubDate>
		<dc:creator>Elliott Back</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Computers & Technology]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://elliottback.com/wp/archives/2007/02/09/ajax-edit-in-place-with-yahoo-ui-api/</guid>
		<description><![CDATA[You&#8217;ve probably seen the article at at 24 ways about Ajax in-place editing, but honestly the javascript they code up there seems quite hacky and un-standards-compliant.  Instead, we&#8217;re going to use the Yahoo UI Library (YUI, YUI-EXT), a modern cross-browser javascript toolkit, to accomplish the same results with less hassle, and more power.
The effect [...]]]></description>
			<content:encoded><![CDATA[<p>You&#8217;ve probably seen the article at <a href="http://24ways.org/2005/edit-in-place-with-ajax">at 24 ways</a> about Ajax in-place editing, but honestly the javascript they code up there seems quite hacky and un-standards-compliant.  Instead, we&#8217;re going to use the Yahoo UI Library (<a href="http://developer.yahoo.com/yui/">YUI</a>, <a href="http://www.jackslocum.com/blog/">YUI-EXT</a>), a modern cross-browser javascript toolkit, to accomplish the same results with less hassle, and more power.</p>
<p>The effect we want is like Flickr&#8217;s edit in place descriptions:</p>
<p><img id="image2120" src="http://elliottback.com/wp/wp-content/uploads/2007/02/edit-in-place.jpg" alt="edit-in-place.jpg" /></p>
<p><strong>Part 1:  The YUI javascript example:</strong></p>
<p>In javascript, here&#8217;s the code.  First you need some includes:</p>
<pre class="brush:js">
&lt;script type=&quot;text/javascript&quot; src=js/yahoo.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=js/connection.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=js/event.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=js/utilities.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=js/dom.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=js/yui-ext.js&quot;&gt;&lt;/script&gt;
</pre>
<p>Don&#8217;t forget to add this handy shortcut&#8211;we&#8217;ll use it later:</p>
<pre class="brush:js">
&lt;script type=&quot;text/javascript&quot;&gt;
var $ = YAHOO.util.Dom.get
&lt;/script&gt;
</pre>
<p>Then we need a function to show something as editable:</p>
<pre class="brush:js">
function showAsEditable(e){
	YAHOO.util.Event.preventDefault(e);
	YAHOO.util.Event.stopPropagation(e);

	if(this.oldBG == undefined) {
		var pos = this;

		while(pos &amp;&amp; pos.style.backgroundColor == '') {
			pos = pos.parentNode;
		}

		this.oldBG = pos.style.backgroundColor;
	}

	var anim = new YAHOO.util.ColorAnim (
		this,
        	{backgroundColor:{to:'#ffffd3'}},
		.5,
		YAHOO.util.Easing.easeOut
	);

	anim.animate();
}
</pre>
<p>This function finds the closest defined background color, if not already defined, and saves it.  Then it animates to a nice yellow overlay color.  Now we need its reverse:</p>
<pre class="brush:js">
function showAsNotEditable(e){
	YAHOO.util.Event.preventDefault(e);
	YAHOO.util.Event.stopPropagation(e);

	var anim = new YAHOO.util.ColorAnim (
		this,
		{backgroundColor:{to:this.oldBG}},
		.5,
		YAHOO.util.Easing.easeOut
	);

        anim.animate();
}
</pre>
<p>This function is even simpler&#8211;it just restores the saved background color.  Now that we can turn their &#8220;editable effect&#8221; on and off, we need something to actually do the work:</p>
<pre class="brush:js">
function editHandler(e){
	YAHOO.util.Event.preventDefault(e);
	YAHOO.util.Event.stopPropagation(e);
	var target = (e.srcElement) ? e.srcElement : e.target;

	var form = '&lt;div id=&quot;' + target.id + '_editor&quot;&gt;';
	form = form + '&lt;textarea id=&quot;' + target.id +
		'_edit&quot; name=&quot;' + target.id +
		'&quot; rows=&quot;4&quot; cols=&quot;60&quot;&gt;' +
		target.innerHTML + '&lt;/textarea&gt;';
	form = form + '&lt;br/&gt;&lt;input id=&quot;' + target.id +
		'_save&quot; type=&quot;button&quot; ' +
		'value=&quot;SAVE&quot; /&gt; OR &lt;input id=&quot;' +
		target.id + '_cancel&quot; type=&quot;button&quot; ' +
		value=&quot;CANCEL&quot; /&gt;&lt;/div&gt;';
	form = form + '&lt;/div&gt;';

	YAHOO.ext.DomHelper.insertHtml('afterEnd', target, form);

	YAHOO.util.Event.addListener(target.id + '_save', 'click', function(){
		YAHOO.util.Connect.asyncRequest('POST', 'ajax.php',
		{
			success: function(o){
	                	target.innerHTML = $(target.id + '_edit').value;
	                  	$(target.id + '_editor').parentNode.
					removeChild($(target.id + '_editor'));
				target.style.display = 'block';
			},
			failure: function(o){
				$(target.id + '_editor').value =
				'Sorry, the update failed...';
			},
			scope: this
		},
		'action=updatepost&amp;target=' + target.id + '&amp;value='
			+ escape($(target.id + '_edit').value)
		);
	});

	YAHOO.util.Event.addListener(target.id + '_cancel', 'click', function()
	{
		$(target.id + '_editor').parentNode.
			removeChild($(target.id + '_editor'));
		target.style.display = 'block';
	});

	target.style.display = 'none';
}
</pre>
<p>Now that that&#8217;s out of the way, you just need to add these handlers to mouseover, mouseout, and click events of &#8220;editable&#8221; items:</p>
<pre class="brush:js">
var elements = YAHOO.util.Dom.getElementsByClassName('editable');
YAHOO.util.Event.addListener(elements, 'click', editHandler);
YAHOO.util.Event.addListener(elements, 'mouseover', showAsEditable);
YAHOO.util.Event.addListener(elements, 'mouseout', showAsNotEditable);
YAHOO.ext.EventManager.onDocumentReady(Init.init, Init, true);
</pre>
<p><strong>Part 2:  the HTML code</strong></p>
<p>Here&#8217;s an example of some html code that automatically makes itself editable:</p>
<pre class="brush:html">
&lt;div class=&quot;itemcontent&quot;&gt;
	&lt;p id=&quot;description-' . $row['id'] .
		'&quot; class=&quot;editable&quot;&gt;' .
			htmlentities($row['description']) .
		'&lt;/p&gt;
&lt;/div&gt;
</pre>
<p><strong>Part 3:  the AJAX</strong></p>
<p>Since we encode the field name and identifier in the id attribute of the editable element, processing the ajax request is easy:</p>
<pre class="brush:php">
$value = urldecode($_POST['value']);
$bits = preg_split('[-]', $_POST['target'], -1);
$field = $bits[0];
$id = $bits[1];

switch($field) {
	case 'title':
		$object-&gt;UpdatePostTitle($id, $value);
		break;
	case 'description':
		$object-&gt;UpdatePostDescription($id, $value);
		break;
}
</pre>
<p><strong>Conclusion</strong></p>
<p>Using YUI you can add a robust, cross-platform edit-in-place solution that&#8217;s as easy as giving your html elements id attributes in the form &#8220;$field-$id&#8221; and the classname &#8220;editable.&#8221;  The rest is magic.  For a live demo, see <a href="http://elliottback.com/tools/editinplace/">my edit in place demo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://elliottback.com/wp/ajax-edit-in-place-with-yahoo-ui-api/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>ClaimID: Your Online Identity</title>
		<link>http://elliottback.com/wp/claimid-your-online-identity/</link>
		<comments>http://elliottback.com/wp/claimid-your-online-identity/#comments</comments>
		<pubDate>Wed, 07 Jun 2006 19:53:22 +0000</pubDate>
		<dc:creator>Elliott Back</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Computers & Technology]]></category>
		<category><![CDATA[Counterfeit]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://elliottback.com/wp/archives/2006/06/07/claimid-your-online-identity/</guid>
		<description><![CDATA[For Alexander Wrege, Claim ID, a new identity Web 2.0 project, is a complete success.  After setting up a profile on Claim ID, a search for his rare name turns up the new profile in first place:

Not everyone is as lucky as Alex.  About half of the claim ID profiles I surveyed did [...]]]></description>
			<content:encoded><![CDATA[<p>For <em>Alexander Wrege</em>, Claim ID, a new identity Web 2.0 project, is a complete success.  After setting up a <a href="http://claimid.com/alex">profile</a> on Claim ID, a <a href="http://www.google.com/search?hs=i8L&#038;hl=en&#038;lr=&#038;safe=off&#038;client=firefox-a&#038;rls=org.mozilla%3Aen-US%3Aofficial&#038;q=Alexander+Wrege&#038;btnG=Search">search</a> for his rare name turns up the new profile in first place:</p>
<p><img id="image1465" src="http://elliottback.com/wp/wp-content/uploads/2006/06/claimid-google-results.jpg" alt="claimid-google-results.jpg" /></p>
<p>Not everyone is as lucky as Alex.  About half of the claim ID profiles I surveyed did not appear in the first page of Google search results.  However, as the domain is nearly a year old, its profile should begin ranking well on Google.</p>
<p><img id="image1466" src="http://elliottback.com/wp/wp-content/uploads/2006/06/claimid-logo.jpg" alt="claimid-logo.jpg" /></p>
<p>What exactly does Claim ID do?  It let&#8217;s you associate hyperlinked material (web pages) with your name and a brief personal-biographical statement.  In their own words,</p>
<blockquote><p>ClaimID is a service that lets you claim the information that is about you online. That information is then associated with your name, providing folks an easy way to see what is and isn&#8217;t about you online. In doing so, you get to influence the search engines, and provide people more relevant information when they search for you. It&#8217;s time to reclaim some power back from the search engines. <strong>ClaimID is about letting you have some say in what search engines say about you.</strong></p></blockquote>
<p><strong>Features</strong></p>
<p>You have control over the following elements of your online life:</p>
<ul>
<li>Associate any URL with your name</li>
<li>Claim websites you own as your own, and verify them</li>
<li>Associate a biographical statement with your name</li>
<li>Associate an image with your name</li>
<li>Organize URLs into groups</li>
</ul>
<p>There&#8217;s also a bookmarklet to help you collect links related to you, a very pretty AJAX-based interface, and a <a href="http://blog.claimid.com/">blog</a> to keep updated on Claim ID related news.</p>
<p><strong>Problems</strong></p>
<p>Their <a href="http://claimid.com/privacy">privacy policy</a> dictates how account deletion works:</p>
<blockquote><p>Users may delete their information from our database by deleting their accounts. All personal information will be deleted, but the user&#8217;s name will be &#8220;locked&#8221; so that another user cannot use this name.</p></blockquote>
<p>This could lead to a large number of names being permanently tied up.  Without some form of name recycling, people will have to sign up with &#8220;Elliott Back 7889898.&#8221;  A denial of service attack could be used to void large numbers of names, as well.</p>
<p>Also, the only thing it does right now is create a (name, {url}) binding.  While useful, hopefully Claim ID will expand its features in the future.</p>
<p><strong>Conclusion</strong></p>
<p>If you want to see what Claim ID should look like, take a gander at my <a href="http://claimid.com/ECB29">claim ID profile</a>, which is just a few links and my photo.  In a couple years, this will be a powerful identity service.</p>
]]></content:encoded>
			<wfw:commentRss>http://elliottback.com/wp/claimid-your-online-identity/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Google Related Links</title>
		<link>http://elliottback.com/wp/google-related-links/</link>
		<comments>http://elliottback.com/wp/google-related-links/#comments</comments>
		<pubDate>Sat, 08 Apr 2006 22:43:51 +0000</pubDate>
		<dc:creator>Elliott Back</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://elliottback.com/wp/archives/2006/04/08/google-related-links/</guid>
		<description><![CDATA[This is just a little test of the new Google Related Links product.  Please note that if a javascript box doesn&#8217;t immediately appear below, it&#8217;s because I&#8217;m fixing problems with Wordpress&#8217; filters:

It&#8217;s a little strange that it&#8217;s located on the main Google domain, and not on the labs page, or a subdomain.  I [...]]]></description>
			<content:encoded><![CDATA[<p>This is just a little test of the new <a href="http://www.google.com/relatedlinks/">Google Related Links</a> product.  Please note that if a javascript box doesn&#8217;t immediately appear below, it&#8217;s because I&#8217;m fixing problems with Wordpress&#8217; filters:</p>
<p><script type="text/javascript" language="JavaScript" src="http://elliottback.com/wp/wp-content/google-related-links.js"></script><script type="text/javascript" language="JavaScript" src="http://relcontent.googlesyndication.com/relcontent/show_rc.js"></script></p>
<p>It&#8217;s a little strange that it&#8217;s located on the main Google domain, and not on the labs page, or a subdomain.  I guess it&#8217;s stable but too small for a big release.  Oddly, they allow total customization:</p>
<blockquote><p>You can modify the size, content type and color of your unit. If you have any suggestions on new layouts and designs, feel free to email us at labs+relatedlinks@google.com. We&#8217;d love to hear from you.</p></blockquote>
<p>Is this the first time that Google&#8217;s asked people to come out with modifications to their products?  All you Google Hackers rejoice.  This could be the next Google-X.</p>
]]></content:encoded>
			<wfw:commentRss>http://elliottback.com/wp/google-related-links/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The New ElliottBack.com</title>
		<link>http://elliottback.com/wp/the-new-elliottbackcom/</link>
		<comments>http://elliottback.com/wp/the-new-elliottbackcom/#comments</comments>
		<pubDate>Tue, 27 Dec 2005 04:06:59 +0000</pubDate>
		<dc:creator>Elliott Back</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[My Blog]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://elliottback.com/wp/?p=1177</guid>
		<description><![CDATA[I&#8217;m doing some cool things for the new ElliottBack.com.  One of them involves integrating a community tagging solution, to which I&#8217;ve added or modified the following features:
+ Automatic tagging
+ Related RSS search feeds now in regular HTML as well as AJAX
+ RSS search feed item descriptions
I need to add one more feature, that is, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m doing some cool things for the new <a href="http://ElliottBack.com" title="http://ElliottBack.com" target="_blank">ElliottBack.com</a>.  One of them involves integrating a community tagging solution, to which I&#8217;ve added or modified the following features:</p>
<p>+ Automatic tagging<br />
+ Related RSS search feeds now in regular HTML as well as AJAX<br />
+ RSS search feed item descriptions</p>
<p>I need to add one more feature, that is, to let everyday users add tags at will, too.  Once that&#8217;s done, this tagging solution will power intra-post linkage as well as draw in valuable content from offsite.</p>
]]></content:encoded>
			<wfw:commentRss>http://elliottback.com/wp/the-new-elliottbackcom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
