Update to Where’s My Graphic Equalizer in Windows Media Player – now covers Windows 8

Have you wondered where the graphics equaliser in the Windows 8 version of Windows Media Player has moved?  It’s certainly not on the menu option you’d think it is …. well, I’ve updated my Windows 7 post to include Windows 8, it’s over here http://geekswithblogs.net/twickers/archive/2009/10/23/135680.aspx.

Chester Devs Presentation and source code – ‘Event Store - an introduction to a DSD for event sourcing and notifications’

Thank you everyone at Chester Devs

Thanks to Fran Hoey and all the people from Chester Devs. It was a hard drive up and back but the enthusiasm of the audience, with some great questions does make it worthwhile.

Presentation and source code

My presentation, source code, Event Store runners and text files containing the various command line parameters used for curl is now available on GitHub; https://github.com/westleyl/ChesterDevs-EventStore.

Don’t worry if you don’t have a GitHub account, you don’t need one, you can just click on the Download Zip button on the right hand menu to download all the files as a single ZIP file.  If all you want is the PowerPoint presentation, go to https://github.com/westleyl/ChesterDevs-EventStore/blob/master/Powerpoint/Huddle-EventStore.pptx, and click on the View Raw button.

Downloading and installing Event Store and Tools

Download Event Store http://download.geteventstore.com – I unzipped these files into C:\EventStore\v2.0.1

Download Curl from http://curl.haxx.se/download.html – I downloaded Win64 Generic (with SSL) and unzipped these files into C:\curl version 7.31.0

Running the tools I used in my presentation

Demonstration 1 (running Event Store)

You can use one of my Event Store runner command files to run the single node version of Event Store, using default ports of 2213 for HTTP and 1113  for TCP, and with a wildcard HTTP pattern.  Both take a single command line parameter to specify the location of the data and log files.  The runners assume the single node executable is located in C:\EventStore\v2.0.1, and will placed data files and logs beneath C:\EventStore\Data, i.e.

RunEventStore.cmd TestData1

This will create data files in C:\EventStore\Data\TestData1\Data and log files in C:\EventStore\Data\TestData1\logs.

If, when running Event Store you may see the following message,

[03288,15,06:23:00.622] Failed to start http server
Access is denied

You will either need to run Event Store in an administrator console window, or you can use the netsh command to create a firewall permission to allow HTTP listening (this will need to be run, once, in an administrator console window),

netsh http add urlacl url=http://*:2213/ user=liam

You can always delete this later by running the delete; netsh http delete urlacl url=http://*:2213/

If you want to confirm that everything is running OK, open the management console in a browser by navigating to http://127.0.0.1:2213. If at any point you are asked for a user name and password use the default of ‘admin’/‘changeit’.

Demonstration 2 (reading and adding data, curl)

In my second demonstration I used curl directly from the console to read streams, write events and then read back those events. On GitHub I have included is a set of curl commands, CurlCommandLine.txt, and a sample data file, SampleData.json, to load an event into a DDDNorth3 stream.

As there is not much data in the Event Store at this point I used the $stats-127.0.0.1:2113 which is a stream containing performance statistics for Event Store and is updated every 30 seconds (default).

Demonstration 3 (projections)

On GitHub I have included a sample projection, Projection-ByRoom.txt, which will create streams based on the room on which a session was held on the DDDNorth3 agenda.

Browse to the management console, http://127.0.0.1:2213.  Click on Projections, New Projection, give it a name, Sessions-ByRoom, and copy in the JavaScript in the Projection-ByRoom.txt file.  Select Continuous, tick Emit Enabled and then click on Post. It should run immediately.

You may by challenged for the administration login for the management console, if so use the default user name and password; 'admin'/'changeit'.

Demonstration 4 (C# client)

The final demonstration was the Visual Studio 2012 project using the Event Store client – referenced directly as C:\EventStore\v2.0.1\EventStore.ClientAPI.dll, although you can switch this to the latest Event Store client NuGet package.

The source code provides a console app for viewing projections with the projection manager (HTTP connection), as well as containing a full set of data for the entire DDDNorth3 agenda.  It also deals with the strategy for reading newest events backwards to older events and ignoring older events that have been superseded.

Resources

Event Store home page: http://www.geteventstore.com/

Event Store source code on GitHub: https://github.com/eventstore/eventstore

Event Store documentation on GitHub: https://github.com/eventstore/eventstore/wiki (includes index to @RobAshton’s blog series on Event Store at https://github.com/eventstore/eventstore/wiki#rob-ashton---projections-series)

Event Store forum in Google Groups: https://groups.google.com/forum/?fromgroups#!forum/event-store

TopShelf Windows service wrapper is available on github: https://gist.github.com/trbngr/5083266

Upgrading Windows 8 boot to VHD to Windows 8.1–Step by step guide

UPDATE : I believe (I have not tested this scenario yet) you can use your existing Windows 8 partition to create a recovery USB drive that can be used to do the repair without the ISO, see http://howto.cnet.com/8301-11310_39-57601638-285/how-to-create-a-windows-8-usb-recovery-drive/, and here is how to mount that USB as a drive for Hyper-V to see, http://www.petri.co.il/boot-hyper-v-virtual-machine-usb-drive.htm#

Boot to VHD – dual booting Windows 7 and Windows 8 became easy

When Windows 8 arrived, quite a few people decided that they would still dual boot their machines, and instead of mucking about with resizing disk partitions to free up space for Windows 8 they decided to use the boot from VHD feature to create a huge hard disc image into which Windows 8 could be installed.  Scott Hanselman wrote this installation guide, while I myself used the installation guide from Ed Bott of ZD net fame.

Boot to VHD is a great solution, it achieves a dual boot, can be backed up easily and had virtually no effect on the original Windows 7 partition. As a developer who has dual booted Windows operating systems for years, hacking boot.ini files, the boot to VHD was a much easier solution.

Upgrade to Windows 8.1 – ah, you can’t do that on a virtual disk installation (boot to VHD)

Last week the final version of Windows 8.1 arrived, and I went into the Windows Store to upgrade.  Luckily I’m on a fast download service, and use an SSD, because once the upgrade was downloaded and prepared Windows informed that This PC can’t run Windows 8.1, and provided the reason, You can’t install Windows on a virtual drive.  You can see an image of the message and discussion that sparked my search for a solution in this Microsoft Technet forum post.

I was determined not to have to resize partitions yet again and fiddle with VHD to disk utilities and back again, and in the end I did succeed in upgrading to a Windows 8.1 boot to VHD partition.  It takes quite a bit of effort though …

tldr; Simple steps of how you upgrade

  • Boot into Windows 7 – make a copy of your Windows 8 VHD, to become Windows 8.1
  • Enable Hyper-V in your Windows 8 (the original boot to VHD partition)
  • Create a new virtual machine, attaching the copy of your Windows 8 VHD
  • Start the virtual machine, upgrade it via the Windows Store to Windows 8.1
  • Shutdown the virtual machine
  • Boot into Windows 7 – use the bcedit tool to create a new Windows 8.1 boot to VHD option (pointing at the copy)
  • Boot into the new Windows 8.1 option
  • Reactivate Windows 8.1 (it will have become deactivated by running under Hyper-V)
  • Remove the original Windows 8 VHD, and in Windows 7 use bcedit to remove it from the boot menu

Things you’ll need

  • A system that can run Hyper-V under Windows 8 (Intel i5, i7 class CPU)
  • Enough space to have your original Windows 8 boot to VHD and a copy at the same time
  • An ISO or DVD for Windows 8 to create a bootable Windows 8 partition

Step by step guide

  1. Boot to your base o/s, the real one, Windows 7.
  2. Make a copy of the Windows 8 VHD file that you use to boot Windows 8 (via boot from VHD) – I copied it from a folder on C: called VHD-Win8 to VHD-Win8.1 on my N: drive.
  3. Reboot your system into Windows 8, and enable Hyper-V if not already present (this may require reboot)
  4. Use the Hyper-V manager , create a new Hyper-V machine, using half your system memory, and use the option to attach an existing VHD on the main IDE controller – this will be the new copy you made in Step 2.
  5. Start the virtual machine, use Connect to view it, and you’ll probably discover it cannot boot as there is no boot record
  6. If this is the case, go to Hyper-V manager, edit the Settings for the virtual machine to attach an ISO of a Windows 8 DVD to the second IDE controller.
  7. Start the virtual machine, use Connect to view it, and it should now attempt a fresh installation of Windows 8.  You should select Advanced Options and choose Repair - this will make VHD bootable
  8. When the setup reboots your virtual machine, turn off the virtual machine, and remove the ISO of the Windows 8 DVD from the virtual machine settings.
  9. Start virtual machine, use Connect to view it.  You will see the devices to be re-discovered (including your quad CPU becoming single CPU).  Eventually you should see the Windows Login screen.
  10. You may notice that your desktop background (Win+D) will have turned black as your Windows installation has become deactivate due to the hardware changes between your real PC and Hyper-V.
  11. Fortunately becoming deactivated, does not stop you using the Windows Store, where you can select the update to Windows 8.1.
  12. You can now watch the progress joy of the Windows 8 update;
    1. downloading,
    2. preparing to update,
    3. checking compatibility,
    4. gathering info,
    5. preparing to restart, and finally,
    6. confirm restart - remember that you are restarting your virtual machine sitting on the copy of the VHD, not the Windows 8 boot to VHD you are currently using to run Hyper-V (confused yet?)
  13. After the reboot you get the real upgrade messages;
    1. setting up x%, xx%, (quite slow)
    2. After a while, Getting ready
    3. Applying PC Settings x%, xx% (really slow)
    4. Updating your system (fast)
    5. Setting up a few more things x%, (quite slow)
    6. Getting ready, again
    7. Accept license terms
    8. Express settings
    9. Confirmed previous password
    10. Next, I had to set up a Microsoft account – which is possibly now required, and not optional
    11. Using the Microsoft account required a 2 factor authorization, via text message, a 7 digit code for me
    12. Finalising settings
    13. Blank screen, HI .. We're setting up things for you (similar to original Windows 8 install)
    14. 'You can get new apps from the Store', below which is ’Installing your apps’ - I had Windows Media Center which is counts as an app from the Store
    15. ‘Taking care of a few things’, below which is ‘Installing your apps’
    16. ‘Taking care of a few things’, below ‘Don't turn off your PC’
    17. ‘Getting your apps ready’, below ‘Don't turn off your PC’
    18. ‘Almost ready’, below ‘Don't turn off your PC’
  14. … finally, we get the Windows 8.1 start menu, and a quick Win+D to check the desktop confirmed all the application icons I expected, pinned items on the taskbar, and one app moaning about a missing drive
  15. At this point the upgrade is complete – you can shutdown the virtual machine
  16. Reboot from the original Windows 8 and return to Windows 7 to configure booting to the Windows 8.1 copy of the VHD
  17. In an administrator command prompt do following use the bcdedit tool (from an MSDN blog about configuring VHD to boot in Windows 7)
    1. Type bcedit to list the current boot options, so you can copy the GUID (complete with brackets/braces) for the original Windows 8 boot to VHD
    2. Create a new menu option, copy of the Windows 8 option; bcdedit /copy {originalguid} /d "Windows 8.1"
    3. Point the new Windows 8.1 option to the copy of the VHD; bcdedit /set {newguid} device vhd=[D:]\Image.vhd
    4. Point the new Windows 8.1 option to the copy of the VHD; bcdedit /set {newguid} osdevice vhd=[D:]\Image.vhd
    5. Set autodetection of the HAL (may already be set); bcdedit /set {newguid} detecthal on
  18. Reboot from Windows 7 and select the new option 'Windows 8.1' on the boot menu, and you’ll have some messages to look at, as your hardware is redetected (as you are back from 1 CPU to 4 CPUs)
    1. ‘Getting devices ready, blank then %xx, with occasional blank screen, for the graphics driver, (fast-ish)
    2. Getting Ready message (fast)
  19. You will have to suffer one final reboots, choose 'Windows 8.1' and you can now login to a lovely Windows 8.1 start screen running on non virtualized hardware via boot to VHD
  20. After checking everything is running fine, you can now choose to Activate Windows, which for me was a toll free phone call to the automated system where you type in lots of numbers to be given a whole bunch of new activation codes.

Once you’re happy with your new Windows 8.1 boot to VHD, and no longer need the Windows 8 boot to VHD, feel free to delete the old one.  I do believe once you upgrade, you are no longer licensed to use it anyway.

There, that was simple wasn’t it?

Looking at the huge list of steps it took to perform this upgrade, you may wonder whether I think this is worth it.  Well, I think it is worth booting to VHD.  It makes backups a snap (go to Windows 7, copy the VHD, you backed up the o/s) and helps with disk management – want to move the o/s, you can move the VHD and repoint the boot menu to the new location.

The downside is that Microsoft has complete neglected to support boot to VHD as an upgradable option.  Quite a poor decision in my opinion, and if you read twitter and the forums quite a few people agree with that view.  It’s a shame this got missed in the work on creating the upgrade packages for Windows 8.1.

DDD North 3 Presentation and source code – ‘Event Store - an introduction to a DSD for event sourcing and notifications’

Thank you everyone at DDD North

Thanks to all the people who helped organise the cracking conference that is DDD North 3, returning to Sunderland, and the great facilities at the University of Sunderland, and the fine drinks reception at Sunderland Software City.  The whole event wouldn’t be possible without the sponsors who ensured over 400 people were kept fed and watered so they could enjoy the impressive range of sessions.

And lastly, a thank you to all those delegates who gave up their free time on a Saturday to spend a day dashing between lecture rooms, including a late change to my room which saw 40 people having to brave a journey between buildings in the fine drizzle. The enthusiasm from the delegates always helps recharge my geek batteries.

Presentation and source code

My presentation, source code, Event Store runners and text files containing the various command line parameters used for curl is now available on GitHub; https://github.com/westleyl/DDDNorth3-EventStore.

Don’t worry if you don’t have a GitHub account, you don’t need one, you can just click on the Download Zip button on the right hand menu to download all the files as a single ZIP file.  If all you want is the PowerPoint presentation, go to https://github.com/westleyl/DDDNorth3-EventStore/blob/master/Powerpoint/DDDNorth-EventStore.pptx, and click on the View Raw button.

Downloading and installing Event Store and Tools

Download Event Store http://download.geteventstore.com – I unzipped these files into C:\EventStore\v2.0.1

Download Curl from http://curl.haxx.se/download.html – I downloaded Win64 Generic (with SSL) and unzipped these files into C:\curl version 7.31.0

Running the tools I used in my presentation

Demonstration 1 (running Event Store)

You can use one of my Event Store runner command files to run the single node version of Event Store, using default ports of 2213 for HTTP and 1113  for TCP, and with a wildcard HTTP pattern.  Both take a single command line parameter to specify the location of the data and log files.  The runners assume the single node executable is located in C:\EventStore\v2.0.1, and will placed data files and logs beneath C:\EventStore\Data, i.e.

RunEventStore.cmd TestData1

This will create data files in C:\EventStore\Data\TestData1\Data and log files in C:\EventStore\Data\TestData1\logs.

If, when running Event Store you may see the following message,

[03288,15,06:23:00.622] Failed to start http server
Access is denied

You will either need to run Event Store in an administrator console window, or you can use the netsh command to create a firewall permission to allow HTTP listening (this will need to be run, once, in an administrator console window),

netsh http add urlacl url=http://*:2213/ user=liam

You can always delete this later by running the delete; netsh http delete urlacl url=http://*:2213/

If you want to confirm that everything is running OK, open the management console in a browser by navigating to http://127.0.0.1:2213. If at any point you are asked for a user name and password use the default of ‘admin’/‘changeit’.

 

Demonstration 2 (reading and adding data, curl)

In my second demonstration I used curl directly from the console to read streams, write events and then read back those events. On GitHub I have included is a set of curl commands, CurlCommandLine.txt, and a sample data file, SampleData.json, to load an event into a DDDNorth3 stream.

As there is not much data in the Event Store at this point I used the $stats-127.0.0.1:2113 which is a stream containing performance statistics for Event Store and is updated every 30 seconds (default).

Demonstration 3 (projections)

On GitHub I have included a sample projection, Projection-ByRoom.txt, which will create streams based on the room on which a session was held on the DDDNorth3 agenda.

Browse to the management console, http://127.0.0.1:2213.  Click on Projections, New Projection, give it a name, Sessions-ByRoom, and copy in the JavaScript in the Projection-ByRoom.txt file.  Select Continuous, tick Emit Enabled and then click on Post. It should run immediately.

You may by challenged for the administration login for the management console, if so use the default user name and password; 'admin'/'changeit'.

 

Demonstration 4 (C# client)

The final demonstration was the Visual Studio 2012 project using the Event Store client – referenced directly as C:\EventStore\v2.0.1\EventStore.ClientAPI.dll, although you can switch this to the latest Event Store client NuGet package.

The source code provides a console app for viewing projections with the projection manager (HTTP connection), as well as containing a full set of data for the entire DDDNorth3 agenda.  It also deals with the strategy for reading newest events backwards to older events and ignoring older events that have been superseded.

Resources

Event Store home page: http://www.geteventstore.com/

Event Store source code on GitHub: https://github.com/eventstore/eventstore

Event Store documentation on GitHub: https://github.com/eventstore/eventstore/wiki (includes index to @RobAshton’s blog series on Event Store at https://github.com/eventstore/eventstore/wiki#rob-ashton---projections-series)

Event Store forum in Google Groups: https://groups.google.com/forum/?fromgroups#!forum/event-store

TopShelf Windows service wrapper is available on github: https://gist.github.com/trbngr/5083266

DDD East Anglia Cambridge, 29th June 2013 – a review

Cambridge

This one day conference was held on Saturday, 29th June, in The Hauser Forum on the Cambridge Science Park, to the west of the city. It was a fantastic venue, with three seminar rooms, a spacious atrium for enjoying lunch and coffee breaks, and a balcony in the sunshine overlooking some ponds and farmer's fields.  

Cambridge was very easy for me to get to from London, and is a rather attractive city, with the only downside being the clash with graduation weekend which meant the hotel rooms were a little more expensive than normal.

The agenda for the day was spread over three rooms, with five one hour session slots as well as lunchtime grok (lightning) talks. All the sessions were submitted in April, voted for in May in time for speakers to write their sessions for the end of June.

Async in C# 5.0

My presentation, and only first because this is in chronological order, was given on real world patterns and practices for using the new async/await features in C# 5.0.  With about 15 minutes of slides and 45 minutes of real world coding for handling multiple tasks, it is very much a practical take of the new language features.  You can download the presentation from geekswithblogs.net/twickers.

The delegates appeared to enjoy the whistle-stop tour, and during the day several came up to me for a chat about the finer detail.  This is the great thing about the one day conference format, with lunch and coffee breaks, and speakers mingling around - you can spot the speakers and organizers as we were all wearing green DDD East Anglia t-shirts.

Continuous Delivery at 7digital - an Experience Report

The second session of the day, I went to see Chris O'Dell give her first DDD presentation, which was an explanation of how 7Digital changed their processes to progress towards Continuous Delivery of their software. A reasonable chunk of the session was devoted to a lively Q&A with the delegates, and a great sharing of experiences.

Using HTML5 to Build Desktop Software

Just before lunch (always a tough slot) I enjoyed Kevin Boyle talking about developing HTML5 apps for desktop software, which concentrated on the Chrome Embedded Framework, or CEF, which now powers such desktop applications as Spotify and DropBox.  Combined with a CEFSharp library it was easy to expose C# objects directly into the HTML page being hosted within the desktop application. 

It provided a very good 101 on CEF, and if CEF can provide cross platform support so we can build simple desktop apps across Windows and OS/X with a single UI I'd be very happy indeed.

Lunchtime grok talks

At lunch we had talks from Dave Sussman on IT volunteering in schools, Dan Maharry on writing tech books (or rather why you might not want to), and Richard Dutton on developing software at the Infiniti Red Bull Racing F1 team. 

Building Startups and Minimum Viable Products using Lean Startup techniques

In the afternoon I only made one session, Ben Hall, who talked about his role helping investigate the viability of start ups as part of the team at cornershop.io. His past experience of creating his own start ups also helped focus the discussion on the very real issues of identifying markets, pragmatic development of prototypes and fast failure of projects which aren't viable.

I enjoy the experience sessions almost more than the technical discussions of framework or new technology as the content tends to be less frequent on blogs and web sites, and much hard to discover.  

Social events

The other aspect of any DDD conference is the social events that accompany the daytime activities.  The evening before found us in the Cambridge Blue pub near the hotel enjoying their real ale and cider festival.  The post conference beers were at the Maypole pub, followed by a geek dinner in one of the plushest Pizza Express restaurants I've ever visited,

Thanks to the DDD East Anglia team

So many thanks to the whole of the DDD East Anglia team; Phil Pursglove, Adrian Banks, Alastair Smith, Ian Johnson and Simon Stevens who ensured a smooth and slick day while still keeping it an intimate and personal event.  It's how it should be done.

Also thanks to the sponsors of the event as without their support the event couldn't be held as a free conference.

And finally, thanks to all the delegates who gave up a sunny Saturday to head to Cambridge for the day, and who packed the rooms out every session and kept the speakers on their toes with some great questions.

If you want to see what you missed, there's a comprehensive photo steam over on the DDD East Anglia Flickr account.


If you’ve never heard of DDD …

A brief history of DeveloperDeveloperDeveloper! (DDD)

The first ever DeveloperDeveloperDeveloper! conference was held in May 2005. The name originated from the famous chant of Steve Ballmer, Microsoft CEO, which he reprised in this infamous clip on YouTube - Steve Ballmer goes over the top.

Although held at the Microsoft UK HQ in Reading, it was not an official Microsoft event.  It was always envisaged as a conference organised by the community, and with no Microsoft speakers, partially to avoid any conflict of interest with being held in Microsoft buildings.  You can still read the original blogs from Phil Winstanley, Craig Murphy and Ian Cooper announcing details of first ever DDD.

Unlike the historic blog entries from 2005, the website for DDD conferences DeveloperDeveloperDeveloper!, was overhauled around four years ago, so only lists events from 2010 onwards. From the first event at Reading, the concept of a DDD one day conference has spread across the UK, into Eire and even exported to Australia, but the principals remain the same;

* one day
* non work day
* free
* organised by the community for the community
* sessions voted in by the community
* ... and free

What has DDD meant to me?

I started this blog as a direct result of the very first DDD, and I also started speaking regularly at both conferences and user groups.  Combined with being a regular at the London .NET user group, the DDD days provided a fantastic opportunity to obtain an overview of a wide variety of topics in a very short time.  As a solo consultant who wasn't part of a big, or even small team, it also provided a great opportunity to socialise with fellow developers and find out what was getting them excited.

I've been lucky enough to be invited to give presentations or lunchtime grok talks at several of the original DDD events in Reading, as well as DDD Scotland, DDD SouthWest, DDD Dublin, DDD North and now DDD East Anglia.

Ultimately it also led to my being awarded a Microsoft Most Valued Professional (MVP) award, initially for virtualisation, before moving to C#.  Without the encouragement of the DDD organisers and the platform to speak to fellow developers I doubt this would have happened.

DDD East Anglia, 29th June 2013 - Async Patterns presentation and source code

Many thanks to the team in Cambridge for an awesome first conference DDD East Anglia.  I definitely appreciate how each of the different areas have their own distinctive atmosphere and feel.  Thanks to some great sponsors we enjoyed a great venue and some excellent nibbles.

For those who attended my Async my source code and presentation are available on GitHub,

https://github.com/westleyl/DDDEastAnglia2013-Async.git

If you are new to Git then the easiest client to install is GitHub for Windows, a graphical UI for accessing GitHub. Personally, I also have Git Extensions and Tortoise Git installed. Tortoise Git is the file explorer add-in that works in a familiar manner to TortoiseSVN.

As I mentioned during the presentation I have not included the sample data, the music files, in the source code placed on GitHub but I have included instructions on how to download them from http://silents.bandcamp.comand place them in the correct folders.

Also, Windows Media Player, by default, does not play Ogg Vorbis and Flac music files, however you can download the codec installer for these, for free, from http://xiph.org/dshow.

I have included the .Net 4.0 version of the source code that uses the Microsoft.Bcl.Async NuGet package - once you have got the project from GitHub you will need to install this NuGet package for the code to compile.

  • Load Project into Visual Studio 2012
  • Access the NuGet package manager (Tools -> Library Package Manager -> Manage NuGet Packages For Solution)
  • Highlight Online and then Search Online for microsoft.bcl.async
  • Click on Install button

Resources : You can download the Task-based Asynchronous Pattern white paper by Stephen Toub, which was the inspiration for this presentation from here - http://www.microsoft.com/en-us/download/details.aspx?id=19957

Presentation : If you just want the presentation and don’t want to bother with a GitHub login you can download the PowerPoint presentation from here.

DDDNorth2 Bradford, 13th October 2012 - Async Patterns presentation and source code

Many thanks to Andy Westgarth and his team for organising a fantastic conference at the rather elegant Bradford University School of Management. Also, a big congratulations to all the delegates who gave up there free time to come and hear us speak and who were, in general, enthusiastic and asked some cracking questions to keep us speakers on our toes.

For those who attended my Async my source code and presentation are now available on GitHub,

https://github.com/westleyl/DDDNorth2-AsyncPatterns

If you are new to Git then the easiest client to install is GitHub for Windows, a graphical UI for accessing GitHub. Personally, I also have TortoiseGit installed – the file explorer add-in that works in a familiar manner to TortoiseSVN.

As I mentioned during the presentation I have not included the sample data, the music files, in the source code placed on GitHub but I have included instructions on how to download them from http://silents.bandcamp.com and place them in the correct folders.

What I forgot to mention is that Windows Media Player by default does not play Ogg Vorbis and Flac music files, however you can download the codec installer for these, for free, from http://xiph.org/dshow.

I am planning to break down this little project into a series of blog posts, with each pattern being a single blog post over several weeks. In these I will flesh out the background behind the pattern, the basic goal being achieved and how to monitor the progress of the sample data being processed. Basically, what I said during the presentation and is missing from the slides.

UPDATE 16 October 2012 : For those who don’t want to create a GitHub account, I’ve also uploaded the entire source code tree and presentation as a ZIP file that you can download here, DDDNorth2-AsyncPatterns.zip.

Resources : You can download the Task-based Asynchronous Pattern white paper by Stephen Toub, which was the inspiration for this presentation from here - http://www.microsoft.com/en-us/download/details.aspx?id=19957

DDDSouthWest 4.0 26th May 2012 - Async 20/20 presentation

As I wasn’t voted in with my nominated sessions I presented a 20/20 talk on the new async functionality coming with the .Net Framework.  This was based on the PechaKucha presentation format, where you have only 20 slides with only 20 seconds per slide, and it progresses automatically.

It was the first I’d attempted, so thanks to the organisers for allowing me to have a go. Although creating the slide deck was definitely easier than a one hour presentation, it was much more stressful giving the talk by the end of the 6m 40s.

I’m not going to upload the slide deck (it won’t make much sense) but I did record the audio and used the excellent Camtasia to create a video of the slide deck with that audio which you can watch over here,

https://vimeo.com/42957952

MSDN Magazine on your Kindle

Here in the UK we recently had a long weekend due to a public holiday. So what better time to sit back in a comfy chair with the laptop and read the latest MSDN Magazine online? Unless you have children, of course, keeping them trapped in the house for three whole days would be a nightmare. So that means heading out and about on buses, trains and heading off to the Isleworth Spring Fayre.

Now you can read the MSDN Magazine web site on a smartphone but on a 9cm screen it’s not ideal, and I don’t really want to drag a notebook (even a netbook) with me on my travels. So wouldn’t it be great if I there was a Kindle edition of the MSDN magazine?

Here in the UK we never received the print version of MSDN Magazine even as an MSDN Enterprise/Universal subscriber, so we relied on the compiled help file (CHM) version for offline reading. Recently this changed to PDF, which works on a Kindle, but isn’t the ideal format for the small screen and the PDF does take quite a while to appear on the MSDN site (currently April and May are not available).

Coming the rescue is the the free and open source, eBook tool, Calibre (http://calibre-ebook.com/). I first discovered this application when I wished to download the Economist newspaper to my Kindle. Calibre includes a ‘Fetch News’ ability, which allows scheduled downloading of web site content, with ‘recipes’ that convert those screen scrapes into various formats including MOBI, EPUB or PDF. It even will update your Kindle over USB, loading any new titles into your documents folder.

One of the recipes available is for the MSDN magazine. So the moment a new version appears on the MSDN web site, (http://msdn.microsoft.com/en-us/magazine/default.aspx), you can just fire up Calibre and download the latest version to your Kindle. If you run Calibre on startup you can even schedule the MSDN magazine to be collected every month and automatically downloaded to your Kindle.

 

Web  version


Kindle .mobi version



Why I cancelled my Spotify Premium subscription - the tale of an atypical music consumer

Disclaimer

Firstly, I must come clean, I work for a digital music company which is involved in digital music streaming and downloads.  In no way are the views expressed are the views of the company for which I work.  They are merely the subjective views of an atypical music consumer. 

I say atypical because despite being over 40, I seek out new bands on the radio, using listen again on 6Music and BBC Introducing programmes, such as Christian Carlisle’s excellent BBC Sheffield programme.  I make an effort to go to at least one gig every month, including such gigs as the NME New Radar tour.  Also, if I like a band, I will always try to buy their CDs, especially singles, my favourite format.

My mobile use

In addition, my mobile phone use is also unusual, in that I have a very old fashioned candy bar Windows Mobile 6.1 smartphone, a Benq E72.  This provides my voice and text service, and also contains a 32Gb microSD card holding the 8000+ tracks that is my music collection.  I listen to this using a Sony MW600 Bluetooth headset, the combination of which is incredibly reliable. The E72 is a 2G + WiFi phone with no data plan, just calls and unlimited text messages for £10 per month.

I also own what is now termed a ‘smartphone’, an Orange San Francisco badged ZTE Blade flashed with a custom Android 2.2 ROM.  This contains a mobile broadband SIM from Three, providing a monthly allowance of 5Gb of 3G data for £7.50, which can be used directly or via tethering.

Spotify

Getting hooked

I first began using a the Spotify client at work; the free service including advertising, and enjoyed the ability to tap into a music catalogue that included many tracks which I did not own myself.   I liked the shared playlists, which were sometimes used to create office playlists to which everyone could contribute. 

The only downside, apart from the appalling quality of the advertising segments, was the lack of some of my favourite music.  I’m a big fan of Spacemen 3, nothing there.  Spiritualized, later releases, but not all.  Sugar, no there.  B-sides of older singles, not there.

It did grate that I had these tracks on my phone’s tiny 32Gb microSD card, and on my laptop, but this was a free service, so I don't think it is really fair to complain.

Becoming a premium subscriber

Eventually I decided to take the plunge and become a premium subscriber.  Partly because of where I work and wanting to see a rival music delivery system, but also due to a desire to remove the annoying advertisements and allow me to access the mobile client on my Android phone and download offline content that I didn’t own.

For the first 3 or 4 months, it all seemed fine, I learnt the quirks of the mobile client and accepted that there were a few faults, but it was new, so that was to be expected.  The lack of content could be partly solved by loading some of my own music collection onto a microSD card in the ZTE Blade smartphone.

Immediacy

There was a high point of being a premium Spotify subscriber.   On the top of a 27 bus heading to Koko to an NME New Radar gig last October I spotted a tweet from the Joy Formidable that their new single, The Big More, had been released. I fired up Spotify and started downloading the tracks to listen to for the remainder of the journey.  This even included a live version of Whirring, which was recorded at Koko in March, where I had been part of the audience swept along by the beauty of the introduction played on a harp.

This immediacy was quite intoxicating.  I heard that one of my favourite new bands had released a new single, and downloaded it within minutes.  However, having an offline copy didn’t prevent me buying the original, which as a CD only sold at gigs I couldn't attend, meant paying a premium for a copy sold on eBay.

This is one of my key reasons for using Spotify; listening to a new release, especially albums, and deciding whether it was worth buying the CD. I will always prefer to own the CD, as it provides a high quality archive copy, with decent artwork.  If I consider there are only a few tracks worth having, I relent and buy digital downloads, but always burn them to a CD for archive.

Disillusion

So this all sounds like it worked quite well.  I had music downloaded offline, which I would have otherwise had to pay for, and I could access much more music than was available from my own music collection, on my 32Gb microSD.

However, it never did become my sole music player, and I learnt that the offline files couldn’t replace the permanent access I had enjoyed without the subscription.  The reasons are a complex mix of poor application design, restrictive access and lack of breadth of content outside mainstream music.

Poor user experience

I think the Android application is one of the more nasty pieces of user interface design I have seen for some time.  I realise this is subjective but some really poor design choices and I can only believe lack of any serious rival has prevented these being addressed.  With no real competition Spotify has no incentive to fix these issues.  There are some very obtuse menu options and idiocy such as the redundant ‘Are you sure you want to exit’ dialogs after you click on the Exit menu. An important tenet of  interface design should be Don't make the user feel stupid, which the Android client fails spectacularly;

  1. If you update the Spotify application via the Marketplace, despite claiming that all user data will be preserved, you’ll be shocked when you realise that all your offline content will have been removed. Used up valuable 3G data allowance downloading offline content?  Let’s hope not as you’ll need to re-download it all again.  It can be over emphasised that there is absolutely no warning that this is about to happen.
  2. On the Android client you cannot alter the order of items within the playlist.  I believe this is possble on the iOS application, and I had hoped this would be fixed within a few months, but apparently not.  Clearly I must be meant to edit my playlists using my Windows client, obviously when I’m out and about I couldn’t possibly want to do this. The only visible update I’ve seen in the Android app was the inclusion of a Facebook login option.  Clearly Facebook login is a higher priority than a functioning playlist.  Spotify have processes to update the functionality of their Android client, but only for items they consider worthy of the effort.
  3. If you do add items to a playlist, they are added as the next item to be played.   That makes creating a decent playlist virtually impossible as you have to build it from the end to the beginning, so no linking similar songs together in the order you think of them, and building it while the first tracks are playing.  This is really basic stuff.  I know it is, because it was in my media player on Windows CE (and Windows Phone) TEN years ago.  It’s also something I do a lot, while listening to one song, it jars my emotional memory, and triggers a string of new tracks to add to the playlist.
  4. And don’t get me started on Bluetooth support.  This may be the ZTE Blade to blame, but it is massively not reliable, it stutters through songs, especially tracks not already offline, and don’t alternate between using the Bluetooth and the screen UI controls to change tracks.  It all gets massively out of sync, with incorrect song titles and album art, so you really have no idea what you are playing. And that poor Bluetooth support also means that if you pause the music, and the device enters standby, you have to unlock the phone to restart the music.  On my Benq E72 the keypad may be locked but the pause, prev and next buttons on the Bluetooth headset are still fully functional.

Even the Windows application has real issues.  The auto update functionality means every now and then I start Spotify, see the playlist appear, only for it to vanish without warning, or any message, to reappear a minute or so later, updated, and with no explanation of what might have changed or if content requires to be downloaded again.

Music – here today and gone tomorrow, or never there at all

To some extent I can cope with the lack of some obscure music being on Spotify, and I don’t resent artists such as Adele (and her label, XL Recordings) for refusing to allow her latest album onto the system. If Adele doesn't want to cannibalise CD and digital downloads and doesn't need the exposure Spotify provides to smaller bands, then good on her.

More of an issue is seeing albums you have downloaded offline vanish without warning, as happened with The Burns Unit, ‘Side Show’.  Having got used to listening to this as part of my subscription, with no advance warning, a message appeared one day saying it was being removed as it was no longer available.

As far as I am aware, no CD I have every bought has informed me that the music was no longer available so that I opened the case to find the silver disc strangely absent. 

Value for money

The final nail in the coffin is the value for money.  For me it became obvious that it represented poor value for money.  In the six months I have had a subscription I have never really had more than 10 offline files that I do not own on a physical CD or digital download.

I could have happily downloaded every track for the price of one month’s subscription, and even worse, I could happily buy every album containing those tracks for the price of the six months of subscribing to the premium service.

It is sobering to consider that I pay just under £40 per month for a satellite television subscription with BskyB and £10 of that is for unlimited broadband. So in terms of content, Sky provide 100’s of television channels, repeatedly update the EPG and Sky+ system and put a huge amount of effort into usability of both of these applications.

In comparison, Spotify, for a third of this amount provides a poor user experience, especially on mobile, with much less valuable additional content to my own music collection

Should Spotify be worried?

Here is the reality – I don’t think Spotify should be worried.  I know a much larger number of people who are very satisfied with their subscription.  For them, the issues I have raised don’t really affect them, and Spotify provides a very useful means to instantly access a massive amount of music with the added benefit of social interaction with friends.

Even so I think Spotify shouldn't be complacent.  They need to realise that selling subscriptions does mean that they will have to care more about treating their customers better.  That means all customers, even if they have the temerity to use an Android handset. 

They will also have to deal with artists better, and pay them properly, or more will decide to remove access to their content.

And finally, I think they may need to reconsider removing the reliance on Facebook logins for all new users.  I was an early user so I still have my original Spotify login. I know that if I needed to use Facebook just to access Spotify I would never have used it in the first place.

But then, as I've mentioned, I’m an atypical music consumer.

DDD North, Sunderland - Commercial Software Development slides and link to video

Many thanks to the audience in Sunderland for the great reaction to my talk on Commercial Software Development and getting into the spirit of the presentation. 

It was great to ask an audience if they'd been to meetings in the past week, then ask them to put their hands down if those meetings had agendas, and still see most of the hands stay up. Clearly we all still have work to do on eliminating such an atrocious waste of developer resource.

I've uploaded the Powerpoint as a PDF with speaker notes (2Mb), a low bandwidth version of the slideck (9.5Mb) and a higher bandwidth version with all the animations (17Mb).

  http://www.tigernews.co.uk/blog-twickers/dddnorth/CSD-DDDNorth.pdf

  http://www.tigernews.co.uk/blog-twickers/dddnorth/CSD-DDDNorth-Low.zip

  http://www.tigernews.co.uk/blog-twickers/dddnorth/CSD-DDDNorth-Hi.zip

You can also view a recording of the first time I gave the presentation at DDD8 in Reading on Vimeo,

  http://vimeo.com/9216563

And I have to say many thanks to Andy Westgarth, the guys from NEBytes and all the crew who made the first DDDNorth such a fantastic event, and for all the sponsors, including DevExpress who feed and watered over 100 geeks at The Stadium of Light. Roll on DDDNorth 2012.

Go Asynchronous with C# 5 - presentation, source code and links from NxtGenUG Birmingham - 13th September 2011

A big thanks to my lively audience at the NxtGenUG Birmingham group tonight who provided excellent feedback. I enjoyed the live coding to try to explore the limits of the framework, even though it was interrupted by my PC turning itself off and leading me to thinking I'd trashed my SSD drive.

You can find my presentation online at Prezi.com over here, and the source code for the demos is available here.

During the presentation I mentioned there were some additional blogs and articles that are well worth having a look at;

Lucian Wischik addresses the bugs being fixed within the Async library and what bugs were fixed in the Async CTP refresh in two articles, Async CTP Refresh - Compiler Bug fixes and Async CTP Refresh - what bugs remain in it?. If you're thinking of using the go live licence in the Async CTP Refresh you need to read these two articles to understand which bugs remain and how you might mitigate against them.

Also, Sacah Barber (a UK based C# MVP) provides a really good set of use cases for the Async CTP over at CodeProject, in a post Task Parallel Library: 6 of n, including an example of using a mocking framework for testing your Async code.

Go Asynchronous with C# 5 - presentation, source code and links from London .Net Users Group - 1st September 2011

A big thanks to my lively audience at the London .Net Users group last night who provided excellent feedback. They even led me to some live coding to discover how the TaskEx.WhenAny deals with the tasks which didn't complete first - apparently they are immeadiately disposed of and their results are lost. Let's hope the release documentation for the Async libraries makes this very clear.

I also must thank EMC Consulting for providing the facilities and beer, and Adgistics for providing the pizza, and further beers at the post user group beers.

You can find my presentation online at Prezi.com over here, and the source code for the demos is available here.

Durign the presentation I mentioned some blogs articles that are well worth having a look at;

Lucian Wischik addresses the bugs being fixed within the Async library and what bugs were fixed in the Async CTP refresh in two articles, Async CTP Refresh - Compiler Bug fixes and Async CTP Refresh - what bugs remain in it?. If you're thinking of using the go live licence in the Async CTP Refresh you need to read these two articles to understand which bugs remain and how you might mitigate against them.

Also, Sacah Barber (a UK based C# MVP) provides a really good set of use cases for the Async CTP over at CodeProject, in a post Task Parallel Library: 6 of n, including an example of using a mocking framework for testing your Async code.

If you missed the talk I'll also be giving it at NxtGenUG in Birmingham on 13th September.

Mounting VHD comes to Windows Explorer in Windows 8

I'm glad to see that mounting a VHD file has escaped the Computer Management (Disk Management) administrator console in Windows 7, and made it to Windows Explorer in Windows 8.  That should make the feature much more discoverable, as well as making it much easier to use. 

I think the ability to mount a VHD as a drive, read and write to it and then easily port that VHD to another machine is a great feature that's been hidden in Windows 7.

More on the Windows 8 blog here, http://blogs.msdn.com/b/b8/

Jon Skeet is starting a new series on C# 5.0 Async

Jon Skeet has started a new series of blogs on Async focussing on the underlying technology beneath the Async CTP and Async methods coming in C#5.0.

  http://msmvps.com/blogs/jon_skeet/archive/2011/05/08/eduasync-part-1-introduction.aspx

Jon's blogs have a clear and deceptively easy to read style that belies the complex topics being discussed and is perfect for demystifying the technology behind Async so they are well worth the investment, and I'm looking forward to them hugely.