Aside from a couple buddies who asked me to build them some not-so-hardcore websites, I’ve never been paid to write code. That said, I really want to get better than my current skill set which is best categorized as “good enough to get myself into trouble.”
I learned VB and C++ in college, but stuck more with VB. However, while I’ve been able to read C#, I’ve never really given myself reason to learn how to write it.
This spring I took on a challenge of trying to create a landing page/portal for my region’s team which, among other things, attempts to aggregate multiple event calendars (RSS feeds) into one. As I wrote that in C#, I very quickly began to appreciate its elegance and power.
A powerful capability of .NET 3.5 is LINQ (Language Integrated Query), and more specifically LINQ to XML. I’ve always been intrigued by the flexibility of XML, but aside from using it for storing configuration options (web.config, settings.xml, etc.), I’ve never really investigated XML very deeply.
I want to get deeper. While I still never expect to ever be paid to write code, I want to learn (besides, the circles of people I work with are way, way more educated in code development than me, and it’d be nice to better speak their language). My job at Microsoft is about the tools & software used to write code, not necessarily the code itself. But as the tools and .NET framework advance, they become more closely coupled.
Enter my pet project: A web-based football pool application. I know there are several out there, but given that I participate in at least one football pool each season, and managing them via Excel or Word can be cumbersome, I thought this would be a good project to tackle.
I gave myself the following high-level requirements:
- The site shall be build using ASP.NET 3.5 (C#)
- The site shall use XML for all data storage (no dependency on a database), making it very, very portable
- The site shall use as little code in “App_Code” as possible, but rather encapsulate the Football Pool engine logic in a class library
- The site shall manage three (3) roles, and provide the following capabilities to each:
- Administrators
- Create leagues & seasons
- Create & manage user accounts
- Create & manage NFL teams
- Managers
- Create & manage seasons for their league
- Create & manage weeks for a season
- Add games & set deadlines for a given week
- Enter results for any given week
- Automatically send email alerts to players in the league
- Invite players to join their league
Players
- Join a league to which they’ve been invited (via email & embedded link in that email)
- Submit picks for a given week
- View standings for a given week
- View standings for a given season
- View their success rate trend (how many picks are they getting right vs. wrong, etc.)
All users shall be able to update their profile (name, email, timezone)
So that’s it, stay tuned! This obviously falls outside my normal job description, so I’ll be working on this when time allows. I’m hoping that I can bite this off in time for the start of the 2009 season. I even have an old friend from high school who’s willing to be my guinea pig.