Tuesday, 24 December 2013

An extraordinary day.

"Sad, funny, thoughtful, thankful"

I wrote that on Facebook this afternoon after having returned from Eudunda where I had the honour and privilege of farewelling the father of a dear friend.

Max was a much loved husband, father and grand-father. It was great to see so many people come together today at his funeral to pay their respects and celebrate his life.

I did not know Max that well, but to hear the story of his life today, and see his legacy in his four daughters and their families was both moving and inspiring.

A man of faith and integrity.

It gives you pause to consider that when it's your turn:

  • what will people say about you?
  • will people still know how to make the jelly cakes, slices, curried-egg sandwiches, party pies and other assorted delights you find at the afternoon tea?

Wednesday, 18 December 2013

Chris Testa-O'Neill on Increasing Business and IT collaboration with SQL Server

 

Chris presenting on stage

I was one of the few who braved the 39°C heat outside to hear Chris Testa-O'Neill (@ctesta_oneill) speak at this month's Adelaide SQL Server User Group. Great to have Chris back in Adelaide again.

It proved to be a really interesting presentation about what BI tools are now available, and what tools are appropriate for what problems.

  • Reporting Services
  • Report Builder
  • PowerView
  • PowerPivot

The talk concluded with a nice demonstration of setting up PowerPivot in Excel, highlighting what could be achieved by a business 'power user', and what areas they would require assistance from a BI expert.

We also met in a different room from normal which I think most people thought was a better space. Plus (as you may observe in the photo above), it has a grand piano – I'm sure we could find a use for that somehow!

Saturday, 7 December 2013

TFS Best Practice Analyzer failing with "%TFSServerURLValidated%

I've been having trouble running the Team Foundation Server Best Practise Analyser (TfsBpa for short). It was failing with the following warning:

Cannot validate the URL provided
The scan was generated using the corrected URL "%TFSServerURLValidated%".

I noticed in the "Other Reports" section that it listed the following additional errors:

23:03:07.351: Exception resetting Execution Policy in TFS PowerShell Object Processor:
System.Management.Automation.CmdletInvocationException
Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.
   at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input, Hashtable errorResults, Boolean enumerate)
   at System.Management.Automation.PipelineNode.Execute(Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)
   at System.Management.Automation.StatementListNode.ExecuteStatement(ParseTreeNode statement, Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)
System.Management.Automation
Script

Hmm.. I wonder if it's a problem related to PowerShell's execution policy setting?

I ran the following in an elevated PowerShell prompt:

Set-ExecutionPolicy RemoteSigned

And that's fixed it – now the BPA process runs as expected. Yay!

Friday, 8 November 2013

Dumb Questions

A car is bogged at Port Parham South Australia in 1951Something I still remember from my school days was one of my teachers telling me, "David, don't be afraid to ask a question!". Presumably I'd been struggling with a particular topic (possibly maths), and essentially they were encouraging me not to sit there "spinning my wheels", but get some help to make sense of the problem.

That's a lesson that's just as applicable today as it was then. In software development, we are constantly solving problems. Some are easy, and some are hard. Some are easy but the hard bit is finding the bit that will be easy to fix.

Sometimes it's just the act of getting a colleague to come and have a look that sheds light on the problem.

But not just in work. Only this week I was at a Church meeting, and people were asking some very deep, insightful questions. I however asked what some might call a "dumb" question (but one which I didn't know the answer, hence why I asked).

After the meeting as I was leaving, a couple of people came up to me and said, "I was wondering the same thing, thanks for asking that!".

Which is another great reason to ask questions, even if you think they're dumb, as odds are someone else is wondering the same thing too.

Photo from Mallala Museum, used under Creative Commons Attribution-NonCommercial 2.0 Generic license

Thursday, 17 October 2013

What's waking up my computer at 3am?

I was working late last night, and when I was done, I chose 'Hibernate' when I was closing my laptop. This morning, I went to grab my laptop and noticed it was warm (with the lid down). Something had caused it to wake up, but what?

First stop, Event Viewer. In the System Log, there's this event:

The system has returned from a low power state.

Sleep Time: ‎2013‎-‎10‎-‎16T14:59:15.107518600Z 
Wake Time: ‎2013‎-‎10‎-‎16T16:44:40.891642600Z

Wake Source: Unknown

Well that's not particularly useful.

I remember previously having a similar problem caused by a scheduled task – so maybe it would be worth checking what scheduled tasks are active and allowed to wake up the computer? You can view all scheduled tasks by opening the Windows Task Scheduler application. The problem is that tasks are listed hierarchically, so you'd need to drill down into every folder and review each task. Maybe PowerShell can do this more efficiently?

Graimer posts a good example of querying scheduled tasks on Stack Overflow.

I've extended it so that I can filter just the tasks with WakeToRun and Enabled both true.

function getTasks($path) {
    $out = @()

    # Get root tasks
    $schedule.GetFolder($path).GetTasks(0) | % {
        $xml = [xml]$_.xml
        $obj = New-Object psobject -Property @{
            "Name" = $_.Name
            "Path" = $_.Path
            "LastRunTime" = $_.LastRunTime
            "NextRunTime" = $_.NextRunTime
            #"WakeToRun" = [bool]::Parse( $xml.Task.Settings.WakeToRun
            #"Enabled" = [bool] $xml.Task.Settings.Enabled
            "Actions" = ($xml.Task.Actions.Exec | % { "$($_.Command) $($_.Arguments)" }) -join "`n"
        }

        if ($xml.Task.Settings.WakeToRun)
        {
            Add-Member -InputObject $obj -Name "WakeToRun" -Value ([bool]::Parse( $xml.Task.Settings.WakeToRun )) -MemberType NoteProperty
        }

        if ($xml.Task.Settings.Enabled)
        {
            Add-Member -InputObject $obj -Name "Enabled" -Value ([bool]::Parse( $xml.Task.Settings.Enabled )) -MemberType NoteProperty
        }

        $out += $obj
    }

    # Get tasks from subfolders
    $schedule.GetFolder($path).GetFolders(0) | % {
        $out += getTasks($_.Path)
    }

    #Output
    $out
}

$tasks = @()

$schedule = New-Object -ComObject "Schedule.Service"
$schedule.Connect() 

# Start inventory
$tasks += getTasks("\")

# Close com
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($schedule) | Out-Null
Remove-Variable schedule

# Output all tasks
$tasks | Where-Object { $_.WakeToRun -and $_.Enabled }
(It appears that these extra properties are sometimes null or don't exist, so I had to add them conditionally)

So, what were the results? There were two:

Actions     :  
Path        : \Microsoft\Windows\TaskScheduler\Manual Maintenance
Name        : Manual Maintenance
LastRunTime : 30/12/1899 12:00:00 AM
NextRunTime : 30/12/1899 12:00:00 AM
WakeToRun   : True
Enabled     : True

Actions     :  
Path        : \Microsoft\Windows\TaskScheduler\Regular Maintenance
Name        : Regular Maintenance
LastRunTime : 17/10/2013 8:16:31 AM
NextRunTime : 18/10/2013 3:00:04 AM
WakeToRun   : True
Enabled     : True

I think we can exclude the first, as it has never run. The second looks interesting as the NextRunTime is pretty close to the time that my laptop resumed. I'll change the WakeToRun setting on this task to see if the problem goes away.

Tuesday, 24 September 2013

Windows 8.1 VPN Settings

In Windows 8 after you had configured a VPN, you could right-click on a VPN connection and a context menu gave you two options:

  • View connection properties
  • Clear cached credentials

Windows 8 VPN context menu

The second item is really useful when your password for the VPN has changed, and you need to enter the new password.

Upgrading to Windows 8.1, this context menu doesn't seem to exist anymore. It seems that to modify connection properties or credentials, the only option is to search for "Change VPN Settings".

Windows 8.1 VPN Settings

Selecting a VPN connection then enables Edit and Remove buttons. Clicking Edit takes you to the Connection Properties screen, where you can update credentials and VPN proxy settings.

Strange that this is a bit harder under 8.1.

Sunday, 15 September 2013

Upgrading to Windows 8.1

With Microsoft making Windows 8.1 available through MSDN, I thought I'd try upgrading an existing Windows 8 instance. The process was very smooth:

  1. I downloaded the appropriate .iso
  2. Opened the .iso file in Windows 8
  3. Ran setup.exe
  4. Entered license key
  5. Chose to keep existing settings and applications
  6. Wait a while and reboot
  7. Wait a while and then log in
  8. All done

The only problem I've noticed is that connecting the Mail and Calendar apps to an Exchange server with a self-signed certificate no longer works. I'd previously figured out a way to work around this for Windows 8, but it no longer works for 8.1.

Monday, 29 July 2013

Code analysis error CA0055 with a project upgraded to .NET Framework 4.5

I have a Visual Studio solution that was upgraded to use .NET Framework 4.5. It was working fine until I started getting the following error(s) running Code Analysis as part of the build:

CA0052 : No targets were selected

CA0055 : Could not load D:\dev\MySolution\MyProject\bin\Release\MyProject.exe. The following error was encountered while reading module 'System.Xml': Could not resolve type reference: [mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]System.Runtime.CompilerServices.IAsyncStateMachine

That seemed odd, as I confirmed that the application did have an assembly reference to System.Xml. I even tried re-adding the reference but that made no difference. The interesting thing is that the type (IAsyncStateMachine) is new in .NET 4.5, even though it is included in mscorlib Version 4.0.0.0. That's because 4.5 is an in-place upgrade.

I did notice that you do get separate copies of the reference assemblies located in C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework. Reflecting on the mscorlib.dll assembly in the v4.0 folder showed it did NOT have IAsyncStateMachine, but the one in the v4.5 folder did. Could that be relevant?

Opening up the .csproj file, I discovered that another assembly reference suspiciously had the following HintPath defined

<Reference Include="System.Web">
  <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.dll</HintPath>
</Reference>

Re-adding this reference, resulted in Visual Studio changing it to just this:

<Reference Include="System.Web" />

And then re-building the solution with Code Analysis enabled was successful.

Monday, 1 July 2013

Aussie Toilets–Featured WP8 store app on 2nd July

In it's 2 and a bit year history, this is the first time I've ever seen Aussie Toilets listed as a featured app in the Windows Phone 8 Store!

Screenshot of Windows Phone 8 Store

It's one of the featured apps for 2nd July 2013. Nice! Smile

Monday, 17 June 2013

Winter 2013

Autumn leavesIt's getting cold in Adelaide – the middle of June, and the leaves are turning yellow and red on some of the trees in our garden. The jonquils are blooming, and the daffodils won't be far behind.

Jonquil flowers


We've got a great crop of mandarins and lemonades. Been enjoying the mandies with lunches and juiced a couple of bucket loads of lemonades already.

MandarinsLemonade fruit

The tangello has a few more fruit this year, and the new lime tree also has a couple already (though it obviously isn't liking the cold as it's lost most of it's leaves. I hope they grow back in spring).

Tangello fruitLime fruit

It's been pretty wet the last few weeks, so there's some interesting mushrooms growing in the garden mulch

Mushrooms growing in mulch

Thursday, 23 May 2013

Lean from the Trenches by Henrik Kniberg

I was introduced to "Lean Thinking" by my friend Jane, who's been involved in applying the "Toyota Production System" principles in a major public hospital setting (not the first place you'd think of finding something that was created by a car manufacturer). After learning about Lean and considering that it seemed to have some overlap with the Agile software development processes that have become more popular in the last 10 years, I then discovered the work of Tom and Mary Poppendieck who had published Lean Software Development: An Agile Toolkit, the first of 3 books on the subject.

Reading their work is still on my 'to do' list, but it was while I was reviewing their recommended reading list that I decided to purchase Kniberg's book.

Lean from the Trenchesis an fascinating case study in applying Lean and Kanban to the development of a software application for the Swedish Police. Kniberg worked as a coach part-time on the project for about 7 months before publishing this book. As I understand it, this was a 'greenfield' application (which might explain how they could do the 30 bug limit).

I found this book very interesting. In particular, the following stood out for me:

  • the regular Process Improvement Workshops – initially a weekly cross-team meeting to look at implementing change quickly
  • the way they used Kanban and the changes made over time to the board to make it work better.
  • Identifying recurrent bugs with root-cause analysis
  • Having limits for work in progress (which doesn't include bugs)
  • Not using story points (though features are estimated with Small/Medium/Large T-shirt sizes)
  • The "Next 10 features"
  • Balancing features and 'tech stories' (technical debt)
  • Limit list of bugs to be fixed at 30!
  • Testers working in development teams
  • Many bugs get fixed immediately if possible
  • Importance of visualisation and communication

I'm most familiar with Scrum, so there was a reasonable amount of familiarity with some of their practises. The focus on the Kanban board was interesting. I do like the fact that it is so visible. Kniberg feels having a physical board is important, though I wonder how that would work if he had to manage distributed teams.

In summary, a great read with some thought-provoking ideas.

Thursday, 2 May 2013

Windows 8 weird errors

I went to fire up Remote Desktop on my home PC on Wednesday and was greeted with this unusual error:

mstsc.exe - Entry Point Not Found

"The procedure entry point  could not be located in the dynamic link library C:\windows\System32\WINMM.dll"

(Yes, there's an extra space between 'point' and 'could' – I think that's where the name of the entry point would normally be displayed). Taking a screenshot was quite tricky as even Paint refused to start, but I managed to get the Snipping Tool to save a .png (despite a few error along the way)

Very odd, as I had used RDP a few days earlier, and most other things still worked fine (launching IE etc).

Using the Windows 8 keyboard shortcut of Win-X and choosing the 'Command Prompt (Admin)' resulted in "File system error (-1073741511)"

This is not looking good. I could use the Refresh option but the downside of that is that you need to reinstall all your non Store apps. So I thought I'd try some of the other options before resorting to this.

First up, I brought up the Advanced Startup Options menu by Choosing 'Restart' and hold down 'Shift' key.

After reading Fixing component store corruption in Windows 8 and Windows Server 2012, I tried running

DISM /Online /Cleanup-Image /RestoreHealth

But that failed with:

Error 0x800f0906 The source files could not be downloaded

This might be because this PC uses a Wireless USB NIC which doesn't get enabled when running in safe mode?

I then mounted the Windows 8 .iso and re-ran DISM with /source:i:\sources\SxS option, but surprisingly that failed too.

Next, I found a network cable, and rebooted to Safe Mode with Networking, and ran DISM again.. but no luck

Then I tried sfc /scannow

This reported corruption that was it unable to repair.

I had a bit more success using the PowerShell cmdlet Repair-WindowsImage -RestoreHealth and using the -Sources argument to point it to the Windows folder on my laptop (I'd shared this folder). That seemed to update some of the SxS files, but didn't fix the actual problem.

Back to the Advanced Startup Options to Choosing System Restore. I selected the restore item, but that failed because there was a problem with it!

Finally, I went back to the Advanced Startup Options and chose the Command Prompt option. This is the one that brings up the command prompt and sets the current directory to X:\Windows\System32. I decided to give SFC one more try, but this time using the offline options. I first ran diskpart and then "list volume", which told me that the boot drive (the one with the name 'System Reserved' was C: and my Windows drive was E:.

I then ran:

SFC /SCANNOW /OFFBOOTDIR=C: /OFFWINDIR=E:\Windows

This ran for about 10 minutes and then reported it had successfully fixed some corrupted files.

For good measure, I then ran a CHKDSK and then re-ran the SFC command. This time it reported not finding any errors.

Rebooting and FINALLY(!) it looks like everything is working ok again.

Now to make a good restore point and ensure I have better backups in place in case this happens again. Not sure what the cause was – I'll have to keep an eye on the hardware incase it's an SSD on the way out.

Wednesday, 24 April 2013

Weather forecasts on our home phone using BoM data

C610 IP handset showing weather forecast

A nice feature of the Gigaset C610 IP phone that we use at home is that you can choose various information services to display on the handset, including during 'screen saver' mode. The default services include the normal news, sport and weather, but as I've noted before, the weather data these services use is invariably quite different to that published by the Australian Bureau of Meteorology (and invariably quite different to what I see out the window).

As it turns out these services are customisable. You can add your own RSS feeds in via a web interface. The BoM doesn't provide such RSS feeds, and the only existing ones I could find were too detailed to be useful on a very small screen.

So I decided to find out what it would take to grab the forecast data from the BoM and massage it into an RSS feed suitable for displaying on a very compact display. I also thought it was a good chance to try out some shiny new things along the way. In particular ASP.NET Web API to produce the RSS feed and Windows Azure Websites to host the service.

The results of my efforts can be viewed at - http://gardiner-weather.azurewebsites.net. It's a very basic landing page for the service which lists what areas of Australia are currently supported (eg. only those states for which the Bureau provides XML data). Did I mention it's very basic? Smile

The feed I'm using for my phone is this one - http://gardiner-weather.azurewebsites.net/api/forecast/SA/Adelaide

Now all we need to do is to glance at the handset and we'll immediately know the latest weather forecast for today and tomorrow!

Configuring your Gigaset C610

  1. Log in to your Gigaset's web page:
    image
  2. Go to the Settings | Info Services section
    image
  3. Click on the www.gigaset.net/myaccount link and go to the Screensaver tab
    image
  4. Select the 'News' row and click on the 'Edit' link. Select 'Favourites' from the dropdown and give your weather feed a name and paste in the URL to the RSS feed.
    image
  5. Click on 'Save' and your settings should soon take effect on your handset.

Monday, 22 April 2013

SSDT Talk Notes

Here's a summary of the talk I did at the Adelaide SQL Server User Group last week. Most of the talk was a demo (only a couple of PowerPoint slides) so hopefully this is a useful reference for those who attended.

Intro to SSDT

  • Evolution of DataDude
  • The new way of shipping BIDS
  • Ships with SQL Server 2012 and Visual Studio 2012
  • Replaces 'Database Projects' from previous versions
  • Updates every 4-6 months (in time for SQL Azure updates)
    • Ships with VS 2012 and with SQL 2012
    • Free tool - use VS shell or integrate with existing
    • Will update frequently to keep up with SQL Azure features

Connected

  • SQL Server Object Explorer
    • Connect to local or Azure
  • Queries
    • Execution Plans
    • Client stats

Disconnected

  • Database projects
  • Model-based
  • Edition-aware targeting (project properties)
    • Can switch to azure to check if database is compatible with azure
  • Table designer/code view
    • Synchronised
    • Demo deleting a column
      • Can see errors (even before building) of related objects (eg. Views) that reference column
  • Build creates a 'dacpac' (Data-tier Application Package)
    • 'Upgrade data-tier application' from SMSS
  • Declarative model
  • 'Create New Project' via SQL Server Object Explorer
  • F5 builds and deploys database to localdb
  • Snapshots
  • Import .sql files
  • Code analysis

Schema Compare

  • Connected, Project, dacpac or snapshot
  • Update changes (defaults to not losing data)

Refactoring

  • Expand wildcards to column names - SELECT *
  • Semantic refactoring through model - not just find/replace
  • Go to Reference, Find all references

Publish database

  • Directly
  • Via SQL script
  • DACPAC
    • C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\sqlpackage.exe

"c:\Program Files (x86)\Microsoft SQL Server\110\dac\bin\SqlPackage.exe" /action:driftreport /tsn:.\sql2012

/outputpath:c:\tmp\driftreport.xml /tdn:SsdtSample

Unit testing

  • Right-click on stored proc to create unit tests

3rd Party Integration and extensions

  • Red Gate SQL Compare (beta)
  • Version control
  • Laan SQL Formatter (soon)

Further reading

Saturday, 20 April 2013

Another Birthday

Two jars of pickles and a Storm Trooper mugI am blessed with a wonderful family and friends. It was my birthday this week, and Narelle cooked a very yummy birthday tea. Pasty slice (see below) followed by baked cheesecake if you were wondering.

My sister surprised me with a present that included jars of Spring Gully pickled onions and sweet spiced gherkin rounds. This is special because not only do I like gherkins (like pickles for American readers) and pickled onions, but the Spring Gully company has been in the news this week as they were placed under administration. I hope they can turn the business around and these jars don't become collectors items.

My friend Andrew also has a creative streak. The Star Wars storm trooper mug was part of his present. To top the night off we had two unexpected guests drop in just in time for the birthday cake, one of whom is on a flying visit from overseas.

On a sad note, I came home the next day from work to discover that one packet of Iced Vo Vo biscuits (also a present) had already been eaten by some little "mice". That's the trouble with having your birthday in the middle of school holidays I guess.

Nanna Jean's Pasty Slice

  • Pastry
  • 1lb mince
  • 1lb potatoes
  • 1 big carrot
  • 2 onions
  • Parsley
  • Grate the vegies

Nanna Jean passed away in 2009, but a few years earlier I'd asked her for the recipe for her pasty slice that I enjoyed so much. The above notes are all that I wrote down. Not very complicated. The pastry ends up like a pie crust, with the filling in the middle. Yum.

Wednesday, 10 April 2013

Speaking on SSDT at Adelaide SQL User Group

TSQL2sDay150x150Today just happens to be T-SQL Tuesday, and this month's question is "how did you come to love presenting?"

The first time I presented in front of a group? hmm that's a tough question. Actually now that I think about it, it might have been the first time I did the kids' story as a young teenager teaching Sunday School. Keeping the attention of 5 year olds is a tough gig, but I must have done ok as that's something I still enjoy doing to this day. Sunday school, youth groups, camps, church conferences – they all gave me opportunities to try out "being up the front".

Moving more to the IT-side of things, getting opportunities to present at local user groups and events has definitely been a highlight. The last couple of years I've also been able to work in and present at the hands-on-labs at Microsoft's TechEd conferences, which is great fun.

One great thing about presenting is that it can be a two-way street. Sometimes you end up learning just as much from those you're presenting to as you hope they did from you.

Speaking of presenting, it's nice to be able to get back to the Adelaide SQL User Group next week and present on SQL Server Data Tools. It's something I've been using a bit lately and thought it would be of interest to others too. I've been involved with this group since it first started years ago, but for the last 12 months or so I've been unable to make the Wednesday timeslot in person due to some family commitments, so I'll be looking forward to catching up with some old friends.

If you're free next Wednesday lunchtime, feel free to register and come along. It would be great to see you!

Monday, 1 April 2013

Nokia Lumia 920

Earlier this year, Microsoft ran a new competition offering the first 10 developers to publish 5 new Windows Phone apps a new Nokia Lumia 920 phone (and Lumia 820 and 620s for 4 or 3 apps respectively). Getting 5 new apps developed and published in a relatively short time wasn't easy, but I figured the only way to have a chance at picking up a new phone was to have a go.

I was pleasantly surprised to find that I'd just managed to scrape through picking up a shiny new Lumia 920 handset, after initially thinking I'd missed the top 10.

The new phone arrived last Thursday – just in time for me to spend a bit of time over the Easter long weekend to get to know it a bit better (and for the kids to test out it's game-playing functionality!)

DSC_6976The phone came in a 'Developer' box. I think this is the same kind that the BUILD conference attendees would have received.


Text inside boxThere's a nice bit of developer-humour inside the box too.


DSC_6981 Just in case there's any doubt, the handset has 'Developer device' and 'Not for Sale' printed under the glass just below the buttons. This means it's also not tied to a particular network provider, which is handy.

Nokia Lumia 800 and Lumia 920Here's a side-by-side of my Lumia 800 next to the Lumia 920. You can see how much larger the 920 is.

Initial thoughts

The screen is nice and large with bright vibrant colours. Reminds me of my old Omnia 7's AMOLED display a bit, though according to the specs is not only a larger screen, it also has a higher DPI.

The case finish is quite slick. In fact maybe a little too so. The 800 came with a rubber/plastic shell that not only helped protect the phone, but also made it a bit 'grippier'. I think I might investigate getting something similar for the 920.

The 920 is a true quad-band phone, supporting 850, 900, 1900, 2100 MHz 3G frequencies. My unbranded Lumia 800 doesn't support 850, though Narelle's 800 (being Vodafone-branded) does. As a bonus, the 920 also supports LTE which will be handy when Vodafone rolls that out soon.

Ben had mentioned he's experienced some reliability issues with his 920, and unfortunately I'm seeing similar problems already. I've seen my 920 spontaneously restart while I was using it once, and seen evidence of it restarting a couple of other times already. That's not so encouraging and gives me cause to question whether to completely retire the 800 and use the 920.

Google is being a bit annoying with Microsoft at the moment – turning off Exchange ActiveSync access to GMail & Calendars in a few months. Interesting to see if the trick of browsing to https://m.google.com/sync/settings/iconfig/welcome?source=mobileproducts&hl=en (with a UserAgent set to iPhone) still works. It is making me seriously consider moving my email over to Outlook.com instead.

Battery life seems ok, but I have noticed that a serious bout of gaming by the kids takes it toll. One comment from our resident gamer was disappointment that his saved games weren't

I do like the Kid's Corner feature – you can set up some games and apps that kids can play (and nothing else).

The Wallet is also a good idea. I've enabled a separate PIN to ensure no one accidentally buys new games or apps on my phone.

Tuesday, 19 March 2013

Loaded Projects–A Visual Studio extension

Forklift imageI've just published Loaded Projects to the Visual Studio Gallery.

The inspiration for this extension was having to deal with solutions that contained a lot of projects (from 50 to 150 and beyond). Often you know that many of the projects aren't relevant to the particular feature or bug that you're working on and unloading those projects can give you a big performance win. Visual Studio will be more responsive and the time to build and debug will be shortened.

The problem comes when you need to move to a different area of the solution. You now need to reload some of the previously unloaded projects, but also unload some others that are now no longer significant. Wouldn't it be great if you could save a record of all the unloaded projects so that you could reuse it again later?

Enter Loaded Projects!

Click on the 'Loaded Projects' item in the context menu after right-clicking on a solution.

Solution context menu

A dialog window appears, from which you can save the current set of loaded/unloaded projects as a new profile,

Add new profile

select an existing profile and load that, or choose to delete a profile you no longer need.

Select profile

If you like the extension, please write up a review on the gallery page.

I've put the source code up on GitHub, so make use of the Issues page to submit any bugs or feature requests, and of course pull requests are always welcome.

The extension initially just supports Visual Studio 2012. If there is enough interest then it should be pretty straight-forward to back-port it to to 2010 too.

Thursday, 31 January 2013

Windows 8 Media Center (there and back again)

Our Media Center PC has been running reasonably well since I built it way back in July 2008. Wow – almost 5 years old – actually that probably explains the state of the remote control (currently being held together with duct tape!)

Anyway after successfully upgrading my laptop and reprovisioned desktop (formerly the Hyper-V/Homeserver) to Windows 8 I decided I'd update the Media Center as well.

Upgrading was relatively painless in itself. I took a backup of the Windows 7 install (just in case) and then did a fresh install of Windows 8 x64 and then activated my free Media Centre license. I'd previously been running 32 bit Windows 7, but didn't anticipate any problems.

One interesting side-effect of using the 'English (British)' install of Windows 8 was that some of the terminology in Media Centre was slightly different. What was called "original air date" was now "original date broadcast"

win 8 mce recorded tv

And predictably, "Program Details" became "Programme Details" (though because that was now wider than the pop-up menu, the text would scroll side-to-side so you could read all of it!)

win 8 mce guide settings

So that was all well and good, but there were a few things that didn't work so well.

Presumably because of the new Windows 8 start screen, there is no longer a setting to make Media Center start at Windows Startup (kind of handy for a dedicated Media Center PC). The workaround for that was to create a batch file that is run via a scheduled task triggered at login (a bit of a hack).

The other problem that became quickly apparent was that despite Windows 8 generally having a better reputation for performance than Windows 7, in this instance it seemed that there were some specific problems. Audio for live TV was consistently getting out of sync with the video. I suspected that the hardware may be struggling to keep up with pushing the data around. Only 2GB of ram and using the original on-board video adapter might be an issue.

I thought I'd try replacing one thing at a time, so swapped in a newer video card (borrowed from the desktop box). This seemed to solve the audio sync problem, so I went and purchased a separate card – an nVidia GeForce 630 card. Installing this was straight-forward, but then revealed a new problem. For some reason the video output from the nVidia card was too wide for our TV. Despite using HDMI and setting the screen to 1920x1080 (the same resolution as the onboard ATI video card was using), I couldn't get it to shrink. Unfortunately our TV didn't have any controls to change the size of the picture either.

The next problem became evident later on. Almost every day the first time the Media Center PC was turned on I was greeted with a "This computer has unexpectedly restarted" message. Searching the event log revealed a consistent errors such as:

  • The computer has rebooted from a bugcheck.  The bugcheck was: 0x0000009f (0x0000000000000003, 0xfffffa8001cc2880, 0xfffff80007108b30, 0xfffffa8007050360). A dump was saved in: C:\Windows\MEMORY.DMP. Report Id: 012813-315480-01.
  • Windows failed to resume from hibernate with error status 0xC0000001
  • The system firmware has changed the processor's memory type range registers (MTRRs) across a sleep state transition (S4). This can result in reduced resume performance.

Initially the errors related to 'Sleep' so I switched over to using Hibernate but as you can see that didn't improve things.

After enduring two weeks of this I decided enough was enough. After doing another backup (so that I could give Windows 8 another try when some of these issues might have been resolved), I dropped in the Windows 7 Recovery CD and restored back to Windows 7 (taking out the nVidia card at the same time).

So while Windows 8 has been great for the other computers in the house, I think we'll stick with Windows 7 Media Center for now.

Friday, 25 January 2013

Tour Down Under 2013

For the past few years I've always taken part in the community challenge ride which is part of the Tour Down Under. Sadly it wasn't to be this year. A couple of weeks ago I was out with the Mud, Sweat and Gears guys on a training ride and somehow managed to injure my back on the final ride home.

While not as bad as when I quite badly hurt it a few years ago, it still has meant time off work and a fair bit of lying down to give it a chance to improve.

It was great weather for riding today. I'm disappointed I missed out (not to mention the Tanunda bakery too), but hopefully I'll be in a healthier state for next year's ride.