Archives For Uncategorized

This past Saturday JD Meier posted some of the work we’ve been doing around Windows Azure application patterns on his blog. To date we’ve come up with 11 common patterns for Windows Azure. You can check out the patters here. Take a look and let me know what you think.

I’m Back!

September 7, 2010

After my last post I unplugged…completely unplugged…for three months! I did this for several reasons, but the main one was that I felt the noise to signal ratio I was getting from a number of inputs was way too high. I was overloaded with, what turned out to be, primarily meaningless, unactionable information. I’ve also been moving into a new role at my company, and the demands the role has placed on me requires me to be very efficient with my time. Spending my time sifting through information to separate the wheat from the chaff is a luxury I can no longer afford. To that end, I spent the past three months digesting J.D. Meier’s new book Getting Results the Agile Way and coming up with a strategy for making the best use of my time. There are several practices that I’ve come to rely heavily upon:

  1. Daily results The goal is to identify three, AND ONLY THREE, important outcomes that you want accomplish in a given day. Often times we try to accomplish more than we can in a given day, leaving us with a feeling of failure. The reality is that we’re simply failing to focus. By limiting our daily scope we can actually get more done.
  2. Brain dumps The goal is to factor your thinking from your chatter and reminders. At it’s essence, you simple take anything, and everything that is on your mind and write it down (either to physical or digital format – I prefer OneNote & Evernote). The result is that you relieve yourself of a certain psychic weight that enables you to focus on the important things.

I also hold a daily personal standup meeting. I know it sound a bit silly, but it helps me focus on my priorities for the day. Spending just 10-15 minutes to plan each day has helped me get a better handle on the day’s tasks.

During this three month period I also had the goal of getting a grip on my email. Like many of you I have a number of email accounts. Between my corporate, client, and personal email addresses, I have over 10 accounts to maintain. That can be a lot of information coming from a lot of different directions at the same time. Unfortunately, due to various, client firewall policies, consolidating these accounts into a unified inbox with something like Exchange Web Services {LINK} isn’t an option. I figured the best approach would be to process messages the same way for each account. I also set a standard of having zero emails in my inbox at the end of each day. To accomplish this, I once again turned to J.D. Meier. In case you don’t know who J.D. is, he is a legend within Microsoft for getting things done. The guy is a machine. He multi-tasks better than anyone I’ve seen. Several years ago J.D. wrote a blog entry on the Zen of a Zero Mail. I took his general approach, made some customizations based on personal work style, and applied to each my email accounts. I’m happy to say that as of today I’ve been experiencing the Zen of a Zero mail for a solid two months.

With all of that said, just because I’ve been silent here and other places, doesn’t mean I haven’t been busy. I’ve been spending a fair portion of my time getting immersed in Windows Phone 7 development. I have a couple apps that are near completion, and a couple of more that are in the early phases of development. I’ve also been working with J.D. Meier and the Patterns and Practices team at Microsoft on the following projects:

  1. Microsoft Developer Guidance Maps. The Microsoft Developer Guidance Maps Project is an effort to create a model and a map of resources for developer guidance. The goal is to simplify as well as better organize and share our catalog of developer guidance resources. We’re using this catalog as a way to model, prototype, and test ways to find, organize, and share developer guidance in a meaningful way. As part of the exercise we’ll be creating and sharing our maps of pointers to useful code samples, how to’s, videos, etc. for the Microsoft application platform.
  2. Windows Azure Security Notes. This is a collection of our notes and learnings from exploring the cloud security space and working through Windows Azure security scenarios.

There are also a couple of projects I can’t talk about just yet, but they bring together Microsoft’s cloud and mobile platforms in some very interesting ways. As these projects progress and clients are willing to share a bit more you’ll be the first to know.

I’ve also been busy prepping content for the following presentations I’ll be giving this fall/winter:

  1. Heartland Developers Conference
    • Silverlight Bootcamp
  2. Minnesota Developers Conference
    • Introduction to Windows Phone 7 Development
    • Tablets: The iPad and the Future of Mobile Computing
  3. Twin Cities Code Camp 9
    • Multi-targeting WPF, Silverlight, and Windows Phone 7
    • Getting Down with MEF – Silverlight Edition
  4. Twin Cities .NET Developer User Group
    • Getting Down with MEF
  5. Twin Cities Developers Guild
    • Getting Down with MEF – Silverlight Edition
  6. Twin Cities Cloud Computing User Group
    • Windows Azure Security Guidance

(I hope to see you at a least one of these great events).

I’m also working on a screencast series that I’m tentatively calling "Silverlight Sprints". It’s an adaption of my Silverlight Bootcamp class. The goals is to have a series of episodes (no longer than 10 minutes each) that will get you up an running with Silverlight development (both for the desktop and Windows Phone 7). The content and code for the series is complete I just need to sit down and record it.

Finally, I’ve also been asked to co-host this year’s season of the Spaghetti Code podcast with Jeff Brand. The format is going to be different than in seasons past. Each month we’re going to talk about what’s new in the Microsoft development space. Our first episode is up and you can listen to it here. Let me know what you think!

That’s it for now, but they’ll be a lot more coming soon. Stay tuned!

Gone Fishin’

June 1, 2010

As you may have noticed it’s been a little quiet around these parts lately. The silence has been the result of the arrival of daughter number three a little over three weeks ago. For the past two months or so I’ve been spending a lot of time with my wife, who was on strict bedrest, and my two girls. I was able to do a number of things with them that I’m not typically able to do due to professional commitments. However, I did have to put a number of things on hold and scale back on several others Now that things are starting to stabilize I plan on getting back into my usual groove…in September. I plan on unplugging, as much as possible, for the months of June, July, and August. During this time there will be no blog posts, no tweets, or no status updates. I did this last year and came back feeling very energized and excited. I plan on using the time to plan out the next year or so, finish up a side project, and pursue some non-technical interests.

With that said, I do have some talks already scheduled for this summer/fall that I thought I’d make you aware of before I signoff:

June 19th – I’ll be giving two talks at the Kansas City Developers Conference. One talk will be on Windows Phone 7, the other will be on Git.

September 8th – I’ll be teaching a four hour Silverlight bootcamp at the Heartland Developers Conference. The cost is a mere $25 for a half day of Silverlight, including Windows Phone 7.

September – The date has yet to be finalized, but some time at the end of September I’ll be talking about Windows Phone 7 at the Minnesota Developers Conference.

October 12th – I’ll be presenting Git at the Twin Cities Developers Guild.

November 4th – I’ll be talking about the Managed Extensiblity Framework (MEF) at the Twin Cities .NET User Group.
See you after Labor Day!

I typically don’t write about my job or my company in this blog. In fact, if you don’t include my about page, I haven’t written about either. You may know what I do from a technology perspective, but I simply haven’t shared anything about my job. Today’s events merit a brief digression from the typical technological ramblings of this blog to something a little more personal.

First, a little background. I joined RBA Consulting in December of 2006. I came to RBA from BORN/Fujitsu Consulting. My reasons for leaving Fujitsu were many, but chief among them was the fact that I didn’t want to work for a large multinational corporation where I was just another number. I wanted to work for a local firm that I could help build. I wanted to work for a company that valued its employees above all else. Several of my colleagues, who I have deep respect and admiration for, left Fujitsu to help start up RBA Consulting. After having conversations with Rick Born and Mike Reinhart, the company’s founders, I realized I had found a home and decided to cast my lot in with them and hop on board.

When I joined we were small. I remember having company meetings in Rick’s office, sitting on a couch, enjoying some good conversation and beer. There was a lot of energy and excitement in the company. Everyone had a vision of what the company could become. As we entered our second full year in business in 2007 it was time to start delivering. We were doing good work and starting to hit on all cylinders. Then the challenge came. Every start up, has it’s challenges, and RBA was no different. I won’t go into all the details here, but one of the challenges made me question my decision to join RBA. In fact, I strongly considered leaving. However, through many conversations with my amazingly supportive wife, I realized that I probably would never again have the opportunity to work for and with such a great group of people. Plus, I would have been foolish to think that there wouldn’t be difficulties to overcome with a start-up. With those realization in place, I went “all-in” with RBA and made the decision that I was in it for the long haul.

2008 and 2009 have been good years for me and for RBA. Sure, we’ve faced challenges due to the state of the economy, but I think we’ve weathered these turbulent times quite well. What continually impresses me with RBA is Rick and Mike’s continuous commitment to employees. Let me give one very personal example. This past July was my 10th wedding anniversary. Ann Marie and I were really looking forward to the occasion. Reservations were made, babysitting arranged, etc., etc. Then one of my clients called. They were in a bad spot. They were trying to perform a migration over the weekend and things had gone south, way south, I’m talking  Tierra del Fuego south. They wanted to know if I could help out. Ann Marie knows the deal with consulting. Sure she was disappointed, as was I, but she just nodded her head. I rescheduled our reservations and got to work. The ordeal lasted 48+ hours. News of the event reached Rick and Mike. Rather than just giving an acknowledgement for stepping up to help a client, they insisted, strongly insisted, that they make things right for Ann Marie and myself. I said it wasn’t necessary, but I knew I was in an argument I couldn’t possibly win. The result, RBA picked up the check for an incredible 10th anniversary dinner. You might think to yourself, “Well that’s nice, but in the big picture it’s only a few dollars.” I’d say true, but does your company care enough about you and your family to do the same?

Which brings me to today. As I mentioned above, I have deep respect, both personally and professionally, for my colleagues at RBA. Which is why I was incredibly honored when I had been told that they had selected me as a Partner! A Partner! I was literally left speechless (part of that had to do with the excellent set up job done by one Mike Jones – you will pay for that ;) ). When your peers appreciate the work you do so much that they want to elevate you to a status you hadn’t anticipated achieving you are truly humbled. I’ve worked hard this year, and the past two years, to help build this company, but I never did so with the expectation of becoming a partner. I did so because I want this company to succeed. I did so because I want our people to succeed.

There are a lot of people who helped me get to this point and I want to take a moment to thank them:

  • My wife, Ann Marie. For supporting me through late nights, long weekends, working “vacations” and for helping to balance out my life and keep things in perspective.
  • My girls, Maya and Sophia. For helping me to remember that life should be fun.
  • My parents. For pushing me to succeed spiritually, personally, and academically. They laid the foundation for who I am today.
  • Mike Jones. There are a lot of people at RBA I want to thank, but Mike deserves particular attention. I know that no matter how bad things get, he’ll always have my back.
  • Everyone at RBA, both past and present. Without the support and camaraderie of such a great group of people this would not have happened.

OK, ok, I see the red light flashing and the orchestra is starting to play, so I’ll stop now.

Time to write some code…

I just scheduled the third Minneapolis nerd dinner for Wednesday June 24th at 6:00 PM. This time we’ll be meeting at Punch Pizza in St. Louis Park. To find out more details and RSVP for the event head on over to http://nerddinner.com/578.

FINALLY!!!! I’ve had the code for the post ready to go for quite some time, I just haven’t had time to write it up properly due to a number of external commitments.

(If you’re new to this series I recommend catching up on the first set of posts here.)

In my last post I built out the mapping portion of the Silverlight browser. In this post I’ll build out the Navigation and History management pieces of the browser. This post is the entire reason I started this little experiment. Let me give you a little background in case you haven’t been following the series.

There are two features in Silverlight 3 that I’m excited about. The first is the Out of the Browser experience (don’t you dare call it SLOOB, seriously just don’t). This allows you to install* Silverlight apps onto a client machine that can run outside of the browser* in a disconnected mode.

*install – It doesn’t install in the typical sense, you won’t see anything in add/remove programs. It places a shortcut on your desktop and/or your programs menu. This shortcut then calls a launcher to get things up and running.

*outside of the browser – While the app isn’t technically running in Firefox, IE, etc. it is still operating in a browser sandbox, which means no direct access to the local system.

The second feature I’m excited about is the navigation framework. This framework allows you build structured apps that can levergate the browsers history and navigation functionality to make moving around your app more intuitive for your users. Additionally, this framework allows you to leverage things like deep linking and SEO for your Silverlight apps. Pretty dang cool if you ask me!

The problem is when you marry these two features, that is build a navigation app that can run out of the browser. Once you take the app out of the browser, your user no longer has access to things like the forward and back buttons, the address bar, history, favorites, etc. Since Silverlight is all about great and consistent user experience (UX), this is problem is a major shortcoming. This project attempts to bridge the gap.

OK, enough rambling, let’s get to the code. I started off by adding the Silverlight.Navigation.History project to our solution. Here’s what the project looks like:

slbhistory001silverlightnavigationhistory

There’s nothing too complex, but here’s a brief description of each class:

HistoryItem. This represents a page/control/whatever you’ve navigated to within the application. There are only two properties, a uri (where the thing is) and a timestamp (when you went there).

HistoryItemCollection. Yup, you guessed it, this simply a collection of HistoryItem objects. There are a handful of methods in here that return items based on date (i.e. today, this week, last week, etc.), but that’s really it.

HistoryItemComparer. This is a helper class used by HistoryItemCollection. It implements IEqualityComparer<T> to compare HistoryItems. I implemented this class because I wanted the methods in HistoryItemCollection to only return distinct HistoryItem objects by uri. So the Equals method of this class simply inspects the uri’s of two objects to determine equality.

HistoryManager. This is an abstract class that is responsible for managing an application’s history. This class provides mechanisms for adding and removing items for history as well as getting all items for the application’s current session. This class also defines abstract Save and OnLoad methods which inheritors are responsbile for implementing. The intent of these methods is to read and write to the inheritors choice of peristent storage.

IsolatedStorageHistoryManager. This is a concrete implementation of the HistoryManager class. This class saves and loads history to and from isolated storage. Nothing tricky about it.

Now that we have our objects in place, let’s take a look at the controls. The first thing I did was to start playing around with the NavigationToolbar control. Here’s how it looks now:

slbhistory002navigationtoolbar

The first thing you’ll see is a Back and Forward button. These are akin to the same buttons you’re used to using in the Internet browser of your choice. As you start to move around the Silverlight application these buttons will become enabled/disabled appropriately. To make this happen I simply hook into the Browser control’s NavigationFrame Navigated event set the properties based on the NavigationFrame CanGoBack and CanGoForward properties.

Next you’ll see a ComboBox that contains a list of all uri’s the user has visited during the current session, with the current uri selected. This data comes from the HistoryManager class discussed above. (As I write this I realize I intended this to be a smart combobox, allowing users to type in uri’s, but I only implemented a simple combobox. I’ll need to address this in a future release.)

Finally we have the History button. This will pop-up a window that display all the uri’s a user has visit during their multiple uses of the application. Once again, this data is provided by the HistoryManager class. This control also allows the user to clear history. Notice, I didn’t implement a confirmation when you clear history? This was intentional. Read the book Why Software Sucks and What You Can Do About It <<INSERT LINK>> to find out why.

To make all this work is pretty simple:

 slbhistory003implementation

In my demo project’s Application_Startup event handler, I just instantiate a new HistoryManager object (in the case of the demo we’re using the IsolatedStorageHistoryManager object) and provide that to the constructor of the Browser object along with ApplicationMap. Here’s what we get when running out of the browser:

slbhistory004outofbrowser

(Notice the Back and Forward buttons are enabled. Also we have a list of uri’s we’ve visited during the app’s current session.)

slbhistory005outofbrowser

(Here we see the app’s history.)

I’ve issued a new release on the CodePlex site for this project that contains the functionality discussed above. You can download the release here.

I’ve also updated the app up on my website here. Per Tim Heuer’s post on Silverlight 3 beta install guidance, I customized the install experience to let folks know if they need Silverlight 3 and what it means to install the beta version of Silverlight 3 at this point in time.

Next up I’ll build out a way to manage favorites.

Hi, my name is Adam, and I am a betaholic. Seriously, if Microsoft puts new CTP’s, betas, or RC’s out there, I’m going to install it. I can’t help it. So when Microsoft released the first beta of Visual Studio 2010 to MSDN subscribers yesterday (look for a public release later this week), it shouldn’t come as a surprise that the first thing I did when I got home was to install it on my Windows 7 RC machine and take it for a test drive.

I hadn’t really planned on writing any type of review of the beta, but when I saw this:

Silverlight Project Creation Multitargeting

I just couldn’t help it. That’s right what you see above is the ability to select which version of the Silverlight runtime I want my new Silverlight app to target when creating the app. Additionally, I can go into the app’s property pages after it has been created and changed the targted runtime:

 slmultitarget03

Previously I had been using Amy Dullard’s and Shawn Wildermuth’sscripts to flip back and forth between Silverlight 2 and Silverlight 3 development. These scripts do the job, but it’s not a quick 2 second change. You have to wait one runtime and set of tools to uninstall and another runtime and set of tools to install.

One of the things I did notice is that when working with a Silverlight 3 app in Visual Studio 2010, none of the Silverlight 3 control were in the toolbox. I was a bit confused at first, but I simply right-clicked on the toolbox, selected choose items, and naivgated to the Silverlight tab:

 slcomponents

From there it was just a matter of selecting the Silverlight components and going off to the races.

(P.S. – I haven’t forgotten or abandonded the Silverlight Browser project. I’ve been a bit swamped with work for the past couple of weeks, and haven’t had much time to dedicate to the project. However, I am wrapping up a new release, in VS2010 of course, and hope to have it published at the end of the week/beginning of next week.)