<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Mike Lorengo's Weblog</title><link>http://dotnetjunkies.com/WebLog/mlorengo/default.aspx</link><description>Bits From The Bucket</description><dc:language>en-US</dc:language><generator>CommunityServer 1.0 (Build: 1.0.1.50214)</generator><item><title>Development Nirvana</title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2007/02/21/200057.aspx</link><pubDate>Thu, 22 Feb 2007 01:16:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:200057</guid><dc:creator>mlorengo</dc:creator><slash:comments>5</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/200057.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=200057</wfw:commentRss><description>&lt;h1&gt;Overview&lt;/h1&gt; &lt;p&gt;I recently ditched my AMD desktop machine and picked up an &lt;a href="http://usa.asus.com/products.aspx?l1=5&amp;l2=61&amp;l3=416&amp;model=1447&amp;modelmenu=2"&gt;ASUS G1&lt;/a&gt; notebook. I like ASUS products, in fact I based my &lt;a href="http://www.dotnetjunkies.com/WebLog/mlorengo/archive/2006/04/26/137375.aspx"&gt;Media Center&lt;/a&gt; around an ASUS motherboard. With the recent release of &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=04D26402-3199-48A3-AFA2-2DC0B40A73B6&amp;displaylang=en"&gt;Microsoft Virtual PC 2007&lt;/a&gt;, I took the opportunity to build out a W2K3R2 based development server. After insalling Visual Studio 2005, I had to add a bunch of tools to complete my development environment. As I add these items to my VM, I'm going to capture it and update it for future builds. I do anticipate creating a Vista VM as soon as the VS2005 SP is availabe, so I will need to go through this procedure at least one more time.&lt;/p&gt; &lt;h2&gt;Visual Studio&lt;/h2&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:8a4bd621-9a63-407c-86fa-7ef7d57f899c"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/VS2005"&gt;VS2005&lt;/a&gt;, &lt;a href="http://technorati.com/tags/AddIn"&gt;AddIn&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Development"&gt;Development&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Programming"&gt;Programming&lt;/a&gt;, &lt;a href="http://technorati.com/tags/.Net%203.0"&gt;.Net 3.0&lt;/a&gt;&lt;/div&gt;&lt;ol&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=bb4a75ab-e2d4-4c96-b39d-37baf6b5b1dc&amp;displaylang=en"&gt;Visual Studio 2005 SP1&lt;/a&gt;: It's important that you read Jon Galloway's Things I wish I had known before installed Visual Studio Service Pack 1, before installing this update. In addition you may run out of contiguous memory space during the install, so you should probably follow these intstructions before attempting it.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;.Net Framework 3.0&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=c2b1e300-f358-4523-b479-f53d234cdccf&amp;displaylang=en"&gt;Microsoft® Windows® Software Development Kit for Windows Vista™ and .NET Framework 3.0 Runtime Components&lt;/a&gt;: The Windows SDK includes content for application development with the APIs in Windows Vista, including the .NET Framework 3.0 technologies: .NET Framework 2.0, Windows® Presentation Foundation, Windows® Communication Foundation, Windows® Workflow Foundation, and Windows CardSpace™.  &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=5D61409E-1FA3-48CF-8023-E8F38E709BA6&amp;displaylang=en"&gt;Visual Studio 2005 extensions for .NET Framework 3.0 (Windows Workflow Foundation)&lt;/a&gt;: Compatible with the released versions of the 2007 Microsoft Office system, Microsoft Windows Vista, and the .NET Framework 3.0 Runtime Components. Windows Workflow Foundation is the programming model, engine, and tools for quickly building workflow-enabled applications on Windows. It consists of a Microsoft .NET Framework 3.0 namespace (System.Workflow), an in-process workflow engine, and designers for Microsoft Visual Studio 2005.  &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=F54F5537-CC86-4BF5-AE44-F5A1E805680D&amp;displaylang=en"&gt;Visual Studio 2005 extensions for .NET Framework 3.0 (WCF &amp; WPF), November 2006 CTP&lt;/a&gt;: The Visual Studio 2005 extensions for.NET Framework 3.0 (WCF &amp; WPF), November 2006 CTP provides developers with support for building .NET Framework 3.0 applications using the released version of Visual Studio 2005. This is the last release of this technology that will be in the form of a set of extensions for Visual Studio 2005.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Web Services&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=DB996113-6E92-4894-9B7E-0DEBB614D72F&amp;displaylang=en"&gt;Web Service Software Factory&lt;/a&gt;: The Web Service Software Factory is a cohesive collection of guidance that enables architects and developers to design and build higher quaility services and achieve more predictable results in less time by applying proven practices and patterns directly within Visual Studio 2005. Requires the Guidance Automation Extensions and Guidance Automation Toolkit Download (GAX) expands the capabilities of Visual Studio 2005 by allowing architects and developers to run guidance packages, such as those included in Software Factories, which automate key development tasks from within the Visual Studio environment.  &lt;li&gt;&lt;a href="http://www.thinktecture.com/resourcearchive/tools-and-software/wscf"&gt;Web Services Contract First (WSCF)&lt;/a&gt;: WSCF offers a simple yet powerful WSDL Wizard that abstracts away all the nitty-gritty details of WSDL and therefore does not give room for making errors and wrong assumptions just by trying to use and applying everything that can be done stated by the original WSDL specification.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Unit Testing&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://www.nunit.org/"&gt;NUnit&lt;/a&gt;: NUnit is a unit-testing framework for all .Net languages. Initially ported from JUnit, the current production release, version 2.2, is the fourth major release of this xUnit based unit testing tool for Microsoft .NET.  &lt;li&gt;&lt;a href="http://www.mbunit.com/"&gt;MBUnit&lt;/a&gt;: MbUnit is an extensible .Net test framework. As in NUnit, tests are created at runtime using Reflection and custom attributes. MbUnit differentiates itself from NUnit in it's extensibility model. It contains a number of tests that go beyond the simple unit testing, such as a greater assert range, pairwise testing, combinatorial testing, data oriented testing, etc...  &lt;li&gt;&lt;a href="http://www.netlogics.ch/devcenter/display/NLC/NUnitAddin"&gt;NUnitAddIn&lt;/a&gt;: The NUnit Addin allows you to run unit tests inside Visual Studio 2005.  &lt;li&gt;&lt;a href="http://www.jetbrains.com/"&gt;JetBrains&lt;/a&gt; &lt;a href="http://www.jetbrains.com/unitrun/"&gt;UnitRun&lt;/a&gt;: ReSharper UnitRun is a free add-in for Microsoft Visual Studio 2005 that allows you to automatically run and profile unit tests. This user-friendly tool detects test fixtures of the supported unit testing frameworks and lets you run or profile them right from the code editor or from Visual Studio's Solution Explorer. An &lt;a href="http://der-albert.com/archives/95-Update-zum-MbUnit-PlugIn-fuer-ReSharper.html"&gt;MBUnit PlugIn&lt;/a&gt; for UnitRun is available as well.  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/scott.bellware/archive/2006/02/28/139446.aspx"&gt;NUnit Code Snippets for Visual Studio 2005&lt;/a&gt;: For NUnit users who have switched to Visual Studio 2005 and would like a reasonably decent set of keyboard shortcuts for some of the most common uses of the NUnit framework, you might find these code snippets to be of use.  &lt;li&gt;&lt;a href="http://blogs.ipona.com/dan/archive/2007/01/02/SimpleTDDVisualStudioTemplates.aspx"&gt;Simple TDD Visual Studio Templates&lt;/a&gt;: To speed up the creation of solutions using NUnit or MbUnit? for unit test, use these two templates to plug into Visual Studio to do it for you. There's one for testing with MbUnit? 2.3 RTM and one for NUnit 2.2.9.  &lt;li&gt;&lt;a href="http://blogs.msdn.com/mikhailarkhipov/archive/2006/04/17/577471.aspx"&gt;Spell Checker for HTML and ASP.NET pages&lt;/a&gt;: Spell checker works in Source view, it is able to extract text from markup elements and use Office 2003 spell checker to check the text. Spell checker is able to handle entities to some extent (they are considered whitespace for now).&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Refactoring Tools&lt;/h2&gt;&lt;ol&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/ResourceRefactoring"&gt;Resource Refactoring Tool&lt;/a&gt;: The Resource Refactoring Tool provides developers an easy way to extract hard coded strings from the code to resource files.  &lt;li&gt;&lt;a href="http://www.devexpress.com/"&gt;DevExpress&lt;/a&gt; &lt;a href="http://www.devexpress.com/Products/NET/IDETools/RefactorASP/"&gt;Refactor for ASP.NET&lt;/a&gt; &lt;a href="http://downloads.devexpress.com/IDETools/ASPNET/RefactorAsp-2.1.3.exe"&gt;Version 2.1.3&lt;/a&gt;: Refactor! is freely available to all ASP.NET 2.0 developers and offers a comprehensive suite of tools that enable you and your team to simplify and shape complex code and HTML markup - making your web applications easier to read and less costly to maintain.  &lt;li&gt;&lt;a href="http://weblogs.asp.net/gmilano/default.aspx"&gt;Cool Commands 4.0&lt;/a&gt;: Lots of helpful shortcuts for accomplishing tasks.  &lt;li&gt;&lt;a href="http://www.slickedit.com/content/view/441"&gt;SlickEdit Gadgets&lt;/a&gt;: Some useful, some fun utilities to help out your IDE experience  &lt;ul&gt; &lt;li&gt;&lt;em&gt;Editor Gadgets&lt;/em&gt;: A Line Ruler, Indentation Guide, Auto Copy selection, and a fun Editor Graphic.  &lt;li&gt;&lt;em&gt;Command Spy&lt;/em&gt;: Learn what commands are attached to what keyboard shortcuts to help you become a keyboarding guru.  &lt;li&gt;&lt;em&gt;File Explorer&lt;/em&gt;: Use the File Explorer rather than the IDE open file dialog to drag and drop files into your project.  &lt;li&gt;&lt;em&gt;Data Object Analyzer&lt;/em&gt;: Inspect the contents of any clipboard operation, or drag-and-drop operation, from any other application.  &lt;li&gt;&lt;em&gt;The SLOC Report&lt;/em&gt;: An easy way to count the lines of code. The line count is divided into three categories: code, comments, and whitespace.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cd7c6e48-e41b-48e3-881e-a0e6e97f9534&amp;DisplayLang=en"&gt;Microsoft Visual Studio 2005 IDE Enhancements&lt;/a&gt;: Visual Studio 2005 IDE Enhancements are a set of Visual Studio extensions that are designed to make you more productive. These enhancements are directly integrated into the Visual Studio IDE.  &lt;ul&gt; &lt;li&gt;&lt;em&gt;Source Code Outliner&lt;/em&gt;: The Source Outliner tool is a Visual Studio extension that provides a tree view of your source code's types and members and lets you quickly navigate to them inside the editor.  &lt;li&gt;&lt;em&gt;Visual C++ Code Snippets&lt;/em&gt;: The Visual C++ Code Snippets tool lets you insert snippets in your code by using a pop-up menu that contains programming keywords. VB.NET and C# languages have this functionality in Visual Studio 2005.  &lt;li&gt;Indexed Find: The Indexed Find tool is a Visual Studio extension that uses the Microsoft Indexing Service to provide improved Search capabilities to the integrated development environment (IDE). It sends the results of a search to the Output Window.  &lt;li&gt;Super Diff Utility: The Super Diff Find tool is a Visual Studio extension that compares text files. It uses color coding and graphics to show the difference between the files in deleted text (red), changed text (blue), inserted text (green).  &lt;li&gt;Event Toaster Utility: The Event Toaster tool is a Visual Studio extension that notifies users about specific events within the Visual Studio IDE.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/MVPXML/"&gt;XPathMania&lt;/a&gt;: An XPath Tool Window for Visual Studio 2005. Produces by the Mvp.Xml project team.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Configuration Management&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt;: Subversion is a free/open-source version control system. That is, Subversion manages files and directories, and the changes made to them, over time. This allows you to recover older versions of your data, or examine the history of how your data changed.  &lt;li&gt;&lt;a href="http://tortoisesvn.tigris.org/"&gt;TortoiseSVN&lt;/a&gt;: TortoiseSVN is a really easy to use Revision control / version control / source control software for Windows. &lt;br&gt;Since it's not an integration for a specific IDE you can use it with whatever development tools you like. &lt;br&gt;TortoiseSVN is free to use. You don't need to get a loan or pay a full years salary to use it.  &lt;li&gt;&lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET"&gt;CruiseControl.Net&lt;/a&gt;: CruiseControl.NET is an Automated Continuous Integration server, implemented using the Microsoft .NET Framework.  &lt;li&gt;&lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt;: Trac is a web-based software project management and bug/issue tracking system. It provides an interface to Subversion and an integrated wiki. Setting up Trac was a little involved, and that will form the basis for another blog post.&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=200057" width="1" height="1"&gt;</description></item><item><title>My Media Center Specs</title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2006/04/26/137375.aspx</link><pubDate>Wed, 26 Apr 2006 14:10:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:137375</guid><dc:creator>mlorengo</dc:creator><slash:comments>1</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/137375.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=137375</wfw:commentRss><description>&lt;P&gt;I just recently built my own media center from scratch. The goal was to have a Media&amp;nbsp;Center server in my house, on which&amp;nbsp;I would store all of my DVD's, CD's,&amp;nbsp;Photo's and Recorded TV programs. All of this information would be accessible from any room in the house,&amp;nbsp;and on the road via the Internet. A few people have asked&amp;nbsp;me about the specs for my machine, so I thought I would just post them here.&lt;/P&gt;
&lt;P&gt;The goal of this computer was to be&amp;nbsp;my Home Media Server, and therefore the specs are a little more than what is needed.&amp;nbsp;I currently have Media Center 2005, Rollup 2 loaded, but my hope is to have Vista running on it soon.&lt;/P&gt;
&lt;P&gt;The Media Center server is just the first step in "The Big Plan". I'll be making posts off and on again, as I add to it.&lt;/P&gt;
&lt;TABLE&gt;

&lt;TR&gt;
&lt;TH&gt;Component&lt;/TH&gt;
&lt;TH&gt;Model&lt;/TH&gt;&lt;/TR&gt;

&lt;TR&gt;
&lt;TD&gt;Motherboard&lt;/TD&gt;
&lt;TD&gt;&lt;A href="http://www.newegg.com/Product/Product.asp?Item=N82E16813131540"&gt;ASUS A8N-SLI Premium Socket 939 NVidia nForce4 SLI ATX AMD&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;I chose this motherboard, because it has a heatpipe cooling system on the Northbridge chipset, is SLI capable, accepted the Dual Core AMD processor, and support for overclocking.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;CPU&lt;/TD&gt;
&lt;TD&gt;&lt;A href="http://www.newegg.com/Product/Product.asp?Item=N82E16819103562"&gt;AMD Athlon 64 X2 3800+ Manchester 1GHz HT 2x512KB L2 Cache Socket 939 Dual Core&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;I chose this processor because it offered the best price per performance at the time.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Video Card&lt;/TD&gt;
&lt;TD&gt;&lt;A href="http://www.newegg.com/Product/Product.asp?Item=N82E16814130283"&gt;eVGA 256-P2-N553-AX GeForce 7600GT CO 256 MB 128-bit GDDR3 PCI Express x16&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;I chose this video card because it is SLI capable, and wanted some ability to handle Vista when it comes out.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Hard Drive&lt;/TD&gt;
&lt;TD&gt;&lt;A href="http://www.newegg.com/Product/Product.asp?item=N82E16822136014"&gt;Western Digital Caviar SE16 WD50000KS 500GB 7200 RPM 16MB Cache SATA 3.0Gb/s&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;I chose this hard drive because I wanted to max out storage on my server. I paid a premium for the 500GB capacity, but it's quiet. I just recently added a second one bringing my capacity up to 1TB. I still have room in my case for 2 more drives.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Memory&lt;/TD&gt;
&lt;TD&gt;&lt;A href="http://www.newegg.com/Product/Product.asp?Item=N82E16820145450"&gt;Corsair XMS 1GB (2x512MB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) DUal Channel Kit System&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;I like Corsair memory, it has heat spreaders, and the price was right.&lt;/TD&gt;
&lt;TR&gt;
&lt;TD&gt;CPU Fan&lt;/TD&gt;
&lt;TD&gt;&lt;A href="http://www.newegg.com/Product/Product.asp?Item=N82E16835118223"&gt;Zalman CNPS9500 LED 92mm 2 Ball Blue LED Light Cooling Fan with Heatsink&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;I chose this fan, because Zalman makes great cooling products, in addition I was intalling this in a Zalman case with a Zalman power supply.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Case&lt;/TD&gt;
&lt;TD&gt;&lt;A href="http://www.zipzoomfly.com/jsp/ProductDetail.jsp?ProductCode=374505"&gt;Zalman HD160-B Home Theatre Aluminum PC Enclosure w/Remote (Black)&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;I chose this processor case because it was all aluminum, looked like a media center component, and got good reviews. I also seriously considered getting a &lt;A href="http://www.origenae.com/"&gt;Origen AE Case&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;
&lt;P&gt;I already had a Hauppauge PVR 350, TV Tuner card so I recylced that into the system for watching and recording live tv.&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=137375" width="1" height="1"&gt;</description></item><item><title>PDC Reflections (Day 1)</title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/09/18/132784.aspx</link><pubDate>Sun, 18 Sep 2005 09:37:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:132784</guid><dc:creator>mlorengo</dc:creator><slash:comments>0</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/132784.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=132784</wfw:commentRss><description>&lt;p&gt;Here it is the Saturday after the PDC, and I think I'm finally ready to 
reflect on what was one of the most intense learning weeks I've had in a really 
long time. In my opinion this PDC represents some very sweeping changes that 
will impact .Net developers for years to come.&lt;/p&gt;
&lt;p&gt;We've been hearing about technologies such as Longhorn, Indigo and Avalon 
since PDC03, but this time around the tools and models are nearly complete, add 
in Windows Workflow Foundation, all of the .Net 2.0 technology, then sprinkle 
with future technologies like Language Integrated Query (Linq) and you've got 
quite a dose.&lt;/p&gt;
&lt;p&gt;I'll be posting a series of blog entries to help organize my thoughts around 
the different topics.&lt;/p&gt;
&lt;p&gt;This first entry has to do with Day 1 technologies.&lt;/p&gt;
&lt;h3&gt;The Goods&lt;/h3&gt;
&lt;p&gt;Amy and I arrived at the Keynote Hall a tad early. We decided to arrive 
around 7:00am so that we could register and get
&lt;a href="http://blogs.ineta.org/evjen/archive/2005/09/13/53711.aspx"&gt;&amp;quot;The Goods&amp;quot;&lt;/a&gt; 
before the Keynote started. The Goods consisted of 5 DVD's containing Windows 
Vista Beta 1 and the PDC:CTP, Visual Studio Team System Beta 2, WinFX, SQL 
Server 2005 CTP's, LINQ Technology, and eventually VS2005 RC and Longhorn 
Server.&lt;/p&gt;
&lt;p&gt;Most of this can be downloaded online&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=ffd636f0-86e9-41e8-9e1c-100a4cc4888f&amp;displaylang=en"&gt;
	WinFX Ctp Runtime Installation&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://lab.msdn.microsoft.com/express/"&gt;Visual Studio Beta 2 
	Express&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;
	&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=C20CC6C8-1F4E-4A5C-BC79-C2FE9ABE69AA&amp;displaylang=en"&gt;
	Windows WinFX Sdk (WCF (Indigo) &amp;amp; WPF (Avalon)&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;
	&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=EDE1A645-2A53-42E1-8482-3BF1FADADE06&amp;displaylang=en"&gt;
	Visual Studio Templates for the WinFX Sdk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other technologies that were introduced over the course of the PDC can be 
found here&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2ac59b30-5a44-4782-b0b7-79fe2efd1280&amp;DisplayLang=en"&gt;
	Monad Shell (Microsofts new Command Shell)&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=52384"&gt;Atlas (.Net 
	implemenetation of AJAX and more)&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;
	&lt;a href="http://download.microsoft.com/download/4/7/0/4703eba2-78c4-4b09-8912-69f6c38d3a56/LINQ%20Preview.msi"&gt;
	Language Integrated Query (Linq, D &lt;/a&gt;Developing an Advanced ASP.NET Server 
	Control with Rich Design-Time&lt;a href="http://download.microsoft.com/download/4/7/0/4703eba2-78c4-4b09-8912-69f6c38d3a56/LINQ%20Preview.msi"&gt;Link, 
	XLinq)&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;
	&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=6E4AAC3A-9D85-4734-B1FD-318FB83B0D29&amp;displaylang=en"&gt;
	SQL Server 2005 Express&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;
	&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=7096d039-2638-4f63-8654-d2e5d98fa417&amp;displaylang=en"&gt;
	Windows Workflow Foundation&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;
	&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=46cef4b1-7e80-474f-aecd-acb255902b82&amp;DisplayLang=en"&gt;
	Acrylic (Graphics Design Software)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That should be all you need to have your own little PDC in a box. What you 
can't get is the Windows Vista PDC CTP, or VSTS versions. Now onto the summary.&lt;/p&gt;
&lt;p&gt;We were treated with an opening video
&lt;a href="http://www.winsupersite.com/files/pdc2005-change-world.wmv"&gt;&amp;quot;Change The 
World&amp;quot;&lt;/a&gt;, and then Bill Gates started
&lt;a href="http://www.microsoft.com/winme/0509/25074/PDC_Webcast_MBR.asx"&gt;his 
Keynote&lt;/a&gt;, in which he showed a video about
&lt;a href="http://www.ifilm.com/ifilmdetail/2679657"&gt;recruiting for Microsoft&lt;/a&gt;. 
Bill and Chris Capossela talked about
&lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=114710"&gt;Windows Vista&lt;/a&gt; 
and &lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=114720"&gt;Office 12&lt;/a&gt;, 
RSS and IE7. After that
&lt;a href="http://www.microsoft.com/presspass/exec/Jim/09-13PDC2005.mspx"&gt;Jim 
Allchin&lt;/a&gt; came out and discussed some enhancements to Windows Vista, including
&lt;a href="http://www.tomshardware.com/hardnews/20050913_151411.html"&gt;SuperFetch&lt;/a&gt; 
with aims to speed up application load times, as well as the ability for Vista 
to utilize USB Flash Drives for extra memory (too cool!).&lt;/p&gt;
&lt;p&gt;For me, the meat of the morning keynote was the demonstration of Indigo, 
Avalon and
&lt;a href="http://weblogs.asp.net/scottgu/archive/2005/09/14/425131.aspx"&gt;Atlas&lt;/a&gt;. 
These are technologies that will have a release around mid/late 2006. The
&lt;a href="http://www.theserverside.net/news/thread.tss?thread_id=36510"&gt;Linq demo&lt;/a&gt; 
while&amp;nbsp; impressive, is still too far away for me to get too excited about.&lt;/p&gt;
&lt;p&gt;After that some demo's were shown by
&lt;a href="http://channel9.msdn.com/showpost.aspx?postid=116327"&gt;North Face&lt;/a&gt; 
marketers (&lt;a href="http://msdn.microsoft.com/windowsvista/default.aspx?pull=/library/en-us/dnlong/html/fluid.asp"&gt;here's 
a whitepaper on how it was built&lt;/a&gt;), and some information on a new Windows 
Vista sample application &lt;a href="http://www.microsoft.com/max/"&gt;Microsoft Max&lt;/a&gt;, 
and the
&lt;a href="http://dotnetjunkies.com/WebLog/paul/archive/2005/09/14/132580.aspx"&gt;
DigitalLocker&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was planning on attending the MS Build breakout session, but unfortunately 
the Keynote went long and the session was cancelled. Also, I can't help but 
mention the
&lt;a href="http://ricksegal.typepad.com/pmv/2005/09/pdc2005_shock_a.html"&gt;Phone 
Deal that Went Sour&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Instead I attended the session
&lt;a href="http://216.55.183.63/pdc2005/slides/PRS401_Lipton.ppt"&gt;PRS401 ASP.Net: 
Developing an Advanced ASP.NET Server Control with Rich Design-Time&lt;/a&gt;. Eilon 
Lipton presented ways to create ASP.Net server controls and at the same time 
create a Designer for each. It was a good overview. I plan on experimenting with 
this a little more in the future. (Incidentally you can download the ppt slides 
from most of the sessions
&lt;a href="http://commnet.microsoftpdc.com/content/downloads.aspx"&gt;here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The next session was on
&lt;a href="http://216.55.183.63/pdc2005/slides/TLN303_Snover_Truher.ppt"&gt;
TLN303&amp;nbsp;&amp;nbsp;Monad: Advanced Command Line Scripting&lt;/a&gt;. While it was interesting, it 
wasn't what I was expecting. They gave an overview of Monad, and did a 
compare/contrast with other scripting languages. I guess I was hoping for a more 
detailed, getting things done sort of talk.&lt;/p&gt;
&lt;p&gt;The final breakout session of the day was
&lt;a href="http://216.55.183.63/pdc2005/slides/PRS404_Schackow.ppt"&gt;
PRS404&amp;nbsp;&amp;nbsp;ASP.NET: Developing Advanced Custom Providers for Membership and Role 
Manager&lt;/a&gt;. This was the best breakout session of the day, Stefan Shackow 
covered the new 2.0 provider model and covered some limitations and gave 
possible workarounds for certain situations. He has made the code available
&lt;a href="http://216.55.183.63/pdc2005/slides/PRS404_SampleCode.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After that Amy and I headed to the big room to get our schwag! I think we 
ended up with about 13 T-Shirts each, plus hats, plus a book and a bunch of 
other little trinkets. It was kind of embarassing, hauling around our loot in 
our arms. We finally ducked into the PDC Marketplace to ask for a bag. Amy's bag 
lasted all of 5 minutes before it busted under the weight. :)&lt;/p&gt;
&lt;p&gt;After a quick dinner on appetizers, we hopped a bus to head to the
&lt;a href="http://www.pdcunderground.com"&gt;www.pdcunderground.com&lt;/a&gt; talks at the 
Westin. We got there just in time to catch the last 3 speakers. After that it 
was back to the PDC where we caught a couple of
&lt;a href="http://commnet.microsoftpdc.com/content/sessionview.aspx?TopicID=0d272f35-bf59-4662-bba1-c7fe35c54210"&gt;
BOF's&lt;/a&gt;. Finally we headed back to the hotel around 11pm. It was time to get 
some rest, for tomorrow we would be doing it all over again.&lt;/p&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=132784" width="1" height="1"&gt;</description></item><item><title>Blog Clippings #2</title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/05/18/81268.aspx</link><pubDate>Wed, 18 May 2005 21:11:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:81268</guid><dc:creator>mlorengo</dc:creator><slash:comments>1</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/81268.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=81268</wfw:commentRss><description>&lt;p&gt;I was having lunch today when it occurred to me that I haven't blogged an 
entry in at least 3 months. Part of this has been due to my laptop going belly 
up, my new job, and just plain old fashioned laziness. So until I get the data 
off my laptop, this post will be in the spirit of laziness.&lt;/p&gt;
&lt;h4&gt;Powertoys for VS2005 Beta 2&lt;/h4&gt;
&lt;p&gt;From the
&lt;a href="http://blogs.msdn.com/classdesigner/archive/2005/05/17/418966.aspx"&gt;
Class Designer team blog&lt;/a&gt;... &amp;quot;The Design Tools Enhancements add-in provides a 
common set of features that can be used by both the Class Designer and the
&lt;a href="http://lab.msdn.microsoft.com/teamsystem/teamcenters/architect/default.aspx"&gt;
Distributed System Designers&lt;/a&gt;&amp;quot; &lt;/p&gt;
&lt;h4&gt;GTDTiddlyWiki&lt;/h4&gt;
&lt;p&gt;A simple &lt;a href="http://shared.snapgrid.com/gtd_tiddlywiki.html"&gt;html file 
based wiki&lt;/a&gt;. Simply download to your thumb drive and you have your own 
personal wiki. For those not in the know GTD stands for Getting Things Done,
&lt;a href="http://wiki.jeffsandquist.com/default.aspx/GTD/HomePage.html"&gt;here's a 
wiki&lt;/a&gt; that talks about GTD.&lt;/p&gt;
&lt;h4&gt;Smell To Refactorings&lt;/h4&gt;
&lt;p&gt;When looking at code you begin to notice certain smells.
&lt;a href="http://wiki.java.net/bin/view/People/SmellsToRefactorings"&gt;This table&lt;/a&gt; 
organizes the smells, and proposes refactoring operations to clean up the smell.&lt;/p&gt;
&lt;h4&gt;Designing Great Frameworks&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/brada"&gt;Brad Abrams&lt;/a&gt; presents a
&lt;a href="http://msdn.microsoft.com/netframework/programming/classlibraries/#PreviousPresentThe Designing .NET Class Libraries series presents design guidelines for developing classes and components that extend the .NET Framework."&gt;
series of lectures&lt;/a&gt; on design guidelines for developing classes and 
components that extend the .NET Framework. &lt;/p&gt;
&lt;h4 xmlns:helper="http://www.microsoft.com/MSCOM/Downloads/2"&gt;Microsoft 
Solutions Framework (MSF) for Agile Software Development, Beta&lt;/h4&gt;
&lt;p xmlns:helper="http://www.microsoft.com/MSCOM/Downloads/2"&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=9F3EA426-C2B2-4264-BA0F-35A021D85234&amp;displaylang=en"&gt;
This download&lt;/a&gt; contains the agile process guidance that will be shipping with 
Visual Studio Team System. MSF for Agile Software Development is a 
scenario-driven, context-based, agile software development process that utilizes 
many of the ideas embodied in Team System. This process incorporates proven 
practices developed at Microsoft around requirements, design, security, 
performance, and testing. &lt;/p&gt;
&lt;h4 xmlns:helper="http://www.microsoft.com/MSCOM/Downloads/2"&gt;Nic Wolfe's 
Password Generator&lt;/h4&gt;
&lt;p xmlns:helper="http://www.microsoft.com/MSCOM/Downloads/2"&gt;Now only remember a
&lt;a href="http://angel.net/~nic/passwd.html"&gt;single pass phrase&lt;/a&gt; yet still 
have highly secure unique passwords for all of your sites.&lt;/p&gt;

&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=81268" width="1" height="1"&gt;</description></item><item><title>start.com Starting to Heat Up</title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/03/20/60938.aspx</link><pubDate>Sun, 20 Mar 2005 23:37:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:60938</guid><dc:creator>mlorengo</dc:creator><slash:comments>1</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/60938.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=60938</wfw:commentRss><description>&lt;p&gt;I first found out about the www.start.com/1 and www.start.com/2 prototypes from Dare Obasanjo's post on 
the subject
&lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=a555bc0a-108c-49cf-b91e-a1c24a1fb1ed"&gt;
here&lt;/a&gt;. It seems that Microsoft is getting into the web-based Rss aggregator 
market. I was first introduced to RSS aggregator via Dare's awesome
&lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=94679de9-3d97-47d2-baa0-3cc03e174b9c"&gt;
RSS Bandit&lt;/a&gt; client many moons ago. However as I bounced around from work and 
home, it became increasingly difficult to keep the feed read states in sync. In 
addition, if I added a feed at work, I'd have to add it at home as well. I seem 
to remember hearing something about RSS Bandit providing synchronization to get 
around this issue, but I abandoned it long before that.&lt;/p&gt;
&lt;p&gt;My new favorite aggregator became Bloglines. I'm still using it to this day. 
I've &lt;a href="http://www.bloglines.com/public/mikelor"&gt;made my subscriptions 
public&lt;/a&gt;, so you can see what I read. Plus you get to see how disorganized my 
feeds are. What do I like about Bloglines?&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;I can read it at Home, Work, at a friends house, the library, or across 
	the world.&lt;/li&gt;
	&lt;li&gt;I can use the &lt;a href="http://www.bloglines.com/help/firefox"&gt;Bloglines 
	toolkit for Firefox&lt;/a&gt; and right click on any feed I come across and add it 
	to my subscriptions.&lt;/li&gt;
	&lt;li&gt;I can share my blog subscriptions&lt;/li&gt;
	&lt;li&gt;I can search my blog subscriptions or all of the Bloglines subscriptions&lt;/li&gt;
	&lt;li&gt;I can clip blogs and retrieve them from any other computer&lt;/li&gt;
	&lt;li&gt;I can read Bloglines on my PocketPC&lt;/li&gt;
	&lt;li&gt;And many many more cool things&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So what does this have to do with &lt;a href="http://www.start.com"&gt;
www.start.com&lt;/a&gt;? Well, as I said, I heard about this a little over a week ago, 
and the progress that has been made so far is astounding. Not only that but 
Firefox support is coming along nicely.&lt;/p&gt;
&lt;p&gt;What suggestions do I have for the start.com site?&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Allow for a public API&lt;/li&gt;
	&lt;li&gt;Allow me to import my Bloglines subscription (see suggestion 1)&lt;/li&gt;
	&lt;li&gt;Make it easy for me via a Firefox/IE extension to add feeds to my 
	profile while I'm browsing around the web and find a cool feed&lt;/li&gt;
	&lt;li&gt;Allow me to create feeds from searches against the start.com catalog of 
	feeds&lt;/li&gt;
	&lt;li&gt;Allow me to clip a blog entry for later perusal&lt;/li&gt;
	&lt;li&gt;Make it easy to rearrange feed/categories perhaps via AJAX or is it XAP?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;a href="http://spaces.msn.com/members/steverider/PersonalSpace.aspx?_c01_blogpart=blogmgmt&amp;_c=blogpart"&gt;
Steve Rider is blogging&lt;/a&gt; about the latest goings on here. In addition he's
&lt;a href="http://spaces.msn.com/members/startcom/"&gt;added a feed&lt;/a&gt; to help keep 
us up to date on the latest and greatest changes to start.com here. Looks like
&lt;a href="http://radio.weblogs.com/0001011/2005/02/19.html#a9456"&gt;Scoble&lt;/a&gt; 
can't fire him now.&lt;/p&gt;
&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=60938" width="1" height="1"&gt;</description></item><item><title>All Things Indigo - Indigo Resources I've Found</title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/02/13/54273.aspx</link><pubDate>Sun, 13 Feb 2005 18:19:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:54273</guid><dc:creator>mlorengo</dc:creator><slash:comments>3</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/54273.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=54273</wfw:commentRss><description>&lt;p&gt;The big buzz &lt;strike&gt;coming&lt;/strike&gt; is the &lt;a href="http://msdn.microsoft.com/Longhorn/Support/relnotes/default.aspx"&gt;March CTP Release&lt;a&gt; of
&lt;a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx"&gt;
Indigo&lt;/a&gt;, one of the &lt;strike&gt;three&lt;/strike&gt; two :) pillars of Longhorn. I'm 
going to be gathering some posts in this entry from around the blogosphere in 
hopes of relieving my brain of some more details. In addition I won't have to 
save these links on my machine which gets repaved every three months or so.&lt;/p&gt;

&lt;h4&gt;&lt;font color="red"&gt;News Flash&lt;/font&gt;&lt;/h4&gt;
&lt;p&gt;The Beta1 RC of Avalon &amp; Indigo has been released to the wild, thanks to Drew Marsh for the link, you can get the direct download &lt;a href="http://www.microsoft.com/downloads/info.aspx?na=90&amp;p=&amp;SrcDisplayLang=en&amp;SrcCategoryId=&amp;SrcFamilyId=b789bc8d-4f25-4823-b6aa-c5edf432d0c1&amp;genscs=0&amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2ff%2fa%2f3%2ffa3b19ba-6129-41e8-93d8-498cc6b52b14%2fwinfxsetup.exe"&gt;here&lt;/a&gt; Supposedly it will be available via this &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=b789bc8d-4f25-4823-b6aa-c5edf432d0c1&amp;displaylang=en"&gt;page&lt;/a&gt;.&lt;font color="red"&gt;*&lt;/font&gt;

&lt;h4&gt;Blog Entries&lt;/h4&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://staff.newtelligence.net/clemensv/default.aspx"&gt;Clemens 
	Vasters&lt;/a&gt; creates a simple
	&lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=d678ab54-9d39-4fc9-82c0-4e03382d457f"&gt;
	Hello World&lt;/a&gt; Indigo Application.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://galactic-patrol.blogspot.com/"&gt;Bruce Williams&lt;/a&gt; takes 
	Clemens' Hello World sample and
	&lt;a href="http://galactic-patrol.blogspot.com/2005/02/indigo-is-re-released-into-wild.html"&gt;
	converts it&lt;/a&gt; into a Queued Service.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://blogs.msdn.com/shycohen/"&gt;Shy Cohen&lt;/a&gt; demonstrates
	&lt;a href="http://blogs.msdn.com/shycohen/archive/2005/02/11/370946.aspx"&gt;
	Indigo's Duplex Channel&lt;/a&gt; and use of the config to set endpoint bindings.&lt;/li&gt;
	&lt;li&gt;And of course &lt;a href="http://pluralsight.com/blogs/dbox/"&gt;Don Box&lt;/a&gt; 
	talks about
	&lt;a href="http://pluralsight.com/blogs/dbox/archive/2005/02/12/5819.aspx"&gt;
	Service Contracts&lt;/a&gt; in Indigo.&lt;/li&gt;
        &lt;li&gt;Clemens Vasters spends the weekend with Indigo (&lt;a href="http://staff.newtelligence.net/clemensv/default.aspx#a5df62c43-67fb-488e-a70e-c29b9055a984"&gt;Part 1&lt;/a&gt;,&lt;a href="http://staff.newtelligence.net/clemensv/default.aspx#a5df62c43-67fb-488e-a70e-c29b9055a984"&gt;Part 2&lt;/a&gt;,&lt;a href="http://staff.newtelligence.net/clemensv/default.aspx#a5df62c43-67fb-488e-a70e-c29b9055a984"&gt;Part 3&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Indigo Blogs&lt;/h4&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://pluralsight.com/blogs/dbox/"&gt;Don Box's Spoutlet&lt;/a&gt; (&lt;a href="http://pluralsight.com/blogs/dbox/Rss.aspx"&gt;rss&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://blogs.msdn.com/shycohen/category/9394.aspx"&gt;Shy Cohen's Indigo Category&lt;/a&gt; (&lt;a href="http://blogs.msdn.com/shycohen/category/9394.aspx/rss"&gt;rss&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.gazitt.com/OhmBlog/CategoryView.aspx/Web%20Services/XML"&gt;
	Omri Gazitt's Web Services Category&lt;/a&gt; (&lt;a href="http://www.gazitt.com/OhmBlog/BlogXBrowsing.asmx/GetRssCategory?categoryName=Web Services/XML"&gt;rss&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://pluralsight.com/blogs/kirillg/"&gt;Kirill Gavrylyuk&lt;/a&gt; (&lt;a href="http://pluralsight.com/blogs/kirillg/Rss.aspx"&gt;rss&lt;/a&gt;)&lt;font color="red"&gt;*&lt;/font&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://weblogs.asp.net/florinlazar/category/3261.aspx"&gt;Floren Lazar's Indigo Category&lt;/a&gt; (&lt;a href="http://weblogs.asp.net/florinlazar/category/3261.aspx/rss"&gt;rss&lt;/a&gt;)&lt;/li&gt;
        &lt;li&gt;&lt;a href="http://hyperthink.net/blog/CategoryView,category,indigo.aspx"&gt;Steve Maine's Indigo Category&lt;/a&gt; (&lt;a href="http://hyperthink.net/blog/SyndicationService.asmx/GetRssCategory?categoryName=indigo"&gt;rss&lt;/a&gt;)&lt;/li&gt;
        &lt;li&gt;&lt;a href="http://blogs.msdn.com/distilled"&gt;Andy Milligan's Distilled - Thinking In Indigo&lt;/a&gt;(&lt;a href="http://blogs.msdn.com/distilled/rss"&gt;rss&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.douglasp.com/default.aspx"&gt;Doug Purdy's Blog&lt;/a&gt; (&lt;a href="http://www.douglasp.com/SyndicationService.asmx/GetRss"&gt;rss&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://blogs.msdn.com/yassers/category/513.aspx"&gt;Yasser Shohoud's Technical Category &lt;/a&gt;(&lt;a href="http://blogs.msdn.com/yassers/category/513.aspx/rss"&gt;rss&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.livejournal.com/users/mujtaba/"&gt;Mujtaba Syed&lt;/a&gt; (&lt;a href="http://www.livejournal.com/users/mujtaba/data/rss"&gt;rss&lt;/a&gt;)&lt;/li&gt;
        &lt;li&gt;&lt;a href="http://www.thatindigobook.com"&gt;That Indigo Book&lt;/a&gt;(&lt;a href="http://www.thatindigobook.com/SyndicationService.asmx/GetRss"&gt;rss&lt;/a&gt;)&lt;/li&gt;
        &lt;li&gt;&lt;a href="http://blogs.msdn.com/richardt"&gt;Richard Turner's  On the road to Indigo&lt;/a&gt;(&lt;a href="http://blogs.msdn.com/distilled/rss"&gt;rss&lt;/a&gt;)&lt;/li&gt;
        &lt;li&gt;&lt;a href="http://staff.newtelligence.net/clemensv/CategoryView,category,Technology,Indigo.aspx"&gt;Clemens Vasters Indigo Category&lt;/a&gt;(&lt;a href="http://staff.newtelligence.net/clemensv/SyndicationService.asmx/GetRssCategory?categoryName=Technology%7CIndigo"&gt;rss&lt;/a&gt;)&lt;/li&gt;
        &lt;li&gt;&lt;a href="http://weblogs.asp.net/cweyer/category/1641.aspx"&gt;Christian Weyer's Indigo Category&lt;/a&gt;(&lt;a href="http://weblogs.asp.net/cweyer/category/1641.aspx/rss"&gt;rss&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://kennyw.com/category/indigo/"&gt;Kenny Wolf's Indigo 
	Category&lt;/a&gt; (&lt;a href="http://kennyw.com/category/indigo/feed/"&gt;rss&lt;/a&gt;)&lt;font color="red"&gt;*&lt;/font&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://galactic-patrol.blogspot.com/"&gt;Bruce Williams&lt;/a&gt; (&lt;a href="http://galactic-patrol.blogspot.com/atom.xml"&gt;atom&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Resources&lt;/h4&gt;
&lt;ul&gt;
        &lt;li&gt;&lt;a href="http://channel9.msdn.com/wiki/default.aspx/Channel9.Indigo"&gt;Channel 9 Indigo Wiki&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/Longhorn/Support/relnotes/default.aspx"&gt;March 2005 CTP Release Notes&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="http://winfx.msdn.microsoft.com/library/default.asp?url=/library/en-us/indigo_con/html/a9fd306c-114d-4544-b6d0-7586438878dd.asp"&gt;Indigo Doucmentation for March 2005 CTP&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://longhorn.msdn.microsoft.com/portal_nav.htm"&gt;Indigo 
	Portal&lt;/a&gt; in the Longhorn SDK&lt;/li&gt;
	&lt;li&gt;
	&lt;a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx"&gt;
	Indigo Section&lt;/a&gt; in the Longhorn Developer Center&lt;/li&gt;
	&lt;li&gt;
	&lt;a href="http://longhorn.msdn.microsoft.com/lhsdk/indigo/conDistributedApplicationsUsingMessageBusServices.aspx"&gt;
	Distributed Applications Using &amp;quot;Indigo&amp;quot; Services&lt;/a&gt; in the Longhorn 
	Development Center&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://msdn.microsoft.com/longhorn/community/newsgroups/default.aspx?dg=microsoft.public.windows.developer.winfx.indigo"&gt;
	Indigo MSDN Newsgroup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Articles&lt;/h4&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/messagebus.asp"&gt;
	Introducing Indigo: An Early Look&lt;/a&gt; by
	&lt;a href="http://www.davidchappell.com/blog/"&gt;David Chappell&lt;/a&gt; (Feb. 2005)&lt;/li&gt;
	&lt;li&gt;
	&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/messagebus.asp"&gt;
	Inside &amp;quot;Indigo&amp;quot;, Chapter 2: The Journey of a Message&lt;/a&gt; by Jason Clark 
	(Feb. 2004)&lt;/li&gt;
	&lt;li&gt;
	&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/messagebus.asp"&gt;
	Codename Indigo: A Guide to Developing and Running Connected Systems with 
	Indigo&lt;/a&gt; by &lt;a href="http://pluralsight.com/blogs/dbox/Rss.aspx"&gt;Don Box&lt;/a&gt; 
	(Jan. 2004)&lt;/li&gt;
	&lt;li&gt;
	&lt;a href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnlingo/html/indigolingo01062004.asp"&gt;
	Creating Indigo Applications with the PDC Release of Visual Studio.Net&lt;/a&gt; 
	by Yasser Shohoud (Jan. 2004)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Samples&lt;/h4&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;a href="http://www.codeproject.com/cs/webservices/IndigoTransactionalWS.asp"&gt;
	Indigo Transactional Web Services using Microsoft WinFX CTP March 2005&lt;/a&gt;&lt;font color="red"&gt;*&lt;/font&gt; 
	(April 2005) - Implementing WS-AtomicTransaction in Indigo. by Jamesqding&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Podcasts&lt;/h4&gt;
&lt;ul&gt;
        &lt;li&gt;&lt;a href="http://www.dotnetrocks.com/default.aspx?showID=112"&gt;.NET 
		Rocks Mood Indigo&lt;/a&gt;&lt;font color="red"&gt;*&lt;/font&gt; (April 2005) -
		&lt;span id="ShowLatest1_lblDescription"&gt;Carl talks with Richard Turner and 
		Anand Rajagapolan, Program Managers on the Indigo team to really dig 
		into the Indigo experience.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Videos&lt;/h4&gt;
&lt;ul&gt;
        &lt;li&gt;
		&lt;a href="http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20050428BizTalkSW/manifest.xml"&gt;
		BizTalk Server and Indigo&lt;/a&gt;&lt;font color="red"&gt;* &lt;/font&gt;(May 2005) MSDN 
		TV - Scott Woodgate shows a glimpse into the future with a working 
		prototype demo illustrating BizTalk Server and &amp;quot;Indigo&amp;quot; working 
		together. &lt;/li&gt;
		&lt;li&gt;
		&lt;a href="http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20050421INDIGODP/manifest.xml"&gt;
		Indigo Security in a Nutshell&lt;/a&gt;&lt;font color="red"&gt;*&lt;/font&gt; (April 2005)&amp;nbsp; 
		MSDN TV - Doug Purdy provides an overview of the Indigo Security 
		Programming Model. &lt;/li&gt;
		&lt;li&gt;
		&lt;a href="http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20050407INDIGOSS/manifest.xml"&gt;
		Introduction to Indigo&lt;/a&gt;&lt;font color="red"&gt;*&lt;/font&gt; (April 2005) MSDN 
		TV - Steve Swartz provides a brief conceptual overview of Indigo, walks 
		through some code, and introduces you to his jackalope.&lt;/li&gt;
		&lt;li&gt;Via Gene Webs blog entry:&lt;a href="http://blogs.msdn.com/genewebb/archive/2005/04/04/405240.aspx"&gt;Indigo Webcasts&lt;/a&gt; including  a) Programming Indigo 1, b) Programming Indigo 2, c) Indigo Security,  d) Reliability,  e) Tooling for Distributed Applications, f) The IT Pro Experience,  g) Migration, Upgrade, Integration, Interop, h) Basics, i) Indigo Internals 1, j) Indigo Internals 2.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=20750"&gt;Don Box - 
	Final Part of Indigo Team Tour&lt;/a&gt; via Channel 9 (Sep. 2004)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=18088"&gt;Don Box - 
	Tour of Indigo Team&lt;/a&gt; via Channel 9 (Aug. 2004)&lt;/li&gt;
	&lt;li&gt;
	&lt;a href="http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20040805webservicesrt/manifest.xml"&gt;
	Service Orientation and Today's Technologies&lt;/a&gt; via MSDN TV (Aug. 2004)&lt;/li&gt;
	&lt;li&gt;
	&lt;a href="http://msdn.microsoft.com/longhorn/understanding/pillars/indigo/migratevideo/"&gt;
	The Road to Indigo Technology Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conference Sessions&lt;/h4&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;a href="http://www.ftponline.com/conferences/vslive/2005/sf/indigo-day.aspx"&gt;
	Indigo Day at VSLive&lt;/a&gt; (Feb. 2005)&lt;br&gt;
	Summary via
	&lt;a href="http://www.theserverside.net/articles/showarticle.tss?id=VSLiveDay02"&gt;
	The Server Side&lt;/a&gt;&lt;br&gt;
	Eric Rudder showed of Indigo in the
	&lt;a href="http://www.ftponline.com/reports/vslivesf/2005/rudder/"&gt;VSLive! 
	Keynote&lt;/a&gt;&lt;br&gt;
	Summary of&amp;nbsp;
	&lt;a href="http://www.livejournal.com/users/mujtaba/19929.html"&gt;Eric Rudder's 
	Keynote&lt;/a&gt; and Don Box's &amp;amp; Steven Schwartz's session on
	&lt;a href="http://www.livejournal.com/users/mujtaba/21281.html"&gt;Programming 
	Indigo&lt;/a&gt; via &lt;a href="http://www.livejournal.com/users/mujtaba/21281.html"&gt;
	Mujtaba Syed&lt;/a&gt;&lt;br&gt;
        The Videos are now online &lt;a href="http://www.ftponline.com/special/indigo/"&gt;here&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;

&lt;p&gt;&lt;font color="red"&gt;*&lt;/font&gt;Updated Entries. If you know of an Indigo resource or blog (preferably with an Indigo category, please send me a note. Also a comment was made that anything written prior to Feb 05 should be disregarded since these papers will have been written about a very, very different Indigo and may end up being more confusing than useful!&lt;/p&gt;
&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=54273" width="1" height="1"&gt;</description></item><item><title>Argument Exception Handling Utility Classes</title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/02/06/51837.aspx</link><pubDate>Sun, 06 Feb 2005 11:29:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:51837</guid><dc:creator>mlorengo</dc:creator><slash:comments>2</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/51837.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=51837</wfw:commentRss><description>I just spent twenty minutes trying to track down this article in my blog clippings. I'm posting it here so I can find it a little faster next time.


Nils Jonsson created a utility class for simplifying &lt;a href="http://www.codeproject.com/csharp/ArgumentExceptions.asp"&gt;argument checking&lt;/a&gt;. The post that triggered my search for this article was K. Scott Allen's entry on &lt;a href="http://odetocode.com/Blogs/scott/archive/2005/02/05/999.aspx"&gt;argument checking in the Enterprise Library&lt;/a&gt; blog entry.&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=51837" width="1" height="1"&gt;</description></item><item><title>Optimizations in Complex Object Creation Part Deux</title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/02/03/50939.aspx</link><pubDate>Thu, 03 Feb 2005 14:32:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:50939</guid><dc:creator>mlorengo</dc:creator><slash:comments>1</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/50939.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=50939</wfw:commentRss><description>&lt;p&gt;In comments to my article on
&lt;a href="http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/02/02/50527.aspx#FeedBack"&gt;Optimizations in Complex Object Creation&lt;/a&gt;,
&lt;a href="http://weblogs.asp.net/fbouma"&gt;Frans Bouma&lt;/a&gt; suggests altering my query 
to use subqueries for the selecting the data rather than inner joins. I must 
confess, that I am not the all knowing Sql guru, so I appreciate the feedback, 
and it certainly makes sense. &lt;/p&gt;
&lt;p&gt;To quote from his comment...&lt;/p&gt;
&lt;table border="1"&gt;&lt;tr&gt;&lt;td&gt;Method 2 is often the slowest. If you have 10 wines for a producer and per 
wine 10 varieties, you have 1 + 10 + 10*10 queries. &lt;br&gt;
&lt;br&gt;
If you use: &lt;br&gt;
fetch the wines. &lt;br&gt;
Use the wines WHERE clause as the where clause for a subquery to fetch the 
winevarietal rows and use THAT where clause as the where clause for the subquery 
for varietal, you'll get 3 queries. &lt;br&gt;
Then merge the results in memory, which is very straight forward. This is 
different from method 3 in that you don't pull a lot of data you don't want with 
the join, as joins can produce a lot of redundant data.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Well, wouldn't you know it, I'm using the slowest method currently. But 
again, it all depends how I want to use the data, let's say I don't want to lazy 
load the information, Frans suggests redoing my Select cause. So, after doing 
that, I now have something like this, that I can use for Method 3, which should 
reduce the amount of data coming back.&lt;/p&gt;	

&lt;table id="table3"&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="-1"&gt;&lt;pre&gt;
SELECT Wine.Id, Wine.ProducerId, Wine.Name, Wine.Vintage, Varietal.Name, WineVarietal.Percent
FROM Varietal, 
  (SELECT * from winevarietal, 

    (SELECT * from Wine Where wine.producerid=[@producerId)
      WHERE winevarietal.wineId = Wine.id) As WineSubQuery
 
    WHERE ((([WineVarietal].[VarietalId])=[Varietal].[Id]))
ORDER BY Wine.Id;&lt;/pre&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Dru, comments as to why I don't return a DataSet/DataTable to get all of the 
data&amp;nbsp; and then populate my objects.&lt;/p&gt;
&lt;p&gt;My answer is that there is no reason that I couldn't, and in fact I have some 
methods in my IWineProvider interfaces that return the results as a DataSet. 
It's just that I don't need (right now) the extra overhead of a DataSet in 
loading my objects. And again, I can choose to modify the underlying methods as 
I or other people suggest improvements (as well as using the Sql suggestions).&lt;/p&gt;
&lt;p&gt;So, Frans &amp;amp; Dru and anyone else thanks for the feedback, and if I missed the 
point you were trying to make, please let me know.&lt;/p&gt;
&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=50939" width="1" height="1"&gt;</description></item><item><title>Optimizations in Complex Object Creation</title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/02/02/50527.aspx</link><pubDate>Wed, 02 Feb 2005 19:25:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:50527</guid><dc:creator>mlorengo</dc:creator><slash:comments>5</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/50527.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=50527</wfw:commentRss><description>&lt;p&gt;In comments to my article on
&lt;a href="http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/02/02/50431.aspx"&gt;
Handling Complex Objects in the GridView Control&lt;/a&gt;, Eric Wise mentions that 
one needs to be careful about
&lt;a href="http://codebetter.com/blogs/eric.wise/archive/2005/02/02/50347.aspx"&gt;
Handling Complex Objects in Grids&lt;/a&gt; capabilities with complex objects. Why? If 
I understand correctly, it's a database issue. You want to avoid loading up all 
of that information up from the database unless your really want to. &lt;/p&gt;
&lt;p&gt;He proposes two alternatives&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Expose inital load methods that make the huge database call and 
	prepopulate the referenced objects in one shot.&lt;/li&gt;
	&lt;li&gt;Expose domain level queries that execute single sql statements and 
	return datatables.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I'm going to explore method 1 in this post, because I can already use method 
2 with my object model. I simply don't include those properties in my binding 
list that require complex types. Unless I'm missing something, I don't see any 
advantages of method 2 over this solution. I can then drill down from the 
summary information as needed to the detail. This is known as
&lt;a href="http://www.martinfowler.com/eaaCatalog/lazyLoad.html"&gt;Lazy Loading&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So, with the assumption (mine), that I can do method 2 above with my current 
object model, and still retain a level of separation, let's look at how we can 
improve the data loading, *if* we've decided that we *do* want to display 
&amp;quot;complex&amp;quot; objects on the GridView.&lt;/p&gt;
&lt;p&gt;One way to optimize the object loading would be to reduce the number of times 
we go to the database. Here's a layout (via Access) of my data tables.&lt;/p&gt;
&lt;p&gt;
&lt;img border="0" src="http://dotnetjunkies.com/WebLog/images/dotnetjunkies_com/mlorengo/1946/o_VCDataTables20050202.png" width="478" height="222"&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;If I wanted to load all of the Wines associated with a Producer, I 
could do it via the following methods&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Return a DataReader of Wine records, and then lazy load the WineVarietal 
	(and Varietal) records in another DataReader as needed&lt;/li&gt;
	&lt;li&gt;Return a DataReader of Wine records and for each one get another 
	DataReader to load the associated Varietal information&lt;/li&gt;
	&lt;li&gt;Return a DataReader of Wine records with multiple INNER JOIN's and 
	iterate through the records building the Wine and Varietal information&lt;/li&gt;
	&lt;li&gt;Issue a batch of Sql Statements for each set of information and use the&amp;nbsp;
	&lt;a href="http://msdn2.microsoft.com/library/sh674a6a.aspx"&gt;IDataReader&lt;/a&gt;'s&amp;nbsp;
	&lt;a href="http://msdn2.microsoft.com/library/f7a0c4ct.aspx"&gt;NextResult&lt;/a&gt;() 
	method to advance the DataReader to the next result set while building the 
	Wine and Varietal information.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I'm currently using method 2. And it goes something like this:&lt;/p&gt;
&lt;p&gt;
Get the WineDataProvider&lt;br&gt;
Get an IDataReader from the WineDataProvider for all the Wine produced by the specified Producer.Id&lt;br&gt;
&lt;br&gt;
For each record in the IDataReader&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;
  Build a Wine instance from the IDataReader&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;
    Get the VarietalDataProvider&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;
    Get an IDataReader from the VarietalDataProvider for the current Wine.Id&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;
    For each record in the IDataReader&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
	Build a Varietal instance and add it to the Varietals collection&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Add the Wine to the collection&lt;/p&gt;
&lt;p&gt;
Return the collection of Wines&lt;/p&gt;
&lt;p&gt;
Method 1 (Lazy Load) would look very similar to Method 2, with the exception 
that the second IDataReader would be delayed until the Varietals collection was 
accessed. In my GridView example, it would be deferred until I bound the Wine 
instance to the row and accessed the Varietal collection in the &amp;lt;ItemTemplate&amp;gt;.&amp;nbsp; 
So, again I would expect very similar performance. Of course you don't know 
until you measure right!&lt;/p&gt;
&lt;p&gt;
Method 3 would retrieve all the necessary&amp;nbsp; information in one database 
call. The stored procedure would something like this. Now, there's most likely 
some optimizations that I can make to the stored procedure, but that's not the 
purpose of this post. This would give me all of the Wines for a particular 
Producer. In fact it would give me multiple records for a Wine if the wine had 
multiple Varietals.
&lt;/p&gt;	

&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="-1"&gt;&lt;pre&gt;
SELECT Wine.ProducerId AS ProducerId, Max(Wine.Id) AS WineId, Max(Wine.Name) AS WineName, WineVarietal.Percent, Varietal.Name
FROM Varietal 
INNER JOIN ((Producer INNER JOIN Wine ON Producer.Id = Wine.ProducerId) 
INNER JOIN WineVarietal ON Wine.Id = WineVarietal.WineId) ON Varietal.Id = WineVarietal.VarietalId
GROUP BY Wine.ProducerId, WineVarietal.Percent, Varietal.Name
HAVING (((Wine.ProducerId)=[@producerId]));&lt;/pre&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Some sample output for the above statement could look something like this&lt;/p&gt;
&lt;table BORDER="1" BGCOLOR="#ffffff" CELLSPACING="0" id="table2"&gt;
	&lt;font FACE="Arial" COLOR="#000000"&gt;
	&lt;caption&gt;&lt;b&gt;Query1&lt;/b&gt;&lt;/caption&gt;
	&lt;/font&gt;
	&lt;thead&gt;
		&lt;tr&gt;
			&lt;th BGCOLOR="#c0c0c0" BORDERCOLOR="#000000"&gt;
			&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;ProducerId&lt;/font&gt;&lt;/th&gt;
			&lt;th BGCOLOR="#c0c0c0" BORDERCOLOR="#000000"&gt;
			&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;WineId&lt;/font&gt;&lt;/th&gt;
			&lt;th BGCOLOR="#c0c0c0" BORDERCOLOR="#000000"&gt;
			&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;WineName&lt;/font&gt;&lt;/th&gt;
			&lt;th BGCOLOR="#c0c0c0" BORDERCOLOR="#000000"&gt;
			&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;Name&lt;/font&gt;&lt;/th&gt;
			&lt;th BGCOLOR="#c0c0c0" BORDERCOLOR="#000000"&gt;
			&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;Percent&lt;/font&gt;&lt;/th&gt;
		&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr VALIGN="TOP"&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;181&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;1&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;2001 
		Ravenswood Winery Shiraz-Cabernet&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;Cabernet 
		Sauvignon&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;75&lt;/font&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr VALIGN="TOP"&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;181&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;1&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;2001 
		Ravenswood Winery Shiraz-Cabernet&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;Shiraz&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;25&lt;/font&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr VALIGN="TOP"&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;181&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;82&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;2000 
		Ravenswood Winery Pickberry Vineyards Sonoma Mountain&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;Merlot&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;53&lt;/font&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr VALIGN="TOP"&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;181&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;82&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;2000 
		Ravenswood Winery Pickberry Vineyards Sonoma Mountain&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;Cabernet 
		Sauvignon&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;45&lt;/font&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr VALIGN="TOP"&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;181&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;82&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;2000 
		Ravenswood Winery Pickberry Vineyards Sonoma Mountain&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;Cabernet Franc&lt;/font&gt;&lt;/td&gt;
		&lt;td BORDERCOLOR="#c0c0c0" ALIGN="RIGHT"&gt;
		&lt;font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"&gt;2&lt;/font&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tfoot&gt;
	&lt;/tfoot&gt;
&lt;/table&gt;
&lt;p&gt;So, now my logic for building up an instance of a Wine would look something 
like this&lt;/p&gt;
&lt;p&gt;For each record in the IDataReader&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If the WineId = current Wine instance Id&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Build a Varietal instance and add it 
to the Varietals collection&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
  Build a Wine instance from the IDataReader&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add it to the Wine collection&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Build a Varietal instance and add it 
to the Varietals collection&lt;/p&gt;
&lt;p&gt;
Return the Wine collection&lt;/p&gt;
&lt;p&gt;
Again, check my logic, but you get the idea. Here we tradeoff making a database 
call for every object and instead load it up all at once.&lt;/p&gt;
&lt;h4&gt;
Finally Method 4&lt;/h4&gt;
&lt;p&gt;
John Kilgo discusses using the IDataReader.NextResult() method
&lt;a href="http://www.dotnetjohn.com/articles/articleid23.aspx"&gt;here&lt;/a&gt;. In this 
method I would forego the inner joins of the previous example and instead issue 
2 selects, 1 to retrieve the Wine records, and the second to retrieve the 
Varietal records. I would imagine the logic would go something like this&lt;/p&gt;
&lt;p&gt;
For each record in the IDataReader&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Build a Wine instance and add it to the collection&lt;/p&gt;
&lt;p&gt;
Advance the IDataReader to the next result set&lt;/p&gt;
&lt;p&gt;
For each record in the IDataReader&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Retrieve the Wine instance from the Wine collection based on 
the Wine.Id&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Build a Varietal class and add it to the Varietals collection&lt;/p&gt;
&lt;p&gt;
Some optimizations can be made to the above code as well&lt;/p&gt;
&lt;h4&gt;
Conclusion&lt;/h4&gt;
&lt;p&gt;
As you can see there are many different ways to handle the data, it all depends 
on how you are going to use it. In fact you could implement the data retrieval 
algorithms based on a strategy pattern, then once you understand what method 
works best for a specific situation, you simply adjust the data retrieval 
strategy.&lt;br&gt;
&amp;nbsp;&amp;nbsp; &lt;br&gt;
Did I mention how much I love blogging? It's great to get feedback. It's the one 
thing I've missed since I took about 5 months off. Did I mention I'm starting 
back to work on Monday? Yup.&lt;/p&gt;
&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=50527" width="1" height="1"&gt;</description></item><item><title>Handling Complex Objects in the GridView Control</title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/02/02/50431.aspx</link><pubDate>Wed, 02 Feb 2005 14:41:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:50431</guid><dc:creator>mlorengo</dc:creator><slash:comments>4</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/50431.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=50431</wfw:commentRss><description>&lt;p&gt;The new GridView in Asp.Net 2.0 makes displaying business objects just as 
easy as displaying DataSets. However when it comes to displaying complex 
business objects (my definition) it isn't that apparent (at least to me) how to 
go about doing this.&lt;/p&gt;
&lt;p&gt;When I say complex business object, I mean a business object that is composed 
of more than just properties of simple types (int, string, etc), but instead has 
properties consisting of other objects or even collections of objects. A prime 
example of this in my case is the Wine class. &lt;/p&gt;
&lt;p&gt;
&lt;img border="0" src="http://dotnetjunkies.com/WebLog/images/dotnetjunkies_com/mlorengo/1946/o_WineClassModel20050201.png" width="338" height="376"&gt;&lt;/p&gt;
&lt;p&gt;In the class diagram above, you can see that the Wine has a Varietals 
property that is a collection of WineVarietal classes, in turn, the WineVarietal 
class is composed of an Id, Percent, and a Varietal class. We're talking 
complex, not rocket science, but complex. The Class diagram illustrates how I 
chose to model the relationship of a Wine to it's Varietal. In this case a Wine 
can be composed of one or more varietals of grape in varying percentages. Please 
see my
&lt;a href="http://dotnetjunkies.com/WebLog/mlorengo/archive/2004/11/05/31194.aspx"&gt;
Varietal is the Spice of Life&lt;/a&gt; for more details on the modeling.&lt;/p&gt;
&lt;p&gt;In the declaration of the .aspx page GridView control, I have the following 
fields bound. Notice the Varietals field, it's the same as all of the others.&lt;/p&gt;
&lt;table bgcolor="#C0C0C0" width="100%" id="table2"&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="-1"&gt;&lt;pre&gt;
&amp;lt;asp:gridview id=&amp;quot;wineGridView&amp;quot; runat=&amp;quot;server&amp;quot; AutoGenerateColumns=&amp;quot;False&amp;quot;&amp;gt;
  &amp;lt;Columns&amp;gt;
    &amp;lt;asp:BoundField HeaderText=&amp;quot;Id&amp;quot; DataField=&amp;quot;Id&amp;quot; SortExpression=&amp;quot;Id&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
    &amp;lt;asp:BoundField HeaderText=&amp;quot;Vintage&amp;quot; DataField=&amp;quot;Vintage&amp;quot; SortExpression=&amp;quot;Vintage&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
    &amp;lt;asp:BoundField HeaderText=&amp;quot;Name&amp;quot; DataField=&amp;quot;Name&amp;quot; SortExpression=&amp;quot;Name&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
    &amp;lt;asp:BoundField HeaderText=&amp;quot;Appellation&amp;quot; DataField=&amp;quot;Appellation&amp;quot; SortExpression=&amp;quot;Appellation&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
    &amp;lt;asp:BoundField HeaderText=&amp;quot;Varietals&amp;quot; DataField=&amp;quot;Varietals&amp;quot; SortExpression=&amp;quot;Varietals&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
    &amp;lt;/Columns&amp;gt;
&amp;lt;/asp:gridview&amp;gt;&lt;/pre&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;However the GridView will display the following. See how the Varietals column 
simply outputs the class name of the field. What I would really like to do is 
have it display the list of varietal components, along with there percentage 
makeup.&lt;/p&gt;
	&lt;table cellspacing="0" rules="all" border="1" id="wineGridView" style="border-collapse:collapse;"&gt;
		&lt;tr&gt;
			&lt;th scope="col"&gt;Id&lt;/th&gt;&lt;th scope="col"&gt;Vintage&lt;/th&gt;&lt;th scope="col"&gt;Name&lt;/th&gt;&lt;th scope="col"&gt;Appellation&lt;/th&gt;&lt;th scope="col"&gt;Varietals&lt;/th&gt;

		&lt;/tr&gt;&lt;tr&gt;
			&lt;td&gt;82&lt;/td&gt;&lt;td&gt;2000&lt;/td&gt;&lt;td&gt;2000 Ravenswood Winery Pickberry Vineyards Sonoma Mountain&lt;/td&gt;&lt;td&gt;Sonoma Mountain&lt;/td&gt;&lt;td&gt;Lorengo.VirtualCellar.Business.WineVarietalCollection&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/table&gt;
&lt;p&gt;It turns out that the GridView supports the concept of a &amp;lt;asp:TemplateField&amp;gt; 
which allows for the customization of the output. What I will need to do is 
replace the &amp;lt;asp:BoundField&amp;gt; for the Varietals property, and instead insert a &amp;lt;asp:TemplateField&amp;gt;. 
Inside of the &amp;lt;asp:TemplateField&amp;gt; I will add a DataList control, and give it an 
id=&amp;quot;varietalDataList&amp;quot;. For the &amp;lt;ItemTemplate&amp;gt; in the DataList I will use the 
Container.DataItem property, which should point to a WineVarietal item in my 
Varietals collection. I can then cast the DataItem to the appropriate type.&lt;/p&gt;
&lt;p&gt;For example ((WineVarietal)Container.DataItem).Percent will give me the 
percentage of the grape varieatal in the current wine. See the code below.&lt;/p&gt;
&lt;table bgcolor="#C0C0C0" width="100%" id="table3"&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="-1"&gt;&lt;pre&gt;
&amp;lt;asp:gridview id=&amp;quot;wineGridView&amp;quot; runat=&amp;quot;server&amp;quot; AutoGenerateColumns=&amp;quot;False&amp;quot; OnRowDataBound=&amp;quot;WineGridView_RowDataBound&amp;quot;&amp;gt;
  &amp;lt;Columns&amp;gt;
    &amp;lt;asp:BoundField HeaderText=&amp;quot;Id&amp;quot; DataField=&amp;quot;Id&amp;quot; SortExpression=&amp;quot;Id&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
    &amp;lt;asp:BoundField HeaderText=&amp;quot;Vintage&amp;quot; DataField=&amp;quot;Vintage&amp;quot; SortExpression=&amp;quot;Vintage&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
    &amp;lt;asp:BoundField HeaderText=&amp;quot;Name&amp;quot; DataField=&amp;quot;Name&amp;quot; SortExpression=&amp;quot;Name&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;

    &amp;lt;asp:TemplateField HeaderText=&amp;quot;Varietals&amp;quot; SortExpression=&amp;quot;Varietals&amp;quot; &amp;gt;
      &amp;lt;ItemTemplate&amp;gt;

        &amp;lt;asp:DataList id=&amp;quot;varietalDataList&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;
          &amp;lt;ItemTemplate&amp;gt;
            &amp;lt;%# ((Varietal)((WineVarietal)Container.DataItem).Varietal).Name %&amp;gt;
            (&amp;lt;%# ((WineVarietal)Container.DataItem).Percent %&amp;gt;%)
          &amp;lt;/ItemTemplate&amp;gt;
        &amp;lt;/asp:DataList&amp;gt;

      &amp;lt;/ItemTemplate&amp;gt;
    &amp;lt;/asp:TemplateField&amp;gt;

    &amp;lt;asp:BoundField DataField=&amp;quot;Appellation&amp;quot; SortExpression=&amp;quot;Appellation&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
    &amp;lt;asp:BoundField HeaderText=&amp;quot;ItemState&amp;quot; DataField=&amp;quot;ItemState&amp;quot; SortExpression=&amp;quot;ItemState&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
  &amp;lt;/Columns&amp;gt;
&amp;lt;/asp:gridview&amp;gt;
&lt;/pre&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;Ahh, but how does it know to bind the items in the DataList to the 
WineVarietal object of the current wine? You may have noticed the added 
attribute in the &amp;lt;asp:GridView&amp;gt; control. To be more specific,
&lt;a href="http://msdn2.microsoft.com/library/y287zyfb.aspx"&gt;OnRowDataBound&lt;/a&gt;=&amp;quot;WineGridView_RowDataBound&amp;quot;.&lt;/p&gt;
&lt;p&gt;This let's us add some special code to handle the wiring up of the Wine's 
Varietals collection in the pages codebehind.&lt;/p&gt;
&lt;table bgcolor="#C0C0C0" width="100%" id="table4"&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="-1"&gt;&lt;pre&gt;
protected void WineGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
  Wine w = null;

  GridViewRow r = e.Row;
  if (r.DataItem != null) // Make sure we're not in the Header or Footer row
  {
    w = r.DataItem as Wine;
  }

  DataList varietalDataList = e.Row.FindControl(&amp;quot;varietalDataList&amp;quot;) as DataList;
  if (varietalDataList != null &amp;amp;&amp;amp; w != null)
  {
    varietalDataList.DataSource = w.Varietals;
    varietalDataList.DataBind();
  }
&lt;/pre&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;For each row in the GridView (including the Header and Footer rows), we will 
find &amp;quot;varietalDataList&amp;quot; control and update it's DataSource to the Varietals 
collection of the current Wine object. Then we call it's DataBind() method and 
woo hoo! Here's what we get!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	&lt;table cellspacing="0" rules="all" border="1" id="wineGridView" style="border-collapse:collapse;"&gt;
		&lt;tr&gt;
			&lt;th scope="col"&gt;Id&lt;/th&gt;&lt;th scope="col"&gt;Vintage&lt;/th&gt;&lt;th scope="col"&gt;Name&lt;/th&gt;&lt;th scope="col"&gt;Varietals&lt;/th&gt;&lt;th scope="col"&gt;&amp;nbsp;&lt;/th&gt;&lt;th scope="col"&gt;ItemState&lt;/th&gt;

		&lt;/tr&gt;&lt;tr&gt;
			&lt;td&gt;82&lt;/td&gt;&lt;td&gt;2000&lt;/td&gt;&lt;td&gt;2000 Ravenswood Winery Pickberry Vineyards Sonoma Mountain&lt;/td&gt;&lt;td&gt;
                        &lt;table id="wineGridView_ctl02_varietalDataList" cellspacing="0" border="0" style="border-collapse:collapse;"&gt;
				&lt;tr&gt;
					&lt;td&gt;Merlot (53%)&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
					&lt;td&gt;Cabernet Sauvignon (45%)&lt;/td&gt;

				&lt;/tr&gt;&lt;tr&gt;
					&lt;td&gt;Cabernet Franc (2%)&lt;/td&gt;
				&lt;/tr&gt;
			&lt;/table&gt;
                    &lt;/td&gt;&lt;td&gt;Sonoma Mountain&lt;/td&gt;&lt;td&gt;Clean&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/table&gt;



&lt;p&gt;I like it. Now, I'm not sure if this is the best way to do it. It just works 
for me. If anyone has any other suggestions as to accomplish this, I would sure 
be interested in hearing about it. My next step is to code up a general Producer 
and Wine search page, so I'll take what I've learned today and apply it to those 
pages.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=50431" width="1" height="1"&gt;</description></item><item><title>Further Refinement with the ObjectDataSource Control</title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/02/02/50420.aspx</link><pubDate>Wed, 02 Feb 2005 13:48:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:50420</guid><dc:creator>mlorengo</dc:creator><slash:comments>1</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/50420.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=50420</wfw:commentRss><description>&lt;p&gt;In order to take advantage of the new GridView control in Asp.Net 2.0, I've 
been researching how too use the new ObjectDataSource control, and add support 
for it in my Virtual Cellar application. I now have two classes in the Virtual 
Cellar Model that will serve as the candidate classes for use as an 
ObjectDataSource. A lot of Asp.Net 2.0 examples use the SqlDataSource control to 
illustrate the GridView features, this entry will list some resources that 
specifically apply to using the ObjectDataSource&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://fredrik.nsquared2.com/viewpost.aspx?PostID=229"&gt;Paging 
	with the ObjectDataControl&lt;/a&gt; (Frederik Normen)&lt;br&gt;
	Discusses how to implement paging support.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.code-magazine.com/Article.aspx?quickid=0501021"&gt;
	Sorting Objectively&lt;/a&gt; (Jonathan Goodyear)&lt;br&gt;
	Discusses how to add column sorting support.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/library/9a4kyhcx.aspx"&gt;MSDN2 
	Overview of the ObjectDataSource&lt;/a&gt;&lt;br&gt;
&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As I mentioned in my last post, I was trying to determine how to prevent the 
GridView from being populated on the first page load. I found the following note 
in the ObjectDataSource documentation.&lt;/p&gt;
&lt;p&gt;The &lt;span class="codeEntityReference"&gt;
&lt;a href="http://msdn2.microsoft.com/library/dx70zk47.aspx"&gt;ObjectDataSource&lt;/a&gt;&lt;/span&gt; 
control retrieves data whenever the &lt;span class="codeEntityReference"&gt;
&lt;a href="http://msdn2.microsoft.com/library/kas0309a.aspx"&gt;Select&lt;/a&gt;&lt;/span&gt; 
method is called. The &lt;span class="codeEntityReference"&gt;
&lt;a href="http://msdn2.microsoft.com/library/kas0309a.aspx"&gt;Select&lt;/a&gt;&lt;/span&gt; 
method is automatically called by controls bound to the
&lt;span class="codeEntityReference"&gt;
&lt;a href="http://msdn2.microsoft.com/library/dx70zk47.aspx"&gt;ObjectDataSource&lt;/a&gt;&lt;/span&gt; 
when their &lt;span class="languageKeyword"&gt;DataBind&lt;/span&gt; method is called. If 
you set the &lt;span class="languageKeyword"&gt;DataSourceID&lt;/span&gt; property of a 
data-bound control, the control automatically binds data when a Web page loads. 
However, if you set the &lt;span class="languageKeyword"&gt;DataSource&lt;/span&gt; 
property, you must explicitly call the &lt;span class="languageKeyword"&gt;DataBind&lt;/span&gt; 
method of the data-bound control. You can call the
&lt;span class="codeEntityReference"&gt;
&lt;a href="http://msdn2.microsoft.com/library/kas0309a.aspx"&gt;Select&lt;/a&gt;&lt;/span&gt; 
method programmatically at any time to retrieve data.&lt;/p&gt;
&lt;p&gt;So, it turns out that specifying the DataSourceId property autobinds the 
control. This is more of that &amp;quot;no-code&amp;quot; model in Asp.Net 2.0. In order to 
suppress the autobind, I simply removed the DataSourceId attribute from my .aspx 
page. This prevents the GridView from being populated on the page load. It also 
removes the link between the GridView and the ObjectDataSource, so I now have to 
setup a TextChanged handler do to the binding.&lt;/p&gt;
&lt;table bgcolor="#C0C0C0" width="100%" id="table1"&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="-1"&gt;&lt;pre&gt;
protected void ProducerSearchTextbox_TextChanged(object sender, EventArgs e)
{
	producerGridView.DataSource = producerDataSource1;
	producerGridView.DataBind();
}&lt;/pre&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;The above snippet sets the DataSource property to my ObjectDataSource 
control's Id property. This is equivalent to setting the DataSourceId = 
&amp;quot;producerDataSource1&amp;quot; property in the .aspx page, except that it doesn't 
autobind on page load. Then I call the DataBind() method.&lt;/p&gt;
&lt;p&gt;I refactored a lot of the Repository code right out of my model. My reason 
for doing this was to satisfy a requirement that the ObjectDataSource have a 
parameterless default constructor. It turns out that you can overcome this 
requirement by handling the ObjectCreating event on the ObjectDataSource and 
performing my own construction. As it turns out, the new code model seems to fit 
better, and I eliminated a lot of classes that I just don't need yet if ever. My 
new class diagram looks like this.&lt;/p&gt;
&lt;p&gt;&lt;img border="0" src="http://dotnetjunkies.com/WebLog/images/dotnetjunkies_com/mlorengo/1946/r_VCClassModel20050201.png" &gt;&lt;/p&gt;
&lt;p&gt;Bigger picture &lt;a href="http://dotnetjunkies.com/WebLog/images/dotnetjunkies_com/mlorengo/1946/o_VCClassModel20050201.png"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;p&gt;
&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The WineDataSource and ProducerDataSource replace the WineRepository and 
ProducerRepository classes. The Builder classes are responsible for creating 
actual instances of the Wine and Producer classes, thereby segregating the 
responsibilities of each class. In order to make the *DataSource classes more 
friendly to the DataSource configuration wizard, I've decorated them with the 
following attributes.&lt;/p&gt;
&lt;table bgcolor="#C0C0C0" width="100%"&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="-1"&gt;&lt;pre&gt;
[DataObject]
public class WineDataSource
{

  public WineDataSource()
  {
  }

  [DataObjectMethod(DataObjectMethodType.Select, true)]
  public IList&amp;lt;Wine&amp;gt; SelectByProducerId(int id)
  {
    return GetWineList(this.wineProvider.GetByProducerAsDataReader(id));
  }

  [DataObjectMethod(DataObjectMethodType.Select)]
  public IList&amp;lt;Wine&amp;gt; SelectById( int id )
  {
    return GetWineList(this.wineProvider.GetAsDataReader(id));
  }

  //...
}&lt;/pre&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;The DataObject attribute on the class level tells the wizard that this is a 
DataSource class. The DataObjectMethod attribute exposes the 
SelectByProducerId(int id) as a DataObjectMethod, and more specifically a 
&amp;quot;Select&amp;quot; method. The second boolean argument specifies that this is the default 
&amp;quot;Select&amp;quot; method. Here's how it looks in the designer.&lt;/p&gt;
&lt;p&gt;&lt;img border="0" src="http://dotnetjunkies.com/WebLog/images/dotnetjunkies_com/mlorengo/1946/o_DataSourceWizard1.png" width="582" height="240"&gt;&lt;/p&gt;
&lt;p&gt;The only items that will display in the drop down list are those that have 
been marked with the [DataObject] attribute (as long as the Show only data 
components checkbox is selected). This eases the clutter when your project 
consists of a lot of classes.&lt;/p&gt;
&lt;p&gt;The next step is to choose the Select method. Again, only those methods with 
a DataObjectMethod and a DataObjectMethodType of Select will be shown.&lt;/p&gt;
&lt;p&gt;&lt;img border="0" src="http://dotnetjunkies.com/WebLog/images/dotnetjunkies_com/mlorengo/1946/o_DataSourceWizard2.png" width="582" height="286"&gt;&lt;/p&gt;
&lt;p&gt;In conclusion, I've illustrated how to prevent the autobinding from occurring 
on the page, refined my class diagram to reflect the addition of the new 
xxxxDataSource classes, and demonstrated the use of the DataObject attributes 
(which are in System.ComponentModel).&lt;/p&gt;
&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=50420" width="1" height="1"&gt;</description></item><item><title>Microsoft Architecture Journal 4 Out Now</title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/01/25/48496.aspx</link><pubDate>Wed, 26 Jan 2005 00:59:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:48496</guid><dc:creator>mlorengo</dc:creator><slash:comments>1</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/48496.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=48496</wfw:commentRss><description>From the Blog Clippings Category

The Microsoft Architects Journal 4 is now available &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=f88047aa-0f7a-4081-8156-d6153780931c&amp;displaylang=en"&gt;here&lt;/a&gt; as a pdf. The table of contents lists these articles.

&lt;ul&gt;
&lt;li&gt;Choosing the Right Presentation Layer Architecture&lt;/li&gt;
&lt;li&gt;Information Bridge Framework&lt;/li&gt;
&lt;li&gt;Benchmarking a Transaction Engine&lt;/li&gt;
&lt;li&gt;Enterprise Architecture Alignment Heuristics&lt;/li&gt;
&lt;li&gt;Razorbills&lt;/li&gt;
&lt;li&gt;Next Generation Tools for OOD&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=48496" width="1" height="1"&gt;</description></item><item><title>Adapting The Virtual Cellar Domain Objects to .Net using the ObjectDataSource </title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/01/25/48427.aspx</link><pubDate>Tue, 25 Jan 2005 17:05:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:48427</guid><dc:creator>mlorengo</dc:creator><slash:comments>2</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/48427.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=48427</wfw:commentRss><description>&lt;p&gt;I've been ever so slowly adding new .Net 2.0 features to the Virtual Cellar 
code. The most apparent changes are driven by the use of ASP.Net 2.0 features, 
most notably the GridView control and the new suite of DataSource controls.&lt;/p&gt;
&lt;p&gt;I wasn't too happy to see the introduction of the SqlDataSource control, I 
thought it just encouraged bad layering practices, allowing the population of 
the new Data Controls through straight ahead SQL statements. Sure, I could setup 
a stored procedure and call that with the SqlDataSource control, but I was still 
programming to the database. It just felt wrong.&lt;/p&gt;
&lt;p&gt;So, I was rather dejected, I really wanted to use the new GridView control in 
my application. That's when I found out about the ObjectDataSource control. 
There's a great
&lt;a href="http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20041021VSTUDIOSL/manifest.xml"&gt;
MSDNTV Episode&lt;/a&gt; that talks about this. This was the perfect solution. I would 
be able to use my Domain Objects directly with the GridView control. There was 
only one problem, the object used as the data source needed to have a default 
contructor.&lt;/p&gt;
&lt;p&gt;As you may (or may not) remember, I based the Virtual Cellar model on the 
Repository Pattern. Unfortunately, I based my domain objects on a base class, 
RepositoryItemBase, that does not allow for a default constructor, instead it 
includes a reference to the RepositoryFactory, should any of the classes such as 
the Wine class need to expose properties of another aggregate root (Producer). 
Part of this was to get around the problem of having a reference to the 
ProducerRepository in the Wine class, instead a request would be made to the 
RepositoryFactory to generate a Factory instance (in this case a ProducerFactory) 
for re-hydrating the Producer class from the ProducerRepository, from 
information stored in the Wine class.&lt;/p&gt;
&lt;p&gt;The short answer, is that I am unable to use the ProducerRepository as an 
ObjectDataSource, because it does not support a parameterless default 
constructor. So my immediate fix is to create an adapter class 
ProducerDataSource that wraps the functionality of the ProducerRepository, yet 
has a parameterless default constructor to satisfy the requirements of the 
ObjectDataSource.&lt;/p&gt;
&lt;p&gt;Here's a shot of the class diagram modeled in the new VS2005 diagram tool.&lt;/p&gt;
&lt;p&gt;
&lt;img border="0" src="http://dotnetjunkies.com/WebLog/images/dotnetjunkies_com/mlorengo/1946/r_vsdiagram.png" width="415" height="447"&gt;&lt;/p&gt;
&lt;p&gt;As you can see, I've defined only one method &amp;quot;SelectByName&amp;quot; for the purpose 
of my testing. The method takes a string that is used for matching on the 
Producer.Name field. It simply calls the QueryByName method in the repository, 
which maps to the GetByNameAsDataReader in the IProducerProvider interface. This 
example is using the OleDbProducerProvider for the purposes of acting on an 
OleDb data source.&lt;/p&gt;
&lt;p&gt;I've used another 2.0 feature (Generics) to return a IList&amp;lt;Producer&amp;gt; from the 
ProducerDataSource.SelectByName method. The GridView can now take this IList&amp;lt;Producer&amp;gt; 
and map it to grid columns.&lt;/p&gt;
&lt;p&gt;Here's a quick code excerpt that illustrates the ProducerDataSource object 
and the ProducerGridView interaction.&lt;/p&gt;
&lt;table bgcolor="#C0C0C0" width="100%"&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="-1"&gt;&lt;pre&gt;
&amp;lt;form id=&amp;quot;form1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;
  &amp;lt;asp:TextBox ID=&amp;quot;TextBox1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;/asp:TextBox&amp;gt;
  &amp;lt;asp:Button ID=&amp;quot;Button1&amp;quot; runat=&amp;quot;server&amp;quot; Text=&amp;quot;Button&amp;quot; /&amp;gt;
  &amp;lt;asp:GridView ID=&amp;quot;ProducerGridView&amp;quot; runat=&amp;quot;server&amp;quot; DataSourceID=&amp;quot;ProducerDataSource&amp;quot; AutoGenerateColumns=&amp;quot;False&amp;quot;&amp;gt;
    &amp;lt;Columns&amp;gt;
      &amp;lt;asp:BoundField HeaderText=&amp;quot;Id&amp;quot; DataField=&amp;quot;Id&amp;quot; SortExpression=&amp;quot;Id&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
      &amp;lt;asp:BoundField HeaderText=&amp;quot;Name&amp;quot; DataField=&amp;quot;Name&amp;quot; SortExpression=&amp;quot;Name&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
      &amp;lt;asp:BoundField HeaderText=&amp;quot;Address&amp;quot; DataField=&amp;quot;Address&amp;quot; SortExpression=&amp;quot;Address&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
      &amp;lt;asp:BoundField HeaderText=&amp;quot;City&amp;quot; DataField=&amp;quot;City&amp;quot; SortExpression=&amp;quot;City&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
      &amp;lt;asp:BoundField HeaderText=&amp;quot;State&amp;quot; DataField=&amp;quot;State&amp;quot; SortExpression=&amp;quot;State&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
      &amp;lt;asp:BoundField HeaderText=&amp;quot;Country&amp;quot; DataField=&amp;quot;Country&amp;quot; SortExpression=&amp;quot;Country&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
      &amp;lt;asp:BoundField HeaderText=&amp;quot;PostalCode&amp;quot; DataField=&amp;quot;PostalCode&amp;quot; SortExpression=&amp;quot;PostalCode&amp;quot;&amp;gt;&amp;lt;/asp:BoundField&amp;gt;
    &amp;lt;/Columns&amp;gt;
  &amp;lt;/asp:GridView&amp;gt;
  &amp;lt;asp:ObjectDataSource ID=&amp;quot;ProducerDataSource&amp;quot; runat=&amp;quot;server&amp;quot; TypeName=&amp;quot;Lorengo.VirtualCellar.Business.ProducerDataSource&amp;quot;
    SelectMethod=&amp;quot;SelectByName&amp;quot;&amp;gt;
    &amp;lt;SelectParameters&amp;gt;
      &amp;lt;asp:ControlParameter Name=&amp;quot;name&amp;quot; ControlID=&amp;quot;TextBox1&amp;quot; PropertyName=&amp;quot;Text&amp;quot; DefaultValue=&amp;quot;Robert Mondavi&amp;quot;
        Type=&amp;quot;String&amp;quot; /&amp;gt;
    &amp;lt;/SelectParameters&amp;gt;
  &amp;lt;/asp:ObjectDataSource&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;You'll notice that the ObjectDataSource has a SelectMethod attribute which 
maps to the SelectByName method on my ProducerDataSource. Also the &amp;lt;SelectParameters&amp;gt; 
node maps the TextBox1 controls Text property to the &amp;quot;name&amp;quot; parameter of the 
method. This allows the user to enter a value in the text box to search for. &lt;/p&gt;
&lt;p&gt;The resulting pages looks like this&lt;/p&gt;
&lt;p&gt;&lt;img border="0" src="http://dotnetjunkies.com/WebLog/images/dotnetjunkies_com/mlorengo/1946/r_producertable.png" width="715" height="130"&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately, the page does the query when it is loaded, so the DefaultValue 
attribute of &amp;quot;Robert Mondavi&amp;quot; is used and displayed. What I would like to do is 
prevent the initial lookup from occurring, presenting the user with just a 
search box and button. Does anybody know of hand how to accomplish this?&lt;/p&gt;
&lt;p&gt;In the meantime, I'm going to revisit my Repository / DataSource classes and 
see if I can't come up with a better solution. Now that I know there is an easy 
way to utilize my business objects with the data controls, I'm excited.&lt;/p&gt;
&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=48427" width="1" height="1"&gt;</description></item><item><title>Creating a MasterPage for the Virtual Cellar</title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/01/19/46414.aspx</link><pubDate>Wed, 19 Jan 2005 23:30:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:46414</guid><dc:creator>mlorengo</dc:creator><slash:comments>2</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/46414.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=46414</wfw:commentRss><description>&lt;p&gt;I've begun creating the website that will house the Virtual Cellar data model 
and form the main user interface for the application. My next couple of entries 
will pertain to some initial tasks that need to be done so that I start hanging 
pages on the website. In this entry I'll discuss the setup of the site master 
template for the Virtual Cellar.&lt;/p&gt;
&lt;h4&gt;The General Layout&lt;/h4&gt;
&lt;p&gt;I plan on having a three column layout along with a header section, as 
illustrated in the picture below.&lt;/p&gt;
&lt;p&gt;
&lt;img border="0" src="http://dotnetjunkies.com/WebLog/images/dotnetjunkies_com/mlorengo/1946/r_Layout.png" width="304" height="181"&gt;&lt;/p&gt;
&lt;p&gt;There are four major sections&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Banner&lt;br&gt;
	The Header section will contain the application title bar as well as the 
	main menu navigation for the application&lt;/li&gt;
	&lt;li&gt;ContextBar&lt;br&gt;
	The ContextBar will contain information that will vary depending on the 
	context of the application. For example, if the user is not logged in, it 
	will contain a username, password prompt. If the user is logged in, it could 
	contain statistics about her account, an overview of her cellar statistics 
	or latest headlines via rss feeds.&lt;/li&gt;
	&lt;li&gt;Main&lt;br&gt;
	The Main section will be where the user spends most of her time interacting 
	with the application. The content of the section will be the data pulled 
	from the Virtual Cellar catalog in the form of reports or where the user 
	will enter new information into the Virtual Cellar.&lt;/li&gt;
	&lt;li&gt;SideBar&lt;br&gt;
	The sidebar section is where items of interest will be displayed depending 
	on the type of information being displayed in the main section. These could 
	be Google AdSense links, or links to items for sale on Amazon and eBay.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Creating The MasterPage&lt;/h4&gt;
&lt;p&gt;In Visual Studio, I create a new MasterPage template by Right-Clicking on the 
web project and select to add a New Item. I'm then presented with the following 
dialog box.&lt;/p&gt;
&lt;p&gt;&lt;img border="0" src="http://dotnetjunkies.com/WebLog/images/dotnetjunkies_com/mlorengo/1946/r_AddMasterPage.png" width="684" height="464"&gt;&lt;/p&gt;
&lt;p&gt;After adding the VirtualCellar.master file to the project, I'll go ahead and 
create the following &amp;lt;div&amp;gt; tags that define each of the sections. &lt;/p&gt;
&lt;table bgcolor="#CCCCCC" width="100%"&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="-1"&gt;&lt;pre&gt;
&amp;lt;body&amp;gt;
&amp;lt;form id=&amp;quot;MainForm&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;
  &amp;lt;div id=&amp;quot;Banner&amp;quot;&amp;gt;Banner
  &amp;lt;/div&amp;gt;
  &amp;lt;div id=&amp;quot;ContextBar&amp;quot;&amp;gt;ContextBar
  &amp;lt;/div&amp;gt;
  &amp;lt;div id=&amp;quot;Main&amp;quot;&amp;gt;Main
  &amp;lt;/div&amp;gt;
  &amp;lt;div id=&amp;quot;SideBar&amp;quot;&amp;gt;SideBar
  &amp;lt;/div&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;&lt;/pre&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;The next step is to add the &amp;lt;style&amp;gt; section to arrange the &amp;lt;div&amp;gt; sections in 
the order above&lt;/p&gt;
&lt;table bgcolor="#CCCCCC" width="100%"&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="-1"&gt;&lt;pre&gt;
&amp;lt;head&amp;gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;
	body {
		margin:10px 10px 0px 10px;
		padding:0px;
	}
&lt;/pre&gt;
	&lt;pre&gt;
	#Banner {
		background:#fff;
		height:70px;
		border-top:1px solid #000;
		border-right:1px solid #000;
		border-left:1px solid #000;
		voice-family: &amp;quot;\&amp;quot;}\&amp;quot;&amp;quot;;
		voice-family: inherit;
		height:69px;
	}
	html&amp;gt;body #Banner {
		height:69px;
	}
&lt;/pre&gt;
	&lt;pre&gt;
	#Banner p {
		font-size:14px;
		padding:10px 10px 0px 10px;
		margin:0px;
	}

	#ContextBar {
		position: absolute;
		left:10px;
		top:80px;
		width:200px;
		background:#fff;
		border:1px solid #000;
	}

	#Main {
		background:#fff;
		margin-left: 199px;
		margin-right:199px;
		border:1px solid #000;
		voice-family: &amp;quot;\&amp;quot;}\&amp;quot;&amp;quot;;
		voice-family: inherit;
		margin-left: 201px;
		margin-right:201px;
	}
	html&amp;gt;body #Main {
		margin-left: 201px;
		margin-right:201px;
	}

	#SideBar {
		position: absolute;
		right:10px;
		top:80px;
		width:200px;
		background:#fff;
		border:1px solid #000;
	}
&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;&lt;/pre&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;You may notice the use of the infamous
&lt;a href="http://www.dslreports.com/faq/10254"&gt;&amp;quot;voice family&amp;quot; hack&lt;/a&gt;, this is 
to get around the various browser bugs or interpretations of the css box model. 
This code also allows us to view our layout semantically. For the longest time I 
did layout using tables, little did I know that was a major crime according to 
the css folk. This article on
&lt;a href="http://www.alistapart.com/articles/slashdot/"&gt;retooling slashdot with 
css&lt;/a&gt; got me hooked on using css for layout. Another great site is the
&lt;a href="http://www.csszengarden.com"&gt;CSSZenGarden&lt;/a&gt;, but I digress. The above 
css code will give us the nice layout we set out to construct.&lt;/p&gt;
&lt;h4&gt;Creating a New Page Based on The Master&lt;/h4&gt;
&lt;p&gt;Now that I have the VirtualCellar.master page created, I can begin using it 
in new pages that I create. So I'll right click on my web project and select Add 
New Item. I'm present with the same dialog box as before, but this time I 
choose, Web Form. I also check the box that says Select Master Page. After 
selecting Add, a listbox containing all of the defined MasterPages are shown, 
and I select VirtualCellar.master. A new file Default.aspx is created that 
contains the following code.&lt;/p&gt;

&lt;table bgcolor="#CCCCCC" width="100%" id="table1"&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="-1"&gt;
	&lt;pre&gt;
&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; 
    MasterPageFile=&amp;quot;~/VirtualCellar.master&amp;quot; 
    CodeFile=&amp;quot;Default.aspx.cs&amp;quot; 
    Inherits=&amp;quot;Default_aspx&amp;quot; 
    Title=&amp;quot;Untitled Page&amp;quot; 
%&amp;gt;&lt;/pre&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;And the output looks like this!&lt;/p&gt;
&lt;p&gt;&lt;img border="0" src="http://dotnetjunkies.com/WebLog/images/dotnetjunkies_com/mlorengo/1946/r_BrowserLayout.png" width="618" height="273"&gt;&lt;/p&gt;
&lt;p&gt;Next time I'll look at adding a menu to the application using the new &amp;lt;asp:Menu 
/&amp;gt; and &amp;lt;asp:SiteMapDataSource /&amp;gt; controls&lt;/p&gt;
&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=46414" width="1" height="1"&gt;</description></item><item><title>Setting Up The December CTP VSTF </title><link>http://dotnetjunkies.com/WebLog/mlorengo/archive/2005/01/07/42446.aspx</link><pubDate>Fri, 07 Jan 2005 16:36:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:42446</guid><dc:creator>mlorengo</dc:creator><slash:comments>2</slash:comments><comments>http://dotnetjunkies.com/WebLog/mlorengo/comments/42446.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/mlorengo/commentrss.aspx?PostID=42446</wfw:commentRss><description>&lt;div class=Section1&gt;

&lt;h2&gt;1.1&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Setting Up The December Team System Preview&lt;/h2&gt;

&lt;p class=MsoNormal&gt;I've recently downloaded the Microsoft Visual Studio Team
System December CTP from MSDN, and have begun the process of setting up the
full blown system. I’m using a Dell PowerEdge 2550 Dual P3-1Ghz system with 2GB
of memory running Virtual Server 2005. The plan is to setup 2 virtual machines
running Windows Server 2003 each having 640 Mb of memory.&lt;/p&gt;

&lt;p class=MsoNormal&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class=MsoNormal&gt;Here’s how it will break down&lt;/p&gt;

&lt;p class=MsoNormal style='margin-left:.5in;text-indent:-.25in'&gt;&lt;span
style='font-family:Wingdings'&gt;Ø&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;Hercules: The Dell rack server configured with Window Server
2003, running Virtual Server 2005, DNS, and Active Directory for the
“LanThrash” domain.&lt;/p&gt;

&lt;p class=MsoNormal style='margin-left:.5in;text-indent:-.25in'&gt;&lt;span
style='font-family:Wingdings'&gt;Ø&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;Hades: The first Virtual Server that will function as the “Data
Tier” for the Visual Studio Team System.&lt;/p&gt;

&lt;p class=MsoNormal style='margin-left:.5in;text-indent:-.25in'&gt;&lt;span
style='font-family:Wingdings'&gt;Ø&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;Hermes: The second Virtual Server that will function as the
“Application Tier” for the Visual Studio Team System.&lt;/p&gt;

&lt;p class=MsoNormal&gt;I'll be following the instructions found here &lt;a
href="http://go.microsoft.com/fwlink/?LinkId=40042&amp;amp;clcid=0x40"&gt;http://go.microsoft.com/fwlink/?LinkId=40042&amp;amp;clcid=0x40&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;1.1.1&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;

&lt;/span&gt;Configuring Hercules for VSTS&lt;/h3&gt;

&lt;p class=MsoNormal&gt;Not much needs to be done since Hercules is already setup as
the Domain Controller for the LanThrash domain.&lt;/p&gt;

&lt;h4&gt;1.1.1.1&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt;Create New
Domain Users in Active Directory on Hercules&lt;/h4&gt;

&lt;p class=MsoNormal&gt;Start/Administrative Tools/Active Directory Users and
Computers/Domain/Users/New/User&lt;/p&gt;

&lt;p class=MsoNormal&gt;Add TFSSetup&lt;/p&gt;

&lt;p class=MsoNormal&gt;Add TFSService&lt;/p&gt;

&lt;h3&gt;1.1.2&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Configuring Hades for the Data Tier&lt;/h3&gt;

&lt;h4&gt;1.1.2.1&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt;Add New
Domain Users to Local Administrator Group on Hades&lt;/h4&gt;

&lt;p class=MsoNormal&gt;Start/Administrative Tools/Computer Management/Local Users
and Groups/Groups/Administrators/Add to Group...&lt;/p&gt;

&lt;p class=MsoNormal&gt;Add LanThrash/TFSSetup&lt;/p&gt;

&lt;p class=MsoNormal&gt;Add LanThrash/TFSService&lt;/p&gt;

&lt;h4&gt;1.1.2.2&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt; Install
IIS 6.0&lt;/h4&gt;

&lt;p class=MsoNormal&gt;Start/Adminstrative Tools/Manage Your Server/Add or Remove a
Role&lt;/p&gt;

&lt;p class=MsoNormal&gt;Add Application Server Role&lt;/p&gt;

&lt;p class=MsoNormal&gt;Enable ASP.Net&lt;/p&gt;

&lt;h4&gt;1.1.2.3&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt;Install
Microsoft SQL Server Beta 2 &lt;/h4&gt;

&lt;p class=MsoNormal&gt;Download Microsoft SQL Server Beta 2 from msdn subscriptions&lt;/p&gt;

&lt;p class=MsoNormal&gt;Use the Virtual Server 2005 Administration website to mount
the .iso file to the Hades CD/DVD Virtual Drive&lt;/p&gt;

&lt;p class=MsoNormal&gt;Run the Install Program&lt;/p&gt;

&lt;p class=MsoNormal&gt;Follow the instructions &amp;quot;How to: Install Microsoft SQL
Server 2005 for the Team Foundation Data Tier&amp;quot; in the setup guide&lt;/p&gt;

&lt;p class=MsoNormal&gt;Reboot the server&lt;/p&gt;

&lt;p class=MsoNormal&gt;Finish installation of SQL following the &amp;quot;How to:&amp;quot;&lt;/p&gt;

&lt;h4&gt;1.1.2.4&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt;Install
VSTS Data Tier on Hades&lt;/h4&gt;

&lt;p class=MsoNormal&gt;Logon to Hades with the TFSSetup user&lt;/p&gt;

&lt;p class=MsoNormal&gt;Run the Data Tier Setup program following the prompts.
(Note: &lt;a
href="http://waw.robertmoir.co.uk/win/vpcfaq/VPCFAQ7-KnownIssuesWithVP.html#7.8"&gt;Apparently
you can’t mount an .iso file larger than 2.2Gb under Virtual Server&lt;/a&gt;, so I
used the &lt;a
href="http://download.microsoft.com/download/7/b/6/7b6abd84-7841-4978-96f5-bd58df02efa2/winxpvirtualcdcontrolpanel_21.exe"&gt;Virtual
CD-ROM Control Panel&lt;/a&gt; to mount the .iso file on Hercules, and then copy the
/VSTS/DT folder to Hades directly. Apparently you cannot share a mounted .iso
either, the other work around was to add the mounted drive on Hercules as a
resource to the Hermes machine, but I couldn’t get that to work on Virtual
Server)&lt;/p&gt;

&lt;h3&gt;1.1.3&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Configure Hermes for the Application Tier&lt;/h3&gt;

&lt;h4&gt;1.1.3.1&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt;Add New
Domain Users to Administrators group on Hermes&lt;/h4&gt;

&lt;p class=MsoNormal&gt;Same as Hades&lt;/p&gt;

&lt;h4&gt;1.1.3.2&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt;Install IIS
6.0&lt;/h4&gt;

&lt;p class=MsoNormal&gt;Same as Hades&lt;/p&gt;

&lt;h4&gt;1.1.3.3&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt;Install
Windows SharePoint Services&lt;/h4&gt;

&lt;p class=MsoNormal&gt;Download and run &lt;a
href="http://www.microsoft.com/downloads/details.aspx?FamilyID=efdc7227-549c-4de1-a063-783f71a8bb2b&amp;amp;DisplayLang=en"&gt;Windows
SharePoint Services with SP1&lt;/a&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;Choose the Typical Install&lt;/p&gt;

&lt;h4&gt;1.1.3.4&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt;Logon to
Hermes under the LanThrash/TFSSetup user&lt;/h4&gt;

&lt;h4&gt;1.1.3.5&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt;Run the
Setup program according to the directions&lt;/h4&gt;

&lt;p class=MsoNormal&gt;It should be noted that I had a couple of problems while
doing the install. First &lt;a
href="http://communities.microsoft.com/newsgroups/previewFrame.asp?ICP=whidbey&amp;amp;sLCID=us&amp;amp;sgroupURL=microsoft.private.whidbey.teamsystem.teamfoundation.setup&amp;amp;sMessageID=%253C174701c4f4f7%25243fca79b0%2524a601280a@phx.gbl%253E"&gt;this
one&lt;/a&gt;, while trying to find the Data Tier databases, but it &lt;a
href="http://communities.microsoft.com/newsgroups/previewFrame.asp?ICP=whidbey&amp;amp;sLCID=us&amp;amp;sgroupURL=microsoft.private.whidbey.teamsystem.teamfoundation.setup&amp;amp;sMessageID=%253C176f01c4f4fb%25242f3fde60%2524a601280a@phx.gbl%253E"&gt;went
away&lt;/a&gt;, for whatever reason. The next one was an Error 3200, which someone
else &lt;a
href="http://communities.microsoft.com/newsgroups/previewFrame.asp?ICP=whidbey&amp;amp;sLCID=us&amp;amp;sgroupURL=microsoft.private.whidbey.teamsystem.teamfoundation.setup&amp;amp;sMessageID=%253C09e301c4f4a4%2524f505fa00%2524a301280a@phx.gbl%253E"&gt;reported
here&lt;/a&gt;, I simply hit Retry and it worked, although another solution or cause was
having a website running on the same port 8080, that Team System was attempting
to use.&lt;/p&gt;

&lt;h2&gt;1.2&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;

&lt;/span&gt;Conclusion&lt;/h2&gt;

&lt;p class=MsoNormal&gt;All in all it went rather smoothly, of course this was over
a period of a couple of days as I had to configure my new domain, and all my
other miscellaneous client computer, etc. I’ll now perform the straight ahead
installation of the Client Tier on my Dell Optiplex, but that should be  easy &lt;span
style='font-family:Wingdings'&gt;J&lt;/span&gt;&lt;/p&gt;

&lt;/div&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=42446" width="1" height="1"&gt;</description></item></channel></rss>