What programming language to learn? It doesn’t matter.

Written to the tune of:

Prompted by this reddit thread, the question in the title seems to be a fairly common one among Computer Science undergards as well as those that are just now starting up in the field – What programming language should I choose? Is there a possibility that I will choose the wrong one? Should I learn one or many?

Continue reading What programming language to learn? It doesn’t matter.

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.