Archive for the ‘Dotfuscator’ Category

Survey sez!

Wednesday, February 16th, 2011 by Sebastian Holst

We are deep into two WP7 dev surveys, but I just love this stuff and so I’m going to leak some preliminary data out now – if you want me to send you a link to the final results, send me an email at sebastian at preemptive dot com.

The first survey we are doing goes back to the earliest group of WP7 developers, “first 300,” and asks how they have made out over the past two months.

The second survey targets roughly another 1,500 active wp7 devs who are using analytics and/or obfuscation but who began their work after the initial survey.

Here are a few tidbits that we see so far…

Analytics improves mobile development practices and app value

Going back to the original 300 and asking those who had deployed apps with analytics, we have found that:

  • 82% of the devs say that using Runtime Intelligence (RI) has “helped them to establish for themselves the value of analytics for app development overall”

With regards to their specific WP7 app in the marketplace, the devs directly credited their use of RI as:

  • Increasing the value of their app (45%)
  • Improving their app’s user experience (36%)
  • Improving their app’s quality (27%)

Mobile app devs migrating to WP7 4X’s faster than .NET devs

In the first 300, only 4% of the registered developers targeted two or more additional mobile platforms. This indicated to me at least that the very first developers to develop for WP7 were already MSFT devotees versus serious mobile app developers exploring WP7 as an alternative/incremental mobile platform.

However, in the latest wave of developers, that stat has more than quadrupled. There is no question that developers who identify themselves as mobile app developers first rather than iOS, .NET, or Android developers are building for WP7.

Platform share for those developers targeting multiple mobile platforms are (in addition to WP7):

  • iOS 69%
  • Android 67%
  • RIM 23%
  • Symbian 5%

There’s a lot more to come – so stay tuned (or shoot me an email). Cheers!

Do good while doing well: Build a Windows Phone 7 app and secure a $100 donation for your local user group

Tuesday, February 15th, 2011 by Sebastian Holst

The only thing better than doing something good is when it also helps you do well – and so when we had the opportunity to join with Telerik, a fantastic ISV (that is also) focused on improving developer and application value, and with Microsoft on a campaign to help developers and their local user group chapters – there was no doubt that we were going to want in.

What’s the deal? Simply put, any developer who develops their own Windows Phone app using both Telerik controls and Runtime Intelligence will:

  1. Have $100 donated to their local user group (that’s doing good), and
  2. Have an app on the marketplace that combines a great user experience with the usage and adoption analytics to prove (and improve) it (that’s doing well).

Of course, nothing can be this simple right? – Wrong! To learn more, visit http://www.telerik.com/windowsphoneFTW

You still here? Not convinced yet? Here are some more details…..

All you need to do is:

  • Develop and deploy any WP7 application using Telerik RadControls for Windows Phone AND PreEmptive Runtime Intelligence for Windows Phone, AND
  • Get this done and certified before May 31st 2011

By the way, there is no limit to how many apps you and your user group can submit, but we will only recognize the first 500 qualifying applications – so build early and build often!

Also, needless to say, you are going to have free access to all of the required software. So go on – click through and do some good at http://www.telerik.com/windowsphoneFTW

Want to spread the news? Present at your next user group meeting? Here’s a PPT

Dotfuscator 4.9.6 to Ship February 11

Wednesday, February 9th, 2011 by Sebastian Holst

New features include:

  • 10X performance improvement for Runtime Intelligence messaging on Silverlight and XNA apps (on and off of the phone)
  • Expanded XAML obfuscation further improves IP protection

For Windows Phone 7 users, perhaps the most significant new feature will be, in fact, an invisible one; V4.9.6 includes a new analytics messaging implementation that offers a 10X performance improvement on the phone with a proportionate improvement in battery life preservation thrown in. This implementation employs a multi-threaded, “batch and send” approach.

If you think your app is at all sensitive to our (or anyone else’s) analytics traffic, I would encourage you to download the new version and retest. If you haven’t downloaded Dotfuscator and Runtime Intelligence for Windows Phone yet, you can get it right now at http://www.preemptive.com/windowsphone7.html

This performance enhancement applies to any Silverlight app - not just WP7 apps. Please note: multi-threaded messaging and caching was already supported on all other .NET applications.

Also included in this release (for apps both on and off of the phone) are incremental enhancements in XAML renaming obfuscation. If you are obfuscating your XAML, Dotfuscator will now provide automatic support (meaning no manual configuration or exclusions) for the renaming of attached properties, dependency properties, routed events, and attached events. This feature applies to Silverlight (WP7 and .NET) and WPF applications.

How do you get the new version? Registered Dotfuscator users with active maintenance (all WP7 developers are automatically included) can simply open their installed version of Dotfuscator and select “Check for Updates Now” under the Help menu. The link provided will step you through a simple upgrade path.

How do you take advantage of the performance improvements? Simply run your app through Dotfuscator again; there are no configuration changes required.

How do you take advantage of the extended XAML renaming capabilities? If you have already excluded instances of these specific properties/events in an existing configuration file, then you will need to “uncheck” those exclusions. New applications will be able to take advantage of the improved XAML protection capabilities from the start. Please note: as is always the case, if there are dependencies on these events/properties that cannot be detected through static analysis, then they will always need to be excluded.

When obfuscating XAML, always check the “warnings” panel for potentially “ambiguous” XAML during the initial configuration phase (and always test your apps post-obfuscation).

Riddle me this! Where can French, Italians, and Germans all agree?

Tuesday, February 1st, 2011 by Sebastian Holst

Well, apparently, its in their tendency to pair wine with spicy Chinese food.

How did I come up with such a farfetched notion? The answer to “how” is “easily” when I started with a WP7 app like VinoMatch’s Mobile Sommelier that was instrumented with Runtime Intelligence for Windows Phone. But let me back-up a little.

On Nov 4, 2010 MSFT and LG announced that LG Owners Get Free Access to Popular Windows Phone 7 Applications. You can read more about the 10 premium apps and another 10 LG-specific apps on LG’s Facebook page here. They call the program “hAPPiness!”

Anyhow, it turns out that all 10 of the premium apps were instrumented with Runtime Intelligence and have been sending analytics since the January launch of the program.

Last week, Microsoft invited lead developers from all ten development teams on campus for three days to gather feedback as well as to hold some specialized training on a variety of technical topics – and I was fortunate enough to be invited to lead a discussion on best practices for incorporating mobile analytics into the development process. In support of this presentation, I was given permission to look into the runtime data that these 10 apps had been collecting to see what I could see.

The 10 premium apps that are free from LG through March 10th are:

1. Cocktail Flow by Gergely Orosz
2. Color Sprouts by Jarek Kowalski
3. Colorize by Kitron Software
4. Doodle God by JoyBits Ltd. (a Top 100 Paid App)
5. Envision by Dotnetfactory
6. Krashlander by Farseer Games (a Top 100 Paid App)
7. Mobile Sommelier by VinoMatch
8. Mr. Hat and the Magic Cube by BRAVO game studios
9. Talking Ragdoll by Spritehand LLC (a Top 100 Paid App)
10. Weave by Seles Games (a Top 100 Paid App)

While I can’t share the entire presentation here, VinoMatch and Gergely Orosz were kind enough to give me permission to include some of their mobile analytics in this discussion. I want to highlight two powerful analytical techniques using their real-world data.

Conversion feature analysis

Embedded within most apps are a few keystone features that drive conversion (from eval to paid, prospect to customer, fan to fanatic) and Cocktail Flow has one under development, Shopping Assistant. It does not yet connect directly to a store and, as a nascent feature, is not yet a centerpiece in their UX design. Here is what I was able to deduce from the Runtime Intelligence data:

  • Only 5.5% of all user sessions used the shopping assistant feature.
  • Of those, 49% used shopping assistant only once inside their session, and 51% used shopping assistant multiple times. Of those 51%, they used it for an average of 2.9 times per session. What were they doing?

With Runtime Intelligence, I am able to map out the full usage trail, feature-by-feature, session-by-session, and so I am also able to visualize:

  • Where in the sequence of features of each user session shopping assistance was being called.
  • And when it was used, was it a part of a “one use” session or one of those sessions where the user called the shopping assistant multiple times in a single session.

I can also see that the overwhelming number of Cocktail Flow users using this feature rarely used more than 10 features in their session and that virtually all lengthy sessions (taking more than 14 actions) were always churning (going back to the shopping assistant feature multiple times).

When this feature is functionally complete to the developer’s satisfaction, they will now have benchmarks to measure feature adoption (increase it over 5.5%) and session behaviors (when, how often, and under what circumstances the feature is used) all relating to what may ultimately be their most lucrative app feature.

Mutli-variable AB testing and cross-domain user profiling


In the Cocktail Flow example, we focused on a single feature. With Mobile Sommelier, we are going to add a few more dimensions.

The following graphic shows, as a relative percentage, how often ten selected features inside the Mobile Sommelier application were used over a 6 day period.

What we can see immediately is that there is very little variability over time. The population of users generally uses the application in the same way over time.

What can we do with this perspective?

If we were to release a new version of this App, we could immediately see any meta shift in behavior across the two versions (Runtime Intelligence will automatically roll-up multiple versions and then break them out when asked).

What CAN’T we do?

While we can see how often the “ShowTasteCard” feature has been used, we CAN’T readily determine which wine/food pairing users are most (or least) interested in. We can’t analyze custom, application specific data.

Luckily, Runtime Intelligence CAN grab this data – with no programming – all post-compile. For example, this (very busy) chart shows the how often (by percentage) users want to pair wine with specific foods (like BBQ or spicy Chinese) AND it is further broken out by country.

Of course, this is too busy to read in its current form, but the trend lines do immediately show that while all users may use the “ShowTasteCard” with generally the same frequency (as indicated in the last graphic), it is clear that they use the feature DIFFERENTLY, e.g. they care about different topics. Culture counts!

Let’s drill down.

Focusing in on just three countries (France, Germany, and Italy) and focusing on just a few of the food options (from AntiPasto through Chocolate Cake), we can see genuine differences in user behavior and preferences.

Perhaps it is not surprising that French are more interested in Caviar, Germans in apple pie, and the Italians in antipasto.

On the other hand, maybe we were not expecting Italians to show such a strong interest/preference for BBQ. Could this data point to a way to sell Zinfandel (a US export based on a grape that originated in Italy) into the Italian market? – as the US wine for US food (BBQ).

Some general best practices

At the end of the session, the developers generally agreed on the following developer patterns:

  • Instrument key usage and application milestones (Not just clicks and page views)
  • Capture user selections and preferences (Not just selection and preference setting events)

Other conventions and best practices

  • Implement exception reporting
  • Integrate runtime intelligence into your CRM, ALM, and Marketplace repositories

Application Analytics are not your older brother’s web clone for the phone!

These have been just a few small examples of the rich set of analytics that are now available (both on and off of the phone). So, if you think Runtime Intelligence is just another web analytic clone for the phone, think again – Runtime Intelligence provides application analytics – not web analytics (see my earlier blog Application analytics: a new game brings new rules).

In a nutshell, this means that these analytics include:

  • Custom data (including complex objects)
  • Session, feature, event, and method-level precision (not just event)
  • Exception reporting (unhandled, handled, and thrown)
  • Support for both Silverlight and XNA
  • Opt-in policy enforcement, SSL transmission, and caching
  • And were implemented using post-compile injection eliminating the requirement to change (or even recompile) source code.

Anyhow, I am ALWAYS eager to hear from developers who have employed analytics in cool and innovative ways – PLEASE reach out and share the wealth! Thanks

Dotfuscator Windows Phone Edition - Now Available!

Friday, January 7th, 2011 by David Poeschl

We recently released a brand new version of Dotfuscator, Dotfuscator Windows Phone Edition!  It is completely free to use and has all of the instrumentation and obfuscation features of the commercial version, but is specifically designed for developers of Windows Phone 7 applications!

The purpose of this post is to get you started with mobile application analytics and obfuscation using Dotfuscator, assuming no prior knowledge.  If you don’t have your own application to try it out on, we provide both Silverlight and XNA applications (including source code) to use for testing.  Let’s get started.

Getting Dotfuscator Windows Phone Edition

Getting Dotfuscator Windows Phone Edition is as easy as filling out one simple form.  We’ll wait here while you go fill it out…

Very shortly after form submission, you will receive an email containing a link to download Dotfuscator Windows Phone Edition, a serial number for registering the product, and various credentials required to properly instrument your application and use the Runtime Intelligence portal to view application analytics.

It is important that your Organization name be distinct.  If it is not distinct (for example, if you and a coworker both enter "Foo Company"), then the license email you receive will not contain RI credentials.

Sample Applications

Dotfuscator Windows Phone Edition comes with two sample applications - one Silverlight application and one XNA game.  They include the original source code, Dotfuscator configuration files for obfuscation and instrumentation, and a link to the Runtime Intelligence Portal where application usage statistics can be viewed (found in the readme.txt of each sample).

The configuration files include best practices for application analytics & obfuscation that you can view, adjust, and apply to your own applications.

To run the sample configuration files through Dotfuscator, first copy the entire samples directory to C:\temp or any location over which you have full control (otherwise you may encounter one of two errors - a file access build error, or an ilasm.exe build error when we try to create the output assembly).  Then simply open the Dotfuscator configuration file included in the sample and click the build button.

Instrumenting Your App

Instrumentation is enabled by default, but no analytics will be collected until you use the Instrumentation tab in Dotfuscator to set the required attributes.

At a minimum, you’ll need to add a BusinessAttribute (using a GUID provided by PreEmptive in the registration email), ApplicationAttribute (to distinguish between your applications), SetupAttribute & TeardownAttribute (to track application runs, and to set up the runtime environment through which more advanced messages can sent).

Due to how application lifecycles are handled on the phone, you may need to be careful where you put your SetupAttribute & TeardownAttribute.  To get up and running with an XNA game, we suggest putting the SetupAttribute on the Initialize() method, and the TeardownAttribute on a method tied to the game’s Exiting event.  To get up and running with Silverlight apps, we suggest putting a SetupAttribute on both Application_Launching() and Application_Activated(), and the TeardownAttribute on both Application_Closing() and Application_Deactivated().

That’s all you need to do to start tracking application runs! You can collect more information, such as feature runs, feature durations, performance information, and custom data in the form of extended key dictionaries (any IDictionary<string, string>).  Check out the sample applications for examples of feature tracking & using extended key dictionaries to track things like the final score of a game.

Viewing Your Analytics

To view your analytics data, go to the Windows Phone 7 Runtime Intelligence Portal and login using the credentials from your registration email.

It can take up to 24 hours for your data to process fully and appear in reports.  You can still tell whether you have successfully instrumented your application by using the Queued Data report on the Account Overview page.

If you see no data in reports or in the Queued Data report, there’s a list of common reasons in this thread.

Obfuscating Your App

Obfuscation is fully disabled by default for new projects.  You will need to turn on each desired transform individually from the Settings tab.  The most useful features for Windows Phone 7 are Renaming, Control Flow, and String Encryption.

When you turn on Renaming or Control Flow, Dotfuscator will apply those transforms to everything in the assembly that it can (while making intelligent automatic exclusions for you in the case of certain types of reflection or XAML references).  You may need to make Renaming exclusions to compensate for certain types of reflection using the Rename | Exclude tab.  A number of these cases specific to Windows Phone 7 development are addressed in this thread.

When you turn on String Encryption, you need to use the String Encryption | Include tab to specify which strings you want to be encrypted.  To select them all, either check the box on each assembly node in the treeview, or add just one custom rule on the right by clicking "Add Namespace" and changing the Name to ".*" (without the quotes).

(For the purposes of String Encryption, it helps to turn on Removal, and change Removal | Options | Removal Kind to "Remove only literals (const definitions).")

Having Trouble?

Here’s a quickstart video that demonstrates obfuscation, instrumentation and analytics for both XNA and Silverlight applications.

If you’ve instrumented your application but are not seeing your data on the Runtime Intelligence Portal, please read this thread first.

If you’ve obfuscated your application and now it won’t start, please read this thread first.

If you encounter any problems, please search or post on our specific Windows Phone 7 analytics forum or Windows Phone 7 obfuscation forum.