Wednesday, October 31, 2012

Build Day 1: Surface, WP8, TFS, Windows Design Guidelines

Day 1 of Microsoft Build was in some way disappointing and at the same time exhilarating. To be honest, I was expecting to be updated on the new stuff Microsoft plans for the near future. The fact that the session list was not disclosed until a day ahead also helped reinforce that expectation. But instead, we got lots and lots of sessions on building apps for Windows 8 and Windows Phone 8. Maybe my expectations on Build are clouded with my experiences attending the Professional Developers Conference in 2008 and 2009. Maybe another problem is that Build is paid by the Windows Division whereas the PDC was mostly organized by the Development Division (and we all know how Steven and Somas get along together). On the other hand, Build 2012 did deliver on the hardware side by giving each and every attendee a Surface RT as well as Nokia's flagship, the Lumia 920. That's not something anybody dared dreaming off. And yes, we all know we're going to be Microsoft's marketing tool for the next months, but it's still incredibly cool.


Anyway, I started the day listening to Buck Hodges, product manager of the TFS suite, talking about how they employ Scrum within their department. I was happy to hear that they approach product development similarly to how my current client is doing it. Their cadence is to plan 3 week sprints concluded with a one week verification before they release to production. They rely heavily on automated testing, but at the same time balance 6 developers with 5 testers. Granted, their teams are a bit on the big side (5 + 6 + 1 or 2 product managers), it clearly shows how much they value quality. Buck also shared how they deal with branches. In general they try to avoid feature branches (which resonates well with Martin Fowler's opinions on that), and most changes are directly committed to the main branch. The only exception to this is when commits are too disruptive. As an example of this, Buck mentioned the data access changes required to complete the transition from the relatively expensive SQL Azure to Azure Table Storage.

The other session that was worth my time was dealing with web standards. It was a good reminder of how standards compliance works, what browsers are being used currently, and how libraries like Modernizr can help you with that. The highlight of the session was the reference to, a website dedicated to testing your website against a myriad of browsers. I also attended some sessions on the user interface and interaction design of Windows 8, but most of what was told is already common knowledge. Only people who have been living in a cage for the last year (one deep enough to not receive any Wi-Fi signals), may have heard something new. Let's hope the sessions planned for day 2 are a bit better.

Planning the Windows 8 Cookbook

I'm currently at Microsoft's Build conference and we're all receiving a Surface RT tablet. That means it's a great moment to talk about my plans for the Windows 8 Cookbook. I know, I know, it's a cheesy name so just be aware that I'm open to better suggestions. Since Silverlight is mostly dead, I've decided to revive the Silverlight Cookbook by rebuilding it as a Windows Store app instead. This time I'm also going to get some help on the UI design so hopefully it will finally get a decent looking front-end.

Another thing I'm considering is to host the entire project on GitHub. I've already build up some experience with Git on CodePlex as the result of a recent conversion of my Fluent Assertions project, but I'd like to get to know how that compares to the GitHub experience. Whether or not it's going to be CodePlex or GitHub, I will be accepting pull requests. And if you are interested in contributing a bit more directly, I'm also looking forward to people who want to help me build the project.

To give you some more context on the technical platform behind the cookbook, here are some of the things I'd like to use:

The Cookbook is supposed to demonstrate how to build line-of-business applications based on the Windows Store platform. That means it's going to use some design decisions that are completely overkill for this particular example, but should be very relevant for real-life projects.

One thing on which I'm still in doubt of is the data access strategy. I'm well aware that Event Sourcing shouldn't be used without careful considering. But the fact of the matter is that I'm doing a project right now where we wanted to use RavenDB, but decided to go for Event Sourcing using a traditional database instead. These are the four choices I have in mind.

Aggregate storage with…

  1. SQL Server using NHibernate
  2. RavenDB for storing the aggregates and using its Lucene-based indexing engine for querying

…or Event Sourcing using Jonathan Oliver's EventStore combined with Lokad.CQRS's aggregate design

  1. Using SQL Server as its backing store as well as a query store.
  2. Using RavenDB for storing both the events and the query models, optionally adding faceted search options provided by Lucene.

I have to admit, this seems to be quite an ambitious project to be doing during free evenings. But I'll be reusing a lot of code from the Silverlight Cookbook, so that should save some time.

Let me know what you think of the direction I plan go in. You can email me, tweet me, or spend a few minutes of your valuable to fill in this survey.

A weekend in Emerald City

This week is Microsoft Build 2012. For those who don’t know what that is, it’s Microsoft largest and most important annual event for sharing the future of the company’s plans around Windows, Windows Phone and their development platforms. Since with most trips to the US, it’s usually cheaper to take a flight on a Saturday than one on Monday, even if you consider the additional lodging costs. Since the area around Microsoft’s campus in Redmond isn't particularly exciting, me and colleague Jonne Kats decided to spend the first few days of this week long trip in downtown Seattle.


After a 2.5 hour delay caused by a allegedly flat tire (that ended up being a sensor error after all), we arrived at Seatac Airport at around 14:30 local. We then had to pick up our ride for the week, a 2012 Chevrolet Malibu LT. Not a particular nice car, but it’s considered a full-size sedan so that’s more than enough to carry our luggage. The car didn’t come with a GPS, but to our surprise Nokia Drive did its job better than expected. Just imagine how glad I was that I loaded the maps of state Washington prior to our trip. And since Nokia Drive 3.0 doesn’t require a live internet connection anymore, this didn’t cost us anything.


That first night we decided to visit Capitol Hill to see what Halloween in Seattle is about. Having visited California a few times, I was surprised to see how few people were dressed up over here. It must have been the pouring rain, or the cold. We decided to take a quick bite at a Mexican restaurant we ran into because somebody noticed our indecisiveness. The fun part started when I ordered a Mojito to compensate for the lack of sleep. As you may know, in the US you cannot buy alcohol if you’re under 21. Now I’ve been called at for having a baby face….but… that was 20 years ago and I’m 39 now, Initially they refused to serve us that hard needed Mojito. It took us quite a lot of negotiation to finally get a single round. Anyway, after diner we tried to enter a small Halloween-styled bar. But again we were kept out because we didn’t bring our passport. This all feels a bit hypocrite which somebody pointy stated on Facebook: you get a free gun with a new bank account, but you cannot get a decent drink without a passport!


The next morning, after a good night sleep, we were happily surprised with a clear blue sky. So after a quick breakfast at the local Starbucks, we planned a small road trip through the greater area of Seattle. Oh, and as a side note, where we thought to have seen Starbucks’ at virtually every corner just the night before, now we had to really search to find one. Anyway, we took the i90 to North Bend to visit one of those Seattle outlet factories and then to another one in Marysville just to enjoy the scenery of Washington in the Autumn.


Obviously we grabbed a genuine home-made burger along the trip, thereby carefully avoiding any fast-food chains. And now that I mention it, the US is really a country of opposites. We regularly noticed billboards that stated that 1 of 6 US citizens is in hunger. But at the same time you’ll find these food centers with shops like McDonalds, Burger Kings, Denny’s, Taco Bells and Subways virtually after few miles. In fact, it is easier to get a burger than to find a gas station. How can anybody be hungry here?

After about 250 km of driving we went back to the hotel and prepared to get some dinner somewhere. With our passports in our back pockets we took a cab to the waterfront to see if there was anything to do. Fortunately our cab driver understood our intentions and proposed to bring us to Belltown, an area known for great restaurants, bars, etc. But… was mostly abandoned. We selected a random Sushi bar and actually enjoyed a great mixture of Japanese and Hawaiian cuisine. But when a group of large sized American geeks started up the Karaoke (granted, they could definitely sing), we left to visit a large bar across the street to grab a beer. The girl behind the bar explained to us that just the evening before, that bar was packed with 1300 people whereas now it contained about 15. Go figure….


As suggested by the bartender, we took another cab to Queen Anne’s, presumably another place were you’ll find a lively crowd……..NOT. Nevertheless, we hooked up with a group of friends and spend the remainder of the evening discussing the economy, politics and the apparent uptightness of Seattle citizens. We had a lot of fun, regardless of the relative quietness of that evening. Bedtime was a lot later than planned.

The Monday concluded the free time prior to the event in which we visited Pike Place Market and then traveled to the north to explore the area of Mount Rainier. We did visit some shops but then decided to drive to Redmond to preregister for the conference.  To avoid traffic, we took an alternative road from Bellevue to Redmond and enjoyed the view.


Again, I can highly recommend renting a car when you are in the Seattle area, even if you need to stay downtown. You miss so much of the great environment if you rely on public transport only. All in all, not a bad start for this exciting week in the US.

Monday, October 08, 2012

Fluent Assertions 2.0 is out of the beta phase

After six weeks of beta testing, it is time to remove the beta mark from Fluent Assertions 2.0. Since the beta was released, we fixed several little bugs that you won’t notice, but the original release notes still apply. Release 2.0 adds a lot of new features and improvements, most noticeably the new syntax for comparing complex object graphs and support for .NET 4.5, Windows 8 Apps and Windows Phone 7.5 (Mango). You can get a copy of the zip through the CodePlex download page, but I suspect most of you will use the NuGet package instead.

For those who’d like to provide contributions, make note that we are now on a GIT repository, so we will accept your pull requests. And as usual, for questions, remarks or suggestions, you can use the Discussions page, StackOverflow, or you can contact me directly by email or Twitter.