<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Harry Pierson's DevHawk Weblog</title><link>http://blogs.msdn.com/b/devhawk/</link><description>Passion * Technology * Ruthless Competence</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Blog Moved...Sort Of</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/08/21/710966.aspx</link><pubDate>Mon, 21 Aug 2006 20:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:710966</guid><dc:creator>DevHawk</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;I originally started and have always maintained &lt;A href="http://devhawk.net/"&gt;DevHawk&lt;/A&gt; as my primary blog. However, back in the &lt;A href="http://blogs.msdn.com/devhawk/archive/2004/05.aspx"&gt;spring of 2004&lt;/A&gt;, I started &lt;A href="http://blogs.msdn.com/devhawk/archive/2004/05/06/127644.aspx"&gt;cross posting&lt;/A&gt; to this MSDN blog due since I was being featured on the &lt;A href="http://msdn.microsoft.com/architecture/"&gt;MSDN Architecture Center&lt;/A&gt;&amp;nbsp;and I needed the blog up 24x7. &lt;/P&gt;
&lt;P&gt;Fast forward two years and I have a new role on a new team. Keeping two blogs is more trouble than it's worth, so I'm going to stop&amp;nbsp;blogging here. Regular readers - or at least readers who wish to be regular - should head over to &lt;A href="http://devhawk.net"&gt;DevHawk&lt;/A&gt;, or pick up the &lt;A href="http://feeds.feedburner.com/Devhawk"&gt;RSS feed&lt;/A&gt;&amp;nbsp;directly. &lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=710966" width="1" height="1"&gt;</description></item><item><title>New Teammates Blogging</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/07/17/668641.aspx</link><pubDate>Mon, 17 Jul 2006 23:43:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:668641</guid><dc:creator>DevHawk</dc:creator><slash:comments>2</slash:comments><description>&lt;P&gt;I'm settling in to my new job. One way to tell, read &lt;A href="http://halfmybrain.spaces.msn.com/"&gt;Dale Churchward's blog&lt;/A&gt;. Dale's a teammate of mine. He only joined Microsoft a few months ago. Apparently, he used to blog at his old job, but either way we've now doubled the number of bloggers on my new team, with hopefully more to follow.&lt;/P&gt;
&lt;P&gt;In addition to his opinions of &lt;A href="http://halfmybrain.spaces.msn.com/Blog/cns!DF6CA820250998D2!113.entry"&gt;political discource&lt;/A&gt; and the &lt;A href="http://halfmybrain.spaces.msn.com/Blog/cns!DF6CA820250998D2!121.entry"&gt;Seahawks chances&lt;/A&gt; next season, Dale's got some interesting posts on &lt;A href="http://halfmybrain.spaces.msn.com/Blog/cns!DF6CA820250998D2!127.entry"&gt;data integration&lt;/A&gt; and &lt;A href="http://halfmybrain.spaces.msn.com/Blog/cns!DF6CA820250998D2!129.entry"&gt;system diagrams&lt;/A&gt;. Check it out.&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=42aaeec3-fa3e-48f3-9cc4-45072d6cba28"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=668641" width="1" height="1"&gt;</description></item><item><title>Gartner EA Summit Day One</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/06/21/642365.aspx</link><pubDate>Thu, 22 Jun 2006 09:14:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:642365</guid><dc:creator>DevHawk</dc:creator><slash:comments>2</slash:comments><description>&lt;P&gt; &lt;/P&gt;
&lt;P&gt;I'm in sunny San Diego for the &lt;A href="http://www.gartner.com/2_events/conferences/ea4.jsp"&gt;Gartner Enterprise Architecture Summit&lt;/A&gt;. I'm presenting a sponsor session and case study tomorrow (MSFT is a &lt;A href="http://agendabuilder.gartner.com/EA4/webpages/platinum_sponsors.aspx?menu=menu_itxpo_and_vendors&amp;amp;menuItem=75"&gt;platinum sponsor&lt;/A&gt; for the event) but I came in yesterday so I could attend a few sessions, meet a few customers and work the MS booth in the Solution Showcase. It's my last event and deliverable for my old team before switching to the new role full time. &lt;/P&gt;
&lt;P&gt;The first of two keynotes today was Richard Buchanan's session on &lt;A href="http://agendabuilder.gartner.com/EA4/webpages/SessionDetail.aspx?EventSessionId=860"&gt;The New Enterprise Architecture: Time for Leadership&lt;/A&gt;. Pretty decent session, though much of it was pretty obvious. He even said at one point that this was "&lt;SPAN&gt;Strategic Enterprise Planning 101". Not exactly the best way to kick of an EA summit, IMHO. However, he did make some interesting points:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;It's hard to quantify the value of business effectiveness. Richard's quote on this was great: "&lt;SPAN&gt;What’s the dollar value of staying out of jail?"&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;He compared most of how IT is operated today as "looking in the mirror" (i.e. focusing on running what we already have). He suggested instead "looking out the window" (i.e. at the industry and the future). &lt;/LI&gt;
&lt;LI&gt;I always say that architecture is the intersection of business and IT. Richard said “Architecture is a translation from business strategy to technology implementation. Architects must institutionalize this translation.” Close enough. &lt;/LI&gt;
&lt;LI&gt;He also suggested that architects need to learn to speak the language of business. That's good advice.&lt;/LI&gt;
&lt;LI&gt;Richard did do a good job capturing the dynamic aspect of enterprise and IT architecture. It's about change, not structure. He said "&lt;SPAN&gt;EA is not about the past or the present. It’s about the future." Couldn't agree more.&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The second keynote was &lt;A href="http://www.allthingsdistributed.com/"&gt;Werner Vogels&lt;/A&gt; talk &lt;A href="http://agendabuilder.gartner.com/EA4/webpages/SessionDetail.aspx?EventSessionId=861"&gt;Order in the Chaos: Building the Amazon.com Platform&lt;/A&gt;. This was a great talk. I know a little about how Amazon has evolved, but I had no idea that it powered websites like &lt;A href="http://target.com/"&gt;Target&lt;/A&gt; and &lt;A href="http://bebe.com/"&gt;Bebe&lt;/A&gt;. His talk was a little scattered - I'm guessing he's not as used to speaking at events like this than the Gartner folks. There's no way to do the talk justice without basically repeating it verbatim, but my key takeaways were:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Amazon naturally evolved from an application into a platform. This is fascinating and worthy of more study, esp. as I'm making the switch to MSFT's internal IT department. Microsoft knows a thing or two about platforms, but I'm not sure how it applies inside IT.&lt;/LI&gt;
&lt;LI&gt;Amazon sees it's "secret sauce" as their ability to automate operations at scale. For example, handling over a million sellers in their system. That helps explain their moves into services like &lt;A href="http://www.amazon.com/gp/browse.html/ref=sc_fe_l_2/103-5532906-6031841?%5Fencoding=UTF8&amp;amp;node=16427261&amp;amp;no=3435361&amp;amp;me=A36L942TSJ2AJA"&gt;S3&lt;/A&gt; and &lt;A href="http://www.amazon.com/gp/browse.html/ref=sc_fe_l_2/103-5532906-6031841?%5Fencoding=UTF8&amp;amp;node=15879911&amp;amp;no=3435361&amp;amp;me=A36L942TSJ2AJA"&gt;MTurk&lt;/A&gt; which at first glance seems at odds with their retail web site. &lt;/LI&gt;
&lt;LI&gt;One of the key values to becoming a platform is being able to open it up to partners. Again, Microsoft knows a lot about opening a platform to partners, but I'm not sure how it applies inside IT.&lt;/LI&gt;
&lt;LI&gt;Money Quote: "&lt;SPAN&gt;At Amazon, things are always failing. It’s not a bad thing, it’s a fact of life." I've started theorizing about this on my own, good to know where to start looking for &lt;/SPAN&gt;people putting this into practice.&lt;/LI&gt;
&lt;LI&gt;Towards that end, he made probably the most interesting observation of the day. At Amazon, there is no wall between development and operations. Combined with the secret sauce of automating operations at scale and there is a good recipe for how enterprises need to run their IT department.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The final session I went to today was Nick Gall on &lt;SPAN&gt;&lt;A href="http://agendabuilder.gartner.com/EA4/webpages/SessionDetail.aspx?EventSessionId=863"&gt;Architecture for the Agile Enterprise: Integrating EA &amp;amp; SOA&lt;/A&gt;. The use of the term "agile" in this context was unfortunate, as he had no discussion of agile principles. He primarily focused on what he called Web Oriented Architecture or WOA. His formula for WOA was 'WOA = SOA + WWW + REST" which seems redundant. Isn't REST an attempt to capture the architectural style of the WWW? Anyway, this session wasn't very good. He had about 15 minutes of really good content but you had to wade thru the other 45 minutes of crap to find it. For example, he spent about ten minutes talking about the &lt;/SPAN&gt;value of using a small set common modular operations (i.e. the REST / WS-Transfer approach) before he used this great analogy:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;Modularity can be open or closed. Closed modularity is like a jigsaw puzzle. There are lots of individual pieces, but they can only be put together one way. Open modularity is like a &lt;A href="http://en.wikipedia.org/wiki/Tangram"&gt;tangram puzzle&lt;/A&gt;. There are only seven pieces, but they can be put together in hundreds of different combinations.&lt;/BLOCKQUOTE&gt;
&lt;P&gt;That was a great analogy that really got the point across! Why not just start with that and skip the mumbo jumbo? &lt;/P&gt;
&lt;P&gt;I missed the last session as I had to prep for booth duty. Even though this audience is very different from a typical MSFT event like TechEd, they still mobbed the booth for swag and a chance to win an Xbox 360. I had a few interesting architectural discussion, but mostly it was about the swag. &lt;/P&gt;
&lt;P&gt;My session is tomorrow at 11am. I'm presenting &lt;A href="http://agendabuilder.gartner.com/EA4/webpages/SessionDetail.aspx?EventSessionId=899"&gt;Beyond SOA&lt;/A&gt; and a &lt;A href="http://agendabuilder.gartner.com/EA4/webpages/SessionDetail.aspx?EventSessionId=901"&gt;case study session&lt;/A&gt; on the Dell Integrated Desktop . Then there's two more hours of booth duty tomorrow, but I'm hoping it's more content and less swag this time as 1) I will have just presented so I'm hoping to get some questions and 2) everyone has already gotten their swag ration for the conference.&amp;nbsp; &lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=147ea496-930c-429d-8a3e-73fe9fa914b7"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=642365" width="1" height="1"&gt;</description></item><item><title>Alpha Release of Ruby.NET</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/06/21/641772.aspx</link><pubDate>Wed, 21 Jun 2006 22:37:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:641772</guid><dc:creator>DevHawk</dc:creator><slash:comments>2</slash:comments><description>&lt;P&gt;I'm not sure what a "Preliminary Beta" is but &lt;A href="http://www.qut.edu.au/"&gt;QIT&lt;/A&gt;&amp;nbsp;has released a one for their &lt;A href="http://plas.fit.qut.edu.au/Ruby.NET/"&gt;Ruby.NET compiler&lt;/A&gt;. They expect to achieve "full semantic compatibility" (can you tell this is an acidemic project?) by the end of the year. Thanks to &lt;A href="http://www.from9till2.com/PermaLink.aspx?guid=fae70ab9-29c8-44f1-b076-46eee9f839d1"&gt;David Ing&lt;/A&gt; for the link.&lt;/P&gt;
&lt;P&gt;They claim to "pass all 871 tests in the samples/test.rb installation test suite of &lt;A href="http://www.ruby-lang.org/"&gt;Ruby&lt;/A&gt; 1.8.2." which seems odd since later they say "We have a plan for how to deal with continuations but we have not yet implemented them." Doesn't the Ruby test suite test continuations? I wish they would provide more details on this plan, continuations might not be the most interesting thing in Ruby, but it's up there and it's probably the hardest thing to implement on top of the CLR.&lt;/P&gt;
&lt;P&gt;BTW, there are two other projects @ QIT that Ruby.NET leverages that look interesting. The &lt;A href="http://plas.fit.qut.edu.au/gppg/"&gt;Gardens Point Parser Generator&lt;/A&gt; is essentially a &lt;A href="http://en.wikipedia.org/wiki/Yacc"&gt;YACC&lt;/A&gt; clone written in C# and making extensive use of generics. Personally, I'm more interested in &lt;A href="http://pdos.csail.mit.edu/~baford/packrat/"&gt;Parsing Expression Grammars&lt;/A&gt;, but there's no C# implementation as of yet. QIT also has a library for &lt;EM&gt;&lt;A href="http://plas.fit.qut.edu.au/perwapi/"&gt;reading and writing program executable files&lt;/A&gt;&lt;/EM&gt; (i.e. EXEs and DLLs). &lt;/P&gt;
&lt;P&gt;As a quick aside, I'm getting pretty tired of all the different euphemisms for "alpha". In the age of perpetual beta, isn't alpha the new beta? But everyone seems worried about calling their releases alpha as if it means "it might not cause your machine to explode, if you could actually get it to compile". So we end up with things like "Preliminary Beta" and "Community Tech Preview". We all KNOW what these terms mean, so lets just call an alpha and alpha, shall we?&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=995cb378-1049-4f6b-9b8c-4aeb598b9e3f"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=641772" width="1" height="1"&gt;</description></item><item><title>Moving On...</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/06/15/632338.aspx</link><pubDate>Thu, 15 Jun 2006 20:19:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:632338</guid><dc:creator>DevHawk</dc:creator><slash:comments>4</slash:comments><description>&lt;P&gt;It's not the biggest &lt;A href="http://www.msnbc.msn.com/id/13282299"&gt;job change news&lt;/A&gt; this week (or the &lt;A href="http://www.microsoft.com/presspass/press/2006/jun06/06-15CorpNewsPR.mspx"&gt;day&lt;/A&gt;), but after three years on Architecture Strategy and six years total as an evangelist, I'm moving on to a new role. After six years, I decided it was time for me to put my money where my mouth is as well as get my hands dirty building something more substantial than buzz.&lt;/P&gt;
&lt;P&gt;I'll be moving over into Microsoft's IT division as a member of the Integration Center of Excellence Architecture Team. Integration, as you might guess, is a euphemism here for service-orientation. My team is tasked with architecting and delivering the shared service-oriented infrastructure for four of the biggest projects Microsoft IT will be delivering in the next year. &lt;A href="http://devhawk.net/2003/09/19/Today+Is+The+Last+Day+Of+My+Life+So+Far.aspx"&gt;Last time I changed jobs&lt;/A&gt;, I lamented that "With each job I take at MSFT, coding seems to become less a part of the job description." Happily, this is &lt;EM&gt;NOT&lt;/EM&gt; the case this time. &lt;/P&gt;
&lt;P&gt;About a year ago, Microsoft hired &lt;A href="http://www.microsoft.com/presspass/exec/stuartsc/default.mspx"&gt;Stuart Scott&lt;/A&gt; to run the business apps side of IT as one of our two CIOs (our other CIO &lt;A href="http://www.microsoft.com/presspass/exec/ronma/default.mspx"&gt;Ron Markezich&lt;/A&gt; oversees the IT infrastructure). Stuart was kind enough to spend about an hour with me last week explaining his vision for how he sees MSIT evolving under his leadership. Here's what he said in a &lt;A href="http://www.microsoft.com/presspass/features/2005/dec05/12-05Scott.mspx"&gt;recent interview&lt;/A&gt;:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;B&gt;PressPass: How do you see Microsoft IT evolving?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Scott:&lt;/B&gt; There is a broader role for IT to play at the front end of the development of products and services. Our IT organization knows a lot about the challenges that other IT organizations face because we build and maintain the IT backbone of a massive worldwide enterprise. IT must become future-thought leaders in the development of the product roadmap for our enterprise products. &lt;/P&gt;
&lt;P&gt;By using our internal applications and experiences to build better products for our enterprise customers, we have the potential to solve the challenges that other IT organizations face. We’re heavily involved in dogfooding our products once they’ve been developed, but we also see a role closer to the front end of the product development cycle. Business Intelligence is one area where we will be partnering with the product groups and Finance as we build out our internal capability. I want to ensure that any product we develop to meet the needs of Microsoft, also meets the needs of the marketplace. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;He was also very frank about the current state of affairs in MSIT relative to the vision. He was quoted in China Information World (no link, sorry) as saying that "The systems Microsoft now uses are already 14 years old and based on previous versions of windows, so from a systems capability perspective, they cannot support the needs of the growing business." &lt;/P&gt;
&lt;P&gt;All in all, I was pretty impressed with what he's setting out to do and the opportunity not only from a business perspective from from an industry perspective as well. Hence the whole "going to work in his division" thing. Of course, "Thought Leadership" is one of the things Architecture Strategy works on very diligently, so in some ways this isn't as big a change as it might be. On the other hand, giving advice to people solving hard problems is a lot different than solving those hard problems yourself.&lt;/P&gt;
&lt;P&gt;I'll be starting this new role pretty much immediately, so expect the less-than-usual blogging to continue for the time being. But my external visibility on my blog and presenting at conferences and executive briefings is one of the things they hired me for. So after I get my bearings things should be back to normal. At that point, I'll hopefully be able to talk in more specific terms about what we're tackling on my new team. I hope to shake things up quite a bit over there and deliver the play by play here on my blog.&lt;/P&gt;
&lt;P&gt;Massive thanks to &lt;A href="http://blogs.msdn.com/jdevados/"&gt;John deVadoss&lt;/A&gt; and the rest of the Architecture Strategy Team. Back when I started, I think &lt;A href="http://blogs.msdn.com/smguest/"&gt;Simon Guest&lt;/A&gt; was the only other blogger on the team. Now there are only three non-bloggers on the whole team. It's been a great three years and I've been a part of so many great accomplishments:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Making Microsoft the first (I think!) global sponsor for the &lt;A href="http://www.iasahome.org/"&gt;International Association of Software Architects&lt;/A&gt; 
&lt;LI&gt;Delivering the &lt;A href="http://msdn.microsoft.com/library/en-us/dnbda/html/OtlkLOBCRM.asp"&gt;CRM Integration for Outlook Sample Application&lt;/A&gt; 
&lt;LI&gt;Launching the &lt;A href="https://mvp.support.microsoft.com/communities/mvp.aspx?product=1&amp;amp;competency=Visual+Developer+-+Solutions+Architect"&gt;Solution Architect&lt;/A&gt; and &lt;A href="https://mvp.support.microsoft.com/communities/mvp.aspx?product=1&amp;amp;competency=Windows+Server+System+-+Infrastructure+Architect"&gt;Infrastructure Architect&lt;/A&gt; MVP programs 
&lt;LI&gt;Delivering the first-ever Architecture Track at Tech-Ed 2004 
&lt;LI&gt;Taking &lt;A href="http://www.thearchitectexchange.com/asehmi/"&gt;Arvindra's&lt;/A&gt; amazing &lt;SPAN style="TEXT-DECORATION: line-through"&gt;JOURNAL&lt;/SPAN&gt; &lt;A href="http://www.architecturejournal.net/"&gt;The Architecture Journal&lt;/A&gt; worldwide 
&lt;LI&gt;Launching the &lt;A href="http://www.microsoft.com/architecture"&gt;Architecture Resource Center&lt;/A&gt; and the &lt;A href="http://msdn.microsoft.com/architecture/"&gt;MSDN Solution Architecture Center&lt;/A&gt; websites 
&lt;LI&gt;Presenting at PDC, worldwide Tech-Eds, p&amp;amp;p Summits and a host of other events 
&lt;LI&gt;Meeting tons of customers in user group meetings, at executive briefings and in architecture design sessions&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I always joke that if I ever left Microsoft, I wouldn't want to go work for another technical company. Now, I get the chance to go affect the business of a Fortune 50 business while not having to leave Microsoft. Pretty sweet.&lt;/P&gt;
&lt;P&gt;See you on the other side.&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=916e317b-1d1c-44aa-912e-6044c44031f0"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=632338" width="1" height="1"&gt;</description></item><item><title>June DSL CTP</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/06/02/614292.aspx</link><pubDate>Fri, 02 Jun 2006 19:56:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:614292</guid><dc:creator>DevHawk</dc:creator><slash:comments>2</slash:comments><description>&lt;P&gt;Congrats to the team for their latest version of the &lt;A href="http://msdn.microsoft.com/vstudio/DSLTools"&gt;DSL Toolkit&lt;/A&gt;, integrated into the June CTP of the &lt;A href="http://affiliate.vsipmembers.com/affiliate/downloadfiles.aspx"&gt;VS SDK&lt;/A&gt;. According to the published product plans of the VS SDK, they're suppoesd to ship their next release - including the final DSL toolkit - next month. Looking forward to it.&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=8ee1fa11-64c2-4e54-b3bf-5e172cdbe19c"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=614292" width="1" height="1"&gt;</description></item><item><title>Thinking About Object Models</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/06/01/612622.aspx</link><pubDate>Thu, 01 Jun 2006 10:54:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:612622</guid><dc:creator>DevHawk</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;I'm doing some experiments with Amazon's S3 Service. Very cool service, I might add. Anyway, the sample C# REST code basically wraps the network requests with a single connection class that has individual methods for each type of service interaction (list all my buckets, list all objects in a bucket, create a bucket, create an object, you get the idea). &lt;/P&gt;
&lt;P&gt;However, S3's service is a natural hierarchy. The Service contains many Buckets, which in turn contain many Objects. So another way to wrap the service interaction is with a series of objects that are related to one another and only implement the service interactions relevant to that class. (Service would implement List My Buckets and perhaps Create Bucket. Bucket would implement List Objects and Delete Bucket. Again, you get the idea.)&lt;/P&gt;
&lt;P&gt;For an interface as relatively simple as S3 (the SOAP interface has a grand total of 13 operations) it probably doesn't matter one way or the other. Furthermore, it's probably a question of personal preference. My question: What's &lt;EM&gt;your&lt;/EM&gt; personal preference? A single object with many methods or a hierarchy of objects each with fewer methods?&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=c719933e-eb08-4303-a078-9a4151fd5368"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=612622" width="1" height="1"&gt;</description></item><item><title>Enterprise 2.0 ARCast</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/05/31/612286.aspx</link><pubDate>Thu, 01 Jun 2006 03:03:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:612286</guid><dc:creator>DevHawk</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;&lt;A href="http://www.ronjacobs.com/"&gt;Ron&lt;/A&gt; just posted his latest &lt;A href="http://channel9.msdn.com/shows/ARCast_with_Ron_Jacobs"&gt;ARCast&lt;/A&gt; featuring yours truly talking about &lt;A href="http://channel9.msdn.com/ShowPost.aspx?PostID=199017"&gt;Enterprise 2.0&lt;/A&gt;. Some of the same stuff I &lt;A href="http://devhawk.net/2006/04/18/Apparently+Microsoft+Delivered+On+Enterprise+20+Three+Years+Ago.aspx"&gt;blogged about last month&lt;/A&gt;, but in a conversational style. Check it out.&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=6e241dc2-8dd0-49d5-bb97-76e8b1225b45"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=612286" width="1" height="1"&gt;</description></item><item><title>Architect Connections Conference</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/05/30/611144.aspx</link><pubDate>Wed, 31 May 2006 02:56:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:611144</guid><dc:creator>DevHawk</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;For any readers in LA, I'm keynoting the &lt;A href="http://www.msattend.com/msarchitectconnections"&gt;MS Architect Connections&lt;/A&gt; conference in LA next week. They have a few spots still open, so if you're interested you can &lt;A href="http://www.msattend.com/msarchitectconnections/RegistrationStep2.aspx"&gt;sign up here&lt;/A&gt;.&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=1f1eaf10-cea9-4029-85c3-4819feb8af55"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=611144" width="1" height="1"&gt;</description></item><item><title>TechEd Iron Architect Contest</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/05/11/595720.aspx</link><pubDate>Fri, 12 May 2006 04:57:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:595720</guid><dc:creator>DevHawk</dc:creator><slash:comments>2</slash:comments><description>&lt;P&gt;For a change,&amp;nbsp;I'm not involved with TechEd at ALL this year. It's all Simon and Marty. Looks like they've got some cool stuff cooking, particularly the &lt;A href="http://blogs.msdn.com/ironarchitect/"&gt;Iron Architect contest&lt;/A&gt;. Almost makes me wish I was going this year. &lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=44ce8b07-8adc-40b8-a7dc-fe868eda01bb"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=595720" width="1" height="1"&gt;</description></item><item><title>ChucK Audio Programming Language</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/04/26/584594.aspx</link><pubDate>Thu, 27 Apr 2006 04:13:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:584594</guid><dc:creator>DevHawk</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;I saw reference to &lt;A href="http://chuck.cs.princeton.edu/"&gt;ChucK&lt;/A&gt; on &lt;A href="http://secondlife.blogs.com/prompt/"&gt;Prompt Criticality&lt;/A&gt;, a &lt;A href="http://www.secondlife.com/"&gt;Second Life&lt;/A&gt; Blog. I wanted to blog it for my own reference if for no other reason. ChucK is "a new audio programming language for real-time synthesis, composition, and performance" that "presents a new &lt;I&gt;time-based concurrent programming model&lt;/I&gt;, which supports a more precise and fundamental level of expressiveness, as well as multiple, simultaneous, dynamic control rates, a &lt;I&gt;precise and straightforward concurrency&lt;/I&gt;, and the ability to add, remove, and modify code, &lt;I&gt;on-the-fly&lt;/I&gt;, while the program is running, without stopping or restarting". &lt;/P&gt;
&lt;P&gt;Sounds facinating, esp. given my &lt;A href="http://devhawk.net/2006/04/14/Talking+Dynamic+Lanugages+With+Neal+Ford.aspx"&gt;recent discussion&lt;/A&gt; of internal vs. external DSLs w/ Neal Ford. Plus it deals w/ concurrency and is dynamic. &lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=5e0c1ef3-1aef-4a9b-936c-90cbcc79614d"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=584594" width="1" height="1"&gt;</description></item><item><title>Sacred Code Cows</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/04/24/582466.aspx</link><pubDate>Tue, 25 Apr 2006 02:50:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:582466</guid><dc:creator>DevHawk</dc:creator><slash:comments>2</slash:comments><description>&lt;P&gt;I &lt;A href="http://devhawk.net/2006/04/14/Talking+Dynamic+Lanugages+With+Neal+Ford.aspx"&gt;wrote&lt;/A&gt; of my meeting w/ &lt;A href="http://memeagora.blogspot.com/"&gt;Neal Ford&lt;/A&gt;&amp;nbsp;a few weeks ago. Today he has a long post on what he calls &lt;A href="http://memeagora.blogspot.com/2006/04/eating-sacred-hamburger.html"&gt;Eating Sacred Hamburger&lt;/A&gt;&amp;nbsp;that goes into more detail of some of the things we discussed:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;Software development cults tend to create sacred cows: habits and idioms that might have meant something at one time but only remain as baggage now. I tend to like to kill sacred cows and grill them up, with some nice lettuce, tomato, and a sesame seed bun. On my current project, we're actively killing some sacred cows.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;The main sacred cow he's talking about slaughtering is Hungarian Notation for interfaces. You know, interfaces like &lt;A href="http://msdn2.microsoft.com/en-us/library/system.data.idbconnection.aspx"&gt;IDbConnection&lt;/A&gt;&amp;nbsp;and &lt;A href="http://msdn2.microsoft.com/en-us/library/system.web.ihttphandler.aspx"&gt;IHttpHandler&lt;/A&gt;. &lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr&gt;Thankfully, Hungarian Notation has mostly been banished, except for one lingering, annoying location in the .NET world: the stupid "I" preface on interfaces. In fact, if you understand how interfaces should be used, this is exactly the opposite of what you want. In our application, every important semantic type is represented by an interface. Using interfaces like this makes it easier to do a whole host of things, including mocking out complex dependencies for testing. Why would you destroy the most important names in your application with Hungarian Notation telling you it's an interface? Ironically enough, that your semantic type is an interface is an implementation detail -- exactly the kind of detail you want to keep out of interfaces. I suspect this nasty habit developed in the .NET world because interfaces first came to the Microsoft world as COM (or, back when it started, OLE). It's a stupid cow now, and should be slaughtered.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;I agree 100% with this, though I'm guessing the next time I write an interface, I'll have to go back and delete the stupid "I" because I'm so used to writing it. &lt;/P&gt;
&lt;P dir=ltr&gt;The other convention he's looking to do away with camel and pascal casing, which is &lt;A href="http://msdn.microsoft.com/library/en-us/cpgenref/html/cpconcapitalizationstyles.asp"&gt;convention in .NET&lt;/A&gt;. He's a bigger fan of using underscores between words (which is big in the Ruby world). So far, he's only using underscores in his test methods since they tend to be longer, such as "Verify_end_to_end_security_connectivity_to_infrastructure". Frankly, I'm ambivalent on this one. I'm pretty good at reading camel and pascal casing and I would hope never to see a production method name like that.&lt;/P&gt;
&lt;P dir=ltr&gt;So that's two down, but there's still an entire herd of sacred cows out there. What other ones do we need to get rid of?&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=befc2e0c-ff9e-4732-a997-42246d9c239e"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=582466" width="1" height="1"&gt;</description></item><item><title>ActiveRecord::Migration</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/04/18/578588.aspx</link><pubDate>Wed, 19 Apr 2006 03:22:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:578588</guid><dc:creator>DevHawk</dc:creator><slash:comments>2</slash:comments><description>&lt;P&gt;When I wrote about the &lt;A href="http://devhawk.net/2006/03/28/The+Dual+Schema+Problem.aspx"&gt;Dual Schema&lt;/A&gt; problem a few weeks ago, I specifically wrote that the &lt;A href="http://www.rubyonrails.com"&gt;Rails&lt;/A&gt; model is backwards because it derives the in-memory schema from the database schema. While I still believe that, Rails' &lt;A href="http://api.rubyonrails.org/classes/ActiveRecord/Migration.html"&gt;ActiveRecord::Migration&lt;/A&gt;&amp;nbsp;library does make it significantly easier to manage the database from Ruby code. For those not familiar, ActiveRecord::Migration is a series of Ruby script files that define the database schema. Inside each migration script is an up and down method, so you can migrate forward and backward in the history of your project. And it provides easy to use abstractions such as create_table and add_column so you don't have to geek out on SQL syntax (unless you want to). Once you have a collection of these scripts, simply calling "rake migrate" will bring your database instance up to the current schema (&lt;A href="http://martinfowler.com/articles/rake.html"&gt;rake&lt;/A&gt; is Ruby's equivalent of make). Or, you can set your database to a specific version of the schema by running "rake migrate VERSION=X". &lt;/P&gt;
&lt;P&gt;I wonder why the &lt;A href="http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html"&gt;Rolling on Rails&lt;/A&gt; tutorial uses the database tools directly instead of ActiveRecord::Migrate? I'm thinking it wasn't available when the tutorial was written. Whatever the reason, they really should update the tutorial to reflect the current state of Rails.&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=d47d414a-96aa-4766-9333-bd01c3b65ac8"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=578588" width="1" height="1"&gt;</description></item><item><title>Apparently, Microsoft Delivered on Enterprise 2.0 Three Years Ago</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/04/18/578562.aspx</link><pubDate>Wed, 19 Apr 2006 02:46:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:578562</guid><dc:creator>DevHawk</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;In the past few weeks, there’s been a major uptick in discussion about Web 2.0 / Enterprise convergence. &lt;A href="http://blog.hbs.edu/faculty/amcafee"&gt;Andrew McAfee&lt;/A&gt; has a &lt;A href="http://sloanreview.mit.edu/smr/issue/2006/spring/06/"&gt;new article&lt;/A&gt; on what he calls Enterprise 2.0. &lt;A href="http://web2.wsj2.com/"&gt;Dion’s&lt;/A&gt; got an &lt;A href="http://blogs.zdnet.com/Hinchcliffe"&gt;entire blog&lt;/A&gt; on the subject, though &lt;A href="http://web2.wsj2.com/democratization_of_content_with_web_20_the_emergent_vs_delib.htm"&gt;he thinks&lt;/A&gt; it should be called Enterprise Web 2.0. &lt;A href="http://www.roughtype.com/"&gt;Nicholas Carr&lt;/A&gt; is &lt;A href="http://www.roughtype.com/archives/2006/04/is_web_20_enter.php"&gt;skeptical&lt;/A&gt;. Seems to me all this discussion about what &lt;I&gt;might&lt;/I&gt; happen in this space is pretty silly since it’s &lt;U&gt;happened already&lt;/U&gt;.&lt;/P&gt;
&lt;P&gt;Unfortunately, Andrew’s Enterprise 2.0 isn’t freely available (you can buy a copy of the PDF for $6.50), but it primarily focuses on the growing frustration with email and the rise of collaborative Web 2.0 technologies such as blogs and wikis inside the enterprise. No big shock here – for collaboration, blogs and wikis are to email what word processors are to typewriters. Andrew also introduces a model he calls SLATES for describing the aspects of these technologies: Search, Links, Authorship, Tags, Extensions and Signals. So far, all good stuff.&lt;/P&gt;
&lt;P&gt;The problem with the article is that he talks about these technologies in the future tense. For example, he writes: "As technologists build Enterprise 2.0 technologies that incorporate the SLATES components" which implies that these are coming down the pipe rather than here right now. Not only here right now, but available for going on three years. I’m talking about SharePoint 2003. 2003 as in "a year before &lt;A href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html"&gt;Tim O’ Reilly coined the term Web 2.0&lt;/A&gt;".&lt;/P&gt;
&lt;P&gt;SharePoint (I’m talking primarily about the &lt;A href="http://www.microsoft.com/windowsserver2003/technologies/sharepoint/default.mspx"&gt;free feature pack&lt;/A&gt; for Windows Server 2003 though about the &lt;A href="http://www.microsoft.com/office/sharepoint/prodinfo/default.mspx"&gt;portal server&lt;/A&gt; as well) supports Search, Links, Authorship and Signals – four of the six components of Andrew’s Enterprise 2.0 stack. (And frankly, I'm not sure where Andrew is going w/ his Extensions aspect so four out of five is probably more accurate.) More importantly, it’s specifically designed to support what Dion called the &lt;A href="http://web2.wsj2.com/democratization_of_content_with_web_20_the_emergent_vs_delib.htm"&gt;Democratization of Content&lt;/A&gt;. As of December 2004, Microsoft’s internal IT department &lt;A href="http://www.microsoft.com/technet/itsolutions/msit/infowork/spsperfnote.mspx"&gt;was supporting&lt;/A&gt; "more than 60,000 users, 250 group and division portals, 50,000 team sites, and manages more than 3 terabytes of information." Personally, I use the coportate enterprise intranet portal, my division portal, a handful of team sites and my personal site on a pretty much daily basis. Only the enterprise and division portal are centrally managed. Given the explosion of SharePoint sites inside Microsoft, I'm obviously not alone.&lt;/P&gt;
&lt;P&gt;Creating a new SharePoint team&amp;nbsp;site inside Microsoft is totally self service and takes literally a few seconds. Once you have a site, you can configure it as you like, creating lists and setting permissions as you see fit. Again, it’s totally self service. Plus, it’s totally public unless you specifically lock it down (well, public inside the firewall at any rate). Of course, it could be easier and better, and that’s what next versions are for. SharePoint 2007 will have &lt;A href="http://blogs.msdn.com/pjhough/archive/2005/09/23/473198.aspx"&gt;direct support&lt;/A&gt; for blogs, wikis and RSS. Check out the &lt;A href="http://channel9.msdn.com/showpost.aspx?postid=115383"&gt;C9 video&lt;/A&gt; for more info.&lt;/P&gt;
&lt;P&gt;Given the &lt;A href="http://www.microsoft.com/presspass/features/2006/jan06/01-20SharePointServices.mspx"&gt;market momentum&lt;/A&gt; to date and the &lt;A href="http://www.microsoft.com/office/preview/default.mspx"&gt;impending release&lt;/A&gt; of a new version, I find it very surprising to find Dion, Andrew and Nicholas discussing the potential ramifications of these technologies without even mentioning SharePoint. If these guys want to see the Enterprise 2.0 technology in action, all they need to do install SharePoint.&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=7ff8e0c4-8421-44ae-bfc5-c29df6c33702"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=578562" width="1" height="1"&gt;</description></item><item><title>Why's (Poignant) Guide to Ruby</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/04/14/576792.aspx</link><pubDate>Sat, 15 Apr 2006 09:07:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:576792</guid><dc:creator>DevHawk</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;Even if you don't care a lick about &lt;A href="http://ruby-lang.org/en/"&gt;Ruby&lt;/A&gt;, you should read &lt;A href="http://poignantguide.net/ruby/"&gt;Why’s (Poignant) Guide to Ruby&lt;/A&gt;. It is by far the most facinating (and freaky) technical book I've ever read. &lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=613057aa-265c-4956-b307-b90cb3734351"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=576792" width="1" height="1"&gt;</description></item><item><title>Talking Dynamic Lanugages with Neal Ford</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/04/14/576399.aspx</link><pubDate>Fri, 14 Apr 2006 19:42:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:576399</guid><dc:creator>DevHawk</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;I spent a couple of hours chatting with &lt;A href="http://memeagora.blogspot.com/"&gt;Neal Ford&lt;/A&gt; from &lt;A href="http://www.thoughtworks.com/"&gt;ThoughtWorks&lt;/A&gt; yesterday. &lt;A href="http://blogs.tedneward.com/"&gt;Ted Neward&lt;/A&gt; had virtually introduced us a few months ago and he was in town for &lt;A href="http://timheuer.com/blog/archive/2006/04/11/9596.aspx"&gt;MTS&lt;/A&gt;, so he arranged a meeting. I had asked Ted to introduce me to some dynamic language folks for some research and public debate purposes, and Neal was one of the people he hooked me up with. Unfortunately, this was right before I &lt;A href="http://devhawk.net/2006/01/24/Architect+On+The+Edge.aspx"&gt;changed roles&lt;/A&gt; and got real busy. Of course, dynamic languages in general and &lt;A href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/A&gt; in particular plays a large role in Edge Architecture, so I’m thankful Neal took the time to drop me a line and meet with me.&lt;/P&gt;
&lt;P&gt;Above all else, talking to Neal made me realize that I just don’t know enough about dynamic languages, which limits my ability to discuss them. To date, I’ve flirted with them, but haven’t made a real commitment. For example, I’ve played around with &lt;A href="http://instantrails.rubyforge.org/"&gt;Instant Rails&lt;/A&gt;, but hadn’t actually &lt;A href="http://rubyforge.org/projects/rubyinstaller/"&gt;installed Ruby&lt;/A&gt; yet. It was time to re-image my dev partition anyway, so I’m going to try using Ruby exclusively for a while.&lt;/P&gt;
&lt;P&gt;Here’s a brain dump of some of what we talked about. Not sure what it all means yet, so I’ll try and refrain from making commentary.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Hungarian notation for interfaces (i.e. ISomething) is a big &lt;A href="http://en.wikipedia.org/wiki/Code_smell"&gt;code smell&lt;/A&gt;. This has nothing really to do with Ruby or dynamic languages, but it’s an important point that I wanted to include here. Neal’s point is that the interface defines the semantics of the type and the concrete class is an “implementation detail”. In other words, contract-first isn’t just for web services. Apparently, ThoughtWorks doesn’t use ADO.NET directly primarily because the interfaces “aren’t pervasive enough” and are difficult to mock out. Also, they’re using &lt;A href="http://www.ayende.com/projects/rhino-mocks.aspx"&gt;Rhino Mocks&lt;/A&gt; which I wasn’t previously aware of.&lt;/LI&gt;
&lt;LI&gt;For all the debate about static vs. dynamic languages, it seems like the value Ruby brings is in meta-programming rather than dynamic typing. Certainly, that’s one of the big differentiators for Ruby vs. other dynamic languages like Python. While &lt;A href="http://www.rubyonrails.com/"&gt;Rails&lt;/A&gt; has pushed the popularity of Ruby thru the roof recently, Neal seems much more enamored with Ruby than Rails. &lt;/LI&gt;
&lt;LI&gt;There is an even bigger gulf between dynamic and static typing proponents than I had thought. I brought up &lt;A href="http://research.microsoft.com/os/singularity/"&gt;Singularity&lt;/A&gt;, which uses static typing exclusively to deliver a provably dependable system. Neal disagreed with that approach, pointing out that “tests are the best way of encoding the specification of the system” rather than compile time checking. Given my lack of expertise in this space, I’m withholding comment (for now) but I’m guessing the truth is somewhere in the middle.&lt;/LI&gt;
&lt;LI&gt;However, while the dynamic vs. static typing gulf is big, meta-programming is potentially the bridge. I don’t believe meta-programming is exclusive to dynamic languages. Certainly, some of the new features in the “Orcas” versions of C# and VB bring more expressiveness to the languages while still remaining type safe. &lt;/LI&gt;
&lt;LI&gt;All this meta-programming leads to domain specific languages. Ruby has strong support what &lt;A href="http://martinfowler.com/"&gt;Martin Fowler&lt;/A&gt; called “&lt;A href="http://martinfowler.com/articles/languageWorkbench.html#InternalDsl"&gt;internal DSLs&lt;/A&gt;”, but Neal thought over time the focus would shift to &lt;A href="http://martinfowler.com/articles/languageWorkbench.html#ExternalDsl"&gt;external DSLs&lt;/A&gt; as they are more expressive and not constrained by the semantics of an existing language. Obviously, we’re pretty &lt;A href="http://msdn.microsoft.com/vstudio/dsltools/"&gt;heavily focused&lt;/A&gt; on DSLs. However, Neal did think our focus on graphical DSLs is misplaced. He called them a “hangover” from CASE/UML tools. He rightfully pointed out that “business analysis speak English”. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;All in all, it was time well spent. Neal, I hope we can pick up the conversation again sometime.&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=abc47a35-d16b-43d9-ba92-550187d382e9"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=576399" width="1" height="1"&gt;</description></item><item><title>LINQ + WAP == Coolness</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/04/06/570438.aspx</link><pubDate>Fri, 07 Apr 2006 05:48:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:570438</guid><dc:creator>DevHawk</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;I never really missed &lt;A href="http://msdn.microsoft.com/asp.net/reference/infrastructure/wap/default.aspx"&gt;Web Application Project&lt;/A&gt; support in VS05 until I realized what I could do with it. I've been experimenting with LINQ and wanted to be able to use it in a web application I'm prototyping. Under the file system model, there's no easy way to change the compiler used for dynamic compilation of web pages. With WAP, it's no problem. &lt;/P&gt;
&lt;P&gt;If you've got both WAP and LINQ installed, you can enable LINQ support in your web apps by doing the folllowing.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Open your WebApp.csproj file in notepad. 
&lt;LI&gt;Add references to System.Query, System.Data.DLinq and System.Xml.XLinq. 
&lt;LI&gt;Change the Target Import element to import "$(ProgramFiles)\LINQ Preview\Misc\Linq.targets" instead of "$(MSBuildBinPath)\Microsoft.CSharp.targets"&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;That's it! Seems simple, but it let me bind a GridView to the following function:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#008080&gt;IEnumerable&lt;/FONT&gt;&amp;lt;Titles&amp;gt; GetTitles()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;{&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt; con = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; SqlConnection(Properties.Settings.Default.PubsConString);&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt; db = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; Pubs(con);&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt; q = &lt;FONT color=#0000ff&gt;from&lt;/FONT&gt; t &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; db.Titles &lt;FONT color=#0000ff&gt;select&lt;/FONT&gt; t;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp; return&lt;/FONT&gt; q;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;It would be even cooler if I could simply write that query in the conext of the ObjectDataSource, but of course ObjectDataSource doesn't know about LINQ. I imagine a LinqDataSource would be a logical next step. &lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=495490e7-335d-4eed-8f03-6b4512fe9601"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=570438" width="1" height="1"&gt;</description></item><item><title>RubyNet Project</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/04/06/570152.aspx</link><pubDate>Thu, 06 Apr 2006 22:59:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:570152</guid><dc:creator>DevHawk</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;Having written about Ruby in the scope of the &lt;A href="http://devhawk.net/2006/03/15/Compiler+Dev+Lab++Scripting.aspx"&gt;Compiler Dev Lab&lt;/A&gt; and the &lt;A href="http://devhawk.net/2006/03/28/The+Dual+Schema+Problem.aspx"&gt;Dual Schema Problem&lt;/A&gt;, I was interested to come across the &lt;A href="http://www.plas.fit.qut.edu.au/rubynet/"&gt;Ruby.NET project&lt;/A&gt; from &lt;A href="http://www.fit.qut.edu.au/"&gt;Queensland University of Technology&lt;/A&gt;. From the Ruby.NET home page:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;Our goal is to create a compiler for the Ruby language that targets the .NET CLR. We aim to support 100% of Ruby language semantics, including all dynamic constructs such as closures and continuations. We plan to generate 100% managed and verifiable CIL code. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Sweet!&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=f4ce5882-77b1-4f05-b435-6f659414f0e8"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=570152" width="1" height="1"&gt;</description></item><item><title>The Dual Schema Problem</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/03/28/563445.aspx</link><pubDate>Wed, 29 Mar 2006 02:35:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:563445</guid><dc:creator>DevHawk</dc:creator><slash:comments>2</slash:comments><description>&lt;P&gt;A few months ago, Ted Neward wrote a &lt;A href="http://msdn.microsoft.com/library/en-us/dndotnet/html/linqcomparisons.asp"&gt;great article&lt;/A&gt;&amp;nbsp;about the history of the Object Relational Impedance Mismatch problem and how &lt;A href="http://msdn.microsoft.com/netframework/future/linq"&gt;LINQ&lt;/A&gt; is addressing it in a new way. Basically, LINQ is introducing new language abstractions and complementary libraries to enable queries as a first class concept within the language. However, I don't believe that O/R Impedance Mismatch is the whole problem. More specifically, it's a follow-on problem to what I would call the Dual Schema problem. &lt;/P&gt;
&lt;P&gt;In a nutshell, the Dual Schema problem is that you have to design and implement two separate versions of your persistent entities. There's the in memory version, typically written in an OO language like C# or Java. Then there's the on disk version, typically written in SQL. Regardless of the difficulties translating between the two versions (i.e. the aforementioned impedance mismatch), you have to first deal with the complexity of keeping the two versions in sync. While LINQ does a great job eliminating much of the friction translating between on disk and in memory formats, it could go much farther by eliminating the need for translation in the first place. &lt;/P&gt;
&lt;P&gt;A variety of solutions to the Dual Schema problem have evolved, primarily outside the hallowed halls of enterprise vendors (i.e. MS and others like us). One such solution is &lt;A href="http://www.rubyonrails.com/"&gt;Ruby on Rails&lt;/A&gt;. In a Rails environment, I simply declare the existence of a given persistent entity:&lt;/P&gt;
&lt;P style="FONT-FAMILY: 'Courier New'"&gt;class Person &amp;lt; ActiveRecord::Base&lt;BR&gt;end&lt;/P&gt;
&lt;P&gt;The ActiveRecord base class (a standard part of Rails) will dynamically create methods and attributes on the Person object at runtime, based on the schema of the People table in the database. (Rails is smart enough to understand English plurals, hence the automatic connection of Person and People.) So technically there are still two schemas, but the in-memory version is automatically derived of the on-disk version. &lt;/P&gt;
&lt;P&gt;(Note, DLinq provides a conceptually similar tool - SqlMetal - that can generate the static types from a given database schema. However, as static types they have to be defined at compile time. So while SqlMetal reduces the effort to keep schemas in sync, it doesn't eliminate it the way Rails does.) &lt;/P&gt;
&lt;P&gt;By slaving the object schema to the database schema, Rails essentially solves the Dual Schema problem. The problem with the Rails approach is that defining a database schema requires a significant amount of skill and effort. Defining classes is typically trivial in comparison.The fact Rails allows you to implement a persistent entity with almost no code doesn’t help you much if you have to write and maintain a ton of SQL code to define your database schema.&lt;/P&gt;
&lt;P&gt;I believe the Rails model is actually backwards. It would be much better for the developer if they could define their persistent entity in code and slave the database schema to the object model instead of the other way around. &lt;/P&gt;
&lt;P&gt;Of course, this approach isn't exactly news. In his article, Ted writes of the rise and fall of OO database management systems, which were supposed to solve the Dual Schema and Impedance Mismatch problems. I'm certainly not suggesting a return to the heyday of OODBMS. However, one of the reasons Ted points out OODBMS failed was because big companies were already wedded to RDBMS. But those big companies are the short head. As you move down the &lt;A href="http://bnoopy.typepad.com/bnoopy/2005/03/the_long_tail_o.html"&gt;long tail of software&lt;/A&gt;, relational database as the primary storage paradigm makes less and less sense. For the vast majority of applications, relational databases are overkill. &lt;/P&gt;
&lt;P&gt;Ted's other point about OODBMS is that loose coupling between the data store and the in memory representation is a feature, not a flaw. He's totally right. But can't we advance the state of the art in database typing to the level of modern day OO languages? How about eliminating anachronisms like fixed length strings? What if we derive the database schema from the object model - Rails in reverse if you will - but is still loosely coupled enough to allow for schema evolution? &lt;/P&gt;
&lt;P&gt;An example of this code-centric model for data storage is &lt;A href="http://www.garret.ru/~knizhnik/consus.html"&gt;Consus&lt;/A&gt;. It’s written by Konstantin Knizhnik, who has written a bunch of &lt;A href="http://www.garret.ru/~knizhnik/databases.html"&gt;open source, object-oriented and object-relational databases&lt;/A&gt; across a wide variety of languages and execution environments, including CLR. Consus is actually written in Java, but he provides version compiled for .NET using &lt;A href="http://msdn.microsoft.com/vjsharp/"&gt;Visual J#&lt;/A&gt;. Consus lets you to define your data either as tables or objects. So you can do this:&lt;/P&gt;
&lt;P style="FONT-FAMILY: 'Courier New'"&gt;Statement st = db.createStatement();&lt;BR&gt;st.executeUpdate(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "create table Person (name string, address string, salary bigint)");&lt;BR&gt;st.executeUpdate(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "insert into Person values ('John Smith', '1 Guildhall St.', 75000)");&lt;BR&gt;ResultSet rs = st.executeQuery(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "select name, address, salary from Person where salary &amp;gt; 100000");&lt;/P&gt;
&lt;P&gt;Or you can do this:&lt;/P&gt;
&lt;P style="FONT-FAMILY: 'Courier New'"&gt;class Person { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String name; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String address; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long salary;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Person(String aName, long aSalary, String aAddress) { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name = aName; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;salary = aSalary; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;address = aAddress;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;};&lt;/P&gt;
&lt;P style="FONT-FAMILY: 'Courier New'"&gt;Person p = new Person("John Smith", 75000, "1 Guildhall St.");&lt;BR&gt;ConsusStatement st = db.createStatement();&lt;BR&gt;stmt.insert(p);&lt;BR&gt;ConsusResultSet cursor = (ConsusResultSet)st.executeQuery(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "select from Person where salary &amp;gt; 100000");&lt;/P&gt;
&lt;P&gt;Consus also handles OO concepts like derivation and containment. Of course, the embedded queries are ugly, but you could imagine DLinq style support for Consus. In fact, one of the primary issues with Consus is that it supports both object and tuple style queries. When you explicitly request tables (i.e. "select name, address salary from Person"), you’ve got a tuple style query. When you don’t (i.e. "select from Person”) you’ve got an object style query. Of course, the issues with tuple style queries are well documented in Ted’s article and is exactly the problem that LINQ is designed to solve.&lt;/P&gt;
&lt;P&gt;(Konstantin, if you’re reading this, &lt;A href="mailto:harry.pierson@microsoft.com"&gt;drop me a line&lt;/A&gt; and I’ll look into getting you hooked up with the LINQ folks if you’re interested in adding LINQ support to Consus.NET.)&lt;/P&gt;
&lt;P&gt;The tradeoff between the Rails approach and the Consus approach is one of performance. I have a ton of respect for Konstantin and the work he’s done on Consus and other OO and OR databases available from his site. However, I sure the combined developer forces at major database vendors like Microsoft (and other DB companies) means SQL Server (and the like) will out perform Consus by a significant margin, especially on large scale databases. So if execution performance is your primary criteria, the Ruby on Rails approach is better (leaving aside discussion of the Ruby runtime itself). However, in the long run execution performance is much less important than developer productivity. So I believe that &amp;nbsp;for all the current interest in Rails, I think a Consus-style model will become dominant. &lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=3e4f284e-9be2-491c-aee3-dd427ced2020"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=563445" width="1" height="1"&gt;</description></item><item><title>CLR Everywhere</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/03/22/557993.aspx</link><pubDate>Wed, 22 Mar 2006 19:51:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:557993</guid><dc:creator>DevHawk</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;Big news from the Game Developers Conference this week is the XNA Framework. From the &lt;A href="http://www.microsoft.com/XNA/3.20.2006.aspx"&gt;press release&lt;/A&gt;:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;The XNA Framework contains a custom implementation of the Microsoft® .NET Framework and new game-development-specific libraries designed to help game developers more easily create cross-platform games on Windows® and Xbox 360 using the highly productive C# programming language. Using the XNA Framework, game developers will benefit from the ability to re-use code and game assets in developing multiplatform titles, without sacrificing performance or flexibility. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;So now I can the Xbox to the list of personal technology I can program, joining&amp;nbsp;my &lt;A href="http://msdn.microsoft.com/netframework/programming/netcf/default.aspx"&gt;phone&lt;/A&gt;, my &lt;A href="http://msdn.microsoft.com/mce"&gt;TV&lt;/A&gt;, my &lt;A href="http://asp.net"&gt;server&lt;/A&gt; and my &lt;A href="http://msdn.microsoft.com/winfx/"&gt;laptop&lt;/A&gt; all with C# or VB (&lt;A href="http://weblogs.asp.net/brianbec/archive/2005/09/02/424335.aspx"&gt;VB plug&lt;/A&gt; brought to you by &lt;A href="http://weblogs.asp.net/brianbec/archive/2005/09/02/424335.aspx"&gt;Brian&lt;/A&gt;&amp;nbsp;and &lt;A href="http://research.microsoft.com/~emeijer/"&gt;Erik&lt;/A&gt; who think I should to switch). I wonder if XNA Framework will support WPF?&lt;/P&gt;
&lt;P dir=ltr&gt;BTW, I still want an easy&amp;nbsp;way to program my house and my car, but I'm sure those are coming. &lt;/P&gt;
&lt;P dir=ltr&gt;Where else should the CLR live?&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=c1015410-a97c-415c-876c-e8ac9ac52515"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=557993" width="1" height="1"&gt;</description></item><item><title>The Annoying C# 3.0 "Unsupported Version" Dialog</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/03/17/554065.aspx</link><pubDate>Sat, 18 Mar 2006 01:41:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:554065</guid><dc:creator>DevHawk</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;I am sick and tired of the warning dialog box for the &lt;A href="http://download.microsoft.com/download/4/7/0/4703eba2-78c4-4b09-8912-69f6c38d3a56/linq%20preview.msi"&gt;C# 3.0 preview&lt;/A&gt;. Every time you launch VS it pops up a dialog reading "This is an unsupported version of Microsoft Visual C# 3.0. As such many features may not work as expected." You know, this isn't my first time working with alpha or beta quality software. I'm also running &lt;A href="http://msdn.microsoft.com/windowsvista/downloads/getthebeta/default.aspx"&gt;WinFX Feb CTP&lt;/A&gt;, &lt;A href="http://download.microsoft.com/download/b/3/1/b3141ee3-4a13-4061-a96e-4ae3c37ea0e0/LINQ%20VB%20Preview%20(Jan%202006).msi"&gt;VB 9.0 Jan CTP&lt;/A&gt; and the &lt;A href="http://www.microsoft.com/products/expression/en/interactive_designer/id_free_trial.aspx"&gt;Expression Interactive Designer March CTP&lt;/A&gt;. None of them feel the need to constantly remind me that they're unsupported. &lt;/P&gt;
&lt;P&gt;Who suddenly thought C# developers need hand holding?&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=1f3ac744-fd2b-435b-b379-3d98a451ecb7"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=554065" width="1" height="1"&gt;</description></item><item><title>The SQL Complexity Problem</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/03/16/552613.aspx</link><pubDate>Thu, 16 Mar 2006 11:51:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:552613</guid><dc:creator>DevHawk</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;I mentioned on the &lt;A href="http://devhawk.net/2006/03/14/Compiler+Dev+Lab++LINQ.aspx"&gt;first day of the Compiler Dev Lab&lt;/A&gt; that &lt;A href="http://weblogs.asp.net/brianbec"&gt;Brian Beckman&lt;/A&gt; is a hoot. He's also wicked smart. He &lt;A href="http://weblogs.asp.net/brianbec/archive/2006/03/15/440293.aspx"&gt;posted&lt;/A&gt; about his demo from Monday where he demonstrates building indexes for use in LINQ queries. In his words:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;In the terminology of relational databases, a “join” is, semantically, like a nested loop over a pair of lists (or tables) of records, saving only those where some certain fields match. Unless we do something smart, this could be very expensive. Imagine searching a database of a million DNA profiles for the closest match to a sample that has 10,000 DNA features (I have no idea whether those are real numbers: I just made them up, but they sound ballpark to me). A dumb join would search all 1 million profiles for each of the 10,000 features, resulting in 10 billion match tests, almost all of which will fail – by design, of course. That’s going to hurt. &lt;/P&gt;
&lt;P&gt;The “something smart” is to build an index and search through that. Your database doesn’t have to be large at all for this to pay off. In fact, even with just a few records, it’s cheaper to build an index, use it, and throw it away than it is to do a nested loop. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;He goes on to prove out his point about building an index. For his full dataset (joining 3053 cities with 195 countries) it is literally 65x slower not to build a one-off index. Even for smaller datasets, the time difference is less dramatic but still significant. For example, with 89 cities instead of 3053, it's 3x slower not to build the index. &lt;/P&gt;
&lt;P dir=ltr&gt;The reason I'm so interested in Brian's post is because of my &lt;A href="http://devhawk.net/2006/02/27/Experimenting+With+Ning.aspx"&gt;experiments with Ning&lt;/A&gt;. As you might recall, in trying to build a .NET version of &lt;A href="http://partisanhacks.ning.com/"&gt;Partisan Hacks&lt;/A&gt;, I found ASP.NET 2.0 to be significantly simpler than PHP (which Ning uses). However, building even the trivial SQL Express database for Partisan Hacks was a non-trivial exercise. Sure, I've done it many times before, but it seems strange that ASP.NET makes it so easy to build a site while SQL Server makes it so complex to build a database. If I was a novice user, I would never be able to build a database for my web site.&lt;/P&gt;
&lt;P dir=ltr&gt;Why is this? I think that the simple app or amateur developer is simply not the target audience for SQL Server (even SQL Express). If you don't know the difference between nvarchar(100) and varchar(max) you're pretty much out in the cold when it comes to SQL Server. Their target audience appears to be enterprise databases that are cared for by enterprise database administrators. Databases with scores of tables and millions of rows. Great for them, bad for novice users who just want to persist their data somewhere quickly and easily.&lt;/P&gt;
&lt;P dir=ltr&gt;Why can't building my database be as simple as building my site?&lt;/P&gt;
&lt;P dir=ltr&gt;Ning makes it easy to use their &lt;A href="http://documentation.ning.com/post.php?Post:slug=XN-XN_Content"&gt;Content Store&lt;/A&gt;. You create an instance of a content object, you set properties (dynamic ones), you hit save. No fuss, no muss, no db schema. Sure is an easier model to understand and program to. In that regard, it blows away everything, even &lt;A href="http://www.rubyonrails.com/"&gt;Ruby on Rails&lt;/A&gt;. RoR is pretty sweet, but it needs a real database schema on the back end in order to drive RoR's guiding principle of "convention over configuration&lt;EM&gt;"&lt;/EM&gt;. If there's no DB schema to discover, I think much of the RoR model would break down. (but that may just be my lack of RoR experience talking)&lt;/P&gt;
&lt;P dir=ltr&gt;I not sure what a simpler database system would look like, but one idea of mine is to use a schemaless database. Much of the complexity comes from having to define both an in memory as well as perseistant schema, as well as the translation between them. If you just stored managed .NET objects, you would eliminate the redundant schema specification. It's not a fully fleshed out concept, but it is a start of an idea.&lt;/P&gt;
&lt;P dir=ltr&gt;What other ideas would make persistant data significantly easier to work with?&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=dc8da217-b67e-4aa0-9cb9-fe57d0ad28c1"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=552613" width="1" height="1"&gt;</description></item><item><title>Compiler Dev Lab - Scripting</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/03/15/552095.aspx</link><pubDate>Wed, 15 Mar 2006 22:25:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:552095</guid><dc:creator>DevHawk</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;Day Two of the Compiler Dev Lab was all about scripting. &lt;A href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=ad7acff7-ab1e-4bcb-99c0-57ac5a3a9742"&gt;Iron Python&lt;/A&gt; was the primary focus of the day, but they also had &lt;A href="http://www.php-compiler.net/"&gt;Phalanger&lt;/A&gt; (Managed &lt;A href="http://www.php.net/"&gt;PHP&lt;/A&gt;) and &lt;A href="http://blogs.msdn.com/monad/"&gt;Monad&lt;/A&gt; folks there as well. &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;I hadn't realized just how performant these dynamic languages are on the CLR when compared to their native versions. The &lt;A href="http://www.ironpython.com/"&gt;original version&lt;/A&gt; of Iron Python was 1.7x faster than the standard C implementation back in the summer of '04. Now with&amp;nbsp;CLR 2.0, that version is now 2x faster with out any code changes. The Phalanger folks said they are 2.5x faster than the native version of PHP (1.7x faster than PHP + the &lt;A href="http://www.zend.com/products/zend_optimizer"&gt;Zend Optimizer&lt;/A&gt;). That's pretty impressive performance. 
&lt;LI&gt;The IronPython folks are heavy users of the new &lt;A href="http://msdn2.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod(VS.80).aspx"&gt;DynamicMethod class&lt;/A&gt; from .NET 2.0. Otherwise known as Lightweight Code Generation, DynamicMethod allows you emit a static function but have it get garbage collected when it's no longer needed. IP almost never generates new classes, since new types can't be garbage collected. The only times they generate actual classes are when you inherit from an existing .NET class or when you generate a new delegate type. 
&lt;LI&gt;It's really hard to serve the dual masters of both the existing language community and the .NET community. &lt;A href="http://blogs.msdn.com/hugunin/default.aspx"&gt;Jim Hugunin&lt;/A&gt; used the example of String.Trim(). A .NET developer would expect String.Trim() to "just work". A Python developer would expect that to throw an AttributeError exception (the Python equivalent of Trim is strip). How do you handle this? In IP, it defaults to pure Python mode, but if you enter "import clr", you move into .NET hybrid mode. 
&lt;LI&gt;One of the typical features of dynamic languages is the ability to change the base class of an object on the fly. Jim demoed this with WPF. He created a class that inherited from one type of panel and then set the __class__ property of the object to a different panel and the display changed immediately. Freaky, but cool. 
&lt;LI&gt;Jim showed a demo of a WPF app that hosted Python for extensibility. One of the scripts in turn hosted Python to create an interactive console for the app. Having a scripting engine that can host itself is awesome. 
&lt;LI&gt;The &lt;A href="http://affiliate.vsipmembers.com/affiliate/downloadfiles.aspx"&gt;VSIP SDK CTP&lt;/A&gt;&amp;nbsp;(reg required)&amp;nbsp;includes an sample lanugage integration project for Iron Python. So you can get both the source into IP language itself as well as the source to the integration into Visual Studio. 
&lt;LI&gt;I got an email yesterday from someone asking about the possibility of Visual Ruby.NET. I haven't heard anything about it, but it would be cool to see &lt;A href="http://www.rubyonrails.com/"&gt;Ruby on Rails&lt;/A&gt; runing under CLR. &lt;A href="http://www.iunknown.com/"&gt;John Lam&lt;/A&gt; is working on &lt;A href="http://www.iunknown.com/articles/2006/02/20/second-drop-of-rubyclr"&gt;RubyCLR&lt;/A&gt;, but my understanding is that is a bridge between the CLR and the Ruby runtime, not a CLR implemenation of the Ruby runtime. (IP is a CLR implementation of the Python runtime.) I'm thinking that there are some similarities between Ruby and Python, so having the source of IronPython would be a huge help in building a Visual Ruby implementation. For example, both Ruby and Python have &lt;A href="http://martinfowler.com/bliki/Closure.html"&gt;closures&lt;/A&gt;. IP has a &lt;FONT size=2&gt;FunctionEnvironment &lt;/FONT&gt;class which is used to lift stack variables onto the heap in a variety of scenarios, including closures. So if I was building Visual Ruby, having access to the FunctionEnvironment class would be a good start. 
&lt;LI&gt;I said yesterday that I need to learn more about F#. They showed a video of an internal F# presentation, but I spent most of my time cracking jokes with &lt;A href="http://codebetter.com/blogs/sam.gentile/default.aspx"&gt;Sam Gentile&lt;/A&gt;&amp;nbsp;who's in town for an &lt;A href="http://www.gotdotnet.com/codegallery/codegallery.aspx?id=941d2228-3bb5-42fd-8004-c08595821170"&gt;SC-BAT&lt;/A&gt; workshop. 
&lt;LI&gt;I didn't pay enough attention to the Monad presentation. :(&lt;/LI&gt;&lt;/UL&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=866fb4d2-37de-4f84-b8ba-66b9f1c9b27b"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=552095" width="1" height="1"&gt;</description></item><item><title>Compiler Dev Lab - LINQ</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/03/14/551347.aspx</link><pubDate>Tue, 14 Mar 2006 22:33:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:551347</guid><dc:creator>DevHawk</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt; &lt;/P&gt;
&lt;P&gt;Even though I haven't finished my ETech postings, I'm already onto another event. This week, thanks to an invite from &lt;A href="http://blogs.msdn.com/mglehman/"&gt;Michael Lehman&lt;/A&gt;, I'm sitting in on a Compiler Lab discussing implementing other languages for CLR. The first day was about &lt;A href="http://msdn.microsoft.com/netframework/future/linq/"&gt;LINQ&lt;/A&gt;.&amp;nbsp;Much of the info is rehashed from PDC or the docs up on MSDN. However, I have learned a few new things.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;One of the standard features of LINQ is Extension Methods. That enables you to declare a static method like "static&amp;nbsp;void Foo(this string source)" and then use it like "stringvar.Foo()". Apparently, they are considering adding other types of extension members including properties and fields. The idea of extension fields is somewhat scary but powerful. &lt;/LI&gt;
&lt;LI&gt;LINQ uses something Anders called deferred query execution. The query isn't executed until the values are asked for (typically by calling foreach on the query). That means you can compose queries to your hearts content with no perf impact until you actually invoke the query. &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/vbasic/Future/default.aspx?pull=/library/en-us/dnvs05/html/vb9overview.asp#vb9overview_topic7"&gt;Query Comprehensions&lt;/A&gt; in C# and VB is a pattern implementation in a similar vein to foreach. Foreach is relatively simple shorthand for iterating through an collection by calling IEnumerator.MoveNext until it returns false. While LINQ enables arbitrary composition of queries, there is obvious gravitational pull towards the SELECT / FROM / WHERE / ORDER BY / GROUP BY approach favored by SQL. So if you build your own query operator, you can include it in a LINQ query, but C# and VB won't be able to include it in the Query Comprehension syntax. Probably not a big deal, given the breadth of standard query operators as well as the deferred query execution, but it's good to understand how the abstraction works.&lt;/LI&gt;
&lt;LI&gt;I want to know more about how &lt;A href="http://download.microsoft.com/download/c/f/b/cfbbc093-f3b3-4fdb-a170-604db2e29e99/DLinq%20Overview.doc"&gt;DLinq&lt;/A&gt; is implemented. I've been refining my thinking about data since &lt;A href="http://devhawk.net/2006/02/27/Experimenting+With+Ning.aspx"&gt;working with Ning's content store&lt;/A&gt; and I'm convinced of the need for a simplified datastore. SQL is designed for significantly complex database schemas, which means a significantly complex development environment. &lt;/LI&gt;
&lt;LI&gt;I'm looking much more closely at VB, given the new features in &lt;A href="http://msdn.microsoft.com/vbasic/Future/default.aspx?pull=/library/en-us/dnvs05/html/vb9overview.asp"&gt;VB 9.0&lt;/A&gt;. Not only the LINQ stuff from C# like type inference, extension methods and anonymous types but also VB specific stuff like &lt;A href="http://msdn.microsoft.com/vbasic/Future/default.aspx?pull=/library/en-us/dnvs05/html/vb9overview.asp#vb9overview_topic6"&gt;XML Literals&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/vbasic/Future/default.aspx?pull=/library/en-us/dnvs05/html/vb9overview.asp#vb9overview_topic12"&gt;Duck Typing&lt;/A&gt;. Combined with VB's existing support for late binding, there are compelling features to make VB attractive over C#. &lt;/LI&gt;
&lt;LI&gt;I've been hanging out with &lt;A href="http://weblogs.asp.net/brianbec"&gt;Brian Beckman&lt;/A&gt;. He's a hoot. &lt;/LI&gt;
&lt;LI&gt;I think I need to take a deeper look at &lt;A href="http://research.microsoft.com/fsharp/"&gt;F#&lt;/A&gt;.&lt;/LI&gt;&lt;/UL&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=d8d60ca8-7b41-4d46-9cc6-e6a4cc05dfc3"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=551347" width="1" height="1"&gt;</description></item><item><title>ETech Day Three Quick Thoughts</title><link>http://blogs.msdn.com/b/devhawk/archive/2006/03/08/546779.aspx</link><pubDate>Thu, 09 Mar 2006 07:42:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:546779</guid><dc:creator>DevHawk</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;After my marathon blogging session last night and taking notes all day, I'm a bit burnt out on writing. But here are a few quick thoughts. More details to follow.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;I'm digging the &lt;A href="http://www.live.com/"&gt;Live.com home page&lt;/A&gt;&amp;nbsp;and the integrated Live Search. Since I'm on a rented laptop, &lt;A href="http://toolbar.live.com/"&gt;Live Toolbar&lt;/A&gt; will have to wait. Coolest new feature IMO is the &lt;A href="http://microsoftgadgets.com/Macros"&gt;Search Macros&lt;/A&gt;, though it's a tight race with the new image search interface. 
&lt;LI&gt;Jon Udell and Michael Goldhaber spoke about attention economy today. I still don't get it, though Jon had some interesting ideas about metadata.&amp;nbsp;I'll believe that attention is a currency when I can buy a car with it. 
&lt;LI&gt;I liked the session on the &lt;A href="http://developer.yahoo.com/ypatterns"&gt;Yahoo! Design Patterns&lt;/A&gt;, though the title and abstract of the session were awful. The title was "&lt;A href="http://conferences.oreillynet.com/cs/et2006/view/e_sess/8602"&gt;The Language of Attention: A Pattern Approach&lt;/A&gt;". The inclusion of attention just confused the issue. Why couldn't they just call it "A Pattern Language for User Experience"? Because it doesn't have the concept of attention shoehorned into it. 
&lt;LI&gt;I really like&amp;nbsp;&lt;A href="http://eventful.com/"&gt;Eventful&lt;/A&gt;, even though I'm &lt;A href="http://devhawk.net/2006/02/13/Web+20+Evolution.aspx"&gt;on record&lt;/A&gt; as thinking their business model doesn't work. Their new &lt;A href="http://eventful.com/demand"&gt;demand feature&lt;/A&gt; is pretty cool, though it doesn't really help their business model any. 
&lt;LI&gt;George Dyson's session on "&lt;A href="http://conferences.oreillynet.com/cs/et2006/view/e_sess/8035"&gt;Turing's Cathedral&lt;/A&gt;" was fascinating, though he tried to cover too much ground in the time alloted. 
&lt;LI&gt;I'm not sure what the point of Joel Spolsky's &lt;A href="http://conferences.oreillynet.com/cs/et2006/view/e_sess/8323"&gt;Blue Chip Report Card&lt;/A&gt; was. Apparently the alien from &lt;A href="http://www.reddit.com"&gt;Reddit&lt;/A&gt; is cute and Motorola newer cell phones (RAZR and PEBL) are taking Joel's advice on becoming "blue chip". This is somewhat related to points the folks from Adobe (previously Macromedia) made, except much more obtuse. 
&lt;LI&gt;I have no idea what the point or business model of Plum is, even though it was &lt;A href="http://conferences.oreillynet.com/cs/et2006/view/e_sess/9004"&gt;featured&lt;/A&gt; as a keynote (a last minute promotion it appears from the conference guide). Seems too complex and centralized to actually work. 
&lt;LI&gt;I &lt;A href="http://devhawk.net/2006/03/08/Felipe+Cabrera+On+Amazons+Mechanical+Turk.aspx"&gt;wrote last night&lt;/A&gt;&amp;nbsp;that Casting Words isn't really a business because nothing stops me from going directly to Mechanical Turk and getting the transcription services myself. Today, I found a Casting Words task on Mechanical Turk so I decided to figure out how much they're making. The task I found was to transcribe about 28 minute podcast and they were offering $5.41 for anyone willing to do it. That's about 19.5 cents per minute. Tack on Amazon's 10% charge brings the total to around 21.5 cents a minute that Casting Words is paying for transcription services. Given that they're charging 42 cents a minute, that's just under a 49% profit margin. Exactly what are they doing to earn that profit? What's their value add and is really worth a 100% markup? 
&lt;LI&gt;Anyone want to start "Cheap Casting Words" with me? We'll pay 22 cents a minute (11% more than Casting Words) and charge 36 cents a minute (14% less than Casting Words) and keep the 12 cents a minute markup (a 33% markup). :)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;UPDATE (8:45pm) - Added Quick Thoughts on Yahoo!, Eventful, George Dyson, Joel Spolsky and Plum. Added more detail about the attention economy sessions from today.&lt;/P&gt;&lt;img width="0" height="0" src="http://devhawk.net/cptrk.ashx?id=cb2db63b-11c8-4a87-9eb1-f1915cac386e"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=546779" width="1" height="1"&gt;</description></item></channel></rss>
