Screenshot taken from http://www.microsoft.com/visualstudio/stories/scaling-agile-across-the-enterprise/

At the TechEd North America 2014 yesterday many new products and features have been released or announced.

But besides real, delivered software and "early previews" Microsoft also let us see behind their company facade and announced their "Engineering Stories" where you get deep insights in their processes and ways of working. And you might have wondered, how Microsoft was able to change their release cycles in the last years down from 3 years to 3 Weeks to support business needs - this is already the first story: "Scaling Agile to the Enterprise".

I hope to see more interesting stories - Microsoft definitively has the size, complexity to let us look behind the scenes a bit ;)

Microsoft Austria was organising a quite interesting event today: Cross-Platform-Development in a heterogenous world. As you probably know Microsoft and Xamarin are partnering on a global level to enable C# devs to write great apps for iOS and Android. And since we at code4ward are having our products also released for OS X, Android and iOS, we were curious to see best practices in this area.

Agenda

The agenda was a bit fuzzy and contained two parts: the first part mentioned that Xamarin will be presented and how this tool can help developing mobile apps for iOS and Android. And a second part where they show "which tools Microsoft is offering for cross-platform development and how Microsoft Azure can be utilised here.

After a quite high-level overview ("what makes a modern app?" and why building native apps is hard), we got introduced to client technology choices - also on a high level (how does decision between a web app and a native app impact portability, performance, updatability etc. Then we've seen a short demo on how using Visual Studio and Xamarin to develop an Android app. The rest of the time was used for a lengthy presentation of Windows Azure Mobile services and Visual Studio Online and how a Web Load Test can be conducted in the cloud.

Depending on the chosen client technology stack you get different products and distribution models

Wrap Up

The topic itself is interesting for many devs - as room was almost full with devs. But the majority of the presented content missed the point in my opinion. Quite some time was spent on advertising Azure with features that are barely relevant for cross-platform development. Additionally an annoying amount of time was spent with copy and pasting code around in Visual Studio solutions - this should be prepared upfront in a a working solution, since we never walked through the code anyways (and of course, this is error prone ...)

I really expected much more focused, in-depth and hands-on development content - because reworking your codebase to support cross-platform development is not easy. I recommend having a level provided with the agenda so one can better evaluate, if an event is helpful.

A Last Recommendation

Much better depth of content I found in the //build/ presentation of Miguel de Icaza on "Go Mobile with C# and Xamarin" - watch this! He gives an overview on how Xamarin works and how to structure your source code.

I blogged about my first try to host my development environment here and here.

But at the event "On Cloud Nine - the developer roadshow" (find my wrap up here) of Microsoft Austria I got some tips on how to improve the performance of the VM in the cloud.

1) Affinity Groups & Regions

By default, this should be configured correctly anyway, but its good to know: Windows Azure Data Centers consist of Containers that have racks inside. On this hardware you find the typical services running (compute, storage, access control etc). The Affinity Group now tells Windows Azure to put objects next to each other (e.g. compute and storage) so latency is minimised and also you don't pay for any traffic (traffic inside a data center is free). This means: make sure, your VM and your hard disc share the same Affinity Group.

Of course, the region should be the same as well ...

2) Availability Sets

When talking about hosting a VM, Availability Sets are a bit tricky: if you have configured them, they enable the 99.995% SLA. Good. but this requires that the VM is kept redundant and is basically running twice (so you get a fast fail-over in case of a problem). But you also get charged twice!

3) I/O Performance

Since Azure has some limits on the Max IOPS that are also bound to the size of the VM, make sure you have different disks to work with. I have my sources and the compilation on separate disk.

4) Optimise Performance of the VM

Windows Azure VMs can not host Client operating systems (only a Server OS). But you can install the Desktop Experience to get the Windows 8 experience on your Windows Server 2012 R2 machine (and do this as early as possible).

Chose "Advanced System Settings" on the screen System window in the Control Panel

There is a couple of settings you can optimise:

Visual Effects

Configure this to your liking, the less effects, the less settings enabled, the less performance and RDP data transfer you will get.

Disable all Visual Effects for best performance of your VM

Some Visual Effects interfere with the settings you can specify in your RDP connection. E.g. "Show window contents while dragging":

server config: showrdp-config: do not showeffecteive: not shown

server config: do not showrdp-config: showeffective: not shown

Processor Scheduling

Change the setting to "Allow best performance for Programs" since we work interactively with the VM most of the time.

Make sure, you have selected "Programs" as Processor scheduling settings

If I change these settings on my local Windows PC it requires me to restart. The Windows Azure hosted VM does not require this - but just to be sure, I suggest to restart (to honour the old days ;)

4) Optimise Performance on RDP connection

Many of the advanced settings you can chose in RDP (Text Cursor blinking etc) don't have any effect if you have overwritten them in the Advanced Settings I showed unter topic 3)

Nevertheless check, if you have set the right

Reduce the Color Depth to 15 bit (using Royal TS)

Some WLANs restrict your ports - so I configured my VM to listen to port 80

Is it fast now?

I still don't get the performance I have on my local dev machine - what i hate most is the slight lag between my input (e.g. when typing in an editor) and other UI related changes/actions. Compiling or CPU intensive work is not an issue - thats fast enough.

But this might have something to do with the desktop resolution for a 30" monitor that I use ;)

On December 11th Microsoft Austria organised the "On Cloud Nine - The Developer Roadshow" event at the Microsoft Austria office. The two presenters were Michael Koester from Microsoft Germany and Clemens Reijen from Microsoft Corporation. All Slides and backup material will be distributed later via codefest.at (as well as the video recordings)

The main idea of this day was to present 5 scenarios on from a developers point of view - I think, thats a good idea to engage more devs in this topic!

The Agenda

Keynote by Michael Koester

Scenario 1: The Cloud Developer Desktop

Scenario 2: Using Cloud Dev/Test Sandbox Environments

Scenario 3: Scaling the ALM infrastructure using the Cloud

Scenario 4: ALM in the Cloud with Team Foundation Service

Scenario 5: Building Cloud Applications with Windows Azure

The Keynote was a bit too high-level (announced as level 100 as I remember) and thus not very useful (remember: this event was intended for developers).

One argument for using the Cloud though was "If your code is not fully efficient, just throw more (cloud) resources on it" - WTF? I strongly hope, that this is NOT an official recommendation from Microsoft ...

Scenario 1: The Cloud Developer Desktop

Since I have tried hard to set up a development VM in Azure for some time (see here and here) the there was not much new Info for me. Though I got two interesting pointers from Michael Koester on how to improve the performance and I will blog about these soon.

One thing was remarkable though: to get the promised SLA of 99.995% uptime, you have to configure an Availability Set for your VM. That was known - but: In order to get this working, Azure is basically running BOTH VMs to guarantee the uptime. This means, you are charged twice for VM minutes.

Scenario 2 / Scenario 3 / Scenario 4

Many demos were shown on how you configure your VM to get access to on premise resources, how to structure your Cloud Services and how to manage your infrastructure with PowerShell. Unfortunately he mentioned many times, how "uncomfortable" PowerShell is - also his demos were failing quite often. I expected a bit more than "Be prepared to see a lot red in your PowerShell console" ...

Clemens Reijen stressed the capability to be agile and fast - a new team member should do a meaningful (!) check during his first day! Thats quite a challenge I would say. But at least it looks like the infrastructure (account, project creation, source control, etc) is not the biggest hurdle anymore.

They also touched licensing topics which is important if you want to use Windows Azure in your company for real (e.g. how to organise the billing)

Scenario 5: Building Cloud Applications with Windows Azure

This was a short wrap up on whats new in using Azure in a PaaS fashion (as it was provided by Microsoft since 3 years) - this was very high-level and just presented the main building blocks a dev can use. I would like to see a whole day on this stuff since it can save a significant amount of time if you know how to integrate these instead of building your own ...

MSDN Benefits for Windows Azure

Again and again it was stressed, that - if you have a MSDN subscription - you can use Azure resources for about 75€ / month for free! (e.g. thats 3 VMs for 16 hours / day!) These resources can not be pooled and accumulated if you have not used them - but you can use this to play around and explore the stuff!

Wrap up

Similar to my Visual Studio 2013 VIP Launch event wrap up I got some important pointers in some areas. The "Tips and Tricks" slides are a good sum up of each topic, but: having direct access to the presenters again proved to be a very valuable possibility to grab their knowledge :)

In order to stream the Trace information to your browser/command line window, you have to connect to the Kudu-URL and /logstream at the end.

In the Kudu Dashboard you can see the various REST endpoint URLs and also there is a nice Diagnostic console! It's still an experimental feature, but you can see what the backend already alows... I wonder, if we see an integration with Visual Studio here in the future... (you can even edit the files on the server in the console)

Since browsers buffer content until they get a complete document (which will never happen in this case) or they get a large amount of data you wont see output immediately. It is recommended to use curl or any other command line toll that does not buffer.

Option 2: Use curl and the Command line

You can also display the trace output via a standard curl call (curl is a command line URL transfer library that works with http, ftp and many more):

—————————————- Microsoft Visual Studio —————————————- This subscription is not registered to use the following resources: Website. The remote server returned an unexpected response: (400) Bad Request.—————————————- OK —————————————- 

Remark: You know, that you can copy the text of a MessageBox in Windows just by pressing CTRL-C, right? ;)

I have my Windows Azure subscription based on my MSDN account and of course I can create websites... And yes, I was logged in with my VS2013 into Visual Studio Online.

The solution

After some playing around I logged in into Windows Azure via the normal web browser and voila ... I tried again and the message was gone... I wonder, what this changed or if that has something to do with me using Chrome as my default browser?

Somehow this is using the browser (and maybe its cookies?) to communicate with Windows Azure?

Using Chocolatey i was very quick in setting up a basic set of tools that i usually need when developing stuff:

cinst notepadplusplus (sometimes needed)

cinst GoogleChrome (nothing to say here)

cinst Console2 (extende console)

cinst sysinternals (best tool-set ever for windows)

cinst fiddler4 (proxy for debugging)

cinst Wget (commandline http calls)

cinst curl (commandline http calls)

cinst linqpad4 (test your linq)

cinst baretail (tail -f for windows)

cinst greenshot (Screenshot tool)

put this to a batch-file and you are super-fast in setting up another dev-machine

Keeping your tools at hand fresh

once you have done this, with the command cup all you can easily bring all packages up to date - sweet :) This can eben be automated so once a week you refresh all your tools by default.

Is there any development-tool missing at Chocolatey? If so, think of creating your own package. Its a fairly easy process (as long as you are not scared by commandlines...) which I will blog about soon.