mca bloghttp://www.amundsen.com/blog/making progressWed, 23 Jul 2008 23:29:30 GMTen-us180HTTP on the command-linehttp://www.amundsen.com/blog/archives/819http://www.amundsen.com/blog/archives/819Sun, 20 Jul 2008 16:18:00 GMT<p> <a href="http://farm2.static.flickr.com/1082/1391019659_bfa5b8f605_b.jpg" title="pipes"> <img src="http://farm2.static.flickr.com/1082/1391019659_bfa5b8f605_t.jpg" align="right" class="inline" /> </a> while it's nothing new, i'm starting to get the 'HTTP-REST on the command-line' religion. <a href="http://codeartisan.blogspot.com/2008/03/rest-unix-programming-for-web.html" title="REST: Unix programming for the Web">this post</a> sums up my present thinking nicely (some good follow-up comments there, too.).</p> <p>my most recent project (<a href="http://amundsen.com/blog/archives/816" title="SSDS Samples Updated - w/ scripting!">SSDS.EXE</a>) leads me to start thinking like this. see, now i can interact with data in the cloud with simple command-line statements like this:</p> <p> <code> ssds /resource-collection/ post data.xml<br /> ssds /resource-collection/ get<br /> ssds /resource-collection/id-123 get >id-123.xml<br /> </code> </p> <p>since i'm working on the Windows platform, i need a few other tools to get me started (primarily an XSLT processor - <a href="http://www.xmllab.net/Products/nxslt2/tabid/73/Default.aspx" title="nxslt2 - free Feature-rich .NET 2.0 XSLT Command Line Utility">this one</a> will proly do nicely).</p> <p>while the direct interaction w/ HTTP is relatively easy (<a href="http://gnuwin32.sourceforge.net/packages/wget.htm" title="Wget for Windows">WGET</a> is a good solution), there's one item i think still needs some work - HTTP meta-data (the <a href="http://amundsen.com/headers/reference.html" title="HTTP Headers Quick Reference">headers</a>). see, truely interacting with HTTP is more than just <code>GET | transform | POST</code>, etc. to do it well, you need full interaction with the header collection (both Request and Response headers).</p> <p>i can imagine a command-line utility that does the GET/POST and then keeps the headers in an addressable as a collection (memory, state on disk?), for you to use in further interactions. i'll have to noodle a bit. someone musta solved this, right?</p> Diephouse REST slideshttp://www.amundsen.com/blog/archives/818http://www.amundsen.com/blog/archives/818Sun, 20 Jul 2008 11:23:00 GMT<p>found an excellent slide deck via <a href="http://www.innoq.com/blog/st/2008/07/dan_diephouse_on_rest_and_atom.html" title="Dan Diephouse on REST and Atom">Stan Tilkov</a>.</p> <p><a href="http://netzooid.com/presentations/Effective%20RESTful%20services.pdf" title="Dos and Don’ts of RESTful services">Dos and Dont's of RESTful services</a></p>A Royal Farewell in Balihttp://www.amundsen.com/blog/archives/817http://www.amundsen.com/blog/archives/817Sat, 19 Jul 2008 11:44:00 GMT<p>excellent stuff. check out the audio/slideshow link, too!</p> <blockquote> Last Tuesday, on the island of Bali, the head of the royal family of Ubud named Agung Suyasa was laid to rest in a rare, spectacular Royal Funeral - the largest in decades. Suyasa, two other members the royal family, and 68 commoners were cremated in a large Hindu ceremony - their bodies having been previously preserved, awaiting cremation, which is traditionally believed to free their souls for future reincarnation. </blockquote> <div style="text-align:center"> <p> <a href="" title="photos"> <img src="http://cache.boston.com/universal/site_graphics/blogs/bigpicture/ubud_07_18/ubud10.jpg" width="300" class="inline" /> </a> </p> <p> <a href="http://www.nytimes.com/interactive/2008/07/15/world/asia/INDO_FUNERAL/index.html" title="audio slideshow">audio slideshow</a> </p> <p> <a href="http://www.nytimes.com/2008/07/16/world/asia/16indo.html" title="At Royal Balinese Funeral, Bodies Burn and Souls Fly">At Royal Balinese Funeral, Bodies Burn and Souls Fly</a> </p> </div> SSDS Samples Updated - w/ scripting!http://www.amundsen.com/blog/archives/816http://www.amundsen.com/blog/archives/816Fri, 18 Jul 2008 23:19:00 GMT<blockquote> <h4>2008-07-20 update</h4> <p>i posted an update for the <code>SSDS.EXE</code> app that alters the command-line syntax. now, the URL appears first with the HTTP Method second (or optional in the case of GET). This makes it a much friendlier app [grin].</p> <pre> ssds /my-authority/fish ssds /my-authority/fish/ post fish-002.xml ssds /my-authority/fish/fish-002 delete ssds /my-authority/fish/ </pre> </blockquote> <p> <a href="http://farm1.static.flickr.com/19/98273683_3a56417618_o.jpg" title="console"> <img src="http://farm1.static.flickr.com/19/98273683_3a56417618_t.jpg" align="right" class="inline" /> </a> i just updated my <a href="http://amundsen.com/examples/ssds/" title="SSDS Exmaples">SSDS Examples</a> project (via <a href="http://codeplex.com/ssdsexamples/" title="Codeplex">Codeplex</a> and <a href="http://code.google.com/p/mikeamundsen/downloads/list" title="Googlecode">GoogleCode</a>. This latest update has two new 'cool' features:</p> <ol> <li>a single <code>/ssds-proxy/</code> end-point for all communications</li> <li>a console app (<code>SSDS.EXE</code>) that you can use the interact with your data in the cloud</li> </ol> <p>The <code>/ssds-sproxy/</code> end-point means that all kinds of cool MSFT data cloud apps can be written against a single REST API. Why use a proxy when you can just address the could servers directly? well, first, this proxy provides caching services and ETag checking on PUT that the current MSFT beta does not (soon to be fixed in the next release). second, this proxy supports cookie-based Basic Authentication instead of just HTTP Basic Auth. that makes it friendlier for browser-based and AIR (i.e. Silverlight) clients. third, since the current release of SSDS does not offer a way to generate guaranteed unique IDs, the proxy does this for you. that way, even clients from several different locations will be sure to never create records with the same ID. finally, it's just a fun thing to do, ok [grin]?</p> <p>the console app was a fun thing i whipped up this week to make it easy to test out the proxy end-point. the result is a pretty sweet demo app that makes it really easy to interact w/ the SSDS data. you can even use this console app to support scripting against SSDS. here's a simple example script i included in the demo ZIP:</p> <pre class="code"> @echo off rem script ssds console ssds get /my-authority ssds post /my-authority/fish ssds get /my-authority/fish ssds post /my-authority/fish/ fish-001.xml ssds post /my-authority/fish/ fish-002.xml ssds get /my-authority/fish/ ssds get /my-authority/fish/fish-001 ssds delete /my-authority/fish/fish-002 ssds get /my-authority/fish/ rem ##eof## </pre> <p> there are lots of possible uses of the command-line interface for SSDS. and the proxy end-point can turn into a very handy utility service for future SSDS applications. </p> <p>of course, it's all fun stuff to play with, too[grin]!</p>"the energy crisis is real!"http://www.amundsen.com/blog/archives/815http://www.amundsen.com/blog/archives/815Thu, 17 Jul 2008 20:41:00 GMT<div style="text-align:center"> <h4>watch and learn</h4> <p>&#160;</p> <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/gwzyvkc1tb4"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/gwzyvkc1tb4" type="application/x-shockwave-flash" wmode="transparent" width="425" height="344"></embed></object> <p> <a href="http://www.nytimes.com/2008/07/18/washington/18gorecnd.html?hp" title="Gore Calls for Carbon-Free Electric Power">Gore Calls for Carbon-Free Electric Power</a> </p> <p> <a href="http://www.marketwatch.com/news/story/statement-bob-barr-after-vice/story.aspx?guid=%7BF10DF207-C030-44F6-B8B2-25EDC72E81E7%7D&amp;dist=hppr" title="Statement of Bob Barr After Vice President Al Gore's 'We' Campaign">Statement of Bob Barr After Vice President Al Gore's 'We' Campaign</a> </p> <p> <a href="http://www.wecansolveit.org/" title="The We Campaign is a project of The Alliance for Climate Protection">wecansolveit.org</a> </p> <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/idlJDcr669o&amp;hl=en&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/idlJDcr669o&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object> <h4>now *do something*</h4> </div>'talking ' SSDS w/ Soumitra Senguptahttp://www.amundsen.com/blog/archives/814http://www.amundsen.com/blog/archives/814Wed, 16 Jul 2008 17:54:00 GMT<p> <a href="http://farm2.static.flickr.com/1270/764216972_cde210d3fa_o.jpg" title="nesting dolls"> <img src="http://farm2.static.flickr.com/1270/764216972_5b7b9edd63_t.jpg" align="right" class="inline" /> </a> in <a href="http://blogs.msdn.com/ssds/archive/2008/07/16/8739607.aspx" title="Mike Amundsen is putting out lot of samples in his blog">a recent post</a>, <a href="http://blogs.msdn.com/user/Profile.aspx?UserID=84141" title="Soumitra Sengupta">Soumitra Sengupta</a> gives me a nice shout-out over my recent <a href="http://amundsen.com/blog/archives/811" title="SSDS Examples">SSDS Examples</a> coding and offers some comments in reply to my recent post regarding <a href="http://amundsen.com/blog/archives/812" title="align SSDS and Astoria? *NOT*">Astoria and SSDS</a>. first, thanks to SS for his responses. always nice when i get the opportunity to 'talk' (even only virtually) to some of the folks at MSFT that are making cool things happen.</p> <p>a key thread in our on-line exchanges has to do w/ getting the Astoria libraries working with SSDS. while SS calms my concerns over any loss of flexibility, i still have a few issues with linking Astoria and SSDS. mainly, that SSDS not become 'a hostage' of the Astoria library.</p> <p>having earned my stripes using Dynasets (remember?), i've seen my share of DAO,RDO,ADO,ADO.NET, etc. Astoria is just another one in the line. SSDS, however, strikes me as quite different. SSDS is the cloud. SSDS is anytime/anywhere/anyclient. i can use HTTP to do all my SSDS work. the same HTTP that was around when Dynasets were first invented. and i expect to use HTTP to access my SSDS data ten years from now - long after Dynasets and (probably) Astoria libraries are long gone.</p> <p>SSDS is not a library and i want so very much to make sure that linking SSDS to Astoria, or any other code library, does not change the nature of SSDS. as long as i can always get my data, i'll be pleased. heck, i might even give this new-fangled data-library a try!</p> YUI combo loaderhttp://www.amundsen.com/blog/archives/813http://www.amundsen.com/blog/archives/813Wed, 16 Jul 2008 17:11:00 GMT<p>good to see the YUI library now has a "<a href="http://yuiblog.com/blog/2008/07/16/combohandler/" title="Combo Handler Service Available for Yahoo-hosted JS">Combo Handler Service</a>" for loading multiple JS files in a single HTTP request. i've been using a similar pattern for quite a while now with my <a href="http://www.amundsen.com/blog/archives/429" title="conflate.ashx v1.1">conflate.ashx</a> script.</p> align SSDS and Astoria? *NOT*http://www.amundsen.com/blog/archives/812http://www.amundsen.com/blog/archives/812Tue, 15 Jul 2008 10:17:00 GMT<p> <a href="http://farm1.static.flickr.com/3/5549288_ee8741271f_o.jpg" title="caution"> <img src="http://farm1.static.flickr.com/3/5549288_ee8741271f_t.jpg" align="right" class="inline" /> </a> in <a href="http://blogs.msdn.com/ssds/archive/2008/07/15/8732676.aspx" title="Why Astoria alignment is not that trivial">Why Astoria alignment is not that trivial</a> <a href="http://blogs.msdn.com/user/Profile.aspx?UserID=84141" title="Soumitra Sengupta">Soumitra Sengupta</a> outlines some of the challenges of aliging <a href="http://www.microsoft.com/sql/dataservices/default.mspx" title="SQL Server Data Services">SSDS</a> and <a href="http://astoria.mslivelabs.com/" title="ADO.NET Data Services">Astoria</a>:</p> <ul> <li>Astoria protocol and interaction model deals with only a single consistency domain. </li> <li>Multi-tenancy is a fundamental concept in SSDS while Astoria has no such concept at this point in time.</li> <li>Entities in SSDS do not require schema while default for Astoria is EDM schemas. </li> </ul> <p>imho, not only is alignment non-trivial, it's <em>not desirable</em>.</p> <p>SSDS needs to remain lightweight and flexible. EDM will kill that. SSDS does need some improvements to the query model. it *does* need improvements in it's support for other content-types (Atopm, RSS, JSON). but SSDS does not need to become another member of the <a href="http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx" title="The ADO.NET Entity Framework Overview">Entity Framework</a> system.</p> SSDS Client v1.4 http://www.amundsen.com/blog/archives/811http://www.amundsen.com/blog/archives/811Mon, 14 Jul 2008 22:50:00 GMT<p> <a href="http://farm4.static.flickr.com/3265/2621301857_a0a2ba61d0_b.jpg" title="baby toys"> <img src="http://farm4.static.flickr.com/3265/2621301857_a0a2ba61d0_t.jpg" align="right" class="inline" /> </a> i posted version 1.4 of my <a href="http://amundsen.com/examples/ssds/" title="SSDS Provisioning Client">SSDS Provisioning Client</a> this evening. this release tightens up container caching, adds the 'refresh' buttons for containers and entities, and has a complete re-write of the client-side javascript (to make it easier to maintain). </p> <p>it's been a lot of fun building this tool. while the user community for SSDS is fairly small (it's still a closed beta), i've been getting some nice feedback from a number of very savvy users. if any of them are actually reading this, i want to say 'thanks' again for all your input.</p> <p>along the way, i've built a fairly robust SSDS-Proxy server that has come in handy a number of times. in fact, i have some ideas on how to expand the proxy side to make it a bit more universal. if i have the time, i'll proly release a stand-alone proxy endpoint that will allow users to write their own clients against this single end-point for SSDS. right now, it's just another fun project in my list of things to play with.</p> just do it - REST-fullyhttp://www.amundsen.com/blog/archives/810http://www.amundsen.com/blog/archives/810Fri, 11 Jul 2008 20:03:00 GMT<p> <a href="http://farm4.static.flickr.com/3231/2653029303_f139ca004e_b.jpg" title=""> <img src="http://farm4.static.flickr.com/3231/2653029303_f139ca004e_t.jpg" align="right" class="inline" /> </a> saw a great interaction on the <a href="http://tech.groups.yahoo.com/group/rest-discuss/" title="REST Discussion Mailing List">rest-discuss</a> list this week. <a href="http://tech.groups.yahoo.com/group/rest-discuss/message/11036" title="on the HTTP operations on multiple resources">this thread</a> was addressing the need for some kind of <a href="http://www.subbu.org/weblogs/main/2008/02/rest_and_batch.html" title="REST and Batch">BATCH</a>-type operation. below is a snip of the question and one of the answers:</p> <blockquote> <p><em>post:</em><br /> I'm dealing with the issue of defining a REST-oriented API. I need to define operations working on multiple resources at the same time. I'm aware that HTTP does not support this feature, nevertheless extensions or best practice exist. </p> <p><em>reply:</em><br /> Just define a resource that maps to all of the resources you intend to operate upon. Resources often overlap......Roy</p> </blockquote> <p>yeah - that's the point, isn't it.</p> <p>just define a resource that encompasses what you need to do. don't try to create new HTTP methods. don't try to overload an existing HTTP method. just use the existing pattern that already exists.</p> <p>just do it.</p>