<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DEMHSH05fSp7ImA9WxFSGUk.&quot;"><id>tag:blogger.com,1999:blog-9692721</id><updated>2010-04-22T09:27:19.325-05:00</updated><title>Ian Lee, Sr.</title><subtitle type="html">while( !doneItAll )
{
  Live();
}</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.ianlee.info/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.ianlee.info/" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/IanLeeSr" /><feedburner:info uri="ianleesr" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;AkcFQXk_fSp7ImA9WxBQGE8.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-1142333601127876934</id><published>2010-01-18T09:20:00.001-06:00</published><updated>2010-01-18T09:20:10.745-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-18T09:20:10.745-06:00</app:edited><title>I’m a Semi-Finalist in the embeddedSpark 2010 Challenge!</title><content type="html">&lt;p&gt;&lt;a href="http://www.embeddedspark.com/submissions/Detail.aspx?eid=259"&gt;&lt;img title="embeddedSpark" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 5px; border-right-width: 0px" height="166" alt="embeddedSpark" src="http://lh5.ggpht.com/_GtUI5zxK6Zc/S1R8Kfv3QTI/AAAAAAAAPhM/aHlY5nvfEyU/embeddedSpark%5B4%5D.jpg?imgmax=800" width="206" align="left" border="0" /&gt;&lt;/a&gt;The results were announced on January 15th.&amp;#160; I never received an email, so I assumed that I didn’t make the cut.&amp;#160; Thought about it this morning and decided to wander over to the site and look for any announcements and low &amp;amp; behold there is Mr. ianlee74 on the list!&amp;#160; I guess it’s time to get busy!!!&amp;#160; More updates to come in the near future.&amp;#160; &lt;/p&gt;  &lt;p&gt;Check out the list of contestants &lt;a href="http://www.embeddedspark.com/forum.aspx?g=posts&amp;amp;t=184" target="_blank"&gt;here&lt;/a&gt;.&amp;#160; You can see my entry &lt;a href="http://www.embeddedspark.com/submissions/Detail.aspx?eid=259" target="_blank"&gt;here&lt;/a&gt; .&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-1142333601127876934?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gL1OvkxU6cMvV537h0psqFhhQTo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gL1OvkxU6cMvV537h0psqFhhQTo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gL1OvkxU6cMvV537h0psqFhhQTo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gL1OvkxU6cMvV537h0psqFhhQTo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/fInIoHPJH5c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/1142333601127876934/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=1142333601127876934" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/1142333601127876934?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/1142333601127876934?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/fInIoHPJH5c/im-semi-finalist-in-embeddedspark-2010.html" title="I’m a Semi-Finalist in the embeddedSpark 2010 Challenge!" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2010/01/im-semi-finalist-in-embeddedspark-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YGQX46cCp7ImA9WxBTGE8.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-7112560606478160182</id><published>2009-12-14T16:01:00.001-06:00</published><updated>2009-12-14T16:18:40.018-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-14T16:18:40.018-06:00</app:edited><title>Dynamic Report Generation Using SSRS Local Reports</title><content type="html">&lt;p&gt;Recently, I’ve been working on re-architecting part of an invoicing application that has a very rigid invoice formatting design into an application that will eventually allow for almost infinitely customizable formatting in a very efficient manner.&amp;#160; This should lead to better customer relationships and fewer software customizations and therefore improved &lt;a href="http://en.wikipedia.org/wiki/Rate_of_return" target="_blank"&gt;ROI&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Problem&lt;/h3&gt;  &lt;p&gt;Think about your water bill.&amp;#160; Does it have all the information on it that you want?&amp;#160; Let’s assume that it doesn’t.&amp;#160; Suppose your water bill only shows the activity for the current period on it and how much money you need to pay the water company.&amp;#160; This is probably enough information for most people.&amp;#160; But, let’s suppose you’ve recently invested in some new appliances in an effort to conserve water (and money).&amp;#160; Now you’re probably interested in having a little more information on your invoice.&amp;#160; For example, maybe you would like to also see your activity for the previous period and for the same period a year ago.&amp;#160; This information would allow you to easily see how well your investment in new appliances is paying off (your ROI).&amp;#160; Now suppose that you called up your water company and asked them to add this information to your monthly invoice.&amp;#160; I can hear you laughing.&amp;#160; I can hear the water company laughing too.&amp;#160; Well, this is exactly the type of requests that the company I’m working for gets on a weekly basis.&amp;#160; &lt;/p&gt;  &lt;p&gt;Their solution up to this point has been to have available in their custom billing software a handful of predefined hard-coded formats from which customers can pick.&amp;#160; However, almost monthly we get a request that doesn’t fit the mold of one of these predefined formats.&amp;#160; When this happens, we have to weigh up the cost of implementing a new format against the amount of money we believe we’ll make from this customer in an effort to determine if its going to pay off to give this particular customer exactly what they want or if we have to tell them that they’ll have to make due with what’s available.&amp;#160; Obviously, only one of these answers leads to exceptional customer satisfaction (and hopefully retention).&amp;#160; Of course, we want to give every customer exactly what they want but this is the real world and code changes still mean considerable investment.&amp;#160; &lt;/p&gt;  &lt;p&gt;Oh, and did I mention that all of the current invoices are built using a PDF API?&amp;#160; This makes it very difficult for a programmer new to the app to make modifications if he’s never used the API before.&lt;/p&gt;  &lt;p&gt;So, there are several problems here that need to be solved.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Give every customer the same level of exceptional support regardless of contract size. &lt;/li&gt;    &lt;li&gt;Allow for more dynamic invoice styling while keeping a uniform appearance and format across all invoices. &lt;/li&gt;    &lt;li&gt;Eliminate use of the PDF API to make future application modifications faster (and cheaper) to implement. &lt;/li&gt;    &lt;li&gt;Eliminate the need to measure ROI of customer satisfaction. &lt;/li&gt; &lt;/ol&gt;  &lt;h3&gt;Proposed Solution&lt;/h3&gt;  &lt;p&gt;The solution to this problem that I proposed is to first eliminate the use of the PDF API and replace it with a &lt;a href="http://msdn.microsoft.com/en-us/library/ms159106.aspx" target="_blank"&gt;SQL Server Reporting Services&lt;/a&gt; (&lt;a href="http://msdn.microsoft.com/en-us/library/ms159106.aspx" target="_blank"&gt;SSRS&lt;/a&gt;) solution.&amp;#160; For this application I will use SSRS in &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.reporting.winforms.localreport(VS.80).aspx" target="_blank"&gt;local reporting&lt;/a&gt; mode.&amp;#160; This eliminates the need for a new dedicated reporting server.&amp;#160; We may later add an SSRS server but at this time the added cost and administration was unwanted.&amp;#160; Also, using SSRS in local mode gives us more options for customization of report definitions.&lt;/p&gt;  &lt;p&gt;The basic format of all invoices is the same.&amp;#160; There’s a header, a footer, and a body which contains all of the “real” information that customers are interested in (and in customizing).&amp;#160; So, my plan is to build a main SSRS report that would have the header &amp;amp; footer information and a placeholder for the body of the invoice.&amp;#160; The body would be a separate subreport.&amp;#160; This subreport is the part we’ll be interested in for the rest of this article.&amp;#160; The basic idea is replace this subreport with customizations per customer.&lt;/p&gt;  &lt;p&gt;I decided to approach this in two different phases.&amp;#160; First, I will get the basic workings of this new approach in place by building a framework that allows the app to create SSRS reports to be exported as PDF files and put the tools in place to allow the subreport to be easily replaced with a customized version per customer.&amp;#160; In this first phase, I decided to create several static subreports (.rdlc files stored as embedded resources) using the Visual Studio reporting designer that would just replace the formats that were currently available via the PDF API code.&amp;#160; This would allow me to focus on the SSRS code without having to worry about any new UI pieces.&amp;#160; Depending on the customer’s current invoice style selection, I will dynamically replace the subreport placeholder with the appropriate subreport.&amp;#160; Completion of this phase should also help me determine if there are any limitations in SSRS local reporting that would prevent this proposal from working as planned.&amp;#160; This is where I am today and what I’ll be detailing in the rest of this article.&lt;/p&gt;  &lt;p&gt;After the first phase is completed and working as planned.&amp;#160; The second phase of the project will be to replace the embedded resource subreports with user designed subreport layouts.&amp;#160; This phase should be rather easy since SSRS (.rdlc) files are really just XML files.&amp;#160; The most difficult part of this phase will be getting the UI designer right.&amp;#160; It’ll be more tedious than difficult and I’ll document it at some later date when its complete.&lt;/p&gt;  &lt;h3&gt;Implementation&lt;/h3&gt;  &lt;p&gt;This should be very easy, right?&amp;#160; It all sounds very simple.&amp;#160; Create a report definition in the designer and drop in a subreport and then at runtime figure out which subreport should be there and modify some subreport name property and there you go.&amp;#160; Right?&amp;#160; Wrong.&amp;#160; Actually, its not much more difficult than that once you finish this article and benefit from my week of research and experimentation and a call to Microsoft tech support (which eventually led to them telling me it wasn’t possible…).&lt;/p&gt;  &lt;p&gt;So, I started by creating my report definitions and getting them all tied into the subreport selection logic and data sources.&amp;#160; This all compiled and executed properly and it seemed that I was done.&amp;#160; Until I noticed that the subreports weren’t actually being replaced and all I was actually getting was the subreport that compiled into the main report definition.&amp;#160; Well, this wasn’t going to work.&amp;#160; I was basically doing something like the following.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public virtual void &lt;/span&gt;RenderReport(&lt;span style="color: #2b91af"&gt;SsrsReportTypes &lt;/span&gt;reportType)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #2b91af"&gt;LocalReport &lt;/span&gt;report = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;LocalReport&lt;/span&gt;();&lt;br /&gt;    report.ReportEmbeddedResource = &lt;span style="color: #a31515"&gt;&amp;quot;DynamicSubreporting.Reports.DefaultInvoice.rdlc&amp;quot;;&lt;/span&gt;&lt;br /&gt;    report.LoadSubreportDefinition(&lt;span style="color: #a31515"&gt;&amp;quot;InvoiceBody2&amp;quot;&lt;/span&gt;, GetSubreportStream());&lt;br /&gt;    report.Render(...);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;It seemed that no matter what I did I could not get SSRS to recognize the new subreport definition provided it by LoadSubreportDefinition().&amp;#160; Originally, I thought the problem must have to do with the way I was binding the subreport or the way that the subreport was identified by the LocalReport object.&amp;#160; I tried everything I could think of to make this work.&amp;#160; I desperately needed it to work for this project to be successful.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;An alternate solution to this problem that I experimented with and got working was to dynamically write out the main report definition and replace the subreport name in the XML prior to writing out the file.&amp;#160; This solution had several limitations that I didn’t want to have to compromise on.&amp;#160; Mainly, it was going to be much messier to utilize this in phase 2 of the project and would probably lead to some multithreading and performance issues.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I read every article on the net that I could find regarding the LocalReport object and it appeared that no one had ever tried doing exactly what I was doing before and documented it or perhaps they just didn’t have problems…&amp;#160; Regardless, this seemed like a good reason to document it and here we are…&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So, after reading everthing I could find and trying everything I could think of I finally resorted to creating a Microsoft support ticket and eventually got in contact with a Sr. SQL Server support engineer.&amp;#160; I described the problem and even created a stand-alone project that could be run without the rest of the app &amp;amp; database that he could use to debug my solution (you can &lt;a href="http://houseoflees.com/Blog%20Attachments/Dynamic%20Subreporting.zip" target="_blank"&gt;download it here&lt;/a&gt;).&amp;#160; After a couple days of sending emails back &amp;amp; forth and him talking to his colleagues, they finally came to the conclusion that what I wanted to do just wasn’t possible without using some sort of work-around hack and he sent me a snippet of text from the LocalReport object documentation &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;p&gt;The ReportViewer control requires the definitions for all subreports before it can process a report. If the local report was loaded from the file system by specifying the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.reporting.webforms.localreport.reportpath(VS.80).aspx"&gt;ReportPath&lt;/a&gt; property, the ReportViewer control automatically loads the subreports from the file system. In cases where the local report was not loaded from the file system, these methods may be used to load subreport definitions.&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This statement turned on a light bulb.&amp;#160; Up until this point, I’d always thought the problem had something to do with LoadSubreportDefinition().&amp;#160; Now I was thinking perhaps the problem was actually in the ReportEmbeddedResource property.&amp;#160; Although this property wasn’t mentioned in this quote of the documentation I thought maybe since I was pulling the embedded resource version of the report that it was also automatically pulling the subreport definitions at that time and I had lost my opportunity to override the subreport.&amp;#160; That’s when I remembered seeing a function called LoadReportDefinition().&amp;#160; Suddenly, it made sense that maybe this function and LoadSubreportDefinition had to be used together.&amp;#160; Sure enough, by replacing ReportEmbeddedResource with a call to LoadReportDefinition() all of my problems were solved.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public virtual void &lt;/span&gt;RenderReport(&lt;span style="color: #2b91af"&gt;SsrsReportTypes &lt;/span&gt;reportType)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #2b91af"&gt;LocalReport &lt;/span&gt;report = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;LocalReport&lt;/span&gt;();&lt;br /&gt;    report.LoadReportDefinition(GetReportStream(&lt;span style="color: #a31515"&gt;&amp;quot;DynamicSubreporting.Reports.DefaultInvoice.rdlc&amp;quot;&lt;/span&gt;));&lt;br /&gt;    report.LoadSubreportDefinition(&lt;span style="color: #a31515"&gt;&amp;quot;InvoiceBody2&amp;quot;&lt;/span&gt;, GetSubreportStream());&lt;br /&gt;    ...&lt;br /&gt;    report.Render(...);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In hindsight, this seems like such a simple problem but it ended up taking a lot of time to get working and since there seems to be little information on solutions using the LocalReport object on the web, I thought that this article seemed worthwhile.&amp;#160; Hopefully, someone will gain something from it.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The complete demo project can be &lt;a href="http://houseoflees.com/Blog%20Attachments/Dynamic%20Subreporting.zip" target="_blank"&gt;downloaded here&lt;/a&gt;.&amp;#160; There’s a lot more to making this work that I didn’t discuss that you can easily decipher from the code.&amp;#160; This project was created by simply stripping out the bare minimums needed to demonstrate this one piece of functionality.&amp;#160; Nothing else about it should be considered an example of model coding practices.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The SSRS LocalReporting object can be used to create a truly dynamic reporting framework that requires a minimal amount of coding yet provides a great amount of power and functionality.&amp;#160; If you find that you are regularly making code “enhancements” in order to provide custom-specific reporting, this approach should be examined to see if it can help you make a real enhancement that provides real ROI.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-7112560606478160182?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5w9TVWo1-rltD0AOAjMD6DzdlyM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5w9TVWo1-rltD0AOAjMD6DzdlyM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5w9TVWo1-rltD0AOAjMD6DzdlyM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5w9TVWo1-rltD0AOAjMD6DzdlyM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/_E9_voci2lc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/7112560606478160182/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=7112560606478160182" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/7112560606478160182?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/7112560606478160182?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/_E9_voci2lc/dynamic-report-generation-using-ssrs.html" title="Dynamic Report Generation Using SSRS Local Reports" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2009/12/dynamic-report-generation-using-ssrs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QGSXY5cSp7ImA9WxNVF0U.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-5748565197933361753</id><published>2009-10-28T22:02:00.001-05:00</published><updated>2009-10-28T22:02:08.829-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-28T22:02:08.829-05:00</app:edited><title>U.S. Census Regions</title><content type="html">&lt;p&gt;Tonight I was working on a project for my &lt;a href="http://www.cs.mtsu.edu/~cen/4350/index.html" target="_blank"&gt;A.I. class&lt;/a&gt; I’m taking at &lt;a href="http://www.mtsu.edu" target="_blank"&gt;MTSU&lt;/a&gt; and had a need to have a table of U.S. regions that I could use to join to some other data to allow me to regionalize the data.&amp;#160; I thought that a quick &lt;a href="http://bing.com" target="_blank"&gt;Bing&lt;/a&gt; search would have revealed all that I could handle and the problem would be solved.&amp;#160; Well, it turns out that all I could find were all the maps galore but no where could it be found in tabular form.&amp;#160; So, I had to hand enter it based on &lt;a href="http://www.census.gov/geo/www/us_regdiv.pdf" target="_blank"&gt;this info&lt;/a&gt; from the &lt;a href="http://www.census.gov/" target="_blank"&gt;U.S. Census Bureau website&lt;/a&gt;.&amp;#160; I decided it might be good to post it here for others searching for it and for that time a year from now when I need it again.&amp;#160; It’s totally denormalized for easy use in Excel.&amp;#160; For database work, you’ll probably want to normalize into states, regions, &amp;amp; divisions tables.&amp;#160; Enjoy!&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td width="95"&gt;&lt;strong&gt;RegionNum&lt;/strong&gt;&lt;/td&gt;        &lt;td width="69"&gt;&lt;strong&gt;Region&lt;/strong&gt;&lt;/td&gt;        &lt;td width="102"&gt;&lt;strong&gt;DivisionNum&lt;/strong&gt;&lt;/td&gt;        &lt;td width="128"&gt;&lt;strong&gt;Division&lt;/strong&gt;&lt;/td&gt;        &lt;td width="64"&gt;&lt;strong&gt;State&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;Northeast&lt;/td&gt;        &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;New England&lt;/td&gt;        &lt;td&gt;CT&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;Northeast&lt;/td&gt;        &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;New England&lt;/td&gt;        &lt;td&gt;ME&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;Northeast&lt;/td&gt;        &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;New England&lt;/td&gt;        &lt;td&gt;MA&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;Northeast&lt;/td&gt;        &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;New England&lt;/td&gt;        &lt;td&gt;NH&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;Northeast&lt;/td&gt;        &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;New England&lt;/td&gt;        &lt;td&gt;RI&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;Northeast&lt;/td&gt;        &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;New England&lt;/td&gt;        &lt;td&gt;VT&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;Northeast&lt;/td&gt;        &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Middle Atlantic&lt;/td&gt;        &lt;td&gt;NJ&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;Northeast&lt;/td&gt;        &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Middle Atlantic&lt;/td&gt;        &lt;td&gt;NY&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;Northeast&lt;/td&gt;        &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Middle Atlantic&lt;/td&gt;        &lt;td&gt;PA&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Midwest&lt;/td&gt;        &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;East North Central&lt;/td&gt;        &lt;td&gt;WI&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Midwest&lt;/td&gt;        &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;East North Central&lt;/td&gt;        &lt;td&gt;MI&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Midwest&lt;/td&gt;        &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;East North Central&lt;/td&gt;        &lt;td&gt;IL&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Midwest&lt;/td&gt;        &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;East North Central&lt;/td&gt;        &lt;td&gt;IN&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Midwest&lt;/td&gt;        &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;East North Central&lt;/td&gt;        &lt;td&gt;OH&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Midwest&lt;/td&gt;        &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West North Central&lt;/td&gt;        &lt;td&gt;ND&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Midwest&lt;/td&gt;        &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West North Central&lt;/td&gt;        &lt;td&gt;SD&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Midwest&lt;/td&gt;        &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West North Central&lt;/td&gt;        &lt;td&gt;NE&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Midwest&lt;/td&gt;        &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West North Central&lt;/td&gt;        &lt;td&gt;KS&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Midwest&lt;/td&gt;        &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West North Central&lt;/td&gt;        &lt;td&gt;MN&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Midwest&lt;/td&gt;        &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West North Central&lt;/td&gt;        &lt;td&gt;IA&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Midwest&lt;/td&gt;        &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West North Central&lt;/td&gt;        &lt;td&gt;MO&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;5&lt;/td&gt;        &lt;td&gt;South Atlantic&lt;/td&gt;        &lt;td&gt;DE&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;5&lt;/td&gt;        &lt;td&gt;South Atlantic&lt;/td&gt;        &lt;td&gt;MD&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;5&lt;/td&gt;        &lt;td&gt;South Atlantic&lt;/td&gt;        &lt;td&gt;DC&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;5&lt;/td&gt;        &lt;td&gt;South Atlantic&lt;/td&gt;        &lt;td&gt;WV&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;5&lt;/td&gt;        &lt;td&gt;South Atlantic&lt;/td&gt;        &lt;td&gt;VA&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;5&lt;/td&gt;        &lt;td&gt;South Atlantic&lt;/td&gt;        &lt;td&gt;NC&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;5&lt;/td&gt;        &lt;td&gt;South Atlantic&lt;/td&gt;        &lt;td&gt;SC&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;5&lt;/td&gt;        &lt;td&gt;South Atlantic&lt;/td&gt;        &lt;td&gt;GA&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;5&lt;/td&gt;        &lt;td&gt;South Atlantic&lt;/td&gt;        &lt;td&gt;FL&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;6&lt;/td&gt;        &lt;td&gt;East South Central&lt;/td&gt;        &lt;td&gt;AL&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;6&lt;/td&gt;        &lt;td&gt;East South Central&lt;/td&gt;        &lt;td&gt;KY&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;6&lt;/td&gt;        &lt;td&gt;East South Central&lt;/td&gt;        &lt;td&gt;MS&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;6&lt;/td&gt;        &lt;td&gt;East South Central&lt;/td&gt;        &lt;td&gt;TN&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;7&lt;/td&gt;        &lt;td&gt;West South Central&lt;/td&gt;        &lt;td&gt;AR&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;7&lt;/td&gt;        &lt;td&gt;West South Central&lt;/td&gt;        &lt;td&gt;LA&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;7&lt;/td&gt;        &lt;td&gt;West South Central&lt;/td&gt;        &lt;td&gt;OK&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;South&lt;/td&gt;        &lt;td&gt;7&lt;/td&gt;        &lt;td&gt;West South Central&lt;/td&gt;        &lt;td&gt;TX&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West&lt;/td&gt;        &lt;td&gt;8&lt;/td&gt;        &lt;td&gt;Mountain&lt;/td&gt;        &lt;td&gt;AZ&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West&lt;/td&gt;        &lt;td&gt;8&lt;/td&gt;        &lt;td&gt;Mountain&lt;/td&gt;        &lt;td&gt;CO&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West&lt;/td&gt;        &lt;td&gt;8&lt;/td&gt;        &lt;td&gt;Mountain&lt;/td&gt;        &lt;td&gt;ID&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West&lt;/td&gt;        &lt;td&gt;8&lt;/td&gt;        &lt;td&gt;Mountain&lt;/td&gt;        &lt;td&gt;NM&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West&lt;/td&gt;        &lt;td&gt;8&lt;/td&gt;        &lt;td&gt;Mountain&lt;/td&gt;        &lt;td&gt;MT&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West&lt;/td&gt;        &lt;td&gt;8&lt;/td&gt;        &lt;td&gt;Mountain&lt;/td&gt;        &lt;td&gt;UT&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West&lt;/td&gt;        &lt;td&gt;8&lt;/td&gt;        &lt;td&gt;Mountain&lt;/td&gt;        &lt;td&gt;NV&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West&lt;/td&gt;        &lt;td&gt;8&lt;/td&gt;        &lt;td&gt;Mountain&lt;/td&gt;        &lt;td&gt;WY&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West&lt;/td&gt;        &lt;td&gt;9&lt;/td&gt;        &lt;td&gt;Pacific&lt;/td&gt;        &lt;td&gt;WA&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West&lt;/td&gt;        &lt;td&gt;9&lt;/td&gt;        &lt;td&gt;Pacific&lt;/td&gt;        &lt;td&gt;OR&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West&lt;/td&gt;        &lt;td&gt;9&lt;/td&gt;        &lt;td&gt;Pacific&lt;/td&gt;        &lt;td&gt;CA&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West&lt;/td&gt;        &lt;td&gt;9&lt;/td&gt;        &lt;td&gt;Pacific&lt;/td&gt;        &lt;td&gt;AK&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;West&lt;/td&gt;        &lt;td&gt;9&lt;/td&gt;        &lt;td&gt;Pacific&lt;/td&gt;        &lt;td&gt;HI&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-5748565197933361753?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Q5336Z7HT1vHFU120YihmT67MiA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q5336Z7HT1vHFU120YihmT67MiA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Q5336Z7HT1vHFU120YihmT67MiA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q5336Z7HT1vHFU120YihmT67MiA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/okrADUKIcJA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/5748565197933361753/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=5748565197933361753" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/5748565197933361753?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/5748565197933361753?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/okrADUKIcJA/us-census-regions.html" title="U.S. Census Regions" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.ianlee.info/2009/10/us-census-regions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04BSXozfip7ImA9WxJRF0k.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-8893150226884123588</id><published>2009-05-19T09:05:00.001-05:00</published><updated>2009-05-19T09:05:58.486-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-19T09:05:58.486-05:00</app:edited><title>Dare to Dream Different Video Has Been Submitted</title><content type="html">&lt;p&gt;Actually, it was submitted last Friday about 5 hours before the deadline…&amp;#160; I’ll make another post later that goes into the details of the project design.&amp;#160; &lt;/p&gt;  &lt;p&gt;Damnit Jim!&amp;#160; I’m a programmer not a videographer!&lt;/p&gt;  &lt;div style="padding-bottom: 0px; padding-left: 0px; width: 425px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:697e3954-f2e7-47f2-bcbb-110fdbbf7c49" class="wlWriterEditableSmartContent"&gt;&lt;div id="f7ca3457-6dc1-4c01-a7e1-062f16a0a295" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=TDRLUv-6yPk" target="_new"&gt;&lt;img src="http://lh6.ggpht.com/_GtUI5zxK6Zc/ShK8xgpxnDI/AAAAAAAAIpk/RfLFHSZtzIs/video3a93891b0e1b%5B4%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('f7ca3457-6dc1-4c01-a7e1-062f16a0a295'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/TDRLUv-6yPk&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/TDRLUv-6yPk&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-8893150226884123588?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MsSMxsyU8elur0hwKu5TdmA63Cg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MsSMxsyU8elur0hwKu5TdmA63Cg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MsSMxsyU8elur0hwKu5TdmA63Cg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MsSMxsyU8elur0hwKu5TdmA63Cg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/gInlmVmCTPk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/8893150226884123588/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=8893150226884123588" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/8893150226884123588?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/8893150226884123588?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/gInlmVmCTPk/dare-to-dream-different-video-has-been.html" title="Dare to Dream Different Video Has Been Submitted" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.ianlee.info/2009/05/dare-to-dream-different-video-has-been.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQBQXwzeip7ImA9WxVXGEU.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-6822608924851156404</id><published>2009-02-17T10:15:00.001-06:00</published><updated>2009-02-17T10:15:50.282-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-17T10:15:50.282-06:00</app:edited><title>Dare to Dream Different Contest Extended</title><content type="html">&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_GtUI5zxK6Zc/SZris9p1z5I/AAAAAAAAGjs/81N8sZau5A0/s1600-h/D2DDLogo%5B8%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="D2DDLogo" border="0" alt="D2DDLogo" align="left" src="http://lh5.ggpht.com/_GtUI5zxK6Zc/SZritZ-lqGI/AAAAAAAAGjw/QXeG05ltIfo/D2DDLogo_thumb%5B6%5D.jpg?imgmax=800" width="85" height="74" /&gt;&lt;/a&gt;I just received this email from Marden-Kane, the administrators of the contest.&amp;#160; It now looks like I have an extra month and a half… &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Dear Dream Different Contest Semi-Finalist:      &lt;br /&gt;      &lt;br /&gt;Due to unforeseen delays in the delivery of development kits to some Round 2 qualifiers, we are extending the Round 2 entry deadline to help ensure that everyone has enough time to develop their prototype devices.&amp;#160; Round 2 entries are now due no later than 11:59 p.m. PT on May 15, 2009.&amp;#160; It is estimated that Round 3 will start on June 15, 2009 and end on July 31, 2009, but the exact dates will be determined on or around the close of Round 2, based on the availability of selected Finalists to travel to a designated demonstration location.&amp;#160; &lt;br /&gt;      &lt;br /&gt;For full details, please see the updated Official Rules at &lt;a href="http://www.dreamdifferentcontest.com/rules.aspx"&gt;http://www.dreamdifferentcontest.com/rules.aspx&lt;/a&gt;.       &lt;br /&gt;On behalf of the entire Dream Different Contest team at Microsoft and Marden-Kane, we thank you for your patience and understanding.       &lt;br /&gt;      &lt;br /&gt;Thank you very much,       &lt;br /&gt;      &lt;br /&gt;RF       &lt;br /&gt;      &lt;br /&gt;Marden-Kane Inc.&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-6822608924851156404?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jFeHbC6S_bDYBmvmONm_thUuWw0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jFeHbC6S_bDYBmvmONm_thUuWw0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jFeHbC6S_bDYBmvmONm_thUuWw0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jFeHbC6S_bDYBmvmONm_thUuWw0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/uGRT-pF6KbA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/6822608924851156404/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=6822608924851156404" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/6822608924851156404?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/6822608924851156404?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/uGRT-pF6KbA/dare-to-dream-different-contest.html" title="Dare to Dream Different Contest Extended" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.ianlee.info/2009/02/dare-to-dream-different-contest.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08GRH05fSp7ImA9WxVQEkQ.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-2584293987662571301</id><published>2009-01-30T01:17:00.001-06:00</published><updated>2009-01-30T01:17:05.325-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-30T01:17:05.325-06:00</app:edited><title>The Goodies Have All Arrived!</title><content type="html">&lt;p&gt;I’m a little late in writing this since most of the hardware arrived last Friday, January 23rd, but better now than never…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_GtUI5zxK6Zc/SYKpUkrCdzI/AAAAAAAAGE8/5VR62DaXnCE/s1600-h/IMG_8988%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="IMG_8988" border="0" alt="IMG_8988" align="left" src="http://lh6.ggpht.com/_GtUI5zxK6Zc/SYKpWH5TWkI/AAAAAAAAGFA/N9emnQJpEno/IMG_8988_thumb%5B1%5D.jpg?imgmax=800" width="244" height="176" /&gt;&lt;/a&gt;From Microsoft, I received my development kit for the &lt;a href="http://dreamdifferentcontest.com/over.aspx" target="_blank"&gt;Dare to Dream Different Challenge&lt;/a&gt;.&amp;#160; Included in the kit was the Device Solutions &lt;a href="http://devicesolutions.net/Products/TahoeII.aspx" target="_blank"&gt;Tahoe-II&lt;/a&gt; board with an &lt;a href="http://www.digi.com/products/wireless/zigbee-mesh/xbee-series2-module.jsp" target="_blank"&gt;XBee&lt;/a&gt; chip, a USB XBee development board, a one page “Getting Started” pamphlet and a disk with the &lt;a href="http://devicesolutions.net/Support/Downloads.aspx" target="_blank"&gt;Tahoe-II SDK&lt;/a&gt; on it.&amp;#160; I wasn’t expecting the USB XBee development board and it was a nice surprise since I had already decided on XBee as my communications technology.&amp;#160; I already have an idea on how to utilize this board.&lt;/p&gt;  &lt;p&gt;So far, I’ve run several sample programs through the Tahoe-II and am very impressed with how responsive it is and how easy Visual Studio 2008 makes it to develop for this board.&amp;#160; The real challenge it seems at this point is going to be figuring out how to communicate using XBee.&amp;#160; Although the board has support for XBee, I’ve found that the &lt;a href="http://www.microsoft.com/netmf/default.mspx" target="_blank"&gt;.net Micro Framework&lt;/a&gt; 3.0 does not yet have this support.&amp;#160; Fortunately, &lt;a href="http://weblogs.asp.net/mschwarz/" target="_blank"&gt;Michael Schwartz&lt;/a&gt; has an &lt;a title="MSchwartz Toolkit" href="http://www.codeplex.com/mschwarztoolkit" target="_blank"&gt;open source project&lt;/a&gt; on &lt;a href="http://www.codeplex.com" target="_blank"&gt;CodePlex&lt;/a&gt; that appears to make working with XBee somewhat trivial.&amp;#160; I do wish there was more documentation and sample code available.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_GtUI5zxK6Zc/SYKpW-HLxSI/AAAAAAAAGFE/J5D5izsloVU/s1600-h/IMG_9001%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="IMG_9001" border="0" alt="IMG_9001" align="right" src="http://lh4.ggpht.com/_GtUI5zxK6Zc/SYKpXSlooMI/AAAAAAAAGFI/mvIFfdQ2qxM/IMG_9001_thumb%5B1%5D.jpg?imgmax=800" width="244" height="164" /&gt;&lt;/a&gt; Since I am also going to need a relay board, I decided on the &lt;a href="http://www.controlanything.com/Merchant2/merchant.mvc?Screen=PROD&amp;amp;Product_Code=ZUXPSR1610ProXR&amp;amp;Category_Code=CAT_RELAY16_ZIGBEE" target="_blank"&gt;ZUXPSR1610ProXR&lt;/a&gt; 16-channel 10 amp Zigbee (XBee) relay board by &lt;a href="http://www.controlanything.com" target="_blank"&gt;National Control Devices&lt;/a&gt;.&amp;#160; Since I haven’t figured out exactly what my relay requirements are going to be yet, I went ahead with this one.&amp;#160; It’ll probably have more relays than I need and will certainly handle more current, but I thought that might come in handy after the competition when I decide to use it for other projects.&amp;#160; There is no documentation that came with this board.&amp;#160; However, I presume that switching the relays will basically be the same was communication with the GPIO ports on the Tahoe-II.&amp;#160; I ordered the board with an external antenna since my plan is to eventually house this board in a project box.&amp;#160; &lt;/p&gt;  &lt;p&gt;The board operates on a 12V DC power supply which happens to be a big bonus for me since I designed the circuitry for the LEDs on the mock yard to be powered by 12V DC.&amp;#160; The board has a set of terminals where I can run the 12V power off of it.&amp;#160; This is great since it means that I will not have to use two power supplies (one for the board and one for the mock yard).&amp;#160; Something isn’t quite the same as that of the power supply I had been using to build the mock yard with and I’ve discovered that my green LEDs do not shine very brightly when powered from the board.&amp;#160; I’ll have to go back and replace the resistors on the green zone circuit to some with lower resistance.&amp;#160; I’ll do this later on after I have the software working.&amp;#160; As long as the circuit is working well enough for me to tell that the relays are working, I’ll be fine with it for now.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_GtUI5zxK6Zc/SYKpYdFrAvI/AAAAAAAAGFM/wO5FqQ_yuTk/s1600-h/IMG_9008%5B13%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="IMG_9008" border="0" alt="IMG_9008" align="left" src="http://lh4.ggpht.com/_GtUI5zxK6Zc/SYKpcJMBzUI/AAAAAAAAGFQ/Ft6khabL_Co/IMG_9008_thumb%5B11%5D.jpg?imgmax=800" width="244" height="164" /&gt;&lt;/a&gt; Speaking of the mock yard…&amp;#160; I put the finishing touches on it earlier this week.&amp;#160; I used some model train supplies I picked up at Hobby Lobby to decorate the foam board with “grass” and a gravel driveway.&amp;#160; Unfortunately, the application of watered down glue used to adhere the “grass” also has caused my foam board to bow up.&amp;#160; This is very frustrating.&amp;#160; I’m thinking that if I spray some water to the bottom side of the board that it may equalize out the shrinkage and cause it to straighten out.&amp;#160; I will also be replacing the bottom piece of foam board with a piece of 1/4” acrylic Plexiglas.&amp;#160; This will allow the circuitry to be easily viewed.&amp;#160; I’ll probably also screw down the sides of the foam board to the Plexiglas to force it to lay flat.&amp;#160; Again, these are all projects that will have to wait until later when everything is functional.&amp;#160; Like the old bird house I found in the garage? :)&amp;#160; &lt;/p&gt;  &lt;p&gt;Also, notice that I ran all of the lead wires for the LED circuits to an RJ45 plug mounted on the side of the foam board.&amp;#160; This will make it much easier to separate the parts for transportation when I have to go to Redmond to demonstrate the project for Round 3 ;)&amp;#160; Since I only need three pairs of wires for my three zones and the RJ45 port allows for four pairs, I went ahead and ran a pair of wires under the house that I can use to do some yet undetermined very cool thing with on the house.&amp;#160; Any ideas?&lt;/p&gt;  &lt;p&gt;Well, now the real fun has begun.&amp;#160; The task of learning the .net micro Framework and XBee.&amp;#160; Since I don’t really plan to disclose all the details of my development from here out until after the competition is over, I’m not really sure how often updates will continue to be posted here on the blog.&amp;#160; I’m sure there will be some screen shots.&amp;#160; So, stay tuned.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-2584293987662571301?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/H1_q_tl0GCq2WXusXJPVFn3aawU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H1_q_tl0GCq2WXusXJPVFn3aawU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/H1_q_tl0GCq2WXusXJPVFn3aawU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H1_q_tl0GCq2WXusXJPVFn3aawU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/6mkX4KBzE3A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/2584293987662571301/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=2584293987662571301" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/2584293987662571301?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/2584293987662571301?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/6mkX4KBzE3A/goodies-have-all-arrived.html" title="The Goodies Have All Arrived!" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2009/01/goodies-have-all-arrived.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAFQ3kzeSp7ImA9WxVRFE4.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-4782423365792161187</id><published>2009-01-20T01:48:00.001-06:00</published><updated>2009-01-20T01:48:32.781-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-20T01:48:32.781-06:00</app:edited><title>Yellow Zone is alive!</title><content type="html">&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_GtUI5zxK6Zc/SXWBo-RF1zI/AAAAAAAAF_E/0_2yrbN77ew/s1600-h/IMG_8939%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="IMG_8939" border="0" alt="IMG_8939" align="right" src="http://lh4.ggpht.com/_GtUI5zxK6Zc/SXWB0L-CP-I/AAAAAAAAF_I/BdGGZiFofoM/IMG_8939_thumb%5B1%5D.jpg?imgmax=800" width="244" height="164" /&gt;&lt;/a&gt;Well, I think you get what’s going on here by now.&amp;#160; So, this is the last of the LEDs that have to be wired for the mock yard.&amp;#160; One thing you may notice different about this zone is the little zone within it.&amp;#160; This is going to be a garden area.&amp;#160; In case you don’t know about invisible dog fences, it is possible to create zones like this to keep dogs out of your garden, porch, etc.&amp;#160; This little zone will always be activated when the yellow zone is activated.&amp;#160; The &lt;a href="http://devicesolutions.net/Products/TahoeII.aspx" target="_blank"&gt;Tahoe-II&lt;/a&gt; still hasn’t arrived...&amp;#160; Tomorrow, I’ll start decorating the mock yard and try to make it look like a little more than a piece of foam board with lights.&amp;#160; Must now get some sleep…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-4782423365792161187?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rKdAXF6Dts6TUvCeDTkwJ2BBQtU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rKdAXF6Dts6TUvCeDTkwJ2BBQtU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rKdAXF6Dts6TUvCeDTkwJ2BBQtU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rKdAXF6Dts6TUvCeDTkwJ2BBQtU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/aY98w5Pd4E8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/4782423365792161187/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=4782423365792161187" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/4782423365792161187?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/4782423365792161187?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/aY98w5Pd4E8/yellow-zone-is-alive.html" title="Yellow Zone is alive!" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2009/01/yellow-zone-is-alive.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQNR347eip7ImA9WxVREEU.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-9204332156364342721</id><published>2009-01-16T00:13:00.001-06:00</published><updated>2009-01-16T00:13:16.002-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-16T00:13:16.002-06:00</app:edited><title>The Green Zone is Alive</title><content type="html">&lt;p&gt;The electronic parts I ordered for the &lt;a href="http://lh6.ggpht.com/_GtUI5zxK6Zc/SXAleS7g80I/AAAAAAAAFzo/vp9cdjKarV8/s1600-h/IMG_8846%5B6%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="IMG_8846" border="0" alt="IMG_8846" align="right" src="http://lh4.ggpht.com/_GtUI5zxK6Zc/SXAle5REdjI/AAAAAAAAFzs/RHowusgEjRs/IMG_8846_thumb%5B4%5D.jpg?imgmax=800" width="244" height="164" /&gt;&lt;/a&gt;model yard arrived early, so it was time to start soldering again.&amp;#160; Tonight I got all of the green LEDs in place and wired up.&amp;#160; This is a much more tedious task than you would think from looking at the end results.&amp;#160; I also finished up the last section of the red zone.&lt;/p&gt;  &lt;p&gt;I’m taking a little time off and heading to &lt;a href="http://www.friendsofscsra.org/parkmap.htm" target="_blank"&gt;Savage Gulf&lt;/a&gt; for three days of backpacking with Jr. this weekend.&amp;#160; So, I guess it’ll be Monday night before I can finish up the yellow zone.&amp;#160; If we don’t freeze to death (my thermometer says its 8.8° F right now…) then there should be a trip report here after I get back.&lt;/p&gt;  &lt;p&gt;With any luck maybe the &lt;a href="http://devicesolutions.net/Products/TahoeII.aspx" target="_blank"&gt;Tahoe-II&lt;/a&gt; will arrive early next week.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-9204332156364342721?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5WlDZQLOV9iBJCAbrbf2lUY7pNY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5WlDZQLOV9iBJCAbrbf2lUY7pNY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5WlDZQLOV9iBJCAbrbf2lUY7pNY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5WlDZQLOV9iBJCAbrbf2lUY7pNY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/pUZB170iy0Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/9204332156364342721/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=9204332156364342721" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/9204332156364342721?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/9204332156364342721?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/pUZB170iy0Q/green-zone-is-alive.html" title="The Green Zone is Alive" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2009/01/green-zone-is-alive.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEICQH44fip7ImA9WxVREE8.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-8133134253122218588</id><published>2009-01-15T06:25:00.001-06:00</published><updated>2009-01-15T06:29:21.036-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-15T06:29:21.036-06:00</app:edited><title>Red Zone is complete…almost.</title><content type="html">&lt;p&gt;For the &lt;a href="http://dreamdifferentcontest.com/over.aspx" target="_blank"&gt;Dare to Dream Different Challenge&lt;/a&gt;, I have decided to begin by building a mock yard that will have three different “zones” that will be controlled by the &lt;a href="http://devicesolutions.net/Products/TahoeII.aspx" target="_blank"&gt;Tahoe-II&lt;/a&gt; board and my &lt;a href="http://www.microsoft.com/netmf/default.mspx" target="_blank"&gt;.net Micro Framework&lt;/a&gt; software.&amp;#160; There will be three zones in this yard: red, green, and yellow.&amp;#160; Each zone will be a series of LEDs that will light when that zone is activated by the software.&amp;#160; Since I already had a supply of red LEDs, I decided to start there while I wait on all the other parts to arrive.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/_GtUI5zxK6Zc/SW8rOsVs-9I/AAAAAAAAFzY/mlfyOI0Oc_I/s1600-h/IMG_8805%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Red Zone is Alive!" border="0" alt="Red Zone is Alive!" src="http://lh4.ggpht.com/_GtUI5zxK6Zc/SW8rPGVUIKI/AAAAAAAAFzc/CbUILug_eC8/IMG_8805_thumb%5B1%5D.jpg?imgmax=800" width="432" height="296" /&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font size="1"&gt;&lt;strong&gt;The Red Zone is alive!&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;You may note that the red zone isn’t completely alive…&amp;#160; I was one LED short, so the last section isn’t lit yet.&amp;#160; This will be remedied as soon as the rest of the parts arrive.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_GtUI5zxK6Zc/SW8rPrzQHPI/AAAAAAAAFzg/YeS_AIx37NY/s1600-h/IMG_8809%5B6%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="IMG_8809" border="0" alt="IMG_8809" align="right" src="http://lh4.ggpht.com/_GtUI5zxK6Zc/SW8rQLF81TI/AAAAAAAAFzk/FUc9sCpdF_Q/IMG_8809_thumb%5B4%5D.jpg?imgmax=800" width="244" height="164" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The yard is constructed of a piece of foam board that has been cut so that it folds in half.&amp;#160; The circuitry is sandwiched between the two pieces for its protection.&amp;#160; Each zone will be a separate circuit and they will all terminate at an RJ45 jack for easy connection to the relay board and &lt;a href="http://devicesolutions.net/Products/TahoeII.aspx" target="_blank"&gt;Tahoe-II&lt;/a&gt;.&amp;#160; Everything is powered by a single 12V power supply recycled from an old Linksys router.&lt;/p&gt;  &lt;p&gt;Next, I’ll finish up the other two circuits and maybe add a little decoration to polish it off.&amp;#160; Hopefully, I can get all this done before the &lt;a href="http://devicesolutions.net/Products/TahoeII.aspx" target="_blank"&gt;Tahoe-II&lt;/a&gt; arrives and I’ll be able to then focus entirely on the real work at that point.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_GtUI5zxK6Zc/SW8rPrzQHPI/AAAAAAAAFzg/YeS_AIx37NY/s1600-h/IMG_8809%5B6%5D.jpg"&gt;&amp;#160;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-8133134253122218588?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3qgMiGTx9GBntacYFoSRkTzgevk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3qgMiGTx9GBntacYFoSRkTzgevk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3qgMiGTx9GBntacYFoSRkTzgevk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3qgMiGTx9GBntacYFoSRkTzgevk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/qGIHTrYgijM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/8133134253122218588/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=8133134253122218588" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/8133134253122218588?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/8133134253122218588?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/qGIHTrYgijM/red-zone-is-completealmost.html" title="Red Zone is complete…almost." /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2009/01/red-zone-is-completealmost.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4HRnk9cCp7ImA9WxVSGUg.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-4621691823021208281</id><published>2009-01-13T14:49:00.001-06:00</published><updated>2009-01-14T12:48:57.768-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-14T12:48:57.768-06:00</app:edited><title>I’m a Dare to Dream Different Challenge Semi-Finalist!</title><content type="html">&lt;p&gt;&lt;a href="http://www.dreamdifferentcontest.com/" target="_blank"&gt;&lt;img title="D2DDLogo" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="207" alt="D2DDLogo" src="http://lh6.ggpht.com/_GtUI5zxK6Zc/SW2LOz29tlI/AAAAAAAAFt0/fpwm-bP0Zv0/D2DDLogo_thumb%5B8%5D.jpg?imgmax=800" width="240" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;At &lt;a href="http://microsoftpdc.com/" target="_blank"&gt;Microsoft PDC08&lt;/a&gt; this past November I stopped and talked to the guys in the &lt;a href="http://www.microsoft.com/netmf/default.mspx" target="_blank"&gt;.net Micro Framework&lt;/a&gt; booth (like you do with every other booth at those conferences).&amp;#160; Since I’ve never really worked at a company that built devices that would need this type of technology, this was just one of those “yea that’s neat but I’ll never use it” bits of info.&amp;#160; The one thing I did carry away from our conversation was that they were hosting a contest and were giving away some really neat pieces of &lt;a href="http://devicesolutions.net/Products/TahoeII.aspx" target="_blank"&gt;hardware&lt;/a&gt; to the semi-finalist and even bigger prizes to the finalist.&amp;#160; So, I took one of their flyers and a week or so later I sent in an idea…&lt;/p&gt;  &lt;p&gt;The rules for entry were simple.&amp;#160; Come up with an idea of how you would use the .net Micro Framework to make a useful invention and write it up in 250 words or less.&amp;#160; Not much work there.&amp;#160; I had an idea and spent about 20 minutes submitting my entry.&amp;#160; Then I basically forgot about the contest thinking that my idea was probably not sophisticated enough to have a chance.&lt;/p&gt;  &lt;p&gt;I was wrong.&amp;#160; On January 8th, I received this email...&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/_GtUI5zxK6Zc/SW4oTj1dLgI/AAAAAAAAFt4/TpQKi0qr0Xc/s1600-h/Semi-finalist%20notice%20email%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="191" alt="Semi-finalist notice email" src="http://lh5.ggpht.com/_GtUI5zxK6Zc/SW4oUJo2lcI/AAAAAAAAFt8/8_tS7wgaXIA/Semi-finalist%20notice%20email_thumb%5B2%5D.jpg?imgmax=800" width="260" border="0" /&gt;&lt;/a&gt;&lt;font size="1"&gt;&lt;strong&gt;(click to enlarge)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="left"&gt;and my name on the contest &lt;a href="http://dreamdifferentcontest.com/round1_winners.aspx" target="_blank"&gt;website&lt;/a&gt;…&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/_GtUI5zxK6Zc/SW4wSETvKNI/AAAAAAAAFuM/drePG5Jo-sU/s1600-h/Semi-finalists%20List%5B4%5D.jpg" target="_blank"&gt;&lt;img title="Semi-finalists List" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="244" alt="Semi-finalists List" src="http://lh3.ggpht.com/_GtUI5zxK6Zc/SW4oUcAz99I/AAAAAAAAFuQ/IVU3RL3CWyQ/Semi-finalists%20List_thumb%5B1%5D.jpg?imgmax=800" width="142" border="0" /&gt;&lt;/a&gt;&lt;font size="1"&gt;&lt;strong&gt;(look for the hick from Shelbyville ;)&lt;/strong&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;So, what was my idea?&amp;#160; Well, at the time this was all happening I was in the process of installing an &lt;em&gt;&lt;a href="http://www.innotek.net/store/product_info.php?cPath=14&amp;amp;products_id=10&amp;amp;osCsid=v9ma4fpotg23n3d6h9m63dto25" target="_blank"&gt;invisible dog fence&lt;/a&gt;&lt;/em&gt; at our house.&amp;#160; I was running the wire so that I could section off different parts of the yard where I might want the dog to run.&amp;#160; He could be isolated to just the area where his dog house was at if we were having a party outside.&amp;#160; He could be allowed to roam the whole backyard, but not the driveway in case visitors were coming and didn’t want to be greeted at their car door by &lt;em&gt;Zeus&lt;/em&gt; (yes, he’s as mighty as his name).&amp;#160; Or he could just be allowed to roam the whole yard.&amp;#160; You get the picture.&amp;#160; &lt;/p&gt;  &lt;p&gt;To make all this work was either going to require a bunch of manual re-wiring every time I wanted to change the zones where he could run or I was going to have to configure an array of switches which would still take considerable knowledge of the system in order to operate.&lt;/p&gt;  &lt;p&gt;My idea was to create a touch screen interface that would allow a user to simply touch an aerial photo of their yard to configure which zones the dog would be allowed to roam.&amp;#160; Here’s my actual submission…&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;I would build a touch control system for invisible dog fences. It would show an aerial photo of the owner's property and allow them to touch areas of the yard where the fence should be activated/deactivated. This could possibly be combined with outdoor cameras to allow the owner to control the device over the internet based on where the dogs are currently located.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;Invisible fence systems are becoming very popular. However, most are setup as an all or nothing solution. To isolate particular parts of the yard currently requires manual re-wiring or complicated switching systems. This would be a very intuitive tool for controlling these systems.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;I'm a professional Windows developer and electronics hobbyist. I am also an invisible dog fence user. I've been planning to build a control system similar to the one described using LEDs and switches, but after meeting with Microsoft at PDC2008 and discussing the possibilities of the .NET micro framework, I'm now excited about the possibilities of this approach. However, I'm unable to justify the cost of the hardware on my own. I had three years of electrical engineering in college before deciding to major in computer science. I can make this work.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;and the attached aerial photo of my yard that resembles what the touch screen would look like…&lt;/p&gt;  &lt;p&gt;&lt;img title="dotnetMicroChallenge" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="244" alt="dotnetMicroChallenge" src="http://lh6.ggpht.com/_GtUI5zxK6Zc/SW4oU2TMwRI/AAAAAAAAFuE/Mq6Il3xvwdk/dotnetMicroChallenge%5B3%5D.jpg?imgmax=800" width="204" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;So, now that I’m one of the 50 semi-finalist now what?&amp;#160; Well, my prize for making it this far is that Microsoft will be sending me a &lt;a href="http://devicesolutions.net/Products/TahoeII.aspx" target="_blank"&gt;Tahoe-II development board&lt;/a&gt; and software that I can use to build a working prototype.&amp;#160; The end product of this stage will be a video that I must produce that will demonstrate what I have developed.&amp;#160; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Tahoe-II Board" href="http://devicesolutions.net/Products/TahoeII.aspx" target="_blank"&gt;&lt;img title="TahoeII-Demo" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="164" alt="TahoeII-Demo" src="http://lh6.ggpht.com/_GtUI5zxK6Zc/SW4vntkdCII/AAAAAAAAFuY/GryYn-jCRec/TahoeII-Demo%5B8%5D.jpg?imgmax=800" width="240" border="0" /&gt;&lt;/a&gt;&lt;font size="1"&gt;&lt;strong&gt;The Device Solutions Tahoe-II Board&lt;/strong&gt;&lt;/font&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;If my video is selected as one of the five finalist then its off to Microsoft I go to give a live demonstration.&amp;#160; There really hasn’t been any word yet about what the prize is other than there are “$101,000 in prizes and numerous other benefits up for grabs”.&amp;#160; Of course, this contest is more about the geekdom fame than it is about the prizes.&amp;#160; It would look really nice on a resume’.&amp;#160; Who knows, maybe one of the invisible fence manufacturers will take an interest.&lt;/p&gt;  &lt;p&gt;While I’m waiting for the board and development kit to arrive, I’ll be working on my model yard (complete with a working LED fence.&amp;#160; You can’t see an &lt;em&gt;invisible fence&lt;/em&gt; on the video…) and studying up on the &lt;a href="http://www.microsoft.com/netmf/default.mspx" target="_blank"&gt;.net Micro Framework&lt;/a&gt;.&amp;#160; More to come on that as I progress in the days to come.&amp;#160; I only have until March 31st, 2009 to turn in my video so there’s going to be a lot of late nights in the next few weeks…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-4621691823021208281?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/G3A00gesNdb5WIkErsb4HQacveE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G3A00gesNdb5WIkErsb4HQacveE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/G3A00gesNdb5WIkErsb4HQacveE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G3A00gesNdb5WIkErsb4HQacveE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/GjDZPoa392U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/4621691823021208281/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=4621691823021208281" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/4621691823021208281?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/4621691823021208281?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/GjDZPoa392U/im-dare-to-dream-different-challenge.html" title="I’m a Dare to Dream Different Challenge Semi-Finalist!" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2009/01/im-dare-to-dream-different-challenge.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IBR3s8cCp7ImA9WxRTFEk.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-6175414274982323252</id><published>2008-09-03T08:45:00.001-05:00</published><updated>2008-09-03T08:45:56.578-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-03T08:45:56.578-05:00</app:edited><title>Straight Talk</title><content type="html">&lt;p&gt;In case you missed it at during the second night of the 2008 Republican National Convention.&amp;nbsp; Fred tells it like no one else can.&amp;nbsp; Spoken like a true independent minded Tennessee Volunteer!&lt;/p&gt; &lt;p&gt;&lt;u&gt;Part 1&lt;/u&gt;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:e3b9a1a7-6a45-4da9-92ce-b04996b2bbf4" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;div&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CmGGSp7-QMQ"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/CmGGSp7-QMQ" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;u&gt;Part 2&lt;/u&gt;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:64116020-4b07-4ec4-a387-2bc04da302a7" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;div&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/9EGrjlMa2es"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/9EGrjlMa2es" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;u&gt;Part 3&lt;/u&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:0b87bf90-78e7-47fc-8abc-9c01f4d6e9a2" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;div&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/nu6aPuVT0uc"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/nu6aPuVT0uc" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-6175414274982323252?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/embH7HdczHZBntErG5Gl1J8JqpM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/embH7HdczHZBntErG5Gl1J8JqpM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/embH7HdczHZBntErG5Gl1J8JqpM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/embH7HdczHZBntErG5Gl1J8JqpM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/VmiArZb75cE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/6175414274982323252/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=6175414274982323252" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/6175414274982323252?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/6175414274982323252?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/VmiArZb75cE/straight-talk.html" title="Straight Talk" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2008/09/straight-talk.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4NQn47eCp7ImA9WxZTEkQ.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-516053646655977588</id><published>2008-01-14T01:08:00.001-06:00</published><updated>2008-01-14T01:16:33.000-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-14T01:16:33.000-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Home Server" /><title>Windows Home Server</title><content type="html">&lt;p&gt;&lt;a href="http://lh4.google.com/ianlee74/R4sMTrbyEQI/AAAAAAAAA-o/DQDNlaEB1T8/WHS%5B4%5D?imgmax=800"&gt;&lt;img height="91" alt="WHS" src="http://lh6.google.com/ianlee74/R4sMULbyERI/AAAAAAAAA-w/o2Bnqp69ZlQ/WHS_thumb%5B2%5D?imgmax=800" width="122" align="left"&gt;&lt;/a&gt; This week I've been at home taking care of my wife after she had a C-section delivery of our new daughter.&amp;nbsp; In my free time (when she and the kids are sleeping), I've had some time to work on building a &lt;a href="http://www.microsoft.com/windows/products/winfamily/windowshomeserver/default.mspx" target="_blank"&gt;Windows Home Server&lt;/a&gt; machine.&lt;/p&gt; &lt;p&gt;I had an old Dell Dimension 2100 laying around that a friend gave me when he upgraded that I decided would be sufficient to at least test an install.&amp;nbsp; Microsoft recommends you use a machine that has at least a P3 1Ghz processor with 512MB of RAM.&amp;nbsp; My test machine has a 1.1Ghz P4 processor with 512Ghz of RAM so in theory it should work.&lt;/p&gt; &lt;p&gt;Since the computer only had a 40GB hard drive, I decided that I'd go ahead and invest in a 500GB SATA hard drive since I anticipated needing lots of hard drive space.&amp;nbsp; This is where my first problem was encountered.&amp;nbsp; The old Dell doesn't have SATA ports, so I invested about $15 in a &lt;a href="http://www.amazon.com/VT6421A-3-Port-SATA-Raid-Controller/dp/B000YMJ6ZE" target="_blank"&gt;VIA VT6421A 3-port SATA RAID controller&lt;/a&gt; since I've made a personal vow not to invest in any other IDE hard drives.&lt;/p&gt; &lt;p&gt;Then I ran into my next problem.&amp;nbsp; The installation disks for WHS come on DVDs and the old Dell only had a CD-ROM drive.&amp;nbsp; So, I temporarily pulled a DVD-ROM drive out of one of my other machines and popped it in the test machine and started the installation.&lt;/p&gt; &lt;p&gt;The install went smooth.&amp;nbsp; I told it to install to the new drive and it went through its motions for 30 minutes or so while I went and had lunch.&amp;nbsp; Then I came back and the install wanted me to reboot to continue.&amp;nbsp; I did and then found my next problem.&amp;nbsp; The old machine would not boot off the drive on the add-on SATA controller.&amp;nbsp; This was a real bummer since I really didn't want to have to use any IDE drives, but not a big issue.&amp;nbsp; My main machine had an extra 250GB drive in it that I wasn't using for anything yet, so I pulled it out and plugged it into the on-board IDE controller and re-installed WHS.&amp;nbsp; I then added the 500GB drive and expanded the total capacity of the server to about 700GB (who knows where that extra 50GB went...).&lt;/p&gt; &lt;p&gt;I rebooted and the install finished successfully.&amp;nbsp; It's alive!&amp;nbsp; So, then I spent a few minutes exploring the WHS Console which is the only obvious difference between WHS and Windows Server 2003.&lt;/p&gt; &lt;p&gt;Then I installed the Connector software on three machines (a Windows MCE 2005 machine, a Windows Vista Ultimate machine, and a Windows XP Pro laptop).&amp;nbsp; The install sends you through a wizard that lets you configure backups for the machine you are adding to WHS.&amp;nbsp; On the MCE 2005 machine, I ran into a problem.&amp;nbsp; When WHS was examining the machine looking for drives to backup, it came back and reported:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;“This computer cannot be backed up automatically because it does not have any hard-drive volumes that are configured with the NTFS file system”.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;After spending a few hours researching the problem, I finally found a solution that fixed the problem.&amp;nbsp; It turns out that some third-party software can modify a registry key that WHS uses and the solution is to set this key back to the value that Windows originally sets it to.&amp;nbsp; The key is:&lt;/p&gt; &lt;p&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}\UpperFilters&lt;/p&gt; &lt;p&gt;I set the value to "PartMgr" and rebooted and then the backups were configured without problems.&lt;/p&gt; &lt;p&gt;The initial backups ran fine that night and I was quite impressed by their efficiency.&amp;nbsp; One machine that had 233GB of used hard drive space backed up to 83GB on the WHS server.&lt;/p&gt; &lt;p&gt;One of the really exciting features of WHS is that it allows you to remotely access all of the computers in your home network from anywhere in the world.&amp;nbsp; No static IPs are required for any of the machines.&amp;nbsp; From the WHS console, you setup a name for your network and it gives you an address such as &lt;a href="https://thelees.homeserver.com"&gt;https://thelees.homeserver.com&lt;/a&gt; which takes care of monitoring your modems public IP address and sets up a public web site where you can configure WHS and access your shared files.&amp;nbsp; All of this is controlled through user accounts.&lt;/p&gt; &lt;p&gt;This is where I ran into my next problem.&amp;nbsp; I use a Linksys firewall router to block all incoming traffic from reaching my computers.&amp;nbsp; After some research, I learned that I needed to setup port forwarding in my router to my WHS server for ports 80, 443, 3389, and 4125.&amp;nbsp; The last two are specifically needed for Remote Access while the first two are used to connect to the WHS web site.&lt;/p&gt; &lt;p&gt;Now that I have all the basics working, I'm going to "play" with it for a few weeks and check out some add-ins that are available.&amp;nbsp; I'll write more on individual features as necessary.&amp;nbsp; Also, I'm going to start researching some better cases that are more suited to lots of hard drive expansion and a motherboard that supports booting from SATA.&lt;/p&gt; &lt;p&gt;So far, the hardware seems to be plenty powerful to make WHS run like a champ.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-516053646655977588?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oATCMdmxACoHOl1namowvJTET-g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oATCMdmxACoHOl1namowvJTET-g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oATCMdmxACoHOl1namowvJTET-g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oATCMdmxACoHOl1namowvJTET-g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/FJwkaXRhQgs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/516053646655977588/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=516053646655977588" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/516053646655977588?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/516053646655977588?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/FJwkaXRhQgs/windows-home-server.html" title="Windows Home Server" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.ianlee.info/2008/01/windows-home-server.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQ3w6cSp7ImA9WB9aFU0.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-7747811002683428517</id><published>2008-01-04T22:22:00.001-06:00</published><updated>2008-01-04T22:23:52.219-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-04T22:23:52.219-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="solutions" /><title>Special Delivery</title><content type="html">&lt;p&gt;Last night as we were getting things ready to head to the hospital in the morning for the delivery of Elizabeth, I decided that I had to find a better way to let everyone know the details of our special delivery.&amp;nbsp; &lt;/p&gt; &lt;p&gt;For the delivery of the first two boys we did things the "old fashioned" way and just called people.&amp;nbsp; This is very time consuming and not really what I wanted to be spending my day doing.&amp;nbsp; Taking care of my girls being the activity of choice.&amp;nbsp; This is a relatively inefficient means of getting the job done, plus I wanted to be able to send real-time photos out to our family and friends.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.google.com/ianlee74/R38F-rbyECI/AAAAAAAAA68/H5gq20qtBL0/SpecialDelivery%5B8%5D?imgmax=800"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="484" alt="SpecialDelivery" src="http://lh3.google.com/ianlee74/R38F_bbyEDI/AAAAAAAAA7E/_TjE7K16g1k/SpecialDelivery_thumb%5B4%5D?imgmax=800" width="234" align="left" border="0"&gt;&lt;/a&gt;So, I thought about this a little and decided that ultimately the easiest way to get this done had to involve using a camera phone to send TXT &amp;amp; PIX messages.&amp;nbsp; But, I couldn't just add a bunch of recipients to the message every time I wanted to update people because the camera phone I planned to use would only let me add four recipients and I wanted to get the message out to almost 200 email addresses.&lt;/p&gt; &lt;p&gt;My first proposed solution was to just setup a distribution list (group) called "Baby List" in Gmail with all the intended recipients.&amp;nbsp;&amp;nbsp; Then I would setup a forwarding rule that would forward any messages that arrived that were sent from the camera phone to my Baby List group.&amp;nbsp; This is where I ran into the first snag.&amp;nbsp; It turns out that Gmail will not let you setup a forwarding rule that forwards to a group.&amp;nbsp; In fact, it will not let you forward to more than one person for a single rule.&amp;nbsp; I could have setup 200 different rules, but that would have taken longer than just making the calls...&lt;/p&gt; &lt;p&gt;Then I had another idea...&amp;nbsp; I could use Microsoft Outlook to check my Gmail account using POP3 and setup the rule there.&amp;nbsp; Outlook will not let you forward to a distribution list, but it will let you attach an almost infinite list of email addresses to the rule as long as they are separated by a semicolon.&amp;nbsp; So, after doing some data massaging to get a semicolon delimited list of the addresses I had stored in Gmail into my Outlook rule, it was time for a test.&lt;/p&gt; &lt;p&gt;For the first test, I set the rule to just forward back to my Gmail email address.&amp;nbsp; This way if something didn't work, 200 people didn't know about it ;)&amp;nbsp; I took a picture with the camera phone and sent it via a PIX message to my Gmail address.&amp;nbsp; MS Outlook, which was running on my home computer, then picked up the message from Gmail and processed the rule which automatically forwarded it back to my Gmail address.&amp;nbsp; Success!&lt;/p&gt; &lt;p&gt;Then it was time for the real test...&amp;nbsp; I put the 200 or so email addresses onto the rule and repeated the test.&amp;nbsp; I had been concerned about having so many email addresses in one message and it turned out that my concerns were warranted.&amp;nbsp; The first 50 or so people received the message without any problems and then I got a message back stating that there were "too many recipients".&amp;nbsp; &lt;/p&gt; &lt;p&gt;Well, the solution to this was easy.&amp;nbsp; I split the mailing list up into three equal size lists and created three identical forwarding rules but with different distribution lists for each rule.&amp;nbsp; Problem solved.&amp;nbsp; Time to get some sleep before the big day.&lt;/p&gt; &lt;p&gt;This solution worked like a charm.&amp;nbsp; I was able to snap photos of Elizabeth during delivery and instantly forward them out to all my friends and family without ever dialing a single phone number (assuming they were checking their email).&lt;/p&gt; &lt;p&gt;Had I decided to start on a solution to this problem farther in advance, I probably would have written a more robust solution using my PocketPC phone.&amp;nbsp; But, given the short time constraint that I had to solve this problem I think it worked out pretty good.&amp;nbsp; If you ever need to solve a similar situation where you need to keep a long list of people notified of an activity in near real-time, give it a try.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-7747811002683428517?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4Nahor9UokapfqXjynWPXDiv97s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4Nahor9UokapfqXjynWPXDiv97s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4Nahor9UokapfqXjynWPXDiv97s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4Nahor9UokapfqXjynWPXDiv97s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/PrT9Lu1sbMU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/7747811002683428517/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=7747811002683428517" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/7747811002683428517?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/7747811002683428517?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/PrT9Lu1sbMU/special-delivery.html" title="Special Delivery" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2008/01/special-delivery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EESHw5fSp7ImA9WB9aFU0.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-7432929704576998877</id><published>2008-01-04T20:50:00.001-06:00</published><updated>2008-01-04T20:53:29.225-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-04T20:53:29.225-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="family" /><title>Welcome Elizabeth Rose Lee</title><content type="html">&lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:887EC618-8FBE-DEAD-BEEF-2339AF2EC721:5cb93d35-e3c1-47aa-9c94-3b072006170c" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a href="http://lh4.google.com/ianlee74/R37wh7byD9I/AAAAAAAAA6U/zYpTjfkDw4s/ElizabethRoseAndMom-8x6?imgmax=800" title="Elizabeth &amp; Mom" rel="thumbnail"&gt;&lt;img border="0" src="http://lh5.google.com/ianlee74/R37xKLbyEBI/AAAAAAAAA60/Zis7lBrDSQc/ElizabethRoseAndMom%5B22%5D?imgmax=800" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;Today, I saw the third miracle of my life (the first being the birth of Ian, Jr. and the second being the birth of Zander).&amp;nbsp; We welcomed into the world Elizabeth this morning at 9:41 AM after a Cesarian delivery at the &lt;a href="http://www.mtmc.org/" target="_blank"&gt;Middle Tennessee Medical Center&lt;/a&gt; in Murfreesboro, TN.&amp;nbsp; She came out proving that she was her momma's girl.&amp;nbsp; In other words, she came out screaming ;)&amp;nbsp; She weighs a whopping 6lb 10oz and is 19 1/4" short.&amp;nbsp; &lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:887EC618-8FBE-DEAD-BEEF-2339AF2EC721:33a7ac06-48b0-4929-aa61-b70d1a306d8c" style="padding-right: 0px; display: inline; padding-left: 0px; float: right; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a href="http://lh5.google.com/ianlee74/R37wjLbyD_I/AAAAAAAAA6k/PnHLDbZVldk/IMG_1488-1-8x6?imgmax=800" title="" rel="thumbnail"&gt;&lt;img border="0" src="http://lh3.google.com/ianlee74/R37wjrbyEAI/AAAAAAAAA6s/1GRaIbMgrcc/IMG_1488-1%5B1%5D?imgmax=800" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;The boys took right to her.&amp;nbsp; Jr. can't keep his hands off her and Zander offered up his pacifier.&amp;nbsp; The most gracious of gifts a big brother can offer.&amp;nbsp; It appears that I'll have plenty of help fighting the boys off in a few years.&lt;/p&gt; &lt;p&gt;Well, its time to go feed the little one and get a little rest.&lt;/p&gt; &lt;p&gt;Oh, yea, happy 33rd anniversary Pam &amp;amp; Kevin (Rebecca's parents)!&lt;/p&gt; &lt;p&gt;Check out more of Elizabeth's birthday pictures &lt;a href="http://picasaweb.google.com/ianlee74/ElizabethRoseLee" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-7432929704576998877?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4nCtAdB_tMd9Yl4VRRCzO1jCSOI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4nCtAdB_tMd9Yl4VRRCzO1jCSOI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4nCtAdB_tMd9Yl4VRRCzO1jCSOI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4nCtAdB_tMd9Yl4VRRCzO1jCSOI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/ftXvY7njYlA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/7432929704576998877/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=7432929704576998877" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/7432929704576998877?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/7432929704576998877?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/ftXvY7njYlA/welcome-elizabeth-rose-lee.html" title="Welcome Elizabeth Rose Lee" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2008/01/welcome-elizabeth-rose-lee.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UMSXcyeyp7ImA9WB9bEEQ.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-513046967459445521</id><published>2007-12-19T15:21:00.001-06:00</published><updated>2007-12-19T15:21:28.993-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-19T15:21:28.993-06:00</app:edited><title>Merry Christmas!</title><content type="html">&lt;div class="wlWriterSmartContent" id="scid:887EC618-8FBE-DEAD-BEEF-2339AF2EC721:cdffa385-77c7-4ee6-9fab-bfada2b812f4" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a href="http://lh5.google.com/ianlee74/R2mLVil5DtI/AAAAAAAAA1M/95pmAqhr650/Zsanta2-8x6?imgmax=800" title="" rel="thumbnail"&gt;&lt;img border="0" src="http://lh3.google.com/ianlee74/R2mLWCl5DuI/AAAAAAAAA1U/bQqT-8z_KPs/Zsanta2%5B17%5D?imgmax=800" /&gt;&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-513046967459445521?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vHa7SbvYMZSijtCOPL3JieHgKeM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vHa7SbvYMZSijtCOPL3JieHgKeM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vHa7SbvYMZSijtCOPL3JieHgKeM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vHa7SbvYMZSijtCOPL3JieHgKeM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/AmwHkHdId74" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/513046967459445521/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=513046967459445521" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/513046967459445521?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/513046967459445521?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/AmwHkHdId74/merry-christmas.html" title="Merry Christmas!" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2007/12/merry-christmas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUFRHY_fSp7ImA9WB9bEEQ.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-857478101580339518</id><published>2007-12-19T11:00:00.001-06:00</published><updated>2007-12-19T14:30:15.845-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-19T14:30:15.845-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET Development" /><title>.NET Custom Configuration</title><content type="html">&lt;p&gt;This week I had to create a relatively simple Windows console program that would be scheduled nightly to email a report to a client.  Simple enough, right?  &lt;/p&gt; &lt;p&gt;Well, I decided I to make the program a little more flexible so that I could easily add more reports later if needed and specify through command-line arguments which report would be run.&lt;/p&gt; &lt;p&gt;So, I decided I would try and make a custom configuration section in the app.config file that would look like this...&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;  &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Reports&lt;/span&gt;&lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;DailyProductionRpt&lt;/span&gt;" &lt;span style="color: red"&gt;emailTo&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;span style="color: blue"&gt;customer@some.com&lt;/span&gt;" &lt;span style="color: red"&gt;lastRun&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;12/15/2007&lt;/span&gt;"&lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;NavyMonthlyProduction&lt;/span&gt;" &lt;span style="color: red"&gt;emailTo&lt;/span&gt;&lt;span style="color: blue"&gt;="customer@some.&lt;/span&gt;&lt;span style="color: blue"&gt;com&lt;/span&gt;" &lt;span style="color: red"&gt;lastRun&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;11/30/2007&lt;/span&gt;"&lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;br /&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Reports&lt;/span&gt;&lt;/font&gt;&lt;span style="color: blue"&gt;&lt;font size="1"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/span&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Sounds simple enough, huh?  This looks just like the &amp;lt;connectionStrings&amp;gt; section so there should be a million examples on the web on how to do it, right?  So, I started Googling for examples on how to implement a custom section handler and found a lot of great examples on how to create a custom section if you want to put the collection element inside another element such as like this...&lt;/p&gt;&lt;pre class="code"&gt;&lt;font size="1"&gt;  &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;MyCustomSection&lt;/span&gt;&lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Reports&lt;/span&gt;&lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;...&lt;/span&gt;&lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;br /&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;...&lt;/span&gt;&lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Reports&lt;/span&gt;&lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;MyCustomSection&lt;/span&gt;&lt;/font&gt;&lt;span style="color: blue"&gt;&lt;font size="1"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;But, I didn't want that extra element and didn't see any need to include it.  So, after spending several days working on this between other tasks I finally got it working.  I'm posting my solution here since there doesn't appear to be an example like this anywhere else on the web.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;First you have to add this code to the &amp;lt;configSections&amp;gt; section of your app.config file...&lt;/p&gt;&lt;pre class="code"&gt;&lt;font size="1"&gt;  &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;configSections&lt;/span&gt;&lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;section &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Reports&lt;/span&gt;" &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;MyCompany.DataDelivery.ReportsConfigSection, DataDelivery&lt;/span&gt;"&lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;/&amp;gt;      &lt;br /&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;configSections&lt;/span&gt;&lt;/font&gt;&lt;span style="color: blue"&gt;&lt;font size="1"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Where "ReportsConfigSection" is the name of the section handler class and "DataDelivery" is the name of the assembly where it exists.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Here's all the custom section handler code that had to be implemented...&lt;/p&gt;&lt;pre class="code"&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Configuration;&lt;br /&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Text;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;MyCompany.DataDelivery&lt;br /&gt;{&lt;br /&gt;    &lt;/font&gt;&lt;span style="color: gray"&gt;&lt;font size="1"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font size="1"&gt;The Handler for the custom "Reports" configuration section.&lt;br /&gt;    &lt;/font&gt;&lt;/span&gt;&lt;font size="1"&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public sealed class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ReportsConfigSection &lt;/span&gt;: &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: #2b91af"&gt;ConfigurationSection&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color: blue"&gt;private static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ReportsCollection &lt;/span&gt;_reports;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue"&gt;public &lt;/span&gt;ReportsConfigSection()&lt;br /&gt;        {&lt;br /&gt;            _reports = (&lt;span style="color: #2b91af"&gt;ReportsCollection&lt;/span&gt;)&lt;span style="color: blue"&gt;base&lt;/span&gt;[&lt;span style="color: #a31515"&gt;""&lt;/span&gt;];&lt;br&gt;&lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: green"&gt;        &lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;        [&lt;span style="color: #2b91af"&gt;ConfigurationProperty&lt;/span&gt;(&lt;span style="color: #a31515"&gt;""&lt;/span&gt;, IsDefaultCollection = &lt;span style="color: blue"&gt;true&lt;/span&gt;, IsRequired = &lt;span style="color: blue"&gt;true&lt;/span&gt;)]&lt;br /&gt;        &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ReportsCollection &lt;/span&gt;Reports&lt;br /&gt;        {&lt;br /&gt;            &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;get&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                _reports = (&lt;span style="color: #2b91af"&gt;ReportsCollection&lt;/span&gt;)&lt;span style="color: blue"&gt;base&lt;/span&gt;[&lt;span style="color: #a31515"&gt;""&lt;/span&gt;];&lt;br /&gt;                &lt;span style="color: blue"&gt;return &lt;/span&gt;_reports;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ReportElement &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;[&lt;span style="color: blue"&gt;int &lt;/span&gt;idx]&lt;br /&gt;        {&lt;br /&gt;            &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;get&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                &lt;span style="color: blue"&gt;return &lt;/span&gt;Reports[idx];&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ReportElement &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;[&lt;span style="color: blue"&gt;object &lt;/span&gt;idx]&lt;br /&gt;        {&lt;br /&gt;            &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;get&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                &lt;span style="color: blue"&gt;return &lt;/span&gt;Reports[idx];&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;span style="color: gray"&gt;&lt;font size="1"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font size="1"&gt;This defines the Reports collection element.&lt;br /&gt;    &lt;/font&gt;&lt;/span&gt;&lt;font size="1"&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;   &lt;/span&gt; &lt;span style="color: #2b91af"&gt;ConfigurationCollection&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;ReportElement&lt;/span&gt;))]&lt;br /&gt;    &lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ReportsCollection &lt;/span&gt;: &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: #2b91af"&gt;ConfigurationElementCollection&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color: blue"&gt;protected override &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ConfigurationElement &lt;/span&gt;CreateNewElement()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue"&gt;return new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ReportElement&lt;/span&gt;();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue"&gt;protected override object &lt;/span&gt;GetElementKey(&lt;span style="color: #2b91af"&gt;ConfigurationElement &lt;/span&gt;element)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue"&gt;return &lt;/span&gt;((&lt;span style="color: #2b91af"&gt;ReportElement&lt;/span&gt;)element).Name;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ReportElement &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;[&lt;span style="color: blue"&gt;int &lt;/span&gt;idx]&lt;br /&gt;        {&lt;br /&gt;            &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;get&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                &lt;span style="color: blue"&gt;return &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;ReportElement&lt;/span&gt;)BaseGet(idx);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ReportElement &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;[&lt;span style="color: blue"&gt;object &lt;/span&gt;idx]&lt;br /&gt;        {&lt;br /&gt;            &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;get&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                &lt;span style="color: blue"&gt;return &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;ReportElement&lt;/span&gt;)BaseGet(idx);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;span style="color: gray"&gt;&lt;font size="1"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font size="1"&gt;The class that holds onto each element returned by the configuration manager.&lt;br /&gt;    &lt;/font&gt;&lt;/span&gt;&lt;font size="1"&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ReportElement &lt;/span&gt;: &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: #2b91af"&gt;ConfigurationElement&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        [&lt;span style="color: #2b91af"&gt;ConfigurationProperty&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"name"&lt;/span&gt;, DefaultValue = &lt;span style="color: #a31515"&gt;""&lt;/span&gt;, IsKey = &lt;span style="color: blue"&gt;true&lt;/span&gt;, IsRequired = &lt;span style="color: blue"&gt;true&lt;/span&gt;)]&lt;br /&gt;        &lt;span style="color: blue"&gt;public string &lt;/span&gt;Name&lt;br /&gt;        {&lt;br /&gt;            &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;get&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                &lt;span style="color: blue"&gt;return &lt;/span&gt;((&lt;span style="color: blue"&gt;string&lt;/span&gt;)(&lt;span style="color: blue"&gt;base&lt;/span&gt;[&lt;span style="color: #a31515"&gt;"name"&lt;/span&gt;]));&lt;br /&gt;            }&lt;br /&gt;            &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;set&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                &lt;span style="color: blue"&gt;base&lt;/span&gt;[&lt;span style="color: #a31515"&gt;"name"&lt;/span&gt;] = &lt;span style="color: blue"&gt;value&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        [&lt;span style="color: #2b91af"&gt;ConfigurationProperty&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"emailTo"&lt;/span&gt;, DefaultValue = &lt;span style="color: #a31515"&gt;""&lt;/span&gt;, IsKey = &lt;span style="color: blue"&gt;false&lt;/span&gt;, IsRequired = &lt;span style="color: blue"&gt;false&lt;/span&gt;)]&lt;br /&gt;        &lt;span style="color: blue"&gt;public string &lt;/span&gt;EmailTo&lt;br /&gt;        {&lt;br /&gt;            &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;get&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                &lt;span style="color: blue"&gt;return &lt;/span&gt;((&lt;span style="color: blue"&gt;string&lt;/span&gt;)(&lt;span style="color: blue"&gt;base&lt;/span&gt;[&lt;span style="color: #a31515"&gt;"emailTo"&lt;/span&gt;]));&lt;br /&gt;            }&lt;br /&gt;            &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;set&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                &lt;span style="color: blue"&gt;base&lt;/span&gt;[&lt;span style="color: #a31515"&gt;"emailTo"&lt;/span&gt;] = &lt;span style="color: blue"&gt;value&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        [&lt;span style="color: #2b91af"&gt;ConfigurationProperty&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"lastRun"&lt;/span&gt;, DefaultValue = &lt;span style="color: #a31515"&gt;""&lt;/span&gt;, IsKey = &lt;span style="color: blue"&gt;false&lt;/span&gt;, IsRequired = &lt;span style="color: blue"&gt;false&lt;/span&gt;)]&lt;br /&gt;        &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;LastRun&lt;br /&gt;        {&lt;br /&gt;            &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;get&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                &lt;span style="color: blue"&gt;return &lt;/span&gt;((&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;)(&lt;span style="color: blue"&gt;base&lt;/span&gt;[&lt;span style="color: #a31515"&gt;"lastRun"&lt;/span&gt;]));&lt;br /&gt;            }&lt;br /&gt;            &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color: blue"&gt;set&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                &lt;span style="color: blue"&gt;base&lt;/span&gt;[&lt;span style="color: #a31515"&gt;"lastRun"&lt;/span&gt;] = &lt;span style="color: blue"&gt;value&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;I'm still not sure that I understand everything happening here, but it works and you should be able to easily adapt it to your needs if you need a custom top-level collection element in your configuration file.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-857478101580339518?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uVzEpHL9O1VZiyfxOaMPfWApAOg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uVzEpHL9O1VZiyfxOaMPfWApAOg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uVzEpHL9O1VZiyfxOaMPfWApAOg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uVzEpHL9O1VZiyfxOaMPfWApAOg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/EAmDwNyAiwQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/857478101580339518/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=857478101580339518" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/857478101580339518?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/857478101580339518?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/EAmDwNyAiwQ/net-custom-configuration.html" title=".NET Custom Configuration" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2007/12/net-custom-configuration.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcCQno_fCp7ImA9WB9bEEo.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-5634194905664501162</id><published>2007-12-19T09:07:00.001-06:00</published><updated>2007-12-19T09:11:03.444-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-19T09:11:03.444-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mapping" /><title>Microsoft Live Maps</title><content type="html">&lt;p&gt;Once again, I am overwhelmed by the advancements made in online mapping software.  I was first wowed by &lt;a href="http://maps.google.com/" target="_blank"&gt;Google Maps&lt;/a&gt; when several years ago they came out with the interactive Web 2.0 interface and I've been a loyal follower every since.  Well, yesterday I tried out the new &lt;a href="http://maps.live.com/" target="_blank"&gt;Microsoft Live Maps&lt;/a&gt; and I must say that I have been wowed again.&lt;/p&gt;&lt;p&gt;I live in a very rural area and the big test for the abilities of a mapping program has been to see if it can see my house in as high a resolution as has been available in larger cities for some time now.  Currently, this is the best I can get from Google Maps.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.google.com/ianlee74/R2kzkyl5DpI/AAAAAAAAA0s/yKAoIO4oXUI/MSVirtualEarth%5B2%5D?imgmax=800"&gt;&lt;a href="http://lh5.google.com/ianlee74/R2kzlil5DqI/AAAAAAAAA00/nrwK22fLers/GMap%5B7%5D?imgmax=800"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="136" alt="Google Map of my home." src="http://lh3.google.com/ianlee74/R2kzmCl5DrI/AAAAAAAAA08/2a1ZN3tQw7M/GMap_thumb%5B5%5D?imgmax=800" width="168" border="0" /&gt;&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Not very impressive.  So, I was playing around with &lt;a href="http://get.live.com/writer/overview" target="_blank"&gt;Windows Live Writer&lt;/a&gt; yesterday and tried out its &lt;em&gt;Insert Map&lt;/em&gt; feature which sent me to Live Maps.  I entered in my home address and this is what I got!&lt;/p&gt;&lt;p&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="184" alt="MSVirtualEarth" src="http://lh4.google.com/ianlee74/R2kzmSl5DsI/AAAAAAAAA1E/lVq80U-xg5k/MSVirtualEarth_thumb?imgmax=800" width="244" border="0" /&gt; &lt;/p&gt;&lt;p&gt;There are also some other amazing features such as the ability to rotate around my house and see it from all angles.  I can't imagine how they get all the imagery to make this possible, but it's very impressive.&lt;/p&gt;&lt;p&gt;There appear to be a lot of other features in Live Maps that I've been wishing for and I'll be spending more time playing with in the near future.  But, one thing seems certain...  &lt;/p&gt;&lt;p&gt;Adios Google Maps!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-5634194905664501162?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x0cDESSvjFYAdS_BV8tUrtflv1Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x0cDESSvjFYAdS_BV8tUrtflv1Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x0cDESSvjFYAdS_BV8tUrtflv1Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x0cDESSvjFYAdS_BV8tUrtflv1Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/PdtovO3vspA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/5634194905664501162/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=5634194905664501162" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/5634194905664501162?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/5634194905664501162?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/PdtovO3vspA/microsoft-virtual-earth.html" title="Microsoft Live Maps" /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2007/12/microsoft-virtual-earth.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EHRHc7eyp7ImA9WBVXGEU.&quot;"><id>tag:blogger.com,1999:blog-9692721.post-113488563590313508</id><published>2005-12-18T00:00:00.000-06:00</published><updated>2005-12-18T00:00:35.903-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2005-12-18T00:00:35.903-06:00</app:edited><title>Let's get this party started...</title><content type="html">&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9692721-113488563590313508?l=blog.ianlee.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/w1sWehP0-trUgWb2vbVp4uxyYSU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w1sWehP0-trUgWb2vbVp4uxyYSU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/w1sWehP0-trUgWb2vbVp4uxyYSU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w1sWehP0-trUgWb2vbVp4uxyYSU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IanLeeSr/~4/m2hJWfAxqys" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ianlee.info/feeds/113488563590313508/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9692721&amp;postID=113488563590313508" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/113488563590313508?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9692721/posts/default/113488563590313508?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IanLeeSr/~3/m2hJWfAxqys/lets-get-this-party-started.html" title="Let's get this party started..." /><author><name>R. Ian Lee</name><uri>http://www.blogger.com/profile/05860502216157093702</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10792879429036775898" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ianlee.info/2005/12/lets-get-this-party-started.html</feedburner:origLink></entry></feed>
