WP7 Marketplace & The PivotViewer – Match made in heaven

Lately, I’ve been rather enamored with a the Silverlight PivotViewer control from Microsoft (all in the same realm as Power Pivot and the upcoming release of SQL Server Reporting Services).  I’ve been following it since it released but just recently had a chance to play around with it…and I was definitely impressed.  The general idea is that the PivotViewer makes it easy to visualize large amounts of data while allowing a user to easily slice into different aspects of the data.  It is a magical blend when something really valuable also happens to be really easy to develop.  Since it’s so easy, it’s hard not to try and find a bunch of different uses for it. 

Hmm…so what has a lot of data that would be a cool visual and be interesting to slice in a lot of different ways?  Wait, I know…the WP7 Marketplace data.  Thankfully, Brandon Watson posted a quick overview on how to pull some data out of the Marketplace.  In less than an hour and a half, I pulled down the entire application data within the marketplace (hovering very near to 11,000) and every associated application image (nearly 400 MB worth).  Brandon did a great job in covering pulling the data, and the images were easy to pull too(albeit slower thanks to my internet connection).  PLINQ is another great tool that helped shorten the time it took to download all of the images.

I then used the Pivot Collection Tool for the Command Line (pauthor) to actually build the CXML required for the PivotViewer.  Despite the poorly named title of the tool it does come with a C# library component so don’t disregard it just because the name has Command Line in it.  I’m working on a set of extensions to the pauthor tool that will make it even easier to automatically generate CXML from entities based on attributes.  I’ll post some additional information on the technical details if anyone’s interested, but for now the main point of this post is the PivotViewer itself.

Let me first caveat this by saying that the still images really don’t do the experience justice.  There are a lot of animations and the discovery and mining is very rapid.  As I type this up, there’s a process running on my machine that is building out all of the CXML files.  Once I’ve cleaned up everything a bit, I will make the PivotViewer available so that you can interact with it directly.  But I wanted to show a preview of it first.

image

Here’s a visual example of all “Productivity” apps.  Notice that it is grouped by Release Date.  By simply changing the pivots, I can start to answer questions that may be harder to answer by static information.  I’m in control of the data analysis.  For instance, how many of these apps have…say…a rating better than 8?

image

You’ll notice this is a significantly smaller portion of the apps (no real surprise there).  How many of these apps have been rated by more than 8 people?

image

Okay, well maybe that’s just because I’m being too picky about high rating apps.  So let’s go ahead and see all of the apps that have been rated by more than 8 people…

image

Better, but that’s still a pretty small number compared to the total.  Because it’s visual, it’s very easy and immediate to draw meaningful conclusions.  Let’s switch gears entirely, and get a feeling for pricing rather than release date.

image

Woah, we clearly have some outliers here.  By clicking on the one over in the $150 range, we can bring up some of the details for that particular app.

image

I don’t know about you, but $170 seems a bit crazy.  Even after you remove the outliers, as you’d expect most apps are priced under $1.

image

It’s an absolute testament to the tools (and part of why I greatly appreciate Microsoft) that I can pull the data, organize it, and assemble a really powerful set of data analysis tools in less than 3 hours.  These different types of questions can be answered quickly and because the tool is so flexible I can get answers nearly as quickly as I can come up with questions.  Because the answers are often easy and quick to find, it only encourages more questions.  It’s a very empowering experience to rapidly answer questions and gain different insight than you would normally get through standard charts and graphs. 

WP7 – Wait…where’s my update?

I’ve blogged before about the WP7 update here, here and here.  I’m eagerly awaiting the first update of the platform to help resolve some of my issues with the phone.  Performance improvements are probably the number one thing I’m looking forward to as it’s pretty hard to get in and out of the phone (even if it’s designed for it) if it takes a long time just to open your applications.  So I’ve obviously been disappointed by continuing delays on when this update will finally arrive.  Microsoft’s latest stance has been that they would start rolling it out towards the end of March.

Yesterday, Microsoft provided an update on the “Copy and paste” update status.  Even more interesting is that they actually provided a new online resource aptly called “Where’s my phone update?”  They list out three stages: Testing, Scheduling and Delivering the update.  Of the five phones currently available, only two (Dell Venue Pro and HTC HD7) have actually reached the Scheduling stage.  The rest are still in the Testing phase which means that the carriers are still running their quality checks on both the February and March updates.

So where does this leave you?  Well, in my case I have the Samsung Focus.  Once it passes carrier testing, the scheduling phase usually takes 10 days or less and then the delivering update phase can take several weeks.  So realistically, I’m looking at end of April (if I’m lucky) before I actually get the update.

This is a bit of a let down given that Microsoft was originally talking February.  I hope going forward they focus when there customers are actually likely to get an update rather than when they’re going to hand it off to carriers.  I’m hopeful that this process will become a little smoother as time goes on.

On the bright side, I really appreciate the transparency that Microsoft is now providing into their update roll-outs.

WP7 – Context Menu and how the LongListSelector just can’t let go

I have a LongListSelector with an ItemTemplate that has a ContextMenu on it, like so:

<DataTemplate>
    <StackPanel Margin="17,0,0,17">
        <toolkit:ContextMenuService.ContextMenu>
            <toolkit:ContextMenu>
                <toolkit:MenuItem Header="Rename" Click="MenuItem_Click" Tag="RENAME" />
                <toolkit:MenuItem Header="Delete" Click="MenuItem_Click" Tag="DELETE" />
            </toolkit:ContextMenu>
        </toolkit:ContextMenuService.ContextMenu>
        <TextBlock Text="{Binding Name}" TextWrapping="Wrap" 
                    FontSize="{StaticResource PhoneFontSizeExtraLarge}"
                    FontFamily="{StaticResource PhoneFontFamilySemiLight}"
                    Foreground="{Binding IsSelectedBrush}"/>
    </StackPanel>
</DataTemplate>

Previously, I had problems in which the group header of the LongListSelector would get activated if a context menu click was over it.  At the time, a quick search on the forums yielded the same problem.  I added the handlers which fixed this issue.

<DataTemplate>
    <StackPanel Margin="17,0,0,17">
        <toolkit:ContextMenuService.ContextMenu>
            <toolkit:ContextMenu Opened="ContextMenu_Opened" Closed="ContextMenu_Closed">
                <toolkit:MenuItem Header="Rename" Click="MenuItem_Click" Tag="RENAME" />
                <toolkit:MenuItem Header="Delete" Click="MenuItem_Click" Tag="DELETE" />
            </toolkit:ContextMenu>
        </toolkit:ContextMenuService.ContextMenu>
        <TextBlock Text="{Binding Name}" TextWrapping="Wrap" 
                    FontSize="{StaticResource PhoneFontSizeExtraLarge}"
                    FontFamily="{StaticResource PhoneFontFamilySemiLight}"
                    Foreground="{Binding IsSelectedBrush}"/>
    </StackPanel>
</DataTemplate>

private void ContextMenu_Closed(object sender, RoutedEventArgs e)
{
    longListSelector.IsEnabled = true;
}

private void ContextMenu_Opened(object sender, RoutedEventArgs e)
{
    longListSelector.IsEnabled = false;
}

However, I recently noticed that the LongListSelector’s SelectionChanged event fired after the context menu closed.  I resolved my problem by updating my ContextMenu to use the Loaded and Unloaded event instead of Opened and Closed. The final working version looks like:

<DataTemplate>
    <StackPanel Margin="17,0,0,17">
        <toolkit:ContextMenuService.ContextMenu>
            <toolkit:ContextMenu Loaded="ContextMenu_Loaded" Unloaded="ContextMenu_Unloaded">
                <toolkit:MenuItem Header="Rename" Click="MenuItem_Click" Tag="RENAME" />
                <toolkit:MenuItem Header="Delete" Click="MenuItem_Click" Tag="DELETE" />
            </toolkit:ContextMenu>
        </toolkit:ContextMenuService.ContextMenu>
        <TextBlock Text="{Binding Name}" TextWrapping="Wrap" 
                    FontSize="{StaticResource PhoneFontSizeExtraLarge}"
                    FontFamily="{StaticResource PhoneFontFamilySemiLight}"
                    Foreground="{Binding IsSelectedBrush}"/>
    </StackPanel>
</DataTemplate>

private void ContextMenu_Unloaded(object sender, RoutedEventArgs e)
{
    longListSelector.IsEnabled = true;
}

private void ContextMenu_Loaded(object sender, RoutedEventArgs e)
{
    longListSelector.IsEnabled = false;
}

WP7 – Phone Update Is Here Plus Walkthrough

No, sadly, it’s not the “No-Do” update but the first WP7 update is reason enough to be excited.  After plugging in my LG developer phone from PDC, Zune shows this update as “Windows Phone Update, February 2011.”

image

Clicking update and we see

image

The more info takes you to the Windows Phone Update page which includes the update history.  In order to update the phone now, Zune needs to update itself first.  After the download and install, Zune is all ready to go.

image

After restarting Zune and checking for the phone update, we’re back to the update your phone screen.

image

The Update process kicks off

image

After downloading and installing the first round of updates, the phone reboots.

image

After the phone has finished rebooting, another install kicks off.

image

One final reboot and we’re almost there.

image

And we’re all done.  Phone successfully updated.

image

And there you have it, the phone is now up to date.

image

Looking forward to the upcoming No-Do update to see how this update process improved (not to mention all the nice new enhancements).

Follow

Get every new post delivered to your Inbox.