Tim Murphy's .NET Software Architecture Blog

August 2012 Entries

My Favorite Free Windows Phone Twitter App

Windows Phone 7 has been out for about two years now.  In that time I have switched back and forth with different free Twitter apps.  Mostly the has been because someone has mentioned one or another that they like.  I figured I would give a quick run down of what I felt were the pros and cons of each.  These are only the ones that I have used and your mileage may vary.  So here we go.

WP7 Built-In Twitter Functionality

While it is great that Microsoft put this functionality in, it is extremely limited in usefulness.  Some apps leverage it to allow you to share pictures or information they contain.  In all though, I don’t use it unless it is the quickest way to get something out.

Official Twitter App

The official Twitter app isn’t a very big step up from the phone functionality.  It gives you a better timeline view and better attachment handling, but it makes you bounce to a browser page to see images that are linked to a tweet.


This was my main Twitter app for quite a while.  It is the only one with InstaPaper integration so that you can save you a tweet and review it later.  My main problem is that it crashes too much when it can’t find a connection.  It also only previews yfrog and twitpic images and only once you go to the detail of a tweet.  Other than that it is a solid Twitter client.


This is my current favorite. It has nice image display in your timeline which I have not seen on any of the other apps.  There are two modes that you can use with this app.  The first is standard to most Twitter apps that allows you to navigate to a tweet and do the usual operations.  The second is what they call Quick Buttons.  In this case you do not see the content of the tweet but go straight to the let’s get something done stage.  It is an interesting take.  I do miss the Instapaper integration and it has a tendency to show a blank timeline list once in a while after you view detail entry.  If you scroll the list it restore your timeline, but you lose you place and are put to the first entry.


I am not very fond of this app.  The first thing is that it makes you pick a “Space” when you enter the app.  This is really “which account do you want to see”.  On top of that it does not show who retweeted an entry in your timeline and then only tells you how many people RT the post when you look at the detail.  There is a Speak feature that will read you a single tweet, but you have to navigate to the tweet and then to a menu to make it work.  We will have to see if this gets better with the features in Windows Phone 8.  Other than that it is another basic feature app. 


In the end I am sticking with moTweets.  I would appreciate it if they added the Instapaper capability and fixed the one bug.  If they did that I would be really happy with the product.


@aphoria suggested that I missed Rowi in this review.  When I started the review I didn’t see a free version of Rowi in the marketplace which excluded it from this post.  I guess I missed it somehow. 

My initial thoughts on Rowi were that I absolutely hated it (bare with me here).  It felt like way too many taps to get anything done.  Tap the tweet to bring up a menu and then tap the view button.  That still doesn’t make sense to me, but I respect what they are trying to do.  If you see a tweet that you want to reply to or RT the functionality is right there.  My problem is that I generally don’t blind RT.  I want to explore the links first.  My other complaint is that having images off to the right side doesn’t work for me.  They are too small to be useful.  Put them below the text and bigger.  I do like that once I go to view a tweet it is one button tap to send to Instapaper and RT a quote is supper quick from the list.  I am going to try it for a while longer and see if I whether I stick with moTweets or move over to Rowi.

Chicago IT Architects Group August Summary

We’re back!

Last night we had our first meeting in several months.  Carl Franklin presented on Google Platform As A Service: AppEngine.  As I spend most of my time in the Microsoft arena it was interesting to see another take on cloud services.  This was also enhanced by the fact that Carl had spent a lot of time doing Microsoft platform development prior to his current stint with the Google products.  He was able to compare and contrast the to environments which is very helpful as we go to make recommendations to our clients and sponsors.

We are hoping to get back on track with our meeting schedule going forward.  As I get confirmation on upcoming topics I will post more.  If you are interested in hearing more about a specific topic or have one you would like to present please let me know though the contact page of this blog.  At the very least join us.  Enjoy the topics and the conversation.  You can also join our LinkedIn group to get more updates.

Using BingMapsDirectionsTask In Windows Phone 7

Windows Phone has a number of great capabilities built into it for developers.  The Bing APIs allows you to easily give your application mapping functionality.  You may just want to give users directions to a fixed location.  What happens though when you want to give a user directions from their current location to an address that they are picking from application data?  This article will cover just that scenario.

Since almost everything in Windows Phone development is asynchronous this can get a little tricky.  You end up creating an event handler for a GeoCoordinateWatcher and follow that with a call to the Bing GeocodeService.  You end up with a chain of events where you are following the bouncing ball, but this is the sequence that I have found works. 

Let’s take a closer look.  In my example I am using a ListBox that is data bound to a ViewModel.  I am using the selected item to index into the ViewModel’s collection to pull back the address information.

First you are going to need to reference the System.Device namesapce.


You will also need to add a service reference to the Bing GeocodeService.

In the code file you will need to include the following using statements along with a using statement for your service reference.

using Microsoft.Phone.Tasks;
using Microsoft.Phone.Controls.Maps;
using System.Device.Location;

Add the following global variable in to communicate between your events.

private GeoCoordinateWatcher watcher;
private ItemViewModel itemModel;
private GeoCoordinate location;

The first thing you need to do is put code into one of the ListBox events to grab the current location of the phone.  This is done by creating a new GeoCoordinateWatcher and passing is a method to fire on completion.

watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);
watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(geoWatcherChanged);

In the geoWatcherChanged method we will capture the get the resulting phone location and fire off a request to the GeocodeService.  Before we do you will need an interpreter for the properties of the GeocodeRequest.Address.  Of course my conversion is from an American perspective.

  1. AddressLine = Street address
  2. Locality = City
  3. AdminDistrict = State
  4. PostalCode = Zip Code

Now lets look at the code for this section.  One thing to note is that you do need to get a Bing application key in order to use this call.

int index = this.myList.SelectedIndex;
itemModel = App.ViewModel.Items[index];

watcher = null;
location = e.Position.Location;

GeoService.GeocodeServiceClient geoService = new GeocodeServiceClient("BasicHttpBinding_IGeocodeService");
GeocodeRequest request = new GeocodeRequest();
request.Credentials = new Credentials();
request.Credentials.ApplicationId = "Your Bing Key";

// Set the options to only return high confidence results
FilterBase[] filters = new FilterBase[1];
filters[0] = new ConfidenceFilter() { MinimumConfidence = Confidence.High };

GeocodeOptions geocodeOptions = new GeocodeOptions();
geocodeOptions.Filters = new ObservableCollection<FilterBase>(filters);
request.Options = geocodeOptions;
request.Address = new Address();
request.Address.AddressLine = itemModel.Address;
request.Address.Locality = itemModel.City;
request.Address.AdminDistrict = itemModel.State;
request.Address.PostalCode = itemModel.Zip;

geoService.GeocodeCompleted += new EventHandler<GeocodeCompletedEventArgs>(geocodeService_GeocodeCompleted);

The last step is to get the resulting location code and call the BingMapsDirectionsTask to launch the turn by turn directions. To do this we will use the geo code from both operation and label them so that it is easier for the user.

GeocodeResponse geocodeResponse = e.Result;

if (geocodeResponse.Results.Count() > 0)
BingMapsDirectionsTask task = new BingMapsDirectionsTask();
LabeledMapLocation labeledMapLocation = new LabeledMapLocation(itemModel.CompanyName, geocodeResponse.Results[0].Locations[0]);
task.Start = new LabeledMapLocation("You", location);
task.End = labeledMapLocation;
MessageBox.Show("Could not find the destination address");

Now we have an interactive set of direction based on your application data which make life easier for your users.  Have fun.