Last Saturday I had the great privilege of gathering with other developers and enthusiasts in the area for Code Camp; a series of sessions and information sharing for area peers. Once upon a time I used to get to conferences fairly often but the mixture of life married with children as well as the availability of content online has made that type of event rare. Here is a brief recap of the sessions I attended from my notes.

XNA: An Introduction

Presenter: Alex Stommes

I was on the fence about choosing this or a NHibernate vs Entity Framework talk but chose this since it’s outside of my realm. My software development life has been focuses on enterprise desktop applications or web development; I’ve never been exposed to game development other than a few articles or attempts to build things on my own. What I have built has been more of a puzzle or conceptual model rather than a true game with graphics and user interaction.

Although XNA is yet another framework Microsoft seems to have lost interest in, the presenter recommended it both as a way to get up and running quickly and also because MonoGame, which is a direct port of XNA is alive and well.

XNA is a game development framework that targets a managed game runtime. You can build applications by installing a Visual Studio extension (none available yet for Visual Studio 2012). There are a lot of successful games out there and the Xbox Live Arcade is a monetization opportunity for developers using XNA.

What I found most interesting was the structure of games: the boilerplate code in XNA projects and how game code was structured. We spent a few minutes looking at this toward the end of the session. I had once tried to write a game in Silverlight and was deterred by a person saying I was going about things wrongly by using a game loop but this confirmed my sense of how games should be built. I wish I hadn’t given up that effort.

I have a goal of sketching something out with XNA or Monogame, if only to have some experience at building games first hand. Even though I’m content with my current trajectory as a web developer it’s good to see the universe in a different light from time to time.

Data Programming in Visual Studio 2012

Presenter: Chris Ortman

This session covered improvements made in Visual Studio 2012 Data Tools. It looks like Microsoft has not only ported a lot of what I used to see in Redgate’s toolbox, they’ve extended the functionality with some nifty sql command/macro tools and schema versioning tools.

Visual Studio 2012 also introduces a concept of “LocalDB” – a local instance of sql server that is on demand and doesn’t need to run as a service.

All the information was great – even though I’m a pretty old school guy (ie. old dog, old tricks) and don’t have many qualms with using sql server express. I also find myself wary of the tool driven approach for large databases. What works in my home project tends to break on a multi gigabyte legacy database or something that has a complex schema.

Introduction to NServiceBus

Presenter: Joe Ratzloff

An excellent talk on NService Bus from the ground up. The presenter started with some basic ideas about integration before getting into messaging architecture and how to use NServiceBus.

My background with this sort of problem came a few years ago when I worked on a Biztalk project. A lot of money was put into the server infrastructure, licensing, and training but little became of it… at least while I was involved. Biztalk always gave me a sense that it was such a large hammer – kind of like a SharePoint for integration when what we were looking for was something smaller, cleaner, with less cruft. We were looking for NServiceBus.

NServiceBus implements a bus style architecture, allowing you to create a collection of endpoints with a set of libraries and some minimal infrastructure. It is built on the aging MSMQ. There are a lot of sample applications in the SDK and the presenter walked us through a few of them – basic messaging, request-response, and pub/sub.

Why Data Science is something you should care about

Presenter: Ryan Swanstrom

I kind of wished this talk had been about means toward an education because the presenter spent a lot of time contrasting different approaches to learning: traditional university, corporate education, and something new: MOOCs (Massive Open Online Courses). By far my best take away was this introduction to MOOCs which touch on a theme of pursuing an education with modest means (both in finances and time) such as mine. I’ll leave it for another blog post but Coursera, Udacity, and Edx represent some great opportunities for those willing to give some sweat equity.

Esoteric Languages

Presenter: Jason Bock

Or perhaps the title should have been “languages to drive the sane to insanity.” Our out of towner for this special talk was Jason Bock. He walked us through languages that not only require mental gymnastics but that also take a break from being useful. Let me restate that last part for emphasis: these were languages with limited to no practical value.

Here is the list of languages Bock covered with dubious practical value:

Each is quirky and nuanced, with a personality of its own. Some are all about humor (Intercal, LOLCode). Some are just syntactical puzzles. Here’s something to blow your mind: 99 bottles of beer on the wall in Whenever:

1 defer (4 || N(1)<N(2) && N(2)<N(3)) print(N(1)+" bottles of beer on the wall, "+N(1)+" bottles of beer,");
2 defer (4 || N(1)==N(2)) print("Take one down and pass it around,");
3 defer (4 || N(2)==N(3)) print(N(1)+" bottles of beer on the wall.");
4 1#98,2#98,3#98;

I won’t even try to explain it though it suffices to say that I won’t expect anyone to be writing production code in it. I’d rather stick with:

Enumerable.Range(1, 99).Reverse().ToList().ForEach(n => {
        var singsong = "{0} bottle{1} of beer on the wall, {0} bottle{1} of beer. Take one down pass it around... " 
                    + "{2} bottles of beer on the wall";
            n > 1 ? 
                String.Format(singsong,n, "s", n - 1) :
                String.Format(singsong.Substring(0, singsong.IndexOf("{2}")) + " No more bottles!", n, "")                            


Bock had a larger message though and he was very clear about it from the beginning: that exploration and experimentation are the stuff that helps us get better. Inspired by the oddities of Befunge he wrote IronBefunge, an open source implementation of the Befunge Interpreter for .NET.

On a completely different note, I realized just now that Bock is the author of Metaprogramming in .NET, something that has been on my reading list for a short while. I wish I’d had a chance to thank him for writing it in person.

Wrapping Up

Code Camp was great – well worth the time and scant effort of being less than 5 miles from my house. I regret not being able to be in all the talks at once, but I’ll be hard at work to retain the things I was exposed to… even the esoteric languages.