Speaking at the Visual Studio 2017 Launch Party in Los Angeles

Visual-Studio-97 Happy 20th birthday to Visual Studio!!!

In 1997, I was working at a software company - one that coincidently was later bought by Microsoft - that was shipping their product to over 68 countries world-wide working on modules that would allow for the support of multi-currency transaction booking and financial statement translation. We were writing that product in both C++ and Visual Basic 5.0. Back then we supported both a Btrieve and SQL Server database backend.

The virtual launch of Visual Studio 2017 will happen next week on March 7th & 8th. Be sure to tune in here for a live feed.

As part of the birthday celebration, Microsoft is holding Launch Parties all over the country. Here are the dates for those of you on the West Coast.

3/9/2017 Boise, ID 3/10/2017 Denver, CO 3/14/2017 Lehi, UT 3/15/2017 Portland, OR 3/16/2017 Phoenix, AZ 3/20/2017 Los Angeles, CA

I'll be speaking at the Los Angeles, CA Launch Party at the Microsoft office on the Mobile track and hope to see you there. I'm excited and honored to be able to take part in such a great event. Other tracks highlight the updates, improvements and enhancements for debugging and testing tools as well as C# and web development.

Get ready to break out the balloons and cake!

Time to get crackin' on that Tumbleweed Frogger game (Xbox Live Creators Program Announced)

We all have those moments, those moment when we get that inspiration to create something. Come on, you know you do. I have. So here's your chance. Want to tap into over 55 million active games and be able to utilizing features to organically grow your audience and reach? Microsoft announced today a new initiative, the Xbox Live Creators Program (currently in Preview), that will allow any app or game developer to create or incorporate Xbox Live into their game and publish it to either Xbox Live or Windows 10 without having to go through the extremely cumbersome and extraneous channels previously required. Incorporate social experiences, leaderboards and more into your games with minimal development time.

I have to say that I'm pretty excited about this. When the Xbox first came out, a friend and I were joking around on Facebook about creating a new game similar to the old 70s game Frogger, but using tumbleweeds. See she and her husband were making a cross-country trek from Michigan to Washington and while crossing the plain states seemed to be hitting, literally, an inordinate amount of tumbleweed that would blow into their path on the freeway. I joked that that would make a good game and thus the faint glimmer of a game idea ignited into being. At that time though, in order to publish a game to the Xbox platform you had to either be Microsoft or a big gaming studio. I was pretty discouraged.

Now with the Creators Program, us little guys have a chance to build our own games and publish then to the platform. Pretty cool! There are just four steps to be on your way. Go over to the Creators site and:

  1. Create a Microsoft Account if you don’t have one. If you already have one, you are set!
  2. Enroll in the Dev Center developer program.
  3. Apply to join the Preview for Xbox Live Creators Program. Sign-ups are initially limited. As the program ramps up, more spaces will periodically be made available.
  4. Read the documentation to learn how to integrate Xbox Live into your game.

That's it. I can't wait to see all those great games you'll come up with. As for me... well, I better get hoppin'.

WOOT! //Build 2017 Here I come!!

Build2017Hey there! So excited! I'm posting this as I just successfully registered for the Microsoft //Build conference in Seattle in May. Did I mention I'm soooooooo excited! This conference consistently sells out within hours of registration opening. Last year, I was excited by the introduction of Conversations as a Platform. I still am excited about it, even though I've had little time to explore it this year. There are hints of free time coming up in May where I hope to explore this and other ideas that I gather at this conference. Maybe I'll see you there!


Impressions from //Build 2016: Putting the 'personal' into personal computing

This year marks my 6th year attending the Microsoft //Build conference, the first being //Build 2011 when everything changed -- for me and for Windows -- with the release of Windows 8.0. For those who are not familiar with the conference, //Build is the premier Microsoft Developers conference where Microsoft often makes big and life changing announcements for its ecosystem of developers. For example, in years past Microsoft has open sourced their .NET (Roslyn) compiler right ON STAGE at //Build. Attendance is kept low on purpose (about 4,000), so getting into the event can be tough. This year was no different in that there was an insane number of announcements and introductions at the conference during both of the keynotes. Here are some of the highlights and things that got my attention.


Certainly, everyone was excited to see what the latest progress was on Microsoft's virtual reality headset Hololens. That Alex Kipman and the HoloLens team announced the  official shipping of the product at the conference was even better, with the idea crowdsourced Galaxy Explorer App being available on the Windows Store and all of the source code available on GitHub for all developers to use as a learning tool. You could also say that the much anticipated and hoped for announcement that not only was Xamarin - a widely popular and deeply useful cross-platform mobile development tool purchased by Microsoft in February  - was now going to be included in Microsoft's MSDN subscriptions as a native part of Visual Studio, including it's free Community version of Visual Studio, brought down the house. But of course Microsoft took it a step further and Open Sourced all of Xamarin's source code to the masses, something that has been speculated that they just purchased for between $400-500 million, so that the developer community could help build and grow it. CRAZY! There were also a lot of other great announcements and highlights around new services from the Microsoft Azure cloud platform (Functions, IoT Suite, Service Fabric general availability, and Container Service), Office 365 (Group  Connectors, Skype for Business Web and Mobile SDK, and new(ish) Microsoft Graph beta APIs) and the Xbox Dev Mode release.  I can guarantee that some of these I'll be going more in-depth in future blogs. If you just look at the individual pieces, the individual announcement, you will be missing the bigger, more important vision of the conference.

Don't get me wrong, all of this is exciting in of itself, but there was a foundational shift announcement that really hit me as just as or even more important.  These are the types of things that when I see and experience them, I get that temporal rift flutter in my stomach that everything that I knew or have known about computers and/or the use of technology in our society, in our businesses and in our lives just changed or that is about to. It's been awhile since I've gotten it, so I almost missed it out of neglect and a sense of compliancy. See I am one of those few (at least that will still admit it) that actually LOVES/LOVED Windows 8. No really! I'm not kidding. I've been in the Tech industry for over 30 years now, so I've seen a lot of things come and go as far as trends and the "next big thing". And I've been writing code and doing development on those platforms my whole career.

When I attended //Build 2011, except for a function here or a web service there I'd been out of the code writing full time habit for about 12 years, mostly out of boredom. Writing the same boring app, with the same UI, same user interactions, the same... EVERYTHING... over and over for the desktop just hadn't appealed to me in a very long time. Then by sheer chance I attended //Build 2011 where Windows 8.0 and the immersive, beautiful, design centric, (and imo incredibly visionary and strategically leapfrogging) "Metro" way of writing apps was introduced. Taking the immersive, contextual and important information push to the user instead of them hunting for it kind of app was certainly already taking hold in the mobile world, but no one had really thought of what it might mean on the desktop, business workhorse app kind of level. For the first time in a really long time, my desire to code returned. I started a new notebook to hold the avalanche of app ideas that flooded me at the conference and continued in the months following.  Unfortunately the company's signature app, Office, wasn't onboard with that vision at the time of its release and that contributed greatly and essentially to its demise. To say that I was disappointed in Microsoft's hurried abandonment and backpedalling from that evocative, strategically imperative vision with its next OS release would be an understatement. The app idea notebook started to gather dust again as I focused on bringing most of my ideas to web based apps, like Office 365 Add-ins. We were back to the boring again at the desktop and even the mobile level.

Or at least I thought.

Conversations as a Platform

"The future isn't going to be man vs machine, but man with machines." - Satya Nadella, Microsoft CEO

Windows 8 "metro" apps were all about a single context, meaning that the developer was encouraged to limit the scope of an app to one single task or one single user scenario and make that experience immersive to the user. Instead of mega apps where 100s of tasks and 100s of pieces of information are buried waiting for the user to find, information created by or exposed by the app was pushed to the visual surface with what are called Live Tiles; surfacing important and needed information to a user before they even went looking for it. At this year's //Build, Microsoft's CEO Satya Nadella introduced a new paradigm for app development, one that for me is again evocative, again exciting. Conversations as a Platform.


Apps in the Conversations as a Platform world again consist of single scenario apps, but this time using human language as the new UI layer. These apps, or BOTs as they are known, will interact with the user, other people, and our digital assistants like Cortana and will use cloud microservices to infuse intelligence, meaning and context into all of their interactions. As envisioned, and it is a lofty vision, these BOTs and microservices will help automate the analysis and presentation of information to the user in a way that is meaningful for the interaction or conversation that is happening at any given point in time.

"Conversations as a platform. Taking the power of human language and applying it pervasively to all of our computing." - Satya Nadella

This new way of computing, and of developing apps, was highlighted on stage with Cortana in Outlook, the Just Eat BOT, Skype for Business BOTs, and even the very cool but sort of creepy in how pervasive and helpful it was Starbucks BOT.

As a developer, I encourage you to watch both keynotes from the conference. Also check out the new BOT Framework. Of course start building those BOTs! And check back here to see what I come up with for my own ideas of using this new development platform.


//Build 2016 videos, including the keynotes and most of the sessions: https://channel9.msdn.com/Events/Build/2016

Microsoft's BOT Framework: https://dev.botframework.com/

Skype's new BOT SKD: www.skype.com/developer

Contana Intelligence Suite: www.microsoft.com/cognitive-services/en-us/apis





Expected % Complete: An early warning indicator for project work

Last fall (October 2015), I was working with a client who wanted to provide the typical red, yellow, green "stop light" indicator for tasks that were essentially behind schedule as a quick visual for Project Managers. This then would rollup to the project level to be factored into the overall project schedule "health" calculation. There were many discussions around what "behind schedule" meant for them because there are many ways and different factors that can determine if a task is considered behind schedule as well as what threshold did the business what to consider a task for preventative or corrective action. Out of those, we decided to focus on a metric that we called "Expected % Complete". Because they would be using Percent Complete to record progress on task, this consisted of calculating the percentage complete that the task should be at a given date if all work was progressing normally. For example, if you have a task that has a duration of ten (10) days, on day five (5) the task should be expected to be 50% complete. If the task is actually only 20% complete at this halfway mark then the indicator might show a red stoplight. If the task was actually 70% complete, then the indicator would likely show as a green stoplight. We also had quite a number of discussions debating the use of baseline Start and Finish dates (Baseline Start / Baseline Finish) over what are essentially the estimated Start and Finish dates, as well as whether to use the Project Status Date or the current date. Which is right for you and your company may be different, but for purpose of this post we will be targeting the estimated Start and Finish dates as well as the current system date. You should be able to use the content in the rest of this post to modify the formulas and values for what is right for your particular situation. Let's setup the scenario. First, we are assuming that % Complete is being used to record progress against tasks. Second, we will be assuming that all tasks are duration based tasks. If you are using another task type, for example fixed units or fixed work tasks, then you will need to adjust the formula accordingly. Third, we will be using the current system date to calculate the Expected % Complete and not the Project Status Date. Lastly, I'm assuming that you already know how to create either local custom fields within your project in Microsoft Project or know how to create Enterprise Custom Fields within Project Server or Project Online. Also, I used a text custom field to hold this formula because the client wanted the percent complete formatted as a percentage strictly for visual purposes. This actually made creating the indicator field harder because I had to convert it back to a number before evaluating it against the red, yellow and green thresholds.

Now the formula:


Don't get freaked out here. It's not as bad as you might think. A lot of this is testing certain conditions that might occur for a task such as whether the duration is zero like for a milestone task ([Duration]=0), the duration is only estimated ([Estimated]="Yes"), and whether the task's finish date has already passed ([Finish]<Now()). Let's break it down, okay?


ProjDateDiff Function

First, the heart of the calculation is this: (ProjDateDiff([Start],Now())/[Duration])). Basically this says subtract the current date from the task's Start date field and divide by the duration of the task. For this we use to functions, the Now() function to represent the current date and the ProjDateDiff function to subtract the dates. For those familiar with VBA, you might be wondering why we are not using the DateDiff function. The ProjDateDiff is a special Project only function. It's special because it takes into account the calendar settings and hours per day that might be set for a particular task. Why is that important? Remember that tasks can use either the calendar that is for the overall project or a specific task calendar. Additionally, if you have resources assigned to that task (and you absolutely should) then they can each have individual calendars associated with them as well. Those will define that resources work day, hours and such. So, let's take a simple example. Let's say that you have a task that has a calendar that defines a work day as 10 hours/day and another task that has a calendar that defines a work day as 8 hours /day. Rather than having to figure out how the day unit is define for that task, and add those consideration to your formula, you can use the ProjDateDiff function to do all the heavy lifting for you. Additionally, duration can be a particularly vexing field to use in calculations because the value that comes back from referencing a duration type field is represented in minutes, not hours or days. There is also a really great constant that is available that can be used called [MinutesPerDay] that takes into account the calendar et al. Here I'm not using it because both the result of the ProjDateDiff function and the Duration are in minutes already. I don't need to convert them to anything else to get my Expected % Complete.

The second thing that might be throwing you is the IIf parts of this formula. This is known as an Immediate IF function. Basically it says, if the first part is true do this, other wise to that. It's format is like this: IIf(expr, truepart, falsepart). Because I'm testing for different conditions that might exist in the task, I have several nested IIf functions in the formula where the false part of the IIf function is another IIf function. First, I test to see if the duration is zero. If it is then the percentage is zero. Next, if the duration is still set as an estimated value, either because it still has the ? or is set to Estimated, this can do weird things to the duration value so I want to nip those in the bud. Lastly, I check to see if the Finish date is before the current date because if it is no matter how long ago this task should have been finish it should be 100%. Wrap all this in a Format function to format the result as a percentage and you are done.

So let's see this in action. Below is a project schedule with the Expected % Complete value custom field with a system date is 01/24/2016. I've filled in several percentage completes and also exposed several additional fields for you to peek at. Now all that's left is to create an indicator field based on my Expected % Complete value and the red, yellow and green thresholds.

Estimated Perc Complete 1

Links: Project functions for Custom Fields: http://bit.ly/25dFPAd

email Christine: christine.flora@symnoian.com

Web Tiles and Much Needed Microsoft Band SDK Updates

Since they were previewed at //Build earlier this year, I've been waiting for Web Tiles to really hit the Microsoft Band world. Their appeal is easy to comprehend... be able to write the code once for your Band App as a Web API using any data source available on the web, included authenticated data sources like Office 365 now, and push it to all devices that are supported by the Band (aka iOS, Android, Windows Phone and Windows) without having to know anything at all about how to write code for that particular mobile platform. Get immediate expose across multiple devices for your App. The Microsoft Health app does all the heavy lifting for installing the app on the Band, formatting it and then pushing the content from your app to the Band, all from a simple 6-10 line (typically) XML zipped manifest file. Also included in this SDK release is support for the five new sensors that are on the Microsoft Band 2. They include: galvanic skin response (electrical conductivity of the skin in kohms), barometer, altimeter, RR interval (time between heart beat peaks), and ambient light. Additionally, the number of tiles is now upped from 8 to 13 on the Microsoft Band 2 as well as support for PDF 417 barcodes. That means more ASCII characters are now supported for use when creating bar codes for your apps.


Microsoft Band Development

Microsoft Web Tiles

//Build 2015 Session: Web Tiles Dev Preview


Updating a Project field from Workflow, SharePoint Designer 2013

With Project Server 2013, the ability to easily create workflows with SharePoint Designer 2013 was introduced. This is/was great news for power users and non-developers, and it's long overdue. Even for someone who can code (like me), I love this idea because 1) it gives me the ability to easily create a pretty robust workflow without opening Visual Studio, and 2) I can create workflows straight away for Project Online without needing my own on-prem environment (even though I do actually have one). Notice that I say "pretty robust." There are instances when you're creating a workflow that will require you to break out Visual Studio to do what you need to (or hire a developer), but a large part of workflows can be done within SharePoint Designer 2013 (SPD 2013). One of the many features within SPD 2013 is the ability to have your workflow update an Enterprise Project Field directly. This is an awesome feature, but it needs some work, so let me expand on that. When a user edits an Enterprise Project Field from within PWA (Project Web App) and clicks save, what's known as a "light publish" happens. If you recall, updating a project schedule will update the draft tables (formerly its own database) and a user then needs to publish those changes--appropriately known as the publish tables--so they can be seen by everyone from within PWA. When you use the Set Project Field action within a workflow, the value is essentially stored in the draft tables. What this means is that if a user simply looks at the project from within PWA, the value doesn't look like it has been changed. Also, any views that might be keyed on this new value don't show it either. But if you edit the project, the new value shows up. Click save, and all of a sudden the value is viewable. It would be nice if this action would automatically "light publish" this change, or better yet, stuff the value in both the draft and publish tables at once. Even better still, it would be great to have an option that the workflow author can set to turn on or off the light publish feature; that way the author can decide if he or she is ready to initiate the light publish. It doesn't do any of that now, and that is a problem. Fortunately, there are REST calls you can make from within the workflow to do this, but they can be hard to understand and construct. I can sort of see the reasoning behind not having the light publish option as part of the action, since you may want to set several project fields before initiating this light publish. Not having this built in is kind of a pain, though, and not really user friendly to those non-developer types who are probably using SPD2013 to begin with.

Essentially then, after setting any project fields with this action, you will need to use the Call HTTP Web Service action in order to 1) check out the project, and 2) initiate a publish. Unfortunately, this is a full publish and not just a light publish, so if there are changes to the project schedule, those are going to be published as well. Okay, here's how to do this.

First, I like to create a variable to hold my instance reference so I can reuse it throughout my workflow. Believe me, you'll want to do this. You can call it anything. I've picked up the habit of calling it "ps" for "Project Server" from the talented, helpful, and ever-patient Biatrice "Bia" Ambrosa from the MS Project product team. It just makes sense, and I like easy. Notice that I am using an instance reference (specifically using a project variable reference) and not hard coding those values into the workflow. You can access these by clicking on the "Add or Change Lookup" button in the lower left.


Next, you'll want to create a variable to hold your HTTP Web Service call headers as well. Yes, you will be reusing these too. It is actually a dictionary, and not just a simple one-value variable, so use the Build Dictionary action.



Now you are ready to construct your first HTTP Web Service call using both the Project Server instance variable ("ps") and the "requestHeaders" (or whatever you named it) from above. Most HTTP Web Service requests that you do within a workflow are "GET" calls, meaning you are going out and getting information, like when you are reading in OData. These are POST calls, meaning they update or are sending information to the service you are calling, so be sure to change the HTTP method to POST.


You should do some sort of error checking after this step to make sure you were actually able to check out the project before continuing.

Last, construct the HTTP Web Service Call to call the Publish() REST method. Because you've already done most of the work, you have most of the call already constructed. Using the "ps" variable and the "requestHeaders" dictionary, add the Publish() call.


Now save and publish your workflow, and the Enterprise Project Field value will be updated. If your workflow is like mine, I actually had to set this field throughout the whole workflow as it progressed from stage to stage. I was able to reuse those "ps" and "requestHeader" values throughout.

The REST calls are documented in the Project 2013 SDK that you can download here.  Also check out Bia's Project Conference 2014 Workflow Deep Dive session here. I highly recommend it.

Footnote: The ability to update multiple fields at once has just been added, but you still need to publish in order for those changes be seen within PWA.

Microsoft Band Updates and SDK

MSBand2 I was a Fitbit fan. Still am. They're great devices--durable as hell, with fantastic analytics and an outstanding API. When I heard that Microsoft was releasing its own "fitness" band, I was skeptical, but when I saw that it was integrated with my calendar, email, and SMS / text messages, and it had the same (or better) fitness features as the Fitbit, I was more than interested. The fact that it was also integrated with Cortana, Microsoft's digital assistant app, was icing on the cake for me. I dutifully went to my local Microsoft store and got one.

You never really recover from being a developer. Once it's in your blood, you're a developer for life. So of course, being the code junkie that I am, as soon as I got the Band, I wanted to write an app for it--or two or three. My app idea notebook just got a new section.

Fast forward four months. I can finally start writing apps for the Band; the MS Band SDK (Software Developer Kit) was released on Feb 23rd across all platforms (Windows, Android and iOS). You can get your copy of the SDK here. Watch this page for news on what I have up my sleeve.


In addition to the SDK, Microsoft released an update for the Band and its accompanying Health App that offers some much-needed improvements, including integration to MapMyFitness (YES!) and tracking for bicycle workouts. A new personal fitness dashboard brings it close to the analytics that are available for the Fitbit product line. All in all, a pretty good (and much needed) update. I hope there's more to come, and I'll be interested to see what ideas others come up with for apps. If you have one, I hope you'll write to me and let me know.

Surface 3 Pro - Tablet as Laptop replacement. Welcome to my world!

Today I watched the live stream of the Surface announcement from NYC. It was a fantastic show! Many expected an announcement for a Surface mini, including me. What happened was an introduction of a larger model, the 12" Surface 3 Pro. What was distinctly different in this announcement was the tone. I loved it! See I've long been frustrated by the marketing positioning of the Windows 8 tablets as gaming, kids drawing and essentially commercial only use machines, that it is a device in addition to your other devices. It makes it really hard to convince companies that these tablets are serious machines. The BIGGEST differential between a Windows 8 Pro tablet and the others is that it a full blown Windows machine. Period. Done. If you are looking to buy a tablet to just watch Netflix or check email or facebook, than any other tablet will be fine. If you are looking to actually CREATE content, like documents, spreadsheets, aka business content, or for in front of clients, then you have few choices there and then it depends what you are "presenting" and what your business is. Typically, the infrastructure of businesses is dominated by Microsoft technology. So to work on those business systems, you need to be able to talk, interact and connect to those business systems. Windows 8 Pro tablets run the same software as your desktop machine. It runs the same software as your laptop. It inherently knows how to talk to those business systems that you clients have. The specs have been there since the beginning that mimic many of the existing non-tablet machines. You don't need to think about having one machine for work and one for casual content consumption. It can be the same device. That was the best message from the press conference today. One that I hope I hear over and over from the MS marketing machine.

So in reality, users have been able to replace their laptops with a Windows 8 pro tablet for several years. Don't believe me? I am a prime case in point. I have been running a Windows 8 Pro tablet as my primary computer since Dec 2011, and a machine that I do development on at that. Yes, you read that correctly, Dec 2011. My first Windows 8 tablet was a Samsung Slate 7 which I bought  because I was starting to write Windows 8 Store (then Metro) apps. I say first Window 8 tablet because I had also just bought an awesome Sony Tablet running Android OS in October when it was introduced. Great tablet/device... for consuming content.

Samsung Slate 7 with Docking Stn and Keyboard

For the Samsung Slate, I had the Developer Preview on it and then the Consumer Preview and then the RTM versions on it. It really wasn't an optimized machine for Windows 8, mostly because it was made before there was a Windows 8, but it worked and it was one of the best models on the market at that time. At the time I bought it (Dec 2011), I had a new-ish Sony Viao Z with an i7, 8 gigs of RAM and a 128gig SSD. It was (and is) an awesome laptop, but it was missing one important thing that I needed. It didn't have a touch screen. Nothing did then. So I bought the Samsung Slate. It had a docking station, a Bluetooth keyboard and I could connect it to my 27" monitor, just like my laptop. Now, the specs were not as great (i5 and 4gig RAM), but I was still able to use it to develop Win8 apps and other things, do email, present, teach, write SSRS reports and dashboards, and create pretty much anything I wanted. Pretty soon, I was on it all the time, working. So I transitioned to it full time as my primary machine and the kickass Z ended up gathering dust on the bookshelf.  When I would show up to client meetings with it, people couldn't believe I used this tablet just like a laptop.

About 11 months later, Microsoft introduced the first Surface Pro. Because my Samsung Slate was the exact same specs as the Surface (and I had just gotten it a few month earlier), I didn't get my first Surface until the next year, June 2013, as part of //Build. It was much lighter than my Samsung. It had a crisper display. And it had a slick slim keyboard. The Samsung went on the shelf with the Viao. I then upgraded to the Surface 2 Pro (this time selling the then just barely used Surface Pro) when it came out because I wanted more RAM (remember that development stuff??). It has been my primary machine, dev and all, since. Since I do type for a living, spending anywhere from 8-15 hours a day working on the machine, the keyboard does matter. My personal experience is that the Surface type cover works just fine for me and is my one and only keyboard. Because I do do development work, I have issues with the default setting for the function keys to control media and other function rather than the "real" functions they are meant to. That is a pain, but only when I'm debugging something.

I am interested in the Surface 3 Pro, mostly because of the addition of the i7 model and new pen and Adobe collaboration. I've been doing so much App Design work for clients that I'm about to buy a Wacom digitizer to connect to my Surface 2 Pro. If I can get that combination in one device... well, I am interested. I need to play with the new pen to see how it is and also to see what tip and pen options will be available. I'll let you know what I find out. The only other thing I need to make this an ultimate machine for me, would be a 16gig RAM model. I could then use it for local hosting of Hyper-v images for dev and training at client sites. So I do wish and hope and plead for a 16 gig RAM model sometime soon, but I don't think that is in the stars.

So I like the new model. Like where the "message" about them (and other Win8 Pro tablets) is going. Interesting stuff.

Universal Apps and Background Tasks


One of the best ways to distinguish your Windows Store app from the rest of the pack and add some design pizzazz is to have a meaningful, informative live tile. A good live tile should entice the user to click on and launch your app, in essence to use it. Live tiles essentially turn your computer screen into an information dashboard. So a live tile is one of the best marketing tools that you can have for your app. Marketing you say? Yes. You want people to download, and hopefully use, your app. If people use your app, they will not uninstall it. If they use your app, they will tell their friends about how great your app is, how they are in it all the time and can't live without it. In turn, those friends will download your app and tell their friends, who will tell their friends and on and on and on. The most coveted screen real estate is the left most part of the Windows Start screen. When the computer is first turned on, this is what is visible first to the user. Typically a user will configure the left most section of the Start screen with the apps that they use the most. For me, if your app doesn't have a live tile, you probably aren't going to get on that left most Start screen area, or you will be reduced to the smallest possible area. So what is a live tile? Even before Windows 8 was introduced to the world in Sept of 2011 we've had live tiles. They just haven't been called that and only really gained popularity and more extended use with the introduction of smart phones. Think back to the very first time you got a notification that you had new email, whether in the form of a pop up message or that little icon on your phone with the number of new email messages you just received. Yes, essentially that was a live tile. But for Windows 8 Store apps, a live tile is the Windows 8 replacement for the desktop icon of previous versions of Windows. A live tile is, well, ALIVE, meaning it can and should push information up out of your app to the user without them even having to open or have open your app. It should have context, meaning it should show the user information that your app has more of. Let's take a news app as an example. What information should a news app have? News. What information should a news app's live tile have? Breaking News and top stories. If a new app had stock market information, that wouldn't make sense unless of course there is breaking news about the stock market.

SymnapseLiveTileIn my Project Server app Symnapsethat provides project status and metrics in a dashboard application for Project Server, my live tile surfaces the project status information of projects that the user has chosen to "watch" and thus have put on their dashboard. Additionally, my app lets a user pin a specific project to their start screen so they can keep a closer eye on particular projects, all without actually going into my app.

Where am I going with this? Well, at the recent //Build conference in San Francisco, Microsoft reintroduced the notion, and tools to accomplish it, for the universal app. A universal app is an app that is written with one set of code and that will run across platforms; on desktop, tablet, phone and xbox with little or no change to the code. This has been the promise of Windows 8 since its introduction in 2011. With this introduction of the universal app, there are some changes app developers need to be aware of when creating their universal app. Not surprising are changes made to the Windows.Networking.BackgroundTransfer API to accommodate Windows Store and Windows Phone Store apps. The background transfer API is what feeds apps updated information in the background without the user having to request the update. It is what can feed live tiles and notifications with new information that a user needs to know and what will drive use of your app. The Windows App Team recently posted an excellent blog about the changes to the API and what app developers need to be aware of.  The blog is here. It has a lot of great information about the changes to the API, how it handles specific differences for each platform for things like network data policies and data transfer, resource management and more. So check it out and start working on your next Universal app!


Windows Azure: Perfect for hosting a Project Server 2013 Demo/Dev environment

Don't get me wrong. Project Online is great. It's easy to create an instance. It works (generally speaking) just like a Project Server 2013 environment and as a non-infrastructure type person, I don't have to worry about having a server machine sitting  under my desk making noise, chewing up my electric bill waiting to be hacked by some teenager (or govt agency) on the other side of the world. On the other hand, there are just some situations where having your own "on premise", honest to goodness instance of Project Server is needed. Doing OLAP reporting? Not possible with Project Online. Writing apps to consume Project data? Very hard to do (and currently in flux) with Project Online. But if you are Active Directory and Security challenged like I am, what are you to do? Mostly, I have been leaning on my friends who are gurus in that kind of stuff to help me out. But I have some credits on Windows Azure that I've been wanting to use and thought this would be a great opportunity. Depending on your MSDN subscription and other programs you might have access to the amount of credit you have to play with will vary between $50-150 per month. Also, if you don't have an MSDN subscription or Azure credit from another program (like the Microsoft Partner Program, BizSpark or something else), then you can actually purchase what you need.

AzureWindows Azure is a lot of things. It's a server farm. It's a data farm. It's a media hosting service. It's a web hosting service. It is a basically a dynamically expanding and contracting computing resource mega house with data centers around the world, all hosted in the dubious buzzword of "the cloud". If you don't have an Azure account, you'll need to sign up for one. Go to http://azure.microsoft.com to do so. Warning: Using this isn't free. That's the trade off. In exchange for money (or credits), someone else worries about patches and server maintenance and security. It probably is cheaper to get a server machine and stick it under my desk, a one time expense (not considering electricity and hardware upgrades), but then I'd have to worry about getting hacked and up time and maintenance and... BLECH!

Now I'm not a complete clueless newbie when it comes to installing operating systems, servers and such. There was a point in my career, long, long ago, when I did maintain desktops, servers and such for the company I worked for. I also used to be a field systems engineer for a software company I worked for and we went out to troubleshoot installation issues with customers. I discovered quite quickly though that I didn't want to do that. It wasn't my THANG. I wasn't passionate about it. So I went back to software dev and to implementing and teaching business solutions software. But the remnants of those days do still linger in the back recesses of my brain.

Luckily for me (and for you too) I don't have to rely on my sketchy knowledge of doing this. First off, the Azure team has created a gallery of already built machines with commonly used profile for you to choose from. Need a server running Windows Server 2012 R2? They have that. SQL Server 2012 SP1? Yep. Even want to test on just released (RTM) environments like SQL Server 2014 RTM? They have that too. There is even an already built server with SharePoint 2013 already installed! Additionally, there are a lot of great blogs about how to actually create whole server farms on the Azure platform. Specifically, I recommend using Keith Mayer's Step by Step instructions for creating a SharePoint 2013 farm. It is fantastic. Basically, you will be setting up three (3) servers; a Domain Controller, a SQL Server server, and a SharePoint/Project Server server/web front end.

This will only get you about 85% there on your Project Server farm. You'll need to install Project Server on the SharePoint server you create. If you've never done that, it is actually easier than it used to be given that Project Server is now an application service on SharePoint. There are some great MSDN articles and videos available. (Take a look here: http://technet.microsoft.com/en-us/library/ee662109(v=office.15).aspx). You'll need to download the Project Server 2013 software bits first. Whether you do this from your MSDN account, use a trial version of it or use an existing licensed copy is up to you. Normally, you would download the iso or .exe to your own computer, then upload it to the server you are installing it on. DON'T. Download it directly to your SharePoint Server Virtual Machine on Azure. Why? Because the Azure platform as a wickedly fast connection to MSDN. It will take you only a fraction of the time to download it.

After all of that, you have a Project Server 2013 farm running. You can create projects on it, enter risks, issues, create enterprise custom fields, resources and everything you normally would on a true on premise server farm. Have caution though. You will be charged for every millisecond that these servers are running. So here's what I do: I turn them off when I'm not using them. Basically I start with the SharePoint/Project Server and turn that off. Then I turn off my SQL Server server and then lastly I turn off the Domain Controller. When I want to use them again, for a client or debugging an app I'm writing, I turn them all back on, in the reverse order that I turned them off (DC, SQL SERVER, SP/PS). Be sure to wait until one is done cycling up before turning the next on.

And that's it.

Are you talking to your computer screen right now, telling me that demo images of Project Server 2013 already exists and that I could use those? If you are, then you are correct. And I could load those up on the beefed up desktop or laptop computer if I wanted. Realistically though that would require me to carry or have a machine with 32 gigs of RAM and at least a 1-2 TB hard drive in it. That sounds suspiciously like specs for a server machine. Also, that is WAAAY more hardware than I personally want to lug through airport security or to a client site. Some do (including some of those friends I told you I was leaning on for help) and that is a personal choice. The Azure platform is just another option for you to consider. And hopefully this post will help you on your way.

Office 365 API Tools for Visual Studio Announced

During the SharePoint Conference in Las Vegas last month, attendees were introduced to the new Office 365 APIs. Today, some of those API were released into preview for Visual Studio, as was announced on the Apps for Office and SharePoint Blog. Only some of the APIs were made available such as the mail, calendar and contact REST APIs and then only for C# and VB.net apps.

There are some good sessions on the APIs from the March 2nd - 6th SharePoint Conference in Las Vegas, NV. If you are thinking of trying out the new APIs then you should definitely go over to Channel 9 and check them out. Also below is the link for the preliminary/preview documentation for the APIs over on MSDN.

Link for the MSDN API info:


As a Windows 8 Store App developer who primarily writes those types of apps in HTML/JavaScript, the release of the APIs for VB, but not for JavaScript is a bit of a rub. Though most developers I know don't do both, I do write in C#, just not typically for Windows 8 Store Apps. But it's been this way with the SharePoint / Office team for awhile now. None of the SharePoint App or Office Task  Pane Visual Studio App templates use JavaScript, only C# even though there are new JSOM libraries that a developer can use. Sometimes I think the product team can only program in C#. But I guess there's always VB. I used to write in VB... in the 90s.


Flipboard is coming to Windows as a Modern app

Back when I first looked at the Flipboard product in July of 2010, it was only available for iPad. Currently it's available for the iPad and Android operating systems. Today it was announced at //Build that a Windows 8 will be coming from the company. My initial reaction is "YAY! About bloody time", but with some caution. I've seen some app devs try to create Windows 8 apps just to have their app on the platform, but that have failed miserably (or ignored the design axioms completely) when translating the app. Most notably for me is the Pulse News app. Love, Love, Love it! on Android. Hate! Hate! Hate! it on Windows 8. Why? All they did was recreate their website, which breaks most if not all of the Windows 8 app design principals. Sure, it's great for a website. Not so much for an app. Even if they had taken their Android app (especially the tablet one) and ported it over, it still would have been better than the one they have now.  So what did I do with Pulse News. I eagerly installed it and then promptly uninstalled it. And use other news readers, like Bing and the NY times apps. I do use the Pulse News app for something else though. I use it in my Windows 8 Store App design classes as an example of what NOT to do with your app design. Back to Flipboard. While I'm excited about the prospect of having the rich content and functionality on my Windows 8 tablets, I am also slightly apprehensive about it given my previous experiences. So we'll see.

And I still want a version of it and APIs for it so I can use it to aggregate business analytics and information for corporate dashboards and apps.