Development for Office and SharePoint Moves Forward

Over the next couple of months, you’re going to start hearing more and more about the new App for Office model. In a nutshell, this is a new model for developing and deploying applications to Office 2013 and SharePoint 2013. The main idea is to remove the installation requirement for applications onto a server while still providing the full range of functionality to the applications. Is this case, the servers I’m talking about are the Exchange Server and the SharePoint farm.

At the heart of the Apps for Office/SharePoint model is Web technologies. And while it’s a major simplification, the general approach is as follows: the application (i.e. Word, Excel, SharePoint) hosts a control that displays a Web page. That Web page is the ‘app’. The site behind that Web page is hosted wherever it wants to be, but most importantly it does *not* have to be hosted in the SharePoint or Exchange environment. The Web page has the ability to interact with the application through a number of techniques, including client-side JavaScript and/or server-side code (ASP.NET, PHP, etc.). From the perspective of the user, it does *not* appear that the app is a Web page, but it feels like it is directly integrated with the application.

As you might guess, this is not a complete or thorough description of the process. But if you want to learn more, you can join me on Dec 12 in Charlotte (register here) or Dec 14 in Toronto (register here). And if those dates/places don’t work for you, keep your eyes open for new dates across North America starting in February.

Creating Engaging Apps - Web vs Native

If you are writing an app for the general public (as opposed to one you’re writing for you in your organization), one of the first questions you face is whether you create it as a Web application or develop it for your target platforms using native code (XAML/HTML5/C#,Objective C, Java). There are a number of reasons I can think of to use native code over Web technologies. Better performance. Better integration with the device. Able to take advantage of functionality that is specific to the device (as opposed to coding to the lowest common denominator). By the same token, there are reasons to utilize Web technologies instead of native code. Faster time to market. Easier deployment. Consistent experience across all platforms.

But what does this have to do with creating engaging apps?

Nothing!!!

That’s right. The choice of technologies that you use is not what makes an application engaging. Consider the following tips for an engaging application:

Use the power of faces – People love faces. We have evolved so that we have specific wiring in our brain with the sole purpose of recognizing faces. We do it so well, we see faces where they don’t exist (such as in clouds, tree bark or grilled cheese). Take advantage of this by putting faces on your site. Even better, get the face to look at at important part of your site: people instinctively follow the eyes of the face.

Use food, sex and danger to attract interest – If you have ever heard me teach a courses, you will have heard me say (right at the very beginning) that when someone sees something new, they place it into one of four categories: can I eat it, can it eat me, can I mate with it, and everything else. If you want your site to be considered interesting, put it in one of the first three categories.

Tell a story – We learn through stores. It’s how we teach our children. It’s what we see in movies. Stories are a big part of how information is conveyed to us. Take advantage of this in your app. If you have information to give to the user, put it in story form. It doesn’t matter what medium you use (words, pictures, music), but using a story narrative will help your user understand and retain your information.

Build commitment over time – I’m guessing that most of you did not propose to your wife on the first date. It takes time for both people to make sure of the commitment that is implicit in marriage. The same is true of business. You don’t ask for a 6-figure sales order on the first cold call. Or, if you do, I’m guessing your success rate is low. :) Instead, let the relationship build over time. Let the user choose how they want to interact with you (RSS, Twitter, Facebook) and make sure that you don’t take advantage of the trust that is implicit in that interaction.

See? Nothing at all about technology. Engaging apps is all about the design sensibilities and visual aesthetics of the app. Focus your energies on that. Get that right and the choices you make for technology, so long as it doesn’t get in the way, because ancillary at best.

Keeping your Free Costs Down

If you have an MSDN subscription, then you have access to Windows Azure functionality at no cost. Now the level of functionality (in terms of storage, compute hours, etc) depends on the level of your MSDN subscription. But even at the lowest level, there is still enough to let you thoroughly play with the features that have been made available.

Unless, that is, you’re not careful.

I actually had my free subscription run out of money last month. Not because I was doing anything exceptional with it. But because I hadn’t thoroughly cleaned my toys up after I was done. So let me give you a couple of pointers on what you might need to clear up. Specifically in the area that got me…virtual machines.

The Virtual Machines that are available in Windows Azure are sweet. You can select an image from a gallery that includes Windows Server 2008, Windows Server 2012, SQL Server 2012, BizTalk and a number of Linux distributions. Nice to work with, especially as you’re testing out the new features. But when you’re finished with the machines, deleting them does not completely clean up. Specifically, the creation of a virtual machine already creates an image of that virtual machine (the VHD file) in Azure storage. And this image continues past the deletion of the virtual machine. Taking up storage space, In my case, I had created a 1TB VM, which left 1TB of storage on my blob storage. Which ate through my 45GB/month limit very, very quickly.

To clean up completely after setting up a new VM requires a few steps more than deleting the VM itself. Go into the Windows Azure portal (http://manage.windowsazure.com) and get to the Virtual Machines section. Even though no virtual machines are defined (I had already deleted it), click on the Disks section. Now you’re see the OS disk related to the VM that you had created (and deleted). This is the source of the ‘offending’ storage.

image Once the disk is selected, click on the Delete Disk icon and Delete Associated VHD from the menu. This option removes not only the disk, but also cleans up the item kept in storage. If you hadn’t deleted the VHD, the disk would be removed, but the image would still be maintained in storage. Keeping the meter running, so to speak.

While you have not gotten rid of the ‘costly’ portion of the delete VM, to complete the clean up, go back to the main Windows Azure portal and get into the Storage accounts. Then select the storage account for the VM (for me, it had a name like portalvhds95qxznsn1dlm8) and click on the Delete icon. This will completely clean up the VM.

By the way, if you try to delete the storage (or any of the containers in the storage account or even the blob within the container), you will be unable to do so until the Disk is deleted. The error message if the Disk is still around is “There is currently a lease on the blob and no lease ID was specified in the request”. Not particularly clear what’s happening (as I can tell you from experience). But hopefully by including it here, the next people who run into the same message will have a better idea of how to address it.

Removing Another User's Lock in TFS

One of the joys of distributed development teams is unexpected locks. In this particular case, the file was locked by a very distributed developer. And I needed to get it unlocked, as the lock was preventing a build from running. Oh, and I was using tfspreview.com as the source control repository.

Step 1 – Determine the workspace

In order to perform an unlock/undo, you need to know the workspace and user involved. To find out the workspace for a user, there is a workspaces option for the tf command line prompt. So open up the Visual Studio Command Line window and navigate to your local mapped directory for the project. This navigation is important, as it allows you to minimize some of the command line options that we will be using.

Once you’re in the directory, execute the following command:

tf workspaces /owner;domain\userid

In this case (since we’re using tfspreview.com, the domain\userid is actually the Live ID for the user that currently holds the lock. The output from this command includes the name of the workspace in question.

Step 2 – Undo pending changes (thus releasing the lock)

Another tf command is required for this step. In the same command line window, execute the following command:

tf undo itemspec /workspace:workspace;domain\userid

In this case, the itemspec is the path to the locked item (for example $/MyProject/Directory/fileName.txt), the workspace is the name of the workspace identified in step 2 and domain\userid is the login id (or Live ID in our case) of the person who owns the workspace (and who has the item checked out).

And voila. The lock is undone and I’m now free to wreck havoc…er…check in my code.

A Rose by Any Other Name

I’m just putting the finishing touches on a book (Professional Visual Studio 2012 from Wiley) and as a result, I’ve had to learn precisely what the names of the UI formerly known as Metro would be. And you can find out the ‘answer’ in the table below, just for future reference.

Old Term

New Term

Metro apps Windows Store apps
Metro design language Microsoft design style language
Metro style principles Microsoft design style principles


If Modern UI/design was your thing, any phrase involving “Modern” was also converted to “Microsoft design/style…”

None of these terms roll off the tongue at all (and I’ll still get caught calling it Metro when I’m speaking). But this is the word…at least for now.

Getting Stuff Done

For whatever reason, the beginning of September has more of a “new year” feel to me than the beginning of January. Actually, I know the reason and it begins with four school age kids. :)

But regardless, I’ve been trying to focus for the last couple of weeks on execution and follow through. Trying to change just a little on how well I complete tasks, set priorities and just get stuff done. While I’m not going to suggest that any of what you’ll find below is original or mind-blowing, I believe that when it comes to self improvement, little steps are the way to go. So here is what I’ve been trying to improve, bit by bit.

Schedule it or forget it - We all live and die by our calendars. One of the joys of a smartphone is the ability to stay close to your schedule. I get a warm fuzzy knowing that I can quickly find out where I need to be next. And most of my unproductive moments are when things happen outside of this process. If you’re working on a team, make sure that you’re using a shared team calendar. Or at least, share your Outlook calendar so that others can see what you’re up to. Include team deadlines in this calendar. Put project update meetings (preferably regularly) into the calendar. Make them weekly to drive the pace of progress on the project

Prioritize to the nth degree - Do you have all the time you want to do everything that you want? No? Not surprisingly, you’re in the same boat as everyone else. So pick the stuff that matters and focus on that. If you choose to do only important tasks, you’ll find a couple of weird things happening. First, many of the non-important tasks will just take care of themselves. Second, you’ll feel like you’ve accomplish stuff during the day. And that’s a feeling worth cultivating.

Any decision is better than no decision – There is rarely an obviously best path to take. And even more rarely do we have all of the information that we need to choose that path. Reality is fuzzy. And there are times that testing and taking tentative steps is not possible. So just make the decision. A full-scale, all-in decision. Decisiveness is better than procrastination, because action leads to learning, which in turn creates better decisions. And if your on a team, it’s even more important. People are waiting to know where to go and what to do. The decision energizes the team and gets them moving towards their goal. 

Create new habits – While I was on vacation in August, I read a book on Habits. Habits of all kinds and by all people and organizations. Turns out that much of what we do over the course of the day is by habit. Just realizing how habits are formed and reinforced can help you chart a new course of action. By the way, the book is “The Power of Habit: Why We Do What We Do in Life and Business” and it’s well worth the read

These are just a start. But I made a decision, focused on small, but important steps and did what I thought was the most likely to see success. So far, so good.

What's New with SQL Server 2012?

Like any newly released version of software, Microsoft SQL Server 2012 brings a host of significant changes to Microsoft’s enterprise data platform. And, in this case, the changes are not only in the features but in the editions that are being offered as well. And there is a new certification model .And many performance, business intelligence and development enhancements. So take a look at the list of features and see which ones matter to you.

Data Quality Services – Clean data is happy data. And Data Quality Services (DQS) is a knowledge-based tool that helps ensure your databases contain high-quality, correct data. DQS performs data cleansing, which can modify or remove incorrect data. It also does data matching to identify duplicate data and profiling that intelligently analyzes data from different sources. Keeping your data happy has never been easier.

Changes to T-SQL – There are a number of T-SQL enhancements that have been introduced in SQL Server 2012. My personal favorite is TRY_CONVERT for data conversions. But that’s a personal preference. Others might be partial to OFFSET and FETCH (for data paging), a new FORMAT() function (data formatting made easier), and a new THROW operator (exception handing .NET style).

SQL Server Data Tools - SQL Server Data Tools uses the Visual Studio 2010 shell, and enables model-driven database development. This is on top of more traditional T-SQL and SQLCLR development and debugging. From a connectivity perspective, SQL Server Data Tools can connect to SQL Server 2005 and later as well as to SQL Azure. That last features makes it particularly useful, as I have found myself putting more and more database into the cloud.

Windows Server Core Support - Windows Server Core is designed to support server-based, infrastructure applications. We’re talking about applications such as SQL Server that provide back-end services but don’t need a GUI on the same server. Previously, SQL Server could not be run on Windows Server Core. This seemed to be ironic (and not in the Alanis Morrisette way) . SQL Server 2012′s support for Windows Server Core allows you to have a leaner and more efficient SQL Server installations, reduces potential attack surface and minimizes the need to apply non-relevant updates and patches.

These are not all of the features, but they are the ones that spring to mind for me. Included in SQL Server 2012 are features such as new SKUs (Enterprise, Business Intelligence, Standard and Express), contained database, a columnar index used to support high performance data warehousing scenarios, Power View and AlwaysOn Availability Groups.

Want to learn more? View the new SQL Server 2012 courses (and SQL Server 2008 courses) that are being offered at ObjectSharp right now!

Technorati Tags:

Cloud with a Chance of…Doesn’t Matter

In the past week, I have seen a couple of articles that discuss the lack of awareness of the Cloud in the general public. The following, from the Globe and Mail summarizes quite nicely.

“While cloud computing is growing increasingly pervasive, a new survey shows how many people are still cloudy in their thinking about the technology.” - http://www.theglobeandmail.com/report-on-business/small-business/sb-tools/small-business-briefing/cloudy-thinking-about-cloud-computing/article4504986/

The survey includes tidbits like 54% of people don’t think they use cloud computer (only 5% don’t), only 16% identify it correctly and (this one is my favorite) 51% believe that stormy weather can interfere with cloud computer.

(As an aside, I just got back from Punta Cana, where the Internet (and thus cloud computing) was turned off for two days while Tropical Storm Isaac passed through. Pretty certain that’s stormy weather interfering. :))

My comment about this state of affairs is: Who Cares?

What percentage of people have a working knowledge of the internal combustion engine? And yet a majority of people are quite able to drive without this knowledge. How many people have even the most basic understanding of how electricity is generated? And yet they don’t have a problem turning on a light.

Those of us in technology seem to think that it’s important to have others understand what we do. Perhaps it’s a need to appear smart. Perhaps we’re looking for acceptance after spending high school being given wedgies and swirlies. Doesn’t matter. I no more expect the average user of the technology I create to know how it works than I do my mother. And you shouldn’t either.

It should be completely transparent to the user where we put their information. The applications that we create should seamless transition between local storage, on-premise storage and the ‘cloud’. The user should only be aware of this when they use their phone to access the Word document they were writing before they left the office. Actually, I’m wrong. They shouldn’t care even then.

And that’s how you should be building your applications. Seamless integration between the various storage options. This isn’t necessarily the easiest choice for developer. Seamless == more work. But tools like the the Windows Azure Mobile Services can help. But don’t let the user know…they don’t care. They shouldn’t. All of their data should just be there. Like electricity

The Legofication Of Business

I love Lego.

To be fair, the number of people who don’t fall into that category is probably fairly small. There is nothing like the joy of taking the slightly differently shaped blocks and creating something bigger and better. And I’m not a big fan of all of the custom kits either.If a piece only has one purpose (like as the nose for an X-wing fighter), then it’s not for me.

I also love Star Trek. Well, not love, but greatly appreciate and enjoy the various forms over the years. And I have referenced Star Trek in various presentations, not to establish my geek cred (of which I have very little), but because of  how software works ‘in the future’.

And yes, Lego and Star Trek are related in this way.

The key to Lego block is the simple and consistent interface. Doesn’t matter what the shape of the block is, the fact that every block has the same interface allows them to be connected. And it is through the various connections that a much bigger whole can be created.

Star Trek takes the Lego idea and applies it to software. Every wonder how Geordi and Data were so quickly able to create new and complex software? Because all of the different components had the same interface. Or at least similar enough interfaces so that the components could communicate with one another. And connected software allows you to create a much bigger whole.

Now let’s move back to the here and now. What’s missing from our current software environment that would prevent Geordi from creating the application that saves the Enterprise? Two things, really. The lack of a standard set of interfaces and the inability of most software functionality to be ‘connected’. And this is the next phase in software development.

If you’re a company that provides services to others, then you need to think about enabling access to your service from the cloud. Want to allow people to easily buy your services or products? Give them an interface on the Web that allows them to do so. Not a Web page, but an API. Have some information that others might find useful? Give them an interface to access it. Create the Lego blocks that I was talking about earlier. Find standard interfaces for the type of data/service you offer and expose them on top of your services. In other works, provide Lego blocks for others.

One of the benefits of doing so is that you let others build out functionality based on your services. If your service or data is compelling enough, others will build your front-end for you. You have already seen this happen with a number of the social sites that are out there. People combine information from Foursquare, Twitter, Facebook, Google+, etc. to create interesting apps for others to use. The engagement level of people with apps that run on their phones are high and likely to move higher. Finding ways to integrate your service/data with that ecosystem can only be beneficial.

So what’s the downside? Well, you have to implement and/or design the interface. Technical yes, but not beyond the scope of what most companies can do. And you need to provide the infrastructure for surfacing your API. This is where virtualization comes into play. I’m a fan of Azure and the new functionality it offers, but speaking generically, virtualize where it makes the most sense. If you’re a Microsoft shop, I believe you’ll find the biggest bang for your efforts with Azure.

But the technology is not the key here…it’s the concept. Look at the products you offer to your clients. Find ways to expose those products to the Internet. Be creative. The payoff for your efforts have the potential to be significant. But more importantly, you take the first step towards what will be the development and integration paradigm for the next decade…Lego.

Microsoft Changes The World – Part 4

Yesterday was another Microsoft announcement day. Only this time, it was the preview for the next version of Office (you’ll hear it called Office 15 or Office 2013). I was half surprised they didn’t include this in the Worldwide Partner Conference last week. It was certainly suggested that yesterday would be about the next version of Office. But then again they probably didn’t want it to appear to be focused just on partners, but to everyone.

Highlights

Integration with Metro – This is the version of Office that has the Metro sensibility. I suspect it will be the example used for what Line of Business applications in Metro should be until there are other, better instances out there.

Integration with SkyDrive – One of the default locations to store a document is on SkyDrive. That is, in the cloud. The integration is nice. But one of the interesting features was the ability to pick up right where you left off. In other words, edit a document on your desktop at work and save it to the cloud. On your way home, open up the document on your laptop and it moves to the exact place in the document you were at on the desktop. Finally, the same thing happens when you open the document on your Windows Phone device (although I’m not imagining much editing going on through that form factor).

PDF integration – PDF files can be opened in Word, edited and then saved as either a Word or a PDF document. Enough said to know that’s sweet.

Flash Fill in Excel – This one is tough to explain quickly. It’s basically a tool to help your parse data from a separate cell. Figure it like the following: You have a column of data that is tilde delimited (‘1~15.3~kyle~hockey’ is the first cell, ‘3~17.8~curtis~soccer’ is the second and so on. In a separate column, but on the same row as the first cell, you type ‘kyle’. In the cell immediately below that you start to type ‘curtis’. Excel now makes the prediction that you are trying to extract the third value out of that column and fills in the rest of the values down the column. It’s an edge case, but if you need this functionality (and I have in the past), this is way cool.

Other Features – A rotator control to select font families, sizes and colors. Integration with Bing so that search results can be embedded into Word directly (and the embedded HTML is live). A slightly improved UI that is still a ribbon, but the spacing between icons is greater to allow for easier interactions with a touch interface. A new presenter view for PowerPoint, including built-in zooming.

If you want to try the preview, you can get it from here: http://www.microsoft.com/office/preview/en. One word of warning. The C++ runtime used by Word is not compatible with the one used by Visual Studio 2012. As a result, you might get a warning indicating this when you launch VS2012 after installing the preview. There is a patch to this problem, available here:  http://www.microsoft.com/en-us/download/details.aspx?id=3017.  You’ll see this problem called out in the KB (http://support.microsoft.com/kb/2703187).