Ok, well apart from those without iPhones - maybe I'll make them do semaphore next year.
Sunday, 30 May 2010
7, at once, and no scarring...
Woo Hoo it worked! 7 people voting at once, a few tidy-up requests for next year, but generally a thumbs-up. No issues, it passed off smoothly, technology working as it should.
Wednesday, 26 May 2010
Beavervision (Pt 1)
Right, part 1, for which there were plenty of opportunities for failure, seemed to pass off without a hitch.
2 people simultaneously using the iPhone scoreboard, with no issues - we were able to poke around our own results nicely, and it just worked, as it should. The manual entry for those without the technology also seemed ok, and no complaints of dropped scores (as there were last year).
Results popped up, twitter was fed and Facebook got the full force of the updates.
All-in-all, I'll give myself a B+ so far - part 2 should be easier, and part 3 will be the big technological test were we may have 5 or more people using the AP - sure it should all work, but I just worry about these things... I even have 2 backup plans, I'm nothing if not prepared.
The best comment I got was "it was a lot less stressful" regarding the iPhone site, it just flowed in naturally for me, and made the whole thing a lot better, letting me concentrate on having a fun time instead of queuing people up to use a PC. Win all round.
It's a pity the semi-final was so dull, it was hard to pick a bottom 7, let alone a top 10... and the voting outcome was, as usual, ridiculous - Russia should never, ever, have gotten through.
Thursday should be way better, and Saturday - well now I'm over the first hurdle, should be fun... that might be the first time in 7 years.
Thursday, 8 April 2010
Ready, Steady, Done?
I've sped through the Beavervision Scoreboard development rather quickly. All the core features are there now, and the addition of the iPhone interface should make the whole voting process significantly quicker this year - in the past we've had clipboards and pens and been very officious taking notes and scoring. This year we can all just sit there and stroke our precious... well those of us with iPhones - the Luddites will have to make do with the old method. So that means multiple input methods - yay, MVC to the rescue.
I've used (and abused) IUI to provide the iPhone interface, it sorts out quite a lot of the fiddly issues for you. I need to tart some bits up and fiddle with the routing around the site (currently everything goes back to the homepage), but on the whole it's mostly there...
Time for some gratuitous screenshots:
All very pretty. I'm a bit worried about drunken fat-fingers operating the Next buttons (the select list uses the default Apple UI "scroller"). The images on the page (background, logo, flags, artist image etc) are all fed from the same Controller Action as the main website - but are scaled and cached for the device (and in the case of the background is a completely different source). And fed from the database - I've put in 3 years worth of artists images (typically several hundred KB each) and all the flags, and the website images for this year and the database is around 14MB, so I'm not too worried about any performance overheads with that.
I've used (and abused) IUI to provide the iPhone interface, it sorts out quite a lot of the fiddly issues for you. I need to tart some bits up and fiddle with the routing around the site (currently everything goes back to the homepage), but on the whole it's mostly there...
Time for some gratuitous screenshots:
Saturday, 3 April 2010
Eurovision Preview
The great Eurovision handicap is almost upon us... here are my initial thoughts about each of the entries (in no particular order, except alphabetical):
Albania - Disco. Better now in English, and losing the Victoria Wood haircut (though there's nothing particularly wrong with that in context) - video is stupid, but I suspect the staging could make this very good... 9/10.
Armenia - Pop. Bit blah - songs about fruit and nationalism don't always go down well, video involves over-excitable fat-bloke. It will no doubt track the Armenia success story and make the top ten... 2/10.
Azerbaijan - Power Ballad/Pop. Probably one of the better entries. Azerbaijan seems keen to host a Eurovision event (after the Dance Contest was canned) and going all out this year with a very strong entry... could do with a little bit better staging, but will probably at the sharp end of the scoreboard... 9/10.
Belarus - Ballad. The child in the video will not be allowed on stage, talented lighting director that he is - no I jest - pianist. Seems to be want to be an anthem, but never quite gets there... bit six4one, might pick up some points... 5/10.
Belgium - Busking. Once you get past the ridiculous accent and lyrics, it's a pretty little song which does build. Not sure it'll be stand-out enough to do anything for Belgium, which is a shame - they'll deserve to do better with this... 7/10.
Bosnia & Herzegovina - Pop/Rock. What a very serious song from the Balkans that doesn't seem to go anywhere. Sure it'll probably meander through to the final thanks to the neighbours... 3/10.
Bulgaria - Pop. No stilts, no fun. 3/10.
Croatia - Pop Ballad. Every one's favourite suppository group enters for Croatia with a better sounding song than 2005, and they don't urge you to call them... although sung in Mr Jonathan Foreigner's language I couldn't be entirely sure that's true. Builds quite quickly and supports strong voices. I'll wait for the live performance before getting too excited... 6/10.
Cyprus - Pop. Singing about spring in May is starting to push it, even for Europe... a mistake some countries have made before. This is, given that, surprisingly good though, and may do well (12 points from Greece)... 6/10.
Denmark - Pop. The Police should probably sue. However this should be right up there with the rest of the Scandinavian crowd, even singing into the teeth of a fierce gale, and must be a very strong contender for the title. Might be held back by the "Andy Abraham" factor... I hope not. 9.5/10.
Estonia - Alternative. Quirky, I love it. Estonia are really bringing some interesting songs to the Eurovision recently... might not win but improves the field, which is commendable. 8/10.
Finland - Folk. This will not be in with the rest of the Scandinavian crowd. It seems too desperate to rip-off last years winner, but doesn't really understand what it's doing. 1/10.
France - Shit Pop/Dance. I'm not sure which drunk Frenchman picked this abomination, but the constant "whoop, hmm, whoop, whoop, whoop, hmm, whoop" being the face of the lyrics are laughable, even for the French language. Deserves the stage to collapse during the performance... -10/10.
Georgia - Ballad. So they want to hold it in Moscow next year? Pretty little song, not sure it's the best of the ballads though... 4/10.
Germany - Unsure. Wahey, we've found the bottom of the final scoreboard. She's doing her hair, and underwear for us... but she won't go any further. Nor will the scores. 0/10.
Greece - Ringtone. Ugh, really, ugh. 1/10.
Iceland - Pop. According to Iceland this is sung in French! It's an interesting performance, but I'm not sure I'd want to see her special "something"... good pop song though, should be up with there with the Scandi crowd... 8/10.
Ireland - Ballad. I do love Ireland, they have many of my all-time Eurovision favourites - and this is no exception, Niamh is a safe pair of hands and a voice to match the soaring lyrics. I'm a sucker for this stuff, but I really hope this goes top five... 9.5/10.
Israel - Ballad. Unusual, but not unlikeable - I need to see the final performance as much can be changed, but it sounds pretty good and heartfelt... 8/10.
Latvia - Pop. Very simple, very crap too... 1/10.
Lithuania - Pop. Kazoo in the Eurovision? No. 1/10.
FYR Macedonia - Who Knows? Macedonia can occasionally be right "out there" - and once again achieves it in 2010. The song isn't unpleasant until the rapping, neither is the singing or presentation - but you're left scratching your head. Not entirely sure this will do well... 2/10.
Malta - Pop Ballad. Blah even by Malta's standard. Can't see this making the final, 4/10.
Moldova - Pop/Dance. A million times better than the French entry - could do well, very hard to tell when you get a very different style of Eurovision song. Based on Iceland 2008 this should be top 15. 7/10.
Netherlands - Toilet Break. If the Netherlands ever wanted to demonstrate they had stepped out of the 1970s, or dropped the Smurfs as their strongest musical influence - then they might have misread the script. This is the utter pits and thoroughly deserves 0 points. 0/10.
Norway - Ballad. A winner with the potential of a double? It's possible, strong ballad, and a good singer. Will need to nail the performance in the final, and should it win - well ner-ner-de-ner-ner to all those idiots (aka Chris) who voted for Scooch, as this is a complete rip-off of Cyndi... 9.5/10.
Poland - Folk/Pop. Oh dear, oh dear, oh dear. 4/10.
Portugal - Portugal. I admire Portugal - they have sent the by far the most bonkers entries in the last 30 years, always seemingly at least sixty-steps away from the rest of European "culture", but not afraid to do their own thing - and for the last couple of years it has produced good results - but this is just bland by their own standards. Where are the rocket launchers? Exploding pianos? Marauding Vikings? Dancing Hitlers? Its just a song... 5/10.
Romania - Pop. Stepping back towards the "banging" Romania entries of the early/mid 00s with a bit more generic pop song, interesting. Beyond the novelty of the silly pianos, can't see this hitting the final. 4/10.
Russia - Football chant. Underlining the expense of hosting the 2009 contest is this entry... 0/10.
Serbia - Hairdressing. Underlining the expense of hosting the 2008 contest is this entry... 0/10.
Slovakia - Ethno-Pop. Interesting entry from Slovakia - could well climb the rankings and be a surprise... 6/10.
Slovenia - Hard to pin down. Most countries stopped sending songs like this in 1997... 0/10.
Spain - Pop. I really don't get this, many people I speak to seem to think it's the winner - perhaps it's a bit too French for me... 3/10.
Sweden - Pop Ballad. Certainly one of the top of the ballad contenders, and will be up their with the Scandi crowd. Might be top 5, I'd certainly hope it is. Lyrics are actually good, song is powerful, singing is good... was by the far best entry in Melodifestivalen. I'll chance my arm by my occasional "sit up and listen" moments, which I did straight away with Serbia in 2007 - and say the same of this... good contender for the win... 10/10.
Switzerland - Pop. I also love Switzerland; Paolo Meneguzzi performed a fantastic song (sadly let down by a poor performance). But this just doesn't seem quite as complete, more pop - sure, just not quite my thing... 6/10.
Turkey - Pop. I'm half convinced Turkey could turn up and take a shit on the stage, and guarantee 12 points from Germany and the United Kingdom... and this year we seem to be edging towards completing my convictions.... 1/10.
Ukraine - Whiny Rubbish. Third time "lucky" for the Ukraine. No, that's right, it took them just three attempts to come up with this! They'd have been better off staying at home and shooting pigeons... 0/10.
United Kingdom - Err. Ok - disclosure time, I know a few people involved in the UK effort, and they have done a good job themselves... so lets start with the good points, he can sing live, and he is quite good looking. Ermm, and that's where it sadly ends in my opinion. I wish Josh well, but I'd be surprised if this hit the top ten... 3/10.
Albania - Disco. Better now in English, and losing the Victoria Wood haircut (though there's nothing particularly wrong with that in context) - video is stupid, but I suspect the staging could make this very good... 9/10.
Armenia - Pop. Bit blah - songs about fruit and nationalism don't always go down well, video involves over-excitable fat-bloke. It will no doubt track the Armenia success story and make the top ten... 2/10.
Azerbaijan - Power Ballad/Pop. Probably one of the better entries. Azerbaijan seems keen to host a Eurovision event (after the Dance Contest was canned) and going all out this year with a very strong entry... could do with a little bit better staging, but will probably at the sharp end of the scoreboard... 9/10.
Belarus - Ballad. The child in the video will not be allowed on stage, talented lighting director that he is - no I jest - pianist. Seems to be want to be an anthem, but never quite gets there... bit six4one, might pick up some points... 5/10.
Belgium - Busking. Once you get past the ridiculous accent and lyrics, it's a pretty little song which does build. Not sure it'll be stand-out enough to do anything for Belgium, which is a shame - they'll deserve to do better with this... 7/10.
Bosnia & Herzegovina - Pop/Rock. What a very serious song from the Balkans that doesn't seem to go anywhere. Sure it'll probably meander through to the final thanks to the neighbours... 3/10.
Bulgaria - Pop. No stilts, no fun. 3/10.
Croatia - Pop Ballad. Every one's favourite suppository group enters for Croatia with a better sounding song than 2005, and they don't urge you to call them... although sung in Mr Jonathan Foreigner's language I couldn't be entirely sure that's true. Builds quite quickly and supports strong voices. I'll wait for the live performance before getting too excited... 6/10.
Cyprus - Pop. Singing about spring in May is starting to push it, even for Europe... a mistake some countries have made before. This is, given that, surprisingly good though, and may do well (12 points from Greece)... 6/10.
Denmark - Pop. The Police should probably sue. However this should be right up there with the rest of the Scandinavian crowd, even singing into the teeth of a fierce gale, and must be a very strong contender for the title. Might be held back by the "Andy Abraham" factor... I hope not. 9.5/10.
Estonia - Alternative. Quirky, I love it. Estonia are really bringing some interesting songs to the Eurovision recently... might not win but improves the field, which is commendable. 8/10.
Finland - Folk. This will not be in with the rest of the Scandinavian crowd. It seems too desperate to rip-off last years winner, but doesn't really understand what it's doing. 1/10.
France - Shit Pop/Dance. I'm not sure which drunk Frenchman picked this abomination, but the constant "whoop, hmm, whoop, whoop, whoop, hmm, whoop" being the face of the lyrics are laughable, even for the French language. Deserves the stage to collapse during the performance... -10/10.
Georgia - Ballad. So they want to hold it in Moscow next year? Pretty little song, not sure it's the best of the ballads though... 4/10.
Germany - Unsure. Wahey, we've found the bottom of the final scoreboard. She's doing her hair, and underwear for us... but she won't go any further. Nor will the scores. 0/10.
Greece - Ringtone. Ugh, really, ugh. 1/10.
Iceland - Pop. According to Iceland this is sung in French! It's an interesting performance, but I'm not sure I'd want to see her special "something"... good pop song though, should be up with there with the Scandi crowd... 8/10.
Ireland - Ballad. I do love Ireland, they have many of my all-time Eurovision favourites - and this is no exception, Niamh is a safe pair of hands and a voice to match the soaring lyrics. I'm a sucker for this stuff, but I really hope this goes top five... 9.5/10.
Israel - Ballad. Unusual, but not unlikeable - I need to see the final performance as much can be changed, but it sounds pretty good and heartfelt... 8/10.
Latvia - Pop. Very simple, very crap too... 1/10.
Lithuania - Pop. Kazoo in the Eurovision? No. 1/10.
FYR Macedonia - Who Knows? Macedonia can occasionally be right "out there" - and once again achieves it in 2010. The song isn't unpleasant until the rapping, neither is the singing or presentation - but you're left scratching your head. Not entirely sure this will do well... 2/10.
Malta - Pop Ballad. Blah even by Malta's standard. Can't see this making the final, 4/10.
Moldova - Pop/Dance. A million times better than the French entry - could do well, very hard to tell when you get a very different style of Eurovision song. Based on Iceland 2008 this should be top 15. 7/10.
Netherlands - Toilet Break. If the Netherlands ever wanted to demonstrate they had stepped out of the 1970s, or dropped the Smurfs as their strongest musical influence - then they might have misread the script. This is the utter pits and thoroughly deserves 0 points. 0/10.
Norway - Ballad. A winner with the potential of a double? It's possible, strong ballad, and a good singer. Will need to nail the performance in the final, and should it win - well ner-ner-de-ner-ner to all those idiots (aka Chris) who voted for Scooch, as this is a complete rip-off of Cyndi... 9.5/10.
Poland - Folk/Pop. Oh dear, oh dear, oh dear. 4/10.
Portugal - Portugal. I admire Portugal - they have sent the by far the most bonkers entries in the last 30 years, always seemingly at least sixty-steps away from the rest of European "culture", but not afraid to do their own thing - and for the last couple of years it has produced good results - but this is just bland by their own standards. Where are the rocket launchers? Exploding pianos? Marauding Vikings? Dancing Hitlers? Its just a song... 5/10.
Romania - Pop. Stepping back towards the "banging" Romania entries of the early/mid 00s with a bit more generic pop song, interesting. Beyond the novelty of the silly pianos, can't see this hitting the final. 4/10.
Russia - Football chant. Underlining the expense of hosting the 2009 contest is this entry... 0/10.
Serbia - Hairdressing. Underlining the expense of hosting the 2008 contest is this entry... 0/10.
Slovakia - Ethno-Pop. Interesting entry from Slovakia - could well climb the rankings and be a surprise... 6/10.
Slovenia - Hard to pin down. Most countries stopped sending songs like this in 1997... 0/10.
Spain - Pop. I really don't get this, many people I speak to seem to think it's the winner - perhaps it's a bit too French for me... 3/10.
Sweden - Pop Ballad. Certainly one of the top of the ballad contenders, and will be up their with the Scandi crowd. Might be top 5, I'd certainly hope it is. Lyrics are actually good, song is powerful, singing is good... was by the far best entry in Melodifestivalen. I'll chance my arm by my occasional "sit up and listen" moments, which I did straight away with Serbia in 2007 - and say the same of this... good contender for the win... 10/10.
Switzerland - Pop. I also love Switzerland; Paolo Meneguzzi performed a fantastic song (sadly let down by a poor performance). But this just doesn't seem quite as complete, more pop - sure, just not quite my thing... 6/10.
Turkey - Pop. I'm half convinced Turkey could turn up and take a shit on the stage, and guarantee 12 points from Germany and the United Kingdom... and this year we seem to be edging towards completing my convictions.... 1/10.
Ukraine - Whiny Rubbish. Third time "lucky" for the Ukraine. No, that's right, it took them just three attempts to come up with this! They'd have been better off staying at home and shooting pigeons... 0/10.
United Kingdom - Err. Ok - disclosure time, I know a few people involved in the UK effort, and they have done a good job themselves... so lets start with the good points, he can sing live, and he is quite good looking. Ermm, and that's where it sadly ends in my opinion. I wish Josh well, but I'd be surprised if this hit the top ten... 3/10.
Saturday, 27 March 2010
Images, BLOBs and other general database madness...
I've been playing around with storing image/media data in the database for the Beavervision Scoreboard - partly so I could just ship a whole database backup around without having to remember a whole heap of additional content files, and partly to test out BLOB handling through ADO.NET Entity Frameworks.
Firstly, file upload and reading/writing to the database. A doddle, read the incoming file into a byte array and stick it into the db object e.g:
HttpPostedFileBase v_HPFB = (HttpPostedFileBase)Request.Files[v_File];
if (v_HPFB.ContentLength != 0)
{
tbl_Media v_Media = new tbl_Media();
byte[] v_Buffer = new byte[v_HPFB.ContentLength];
v_HPFB.InputStream.Read(v_Buffer, 0, v_HPFB.ContentLength);
v_Media.value = v_Buffer;
}
Obviously for larger files you might want to stream rather than reading all into memory.
And then equally reading out from the column is also a doddle as its exposed as the byte array - obviously take care including the table holding the BLOB as you don't really want it to come back every time you do a simple query. I created a separate media table (cunningly called tbl_Media (which has just an identity column and a value image column - as above), and then have link tables for each area of the system that can have media, and only go to the BLOB on actual request for it.
So then we need to get this image out and use it somehow. I cracked out MVC and found the FileContentResult and FileStreamResult which you can attach to an action to essentially return non-HTML-view data. Thus to fetch an item out of the media table by ID I created a generic action, e.g
public FileContentResult Get(int id)
{
BeavervisionEntities v_Ent = new BeavervisionEntities();
tbl_Media v_Media = (from m in v_Ent.tbl_Media.Include("tbl_MediaType") where m.id == id select m).First();
return File(v_Media.value, v_Media.tbl_MediaType.type);
}
The Media Type table being the associated mime-type of the media stored in a normalised fashion.
Of course, once you wander into processing the BLOB, rather that just serving it up from a static location, you can start to muck around with it mid-stream...
So (hang on to your hats now), I know that I have a list of countries taking part, they all have their own flags, and I want to put them on different parts of the site in different sizes (e.g. a small one for a list, a mid-size one for view)... so I'll create a number of facade actions in the controller to neatly wrap a more complex action, and just upload and store a high-quality large transparent PNG (which I use as the source for all my images anyway), I then knocked-up a quick static html page to call these , and the output looks like:

[OutputCache(Duration = 1209600, NoStore = false, Location = System.Web.UI.OutputCacheLocation.Any, VaryByParam = "id")]
Now to test this, I decided to upload a flag for a different country - but wouldn't you know it, me being the dunce who wants to test caching I deliberately uploaded the wrong image and bring up the static page designed to query it (i.e. changing Albania to Andorra), duh me. OK, so then I bin that from the database and upload the correct image - then let's see what came out for that:

So, using the same lettering from above I told the actions called in B & C to cache with the wrong image, and lo it doth return the cached image, whereas A, D & E haven't been told to cache and do return the correct image.
Neat.
Now I can abuse this to within an inch of its life.
Firstly, file upload and reading/writing to the database. A doddle, read the incoming file into a byte array and stick it into the db object e.g:
HttpPostedFileBase v_HPFB = (HttpPostedFileBase)Request.Files[v_File];
if (v_HPFB.ContentLength != 0)
{
tbl_Media v_Media = new tbl_Media();
byte[] v_Buffer = new byte[v_HPFB.ContentLength];
v_HPFB.InputStream.Read(v_Buffer, 0, v_HPFB.ContentLength);
v_Media.value = v_Buffer;
}
Obviously for larger files you might want to stream rather than reading all into memory.
And then equally reading out from the column is also a doddle as its exposed as the byte array - obviously take care including the table holding the BLOB as you don't really want it to come back every time you do a simple query. I created a separate media table (cunningly called tbl_Media (which has just an identity column and a value image column - as above), and then have link tables for each area of the system that can have media, and only go to the BLOB on actual request for it.
So then we need to get this image out and use it somehow. I cracked out MVC and found the FileContentResult and FileStreamResult which you can attach to an action to essentially return non-HTML-view data. Thus to fetch an item out of the media table by ID I created a generic action, e.g
public FileContentResult Get(int id)
{
BeavervisionEntities v_Ent = new BeavervisionEntities();
tbl_Media v_Media = (from m in v_Ent.tbl_Media.Include("tbl_MediaType") where m.id == id select m).First
return File(v_Media.value, v_Media.tbl_MediaType.type);
}
The Media Type table being the associated mime-type of the media stored in a normalised fashion.
Of course, once you wander into processing the BLOB, rather that just serving it up from a static location, you can start to muck around with it mid-stream...
So (hang on to your hats now), I know that I have a list of countries taking part, they all have their own flags, and I want to put them on different parts of the site in different sizes (e.g. a small one for a list, a mid-size one for view)... so I'll create a number of facade actions in the controller to neatly wrap a more complex action, and just upload and store a high-quality large transparent PNG (which I use as the source for all my images anyway), I then knocked-up a quick static html page to call these

- A is the original image as from the /Media/Get/1 source.
- B is the same image, unprocessed from /Media/Flag/Albania - querying through to find the relevant country name and pulling the associated flag image back.
- C is through the /Media/SmallFlag/Albania facade action to provide a 50x28 PNG.
- D is through the /Media/GetFlag/Albania?height=84&width=150 action, which outputs an 150x84 PNG (the facade in C is actually passing through to this action).
- E are two re-encoded images (JPEG & GIF respectively) used by appending &format=image/jpeg (or image/gif) to the GetFlag action.
[OutputCache(Duration = 1209600, NoStore = false, Location = System.Web.UI.OutputCacheLocation.Any, VaryByParam = "id")]
Now to test this, I decided to upload a flag for a different country - but wouldn't you know it, me being the dunce who wants to test caching I deliberately uploaded the wrong image and bring up the static page designed to query it (i.e. changing Albania to Andorra), duh me. OK, so then I bin that from the database and upload the correct image - then let's see what came out for that:

So, using the same lettering from above I told the actions called in B & C to cache with the wrong image, and lo it doth return the cached image, whereas A, D & E haven't been told to cache and do return the correct image.
Neat.
Now I can abuse this to within an inch of its life.
Saturday, 20 March 2010
Tidying up a few minor issues
One of the artefacts of moving from IIS to Apache to host the html was caching becoming a problem, and due to the limited way I have control over the hosting server - I can only hope the few tweaks I've been able to make will help. But I'll have to keep my eye on it.
The only other problems I've thus far noticed was the score graph had the incorrect start point, and the sort order of the races on the X axis was wrong.
Time to start looking at the Beavervision scoreboard - I think the biggest conclusions I've drawn from the Sweepstake is that having a really well designed database really makes using things like ADO.Net Entity Framework & ASP.Net MVC much cleaner and simpler - and building maintenance parts of applications becomes almost cookie-cutter in its simplicity - generally only 6 lines of code are needed to retrieve data for list/view/edit, and the views are pretty much identical, just bound to the specific object - which in turn is really just a database object.
The more complex side of development then is what the application does itself, but even then, getting and setting data through these frameworks is so simple, it allows you to concentrate on the more interesting elements rather than worrying about minutiae. Which of course means you can then abuse it all within an inch of its life.
Simples!
The only other problems I've thus far noticed was the score graph had the incorrect start point, and the sort order of the races on the X axis was wrong.
- I decided that rather than using the database race id it would be better to normalise the sequence myself - this meant flot (the graphing tool) saw a discrete procession from 1 to 20 rather than say 36, and then maybe 37 to 56. This made it easier to tie the value to a point in the graph too and overall a bit neater.
- Sorting the X axis was a little more involved as I needed to extend the DAL's static method for retrieving the season to include the individual round (i.e. race or qualifying) so that I could sort on the date. Then through the power of LINQ I was able to sort in the view and just trawl through the output var - which worked, although you end up with some hideous looking code at times, ala:
- var v_Query = (from r in v_Season.tbl_Race select r).OrderBy(r => r.tbl_RaceRound.Max(rr => rr.date));
Time to start looking at the Beavervision scoreboard - I think the biggest conclusions I've drawn from the Sweepstake is that having a really well designed database really makes using things like ADO.Net Entity Framework & ASP.Net MVC much cleaner and simpler - and building maintenance parts of applications becomes almost cookie-cutter in its simplicity - generally only 6 lines of code are needed to retrieve data for list/view/edit, and the views are pretty much identical, just bound to the specific object - which in turn is really just a database object.
The more complex side of development then is what the application does itself, but even then, getting and setting data through these frameworks is so simple, it allows you to concentrate on the more interesting elements rather than worrying about minutiae. Which of course means you can then abuse it all within an inch of its life.
Simples!
Saturday, 6 March 2010
Speeding towards live...
After a good few days of being able to catchup with a lot of the outstanding F1 Sweepstake work, the website is now ready to go live, I've put it up here where I'm sure the eagle-eyed viewer will notice it has the 2008 season data rather than 2009 - this is just my reference work as it's slightly easier to muck about with 2008 (less competitors, and less fuss if I get it wrong - which I have).
After the late abandonment of the MS Cloud route, and not wanting to shell out this year for any .net hosting (the timing all kind of clashed from my LAMP & Shell/POP/DNS renewal), I'm utilising the handy nature of MVC to serialize the html out from my dynamically produced site via wget, then uploading the contents to the hosting site. This seems to have worked fine for the html output, although some of the javascript and stuff in the Content directory seems to get mangled by wget - I assume this is some localisation/culture issue - although this is easily dealt with not letting wget fetch anything from the Content directory and just managing any changes (for which there should be virtually none) manually. All I need to do now is knock up a script on my Linux box to process the wget commands and upload to the hosting site.
Moving on, when I do sort out some .net hosting, I can just transfer to the dynamic site, and there should be no differences to the user. In theory.
I've added a few fiddly UI sprinkles for vertical resizing, and it seems mostly ok... I'll look at doing a few upgrades through the season, as on the face of it there's been no new functionality added (this has mostly been a refactoring exercise).
Next up, I need to use SQL Server Reporting Services to produce the PDF we mail round, and stick up at the bar - this shouldn't take too long to fix-up as the required data models for the document are the same as those for the website, so I should be able to re-use those.
Very nearly there, and with a week to go. Might even afford some time to test at this rate.
After the late abandonment of the MS Cloud route, and not wanting to shell out this year for any .net hosting (the timing all kind of clashed from my LAMP & Shell/POP/DNS renewal), I'm utilising the handy nature of MVC to serialize the html out from my dynamically produced site via wget, then uploading the contents to the hosting site. This seems to have worked fine for the html output, although some of the javascript and stuff in the Content directory seems to get mangled by wget - I assume this is some localisation/culture issue - although this is easily dealt with not letting wget fetch anything from the Content directory and just managing any changes (for which there should be virtually none) manually. All I need to do now is knock up a script on my Linux box to process the wget commands and upload to the hosting site.
Moving on, when I do sort out some .net hosting, I can just transfer to the dynamic site, and there should be no differences to the user. In theory.
I've added a few fiddly UI sprinkles for vertical resizing, and it seems mostly ok... I'll look at doing a few upgrades through the season, as on the face of it there's been no new functionality added (this has mostly been a refactoring exercise).
Next up, I need to use SQL Server Reporting Services to produce the PDF we mail round, and stick up at the bar - this shouldn't take too long to fix-up as the required data models for the document are the same as those for the website, so I should be able to re-use those.
Very nearly there, and with a week to go. Might even afford some time to test at this rate.
Saturday, 20 February 2010
KABOOM
So there I am, merrily changing some settings on my Windows Server 2003 VMWare image and I somewhat take it down, and make a real mess of it. Jolly good, looks to be completely dead, oh and the backup is screwed too, YAY! Well I'd been thinking of putting together a new VMWare image image anyway with a more recent server/database combination... so it's not all that bad.
Still, I have SQL Server 2008 Express running on my desktop, so I restored the db backups to that and am already back to where I was with the RetroF1 development, so thankfully no great backward step.
I think I'm done with the maintenance functionality now... the data model is somewhat interesting (as pictured below), and the next phase is to produce a viewable website... this should be fun.
Still, I have SQL Server 2008 Express running on my desktop, so I restored the db backups to that and am already back to where I was with the RetroF1 development, so thankfully no great backward step.
I think I'm done with the maintenance functionality now... the data model is somewhat interesting (as pictured below), and the next phase is to produce a viewable website... this should be fun.
Monday, 15 February 2010
Reignited Memories
As many of my friends and colleagues will tell you, I am hideously late for just about everything - I suspect it's to do with holding my interest, but I'm rarely early if I have to be (conversely, out of choice and I'll be there 3 hours early).
Watching the excellent Seven Ages of Britain this evening reminded me of probably the only time I've been somewhere at 8am out of choice - 1982; the raising of the Mary Rose.
A young Colin would have been about 5 at the time, this would have been after the fire at my primary school which forced me to travel across town to a temporary site for education (prior to being stung on the nuts by a bee flicked up my trouser leg). I distinctly remember being the first into the AV room, sitting on my heart-shaped cushion (seriously, did nobody send a memo to my parents?) to watch the hulk of the ship being pulled up.
Curiously, and now probably to the frequent boredom of Chris, I can recall details about the lift, and subsequent preservation operations to some fine detail - and when it pops up on TV today - well the interest doesn't wane.
Was I ever that interested in history? Not really, until recently I was quite accepting of "that was what it was"... I suppose, with age, I'm now more impressed with our forebear's achievements, and intrigued, but I'm actually fascinated with the how... not so much the what. Yes, this series has focused on art too, which has been entirely fascinating within the realms of the politics and power of the age - and I've been enthralled by it all.
But, looking back though, is this what that young Colin, rushing to that TV, observing the great hulking lifting frame and mechanism, was interested in? Was this every indication of being an... engineer... all along? Am I subconsciously sat there trying to work out "well, if I didn't have X, Y, or Z - how would I do that?"
Well, yes, obviously on one level that is entirely true, but what these programmes and undertakings have is the ability to join my love of problem solving to the real world - making the engineer engineer. So often these days my problem solving is in a virtual, detached reality... this brings home the possibility of innovation, imagination and the power of engineering and gives it substance.
I'm loving this recent renaissance of BBC series connecting all these kinds of concepts to the real world, presented in entertaining and curiosity driven ways...
More!
Watching the excellent Seven Ages of Britain this evening reminded me of probably the only time I've been somewhere at 8am out of choice - 1982; the raising of the Mary Rose.
A young Colin would have been about 5 at the time, this would have been after the fire at my primary school which forced me to travel across town to a temporary site for education (prior to being stung on the nuts by a bee flicked up my trouser leg). I distinctly remember being the first into the AV room, sitting on my heart-shaped cushion (seriously, did nobody send a memo to my parents?) to watch the hulk of the ship being pulled up.
Curiously, and now probably to the frequent boredom of Chris, I can recall details about the lift, and subsequent preservation operations to some fine detail - and when it pops up on TV today - well the interest doesn't wane.
Was I ever that interested in history? Not really, until recently I was quite accepting of "that was what it was"... I suppose, with age, I'm now more impressed with our forebear's achievements, and intrigued, but I'm actually fascinated with the how... not so much the what. Yes, this series has focused on art too, which has been entirely fascinating within the realms of the politics and power of the age - and I've been enthralled by it all.
But, looking back though, is this what that young Colin, rushing to that TV, observing the great hulking lifting frame and mechanism, was interested in? Was this every indication of being an... engineer... all along? Am I subconsciously sat there trying to work out "well, if I didn't have X, Y, or Z - how would I do that?"
Well, yes, obviously on one level that is entirely true, but what these programmes and undertakings have is the ability to join my love of problem solving to the real world - making the engineer engineer. So often these days my problem solving is in a virtual, detached reality... this brings home the possibility of innovation, imagination and the power of engineering and gives it substance.
I'm loving this recent renaissance of BBC series connecting all these kinds of concepts to the real world, presented in entertaining and curiosity driven ways...
More!
Saturday, 13 February 2010
Deadline == Productivity++;
Have got a lot done today on the RetroF1 Sweepstake - after abandoning the idea of the cloud, I'm ploughin' on through getting the ASP.NET MVC stuff to a state I can at least start plugging in data, and be running, for the start of the season.
I upgraded to ASP.NET MVC v2 because I thought it might help me out with a problem, which it didn't (multiple lists within a view/controller)... reading around it appears some people are extended the HtmlHelper (and I presume routing too) stuff to get around this, I played briefly but couldn't get anything obviously working... so reverted to directly managing names, and picking stuff off the form to get it going - which works a treat. I'll come back to this topic when I'm done developing, I need to really see what they're doing - as by the example they're giving it's perfect for my needs.
Still, today I sorted out adding a competitor to a season and all the setup that goes on there, and completed all the result recording (some real nice abuse of try/catch there for determining if it's an edit or new record, yum!) - although I still need to complete the "attach a specific driver to a race" stuff, but that's only used for reporting rather than integral, I'll try to get that done tomorrow.
After that I need to knock up a pdf for email/print and create some publishable views to dump on the static website for the time being. Getting there slowly, as is the start of the season.
On the plus side, I feel I'm getting more to grips with LINQ and Lambda Expressions, and am already plotting the Beavervision Scoreboard, even considering a mobile-friendly website served up to let us techno-haves laud it over those scummy techno-have-nots.
I upgraded to ASP.NET MVC v2 because I thought it might help me out with a problem, which it didn't (multiple lists within a view/controller)... reading around it appears some people are extended the HtmlHelper (and I presume routing too) stuff to get around this, I played briefly but couldn't get anything obviously working... so reverted to directly managing names, and picking stuff off the form to get it going - which works a treat. I'll come back to this topic when I'm done developing, I need to really see what they're doing - as by the example they're giving it's perfect for my needs.
Still, today I sorted out adding a competitor to a season and all the setup that goes on there, and completed all the result recording (some real nice abuse of try/catch there for determining if it's an edit or new record, yum!) - although I still need to complete the "attach a specific driver to a race" stuff, but that's only used for reporting rather than integral, I'll try to get that done tomorrow.
After that I need to knock up a pdf for email/print and create some publishable views to dump on the static website for the time being. Getting there slowly, as is the start of the season.
On the plus side, I feel I'm getting more to grips with LINQ and Lambda Expressions, and am already plotting the Beavervision Scoreboard, even considering a mobile-friendly website served up to let us techno-haves laud it over those scummy techno-have-nots.
Wednesday, 10 February 2010
Emoticon-wielding Automaton spells out obvious plot
I watched Moon the other day, and whilst being an excellent film, I take umbrage with some of the finer details of the plot.
It adds to my "ye gods, did you actually give this plot any thought?" list, most recent of which was the plot of Batman: Begins - which had a device that vaporised water many feet away, but miraculously ignored all water in the human body of the operators stood beside it.
Anyway, let us return to Moon - if you haven't seen it, do, it's entertaining - then come back here.
So, we open with Sam Bell coming to the end of his stint on the Moon doing his thang - but something turns interesting. He starts hallucinating, seeing people from his memories, but on the Moon he's only comforted by; watching old TV shows, a worn leather chair, a table tennis table, a robot companion (who expressed through a massive 7 emoticons - a record for Kevin Spacey), 2 lunar rovers, and a job. All very "normal"... still he potters out to do something and crashes because of the hallucination.
Suddenly, Sam Bell awakens in the sickbay - not a scratch on him... and being denied access to the external aspects of the base kicks up a fuss. Eventually the automaton lets him go, and he buggers off to the crash site - why? Did he remember it - no... but you don't know that. He finds el-corpso previous version of him and brings it back to base... then we hit a long drawn-out hand-wringing explanation of what this is... ok lets look at this without our film goggles on, what are the options:
Hang on, table tennis... but one person is assigned to the base, table tennis... doesn't that involve two people? Oh, hang on, there are two vehicles, two space-suits, two seats in the vehicles, but only one set of slippers... and we're lead to believe the company is doing the clone thing because it's cheap...
Did nobody perform any accounting on this outfit? Did nobody notice their moonbase costs where drastically reduced because they never went there? Did nobody notice the lack of launches? Yeah - take that Hollywood - accountants will crap over your plots from a great height... I accept Lunar Industries: The Dodgy Accounts may not have been as glamorous a film title - but still... how much am I expected to disbelieve?
And, after all the completely obvious plot points, the emoticon-wielding automaton felt the need to spell it out even further at the end of the film, in case you were so stupid you didn't understand.
And, if you didn't understand, never come here again.
Gah.
Gah.
Gah.
Visually fantastic, and loved every minute though.
It adds to my "ye gods, did you actually give this plot any thought?" list, most recent of which was the plot of Batman: Begins - which had a device that vaporised water many feet away, but miraculously ignored all water in the human body of the operators stood beside it.
Anyway, let us return to Moon - if you haven't seen it, do, it's entertaining - then come back here.
So, we open with Sam Bell coming to the end of his stint on the Moon doing his thang - but something turns interesting. He starts hallucinating, seeing people from his memories, but on the Moon he's only comforted by; watching old TV shows, a worn leather chair, a table tennis table, a robot companion (who expressed through a massive 7 emoticons - a record for Kevin Spacey), 2 lunar rovers, and a job. All very "normal"... still he potters out to do something and crashes because of the hallucination.
Suddenly, Sam Bell awakens in the sickbay - not a scratch on him... and being denied access to the external aspects of the base kicks up a fuss. Eventually the automaton lets him go, and he buggers off to the crash site - why? Did he remember it - no... but you don't know that. He finds el-corpso previous version of him and brings it back to base... then we hit a long drawn-out hand-wringing explanation of what this is... ok lets look at this without our film goggles on, what are the options:
- Time travel - where from? There is not future for el-corpso, so it's balls.
- We're super-duper robots with all them skillz... if I could make the emoticon-wielding automaton, why would I bother with robots?
- Cloning... ye gods, no, who would have thought of such a thing... I mean characters playing the same part - this isn't Last of the Summer Wine is it?
Hang on, table tennis... but one person is assigned to the base, table tennis... doesn't that involve two people? Oh, hang on, there are two vehicles, two space-suits, two seats in the vehicles, but only one set of slippers... and we're lead to believe the company is doing the clone thing because it's cheap...
Did nobody perform any accounting on this outfit? Did nobody notice their moonbase costs where drastically reduced because they never went there? Did nobody notice the lack of launches? Yeah - take that Hollywood - accountants will crap over your plots from a great height... I accept Lunar Industries: The Dodgy Accounts may not have been as glamorous a film title - but still... how much am I expected to disbelieve?
And, after all the completely obvious plot points, the emoticon-wielding automaton felt the need to spell it out even further at the end of the film, in case you were so stupid you didn't understand.
And, if you didn't understand, never come here again.
Gah.
Gah.
Gah.
Visually fantastic, and loved every minute though.
Sunday, 7 February 2010
Compute vs Computer
Dear Microsoft, the sales description of your pricing model sucks. KTHXBAI.
Yes - thanks for the free 24 hours, which reduces your monthly bill by a whopping 3%, but only for your first use. Not because I've used the computed time, no, because I've used the time of the computer to do no computation.
Why should I be surprised, this is standard cloud-style provisioning? Well, not quite. Firstly the sales pitch indicates all the way through that it is the use of compute time, not computer time - and the cost calculator seemed to confirm this. Secondly, every single deployment, staged & production counts as a computer time - you cannot scale up within a computer to maximise the available compute time, and that is where I believe it differs from the standard. Each application you want to use on the cloud - regardless of usage patterns or footprint will cost a pretty hefty amount, and only the first deployment or the first application will see the free hours. So do we end up bundling everything into a single stupidly weighty and CPU intensive application just to avoid the cost?
Great - how about load/unload at point of use? Yeah - awesome for a web application, no thanks.
OK, so they're not aiming at hobbyist programmers? Sure, fine, I'll also heartily not recommend them to my current or future employers now... and I'm sure they'll be cowering in their boots for that. Yeah, pow, take that big corporation, woo!
It doesn't seem to sit easily with them opening up free versions of Visual Studio for web development, and trying to encourage an uptake there. Sure, you can develop for free and it's great - but surely you wouldn't want to use it anywhere, like on the web, would you?
And I was happy to pay them for hosting my hobby work, the costs didn't look unreasonable for similar packages available, it could be useful and would certainly put me closer to the "development edge". But, no, not now - the costs of what I'd like to do would be completely uncompetitive compared to other packages.
I await the chimes of "should use LAMP" - which naturally misses the point, so don't bother.
On the plus side, IIS6 and ASP.NET MVC - yay, they really hate each other too.
Happy times.
Yes - thanks for the free 24 hours, which reduces your monthly bill by a whopping 3%, but only for your first use. Not because I've used the computed time, no, because I've used the time of the computer to do no computation.
Why should I be surprised, this is standard cloud-style provisioning? Well, not quite. Firstly the sales pitch indicates all the way through that it is the use of compute time, not computer time - and the cost calculator seemed to confirm this. Secondly, every single deployment, staged & production counts as a computer time - you cannot scale up within a computer to maximise the available compute time, and that is where I believe it differs from the standard. Each application you want to use on the cloud - regardless of usage patterns or footprint will cost a pretty hefty amount, and only the first deployment or the first application will see the free hours. So do we end up bundling everything into a single stupidly weighty and CPU intensive application just to avoid the cost?
Great - how about load/unload at point of use? Yeah - awesome for a web application, no thanks.
OK, so they're not aiming at hobbyist programmers? Sure, fine, I'll also heartily not recommend them to my current or future employers now... and I'm sure they'll be cowering in their boots for that. Yeah, pow, take that big corporation, woo!
It doesn't seem to sit easily with them opening up free versions of Visual Studio for web development, and trying to encourage an uptake there. Sure, you can develop for free and it's great - but surely you wouldn't want to use it anywhere, like on the web, would you?
And I was happy to pay them for hosting my hobby work, the costs didn't look unreasonable for similar packages available, it could be useful and would certainly put me closer to the "development edge". But, no, not now - the costs of what I'd like to do would be completely uncompetitive compared to other packages.
I await the chimes of "should use LAMP" - which naturally misses the point, so don't bother.
On the plus side, IIS6 and ASP.NET MVC - yay, they really hate each other too.
Happy times.
Saturday, 6 February 2010
Game Entropy
I’d contend there is little more amusing than driving a rocket-powered car at high speed into a wall and being flung through the windscreen like a ragdoll, or ploughing recklessly through a field of cows setting light to everything with a flame thrower to obtain a “barbecue bonus”.
I’d hazard a guess that this may not be a particularly universally held view, or one that would be approved of generally, but in the world of gaming – hey anything goes.
And so it does go, with great regularity, in some of my favourite driving games – most recently FlatOut: Ultimate Carnage. Navigating through a debris strewn track, which has been created by what can only be described as novel driving styles to wreak havoc, all the time pointing out that “it’d be really nice if I could see where I was going” (although that seems to be entirely optional – and more often than not detrimental to the chaos caused), or yelling “EAT IT!” when ramming someone into a wall – yes it is quite carnage filled (not entirely sure it’s ultimate though). I do spend more than a few hours playing it, and as was with the case with the “predecessor” in my personal collection of favourite driving games; Carmageddon.
However, each time an excellent game like these come out, the developers or publishers inevitably go bust, and we never see a follow up. We’re left to scavenge hardware and operating systems for years to follow, trying to keep at least a couple of bits of kit alive enough to be able to continue playing, but it is a tough battle to keep them going – and I fear that Carmageddon may be passing beyond our playable reach (mostly down to what appears to be an IPX issue more than anything else).
It’s quite sad, in several ways (I know), but it’d be helped if we had a more steady stream of these style of games instead of the usual dull procession of movie tie-ins or new versions of already tired series – ditch those and give us some entertaining physics in a sandbox environment, with ridiculous cars and multiplayer capability... then go bust and get someone else to do another game within a year or two... simples!
I’d hazard a guess that this may not be a particularly universally held view, or one that would be approved of generally, but in the world of gaming – hey anything goes.
And so it does go, with great regularity, in some of my favourite driving games – most recently FlatOut: Ultimate Carnage. Navigating through a debris strewn track, which has been created by what can only be described as novel driving styles to wreak havoc, all the time pointing out that “it’d be really nice if I could see where I was going” (although that seems to be entirely optional – and more often than not detrimental to the chaos caused), or yelling “EAT IT!” when ramming someone into a wall – yes it is quite carnage filled (not entirely sure it’s ultimate though). I do spend more than a few hours playing it, and as was with the case with the “predecessor” in my personal collection of favourite driving games; Carmageddon.
However, each time an excellent game like these come out, the developers or publishers inevitably go bust, and we never see a follow up. We’re left to scavenge hardware and operating systems for years to follow, trying to keep at least a couple of bits of kit alive enough to be able to continue playing, but it is a tough battle to keep them going – and I fear that Carmageddon may be passing beyond our playable reach (mostly down to what appears to be an IPX issue more than anything else).
It’s quite sad, in several ways (I know), but it’d be helped if we had a more steady stream of these style of games instead of the usual dull procession of movie tie-ins or new versions of already tired series – ditch those and give us some entertaining physics in a sandbox environment, with ridiculous cars and multiplayer capability... then go bust and get someone else to do another game within a year or two... simples!
Thursday, 4 February 2010
Test (Part 2)
So, the team I thought I had no chance of joining seem to think I've done as well as anyone who has "taken the test previously and joined the team", so they'd like me to move over...
Not sure if this a good sign, do they get through a lot of developers? Is the system so bad they'll have any idiot in? Or, do I, through some fluke of years of "hard" work have some skills they recognised. Perhaps I shouldn't be so hard on myself as this is a pretty good opportunity to do some new and exciting things (to me at any rate), and the hiring manager has recognised my eagerness to learn - which he says is an important and useful thing to him (I think that is usually code for "big pile of rubbish code ahoy") - but it's going forward and more experience, in a more developer focused environment, hopefully.
All I seem to need to do now is navigate my way across, and the logistics of that are going to be all kinds of not-fun on numerous levels - so we're not there quite yet.
Part of me has been wondering for the last couple of weeks whether I want to continue being a developer, at times it seems like we're the last sane people in the building trying to prevent the "business" bestowing a great disaster upon itself, rather than changing the world... and it's true I get fed up of the constant "why?" questions that people come up with after they've come up with utterly unrealistic or unimaginably poor ideas through the power of their own groupthink. But yet, I still enjoy the output, producing useful stuff, making the world better (tm) - or, just slightly less worse (or, miles worse if I'm not feeling charitable).
But, a change is as good as a rest, or going postal.
Not sure if this a good sign, do they get through a lot of developers? Is the system so bad they'll have any idiot in? Or, do I, through some fluke of years of "hard" work have some skills they recognised. Perhaps I shouldn't be so hard on myself as this is a pretty good opportunity to do some new and exciting things (to me at any rate), and the hiring manager has recognised my eagerness to learn - which he says is an important and useful thing to him (I think that is usually code for "big pile of rubbish code ahoy") - but it's going forward and more experience, in a more developer focused environment, hopefully.
All I seem to need to do now is navigate my way across, and the logistics of that are going to be all kinds of not-fun on numerous levels - so we're not there quite yet.
Part of me has been wondering for the last couple of weeks whether I want to continue being a developer, at times it seems like we're the last sane people in the building trying to prevent the "business" bestowing a great disaster upon itself, rather than changing the world... and it's true I get fed up of the constant "why?" questions that people come up with after they've come up with utterly unrealistic or unimaginably poor ideas through the power of their own groupthink. But yet, I still enjoy the output, producing useful stuff, making the world better (tm) - or, just slightly less worse (or, miles worse if I'm not feeling charitable).
But, a change is as good as a rest, or going postal.
Wednesday, 3 February 2010
Market-o-bot-be-gone
There is something strangely satisfying when you receive an email which opens with "Tired of receiving..." and then goes on to persue the very thing they're questioning your level of exhaustion at.
My latest addition to this pile of stupidity is from a recruiment firm, which opens with:
"Are you tired of receiving irrelevant mailshots for locations which are completely out of the question?"
Why yes, yes I am!
"Then we have positions available in; Manchester, Zurich, High Wycome, Leatherhead, Edinburg, Aberdeen, Richmond, Norwich, Winchester and Basingstoke!"
But I've already said I'm tired of mailshots that do that, why are you doing that? Are you so stupid as to have forgotten the point of your mailshot? Or, is it that you are trying to sneak a badly formed mailshot past me, under the illusion that it isn't?
My latest addition to this pile of stupidity is from a recruiment firm, which opens with:
"Are you tired of receiving irrelevant mailshots for locations which are completely out of the question?"
Why yes, yes I am!
"Then we have positions available in; Manchester, Zurich, High Wycome, Leatherhead, Edinburg, Aberdeen, Richmond, Norwich, Winchester and Basingstoke!"
But I've already said I'm tired of mailshots that do that, why are you doing that? Are you so stupid as to have forgotten the point of your mailshot? Or, is it that you are trying to sneak a badly formed mailshot past me, under the illusion that it isn't?
Quiz
Entertaining Retro Bar Pop Teasers Pop Quiz (to be known henceforth as RBPTPQ - snappy hey?) - based around power ballads.
We managed to sneak second place and got some crap CDs as prizes (although I had to complain one of the jewel cases was completely devoid of CDs).
I surprised myself by how many of the songs I loved, and enjoyed... and hated. But the questions were often slightly out of my grasp - Kenny, as usual, came to the rescue and filled in many of the blanks - even Motley Crew - which seemed to be based off the "cryptic clue" of - A cartoon characters side-kick goes to the hairdresser... I was still pushing for Bonnie Tyler personally, but he saw straight through it.
Here's to power ballads... and Pete Waterman, please write us something in that vein, being slightly anthemic... it's a sure-fired Eurovision winner - maybe.
We managed to sneak second place and got some crap CDs as prizes (although I had to complain one of the jewel cases was completely devoid of CDs).
I surprised myself by how many of the songs I loved, and enjoyed... and hated. But the questions were often slightly out of my grasp - Kenny, as usual, came to the rescue and filled in many of the blanks - even Motley Crew - which seemed to be based off the "cryptic clue" of - A cartoon characters side-kick goes to the hairdresser... I was still pushing for Bonnie Tyler personally, but he saw straight through it.
Here's to power ballads... and Pete Waterman, please write us something in that vein, being slightly anthemic... it's a sure-fired Eurovision winner - maybe.
Tuesday, 2 February 2010
Test
So, I was asked to do a test today by the team I certainly won't be moving into.
Two parts. A) Implement a Stack & Queue without Collections, B) Hook a WinForm up to multiple tables and provide an edit method.
Well, A was mostly ok - much of my time was spent battling with VS2003 - I'd forgotten just how bad it was. B - well, yes, for me, was a disaster - but I've never pretended to have any WinForm or GUI experience - had it instead been "do it in ASP.NET" - would have taken me about 20 minutes.
Ho hum.
Two parts. A) Implement a Stack & Queue without Collections, B) Hook a WinForm up to multiple tables and provide an edit method.
Well, A was mostly ok - much of my time was spent battling with VS2003 - I'd forgotten just how bad it was. B - well, yes, for me, was a disaster - but I've never pretended to have any WinForm or GUI experience - had it instead been "do it in ASP.NET" - would have taken me about 20 minutes.
Ho hum.
Monday, 1 February 2010
Gillette Adverts
A new series of "bodged-together" adverts has appeared from the venerable planet resource wasting corporation.
This time it appears to involve some form of innovative post-shaving balm to stop your skin becoming "something terrible" and "even worse". Helpfully, and to illustrate the power of this new wonder product, the first shot after the description of said product involved the model wiping it on his nose.
Remember kids, next time you shave your nose you can relieve it instantly and keep it shining bright for all our tomorrows.
I, for one, shall sleep more soundly tonight.
This time it appears to involve some form of innovative post-shaving balm to stop your skin becoming "something terrible" and "even worse". Helpfully, and to illustrate the power of this new wonder product, the first shot after the description of said product involved the model wiping it on his nose.
Remember kids, next time you shave your nose you can relieve it instantly and keep it shining bright for all our tomorrows.
I, for one, shall sleep more soundly tonight.
Sunday, 31 January 2010
Best laid plans...
Well, that didn't get far.
It looks like there's a small problem in the F1 Sweepstake schema - and I'm unsure at the moment just how much of a pain it will be. At the heart of the problem is that I've decided to partition the data on a season basis, therefore at the "top" of the tree is a season table which holds little more than a year number and a flag for the "current season". Everything which is an actual instance of something (e.g. race, result) refers to it by season, but also may refer to more "static" information (e.g. a race is at a circuit - but the circuit crosses seasons, or a result was for a seat which had a driver - but the driver may have been in more than one season).
All very well and good, except I didn't really link the competitor (those participating in the sweepstake) in the same way, or even really think about it - thus while you can easily join from the "formula 1 season" data into the "sweepstake data", via the natural identity links and season partitioning, you cannot so easily go the other way around. Which, will, err, kinda be required for managing the competitors - d'oh!
OK, so I can just slap the season partitioning on the tables linking the competitor's choices to the rest of the app and hopefully all will be well... maybe. Something is bugging me about the EDM editor where it keeps picking up a weird reference into one table, but not a similar reference into another "logically identical" table - now that was partly caused by a missing FK reference, but it kept coming back long after the reference was instated.
Then again, maybe I'm just being slightly paranoid (as schema changes can be expensive and painful), and that I can't quite think of the best way to do it at the moment.
Need to have a ponder, and tinker around with it.
It looks like there's a small problem in the F1 Sweepstake schema - and I'm unsure at the moment just how much of a pain it will be. At the heart of the problem is that I've decided to partition the data on a season basis, therefore at the "top" of the tree is a season table which holds little more than a year number and a flag for the "current season". Everything which is an actual instance of something (e.g. race, result) refers to it by season, but also may refer to more "static" information (e.g. a race is at a circuit - but the circuit crosses seasons, or a result was for a seat which had a driver - but the driver may have been in more than one season).
All very well and good, except I didn't really link the competitor (those participating in the sweepstake) in the same way, or even really think about it - thus while you can easily join from the "formula 1 season" data into the "sweepstake data", via the natural identity links and season partitioning, you cannot so easily go the other way around. Which, will, err, kinda be required for managing the competitors - d'oh!
OK, so I can just slap the season partitioning on the tables linking the competitor's choices to the rest of the app and hopefully all will be well... maybe. Something is bugging me about the EDM editor where it keeps picking up a weird reference into one table, but not a similar reference into another "logically identical" table - now that was partly caused by a missing FK reference, but it kept coming back long after the reference was instated.
Then again, maybe I'm just being slightly paranoid (as schema changes can be expensive and painful), and that I can't quite think of the best way to do it at the moment.
Need to have a ponder, and tinker around with it.
Development Activities
One of the key things I'd like to use this blog for is as a record for my weekend hobbiest dev work. I'll try and keep my professional stuff out of this, as it's mostly irrelevant.
I currently have 3 projects "on the go", 2 of which have specific annual deadlines to achieve, and the other I expect to rattle on for the rest of the year.
Or, paying someone else to do it.
I currently have 3 projects "on the go", 2 of which have specific annual deadlines to achieve, and the other I expect to rattle on for the rest of the year.
- F1 Sweepstake - this has grown from a spreadsheet I threw together to track Retro's F1 Sweepstake, into a database, into a website. Next revision, due by end of Feb, is to move to a new (and actually complete without bodges) data model (done), host on MS Azure (in progress), connect through ADO.NET Entity Framework (done) and use ASP.NET MVC (in progress) to front-end with some ExtJS goodness thrown in for sprinkles.
- Beavervision Scoreboard - ancient DB and what started as a Classic ASP website for our annual Eurovision party. Has been pushed within an inch of it's life. Last year I transformed it to use ExtJS and ASP.NET Web Services, it mostly worked but there were some complaints of lagginess on the dropdowns - mostly from people who have been described as "non-technical" mind.
- Home Finance Package - to do. I want to replace a collection of spreadsheets which require much manual labour with "something" - probably a DB and something on MS Azure, perhaps. We'll see.
Or, paying someone else to do it.
Something new...
I've never been much of a diary keeper, if at all. But I'd like to start keeping a record of things I've been doing, my random stream of thoughts and general day-to-day musings. I'm sure little will entertain or be amusing, but it might help me piece together something in the future, perhaps.
Subscribe to:
Posts (Atom)