<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.stevenkuhn.net/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>stevenkuhn.net</title><link>http://www.stevenkuhn.net/</link><description>a special blend of windows, linux, and .net with a touch of randomness</description><generator>Graffiti CMS 1.3 Alpha (build 1.3.0.0)</generator><lastBuildDate>Sun, 22 Aug 2010 09:36:09 GMT</lastBuildDate><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.stevenkuhn.net/stevenkuhn" /><feedburner:info uri="stevenkuhn" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license><item><title>myLeagueTracker - Requirements and Initial Domain Design</title><link>http://feeds.stevenkuhn.net/~r/stevenkuhn/~3/W4iyMEa5c5Y/</link><pubDate>Tue, 27 Jul 2010 15:30:00 GMT</pubDate><guid isPermaLink="false">http://www.stevenkuhn.net/blog/myleaguetracker-requirements-and-initial-domain-design/</guid><dc:creator>Steven</dc:creator><slash:comments>2</slash:comments><category domain="http://www.stevenkuhn.net/blog/">Blog</category><description>&lt;p&gt;
	&lt;em&gt;This is an ongoing series on the development of &lt;a href="http://myleaguetracker.com"&gt;myLeagueTracker&lt;/a&gt;: an ASP.NET MVC web application that helps manage online FPS gaming leagues. You can &lt;a href="http://www.stevenkuhn.net/blog/my-personal-aspnet-mvc-development-series/"&gt;read my first post&lt;/a&gt; on this project to get more background information.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
	The first step to building an application that will manage online gaming leagues is was to come up with a list of basic requirements that it should perform. I thought of a few requirements that would get development started, but certainly not an exhaustive list:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		Manage games and leagues for a particular game.&lt;/li&gt;
	&lt;li&gt;
		Manage seasons for a league, teams for a season, and players on each team.&lt;/li&gt;
	&lt;li&gt;
		Create matches between teams and coordinate schedules, maps, and results for each match&lt;/li&gt;
	&lt;li&gt;
		Track wins, loses, ties for each team for any given season&lt;/li&gt;
	&lt;li&gt;
		Ability to view past season&amp;rsquo;s teams, scores, and players&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	While there are more things I want to add, I want to start small and iteratively add functionality over time. Using those requirements, I came up with the following domain designs:&lt;/p&gt;
&lt;p&gt;
	&lt;a href="http://www.stevenkuhn.net/files/media/image/WindowsLiveWriter/myLeagueTrackerRequirementsandInitialDom_12288/Leagues_4.png"&gt;&lt;img alt="Leagues" border="0" height="244" src="http://www.stevenkuhn.net/files/media/image/WindowsLiveWriter/myLeagueTrackerRequirementsandInitialDom_12288/Leagues_thumb_1.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Leagues" width="306" /&gt;&lt;/a&gt; &lt;a href="http://www.stevenkuhn.net/files/media/image/WindowsLiveWriter/myLeagueTrackerRequirementsandInitialDom_12288/Matches_6.png"&gt;&lt;img alt="Matches" border="0" height="244" src="http://www.stevenkuhn.net/files/media/image/WindowsLiveWriter/myLeagueTrackerRequirementsandInitialDom_12288/Matches_thumb_2.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Matches" width="219" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	As you can see, each one of those classes derives from a abstract base class called &lt;code&gt;Entity&amp;lt;int&amp;gt;&lt;/code&gt;. Using concepts I learned after reading a &lt;a href="http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202"&gt;couple&lt;/a&gt; &lt;a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/"&gt;books&lt;/a&gt; about &lt;a href="http://en.wikipedia.org/wiki/Domain-driven_design"&gt;Domain-driven design&lt;/a&gt;, each class in the model above is not defined solely by its attributes (definition of a Value Object) but instead by its identity (the basic definition of Entity). The code sample below shows that the entity base class and underlying interface contain an Id property which is used to compare equality between two objects of the same entity type.&lt;/p&gt;
&lt;pre class="brush: csharp"&gt;
public interface IEntity { }

public interface IEntity&amp;lt;T&amp;gt; : IEntity
{
	T Id { get; }
}

public abstract class Entity&amp;lt;T&amp;gt; : ObjectBase, IEntity&amp;lt;T&amp;gt;
{
	public T Id { get; private set; }
}&lt;/pre&gt;
&lt;p&gt;
	You may wonder what is the purpose of &lt;code&gt;ObjectBase&lt;/code&gt;. For now it has no implementation, but my next post will cover the details on making it provide the primary facilitation for comparing equality of both entities and value objects. Additional posts will also discuss the concepts of persistence with &lt;a href="http://community.jboss.org/wiki/NHibernateforNET"&gt;nHibernate&lt;/a&gt;, domain model validation with Data Annotations, unit testing, and the implementation of the UI layer involving &lt;a href="http://www.asp.net/mvc/whatisaspmvc"&gt;ASP.NET MVC 2&lt;/a&gt; and &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
	Feel free to leave questions and comments! :)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.stevenkuhn.net/~ff/stevenkuhn?a=W4iyMEa5c5Y:iDBwFWgOd1k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/stevenkuhn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.stevenkuhn.net/~ff/stevenkuhn?a=W4iyMEa5c5Y:iDBwFWgOd1k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/stevenkuhn?i=W4iyMEa5c5Y:iDBwFWgOd1k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.stevenkuhn.net/~ff/stevenkuhn?a=W4iyMEa5c5Y:iDBwFWgOd1k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/stevenkuhn?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/stevenkuhn/~4/W4iyMEa5c5Y" height="1" width="1"/&gt;</description><feedburner:origLink>http://www.stevenkuhn.net/blog/myleaguetracker-requirements-and-initial-domain-design/</feedburner:origLink></item><item><title>myLeagueTracker - My Personal ASP.NET MVC Development Series</title><link>http://feeds.stevenkuhn.net/~r/stevenkuhn/~3/B6M0NC1OF0I/</link><pubDate>Sun, 22 Nov 2009 16:00:00 GMT</pubDate><guid isPermaLink="false">http://www.stevenkuhn.net/blog/my-personal-aspnet-mvc-development-series/</guid><dc:creator>Steven</dc:creator><slash:comments>1</slash:comments><category domain="http://www.stevenkuhn.net/blog/">Blog</category><description>&lt;p&gt;&lt;em&gt;This will be an ongoing series on the development of &lt;a href="http://www.myleaguetracker.com/"&gt;myLeagueTracker&lt;/a&gt;: an ASP.NET MVC web application that helps manage online &lt;a href="http://en.wikipedia.org/wiki/First-person_shooter"&gt;First-person shooter&lt;/a&gt; (FPS) gaming leagues. As this is my first ASP.NET MVC application, this is a learning opportunity for me, and I hope that you find it helpful.&lt;/em&gt;&lt;/p&gt;  &lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;  &lt;p&gt;I am an avid computer gamer. Years ago a friend introduced me to Doom and I was hooked. Later it was Quake, Unreal Tournament, Team Fortress Classic, and Counter-Strike. Normally I would play online with a few friends in public servers. It wasn’t until Valve released Team Fortress 2 two years ago that I joined an online community and started playing in a semi-competitive league. Each week, teams of 6 or 7 players would be matched up to do battle with one another. It’s a fun experience involving wits and constantly changing strategies.&lt;/p&gt;  &lt;p&gt;The league uses spreadsheets to track and manage players, matches, maps played, and schedules. Of course, there had to be a better solution than a manual process like this. After searching for and finding no available open-source league management tool, I decided to write my own. I wanted to learn more about &lt;a href="http://www.asp.net/mvc/"&gt;ASP.NET MVC&lt;/a&gt;, TDD (&lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Test-driven development&lt;/a&gt;), and DDD (&lt;a href="http://en.wikipedia.org/wiki/Domain-driven_design"&gt;Domain-driven Design&lt;/a&gt;) anyway, so I thought this would be the perfect opportunity to learn something as well as provide something valuable to other gamers and developers alike.&lt;/p&gt;  &lt;h2 id="about_myleaguetracker"&gt;About myLeagueTracker&lt;/h2&gt;  &lt;p&gt;This morning I posted my first &lt;a href="http://blog.myleaguetracker.com/2009/11/22/welcome-to-the-home-for-fps-league-management/"&gt;post&lt;/a&gt; on a new blog for &lt;a href="http://www.myleaguetracker.com/"&gt;myLeagueTracker&lt;/a&gt;, a web application that will help FPS gaming communities manage their leagues. The introduction from that post says it well:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://www.myleaguetracker.com/"&gt;myLeagueTracker&lt;/a&gt; is an open-source ASP.NET MVC application currently in development which aims to provide tracking and management of the numerous facets in online &lt;a href="http://en.wikipedia.org/wiki/First-person_shooter"&gt;First-person shooter&lt;/a&gt; gaming leagues. With the ability to handle multiple leagues across any FPS game, myLeagueTracker will help bring versatile league management to gamers who want to concentrate on gaming and not trying to design their own system. Since I am a gamer myself, I hope to provide a system for gamers that is both flexible and easy to use.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2 id="development_series"&gt;Development Series&lt;/h2&gt;  &lt;p&gt;Development on &lt;a href="http://www.myleaguetracker.com/"&gt;myLeagueTracker&lt;/a&gt; is currently underway and I will continually work on it when I have the opportunity outside of my normal employment obligations. With that in mind, this is the first post in a continuing series about the programming aspects I am dealing with on this project. All the source code I write is licensed under the &lt;a href="http://www.apache.org/licenses/LICENSE-2.0"&gt;Apache License, Version 2.0&lt;/a&gt; and is currently available at myLeagueTracker’s &lt;a href="http://github.com/chartek/myleaguetracker"&gt;GitHub project site&lt;/a&gt;. I want these posts and this project to be resource to you as well as a learning experience for me. I will also be posting entries on the blog for myLeagueTracker which will contain general development progress and support posts geared more towards gamers that wish to use this tool. As always, feel free to send me feedback on either site as I am open to suggestions, comments, and questions. Thanks and enjoy!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.stevenkuhn.net/~ff/stevenkuhn?a=B6M0NC1OF0I:Wgty75-Mdng:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/stevenkuhn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.stevenkuhn.net/~ff/stevenkuhn?a=B6M0NC1OF0I:Wgty75-Mdng:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/stevenkuhn?i=B6M0NC1OF0I:Wgty75-Mdng:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.stevenkuhn.net/~ff/stevenkuhn?a=B6M0NC1OF0I:Wgty75-Mdng:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/stevenkuhn?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/stevenkuhn/~4/B6M0NC1OF0I" height="1" width="1"/&gt;</description><feedburner:origLink>http://www.stevenkuhn.net/blog/my-personal-aspnet-mvc-development-series/</feedburner:origLink></item><item><title>Migrated from Drupal to GitHub Pages</title><link>http://feeds.stevenkuhn.net/~r/stevenkuhn/~3/Dm1efCIzdhQ/</link><pubDate>Thu, 27 Aug 2009 15:00:00 GMT</pubDate><guid isPermaLink="false">http://www.stevenkuhn.net/blog/migrated-from-drupal-to-github-pages/</guid><dc:creator>Steven</dc:creator><slash:comments>2</slash:comments><category domain="http://www.stevenkuhn.net/blog/">Blog</category><description>&lt;p&gt;Last night I officially moved &lt;a href="http://www.stevenkuhn.net"&gt;stevenkuhn.net&lt;/a&gt; from my &lt;a href="http://www.linode.com"&gt;Linode&lt;/a&gt;-hosted &lt;a href="http://www.drupal.org"&gt;Drupal&lt;/a&gt; site over to &lt;a href="http://pages.github.com"&gt;GitHub Pages&lt;/a&gt;. Drupal is cool to set up and for more complicated sites it makes tasks easier to accomplish. However, for my simple technical blog, I found that certain simple things (such as attaching images to posts) were unnecessarily complicated. Yes, other systems are more geared for blogging (like &lt;a href="http://wordpress.org"&gt;WordPress&lt;/a&gt;), but after seeing GitHub Pages, I wanted to try a new approach.&lt;/p&gt;  &lt;p&gt;Unlike Drupal, WordPress, or other dynamically driven CMS/blogging engines out there, GitHub Pages serves only static html pages. There is no database. There is no server-side environment running like PHP or ASP.NET. While on the surface it may seem pretty insane not to use a dynamic site since static pages are exactly that, but that’s where the beauty of &lt;a href="http://github.com/mojombo/jekyll/tree/master"&gt;Jekyll&lt;/a&gt; comes in. What is Jekyll? A brief overview from Jekyll’s readme file:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Jekyll is a simple, blog aware, static site generator. It takes a template directory (representing the raw form of a website), runs it through &lt;a href="http://textile.thresholdstate.com/"&gt;Textile&lt;/a&gt; or &lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt; and &lt;a href="http://www.liquidmarkup.org/"&gt;Liquid&lt;/a&gt; converters, and spits out a complete, static website suitable for serving with Apache or your favorite web server. This is also the engine behind &lt;a href="http://pages.github.com"&gt;GitHub Pages&lt;/a&gt;, which you can use to host your project’s page or blog right here from GitHub.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I’m not going to dive into the details of Jekyll because there are &lt;a href="http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html"&gt;numerous&lt;/a&gt; &lt;a href="http://jarinheit.com/2009/02/16/simplified-blogging-with-github-pages-and-jekyll.html"&gt;sites&lt;/a&gt; &lt;a href="http://blog.new-bamboo.co.uk/2009/2/20/migrating-from-mephisto-to-jekyll"&gt;that&lt;/a&gt; &lt;a href="http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/"&gt;explain&lt;/a&gt; &lt;a href="http://matflores.com/2009/03/25/getting-started-with-jekyll.html"&gt;it&lt;/a&gt; &lt;a href="http://blog.envylabs.com/2009/08/publishing-a-blog-with-github-pages-and-jekyll/"&gt;already&lt;/a&gt;. However, a few advantages I like about Jekyll are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;No caching system is needed since there is no database. &lt;/li&gt;    &lt;li&gt;No longer tied to a WYSIWYG textbox. I’m free to write my posts in any text editor of my choosing. &lt;/li&gt;    &lt;li&gt;Offline support. Running &lt;a href="http://github.com/mojombo/jekyll/tree/master"&gt;Jekyll&lt;/a&gt; locally will run a local webserver which can be used to view changes without being connected to the internet. &lt;/li&gt;    &lt;li&gt;Complete control over the html. I like to be able to change the html easily without messing around with php templates (as I did with Drupal). &lt;/li&gt;    &lt;li&gt;Static pages can look and act dynamically with the various javascript libraries and APIs available. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So far I’m impressed with how the site has turned out. My next plans are to add my twitter feed, an archive section, and paging support for the front page. The source of my blog is available on GitHub; feel free to &lt;a href="http://github.com/chartek/chartek.github.com/tree/master"&gt;take a look&lt;/a&gt;!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.stevenkuhn.net/~ff/stevenkuhn?a=Dm1efCIzdhQ:l1v5t-Va-8Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/stevenkuhn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.stevenkuhn.net/~ff/stevenkuhn?a=Dm1efCIzdhQ:l1v5t-Va-8Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/stevenkuhn?i=Dm1efCIzdhQ:l1v5t-Va-8Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.stevenkuhn.net/~ff/stevenkuhn?a=Dm1efCIzdhQ:l1v5t-Va-8Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/stevenkuhn?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/stevenkuhn/~4/Dm1efCIzdhQ" height="1" width="1"/&gt;</description><feedburner:origLink>http://www.stevenkuhn.net/blog/migrated-from-drupal-to-github-pages/</feedburner:origLink></item></channel></rss>
