mca bloghttp://www.amundsen.com/blog/making progressWed, 20 Aug 2008 09:47:22 GMTen-us180SSDSDeploy.exe release 1.0http://www.amundsen.com/blog/archives/837http://www.amundsen.com/blog/archives/837Tue, 19 Aug 2008 04:56:00 GMT<p> <a href="http://farm3.static.flickr.com/2079/2499999794_9ae8a28ccc_o.jpg" title="loading dock"> <img src="http://farm3.static.flickr.com/2079/2499999794_16b76f860f_t.jpg" align="right" class="inline" /> </a> i finally posted (<a href="http://code.google.com/p/mikeamundsen/">googelcode</a>, <a href="http://www.codeplex.com/ssdsexamples">codeplex</a>) my first pass at a deployment tool (<code>SSDSDeploy.exe</code>) for posting binary files to your SSDS stores. it's now possible to upload one or more files (using wildcards or command-line scripts) to any designated SSDS <code>/authory/container</code> location. below is the 'help doc' for this command-line app:</p> <pre class="code"> SSDS Deploy Console (1.0 - 2008-08-18) POST single binary file: /{a}/{c}/{e} "[c:][\folder\path\]file.ext" ["mime-type"] [y] where: {a} = authority {c} = container {e} = entity y = overwrite existing entities ex: /my-auth/files/my-profile "c:\temp\profile.jpg" "image\jpeg" y POST multiple files using wildcard: /{a}/{c}/* "[c:][\folder\path\]*.*" [y] ex: /my-authority/my-container/* "c:\uploads\*.*" y or ex: /my-authority/my-container/* "c:\images\*.png" y </pre> <p>in this release you can POST (including overwrite) to the <code>/authority/container/</code> store using a simple filename (<code>filename.ext</code>). currently SSDS has trouble parsing entities w/ "/" and/or "\" in the name. for now, that means you can't upload using an entity name such as <code>/images/file.png</code>. but you *can* use <code>file.png</code>. while SSDS is working on this bug, i may release a version of the tool that uses some other URL-safe character as the 'folder-separator' (":"?).</p> exyus: no updates?http://www.amundsen.com/blog/archives/836http://www.amundsen.com/blog/archives/836Sat, 16 Aug 2008 17:11:00 GMT<p> <a href="http://farm1.static.flickr.com/25/58379433_9ea61a0aeb_b.jpg" title="work"> <img src="http://farm1.static.flickr.com/25/58379433_9ea61a0aeb_t.jpg" align="right" class="inline" /> </a> i recently got a question on why i've not rev'd the <a href="http://exyus.com" title="exyus">exyus</a> codebase in months. good question.</p> <p>first, i started to slow on changes to the codebase this spring. i'd reach most of my initial goals of building a REST-y library for IIS w/ C# and began focusing on exercising the details. that allowed me to flush out weak spots, find holes in the implementation, etc. and besides, i was kinda tierd of writn C# and more interested in building web apps[g].</p> <p>along the way, i got side-tracked by <a href="http://www.microsoft.com/sql/dataservices/default.mspx" title="SQL Server Data Services">SSDS</a>. SSDS is MSFT's implmentation of database services 'in the cloud.' in this case, they support basic data read/write via SOAP and a REST interface. i've only worked with the REST interface and it's pretty solid. so, over the last two months i've been putting out <a href="http://amundsen.com/examples/ssds/" title="SSDS Examples">demo apps</a> and <a href="http://codeplex.com/ssdsexmaples/" title="SSDS Examples">posting my code</a> for other to play with. i'll also point out it's a great beta program. the <a href="http://blogs.msdn.com/ssds/default.aspx" title="The long-term 'storecast'">SSDS team</a> is a good bunch and they are pretty active on the MSFT-hosted <a href="http://forums.msdn.microsoft.com/en-US/ssdsgetstarted/threads/" title="SQL Server Data Services (SSDS) - Getting Started">SSDS forum</a>.</p> <p>so...</p> <p>i cut back on rev-ing <b>exyus</b> to take time to use it and i started working with a new data storage system that uses REST as an interface. the next logical thing would be to combine the two, eh? it would be pretty simple. i just need to implement a single class within <b>exyus</b> that does the read/write work against SSDS. the main issue is that, right now, SSDS is quite constrained in it's feature set. it's an early beta. but i have it on my list of things to do.</p> <p>finally, now that i've used <b>exyus</b> as a web library for a while, i can areas where it can be improved, expanded, and (most importantly) where code can be removed (remember: <a href="http://www.skrenta.com/2007/05/code_is_our_enemy.html" title="Code is our enemy">Code is our enemy</a>). over the next month or so, i'll get back to updating the <a href="http://code.google.com/p/exyus/" title="exyus source code">exyus source code</a>. and when i do, it should be smaller, faster, and better able to handle typical workflow of a web application.</p>Bill de hÓra is amazinghttp://www.amundsen.com/blog/archives/835http://www.amundsen.com/blog/archives/835Fri, 15 Aug 2008 23:18:00 GMT<p> <a href="http://upload.wikimedia.org/wikipedia/commons/2/22/Da_Vinci_Vitruve_Luc_Viatour.jpg" title="Da_Vinci_Vitruve_Luc_Viatour"> <img height="125" src="http://www.iaacblog.com/higiniollames/wp-content/uploads/2007/11/da_vinci_vitruve_luc_viatour1.jpg" align="right" class="inline" /> </a> in the last few days, <a href="http://www.dehora.net/journal/about/" title="Bill de hÓra">Bill de hÓra</a> has posted some <em>incredible</em> stuff on REST-related issues.</p> <p>i'm blown away.</p> <ul> <li><a href="http://www.dehora.net/journal/2008/08/08/non-newtonian-reading/" title="Non-Newtonian Reading">Non-Newtonian Reading</a></li> <li><a href="http://www.dehora.net/journal/2008/08/15/rest-as-an-engineering-discipline/" title="REST as an engineering discipline">REST as an engineering discipline</a></li> <li><a href="http://www.dehora.net/journal/2008/07/25/patterns-of-web-architecture/" title="Patterns of Web Architecture">Patterns of Web Architecture</a></li> </ul> <p>thanks.</p>REST checklists are coolhttp://www.amundsen.com/blog/archives/834http://www.amundsen.com/blog/archives/834Fri, 15 Aug 2008 17:52:00 GMT<p>not sure how i missed <a href="http://www.dehora.net/journal/2008/07/25/patterns-of-web-architecture/" title="Patterns of Web Architecture">this</a> but it's excellent!</p> REST: they just don't get ithttp://www.amundsen.com/blog/archives/833http://www.amundsen.com/blog/archives/833Fri, 15 Aug 2008 02:38:00 GMT<p id="t0o4"> <a id="uyeu" href="http://farm1.static.flickr.com/65/218507390_38f8ec545f_b.jpg" title=""> <img id="uyeu0" src="http://farm1.static.flickr.com/65/218507390_38f8ec545f_t.jpg" class="inline" align="right" /> </a> i read <a id="t0o40" href="http://damienkatz.net/2008/08/rest-i-just-dont-get-it.html">REST, I just don't get it</a> today and just had to hang my head.</p> <p id="t0o41">there is so much of REST that folks don't get. but saying:</p> <blockquote id="t0o42"> ...just use a POST as an RPC call, keep it as simple as possible and be done with it. And don't spend another minute worrying about being RESTful or not. </blockquote> <p id="t0o43">is just wrong.</p> <p id="t0o44">while i see lots of 'hey, you put a VERB in the URL!' or 'You're lame if you don't use PUT' kinda talk, i don't see folks talking about some of the most important concepts outlined in Fielding's 1999 dissertation, <a id="t0o45" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/top.htm">Architectural Styles and the Design of Network-based Software Architectures</a> - the document that described for the first time (in <a id="t0o46" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm">Chapter 5</a>) what <b id="t0o47">RE</b>presentational <b id="t0o48">S</b>tate <b id="t0o49">T</b>ransfer was about. check the year - 1999. actually, first drafts of the REST model were written as early as 1994! Fielding was part of the team that outlined the massively scalable distributed-networking protocol known to us as <a id="t0o410" href="http://www.w3.org/Protocols/rfc2616/rfc2616.html" title="HTTP/1.1">HTTP</a>. Fielding was there on the ground floor. his REST model, even almost a decade after it's official release, stands as one of the best attempts to codify some of the key architectural patterns that went into designing HTTP.</p> <p id="t0o411">and there are several</p> <ul id="t0o412"> <li id="t0o413">Use of separation of concerns via the <a id="t0o414" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_2">Client-Server</a> style</li> <li id="t0o415"><a id="t0o416" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_3">Stateless</a>, <a id="n2qt" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/evaluation.htm#sec_6_3_2">self-descriptive messages</a> supported by meta-data</li> <li id="t0o417">Support for <a id="t0o418" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_4">cache-ability</a> including third-party intermediaries</li> <li id="t0o419">A stable, <a id="t0o420" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_5">uniform interface</a> understood by all parties.</li> <li id="t0o421">A <a id="t0o422" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_6">layered</a>, multi-party network where everyone can work safely without having to understand every detail of a transaction</li> <li id="t0o423">Support for portable <a id="t0o424" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_7">code-on-demand</a> that allows servers to send executable units to clients for local execution</li> </ul> <p id="n2qt0">and add to the above vital system-wide constraints these additional patterns so common today we hardly give them much thought:</p> <ul id="n2qt1"> <li id="n2qt2">the abstraction of <a id="n2qt3" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm#sec_5_2_1_1">Resource Identifiers and Resources</a> (via <a id="uyeu1" href="http://www.ietf.org/rfc/rfc3986.txt" title="Uniform Resource Identifier (URI): Generic Syntax">URIs</a>)</li> <li id="n2qt4">the abstraction of the Resource and it's <a id="n2qt5" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm#sec_5_2_1_2">Representation</a> (via <a id="uyeu2" href="http://www.iana.org/assignments/media-types/" title="MIME Media Types">MIME-types</a>)</li> <li id="n2qt6">the abstraction of process flow and resource discovery (via <a id="n2qt7" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/web_arch_domain.htm#sec_4_1_3">Hypermedia</a> links)</li> <li id="n2qt8">the abstraction of resource access, transfer, and processing (via a <a id="n2qt9" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm#sec_5_2_2">single abstract interface</a>) that allows clients, proxies, servers, caches, resolvers, and other agents to <a id="n2qt10" href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm#sec_5_3_1">work safely together</a></li> </ul> <p id="n2qt11">that's quite a bit of work. quite a bit of *important* work. important work that, even after a decade (almost a century in '<a id="zs-x" href="http://mindprod.com/jgloss/internetyear.html" title="Internet year : Java Glossary">Internet years</a>') continue to thrive, grow, change, and adapt to include new media types, new authentication schemes, and more.</p> <p id="n2qt12">finally, you should note that this rant does not address the 'REST means you *MUST* use PUT and DELETE methods' or 'REST means you can't use a *VERB* in the URI' assertions. that stuff just misses the point. REST is much more than rules about URLs and HTTP method calls.</p> <h4 id="n2qt13">and that, apparently, is what most people "Just Don't Get."</h4> bird by bird; anne lamotthttp://www.amundsen.com/blog/archives/832http://www.amundsen.com/blog/archives/832Thu, 14 Aug 2008 22:31:00 GMT<p> <a href="http://books.google.com/books?id=t9cuMLk15PYC" title="Bird By Bird"> <img height="100" src="http://bks0.books.google.com/books?id=t9cuMLk15PYC&amp;printsec=titlepage&amp;img=1&amp;zoom=1&amp;sig=ACfU3U2sCsG0-1Pa_HC32wCoK-rCVE1-_g" align="right" class="inline" /> </a> i'm reading Anne Lamott's <a href="http://books.google.com/books?id=t9cuMLk15PYC" title="Bird By Bird"> Bird by Bird</a> and loving it. recommended to me by shannon. i found out that there's a documentary (<a href="http://www.pbs.org/independentlens/birdbybird/index.html" title="Bird by Bird with Annie">Bird by Bird with Annie</a>), too.</p> <p>will have to check that out once i finish the book.</p> SSDS and binary data - FTW!http://www.amundsen.com/blog/archives/831http://www.amundsen.com/blog/archives/831Wed, 13 Aug 2008 02:13:00 GMT<p> <a href="http://farm1.static.flickr.com/134/346469146_603a834ab5_b.jpg" title="binary"> <img src="http://farm1.static.flickr.com/134/346469146_603a834ab5_t.jpg" align="right" class="inline" /> </a> the last SSDS 'sprint' (kinda like a beta release only 'sprintier') had a major update - support for BLOB data. users can now read/write/delete binary items using the REST interface for SSDS. very nice. this adds a whole new level to the power and flexibility of SSDS</p> <p>despite a few drawbacks (limited control of the binary item's metadata and some URL-encoding bugs), i've been very keen on using SSDS to handle binary data. mostly because it allowes|forces me to level-up on my HTTP programming foo to handle binary data requests and responses. to this point, i've been taking shortcuts and only working with text-based data. this covers the better portion of most web requests, but leaves out very important stuff. not just images, but also PDF and the whole range of download-able binary formats (.ZIP, .DOC, etc.). i avoided this work for two reasons: 1) i was lazy, and 2) i was dumb. well, avoid no more.</p> <p>it took some work tonight, but i finally got binary data support rolled into my <code>HttpClient</code> class and into the <code>Entity</code> class within the SSDS-Proxy library. this also meant updating my internal <code>Caching</code> class to make sure it could handle binary data. i still have some rough edges to sand out (mostly dealing with server-side content-negotiation and caching the proper media type), but it should be clean and zippy by the end of the week.</p> <p>i first plan on updating the <a href="http://amundsen.com/examples/ssds/data-client/" title="SSDS Provisioning Client">SSDS Provisioning Client</a>. that will mean users will be able to upload, update, and delete binary data via the Web app. and once that's done, i've got some ideas on how to leverage binary data support in SSDS in general. if time allows, i'll have another demo app by the end of the month. i'm rubbing my hands together already[g].</p> SSDS Guestbook has RSS feed!http://www.amundsen.com/blog/archives/830http://www.amundsen.com/blog/archives/830Mon, 11 Aug 2008 00:18:00 GMT<p> <a href="http://farm3.static.flickr.com/2154/2044472567_7283007d43_b.jpg" title="green light"> <img src="http://farm3.static.flickr.com/2154/2044472567_7283007d43_t.jpg" align="right" class="inline" /> </a> i updated my latest <a href="http://www.microsoft.com/sql/dataservices/default.mspx" title="SQL Server Data Services">SSDS</a> demo app, the <a href="http://amundsen.com/examples/ssds/guestbook-client/" title="SSDS Guestbook">SSDS Guestbook</a> to support RSS feeds. Now, guests can monitor the public feed and even get filtered feeds of their own posts to integrate into blogs, etc.</p> <p>i've had lots of fun working this demo. it turned into a 'Twitter-like' app that allows folks to post short message and reply to existing ones. not as fully-functional as the *real* <a href="http://twitter.com" title="Twitter">Twitter</a>, but you get the idea. i've got some other ideas on how to improve things including a visual make-over and some added features (editing profiles, track replies in a conversation, etc.), but we'll see how things go. there are so many cool things you can do with the SSDS platform, it's hard for me to focus on one project.</p> <p>BTW - i notice about a week or so ago (and has been confirmed by SSDS team and other users) that the SSDS engine has been running a bit slow lately. i'd hoped it would have been cleared up by now, but it's still a bit sluggish. hopefully this will clear up soon.</p>firmin by sam savage = excellenthttp://www.amundsen.com/blog/archives/829http://www.amundsen.com/blog/archives/829Sun, 10 Aug 2008 20:44:00 GMT<p><a href="http://books.google.com/books?id=Crbmu9LCr3wC&amp;printsec=frontcover" title="Firmin"> <img height="125" src="http://bks3.books.google.com/books?id=Crbmu9LCr3wC&amp;printsec=frontcover&amp;img=1&amp;zoom=1&amp;sig=ACfU3U1VpBxt8CmzouWmz8uLjKp2q0oEmg" align="right" class="inline" /> </a> i read "<a href="http://www.amazon.com/Firmin-Adventures-Metropolitan-Sam-Savage/dp/1566891817/ref=sr_11_1?ie=UTF8&amp;qid=1218415742&amp;sr=11-1" title="Firmin: Adventures of a Metropolitan Lowlife">Firmin: Adventures of a Metropolitan Lowlife</a>" this evening. it was excellent!</p> <p>q quirky story from what seems to me to be a quirky author. very well done. lots of literary references (for those who like that kind of thing). a great weekend read.</p> "incoherent things"http://www.amundsen.com/blog/archives/828http://www.amundsen.com/blog/archives/828Fri, 08 Aug 2008 20:06:00 GMT<p> <a href="http://farm3.static.flickr.com/2196/2126955281_bb69c2895a_b.jpg" title="books"> <img src="http://farm3.static.flickr.com/2196/2126955281_bb69c2895a_t.jpg" align="right" class="inline" /> </a> during a <a href="http://tech.groups.yahoo.com/group/rest-discuss/message/11168" title="">thread</a> on the <a href="http://tech.groups.yahoo.com/group/rest-discuss/" title="REST dicuss">REST-discuss</a> forum today, <a href="http://www.dehora.net/journal/about/" title="Bill de hÓra">Bill de hÓra</a> said (in part):</p> <blockquote> You can have a design that allows you say incoherent things and result in bugs, like having a overly finegrained programming API where users can call methods out of order. Without the constraints in place, you need lots of discipline win, or heaven forbid, governance. What's most interesting to me is that I think many programmers in the field prefer RPC or REST-RPC hybrids. </blockquote> <p>and that's a big deal, really.</p> <p>in my experience, most developers have a bias for RPC. that's mostly 'cuz we've had that pattern drummed into us form almost 'day one.' but this preference for "RPC or REST-RPC hybrids" that Bill talks about is more than habit, imho. it's also a bias of perspective. devs love to 'program' stuff. and that happens when we start thinking about the Internet, too.</p> <p>what i see often is the attempt to expose the same <code>method-&gt;class-&gt;library-&gt;application</code> pattern <em>on the whole Internet</em> and that leads to big trouble. instead, i try to think about exposing <strong>resources</strong> for folks to interact with. and that's it.</p> <p>don't write programs.</p> <p>don't write workflows or wizards or processes.</p> <p>expose resouces.</p> <h4><em>Expose them and they will come.</em></h4>