Sportnews GR is now live!

Today my application went live. After a failed submission and 7 more days of waiting for certification, my application is live on the WP7 marketplace.

This application is an RSS reader for the major Greek sport sites. It was a really nice experience seeing this application start from file -> new project and now seeing it on the marketplace.

Here are some screenshots of the application.

If you are interested in sport-related news and/or you can read Greek and have a WP7 give it a try and let me know what you think.

WP7 WebBrowser Control Woes

Something small, but inherently useful to know. When you use the WebBrowser control in WP7 you don’t get the same behavior when browsing. An example that came up during the development of my application is shown below:

explorerwebbrowser component

The left screenshot is from the native internet explorer while the one on the right is from a sample application I made to test the control. I could not understand what was happening and ended up spending a whole afternoon debugging the network traffic with Fiddler (very useful tool btw). *

The problem was that by default the WebBrowser Control had Scripting disabled. Easy enough you will say; just use the easy to find webBrowser.IsScriptEnabled property. There is a catch here though. Let me quote MSDN:

WebBrowser.IsScriptEnabled Property

Enables or disables scripting. This applies to the next document that is navigated to, not the current document. This property is false by default. Set this property to true to enable scripting, or false to disable scripting.

So beware to set WebBrowser.IsScriptEnabled to true before navigating to the page. Any subsequent navigation retains this value, so you have to manually set it to false if you don’t want scripting in other pages.

PS. If you want to make Fiddler work with the WP7 Emulator see this post.

The difference between a prototype and a product

One of the common themes that keeps popping up lately in my line of work is the difference between a product and a prototype. A prototype is something that you make for yourself. Something that only you will use (or select few with specific instructions), something that does a very specific job and will probably crash your hard drive and burn your dvd player if you try to make any changes.

A few simple examples of this are renaming of files/folders, some csv file data “massage” or anything that is repeatable. The development time is usually short enough to warrant that you won’t spend more time doing the development than the time you gain from doing this work manually. This can scale up to include machines that cost a few thousands of Euros, like the ones which we make at my workplace for in-house use. The pattern is the same no matter what the complexity is. Let me share some of my experience as it relates to software development.

There are some times when the result is so good, that you want to share this thing with the community or sell it. That is when you hit a brick wall. Your prototype program that renames all files and replaces an underscore with a space did a great job for you, but what about those that have files with dots? What happens when you have two underscores? Not to mention the more complex scenarios.

This is what I call the gray zone. It is a place of pain, where you don’t have significant gains as far as important features are concerned, but you keep pouring effort into. It is a disproportionately long and demanding effort, before you are able to transition to the product area, where you can give the thing you are developing to someone else. See the following graph (made by matplotlib and edited by paint.net) for an visual depiction of this.

Prototype-Product Graph

This is a clear example of the Pareto Principle or the 80-20 rule.

The Pareto principle (also known as the 80–20 rule, the law of the vital few, and the principle of factor sparsity) states that, for many events, roughly 80% of the effects come from 20% of the causes.

Wikipedia

Although this principle has its roots in economics, you can find applications of this in many real life scenarios like businesses, demographics and software engineering to name a few. In our case, you can spend 20 percent of the total development time to achieve 80 percent functionality, but the rest 20 percent of functionality is what makes a product shine. It can make all the difference in terms of having happy “clients” (either paying ones, or not –friends,family,community).

For example you can have software which when crashes, shows the following screens:

image

image

Guess which is a product. One gives you some cryptic information that probably even the author of the application wouldn’t use. The other apologizes for the crash, promises to get some of your work back and asks if you want to contribute towards the fix of the problem that created your crash by sending data that is useful to the ones who wrote the application.

When you are in the prototype phase you don’t care about such things. If there is a crash, then you probably already have attached a debugger, or you make a mental note to do so next time. Also, you know and expect what you will be doing with your program. If you write a division program you won’t be putting any zeroes to the divisor textbox, will you? When you give your software to others though, nobody can assure you that they won’t. In fact, you can be assured that they will.

If you like your product to have an impact you have to trudge through the Gray zone, now matter how difficult –or boring- it may seem. It really makes a world of difference. When you manage to break through the Gray zone, then –oh joy- you are ready to reap the rewards of your hard work, be it a friendly pat in the back (even a good comment on twitter qualifies as one), a big pile of money or anything between those.

As far as I am concerned, there are at least 4-5 projects/relevant posts that are somewhere in the middle of the gray zone. Hopefully you will hear of them soon.