Support Our Site

Major embarass @blowdart session!  #DDD8Today was the eighth annual(ish) gathering of four hundred of the Microsoft Development community for a day of free technical training. Once again it was spectacularly over subscribed – sold out faster than Glastonbury (all the places went within fifteen minutes) and with no Microsoft speakers had the usual mix of sessions, some of which perhaps you wouldn’t expect to see at Microsoft.

The day started off cold – although there was no snow it was definitely a case of scraping ice off the car, and if you were in any doubt, one look at Rachel Hawley’s footwear could tell you! Having said that, as has become traditional at these events, bacon butties to warm you up awaited those who got there early.

First off a couple of observations. For a Microsoft Developer Day, it was a very good advert for Apple! Of the five talks I attended, two were obviously running off Mac’s. One was about iPhone development, so using a Mac was a given, although the presentation was also given using Keynote (and all the more slick for it) and rather than messing around with font sizes as all the PC based presenters have to do Chris Hardy used the built-in OS X zoom gestures to quickly focus in on what he was showing. The other Mac based presentation given by Ian Cooper wasn’t anything related to Mac development at all, but was presented in MacOS X, using the Mac version of Powerpoint, with a windows development environment running in VMWare. It’s not so long ago that developers would buy a Mac, largely ditch MacOS X and stick Windows on it – it does seem that even with the advent of Windows 7 that isn’t always the case now… The other massive advert for Apple was not surprisingly the vast numbers of iPhones in evidence. I certainly think it would have been worth somebody doing the same as Scoble did at Le Web to get a ball park figure of how many there were. There were a good few Google Android phones around, but few if any Microsoft based phones in evidence. This was also reflected in the sessions – no talks on Windows Mobile development, but there was a talk on using MonoTouch to develop iPhone applications!

As is normal for these days, what I thought I would attend, and what I actually attended were slightly different. I initially thought I’d just take up residence in Chicago 1 for the day, but in the end I fancied a change of pace.

First up I attended a talk by Ian Cooper on Real World MVC Architectures. This in part was because I’ve just done my first ASP.Net MVC project, and I was half expecting to find I’d done it all wrong, as to a large extent I’ve put it together as felt right rather than following any explicit paradigm. To my relief it seems all the talk of proper architecture seems to be sinking in, and the way I’ve constructed it is pretty much as was suggested, even to the point that I’ve used particular techniques without having read about them as yet in my MVC book in that I understood why they were being used but didn’t recognise the idea by name! I suspect the session might have been pitched a bit too much towards the beginner end of things for experienced MVC programmers, but for me it was certainly a good reinforcement of the techniques.

Next I slipped next door for a change of gear, and a non-technical talk by Liam Westley who was talking about how to be a small software development outfit and not go bust. To be honest, the principles Liam outlined can apply equally well to large software houses, a number of which I’ve come across who don’t get this stuff right, and even to people in a corporate environment like me as getting these sorts of things wrong will at the very least have your internal customers looking elsewhere for their software, or at the worst put you out of a job. Liam gave us a set of broad principles that any software developer should be doing as a matter of course – things like delivering properly tested software, applying proper logging (even in a corporate environment fixing a problem before the users have got round to reporting it scores serious brownie points), and understanding your users, all go to making people happy to give you their software work, and not go elsewhere.

For session number three it was a first for me, in that it was the first time that I have heard Jon Skeet speak. His name will be familiar to anyone who frequents Stack Overflow – and as his reputation is testament to he sometimes seems to answer C# questions within seconds of them being asked. What is slightly more surprising is that his day job is at Google as a Java developer. Even more surprising he fits all of that in with being a Methodist Local Preacher too – but I suspect that stands him in good stead for being able to deliver material well, as from the experience today his reputation is well deserved. The latest version of C# brings in some interesting, but quite complex new ideas, and he did manage to put them over in a way that even with the early start on a Saturday I pretty well followed them. Having said that whilst I liked the presentation, and many of the new features, I was less than impressed by the return of the ubiquitous VB variant data type, in the guise of the dynamic type. Whilst I am well aware that the way the variant and the dynamic work are rather different, it’s much more about how it will end up being used, or more likely abused. I’m with Jon Skeet on this in that I much prefer a situation where the types can be validated at compile time. Whilst there are legitimate reasons for adding dynamic, and as an exercise in language design the implementation is very impressive, as with the variant I am quite sure it will end up being thoroughly misused, and will lead to many a difficult to nail down bug.

Next up was lunch, and was the traditional scramble for a lunch bag. Unfortunately it seems that the entire occupants of the Chicago 1 side went the same way and got all the non veggie and non seafood sandwiches (I have to watch having too much of certain types of seafood with my gout) and as always it was a bit of a lucky dip as to what else you got, so I ended up with a sandwich, crisps and an apple that I wanted, and a can of diet coke and a snickers bar that I didn’t want. I know they’ve tried various things over the years, but I still think there has to be a better way than this, as it was pretty obvious looking around that not everybody wanted what was in their lunch and there was a lot going to waste.

The lunch time Grok Talks had relocated this year, and were in the atrium in building four. This certainly gave a bit more space, but did seem to make the security guards mighty jumpy – I got a stern “I’ve just seen you behaving strangely” from one for taking this picture – I just liked the look of the clear blue against the white of the building structure and was going to make some comment about the weather! The Grok Talks were marred rather by problems with the technology. For a start the speakers were badly positioned in relation to where the presenters were standing leading to endless feedback problems. The talks also took an absolute age to get started, and when they did people seemed to overrun, which as a result led to people who were further down the running order being disappointed. There were a couple of interesting talks though, and it was especially interesting watching Gary Short intensely watching somebody else demonstrate Code Rush! Looking at the response hopefully there will be a few more converts from Resharper, a jump I made many years ago!

After lunch was one of my personal interest talks. As an iPhone owner and software engineer I’ve always quite fancied giving an bit of iPhone development a go. The problem is that as well as learning a new platform and new environment, developing for the iPhone requires learning a new language, Objective-C. However Chris Hardy was demonstrating a way that I could leverage my existing C# skills using the Mono environment and an add on to it called MonoTouch. Whilst developers still need to be able to read Objective-C to understand what is going on, and still need to learn their way around the Apple API’s, it allows them to develop entirely in familiar C#, and even brings advantages in terms of some of the extra type safety that C# brings. I have to say I was pretty impressed at the environment and what it can do. I was less impressed by the price – $399 for a personal license, which only covers you for a year of updates, with even more for a corporate license – far too much for your average hobbyist programmer to even consider. I can’t help thinking that they are missing a trick here, and providing a low cost or free license for developers in return for a share of the revenues, maybe using some sort of phone home code to keep track would certainly broaden the base of programmers using it.

My last session of the day, to be honest I would have gone to even if Barry was just reading the phone book, as this was potentially his last appearance at a Developer Day before he loses the essential qualification for being allowed to speak of not working for Microsoft, as in a scant few days he will be starting a new job working for Microsoft at one of their offices in Redmond. As always there was the classic banter with people he knew in the audience, in particular Jon Skeet who was attempting to pose increasingly difficult questions it seemed. Barry also started off by hijacking the session next door as Ben Hall, the speaker had a birthday and was foolish enough to tell somebody! What I was also expecting, and got in spades were interruptions marking his departure from the UK development scene. His book Beginning ASP.NET Security featured in several. In the first Liam Westley gave a touching and heartfelt tribute, and said how much he had been looking forward to the arrival of the book – as it was just the right size to prop up his wobbly table. In another they spoofed the winter cold adverts, suggesting that the book was good fuel to keep the elderly warm. The session finished off with a clip from his appearance many years ago on The Crystal Maze, and several of the organising team appearing in T-shirts especially prepared for the occasion. All in all it was a memorable way to finish off the day, and hopefully a memorable occasion for Barry as he heads across the Atlantic. The one question that remains is whether all the spelling mistakes in the presentation were down to Barry, or whether somebody did get at his presentation before he went on…

All in all it was an excellent day, and although I know there were a couple of sessions that had problems, the ones I attended were all excellent, and well worth the spare time given up. It was great to catch up with friends from the community, previous developer days and previous jobs. Whilst it does appear that the day is very much a victim of it’s own success (even with local developer days around the country people still travel from far and wide to attend this one in addition to their local days) hopefully a way can be found to allow it to keep running in future years, and all credit to the organising team, and the staff at Microsoft for keeping the whole day running smoothly.

Possibly Related Websites

This is another one of my note to my future self posts, that might be useful to somebody else, so skip past if you don’t know what WCF is…

Anyway, if you’re still here, I’ve spent the past day or so trying to track down a problem in some WCF code. Essentially the problem has been that whilst I have been out of the office over the last week, we’ve had a change propagate through to our development server which has caused problems with some of our existing services, specifically some code where one service needs to make a call to another service running on the same machine to finish it’s work. To do this it needs to pass through the Kerberos ticket that the initial service has received, and whilst up to now it has been quite happily doing this, now it has stopped and instead is getting the credentials for the underlying windows service passed.

The problem was made a lot harder to diagnose by a little WCF gotcha whereby the error that is generated is overwritten when the calling code tries to dispose of the service object. Damien McGivern has an excellent post describing the problem and giving a solution, however it didn’t quite meet our needs, as we sometimes need to specify an endpoint when creating the proxy object.

To get around the problem, I adapted Damien’s code slightly creating an extension method taking an object of type TService rather than creating the object within the method, so the method can be used as follows:

new RelationshipServiceClient().UsingService(service => ... );

Whilst it doesn’t actually solve the mystery of why our server started mishandling WCF calls, it did at least give us a bit more clue!

Possibly Related Websites

If anybody is writing .Net code that in the future I am going to have to find an error in, can they refrain from doing things like this:

try
{
...
}
catch (Exception e)
{
throw new ApplicationException("ConnectionException has occured: " + e.Message);
}
finally
{
....
}

The particular application I was working on this morning used this particular gem pretty well everywhere. The problem was that we were getting an unhandled ApplicationException – the re-thrown error wasn’t being trapped anywhere else – and since the above bit of code throws away the stack trace from the original exception, we were left trying to guess where the error was actually occurring.

The irony is that the code was written by a contractor who apparently had a pretty stellar CV, and amongst other things quite regularly criticised other people on the team over their apparent bad programming. His contract wasn’t renewed, and since then we’ve been discovering quite how bad his programming really is – a definite lesson that however good a contractor appears on paper, you need to properly monitor what they are doing.

Other gems in this particular application include every SQL statement being built by concatenating strings together – and no, not a StringBuilder in sight. Using ToString() to do the conversions where needed, including quite a few points where he calls ToString() on a string – indeed a large amount of the data is just held as strings anyway, only being converted back to integers or dates in the stored procedures when SQLServer needs the right types. He had also written his own replace function, which he was using instead of String.Replace although it was functionally identical, and that wasn’t the only place he’d hand crafted code that replicated functionality in the framework. The code was littered with other common errors, for example it’s a good job we don’t have anybody with the surname O’Reilly…

Since we were fixing a specific problem, much as I would like to, there wasn’t the opportunity to fix all of these other problems, essentially we have to wait until something else breaks, and fix it then. And the source of the problem today? A stored procedure that was trying to convert one of the multitude of strings being passed through back to an integer in order to use it. That conversion was failing and throwing an error that was passed back to the client and helpfully chucked away by the error handling code I started with – the only clue we had as to where it was going wrong was that the error message seemed like it was coming from SQLServer.

Possibly Related Websites

Craig tagged me for this ages ago, so I guess I’d probably best put in my answers!

How old were you when you started programming?
I think I probably started aged around ten or eleven, with the arrival of a Sinclair Spectrum at home and a BBC Model B at school.

How did you get started in programming?
I’m not really sure of this one, but I guess it was just the interest in how the respective computers worked, and the challenge of getting them to do things.

What was your first language?
Definitely Spectrum Basic. Until I was actually doing a proper Computer Science course at school – something that seems to have fallen by the wayside for generic ICT classes now – most of the software development was at home, thanks in part to the listings that the computer magazines produced. Indeed back then there was even an entire magazine devoted to listings, Sincliar Programs, which I used to read and copy in the listings from.

What was the first real program that you wrote?
I’m not really sure, probably the old classic “Hello World” in Spectrum Basic. In terms of a real serious project, that was probably the programming project for my A-Level in Computer Science.

What languages have you used since you started programming?
Basic – Spectrum/BBC/VB6/VB.Net, C, C++, Modula-2, 68000 assembler, Pop-11, Occam, COBOL, SQLWindows, Java, C#.

What Was Your First Programming Gig?
This was a summer job as a result of a work experience week, working for the British Holstein Friesian Cattle Society in Rickmansworth. Their business was keeping pedigree records for several different breeds of cattle and sheep, and on request producing the lineage of an animal, usually when the animal was being bought or sold. I spent the summer there during a key period from the point of view of their computers as they were moving from an old system written in COBOL running on an ageing ICL ME-29, over to a system written in C on a UNIX box. The COBOL was probably the experience that left the biggest impression, as in COBOL the indentation of the lines of code is important, and the editor only went forwards through the file, and only allowed you to edit the line at the bottom of the screen!

If you knew then what you know now, would you have started programming?
Definitely yes, not least because if I hadn’t have gone into programming professionally I would have probably become one of the worryingly large group of amateur programmers I’ve come across hacking together key business applications, all of whom would much rather be doing a programming job than the one they ended up in.

If there is one thing you learned along the way that you would tell new developers what would that be?
One of the main tips I’d give is to give yourself a broad and general base – having done a couple of crash courses in VB doesn’t make you a programmer. Most of the best ones I’ve come across over the years have been flexible and adaptable, and usuall spent several years doing a broad based course – generally a degree of some sort – where they have been given the broad basis that allows them to cross-train quickly as technologies change. They’ve also got the broad IT knowledge to understand what else is going on around their job – you might not ever program professionally in assembly, or do any deep level AI research, but it is surprising how much of that sort of stuff is useful in ‘normal’ programming. Don’t get me wrong, I’ve met quite a few people who have learnt programming on-the-job and can cope, but equally I’ve met a lot of others who aren’t adaptable and end up stuck. For example one contractor we’ve had at work is self-taught and writes great ASP code – unfortunately he was hired to write ASP.Net, and he really doesn’t get the differences. With our entire suite of software being rewritten in a multi-tier C# design, using an object-oriented design – because he’d been taught how to write ASP pages in VB, rather than being taught software engineering he was effectively unable to do what we needed.

Along those lines, I’d also advise anybody to keep your skills current, and be especially wary of companies that don’t keep up to date, or program in something that isn’t mainstream. The biggest problem to get into is ending up in a very small niche programming market as I did with SQLWindows. Luckily I found a new employer who was happy to cross-train me into VB. You’re never going to totally escape from maintaining the creaky old VB6 systems, but make sure you’re in a company where you get a balance.

What’s the most fun you’ve ever had… programming?
I’ve had times when I’ve enjoyed programming professionally, but still one of the most fun bits of programming I’ve had was on the LPMud we had running at university. The game was all running in a variation of C, and one you reached wizard level you got to add to the game by writing code – indeed the wizards got programming level access to the guts of the game so you could actually manipulate the game environment on the fly. Programming for that there wasn’t really any pressure, and in terms of the game there weren’t really any limitations on what you could produce. Professional programming, the majority of the time you are working to a spec, and for a customer, and you don’t get nearly so much freedom in what you do.

Possibly Related Websites

The past couple of days I’ve had one of those real head-scratching problems you get as a software developer from time to time – the classic intermittent problem that apparently has no explanation.

It came up quite by chance – we have a customer who for one reason or another massively underestimated the volume of transactions they were going to put through their system, as a result some parts of their system have been throwing intermittent time-out errors when they’ve been querying big datasets. As a result I had to do a quick fix to one of their modules to increase the time-out on the ADO.Net command objects to allow the queries to successfully return.

Once I’d done that, I did what we would usually do in our team and did some quick informal testing to make sure nothing else was affected, and unfortunately in those tests another part of the application started throwing intermittent SQLServerconnection errors – even more strangely these weren’t coming from the point in the code where the connection was being made, but from deep down in the ExecuteReader method. As far as the code was concerned, it should be using an existing connection – why was it trying to make a new connection now?

At this point it is probably worth discussing what the code was actually doing. In essence it is two nested database queries – the code runs through the results set of the first, and based on the contents of each row does various different things, including running other database queries. All of this was being done using multiple command objects, all created using our core database access library. Digging in to what the library was doing, it was providing a single connection, and generating the commands from that single connection. It all worked fine, except when the size of the dataset started to get big, at which point the errors started to occur.

How the underlying database actually copes with this varies. In SQLServer 2005 parlance, the code is using Multiple Active Result Sets or MARS, Oracle has no problem doing it, and it is supported against all versions of Oracle in ADO.Net. But it was only supported from SQLServer 2005 – attempting to do the same in SQLServer 2000 using the SQLServer specific provider would result in an error being thrown. However even with a SQLServer 2000 back end, if you used the ADO.Net 2.0 OleDB provider it would work, with the OleDB working some magic in between to get around the problem.

All the code in this particular application was written using the generic ADO.Net objects, the idea being that it will work with any of the ADO.Net providers. Although the database being used is SQLServer 2005 – which supports MARS – the factory object that was being created was using the OleDB provider, to connect to the SQLServer 2005 back end. After a bit of digging around I came across this useful blog posting from 2004 with a question and answer over MARS – the relevant bits are towards the end – the OleDB magic bit is that provider fakes the MARS functionality by connecting and disconnecting multiple connection objects in the background – only in very specific situations does it use the SQLServer 2005 functionality – this was what was making the connection that was causing the error! Not surprisingly, this has a big impact on performance, and it was pretty obvious that something else was going awry here as well. Interestingly the article finishes off by advising only using the SqlClient library to talk to SQLServer – the warning is pretty stark:

IMHO it means that you should ONLY use SqlClient to talk to Sql Server, the risk of running into this fake MARS behavior is too great. I have seen this “feature� (fake MARS) cost hundreds of thousands of dollars an hour in lost sales as the server was inundated with unnecessary non-pooled connection open requests.

Understanding that, it looked like something was going wrong in the MARS support with in the OleDB provider. Quite apart from that, the algorithm it was using was going to perform badly with what we were trying to do – the ideal solution would just be to drop in the SqlClient instead, but unfortunately ditching the OleDB provider and going for the SqlClient instead isn’t really an option in this situation, as the application is slotting in with a whole suite of other applications that use OleDB, so the only option was coding around the restriction to ensure that the fake MARS functionality doesn’t operate. So out goes using our database library to manage connections, and it was back to a solution where I’m manually creating a connection object for each command and cleaning them up afterwards, and this seems to have got around the problem – in order to avoid this situation I just need the fine grain control over when things are being created.

Possibly Related Websites

One of the regular issues you often come across with software, is the old classic of the application or web site that goes wrong when faced with a foreign system. Common problems are applications that fall over when they find they’re running on a localised install of Windows (although I’ve come across applications that hit problems with having a British English install), and there are regular problems caused by especially numeric date formats.

Sometimes though you come across ideas where there is something fundamental at a design level that really doesn’t work when the idea is spread worldwide. Just one such bit of software is CommuterFeed that I came across today. It makes use of Twitter to provide a regularly updated feed of transport problems for large metropolitan areas. Essentially if you find a problem, you send a twitter to the commuter feed user, containing a code identifying the city, followed by a short description of the problem.

Looking up the UK cities, came up with a slightly odd looking list, including major cities like London and Manchester, but then also including weird choices such as Doncaster and Luton. A quick look at the list, and the city code for London (LHR) and you realise why such a weird list, the developers have opted for the IATA airport codes for the major airport for each city. When looking at it from a North American perspective that seems like a good idea – coming across the pond to the UK where many major areas that I might want to get transport information for aren’t listed because they don’t have an airport…

Possibly Related Websites

Today was the sixth of the Developer Developer Developer events at the Microsoft Campus in Reading, and as with the previous events, I spent the day enjoying the sessions. As in previous events what I actually attended didn’t quite match up with what I thought I would attend, but the beauty of these days is you can quite easily switch dependant on what takes your fancy on the day, or indeed which sessions have seats!

First off I sampled the first part of Oliver Sturm’s double presentation on producing business applications with Windows Presentation Foundation (WPF). Like most people, what I remember about WPF is the flashy eye candy filled demo applications – what Oliver aimed to do was show that alongside the eye candy was a strong platform that could produce the kind of ‘boring’ business applications that most people end up writing, something in which he very much succeeded.

I commented after DDD4 that the kind of material that Oliver covered needed an early slot, rather than the graveyard slot where everybody was tired, and it is great to see that the comment had been taken on board, as a result I thought I gained a lot from attending both the first and second parts of the presentation (although it would have been better in successive slots I have to say), and certainly have a better idea of what I can do with the new framework.

Another session that gave me a better idea of what I can do was the slightly mis-titled Cruise Control .Net session presented by Paul Lockwood. I say mis-titled as the titular piece of software only appeared at the end of the session, much of the earlier part was looking at all the other bits of software that Cruise Control .Net actually uses, and which provide much of the power of the continuous integration process. No matter as it was an interesting session, and certainly gave me some pointers towards what is needed in setting up a continuous build process. Having said that, at work we’ve been saying we’re going to set up a continuous build process for a long while, whether we’ll actually get round to doing it is another matter!

After that it was back to see Oliver for part two of his session, and then from there on to lunch.

The main lunchtime activity was the Grok talks, of which more in a moment, but first the one thing that really annoyed me about the day (well aside from the car service indicator, but that’s another story) which was the way lunch was handled. Now they’ve tried various ways around this from full scale hot food, through to the bagged lunches they have now. The bagged lunches seemed to have worked fairly well, but it is always slightly slow because they randomly pack the bags so whether you’re just like me and fussy, or more importantly have food allergies you sometimes need to look through to find a reasonable combination. Now obviously there have been comments about this, as this time they had taped all the bags shut and the only option was vegetarian or meat – but still with the same random selection. There were also Microsoft Events staff posted at each table handing the bags out and being downright rude if you tried to have a look at what was in the bags. Heaven help you if you actually had a legitimate reason to be careful what you got. Luckily my random selection was pretty good and I didn’t get a sandwich ruined by tomato and cucumber, and even struck lucky with the flavour of crisps. But seriously taping the bags shut may remove a symptom of the problem, but it’s not actually solving the problem, it’s just annoying!

Anyway, onto the lunchtime talks. In an improvement from last time they were actually held in Memphis rather than in the foyer. There was still a bit of a problem with noise as the doors were open and people were chatting outside – not helped by the lack of a microphone for the speakers in that room, but it was a definite improvement. Whilst on the subject of microphones, in answer to the organiser, who shall remain nameless, who introduced and closed the day in Chicago by saying both times “you can hear me, I don’t need a microphoneâ€?, “we can’t, and you doâ€?! I know it’s a pain to use a microphone, (and I know other people who don’t like it and think they can get away without) and it’s probably not comfortable, but you can’t be heard at the back if you don’t.

Anyway, back to the Grok Talks – there was a good mix of topics including tips on packaging up your custom controls, a demo of Windows Power Shell and some tips on how to speed up Reflection. Probably the two most memorable were firstly a senior programmer, whose name unfortunately I don’t remember, who did a primarily non-technical presentation about a recent project he led implementing a patient record system in the UAE. Basically by reviewing the project from a business perspective it highlighted all sorts of gotcha’s for other people developing software in foreign countries. In terms of software design, things like other countries having names that don’t fit neatly into the forename/surname structure used here are important, also the d’oh moment when they realised that having a picture of the patient was pretty useless when large numbers of the women wore a burqa was good to share. He also highlighted that the scheduling aspect of the system was complicated by Ramadan as the scheduling algorithm would be different in that period. He also highlighted issues of staff morale, and just getting things done – all useful stuff that some might consider common sense, but are easy to miss on a complex project.

The second most memorable was for totally different reasons. This one was Guy Smith-Ferrier talking about Extension Methods. It was memorable not because of the topic, but because Guy chose to do it as a Pecha Kucha where the presentation is limited to twenty slides, each shown for exactly twenty seconds. After those twenty seconds the slides automatically move on, whether the speaker is finished speaking to the slide or not! Even if you’re not really massively enthusiastic about the subject, the format itself does bring in a strong element of interest as you watch to see if the speaker succeeds or doesn’t manage to keep up. Although there were a few points were Guy fell behind, and even one occasion where he was waiting for the slide to move on, he largely succeeded in coping – maybe an idea to try for more speakers next time?

After lunch I stayed put in Memphis for a Question Time style session on recruitment, not because I was massively interested in the subject, but because the panel included Barry Dorrans on the panel alongside a recruitment consultant. To understand why, have a read of some of the posts on his blog… Anyway, it was a worthwhile session, as there was a good discussion of the pros and cons of going freelance – something I’ve considered before, but rejected – which was an eye opener, particularly the comments from the recruitment consultant about the issues with trying to swap back again. I also felt somewhat better about the lousy pass rate we got on the programming test we gave to potential developers on our most recent recruitment round – the manager on the panel said only one in twenty programmers pass his simple test which sounds much the same as ours. I also came away with a great little test for helpdesk operators too which I guess I’ll have to pass on. As to Barry he was entertaining and animated as always, and managed to not lay in to the recruitment consultant too much – and when he did, about the lack of technical knowledge they have, he largely agreed!

The final session was perhaps the one I had least idea before hand which I was going to attend. Eventually I resisted the temptation of Swaggily Fortunes, and went along to hear James Winters talk about how to write a Facebook application, mainly out of curiosity.

The first thing I learned from the session is that in order to make money from writing for Facebook you don’t need to do anything complicated, indeed James showed us an application that recently sold for about $25,000 that in reality took about three hours to write. To understand why, you have to go back and look at how the Facebook model actually makes money – advertising. Therefore the more users an application has, the more it is worth – so all the stupid little applications that some of the people wanting to use Facebook as a business tool tend to look down on are actually worth significantly more because they generally have many more users than the more serious applications.

The general impression I took away from the session is that a basic Facebook application is actually relatively simple to produce – the real skill is coming up with an idea that has the sort of viral penetration to spread through thousands of users, which is how you can make any sort of money as a Facebook developer. Aside from that the applications are really just web applications, albeit with some functional limitations imposed by Facebook.

Anyway, all in all it was a good day, and I picked up lots of useful bits and pieces – and maybe if I can think up a good idea I’ll make my millions writing a Facebook application… maybe not. Oh and if you’re wondering why I wasn’t micro-blogging along with some of the others on Twitter, blame the Twitter mobile service, as I tried to hook up but it wasn’t until I got home that I realised I wasn’t following the feed, so nothing had worked. Maybe next time…

DDD6 092 and DDD6 125 originally uploaded by blowdart2000.

Possibly Related Websites

We’ve just come up against a bit of a gotcha with Microsoft SQLServer 2005.

We’ve been working on a bespoke system for a customer for the past few months, and have been regularly testing against their test databases that they have been sending over, and they’ve been doing the same. Today the system was set up against their live database for the first time, at which point we got an “Ambiguous column name” error being generated whenever they loaded one of their custom query configurations into our system.

This not surprisingly had us flummoxed for a long while, and it wasn’t until I found this blog post that I nailed down what the problem actually is – SQL Server compatibility modes.

The test database that we have been using was originally created on SQL Server 2000, so when it is attached in SQL Server 2005 the system automatically sets the compatibility mode to 80 – the code for SQL Server 2000. Their live database however has recently been recreated in SQL Server 2005, so when that is attached the compatibility mode defaults to SQL Server 2005, and SQL Server 2005 is a lot more picky about certain bits of SQL syntax. As a result their custom query that works fine on the test system, that reuses a particular column twice and sorts by the same column falls foul of the new syntax rules.

Obviously you can get around the problem by switching the compatibility mode back on the new database, but longer term we’ll need to fix the problem.

It’s not the only change between SQL Server 2000 and SQL Server 2005 either – there is a pretty extensive list of all the changes with a probable impact on this blog post.

Possibly Related Websites

In amongst a lot of postings covering the recent Mix 07 event, Craig Murphy has posted a great little three minute video introducing the UK Microsoft Developer Community.

If you’re wondering what sort of stuff goes on for developers in the UK – it is a great way to get an overview.


Video: UK Developer Community

Possibly Related Websites

Yesterday was somewhat of a busy day – not only was it the fifth of the successful series of Developer Days at Microsoft, but we’d also got tickets for the equally successful Watercress Belle, the fine dining train that the Watercress Line preserved railway run on a number of Saturday evenings during the year.

The day didn’t have an overly great start. For some reason, I did something I never usually do, and despite driving a familiar route ended up heading onto the A329(M) going in the wrong direction! Not too much of a problem as I could just drive down to the next junction, go round the roundabout and back, but still a bit of a pain. Thankfully I’d left in good time, so still managed to get to Thames Valley Park without too much of a problem.

Looking through the list of sessions in advance, whereas at previous events when I’d had several sessions, usually at the same time that I really wanted to go to, this time around there were a number of spots where there was nothing I was massively enthusiastic about needing to go along to, as a result, my choices tended to have slightly different criteria. My first session choice was a good example. Whilst I was quite interested to learn about Mock Objects, Colin, the chap doing the presentation sat opposite us at the geek dinner following a previous Developer Day, and I thought I’d go along to support him too.

Although I understand that Colin had done his presentation previously, he’d been allocated one of the larger rooms, and with a full house he seemed understandably nervous. In the early stages of the presentation he did seem to flit about a bit in relation to his slides, and it took a while to answer the question I had, which was why I should consider using mock objects. Having said that, once we got to a few examples, it all started to make sense, and ultimately it was a useful and informative talk.

Moving on, I then went for something rather different, and attended the Guy Smith-Ferrier session giving tips on using Visual Studio 2005. Guy has been involved with the community for a long while, and I believe has spoken at every previous developer day. However I don’t think I’ve ever actually attended one of his sessions. Largely as expected, several of his tips were ones I knew about, however there was a goodly number of tips and tricks that told me something new. Guy’s experience was pretty apparent though, and he coped both with people in the audience correcting him, and, as is sometimes the case at these events a persistent good natured heckle from someone he knew sat down the front.

Session three was one of the points where I really didn’t know which session I was going to attend beforehand. Eventually I plumped for Alan Dean (who again we sat opposite at a previous Geek Dinner) giving a very interesting talk about Object Thinking.

The basis of the talk is a book from Microsoft Press, also called Object Thinking, the premise of which is that as software developers we have not properly understood the concepts of object orientation. Essentially what has happened is that traditional software developers have taken the concepts of of object orientation and then moulded them to be a lot closer to traditional programming than perhaps was intended. Certainly the example code that Alan showed us seemed rather radical, eschewing a lot of the perceived benefits of a language like C# – effectively reducing objects to a collection of generic fields. Refreshingly Alan was very careful not to try to “sellâ€? the concept, rather it was pitched very much from the point of view that this was a technique he found interesting and useful, and it is something that may be of benefit to us too. It has definitely made me keen to at least read the book, even if I don’t ever use the ideas.

Next up was lunch, and after my experiences previously, I managed to grab my lunch quickly, and secure a reasonable spot for the lunchtime Grok Talks. First up though, wasn’t a Grok Talk as such, but three students who had won through to the final stages of the Imagine Cup with a proposal called “My First Programming Languageâ€?. The team are being mentored by a regular attendee at the Developer Days, so in preparation for their trip to the finals of the competition, he put the three of them in front of us to get our feedback both on the ideas, and on their presentation.

In terms of the presentation, the most annoying part of the presentation was that they kept swapping presenter – it was suggested that for clarity they should have a single lead presenter in the finals. In terms of the content, it was quite interesting I think for many of us, as it was attempting to address the fact that there is a shortage of properly trained software developers. One chap next to me seemed to think that was a good thing – more jobs and better pay for the rest of us, but it does highlight an interesting change. I like many of my contemporaries learnt to program as a child, with computers like the ZX Spectrum. However over time, including a programming language with a computer has fallen out of fashion, and alongside that, computer teaching at schools, which included some element of programming as I was going through has changed focus to become ICT, which is much more about training children to use software packages rather than to actually write software.

Their tool was aimed at relatively young children, in order to try and teach them the skills that are needed to program software. Having said that while the concept seemed good I’m wondering whether, as with situations where schools prefer children to use Microsoft Word rather than an ‘educational’ word processor, the same might apply to software development. Indeed you only need watch a young child who is able to work a mobile phone much better than an adult to realise that in most cases they can understand complex tools a lot better than adults.

After lunch I attended a session by Gary Short, another SSE escapee talking about using Agile methodology in both an enterprise, and software house environment. There were certainly moments in that presentation when he was talking about difficulties in an Enterprise environment when I could tell he was very much talking about problems I encountered in SSE – and he certainly gave some food for thought for implementing the ideas in a smaller scale environment.

Last up I attended Multi-threading Patterns, a presentation by Cristian Nicola. Cristian admitted from the start that he’d had to reduce a four hour presentation down to one hour. Since in order to get to the patterns – the bit I was interested in, he had to cover a lot of the basics of multi-threading, I found it a bit disappointing, as inevitably the patterns part of the presentation was the bit that got snipped significantly.

After the end of the Developer Day, whereas usually I’d be heading home, or maybe to the geek dinner this time we were off to Alresford near Winchester with some friends to enjoy a five course dinner on the Watercress Belle. The evening consists of two steam hauled round trips on the line whilst an army of volunteers serve a delicious meal cooked on the train, definitely recreating some of the feel of a luxury dining train of old. It’s not the only special train they had running last night – last night they also had the Real Ale Train which runs the other way on the line, starting at Alton to a similar timetable – an connecting with South West Trains for the journey home. The focus of these trains is somewhat different, being very much on the drink!

As on previous trips, the food on our train was excellent, and despite the rain we got a good view of the countryside on the first round trip, and then the really atmospheric final return trip stopping at dimly lit country stations before pulling into Alresford at the end of the trip. A great evening, and one we’re sure to repeat.

Possibly Related Websites

I have a lot of respect for Jeff Atwood and his Coding Horror blog. He often has interesting and informed insights into software development, and generally knows what he is talking about.

Yesterday he posted an article under the heading “The Best Code is No Code At Allâ€? where, backed by comments from Wil Shipley he argues for the benefits of code brevity – put simply reducing the volume of code a developer has to read to understand how an application works. This is certainly something I agree with. However then he gives an example of a simple change to improve code brevity:

Instead of

if (s == String.Empty)

he suggests

if (s == “�)

He backs the suggestion with the following statement:

It seems obvious to me that the latter case is better because it’s just plain smaller. And yet I’m virtually guaranteed to encounter developers who will fight me, almost literally to the death, because they’re absolutely convinced that the verbosity of String.Empty is somehow friendlier to the compiler. As if I care about that. As if anyone cared about that!

This is one occasion where I significantly disagree with Jeff on this when it comes to development in .Net.

Firstly, using “â€? is error prone. Put a space between the quotes, and the compiler won’t pick it up – it is still a valid string literal. It may be a minor change, but it will break your application, and is the kind of typo that is a pain to find. A typo in String.Empty will be picked up by the compiler, rather than coming up in testing, or worse still on a customer site.

Secondly, using String.Empty is more efficient (although as any .Net programmer should be able to tell you, checking the length of the string is more efficient still). To understand why String.Empty is more efficient it helps to understand how .Net handles strings. In .Net, a string is immutable – it never changes, so for example routines that concatenate strings together to build up database queries will be repeatedly creating new strings throughout the whole process. The .Net Framework helpfully provides a StringBuilder object to use in such situations. However the same is true when considering any literal, so “â€? has to become a string object, and yet you already have String.Empty which is exactly that.

However, .Net has another trick up it’s sleeve, in that it maintains something called the string intern pool. Every string literal is stored in this pool, and when a new literal is encountered that is already in the pool the version from the pool is used instead, saving the overhead of creating a new object. Whilst that speeds up literals somewhat, the application still has to do slight more than if it is just handed a suitable object straight off. Using String.Empty is slightly more efficient than “â€? – and it’s nothing to do with being friendlier to the compiler.

It’s entirely fair to argue that the performance differences are negligible in most situations, a point with which I’d agree, however the differences magnify if you are producing code with a lot of literals, and a lot of string comparisons. As an aside check out this posting from a former member of the CLR team at Microsoft where he ponders whether automatically interning the entire pool when an assembly is loaded is a good or bad idea.

Put simply, if you know you’re going to be repeatedly comparing to a string value, and performance is an issue, don’t use a string literal, as every comparison you’ll get the overhead of it looking up in the string intern pool – and if the string value is an empty string, don’t bother with either and use String.Length, or better still String.IsNullOrEmpty if there is the possibility that the string is null (or Nothing in VB.Net), both of which are faster than a string comparison in that situation.

So sorry Jeff – I see your point about brevity, but I’m sticking with String.Empty!

Possibly Related Websites

I’ve just been watching the latest ScobleShow videos, which include a tour, demo and interview at Smilebox, a Seattle based startup producing a flash based platform for sharing photos, videos and music with friends and family. The service seemed quite interesting, although since the design aspect won’t work on either of my main machines here as one is a Mac (the service is PC only), and the other is running Vista-64 (the design software only works on Windows XP), it’s not really of much use to me.

However, what is interesting from a professional point of view is the point early in the video where we meet the programming team, who are developing using the Agile methodology, and more specifically, they are pair programming.

The basic idea behind pair programming follows the old adage that two heads are better than one. Essentially one half of the pair is the ‘driver’ who is the person actually using the keyboard, and the other is the ‘navigator’ who is thinking about the class that is to be written. The CEO of Smilebox makes a comment when he is introducing the team that he is sure that Robert Scoble has seen loads of people working like this during his visits, however Scoble doesn’t actually give an answer. Personally, I’ve not come across anybody working in a company that is actively pair programming, and I’d expect others will be the same. Even in organisations I’ve been involved with that have started to look at Agile Programming, pair programming is one of the most difficult ideas to sell to upper management, partly because to them programmers should be bashing away at their keyboards as much as possible, and in their eyes it will see a 50% drop in the amount of work produced. However actually seeing a team that is using the process, and hearing how quickly they can turn around new features, it certainly seems to be a good advertisement for the technique. Check the video out and see what you think:

Possibly Related Websites

Well at least it is the weekend tomorrow. As you can probably gather from my post from lunchtime, today was anything if not frustrating. After establishing that there was probably something installed on my development machine that was causing the problem, hence why the laptop was loading up the control I set about un-installing anything that wasn’t necessary. Unfortunately after an afternoon of removing one thing after another, and testing the project again, all with no success, by the end of the afternoon I was ready to drop-kick the whole PC out of the window. Hopefully Monday will shine a new light on the problem, either that or I’ll try and code around it.

Anyway, onto less frustrating things. I had a nice surprise when I got home, my copy of Shaggy Blog Stories, the book of UK blog postings put together by Mike Atkinson. For an internet published book, with effectively word-of-mouth advertising it’s doing pretty well. Apparently it sold over 250 copies in the first 40 hours, and the running tally on Mike’s site puts the current total at 410 copies, raising a fantastic £1821.22 for Comic Relief. If you haven’t ordered a copy, I can heartily recommend getting hold of a copy. Some of the names you’ll know, others you won’t, but there are certainly a lot of laughs. Incidentally, did you know that candles only burn if they are facing east? Neither did I – see, the book is educational too!

On a related point, this is the first book I’ve ordered from Lulu.com, the print-on-demand publishing service. Essentially it allows budding authors to publish their own work, and since each copy is printed when it is ordered, and the service handles all the production and shipping, it is a pretty straightforward way to get your book published. Certainly looking at my copy of Shaggy Blog Stories compared to a ‘normal’ book, aside from the missing barcode and ISBN number, it is pretty well indistinguishable, certainly in terms of the quality of manufacture. Having seen the finished article, it definitely seems like a good way to publish in small numbers, perhaps for books at the Church or something like that.

Since we’ve had a busy couple of weeks – I’ve had meetings, rehearsals, lent courses and all sorts meaning I’ve been out pretty well every night for the past few weeks – we had a catch-up session with programmes we have recorded tonight. We got through one episode of Heroes, two episodes of West Wing, and got up to date with this weeks episodes of EastEnders. I’ve mentioned West Wing loads of times before, and even linked in to clips, however I don’t think I’ve mentioned Heroes up to now.

The premise of Heroes has definite roots in the comic book genre with a large ensemble of apparently disconnected characters around the world starting to discover that they have strange powers. So we have a Texas Cheerleader who discovers that she is able to spontaneously regenerate, even at one point coming back to life in the middle of her own autopsy. There is also a Japanese programmer who discovers that he can manipulate the space/time continuum, tele-porting himself around the world and through time. There are also characters who are telepathic, characters who can fly and characters who can walk through walls. The show has been hailed as ‘the next Lost‘, in whose footsteps it certainly seems to have followed in terms of popular reception. It also seems to have followed along in terms of having a large ensemble cast, and in which the story is the main thing – so there is always the possibility that popular and apparently central characters will not survive. It is also similar in that there are many details to spot that may be missed by the casual viewer. Ironically, as Lost seems to be getting somewhat lost itself in it’s third season – certainly lacking the plot twists that kept you gripped before, Heroes seems to be taking it’s place in terms of complex and surprising plot twists. Certainly it’s got us hooked.

Anyway, thank heavens it’s Friday. We’ve not got much on this weekend, so it’s a good chance to sit back, read Shaggy Blog Stories, and watch the countdown to the new Doctor Who. :D

Possibly Related Websites

It seemed like a simple task – build a user control to search a database by date, so yesterday afternoon I set about putting the form together, using the Developer Express .NET controls. The form all seemed to be working fine, until I tried to reopen it in Visual Studio to tweak the layout slightly, at which point Visual Studio presented me with this totally useless error message – “The designer loader did not provide a root component but has not indicated why.”

Totally Useless Error Message

Bizarrely the control still worked absolutely fine when I run the application – no problems at all. The problem is that Visual Studio runs part of the control to allow it to load up in the editor, and that is apparently what is failing – however finding out exactly what is failing is a bit of a problem.

In the end I spent a couple of hours messing around trying to find out what was failing. The online sources of help, even the Microsoft sites tended to take the attitude that ‘It does do that from time to time doesn’t it…’ and then pretty limited suggestions on how to solve it ranging from manually working through the automatically generated code that the editor is using to try and display the control commenting bits out, or deleting the bin and obj folders. I tried both, and neither worked. About the only progress I could make was to get it to produce a dialog box instead with an “Exception of type System.ComponentModel.Design.ExceptionCollection was thrown” error instead.

This morning I came in and decided that the quickest way to solve the problem would be to rebuild the control, so I set about putting it together again, all appeared fine, and then five minutes ago, I got the same useless error message again.

Whilst it is questionable according to some to have a visual editor that is dependant on working code to display, that is what we are stuck with in Visual Studio – however in what is the third major version of the product, you’d think that Microsoft could actually get it to work, or at least give some sort of clue as to where the form is going wrong! Certainly at the moment it is a far cry from the image portrayed in the Microsoft adverts – hardly more productive…

Update: I’ve made some progress with finding the source of the problem. I moved the problem control into a totally clean solution, the idea being that this can be distributed amongst the other developers on the team, to see if the problem occurs consistently. Interestingly, it produced a new error message, “The variable ‘Controls’ is either undeclared or was never assigned” a few times before reverting to the previous error messages that had been occurring with the other project. I then tried it on an alternative PC, on which it worked.

That now leads on to trying to establish what the difference between the two installations of Visual Studio and the machines actually are. The machines are architecturally different, one being a relatively new dual-core box, and the other a good deal older single core machine. However both are running the same version of Windows XP, and the main version number on each Visual Studio install appears identical. However looking at the version numbers of the installed Visual Studio components on each machine does appear to show up some differences in the core components. So moving on, the next thing to try is to rerun the latest Visual Studio Service Pack install…

Update 2: So the Visual Studio Service Pack install didn’t work. Ultimately it was a case of totally uninstalling Visual Studio and clean installing the whole thing from scratch. On paper the new installation is no different from what was on there before – the difference is that my project is not producing the error message any more, so something is different – quite what I guess I’ll never know!

Possibly Related Websites

The obvious frustration in this post from a frustrated Swiss Blogger gave me a definite feeling of relief that the five companies she has issue with (MySpace, PayPal, eBay, Amazon and Google) are all in America, so all speak a language that is similar enough to British English that I can use their default site without relying on localisation.

The issue she is contending with is that she is one of the 20.4% of the population of Switzerland who speak French. All of the companies are apparently producing Swiss versions of their sites that either default to German, or are only available in German, excluding more than a third of the population that speak one of the other three official languages.

It’s not an uncommon problem though – a couple of years ago I was reinstalling Windows on a PC at Beth’s parents place, and foolishly told the Windows installer that I was in Canada, at which point it set the machine up in French, because of course all Canadians speak French don’t they…

Anyway, for anyone involved in writing software for an international market, it is a salutatory lesson in how a poor attempt at localisation can actually result in more frustration – note particularly her comment that many of the non-German speaking people in Switzerland are better at English as a second language rather than German. To be honest what I tend to do with regards to localising an application is to make sure that there is a simple way to override the settings – a command line switch for example. Apart from anything else it gives our installation engineers a fighting chance to work the application if they are testing a Chinese install of an application!

Possibly Related Websites

The ScobleShow this week highlighted an interesting way for both freelance programmers to find work, and for companies to hire them through a site called ODesk. Alongside the matching services, the site also handles paying the contractors, and even allowing the software companies to check up what work their contractors are doing thanks to it’s built in remote desktop viewing functions.

Essentially it is doing what some developers I know have done for a while. For example one former colleague did software development work remotely for a company in the USA whilst house sitting for his parents in Australia, all ODesk does is take the complication out of the arrangements allowing a wider range of companies and software developers to be involved.

Certainly if you’ve got reasons why you can’t work a regular software development job, or live in a location where there just isn’t the software development work available with your relevant skills, it certainly seems like something that is worth checking out. It’s probably also worth a look if you’re a software company struggling to find suitably qualified staff. However, if you are a developer I would suggest that it would definitely be wise to take some professional advice over the legal and financial intricacies of working remotely in this way, particularly with regards to tax for example.

Anyway, Robert Scoble interviews the people behind the company here:

and this is a demo of the system:

Possibly Related Websites

If you’re wondering what the post title is all about, read on and all will be revealed!

Anyway, today I was at the inaugural WebDD event held at the Microsoft UK campus near Reading, having grown out of the previous Developer Developer Developer events that have been running at the same location over the past couple of years.

As indicated by the title, the focus of the day was slightly different, and alongside developers working with web technologies, there was also an effort to provide sessions that would interest web designers. As a result, although there were a number of familiar faces around, the mix of people was somewhat different. Another big departure was that the speakers were not all from the community, as the team had managed to get Scott Guthrie, who on his website says that he develops a few software products for Microsoft, to speak. In actual fact, as he goes on to explain, he runs the teams that produce pretty much the entire suite of applications that a web developer will use on the Microsoft platform. Being the star turn so-to-speak he was giving a session in all but one of the available time-slots, and even repeated one of the sessions during the lunch break for those who couldn’t get in the first time around. The fact that Scott repeated a session highlights perhaps the biggest problem with having such a star turn, a fact that Barry alludes to in this blog posting and also in his session this afternoon that was scheduled against one of Scott’s, everybody wanted to attend the Scott Guthrie sessions, effectively leaving many of the other speakers feeling like overflow for those people who couldn’t get in to see Scott.

Anyway, onto the day. Before I talk about the sessions, the first thing I have to mention is the new addition to the grounds of the campus – the ‘WOW’, part of the Vista advertising campaign. J-P Walsh snapped off a picture, so I’ll leave it to you to judge whether it is a good addition!

Session wise I kicked off with the two part Scott Guthrie session on End to End Websites, then after that Jon Harris talking about Expression Blend and Design. I saw most of the repeat run of Scott Guthrie giving a sneak peak of “Orcas�, then Hristo Deshev speaking about Developing ASP.NET AJAX Components and finally Barry talking about Windows Cardspace.

Taking them in order, Scott Guthrie as you might expect given his position in Microsoft is an experienced speaker. The session was well put together, ran exactly to time, and worked pretty well flawlessly. As an introduction to building a website on the Microsoft platform it seemed to cover all the bases, and he was also able to answer detailed technical queries if he was asked. However one thing he said a lot was how super simple and straightforward everything was, and as was commented by a friend of mine who has also been developing on the Microsoft platform for a long time, experience tells us that what he is presenting is very much a sales and marketing presentation, and that in reality it won’t be quite as simple as it appears. Since Scott’s wages are paid by Microsoft, it is in his interest to present it well and make us keen to buy it. That caveat aside, it was an entertaining pair of sessions, complete with impromptu puns caused by someone close to the front suggesting names for variables during the demonstration – for example “sausageâ€? when asked for a name for a user role…

After the first two sessions, I thought I would go to one of the others in order to give others an opportunity to attend one of Scott’s sessions, and so I headed off for the Expression Blend and Design session in Memphis. I have mentioned previously that a colleague of mine refers to what he calls “The Curse of Memphisâ€?, whereby every single session he has attended in the Memphis meeting room has had technical issues – and this one was no exception. Now it has to be said, that part of the blame for the technical issues should be laid at the door of the presenter, Jon Harris, who was using an unsupported beta product, in a configuration not recommended by the manufacturer to mount his presentation, in that he had a MacBook Pro and was using the beta release of Boot Camp to boot the machine into Windows Vista – which if you read through the Apple requirements article whilst it might work, is not supported. The general problem he had seemed to be driver related – someone had plugged in a USB Key earlier in the day, and neither it, nor the similarly configured MacBook Pro they tried as well coped overly well with the projector. All in it took a grand total of 38 minutes out of a 60 minute session to get a working demonstration of Expression Blend up on the screen. Incidentally, this is where the comment I used for the posting title came from – Jon asked his colleague if he had any pictures on his laptop that he could use for a demo, not the dodgy ones, to which his colleague responded that he didn’t, and that if he did, it would get blogged about anyway, and there would be ‘Microsoft Employee in Dodgy Picture Shocker’ postings all over the web. Happy to oblige. :D

Whilst on the subject of the use of the MacBook Pro it is worth highlighting what Jon Harris does for a job – he is ‘User Experience Evangelist’ for Microsoft. According to his colleague, who provided the second MacBook Pro, they are using Apple machines because customers quite often assume that Microsoft technology won’t work on non-PC browsers – not surprising considering some previous software from the company. However with the MacBook Pro they can just boot up into MacOS X to demonstrate that things working on another platform. Interestingly, whilst the problems were being sorted out, Jon also commented that he’d been a Mac user for fifteen years – perhaps thanks to his previous life as an employee of Macromedia.

Anyway, once he got the demonstration going, it was quite interesting seeing the latest build of Expression Blend, which I had seen previously under it’s code name of ‘Sparkle’ back at DDD3. What is perhaps most interesting is that Microsoft appear to have been removing features from the product – apparently because they are trying to focus it more closely to a particular role. Features that are gone include a number of the more Photoshop like features, and also the in-built C# editor. However many of the features that are in Expression Blend are destined to appear later on in Visual Studio. The discussion of focusing products on particular roles came up again in some of the questions from the floor, which focused on the decision by Microsoft to exclude the Expression applications from the MSDN subscription. The opinion amongst the people I spoke to seems pretty well universal that the decision is a crazy one. With these products, Microsoft is trying to attract a group of people who already have a pretty entrenched set of tools. True they may not be quite as integrated as the new offerings, but they will need evangelising all the same. To many of the developers, it seems that including them in the subscription is the ideal way to get the products used, and establish a user base, hopefully attracting the target audience to the product, although alongside that there is probably at least a little bit of frustration that these new features won’t be available to developers until the next Visual Studio release!

Talking of the next Visual Studio release – known as Orcas, this is precisely what Scott Guthrie demonstrated in his next session, that he repeated over lunch. I attended the lunchtime re-run.

Apparently this was the latest build, hot off the press so-to-speak, and it did seem to have some cool features, although he did spend a lot of time looking at LINQ, which I had already seen demonstrated at previous events. Having said that, the question I always find myself asking is quite when we’ll be able to use the new features in-the-wild. Although some of our projects are in Visual Studio 2005, we still find ourselves using Visual Studio 2003 and Visual Studio 6.0 a lot of the time, indeed our core product is still written almost entirely in Visual Studio 6.0.

After the Orcas session I stayed put in the room for Hristo Deshev speaking about Developing ASP.NET AJAX Components. Now I’m not sure what his public speaking experience has been previously, but he seemed decidedly nervous when he started. This coupled with the pretty heavy technical content, just after lunch and the fact that he was giving the presentation in English when it obviously wasn’t his native language made it decidedly difficult to follow the session. This certainly seemed to be the impression I got looking at the other people in the session as within a few minutes many people had switched off. Whilst I am well aware that one of the great things about the Developer Developer Developer events is to encourage people to present – putting someone who is nervous like this, in the difficult post-lunchtime slot, with a technical talk, especially after such an experienced presenter such as Scott is a bit mean… It is very hard not to draw a comparison between the two, which is totally unfair to Hristo , who when you look at his blog clearly knows his stuff.

Anyway, to round off the day, I joined Ian in Barry’s session on Windows Cardspace.

Essentially, Windows Cardspace is another attempt by Microsoft to support digital identities and authentication, an area to some extent an area they touched before with Microsoft Passport, something that will be familiar to anybody using MSN Messenger amongst other things. Significantly it addresses a number of the issues with Microsoft Passport, including the issue of people being unwilling to trust Microsoft with data (Windows Cardspace is more open).

To some extent, part of the fun of going to one of Barry’s sessions is the man himself. We wisely sat a few rows back, so the focus of jokes was Pat a colleague of his from work who was sat in the front row, right in front of the the lectern, and who was the target of several cracks over his love of Microsoft technologies – at one point Barry even referred to him as a Microsoft Fanboy – although from his computer history on his blog his computer history is rather similar to mine, going via the Spectrum and the Amiga. Anyway, Barry also frequently commented that most of us were only there because there was no room in the Scott Guthrie session next door – partly true, although myself and my manager from work were there because we wanted to see whether Windows Cardspace would help us with authentication for some of our projects. All in all it was a pretty informative talk, and perhaps the biggest thing to take away from it was that Windows Cardspace is perhaps not quite ready for the big time – but it has definite possibilities.

WebDD Freebies

Finally, on to the important issues of the day, the loot! They had a raffle running during the day – unfortunately my ticket, 178, wasn’t drawn – although annoyingly 177 and 179 both won prizes. :( Barry has highlighted the T-Shirts over on his blog, but perhaps the biggest giveaway was the free copy of the retail release of Expression Web, the replacement for FrontPage for every attendee – this is currently retailing on Amazon for a penny under £260 – and remember we paid absolutely nothing to attend the event. Alongside this they also had a copy of Microsoft Visual Web Developer Express Edition (which is free anyway), and the latest beta releases of the other Expression applications. Not a bad haul really, and certainly some stuff that I will look at over the next few weeks.

So worth the effort? I certainly think so. The main issues that need to be addressed though are having a star turn. I’d suggest that if a similar situation were to occur again, they’ll really need to set it up as some sort of keynote address, or try to introduce some sort of better crowd management or ticketing to avoid the crushes every time the doors to those sessions were opened!

Microsoft Campus UK and The Wow Starts Now! pictures originally uploaded by J-P Walsh.

Update: Ian, who was one of the select few allowed to take pictures at the event has posted his review of the event together with a great selection of pictures.

Possibly Related Websites
Three Screen Working

So this week I got my new machine set up, and have joined the prestigious ranks of three screen software developers. Having said that – it’s not quite the arrangement that Bill Gates has, in that it’s two machines driving the three.

The laptop is pretty obvious on the left, and the primary screen for my new machine is on the right. The screen in the middle is connected to both the laptop (via a VGA cable) and to the new machine via a DVI cable, so I can switch it between the two machines depending on what I’m doing. As I mentioned a few days ago, I’m using Synergy to tie the whole lot together, sharing a single keyboard and mouse, and linking the clipboard on the two machines. It’s not quite as convenient as having all three monitors on a single machine, as you can’t move windows between all the screens, but it is still pretty useful.

Generally I have my e-mail on the laptop screen, and then develop on the two larger screens. This actually threw up and interesting case of ‘to clever by half’ from the graphics card in the new machine. I had the smaller screen on the right plugged into DVI socket number 1, and the widescreen monitor into DVI socket number 2, but it helpfully decided that I really wanted the higher resolution widescreen monitor as my primary screen, and swapped them over in software. Eventually after some digging around I found the relevant settings to switch the right hand screen back to being the primary monitor, leaving me able to swap the centre screen between the laptop and the new machine as required.

Incidentally, with regards to the Vista experiments, the new machine is still generally running Windows XP, primarily because our companies chosen anti-virus software is currently not Vista compatible.

Possibly Related Websites

At the recent DDD4, it was announced that on 3rd February, thanks to the success of the DDD events, a spin off Web Developer Day was being planned. Registration for the WebDD opened yesterday, and I’ve already got my registration in – spaces are expected to go just as quickly as for the main DDD events. If you need any more persuading, one of the departures from the format of the original events is that the conference is headlined by a Microsoftie – Scott Gutherie – a General Manager within Microsoft’s Developer Division who runs the development teams that build the CLR, ASP.NET, WPF, WPF/e, Windows Forms, IIS 7.0, Commerce Server, .NET Compact Framework, and the Visual Studio Web and Client Development Tools – who will be presenting a number of sessions.

Possibly Related Websites

When I got back to work after the holiday today, there was a late Christmas present waiting – a new development PC! The machine in question is a Dell Optiplex sporting a Core 2 Duo processor, somewhat more powerful than the Latitude laptop I’ve been using up to now.

An therein lies the problem. Since the new machine is a desktop, I’m still going to need the laptop for the occasions I need something mobile. Whilst you can get Core 2 Duo laptops, in a desktop chassis you can build a much more powerful machine, for example the hard drive in the new machine is way beyond what is available in the small drives that are used in laptops. As a result, the laptop is staying around in regular use, alongside the new machine. So how to integrate the two systems?

At this point I remembered a recommendation from Howard for a tool that he used to allow him to share one keyboard and mouse between the multiple machines on his desk – Synergy – essentially a keyboard and mouse switch box in software. More than that, it’s multi-platform, so allows you to share a keyboard and mouse between PC, Mac and Linux systems, and as a bonus has clipboard sharing too.

It’s pretty simple to set up too, just install the software onto the PC’s, designate one PC as the master, and all the others as clients, specify the screens for each, and define the relationship between each. One slight hiccup is that you have to define the relationships in both directions – which does allow you to do quite complex relationships – but for a basic setup is a bit annoying. However it works like a charm. I now have one keyboard and mouse, and when the pointer moves off the left hand side of the laptop screen it appears on the right hand side of the new PC. Even better it understands about the second screen I have attached to the laptop, and copes with that too.

If like me and Howard you’re living with multiple computers on your desk, it is a great little tool for reducing the clutter.

Possibly Related Websites

© 2010 Exigency In Specie Suffusion WordPress theme by Sayontan Sinha