Visual Studio 2017 Mobility: Use what you know

It can be quite daunting to try to decide what is the best language for a particular app you have in mind, especially when writing mobile apps. Should you write a shell wrapper that resides on the device and does all the heavy lifting by calling your web application and processes? Or should you write it in the each native language, like Swift and Java, that stores all of the data and does all the processing on the device? That's a heck of a lot of code and rewriting the same thing over and over.  Plus what kind of devices would you be restricted to to be able to run it based on the computing power needed? Or maybe you think you want to write it using response web frameworks. More and more, a hybrid model makes more sense, one that stores some of the data and does some of the computing on the device, but also utilizes web calls to do the heavy lifting.

I was honored recently to be able to speak at the Los Angeles Visual Studio 2017 Launch Party on this very topic.

Write what you know.

If you've ever tried to write that Great American Novel or taken any kind of writing class, you've probably heard this advice more than a dozen time. Write what you know.

This is just as important when it comes to writing code, even when crossing platforms.

Language

If you are a C# developer, you can certainly write for the Windows platform with no problem. You should know though that you can use Xamarin tools to build applications to all types of devices and operating systems, like iOS and Android, using C# for the backend processing and either building the UI using native languages or Xamarin Forms to do it using XAML. And since Microsoft acquired Xamarin last year, its tools and functionality have been available as part of Visual Studio. It is even available as part of the free version of Visual Studio known as Community.

If you are a web developer, you can use your HTML, CSS and JavaScript skills to write apps using Visual Studio 2017 and TACO (Tools for Apache Cordova). Add to that the use of PhoneGap and the Ionic, a JavaScript framework for mobile to the cocktail and you are humming on all cylinders.

VS 2017 Mobile Center

Lastly, take a look at the new Visual Studio Mobile Center, currently in Preview. This is your one-stop shopping portal for all of those things that you used to have to discover, consume and manage separately, bringing them all together under one roof for the mobile developer. Need to be able to manage Application Lifecycle activities, for build, test and distribute? Got it! Need to authenticate without changing your backend? Or use Facebook, Google, Twitter or a Microsoft Account to authenticate? Got it! For testing and running analytics like for crashes (backed by HockeyApp's crash reporting features), events metrics, and session metrics like how long a person is in your app (backed by Xamarin Test Cloud and Insights as well as Azure Mobile Experience), using the Mobile Center Analytics suite is the ticket.

 

Links:

Mobile Center

https://www.visualstudio.com/vs/mobile-center/

Mobile Center Preview Link

https://mobile.azure.com

Tools for Apache Cordova (TACO)

https://www.visualstudio.com/vs/cordova/

Ionic 2 Templates for VS2017

http://bit.ly/2nDlTJQ

NPM Task Runner

http://bit.ly/2neGgMs

Visual Studio 2017 New Debugging Features

Let's face it debugging your code isn't sexy. As coders, we probably spend the majority of our time debugging our code rather than actually coding. Coding means making money. Debugging usually means not making money. So there can be little fanfare for those that add features to debugging tools. However, I would say that these are the unsung heroes. With the release of Visual Studio 2017, there have been quite a few improvements and new features added to our debugging arsenal. I will only highlight a couple, but be sure to check out Kaycee Anderson's posts over on the Visual Studio blog for more information.

The New Exception Helper

VS2017 Exception Helper

There's nothing more frustrating when you are trying to find the exact cause of errors in your code then having to step through layers and layers and layers of nested trees of information to find that one nugget of information that will give you the answer, that one "ah ha" moment of clarity. The new Exception Helper removes all of those layers and surfaces the most important information up to the top and presents it in a dialog box for easy access. Additional, you can set the Exceptions settings, you control what parts of your code will throw exceptions and what parts won't. This way if you have a troublesome section (or one that a particularly messy colleague that you want to skip, you can create an exception setting for it so that you can get on with the code you want to really work on. This is especially useful for those parts of your code that you always know you are going to hit exceptions, such as signon or authorization code.

Diagnostic Tools Window Updates

VS2017 Diagnostic Windows UpdatesA new summary tab has been added to the Diagnostic Tools Window that let's you view the number of Application Insights and UI Analysis events (for UWP apps only) that occurred in your application. Also use the new window updates to take a memory snapshot of your heap as well as enable and disable CPU profiling

Performance Profiler Updates

The Performance Profiler can now attach (and re-attach) to a running process, saving valuable time starting and stopping and restarting your sessions to get the information that you need.

The CPU Usage Tool has several improvements including better external code support giving you better insights into the costs of library and framework functions when called by user code. Also the Functions view will now rank functions by their CPU cost.

Lastly, let's not leave off the new Click to Run feature. This works just like it sounds. Instead of setting endless breakpoints in your code (only to forget about them later), simply click on the green icon next to any line of code VS2017 Run to Click to run the application up to that point. This makes it really easy to step into and out of conditional sections of your code.

I hope this has given you a good taste of the latest improvement to something that we tend to take for granted, a robust debugging toolset within Visual Studio 2017.

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!

 

Artificial leaf captures light to power drug production

I've always concentrated on technologies or other tech subjects that I've been directly involved with. However, I do have a lot of interests and come across some pretty cool stuff. This is one of them. I was doing my usual look at my usual news sources and came across this article on TechCrunch.com about a small company in the Netherlands that is using artificial leaves to power the production of small batches of pharmaceuticals close to where they are need. Artificial Leaf

As the article says, artificial leaves aren't new. They are a class of device which passively converts light into power for various purposes, much like their organic counterparts in nature that convert light to energy via a process known as photosynthesis. As usual, nature's version is much more efficient and effective, but Timothy Noël and his team at Eindhoven University of Technology have developed a new type of sensor that is much more efficient than existing sensors, even on cloudy days. Pretty cool.

What other natural systems could we utilize or mimic to help ourselves? What about capturing the power of an awesomely powerful thunderstorm?

C.

Now why don't she write? Some life things actually

Hey there. It's been awhile right? Bet you were wondering where I've been. Well, as sometimes happens, life happened. My mom got sick and passed away in May. That was and continues to be a huge thing for me. I knew it was going to be, if and when it ever happened. But you know... no one or nothing can prepare you for how death and grief is going to hit you.

Then I was offered an opportunity running the delivery arm of a huge (!) strategic program that is to deliver a combination of process standardization and improvement with a single technology platform of Salesforce and PeopleSoft while eliminating redundant and outdated applications and data sources. So I've been busy setting up the mechanics, structures and tools needed to operationalize the project delivery for the program all the while also hiring and onboarding a team of seasoned, career project managers. And did I mention kicking off the largest of the new phase projects with a 4 month, 5 days a week, 8 hours a day set of workshops to work through, document and look for improvement and efficiencies for all the processes end to end, start to finish, from sales and recruiting through to time capture, billing and revenue recognition?

I've been a bit busy for sure. And working through a lot of personal shit. But I'm going to work to post here more. And now is a great time. Things are changing for me on the strategic program front. Plus I have just come back from the annual MVP Global Summit where we get to see all the new and cool things coming from our respective product groups. One of the best things is seeing and talking to the other MVPs, brilliant men and women whom consistently impress the crap out of me and whom I'm privileged to call some friends. It's like a big family reunion... but with huge amounts of tech gear.

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.

Hololens2

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.

KeyNote_InterconnectedPlatforms_Coversations

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.

Links:

//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:

Format(IIf(([Duration]=0),0,(IIf(([Estimated]="Yes"),0,(IIf(([Finish]<Now()),1,(ProjDateDiff([Start],Now())/[Duration])))))),"0%")

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

Hands On Labs for Creating Microsoft Graph apps on iOS, Android et al

Hey! If you've ever been interested in creating iOS, Android or Windows Phone apps that utilize data from Office 365 through the Microsoft Graph interface, but don't know how or where to get started you're in luck! Microsoft has made available some Hand's on Lab experiences for you to learn how to use, consume and really make your apps sing.

What is Microsoft Graph you say? Well, it's a one-stop shop endpoint for getting data out of Office 365 and into your app. Or as Microsoft likes to say: "One Endpoint to Rule Them All!" You might know it by another name, Office 365 unified API. No more having to find that specific oData feed url. Microsoft Graph takes the heavy lifting out of Azure AD authentication, getting ( and creating) calendar events, using O365 groups and so much more. And it's all right here.

Microsoft Graph

So take a look, have some fun and jump start your development.

Links: Microsoft Graph Home Page

 

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.

Links:

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.

workflow1

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.

workflow_requestHeaders

workflow_requestHeaders2

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.

workflow_checkout

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.

workflow_publish

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.

MSBandExpanded

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

StartScreen.jpg

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!