Visual Studio ALM Assessment – in German Available

can be downloaded from

http://vsaralmassessment.codeplex.com/downloads/get/608569

What is Visual Studio ALM Assessment ?

Although the pace of new development technologies, processes and tools present a big challenge to keep up with, software quality has its roots in Application Lifecycle Best Practices, which is usually independent from the latter. Are you consulting or part of an organization which is constantly under release stress? Are you experiencing issues that make you and your developers less productive? You know that there are issues and potential for improvement but you don’t know where to start?

Then Rangers ALM Assessment is exactly for you.

image

Use the Rangers ALM Assessment to find out pragmatically where your organization stands in case of ALM Best Practices by using the assessment questions and qualitative discussions. Based on the results, make an action plan for improvements.

Monitor the Visual Studio ALM Rangers blog, using tag VSAAG, for the latest information on this project.

Visual Studio ALM Rangers

This guidance is created by the Visual Studio ALM Rangers, who have the mission to provide out of band solutions for missing features and/or guidance. This content was created with support from Microsoft Product Group, members of Microsoft Services, Microsoft Most Valued Professionals (MVPs) and technical specialists from technology communities around the globe, giving you a real-world view from the field, where the technology has been tested and used.

image182 image192 image202

What is included in the downloads?

The solution is divided in separate packages to give you the choice of selective downloads. The default download is the first of the listed packages:

  • Delivery Guidance contains scenario based practical guidance, frequently asked questions and quick reference posters.
  • Rangers ALM Assessment contains the assessment questions and the planning tools.
  • Kick Off Presentation gives you a head start to introduce the assessment process.

Future (Planned)

  • Integration with Online Catalyst Assessment
  • Weighted Questions
  • Option to select “not applicable” as response

How to create C++ Apps with XAML

This blog post will help explain how XAML and C++ work together in the build system to make a Windows Store application that still respects the C++ language build model and syntax.  (Note: this blog post is targeted towards Windows Store app developers.)

The Build Process

From a user-facing standpoint, Pages and other custom controls are really a trio of user-editable files.  For example, the definition of the class MainPage is comprised of three files: MainPage.xaml, MainPage.xaml.h, and MainPage.xaml.cpp.  Both mainpage.xaml and mainpage.xaml.h contribute to the actual definition of the MainPage class, while MainPage.xaml.cpp provides the method implementations for those methods defined in MainPage.xaml.h.  However, how this actually works in practice is far more complex.

This drawing is very complex, so please bear with me while I break it down into its constituent pieces.

Every box in the diagram represents a file.  The light-blue files on the left side of the diagram are the files which the user edits.  These are the only files that typically show up in the Solution Explorer.  I’ll speak specifically about MainPage.xaml and its associated files, but this same process occurs for all xaml/h/cpp trios in the project.

The first step in the build is XAML compilation, which will actually occur in several steps.  First, the user-edited MainPage.xaml file is processed to generate MainPage.g.h.  This file is special in that it is processed at design-time (that is, you do not need to invoke a build in order to have this file be updated).  The reason for this is that edits you make to MainPage.xaml can change the contents of the MainPage class, and you want those changes to be reflected in your Intellisense without requiring a rebuild.  Except for this step, all of the other steps only occur when a user invokes a Build.

Partial Classes

You may note that the build process introduces a problem: the class MainPage actually has two definitions, one that comes from MainPage.g.h:

 partial ref class MainPage : public ::Windows::UI::Xaml::Controls::Page,
      public ::Windows::UI::Xaml::Markup::IComponentConnector
{
public:
   void InitializeComponent();
   virtual void Connect(int connectionId, ::Platform::Object^ target);

private:
   bool _contentLoaded;

};

And one that comes from MainPage.xaml.h:

public ref class MainPage sealed
{
public:
   MainPage();

protected:
   virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override;
};

This issue is reconciled via a new language extension: Partial Classes.

The compiler parsing of partial classes is actually fairly straightforward.  First, all partial definitions for a class must be within one translation unit.  Second, all class definitions must be marked with the keyword partial except for the very last definition (sometimes referred to as the ‘final’ definition).  During parsing, the partial definitions are deferred by the compiler until the final definition is seen, at which point all of the partial definitions (along with the final definition) are combined together and parsed as one definition.  This feature is what enables both the XAML-compiler-generated file MainPage.g.h and the user-editable file MainPage.xaml.h to contribute to the definition of the MainPage class.

Compilation

For compilation, MainPage.g.h is included in MainPage.xaml.h, which is further included in MainPage.xaml.cpp.  These files are compiled by the C++ compiler to produce MainPage.obj.  (This compilation is represented by the red lines in the above diagram.)  MainPage.obj, along with the other obj files that are available at this stage are passed through the linker with the switch /WINMD:ONLY to generate the Windows Metadata (WinMD) file for the project. This process is denoted in the diagram by the orange line.  At this stage we are not linking the final executable, only producing the WinMD file, because MainPage.obj still contains some unresolved externals for the MainPage class, namely any functions which are defined in MainPage.g.h (typically the InitializeComponent and Connect functions).  These definitions were generated by the XAML compiler and placed into MainPage.g.hpp, which will be compiled at a later stage.

MainPage.g.hpp, along with the *.g.hpp files for the other XAML files in the project, will be included in a file called XamlTypeInfo.g.cpp.  This is for build performance optimization: these various .hpp files do not need to be compiled separately but can be built as one translation unit along with XamlTypeInfo.g.cpp, reducing the number of compiler invocations required to build the project.

Data Binding and XamlTypeInfo

Data binding is a key feature of XAML architecture, and enables advanced design patterns such as MVVM.  C++ fully supports data binding; however, in order for the XAML architecture to perform data binding, it needs to be able to take the string representation of a field (such as “FullName”) and turn that into a property getter call against an object.  In the managed world, this can be accomplished with reflection, but native C++ does not have a built-in reflection model.

Instead, the XAML compiler (which is itself a .NET application) loads the WinMD file for the project, reflects upon it, and generates C++ source that ends up in the XamlTypeInfo.g.cpp file.  It will generate the necessary data binding source for any public class marked with the Bindable attribute.

It may be instructive to look at the definition of a data-bindable class and see what source is generated that enables the data binding to succeed.  Here is a simple bindable class definition:

[Windows::UI::Xaml::Data::Bindable]
public ref class SampleBindableClass sealed {
public:
   property Platform::String^ FullName;
};

When this is compiled, as the class definition is public, it will end up in the WinMD file as seen here:

This WinMD is processed by the XAML compiler and adds source to two important functions within XamlTypeInfo.g.cpp:CreateXamlType and CreateXamlMember.

The source added to CreateXamlType generates basic type information for the SampleBindableClass type, provides an Activator (a function that can create an instance of the class) and enumerates the members of the class:

if (typeName == L"BlogDemoApp.SampleBindableClass")
{
  XamlUserType^ userType = ref new XamlUserType(this, typeName, GetXamlTypeByName(L"Object"));
  userType->KindOfType = ::Windows::UI::Xaml::Interop::TypeKind::Custom;
  userType->Activator =
   []() -> Platform::Object^
   {
     return ref new ::BlogDemoApp::SampleBindableClass();
   };
  userType->AddMemberName(L"FullName");
  userType->SetIsBindable();
  return userType;
}

Note how a lambda is used to adapt the call to ref new (which will return a SampleBindableClass^) into the Activator function (which always returns an Object^).

From String to Function Call

As I mentioned previously, the fundamental issue with data binding is transforming the text name of a property (in our example, “FullName”) into the getter and setter function calls for this property.  This translation magic is implemented by the XamlMemberclass.

XamlMember stores two function pointers: Getter and Setter.  These function pointers are defined against the base type Object^(which all WinRT and fundamental types can convert to/from).  A XamlUserType stores a map<String^, XamlUserType^>; when data binding requires a getter or setter to be called, the appropriate XamlUserType can be found in the map and its associatedGetter or Setter function pointer can be invoked.

The source added to CreateXamlMember initializes these Getter and Setter function pointers for each property.  These function pointers always have a parameter of type Object^ (the instance of the class to get from or set to) and either a return parameter of type Object^ (in the case of a getter) or have a second parameter of type Object^ (for setters).

if (longMemberName == L"BlogDemoApp.SampleBindableClass.FullName")
{
  XamlMember^ xamlMember = ref new XamlMember(this, L"FullName", L"String");
  xamlMember->Getter =
  [](Object^ instance) -> Object^
  {
    auto that = (::BlogDemoApp::SampleBindableClass^)instance;
    return that->FullName;
  };

  xamlMember->Setter =
  [](Object^ instance, Object^ value) -> void
  {
    auto that = (::BlogDemoApp::SampleBindableClass^)instance;
    that->FullName = (::Platform::String^)value;
  };
  return xamlMember;
}

The two lambdas defined use the lambda ‘decay to pointer’ functionality to bind to Getter and Setter methods.  These function pointers can then be called by the data binding infrastructure, passing in an object instance, in order to set or get a property based on only its name.  Within the lambdas, the generated code adds the proper type casts in order to marshal to/from the actual types.

Final Linking and Final Thoughts

After compiling the xamltypeinfo.g.cpp file into xamltypeinfo.g.obj, we can then link this object file along with the other object files to generate the final executable for the program.  This executable, along with the winmd file previously generated, and your xaml files, are packaged up into the app package that makes up your Windows Store Application.

A note: the Bindable attribute described in this post is one way to enable data binding in WinRT, but it is not the only way.  Data binding can also be enabled on a class by implementing either the ICustomPropertyProvider interface or IMap<String^,Object^>.  These other implementations would be useful if the Bindable attribute cannot be used, particularly if you want a non-public class to be data-bindable.

For additional info, I recommend looking at this walkthrough, which will guide you through building a fully-featured Windows Store Application in C++/XAML from the ground up.  The Microsoft Patterns and Practices team has also developed a large application which demonstrates some best practices when developing Windows Store Applications in C++: project Hilo.  The sources and documentation for this project can be found at http://hilo.codeplex.com/

Tastenkombinationen für Windows 8 und Windows RT

 

In Windows 8 und Windows RT stehen Ihnen neben den bekannten auch neue Tastenkombinationen zur Verfügung. Die einfachste Möglichkeit, eine Suche auf dem Startbildschirm durchzuführen, besteht beispielsweise darin, einfach einen Suchbegriff einzugeben. Sie befinden sich nicht auf dem Startbildschirm? Dann drücken Sie einfach die Windows Logo-Taste? WindowsLogo-Taste, um schnell zwischen dem Startbildschirm und der gerade geöffneten App zu wechseln. Wenn Sie mit den Tastenkombinationen nicht vertraut sind — oder gerne eine Liste aller Tastenkombinationen anzeigen würden —, dann rufen Sie die komplette Liste der Tastenkombinationen ab.

Im Folgenden sind einige der wichtigsten Tastenkombinationen für Windows aufgeführt.

 

 

Tastenkombination Aktion
Windows-Logo-Taste‌ Windows-Logo-Taste+Eingabe
 

PC durchsuchen

STRG+Plus (+) oder STRG+Minus (-)

 

Verkleinern oder Vergrößern einer großen Anzahl von Elementen, z. B. von an die Startseite angehefteten Apps

STRG+Mausrad

 

Verkleinern oder Vergrößern einer großen Anzahl von Elementen, z. B. von an die Startseite angehefteten Apps

Windows-Logo-Taste‌ Windows-Logo-Taste+C
 

Charms öffnen

Windows-Logo-Taste‌ Windows-Logo-Taste+C
 

Befehle für die App öffnen

Windows-Logo-Taste‌ Windows-Logo-Taste+F
 

Charm „Suche“ zum Suchen von Dateien öffnen

Windows-Logo-Taste‌ Windows-Logo-Taste+H
 

Charm „Freigeben“ öffnen

Windows-Logo-Taste‌ Windows-Logo-Taste+I
 

Charm „Einstellungen“ öffnen

Windows-Logo-Taste‌ Windows-Logo-Taste+J
 

Haupt-App und angedockte App wechseln

Windows-Logo-Taste‌ Windows-Logo-Taste+K
 

Charm „Geräte“ öffnen

Windows-Logo-Taste‌ Windows-Logo-Taste+O
 

Bildschirmausrichtung sperren (Hoch- oder Querformat)

Windows-Logo-Taste‌ Windows-Logo-Taste+Q
 

Charm „Suche“ zum Suchen von Apps öffnen

Windows-Logo-Taste‌ Windows-Logo-Taste+W
 

Charm „Suche“ zum Suchen von Einstellungen öffnen

Windows-Logo-Taste‌ Windows-Logo-Taste+Z
 

In der App verfügbare Befehle anzeigen

Windows-Logo-Taste‌ Windows-Logo-Taste+Leertaste
 

Eingabesprache und Tastaturlayout wechseln

Windows-Logo-Taste‌ Windows-Logo-Taste+Strg+Leertaste
 

Zu einer zuvor ausgewählten Eingabe wechseln

Windows-Logo-Taste‌ Windows-Logo-Taste+Tabulator
 

In den geöffneten Apps blättern (Desktop-Apps ausgenommen)

Windows-Logo-Taste‌ Windows-Logo-Taste+STRG+TAB
 

In den geöffneten Apps blättern (Desktop-Apps ausgenommen) und Apps beim Blättern andocken

Windows-Logo-Taste‌ Windows-Logo-Taste+UMSCHALT+TAB
 

In umgekehrter Reihenfolge in den geöffneten Apps blättern (Desktop-Apps ausgenommen)

Windows-Logo-Taste‌ Windows-Logo-Taste+Bild-Auf
 

Startbildschirm und Apps auf den linken Monitor verschieben (Apps auf dem Desktop werden nicht auf den anderen Monitor verschoben)

Windows-Logo-Taste‌ Windows-Logo-Taste+Bild-Ab
 

Startseite und Apps auf den rechten Monitor verschieben (Apps auf dem Desktop werden nicht auf den anderen Monitor verschoben)

Windows-Logo-Taste‌ Windows-Logo-Taste+Umschalttaste+Punkt (.)
 

App links andocken

Windows-Logo-Taste‌ Windows-Logo-Taste+Punkt (.)
 

App rechts andocken

Visual Studio ALM Days 2012 – Slides Online

Between 28. and 30. November was in München the Visual Studio ALM Days 2012 with Top-Keynote-Speakers like Sam Guckenheimer and Brian Harry, many MVPs, Microsoft Experts that speaks about  Application Lifecycle Management with Visual Studio. The collegs from Microsoft have uploaded the session slides.

Management Day

Keynotes

  • Sam Guckenheimer: Build / Meaure/ Learn – Download
  • Christian Binder, Frank Prengel, Daniel Meixner: Windows 8, Windows Phone 8 und das Surface – Download
  • Brian Harry: Moving to Cloud Cadence – Dowload

Track 1

  • Neno Loje: Continuous Delivery with Visual Studio Team Foundation Server 2012 – Download
  • Thomas Schissler: Kanban – Agile 2.0? – Download
  • Udo Wiegärtner: Anleitung zum Ruinieren eines Scrum-Teams – Download
  • Thomas Schissler: Metriken – Transparenz als erster Schritt zur Verbesserung – Download
  • Jens Donig: Gegensätze ziehen sich an – Formale Anforderungsspezifikationen und agile Softwareentwicklung unter einen Hut bekommen – Download

Track 2

  • Niels Hebling, Dirk Lüdtke, Gerald Morrison: Empower your Teams with TFS: Wie SAP den Team Foundation Server nutzt – Download
  • Dr. Tobias Hildebrand, Martin Fassunge: Combining and Development at SAP – Download
  • Stefan Mieth, Jan Gröver: In V Formation über den Acker – Formale Entwicklung und Lieferantensteuerung in der Landmaschinenentwicklung – Download
  • Dr. Elmar Jürgens: Software Quality Control: Wie stelle ich die Wartbarkeit von Code in Eigenentwicklung und Outsourcing sicher? – Download
  • Gerold Herold, Sven Hubert: Herausforderungen bei der Einführung einer ALM Umgebung bei Siemsn Healthcare – Download

Track 3

  • Matthias Jauernig, Daniel Tonagel: Professionelle Windows 8 Business App-Entwicklung –Download
  • Christian Heger: Macheten für den Test-Dschungel – Download
  • Jewgeni Horn, Timo Kühn, Jürgen Dietz: A capella im Raional Konzert – Einführung TFS in die IBM Welt – Download
  • Sven Wittorf, Birgit Stehlik: Normenkonforme Softwareentwicklung für Medizinprodukte mit dem Microsoft Team Foundation Server – Download
  • Ognjen Bajic: Die fehlende Verknüpfung im automatisierten Entwicklungsprozess: Die Verbindung zum Betrieb (DevOps) – Download

Technical Day

Keynote

  • Brian Harry: Technical Keynote – Download

Track A

  • Christian Binder, Neno Loje: Effiziente Teams mit Visual Studio Team Foundation Server 2012 –Download
  • Artur Speth: Entwicklerproduktivität mit Visual Studio 2012 – Download
  • Frank Maar, Nico Orschel: Test Management mit Visual Studio 2012 – Download
  • Frank Maar: Load Testing mit Visual Studio 2012 – Download
  • Thomas Schissler: Praktischer Einsatz von Visual Studio 2012 Lab Management – Download
  • Christian Binder, Neno Loje: The Agile Developer in Visual Studio 2012 – Download

Track B

  • Rainer Stropek: Continuous Integration mit TFS und Windows Azure Websites – Download
  • Armin Neudert: DB LifeCycle Management mit den SQL Server 2012 Data Tools und TFS 2012 –Download
  • Torsten Mandelkow, Christian Pappert: Office und SharePoint 15 Entwicklung mit Visual Studio 2012 – Download
  • Dirk Bäumer: Wie TypeScript die Entwicklung großer JavaScript Anwendungen vereinfacht; ein Erfahrungsbericht – Download
  • Mike Wübbold: Zweisam ist besser als einsam: Wie Project Server und Team Foundation Server zueinander finden – Download
  • Artur Speth: Heterogenes ALM mit Team Explorer Everywhere – Download

Track C

  • Jean-Marc Prieur: Visual Studio Ultimate Dependency Graphs and the Code Index SDK – What´s new in VS2012 Update 1 – Download
  • Sven Hubert: Strategien für Code Sharing mit TFS 2012 Version Control – Download
  • Thomas Trotzki: TFS-Plugins – Download
  • Nico Orschel: UI-Automatisierung mit CodedUI für Fortgeschrittene – Download
  • Karsten Kempe: TFS Prozess Templates – Einstellungssache – Download
  • Sven Hubert: TFS Build 2012 für Fortgeschrittene – Download