Monday, 28 July 2008

Improving my PageRank

Last last year, I decided I would make use of Google’s Webmaster tools to indicate that my blog nominally resides in Australia. Of course because it is hosted on Blogger, Google wouldn't otherwise guess this from the domain name. At the time I was curious as to what effect this would have on my PageRank.

Entering "David Gardiner" into Google does bring back lots of matches, and I'd managed to be on the first page which I was pretty happy about. I'd been quite diligent in always linking back to http://davidgardiner.blogspot.com when ever I was asked to enter website details on other sites. My UniSA staff homepage also featured prominently, so it would be interesting to see what happened after I left there and that page ceased to exist.

Things didn't seem to go well though. I'd heard Google changed their algorithms around the same time, and I noticed my blog was dropping further and further down, until it was somewhere on the third page of results.

The crazy thing through all this was that my profile on the Australian Broadband site Whirlpool always rated very high. That must show an indication of how PageRank has changed - inbound links to your page don't seem to count as much now as the significance of the site as a whole. I'm pretty sure no one is linking to my Whirlpool profile, but obviously heaps of sites link to Whirlpool in general.

So last week I thought I'd try to make some changes:

First off, I removed the "Australia" designation. Even though I liked having my blog come up in the "pages from Australia" search, I wondered if this might be counting against me?

Secondly, I modified the blog title to include my full name. It is a little bit more wordy, but hopefully it helps Google out a bit.

Finally, I reviewed the template for my blog, and found some embarrassing errors. I'd added some <meta> tags for keywords and description, but for some reason had used a 'value' instead of 'content' attribute.

I then ran the page through the W3C Validator a few times and fixed some of the errors and warnings. After all, you figure if the markup is well formed, then the search engines are going to have an easier time indexing your content. One thing this did show was that Blogger is generating some invalid markup (eg. not properly encoding ampersands in URLs). It would be nice if they would fix that.

So with those changes done I thought I'd do another search today and see how I'm doing... Not too bad it seems - I'm now back on the first page of results - currently coming in 6th (with my Whirlpool profile 1st!)

Maybe as a further experiment, I'll go back and add back "Australia" as a geographic target in a few months, to see if that really did make a difference.

Note, other search engines also offer similar webmaster tools - eg. Live.com and Yahoo.com

Sunday, 27 July 2008

Embedding a Silverlight video in a webpage

When most people link to YouTube videos, it ends up embedding a still image of the first frame of the video. You can then click on it to start playing.

I linked to my demo video in my demo competition entry post, but I couldn’t figure out how to do the same thing. I personally prefer not to force someone to start downloading a video if they didn’t want it. Is there a simple way to do this? (Apart from having to manually save the first frame out as a jpeg).

Friday, 25 July 2008

Passed 70-561

To be honest, I didn’t expect this!

I just found out I’ve also passed Microsoft .NET Framework 3.5, ADO.NET Applications.

I remember I was pretty tired, and was still a bit exhausted after taking 70-562 the previous day. About 3/4 through I noticed the tiredness was catching up on me as I was having trouble focusing (Excom’s crumby old test computer doesn’t help – nothing like a CRT monitor with the refresh frequency set way to low to wear you out quicker). The thought even crossed my mind that maybe I should give up and leave. But then I figured, no, I won’t get this opportunity again so try and give it my best shot. Looks like it was a good thing I stuck it out :-)

Tuesday, 22 July 2008

Heroes Happen 2008 Demo Competition entry

Rob should be happy, I’ve finally got around to recording my entry for Microsoft’s demo competition!

I demonstrated this earlier this month at the Adelaide SQL Server User Group, and then did a slightly longer version at CodeCampSA.

Monday, 21 July 2008

Welcome Nigel and Richard

Today Nigel Spencer and Richard Hollon joined us at ABB.

Timothy has dubbed us the “Dream Team”. I’m not sure if that means we’re really good, or we’re really sleepy.

Thursday, 17 July 2008

Passed 70-562

I’ve received confirmation that I passed Microsoft .NET Framework 3.5, ASP.NET Application Development. This was one of the two beta exams I did in early May.

The one good thing about doing beta exams is they are free. The bad thing is that unlike regular exams, you have to wait 6-8 weeks to find out if you passed or not, and you don’t get a score – just a pass or fail.

Monday, 14 July 2008

CodeCampSA 2008 – Day 2

Presentation notes

Paul Stovell – Reactive Programming

  • Reactive programming. cf. Excel
  • Data binding – similar for .NET
  • Manipulating the flow
    • WPF ValueConverters
    • EditableAdapter class
  • Reactive Domain Models
    • Search query generic class
  • Bindable LINQ
    • A bit like SqlCacheDependency for LINQ expressions
    • Very cool!
    • Just add one method to LINQ and you’re done

Tatham Oddie - ASP.NET MVC

  • The “I” in URI is for Indicator
  • Controller – adds data to ViewData dictionary
  • Html.ActionLink (Html helper class)
  • Routes – more than just URL rewriting
  • System.Web.Routing – can also be used in WebForms
  • View Engines – WebForms, but can also use others
  • IoC
    • RegisterControllers – extension method for WindsorContainer class

Ben Mackie – Reflection, extension, injection

  • Three types of projects
    • Configuration
    • Extension
    • Purpose-built
  • SPI – service provider interface – how the host depends on the extension
  • Castle configuration – can pass references to other dependencies through the config
  • System.AddIn
    • Contracts, views and adapters

I wonder if you could write a whole application as a bunch of addins?

Dr Greg Low – SQL isolation levels etc

How much one user impacts others.

  • Read committed (shared lock, SQL default)
  • Read uncommitted (no locks, risky) – consider using a read-only partition on a table instead
  • Repeatable read (locks, but can have phantom rows)
  • Serializable (locks, no phantoms) – very consistent
  • Snapshot (2005+, writers not blocked, uses row versioning)

Locks

  • Shared (S)
  • Updated (U)
  • Exclusive (X)
  • Intent
  • Schema
  • Bulk update (Bu)

Make sure you use semicolons in your T-SQL as it will become mandatory in the future

  • Hints – use as a last resort
  • Use new DMVs to find blocking queries
  • Deadlocks
    • who ever did the least work gets killed (different from earlier versions)
    • Use deadlock graph (lock events) in SQL profiler
    • Make use of TRY/CATCH (2005+)
    • Build deadlock handling into client app from day one

Shane Morris – User Experience (UX)

UX design process

  • Information design
  • Interaction design
  • Presentation design

Interaction and presentation are mostly in the “coding” side.

Interaction design

  1. List everything you need to show
  2. Map out the workflow – what order are people going to work?
  3. Layout the elements (left-right, top-bottom)
  4. Check groupings
Presentation design
  1. Remove every unnecessary element
  2. ?
  3. Line stuff up – line up text to baselines (eg. labels and textboxes)
  4. Space and size things evenly
  5. Indicate grouping (group-boxes, similarity, proximity, alignment, empty space)
  6. Add visual weight
    • Colour
    • Size
    • Contrast
    • Irregular shape
    • Misalignment
    • 3D
    • Movement

Daniel Brown – SharePoint development

New Visual Studio 2008 extensions for SharePoint.

Corneliu Tusnea – Debugging the CLR

Debugging in Visual Studio

  • Use the Debugger attributes
    • DebuggerDisplayAttribute
    • DebuggerBrowseableAttribute
  • Use object ID to attach to objects in the watch window

Memory dumps

WinDbg

  • .loadby sos mscorwks
  • !threads (list threads)
  • !pe xxxxx (print exception)
  • !do xxxxx (dump object)
  • !dso (dump stack objects)
  • !iptomd xxxx (map instruction pointer to memory dump)
  • !dumpmt xxxx (dump method table)

gflags  - use to start debugger before service starts

Adrian Downs – PerformancePoint

Demonstration of Dashboard Designer

Final day thoughts

Another great day of content. I had to leave before Paul’s second quiz was finished (apparently the SMS proved problematic and they had to resort to paper in the end). Maybe next time the quiz could be run over the whole day (eg. a question in between each session). This would give time for answers to be received.

Well done to Peter for organising everything, and special thanks to the interstate speakers for making the effort to come down to Adelaide – very much appreciated.

Dual monitoring again

Hooray! It’s a bit like Christmas at the moment. Not only did I win a $AU19,000 MSDN subscription at CodeCampSA on the weekend (feel free to add your comments as to whether I should keep it or give it away to a suitable cause), but finally my second monitor arrived this morning at ABB. I’ve been waiting 5 weeks for this, and there were times when I wondered if it would ever happen.

The new monitor is a HP L1950, which is the same screen size as my existing HP L1906, but most importantly has DVI input, and also a slightly narrower bezel.

My current machine is one of these dinky HP dc7800p ultra-slim desktops. To be honest, they’re probably fine for your average Microsoft Office user, but they are quite a bit under-specced for developing.

This is something that we’ve raised, and hopefully will be addressed soon either by extra RAM and a second hard drive, or (fingers crossed) some replacement boxes that are more in the “power workstation” class. I think this is critical, as we have a tight deadline and don’t want to waste time watching the hard disk LED glow brightly for 30 seconds at a time (freezing Windows) until it’s ready again.

After all, it’s not like I’m asking for three screens or anything!

Saturday, 12 July 2008

Some mistakes and a nice surprise

My talk today at CodeCampSA was on SQL 2008 change tracking and how that works with the new Microsoft Sync Framework. It went ok up until I put the VM into full-screen mode, which promptly stopped the display on the projector. Arrgh! A quick fumble around and running the ATI video utility got things working again. Doubly embarrassing as I'd just made a comment about the whole "demo gods" thing so that drew a few smart comments!

Then, my "prepared earlier" demo failed to work. I suspect it’s because just an hour before my talk, I decided to add an extra table to my test database. That probably wasn’t a very wise thing to do.

I then asked Timothy (fellow developer from ABB and Sync Framework whiz) to join me out the front and demonstrate how to create custom client and server providers. I realise now that I should have given him much more time, as he did a great job, but with time against us we couldn't finish it properly. I really should have given him more chance to prepare rather than throwing him in the deep end with only 10 minutes to go.

Even with all that, I still stand by my dismissal of "demo gods" comments that so many presenters like to make. But I'm happy to admit that I'm not perfect rather than blame someone (or something) else.

So I was feeling a bit disappointed with how that went, but things were about to change for the better.

As I mentioned, Paul ran a clever quiz competition to give away a Visual Studio Team System 2008 Team Suite with MSDN Premium.

Guess who won?

Yep, yours truly!!! Wow, and they don't sell these for peanuts either!

So now I have a dilemma - I realise this is a very valuable resource, probably not something I'd ever get to buy myself. But is it something that I'm going to be able to make good use of? I'm not sure.. maybe there are some other organisations that this could benefit much more.

I'll think about it before I decide what to do. But a warning, don't bother contacting me asking me to give it to you! The answer to those requests will be "Sorry, No".

I could give it to my Mum, to say thanks for lending me her laptop to use today, but I have a feeling she might not know what to do with it :-)

Of course I may still decide to keep it. Otherwise I'll be deciding what to do with it soon (making sure what ever happens complies with Microsoft's licensing/conditions).

CodeCampSA 2008 – Day 1

Presentation notes

Jeremy Huppatz

Spoke about the divide between dbas and developers, and how VS Database Professional has many new features that try to bridge that gap. It does seem that many of these features are similar to existing offerings from Red Gate though. Not sure if they've all been licensed, or if it's direct competition from MS.

Darren Neimke

Microsoft's "Live". Things I hadn’t seen before included Live Mesh, tafiti (a fancy search engine interface). To roll your own application that leverages the Live platform, you’ll need to set up an App ID. I am wondering what services does Live offer that differentiates it from its competitors? Or is it just playing catchup/keeping even with other offerings. Darren also mentioned even dentists could use Live – which made me wonder how you could go to the Dentist online!

Alan Boldock

A witty and engaging presentation on some of the features of WPF. Alan recently presented at AdNUG, and I'm now sorry I missed it. One tip Alan gave was the use of RentACoder, not just for coding, but for graphic design work. He did say that the specs needed to be very precise though.

Simon Holman

An overview of DotNetNuke. Showed how easy it is to install, and how you can simply extend it by writing your own modules (based on ASP.NET User Controls (ASCX files).

Peter Cornish

Back again this year with another interesting talk on analysing web traffic. He's a big fan of Google Analytics. If you were trying to sell stuff through your website, he’s the kind of person you'd want to hire to make sure you were targeting your market. There's a new feature in Analytics called "Industry Benchmarking" – worth investigating.

Paul Turner

Overview of SharePoint 2007. The relative ease in which it supports i18n was impressive – I hadn’t seen that before.

Me and Timothy

SQL 2008 Change tracking and Sync Framework. (See next post)

Jason Stangroome and Jim Burger

TFS and SubVersion shoot-out. Interesting to see the strengths and weaknesses of both products. Relevant as I was using TFS and were now using SVN at ABB.

Nigel Spencer

SQL 2008 Change tracking and Sync Framework. By coincidence Nigel and I ended up covering very similar ground, but to his credit he used WPF, didn’t mess up the display, and did it all in under 10 minutes (which means he can enter it in the Demo Comp)

Jason Schluter

Unit testing Silverlight. I’ve never used Silverlight, but I liked how the technology is heading to be able to write tests for this sort of code.

Paul Stovell

Ran a quiz using a WPF app hooked up to his mobile phone to allow everyone to enter via SMSing from their mobile phones. (More in next post)

Tea at Marcellina's

About 10 people headed over to Marcellina's for a banquet dinner. Some interesting conversations and a good chance to catch up with everyone over a yummy tea.

Other thoughts...

  • Wireless worked well, though not sure if all the Vista people got in first time. I’m glad I printed out the instructions before I came.
  • Seemed to be about 30 people today. I’m wondering what we could do to get more people to come along.
    • Is a weekend the best?
    • Would a weekday event get more people who are willing to give up work rather than their weekend/family time?
    • Maybe in the middle of school holidays isn't good for some people too.
  • Nice catering job by the scouts.
  • Most sessions ran on time which is good.
  • Great to see RJ, and bumped into Courtney too.

Wednesday, 9 July 2008

CodeCampSA 2008 update

Peter has published the latest programme for CodeCampSA, happening this weekend at UniSA City West campus.

A few things to note:

  • Last time I was there, lecture theatre HH4-08 only had 2 power points for the whole room. So if you have your laptop, make sure it’s fully charged, and maybe bring a spare power board and/or extension lead.
  • I’m doubtful that there will be wireless network access. I was able to coordinate that myself last year, but I’m not sure if anyone’s picked up the ball this time.
  • HH4-08 is in City West campus. For those who aren’t familiar with the University of South Australia, there are two city campuses (the other being City East). There’s numerous ways to get there. The HH building is roughly in the middle of the campus (check out the campus map).

I’d really like to see this content hosted on a CodeCampSA website, rather than just on Peter’s blog. That way additional information could all be kept together – just like the CodeCampOz site does.

This will top off an extremely busy week for me – we’ve got relatives visiting from interstate, my mum’s in hospital having surgery, it’s my daughter’s birthday, and yesterday we had our first field trial of the application we’re building for ABB (some success and some things we’ll need to fix, though the bakery lunch at Tailem Bend was definitely a highlight).

Update 11th July - Looks like wireless access has been organised. If you registered, you should receive credentials and instructions. Great stuff!

Tuesday, 8 July 2008

Building my Home Theatre PC

Mark from Mats Systems emailed me last week to say that the components had come in! So I promptly popped by the shop on Saturday to pick up my order.

I’d spent a fair bit of time using Static Ice to research the best prices for all the bits, but in the end I decided the convenience of a local retailer won out against the added freight costs of ordering from interstate (even though the interstate vendors’ retail prices might be initially cheaper).

I’d previously bought an LG Blu Ray/DVD drive and GS8400 video card from MSY, and the remaining components were ordered through MATS.

After unpacking all of the various bits, I decided the first thing to tackle was the Noctua NH-U9B heatsink for the CPU. The motherboard (a GA-MA78GM-S2H) comes with a standard AMD cradle, so I removed that using my very useful "bent nose" pliers to pop out the plastic anchors (Narelle bought the pliers for me years ago, and at the time I wondered what they were, but it turns out they've been one of the most useful tools in my toolbox!). I then installed the replacement cradle for the Noctua heatsink in the motherboard.

I then lined up the motherboard and screwed in the two extra brass stand offs into the floor of the case.

I then laid the motherboard in the case and screwed it down.

This is when I made my first mistake.. When holding the motherboard to lower it down, one of my hands was grabbing the conveniently located gold-coloured heatsink (between the CPU and the PCI-Express slots). As I did this, I heard a "crack" and the heatsink suddenly felt loose. "Oh no! What have I done?!"

Fortunately it was easily repaired with some heatsink cement that I'd bought last year following a similar incident.

In went the RAM, and the cables for the 1394, VFD USB and Audio (initially I had the "HD Audio" connected, but later I swapped over to the PC'97).

I then took the Blu-Ray drive out and mounted that in the external media caddy. I'll admit it took me a couple of goes to figure out the right way to align the drive in the caddy. When it is located correctly, the case's silver eject button pushes against the drive eject button.

Maybe now would be a good time to complete installing the Noctua heatsink. In trying to figure out the best alignment for the sink, I placed it on top of the CPU, and then realised I had a bigger problem... It was too tall!

As you can see from the photo above, the heatsink is clearly visible poking above the top of the case. There's no way the lid is going to fit on with that installed! Looks like the Noctua (with a height of 125mm) is not suitable for this case. My original specs actually referred to a Scythe Ninja Mini, which at 115mm probably would squeeze in ok. In the meantime, I decide to revert back to the AMD heatsink and fan that came bundled with the CPU.

I then went to insert the Hauppauge HVR-2200 Tuner card and realised something wasn't quite right. It's a PCI-Express 1x card, but that heatsink I had to fix up was in the way. Hmm.... I wonder if maybe when I reattached it, it was put in backwards? Checking the photo on Gigabyte's product page for the GA-MA78GM-S2H confirmed my mistake. That was quickly rectified and then the tuner card fitted in nicely.

Next I installed the hard disks into the disk holder. That was straight forward, except that I realised I only had one "4-pin Molex to SATA power" adapter cable. For the moment I was going to be restricted to using one disk at a time.

That seemed to be all of the essential components installed, so I plugged in the mains power cord and fired up the machine.

Only to be greeted by deafening silence.

Hmm, what had I got wrong? I reviewed all the wiring and it looked ok. I then noticed that there was an empty square socket on the motherboard the looked suspiciously like it would be a perfect fit for one of the unused plugs from the power supply. Strange, I thought I'd already plugged in the power for the motherboard. Checking the motherboard manual (page 23) confirmed my error - that's the power supply for the CPU! (You can see it in this photo - it's the white cube-shaped socket in the bottom right-hand corner of the photo). I plugged in that cable, tried the On button again, and this time success!

The machine booted up, but when it got to scanning for local disks, it took ages to decide there weren't any. Coincidentally, I also noticed that the Seagate drive was making funny beeping noises.

I played around with the BIOS settings, swapping from IDE, to SATA, to AHCI, but nothing seemed to fix the problem that the drive wasn't being found. No matter, I thought I'd try installing Vista anyway - maybe the drive would appear then. No such luck. Vista confirmed that it too couldn't see any drives. About this time, I also updated the BIOS from F3 to F5 - (the latest as of a few weeks ago).

Very odd. A quick Google of the symptoms revealed others have had similar problems with the Seagate drives, so in the interests of testing the system out, I swapped the power over to the Western Digital drive. The difference was obvious - the drive was found by the BIOS immediately.

About that time I had to go out, so rather than let the Vista install complete, I just shut down the machine. Probably not a good move, as the next time I started it up, I was greeted by an obscure "Bootldr is missing" message.

The strange thing is that even when I tried to boot from the Vista DVD, the message still appeared. It was like the BIOS was checking the hard-disk even though I'd told it to try the CD first. Very odd. In the end, in desperation I disconnected the SATA cable from the drive and rebooted. This time, with no hard-disk to confuse it, the BIOS offered to boot from the CD again, and I was able to start the Vista installation process again. Once this was underway, I reconnected the SATA connector again.

Vista then displayed the drive in its list and allowed me to reformat it. However presumably because Vista thought this drive was now "removable", it refused to allow me to install on it. No matter, I just rebooted at this point, and was able to repeat the process again, this time without the "Bootldr is missing" message causing problems. I finished the Vista install, but as it was done on the WD drive, I didn't activate it, knowing that I eventually intend to use the replacement Seagate drive for as the system disk.

So after those minor speed bumps, I finished installing Vista Ultimate and drivers for the various components. I then fired up Media Center in Vista and it worked like a dream. It located all the digital TV channels we have in Adelaide, and was able to display the TV in living colour. At this stage, I was using one of my computer monitors, but the next step was to try out the Composite TV-out socket to see if we'd be able to hook this thing up to our ancient CRT TV.

Much to the bemusement of Narelle, I took the system down to the room where the TV lives, and proceed to hook it up to the VCR. Sadly, after a few goes with various settings, I resigned myself to the fact that it just wasn't going to work. For some reason, while the VCR can happily receive composite video from our existing DVD player, it doesn't like the output from the 8400GS NVidia-based card. I plugged the VCR back in and Narelle was able to watch her programme again, instead of a frustratingly-blank screen.

My final attempt to get this to work will be to try one of the RF Modulators from Jaycar, but I'm pretty pessimistic about the chances of success. Assuming that fails to work, then I think it's "get a new TV" time.

The only other news is that Mark from Mats Systems confirmed the Seagate drive is a dud and is replacing it. I also got a full refund for the Noctua heatsink, as I was able to return it in mint condition in its original packaging. I think it would be a great heatsink, just not for this size case! He also supplied me with an extra Molex to SATA converter, for when the replacement drive comes in.

In conclusion, all I need is the replacement drive and to sort out the TV situation and I think we're up and running. For my first "build from scratch" computer, I'm pretty pleased with the result :-)

Wednesday, 2 July 2008

SQL 2008 beta exams

Gerry O’Brien mentions that two beta exams for SQL 2008 are available until 31st July.

  • 71-432: TS: Microsoft SQL Server 2008, Implementation and Maintenance (70-432)
  • 71-448: TS: Microsoft SQL Server 2008, Business Intelligence Development and Maintenance (70-448)

I’m not sure if I want to try these or not. I don’t mind doing beta exams (especially as they’re free), but I’m not that confident I’d do that well with the 2008 stuff yet.

New updates from Red Gate

I’ve had a couple of correspondences from Red Gate about some updates for some of their applications that I’ve mentioned previously here – SQL Compare and ANTS Profiler.

Richard Collins wrote to say that SQL Compare v7 is being released this month, and will include SQL Server 2008 compatibility as well as being able to compare against backups.

Regarding my comments about version control for database schemas, he said the following:

“I just thought I might mention that v.6 of SQL Compare also includes the ability to compare with a folder of sql scripts under source control (optionally via an add-in called SQL Changeset) which

I believe will help with your problem of updating from multiple possible versions.”

Stephen Chambers also dropped me a line to mention that they’re working on ANTS Profiler v4. Pre-release builds are free and can be downloaded via their support forum.