<?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>Adam Trachtenberg &#187; Web Services</title>
	<atom:link href="http://www.trachtenberg.com/blog/category/web-services/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.trachtenberg.com/blog</link>
	<description>Thoughts on PHP, eBay, and too many technical topics for my family's liking.</description>
	<lastBuildDate>Tue, 24 Aug 2010 21:39:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>REST vs HTTP+POX vs SOAP</title>
		<link>http://www.trachtenberg.com/blog/2006/11/06/rest-vs-httppox-vs-soap/</link>
		<comments>http://www.trachtenberg.com/blog/2006/11/06/rest-vs-httppox-vs-soap/#comments</comments>
		<pubDate>Mon, 06 Nov 2006 08:29:34 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[pox]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[soap]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/2006/11/06/rest-vs-httppox-vs-soap/</guid>
		<description><![CDATA[<a href="http://www.intertwingly.net/blog/2006/11/05/POX-and-SOAP">Sam</a> and <a href="http://www.crummy.com/2006/11/05/2">Leonard</a> ponder the differences among them. Here's the deal:

<ol>
<li>REST == HTTP GET</li>
<li>HTTP+POX == HTTP GET &#038; POST</li>
<li>SOAP == HTTP POST, with interop issues</li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.intertwingly.net/blog/2006/11/05/POX-and-SOAP">Sam</a> and <a href="http://www.crummy.com/2006/11/05/2">Leonard</a> ponder the differences among them. Here&#8217;s the deal:</p>
<ol>
<li>REST == HTTP GET</li>
<li>HTTP+POX == HTTP GET &#038; POST</li>
<li>SOAP == HTTP POST, with interop issues</li>
</ol>
<p><span id="more-665"></span><br />
When I&#8217;m talking to people about web services, and I hear them use various terms, this is what I feel they&#8217;re talking about most of the time.</p>
<p><strong>REST</strong></p>
<p>REST almost always indicates HTTP GET with a query string. The results are probably XML, but lately they could also be JSON.</p>
<p>No other HTTP verbs are used (especially PUT and DELETE), and it&#8217;s highly likely that all requests are routed through the same URI.</p>
<p>For example:</p>
<p>http://api.example.org/rest?action=search&#038;query=trachtenberg</p>
<p><strong>HTTP+POX</strong></p>
<p>Nobody uses this term. However, there are some web services that, while not &#8220;true REST,&#8221; use more than HTTP GET. I place them in this category.</p>
<p>These likely exist because the service allows you to submit a large quantity of data that is not human readable, so it does not make sense to place as part of a query string. Blobs of HTML and pictures come to mind.</p>
<p>For example, the eBay &#8220;XML API&#8221;. You can submit items over eBay web services. Since the item description is pure HTML, it exceeded the maximum query string length our web server would accept at the time.</p>
<p>Thus, the eBay XML API was invented: you HTTP POST an XML document, we return an XML document.</p>
<p>Again, like REST, there&#8217;s no concept of resources. Everything goes through the same URI. The action is indicated either as part of the query string or in POST body. (Or both, as in the eBay case.)</p>
<p><strong>SOAP</strong></p>
<p>SOAP is identical to HTTP+POX, except that you&#8217;re required to use XML Namespaces and XML Schema.</p>
<p>You are also going to have interop issues when trying to generate the SOAP envelope to send or parse the SOAP envelope that&#8217;s returned.</p>
<p>XML Namespaces and XML Schema are minor headaches, but people are willing to deal with them. People understand that, in theory, namespaces are good, even if XML Namespaces are a little funky.</p>
<p>XML Schema can be confusing. However, it does allow you to validate the response, which most people find to be somewhat useful. The fact that XML Schema may not be the best way to describe XML data is a different issue.</p>
<p>If SOAP merely had these two issues, people would work through it. The real problem with SOAP is that the specification is so confusing, people can&#8217;t build interoperable clients and servers. This drives people mad.</p>
<p>People know how to generate arbitrary XML (it&#8217;s just text after all) and send a HTTP POST request. They also know how to parse XML, particularly when they know ahead of time what they should expect. (That&#8217;s why PHP 5&#8217;s SimpleXML extension is a great web services client.)</p>
<p>What they cannot do is decipher a WSDL file to determine what crazy combination of XML the server is expecting (especially when the server is not following the standard). And, assuming they can get through that, they cannot figure out how to repeatedly hammer their SOAP client into producing the magical combination of XML necessary to placate the SOAP server.</p>
<p>That&#8217;s the difference between HTTP+POX and SOAP.</p>
<p>It&#8217;s not the complexity. Well, it&#8217;s not complexity in terms of needing to build up a large document. It&#8217;s complexity in terms of trying to understand the hundreds of pages of XML specifications to generate the request and not having good examples of working XML documents to crib off of.</p>
<p>As to whether the message name should go in the URI? Nobody cares.</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=665&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2006/11/06/rest-vs-httppox-vs-soap/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>REST Web Services, the Book</title>
		<link>http://www.trachtenberg.com/blog/2006/11/06/rest-web-services-the-book/</link>
		<comments>http://www.trachtenberg.com/blog/2006/11/06/rest-web-services-the-book/#comments</comments>
		<pubDate>Mon, 06 Nov 2006 07:29:08 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[rest]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/2006/11/06/rest-web-services-the-book/</guid>
		<description><![CDATA[Sam Ruby and Leonard Richardson are writing a book on <a href="http://www.intertwingly.net/blog/2006/11/03/REST-Web-Services">REST Web services</a>. Very exciting. I love reading Sam's blog and watching him untangle standards.

Looking at the <a href="http://www.crummy.com/writing/REST-Web-Services/">Table of Contents</a>, I'm particularly interested in "Appendix A: HTTP status codes and when to use each one." (Yes, I am serious.)]]></description>
			<content:encoded><![CDATA[<p>Sam Ruby and Leonard Richardson are writing a book on <a href="http://www.intertwingly.net/blog/2006/11/03/REST-Web-Services">REST Web services</a>. Very exciting. I love reading Sam&#8217;s blog and watching him untangle standards.</p>
<p>Looking at the <a href="http://www.crummy.com/writing/REST-Web-Services/">Table of Contents</a>, I&#8217;m particularly interested in &#8220;Appendix A: HTTP status codes and when to use each one.&#8221; (Yes, I am serious.)<br />
<span id="more-664"></span><br />
When I designed &#8220;<a href="https://www.dudewheresmyusedcar.com/">Dude, Where&#8217;s My Used Car</a>,&#8221; my mashup between eBay Motors and Google Maps, I churned through a number of different ways to signal failure. My biggest issue is that there&#8217;s so many places my request can fail, I&#8217;m not sure how to &#8220;correctly&#8221; represent that back inside my mashup.</p>
<p>For example, in response to a user-generated action (such as filling out a form and clicking submit), my mashup initiates a HTTP GET AJAX request (well, AJAJ because I&#8217;m using JSON instead of XML) which hits my web server. I then use PHP to parse the request, generate a corresponding SOAP request to eBay&#8217;s web service gateway, wait for result, pick it apart and convert the bits I want to JSON. This data is then passed back to the browser, where I (well, <a href="http://dojotoolkit.org/">Dojo</a>, actually) evals it.</p>
<p>When everything works, everything works.</p>
<p>But what happens when the user enters an invalid ZIP Code? eBay will return an error, and I&#8217;d like to proxy this back to the application, so I can toss up a message.</p>
<p>Should I return 200 OK and pass back the message? That&#8217;s one option, but I&#8217;d prefer not to need to check the data structure to see if I got the normal data I expected or some nasty error instead.</p>
<p>Besides, Dojo lets me specify a separate error handler callback function. It seems a cleaner design to handle all the errors there. But then I can&#8217;t return 200. What to use instead? 400 Bad Request?</p>
<p>Then there&#8217;s cases where the error is not the user&#8217;s fault, but either my fault or eBay&#8217;s fault. What should I do if eBay returns a SOAP envelope my PHP script can&#8217;t parse? 502 Bad Gateway? Or if the eBay server returns a SOAP Fault? The same 500 Internal Server Error I got back from eBay?</p>
<p>Should I not let my web server&#8217;s interaction with eBay bleed back into browser?</p>
<p>Here&#8217;s another example: when eBay&#8217;s server is too busy, it returns <a href="http://developer.ebay.com/DevZone/migration/docs/BestPractices/RetryCode.htm">Error Code 10007</a>. I can retry (and hopefully fix the problem) inside of my PHP script without even needing to message back to the browser. But if I did ultimately give up retrying, should I pass back 503 Service Unavailable? Am I on the hook for translating between SOAP and REST in my server-side proxy PHP script?</p>
<p>Maybe I can use 4xx codes for problems which are &#8220;user generated&#8221; in some form. These are things which require the user to take an action to remedy. And for things which are broken but otherwise outside of the control of the user (such as my SOAP client being unable to understand eBay&#8217;s SOAP response) I can use 5xx.</p>
<p>I actually like this idea, but I&#8217;m wondering if there&#8217;s a &#8220;standard&#8221; way to indicate errors and failures in a AJAX application. I can&#8217;t find one, but I&#8217;m not very familiar with what&#8217;s out there.</p>
<p>PS: My vote is to leave off the &#8220;With Ruby&#8221; part of the title, and go with plain &#8220;REST Web Services&#8221;.</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=664&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2006/11/06/rest-web-services-the-book/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Imitation == Flattery</title>
		<link>http://www.trachtenberg.com/blog/2006/10/21/imitation-flattery/</link>
		<comments>http://www.trachtenberg.com/blog/2006/10/21/imitation-flattery/#comments</comments>
		<pubDate>Sun, 22 Oct 2006 04:52:29 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[speaking]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/2006/10/21/imitation-flattery/</guid>
		<description><![CDATA[As most of you know, I work in the cut-throat world of web services. Us evangelists are always jockeying for the best developers, and we'll take any advantage we can. No holds are <a href="http://www.syndic8.com/weblog/">(Jeff) barred</a>. If you come up with a good edge, you better use it before someone tries to take it away.]]></description>
			<content:encoded><![CDATA[<p>As most of you know, I work in the cut-throat world of web services. Us evangelists are always jockeying for the best developers, and we&#8217;ll take any advantage we can. No holds are <a href="http://www.syndic8.com/weblog/">(Jeff) barred</a>. If you come up with a good edge, you better use it before someone tries to take it away.</p>
<p>For example, at this year&#8217;s ETech, I broke through with a killer presentation titled: &#8220;<a href="http://conferences.oreillynet.com/cs/et2006/view/e_sess/8513">eBay Web Services: A Marketplace Platform <em>for Fun and Profit</em></a>.&#8221;</p>
<p>Knowing a good thing when he sees it, <a href="http://blog.chanezon.com/">Patrick</a> from Google tries to respond at this month&#8217;s <a href="http://zendcon.com/speakers_list.php">ZendCon</a> with: &#8220;Scrub (Ajax), Wash (SOAP) and REST: use Google Checkout and AdWords APIs with PHP <em>for fun and profit</em>.&#8221;<br />
<span id="more-657"></span><br />
Mixed metaphors and the ugly imagery of Patrick in the shower aside, I am not put off in even a small way by his outright thievery. For I am already sixteen steps ahead.</p>
<p>I am proud to introduce, coming on October 31th, for the very first time, my latest and greatest talk: &#8220;eBay Web services: Great platform or greatest platform?&#8221;</p>
<p>Truly <a href="http://www.colbertnation.com/">Lincolnish</a>.</p>
<p><em>PS: You are only allowed to read this if you have a sense of humor. This is meant to be funny. I don&#8217;t think Patrick is going around stealing all my talk titles, or even just my good talk titles. Besides, I am stealing my most recent one from Stephen Cobert, so I can&#8217;t really claim ownership to that now can I?</em></p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=657&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2006/10/21/imitation-flattery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP SOAP vs. SDO</title>
		<link>http://www.trachtenberg.com/blog/2006/10/12/php-soap-vs-sdo/</link>
		<comments>http://www.trachtenberg.com/blog/2006/10/12/php-soap-vs-sdo/#comments</comments>
		<pubDate>Thu, 12 Oct 2006 22:21:29 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[speaking]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/2006/10/12/php-soap-vs-sdo/</guid>
		<description><![CDATA[In my role as eBay Platform Evangelist, I spend a lot of time exploring different XML technologies.
SOAP is obviously the big one. I use the PHP 5 ext/soap extension, which is great, but there&#8217;s actually another PHP SOAP extension that might be even better. No, it&#8217;s not PEAR::SOAP or NuSOAP; it&#8217;s axis2.

If you haven&#8217;t heard [...]]]></description>
			<content:encoded><![CDATA[<p>In my role as eBay Platform Evangelist, I spend a lot of time exploring different XML technologies.</p>
<p>SOAP is obviously the big one. I use the PHP 5 ext/soap extension, which is great, but there&#8217;s actually another PHP SOAP extension that might be even better. No, it&#8217;s not PEAR::SOAP or NuSOAP; it&#8217;s <a href="http://pecl.php.net/package/axis2">axis2</a>.<br />
<span id="more-654"></span><br />
If you haven&#8217;t heard of axis2, you&#8217;re not alone. That&#8217;s because it&#8217;s a pecl extension that&#8217;s still in beta, so there aren&#8217;t a lot of people using it yet. However, it&#8217;s a PHP version of the <a href="http://ws.apache.org/axis2/">Apache Axis 2.0</a> SOAP stack.</p>
<p>Unlike ext/soap, which is recreating SOAP one feature at a time, Axis 2.0 already supports a good portion of the WS-* specifications. So all that needs to happen is for someone to write the hooks between PHP and Axis 2.0, which is far easier than actually writing the features themselves.</p>
<p>I met a number of people from WSO2, the company that&#8217;s writing Axis 2.0, and they&#8217;re quite excited about the extension. However, they did mention it&#8217;s still in beta, so I haven&#8217;t actually spent any time using it yet.</p>
<p>The other PHP XML extension I&#8217;ve been hearing a lot about is SDO. SDO is an attempt to provide a standard data interface regardless of the backend datasource. So, for example, you can interact with XML data in the exact same manner as information pulled from your database.</p>
<p>At OSCON and ApacheCon, I&#8217;ve run into a couple of people from IBM who have been doing the heavy lifting on this extension, and we&#8217;ve had a number of interesting chats with them about eBay Web services and SDO, but I hadn&#8217;t had any free time at work to install the extension.</p>
<p>Therefore, when I had a little free time today between the end of my session and lunch, I sat down and reproduced a short code example that I had wrote using ext/soap with SDO instead.</p>
<p>Here&#8217;s the key portion of the original code:</p>
<pre><code>// Print Titles and Mileage
if (isset($response->SearchResultItemArray)) {
    foreach($response->SearchResultItemArray as $item) {
        printf(&quot;%s\n\t%d miles\n&quot;, $item, $item->ItemSpecific['Mileage']);
    }
}</code></pre>
<p>This iterates through a search result for eBay Motors listings and prints out the title and the mileage for each individual item.</p>
<p>Normally the code would be far more complex, but through a series of ext/soap class mappings I wrote that implement the IteratorAggregate and ArrayAccess interfaces, along with the __toString() magic method, I&#8217;ve managed to abstract away a number of the complexities.</p>
<p>Best I can tell, SDO doesn&#8217;t give me quite the same level of control, but it does implement a number of these features for me out-of-the-box.</p>
<p>Here&#8217;s my rewrite using SDO:</p>
<pre><code>foreach ($root->SearchResultItemArray->SearchResultItem as $item) {
    $title = $item->Item->Title;
    $mileage = $item->ItemSpecific[&quot;NameValueList[Name='Mileage']&quot;]->Value[0];
    printf(&quot;%s\n\t%d miles\n&quot;, $title, $mileage);
}</code></pre>
<p>It&#8217;s not quite as brief, but I do get this nice XPath-like filtering that lets me pull out the the value of the car&#8217;s Mileage in one line. Pretty handy.</p>
<p>I had to implement the ArrayAccess interface to get this to work under ext/soap, which included this method:</p>
<pre><code>public function offsetGet($name) {
	if (! is_array($this->NameValueList)) {
		$this->NameValueList = array($this->NameValueList);
	}

	foreach ($this->NameValueList as $NameValueList) {
		if ($NameValueList->Name == $name) {
			return $NameValueList->Value;
		}
	}

	return null;
}</code></pre>
<p>Not the hardest thing in the world to write, but this is just one of the custom class maps that will arise in our data schema, and SDO takes care of them all automatically.</p>
<p>Still, right now I think I prefer my ability the greater control I have over the interface with ext/soap. Our SOAP schema isn&#8217;t that pretty since there are lots of list, array, and hash wrappers. Through classmaps and interfaces I can turn these into native-looking PHP arrays and hashes.</p>
<p>I may be introducing a leaky abstraction, but I think this is better than exposing a NameValueListArrayType for people to wrangle with.</p>
<p>Like ext/soap, SDO requires you to define your data using an XML Schema. While we actually publish a stand alone XML Schema file, SDO will also happily parse a WSDL file, too, which is nice.</p>
<p>However, it will not directly consume a SOAP message because the WSDL doesn&#8217;t include any mention of the SOAP envelope wrapper. I needed to rip out the contents of the SOAP body into a separate XML document in order to get SDO to parse my data. Oddly, this corresponds perfectly with our &#8220;XML API,&#8221; so I could use that to retrieve properly formatted data that I can pass directly to SDO.</p>
<p>Where SDO really falls down for me is performance. Admittedly, eBay is a pathological case, but our WSDL file is 2.94 Megs in size. When I feed that to SDO, it takes 8.5 seconds to process the XML Schema data. Yikes!</p>
<p>I don&#8217;t mind a one-time start up hit, but it doesn&#8217;t appear that SDO can cache a parsed version of the schema. In contrast, ext/soap has both an on-disk and in-memory WSDL cache.</p>
<p>This means it takes SDO about 8.7 seconds to process the schema, load in data, and print out the information &#8212; and all with locally stored files.</p>
<p>In contrast, ext/soap takes as little as 0.55 seconds to pull in a cached version of the WSDL from the disk, go out over the network to query eBay via SOAP, wait for eBay&#8217;s SOAP server to run a database query on its end and send back a SOAP response, parse the SOAP envelope, and print out the exact same data. If I was using the in-memory cache, I think it&#8217;d be even faster, and I&#8217;m sure the big bottleneck here is talking to eBay.</p>
<p>Now, I&#8217;ve spent all of 60 minutes playing with SDO, so it&#8217;s quite possible that I&#8217;m missing some obvious configuration flag. If not, I hope IBM can do something to help speed up the performance, since while I could probably write a script to break apart our schema to create individual files that contain all the possible types on a per-call basis, I am hoping I don&#8217;t need to.</p>
<p>In the meantime, I&#8217;m going to continue exploring SDO to see what else I can do with it because I&#8217;ve sure I&#8217;ve only grazed its surface.</p>
<p><em>[Update: I cannot get the axis2 extension to compile, despite trying a number of different versions of Axis2c and both Linux and Mac OS X. I may try again tomorrow.]</em></p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=654&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2006/10/12/php-soap-vs-sdo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Dirty Secrets of OSCON 2006</title>
		<link>http://www.trachtenberg.com/blog/2006/08/07/dirty-secrets-of-oscon-2006/</link>
		<comments>http://www.trachtenberg.com/blog/2006/08/07/dirty-secrets-of-oscon-2006/#comments</comments>
		<pubDate>Mon, 07 Aug 2006 23:17:47 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[Working]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[oscon]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[speaking]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/2006/08/07/dirty-secrets-of-oscon-2006/</guid>
		<description><![CDATA[Under the heading of better two weeks late than never, here are my slides for my OSCON talk Dirty Secrets of PHP 5&#8217;s ext/soap Extension.
As usual, I had a great time at the show. It was fun to see all my old friends and make new ones.
]]></description>
			<content:encoded><![CDATA[<p>Under the heading of better two weeks late than never, here are <a href="http://www.trachtenberg.com/talks/dirtysecretssoap.pdf">my slides</a> for my OSCON talk <a href="http://conferences.oreillynet.com/cs/os2006/view/e_sess/8655">Dirty Secrets of PHP 5&#8217;s ext/soap Extension</a>.</p>
<p>As usual, I had a great time at the show. It was fun to see all my old friends and make new ones.</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=617&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2006/08/07/dirty-secrets-of-oscon-2006/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>More from MIX 06</title>
		<link>http://www.trachtenberg.com/blog/2006/03/22/more-from-mix-06/</link>
		<comments>http://www.trachtenberg.com/blog/2006/03/22/more-from-mix-06/#comments</comments>
		<pubDate>Wed, 22 Mar 2006 18:53:54 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[Working]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/2006/03/22/more-from-mix-06/</guid>
		<description><![CDATA[Ever since I started at eBay, I&#8217;ve been excited about using our Web services to improve the eBay experience for buyers. In particular, I think there are lots of interesting ways to integrate eBay into programs other than Web browsers. So, when we looked to put together demos for MIX 06, we decide to show [...]]]></description>
			<content:encoded><![CDATA[<p>Ever since I started at eBay, I&#8217;ve been excited about using our Web services to improve the eBay experience for buyers. In particular, I think there are lots of interesting ways to integrate eBay into programs other than Web browsers. So, when we looked to put together demos for MIX 06, we decide to show off a Live.com search widget and Outlook 12 integration (see yesterday&#8217;s post for more information).</p>
<p>After poking around Feedster and Technorati, I&#8217;m glad to see other people are equally excited by these ideas:</p>
<blockquote><p>The best demo was one that showed how you can integrate eBay with Microsoft Outlook, giving you a single place to manage your auctions. One can envision many similar uses that aggregate task-based communications into your email software.</p></blockquote>
<p align="right"><a href="http://www.trappermarkelz.com/2006/03/mix06_day_two.html"><br />
Trapper Markelz</a></p>
<blockquote><p>[Joe Belfiore] demo&#8217;d a cool add in that eBay created for monitoring auctions.  Although not an avid eBayer this is something I&#8217;ve wanted for a while.</p></blockquote>
<blockquote><p>eBay had a talk about building their live.com search gadget â€“ source speaks louder than words â€“ itâ€™s available on www.microsoftgadgets.com.</p></blockquote>
<p align="right"><a href="http://blogs.msdn.com/jongallant/archive/2006/03/21/557638.aspx">Jon Gallant</a></p>
<p>Later today I&#8217;m hosting a round table, so if you&#8217;re still at MIX, come on by the eBay table and I&#8217;ll buy you lunch.</p>
<p>Other links:</p>
<ul>
<li><a href="http://weblogs.asp.net/jgalloway/archive/2006/03/21/440716.aspx">Jon Gallaway</a></li>
<li><a href="http://weblog.vb-tech.com/nick/archive/2006/03/21/1493.aspx">VB-tech weblog</a></li>
</ul>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=463&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2006/03/22/more-from-mix-06/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MIX 06</title>
		<link>http://www.trachtenberg.com/blog/2006/03/21/mix-06/</link>
		<comments>http://www.trachtenberg.com/blog/2006/03/21/mix-06/#comments</comments>
		<pubDate>Tue, 21 Mar 2006 20:03:21 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[speaking]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/2006/03/21/mix-06/</guid>
		<description><![CDATA[Today&#8217;s Day 2 at Microsoft&#8217;s MIX 06 conference. I&#8217;ve had a great time so far. Here&#8217;s my recap:
Yesterday, was the big Bill G keynote and 1-1 chat with Tim O&#8217;Reilly. During Bill&#8217;s opening remarks, he gave the eBay Web service a nice plug by saying &#8220;eBay is an extreme example where half the product listings [...]]]></description>
			<content:encoded><![CDATA[<p>Today&#8217;s Day 2 at Microsoft&#8217;s MIX 06 conference. I&#8217;ve had a great time so far. Here&#8217;s my recap:</p>
<p>Yesterday, was the big Bill G keynote and 1-1 chat with Tim O&#8217;Reilly. During Bill&#8217;s opening remarks, he gave the eBay Web service a nice plug by saying &#8220;eBay is an extreme example where half the product listings are done in a programmable way.&#8221; Technically, it&#8217;s 47% of eBay.com listings, but what&#8217;s 3% among friends?</p>
<p>Later on, Dean Hachamovitch, king of IE 7, showed off eBay&#8217;s new support for viewing search results via RSS directly within the browser. Even better, we&#8217;ve integrated support for Microsoft&#8217;s Simple List Extensions to RSS, so you can sort and filter eBay items by category, format, price, etc. I think it&#8217;s a great way of using RSS outside of news syndication.</p>
<p>After lunch, I was on a panel titled &#8220;Web 2.0: Show Me The Money,&#8221; with Tim O&#8217;Reilly, Jeremy Zawodny, Michael Arrington, and Royal Farros. At first, I was worried we couldn&#8217;t fill up the entire hour and fifteen minutes, but we actually ran three minutes late and could have kept going. I don&#8217;t know if that was a good or bad thing, but a number of people have come up to me after the panel to say they enjoyed it, so I&#8217;m going to assume we were at least entertaining, if not actually informative.</p>
<p>Here&#8217;s the round-up from the blogsphere:</p>
<ul>
<li><a href="http://jeremy.zawodny.com/blog/archives/006507.html">Jeremy Zawodny</a></li>
<li><a href="http://joeduck.wordpress.com/2006/03/20/web-20-at-mix06-mike-to-yellow-pages-you-are-dead/">Joe Duck</a></li>
<li><a href="http://lvb.net/item/2499">Luc Van Braekel</a></li>
<li><a href="http://randyh.wordpress.com/2006/03/20/quotes-from-mix06/">Randy Holloway</a></li>
</ul>
<p>I hustled from my panel to Christin Boyd&#8217;s Office 2007 talk, where she demoed (in grand style) an eBay and Outlook integration, where you can pull in the items your watching and bidding on from eBay directly into Outlook. They appear directly inside a folder that you can sort, label, etc. Even better, they appear on your calendar, so you get a reminder 15 minutes before the auction closes. She even overwrote the &#8220;Reply&#8221; button on the ribbon turning it into a &#8220;Bid on eBay&#8221; button. Quite cool!</p>
<p>This morning, Joe Belfiore demoed this in front of the entire MIX 06 crowd during his morning keynote as an example of Office integration with third party sites using Web services.</p>
<p>Right now, I&#8217;m taking a short break before lunch, and then I&#8217;m off to hear Alan Lewis demo <a href="https://searchgadget.codebase.ebay.com/">his eBay Live.Com Gadget</a>. He&#8217;s learned all sorts of practical information about combining widgets and gadgets with Web services, and he&#8217;s going to share best practices with the attendees.</p>
<p>I got a chance to play around with the gadget over the past week, and it&#8217;s quite nice. Kudos to Alan, Rob, and Tim, for the design, programming, and UI. They really took this from idea to concept to actual code all by themselves. In particular, they added this nifty feature where the gadget will intelligently expand and truncate the search results depending on the width of your screen. Very impressive.</p>
<p>If you&#8217;ve made it this far, I&#8217;ll share my one Vegas celebrity almost sighting. Yes, a real &#8220;appears in the National Enquirer&#8221; celebrity, not a tech &#8220;has an a-list blog&#8221; celebrity. While we were at dinner last night, Britney Spears rolled into the restaurant. Unfortunately, no thanks can be shared with &#8220;It&#8217;s 30 seconds too late, but now&#8217;s when I&#8217;m going to mention this&#8221; Arturo, who didn&#8217;t alert the people at the table with our backs to the entrance. I admit to shamlessly trying to &#8220;go to the bathroom,&#8221; but she was hidden away in a private room, and the bathrooms are in the casino, so that line didn&#8217;t work so well.</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=461&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2006/03/21/mix-06/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>eBay Plugin for Google Desktop</title>
		<link>http://www.trachtenberg.com/blog/2006/02/12/ebay-plugin-for-google-desktop/</link>
		<comments>http://www.trachtenberg.com/blog/2006/02/12/ebay-plugin-for-google-desktop/#comments</comments>
		<pubDate>Sun, 12 Feb 2006 18:45:39 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/2006/02/12/ebay-plugin-for-google-desktop/</guid>
		<description><![CDATA[My man Alan Lewis evangelised Google to use eBay Web services to write a plug-in for their Google Desktop application.
It&#8217;s quite nice and takes advantage of a not-well-announced new rate limiting feature that you should expect to learn more about later this month. :) No particular reason for the suspense, except that I&#8217;ve been too [...]]]></description>
			<content:encoded><![CDATA[<p>My man <a href="http://alanlewis.typepad.com/weblog/2006/02/new_ebay_plugin.html">Alan Lewis evangelised Google</a> to use <a href="http://developer.ebay.com">eBay Web services</a> to write a plug-in for their <a href="http://desktop.google.com/">Google Desktop</a> application.</p>
<p>It&#8217;s quite nice and takes advantage of a not-well-announced new rate limiting feature that you should expect to learn more about later this month. :) No particular reason for the suspense, except that I&#8217;ve been too busy to give it the proper attention it needs.</p>
<p>If you&#8217;re the type of person that runs Google Desktop and uses eBay, you should <a href="http://desktop.google.com/plugins/i/ebay.html">pick it up</a>.</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=454&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2006/02/12/ebay-plugin-for-google-desktop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Modest Proposal on How To Commoditize Away Google&#8217;s Advertising Revenues.</title>
		<link>http://www.trachtenberg.com/blog/2005/12/12/how-to-commoditize-away-googles-advertising-revenues/</link>
		<comments>http://www.trachtenberg.com/blog/2005/12/12/how-to-commoditize-away-googles-advertising-revenues/#comments</comments>
		<pubDate>Tue, 13 Dec 2005 01:58:33 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/2005/12/12/how-to-commoditize-away-googles-advertising-revenues/</guid>
		<description><![CDATA[New eBay blogger Josh Scott muses about Bill Gates&#8217;s comments that Google isn&#8217;t really free because they serve up ads. To quote Josh paraphrasing Bill:
[S]earch engines like Google get their revenues from advertising because people use these search engines, but they don&#8217;t share these advertising revenues with the end users who help them get the [...]]]></description>
			<content:encoded><![CDATA[<p>New eBay blogger <a href="http://twostepsatatime.blogspot.com/2005/12/will-microsoft-create-network-effects.html">Josh Scott muses</a> about Bill Gates&#8217;s comments that Google isn&#8217;t really free because they serve up ads. To quote Josh paraphrasing Bill:</p>
<blockquote><p>[S]earch engines like Google get their revenues from advertising because people use these search engines, but they don&#8217;t share these advertising revenues with the end users who help them get the revenue.</p></blockquote>
<p>Later on, Josh hits on my number one long-time issue with making money from search:</p>
<blockquote><p>[Google should] be concerned about the lack of network effects, but also by the related fact that the switching costs both as a searcher and as an advertiser are so low.</p></blockquote>
<p>I use Google now because it&#8217;s the best. But I used to use AltaVista. And before AV, I used Lycos. If (when?) someone else comes along, I&#8217;m going to switch.</p>
<p>Google has no inherent structural advantage over other companies in regards to search. They are no lock-in costs or network effects. They&#8217;re just better at it. But companies such as Microsoft and Yahoo! and eBay can also hire engineers who can write search engines. They can even hire away Google engineers.</p>
<p>If eBay sellers will go through the hassle of selling their items through multiple channels, you better believe advertisers will go where they get the best bang for their buck, too. As long as Google continues to aggregate demand and provide the &#8220;best&#8221; clicks, they&#8217;ll continue to capture massive value.</p>
<p>However, when other companies catch up, either by providing a better service or by paying me to use their search engine, Google will need to cut into their AdSense margins to remain competitive. This hurts Google and all search engines on the supply side.</p>
<p>In related news, Tim Bray talks today about &#8220;<a href="http://tbray.org/ongoing/When/200x/2005/12/11/Search-Market">The Future Search Market</a>&#8221; He describes an application that has a Web search window and:</p>
<blockquote><p>When someone types in â€œBritney Spearsâ€ or â€œMayan Eschatologyâ€, I send the query off three different search engines who pay me a small retainer for the privilege of getting them&#8230;. You could imagine an alternative setup in which you send the search terms to the engines and all they come back with is their per-click bid price, and then you only send the actual search to the winner.</p></blockquote>
<p>It&#8217;s certainly true that companies such as Google and Yahoo! pay to be the search provider for popular applications, such as Firefox and Safari. They also pay to be the search provider for popular Web applications, such as AOL and the Washington Post. However, this doesn&#8217;t need to apply to big companies.</p>
<p>Another way Google currently pays for traffic is through their AdWords program. Tim&#8217;s idea applies just as well (if not better) to any page on the Web that runs contextual ads &#8212; which are essentially embedded search results intelligently served-up based on a fancy back-end algorithm. This algorithm guesses what a visitor would have typed into the search box (if only one had existed).</p>
<p>Right now, Google (presumably) has a nice margin between what they charge advertisers (via AdSense) and payout (via AdWords). This makes them a tidy profit.</p>
<p>But Yahoo! and Microsoft have similar products. As a content provider, you&#8217;d switch from AdWords if you made more money from the Yahoo! Publisher Network. But right now, your choice of contextual advertisements is all or nothing: you&#8217;re either with Yahoo! or Google or Microsoft. You have a few choices, but you&#8217;re forced to pick one and stick with them until you switch.</p>
<p>This is quite coarse and inefficient. You&#8217;re leaving money on the table because it&#8217;s not really a question of whether you make more money overall from one company or another. What you should really care about is whether you can make more money for them (and thus from them) <em>for this specific visitor at this specific instant in time</em>.</p>
<p>Tim&#8217;s idea becomes:</p>
<blockquote><p>[A]n alternative setup in which you send the <strike>search terms</strike> <strong>page URL</strong> to the engines and all they come back with is their per-click bid price, and then you only <strike>send the actual search to</strike> <strong>serve contextal ads of</strong> the winner.</p></blockquote>
<p>If Microsoft and Yahoo! want to make a big dent in Google&#8217;s AdWords business, they should provide a pricing Web service for contextual advertisers. By providing transparency in the market, they&#8217;d commoditize away Google&#8217;s demand side, too.</p>
<p>If you were a company that made money from multiple channels and you were facing a large scary competitor that made 99% of its money from advertising, wouldn&#8217;t you do your best to erode as much profit margin from advertising as you could?</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=406&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2005/12/12/how-to-commoditize-away-googles-advertising-revenues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ApacheCon Slides Are Finished</title>
		<link>http://www.trachtenberg.com/blog/2005/12/11/apachecon-slides-are-finished/</link>
		<comments>http://www.trachtenberg.com/blog/2005/12/11/apachecon-slides-are-finished/#comments</comments>
		<pubDate>Sun, 11 Dec 2005 07:17:12 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[speaking]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/2005/12/11/apachecon-slides-are-finished/</guid>
		<description><![CDATA[ApacheCon has begun and I am happy to say I have finished my ApacheCon slides. My talk on Consuming Web Services Using PHP 5 isn&#8217;t until Wednesday afternoon. Therefore, I technically have a few days left before I need to get up on stage and present, so I&#8217;m counting this as a victory for getting [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.apachecon.com">ApacheCon</a> has begun and I am happy to say I have finished my ApacheCon slides. My talk on <a href="http://apachecon.com/2005/US/html/sessions.html/e=MjAwNS9VUw#1549">Consuming Web Services Using PHP 5</a> isn&#8217;t until Wednesday afternoon. Therefore, I technically have a few days left before I need to get up on stage and present, so I&#8217;m counting this as a victory for getting my act together in a timely manner.</p>
<p>For this talk, I decided to demonstrate Web services using a number of real Web services, so you can get a flavor for how people are actually implementing Web 2.0. Specifically:</p>
<ul>
<li><a href="http://del.icio.us/help/rss">del.icio.us</a> (bought by Yahoo! earlier this week)</li>
<li><a href="http://www.flickr.com/services/api/">flickr</a> (bought by Yahoo! earlier this year)</li>
<li><a href="http://developer.ebay.com/">eBay</a> (almost bought by Yahoo!, almost bought Yahoo!)</li>
</ul>
<p>And, of course, there&#8217;s the obligatory <a href="http://www.google.com/apis/maps/">Google Maps</a> reference because, well, it&#8217;s a rule or something. I think. I can&#8217;t remember.</p>
<p>This was my first presentation done in Keynote. It&#8217;s certainly easier to make non-ugly slides in Keynote than in PowerPoint, which almost seems to lead you down the path of ugly slides. You think Microsoft could invest in a few good new templates instead of still using the ones their intern programmers designed in 1992.</p>
<p>If you&#8217;re going to be at ApacheCon, let me know. I am arriving Monday afternon and leaving Wednesday night, and staying at the conference hotel. I will have a rental car, so if you know a good place to eat or drink or visit that&#8217;s off the beaten path, we can help each other.</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=404&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2005/12/11/apachecon-slides-are-finished/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

