Today's my last day at eBay. I'm moving on to take a position at Yahoo which will start next week. I'll give more details after I figure out where they keep the paper clips and stuff over there, but suffice it to say that it's a most excellent opportunity that will involve working with Yahoo's new developer initiatives. Not only do I get to work with the always outrageous Jeremy Zawodny, but I get to start carpooling with Carole and Celeste. What's not to love?
I should mention that I'm still a huge believer in eBay and its promise and I wish my team, which will now be headed up by the indominable Adam Trachtenberg, all the best.
Business 2.0 on Way New Platforms
Business 2.0 ran a piece on Web platforms (such as ours, Google's, and Yahoo's). They interviewed me for the piece and quoted me. (If you're a Biz 2.0 subscriber, click here to read the piece; if you're not a subscriber, you'll have to take my word for it when I say that it's a good article and my quote was brilliant, simply brilliant.)
Dan Theurer of my team created a Java application that enables a user to search for and purchase items on eBay from within Tivo using Tivos' HME software development kit and our Java SDK. It's a proof-of-concept application, not 100% ready for prime time but functional (and actually pretty impressive to look at, I'll try to post some screen shots later).
We released the application today under an open-source license. We've been doing this with samples on the down-low for a while now, but we're just starting to get serious about releasing stuff like this under real open-source licenses so as to avoid any ambiguity as to what you can do with the code. We will be doing more of this in the future and supporting it in better ways.
Update: Slashdotted, boo-ya!
At Macworld Today
Adam and I spent the morning in San Francisco attending the Macworld keynote. Terrific show -- Steve Jobs really knows how to talk about his products in a way that simulates that part of the brain that controls consumer desire, and I was happy to have a chance to see him do it in person.
If you were there (or if you caught the webcast, which should be available online real soon now), you saw Steve demonstrate a new technology called Dashboard that will be a part of Mac OS Tiger. Dashboard is intended to be a platform for little utility applications (in essence, what the Mac used to call 'desk accessories', but way better and easier to develop.) Steve demoed some widgets that display the current weather, a stock ticker, a dictionary/thesaurus, and so on. Very neat stuff.
If you were paying attention toward the end of the demo, you saw Steve fire up a little eBay widget. This is a real app that uses the eBay API to display a list of eBay items you're bidding on. Adam worked on it over the past few weeks with folks from Apple; we're hoping to make it generally available in some fashion around the time that Tiger is released.
 I bought an iPod Shuffle for no reason. Then when I realized I had no reason to own one, I bought another one for my wife. That's how good the guy is.
Love For P-Language Coders
Almost forgot to mention, this week we launched an eBay developer resource center for Perl, PHP, and Python coders. This compliments the portals we launched in 2004 for Windows/.NET, Java and "everyone else". It also extends the tradition of lumping PHP, Perl, and Python together even though they have very little in common other than the fact that they all crept out of the open-source world and they all happen to begin with the letter P.
Updated with non-malformed URL, sorry 'bout that (and thanks for the catch, goon ).
New Code Example Page on developer.ebay.com
If you're using the eBay API and you've been frustrated by the lack of good code examples, take a look at the new code example mini-site we just launched today at http://developer.ebay.com/examples/. It sucks far less than before. We've also added examples for a few new development environments we've never provided much support for in the past (such as 4D and Flash).
We've Got Room for a Thousand
The lucky bastage who won the eBay charity auction for the right to become the 1,000th happy haunt at Disneyland's Haunted Mansion was immortalized at the stroke of midnight there. The custom tombstone they made for him is a hoot — when I was a kid, I used to love standing in line and trying to figure out the jokes on the tombstones.
Stay Beautiful, Adam Trachtenberg
Great interview, Adam!
New Delphi 8 eBay .NET SDK Example
Earlier this year John Kaster of Borland created a simple demo application showing how to automatically list items for sale on eBay using Delphi and the eBay SDK for Windows.
This sample needed some updating, though. For one thing, it uses our old less-secure method of passing user credentials instead of our new and mighty-mighty authentication scheme known as "auth/auth". It also made it difficult to show the "money shot" — automatically displaying the newly-listed item for sale in the browser within seconds of listing it automatically with your shiny eBay API-driven application.
So I burned the midnight oil tonight (literally — jeez, just noticed it's past 1AM) and updated it. Update: This download now resides on our new code examples minisite.
I'll be demoing this at BorCon in San Jose next week, by the way. If you're planning on attending, stop by our booth; I'll be there on Monday and Wednesday. However, do not ask me difficult questions about the Delphi development environment, or I will be compelled to kick you. My Delphi skills are feeble, and if it weren't for John's work on the first version of this, I would never have been able to revise it to the dazzling glory you see here today.
Remember that if you're a JBuilder or Delphi developer, the
next 2005 releases of those products will contain language-specific eBay SDKs that will make it easy for you to create apps that integrate with eBay. Get information on how to get started here (Windows/.NET), here (Java) or here (everyone else).
pyeBay: Actually Useful
My Python module for the eBay API was demonstrated to be actually useful today, contrary to all predictions. Somebody inside of eBay needed to do something basic with the API and I suggested they could use pyeBay to do it. The person wasn't proficient with Python (not that I am), but installing Python was within his comfort zone. Sure enough, after installing Python on his system and making a few edits to one of the test scripts, he was listing test auctions to our development sandbox within a few minutes.
I really get a charge out of saving people time so this made me really happy. In addition, the guy I was working helped me out by pointing out that pyeBay is missing a simple but crucial bit of functionality — a wrapper for the ValidateTestUserRegistration call. (I created a C# command-line wrapper for this call back in March.) It's an easy call to make, but needs to be made in a point in the process of creating an eBay API app where you probably haven't made your first API call yet, so lots of people get stuck. For now we'll provide tools like ValTest to make it easier to bless a sandbox account for seller activity in the sandbox; in the future we're thinking about changing our signup process so a number of flavors of eBay sandbox test accounts (buyer, seller, maybe a few more) get created automagically at the time you sign up. Then the barrier will be totally removed.
Adam and I talked about Python and PHP object wrapper strategies this evening. We both realized that eBay's .NET and Java object wrappers both take a very, um, let's say simplistic approach to wrapping API calls — just take the procedural call, create a class wrapper around it, and turn all its inputs into properties of the object. Because I'm writing pyeBay after hours and I don't really have to answer to anybody, I decided to apply some object-design savvy to the library to make it easier to understand. So, instead of a class called ValidateTestUserRegistration there's a User object. Calling the Get method of the user object maps to the GetUser call. (All the objects in pyeBay will have at least one method called Get.) In the next release there'll be a Validate user which will map to the ValidateTestUserRegistration call. It might not look familiar if you're accustomed to the names of today's calls, but you'll probably be able to hash it out, and new users will hopefully get productive much faster.
This evening's drop of pyeBay adds very rudimentary support for three new calls (GetUser, AddItem and GetCategories). This isn't what you'd call "production quality code" and pyeBay isn't at the point where it would pass eBay's developer certification, but the calls all work and you can use them to build something more serious if you like.
I haven't explicitly stated this yet, but I'll do so now: Feel free to send me suggestions or even patches if you want to contribute to this. I have no idea how many Python lunatics there are in the world who want to write eBay API applications, but I suspect I'll start hearing from a few sooner or later here. I did this mainly because I thought it should exist and as an intellectual exercise, but I'm happy to keep working on it as long as it's interesting to somebody.
Also, thanks to Nelson who pointed out that I was doing string concatenation in a dodgy way and suggested a better way to do it on his weblog. I added one little nuance to his suggestion — the eBay API servers become angry if you include a superfluous linefeed at the end of an XML document you submit, so my version of his suggestion includes the close-triple-quotes right after the end of the XML instead of on the next line.
Here's a code example to see how crazy simple Python makes this. To download eBay's category taxonomy (a 9MB+ XML file), you do this:
from eBay import Categories
cats = Categories()
Update: I created a project page for this, view more information and download the code here.
Updated pyeBay to support search. It returns search results in raw XML format now, which is something that should be fixed. (My idea is that XML is just one of several formats that you could conceivably want — a dictionary comprised of Item objects is another, and a formatted string is yet another.)
I also refactored the creation and initialization of the Session object so you can do basic operations with just three lines of code, no explicit initialization necessary. Behold:
from eBay import Search
theSearch = Search()
Update: I created a project page for this, view more information and download the code here.
eBay API Python Module: pyeBay
I refactored one of the eBay API Python examples found on our Web site into a reusable component that I'm calling pyeBay. This is version 0.1. All this does is wrap the GeteBayOfficialTime call, so it's not useful for creating real applications (yet). But it is hopefully a good foundation for building out something that is — it establishes a pattern and provides some base functionality that should make creating wrappers for the other calls relatively straightforward.
Open-source goodness, by the way (provided under the BSD-like MIT license).
Update: I created a project page for this, view more information and download the code here.
New eBay Developer Centers Launched
We provide assistance to eBay API developers in various ways, including terrific documentation, developer technical support, a developer community, and so forth. But our Web site never really laid it out for developers in a step-by-step way, with specific, one-stop guidance based on your choice of language and platform. As of today, we do. We now have resource centers for Windows developers, Java developers, and everyone else.
Tell me what you think. Also: we're going to do more of these in the future. Which languages/platforms would you like to see? Now that I am teh ub3r Python haxx0r my impulse is to do a eBay API Python Developer Center, but to be honest we don't have enough Python-related content for that (although I'm working to change that — more info on that soon). The short-term solution might be to have a LAMP developer center, with a similar agenda to sites like OnLamp.com, that would incorporate Perl and Python and some other stuff.
My User Group Talk, Sans Verbs
Aaron Johnson provides an abridged version of the talk I give at developer groups — this is a rough summary of the talk I gave at the Boston .NET user group back in June. Aaron captured all the high points but omitted all the jokes. (Which is probably for the best.) It looks like nobody caught the fact that I was sick as a dog when I gave that talk. Right after I was done talking, I walked to the back of the room and started seeing these huge white spots floating around the room, which I interpreted as my body's signal that it was time to pass out. (Happily, I remained ambulatory.) The show, it must go on.
Write Open-Source eBay API Applications Now!
Last summer, Tim O'Reilly asked me and my pal Jeff Barr from Amazon to speak on a panel at OSCON 2003. The topic of the panel was "Web Services Bill of Rights." Tim's premise was that open source guarantees certain rights to developers (and, by extension, to users) that may become threatened in a world in which our applications interact with hosted Web services providers (like eBay, Amazon, Google, Salesforce.com, and so forth).
Great topic for discussion. It's why Tim has a Northern California Society of Technology Visionaries golden membership card while you and I have to work for a living. I liked the topic so much, I turned it into a job interview question: "There's a panel called Web Services Bill of Rights at this crazy conference of open-source developers. I am scheduled to speak on this panel in three weeks. Should I even show up?" This interview question was so effective that no candidate who was asked the question was ever hired. (I had to stop asking the question after a few months, but it cracked Tim up that we did that.)
I was honored that Tim asked us to speak, but some of my cow orkers had concerns — should we even be participating in this kind of conference? What do open-source developers have to contribute to eBay anyway? Is there risk in evangelizing the eBay API (an offering that is not-free as in free beer and not-free as in freedom) to this audience? Would a penniless hippy open source developer even plunk down the $100 fee we charge to go live with an application? At that time, our program had been in existence for a few years but but it had only been open to the general public and free to sign up for a month. What if somebody asked a question we weren't prepared to answer?
Needless to say we did the panel and all went well. The only hard questions asked by the audience were directed at Jeff, typified by a clueless and off-topic bomb tossed by Dave Winer, who tried to take poor Jeff to task for the fact that Amazon is a "patent abuser" (Winer's words). Somebody did ask me why the source code for eBay isn't available, but the audience laughed at him. The point is, any schlub can write an online auction engine and many schlubs have — eBay itself was written over a three-day weekend by a Perl hacker — but the value in what eBay provides isn't in the software, but instead in the marketplace, so even if you could gain access to the source code, you wouldn't necessarily gain much — it certainly wouldn't guarantee the kind of "right" that Tim talks about.
That said, there is plenty of open source in eBay's DNA — most notably Apache Axis, but other stuff as well, including Perl and PHP.
Fast forward to January of this year, when this thread appeared on the Gentoo Linux discussion forums — legions of rabid Linux developers are mad for a Linux eBay listing solution! Woo hoo! The most interesting thing about this thread was that so many Linux users and developers were surprised and gratified that I would take the time to sign up for the Gentoo forums and start posting there to answer their questions and help them out. In other words, while we were sitting around wondering whether open-source developers would accept the eBay API, these guys were sitting around wondering whether we would accept them.
The Gentoo project never got off the ground — the choice of C++ for a language wasn't the best, I think, but more importantly, the organizer whipped the crowd into a frenzy, then disappeared into the wilderness without checking in any code — seems like there should be a specialized geek pejorative to describe this scenario. But the discussion we had with those guys was very instructive. We learned that there are many Linux users who don't want to use a Web app to use eBay — Web apps are not responsive or rich enough, and eBay.com is not customizable enough or optimized for high-volume selling. These users should absolutely be accomodated. At the same time, even if we lived in a world in which Linux were deployed to, say, 10% of desktops around the world, the extent to which eBay would support them would probably be limited to a Web site called eBay.com backed by an XML-based API. This leaves it up to the community to make rich eBay tools on Linux happen.
So I am here to say that there is absolutely no good reason why open-source applications that use the eBay API on any platform do not exist. Somebody just needs to build them.
There's certainly no legal reason. (We don't care how you license your app as long as the way it works adheres to our license agreement and our published set of certification best practices.) Funny story: earlier this year I was working on a project that required approval from our legal department for something. One of our mucky-muck attorneys asked me, unprompted, "are you going to open-source this when it's done?" I was taken aback, but I shouldn't have been — the attorney realized, correctly, that the code isn't what matters. For us, the marketplace is what matters, not the code. The code only has value when it's shared promiscuously.
To make open source projects happen, somebody has to step up, do some work, and make some judgement calls. I'm happy to do this, but I'm not comfortable taking something like this across the goal line myself, because I don't think that one guy working on an eBay API app in his off-hours is going to produce the best possible outcome. I have done a few things, though. I realized after Mono got close to shipping that C# might be a good choice of language because it would theoretically let developers target Windows, Linux, Max OS X and others, and because C# is a kickass, high-productivity language that your friends will not make fun of you for using. So I started a project on Novell Forge as a place where a hypothetical cross-platform C# eBay API application could live. There's nothing checked in there yet, unfortunately, which probably makes me as bad as the Gentoo guy for sucking all the oxygen out of the project.
But! To prove that I am not a complete loser, I have released a couple of command-line utilities under Creative Commons licenses to facilitate chores like downloading the eBay product category taxonomy. I've also filed bugs (like this one and this one) against Mono (at the moment it may be possible to use Mono to build eBay API apps, but you would have to use the post-1.0 release bits located in Mono's CVS repository). I have bad brains for CVS, though, which hinders my ability to see whether late-breaking fixes to Mono have resolved issues (cited above) that prevent you from using it to write eBay API apps today. My CVS impairment also keeps me from posting my code to SourceForge or Novell Forge (I realize that I am a doof for letting this be a barrier; it's just my little cross to bear).
My fantasy is to create a code repository backed by Subversion (which I do grok, and use daily) with a slick Web front-end that enables eBay API developers to create online workspaces and work jointly on projects — like SourceForge or GotDotNet.) They will share code, create great apps that no one has ever seen before, save people time and help make their businesses better. Following that will be universal peace and harmony, and then we will sit down and have sandwiches. Afterwards, there will be massages and naps.
What a Difference a Decade Makes...
I just listed this on eBay but I thought I'd post it here because it's an amusing photo. It's the 1993 unauthorized bio of Bill Gates. Look at that handsome young man and his stylish eyeglasses! And for the kiddies in the audience, that black thing they attached to his finger? It's a floppy disk. Seriously! They actually used to look like that! Wait, you don't know what a floppy disk is? Kids.
This book can be yours — click here.
At the eBay Developers Conference
Tim O'Reilly is on stage giving his great talk about technology paradigm shifts and emerging "new platforms" such as eBay and Google.
I'm not sure if I will be able to post photos from my mobile device, but I'll give it a crack here in a sec.
eBay and RSS on InternetNews.com
Speaking in Boston Wednesday June 9!
The McManus World Tour continues with a talk at the Boston .NET user group, which will convene at the palatial Microsoft facilities in Waltham on Wednesday June 9 at 6:30PM. C'mon by and say hi — this will be the last user group I do before our Developer Conference at eBay Live later this month.
Three Weeks Until eBay Live!
eBay Live is on June 24-26 and the eBay/PayPal Developer Conference is June 23-24. We've been planning this for months but it's just now starting to kick into high gear. I gave an aggressively virtual walk-through of my introductory eBay SDK talk yesterday which went well (although "aggressively virtual" in this case means I didn't have time to do the accompanying Powerpoint deck I was supposed to do, oops). Fortunately I've given this talk in a number of forms a couple dozen times in the last year so it should be good even if I'm slightly undercaffeinated.
Yesterday in IMs I demanded that Scoble attend and he said he would try to make it. Let's everyone lean on him a little bit to make sure it happens.
You'll want to make your travel plans now if you plan on going.
eBay Announcements via RSS
Starting today you can get eBay announcements (special offers, promotions, etc.) and system status messages via RSS. Highly recommended if you use a weblog reader and are the least bit serious about using eBay.
Fun with the Borland Crew at Tech Ed
We were hanging out with Borland this week to announce a bundling deal — the eBay SDK is going to ship in the box with the next version of Delphi, which should be very cool. I also got a chance to check out some of their new releases such as Together, a very cool modeling tool that now supports both C# and VB.NET.
At Tech Ed This Week
I'll be at Microsoft's Tech Ed conference in San Diego this week. On Tuesday and Wednesday I'll be camping out at the Borland booth for a little while, come by and say hi!
Good News, Bad News
I really hate it when my car breaks down. It's really just a matter of inconvenience and money, but for some reason I get all bent out of shape about it. It could be that I know zero about cars and I feel totally helpless when something goes wrong. I can't even change a tire. I'm a loser, I know.
I perked up significantly this afternoon when I found out that I'd won this huge award at work. Among other things, my internal evangelism of weblog and RSS technology was called out in the award. You can see this today on the Developers Program weblog, but you'll start to see this technology appear in more places on eBay soon. If you are a developer using the eBay API, the weblog is now the best and fastest way to get information regarding what's going on with the API platform. Soon you'll be able to get this kind of information for the main eBay.com site as well, which will be most excellent for buyers and sellers as well as developers.
I'm totally humbled by the award — today I'm the lone geek sitting in a business unit populated by mostly MBAs, so when I came to work here I wasn't 100% sure that I'd fit in, and even if I did if I'd be able to accomplish anything significant. I am now 100% sure. :)
Update: Just got off the phone with the shop, the car is fine — just a dead battery and a blown fuse.
"eBay Basics" C# Example
For the (numerous) user group talks I've been doing in the past few months, I've spent most of my time with one demo that shows three common eBay API calls — GeteBayOfficialTime (the "hello world" of eBay programming), AddItem, and GetSearchResults. Several people have asked me to make this demo available, so
here you go:
Update: I finally got around to revising this to support the authentication system we rolled out last year — you can now find this example on our examples site.
Reminder: Invading Florida this week
I'll be doing two user groups in Florida this week — Tuesday night in Boca Raton and Wednesday night in Tampa. As usual I'll be preaching the gospel of building applications that incorporate the eBay API and also giving away goodies. Both meetings start at 6:30PM. See you there!
Reminder: Speaking in NYC Tonight!
I'll be speaking at the New York City .NET Developers Group tonight. Stop by if you're in the neighborhood! Details here.
What About Chat?
I need to start doing Web-based chats once or twice a week for work. From having done online community technology and services as a consultant in the past, I know that it's very easy to do this badly (and the number of product choices has decreased in the past few years).
My thought is that we could just do something easy and simple to start -- maybe even using IRC if that's workable. Is IRC hopelessly geeky? Is there a better chat package (preferably a hosted service) out there I should be looking at? What do other developer communities use for real-time stuff?
A Lower Erdos Number on eBay
Reminder: Speaking in SF Tonight!
I'll be giving my talk on developing applications using the eBay SDK for Windows tonight at the Bay .NET User Group meeting in San Francisco; details here. See you there!
Wednesday 7. April: eBay API SOAP and Java Webinar
My team is hosting a free online webinar tomorrow morning at 10AM Pacific to introduce eBay's new Java and SOAP APIs. Attending the webinar is free, but you must sign up in advance.
Build an eBay SDK Search App with .NET
I didn't get a chance to post this when it ran last week 'cause I was on vacation, but the good peeps over at MSDN ran a short article I wrote on creating an eBay search application using VB .NET and the eBay SDK for Windows.
May 4-5: Boca Raton and Tampa .NET User Groups
The McManus World Tour wends its way to the southeast U.S. with two dates in Florida in May. I'll be speaking to two .NET user groups -- Boca Raton on 4. May and Tampa on 5. May. I'll post more details here about location, etc., as I get them.
24-26 March: VSLive San Francisco
The eBay Developers Program will have a booth at VSLive SF next week. Stop by and say hi if you're at the show; I'll be in the booth most of the time except for the occasional WC break, etc.
26. April: Speaking in Redmond
Updated with a better link to the information about the time, location, and description of the talk.
I'll be speaking on programming the eBay SDK using .NET on the Microsoft campus in Redmond on Monday, April 26. This is the regular meeting of the Seattle .NET Developers Association; if you're in the neighborhood you're invited to stop by and watch me goof off in front of a crowd in yet another city.
20. April: Speaking in San Francisco
I'll be speaking to the Bay .NET User Group in San Francisco on Tuesday, 20. April. This will take place at the Microsoft offices in the Landmark Building at One Market Street at 6PM (details and directions are here). I'll be talking about writing software apps that integrate eBay using our Software Development Kit for .NET — I'll also be giving away goodies. See you there!
30. April 2004: New York City .NET Developers Group
I'll be giving my talk on programming the eBay SDK for Windows at the New York City .NET Developers Group on Friday, April 30. If you're in the city, c'mon by! I'll be giving away eBay gadgetry and a few copies of my books, and eBay's springing for pizza as well.
Quickbooks and eBay Integration
Quickbooks released a sample application for sellers to make it easy to import information about their eBay transactions into QuickBooks.
eBay Command-Line Utility: ValTest
This is kind of an obscure one but it's something that virtually every developer who uses the eBay API needs to get started, and someone sent me email asking for it tonight, so here you go.
To sell items on eBay.com, you need a feedback rating of 10 or more (or you can pay US$5 and go through an "ID Verify" process). But for developers creating applications using the eBay API in the sandbox test environment, this doesn't make sense. To "bless" a sandbox account to enable that account to perform seller functions in the sandbox, you instead execute the ValidateTestUserRegistration call. It's not brain surgery (it's like 10 lines of code to create an ApiSession object using the SDK and two or three lines of code to place the validation call), but it seems kind of dumb that developers should have to write code for an operation they only need to perform once.
So I wrote a command-line utility called ValTest that makes this call for you. Like the GetCats utility I released a few weeks ago, I'm releasing this into the wild under the terms of the Creative Commons Attribution License.
Download ValTest (source and binaries, version 1.0.1530.41133, 10. March 2004).
This should build and run under Mono on Linux, but I'm still waiting for a brave Mononista to step up and try to build and run one of my little creations on Linux. Please let me know if you have any luck!
Creating eBay Apps with Microsoft Office
I'm quoted in a Seattle Post-Intelligencer story that ran today on integration between Microsoft Office 2003 and eBay.
1. March: Speaking in Vancouver
I'll be heading north of the border on Monday to give a talk to the .NET User Group of British Columbia, Canada. This will get started at 6:30PM at the ActiveState offices located at 580 Granville Street in Vancouver. I'll be giving a talk and demonstrating how to create .NET applications that connect with eBay —I'll also be giving away cool goodies. See you there!
How To Be A Corporate Spokesman
It's important that you have a professional-looking "head shot" to present the best possible corporate image if you're going to be speaking on behalf of your company. Make sure you wear a shirt without too many spaghetti stains on it and above all, you must put on your corporate "game face". As you can see from this photo, it helps to appear as if you are pantsless and sitting in a vat of warm vegetable oil. If you don't have a vat or a warmer handy, you will have to use your imagination.
Be absolutely sure that you stop drinking from the bottle of bourbon you keep in your desk at least fifteen minutes before the photo shoot is slated to begin.
All corporate spokespeople sometimes have a bad day. It's your duty to keep a professional demeanor and not let your personal feelings intrude upon the job you must do on behalf of your organization.
When all is said and done, at the end of the day, it's nice to just sit back, adjust your belt, and think about burlap sacks full of puppies being subjected to some sort of terrifying and unspeakable industrial process.
Interview in App Dev Trends
An interview we did with Application Development Trends magazine on the eBay Developers Program ran today.
How to Have Fun At Conferences
Step 1: Locate CEO of competing company. Step 2: Stalk him. Step 3: Wait until there's a lull in the conversation. Step 4: Introduce yourself. Step 5: Tell him that you're a member of his developer program, so he should come sign up for yours because fair is fair.
Well, I didn't convert him, but it was amusing to give him the pitch anyway. (He asked me if I got a bonus if I succeeded in signing him up. I told him no, I was doing it for my own personal amusement. He was very nice, actually.)
It just occurred to me, in the past two weeks I've been in the same room as Amazon's CEO, Google's co-founder, and eBay's CEO. This makes me feel like a very prominent corporate remora; I am feeding on the most tender bits of jetsam clinging to the belly of the beast known as the internet.
Anyway, my team and I are having fun chatting up developers and press here at O'Reilly eTech in San Diego; it's good to meet new folks and bump into old friends, and our efforts are starting to achieve results, which is great to see. Tomorrow afternoon I'll be giving a talk on eBay integration which I'm really looking forward to — be sure and stop by if you're at the show.
eBay Command-Line Utility: GetCats
A month or so ago I wrote a little command-line utility that downloads an XML file containing the entire contents of the eBay product category hierarchy (comprised of tens of thousands of nested nodes). It's about a hundred lines of code, no big whoop. But GetCats also does something that I've never seen before -- it uses a component called XmlDiff (provided by Microsoft for free) that compares the current version of the category structure to a previous version, if you have one on hand. That way you can see what categories were changed — eBay changes the categories once a month, adding, removing, and combining categories (a good example of a big recent change was the split from "Computers and Electronics" into separate categories for "Computers" and "Consumer Electronics," but most of the changes are more subtle because they occur at a lower level of the hierarchy). So having the categories is nice, but having the diff is really nice. And because every selling app needs access to the category hierarchy, it occurred to me that having a utility that gets the categories and runs on any platform would be super duper.
I demoed this utility at the O'Reilly Emerging Technology Conference this week (to the extent that you can "show off" a command-line utility). But after recently talking to some cool Linux developers who are looking to create their own eBay tool using our API, I wanted to see how hard it would be to build a version of this that (might) run on Linux. Mono is the obvious choice here, since it's the furthest-along implementation of C# for Linux. And lucky me, the Mono team just revved it (to 0.30) and there's a version of the compiler that runs on Windows.
So...I was able to compile GetCats using mcs, the Mono C# compiler. I don't suppose that means that it will necessarily work on Linux with Mono, but I think it might. Here's where I could use some help:
Are you a Linux developer, currently using Mono or not, currently using the eBay API or not, who would be willing to take the final step and test this on Linux with Mono? It would probably just take a few minutes (you would just need to build a single-class project and run it on Linux.) If you're interested in helping out, please download the distribution I've posted below, build it on Linux using Mono, and let me know how it goes.
Update: Download source and .NET binaries for this here.
PayPal SDK for ASP.NET
Our buddies over at PayPal have released an SDK for ASP.NET developers. It contains a set of ASP.NET server controls with designer support.
Most PayPal integration points involve creating a Web page that submits a form with payment information to PayPal.com; but there's a wrinkle in ASP.NET — it takes over the <form> tag for its own use, so submitting a form to a different site isn't straightforward. The PayPal server controls resolve this problem, redirecting you to PayPal.com for payment processing in a straightforward way that in most cases doesn't require any code.
I have been playing with this over the past few nights and ran across a funny with the way the SubscriptionButton works. I got it working after experimenting with it a bit and posted my workaround on the PayPal developer board.
Pierre on Typepad
It was most excellent to find Pierre Omidiyar's weblog today, it looks like he just switched over to Typepad last month. (Pierre is eBay's founder and chairman.) This makes Pierre the third eBayer that I know of with a weblog — with more to come soon. Micah is the other blogging eBayer — email me if you're an eBay employee with a weblog you'd like to share with the world.
How to Brainstorm
I like brainstorming. I have this tendency to be really critical in brainstorming sessions a lot of the time, but ultimately I think that the best brainstorming sessions happen when participants try to come up with both the best idea and the worst idea. I think I may have accomplished this when we recently tried to cook up a catchy new name for the eBay Developers Conference (which will take place in New Orleans in June of 2004). I won't say what I think the "best" name was until the name of the conference is officially announced, but I will share what I think the "worst" name was: "eBay CODE HOOTENANNY 2004." Dig it!
Labtops, chandaleers and camras
Today the New York Times has a humorous story about people who capitalize on the fact that many eBay sellers can't spell. As you might expect, this becomes a source of arbitrage, introducing an inefficiency into the market that good spellers can exploit (by purchasing items at auction from people who cant spel guud) and reselling them in a listing that's spelled correctly.
Adding a second category to an existing item
To help buyers find an item you're listing for sale on eBay, correctly categorizing the item is key. Often items will sell for less than market price because they're listed in sub-optimal categories. And while many buyers discover items to purchase by using keyword search, many use the Browse feature (found at the top of nearly every page on eBay.com). This is particularly true for unusual items, items that don't have brand names associated with them, and so forth.
There are more than 45,000 product categories on eBay, and new subcategories are being added all the time. It shouldn't be difficult to find one that applies to your item, but what happens if the thing you're selling could be put in two categories? We can make this happen for you -- it's absolutely possible to list your item in two categories simultaneously. You can do this even if you've already listed an item by using the Revise Your Item form. Here's a walkthrough:
1. Make sure you're logged in to eBay with the user ID you used to list the item.
2. Go to the page for your listing and click on the "Revise your item" link.
3. The rules for revising items are displayed. It's always OK to add a second category or add features such as boldface or subtitles, but there are rules regarding changes in the description of the item and so forth -- those don't apply here, so click on the Continue button.
4. Click on the "Add second Category" link about halfway down the page on the right.
5. You'll be taken to familiar six-deep category selection page similar to the one you used when you first listed your item. Choose a second category for your item, then click on the "Save Changes" button at the bottom of the page.
6. You're taken back to the "Revise Your Item: Review & Submit Listing" page. You should now be able to see that the second category you selected has been added. Scroll to the bottom of the page and click on "Submit Revisions".
Note that there's a fee (currently 30 cents on eBay.com) associated with listing your item in two categories. But for items that can be classified in multiple categories, the additional exposure is often more than worth it -- the more eyeballs that hit your listing, the more likely people are to bid, and the higher your final selling price can be.
Note that developers who create software applications that integrate eBay can incorporate this functionality into their software as well -- use the ReviseItem call to do this.
Feb. 9-11: At O'Reilly Emerging Tech in San Diego
I'll be at the O'Reilly Emerging Technology conference in San Diego next month. The eBay Developers Program will be a co-sponsor of the show and I'll be giving a talk as well. Stop by our booth and say hi if you're there!
New eBay SDK article on DevX.com
I've got a new article on the eBay SDK up at DevX.com. This one is a little different than the one I wrote for the O'Reilly OnDotNet.com site a few months ago; this one starts from the premise that you've got an existing product database of some kind and from there discusses how you'd start to integrate that with eBay. For those of you scoring at home, it covers the AddItem and GetSellerList calls.
Feel free to drop me an email or leave a comment here if you've got any questions about the article. If you want to kick the tires on the code examples I wrote for the article, you'll need to first sign up for the eBay Developers Program. Windows programmers, choose the SDK door on the left; non-Windows programmers, through the XML-based API door on your right. That is all.
XML Export from Your eBay Store
eBay Stores are a way to provide a more durable presence on eBay. Rather than listing in a conventional format (which lets you list an item as an auction or at a fixed price for 1, 3, 5, 7, or 10 days), an eBay Store lets you list items for up to 120 days or more. Your store can also have a customized look, logo and easy-to-remember URL, as well as some other goodies like promotion and monthly reporting. If you're serious about selling on eBay, having a Store is a great way to carve out your own niche.
The other day somebody asked me if there's a way to get your eBay Store inventory into XML format. As it happens, that feature is built in. Here are step-by-step instructions to get your Store data automatically converted to XML:
1) If you haven't already, set up your store. Do this by going to http://www.stores.ebay.com and click on the "Open your store now" link in the upper right corner of the page. (If you're not a U.S. user, replace ebay.com with your localized site name; for example, UK users go to http://www.stores.ebay.co.uk, etc. Note that in the UK and elsewhere, "stores" are called "shops" because most people around the world don't speak fluent American yet. Also note that this feature only works for U.S. users today; it will work for international users after January 6, 2004.)
2) Go to Store Builder (the configuration form you used when you first set up your store). Scroll down to the bottom of the page and check the appropriate boxes that correspond to the data you want to export. Here's a screen shot with a giant red arrow (added by me) to show you exactly what to do.
3) Within 12 hours the big eBay XML-o-matic will find your store and painlessly convert all your listings into XML format. You can then get to this XML data by navigating to the URL http://esssl.ebay.com/GetListings/MyStoreName, where 'MyStoreName' is the name of your eBay Store.
Updated to clarify that the XML dump is for stores inventory only and that international users can't get to this until 6. January 2004 (thanks Katie!).
eBay and Search
If you've used Google more than once, you've probably noticed that eBay purchases a lot of Google keywords. You can see this when you do a Google search on an eBay category (say, toys) and see the eBay-sponsored link almost invariably come up alongside your search results.
You may wonder why eBay listings don't often come up for "natural" (non-sponsored) searches. It's because eBay.com historically wasn't optimized to facilitate crawling by search engines (and, in fact, this was explicitly prohibited in the past). This is starting to change -- today the site announced that eBay Stores listings will start to appear in search engine results.
New Orleans in June: Sounds Moist
Every year eBay has a conference comprised of buyers and sellers; it's called eBay Live. In 2003 it was in Orlando and it attracted about 10,000 people. It was approximately twenty times nuttier than you can possibly imagine. But it's serious fun, too -- there are a bunch of sessions with educational topics for buyers and sellers, as well as booths for vendors and all the good things you'd expect from any conference. At the same time: very nutty.
This year our group had a developer event that ran concurrently with eBay Live. In 2004 we'll be doing a bigger and better developer event that will kick off a few days before eBay Live, so developers can come to us for the technical goodness, then go off and get crazy with the throngs at eBay Live proper. We just started planning content for the 2004 developer event and I'm starting to get fired up about it; next year's event will have more technical content than this year (including some language- and platform-specific sessions) as well as timely information about new and upcoming features of the API.
Nothing's set in stone yet, so there isn't much of anything concrete to report, other than the fact that we've gotten the ball rolling and I'm signing up to do so many sessions that the audience will probably be throwing rotten pomegranates at me by day 2 of the conference. I'm really looking forward to schmoozing in New Orleans this summer, though, even though I imagine it will be a bit on the muggy side. I'm sure they've prepared a go-cup with my name on it already.
Update: I thought I was jumping the gun by mentioning this, but as it happens, there's already discussion on the 2004 show on the eBay message boards. I guess people are already making hotel reservations...
Forbes on Connection to eBay
Forbes ran a pretty excellent article on Connection to eBay, an Accenture company that focuses on helping manufacturers and retailers add eBay as a sales channel. The article provides a great description of what C2eBay does, but they didn't mention that there are actually a bunch of companies that can help with various aspects of getting big businesses hooked up with eBay (helping businesses with the technical aspects of this is what my group is responsible for at eBay).
Government Weblogs: rssgov.com
Here's an excellent site on the use of weblogs in government. A quote:
If you as a government information provider think that visitors will continue flocking to your sites through traditional surfing, following links, or saving bookmarks.... think again.
One-to-many information management is a big problem in a world in which email utterly wrests control from the user, is bogged down with spam, and breaks when the recipient changes jobs or companies. Yet the information has to get out there, particularly when the world changes quickly and the stakes of missing a message are high. We have the same kinds of problems broadcasting information in a sensible way at eBay.
Question for the multitudes: Would you like to see information on the eBay Developer Program (or other useful resoures such as the eBay Announcement Board) in the form of an RSS-capable weblog? Would it make your life simpler? If so, I'd love to hear from you.
Space Shot on eBay
From Slashdot: Got a payload you'd like to shoot into space? These dudes are auctioning a microsatellite launch on eBay. Opening bid, $250,000, pre-approved bidders only, so no fair putting your baby brother into orbit.
eBay SDK Article on OnDotNet.com
I've got an article up today on O'Reilly's OnDotNet.com Web site. It's on creating eBay applications using our SDK for .NET. It basically takes the tossed-off snippet I posted here back in September and explains it in more detail, building it out into a glorious explanation of how to list items and search on eBay using software you write yourself. I only had space to cover the tip of the iceberg, but hopefully from the article you can get a sense of how things go.
Remember that if you aren't all about .NET, you can still write eBay apps, 'cause we have a cross-platform XML-over-HTTP API as well. All the goodness is at http://developer.ebay.com.
Evangelism is Fun
Make your own personalized church sign here.
Update: The really funny thing about this is, for about 10 seconds my boss thought this was real.
Off to L.A. for the PDC
I'm heading off to Los Angeles in a few hours for the Microsoft Professional Developer's Conference. If you're planning to attend too, here's a reminder to stop my birds-of-a-feather session on the eBay SDK for Windows on Monday night at 9PM in Room 401AB.
Los Angeles is a funny place for me. I grew up there, but I hardly ever go back. That combined with its sprawl means that I feel more at home in Manhattan or London. I certainly get lost in New York less often...hmm.
Update just heard that the LA airport is
closed on a restricted schedule because of the haze generated from brush fires an FAA facility was evacuated because of the fires. If you're flying down there today, you'll want to check in with your airline to see what your options are. United Airlines is saying that my flight is going to leave and arrive on time, yeah right. My trust in big government led me to the FAA site, which says that flights from San Francisco to LAX are being delayed 45 minutes or more. (I wound up getting here five hours late, but I made out better than some people.)
Going live with the eBay API
In July we let individual developers get started using the eBay API for free. As a result, pretty much everybody signs up for an "individual" account, even people who were working for corporations who intend to get real commercial licenses later on. That's totally no sweat -- the "free trial" aspect of the individual license is one of the reasons why we created it.
But let's say you're written all your code and want to launch a real application. How do you do it? Two options:
1) Retain your individual tier license: Do a self-certification and pay $100 via Paypal. Under the individual tier, you're limited to fifty API calls per day (except for AddItem and RelistItem, which don't incur any API fees or limits at any tier)
2) Upgrade to a commercial license, go through eBay DTS certification ($200; free for Enterprise licensees). At the Basic commercial tier you get 30,000 API calls per month for free; you can pay for additional calls on an a la carte basis.
After you do either of these two things, you'll get production keys and your application can start working against the production site. And at that point, you are happening.
Pricing and benefits for all four flavors of our API license are summarized here.
Updated Thanks for Oliver Thylmann for reporting the mistyped link.
O'Reilly "eBay Hacks" Book is out
O'Reilly's "eBay Hacks" book is out. It's got an introduction by the most excellent Cory Doctorow (who you may know from his regular contributions to the BoingBoing weblog, his science fiction writing, or his good work with the EFF).
Surprise, they sell that on eBay too
Converting from GMT in .NET
Patrick Steele posts a neat tip about how to convert from Greenwich Mean Time to local time using .NET. As it happens, it's crazy easy.
This tip is particularly useful for eBay API developers because 1) the current time is very meaningful when you're buying and selling in an auction format, and 2) all of the timestamps returned by calls to eBay API are in GMT.
One long-lost brother, no reserve!
A guy bought a cookie jar on eBay and the seller turned out to be his long-lost brother. Freaky.
Microsoft PDC: I'll Be There, Maybe
...unless of course I get hit by a bus or thrown in jail or something.
I have but one demand: Vote for my birds-of-a-feather session and I promise nobody gets hurt.
Update: My talk was approved; thanks for your votes.
eBay SDK 'hello world' in C#
I figured that since I addressed one of the most remote edge cases of eBay API development the other day, I should close the loop by posting one of the most common cases (using the SDK with C#).
Using the SDK for Windows is cake compared to the API way (which takes about 100 lines of code to do the same thing, forcing you to use MSXML to handle XML parsing and the HTTP request and response). This SDK version of GeteBayOfficialTime also has the benefit of returning a DateTime type, whereas the API way returns an ISO date that you have to parse to play nice with VB6 or .NET.
Update:You can find this example on our code examples site.
eBay API "hello world" in VB6
eBay provides two levels of access for developers: the API, which is a cross-platform XML-over-HTTPS affair, and an SDK for Windows (specifically designed to accelerate COM and .NET developers).
A while back, we dropped support for developing SDK applications on Windows 98. You can still develop eBay apps that run on Windows 98, you just have to use the API. This means you don't get a lot of the XML- and HTTPS-handling goodness provided by the SDK. And unfortunately there weren't any good code examples of how to use the API from VB6...until now.
I'm insane, so I wrote a VB6 "hello world" application that uses the API only, not the SDK. Note that you should absolutely use the SDK if you're developing on VB6 (or .NET) with a later version of Windows -- don't use raw API calls on Windows 2000 or later, even you are insane like me. But if you are one of the four people in the world who uses VB6 on Windows 98 to develop eBay apps, this code example goes out to you! (You might also find this interesting if you want an introductory peek into how the eBay API works.)
This code example doesn't do anything particularly dazzling, it just formats and submits an XML document to eBay's "sandbox" (test) server and gets back the eBay "official time". Fun fact: only about two-thirds of the items sold on eBay are actually sold at auction (the rest are fixed-price or "Buy It Now" listings). But for those items that are listed in an auction format, having auction management software that knows the correct time as defined by eBay is pretty important. Hence, the GeteBayOfficialTime API call. (GeteBayOfficialTime is also a nice one to use for demonstrations because it's one of the simplest calls in our library of 40 or so API methods.)
You'll need to get a developer key from the eBay Developer Web site and plug it into the configuration file of this application for it to work. Feel free to post comments or questions here or (better yet) on our developer forums.
After avoiding the GIF graphics format like the plague (probably because of intellectual property issues -- the Unisys patent on GIF just expired), eBay started supporting the GIF format for photos in item listings last month. Never mind that there's very little reason to use that sad little format these days (use JPG -- most digital cameras output in that format natively anyway), but I'm sure for ten people in the world it's going to be useful.
To get folks fired up on GIFfy goodness, there's a "penny gallery" special this week on eBay -- on Tuesday and Wednesday most Gallery listings will only set you back a cent.
What I'm working on
I work in developer relations at eBay. One of the things that I do here (besides get coffee and take dictation) is to make it easier for third-party developers to write software applications that incorporate the eBay marketplace. You didn't realize that it's possible to write software applications that incorporate the eBay marketplace? Neither do a lot of people. So it's a darned good thing they hired me.
All this week I'm talking to developers who have licensed the API but haven't launched applications yet. Usually people pay money to license our API (although it's now free to get started). So that means that if you licensed the API like a year ago but haven't launched an app yet, something's goofy. My job is to figure out what that goofiness is, exactly. Fortunately for us, not many of the companies I'm talking to are saying that there's anything wrong with the API itself, which is good I guess.
The API has got some goodness to it for sure. I gave a demo of a particular feature of the eBay API (SOAP-based callbacks from eBay to your Web server to provide alerts for interesting events such as the end of an auction) at VSLive NYC back in July. Maybe if I get all motivated I'll plunge into the API documentation and dissect the calls one by one kinda like the way Don Box does with obscure .NET framework calls.