What makes a PM a great PM?

Written to the tune of:

Before going any further into this post, I should preface this by saying that anything and everything below is purely my subjective view on what makes a Program Manager a great Program Manager. I consider myself lucky enough to have experienced what it’s like to be a PM on a product team, and currently – on a content team, and this blog post is a reflection of my experiences across the two completely different organizations.

Continue reading What makes a PM a great PM?

Command line and vso-agent

Written to the tune of:

A while ago Microsoft released this wonderful thing called the VSO agent – a cross-platform build agent that you can set up on MacOS X and/or Linux and hook it directly to a VSO or TFS instance to handle automated builds with a lot of customization options. You can get it here.

So here comes the challenge – more often than not, the build agent should be automatically set up, but the documentation mentions that the instance details, such as the service URL, username and password are manually entered. Not exactly what you want to do in an automated scenario. The good news is that there is a (not so) secret option to use command line parameters for the vso-agent:

node agent/vsoagent.js --u YOUR_USERNAME --p VSO_ONE_USE_TOKEN --s https://VSO_URL.visualstudio.com --a AGENT_NAME --l AGENT_POOL_CAN_BE_DEFAULT

Voila! All of a sudden, you can include this in your deployment scripts.

Release of Hummingbird – distribution list converter

With the release of Outlook Groups, I got a lot of questions regarding the possibility of conversion of existing distribution groups to the new model. Instead of having users manually go through the process, I wrote a sample that demonstrates how it’s done with the help of EWS and Active Directory APIs. So how do you set it up?

Clone the repository here: https://github.com/Microsoft/hummingbird. You will get the project file with the associate source files. Open the project file (Hummingbird.csproj) and save the Visual Studio solution. Next, click on Manage NuGet Packages…

Visual Studio Screenshot - Manage NuGet Packagesimage

In the package manager, notice that there is an alert notifying you about the fact that you need to restore missing packages. Click on Restore.

Visual Studio 2015 - Restore NuGet Packagesimage

Once you have the packages restored, you can build the project and run the application:

Hummingbird - Main Screenimage

From here on, you will be able to use the application directly with O365. Click on Settings to configure all application parameters:

Hummingbird - Settings Screenimage

For the username, use the standard O365 email address. The server URL for the main EWS endpoint is https://outlook.office365.com/EWS/Exchange.asmx – make sure that you also select O365 as the target. Once you enter both the credentials and the server information, click on the respective Save buttons.

Moving forward, you will have everything required for migration. On the main page, you can enter the alias of the DL (skip the domain) and click on Create Backup. The output (as long as the alias is resolved) will be an .xmldl file that contains the original alias, DL owner and list of members. Hummingbird will not automatically delete the distribution list for you, so nothing to worry about. You can use this .xmldl file in the next step when you will create the group. If you want to preserve the alias, you will need to manually delete the DL first. Otherwise, the new group will be created with the new alias and a list of members from the original DL. Every member of the new group will receive a welcome email upon completion.

If you run into any issues, open a new bug on GitHub.

DubHacks 2015 (or why you should attend DubHacks 2016)

It’s Sunday night and I just came back from University of Washington, where we just closed the Fall 2015 edition of DubHacks. And all I can say is that it was, hands down, the most fun and rewarding hackathon experience that I managed to be a part of.

First, and the most important lesson – always let James Whittaker deliver a keynote. If there is one person who can energize a crowd of 600+ people in an auditorium, there really is no better choice than him (also, read this). Second lesson – caffeine is your best friend through 48 hours of hacking, but in reality it’s the people that are there. I came in as a mentor with Microsoft, but I ended up having an amazing time with students and many other professionals, all with different backgrounds and experiences, as cliché as it sounds. But really – every single person that I met there were amazingly passionate, smart and full of boundless energy.

So why was DubHacks so great?

Location

IMG_0097IMG_0097

Do you know what is the best college campus in the country? Spoiler alert, it is UW. According to TheBestColleges.org, it’s #20 in the list of the most beautiful campuses. Trust me, it’s not. It’s #1. What stood out is that even though it was during a football game when we started (go Dawgs!), there was plenty of parking available both in the Red Square and the adjacent lots. Despite being a huge campus, it is really easy to navigate – there are maps placed around that can always tell you where to go, which ended up being extremely helpful for attendees. Did I mention the fact that the entire event was spread across three buildings?

People

IMG_0085IMG_0084

DubHacks successfully managed to get the best and the brightest from UW, a couple of other colleges in neighboring states – we even had an entire bus with students coming from University of British Columbia (Vancouver, BC)! In addition to that, we worked together with an extremely talented group of mentors – experts in Azure, web backend, web frontend, Windows Apps, IoT, Machine Learning and many others. And throughout the night and the following day we handled a huge influx of question on how the above technologies fit into a wide variety of projects (my phone died by 3AM from all the questions coming in). To be honest, it was also a tremendous learning experience for myself – I don’t think I’ve coded as much for Android as I did in these two days to learn about ways to integrate Mobile Services into photo-identifying applications.

Icing on the cake was the honor to look at the projects students presented as an expo judge – every single table that I stopped by to grade the project was not giving the slightest vibe of a two-day project. Which brings me to my next point.

Projects

IMG_0093.jpgIMG_0093

The participating students really showed what they are up to in college – doing some serious hacking in and out of class. I’ve seen an electronic frisbee trajectory tracker, an app that automatically calculates and learns about the types of pizza your coworkers might want on a certain day, an entire system that uses Kinect to analyze how distracted a driver is when on the road, a game that is asking its players to find certain objects and up their score by scanning those directly with their webcam (all in the browser, by the way), tools that can generate videos from text (which, by the way, won first place), a project that will reward users with BitCoin for biking (while it’s mined on an Azure VM – the more you bike, the more cores the VM spins up and the more BitCoin you make) and many many more. It’s absolutely mindblowing just what skills all people here posses, and I am excited to see where they are going to take those (*cough*Microsoft is hiring*cough*).

Everything else

IMG_0079IMG_0064

IMG_0066_thumb.jpgIMG_0066

IMG_0096_thumb.jpgIMG_0088

Food trucks (thanks Microsoft!), lip sync battle, piroshki, cup stacking, good music, stickers, more good food (read: Chipotle catering), frisbees, raffles and everything there is great about hackathons – all exceeded expectations at DubHacks. Above all, mad kudos go to the organizers – @MahirK95, @nitrogen, @skylerkidd and @MaliaImayama.

If there is one hackathon that you want to pick to attend in a year, look no further than this.

Non-Store Windows Phone Apps: Integrate With the Settings Hub

Let’s say you are developing an application that needs to integrate in the Settings Hub. For most applications, this is not at all necessary – if you are not altering the behavior of the device (e.g. through global settings that go beyond the application), you do not need to do this. However, for experimentation purposes, it is, in fact, possible to integrate your app in there.

NOTE: I’ve already talked about this in my StackOverflow answer, but putting together this blog post for documentation purposes.

First step, create a new Windows Phone application. There is no difference in the type of the application that you are creating, but since this is a simple demo, I am going to go ahead and create a blank app:

image

Without making any changes to the app, run it on a device or the emulator. Notice that by default, the application is listed along with all other applications, so nothing out of the ordinary at this point.

wp_ss_20140316_0002

If you are already working with Windows Phone, you should know that the application placement in terms of launch location is determined in the application manifest file (WMAppManifest.xml). By default, and if you are using the latest Visual Studio + Windows Phone SDK couple, you will get the ‘visual designer’ for the manifest.

image

Not exactly what’s needed for the purpose of this post, because we don’t have a way to modify the target launch ‘hub’. Instead, right-click on the manifest file in Solution Explorer and select View Code:

image

What I need here is a HubType attribute, that is not listed by default:

image

So just adding it in there, with the target value of 268435456 will do the trick. However, be aware that since you already deployed the application as a ‘normal app’ (belonging to the standard launch hub), you need to make sure that you uninstall the app first, and then re-deploy it, for it to appear in the Settings hub. Notice the change:

wp_ss_20140316_0003

There is no simple way to uninstall the app from the Settings Hub, however, because there is no ‘tap-and-hold’ way to pick the ‘Uninstall’ option. The way to do it would be to re-deploy another app, with the same ProductID (from WMAppManifest.xml). Even if you use the same application with HubType removed, you will need to create a different one to replace it.