<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Andrew Theken&#039;s C# Blog</title>
	<atom:link href="http://atheken.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://atheken.wordpress.com</link>
	<description>A public place for internal thoughts.</description>
	<lastBuildDate>Sun, 11 Jul 2010 01:15:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='atheken.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Andrew Theken&#039;s C# Blog</title>
		<link>http://atheken.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://atheken.wordpress.com/osd.xml" title="Andrew Theken&#039;s C# Blog" />
	<atom:link rel='hub' href='http://atheken.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Happy Birthday, Zach</title>
		<link>http://atheken.wordpress.com/2010/07/10/happy-birthday-zach/</link>
		<comments>http://atheken.wordpress.com/2010/07/10/happy-birthday-zach/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 01:12:01 +0000</pubDate>
		<dc:creator>Andrew Theken</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://andrewtheken.com/?p=80</guid>
		<description><![CDATA[This is just a bit of a nostalgic rambling about one of my life-long friends and how we get to where we are. As is probably apparent if you&#8217;ve read any of my blog posts. I&#8217;ve been fascinated with personal computers for a large part of my life. I&#8217;ve had an obsession with them and their [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=80&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is just a bit of a nostalgic rambling about one of my life-long friends and how we get to where we are.</p>
<p>As is probably apparent if you&#8217;ve read any of my blog posts. I&#8217;ve been fascinated with personal computers for a large part of my life. I&#8217;ve had an <em>obsession</em> with them and their power to change my life&#8230;</p>
<p>Starting with this:</p>
<p style="text-align:center;"><img class="aligncenter" title="Apple IIe" src="http://upload.wikimedia.org/wikipedia/commons/b/b4/Apple_iie.jpg" alt="" width="252" height="336" /></p>
<p>This is a story of how the Apple IIe changed my life.</p>
<p>One of my best friends, Zach, and I used to out-nerd each other in the computer lab of our grade school. Zach&#8217;s parents were newspaper folks. So they (and naturally, Zach) lived, breathed, and loved their Macs. I was solidly on the I-B-M side of the line.</p>
<p>The computer lab consisted of about 25 Apple IIe machines, a Mac Powerbook, and an IBM PC. Zach and I were the only two kids that were big enough dorks to be allowed to touch the PowerBook or the PC &#8211; which sucked in middle school, but has paid off handsomely in our &#8220;old age.&#8221;</p>
<p>So, that was the state of things in 1992, I continued on my path being a PC sympathizer, and Zach stayed in the Mac camp. We had mutual respect for one another. Zach has even used a PC when he had to (although, I cannot say I was so open-minded).</p>
<p style="text-align:center;"><img class="aligncenter" title="Zach and Andrew (ca. 2000)" src="http://i289.photobucket.com/albums/ll239/JWnPooh/Hottest%20Hunks%203/article_LewisGilbert.jpg" alt="" width="400" height="591" /></p>
<p style="text-align:center;">Andrew &amp; Zach, ca. 2000</p>
<p>There were times when we disagreed on things, and I was not always the best friend in the high school years. Looking back, there are any number of paths our lives could have taken. I could have been sick the day that Zach showed up in 4th grade. Zach could have decided that my disdain for Macs was too much to bear. But as it turns out, we&#8217;ve been friends for almost 20 years, and outside of my wife, there is no one else on this planet that I trust as much as Zach. I sometimes wonder what other directions our lives might have gone, but I am mostly thankful for the way they&#8217;ve turned out so far.</p>
<p>Happy Birthday Zach.</p>
<p>P.S. Zach did <em>eventually</em> win the little Mac battle, but that&#8217;s another blog post.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/atheken.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/atheken.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/atheken.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/atheken.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/atheken.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/atheken.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/atheken.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/atheken.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/atheken.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/atheken.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/atheken.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/atheken.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/atheken.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/atheken.wordpress.com/80/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=80&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://atheken.wordpress.com/2010/07/10/happy-birthday-zach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>36.001600 -78.900533</georss:point>
		<geo:lat>36.001600</geo:lat>
		<geo:long>-78.900533</geo:long>
		<media:content url="http://0.gravatar.com/avatar/2891c339d01aacb98398372ae3809bfa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">atheken</media:title>
		</media:content>

		<media:content url="http://upload.wikimedia.org/wikipedia/commons/b/b4/Apple_iie.jpg" medium="image">
			<media:title type="html">Apple IIe</media:title>
		</media:content>

		<media:content url="http://i289.photobucket.com/albums/ll239/JWnPooh/Hottest%20Hunks%203/article_LewisGilbert.jpg" medium="image">
			<media:title type="html">Zach and Andrew (ca. 2000)</media:title>
		</media:content>
	</item>
		<item>
		<title>Why you should write comments before code.</title>
		<link>http://atheken.wordpress.com/2010/06/12/why-you-should-write-comments-before-code/</link>
		<comments>http://atheken.wordpress.com/2010/06/12/why-you-should-write-comments-before-code/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 19:36:50 +0000</pubDate>
		<dc:creator>Andrew Theken</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://andrewtheken.com/?p=57</guid>
		<description><![CDATA[Every line of code makes perfect sense while you're writing it. Really good code will make sense to other people with a little bit of explanation. Great code is that which can be understood by your future self, and the people that follow you. Why not hedge your bets and provide some good documentation.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=57&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve blogged before that I think the way a developer names blocks of their code says a lot about their experience, not only in a particular platform, but also what they know about the Software Development Life Cycle.</p>
<p>But I don&#8217;t want to rehash that.</p>
<p>Today, I want to talk about when and why to comment.</p>
<p>When I create a new class definition, I typically try to add a summary comment right then. I also expect this of my team members. It may seem pedantic, but there&#8217;s a very good reason for it.</p>
<p>Expressing in English* the intent of the class tends to help me clarify the Single Responsibility that I have for that class. If I find that I have trouble specifying the expected behavior of a class in the summary, that generally means I don&#8217;t have the plan for why/how/when I need to use that class.</p>
<p>If I find I need a paragraph to explain the purpose of the class, it might be doing too much.</p>
<blockquote><p>Doing too much is bad.</p></blockquote>
<p>So, when I find that this is the case, I look to see which parts of the summary should be broken out &#8212; those breakouts typically fall along class definition lines, and before I know it, I can summarize most classes in one or two sentences, and the only do as much as they should.</p>
<blockquote><p>Only doing as much as you should is &#8220;A Good Thing.&#8221;</p></blockquote>
<p>The other benefit is that my colleagues can take a look at my code and understand large blocks without digging though and inspecting each member of the class. Truly, that was the point of OOP. Rather than trying to explain <em>how</em> each block of code works (inline comments), explain <em>why</em> each block of code exists (first-class documentation).</p>
<p>This rule of thumb works the same for members of a class. If you can type out a sentence explaining what you&#8217;re trying to do, there&#8217;s a much better chance that you will actually do that thing. There&#8217;s even a good chance that you&#8217;ll be able to identify things that are leaking in and shouldn&#8217;t be.</p>
<p>If When your code has gotchas, these should be outlined in the  block, or the  blocks. This is your chance to explain yourself. Do you need that string to be formatted just so? Do you return something in a particular order? What do you expect from consumers?</p>
<p><em>While I&#8217;m on this subject, please don&#8217;t just fill out comments to make the compiler warnings go away. That&#8217;s just a waste of your time.</em>. I am aware of a particular tool that provides <em>phantom summaries;</em> summaries that are there, but have no substance. The intentions were good, but it entirely misses the point.</p>
<p>Imagine you bought a dictionary and all of the definitions used the word in the definition.</p>
<blockquote><p><strong>Definition:</strong> <em>A sentence that defines something</em>.</p></blockquote>
<p>C# and Java both have great documentation support, I believe that other languages/platforms have started to make these summary-type comment sections closer to &#8220;first-class citizens,&#8221; so your reasons for not commenting code is dwindling.</p>
<p>I&#8217;ll leave you with this: Every line of code makes perfect sense while you&#8217;re writing it. Really good code will make sense to other people with a little bit of explanation. Great code is that which can be understood by your future self, and the people that follow you. Why not hedge your bets and provide some good documentation to make your good code, great code.</p>
<p><em> * It doesn&#8217;t have to be English, the first language of your team is best for these comments.</em></p>
<br /> Tagged: <a href='http://atheken.wordpress.com/tag/c/'>C#</a>, <a href='http://atheken.wordpress.com/tag/dotnet/'>dotnet</a>, <a href='http://atheken.wordpress.com/tag/programming/'>programming</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/atheken.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/atheken.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/atheken.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/atheken.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/atheken.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/atheken.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/atheken.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/atheken.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/atheken.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/atheken.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/atheken.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/atheken.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/atheken.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/atheken.wordpress.com/57/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=57&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://atheken.wordpress.com/2010/06/12/why-you-should-write-comments-before-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>36.001600 -78.900533</georss:point>
		<geo:lat>36.001600</geo:lat>
		<geo:long>-78.900533</geo:long>
		<media:content url="http://0.gravatar.com/avatar/2891c339d01aacb98398372ae3809bfa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">atheken</media:title>
		</media:content>
	</item>
		<item>
		<title>The &#8220;Named Generic&#8221; Anti-pattern</title>
		<link>http://atheken.wordpress.com/2010/06/06/the-named-generic-anti-pattern/</link>
		<comments>http://atheken.wordpress.com/2010/06/06/the-named-generic-anti-pattern/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 12:39:08 +0000</pubDate>
		<dc:creator>Andrew Theken</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">https://atheken.wordpress.com/?p=61</guid>
		<description><![CDATA[WARNING: This is me standing on my soapbox, and if you don&#8217;t think I&#8217;m right, leave a comment. (Also, if you&#8217;re familiar with SOLID, this may seem obvious to you). When it comes to code, I&#8217;m pretty particular about how things are named. To me, naming both classes and class members is one of the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=61&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>WARNING: This is me standing on my soapbox, and if you don&#8217;t think I&#8217;m right, leave a comment. (Also, if you&#8217;re familiar with SOLID, this may seem obvious to you).</p>
<p>When it comes to code, I&#8217;m pretty particular about how things are named. To me, naming both classes and class members is one of the fine arts of software development. I actually think that this can demonstrate quite a bit about someone&#8217;s experience, what they understand about the software development life cycle, and ultimately, they conceptual understanding of Object-oriented design. That&#8217;s why this particular &#8220;code smell&#8221; bothers me so much.</p>
<p>I&#8217;ll call it the &#8220;Named Generic&#8221; pattern.</p>
<p>we&#8217;ve all seen it. A developer wanted to specify a typed parameter, but missed the boat.</p>
<p>For example:</p>
<blockquote><p><code>public RecallList GetRecalls(AutoMakersList automakers)<br />
{<br />
// do something useful with each automaker and yield the recalls associated with them.<br />
}</code></p></blockquote>
<p>So far, this code isn&#8217;t bad. We have a decent method name, the parameter name is ok, but what are the two type definitions here:</p>
<blockquote><p><code>public class AutoMakersList : List{ /*no body*/ }<br />
public class RecallList : List{ /*no body*/ }</code></p></blockquote>
<p>Uh oh.</p>
<p>With two classes I have simultaneously reduced flexibility, and increased complexity. From the perspective of the consumer of this method, I now have to marshal a set of strings, then add them to a new class called AutoMakersList, which I had to search out and attempt to understand.</p>
<p>From the API designer&#8217;s perspective, I&#8217;ve placed some requirement on what is legal to pass in. Except I haven&#8217;t. The list is still of string, and the last time I checked, there were no validation methods on string that validate they are auto maker&#8217;s names (C# 5.0, maybe?). So I&#8217;ve really just obfuscated what I wanted to happen, which was this:</p>
<blockquote><p>&#8220;hand me an enumerable of validated automakers&#8221;</p></blockquote>
<p>The same could be done with this method signature:</p>
<blockquote><p><code>///&lt;summary&gt;This will produce the recalls associated with the specified automakers.&lt;/summary&gt;<br />
///&lt;param name="automakers"&gt;This is a pre-validated set of automakers for which recalls<br />
/// will be retrieved. Valid automakers follow these rules: .....<br />
///&lt;/param&gt;<br />
public RecallList GetRecalls(IEnumerable automakers)<br />
{<br />
//iterate over each automaker, and do something interesting to yield out their recalls<br />
}</code></p></blockquote>
<p>In Visual Studio (and perhaps MonoDevelop?), I&#8217;ve now told the API consumer what I expect, they will get it intellisense when they&#8217;re constructing the call. Whereas, if I just told you to hand me an AutoMakersList, there&#8217;s ambiguity in what is required. A side note is that Code Contracts are very helpful, and you should consider using them anyway, but that&#8217;s not the point of this post. The other benefit of this approach is that I&#8217;ve reduced the calling requirements on this method. The above example is actually not done yet, and here&#8217;s where it will *seem* like I&#8217;m contradicting my point, but I&#8217;m not, really.. really.</p>
<blockquote><p><code>public RecallList GetRecalls(IEnumerable automakers)<br />
{<br />
//do something interesting.<br />
}</code></p>
<p><code> </code><code>public class Automaker<br />
{<br />
public String Name{get; set;}<br />
public bool IsValid(){return valid;}<br />
}</code></p></blockquote>
<p>Instead of passing in just a a list of string, why not pass in &#8220;Automaker?&#8221; On the surface, it seems very much like just passing a simple String, the difference is that I have attached the context explicitly to the Name property, instead of implicitly from the name of the collection in which the object was stored. Let that marinate in your brain for a minute. They&#8217;re actually radically different concepts, one of them works, and IMHO, one of them doesn&#8217;t.</p>
<p>Part two&#8230;</p>
<p>&#8220;RecallList&#8221;</p>
<p>Here, the API designer got it half right. The the context for each recall is explicitly attached to the object that cares &#8212; &#8220;Recall&#8221;, but RecallList doesn&#8217;t actually add any value, it essentially says &#8220;this is a list of Recall&#8221;, which is the same thing as what &#8220;List&#8221; says, in a much more concise way. Although I think Classes are *cheap* *cheap* *cheap* and people are too often reluctant to add them, in this case &#8220;RecallList&#8221; is just *redundant* *redundant*.</p>
<p>Finally, passing a list in or out adds extra overhead that neither the API designer or the caller needs. In both cases, List places extra requirements on either side of the call, when really everyone meant to say, &#8220;here&#8217;s a set of something that you can read through. (IEnumerable)&#8221; When we apply all of these suggestions together, this is the method we&#8217;re left with:</p>
<blockquote><p><code>///&lt;summary&gt;This will produce the recalls associated with the specified automakers.&lt;/summary&gt;<br />
///&lt;param name="automakers"&gt;This is a set of automakers for which recalls will be retrieved.&lt;/param&gt;<br />
public IEnumerable GetRecalls(IEnumerable automakers)<br />
</code><span style="font-family:monospace;">{</span></p>
<p><code> // iterate over each automaker, use the "IsValid()" method to determine if it should be processed,<br />
// and do something interesting to yield out the recalls<br />
}</code></p></blockquote>
<p>As I said at the beginning of the post, if you&#8217;re familiar with SOLID, most of this post will make good sense to you, but I wanted to try to put it in a context of code you&#8217;ve probably seen. Let me know what you think in the comments.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/atheken.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/atheken.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/atheken.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/atheken.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/atheken.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/atheken.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/atheken.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/atheken.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/atheken.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/atheken.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/atheken.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/atheken.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/atheken.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/atheken.wordpress.com/61/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=61&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://atheken.wordpress.com/2010/06/06/the-named-generic-anti-pattern/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<georss:point>36.001600 -78.900533</georss:point>
		<geo:lat>36.001600</geo:lat>
		<geo:long>-78.900533</geo:long>
		<media:content url="http://0.gravatar.com/avatar/2891c339d01aacb98398372ae3809bfa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">atheken</media:title>
		</media:content>
	</item>
		<item>
		<title>NoRM: A fantastic friction-free interface to MongoDB</title>
		<link>http://atheken.wordpress.com/2010/05/23/introducing-norm/</link>
		<comments>http://atheken.wordpress.com/2010/05/23/introducing-norm/#comments</comments>
		<pubDate>Sun, 23 May 2010 14:21:04 +0000</pubDate>
		<dc:creator>Andrew Theken</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[C# .Net]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[NoRM]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[mongodb]]></category>

		<guid isPermaLink="false">http://andrewtheken.com/?p=44</guid>
		<description><![CDATA[As promised in my previous post, I am going to introduce you to a project that I&#8217;ve been working on with a great team of people on GitHub. NoRM is a .net library to interact with the document-oriented database MongoDB. We set about doing this in a way that makes sense for the C# developer [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=44&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As promised in my <a href="http://andrewtheken.com/2010/02/26/no-sql-no-problems-or-mo-sql-mo-problems/">previous post</a>, I am going to introduce you to a project that I&#8217;ve been working on with a great team of people on <a href="http://www.github.com/atheken/norm" target="_blank">GitHub</a>.</p>
<p>NoRM is a .net library to interact with the document-oriented database <a href="http://www.mongodb.com" target="_blank">MongoDB</a>. We set about doing this in a way that makes sense for the C# developer who doesn&#8217;t want to spend an inordinate amount of time configuring the database. As you&#8217;ll see in a moment, with NoRM, there&#8217;s very little you need to do to get started with MongoDB.</p>
<p>NoRM stands for &#8220;No Object-Relational Mapping&#8221; &#8211; it seems that people are concerned about leaving relational databases because they&#8217;ll lose the low-friction environments they&#8217;ve come to expect (think &#8216;LINQ-to-SQL&#8217;). Another concern around moving to a NoSQL option is the notion that these datastores carry little or no structure. By creating a strongly-typed interface to MongoDB, I feel that we have addressed both of these concerns.</p>
<p>So, just to whet your appetite, here&#8217;s an example of how you&#8217;d use NoRM to store some widgets.</p>
<blockquote>
<pre>//First, define your document (this can be very similar to your concept of "Model" -- notice there's no special attributes or configuration.)
public class Widget
{
public ObjectId Id {get;set;}
public String Color {get;set;}
public double Price {get;set;}
public DateTime ReleaseDate {get;set;}
public IEnumerable Reviews {get;set;}
}
//Next, spool up a connection to your database 
//(The DB doesn't have to exist yet, but MongoDB DOES need to be running)
using(var db = Mongo.Create("mongo://localhost/ProductDB")
{

//Get a reference to the collection in which we want to 
//store our Widgets (doesn't have to exist yet.)
var widgets = db.GetCollection();

//create a widget instance.
var topSellingWidget = new Widget{ Id = ObjectId.NewObjectId(), Color = "Red", Price = 39.95,
ReleaseDate = DateTime.Now, Reviews = Enumerable.Empty() };

//now, save the instance
widgets.Save(topSellingWidget);

//lastly, retrieve it from the DB.
var hydratedTopSellingWidgetFromDB = widgets.FindOne(new {Color = "Red",Price = 39.95});
}</pre>
</blockquote>
<p>That&#8217;s just a taste of the simplicity that is NoRM, there&#8217;s a huge amount of functionality that I&#8217;m not covering including:</p>
<ul>
<li>Fluent configuration</li>
<li>Solid LINQ support</li>
<li>Advanced update capabilities (update single or multiple documents that match template documents)</li>
<li>Map/Reduce functionality.</li>
<li>Support for MongoDB operators via the &#8220;Q&#8221; (Qualifiers) and &#8220;M&#8221; (Modifiers) classes.</li>
<li>If you need it, &#8220;Weakly-typed&#8221; interaction via the &#8220;Expando&#8221; class.</li>
<li>Bulk-insert capability (a la SqlBulkCopy)</li>
</ul>
<p>Aside from actual &#8220;features&#8221;, there are lots of elements that make software good, here&#8217;s a few things I think make NoRM awesome:</p>
<ul>
<li><strong>Tests</strong>: We have more than 400 tests that verify the functionality found in NoRM, and although we have just reached the v0.9.0 milestone, the library is very stable, and I am aware of production deployments using NoRM, today.</li>
<li><strong>Participation</strong>: I started NoRM in the last few days of January 2010, and have seen incredible participation from the Open Source community &#8211; I&#8217;ve learned a lot about what people do &#8212; and don&#8217;t &#8212; need in a library, and some of the interesting pieces of helping to shape an Open Source project (hopefully I can share that in another blog post). We have a vibrant community at <a title="Google Groups" href="http://github.com/atheken/NoRM/zipball/v0.9.0" target="_blank">http://groups.google.com/group/norm-mongodb</a>.</li>
<li><strong>Pragmatism and Experience</strong>: I am routinely impressed by the ideas and code that the project&#8217;s contributors bring forward.</li>
</ul>
<p>Please download and use the library:</p>
<ul>
<li>Stable Milestone: <a title="Stable v0.9.0 milestone." href="http://github.com/atheken/NoRM/zipball/v0.9.0" target="_blank">http://github.com/atheken/NoRM/zipball/v0.9.0</a>,</li>
<li>Project Page (the master branch will always &#8220;Stable&#8221;): <a title="GitHub Project Page" href="http://github.com/atheken/norm" target="_blank">http://github.com/atheken/norm</a>.</li>
</ul>
<p>Remember that we want NoRM to be the best C# driver for MongoDB possible, so please give us feedback, either in the <a title="Google Group" href="http://groups.google.com/group/norm-mongodb" target="_blank">Google Group</a> or follow me on twitter (<a title="@atheken" href="http://www.twitter.com/atheken" target="_blank">@atheken</a>).</p>
<p>Cheers.</p>
<br /> Tagged: <a href='http://atheken.wordpress.com/tag/c/'>C#</a>, <a href='http://atheken.wordpress.com/tag/dotnet/'>dotnet</a>, <a href='http://atheken.wordpress.com/tag/mongodb/'>mongodb</a>, <a href='http://atheken.wordpress.com/tag/norm/'>NoRM</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/atheken.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/atheken.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/atheken.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/atheken.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/atheken.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/atheken.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/atheken.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/atheken.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/atheken.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/atheken.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/atheken.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/atheken.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/atheken.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/atheken.wordpress.com/44/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=44&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://atheken.wordpress.com/2010/05/23/introducing-norm/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<georss:point>36.001600 -78.900533</georss:point>
		<geo:lat>36.001600</geo:lat>
		<geo:long>-78.900533</geo:long>
		<media:content url="http://0.gravatar.com/avatar/2891c339d01aacb98398372ae3809bfa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">atheken</media:title>
		</media:content>
	</item>
		<item>
		<title>No SQL, No Problems (or: Mo&#8217; SQL, Mo&#8217; Problems)</title>
		<link>http://atheken.wordpress.com/2010/02/26/no-sql-no-problems-or-mo-sql-mo-problems/</link>
		<comments>http://atheken.wordpress.com/2010/02/26/no-sql-no-problems-or-mo-sql-mo-problems/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 01:04:12 +0000</pubDate>
		<dc:creator>Andrew Theken</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[NoRM]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://andrewtheken.com/?p=36</guid>
		<description><![CDATA[Let&#8217;s talk about NoSQL: If you&#8217;ve been following the latest trends in the .net world via reddit, twitter, or your favorite blogs, you&#8217;ve been seeing a great deal of chatter about a term called NoSQL. Some might even call it a &#8216;movement&#8217; but that scares me just a little bit &#8211; when things become &#8216;movements&#8217;, their [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=36&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Let&#8217;s talk about NoSQL:</strong></p>
<p>If you&#8217;ve been following the latest trends in the .net world via reddit, twitter, or your favorite blogs, you&#8217;ve been seeing a great deal of chatter about a term called <a href="http://en.wikipedia.org/wiki/Nosql" target="_blank">NoSQL</a>. Some might even call it a &#8216;movement&#8217; but that scares me just a little bit &#8211; when things become &#8216;movements&#8217;, their meanings become a bit nebulous. Here are a few cases where a &#8216;NoSQL&#8217; solution might be useful to you:</p>
<ul>
<li>You have a several multi-million row tables that each have foreign key relationships to one another, joins against these tables pound the server, but must return rapidly.</li>
<li>You have &#8220;jagged&#8221; datasets where each record has a different composition of fields and children, those children in turn have their own properties.</li>
<li>You need to find a root record based on a complex set of relations to other tables.</li>
</ul>
<p><strong>A New Hope:</strong></p>
<p>There are many NoSQL options out there right now, but for reasons that will become obvious very shortly, I am going to talk about one in particular: MongoDB. MongoDB is a &#8220;document-oriented&#8221; database written in c++ that stores your documents in a format called &#8220;BSON.&#8221; BSON is conceptually similar to JSON, but is a binary format that also explicitly carries type information.</p>
<p>Mongo has some nice features, including:</p>
<ul>
<li>Dynamic creation and allocation of databases and document collections (including the capability of having nested collections)</li>
<li>Ability to do deep-graph searches (i.e. locate documents based on child properties of the document)</li>
<li>Ability to execute arbitrary JavaScript functions for aggregation and as criteria of searching</li>
<li>Very few requirements on what can be inserted into a database</li>
<li>Support for regex searching.</li>
<li>Speed</li>
<li>&#8230;more&#8230;</li>
</ul>
<p>But you should be warned: MongoDB doesn&#8217;t make ACID guarantees. If you&#8217;re storing twitter updates, you&#8217;re probably ok, if you&#8217;re storing financial transactions, don&#8217;t use MongoDB.</p>
<p>But this is a blog about C# where we have strong &amp; static typing, we live and breath order in our daily lives (ha!). &#8220;Leave all that &#8216;No SQL&#8217; to those dirty Ruby hippies&#8221;, you say.</p>
<blockquote><p><em> Let me break it to you: NoSQL doesn&#8217;t mean NoStructure. </em></p></blockquote>
<p>To that end, I&#8217;ve been (with lots of help) incubating a project on GitHub called <a href="http://www.github.com/atheken/NoRM">NoRM</a>. In brief, NoRM is a library to connect to MongoDB using .Net (and Mono) and to query and hydrate documents into strongly &amp; statically-typed documents in a way that doesn&#8217;t make us C# developers queasy.</p>
<p>We still have a long way to go before a 1.0 release, but I think it&#8217;s important to point out some of the guys that have been most enthusiastic about this project (and contributed some great code and ideas) include:</p>
<p>James Avery<br />
Jason Alexander<br />
Rob Conery<br />
Nate Kohari<br />
Karl Seguin</p>
<p>These guys <em>really</em> know their stuff, and I am so happy to have them working on this with me. My next post will be about some of the design decisions we&#8217;ve made with NoRM and how you might use it (soon) in some of your own projects.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/atheken.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/atheken.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/atheken.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/atheken.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/atheken.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/atheken.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/atheken.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/atheken.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/atheken.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/atheken.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/atheken.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/atheken.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/atheken.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/atheken.wordpress.com/36/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=36&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://atheken.wordpress.com/2010/02/26/no-sql-no-problems-or-mo-sql-mo-problems/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<georss:point>36.001600 -78.900533</georss:point>
		<geo:lat>36.001600</geo:lat>
		<geo:long>-78.900533</geo:long>
		<media:content url="http://0.gravatar.com/avatar/2891c339d01aacb98398372ae3809bfa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">atheken</media:title>
		</media:content>
	</item>
		<item>
		<title>jQuery-ify your C#</title>
		<link>http://atheken.wordpress.com/2009/06/06/jquery-ify-your-c/</link>
		<comments>http://atheken.wordpress.com/2009/06/06/jquery-ify-your-c/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 15:56:00 +0000</pubDate>
		<dc:creator>Andrew Theken</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://atheken.wordpress.com/2009/06/06/jquery-ify-your-c</guid>
		<description><![CDATA[I love LINQ. It pretty much changes how I read/write code, here&#8217;s a quick extension method that you can use for your own purposes: public static class Utilities {   public static void Each&#60;T&#62;(this IEnumerable&#60;T&#62; enumerable, Action&#60;T&#62; lambda)   { foreach (T item in enumerable) { lambda.DynamicInvoke(item); } } } With the above, I can [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=27&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I love LINQ. It pretty much changes how I read/write code, here&#8217;s a quick extension method that you can use for your own purposes:</p>
<pre>public static class Utilities {        
   public static void Each&lt;T&gt;(this IEnumerable&lt;T&gt; enumerable, Action&lt;T&gt; lambda)        
   {
    foreach (T item in enumerable)
    {
     lambda.DynamicInvoke(item);
    }
   }
  }</pre>
<p>With the above, I can convert a block like this:</p>
<pre>foreach(var i in enumerableOfObjects)
{
  i.doSomethingInteresting();
}</pre>
<p>into something like this:</p>
<pre>   enumerableOfObjects.Each(i=&gt;i.doSomethingInteresting());</pre>
<p>If you&#8217;re using iteration frequently, this can be very helpful shorthand. Remember, you can also do multiline lambdas like the following.</p>
<p><span style="font-family:Consolas, Monaco, 'Courier New', Courier, monospace;line-height:18px;font-size:12px;white-space:pre;"> enumerableOfObjects.Each(i=&gt;{  i.doSomethingInteresting();  i.doSomethingElseInteresting(); });</span></p>
<p><span style="font-family:Consolas, Monaco, 'Courier New', Courier, monospace;line-height:18px;font-size:12px;white-space:pre;"><br />
</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/atheken.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/atheken.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/atheken.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/atheken.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/atheken.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/atheken.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/atheken.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/atheken.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/atheken.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/atheken.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/atheken.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/atheken.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/atheken.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/atheken.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=27&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://atheken.wordpress.com/2009/06/06/jquery-ify-your-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point>36.001600 -78.900533</georss:point>
		<geo:lat>36.001600</geo:lat>
		<geo:long>-78.900533</geo:long>
		<media:content url="http://0.gravatar.com/avatar/2891c339d01aacb98398372ae3809bfa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">atheken</media:title>
		</media:content>
	</item>
		<item>
		<title>Google Wave</title>
		<link>http://atheken.wordpress.com/2009/05/31/google-wave/</link>
		<comments>http://atheken.wordpress.com/2009/05/31/google-wave/#comments</comments>
		<pubDate>Sun, 31 May 2009 22:37:00 +0000</pubDate>
		<dc:creator>Andrew Theken</dc:creator>
				<category><![CDATA[wave newtech]]></category>

		<guid isPermaLink="false">http://atheken.wordpress.com/2009/05/31/google-wave</guid>
		<description><![CDATA[Having watched the Google Wave intro video. I am impressed. I think one of the greatest risks for Wave is that the idea may be so far ahead of its time that people won&#8217;t &#8220;get it.&#8221; There are a great number of people out there that are invested in private communications and the very idea [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=26&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Having watched the Google Wave intro video. I am impressed.</p>
<p>I think one of the greatest risks for Wave is that the idea may be so far ahead of its time that people won&#8217;t &#8220;get it.&#8221; There are a great number of people out there that are invested in private communications and the very idea of someone else editing their content (even if the audit history is there) will make them very uncomfortable.</p>
<p>When you think of Google&#8217;s position, it&#8217;s clear that they are so far ahead of the curve that they can take risks and put stuff like this out there &#8211; which allows them to change the rules and get buy-in.</p>
<p>I think most interestingly, Google is going to make this an open protocol &#8211; which is really the only way it can be successful. Think &#8216;http&#8217;, &#8216;ftp&#8217;, &#8216;smtp&#8217; all these protocols needed to be widely available for implementation or they would have failed. &#8216;</p>
<p>While we have incredible challenges in our time, looking at things like Google Wave that require us to rely and trust each other more (and create new efficient ways to share information), I can&#8217;t help but feel positive about what the future holds for us.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/atheken.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/atheken.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/atheken.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/atheken.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/atheken.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/atheken.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/atheken.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/atheken.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/atheken.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/atheken.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/atheken.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/atheken.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/atheken.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/atheken.wordpress.com/26/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=26&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://atheken.wordpress.com/2009/05/31/google-wave/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2891c339d01aacb98398372ae3809bfa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">atheken</media:title>
		</media:content>
	</item>
		<item>
		<title>Where I&#8217;m Coming From</title>
		<link>http://atheken.wordpress.com/2009/01/10/where-im-coming-from/</link>
		<comments>http://atheken.wordpress.com/2009/01/10/where-im-coming-from/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 17:34:00 +0000</pubDate>
		<dc:creator>Andrew Theken</dc:creator>
				<category><![CDATA[background]]></category>

		<guid isPermaLink="false">http://atheken.wordpress.com/2009/01/10/where-im-coming-from</guid>
		<description><![CDATA[For future reference, these are a few points about my life as a nerd. I&#8217;m a software developer for a small Software as a Service company in Durham, NC. We have a .Net Web Application. I&#8217;m still a software engineer, but 2009 got me, and so I have moved on to a large company that you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=25&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For future reference, these are a few points about my life as a nerd.</p>
<ul>
<li>I&#8217;m a software developer for a small Software as a Service company in Durham, NC. We have a .Net Web Application. I&#8217;m still a software engineer, but 2009 got me, and so I have moved on to a large company that you might have heard of. Still doing .net development fulltime.</li>
<li>I have a Bachelor of Science from Ohio State, but not in Math, Engineering, or C.S. I completed some coursework in C.S. at Ohio State, and did pretty well, this included Assembly, OOP, and a sequence called <a href="http://www.cse.ohio-state.edu/sce/rcpp/FAQ/Resolve_FAQ/index.htm">RESOLVE/C++</a>.</li>
<li>I have been using and abusing personal computers since I was 11 years old.</li>
<li>The vast majority of knowledge that I have about software development has come from work experience, and independent study (although, I credit RESOLVE with introducing me to many critically important C.S. concepts).</li>
<li>This post was <span style="font-style:italic;">going </span>to be part of an upcoming post, and I already <a href="http://en.wiktionary.org/wiki/refactor">refactored</a> it into this post, this might also tell you something about how I think about software.</li>
<li>I am passionate about using software to create efficiency, and improving the quality of life for myself and others.</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/atheken.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/atheken.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/atheken.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/atheken.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/atheken.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/atheken.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/atheken.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/atheken.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/atheken.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/atheken.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/atheken.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/atheken.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/atheken.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/atheken.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=25&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://atheken.wordpress.com/2009/01/10/where-im-coming-from/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>36.001600 -78.900533</georss:point>
		<geo:lat>36.001600</geo:lat>
		<geo:long>-78.900533</geo:long>
		<media:content url="http://0.gravatar.com/avatar/2891c339d01aacb98398372ae3809bfa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">atheken</media:title>
		</media:content>
	</item>
		<item>
		<title>Guitar Hero, World Tour</title>
		<link>http://atheken.wordpress.com/2008/12/27/guitar-hero-world-tour/</link>
		<comments>http://atheken.wordpress.com/2008/12/27/guitar-hero-world-tour/#comments</comments>
		<pubDate>Sat, 27 Dec 2008 07:20:00 +0000</pubDate>
		<dc:creator>Andrew Theken</dc:creator>
				<category><![CDATA[wii guitar_hero christmas]]></category>

		<guid isPermaLink="false">http://atheken.wordpress.com/2008/12/27/guitar-hero-world-tour</guid>
		<description><![CDATA[My Wife&#8217;s parents got us Guitar Hero, World Tour for the Wii. It Rocks! My only real complaint is that when you hit the drums, the &#8220;snapping&#8221; is a little louder than it ought to be. I really like it because it you really feel like you&#8217;re interacting with the game and it really responds [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=23&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My Wife&#8217;s parents got us Guitar Hero, World Tour for the Wii. It Rocks! My only real complaint is that when you hit the drums, the &#8220;snapping&#8221; is a little louder than it ought to be. I really like it because it you really feel like you&#8217;re interacting with the game and it really responds when you do things right (and when you do things wrong).</p>
<p>I hope you all had a happy and safe Christmas.</p>
<p>Rock On!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/atheken.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/atheken.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/atheken.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/atheken.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/atheken.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/atheken.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/atheken.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/atheken.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/atheken.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/atheken.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/atheken.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/atheken.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/atheken.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/atheken.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=23&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://atheken.wordpress.com/2008/12/27/guitar-hero-world-tour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2891c339d01aacb98398372ae3809bfa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">atheken</media:title>
		</media:content>
	</item>
		<item>
		<title>Exceptions</title>
		<link>http://atheken.wordpress.com/2008/12/18/exceptions/</link>
		<comments>http://atheken.wordpress.com/2008/12/18/exceptions/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 08:08:00 +0000</pubDate>
		<dc:creator>Andrew Theken</dc:creator>
				<category><![CDATA[C# .Net]]></category>

		<guid isPermaLink="false">http://atheken.wordpress.com/2008/12/18/exceptions</guid>
		<description><![CDATA[A neat post on how to handle exceptions and when to pass them up:http://fragmental.tw/2008/12/04/layers-and-exceptions/ Essentially, so long as you&#8217;ve told your client code that you might throw an exception of a certain type, it&#8217;s OK to throw it. I more or less agree, but I typically would rather send back a sane result from a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=22&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A neat post on how to handle exceptions and when to pass them up:<br /><a href="http://fragmental.tw/2008/12/04/layers-and-exceptions/" rel="nofollow">http://fragmental.tw/2008/12/04/layers-and-exceptions/</a></p>
<p>Essentially, so long as you&#8217;ve told your client code that you <i>might </i>throw an exception of a certain type, it&#8217;s OK to throw it. I more or less agree, but I typically would rather send back a sane result from a method. Maybe a post on that soon.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/atheken.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/atheken.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/atheken.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/atheken.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/atheken.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/atheken.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/atheken.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/atheken.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/atheken.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/atheken.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/atheken.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/atheken.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/atheken.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/atheken.wordpress.com/22/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atheken.wordpress.com&amp;blog=12166350&amp;post=22&amp;subd=atheken&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://atheken.wordpress.com/2008/12/18/exceptions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2891c339d01aacb98398372ae3809bfa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">atheken</media:title>
		</media:content>
	</item>
	</channel>
</rss>
