Big Risk–Big Reward
/I’ve spent a lot of the last few days sitting in on Seed exit interviews. These are actually great fun, although they are also very hard work. They are part of the assessment process for our MEng students. Essentially we get them to write a case for the marks that they think they deserve, and then they come to see us and try to justify them. For more details of the kind of things we are about, take a look at this blog post from Tom.
Anyhoo, the meetings take around an hour each and they can get pretty intense. Students put very strong arguments that they should get 5 out of 5 for a particular category, and we have been known to revise their scores up as well as down. One of the assessment categories has to do with planning. This is always an interesting issue. I made a point of heading straight for the Risk Assessments that we get the development teams to produce for their projects. These are supposed to set out the major risks to a successful outcome of the project.
Managing risk is a very good plan in a project, most of the projects that fail do so because of a failure to identify and track the things that could go wrong. But sometimes folks didn’t seem to quite get the whole story. Most of the Risk Assessments covered things like data loss, changes to personnel and the like, but some missed out the most important risk of all.
“What if we can’t get it to work?”
It is not unknown for a project in real life (and our projects are as close to real life as we can get them) to fail on this one. The system can have a beautifully crafted user interface, a carefully targeted audience and snappy marketing but if it doesn’t work, all this comes to naught. If you ever, ever, get into a development project you should make it your business to put this in the Risk Assessment and then track it. Maybe the Risk can be removed really quickly, once you’ve built a working prototype. Maybe it’s a slow burner, when you have to do a bunch of work and wait on other people before you find out whether it is a workable proposition.
I make this point as often as I can, and I often get the response “Well, Duh! The project is all about making this thing work, why would you add this as a risk?”. That’s true, but I know about projects, and people, and that defect in human nature that tends to push tricky things away into the distance where you don’t have to think about them too hard. Much easier to design that pretty user interface than work on that nasty interrupt handler code, or whatever.
With experience you learn to identify the “stoppers” in a project; the things that, if you can’t make them work, render the project a failure. These go onto the Risks and are tracked regularly to make sure that nothing in the project is built on sand. By the end of the meetings I think that the students we saw had taken this point on board, which I think is a one of the many really useful outcome from this part of the course.
Future Imperfect
/Everyone should read this:
http://www.guardian.co.uk/technology/2013/may/19/driverless-cars-pilotless-planes-jobs-human
The future that is described is quite believable and rather worrying. Particularly if you drive a lorry for a living.
Three Thing Game and Summer Bash
/We are trying something new this year. A Three Thing Game during the week and synchronised with the Summer Bash. Worst case we get the summer to recover. Best case it should be fun. All the action takes place over the 30th and 31st of May. We have a Thing Auction at 1:00 pm on Thursday the 30th of May, a Summer Bash starting at 4:30 in the afternoon of that day, and judging and presentations starting at 3:00 pm on Friday 31st. You can find out more about Three Thing Game here and Summer Bash here. With a bit of luck, I might find you at both.
Finalists BBQ
/We had our Finalists BBQ today. This is pretty much the last free food that students get out of us (except perhaps for the sandwiches at the Degree Ceremony reception in July). Plenty of folks turned up to avail themselves of the various forms of cooked meat (which were all delicious) and talk about old times.
There are some more pictures on Flickr, you can find them here.
Thanks to Warren for paying for it all.
Thwaite Gardens Open Day
/We’ve been to Thwaite Gardens Open Day a few years in a row. We had the best weather a couple of years ago, last year was a bit iffy and we weren’t too hopeful about this year. But in the end it was nice and bright, and the sun even made a guest appearance. The Friends of Thwaite Gardens spend all year making the place look lovely and then we come along, take photographs and have tea and scones.
Thwaite Student Hall. If you live here you get all this loveliness thrown in.

You wouldn’t believe this was right in the middle of suburbia.
Some plant or other (gardening was never my strong point).
We bought some plants for our garden, and we’ll be back next year. If you live in the area you really should go along.
Star Trek into Darkness
/Went to see "Star Trek into Darkness" today. It is truly splendid. Great story, great ending, nods to the original series and film. I'm looking forward to seeing it again, so that I can get more of the references.
The only part of the film that didn't work for me was the uniforms that they all wore to the inevitable dressing downs that Captain Kirk gets from time to time from which ever admiral takes against him. They were really stupid. Think Russian Army circa 1960 mixed with Pan Am flight attendant 1970. But apart from that, excellent film. Go see it.
Hmmm. Re-reading this post reminds me of the old car that I used to have with the broken headlights. Most nights it used to be a case of "Start Wreck into Darkness".
How to Fail your Assessed Course Work
/
First a note. We don’t have many people that actually do fail their coursework (although, years ago I did manage it by using a variant of this technique involving punched cards). But over the years I’ve seen enough of these to be able to produce a comprehensive guide. This is the sequence that I have found works very well when it comes to failing a software development project. Just follow this fool proof set of instructions for guaranteed failure.
- T-minus 8 weeks: Assignment distributed. Decide to ignore it for now. Put on desk.
- T-minus 4 weeks: Happen to find assignment under pile of dirty socks. Take a quick look. Seems easy enough. Decide to do it later.
- T-minus 2 weeks: Find the assignment again and experience a mild twinge of panic when you look at the submission date. But no time to do it because other coursework is due in now.
- T-minus 1 week: Decide to complete entire program by performing herculean development effort over the coming weekend. Feel much better. Go to pub to celebrate.
- T-minus 2 days: Fire up Visual Studio and write 300 lines of code in one sitting. Which won’t compile. And actually you’ve no idea what it does. Stay up until 2:00am trying different combinations. Ask a chum who has just come back from the pub to take a look. He suggests adding a bunch of curly brackets and semi-colons. Code now compiles and runs. But you still have no idea what it does. Fall asleep at desk and wake up after six hours with key shaped bumps in your cheek.
- T-minus 1 day: Program now fails to compile again after you pasted in some code that you found on the internet that looked like it might do what you want. Decide to seek help. Post a plea for help in a question on Stack Overflow.
- T-minus 12 hours: Check Stack Overflow for answers. “SuperDev99” thinks you should use recursion. “P-Guy” thinks you should really use Python. “Troll95” posts that all C# developers are ugly and stupid.
- T-minus 6 hours: Having had no sleep for 20 hours you decide to re-write the entire system from scratch. It seems like the only way. You write another 300 lines of code. That won’t compile.
- T-minus 1 hour: Program now compiles, but it is alternating between crashing instantly and causing the computer to lock up. Check Stack Overflow again. Find that someone has posted a complete solution to your problem. In Prolog.
- T-minus 10 minutes: Submit program that compiles, runs and prints “Sorry about this” in large friendly letters on the screen. Oh well. There’s always the resits.
Now, of course, nobody actually does all of this. Although I’ve managed most of these tricks at one time or another. Please, please, if you get some coursework, frontload it. Have a crack at the code as soon as you receive the specification and then play with it in the run up to the due date. You don’t have to write all the code at once (in fact this is a bad plan) but you should keep noodling along with the system over the weeks leading up to the hand in. And seek help if you hit problems.
The internet is often very useful, but beware of using downloaded code. Often you end up trying to use some code you don’t understand to solve a problem you don’t understand and getting errors that, wait for it, you don’t understand. Much easier to take your problems down to the lab or to the person in charge of the coursework and get them to help. If you want to post questions, use the forum or departmental Facebook group. At least the folks there will have an inkling of what you are doing and why.
By the end of my university career I was getting reasonable marks for coursework, and this was mainly down to a “starting early” technique.
Nokia Champ Rob
/I found out last week that I've been appointed as a Nokia Developer Champion.
I'm not sure if it is for those WAP pages I used to write for my Nokia 7110 (I actually had a script that would read my email and convert it into WAP so that I could read my mail on the move), but it is rather nice.
Thanks to those of you at Nokia who thought enough of me to make the award. I hope I prove worthy of it.
Bill Bailey at Hull City Hall
/Playing classical music on car horns. And why not?
I saw Bill Bailey a few years back when he came to Hull. And today we saw him again. It is amazing to think that one person can entertain a building full of people by just standing there and being funny. But he can. If you get the chance to see him on this tour, just go. Great stuff.
Deal Extreme for Extreme Deals
/If you are looking for anything electronic, and lots of things strange, then I can reccommend these folks. They have a huge range of stock which changes by the hour and includes lots of exotic and interesting components. They price things in dollars and their delivery is free (but very slow, allow four weeks). You can pay with PayPal, which is nice too.
I had a need for a little USB hub and network thingy and these folks were able serve up just what I wanted, at a very sharp price.
What use is a structure?
/It is exam season here in Hull. Later in the week we have our programming exam. And I’m getting quite a few questions through about C# and stuff. Today I got asked the question “What use is a struct?”. I’ve been spending a lot of time talking about classes and references and how clever they are, and someone wants to know why, if classes are so wonderful, some objects in a program are managed by value. The answer is simple enough. It is because sometimes you really want a value which you can just copy around easily.
Consider the Rectangle type in XNA. We can use this to represent the position and size of something on the screen. And this is a struct, not a class. Take a look at this code:
a = b; a.X = 99;
If a and b are both Rectangle variables the effect would be to set a to the value in b and then move the X position of a to 99. This would not affect the position of b.
If the Rectangle type was a class then we would have two references, a and b, that both refer to the same object in memory, so moving a would affect b as well. If we want to place objects in lots of different positions on the screen, and we don’t want them to be linked in any way, then structures managed by value is the way to do it.
Note that things like Textures are managed by reference. This makes a lot of sense too. An image is a large thing, and it is often very useful to be able to share one image for a whole bunch of things. Think multiple sprites in a space shooter. They will have a Rectangle value to give them a unique position and then a reference to a texture that they all share, to give them an appearance.
The XNA framework is full of objects that are actually structures because they work better this way. For example Color, Point and the Vector objects are all structs so that we can manage them by value. In fact, now that you know how it works, you should be able to look at any XNA type and figure out whether it is a class or a struct, just based on how it is used.
Page Navigation in Windows Phone Applications
/I got asked a question about Page Navigation in Windows Phone applications. Having a spare 10 minutes I thought I’d record a tiny screencast about it, which you can find here.
It tells you how to make a multi-page Windows Phone application and then navigate between the pages. You can find the sample application here. The text that is referred to in the screencast is the Windows Phone Blue Book, which you can find here.
Christian Aid Humber Bridge Cross
/We did the annual Humber Brides cross for Christian Aid today. We’ve been doing this since we had to push the kids around in little chairs, which was quite time ago. The weather was mostly kind to us, apart from the horizontal rain and the cold winds, but we did manage to get there and back, which was nice.
Iron Man 3 Rocks
/Went to see Iron Man 3 last week. Very good film. Shows the value of having the lead character played by a proper actor. Lots of action and explosions, but also some good plot twists and a very human heart at the centre. Recommended.
Pulp Dates for your Diaries
/

I’ve been playing around with the Pulp-O-Mizer to make some posters for the social events coming down the tracks at the end of this month. You use the web based interface to design great “future-retro” magazine covers.
If I lived in the ‘states I’d be able to get posters and other stuff sent through with this lovely artwork on it. There are also interactive comics and all kinds of good stuff. Well worth a visit.
Matt Smith at the Imagine Cup Finals
/Good grief. I mean golly gosh. I mean wow.
I’ve been involved with the Imagine Cup for a while. I sit at my computer writing emails and looking at entries and usually see it as “a student competition that I play a small part in helping to make work”. Then, when I go to the World Finals and I see just how much effort Microsoft put into it, and how much it means to the students that take part, I get the big picture.
I got another dose of “big picture” today when I found out that Matt Smith, currently doing a magnificent job as Dr. Who over on the BBC, will be hosting the World Finals in July. Blimey.
I’ve been a fan of Dr. Who since I watched it in the sixties on a black and white telly that could only receive one channel. To have someone like him taking to the stage on behalf of the competition marks a new high in my book. Amazing.
It looks like they are going to stream the finals live over the interwebs. It should be an awesome night.
The Proper Use of Exams
/I did a revision lecture today for the First Year. The exam is next week. Afterwards I got an email that I found both amusing and a bit irritating. The sender wanted to know what would be coming up in the exam this year “so that I won’t have to waste my time revising the other stuff”.
Oh well.
I think that person could use a slightly better perspective on why we are all here. I’m not teaching this stuff so you can get through the exams. I’m actually doing it because I want to pass on things which I think you should know if you want to do Computer Science. Another thing I find amusing/irritating (but also rather pleasing) is when we have students come back to Hull after they have graduated and say things like “You know, that stuff you taught is actually quite useful.”
Well, duh.
I use exams as a rather blunt instrument to make sure that folks learn the stuff that is really important about the subject. There is no secret about some of the topics that will be on the paper, since those things are there every year, and all you have to do is learn them. And by learning them I mean not being able to repeat the words, but actually achieve something using what you know. In fact, the way I see it, learning by applying the knowledge is actually much easier than just trying to bash in sequences of words that you can then trot out if you recognise the context of the question.
You could learn that “An interface is a set of methods that a class must implement in order that it is possible to create an instance of that class”. Or you could learn that you use an interface when you want to treat invoices, receipts, customers and any other objects in your solution as things that can be printed. The printing process only want to manipulate objects in terms of their ability to be printed, so you use an interface to describe the methods that give this ability and then make each object implement it.