codethinked (kōdthĭngked) adj. To be consumed by or obsessed with code.

WCF Web Services The Easy Way

I'm gonna go ahead and say it... I don't think WCF is all that bad. In fact, I think it can be pretty easy! I hear lots of complaints about it, and many of them valid, but by far the biggest complaint I hear is that it is just so darn difficult. Especially cause of all that xml configuration. Holy crap I hate XML configuration! (If you want to complain some more, I'm on Twitter) And because it is perceived as difficult, it is often overlooked in favor of ASMX web services because they "just work".

While normally I would be the first in line to use a tool that "just works", in this case I think that WCF is carrying around baggage of its earlier incarnations. I want to show you that as of .NET 3.5, WCF can be just as easy for setting up web services as ASMX, and that you no longer need to fear it. Or fear the day that Microsoft deprecates ASMX web services.

Continue reading the rest of this post...

Startup - Week 1 Recap

You should probably be warned ahead of time that this post is devoid of any technical content. I want to try and share my experiences getting my startup off the ground on a fairly regular basis and this post is the first entry towards that goal. I hope that people will get something useful out of me sharing this experience, and I hope that if you have questions you'll ask them in the comments or shout at me on Twitter.

As you probably already know, I started working for myself last week. It didn't really feel all that different, especially since I am still spending half of my time working at the same contract I was before I started this adventure. That is great though, as I love the client that I am currently working with. For the current time frame I am alternating between working 2 and 3 days per week on my own project, while working 2 or 3 days with my client.

Last week I started out with a three day week working on my own stuff. It was nice because I had a bit of a list of things I needed to get done. Some technical, some business related.

On the business side I wanted to get Quickbooks setup, and I also wanted to find an accountant. Getting things straight on the business side of things was a top priority on my list, since otherwise I wouldn't be able to sleep well at night. I tend to worry about those sorts of things. Having an accountant that I can go to and ask questions, and who can look over what I am doing with my financials is extremely important to me.

From a technical standpoint, I also had a few goals. My main goal was to become more organized. I had already been working for a little bit on my project, but I hadn't really accomplished anything. I had mostly been doing a little proof of concept here, writing some test code there, but nothing that I could really use. And that is probably a good thing since most of it wasn't written with any organization or testing in mind.

My goals were as follows:

  1. Figure out what I could cobble together of the work I had already done - That ended up being basically nothing. I ended up rewriting all of it, and it is now considerably better and pretty well tested.
  2. Figure out what I actually had to do - It is important to start cataloging all of the items that need to get done. My list is a bit daunting. It is still early though, and I have a good ways to go.
  3. Get my source into some hosted source control - I hadn't yet put any of my source into source control, and I knew that I needed to get that done right away. Since I like Github so much, and I work with it regularly, I got a paid Github account. I ended up getting a regular account, and not an organization, because I don't feel like the added benefits would get me anything right now.
  4. Get a build running - I wanted to get an automated build going, especially because I now have some integration tests which need setup. Automating these tests needed some code around it. I decided to use Ruby, Rake, and Albacore in order to automate my .NET builds. If you'd like to see how to get this done, go check it out here. When I implemented it, I opted to just use MRI (normal C Ruby) instead of IronRuby. It all works pretty much the same though.

Overall my first week was great, I felt like I got quite a bit accomplished and I am already getting a bit impatient with finding more time for work. I am losing some of my evening hours since I am also trying to get a presentation done that I am going to be giving at local .NET user groups in a few weeks, so hopefully I can get that knocked out quickly. I'll be putting up a post about that soon. Once that is done I'll probably start working on an upcoming TekPub series that I will be releasing. Be on the lookout for that in the next few months!

IronRuby, A Match Made In...

With the recent "high profile" exit of Jimmy Schementi from Microsoft, IronRuby looks to be in trouble. At least it looks to be in danger of being "put down" from a Microsoft resources perspective. If you've been following my blog for a while you'll know that I am a fan of the Ruby language, and I love the fact that we now have a working Ruby implementation on the .NET platform. It really does give us a great dynamic language to add into our arsenal, and I hear occasionally about IronRuby and IronPython both being used as scripting solutions within .NET applications.

Yep, that's right. Scripting solutions. You know why? Because if you want to write applications entirely in Ruby or Python, you probably aren't writing on the Windows platform. Native Ruby runs just fine on Windows. So if you aren't interoping with .NET code, then why would you run IronRuby? Honestly, there aren't many good reasons.

Ruby and Windows, BFFs?

So, was Ruby good for the .NET platform? Was it a match made in heaven or hell? I've heard many people making comments in both directions. Some making claims that IronRuby was made to bring Ruby programmers to the Microsoft platform, and the other side making claims that it was to keep .NET developers from leaving the Microsoft platform. Somehow I doubt that either of these scenarios is very likely.

Continue reading the rest of this post...

Starting A New Chapter

This should be the easiest post to publish that I have ever written. Unfortunately though it has been the exact opposite. I think there is quite a bit of fear built up in my lizard brain, telling me that I'm risking a lot, telling me that I need to turn around. Hopefully I can harness that fear and turn it into motivation. Turn it into something great...

So...you may, or may not, have noticed that my blogging has been cut back a little bit recently. Okay okay, it has been cut back quite a lot over the last few months. I'm still alive, as you can see from my Twitter account (You should follow me!). But the truth is, I'm not entirely sure why I haven't blogged much. I've made up all kinds of excuses about how I've been working on other projects, and how I am busy working on some surprises (I am). But in the end blogging has, for years now, always been something for which I've made time. I never got handed time to write blog posts, I found the time, even when I was busy.

So why haven't I found the time to write recently? Surely I have something to say, right? Well, I'm not so sure anymore. Blogging is about passion. It is about wanting to share a passion that I have. You see, a few years ago I decided to reinvent my career and myself. I was getting burned out, I wasn't happy with where I was going and what I was doing. I needed a change. I needed to be surrounded by people who were as passionate about building software as I was. And so I started getting involved with the local developer community, which as it turns out, was one of the best decisions of my career.

Continue reading the rest of this post...

C# Closures Explained

Thanks to all of the functional goodness that was put into C# 3.0 we have a ton of power at our disposal. Unfortunately with a lot of this power also comes increased complexity. Programmers usually exacerbate the complexity problem, because unfortunately we often like to sound like we are smarter than we actually are.

We often like to use big words and lots of acronyms to scare away the neophytes. Oh crap, there I go again…

Anyways, one of these topics that is blindingly simple is closures. But I continue to see definitions that are as clear as mud to the average developer. Let’s go ahead and look at the Wikipedia definition of a closure:

“In computer science, a closure is a first-class function with free variables that are bound in the lexical environment.”

All clear, right? Well, if it is for you, then super… you can stop reading. But if not, and the next time this topic comes up you want to sound like Super Duper Computer Science Guy™ ... then keep reading.

Continue reading the rest of this post...