The Free Hardware Fairy: Windows Surface RT

Reading Time: 5 minutes
Surface RT: It's a Nice Idea.
Surface RT: It’s a Nice Idea.

I was on campus at Hull last week and pretty much as I walked in the door the ICT dept. jammed a Windows Surface RT into my hands. “It’s useless,” said a man in a Where Would You Think t-shirt, “enjoy!”.

I was quite excited about getting a Surface RT however, mostly because a lot of our customers do significant amounts of business when out-and-about. Developing for Android and iPad is a bit of a pig for Seed as it’s basically a Windows software house (although we do do it). So having something based on an ARM processor but that runs Windows must be a pretty major innovation for us, right? I mean most of our apps are pure .NET so you’d think it would be child’s play to get them onto the Surface RT right?

Oh no. It transpires that only Microsoft’s own apps are allowed to run on the desktop and yeah, most of our apps are for the desktop. In fact, without jailbreaking it, the only way you can get your apps onto the Surface RT is through the Windows Store.

Now I understand, from a technical point of view, why Microsoft may want to do this; Windows is still in a transition. Microsoft don’t really want anyone fiddling with that old Win32 stuff because it’s dangerous, but a lot of legacy apps still need it. Whilst Microsoft continue to provide access to the Win32 interface those applications aren’t going to stop using it. So they need to break the chain.

The reason it’s dangerous – indeed something that’s bugged Windows from the start – is that they’re trying to retrofit security. Basically Unix-like operating systems, of which iOS and Android are, start with the premise that as a user (or application) you’re not allowed to do anything. You are then granted permission to perform certain tasks. You can’t get at the soft underparts of the operating system unless you’re a superuser and in the case of iOS and stock Android devices they’re not letting you do it (although you can “root” most Android devices to get such access if you really want).

Windows however started life assuming that the user could do anything they wanted, so security simply wasn’t included at the start. This means that Windows has a heck of a lot more holes to plug than the other two platforms, and they’re not there yet. To clarify, we’re not just talking about hackers and viruses, but a lot of legitimate programmers have been using stuff in Windows – often because there’s no alternative – that can actually destabilise the system. Opening up the device to anything that would cross-compile for the ARM processor would mean they had exactly the same problems on the tablet as they do on the desktop.

Essentially we’re all still paying for a cock-up that Microsoft made in 1981.

There would be a half-way house though, as I mentioned before most of our apps are pure .NET which in theory can’t do anything nasty. The fact that RT is not open to pure .NET apps makes me scratch my head a little. I can’t help but wonder if perhaps the current .NET runtime (for desktop) isn’t quite a clean as it ought to be.

So, as a software developer I find the Surface RT frustrating, it has a desktop that I can’t use, I can’t write Windows Services (even in .NET), the only thing I can do is write store apps and even then it’s subtly different to writing a Windows Phone app.

Microsoft themselves have done a reasonably good job of getting their own apps onto Surface RT (e.g Skype, Lync) and there’s a smattering of the top apps that you’d expect to find – Facebook, Twitter, Kindle etc. but that’s about it. There is a woeful lack of applications for the platform. Not only that but even apps like Facebook and Twitter seem limited compared to their Android counterparts. They’re clunkier, it’s clearly that less attention has been paid to them.

So the big advantage of the Surface RT over an Android or iPad tablet is that it runs full Microsoft Office. That’s it. That’s the advantage and to be honest some of the alternative office packages that are available for Android are pretty good. In every other way it’s a worse platform than Android or iPad.
It even needs its own special charger rather than using Micro USB – although to be fair it uses a 12V supply whereas USB is 5V.

Annoying
Annoying

What Microsoft have done is to pretty much guarantee failure of the platform.

Still, it must be useful for something, right? I mean it’s actually quite a good piece of hardware. They detachable keyboard thing works really well too.

It’s certainly better (hardware) than the cheap Chinese Android table I got a couple of years ago. So why don’t I run Linux or Android on it? Well I can’t because Microsoft have locked the bootloader. Before you scream “no fair!” almost everyone does these days, Android included. Some Android manufacturers however release unlocks for their bootloaders. HTC for instance generally do when the device is a couple of years old (via htcdev.com). I can’t see Microsoft doing this.

In conclusion, the Surface RT is not the platform for development that I’d hoped it would be; it’s not very useful for us to develop apps for. Yes it has Office which makes it a useful device to have around for meetings etc. and it’s a lot easier to get in hand luggage than a laptop. It lacks the I/O though to make it a useful presentation device and there’s no chance of running up Visual Studio even if I could put up with it running terribly slowly. For me it cannot replace a laptop for anything other than the most basic business use.

There are cheaper Android devices that are far more capable – and the lack of Microsoft Office on them isn’t really much of an issue. There are x86 based tablets that run full Windows and, whilst they might be a bit slow, are actually viable as a travel alternative to a laptop. Microsoft themselves even produce the Surface Pro series.

To cap it all off the lack of apps puts it way behind the competition as a social and media platform so I’m really struggling to find a use for it. I’ll let you know if I find something a little more involving of technology than this…

Surface RT: Not Even a Good Doorstop
Surface RT: Not Even a Good Doorstop

The Corsa SRI

Reading Time: 3 minutes

We use hire (rental) cars at The University a lot which gives me the chance to drive a range of different cars. Today the hire car fairy brought me a Vauxhall (aka Opel) Corsa SRI. In yellow.

Yellow Peril!
Yellow Peril!

I was quite looking forward to driving it because it’s really popular with car modders, so presumably there’s something a bit special about it, right?

Err, yeah. I found that out really rather quickly, but first let me tell you what’s good about it.

It feels like good value for money. I’ve driven a few cars that feel like pieces of agricultural machinery with a few pieces of friendly plastic Blu-Tacked to them. The Corsa is pretty solid, well put together. Obviously there have been compromises but there’s nothing that rings out as glaringly cheap. Nothing agricultural.

The equipment is clearly a bit of a compromise. Boxes have been ticked, but the features are often difficult to use. Cruise control for instance, it’s there but it’s a bit of a battle compared to more upmarket Vauxhalls.

Nevertheless on the road the car is direct and feels very well connected to the road, you can throw it into a corner with confidence and know that you’re not going to be constantly fighting understeer.

It’s clearly relatively cheap and if you’re not expecting top class then it’s relatively well equipped.

But Where’s the Engine?

Thanks I suspect largely to the gearing the car is very nippy around town. I don’t live in a town, I live in the middle of nowhere. Sure it’s pretty nippy on narrow country lanes too but as soon as you get out onto wider roads you realise that only the first two inches of throttle pedal travel actually makes any difference.
I don’t think I’ve ever spent so much of a journey at 4500rpm trying to smash my foot through the bulkhead screaming “MORE POWER! MORE POWER!”
I can accept peaky small engines that have no guts outside the power band – I drive a Japanese car after all – but this engine has nothing in the power band either.

The Stereo is Woeful

Precisely No Features
Precisely No Features

A new car that doesn’t have DAB, USB or Bluetooth. Really? Just a CD player and AM / FM radio. Surely there are laws against this kind of cruelty. I wasn’t in the mood for Radio 4 and I’m not old enough to listen to Radio 2 so I whipped out my hand AUX cable and plugged the phone in. No matter how I tweaked the settings though I couldn’t get it to sound good. So when I stopped for a cuppa I tried tweaking the considerably more extensive graphic equaliser on my phone. Nope, the speakers are clearly made of cheese.

Clearly a Good Candidate for Modification

So to summarise, we have a car that handles well, is comfortable, is of generally good quality and comes with a good basic level of equipment. There’s a lot of potential for improvement however, almost everything could use a step up to the next level but I’ll single out the stereo (woeful) and the engine (was there one?) for particular attention. Coincidentally these happen to be the first two items that modders seem to want start tweaking…

The Road To Hull…

Reading Time: 12 minutes

I rather suspect that I was not the one person that James thought would be reading his blog article, but nevertheless I did and with some interest. There are many routes to and indeed through university and it struck me just how different my story is to his.

Sadly this tale takes place before the prevalence of digital photography so it’s a little light on images. In fact it really begins at a time when photography itself was in its infancy, paint was the order of the day.

John Constable: The Wheat Field
John Constable: The Wheat Field

Never Destined for University

My ancestors didn’t go to university. Most of them barely went to school. They were farm hands and factory workers with the odd miller and dressmaker thrown in just to add spice. In 1944 however there were significant changes to the state education system – changes that meant that both my parents were able to get a far better education that their predecessors.

I was born into what was very definitely a white collar family. I would argue that we were working class – even though my parents made their living with the pen and not the plough we had no central heating, double glazing, car or telephone.

I was a normal child, I loved sport and playing outside, building dens and generally acting like I was a character from a Just William book, or more likely from the Beano. I quickly noticed though that my interest in science and maths was a little more keen than most of the kids around me. The roofs of my dens stayed up and it wasn’t my aerial runway that snapped, dropping Craig derrière-first into some very uncomfortable looking brambles.

In the early 1980s home computing was taking off and my elder brother wanted to be right at the cutting edge. We couldn’t afford that, but we had a steady stream of second hand equipment that he’d push to its absolute limit. I was a bit young for this but I tried to join in, I think I annoyed him quite a bit but these were valuable lessons to me. I learnt to program a computer when I was about 8 years old, about the time I learnt the offside rule.

I found school frustrating. I had trouble concentrating in the classes I wasn’t interested in and trouble coping with how slow the ones I was interested in moved. Nevertheless I did quite well, but I’m sure there were a few teachers tearing their hair out in the full knowledge that if I actually applied myself in their classes I could have done so much better.

I knew what I wanted to be though. I knew at 8 years old that I wanted to be a computer programmer. These were exciting times and the more and more I heard in the media and the more equipment I managed to get on the bench in front of me the more I was sure. Studying history was just not where it was at. Who learned anything from history anyway? Computing, that was where you had to be. Computing was going to be increasingly important in society and it was going to be where I made my career.

There was a problem however. My parents were quite remarkable simply because they had both stayed on at school to get O Levels and not left to find work at 14 (or even 11). A Levels? University? It wasn’t something that was in my culture. Besides, by age 16 I felt that I’d had just about enough of formal education, I felt I was being babied by the system, it was channelling me down a very generic route and actually preventing me from studying the things that would be best for my future.

British Telecom Research Laboratories

Fortunately for me, British Telecom’s world renowned research facility at Martlesham was a comfortable cycle ride from where we lived and at 16 I joined their Trainee Technician Apprentice scheme to train to be an electronic research technician. I never had any intention of actually working as an electronic technician though, by that point it was clear that electronics research in the UK was all but dead. If BT were going to continue with research it was going to be in software, not electronics.

The training group had tried their best to alter the apprenticeship to reflect this, but in reality they hadn’t gone anywhere near far enough.

BTRL - Now Called Adastral Park
BTRL – Now Called Adastral Park

I was young and rather petulant, the course wasn’t what any of us needed and I was – on reflection – rather obnoxious about this. I almost got fired. Several times. They really weren’t happy with me doing just enough to scrape through the electronics stuff and using the time and facilities to learn more the kind of computing that I thought I was going to need. To them I was pig-headed and insubordinate. To me they were irretrievably mired in the dogma of a dying industry. I was just – but only just – smart enough to toe-the-line enough not to actually get fired, even so I sailed pretty close to the wind a few times. I even wrote a farce called “BT Terminated” which loosely chronicled the battles I had with the Training Division. They found a copy of it and did not see the funny side. I almost got fired for it.
Nevertheless I did actually enjoy my time as an apprentice and the TTA scheme was hugely important to me, a lot of the skills that I still use today were learnt on that programme.

Somehow I made it through
For some reason I thought a purple silk shirt and braces was a good idea.

BT’s Operations and Maintenance Centre

I graduated from the training scheme and went into the OMC team. At that time the Operations and Maintenance Centre was a network of computers that controlled the vast majority of telephone exchanges in the UK. This was very different to the systems I’d been working on as a trainee which were generally small experimental developments.

The OMC team wasn’t really my first choice, the problem was that I was very conscious of what the training division thought of me and there was no guarantee of a job at the end of the apprenticeship, so I thought any job in software development was a good outcome.

Unfortunately I walked straight into the same kind of problems that I’d battled throughout my apprenticeship: the OMC used some rather dated technology and methods and wasn’t really compatible with my enthusiasm for being on the front-line of technology.
They viewed me as a having a dangerous obsession with the cutting edge that was putting the UK’s telephony infrastructure at risk and I viewed them as dangerous Luddites whose desperation to cling on to the 1970s, use defunct and irrelevant methodologies and archaic technology was putting the UK’s telephony infrastructure at risk. The truth of course, was somewhere in the middle and if we hadn’t all been quite so pig-headed I think we could have achieved something rather significant.

It was in the OMC team though that I first learnt the realities of trying to build and maintain a large mission critical system that required extraordinary resilience. A lot of the lessons I learnt then are very much still with me today.

I was conscious though that my technical skills were falling behind the curve and that was going to make it difficult for me to find a more suitable position. I needed to get out of there or my career would suffer. Unfortunately at the time the OMC team was deemed to be under-performing which made it very difficult for anyone to transfer out. If I was going to get out, it was almost certainly going to be out of BT.

Then a few things kind of happened at once. Firstly, a new boss arrived – he’d come through the graduate programme which wasn’t unfamiliar to me, I’d worked with graduates during my training programme and these were some of my favourite times, their theories and my practical ability were a good combination in the research environment. We made some pretty remarkable stuff happen.

That did not happen here.

The new boss was a nice guy and he was doing his best, but he was a new graduate trying to deal with an embittered and demotivated team and he wasn’t shining. To me it was really obvious: he had no special ability, no great knowledge of how to develop software that had been imparted to him in the hallowed halls of some arcane seat of learning. He was now just like I was when I was 16, starting out learning his trade, it’s just that he was doing it as a manager not as a technician.

Some time around then, one night in the darkest corner of the dingiest nightclub in town a girl I’d met a few weeks before said something that would change my life forever.

She said “You must meet my friend, I think you’ll like each other”.

Some Kind of Stranger

You know those things that really only ever happen in films? Your eyes meet across a crowded room, you tip your hat, smile and calmly wander over to where she’s stood. Something witty immediately springs into your mind and everyone lives happily ever after. Yeah, it didn’t go anything like that.

I’d never been formally introduced to a girl who I was supposed to like before and it was all a little awkward. We both – almost immediately – pursued relationships with other people. Nevertheless I couldn’t get the girl out of my head so I was glad that we started turning up in the same place a lot of the time. I was more glad that I wasn’t the only one doing it deliberately. With the pressure off we’d chat a lot and, well nobody was surprised when those other relationships didn’t last so long.

One of the first things she told me however is that she was going to University next year. I knew that almost all long distance University relationships fail – and fail quickly. I didn’t want to lose her.

I’d long held the idea that when I was a bit older I’d take what amounted to a career break and go to University. It was a target that I’d chalked onto the wall of things that I’d like to achieve at some unspecified point in the future.

Right now I was going nowhere in my job. I knew that this was the kick up the arse that I actually needed.

I looked at the new boss’s salary and mine. I looked at the progress that I could possibly make in 3 years if I stayed. I did the sums, I calculated the opportunity cost. It was clear that getting a degree for me at that time was a good investment.

At the time the web was taking off and the opportunities for software developers were rapidly increasing. I thought it highly unlikely that I would struggle to find a job even if university didn’t work out. The girl however, she was definitely for keeping.

BT did sponsor people to go university but they only allowed the cream of the crop to apply and not only did I have a the under-performance of the OMC team to contend with but the fact I’d narked off pretty much everyone in my command chain throughout my entire career up to that point.
BT were however offering voluntary redundancy which, if used wisely, might just see someone through 3 years of study.

Suffolk Wildlife Trust

Unfortunately the redundancy scheme was closing and it would leave me with a 9 month gap until until the start of the next academic year. So I took a career break and I actually ended up working for Suffolk Wildlife Trust. They needed IT skills which I could provide, at the same time I was able to get out into the meadows and woodlands of Suffolk as part of their habitat management function. Spending 9 months of my life not chained behind a desk was just the sort of break I needed.

A lot of this work actually meant leading teams of volunteers and this was one of the most valuable experiences of my life. These people wanted to work, but a lot of them – for a variety of reasons – had been tossed onto the scrapheap of life. Many of the people had learning difficulties and this is one of the times I remember my perspective on the world suddenly whirling round to a totally different angle. I had to find a new way to lead because what worked in the lab and on the sports field wasn’t going to work here. I learned compassion, patience, understanding. I learnt to lead by not just giving orders but also by supporting people and enabling them to get the job done. Mostly it was simple things like not sighing when I had to explain for the 19th time that day how to use a brush saw. Seeing someone’s expression turn from sadness to joy just with the simple words “You’re doing a good job!” is a powerful thing indeed.

The skills I learned at SWT have helped me in so many ways in so many different parts of my life I can’t even begin to try to quantify. I was genuinely sad when my time with them came to an end.

Going to University

...from my student card
…from my student card

Hull got short-listed almost by default, it was one of only six universities that offered both the degrees we wanted. Outside of Oxbridge it was the second highest rated. We also both knew people at Hull and it came with good personal recommendations.
It’s worth mentioning that I was 21 at the time which meant that I counted as a mature student and the fact that I didn’t have A levels or equivalent academic qualifications was therefore not an automatic bar to my acceptance onto a course. Having said this I did still have problems getting traction with quite a few places. I realise it was easy to overlook my application, I’d done an apprenticeship in electronics but that probably just meant that I was just really good at soldering. Similarly I’d worked for a software house as a software technician but that could mean that I was just loading copies of Word onto people’s PCs. Hull was one of very few establishments that I believe properly considered the detail of my application rather than simply dismissing it on face value.

I wasn’t exactly the normal first year student. I’d already been through the phase of being young and away from home. I’d also come from an environment where not turning up in the morning because I’d overdone it the night before wasn’t an option. I went out a lot, but I knew when to call it a night. Having said that there are plenty of weekends that I plainly don’t remember.

So in a remarkable turn-up for the books I turned out to be a model student. I’d finally got myself into the environment that I wanted, actually studying the subject I wanted. Sure there were aspects of the course that I didn’t agree with but I’d grown up a lot since leaving BT. Yes I was still annoyed because I believed my time could be better spent in some areas but I’d gained a sense of perspective, the problems really weren’t that bad and the overall result was very much for the better.

At the time the big software corporations hadn’t got involved as much with student activity. There were a few events, notably The British Computer Society Challenge which is the reason you’ll find my name etched into one of the plaques on the wall in the department.
The department itself also ran a number of challenges which I always seemed to manage to unintentionally avoid, usually through strange coincidences such as them happening to book the closing date on the same day as a major music festival.

I had fleeting involvement in Freeside. When it started the main aim was to explore free, open source software and to get such operating systems (not just Linux) running on any hardware it could get its hands on (not just PCs). I would have liked to have spent more time on/in Freeside but it just didn’t happen, by the time I really became aware of it I was moving into my third year and a lot of extra-curricular activity was dropped so I could concentrate on the important things.

I don’t remember much about the third year, I don’t remember a single exam and I only have the vaguest memories of graduation.

Graduate Life

Apart from a brief sortie into the world of database middleware development I stayed in the area of communications and large public safety systems. Something had changed though, I was no longer that petulant child trying to fight against everything I saw as wrong. All that natural drive and energy were now being used in a positive direction, they were making a huge difference in my career and were really helping the businesses that I worked for.

The Seed Office at about 8am...
The Seed Office at about 8am…

In 2008 however I was ready for a new challenge, something that I knew was going to be different and take me to places I’d not been before. So 8 years after graduating I rejoined the University of Hull, this time not as a student but to lead the development of the Brigid Command and Control system. Seed Software has undergone a few changes since then and my role has changed and developed. Being a student at Hull was the first time I really felt at home with my career in computing. Being there as a leader and a mentor is an immensely fulfilling role and one I hope to be able to continue for some time to come.

If you’re wondering what became of the girl, I saw her recently. She’s doing well, has a very successful career. She lives in a little Georgian Cottage in Suffolk with a small black and white cat and her husband, who just happens to be a certain Computer Programmer.

Using Process Explorer to Clobber Phantom Windows

Reading Time: 2 minutes

I’ve noticed a lot, particularly in Windows 8, that I get phantom windows. Perhaps the application wanted to create an invisible window but for some reason it gets displayed. This is very annoying, especially when it sits permanently on top of other windows like this little example here.

Very Annoying Always On Top Window

Thankfully there’s a quick and easy way to get rid of them using the rather handy Process Explorer from TechNet.
At the top of the app are several buttons, one of them looks a bit like a targeting system and is labelled "Find Window’s Process"

Find Window's Process

Simply drag that button onto the offending window and drop. Process Explorer will then highlight the process responsible, which you can deal with.

Identifying the Offending Window

In this case it was Outlook and simply restarting the application fixed the problem.
Very Annoying Window Gone!

Using IP Webcam to Boil Eggs

Reading Time: < 1 minute

Cooking With IP WebcamIP WebCam RemoteI end up using the IP Webcam Android application for all sorts of things. It’s really easy to prop or jam an Android device pointing at something you need to keep an eye on or even push the device somewhere where you just can’t get your head. Then fire up a web browser and monitor the output stream.
Today’s issue was that I forgot to boil some eggs for lunch, so I propped my Wildfire S against a spare pan and went back to the office. There I monitored the webcam and started the timer when I saw the eggs boiling. They were ready in perfect time.

Seed At BAPCO 2014

Reading Time: 3 minutes

Tom at BAPCO 2014
British APCO, or simply BAPCO is the Association of Public-Safety Communications Officials. At Seed we produce not only communications systems for the emergency services but many of the applications that use them: in-vehicle systems, hand-held systems for mobilisation and data capture and our Command Control mobilising system.

So being represented at BAPCO’s large annual event is important for us. In previous years we’ve piggy-backed on some of our partners’ stands but this year we decided that our portfolio was significant and mature enough that it warranted its own stand.

The results were pretty amazing, there was a real buzz around the stand with people from all over the emergency services and public safety spectrum coming to talk to us and find out more about who we are and what we do.

It was a lot of hard work though; it’s nearly a week later as I write this and I’ve just about finished tidying up all the admin. For the other guys it’s been a much longer road. I was able to simply turn up to the stand on the first day. There were weeks’ worth of preparation effort before that – design and planning. Then the guys had to put everything in the van, drive it to Manchester and get the stand set up. We don’t have people to do any of this for us, so it was great experience for our young software developers to be part of the process right from the graphical design to screwing shelves into the wall.

They were also in the front line on the stand, talking to people and demonstrating our software. In the average business only very senior technical people get to do this, so to be able to give them that kind of experience – and just the experience of being at such an event – is a great benefit.

It wasn’t all work and no play though. We had some fun, such as the reaction training (computer) game at the official dinner – well there was only ever going to be one winner of that! We now know who plays the most shoot-em-ups too, and it wasn’t who we thought.

As a business, BAPCO 2014 gave Seed some great opportunities. Firstly we were able to connect with our existing customers and partners. As we don’t have any customer relationship managers every opportunity to spend time with the people we currently do business with, to talk about openly about their needs and where they see those needs going is really important. Getting those discussions out from drab meeting rooms and into an environment of seemingly limitless possibility is also important because at Seed we’re always looking forward, trying to work out ways that we can use technology to benefit our customers and our society.

We were also able to get the message of who Seed are, what we do and why we’re different to a much wider audience. Sure just about everyone in the Fire Service has heard of Seed but not many knew that nearly a third of England’s Fire Services have a Seed system. Not many realised that we started back in 2005 and that since then we’ve grown a lot; we’re not just in-vehicle terminal (MDT) providers any more, we have a full portfolio ranging from data capture to our own Command and Control mobilising system.

Seed is not limited to the Fire Service either – some of our products are as applicable to other emergency services as they are to Fire and further even that that. Our mobile forms product for instance is applicable anywhere where field workers have to fill in forms that need to be centrally collated.

Being able to stand in a room where most of the UK’s public safety organisations are represented and give those messages loudly and clearly is a hugely positive thing for us. We’re all very glad we did it. I enjoyed it too, sure it was tiring but it was very definitely worth the effort.

There’s more specific information about Seed on our web site here and my blog here. Also feel free to contact me directly at T.Fosdick@hull.ac.uk.

There are some photos and a video from the BAPCO event on our Facebook page.

Why I Hate ORMs, Part 2

Reading Time: 3 minutes
Faster than an ORM...
Faster than an ORM…

It’s no secret that I am not an ORM fan. Actually that’s a little harsh, ORMs bring some significant advantages and it’s not just having an object orientated view of a database – a lot of junior developers just don’t know SQL and they can save a massive amount of development time. They also discourage people from infecting the code-base with SQL which can prove a real maintenance headache.
So in many ways ORMs are a good thing.

Unfortunately using an ORM can result in serious database abuse. Not so long ago I profiled some of the LINQ-to-SQL that one of our products uses and I nearly had kittens (some of that’s mentioned in this article). It was making thousands of unnecessary round trips to SQL Server to pick up individual records when one query could have got everything we needed.

A project that my team have just inherited demonstrates a different kind of database abuse rather neatly. There’s a web service that basically just provides a view of the DB. One of the methods does this…

return dc.Streets
	.OrderBy(s => s.Added).ThenByDescending(p => p.GUID.ToUpper())
	.Skip(start)
	.Take(count)
	.ToArray();

Which is fine, apart from the fact that it transpires that it’s perfectly legitimate to have duplicate keys in the database (it’s not our DB). The Web Service is consumed by our remote client and we’d rather not be sending that any duplicates – so I modified the LINQ to eliminate them.
The situation is slightly more complex than just using .Distinct() because in the case of duplicates what we actually want is the later record, according to the Added datetime field.

return dc.Streets
	.GroupBy(key => key.GUID.ToUpper())
	.Select(g => g.OrderByDescending(x => x.Added).FirstOrDefault())
	.OrderBy(s => s.Added).ThenByDescending(p => p.GUID.ToUpper())
	.Skip(start)
	.Take(count)
	.ToArray();

The .GroupBy groups the records by the key, then the following select only returns one record, the one with the highest “Added”. The result of this is an IEnumberable<Street> so the .OrderBy etc. will work just fine.
It doesn’t work though, it throws a SQLException because the SQL that the Entity Framework generates contains the “Added” column in the order by clause twice. So I thought I’d profile the SQL Server an see exactly what it was trying to do…

SELECT TOP (500) [t4].[test], [t4].[GUID], [t4].[ParishGUID], [t4].[Name], [t4].[Active], [t4].[Added], [t4].[Created]
FROM (
SELECT [t1].[value]
FROM (
SELECT UPPER([t0].[GUID]) AS [value]
FROM [dbo].[Street] AS [t0]
) AS [t1]
GROUP BY [t1].[value]
) AS [t2]
OUTER APPLY (
SELECT TOP (1) 1 AS [test], [t3].[GUID], [t3].[ParishGUID], [t3].[Name], [t3].[Active], [t3].[Added], [t3].[Created]
FROM [dbo].[Street] AS [t3]
WHERE (([t2].[value] IS NULL) AND (UPPER([t3].[GUID]) IS NULL)) OR (([t2].[value] IS NOT NULL) AND (UPPER([t3].[GUID]) IS NOT NULL) AND ([t2].[value] = UPPER([t3].[GUID])))
ORDER BY [t3].[Added] DESC
) AS [t4]
ORDER BY [t4].[Added], UPPER([t4].[GUID]) DESC, [t4].[Added] DESC

Holy Truffle Oil Batman! That’s bonkers! What makes matters worse is that even if I correct the SQL the query times out and there are only 30,000 records in the DB. Because it’s bonkers.

So I started to think about how I’d actually do it in SQL. This is my first attempt, now I’m not saying it’s optimal. I think there may be ways I could improve it but it works and with 30,000 records it returns pretty much instantly.

SELECT [GUID]
	,[ParishGUID]
	,[Name]
	,[Active]
	,[Added]
	,[Created]
FROM
	(SELECT *, ROW_NUMBER() OVER(ORDER BY [GUID]) RN FROM
		(SELECT *
			,RANK() OVER (PARTITION BY [GUID] ORDER BY Added,NEWID()) RK 
		FROM dbo.Street
		WHERE @takeAll = 1 OR Added >= @added) DEDUPE
	WHERE RK=1) CHUNK
WHERE RN > @start and RN <= @start+@take 

The Entity Framework is kind enough to provide a generic ExecuteQuery<T> method on the DataContext so I’ll be writing a new method in the DAL effectively to override Entity Framework’s toxic SQL generation in this case. I suspect my new method won’t be lonely for long.

Reverse Conditionals

Reading Time: 2 minutesOne thing about C# style that I get asked quite a lot is why I tend to write if statements like this…

if (null != args)
{

It’s not how most people think. It seems far more logical written this way round…

if (args != null)
{

It’s actually a hang-on from my days as a plain old C developer, most of the time it’s not relevant to C# but there’s one particular instance where it is.

bool someBoolean = false;
bool someOtherBoolean = true;
if(someBoolean = someOtherBoolean)
{
     Console.WriteLine("The if condition evaluated to true!");
}
Console.WriteLine(String.Format("someBoolean is [{0}], someOtherBoolean is [{1}]", someBoolean, someOtherBoolean));

So when we run this, we might not get the result we expect.
This is because in C# assignment operations have a result. Instead of comparing the two items in the if statement (==) we assigned the value in someOtherBoolean to someBoolean (=). Basically we just used = where we should have used ==, it’s an easy mistake to make and in this instance it compiles and runs, it just doesn’t do what we want, at all…
I actually wrote about this in an article some time ago, but back then I was talking about doing it deliberately, and as part of a work of extreme evil.

OK, so that’s a convoluted example and in reality you’re unlikely to cause yourself serious problems in C# because C# is very strict about the result of whatever’s in an if statement being Boolean. So if you did accidentally write this, it wouldn’t compile.

if(someObject = null)
{
    someObject = new someType();
}

This is because the result of assigning null to someObject is null, which is not a Boolean.

However in C the equivalent will compile and will run. In C anything that evaluates to zero is treated as false and anything that evaluates to non-zero is treated as true.

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int SomeProperty;
} SomeType;

int main(int argc, char* argv)
{
    SomeType *someStruct = NULL;
    if(someStruct = NULL)
    {
        someStruct =  (SomeType*)malloc(sizeof(SomeType));
    }
    someStruct->SomeProperty = 42;
}

This will crash every time, because we’re actually assigning NULL to the value someStruct. The result of that assignment is zero, which evaluates to false, so execution skips the contents of the if statement and goes directly to where the structure is accessed – the structure that we’ve just assigned to NULL.

Bit if we reverse the way we do the comparison…

if(NULL = someStruct)
{
    someStruct = (SomeType*)malloc(sizeof(SomeType));
}
someStruct->SomePropery = 42;

This won’t compile, because you can’t assign the value in the variable someStruct to the constant NULL.

So, in a nutshell, that’s why when I’m comparing a variable to a constant I tend to put the constant first.

A Hole in the Mobile Phone Market

Reading Time: 2 minutes

HTC Wildfire S
HTC Wildfire S

This is my mobile phone, or cellphone if you will. It’s a HTC Wildfire S running cyanogenmod 9. Sure it was never an expensive phone but I didn’t get it because it was cheap, I got it because it was small.

I am notoriously hard on kit. Something like a mobile phone just gets shoved in my pocket and ends up doing whatever I do. Scaling roofs to find mobile phone signal is perfectly normal in my world, as is climbing into the loft, crawling into tight gaps and running out in a howling gale to rope the remains of the fence to something a little more stable.

Amongst my friends, many of whom have the same attitude to life as me, there is a catalog of broken phone screens. My little Wildfire S has lasted a few years now without any serious damage.

It is however getting a little long in  the tooth. It never had even remotely enough memory to start with and fiddling it to make it think that a portion of the SD Card is actually internal memory isn’t the most reliable. It’s also suffering a bit with a lot of modern apps which are a getting a bit slow.

So I’m in the market for a replacement – I figured this should be easy as there are a lot of new “mini” phones on the market. Only they’re not, the new “mini” phones are only mini compared to their tablet-size counterparts.

The look of horrible confusion on the face of a mobile phone stores salesperson is one I’ve got well used to, “sorry, I’ll just repeat that. I’m looking for a small, tough smartphone. Not a 6 inch mini-tablet that will break as soon as I attempt to climb a ladder with it in my pocket.”

I’m never far from a PC, a laptop or a tablet. I don’t need a mobile mini-tablet, what I need is a smart-phone, something that fits in my pocket and allows me to check social media and run a few tracking and navigation apps and maybe listen to Buddy Guy.

Surely this isn’t too much to ask?

I Baked a Bread!

Reading Time: < 1 minute

Actual Bread! From My Oven!
Actual Bread! From My Oven!

It’s not a big thing, especially considering all the culinary adventures I’ve had, but up until 7pm this evening at no point in my life had I ever attempted to bake bread. Those two mini-loaves on the right are my first ever attempt and not only do they look like bread they actually taste like bread too!

As a child I was fascinated by how my mother would mix the dough and kneed it. Then the magic started – the dough would rise. Then she’d bake it and we’d have bread. My mother made bread, wonderful smelling soft bread. Most people had to buy bread, but my mother could make it. To my child’s brain that was very impressive.

This probably explains why I’ve been entirely happy to undertake some ludicrously complex and technical culinary challenges but to date not bread baking. I was scared. I was scared that I might not be able to do it and that if it didn’t work it would ruin the memory of that smell. It would ruin part of my childhood.

But it did work, and actually to me it’s quite a big thing.