On Friday, I got up bright and early at 4.45am so that I could get down to Norwood for the 6.30am start of this year's Challenge Tour for the Tour Down Under. Well ok, it was early but I wasn't feeling particularly bright at that hour!
The course was 135km, winding up through Gumeracha through the Adelaide Hills following the Onkaparinga valley then to Mt Barker, Macclesfield and Meadows before finishing at Strathalbyn.
Once again I rode with my Dad, and this time he was definitely setting the pace!The only thing that could slow him down was a puncture on Gorge Rd, and me trying to keep up. My other problem was in getting ready and driving to Mum & Dad's in the dark to meet our lift I managed to leave one of my bike gloves in the car – which meant had to ride with just one glove (a bit less comfortable but was ok).
We left Norwood just as the sun was rising, and headed off at a nice pace. Dad had done a trial of Checker's hill a few weeks ago and suggested we'd be better off taking the detour. I'm glad we did and heard that many who attempted it ended up having to get off and walk up the hill.
There were regular drink stops, and the major rest stop at Oakbank was well prepared. Even when they ran out of Powerade, they managed to find some more supplies quickly.
Even in a crowd of 7,500 cyclists, Adelaide being what it is you're bound to bump into someone you know. Here's Paul (also member of Sevenfold) enjoying the stop at Oakbank. I also bumped into Grant, who I worked with years ago way back in my SysAdmin days. He said there was something distinctive about me to make me easy to pick out in a crowd.
The weather was very kind – it was a mostly fine day but stayed quite mild which was a big relief to me! The wind was quite blustery but was quite refreshing, except for the final downhill run into Strathalbyn where it was pushing us around a bit.
We completed the distance in 5 hours 50 minutes and even though my preparation had been very limited leading up to the ride, I didn't feel too bad. Having said that I was glad to finish and my behind was about done with sitting on a bike seat for a while.
I'm slowly improving my knowledge of developing in Silverlight and specifically apps for Windows Phone 7. My Internode Usage app has been out for almost a month, and I'm working on an update for that (including real Internode logos now that I've got permission). I've also been creating a new app that will display the nearest public toilet (particularly useful for parents of young kids, especially if you're travelling). That's been fun as I've got to use the Map control. I hope to publish that soon.
One thing I have missed was the ability to easily write unit tests for the code. The problem is that the code doesn't run on your desktop, it runs in the emulator or on a device. This has meant that most of the solutions so far have relied on running the test runner on the device as a separate application. That is certainly a valid way to test, but getting the results of the test back out isn't easy. Justin Angel describes one approach using the CoreCon API to read and write to the test app's Isolated Storage. Another way might be to get the test runner app to push the results back out to some kind of HTTP listener running externally to the emulator.
Enter the Portable Library Tools add-in. Just released as a CTP, this allows code to be targeted at both Windows Phone 7 and the regular CLR (as well as Silverlight and XNA) without having to jump through lots of hoops.
It should now be possible to create a regular .NET unit testing assembly (say using MbUnit with the Gallio test runner) and run tests over most of your code, and then just recompile to have the same code be deployed to WP7.
There will be exceptions, as you may need to refactor your code to extract out specific WP7 dependencies (that obviously have no equivalent in the desktop .NET Framework), but this looks like a promising step forward.
One caveat is that to install the Portable Library Tools, you need to have installed VS 2010 SP1 Beta. I'm being more careful about keeping my work laptop (which has also become my main dev machine) in good working order, so I'll be installing the SP1 beta on a separate VM just to be safe.
I'll do a follow-up post with my experiences. It might take a few days, as tomorrow I'm off riding in the Tour Down Under (again!), and might need a day or two to recover!
type in T-SQL is for storing fixed precision numbers. You can define the total number of digits to store (the precision), as well as how many digits are to the right of the decimal point (the scale)
eg. to store a number in the range –9.9 to 9.9 (with 0.1 increments), you could use decimal(2, 1).
Sometimes database systems may store integer values using their equivalent of the decimal type (with a scale of zero), and when you use SSIS to import the data, it just defaults to creating a compatible schema.
There are some storage and potential performance benefits to using integer data types, so it may be worth checking whether the source data would actually fit inside a native int (or tinyint or bigint).
First, let's look at the storage requirements for decimal types. As you can see from Table 1, even a decimal(1,0) will still take up 5 bytes.
Table 1 - Bytes required to store decimal precision types
|Decimal precision ||Storage bytes |
|1-9 ||5 |
|10-19 ||9 |
|20-28 ||13 |
|29-38 ||17 |
Contrast this with the requirements for the integer types.
Table 2 - Bytes required to store integer types
|Data type ||Range ||Storage bytes |
|tinyint ||0 to 255 ||1 |
|smallint ||-215 (-32,768) to 215-1 (32,767) ||2 |
|int ||-231 (-2,147,483,648) to 231-1 (2,147,483,647) ||4 |
|bigint ||-263 (-9,223,372,036,854,775,808) to 263-1 (9,223,372,036,854,775,807) ||8 |
So for certain ranges of precision, the value can safely be stored in an equivalent integer type.
Table 3 - Compatible integer types
|Decimal precision ||Integer equivalent ||Bytes saved |
|1-2 ||tinyint ||4 |
|3-4 ||smallint ||3 |
|5-9 ||int ||1 |
|10-18 ||bigint ||1 |
If you do this, be very careful that you are not inviting overflow errors into your application.
My Media Center has been misbehaving a bit lately, much to my (and the family's) annoyance.
First off, it the receiver started showing "tuner not available" errors. Restarting the machine would resolve the problem, but only temporarily. Installing the newer Hauppauge driver 18.104.22.168162 seems to have mostly fixed that (from the Hauppauge UK website). Along the way to resolving this, I also tried swapping the card into the other PCI Express slot, just in case that helped.
Then the Microsoft Remote stopped working. The display on the front of the Antec case said something like "bad command" for any button I pressed. Opening up the iMON software, I enabled sounds for invalid commands, and sure enough every button press resulted in the warning sound. Bizarre! The batteries in the controller were still fresh, so the only thing I could think of was to find the original IR receiver that came with the controller and plug that in. I'd never used it as the Antec case came with a receiver built in. In any case (ha ha), that seemed to resolve that one.
Then a few hours later, the sound spontaneously muted. Attempts to increase the volume worked briefly, then the volume would auotmatically wind back down to zero/mute. Alternatively, it rolled right up to 50 (100%). Rebooting and that one went away – not sure what's going on there.
So I'm keeping a close eye on things. Maybe the MCE is feeling jealous that the XBox 360 is getting some of it's screen time
My first application for Windows Phone 7 has now been published to the marketplace!
It's a free usage meter for Internode's broadband customers. Want to check how your much quota you have left on your ADSL plan? This app will tell you.
The first version is pretty simple. It displays two sections. The first (shown above) displays your total quota, amount used so far, and the time the data was retrieved. The second section displays details for your account (see below).
To install it on your Windows Phone 7 device, go to http://social.zune.net/redirect?type=phoneApp&id=c9ebe665-de0d-e011-9264-00237de2db9e (Opens in Zune)
When you first run the app, a welcome screen is displayed and you are prompted to go to the settings page to enter your username and password. (In version 1.0, there's a bug where the big 'Settings' button doesn't do anything – you'll have to click on the settings icon instead. This will be fixed in the next update)
Enter your Internode username (just the bit before the @ works for me)and password.
Click on the 'Save' icon to store these credentials.
Your account details, including full username, monthly quota, plan name and plan speed.
Features I'm thinking of adding for the next update:
- Usage history – graphs of last 12 months and detailed graph of last 30 days
- Improved icons (hopefully the Internode logo if permission can be obtained)
I'm also keen to hear of any other suggestions.
This application uses the Internode API, however for the canonical source for your usage, please always refer to My Internode.
In many ways, the app is inspired by Angus Johnson's Internode Monthly Usage Meter (MUM). I've been a happy MUM user for as long as I've had Internode ADSL.