<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Overpass Experiences &#187; C# Coding</title>
	<atom:link href="http://www.wroolie.co.uk/category/development/c-sharp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.wroolie.co.uk</link>
	<description>The Eric Wroolie Blog</description>
	<lastBuildDate>Sat, 10 Jul 2010 10:07:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The scary thing about Silverlight . . .</title>
		<link>http://www.wroolie.co.uk/2010/02/09/the-scary-thing-about-silverlight/</link>
		<comments>http://www.wroolie.co.uk/2010/02/09/the-scary-thing-about-silverlight/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 05:16:56 +0000</pubDate>
		<dc:creator>Eric Wroolie</dc:creator>
				<category><![CDATA[C# Coding]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://www.wroolie.co.uk/2010/02/09/the-scary-thing-about-silverlight/</guid>
		<description><![CDATA[The scary thing about Silverlight is that you are one security threat away from losing your clients.&#160; One thing that I’ve thought a lot with the problems on IE lately is that people who wrote “Only-for-Internet-Explorer” websites did not give their users the option to switch browsers if they felt unsafe due to all the [...]


Related posts:<ol><li><a href='http://www.wroolie.co.uk/2010/01/19/france-and-germany-say-no-iecorporate-apps-will-suffer/' rel='bookmark' title='Permanent Link: France and Germany say &ldquo;No IE&rdquo;&mdash;Corporate apps will suffer'>France and Germany say &ldquo;No IE&rdquo;&mdash;Corporate apps will suffer</a></li>
<li><a href='http://www.wroolie.co.uk/2007/04/21/59/' rel='bookmark' title='Permanent Link: Microsoft Silverlight'>Microsoft Silverlight</a></li>
<li><a href='http://www.wroolie.co.uk/2007/05/08/57/' rel='bookmark' title='Permanent Link: Silverlight on Expression Blend with AVG Anti-Virus'>Silverlight on Expression Blend with AVG Anti-Virus</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The scary thing about Silverlight is that you are one security threat away from losing your clients.&#160; One thing that I’ve thought a lot with the problems on IE lately is that people who wrote “Only-for-Internet-Explorer” websites did not give their users the option to switch browsers if they felt unsafe due to all the security flaw hype.</p>
<p>A little common sense and a knowledge of web standards and it’s easy to write HTML that will look good and be functional in all browsers.&#160; Still, in my experience, too many developers are choosing a platform and sticking with it—most of the time that is IE.&#160; It’s easier to test one browser, it’s easier to tell a user to use the browser that’s probably already installed on their pc.</p>
<p>Flash and Silverlight are different than HTML—they are runtimes which are <em>allowed</em> to run inside the browser—kind of like how Java applets used to be able to.&#160; They are executables which run compiled functionality on your computer.&#160; They <em>are</em> cross-browser—but not like html is cross-browser.&#160; When I look at a Silverlight or Flash app on my pc, it’s always the same runtime working.&#160; Silverlight is a few years old and really starting to look like Flash—allowing Microsoft developers like me to get more fancy and provide far better functionality for our users.&#160; Silverlight runs on Windows and Mac, but has ignored the Linux landscape (there is an open-source Silverlight runtime called Moonlight being developed for that—but I consider it a snub).</p>
<p>In the world of web development, I think Flash and Silverlight are “cheating” at cross-platform compatibility.&#160; Everyone has accepted Flash (except the iPhone/iPad), but the jury is still out on Silverlight.</p>
<p>Silverlight and Flash are great in that they move a lot of the processing to your computer and free up resources on the server from which they originate.&#160; But they also increase the responsibilities of they client over the server.</p>
<p>Security flaws are found all the time.&#160; We all scramble around and try to fix them when they come up.&#160; As a software developer, I like the idea that I can apply a patch to a server and be done with it.&#160; With client driven app, I need to make sure all of my users apply the patch (and do it in a way that lets them know that the app is safe—and not to panic).&#160; Flash could bounce back from it (“You need it for Youtube, too. You should apply the patch”), but Silverlight is too new.</p>
<p>I’m often seduced by the cool things that Silverlight can do.&#160; I’ve played around with it a lot and have written several small apps (including an animated Overpass ad on my blog), but I’m not ready to jump in head-first yet.&#160; </p>


<p>Related posts:<ol><li><a href='http://www.wroolie.co.uk/2010/01/19/france-and-germany-say-no-iecorporate-apps-will-suffer/' rel='bookmark' title='Permanent Link: France and Germany say &ldquo;No IE&rdquo;&mdash;Corporate apps will suffer'>France and Germany say &ldquo;No IE&rdquo;&mdash;Corporate apps will suffer</a></li>
<li><a href='http://www.wroolie.co.uk/2007/04/21/59/' rel='bookmark' title='Permanent Link: Microsoft Silverlight'>Microsoft Silverlight</a></li>
<li><a href='http://www.wroolie.co.uk/2007/05/08/57/' rel='bookmark' title='Permanent Link: Silverlight on Expression Blend with AVG Anti-Virus'>Silverlight on Expression Blend with AVG Anti-Virus</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.wroolie.co.uk/2010/02/09/the-scary-thing-about-silverlight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some thoughts on the ASP.Net MVC Framework</title>
		<link>http://www.wroolie.co.uk/2009/07/31/some-thoughts-on-the-asp-net-mvc-framework/</link>
		<comments>http://www.wroolie.co.uk/2009/07/31/some-thoughts-on-the-asp-net-mvc-framework/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 04:35:40 +0000</pubDate>
		<dc:creator>Eric Wroolie</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[C# Coding]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.wroolie.co.uk/?p=442</guid>
		<description><![CDATA[A few months ago, I got tired of ASP.Net.  I was tired of developers who depended on server-side controls, the Microsoft ajax implementations (as opposed to under-the-hood javascript ajax), excessive use of session and view state.  My preferred method of coding which relies more on the html than on the “runat=server” attribute, was considered old [...]


Related posts:<ol><li><a href='http://www.wroolie.co.uk/2008/06/25/8/' rel='bookmark' title='Permanent Link: Wroolie on Rails'>Wroolie on Rails</a></li>
<li><a href='http://www.wroolie.co.uk/2008/12/08/hindi-class-ends-tonight/' rel='bookmark' title='Permanent Link: Hindi Class ends tonight'>Hindi Class ends tonight</a></li>
<li><a href='http://www.wroolie.co.uk/2010/01/19/france-and-germany-say-no-iecorporate-apps-will-suffer/' rel='bookmark' title='Permanent Link: France and Germany say &ldquo;No IE&rdquo;&mdash;Corporate apps will suffer'>France and Germany say &ldquo;No IE&rdquo;&mdash;Corporate apps will suffer</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>A few months ago, I got tired of ASP.Net.  I was tired of developers who depended on server-side controls, the Microsoft ajax implementations (as opposed to under-the-hood javascript ajax), excessive use of session and view state.  My preferred method of coding which relies more on the html than on the “runat=server” attribute, was considered old fashioned.</p>
<div style="float:right"><a title="pics 006" href="http://www.flickr.com/photos/16276103@N00/491569718/" target="_blank"><img src="http://farm1.static.flickr.com/232/491569718_230c3e8a11_m.jpg" border="0" alt="pics 006" /></a><br />
<small><a title="Attribution License" href="http://creativecommons.org/licenses/by/2.0/" target="_blank"><img src="http://www.wroolie.co.uk/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="paulb" href="http://www.flickr.com/photos/16276103@N00/491569718/" target="_blank">paulb</a></small></div>
<p>So, I wanted to look at something else.  In my mind, Asp.net was getting too bloated and heavy.  I started learning Ruby on Rails.  RoR is a fantastic framework which integrates testability and maintainability.  Rails is the framework—Ruby is the language.  It’s easy to set up an Model View Controller site very quickly.  I love Rails, but I hate Ruby.  I had to lean how to do everything over again in Ruby.  It was like learning to speak a new language—even the simple things were hard.</p>
<p>Then, I looked at the ASP.net MVC framework that was released earlier this year.  The MVC framework is like Rails for ASP.  It keeps aspects of ASP.Net that I really like (like master pages and C#) and moves away from the bulky server-side, viewstate heavy, controls (like the DataGrid) that slow down ASP.Net performance.</p>
<p>My faith in ASP.Net is restored.  My brief foray into the hip and trendy world of Ruby development has given way to working on Microsoft code again.</p>
<p>I’ve been using the MVC framework in a few projects now.  I’ve started writing a Chinese Dictionary application (using the <a href="http://www.mdbg.net/chindict/chindict.php?page=cedict">CEDict</a> database) and am enjoying every minute of it.  I don’t know if I’ll every put this site live, but coding it is helping me learn the finer points of the framework.</p>
<p>There are some great MVC tutorials here:</p>
<p><a title="http://www.asp.net/mvc/learn/" href="http://www.asp.net/mvc/learn/">http://www.asp.net/mvc/learn/</a></p>
<p>The best video tutorial (to start off with) is “<a href="http://www.asp.net/learn/mvc-videos/video-395.aspx">Creating a Movie Database Application with ASP.NET MVC</a>”.</p>


<p>Related posts:<ol><li><a href='http://www.wroolie.co.uk/2008/06/25/8/' rel='bookmark' title='Permanent Link: Wroolie on Rails'>Wroolie on Rails</a></li>
<li><a href='http://www.wroolie.co.uk/2008/12/08/hindi-class-ends-tonight/' rel='bookmark' title='Permanent Link: Hindi Class ends tonight'>Hindi Class ends tonight</a></li>
<li><a href='http://www.wroolie.co.uk/2010/01/19/france-and-germany-say-no-iecorporate-apps-will-suffer/' rel='bookmark' title='Permanent Link: France and Germany say &ldquo;No IE&rdquo;&mdash;Corporate apps will suffer'>France and Germany say &ldquo;No IE&rdquo;&mdash;Corporate apps will suffer</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.wroolie.co.uk/2009/07/31/some-thoughts-on-the-asp-net-mvc-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nike+ API Revisited</title>
		<link>http://www.wroolie.co.uk/2009/07/05/nike-api-revisited/</link>
		<comments>http://www.wroolie.co.uk/2009/07/05/nike-api-revisited/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 20:31:10 +0000</pubDate>
		<dc:creator>Eric Wroolie</dc:creator>
				<category><![CDATA[C# Coding]]></category>
		<category><![CDATA[Running]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.wroolie.co.uk/?p=415</guid>
		<description><![CDATA[One of the highest traffic posts I get on this blog is the brief post on accessing the Nike+ API with C#. I'm pretty proud of that post, but I don't keep up with how the API works.


The Nike+ API is not published, so it's not public.  It can change at any time.
If you are [...]


Related posts:<ol><li><a href='http://www.wroolie.co.uk/2009/01/28/nike-c-code/' rel='bookmark' title='Permanent Link: Nike+ C# code'>Nike+ C# code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/07/28/runkeeper-vs-nike/' rel='bookmark' title='Permanent Link: RunKeeper vs. Nike+'>RunKeeper vs. Nike+</a></li>
<li><a href='http://www.wroolie.co.uk/2008/09/16/nike-code-will-soon-be-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ code will soon be on Google Code'>Nike+ code will soon be on Google Code</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>One of the highest traffic posts I get on this blog is the brief post on accessing the <a href="http://www.wroolie.co.uk/2008/05/05/13/" target="_blank">Nike+ API with C#.</a> I'm pretty proud of that post, but I don't keep up with how the API works.<a title="Running Shoes" href="http://www.flickr.com/photos/13887379@N00/3486887870/" target="_blank"><img class="alignright" src="http://farm4.static.flickr.com/3568/3486887870_92c147e33b_m.jpg" border="0" alt="Running Shoes" /></a><br />
<small><a title="Attribution-NoDerivs License" href="http://creativecommons.org/licenses/by-nd/2.0/" target="_blank"><br />
</a><a title="marksteelenz" href="http://www.flickr.com/photos/13887379@N00/3486887870/" target="_blank"></a></small></p>
<p>The Nike+ API is not published, so it's not public.  It can change at any time.</p>
<p>If you are interested in the Nike+ iPod API, there is a much more up-to-date blog you may want to have a look at.  It's called <a href="http://runningtracker.tuxfamily.org/blog/" target="_blank">Running Tracker</a>.  I've been subscribed to the RSS feed of this site.  They've created a cross-platform desktop application to examine the data stored with Nike.  I know about their API changes through <a href="http://runningtracker.tuxfamily.org/blog/" target="_blank">Running Tracker</a>.</p>
<p>If you have come to this site about the API, by all means, use the code if you can-- but also check out the Running Tracker site as it is more up-to-date on the subject than I have been.  Their application doesn't use C#, but it might be able to help you out with more information.</p>
<p><small><a title="Attribution-NoDerivs License" href="http://creativecommons.org/licenses/by-nd/2.0/" target="_blank"><img src="../wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="marksteelenz" href="http://www.flickr.com/photos/13887379@N00/3486887870/" target="_blank">marksteelenz</a></small></p>


<p>Related posts:<ol><li><a href='http://www.wroolie.co.uk/2009/01/28/nike-c-code/' rel='bookmark' title='Permanent Link: Nike+ C# code'>Nike+ C# code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/07/28/runkeeper-vs-nike/' rel='bookmark' title='Permanent Link: RunKeeper vs. Nike+'>RunKeeper vs. Nike+</a></li>
<li><a href='http://www.wroolie.co.uk/2008/09/16/nike-code-will-soon-be-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ code will soon be on Google Code'>Nike+ code will soon be on Google Code</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.wroolie.co.uk/2009/07/05/nike-api-revisited/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nike+ in Subversion . . . again</title>
		<link>http://www.wroolie.co.uk/2009/02/09/nike-in-subversion-again/</link>
		<comments>http://www.wroolie.co.uk/2009/02/09/nike-in-subversion-again/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 04:58:03 +0000</pubDate>
		<dc:creator>Eric Wroolie</dc:creator>
				<category><![CDATA[C# Coding]]></category>
		<category><![CDATA[Running]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.wroolie.co.uk/?p=314</guid>
		<description><![CDATA[I've uploaded my Nike+ API to a new SVN repository.  Previously, I used Google Code, but it required people to register with Google and I couldn't find the way to open it up to anonymous users.
So, here it is again.  I have it on my own server in a repository:
https://svn.overpass-software.com/svn/nikeplus/trunk
I didn't run (or [...]


Related posts:<ol><li><a href='http://www.wroolie.co.uk/2009/01/08/nike-api-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ API on Google Code'>Nike+ API on Google Code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/01/28/nike-c-code/' rel='bookmark' title='Permanent Link: Nike+ C# code'>Nike+ C# code</a></li>
<li><a href='http://www.wroolie.co.uk/2008/09/16/nike-code-will-soon-be-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ code will soon be on Google Code'>Nike+ code will soon be on Google Code</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I've uploaded my Nike+ API to a new SVN repository.  Previously, I used Google Code, but it required people to register with Google and I couldn't find the way to open it up to anonymous users.</p>
<p>So, here it is again.  I have it on my own server in a repository:</p>
<p><a title="https://svn.overpass-software.com/svn/nikeplus/trunk" href="https://svn.overpass-software.com/svn/nikeplus/trunk">https://svn.overpass-software.com/svn/nikeplus/trunk</a></p>
<p>I didn't run (or go to work) at all last week because of the heavy snow and a bout of the flu.  I should be ready to head out this morning, but I think I broke a toe yesterday.  I walked right into a door jam barefoot in the house and now they are starting to swell up.  I sound like someone who is always looking for excuses, but he Reading Half Marathon is 7 weeks away, and I'm already registered.</p>
<p><strong>Update 12 Oct 2009: </strong>Since this post was written, I have moved the code to the Google Code repository at https://nikepluscsharp.googlecode.com/svn/trunk.  Use your Google username and password to access it.  It is not a complete working app and will require some C# knowledge to see what it does.</p>


<p>Related posts:<ol><li><a href='http://www.wroolie.co.uk/2009/01/08/nike-api-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ API on Google Code'>Nike+ API on Google Code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/01/28/nike-c-code/' rel='bookmark' title='Permanent Link: Nike+ C# code'>Nike+ C# code</a></li>
<li><a href='http://www.wroolie.co.uk/2008/09/16/nike-code-will-soon-be-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ code will soon be on Google Code'>Nike+ code will soon be on Google Code</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.wroolie.co.uk/2009/02/09/nike-in-subversion-again/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Nike+ C# code</title>
		<link>http://www.wroolie.co.uk/2009/01/28/nike-c-code/</link>
		<comments>http://www.wroolie.co.uk/2009/01/28/nike-c-code/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 06:13:26 +0000</pubDate>
		<dc:creator>Eric Wroolie</dc:creator>
				<category><![CDATA[C# Coding]]></category>
		<category><![CDATA[Running]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.wroolie.co.uk/?p=296</guid>
		<description><![CDATA[A lot of people are emailing me with problems they are having downloading the Nike+ api code from Google Code.&#160; In order to access it, you need a google api login and password.&#160; This sucks, I know.
I will try to find a more open svn repository for this.&#160; I use some for Overpass, but don't [...]


Related posts:<ol><li><a href='http://www.wroolie.co.uk/2008/09/16/nike-code-will-soon-be-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ code will soon be on Google Code'>Nike+ code will soon be on Google Code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/01/08/nike-api-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ API on Google Code'>Nike+ API on Google Code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/02/09/nike-in-subversion-again/' rel='bookmark' title='Permanent Link: Nike+ in Subversion . . . again'>Nike+ in Subversion . . . again</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>A lot of people are emailing me with problems they are having downloading the Nike+ api code from Google Code.&nbsp; In order to access it, you need a google api login and password.&nbsp; This sucks, I know.</p>
<p>I will try to find a more open svn repository for this.&nbsp; I use some for Overpass, but don't really want to mix my pet project with it.&nbsp; For the meantime, here is the project as it stands now.&nbsp; If you are finding this post at a day later than 28 January 2009, you might want to look for a future post where I give more up to date source code.&nbsp; </p>
<p>The is mostly the API, so don't expect a nice GUI.&nbsp; However, I have included a windows app which I use for quick tests.&nbsp; I also have some unit tests, but these need to be maintained a little better.&nbsp; My plan was to work on this a bit more before releasing it, but a lot of people seem to be looking for something like this.</p>
<p><a title="http://www.wroolie.co.uk/files/Nike+.zip" href="http://www.wroolie.co.uk/files/Nike+.zip">http://www.wroolie.co.uk/files/Nike+.zip</a></p>
<p>There is no rocket science here.&nbsp; The only difficult bit is connecting to Nike+.&nbsp; You can lift the code from this project if you want to.&nbsp; Ideally, see if you can access the SVN repository.&nbsp; If you add anything cool to it, please let me know.&nbsp; I mostly work on this when I have a few spare minutes here and there (and I don't have much of those), so it would be nice to see it grow or see if it is used anywhere interesting.</p>


<p>Related posts:<ol><li><a href='http://www.wroolie.co.uk/2008/09/16/nike-code-will-soon-be-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ code will soon be on Google Code'>Nike+ code will soon be on Google Code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/01/08/nike-api-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ API on Google Code'>Nike+ API on Google Code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/02/09/nike-in-subversion-again/' rel='bookmark' title='Permanent Link: Nike+ in Subversion . . . again'>Nike+ in Subversion . . . again</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.wroolie.co.uk/2009/01/28/nike-c-code/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nike+ API on Google Code</title>
		<link>http://www.wroolie.co.uk/2009/01/08/nike-api-on-google-code/</link>
		<comments>http://www.wroolie.co.uk/2009/01/08/nike-api-on-google-code/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 06:19:24 +0000</pubDate>
		<dc:creator>Eric Wroolie</dc:creator>
				<category><![CDATA[C# Coding]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.wroolie.co.uk/?p=285</guid>
		<description><![CDATA[I've been working on this API off and on for a while now.
I have a Google Code repository where it is hosted.
I've put the code at https://nikepluscsharp.googlecode.com/svn/trunk
The unit tests are working quite the way I would like them to.&#160; I mentioned this in a post I did last year and never put any real projects [...]


Related posts:<ol><li><a href='http://www.wroolie.co.uk/2008/09/16/nike-code-will-soon-be-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ code will soon be on Google Code'>Nike+ code will soon be on Google Code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/02/09/nike-in-subversion-again/' rel='bookmark' title='Permanent Link: Nike+ in Subversion . . . again'>Nike+ in Subversion . . . again</a></li>
<li><a href='http://www.wroolie.co.uk/2009/01/28/nike-c-code/' rel='bookmark' title='Permanent Link: Nike+ C# code'>Nike+ C# code</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I've been working on this API off and on for a while now.</p>
<p>I have a Google Code repository where it is hosted.</p>
<p>I've put the code at <a href="https://nikepluscsharp.googlecode.com/svn/trunk">https://nikepluscsharp.googlecode.com/svn/trunk</a>
<p>The unit tests are working quite the way I would like them to.&nbsp; I mentioned this in a post I did last year and never put any real projects up.
<p>The (so far) very blank project pages are located at:
<p><a title="http://code.google.com/p/nikepluscsharp/" href="http://code.google.com/p/nikepluscsharp/">http://code.google.com/p/nikepluscsharp/</a>
<p>Any problems you see with the code, please let me know.</p>


<p>Related posts:<ol><li><a href='http://www.wroolie.co.uk/2008/09/16/nike-code-will-soon-be-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ code will soon be on Google Code'>Nike+ code will soon be on Google Code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/02/09/nike-in-subversion-again/' rel='bookmark' title='Permanent Link: Nike+ in Subversion . . . again'>Nike+ in Subversion . . . again</a></li>
<li><a href='http://www.wroolie.co.uk/2009/01/28/nike-c-code/' rel='bookmark' title='Permanent Link: Nike+ C# code'>Nike+ C# code</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.wroolie.co.uk/2009/01/08/nike-api-on-google-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nike+ code will soon be on Google Code</title>
		<link>http://www.wroolie.co.uk/2008/09/16/nike-code-will-soon-be-on-google-code/</link>
		<comments>http://www.wroolie.co.uk/2008/09/16/nike-code-will-soon-be-on-google-code/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 06:59:22 +0000</pubDate>
		<dc:creator>Eric Wroolie</dc:creator>
				<category><![CDATA[C# Coding]]></category>
		<category><![CDATA[Running]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.wroolie.co.uk/?p=256</guid>
		<description><![CDATA[I've got some emails and comments from people looking for my api wrapper for the Nike+ Api and have been sending it out to whoever wants it.  I hope it is proving useful.
Last night I finally for around to setting up a project on code.google.com to make the source code more available and open [...]


Related posts:<ol><li><a href='http://www.wroolie.co.uk/2009/01/28/nike-c-code/' rel='bookmark' title='Permanent Link: Nike+ C# code'>Nike+ C# code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/01/08/nike-api-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ API on Google Code'>Nike+ API on Google Code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/02/09/nike-in-subversion-again/' rel='bookmark' title='Permanent Link: Nike+ in Subversion . . . again'>Nike+ in Subversion . . . again</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I've got some emails and comments from people looking for my api wrapper for the Nike+ Api and have been sending it out to whoever wants it.  I hope it is proving useful.</p>
<p>Last night I finally for around to setting up a project on code.google.com to make the source code more available and open to modification by others.</p>
<p>I'll post the URL and svn repository location when I finish uploading everything in the next few days.</p>


<p>Related posts:<ol><li><a href='http://www.wroolie.co.uk/2009/01/28/nike-c-code/' rel='bookmark' title='Permanent Link: Nike+ C# code'>Nike+ C# code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/01/08/nike-api-on-google-code/' rel='bookmark' title='Permanent Link: Nike+ API on Google Code'>Nike+ API on Google Code</a></li>
<li><a href='http://www.wroolie.co.uk/2009/02/09/nike-in-subversion-again/' rel='bookmark' title='Permanent Link: Nike+ in Subversion . . . again'>Nike+ in Subversion . . . again</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.wroolie.co.uk/2008/09/16/nike-code-will-soon-be-on-google-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Connecting to the Nike+ API with C#</title>
		<link>http://www.wroolie.co.uk/2008/05/05/13/</link>
		<comments>http://www.wroolie.co.uk/2008/05/05/13/#comments</comments>
		<pubDate>Mon, 05 May 2008 08:01:15 +0000</pubDate>
		<dc:creator>Eric Wroolie</dc:creator>
				<category><![CDATA[C# Coding]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.wroolie.co.uk/PermaLink.aspx?guid=0f5036c3-bd0d-4a5f-95e3-9fece8a994ce</guid>
		<description><![CDATA[A few months ago, I started writing some small personal apps which take information from the Nike+ service. Nike+ is the gadget I attach to my IPod and my running shoes which tracks details about my runs. It tracks things like distance, time, what I'm listening to, etc. When I sync the ipod, this information [...]


Related posts:<ol><li><a href='http://www.wroolie.co.uk/2009/02/09/nike-in-subversion-again/' rel='bookmark' title='Permanent Link: Nike+ in Subversion . . . again'>Nike+ in Subversion . . . again</a></li>
<li><a href='http://www.wroolie.co.uk/2009/07/05/nike-api-revisited/' rel='bookmark' title='Permanent Link: Nike+ API Revisited'>Nike+ API Revisited</a></li>
<li><a href='http://www.wroolie.co.uk/2009/07/28/runkeeper-vs-nike/' rel='bookmark' title='Permanent Link: RunKeeper vs. Nike+'>RunKeeper vs. Nike+</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>A few months ago, I started writing some small personal apps which take information from the Nike+ service. Nike+ is the gadget I attach to my IPod and my running shoes which tracks details about my runs. It tracks things like distance, time, what I'm listening to, etc. When I sync the ipod, this information gets uploaded to the Nike+ website where I can see a couple of flash-heavy graphs of my running progress. Ideally, I would like to use this data myself--so I looked for an API.</p>
<p>I only found one example of an API referrence. This is a Wordpress plugin written in PHP (<a title="http://www.ear-fung.us/apps/nikeplus/" href="../ct.ashx?id=0f5036c3-bd0d-4a5f-95e3-9fece8a994ce&amp;url=http%3a%2f%2fwww.ear-fung.us%2fapps%2fnikeplus%2f">http://www.ear-fung.us/apps/nikeplus/</a>). There is very little documentation on the API out there. What I've been able to do involved a lot of trial and error to figure out how to get it working.</p>
<h3>API Overview</h3>
<p>Basically, the API (like most web-based APIs) includes a list of URLs which return an XML string. The first url will return an authentication cookie which all of the other urls use.</p>
<p>Here are the URLs:</p>
<table style="width: 525pt; border-collapse: collapse" cellspacing="0" cellpadding="0" width="700" border="0">
<colgroup>
<col style="width: 258pt" width="344"></col>
<col style="width: 267pt" width="356"></col>
</colgroup>
<tbody>
<tr style="height: 15pt" height="20">
<td class="xl65" style="font-weight: 700; font-size: 11pt; background: #4f81bd; width: 258pt; color: white; font-family: calibri; height: 15pt; text-decoration: none" width="494" height="20">URL</td>
<td class="xl65" style="font-weight: 700; font-size: 11pt; background: #4f81bd; width: 267pt; color: white; font-family: calibri; text-decoration: none" width="204">Description</td>
</tr>
<tr style="height: 60pt" height="80">
<td class="xl66" style="font-weight: 400; font-size: 11pt; background: #b8cce4; width: 258pt; color: blue; font-family: calibri; height: 60pt; text-decoration: underline" width="494" height="80"><a href="../ct.ashx?id=0f5036c3-bd0d-4a5f-95e3-9fece8a994ce&amp;url=https%3a%2f%2fsecure-nikeplus.nike.com%2fnikeplus%2fv1%2fservices%2fwidget%2fgenerate_pin.jhtml%3flogin%3d%253cUsername%253e%26password%3d%253cPassword%253e">https://secure-nikeplus.nike.com/nikeplus/v1/services/widget/generate_pin.jhtml?<br />login=&lt;Username&gt;&amp;password=&lt;Password&gt;</a></td>
<td class="xl65" style="font-weight: 400; font-size: 11pt; background: #b8cce4; width: 267pt; color: black; font-family: calibri; text-decoration: none" width="204">Authenticates the user.<span> </span>Once this information is passed in, a cookie is put on the client and used for the other calls.<span> </span>I'll outline how to get around this later.</td>
</tr>
<tr style="height: 45pt" height="60">
<td class="xl66" style="font-weight: 400; font-size: 11pt; background: #dbe5f1; width: 258pt; color: blue; font-family: calibri; height: 45pt; text-decoration: underline" width="494" height="60"><a href="../ct.ashx?id=0f5036c3-bd0d-4a5f-95e3-9fece8a994ce&amp;url=http%3a%2f%2fsecure-nikeplus.nike.com%2fnikeplus%2fv1%2fservices%2fapp%2fget_user_data.jhtml">http://secure-nikeplus.nike.com/nikeplus/v1/services/app/get_user_data.jhtml</a></td>
<td class="xl65" style="font-weight: 400; font-size: 11pt; background: #dbe5f1; width: 267pt; color: black; font-family: calibri; text-decoration: none" width="204">Gets all of the data about the user (Name, Gender, Country, etc)</td>
</tr>
<tr style="height: 45pt" height="60">
<td class="xl66" style="font-weight: 400; font-size: 11pt; background: #b8cce4; width: 258pt; color: blue; font-family: calibri; height: 45pt; text-decoration: underline" width="494" height="60"><a href="../ct.ashx?id=0f5036c3-bd0d-4a5f-95e3-9fece8a994ce&amp;url=https%3a%2f%2fsecure-nikeplus.nike.com%2fnikeplus%2fv1%2fservices%2fapp%2fgoal_list.jhtml">https://secure-nikeplus.nike.com/nikeplus/v1/services/app/goal_list.jhtml</a></td>
<td class="xl65" style="font-weight: 400; font-size: 11pt; background: #b8cce4; width: 267pt; color: black; font-family: calibri; text-decoration: none" width="204">List of goals for the user.</td>
</tr>
<tr style="height: 45pt" height="60">
<td class="xl66" style="font-weight: 400; font-size: 11pt; background: #dbe5f1; width: 258pt; color: blue; font-family: calibri; height: 45pt; text-decoration: underline" width="494" height="60"><a href="../ct.ashx?id=0f5036c3-bd0d-4a5f-95e3-9fece8a994ce&amp;url=https%3a%2f%2fsecure-nikeplus.nike.com%2fnikeplus%2fv1%2fservices%2fapp%2frun_list.jhtml">https://secure-nikeplus.nike.com/nikeplus/v1/services/app/run_list.jhtml</a></td>
<td class="xl65" style="font-weight: 400; font-size: 11pt; background: #dbe5f1; width: 267pt; color: black; font-family: calibri; text-decoration: none" width="204">A list of all runs with basic summary information.<span> </span>This can get pretty long.</td>
</tr>
<tr style="height: 30pt" height="40">
<td class="xl66" style="font-weight: 400; font-size: 11pt; background: #b8cce4; width: 258pt; color: blue; font-family: calibri; height: 30pt; text-decoration: underline" width="494" height="40"><a title="https://secure-nikeplus.nike.com/nikeplus/v1/services/app/get_run.jhtml?id=&lt;RunNumber&gt;" href="../ct.ashx?id=0f5036c3-bd0d-4a5f-95e3-9fece8a994ce&amp;url=https%3a%2f%2fsecure-nikeplus.nike.com%2fnikeplus%2fv1%2fservices%2fapp%2fget_run.jhtml%3fid%3d%3cRunNumber%3e">https://secure-nikeplus.nike.com/nikeplus/v1/services/app/get_run.jhtml?id=&lt;RunNumber&gt;</a></td>
<td class="xl65" style="font-weight: 400; font-size: 11pt; background: #b8cce4; width: 267pt; color: black; font-family: calibri; text-decoration: none" width="204">A more detailed view of a specific run using the run number from the run list.</td>
</tr>
<tr style="height: 45pt" height="60">
<td class="xl66" style="font-weight: 400; font-size: 11pt; background: #dbe5f1; width: 258pt; color: blue; font-family: calibri; height: 45pt; text-decoration: underline" width="494" height="60"><a href="../ct.ashx?id=0f5036c3-bd0d-4a5f-95e3-9fece8a994ce&amp;url=https%3a%2f%2fsecure-nikeplus.nike.com%2fnikeplus%2fv1%2fservices%2fwidget%2fget_challenges_for_user.jhtml">https://secure-nikeplus.nike.com/nikeplus/v1/services/widget/get_challenges_for_user.jhtml</a></td>
<td class="xl65" style="font-weight: 400; font-size: 11pt; background: #dbe5f1; width: 267pt; color: black; font-family: calibri; text-decoration: none" width="204">List of the Challenges the user has.</td>
</tr>
<tr style="height: 45pt" height="60">
<td class="xl66" style="font-weight: 400; font-size: 11pt; background: #b8cce4; width: 258pt; color: blue; font-family: calibri; height: 45pt; text-decoration: underline" width="494" height="60"><a href="../ct.ashx?id=0f5036c3-bd0d-4a5f-95e3-9fece8a994ce&amp;url=https%3a%2f%2fsecure-nikeplus.nike.com%2fnikeplus%2fv1%2fservices%2fapp%2fpersonal_records.jhtml">https://secure-nikeplus.nike.com/nikeplus/v1/services/app/personal_records.jhtml</a></td>
<td class="xl65" style="font-weight: 400; font-size: 11pt; background: #b8cce4; width: 267pt; color: black; font-family: calibri; text-decoration: none" width="204">Lists all personal records for the user.</td>
</tr>
</tbody>
</table>
<h3>Authenticating</h3>
<p>The biggest problem I had when using these urls was how to deal with the cookie information. Since I wanted something that would sit outside the browser (like a sidebar gadget or a web component), I didn't want to worry about only hosting one session at a time. So I captured the cookie information and fed it back to the server for each additional call.</p>
<pre class="csharpcode">        <span class="kwrd">public</span>  <span class="kwrd">bool</span> Authenticate()
        {

            <span class="rem">//get the login URL (which I include app.config)</span>
            <span class="kwrd">string</span> authURI = String.Format(ConfigurationSettings.AppSettings[<span class="str">"CreateSession"</span>].ToString()+<span class="str">"?login={0}&amp;password={1}"</span>,
                    _userName, _passWord);

            <span class="rem">//Make the call to initiate the connection</span>
            WebRequest objRequest = System.Net.HttpWebRequest.Create(authURI);

            <span class="rem">//Read the response</span>
            WebResponse objResponse = objRequest.GetResponse();

            <span class="rem">//a cookie will be returned for authentication-- catch it here</span>
            _authenticationCookie = objResponse.Headers[<span class="str">"SET-COOKIE"</span>].ToString();

            StreamReader webResponse = <span class="kwrd">new</span> StreamReader(objResponse.GetResponseStream());

            XmlDocument dataDoc = <span class="kwrd">new</span> XmlDocument();
            dataDoc.LoadXml(webResponse.ReadToEnd());

            <span class="kwrd">if</span> (dataDoc.SelectSingleNode(<span class="str">"//status"</span>).InnerText == <span class="str">"success"</span>)
            {
                <span class="kwrd">return</span> <span class="kwrd">true</span>;
            }
            <span class="kwrd">else</span>
            {
                <span class="kwrd">return</span> <span class="kwrd">false</span>;
            }

        }</pre>
<p></p>
<pre class="csharpcode"></pre>
<p><font face="Courier New"></font>&nbsp;</p>
<p>The xml that's returned is pretty simple, it returns a status node. The important thing it returns is the cookie.</p>
<p>I basically capture the cookie information in the "SET-COOKIE" information which gets passed in with the http header. I store this in a class variable so I can send it in with later calls.</p>
<h3>Retrieving Data</h3>
<p>Now that I've authenticated, all I need to do is pass the cookie details back to the api with each subsequent request.</p>
<pre class="csharpcode">        <span class="kwrd">private</span> XmlDocument getAdditionalDetails(<span class="kwrd">string</span> uri)
        {
            WebRequest objRequest = System.Net.HttpWebRequest.Create(uri);

            <span class="rem">//return the authorization cookie</span>
            objRequest.Headers.Add(<span class="str">"Cookie"</span>, _authenticationCookie);

            WebResponse objResponse = objRequest.GetResponse();

            StreamReader webResponse = <span class="kwrd">new</span> StreamReader(objResponse.GetResponseStream());

            XmlDocument dataDoc = <span class="kwrd">new</span> XmlDocument();
            dataDoc.LoadXml(webResponse.ReadToEnd());

            <span class="kwrd">return</span> dataDoc;
        }</pre>
<p>&nbsp;</p>
<p>I do this by using the Headers.Add() function. I pass back the same information I retrieved on the initial request. I am no longer dependent on cookies at all. Now, I can read the xml in the application.</p>
<h3>Reading the Data</h3>
<p>The API does not have any published schemas. However, these are very easy to decipher once you read them. I've actually written an entire API wrapper which assigns these xml values to an object model. This is probably overkill, however. An example of the run list xml is below:</p>
<pre class="csharpcode">&lt;?xml version=<span class="str">"1.0"</span> encoding=<span class="str">"UTF-8"</span>?&gt;
&lt;plusService&gt;
  &lt;status&gt;success&lt;/status&gt;
  &lt;runList&gt;
    &lt;run id=<span class="str">"888888"</span>&gt;
      &lt;startTime&gt;2006-10-07T10:03:31+01:00&lt;/startTime&gt;
      &lt;distance&gt;6.8276&lt;/distance&gt;
      &lt;duration&gt;2035266&lt;/duration&gt;
      &lt;syncTime&gt;2006-10-07T09:51:46+00:00&lt;/syncTime&gt;
      &lt;calories&gt;631&lt;/calories&gt;
      &lt;name&gt;&lt;![CDATA[]]&gt;&lt;/name&gt;
      &lt;description&gt;&lt;![CDATA[]]&gt;&lt;/description&gt;
    &lt;/run&gt;
    &lt;run id=<span class="str">"99999999"</span>&gt;
      &lt;startTime&gt;2006-10-10T08:26:10+01:00&lt;/startTime&gt;
      &lt;distance&gt;4.51&lt;/distance&gt;
      &lt;duration&gt;1331531&lt;/duration&gt;
      &lt;syncTime&gt;2006-10-10T07:54:38+00:00&lt;/syncTime&gt;
      &lt;calories&gt;417&lt;/calories&gt;
      &lt;name&gt;&lt;![CDATA[]]&gt;&lt;/name&gt;
      &lt;description&gt;&lt;![CDATA[]]&gt;&lt;/description&gt;
    &lt;/run&gt;
. . .</pre>
<div class="contentarea">
<h3>Summary</h3>
<p>I will admit that I should have used all of the time I spent playing with this api to actually be out running. Still it was fun to get it working. I only used the data for small projects. I hope that someone creates some decent gadgets for the Vista or Google Desktop sidebars from this.</p>
<p>If you would like my actual API wrapper code, drop me an email and I can send you what I've done. I've written the proper object oriented classes along with unit tests, etc. However, once you can get the xml data, you have all you need.</p>
<p>I hope this helps someone out there. Like I said, this is not documented anywhere else, so it could possibly change in the future (so keep your apps flexible).</p>
</div>


<p>Related posts:<ol><li><a href='http://www.wroolie.co.uk/2009/02/09/nike-in-subversion-again/' rel='bookmark' title='Permanent Link: Nike+ in Subversion . . . again'>Nike+ in Subversion . . . again</a></li>
<li><a href='http://www.wroolie.co.uk/2009/07/05/nike-api-revisited/' rel='bookmark' title='Permanent Link: Nike+ API Revisited'>Nike+ API Revisited</a></li>
<li><a href='http://www.wroolie.co.uk/2009/07/28/runkeeper-vs-nike/' rel='bookmark' title='Permanent Link: RunKeeper vs. Nike+'>RunKeeper vs. Nike+</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.wroolie.co.uk/2008/05/05/13/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>MyGeneration &#8211; a timesaver</title>
		<link>http://www.wroolie.co.uk/2008/03/31/16/</link>
		<comments>http://www.wroolie.co.uk/2008/03/31/16/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 20:15:10 +0000</pubDate>
		<dc:creator>Eric Wroolie</dc:creator>
				<category><![CDATA[C# Coding]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.wroolie.co.uk/PermaLink.aspx?guid=2658e884-9048-4d6a-8fb5-16dff4c85e53</guid>
		<description><![CDATA[Code Generators are nothing new.  I played around with Codesmith back before they started charging $200 for it and have looked into some of the codegen tools on sourceforge but was generally unimpressed.  Most lacked enough documentation to really customise anything.
I even tried some of the high-end tools like Tier Developer which costs [...]


Related posts:<ol><li><a href='http://www.wroolie.co.uk/2007/06/20/50/' rel='bookmark' title='Permanent Link: The Seduction of a Microsoft Access project'>The Seduction of a Microsoft Access project</a></li>
<li><a href='http://www.wroolie.co.uk/2009/06/08/creating-a-daily-database-backup-for-mysql-and-self-hosted-wordpress-blogs/' rel='bookmark' title='Permanent Link: Creating a daily Database backup for MySql (and self-hosted Wordpress blogs)'>Creating a daily Database backup for MySql (and self-hosted Wordpress blogs)</a></li>
<li><a href='http://www.wroolie.co.uk/2009/01/28/nike-c-code/' rel='bookmark' title='Permanent Link: Nike+ C# code'>Nike+ C# code</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Code Generators are nothing new.  I played around with Codesmith back before they started charging $200 for it and have looked into some of the codegen tools on sourceforge but was generally unimpressed.  Most lacked enough documentation to really customise anything.</p>
<p>I even tried some of the high-end tools like Tier Developer which costs $1k and provided everything but the kitchen sink.  You can download it for the trial, but it requires a steep learning curve to customise and you actually get a salesman call you up on the phone.</p>
<p>If you've never used a code generator, it's basically an application that spits out code based on collections you pass it.  Most of the time, it's a database structure.  You design your database, point your code generator at it, and select which tables you want to use.  The template will create some output files for you based on what you select.  For example, I selected five tables and used a code generator to create my CRUD stored proc files.  I select a directory to output to and the code generators put the files there.  I can then run these files against a database or include them in a Visual Studio database project.  Since this is a one-shot generation, I can freely modify these files after they've been created.</p>
<p>I first looked at MyGeneration a few months ago.  Like most of the cool new tools, I thought about all the cool things I could do with it-- then I moved on to something else.</p>
<p>Today I started automating some of my Model classes using it.  So I got to really use it in anger.  Here are the things I really like about it:</p>
<ol>
<li>
<ol>
<li>It's free.</li>
<li>There is a huge template library</li>
<li>Tempates can be written in VBScript-- so no new languages to learn.</li>
</ol>
</li>
</ol>
<p>Every time I look through a template library for a code generator, I get some really ambitious code.  Everyone wants to generate all of your stored procs, data access layers, business objects, and test cases.  I usually just want something simple like business logic layer.  With this tool, it's easy to write your own.</p>
<p>In a few hours, I wrote code to generate all of my interfaces and model objects.  Since it was vbs, it was just like writing a classic asp page.  I just looped through all the tables and created the beginning of my business objects:</p>
<pre class="csharpcode">&lt;%

'******************************Class File*************************************
%&gt;
<span class="preproc">#region</span> headerblock
<span class="rem">// Filename : &lt;%=tableName%&gt;.cs</span>
<span class="rem">// Change history</span>
<span class="rem">// date            version: author : description of change</span>
<span class="rem">// &lt;%=Now()%&gt;    &lt;%=vbtab%&gt;0.1    &lt;%=vbtab%&gt;&lt;%=input.Item("txtDeveloperName")%&gt;    &lt;%=vbtab%&gt;Object Created</span>

<span class="preproc">#endregion</span>

<span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Data;
<span class="kwrd">using</span> System.Collections;

<span class="kwrd">namespace</span> &lt;%= TrimSpaces(<span class="kwrd">namespace</span>) %&gt;
{
    <span class="kwrd">public</span> <span class="kwrd">class</span> &lt;%=tableName %&gt; : I&lt;%=tableName %&gt;
    {

        <span class="kwrd">public</span> &lt;%= tableName %&gt;()
        {

        }

        <span class="preproc">#region</span> Internals
        &lt;% For Each objColumn <span class="kwrd">in</span> objTable.Columns %&gt;
            <span class="kwrd">private</span> &lt;%=objColumn.LanguageType%&gt; &lt;%=InternalVariableName(objColumn,<span class="kwrd">true</span>)%&gt;;&lt;%Next%&gt;
        <span class="preproc">#endregion</span>

        <span class="preproc">#region</span> Properties
        &lt;% For Each objColumn <span class="kwrd">in</span> objTable.Columns
        %&gt;
            <span class="kwrd">public</span> &lt;%=objColumn.LanguageType%&gt; &lt;%=InternalVariableName(objColumn,<span class="kwrd">false</span>)%&gt; {
                get
                {
                    <span class="kwrd">return</span>  &lt;%=InternalVariableName(objColumn,<span class="kwrd">true</span>)%&gt;;
                }
                set
                {
                     &lt;%=InternalVariableName(objColumn,<span class="kwrd">true</span>)%&gt; = <span class="kwrd">value</span>;
                }
            }
        &lt;%Next%&gt;
        <span class="preproc">#endregion</span>

    }
}
&lt;%
    call SaveFile(tableName,input.item(<span class="str">"txtPath"</span>))

%&gt;</pre>
<p>One of the most tedious aspects of creating a model project is generating this code. Sure, I need to modify this further and I will probably normalise the database further--but this gives me a decent start and saves a few hours.  I can also use this to generate the very basic unit tests (ie.  can I create the object?  Do all of the properties match?, etc).</p>
<p>It's definitely a tool to check out.  It's a lot more fun to create your own template (or modify an existing one) than it is to use what's given to you.</p>
<p>You can find MyGeneration at : <a title="http://www.mygenerationsoftware.com" href="../ct.ashx?id=2658e884-9048-4d6a-8fb5-16dff4c85e53&amp;url=http%3a%2f%2fwww.mygenerationsoftware.com">http://www.mygenerationsoftware.com</a></p>
<p>I was tempted to title this post "Talking 'bout MyGeneration" but I fought back the urge.</p>
<pre class="csharpcode"></pre>


<p>Related posts:<ol><li><a href='http://www.wroolie.co.uk/2007/06/20/50/' rel='bookmark' title='Permanent Link: The Seduction of a Microsoft Access project'>The Seduction of a Microsoft Access project</a></li>
<li><a href='http://www.wroolie.co.uk/2009/06/08/creating-a-daily-database-backup-for-mysql-and-self-hosted-wordpress-blogs/' rel='bookmark' title='Permanent Link: Creating a daily Database backup for MySql (and self-hosted Wordpress blogs)'>Creating a daily Database backup for MySql (and self-hosted Wordpress blogs)</a></li>
<li><a href='http://www.wroolie.co.uk/2009/01/28/nike-c-code/' rel='bookmark' title='Permanent Link: Nike+ C# code'>Nike+ C# code</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.wroolie.co.uk/2008/03/31/16/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hanselman&#8217;s Ultimate Toolkit Post</title>
		<link>http://www.wroolie.co.uk/2007/08/27/36/</link>
		<comments>http://www.wroolie.co.uk/2007/08/27/36/#comments</comments>
		<pubDate>Mon, 27 Aug 2007 08:06:05 +0000</pubDate>
		<dc:creator>Eric Wroolie</dc:creator>
				<category><![CDATA[C# Coding]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.wroolie.co.uk/PermaLink.aspx?guid=33bd88a3-62bd-4da2-93c6-177bc5208eb6</guid>
		<description><![CDATA[For the past few years, Scott Hanselman has been posting his list of Ultimate Developer tools on his blog. If you are into .Net development, it is definitely worth a look. Check out http://www.hanselman.com/tools.
Some of the tools he mentions are tools that I've started using over the past year. Others are tools I plan on [...]


Related posts:<ol><li><a href='http://www.wroolie.co.uk/2007/04/21/59/' rel='bookmark' title='Permanent Link: Microsoft Silverlight'>Microsoft Silverlight</a></li>
<li><a href='http://www.wroolie.co.uk/2007/06/23/49/' rel='bookmark' title='Permanent Link: I&#8217;m a Firefox Convert &#8212; finally'>I&#8217;m a Firefox Convert &#8212; finally</a></li>
<li><a href='http://www.wroolie.co.uk/2006/10/13/89/' rel='bookmark' title='Permanent Link: WPF and XAML'>WPF and XAML</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>For the past few years, Scott Hanselman has been posting his list of Ultimate Developer tools on his blog. If you are into .Net development, it is definitely worth a look. Check out <a href="../ct.ashx?id=33bd88a3-62bd-4da2-93c6-177bc5208eb6&amp;url=http%3a%2f%2fwww.hanselman.com%2ftools">http://www.hanselman.com/tools</a>.</p>
<p>Some of the tools he mentions are tools that I've started using over the past year. Others are tools I plan on using very soon. My favourite tools to date are <a href="../ct.ashx?id=33bd88a3-62bd-4da2-93c6-177bc5208eb6&amp;url=http%3a%2f%2fwww.fiddlertool.com%2f">Fiddler</a>, Web Developer for Firefox, and <a href="../ct.ashx?id=33bd88a3-62bd-4da2-93c6-177bc5208eb6&amp;url=http%3a%2f%2fwatintestrecord.sourceforge.net%2f">WatIn Test Recorder</a>. Most of the items on the list are freeware or open source and none are available as part of the standard Microsoft Suite of controls.</p>


<p>Related posts:<ol><li><a href='http://www.wroolie.co.uk/2007/04/21/59/' rel='bookmark' title='Permanent Link: Microsoft Silverlight'>Microsoft Silverlight</a></li>
<li><a href='http://www.wroolie.co.uk/2007/06/23/49/' rel='bookmark' title='Permanent Link: I&#8217;m a Firefox Convert &#8212; finally'>I&#8217;m a Firefox Convert &#8212; finally</a></li>
<li><a href='http://www.wroolie.co.uk/2006/10/13/89/' rel='bookmark' title='Permanent Link: WPF and XAML'>WPF and XAML</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.wroolie.co.uk/2007/08/27/36/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
