<?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; xml</title>
	<atom:link href="http://www.trachtenberg.com/blog/tag/xml/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>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>PHP Trivia Contest: DOM + Default Namespaces</title>
		<link>http://www.trachtenberg.com/blog/2006/09/26/php-trivia-contest-dom-default-namespaces/</link>
		<comments>http://www.trachtenberg.com/blog/2006/09/26/php-trivia-contest-dom-default-namespaces/#comments</comments>
		<pubDate>Wed, 27 Sep 2006 00:03:24 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/2006/09/26/php-trivia-contest-dom-default-namespaces/</guid>
		<description><![CDATA[Here&#8217;s a question based on a recent PHP bug report which shows why DOM is fun.
Given the following line of PHP:
$xml = DOMDocument::loadXML(
 '&#60;r xmlns=&#34;urn:a&#34;/&#62;');
The easy way to print the namespace URI of the root node, urn:a, is:
echo $xml->documentElement->namespaceURI;
But how do you retrieve it using DOMElement::GetAttributeNS()? What are the two magical input parameters to coax [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a question based on a recent PHP bug report which shows why DOM is fun.</p>
<p>Given the following line of PHP:</p>
<blockquote><p><code>$xml = DOMDocument::loadXML(<br />
 '&lt;r xmlns=&quot;urn:a&quot;/&gt;');</code></p></blockquote>
<p>The easy way to print the namespace URI of the root node, <code>urn:a</code>, is:</p>
<blockquote><p><code>echo $xml->documentElement->namespaceURI;</code></p></blockquote>
<p>But how do you retrieve it using <code>DOMElement::GetAttributeNS()</code>? What are the two magical input parameters to coax that value out?</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=644&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2006/09/26/php-trivia-contest-dom-default-namespaces/feed/</wfw:commentRss>
		<slash:comments>4</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>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>
		<item>
		<title>How eBay Uses Metadata to Enhance Its Web Services</title>
		<link>http://www.trachtenberg.com/blog/2005/10/11/how-ebay-uses-metadata-to-enhance-its-web-services/</link>
		<comments>http://www.trachtenberg.com/blog/2005/10/11/how-ebay-uses-metadata-to-enhance-its-web-services/#comments</comments>
		<pubDate>Tue, 11 Oct 2005 19:52:14 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/2005/10/11/how-ebay-uses-metadata-to-enhance-its-web-services/</guid>
		<description><![CDATA[Alan Lewis has a great article up on XML.com on embedding meta-data inside WSDL files.
Since we rev our Web services API every two weeks, we run into versioning problems that aren&#8217;t well covered by existing practices. For example, we define a whole set of complexTypes, but those types can morph overtime and we want to [...]]]></description>
			<content:encoded><![CDATA[<p>Alan Lewis has a great article up on XML.com on embedding meta-data inside WSDL files.</p>
<p>Since we rev our Web services API every two weeks, we run into versioning problems that aren&#8217;t well covered by existing practices. For example, we define a whole set of complexTypes, but those types can morph overtime and we want to maintain backwards compatibility whenever possible. Or, a piece of data may be mandatory in one call, but optional in another.</p>
<p>Seeking a standards-based solution, our documentation team turned to the appInfo element defined as part of XML Schema. It&#8217;s quite a nice idea, and also allows us to auto-generate reference documentation from the WSDL file itself. We&#8217;d love for other companies who encounter a similar problem to take a similar approach, so that we can pool resources.</p>
<p>If you&#8217;re interested, <a href="http://www.xml.com/pub/a/2005/09/28/ebay-metadata-web-services.html">check out Alan&#8217;s piece</a>.</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=302&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2005/10/11/how-ebay-uses-metadata-to-enhance-its-web-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adam&#8217;s Fall Conference Schedule</title>
		<link>http://www.trachtenberg.com/blog/2005/08/23/adams-fall-conference-schedule/</link>
		<comments>http://www.trachtenberg.com/blog/2005/08/23/adams-fall-conference-schedule/#comments</comments>
		<pubDate>Tue, 23 Aug 2005 20:41:07 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[speaking]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xslt]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/2005/08/23/adams-fall-conference-schedule/</guid>
		<description><![CDATA[Now that&#8217;s I&#8217;m back from FOO Camp, I&#8217;m checking my calendar to see what conference events I have coming up. For those of you keeping track (hi mom!), here they are:

Microsoft PDC: September 13-16 in LA. I haven&#8217;t managed to wrangle a chance to speak yet. :)
Zend/PHP Conference: October 18-21 in Silicon Valley. Speaking about [...]]]></description>
			<content:encoded><![CDATA[<p>Now that&#8217;s I&#8217;m back from FOO Camp, I&#8217;m checking my calendar to see what conference events I have coming up. For those of you keeping track (hi mom!), here they are:</p>
<ul>
<li><a href="http://msdn.microsoft.com/events/pdc/">Microsoft PDC</a>: September 13-16 in LA. I haven&#8217;t managed to wrangle a chance to speak yet. :)</li>
<li><a href="http://zend.kbconferences.com/">Zend/PHP Conference</a>: October 18-21 in Silicon Valley. Speaking about eBay Web services. Final talk TBD.</li>
<li><a href="http://www.apachecon.com/2005/US/index.html">ApacheCon US 2005</a>: December 10-14 in San Diego. Speaking on &#8220;Consuming Web Services Using PHP 5&#8243;.</li>
</ul>
<p>I may also go to <a href="http://www.web2con.com/">Web 2.0</a> and the <a href="http://www.4d.com/summit/">4D Summit</a>, but I have yet to finalize those events.</p>
<p>The ApacheCon talk should be quite cool, as I will be showing off nifty real-world web services examples. For example, sucking del.icio.us RSS bookmarks into a WordPress blog, or mashing up eBay Web services search results with the Google mapping API. Here&#8217;s the full abstract:</p>
<blockquote><p>As we move into the world of Web 2.0, PHP developers must increasing include Web services in their toolkit of skills. This session covers how to implement REST and SOAP clients using the latest PHP 5 extensions, such as ext/soap, SimpleXML, and xsl.</p>
<p>This is not an academic talk discussing theory and specifications. Examples  show applications of popular Web services, including del.icio.us, eBay, and Google Maps.</p>
<p>Don&#8217;t be left behind. Come to this session and learn how to integrate Web services into your code.</p>
</blockquote>
<p>I have most of the code already written in various places, so there&#8217;s only the problem of creating the slides. Once I know more about my other talks, I will pimp them here, so stay tuned for all the details.</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=179&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2005/08/23/adams-fall-conference-schedule/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tim Bray on the 80/20 Rule</title>
		<link>http://www.trachtenberg.com/blog/2005/05/24/tim-bray-on-the-8020-rule/</link>
		<comments>http://www.trachtenberg.com/blog/2005/05/24/tim-bray-on-the-8020-rule/#comments</comments>
		<pubDate>Tue, 24 May 2005 21:30:36 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/?p=71</guid>
		<description><![CDATA[I&#8217;m listening to Tim Bray talk about technology winners and losers over the past decade or two. He&#8217;s framing it within the context of Web services (REST vs SOAP), but one of his key takeaways is that of all the major predictive factors, the 80/20 rule has the best correlation between existence and success.
Missing from [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m listening to Tim Bray talk about technology winners and losers over the past decade or two. He&#8217;s framing it within the context of Web services (REST vs SOAP), but one of his key takeaways is that of all the major predictive factors, the <a href="http://www.tbray.org/ongoing/When/200x/2004/01/14/TPSM-8020">80/20 rule</a> has the best correlation between existence and success.</p>
<p>Missing from his list is PHP/FI, which should clearly be filed under winners. People always made fun of the simplicity of PHP (no OO, no namespaces, no Unicode support, etc.) However, you can&#8217;t argue with <a href="http://www.php.net/usage.php">the growth curve</a>.</p>
<p>Tim also references Gall&#8217;s Law: &#8220;A complex system that works is invariably found to have evolved from a simple system that worked.&#8221; So, even though PHP 5 now has fullblown OO support, and we&#8217;re working on Unicode, (but still avoiding namespaces), we still keep ourselves rooted in Rasmus&#8217;s early principles of simplicity.</p>
<p>If we had tried to jump directly to PHP 5 back in the mid 90s, we never would have made it. We would have had our asses kicked by Perl, Java, or both.</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=71&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2005/05/24/tim-bray-on-the-8020-rule/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wanted: One Kick Ass eBay Evangelist</title>
		<link>http://www.trachtenberg.com/blog/2005/05/23/wanted-one-kick-ass-ebay-evangelist/</link>
		<comments>http://www.trachtenberg.com/blog/2005/05/23/wanted-one-kick-ass-ebay-evangelist/#comments</comments>
		<pubDate>Mon, 23 May 2005 17:53:35 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[speaking]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/?p=70</guid>
		<description><![CDATA[I am on the look out for a top notch evangelist for my team at eBay. If that&#8217;s you, or someone you know, contact me.
The eBay Developers Program enables third party programmers to write applications that use the eBay platform. We have an amazing set of web services (over 100 API calls) and want everyone [...]]]></description>
			<content:encoded><![CDATA[<p>I am on the look out for a top notch evangelist for my team at eBay. If that&#8217;s you, or someone you know, <a href="mailto:adam@trachtenberg.com">contact me</a>.</p>
<p>The eBay Developers Program enables third party programmers to write applications that use the eBay platform. We have an amazing set of web services (over 100 API calls) and want everyone to use them. Not only do we expose almost all of eBay, we do it big time, serving up billions of API calls every month.</p>
<p>Your job would be getting the word out to new communities, getting them excited about the possibilities, and helping them build all sorts of cool applications. In my opinion our platform is particularly interesting because eBay is so dynamic &#8212; people are always listing, bidding, and buying. Our web service is more than just search results, and it&#8217;s read/write, not read-only.</p>
<p>The <a href="https://sjobs.brassring.com/EN/ASP/TG/cim_jobdetail.asp?jobId=228608&#038;type=search&#038;JobReqLang=1&#038;recordstart=1&#038;JobSiteId=195&#038;JobSiteInfo=228608_195">official job description</a> has all the details. (That&#8217;s job &#8220;5731&#8243; if the link breaks.) Also, apologies in advance to my fellow Mac and Linux users, our brain-dead job site only works under Windows IE. (It also works under Firefox on Windows, but that doesn&#8217;t extend to Firefox Mac or Linux. However, you may be able to spoof your user-agent string.) Please don&#8217;t read anything into this and apply it to my attitude towards developers.</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=70&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2005/05/23/wanted-one-kick-ass-ebay-evangelist/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>When in doubt, POST.</title>
		<link>http://www.trachtenberg.com/blog/2005/05/06/when-in-doubt-post/</link>
		<comments>http://www.trachtenberg.com/blog/2005/05/06/when-in-doubt-post/#comments</comments>
		<pubDate>Fri, 06 May 2005 22:46:24 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Web Services]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/?p=65</guid>
		<description><![CDATA[The original eBay Web services API is neither REST nor SOAP. It&#8217;s a bastardized version of REST, where you always POST to the same URI. (The verb is located inside the POST data, which is an XML document.)
Actually, this format has turned out to be quite practical. Its building blocks &#8212; HTTP, HTTP Headers, HTTP [...]]]></description>
			<content:encoded><![CDATA[<p>The original <a href="http://developer.ebay.com">eBay Web services</a> API is neither REST nor SOAP. It&#8217;s a bastardized version of REST, where you always POST to the same URI. (The verb is located inside the POST data, which is an XML document.)</p>
<p>Actually, this format has turned out to be quite practical. Its building blocks &#8212; HTTP, HTTP Headers, HTTP POST, SSL, and XML &#8212; are sufficiently well-implemented standards that we haven&#8217;t found any language that can&#8217;t make API calls. From our perspective, that&#8217;s the most important characteristic. That&#8217;s not saying that if we had known in 2001 what we know now, things wouldn&#8217;t have turned out different.</p>
<p>However, at least we got the <a href="http://www.intertwingly.net/blog/2005/05/06/This-Stuff-Matters">GET vs POST decision</a> right.</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=65&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2005/05/06/when-in-doubt-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Y! Traffic Data RSS Feed</title>
		<link>http://www.trachtenberg.com/blog/2005/05/02/y-traffic-data-rss-feed/</link>
		<comments>http://www.trachtenberg.com/blog/2005/05/02/y-traffic-data-rss-feed/#comments</comments>
		<pubDate>Tue, 03 May 2005 04:53:35 +0000</pubDate>
		<dc:creator>Adam Trachtenberg</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.trachtenberg.com/blog/?p=64</guid>
		<description><![CDATA[Yahoo!&#8217;s jumped on the Dashboard bandwagon with their Y! Local Traffic widget. As someone who has been hacking around with Dashboard, I know that for this to work, Yahoo has to expose the data in an easily digestiable format. I also know it&#8217;s no problem to decompile the widget, since it&#8217;s just HTML/JS/CSS.
So I took [...]]]></description>
			<content:encoded><![CDATA[<p>Yahoo!&#8217;s jumped on the Dashboard bandwagon with their <a href="http://www.apple.com/downloads/macosx/dashboard/yahoolocaltraffic.html">Y! Local Traffic</a> widget. As someone who has been hacking around with Dashboard, I know that for this to work, Yahoo has to expose the data in an easily digestiable format. I also know it&#8217;s no problem to decompile the widget, since it&#8217;s just HTML/JS/CSS.</p>
<p>So I took a peek and was quite surprised by what I found. RSS.</p>
<p>I think this is brilliant. RSS is XML, so it&#8217;s easy to parse. It&#8217;s also easily consumable by RSS readers, so other people can piggy-back on the feed. Of course, it does mean you need to be willing to open this up to the world because it won&#8217;t take before this is figured this out and people start publicizing the interface.</p>
<p>Sure enough, there&#8217;s already a <a href="http://ejohn.org/blog/traffic-conditions-data/">blog post</a> describing how the widget works and it even provides a little form for making <a href="http://maps.yahoo.com/traffic.rss?csz=94114&#038;mag=3&#038;minsev=1">your own URL</a>.</p>
<p>We&#8217;re finally beginning to see the adoption of Web services into client applications. One of the advantages of REST is that it&#8217;s super easy to consume from programs such as Dashboard and Firefox.</p>
<p>I can&#8217;t wait to see where this goes.</p>
<img src="http://www.trachtenberg.com/blog/?ak_action=api_record_view&id=64&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.trachtenberg.com/blog/2005/05/02/y-traffic-data-rss-feed/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

