tag:blogger.com,1999:blog-5747409789223734082024-03-13T03:38:25.430-07:00ABLE SoftwareJon Foresthttp://www.blogger.com/profile/17769865588763215105noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-574740978922373408.post-38429950366482635312010-08-05T02:38:00.001-07:002010-08-05T02:42:23.927-07:00LINQ to SQL<span class="Apple-style-span" style="font-family:arial;">Well, I'm cracking on nicely now - though not getting as much time to spend on the development as I would have liked, so I'll make this brief.</span><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">If you're looking for an introduction to .NET's LINQ technology, you could do far worse that browse here:</span></div><div><a href="http://weblogs.asp.net/scottgu/archive/2007/01/28/video-using-linq-with-asp-net-in-vs-orcas-part-1.aspx"><span class="Apple-style-span" style="font-family:arial;">http://weblogs.asp.net/scottgu/archive/2007/01/28/video-using-linq-with-asp-net-in-vs-orcas-part-1.aspx</span></a></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">From an MVC point of view it's a little out-of-date in its use of code-behind files, which I don't believe are supported any more, but the demonstration is excellent. It even gave me one of those 'wow' moments.</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">There are still a few unknowns for me to work through, but once I have a mature, working example of the code I'm using in the Resource Manager application, I'll post it here.</span></div><div><br /></div>Jon Foresthttp://www.blogger.com/profile/17769865588763215105noreply@blogger.com0tag:blogger.com,1999:blog-574740978922373408.post-87840543726421503272010-07-29T13:56:00.000-07:002010-07-29T14:48:53.089-07:00Fun stuff with JQueryWell, I've just about got to the stage where the data is being sucked out of the project XML file and into the database - and I'll add more detail about that when I have tidied it. However, in the meantime I thought I'd put a bit in here about the planned presentation.<div><br /></div><div>The idea is to graph the resources' usage over a given time period. A guideline would be used to indicate whether the resources are over or under allocated.</div><div>The solution I had in mind was to use <div> tags of solid colour with a height varied to the height of the column in graph, dependent on the resource usage for that time period.</div><div>And to do this, the brave world of JQuery.</div><div><br /></div><div>To begin with, I wanted to see if I could vary the height of a div tag using a text value input into a form on the page. Here is the code:</div><div><div><i><script type="text/javascript" src="/Scripts/jquery-1.4.1.js"></script></i></div><div><i><script type="text/javascript"></i></div><div><i> $(document).ready(function () {</i></div><div><i> $("#setHeight").click(function () {</i></div><div><i> $("#variable").height(parseInt($("#height").val()));</i></div><div><i> });</i></div><div><i> });</i></div><div><i></script></i></div></div><div><br /></div><div>For a half-decent overview of JQuery, check this:</div><div><a href="http://www.devarticles.com/c/a/JavaScript/jQuery-Overview/">http://www.devarticles.com/c/a/JavaScript/jQuery-Overview/</a></div><div><br /></div>Let's break this down. The first line <div><span class="Apple-style-span" style=" ;font-family:Georgia;"><i><script type="text/javascript" src="/Scripts/jquery-1.4.1.js"></script></i></span></div><div><span class="Apple-style-span" style=" ;font-family:Georgia;">is used to make the JScript functions available to the rest of the page.</span></div><div><br /></div><div><span class="Apple-style-span" style=" ;font-family:Georgia;"><i>$(document).ready(function () { </i></span></div><div><span class="Apple-style-span" style=" ;font-family:Georgia;">This is the line that ensures the HTML DOM is fully loaded. It stops code trying to work with objects that are not yet rendered.</span></div><div><span class="Apple-style-span" style=" ;font-family:Georgia;"><br /></span></div><div><span class="Apple-style-span" style=" ;font-family:Georgia;"><i>$("#setHeight").click(function () {</i></span></div><div>When the button (not relevant) of id="setHeight" (very relevant) is clicked, carry out the instructions...</div><div><br /></div><div><i>$("#variable").height(parseInt($("#height").val()));</i></div><div>Bit more complicated, but not much. For the item (the div) with id="variable", update the height to the value in the text box with id="height". The <i>parseInt</i> is required to cast the string returned to an integer value. I'm always surprised when Javascript, a language that isn't strongly typed, doesn't do this kind of thing for you.</div><div><br /></div><div>For reference, the HTML elements in play here were:</div><div><div><input type="text" id="height" /></div><div><input type="button" id="setHeight" value="Set Height"/></div><div><div id="variable" style="background-color:Red; border:2; height:100px; width:100px"></div></div><div><br /></div><div><br /></div>Jon Foresthttp://www.blogger.com/profile/17769865588763215105noreply@blogger.com1tag:blogger.com,1999:blog-574740978922373408.post-9855409556433376612010-07-27T04:32:00.000-07:002010-07-27T04:53:55.053-07:00'Steam'lining the upload<span class="Apple-style-span" style="font-family:arial;">Afternoon,</span><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">Turns out yesterday's approach to get the uploaded XML file into the XmlDocument object was a bad idea, which doesn't come as a surprise. It was simply the only way I could make it work at the time.</span></div><div><span class="Apple-style-span" style="font-family:arial;">However, the XmlDocument.Load operation had not completed before I tried to delete the XML file from disk causing conflict errors. As this was the smallest possible MS Project XML file, this was clearly a non-starter.</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">I've returned to the original idea of reading the file straight into the XmlDocument object from the Request.Files[x].InputStream. Which I didn't know existed yesterday...</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">Here is the new code for the method:</span></div><div><span class="Apple-style-span" style="font-family:arial;"><p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#2B91AF"> HttpPost</span><span style="font-size:9.5pt;font-family:Consolas; mso-bidi-font-family:Consolas">, <span style="color:#2B91AF">ActionName</span>(<span style="color:#A31515">"AddProjectPlan"</span>)] <span style="color:green">//don't really understand this?</span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span><span style="color:blue">public</span> <span style="color:blue">void</span> Add()<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>{<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span><span style="color:blue">foreach</span> (<span style="color:blue">string</span> file <span style="color:blue">in</span> Request.Files) <span style="color:green">//only posting one element from the form, but this would work for many</span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>{<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span><span style="color:#2B91AF">HttpPostedFileBase</span> postedFile = Request.Files[file] <span style="color:blue">as</span><span style="mso-spacerun:yes"> </span><span style="color:#2B91AF">HttpPostedFileBase</span>;<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><o:p> </o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span><span style="color:blue">if</span> (postedFile.ContentLength > 0) <span style="color:green">//if file not empty</span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>{<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><o:p> </o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span><span style="color:green">//create an XML object for loading in the project plan xml</span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span><span style="color:#2B91AF">XmlDocument</span> xmlProjPlan = <span style="color:blue">new</span> <span style="color:#2B91AF">XmlDocument</span>();<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><o:p> </o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span><span style="color:blue">try</span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>{<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>xmlProjPlan.Load(postedFile.InputStream);<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>Response.Write(<span style="color:#A31515">"File "</span> + postedFile.FileName + <span style="color:#A31515">" successfully loaded<br/>"</span>);<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>}<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span><span style="color:blue">catch</span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>{<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>Response.Write(<span style="color:#A31515">"File "</span> + postedFile.FileName + <span style="color:#A31515">" is not valid XML<br/>"</span>);<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>}<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><o:p> </o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span><span style="color:green">//Response.Write(xmlProjPlan.InnerXml);<span style="mso-spacerun:yes"> </span>//for debugging<span style="mso-spacerun:yes"> </span></span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>}<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span><span style="color:blue">else</span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>{<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span><span style="color:green">// Let user know there was a problem</span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>Response.Write(<span style="color:#A31515">"No file submitted or file zero length"</span>);<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>}<span style="mso-spacerun:yes"> </span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>} <o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>}<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><o:p> </o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas"><span style="mso-spacerun:yes"> </span>}<o:p></o:p></span></p></span></div><div><span class="Apple-style-span" style="font-family:arial;"><div><span class="Apple-style-span" style="font-size:small;"><div><i><br /></i></div><div><i><br /></i></div><div>The problem was solved by some good people at StackOverflow, question and answer here:</div><div><a href="http://stackoverflow.com/questions/3342998/loading-uploaded-xml-file-into-xmldocument-object-asp-net-mvc-c">http://stackoverflow.com/questions/3342998/loading-uploaded-xml-file-into-xmldocument-object-asp-net-mvc-c</a></div></span></div></span></div>Jon Foresthttp://www.blogger.com/profile/17769865588763215105noreply@blogger.com0tag:blogger.com,1999:blog-574740978922373408.post-27310900637231654712010-07-26T08:04:00.000-07:002010-07-26T08:32:24.228-07:00ASP.net MVC file upload<span class="Apple-style-span" style="font-family:arial;">Today's task was simply: upload a file from the local machine and save it out to the 'webserver'.</span><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">To do this </span><span class="Apple-style-span" style=" ;font-family:arial;">I created a new controller <b>HomeController.cs</b> and a new View, <b>Home\Index.aspx</b></span></div><div><span class="Apple-style-span" style=" ;font-family:arial;"><b><br /></b></span></div><div><div><span class="Apple-style-span" style="font-family:arial;">The important bit of <b>Home\Index.aspx</b> looked like this:</span></div><div><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-family: serif; font-size: medium; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><pre class="programlisting" style="font-family: monospace; white-space: pre; "><span class="Apple-style-span" style="font-family:arial;font-size:130%;"><span class="Apple-style-span" style="font-size: 16px; white-space: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"> <span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"><i><form action="/Home/AddProjectPlan" method="post" enctype="multipart/form-data"></i></span></span></span></pre><pre class="programlisting" style="font-family: monospace; white-space: pre; "><span class="Apple-style-span" style="font-family:arial;font-size:130%;"><span class="Apple-style-span" style="font-size: 16px; white-space: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"><span class="Apple-tab-span" style="white-space:pre"><i> <label for="file">Filename:</label></i></span></span></span></pre><pre class="programlisting" style="font-family: monospace; white-space: pre; "><span class="Apple-style-span" style="font-family:arial;font-size:130%;"><span class="Apple-style-span" style="font-size: 16px; white-space: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"><i><span class="Apple-tab-span" style="white-space:pre"></span></i></span></span><span class="Apple-style-span" style="font-family: arial; white-space: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: 16px; "><span class="Apple-tab-span" style="white-space:pre"><i> <input type="file" name="file" id="file" /></i></span></span></pre><pre class="programlisting" style="font-family: monospace; white-space: pre; "><span class="Apple-style-span" style="font-family:arial;font-size:130%;"><span class="Apple-style-span" style="font-size: 16px; white-space: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"><span class="Apple-tab-span" style="white-space:pre"><i> <input type="submit" name="submit" value="Submit" /></i></span></span></span></pre><pre class="programlisting" style="font-family: monospace; white-space: pre; "><span class="Apple-style-span" style="font-family:arial;font-size:130%;"><span class="Apple-style-span" style="font-size: 16px; white-space: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"><span class="Apple-tab-span" style="white-space:pre"><i> </form></i></span></span></span></pre></span></span></div><div><span class="Apple-style-span" style="font-family: arial; "><br /></span></div><div><span class="Apple-style-span" style="font-family: arial; "><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;"></span><span class="Apple-style-span" style="font-family: arial; ">To <b>HomeController.cs</b> I added the <i>System.IO</i> namespace, and the following method:</span></div></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;"><div><span class="Apple-tab-span" style="white-space:pre"> </span><i>[HttpPost, ActionName("AddProjectPlan")] //don't really understand this?</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>public void Add()</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>{</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>foreach (string file in Request.Files) //only posting one element from the form, but this would work for many</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>{</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>HttpPostedFileBase postedFile = Request.Files[file] as HttpPostedFileBase;</i></div><div><i><br /></i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>if (postedFile.ContentLength > 0) //if file not empty</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>{</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>string savedFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "temp\\", <span class="Apple-tab-span" style="white-space:pre"> </span>Path.GetFileName(postedFile.FileName));</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>postedFile.SaveAs(savedFileName);</i></div><div><i><br /></i></div><div><i> </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>// Let user know that it all worked and where the file was saved</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>Response.Write("File submitted to " + savedFileName);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>}</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>else</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>{</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>// Let user know there was a problem</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>Response.Write("No file submitted or file zero length");</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>} </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>} </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>}</i></div></span></div><div><span class="Apple-style-span" style="font-family:arial;"><i><br /></i></span></div><div><span class="Apple-style-span" style="font-family:arial;">There are a few things in there I don't 100% understand, particularly what the [HttpPost,...] notation at the top means. I tried adding this all into a separate method <i>AddProjectPlan</i>, but for some reason the form post couldn't find this. If anyone has any ideas or decent tutorials, please let me know.</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;"><b>Useful links</b></span></div><div><span class="Apple-style-span" style="font-family:arial;">While doing this work I found the following very useful:</span></div><div><span class="Apple-style-span" style="font-family:arial;"><a href="http://www.hanselman.com/blog/ABackToBasicsCaseStudyImplementingHTTPFileUploadWithASPNETMVCIncludingTestsAndMocks.aspx">http://www.hanselman.com/blog/ABackToBasicsCaseStudyImplementingHTTPFileUploadWithASPNETMVCIncludingTestsAndMocks.aspx</a></span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">(and less so)</span></div><div><a href="http://www.highoncoding.com/Articles/689_Uploading_and_Displaying_Files_Using_ASP_NET_MVC_Framework.aspx"><span class="Apple-style-span" style="font-family:arial;">http://www.highoncoding.com/Articles/689_Uploading_and_Displaying_Files_Using_ASP_NET_MVC_Framework.aspx</span></a></div><div><br /></div>Jon Foresthttp://www.blogger.com/profile/17769865588763215105noreply@blogger.com0tag:blogger.com,1999:blog-574740978922373408.post-23360560328710182812010-07-26T07:22:00.000-07:002010-07-26T07:40:53.446-07:00A Start<span class="Apple-style-span" style="font-family:arial;">Hello,</span><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">Day one on the new software development project, ABLE. The plan is to create a suite of quality, low cost, enterprise level project management software - and have a lot of fun while doing it. As a contract Project Manager I'm pretty confident I know the market, as an ex-coder I'm pretty rusty and very out of date.</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">This blog is initially about the development of the software and the useful online resources I've used to to help me get back up to speed. Some community involvement through this blog would be excellent if you feel like chipping in.</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">Right, an overview:</span></div><div><span class="Apple-style-span" style="font-family:arial;"><b><br /></b></span></div><div><span class="Apple-style-span" style="font-family:arial;"><b>Product Summary</b></span></div><div><span class="Apple-style-span" style="font-family:arial;">In the first instance I plan to develop a thin vertical slice of end to end functionality that allows multiple Microsoft Project Plans to be loaded in to a web interface, and then display the resource utilisation over different time-frames (e.g. days, weeks, months) in a graph format. For v1 support will only be MS Project files saved as XML.</span></div><div><span class="Apple-style-span" style="font-family:arial;">This solves the problem that most mid sized organisations do not want to purchase MS Project Server and this resource view functionality is very useful at a strategic level. </span></div><div><span class="Apple-style-span" style="font-family:arial;">From an ABLE point of view, this implements a lot of code that can be built on for future 'vertical slices' that will extend functionality.</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;"><b>Technology choice</b></span></div><div><span class="Apple-style-span" style="font-family:arial;">My background is MS, so I've gone for a C# ASP.NET MVC implementation. As I'm using the free Microsoft Visual Web Developer 2010 Express, I've currently opted for xUnit.net for my unit testing. However, I think it will be a while before that gets implemented as I have a few more basic functionality issues to solve first...</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">If anyone has any comments or suggestions then I'd love to hear about them. I'm doing this as much for fun of coding as any serious attempt (yet) to make a career, so the geekier the better. I'm not keen to hear the 'there's x product that already does this' - I know there's a lot of stuff out there, but see above comment about doing this for fun ;-)</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">Thanks,</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">Jonathan</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div>Jon Foresthttp://www.blogger.com/profile/17769865588763215105noreply@blogger.com0