The ALT.NET UK Conference

I’ve just spent the last couple of days in London at the ALT.NET UK Conference. Well, the conference was today (Sunday) and the lead up to it was the ALTNET Beers on Friday evening hosted at Tequila with the drinks sponsored by ThoughtWorks (who also sponsored the lunch on Sunday). On Saturday was the Open Space Coding Day held at EMC Consulting (formerly Conchango). Finally, on Sunday, was the ALT.NET Open Spaces Conference also in EMC’s offices.

I have to be honest at this point and say that I was somewhat concerned at the lack of an agenda to start with. I travelled down from Glasgow (a cost of over £300 for train + hotel alone) and I wasn’t guaranteed a topic I’d be interested in. In the end, I needn’t have been concerned. At some points I was spoiled for choice with there being two or three sessions at once that I was interested in.

The discussion at the ALTNET Beers was very interesting (despite many of the participants being merrily sozzled by that the time). Seb was excellent at keeping everyone in check during the park bench discussions.

The Open Spaces Coding Day was a completely new experience for me and I wasn’t sure what to expect. I guessed we’d all end up doing some coding, but that wasn’t what happened at all. At least in the sessions I was in.

The morning session I was at was on IoC containers, the why and the how. We got some excellent examples of how IoC containers work and why you might want to use them. The person that proposed the topic did so because he was curious about it, yet had never experience many of the “pain points” that IoC is supposed to solve. He was content to use “poor man’s IoC“. My plan, hopefully if I get my internet connection to continue to work on this train. Is to download an IoC Container and play with it this evening. For I too am guilty of using Poor Man’s IoC!

In the afternoon I attended a session on ASP.NET MVC 2.0. It was excellently delivered mostly by Jeremy Skinner. The quality of this session was very high especially considering the code had only been available for 2 days. The session was most a demonstration of what was on Scott Guthrie’s blog a couple of days ago when he announced ASP.NET MVC 2.0 Preview 1.

The discussion was more interesting. One of the new features is the ability to attribute validation (Data Annotation Validation it’s called) onto the model. The model used in MVC is unlikely to be the domain model, but a view-model. Given this case, attributing validation rules here will raise the prospect of the code not being DRY (Don’t Repeat Yourself). So, should you use the new attribution or not? Where should the use input be validated?

In the evening we went to a pub a few minutes walk away where the drinks were sponsored by Cognitive Group. I think everyone was very pleased about the free bar that was provided.

On the Sunday morning, a few fuzzy looking folk turned up for the conference day. This was an excellent day for me, it was also the worst day. It was excellent because I proposed a session topic (DSLs What? Why? How? Where? When?) that was chosen and I learned a lot about internal DSLs and a little bit about external DSLs. It was also the worst because the session I proposed clashed with two other sessions I wanted to see. Ah, well… You win some, you lose some. I also attended a very interesting topic on Artisan software or software craftmanship.

Tip of the day #13 (String Equality)

When comparing two strings in a case insensitive manner, use:

myFirstString.Equals(mySecondString, StringComparison.InvariantCultureIgnoreCase)

or, if cultural rules are to be ignored completely* then use:

myFirstString.Equals(mySecondString, StringComparison.OrdinalIgnoreCase)

over:

myFirstString.ToLower() == mySecondString.ToLower()

* The invariant culture is actually a non-region specific English language culture. The ordinal comparison is faster than any culture specific comparison as it uses a much simpler comparison algorithm.

What were they thinking?

I just spotted the following advert on StackOverflow:

Final Builder advert

I have to say that I really don’t know what they were thinking when they thought up that advert. I especially wouldn’t know how to interpret this advert if I was a developer working at VSoft Technologies (the company that make FinalBuilder) and I’d just been described as a “chimp”!

It is also generally disparaging towards the people that are actually employed to write build scripts. I’ve had to write build scripts and while it isn’t exactly at the most glamorous end of software development it isn’t necessarily something you could hand over to a random person to do which is surely the implication if you believe that a trained chimp could do it.

If VSoft are hiring people that are at the level of trained chimps then I really don’t want to go anywhere near their products. I have enough trouble dealing with flaky software without adding more uncertainty to the mix.

Obviously the advert was meant to be amusing and funny. The only people I would expect to be genuinely amused by it are dimwits who are dismissive towards those that actually get stuff done by making flippant comments that trivialise the hard work needed to make the software that drives much of the devices used in the modern world.

Tip of the Day #12 (Hard coded values)

Don’t hard code VAT or other values that can change, even if they don’t change all that often. Additionally, if you really must hard coded values in a program then make it a named constant rather than a literal value so that it can be tracked down by name. That will make it easier on the person having to maintain the program.

Geeky Your Mom Jokes

  • Your mom is so FAT Microsoft are chasing her for a patent violation.
  • Your mom is so ugly it’s just best to forego the “V” in MVC with her.
  • Your mom is so repetitive you need an anti-spam filter to talk with her.
  • Your mom is so ugly they tried to build a wrapper around her.
  • Your mom is so ugly, you were made using .Clone() because every man threw AccesDeniedException at her.
  • Your mom’s so public that she violates encapsulation.
  • Your mom is so fat, she can do pair programming alone.
  • Your mom is so conservative that I get AccessDeniedException.
  • Your mom is so promiscuous the RIAA are suing her.
  • Your mom is so fat that she swallows all exceptions.
  • Your mom is so dumb her brain runs on compact framework.
  • Your mom is so ugly, I wouldn’t talk to her even via proxy.
  • Your mom is so disorganised she lives on a heap.
  • Your mama is so fat that figuring out when she will stop eating will solve the Halting Problem.
  • Your mama’s so ignorant, Dell outsourced all its tech support to her.
  • Your mom is so fat, she got permission to write 150 chars on twitter.
  • Your mom is so hot, they named Milf View Controller after her.
  • Your mom is so ugly, she gets her own cubicle at an open space conference.
  • your mom is so fat, she has her own extensibility model
  • Your momma is so fat i have to horizontal scroll to see all of her.
  • Your mom is so fat, you need 128 bit integers to describe her weight!
  • Your momma told me you were an unhandled exception when I was with her last night.
  • Your mama is so fat that when she stepped on the scale, it said –1.
  • Your mom is so big she needs her own namespace.
  • Your mom is so slow, I have to use Thread.Sleep(int.MaxValue) just so she can keep up.
  • Your mom is so ugly, the decorator pattern couldn’t fix it!
  • Your mom is so stupid, she’s still looking for the any key.
  • Your mom is so ugly that Bing had to start filtering out her pictures in certain countries.
  • Your mom is so promiscuous, when I tried to mount her, it said
    /dev/yourmom: device already in use
  • Your mom pours sea salt down her pants to keep the crabs fresh
  • Your mom is so fat Bloatwear is her clothing line
  • Your mom is so fat I called her and got a Stack Overflow
  • Your mom is so promiscuous, your family tree is recursive.
  • Your mom is so fat Google haven’t finished indexing her.

Tip of the Day #11 (iMicros)

iMicros is a plug in for FireFox that lets you automate repetitive tasks. This is a fantastic tool for anyone that develops websites as the flow through the site can be recorded and played back quickly and repeatedly. It reduces tester error by taking the mundane parts out of performing user tests. It can also deal with AJAX, has a stopwatch so you can time page loads, and many other things.

Tip of the day #10 (XP Pro IIS Admin)

If you are in the same situation as me where you have to develop web applications on Windows XP and have many projects on the go and for what ever reason cannot just stick each into its own virtual directory then XP Pro IIS Admin is the tool that you need.

What it does is allow you to create multiple web sites in Windows XP (as it only permits one web site) and gives you a little interface for easily switching between them. This makes it much easier to work on multiple projects, especially when the projects expect to be sitting at the top of a website, rather than stuck away in some virtual directory somewhere.

Open Source Risk Management

Open Source Initiative Logo There are some pretty cool things happening in the open source space on the .NET platform these days and new projects are being started every day. However how do you sort the wheat from the chaff? How do you manage risk when using open source?

In this post I hope to address this issue as it relates specifically to open source frameworks that target .NET. Although I am sure the ideas are probably equally applicable to other forms of open source, I don’t have much experience outside of this field so I can’t really comment.

I have a some fairly simple rules when it comes to open source frameworks and perhaps they show me as being somewhat conservative but it works for me. I see that as trying to manage risks as effectively as I can. These rules are:

  • It must have a “buzz” surrounding it.
  • It must have reached at least version 1
  • It must have at the very least prebuilt libraries/assemblies/executables (as needed)

The “Buzz”

The first rule is that there must be a “buzz” surrounding it. By “buzz” what I really mean is that there is a viable community of people who are using the open source software so that if I need support there will be forums or discussion groups that I can join and ask my questions. This community will also have produced good quality documentation, tutorials, articles, blog posts, and so on.

When I start using a some open source framework I want to be able to ramp up quickly and get using it. I want to see that there is MSDN style documentation for when I need to dig into individual methods, properties and the like. I want to see that there are walk-throughs and tutorials so I can see immediately how everything fits together. If there are videos available they need to be good quality because it is really off putting to try and read source code on a video that’s been over-compressed. Podcasts discussing the high level stuff can be useful, but it has to be of the type that I can easily listen to in the car or while walking down the street because I will rarely listen to a podcast while sat at my PC.

A good open source project will also have fairly active support forums with questions being answered from those that understand the technology. It is interesting that lack of “support” is what many people claim as being one of the big risks with open source. However, how many times have you called Microsoft for support? (assuming you are developing on the Microsoft platform) In the last 14 years I’ve phoned them exactly once. Meanwhile, I’ve used newsgroups and support forums more times than I care to remember. The response from forums is usually quite good and well within the length of time I would generally wish.

However, not everything is rosy with forums, open source or otherwise. A couple of years ago I saw a forum dealing with an open source project where the main (possibly only) developer was an arrogant arse in response to any request for help. His standard response was “read the code”. That was it, end of discussion. There didn’t seem to be that many other people using his library so perhaps he put many people off. If this were a commercial operation, that person would have been removed as a support engineer for fear of losing sales. Then again, how many times do you hear of companies with poor after-sales support.

Incidentally, I’ve heard the response “just read the code” or “read the unit tests” from a number of open source advocates. That is one way to turn me away from the project. I really don’t have time to read the code when I’m evaluating a number of frameworks that do similar things. I want to see if the framework will do the job I want it to do. If it doesn’t do what I want it to do I want a quick easy way to short circuit the evaluation.

Don’t get me wrong here. I am not saying I never read the code. It can be extremely useful to read the code when tracking down a bug somewhere and you need to see what the framework is actually doing. What I’m saying is that it should not be the only source of documentation. I will often get around to reading some of the code before fully committing to the open source framework.

Release Version

The second rule is that it must have reached at least version 1. I’m not interested in using betas, CTPs or nightly builds. There are very few things I will use prior to a release. (Curiously as I type this, I’m doing so on a pre-release version of Windows 7. The other thing I’ll use in a pre-release form is Visual Studio – both major products in an already fairly mature state. I’ve been using Windows since 1992 and Visual Studio since 1995.)

What a version number gives above all else is a point where the developers stick their flag in the ground that people can rally around. Without that I could end up having to use various nightly builds. While the nightly builds are great for the testers and developers on a software system, I don’t think they are good for those building upon the system.

For example, if I have an issue and I go to a forum dealing with the framework I can very easily say I’m using, say, Version 2.1 and know that there will be a good number of people also using that version. If however I go along and say I’m using nightly build 518 then I might find that there are very few other people using that specific nightly build and that any potential solutions to my problem by people using other nightly builds may not be able to take into account some weird quirk that only happened in that specific nightly build.

The “standard” response would likely be to download the latest nightly build and use that. However, I see that as adding extra risk into my project. Apart from anything else I would now have to retest all the places where that new nightly build is being used. Sure, unit tests can help at this stage, but integration tests still need to be run, end-to-end testing, user testing and so on.

One of the advantages of open source is its speedy resolution and it may sound that my strategy here is negating that effort. I don’t believe that is so.

When a project has milestones and release goals the development gets to a point where all the features are there and the public interface has solidified although there may still be some bugs. At this point betas are released and a wider audience can evaluate the framework, report bugs, and generally give it a much more thorough testing that the core development team could do. By the time the framework is RTM’ed (although RTW maybe more appropriate in this internet age) the major bugs will have been worked out.

Once a release has been made even more people will start using it, so some of the more esoteric bugs will be found and a service release will likely become available shortly afterwards that rolls up a number of bug fixes. This is still a lot faster than most commercial offerings.

Pre-built Assemblies

The third rule is that the assemblies must already be built in advance. I don’t want the hassle of building these myself. The process is too prone to error in my opinion.

If I build the assemblies then there are risks based on the way my machine may be set up. I’ve seen systems where the build process is quite flake to begin with and I simply don’t want to add to that. I also don’t want to waste lots of time  having to faff about with a build process trying to get it to work as it can easily eat up a lot of time.

Incidentally, I may concede this point once The Horn Package Management Project reaches some level of maturity. However, it looks like it may be more useful for those developing complimentary open source projects to keep up with each other rather than someone like me.

Where’s the risk?

As I said at the start, I’m probably fairly conservative when it comes to using open source. I want to see that others are getting benefits and that the major bugs have been ironed out. Yet, I have no real concerns about using open source projects that are clearly maturing or are mature. In that scenario the risk is fairly minimal, and probably a lot less than using an equivalent commercial offering – After all, you still have the source code if the project stops, what do you have if the company fails?

 

 

CC-Attribution:

  • OSI Logo by Ken Coar (June 10th, 2009)

40% off Microsoft Press Books at Books24x7

If you are like me, then you spend hundreds of pounds per year on books, yet at the end I still don’t think I have access to all the books I’d like. I can’t go to my local library because they don’t stock the books I’m interested in. So for the past year I’ve been using Books 24×7 which gives me access to many more books than I’d ever be able to afford to buy for myself. I can search the books for the information I’m looking for on the web and if I want to take it off-line I can download a PDF.

At the moment they have an offer where by you can get 40% the subscription fee.

Follow these steps to receive a 40% discount to Books 24×7 E-Reference Library for Microsoft Press Titles, a virtual library that contains over 500 technology books that are published by Microsoft Press.

  1. Go to http://www.microsoft.com/learning/books/ereference/default.mspx

    Note: You can also watch a demo of E-Reference Library by clicking the “Watch an E-Reference demo” link on the page.

  2. Click the “Subscribe to an E-Reference Library” link at the top of the page.
  3. Click the link to the type of library that you would like to purchase. On the next page, you can review a description of the library.
  4. Click the Add to Cart..
  5. Type the discount code below that corresponds to the library type that you selected, and then click Apply.. The discounted price will be reflected.

    Discount Codes:

    • Desktop Library: EREFDESKB
    • IT Professional Library: EREFPROB
    • Developer Library: EREFDEVB
    • Complete Library: EREFCOMPLETEB
  6. Complete the checkout process to purchase the E-Reference Library at the discounted price.

Go Directly to Funky

In our office we have a notice board for the development team. It was there when I joined and I suspect its original function has long since been superseded by its new function of displaying any quotes, pearls of wisdom or witticisms of the day that members of the development team happen to find sufficiently amusing that it requires a degree of permanence.

So I give you, our notice board:

Developer's Noticeboard

Have fun looking through that lot.