<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Going, going, gone awry</title>
        <link>http://geekswithblogs.net/goinawry/Default.aspx</link>
        <description>Technical ramblings from John Summers</description>
        <language>en-US</language>
        <copyright>goinawry</copyright>
        <managingEditor>goinawry@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Going, going, gone awry</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/goinawry/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Finding assembly information of an asp.net website</title>
            <category>ASP.NET</category>
            <link>http://geekswithblogs.net/goinawry/archive/2008/11/07/finding-my-assembly-versions-in-asp.net.aspx</link>
            <description>Getting near release time of a n-tiered system with multiple applications accessing the BLL/DAL framework? You want to make sure that what you think you're accessing really is the version you think it is. Using the AppDomain, you can get and parse through the assemblies and find a particular attribute match. In the case below, I'm looking for the companyname. I put this into a user control and applications can use it in a "help" or "about" page. This has come in handy for me, when you realize you've not updated your referenced or the GAC assembly. The key for asp.net apps is to add the App_Code folder and put an AssemblyInfo.cs file with the proper assembly information in it. (You DO need to remember to update that).&lt;br /&gt;
&lt;br /&gt;
the aspx code-&lt;br /&gt;
   &amp;lt;asp:Repeater ID="Assemblyrptr" runat="server"&amp;gt;&lt;br /&gt;
        &amp;lt;headertemplate&amp;gt;&lt;br /&gt;
        Assemblies:&amp;lt;br /&amp;gt;&lt;br /&gt;
        &amp;lt;/headertemplate&amp;gt;&lt;br /&gt;
        &amp;lt;itemtemplate&amp;gt;&lt;br /&gt;
        &amp;lt;%#Container.DataItem%&amp;gt; &lt;br /&gt;
        &amp;lt;br /&amp;gt;&lt;br /&gt;
        &amp;lt;/itemtemplate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/asp:Repeater&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the code behind C#-&lt;br /&gt;
    protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
        AppDomain currentDomain = AppDomain.CurrentDomain;&lt;br /&gt;
        //Load the assembly from the application directory using a simple name.&lt;br /&gt;
        //Make an array for the list of assemblies.&lt;br /&gt;
        Assembly[] assems = currentDomain.GetAssemblies();&lt;br /&gt;
        List&amp;lt;Assembly&amp;gt; appassemlist = assems.ToList&amp;lt;Assembly&amp;gt;();&lt;br /&gt;
        List&amp;lt;string&amp;gt; assemList = new List&amp;lt;string&amp;gt;();&lt;br /&gt;
        foreach (Assembly appassem in appassemlist)&lt;br /&gt;
        {&lt;br /&gt;
            AssemblyCompanyAttribute mdtName = (AssemblyCompanyAttribute)Attribute.GetCustomAttribute(appassem, (typeof(AssemblyCompanyAttribute)));&lt;br /&gt;
            if (mdtName != null &amp;amp;&amp;amp; mdtName.Company.StartsWith("yourcompanynamehere"))&lt;br /&gt;
                assemList.Add(appassem.FullName);&lt;br /&gt;
        }&lt;br /&gt;
        Assemblyrptr.DataSource = assemList;&lt;br /&gt;
        Assemblyrptr.DataBind();&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On a different subject but, same idea, you can grab the asp.net app_code assembly, stuff it in cache and use it in the master page footer.&lt;br /&gt;
&lt;br /&gt;
    void Application_Start(object sender, EventArgs e) &lt;br /&gt;
    {&lt;br /&gt;
        // Code that runs on application startup&lt;br /&gt;
        log4net.Config.XmlConfigurator.Configure();&lt;br /&gt;
        AppDomain currentDomain = AppDomain.CurrentDomain;&lt;br /&gt;
        //Load the assembly from the application directory using a simple name.&lt;br /&gt;
        //Make an array for the list of assemblies.&lt;br /&gt;
        Assembly[] assems = currentDomain.GetAssemblies();&lt;br /&gt;
        Assembly myassm = this.GetType().Assembly;&lt;br /&gt;
        int i = 0;&lt;br /&gt;
        for (i = 0; i &amp;lt; assems.Length; i++ )&lt;br /&gt;
        {&lt;br /&gt;
            if (assems[i].FullName.StartsWith("Deploy") || assems[i].FullName.StartsWith("App_Code") )&lt;br /&gt;
            {&lt;br /&gt;
                myassm = assems[i];&lt;br /&gt;
                Application.Add("Assembly", myassm);&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
       //This is another way to do it - this works too.&lt;br /&gt;
        //Application.Add("Assembly", System.Reflection.Assembly.Load("App_Code/AssemblyInfo.cs"));&lt;br /&gt;
&lt;br /&gt;
    }&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126869"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126869" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/goinawry/aggbug/126869.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>goinawry</dc:creator>
            <guid>http://geekswithblogs.net/goinawry/archive/2008/11/07/finding-my-assembly-versions-in-asp.net.aspx</guid>
            <pubDate>Sat, 08 Nov 2008 02:07:25 GMT</pubDate>
            <comments>http://geekswithblogs.net/goinawry/archive/2008/11/07/finding-my-assembly-versions-in-asp.net.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/goinawry/comments/commentRss/126869.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Checkin' Out Live Writer with Subtext</title>
            <link>http://geekswithblogs.net/goinawry/archive/2008/09/12/checkin-out-live-writer-with-subtext.aspx</link>
            <description>&lt;p&gt;In theory, it's supposed to work.&lt;/p&gt;
&lt;p&gt;With links-&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://maps.google.com"&gt;Google maps&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And pictures-&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/goinawry/WindowsLiveWriter/CheckinOutLiveWriterwithSubtext_12085/stanley.jpg"&gt;&lt;img height="184" width="244" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/goinawry/WindowsLiveWriter/CheckinOutLiveWriterwithSubtext_12085/stanley_thumb.jpg" alt="stanley" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Yup, my dog. I love this pic. Stanley is only about 6 months old at this point and 60lbs. Now he's hit 100lbs and coming up on 3yrs. He has to be the happiest dog in the world, doesn't seem to have a care in the world. Sleeps on his back with his feet up in the air or on the kid's picnic table as shown here. He actually doesn't anymore, he's a bit too big and tends to dream "rowdy" and wind up falling off (which is pretty funny to see). We've had him since he was a pup and I've only heard him growl once. My boys can take food out of his bowl, out of his mouth. You gotta love labs, his only flaw is that he will still chew up just about everything. I've got a good top ten list lying around somewhere. Chewed up plastic, wood, metal, glass, disconnected our cable (through PVC), ate the better part of a Bird of Paradise plant (5ft tall and apparently poisonous). He takes it all in stride. I think the key is he chews stuff up but doesn't really eat it. Otherwise, he'd be dead 10 times over. And don't think I leave these things lying around, he's gone over, under, through fencing. Our gas grill is surrounded by 9 gauge fencing. I can't imaging what he'd do to that. Yup, he's energetic and bored, we've all got school and jobs. I could crate him, but I leave him roaming in the back yard and try to make it as bomb proof as possible.  One plus, the kids never leave toys out in the back yard. If they forget, they get to figure out what is was while picking up all the minute pieces he's left behind.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div style="margin: 0px; padding: 0px; display: inline;" id="scid:84E294D0-71C9-4bd0-A0FE-95764E0368D9:caba9be2-ac3f-4469-9e10-7dd32183d9b4" class="wlWriterSmartContent"&gt;&lt;a title="Click to view this map on Live.com" alt="Click to view this map on Live.com" id="map-be6f91c9-3b35-417f-a930-c1a9105941a6" href="http://maps.live.com/default.aspx?v=2&amp;amp;cp=pkt7p15nzf8y&amp;amp;lvl=1&amp;amp;style=o&amp;amp;scene=5744565&amp;amp;mkt=en-US&amp;amp;FORM=LLWR"&gt;&lt;img height="240" width="320" alt="Map image" src="http://geekswithblogs.net/images/geekswithblogs_net/goinawry/WindowsLiveWriter/CheckinOutLiveWriterwithSubtext_12085/map-71e997ad388b.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Some of the mountain trails we hike with him. He did help me train for my one and only marathon. Any run 5 miles or less... he was there. He keeps a decent pace, but 5 miles at 8-9 min/mile pace is all he can do. Labs are built for fun not speed ;)&lt;/p&gt;
&lt;p&gt;Well now back to reality. I've been playing with Telerik's RadTreeView. Cool control, but it's a little tough to work with when linking up to a data in a database. The data needs to be "just so". However, to create a hierarchical tree menu from a star schema database, may not be the obvious walk in the park.&lt;/p&gt;
&lt;p&gt;Here's what I have-&lt;/p&gt;
&lt;p&gt;&amp;lt;telerik:RadTreeView ID="RadTreeView1" runat="server" DataFieldID="PackageType1"    &lt;br /&gt;
            DataSourceID="LinqDataSource2" DataTextField="PackageType1" DataValueField="PackageType1"     &lt;br /&gt;
            LoadingMessage="*loading*"     &lt;br /&gt;
            onnodecheck="RadTreeView1_NodeCheck"     &lt;br /&gt;
            onnodeexpand="RadTreeView1_NodeExpand" Skin="Telerik"     &lt;br /&gt;
            ondatabound="RadTreeView1_DataBound"&amp;gt;    &lt;br /&gt;
&amp;lt;CollapseAnimation Type="OutQuint" Duration="100"&amp;gt;&amp;lt;/CollapseAnimation&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;ExpandAnimation Duration="100"&amp;gt;&amp;lt;/ExpandAnimation&amp;gt;   &lt;br /&gt;
&amp;lt;/telerik:RadTreeView&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;asp:LinqDataSource ID="LinqDataSource2" runat="server"    &lt;br /&gt;
    ContextTypeName="EM.Facility.DAL.FacilityEMDataContext" EnableUpdate="True"     &lt;br /&gt;
    TableName="PackageTypes"&amp;gt;    &lt;br /&gt;
&amp;lt;/asp:LinqDataSource&amp;gt; &lt;/p&gt;
&lt;p&gt;This is just the beginning. From here, I switch to code behind and load on demand. One big reason, I need to get lower level tree nodes from different fields from different tables. There's just no way to hook this up with a datasource. However, doing it dynamically works pretty slick. Compared to a grid control (RadGrid), where you'd have to use the grouping. You can present more data (albeit more limited). In a much cleaner and more navigable. As seen-&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/goinawry/WindowsLiveWriter/CheckinOutLiveWriterwithSubtext_12085/9-12-2008radtreeview1_2.png"&gt;&lt;img height="611" width="618" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/goinawry/WindowsLiveWriter/CheckinOutLiveWriterwithSubtext_12085/9-12-2008radtreeview1_thumb.png" alt="9-12-2008radtreeview1" style="border: 0px none ;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125147"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125147" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/goinawry/aggbug/125147.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>goinawry</dc:creator>
            <guid>http://geekswithblogs.net/goinawry/archive/2008/09/12/checkin-out-live-writer-with-subtext.aspx</guid>
            <pubDate>Sat, 13 Sep 2008 01:30:30 GMT</pubDate>
            <comments>http://geekswithblogs.net/goinawry/archive/2008/09/12/checkin-out-live-writer-with-subtext.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/goinawry/comments/commentRss/125147.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Technical Software Project Management is Dead</title>
            <category>Software Development</category>
            <link>http://geekswithblogs.net/goinawry/archive/2008/07/13/technical-software-project-management-is-dead.aspx</link>
            <description>&lt;div&gt;&lt;font size="4"&gt;&lt;strong&gt;Technical Software Project Management is Dead&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;I’ve manage projects, I’ve lead them, I’ve been a developer, I’ve tested, I’ve organized releases, I’ve done all the paperwork. It’s just that lately, that seems to be the role expected from the developer on any given project. Don’t get me wrong, project managers are great. I still have never hired, fired, had to argue for the budget. Yikes! All these things have nothing to do with actually building the software. However, try developing something with no money and no resources. You won’t get very far. A while back, I ran into a great article by Robert Bogue about software development roles –&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.developer.com/java/other/article.php/3490871"&gt;Cracking the Code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It has a great layout of all the different roles and tasks in software development. Now I don’t prescribe to the notion that projects require to have all those positions separately staffed. There’s typically overlap, but I do think the roles outline tasks that occur on just about every project. I’ve begun to wonder if all these tasks are falling on the shoulders of developer and wondering why. &lt;/p&gt;
&lt;p&gt;First off, let’s take a look at these roles. The diagram of roles –&lt;/p&gt;
&lt;p&gt;&lt;!--[if gte vml 1]&gt;
 
 
  
  
  
  
  
  
  
  
  
  
  
  
 
 
 

 
&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;img height="169" border="0" width="576" v:shapes="_x0000_i1025" src="file:///C:/DOCUME%7E1/john/LOCALS%7E1/Temp/msohtml1/01/clip_image002.jpg" alt="" /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;
&lt;div&gt; &lt;img height="287" width="981" src="/images/geekswithblogs_net/goinawry/8285/o_SWdevOverview.gif" alt="" /&gt;&lt;/div&gt;
&lt;p&gt;Obviously, the developer is the developer. That hasn’t changed. In this day and age, the developer is often the lead and solution architect. There may be multiple developers on the team, but customers and management don’t care, pick one to get beat up in status meetings, they’re the lead. I do see architect positions around. I’m not sure what qualifies somebody as an architect. If you are the sole person on a project, I guess you are an architect. On a team of developers, the smartest one with the best ideas tends to become the architect. I think this actually works out well. Got ideas? Similarly, whichever developer articulates the best let them be the lead. They don’t need to be brilliant, just able to communicate to non-technical types.&lt;/p&gt;
&lt;p&gt;Don’t even get me started on QA, deployment, and training. Who really has software testers these days? I don’t know if they exist. I’ve never actually met one. So, the role assignments are getting clarified-&lt;/p&gt;
&lt;ol type="1" start="1" style="margin-top: 0in;"&gt;
    &lt;li&gt;Developer      – assigned to the developer (obviously).&lt;/li&gt;
    &lt;li&gt;Development      lead – the developer picked to attend status meetings with customers and managers.&lt;/li&gt;
    &lt;li&gt;Solutions      Architect – the smartest developer (or only developer).&lt;/li&gt;
    &lt;li&gt;QA      (testing) – the developers do the testing. I still propose that somebody      other than the developer should officially execute the test plan. &lt;/li&gt;
    &lt;li&gt;Deployment      tasks - give to the developer. &lt;/li&gt;
    &lt;li&gt;Training      - that goes to the developer, too. If you’re good and thorough creating      class material, you might be able to get somebody else to teach the      classes. &lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size="4"&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;What about the Analyst and requirements? Well, the developer is going to build it, so who better to write the requirements than the developer? This is one of the bigger mistakes I see, having the developer author all the requirement documentation. This leads to a system that meets the requirements exactly. Unfortunately, the customer does not get what he needs. Relating customer wants and needs into requirements that developers understand, requires a talent that not many people are gifted with. Even with Agile development cycles, which is geared towards changing requirements, good requirements can reduce the number of sprints and cycles. &lt;/p&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size="4"&gt;&lt;strong&gt;Subject Matter Expert&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;What does the subject matter expert do? He declares, “I have a dream!”&lt;/div&gt;
&lt;p&gt;They should have the vision of what the system should do. This should relate to problems with the business that need to be solved, thus justifying the development project. In reality, the subject matter expert is the customer who explains how his business is currently so messed up, that he doesn’t know what to do. He’s got a half-baked plan and lots of presentation material that convinces somebody to fund the project. The developer assigned, get’s to know the business, tells the customer what’s wrong with their process, how he can fix it, and how long that will take. Dreams meet reality. In my experience, the SME is somebody that knows the business, processes, and problems well. This is who the analyst should be talking to, this person knows what the real requirements are.&lt;/p&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size="4"&gt;&lt;strong&gt;Project Manager&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;Now that we’ve gone through the other roles, we’re getting to the point of this post – The Project Manager. An excerpt from PMBOK-&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="font-family: Verdana;"&gt;"Project management is the application of knowledge, skills, tools and techniques to project activities to meet project requirements. Project management is accomplished through the application and integration of the project management processes of initiating, planning, executing, monitoring and controlling, and closing. The project manager is the person responsible for accomplishing the project objectives."&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This means that the project manager’s name comes after the project name and before the milestone dates on the scorecard. They are responsible for getting the project from point A to point B. In my opinion, a good PM should –&lt;/p&gt;
&lt;ol type="1" start="1" style="margin-top: 0in;"&gt;
    &lt;li&gt;Understand      all the requirements, even though they may not have written them.&lt;/li&gt;
    &lt;li&gt;Understand      the system architecture and technology being used, even though they did      not design it.&lt;/li&gt;
    &lt;li&gt;Understand      the tasks and their dependencies. This enables them to schedule tasks      appropriately.&lt;/li&gt;
    &lt;li&gt;Know      where all the project documentation, issue list, and code is.&lt;/li&gt;
    &lt;li&gt;Know      where the test system is and what version of the system is on it. &lt;/li&gt;
    &lt;li&gt;Be      able to run and demonstrate the system.&lt;/li&gt;
    &lt;li&gt;Understand      the development life cycle and know where the project currently is at in      the life cycle.&lt;/li&gt;
    &lt;li&gt;Be      aware of the current unknowns and holes. These are tasks that aren’t      really defined or tasks that don’t have a developer available.&lt;/li&gt;
    &lt;li&gt;Understand      the above items well enough to make informed decisions about the schedule      and priorities of the project.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt; &lt;/div&gt;
&lt;p&gt;I’m sure there’s more, but the list is tall enough. A good PM is a developer’s dream. Unfortunately, the person assigned the role of PM is becoming more of a project analyst – &lt;/p&gt;
&lt;ol type="1" start="1" style="margin-top: 0in;"&gt;
    &lt;li&gt;Reports      to management and customers what’s currently being done, who’s working on      what, and what the current issues and grievances are.&lt;/li&gt;
    &lt;li&gt;Reports      back to the team the milestone dates that customers want and functionality      they want.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So, the PM is the unlucky soul that gets yelled at by management for missing dates and yelled at by the developers for giving them impossible goals. On occasion, you have the aggressive PM who yells at the developers and management. In either case, it seems, impossible goals lead to missed dates and a fair amount of yelling. &lt;/p&gt;
&lt;div&gt;&lt;img height="243" width="267" src="/images/geekswithblogs_net/goinawry/8285/o_SWirontriangle.gif" alt="" /&gt; &lt;/div&gt;
&lt;p&gt;&lt;!--[if gte vml 1]&gt;
 
&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;img height="243" border="0" width="267" v:shapes="_x0000_i1026" src="file:///C:/DOCUME%7E1/john/LOCALS%7E1/Temp/msohtml1/01/clip_image003.gif" alt="" /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;
&lt;p&gt;The iron triangle of features (scope), resources, and time can be ignored, but I’ve yet to see its laws broken. Tricking or breaking the iron triangle is not the point of this discussion, so let’s not dwell on it.&lt;/p&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size="4"&gt;&lt;strong&gt;What’s Happening?&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;The point is what happened to the good project manager? Did they all run off and hide? Are they all taking extended Project Management Institute training? My theory is that they did not evolve. Perhaps some did, but many did not. The evolution of software development and the ever increasing pressure to get more productivity from less people is squeezing the project manager position into extinction. I’m not saying the role and tasks associated with project management are disappearing, what I’m saying is the developers and other team members are now doing those tasks. Let me explain some reasons why.&lt;/p&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size="3"&gt;&lt;strong&gt;The speed of software-&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;In the old days project managers typically came from the developer ranks. They understood the technology and how to get projects done using it. They could judge whether an architecture design was sound, if requirements made sense, how long that task would really take. Today, technology moves too fast. People that are not intimately involved with the technology being used can’t make good decisions on architecture, requirements, and tasks. Only the developers understand the technology, what can and can’t be done with it, and how long it will take. The PM fell off the learning curve. It’s really not possible for them to keep up.&lt;/p&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size="3"&gt;&lt;strong&gt;Doing more with less-&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;Productivity in the world continues to increase. We hear of reports about the increase of goods produced by workers continuing to grow and grow. How is this possible? It’s possible with technology. Well, software is all about technology. New development tools and software are enabling developers to do more with less. Agile processes speed up the pace of development. I used to estimate that a project manager could manage no more than 2 significant projects at one time and still do a good job (reference the good PM list above). Today, project managers are assigned 5-10, or even more, projects at a given time. How do they do all that? How do they do it well? They don’t. There are new tools that help track issues, make schedules, and other management tasks. However, the people using these tools are more and more likely to be the developers, leads, and architects. This trend is not limited to project managers. Tools for testing, training, and requirements gathering are all enabling developers to do more. You could argue that these tools would also allow analysts, trainers, and testers to do more. I would agree. I would love to see that occurring. Unfortunately, I don’t.&lt;/p&gt;
&lt;div&gt;&lt;font size="4"&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;In conclusion, the old position of project management is becoming a thing of the past. There will always be managers, customers, and developers, but managing projects is becoming a task that developers must do. Taking an excerpt from Robert’s article –&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="font-family: Verdana;"&gt;The Project Management role is the first role in the software development process that isn't on the main line. The project manager isn't a person doing "real work."&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;With the speed of technology and increasing productivity, a job description that does not involve main line real work, is a job position slated for extinction. So, for all you software geeks out there that got into development to avoid the paperwork, meetings, organizing tasks, and managing schedules? Sorry, your days are numbered, all of those tasks are coming home to land on your plate.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123770"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123770" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/goinawry/aggbug/123770.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>goinawry</dc:creator>
            <guid>http://geekswithblogs.net/goinawry/archive/2008/07/13/technical-software-project-management-is-dead.aspx</guid>
            <pubDate>Sun, 13 Jul 2008 16:24:07 GMT</pubDate>
            <comments>http://geekswithblogs.net/goinawry/archive/2008/07/13/technical-software-project-management-is-dead.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/goinawry/comments/commentRss/123770.aspx</wfw:commentRss>
        </item>
        <item>
            <title>LINQtoSQL Practical Best Practices</title>
            <category>LinqToSQL</category>
            <link>http://geekswithblogs.net/goinawry/archive/2008/07/12/linqtosql-practical-best-practices.aspx</link>
            <description>&lt;p class="MsoNormal"&gt;I don’t profess to be an expert. But I have been using this technology in my current project. The typical, understaffed, hurry up and learn, show me something, release it (and yes it must be validated, but doing so is your problem). Here’s what I’ve picked up while&lt;span style=""&gt;  &lt;/span&gt;coding shotgun style.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;ol type="1" start="1" style="margin-top: 0in;"&gt;
    &lt;li style="" class="MsoNormal"&gt;Table      names and Field names should always be different. When table names and      field names are the same, LINQtoSQL renames the field name with a name1.      Then when you have a table with a field name that’s a foreign key to      another table and the foreign key matches the table name, which has a      matching field. Don’t go there, even if LINQtoSQL gets it correct, you      won’t.&lt;/li&gt;
    &lt;li style="" class="MsoNormal"&gt;Keep      the database names the same between the development, test, and production      databases. The default connection string embeds the database name in it.      Typically, I think it’s good practice to pass the connection string      (that’s defined in the .config file) when creating the datacontext. The      problem lies when you mix linqdatasources with business classes, the linqdatasource      creates the datacontext with no parameters and lies on the internally      generated connectionstring name. This is dependent on the database names      and&lt;span style=""&gt;  &lt;/span&gt;you have a problem. Business      methods pointing one way, linqdatasources pointing another way. The simple      solution, just use business methods or just use linqdatasources. However,      I still find that linqdatasource is great for the quick and dirty read. It      gives you all the bells and whistles, but when it comes to updates,      creation, deletion, I like to have my say in exactly what happens.&lt;/li&gt;
    &lt;li style="" class="MsoNormal"&gt;When      in doubt recreate the whole dbml, adding and deleting tables individually      may effect relationships. This may be a product of my own confusion, but      considering how nicely VS2008 creates the classes for you, use it. One or      all, it’s drag and drop, do them all and be done with it.&lt;/li&gt;
    &lt;li style="" class="MsoNormal"&gt;Extend      classes in external files named after the original class.&lt;span style=""&gt;  &lt;/span&gt;Put extended class files in a separate      folder. The partial classes are great. This just helps to keep things      sorted. I’m waiting to read about somebody extending the LINQtoSQL classes      to contain all their business rules. I think it’s possible for given      scenarios. Could be interesting.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123765"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123765" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/goinawry/aggbug/123765.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>goinawry</dc:creator>
            <guid>http://geekswithblogs.net/goinawry/archive/2008/07/12/linqtosql-practical-best-practices.aspx</guid>
            <pubDate>Sun, 13 Jul 2008 03:03:52 GMT</pubDate>
            <comments>http://geekswithblogs.net/goinawry/archive/2008/07/12/linqtosql-practical-best-practices.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/goinawry/comments/commentRss/123765.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Using LinqToSQL LinqDataSource across multiple tables</title>
            <category>LinqToSQL</category>
            <link>http://geekswithblogs.net/goinawry/archive/2008/06/20/linqdatasourcemultitable.aspx</link>
            <description>&lt;p class="MsoNormal"&gt;I’ve been recently using LinqToSQL with a current project and finally got down to business where I needed to work with fields from multiple tables. LinqToSQL is nice, but it does have it’s drawback that it maps objects directly to the schema. Fortunately, it maps their relationships too. Let’s avoid the discussion of LinqToSQL pros and cons for now and figure out handling multi-table fields.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Did I mention I’m using the LinqDataSource? Oops… that too. I’m not a fan of the built in sqldatasource and linqdatasource, but when you’re prototyping they’re a great way to get something up and running (save the business logic layer for when you actually HAVE logic). The catch is, they tend to do a bit more than what you want them to. This is the case I stumbled into.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Getting to fields from related tables requires that you understand the underlying LinqToSQL classes. Once you have those, it’s just a matter of typing in the &lt;span style=""&gt;&amp;lt;%# Eval("blah.blah”) %&amp;gt; statement.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;An example of this has been done and written up nicely by Todd Anglin- &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;a href="http://weblogs.asp.net/toddanglin/archive/2007/09/18/using-the-linqdatasource-a-practical-look.aspx"&gt;Todd's blog&lt;/a&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;p class="MsoNormal"&gt;In my case I have a primary key, PackageTestSystemID,&lt;span style=""&gt;  &lt;/span&gt;for a join table holding PKs to 2 other tables – PackageVersion and TestSystem. Displaying PKs is not user friendly, so I use the Eval statement to get the PackageName, Revision, and TestSystemSerial from the related tables. Shown below.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&amp;lt;Columns&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;    &lt;/span&gt;&amp;lt;telerik:GridBoundColumn DataField="PackageTestSystemID" &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;        &lt;/span&gt;DataType="System.Int64" &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;        &lt;/span&gt;HeaderText="ID" SortExpression="PackageTestSystemID" &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;        &lt;/span&gt;UniqueName="PackageTestSystemID" AllowFiltering="false"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;    &lt;/span&gt;&amp;lt;/telerik:GridBoundColumn&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;    &lt;/span&gt;&amp;lt;telerik:GridTemplateColumn HeaderText="Package" UniqueName="Package" &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;        &lt;/span&gt;SortExpression="PackageVersion.PackageName" AllowFiltering="true"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&amp;lt;ItemTemplate&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;         &lt;/span&gt;&amp;lt;asp:Label id="PackageLabel" runat="server" &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;         &lt;/span&gt;Text='&amp;lt;%# Eval("PackageVersion.PackageName") %&amp;gt;'&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;       &lt;/span&gt;&amp;lt;/asp:Label&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&amp;lt;/ItemTemplate&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;   &lt;/span&gt;&amp;lt;/telerik:GridTemplateColumn&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;    &lt;/span&gt;&amp;lt;telerik:GridTemplateColumn HeaderText="Revision" UniqueName="Revision" &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;        &lt;/span&gt;SortExpression="PackageVersion.Revision" AllowFiltering="false"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&amp;lt;ItemTemplate&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;         &lt;/span&gt;&amp;lt;asp:Label id="RevisionLabel" runat="server" &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;         &lt;/span&gt;Text='&amp;lt;%# Eval("PackageVersion.Revision") %&amp;gt;'&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;       &lt;/span&gt;&amp;lt;/asp:Label&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&amp;lt;/ItemTemplate&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;   &lt;/span&gt;&amp;lt;/telerik:GridTemplateColumn&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;    &lt;/span&gt;&amp;lt;telerik:GridTemplateColumn HeaderText="Tester" UniqueName="Tester" &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;        &lt;/span&gt;SortExpression="TestSystem.TestSystemSerial" AllowFiltering="false"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&amp;lt;ItemTemplate&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;         &lt;/span&gt;&amp;lt;asp:Label id="TesterLabel" runat="server" &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;             &lt;/span&gt;Text='&amp;lt;%# Eval("TestSystem.TestSystemSerial") %&amp;gt;'&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;       &lt;/span&gt;&amp;lt;/asp:Label&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&amp;lt;/ItemTemplate&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;   &lt;/span&gt;&amp;lt;/telerik:GridTemplateColumn&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&amp;lt;/Columns&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;This is done in Telerik’s RadGrid control. For those who are working with the standard gridview, it’s a snap too. Scott Guthrie shows how- &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/07/16/linq-to-sql-part-5-binding-ui-using-the-asp-linqdatasource-control.aspx"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;Scott’s blog&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;The catch is, I got all of this to work with the LinqDataSource, TestPackageLDS, shown below-&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&amp;lt;asp:LinqDataSource ID="TestPackagesLDS" runat="server"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;      &lt;/span&gt;ContextTypeName="EM.Facility.DAL.FacilityEMDataContext"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;      &lt;/span&gt;TableName="PackageTestSystems" &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;      &lt;/span&gt;EnableDelete="True" EnableInsert="True" EnableUpdate="True"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&amp;lt;/asp:LinqDataSource&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Which produces the Grid-&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;img width="402" height="257" alt="" src="/images/geekswithblogs_net/goinawry/8285/o_gridwfields.png" /&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;However, I didn’t start that way. Since I was going to just display this information. I initially had my TestPackageLDS with insert, update, delete&lt;span style=""&gt;  &lt;/span&gt;Not enabled. Without these enabled, I’m guessing the TestPackageLDS decided to not get them and you see the following grid and get to wonder… where’d it all go.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape
id="_x0000_i1026" type="#_x0000_t75" style='width:302.4pt;height:190.8pt'&gt;
&lt;v:imagedata src="file:///C:\DOCUME~1\john\LOCALS~1\Temp\msohtml1\01\clip_image003.png"
o:title="" /&gt;
&lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;img width="403" height="254" border="0" alt="" src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msohtml1/01/clip_image004.jpg" v:shapes="_x0000_i1026" /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;img width="403" height="254" alt="" src="/images/geekswithblogs_net/goinawry/8285/o_gridwoutfields.png" /&gt;&lt;br /&gt;
 &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Enabling just one of the update, insert, delete options and voila, problem fixed. I have not attempted this with the Gridview, but I suspect the issue lies in the LinqDataSource and the results will be the same. The LinqDataSource (and SqlDataSource) are useful tools for prototyping and simple applications. You could say they let you cheat, and you know cheaters never prosper. In this case, they just had me work a little bit to pay my dues. Have fun, I hope this helps.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;John.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123049"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123049" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/goinawry/aggbug/123049.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>goinawry</dc:creator>
            <guid>http://geekswithblogs.net/goinawry/archive/2008/06/20/linqdatasourcemultitable.aspx</guid>
            <pubDate>Fri, 20 Jun 2008 23:28:14 GMT</pubDate>
            <comments>http://geekswithblogs.net/goinawry/archive/2008/06/20/linqdatasourcemultitable.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/goinawry/comments/commentRss/123049.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Blogging? Blogging?</title>
            <link>http://geekswithblogs.net/goinawry/archive/2008/03/28/blogging-blogging.aspx</link>
            <description>&lt;p&gt;OK, this is my first tiny step into the online unknown. I don't know where I'm going to find the time for this. I don't know who is going to track me down, stalk me, flame me. We'll see... going awry.&lt;/p&gt;
&lt;p&gt;john.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120827"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120827" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/goinawry/aggbug/120827.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>goinawry</dc:creator>
            <guid>http://geekswithblogs.net/goinawry/archive/2008/03/28/blogging-blogging.aspx</guid>
            <pubDate>Fri, 28 Mar 2008 17:59:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/goinawry/archive/2008/03/28/blogging-blogging.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/goinawry/comments/commentRss/120827.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>