Don Smith has a post entitled One parameter to rule them all: Part 2 where he writes

In my post yesterday, I recommended that Web Service operations should only have a single input parameter rather than multiple for the sake of versioning.
Suppose we want to send version information to the operation. In the example above, there's nowhere for it to go. "Why would we want to send version information to the operation?" Because as we version the operation, we should include version information so it's obvious what changed in each version. We can't get that information by simply adding new parameters to the method signature. I'm not going to go into it here (I will in my article) but there is a approach Doug talks about here about how to version datatypes that contain this version metadata. By using a single uber-parameter, we can include the traditional parameters as well as any metadata we need to send like version infomation. Then, instead of having to check for nulls, we can switch on the version metadata.

To me this seems to imply a simplistic view of the problems inherent in versioning XML Web Service end points and also pushes unnecessary API clutter on users of the end point. So imagine that in v1 of the end point, the GetTemp method takes a city and zip code then in v2 an optional zip code is added. To me I'd rather have developers know they can either call

MyService.GetTemp("Redmond", "WA");
MyService.GetTemp("Redmond", "WA", "98052"):

instead of

MyService.GetTemp(new TemperatureRequest("1.0", "Redmond", "WA"));
MyService.GetTemp(new TemperatureRequest("2.0", "Redmond", "WA", "98052"));

For one, the latter is less straightforward than the former. Also the developer has to know how to manage interdependencies between properties of the TemperatureRequest that are set if there are any that are mutually exclusive, know which properties are required and whether to initialize primitive values in the object to defaults without any help from the API. Of course, all this will be in the documentation but APIs should be designed so their behavior is intuiive not so that one is required to read all the documentation before one can get things done.

The other reason I like the former is that it carries the impression that the XML Web Service end point is unchanging while the latter does not. This is not really a tachnical reason but it makes it less likely that the designer of the service will change the behavior of that particular method at specific end point if its contract never changes.

My dayjob now involves designing XML Web Service end points so you'll probably start seeing more XML Web Services related posts from me.


Categories: XML Web Services

Tim Bray has a post entitled More Relax where he writes

I often caution people against relying too heavily on schema validation. “After all,” I say, “there is lots of obvious run-time checking that schemas can’t do, for example, verifying a part number.” It turns out I was wrong; with a little extra work, you can wire in part-number validation—or pretty well anything else—to RelaxNG. Elliotte Rusty Harold explains how. Further evidence, if any were required, that RelaxNG is the world’s best schema language, and that anyone who who’s using XML but not RelaxNG should be nervous.

Elliote Rusty Harold's article shows how to plug in custom datatype validation into Java RELAX NG validators. This enables one to enforce complex constraints on simple types such as such as "the content of an element is correctly spelled, as determined by consulting a dictionary file" or "the number is prime" to take examples from ERH's article. 

Early in the design of the version 2.0 of the System.Xml namespace in the .NET Framework we considered creating a System.Xml.IXmlType interface. This interface would basically represent the logic for plugging one's custom types into the XSD validation engine. After a couple of months and a number of interesting discussions between myself, Joshua and Andy we got rid of it.

There were two reasons we got rid of this functionality. The simple reason was that we didn't have much demand for this functionality. Whenever we had people complaining about the limitations of XSD validation it was usually due to its inability to define co-occurence constraints (i.e. if some element or attribute has a certain value then the expected content should be blah)  and other aspects of complex type validation than needing more finer grained simple type validation. The other reason was that the primary usage of XSD for many of our technologies is primarily as a type system not as a validation language. There's already the fact that XSD schemas are used to generate .NET Framework classes via the System.Xml.Serialization.XmlSerializer and relational tables via the System.Data.DataSet. However there were already impedence mismatches between these domains and XSD, for example if one defined a type as xs:nonNegativeInteger this constraint was honored in the generated C#/VB.NET classes created by the XmlSerializer or in the relational tables created by the DataSet. Then there was the additional wrinkle that at the time we were working on XQuery which used XSD as its typoe system and we had to factor in the fact that if people could add their own simple types we didn't just have to worry about validation but also how query operators would work on them. What would addition, multiplication or subtraction of such types mean? How would type promotion, casting or polymorphism work with some user's custom type defined outside the rules of XSD?

Eventually we scrapped the class as having too much cost for too little benefit.

This reminds me of Bob DuCharme's XML 2004 talk Documents vs. Data, Schemas vs. Schemas where he advised people on how to view RELAX NG and XSD. He advised viewing RELAX NG as a document validation language and considering XSD as a datatyping language. I tend to agree although I'd probably have injected something in there about using XSD + Schematron for document validation so one could get the best of both worlds.  



Categories: XML

In Jeremy Zawodney's post Are bloggers really that dumb? he writes

I'm not sure if I should be insulted, disappointed, or both. There's a lot of noise out there right now about some dummy data that ended up the website. Steve Rubel goes so far as to call this a PR crisis in the blogosphere. Even Scoble is complaining.

Jesus Fu@%ing Christ, people. It's a stupid mistake. Are we too screwed up to realize that companies are composed of people and that people sometimes make mistakes? I don't know about you, but I see really big differences between this and the Kryptonite "pick a lock with a ball point pen" crisis. (Hint: It actually was a crisis.)

Any regular reader of Boing Boing has seen this issue before. First it was the Target sells "anal massage" hubbub which turned out to be the result of the fact that basically mirrors content from but leaves off significant identifying information. Now it's the fact that is mirroring the page for the book 'Marijuana' published by Rosen Publishing. I guess bloggers are hungry to be the next one who discovers a scandal as juicy as the Trent Lott or Dan Rather fiascos.


November 29, 2004
@ 03:09 AM

Before Jay-Z: Independent Women & Bills Bills Bills

After Jay-Z: Cater 2 U


Categories: Ramblings

November 26, 2004
@ 08:03 PM

Several months ago I wrote a draft spec entitled Synchronization of Information Aggregators using Markup (SIAM) which was aimed at providing a lightweight mechanism for aggregators to synchronize state across multiple machines. There was a flurry of discussion about this between myself and a number of other aggregator authors on the [now defunct] information_aggregators mailing list.

However although there was some interest amongst aggregator authors, there wasn't much incentive to implement the functionality for a number of reasons. The reasons range from the fact that it makes it easier for users to migrate aggregators which payware aggregator authors aren't enthusiastic about to the fact that there was no server side infrastructure for supporting such functionality. Ideally this feature would have been supported by a web service end point exposed by a person's weblog or online aggregator. So not much came of it.

Since then I've implemented syncing in RSS Bandit in an application specific manner. So also have the authors of Shrook and NewsGator. There is also the Bloglines Sync API which provides a web service end point to doing limited syncing of feed state whose limitations I pointed out in my post Thoughts on the Bloglines Sync API.

This post is primarily meant to answer questions asked by Dmitry Jemerov, the creator of Syndirella who is now the dev lead for JetBrains' Omea Reader.


November 26, 2004
@ 05:52 PM

This morning I updated the RSS Bandit road map. Mostly we punted a bunch of low priority features to a future release codenamed 'Nightcrawler'. We also took one or two features out of the 'Wolverine' release. The current plan is to ship a beta of 'Wolverine' next month with the big features being the ability to delete items, newspaper views that are 100% compatible with FeedDemon Newspapers and being able to read & post to USENET newsgroups. Afterwards a final version will show up at the end of January or early in February at the latest.

There are also dozens of bug fixes in the 'Wolverine' release. Thanks a lot to the numerous users who took the time to submit bug reports and have been patiently waiting for a release with their fixes. We are now approaching the end game, a lot of the hard work's been done in the underlying infrastructure and the rest of the work left is fairly straightforward.


Categories: RSS Bandit

November 26, 2004
@ 03:58 PM

Thanks to my sister coming over for Thanksgiving I find out that G-Unit will be performing in concert in Nigeria. The interesting bit for me is that since my mom works for a TV station back home she'll get to meet 50 Cent and crew personally. While talking to her on the phone this morning it took all my restraint to not ask her to get an autograph for me.

I felt like I was twelve years old. :)


Categories: Ramblings

November 23, 2004
@ 04:17 AM

For the past few years I've used the citation search feature of CiteSeer to look for references to papers or articles I'd written and could only come up with one; Concurrency And Computation: Practice And Experience . Running the same search on Google Scholar comes back with 12 papers which reference articles or papers I've written. 

As I expected my C# vs. Java comparison was my most referenced article. Speaking of which it looks like it is about time I got cranking on updating the document to take into account Tiger and Whidbey. All I need now is some Java expert [preferrably a Sun employee] to agree to review it from the Java perspective.

I am definitely curious as to how Google could come up with a more extensive database of published papers than CiteSeer. Interesting.


Categories: Ramblings

I was procrastinating this morning from doing any real work and stumbled on a feature request in the RSS Bandit feature request database on Sourceforge requesting that we support adding links to from RSS Bandit. For those who are unfamiliar with the site, is a social bookmarks manager. It allows you to easily add sites you like to your personal collection of links, to categorize those sites with keywords, and to share your collection not only between your own browsers and machines, but also with others

Since RSS Bandit supports the IBlogExtension plugin interface I thought it would make more sense to implement this as a plugin that should just work in any .NET Framework based RSS aggregator that supports it. It took about two hours to put it together and now you can simply drop the DeliciousPlugin.dll file in the plugin folder of RSS Bandit, SharpReader or NewsGator and get the ability to post item links to  

Download it from here:

The first thing you have to do is configure the plugin by specifying your username and password. There is also the option of changing the API URL which isn't needed at the current time. The only reason that is there is because the API documentation states that the URL will change in the near future. The screenshots below should show how what this looks like

and this is the configuration dialog

Posting Links
The dialog box for posting enables you to edit the URL, description and associated tags before submitting to the site. If any of these fields isn't filled then this is considered an error and no submission is made. Below is a screenshot of the post dialog.

Known Issues
There seems to be a problem posting URLs that contain the '#' character. The website accepts the links without error but they don't show up in your inbox. I'd appreciate any pointers from anyone who can tell me what I did wrong.


Categories: RSS Bandit

I just noticed the eWeek article MSN Hotmail Nears Storage Finish Line which reports

Microsoft Corp.'s Internet division on Thursday started offering 250 MB of storage to new users of free Hotmail accounts in the United States and eight other countries. New accounts previously received 2MB of storage. As for current Hotmail users, the majority has gained the added storage and the rest will be upgraded over the next few weeks, said Brooke Richardson, MSN lead product manager. Hotmail has about 187 million customers worldwide.
New Hotmail users will get the storage in two steps. They first will receive 25MB of e-mail storage as MSN verifies that the accounts are for legitimate senders of e-mail and not spammers, Richardson said. After 30 days, they will gain the full 250MB of storage.

The increased storage also comes with an increase in the maximum attachment size to 10MB for free accounts.

A new photo-sharing feature in Hotmail lets users browse thumbnails of digital images and include multiple photos in an e-mail with one click, Richardson said. The feature also compressed the image files.

The article doesn't mention the eight other countries where the large Hotmail inbox feature has been deployed, they are the U.K., Australia, Canada, France, Germany, Italy, Japan, and Spain.

I am curious as to how much of a deterrent the 30 day waiting period will be to spammers. You'd think that using CAPTCHA technologies to prevent automated sign ups would get rid of most spammers but it seems like they are still a problem.


Categories: Mindless Link Propagation | MSN