TFS Power Tools Get a Facelift

Today the Visual Studio Facebook page had an announcement about the availability of an update to the TFS Power Tools.  Although I’ve been back in SVN-land lately this update is still pretty exciting.  Given that my most popular post is Everyday TFS I thought my readers would find it just as interesting.

Per the announcement the March update focuses on three main areas:

  • Addressed reported issues in the Backup/Restore Power Tool
  • Fleshed out the Windows Shell Extension for version control
  • Took the first step on the path to a bunch of new TFS Build Power Tools

(more…)

Cincinnati Day of Agile

I am attending the Cincinnati Day of Agile ConferenceOver the years my team has followed very loose processes for software development.  Now that we’ve matured as an organization we’ve found that the time for more formality is upon us.  As such, we’ve started adopting Agile methodologies to help us stay focused and on track.  With this change I thought it would be a good idea to get up to speed with what’s happening in the Agile world and what better place to do that than a day long event focusing on Agile?

The Cincinnati Day of Agile is on March 26th and is being held at the Savannah Conference Center.  It runs from 8:00 – 5:00 and early registration is $50.  You can find out more on the event site or registration site.

I hope to see you there!

NUnit and WatiN

Today a colleague was trying to diagnose why some long neglected UI tests were failing.  He quickly discovered that the tests weren’t failing because of changes to the code under test but because our UI test framework was misbehaving.  Since I’d been involved in developing parts of the framework he came to me to see what I remembered.

Our test framework is essentially a wrapper around WatiN that controls certain application specific tasks like logging in, navigating with our windowing system, or interacting with some of our more complex controls.  These tests were failing because the framework wasn’t able to get a reference to our main application window so a null reference exception was being thrown.  Now, we’ve made quite a few changes to our application but our windowing system certainly isn’t among them so why were the tests failing?

(more…)

What’s Wrong with my Kindle?

After weeks of seeing how much Esther was enjoying her new Kindle I decided to get one for myself. I went to a local Target store and picked up a white one and the standard Amazon branded leather case.

When I got home I put it in the case, plugged it in to charge, configured it for my network, and tied it to my Amazon account. I browsed the site for a book to start with and eventually settled on one. After the purchase I tried to wake up the device but it wasn’t about to cooperate. I had to do a hard reset to get back in.

After the device restarted I found my new book and read a bit of it before taking a break. A while later I picked it back up and again it wouldn’t wake up. This cycle repeated many, many times. I tried restoring factory settings and I even tried upgrading the device to the pre-release 3.0.3 firmware. When neither of those options solved the problem I got fed up and called Amazon’s Kindle support line.

After describing the problem the rep suggested that because I purchased it at a retail store I should return it to them and exchange it. I exchanged it and followed the same routine as I had with the first one and incredibly I had the exact same problem!

After fighting with it again for a bit I called the support number again and explained the situation to the rep who transferred me to someone else. After describing the situation again this rep asked about the case and suggested I remove the device from the case and try hard resetting it yet again. Since removing the case I haven’t had any issues at all! Amazon also gave me credit toward the purchase of a replacement case.

I was completely baffled by the solution since it doesn’t seem like the case should cause that type of problem but apparently it’s a known issue.   Amazon’s customer care was great to work with but if the issue is so common I can’t help but wonder not only how the first rep missed it but why these cases are still being sold.

References:

  1. http://gadgetwise.blogs.nytimes.com/2011/01/04/a-kindle-case-causes-problems/
  2. http://www.amazon.com/cover-causes-Kindle-freeze-reboot/forum/Fx12U61UWYSO3UY/Tx17O3815XVEMVM/1?_encoding=UTF8&asin=B003DZ163E
  3. http://news.cnet.com/8301-17938_105-20026116-1.html

Flickr API Notes

Until recently I had been working on a flickr app for WP7.  It was coming along nicely but then flickr had to go and announce an official app that will be released at the end of January.  Even though I’m no longer working on the project I thought I’d share some of the things I learned about working with their API.

Getting Started

The natural place to start on the project is by reviewing their API documentation.  For convenience the API index page lists API “kits” for a variety of platforms including .NET, Objective-C, Java, Python, and Ruby among others.  I started by looking at the Flickr.NET library but didn’t like how it defined so many overloads for some of the methods and ultimately compiled most of the API methods into a single Flickr “god” class so I started writing my own framework.

The API index page links to some highlighted “read these first” documents most of which are all must reads but some of them can be easily gleaned from the rest of the documentation.  The documents I found most useful along with some highlights and notes are:

  1. Terms of Use
  2. Encoding
    • UTF-8
    • UTF-8
    • UTF-8
  3. User Authentication
    • Three methods
      • Web
      • Desktop
      • Mobile
    • Despite being a mobile application the features offered by WP7 made desktop authentication a more logical choice.
  4. Dates
    • MySQL datetime format
    • Unix timestamps
  5. URLs
    • Guidance on how to construct URLs for both photo sources and flickr pages.

Formats

We can communicate with the flickr API using any of three formats:

  • REST – http://api.flickr.com/services/rest/
  • XML-RPC – http://api.flickr.com/services/xmlrpc/
  • SOAP – http://api.flickr.com/services/soap/

The REST endpoint is by far the easiest to use since all of the arguments are included directly in the URL as querystring parameters.  Making a request is just a matter of constructing a URL and issuing a POST or GET request.

Responses can be returned in any of the three formats but we can also request responses in JSON or PHP formats by specifying a format argument.  I used REST for responses too because the format easily lends itself to XML deserialization and greatly reduced the amount of translation code I needed to write.

API Methods

In general I found the API easy to work with.  The methods are clearly organized and offer a very feature complete way to interact with the system.  Although each exposed methods has some accompanying documentation that is generally pretty complete I found plenty of room for improvement.

My biggest gripe about the documentation is how incomplete some of it is.  For example, several of the methods accept an Extras argument.  The Extras argument is incredibly useful in that it allows additional information to be returned with the list thereby reducing the number of API requests we need to make to get complete information back in list format.

The Extras documentation lists all of the possible values but what it doesn’t include is what is returned when the options are specified (at least not that I found without actually making a request with the options).  For your convenience I’ve compiled a listing of the output values for each of the Extras options.

Option Response Notes
description description element Element content can contain HTML
license license attribute Available licenses
date_upload dateupload attribute UNIX timestamp
date_taken datetaken attribute MySQL datetime
datetakengranularity attribute The known accuracy of the date. See the date documentation for details.
owner_name ownername attribute
icon_server iconserver attribute
iconfarm attribute
original_format originalsecret attribute Facilitates sharing photos
originalformat attribute The format (JPEG, GIF, PNG) of the image as it was originally uploaded
last_update lastupdate attribute UNIX timestamp
geo latitude attribute See documentation for flickr.photos.geo.getLocation
longitude attribute
accuracy attribute
tags tags attribute Space delimited list of system formatted tags
machine_tags machine_tags attribute
o_dims o_width attribute The dimensions of the original image – I prefer url_o for this information
o_height attribute
views views attribute Number of times an image has been viewed
media media attribute
media_status attribute
path_alias pathalias attribute Alternate text to be used in place of the user ID in URLs
url_sq url_sq attribute The url and dimensions of the small square image
height_sq
width_sq
url_t url_t attribute The url and dimensions of the thumbnail image
height_t
width_t
url_s url_s attribute The url and dimensions of the small image
height_s
width_s
url_m url_m attribute The url and dimensions of the medium (500 pixel) image
height_m
width_m
url_z url_z attribute The url and dimensions of the medium (640 pixel) image
height_z
width_z
url_l url_l attribute The url and dimensions of the large image
height_l
width_l
url_o url_o attribute The url and dimensions of the original image
height_o
width_o

Consistently Inconsistent

As complete and responsive as the flickr API is it isn’t without its share of annoyances.  The biggest issue that is found throughout the API is the lack of consistency.  The API is so consistently inconsistent that we can even see examples in the table above.

Just look at the options and responses.  How many options use snake case but return lowercase attribute names?

Another example is found with dates.  Taken dates are MySQL datetime values whereas posted dates are UNIX timestamp values.  This means that anything using the API needs to handle both types.  I understand not converting taken dates to GMT since they might be read from EXIF data but can’t we get a standard format and have the service handle the conversions?

The Overall Experience

As I mentioned I opted against working with an existing library like Flickr.NET so I was building everything from scratch.  As such, I started building my own framework and found that in general, the experience was painless.  The fact that the API is so flexible in terms of request and response formats makes it useful in virtually any environment.  The completeness of the exposed feature-set also makes it easy to build a rich integration.

What’s Next?

I may have stopped development on my flickr app for WP7 but I’ve made such good progress on my framework that I’m strongly considering putting it on codeplex and finishing it.  Right now it only supports the REST formats, doesn’t have any caching capabilities, and only works asynchronously but addressing these topics shouldn’t be particularly difficult.  If anyone is interested in the project please let me know.

Scrapped

I’ve spent quite a bit of time over the last several weeks working on a Flickr app for Windows Phone 7.  I was getting really close to having something to release to the Marketplace but then last night Flickr announced that they’re releasing an official app for both WP7 and Windows 7.  Immediately after watching the video highlighting the features of the apps I decided to stop working on mine.

I was really happy with how my app was shaping up.  It was interesting to see how many of our design decisions matched up.  We both displayed interesting (explored) images, “my” images, and recent images from contacts in a panorama.  For the photo view page I was using a pivot control with two items.  The first contained details such as the preview image, title, upload date, and description.  The second item was going to list comments.  I was even thinking about including a map for geotagged images.

Ultimately though, I’m just one person and they’re, well… Yahoo!  As nice as my app was turning out I just don’t have the resources to pull off anything near what they’re doing with Azure – mainly a live tile and cloud based state management.  If the official apps work anything like what the video shows when they’re released on January 31 they’ll quickly become my go-to resources for all things flickr.

So even though I won’t be putting a flickr app into the Windows Phone Marketplace the project wasn’t a total wash.  Until starting this project I didn’t really have any opportunity to work with Silverlight.  By extension, I’ve never really done anything with XAML or the MVVM pattern either.  Naturally, this project also taught me a lot about the flickr API since I chose not to use the Flickr.NET library.

Of course, I’ve already paid the developer registration fee so now I need to think of something else to build.  In the meantime though I’ll be looking forward to the release of the official apps.

Indy TFS Discussion Resources

Thanks to everyone that came out to Indy TFS on December 8.  I hope everyone that attended found some value in it.

A few people asked for the list of resources I gave at the end of the session so without further ado:

Enjoy!

WP7 Resources

I’ve recently found a few good resources for getting the most out of Windows Phone.  I’ll be adding more as I find additional resources that I like.

WPCentral

Sister site to other established smartphone sites such as androidcentral and TiPb, WPCentral is a great resource for the latest Windows Phone news.

Windows Phone Secrets

Windows Phone Secrets is a listing of tips and tricks for the phone.  This is where I learned how to dismiss the notification bar.

Bing Visual Search

Looking for an app?  Check out Bing’s WP7 app visual search.  To get the most out of the visual search make sure to install Microsoft’s Tag Reader on your phone so once you’ve found what you’re looking for you can scan the tag on the page to install it.

WM Power User

Another Windows Phone news site similar to WP Central.  There’s some overlap but WM Power User has enough unique content to keep it interesting.

Missing Facebook Contacts on Windows Phone 7: Resolved

When I first connected WP7 to Facebook it quickly imported all of my contacts.  Earlier today though I added a friend on Facebook but even after a few hours I couldn’t find her anywhere in the contact list.  I searched both Bing and Google looking for possible solutions.  I even looked through the user guide (*gasp*) but came up empty.  After some fumbling around on the device I finally stumbled upon the solution hidden away in a context menu.

Here’s how I did it:

  1. Open the People Hub
  2. Tap and hold on the “people” heading to open a context menu
  3. Select “settings”
  4. Pan down to the accounts list
  5. Tap and hold on the “Facebook” account to open another context menu
  6. Select “sync”
  7. Wait for the process to complete (the account will be greyed out while it is synchronizing)
  8. Return to the People Hub

Note: As an alternative to options 1 – 3 navigate to Settings –> email & accounts.

This process isn’t limited to Facebook either.  I noticed I had to do the same with some new Exchange contacts as well.  Just remember, if you have some contacts that aren’t showing up you probably need to force the account(s) to sync.

A Few Days with Windows Phone 7

I’ve been using an iPhone 3G for nearly as long as it has been available.  It has served me well over the years but I’ve been wanting something different for a quite some time.  As the end of my 2 year agreement approached I started looking at other smartphones.  Back then there were only a few serious options: iPhone 3GS, a few Android phones, and Blackberry.  For a while I was leaning heavily toward the Nexus One but then I started hearing rumblings about a new phone operating system from Microsoft, one that would replace the much hated Windows Mobile and was going offer a significant departure from the traditional smartphone experience.

The more I heard about this new OS the more interested I became.  Tiles and hubs, social network integration, “smart links”, it all sounded like an obvious evolution.  I decided to put my upgrade on hold and see if Microsoft’s experiment could be a contender in the arena.

As the months passed I attended a few preview events and watched several “first” look videos.  Everything I was seeing was getting me more and more interested.  With the majority of the post-launch reviews I read being largely positive I made the decision to jump to a WP7 enabled phone upon their release.  This past Monday morning I purchased a Samsung Focus.  Now that I’ve had it and used it for a few days was it worth it?  Does it deliver on its promise?

Absolutely.

Now before my friends who were joking about the odds of me giving it a negative review get too excited about being right let me clarify.  I said it was worth the wait and that it delivers on its promise, not that it’s perfect.  WP7 is a first generation release.  With any first generation release there are going to be rough spots.  There are going to be features that seem obvious but are missing.  I got into this fully aware of the shortcomings and I really haven’t found any surprises.

I’m not going to go into any depth about individual features – that’s all available elsewhere and most of the major reviews say pretty much the same things.  Instead I’m going to highlight the pieces that have had the biggest impact on my overall impression of the phone.

On the Surface

The first thing I noticed about the Focus as I lifted it off the display stand is how light it is.  Compared to the iPhone 3G it’s a featherweight.  Some reviewers thought that the device felt plasticy but I haven’t really noticed.

When I woke up the device for the first time the Super-AMOLED display really brought it to life.  It’s bright, it’s crisp, and it’s vibrant.  Just for fun I held it side-by-side with the neighboring HTC Surround and the difference was immediately noticeable.  For a device geared toward multimedia applications the HTC’s display was a big disappointment.

The physical buttons are adequately sized and well placed although I still find myself trying to press the non-existent top sleep button like on the iPhone but I’m adjusting fairly quickly.  I haven’t had much occasion to use the dedicated camera button but it’s definitely a welcome touch as is the LED flash when used from a moderate distance.

There are only two things that I’ve found annoying about the Focus hardware.  First, the power connector is located at the top of the device making it difficult to use when plugged in for charging or syncing.  Second, the lack of a silent mode toggle switch means turning off the ringer takes four button presses.

After three days of usage I’ve found the battery life to be a tad short but still acceptable.  I can generally make it through the work day using around a half charge.  I plug it in on my way home and it lasts the rest of the day pretty easily.  A good overnight charge and it’s ready for the day.  The fact that the battery is user-replaceable is a welcome change from the iPhone.

Generally speaking though there’s very little that makes the hardware stand-out.

It’s What’s on the Inside that Counts

The Windows Phone 7 operating system is what makes this phone interesting.  Being apprehensive about this new OS is completely understandable.  Couple this being a first generation release with the well deserved hatred of Windows Mobile and the quick failure of the doomed from the start Kin and the apprehension about this OS is magnified.  Complaints about missing features or being a bit rough around the edges in some areas is also standard fare for reviewers of the first generation of any brand new system and WP7 is no exception.  After three days of heavy use on the phone I feel that I can say that the apprehension is unnecessary and with a few notable exceptions the “unpolished” areas have hardly been troublesome.

In the time that I’ve had the phone I’ve used most of the features at least a little bit.  I’ve connected to Windows Live, facebook, my work and personal email and calendars, and Xbox Live.  I’ve surfed the Web, I’ve made calls, I’ve sent and received SMS messages, posted status updates, taken a few pictures, played some games, and installed some apps.  About the only thing I haven’t done is played some music.

Now that I’ve exercised nearly everything on the phone in real-world usage I can highlight some of its strengths and weaknesses.  As I mentioned, I don’t want to simply restate what virtually every review has already said but some overlap is inevitable.  I’ll be commenting more on some of the nuances I’ve encountered along the way.

General Platform

The overall feel of the system is incredibly clean and intuitive.  Scrolling, panning, and zooming have all been smooth and snappy but there have been several occasions where the touch screen has treated swipes as taps and taken me into something I didn’t want to go into.  As mildly annoying as this can be the system is fast enough that tapping the back button causes minimal interruption.  That said, I do find myself missing the back button quite regularly but that’s due to me not being used to the button positioning.

Of all of the platform wide controls the keyboard really stands out.  The keys are responsive and the predictive text is both unobtrusive and useful.  The dictionary even includes proper names!  I already find myself typing faster on the focus than I ever did on the iPhone.

As many reviewers have noted one notable feature that’s missing from WP7 is copy and paste.  When I first heard about the feature being cut from the initial release I was baffled.  It seemed like a huge mistake and I knew that reviewers were going to include it in their list of cons but after using the phone for a few days I’ve hardly noticed that it’s not there.  The “smart links” that make the system components work together so seamlessly have almost eliminated the need for it.  I’ll still be happy when it’s added though.

People/Contacts

The People Hub is easily one of the best features of WP7.  I like this feature so much I’ve placed its Live Tile in the upper right corner right next to the messaging tile.  At this time the People Hub integrates contacts from address books, facebook, and Windows Live.  As I added my accounts I found that the software did a really good job of linking the “duplicates” under a common contact.  For those few exceptions where it didn’t link them manually establishing the link is just a matter tapping the Link button and browsing for the contact.

I have several hundred unique contacts across all of my accounts.  Scrolling through all of them on the all panel can be cumbersome but there are three alternatives.  One method is to jump to a letter of the alphabet by clicking one of the letter icons.  We can also tap the search button and start typing.  Both methods are quick and easy.  Frequently accessed contacts can pinned to the start screen for one tap access.

Individual contacts show their aggregated information (determined by linkages) on the profile panel.  This makes it really easy to interact with that person be it through phone call, text, email, or other available methods.  If the contact is linked to a social networking service the profile panel will show their most recent activity and there will also be a what’s new panel that shows the contact’s recent activity across all sites.

Like many others my biggest complaint about the People Hub is the lack of integration with services beyond Windows Live and facebook.  I’d really like to see support added for these, particularly twitter and flickr and I know others want more too.  In fairness though, this really is the first phone to offer this level of integration with any social networking site at all.  The fact that it feels so natural that users are already demanding more speaks volumes.

My other complaint with contacts is that there doesn’t seem to be a way to easily share contacts nor does the phone properly handle any received .vcf files.  My wife tried to send me a .vcf file from her iPhone through both MMS and email.  For MMS the phone said the message contained content that couldn’t be displayed.  The email showed the attachment and opened it as a contact but the only information it contained was the contact’s name.  Hopefully support for .vcf files will be added.  Being able to merge contacts with information contained in a .vcf would be a big plus.

Email/Calendar

The email and calendar support is pretty strong.  I don’t really care about the lack of a unified inbox or message threading though I know some people do.  I would prefer to just have a single mail app that listed my inboxes individually rather than having a separate tile for each one.

Each inbox has panels for viewing all, unread, flagged, and urgent messages.  Composing a new email works as expected.  One stand-out feature is the ability to select an attachment (read: photo) from the new message panel.

The calendar is really well implemented.  The only thing I’ve noticed missing is a week view.  The fact that the agenda is integrated into the lock screen is a huge plus.  The “I’ll be late” button is a nice convenience feature but I haven’t used it yet.

One of the nice subtleties that illustrates the attention to detail is the use of typography rather than icons to distinguish various statuses.  In place of icons to identify unread messages WP7 uses a colored, bold subject line and color coding to identify the source calendar for a calendar item.

Web Browsing

Gone are the days of the mobile version of Internet Explorer.  WP7 comes equipped with a hybrid of Internet Explorer 7 and 8 for a more desktop-like experience.  This version even supports “tabbed” (I use the term loosely because this is still a mobile platform) browsing.  In general the browser works quite well.

By default the browser will display the mobile version of a site if one is available.  This can be changed adjusting the “Website preference” option in the IE settings panel.  I switched mine to prefer the desktop version and have been really happy with the result.  Of the sites I’ve viewed I haven’t noticed any real problems aside from one site that didn’t fully build the contents of a canvas tag.  I was pretty impressed with how well it handled an iframe on another site.

One minor annoyance is that although the browser supports landscape mode the address bar is inaccessible there.  I really haven’t found this to be too troubling but I can see where people that prefer browsing in landscape would find it irritating.

Something slightly more obnoxious is the search.  That’s not to say that the search doesn’t work well because it does – it is Bing after all.  What’s annoying is that entering search criteria into the address bar switches over to the search app to display results and clicking any of the results jumps back to the browser but opens the page in a new tab rather than reusing the original tab.  This leads to a lot of unnecessary tab cleanup.

There is currently no Flash support and although the phone’s development platform is Silverlight the browser doesn’t support it either.  The lack of Flash and Silverlight support is a bit of a disappointment but it’s not the biggest problem.  I’ve been managing just fine without either technology on the 3G for over two years.  The real problem, the one problem with the phone that I actually get angry about, is that the vast majority of videos aren’t accessible from the browser!

Want to watch something on YouTube?  I hope you’re using the mobile site because they won’t work on the desktop version (you can change the URL from “www.youtube.com…” to “m.youtube.com” as a workaround).  Found a site with a Flash video?  You’re out of luck.  To me this is easily the phone’s biggest weak spot and I really home Microsoft addresses it soon.

Marketplace

The marketplace works basically as one would expect.  The fact that apps, games, and music are all available through a single utility is a nice touch.  The try before you buy model is probably the best marketplace feature.  I’ve already downloaded and installed a few things (mostly games) that way.

Of the free apps I’ve already installed:

  • Flickr Manager
  • IMDb
  • Netflix
  • Slacker
  • Twitter
  • WeatherBug

Other sites have already remarked on most of these apps pretty heavily.  I’ll readily admit that I haven’t used most of them all that much yet but there are a few things to highlight.

If you’re a flickr user you’ll immediately start wishing for flickr integration in the Pictures Hub.  Flickr Manager partially integrates into the Pictures Hub as an “extra” so you can upload photos to flickr without having to manually open a separate app first.  When selecting Flickr Manager from the Extras option the app will load and automatically go to the upload screen with the image already selected.  It’s not as tight as a native integration but it’s a step in the right direction.

There are no native weather apps in WP7 so when I saw that WeatherBug already had an app available I thought I’d check it out.  I’m not one that normally cares much about the weather but WeatherBug could change that.  WeatherBug actually has a Live Tile that shows current conditions (sensitive to time of day) and temperature so unlike on the iPhone it’s not always 73 and sunny.

Games

The Games Hub has been one of the most talked about features of Windows Phone 7 for as long as I can remember.  Connecting to Xbox Live was easy but I found it interesting that I needed to download Xbox Live Extras in order to get the full integration.  It seemed odd that the extras pack wasn’t included automatically.

Have a game you find yourself playing frequently but tired of going through the Games Hub?  Long pressing a game tile in the Games Hub will display a menu that allows pinning it to the start page.  Once pinned the tile can be moved around like any other tile.

In the End

After reading so many reviews and watching so many demos I really had a good understanding of what I was getting into.  As a result very few of the “rough” features have surprised me.  Even with the big problems like playing videos from the Web or the combination of smaller annoyances like the lack of a silent toggle switch or lack of integration with services beyond facebook and Windows Live, I’m still incredibly happy with Windows Phone 7.  It’s ease of use is simply incredible.  The common UI and virtually seamless integration of the various components makes jumping between apps transparent.

Overall Windows Phone 7 is a great addition to the smartphone market.  It is already a solid product even in its first generation.  It’s certainly not for every user but it shouldn’t be ruled out as a contender.  I stand by my decision to switch and am looking forward to the first update.

[Update 11/11/2010]

Until this point I’ve only tried connecting my phone to my home WiFi network.  Setup with known networks is quick and easy but what if you need to connect to a network such as an enterprise network that doesn’t broadcast it’s SSID?  Just like with video, you’re out of luck at this time.  Not including support for connecting to hidden networks is a huge miss and will be a show stopper for many users.  Hopefully Microsoft will patch this hole soon.