Sascha Dittmann: Azure Service Fabric: Stateless Virtual Actors

Azure Service Fabric (Preview) - Virtual ActorsVergangene Woche berichtete ich bereits über die neue Azure Service Fabric Preview der Microsoft Azure Plattform. Diese soll Entwicklern dabei helfen, schneller und unkomplizierter Anwendungen für die Cloud bauen zu können.
Dabei können verschiedene Programmiermodelle eingesetzt werden, welche ich in diesem, sowie den kommenden Blog Posts, näher vorstellen möchte.
Starten möchte ich mit den Stateless Virtual Actors…

Distributed Virtual Actors

Das Modell der »Distributed Virtual Actors« ist nicht völlig neu.
Es entstand im Rahmen des Orleans Projektes der Microsoft Research.

Project "Orleans" invented the Virtual Actor abstraction, which provides a straightforward approach to building distributed interactive applications, without the need to learn complex programming patterns for handling concurrency, fault tolerance, and resource management. Orleans applications scale-up automatically and are meant to be deployed in the cloud. It has been used heavily by a number of high-scale cloud services at Microsoft, starting with cloud services for the Halo franchise running in production in Microsoft Azure since 2011. It was made available as open source in January 2015.

Wer mehr über die Orleans Virtual Actors wissen möchte, sollte sich das Research Paper durchlesen.

Durch den Azure Service Fabric Dienst, wird dieses Modell mit verschiedenen Funktionalitäten angereichert, wie beispielsweise:

  • Application Lifecycle Management
  • Beeinflussung der Microservice-Platzierung im Cluster
  • Ressourcenverwaltung
  • Sicherheitsfunktionen
  • Dienstüberwachung

Somit stellt dieses Programmiermodell die höchste Ebene in den Schichten der Azure Service Fabric API dar.

Azure Service Fabric - Runtime API Layers

Wann sollte man Virtual Actors verwenden?

Virtual Actors eignen sich besonders, wenn die Applikation aus mehreren unabhängigen Einheiten besteht, welche ihre eigene Geschäftslogik und Statusinformationen enthalten.

Virtual Actors sind isolierte Single-Thread-Komponenten.
Sie interagieren mit dem Rest des Systems, was auch andere Virtual Actors sein können, indem sie asynchrone Nachrichten austauschen (Request-Response-Pattern).
Sie existieren immer, müssen also weder explizit erzeugt noch entfernt werden.

Stateless Virtual Actors

Als Beispiel für einen »Stateless Virtual Actor« möchte ich einen einfachen Taschenrechner hernehmen.

Nach man also, wie in meinem vergangenen Blog Post beschrieben, das Azure Service Fabric SDK installiert hat, kann in Visual Studio ein neues »Stateless Actor Service« Projekt erzeugt werden.

Visual Studio: Stateless Actor Vorlage

Stateless Actor ProjectsGenauer gesagt, werden hierbei 4 Projekte in eine Solution gepackt.

Bei meinem Beispiel wären das:

  • StatelessCalculatorActor
    Dieses Projekt enthält die Implementierung und Konfiguration des Actors
  • StatelessCalculatorActor.Client
    Dieses Projekt enthält eine Konsolenapplikation, um den Actor zu testen
  • StatelessCalculatorActor.Interfaces
    Dieses Projekt enthält die Schnittstellenbeschreibungen, die sich die Actors und Clients teilen.
  • StatelessCalculatorActorApplication
    Dieses Projekt enthält das »Applicaton Manifest«, sowie die PowerShell-Skripte, die benötigt werden, um den Dienst paketieren und installieren bzw. deinstallieren zu können
  • Das Calculator-Projekt habe ich nachträglich angefügt und enthält eine WPF-Applikation, die den Actor verwendet.

Implementierung des Taschenrechner-Actors

Als Erstes benötigt unser Taschenrechner-Actor eine Schnittstellenbeschreibung im StatelessCalculatorActor.Interfaces Projekt.
Diese beinhaltet Methoden für die 4 Grundrechenarten unseres Taschenrechners.

public interface IStatelessCalculatorActor : IActor
{
  Task<double> Add(double x, double y);
  Task<double> Substract(double x, double y);
  Task<double> Multiply(double x, double y);
  Task<double> Divide(double x, double y);
}

 

Als Zweites benötigen wir die Implementierung des Taschenrechner-Actors im StatelessCalculatorActor Projekt.
Diese leitet von der Basis-Klasse Actor ab und implementiert unsere Schnittstelle.
Außerdem können wir die mitgelieferte ActorEventSource Klasse nutzen, um Statusinformationen an die Service Fabric Runtime zu melden. 

public class StatelessCalculatorActor : Actor, IStatelessCalculatorActor
{
  public async Task<double> Add(double x, double y)
  {
    ActorEventSource.Current.ActorMessage(this, "Add {0} and {1}", x, y);
    return await Task.FromResult(x + y);
  }

  public async Task<double> Divide(double x, double y)
  {
    ActorEventSource.Current.ActorMessage(this, "Divide {0} by {1}", x, y);
    return await Task.FromResult(x / y);
  }

  public async Task<double> Multiply(double x, double y)
  {
    ActorEventSource.Current.ActorMessage(this, "Multiply {0} and {1}", x, y);
    return await Task.FromResult(x * y);
  }

  public async Task<double> Substract(double x, double y)
  {
    ActorEventSource.Current.ActorMessage(this, "Substract {1} from {0}", x, y);
    return await Task.FromResult(x - y);
  }
}

 

Zuletzt müssen nur noch die Clients implementiert werden.
Auch diese referenzieren das Schnittstellen-Projekt, sowie die Service Fabric NuGet-Pakete.

Um den Actor ansprechen zu können wird ein Proxy-Objekt benötigt.
Dieses kann über die ActorProxy-Factoryklasse erzeugt werden.
Dabei verwende ich eine zufällige Actor-ID, die mich auf einen der verfügbaren Actor-Instanzen verweist, sowie den Pfad zur übergeordneten Dienst-Applikation.
Auf diese Konzepte werde ich in einem späteren Blog Post näher eingehen.

public static void Main(string[] args)
{
  var proxy = ActorProxy.Create<IStatelessCalculatorActor>(
    ActorId.NewId(), "fabric:/StatelessCalculatorActorApplication");

  Console.WriteLine(
    "[Actor {0}]: 1 + 5 = {1}",
    proxy.GetActorId(),
    proxy.Add(1, 5).Result);

  Console.WriteLine(
    "[Actor {0}]: 11 - 6 = {1}",
    proxy.GetActorId(),
    proxy.Substract(11, 6).Result);

  Console.WriteLine(
    "[Actor {0}]: 3 * 5 = {1}",
    proxy.GetActorId(),
    proxy.Multiply(3, 5).Result);

  Console.WriteLine(
    "[Actor {0}]: 9 / 2 = {1}",
    proxy.GetActorId(),
    proxy.Divide(9, 2).Result);
}

 

Das komplette Taschenrechner-Beispiel habe ich hier zur Verfügung gestellt.



Der Beitrag Azure Service Fabric: Stateless Virtual Actors erschien zuerst auf Sascha Dittmann.

codefest.at [MS]: Unsere neuesten Windows 10 Geräte sind da: Die Rasperry Pi 2

Learn how to set up the Raspberry Pi 2 and connect it to your computerIm Februar haben wir verkündet “Windows 10 Coming to Raspberry Pi 2

Letzte Woche auf der //build/ gab es dann die Freigabe für die “Windows 10 IoT Core Insider Preview and Raspberry Pi 2” auch wenn das in der Keynote der //build 2015 gar nicht erzählt wurde

Und ab heute haben wir Sie im Haus: Unsere brandneuen Raspberry Pi2 Model B

Wer schon einen Raspberry Pi 2 sein eigen nennt: Die Windows 10 IoT Core Insider Preview für den Raspberry Pi 2 kann von http://windowsondevices.com/ heruntergeladen werden.

Plakativ gesagt bekommt Ihr damit das beste Betriebssystem auf dem kleinsten Computer. :-)

Wenn Ihr dem Windows für IoT-Entwicklungsprogramm beitreten wollt dann macht Ihr das am besten auf der Webseite: Windows 10 für Raspberry Pi 2.

Sucht Ihr Anleitungen was ihr mit Eurem neuesten Windows Gerät machen könnt? Bitte sehr! Auf https://www.hackster.io/windowsiot/ findet ihr jede Menge Anregungen und Anleitungen wie zum Beispiel:

Weitere Anleitungen: http://ms-iot.github.io/content/win10/StartCoding.htm

Weitere Downloads: http://ms-iot.github.io/content/Downloads.htm

Alle die im Besitz eines Raspberry Pi 2 sind können diesen also jetzt auch mit Windows 10 betreiben.

Alle die noch keinen Raspberry Pi 2 haben können noch immer einen Raspberry Pi 2 Model B geschenkt bekommen!!

Viel Spaß!!

Marco Scheel: Links for 2015-05-04 [del.icio.us]

Martin Richter: VS-2015 RC ist verfügbar – ein kurzer Einblick aus der C++ Sicht

Seit den letzten Tagen des April ist nun auch der Release Candidate für VS_2015 verfügbar.
http://www.visualstudio.com/en-us/news/vs2015-vs.aspx

Die Liste ist lang. Was sich für C++ Neues ergibt dagegen doch recht übersichtlich. 😉

Hier ein paar Punkte, die ein erster Test und Streifzug ergab:

  • Man sollte in jedem Fall die angepasste Installation verwenden. Ansonsten wird der MFC Sourcecode nicht mit installiert (siehe auch Kommentar von Michael Külshammer)
  • “Fast” alle Projekte ließen sich fehlerfrei kompilieren. Es gab zwar einen Haufen neuer Warnungen aber, diese haben eher mit dem Stil des Programmierens zu tun. Speziell sind es C4456, C4457, C4458 (Declaration off… hides previous …  declaration). Im Klartext. Ich verwende immer mal wieder eine Variable it oder i gerne, die auch im äußeren Scope vorhanden ist.
    Für diese neuen Warnings gibt es allerdings bisher keine Dokumentation.
  • Und eben die typischen Fallen in denen man eben thirdparty Libs (z.B. OpenSSL) eben neu erzeugen muss.
  • Leider benötige ich für ein spezielles Update Programm noch die MBCS Variante der MFC. Diese ist zwar über das Netz als Link bei MS vorhanden, führt aber zu einer 404 Sackgasse. (Dieses Programm benutzt extrem alten Code, bei denen noch niemand an char/wchar_t bzgl. der Windows API und anderes dachte und Neuschreiben hatte ich bisher vermieden. :) )
  • Nervig war eine “neue” Compilermeldungen C1041, aber diese ist nirgendwo beschrieben (wie auch andere nicht). Online jedenfalls nicht. Ich bekam den Hinweis, dass eine PDB Datei nicht geschrieben werden kann und ich bitte die Option /FS verwenden soll. Die Ursache ist mir unklar, weil bei späteren Kompilierungsversuchen das Ganze durchlief.
  • Etwas länger musste ich für den folgenden Fehler suchen:
     (odbccp32.lib(dllload.obj) : error LNK2019: unresolved external symbol _vsnwprintf_s referenced in function StringCchPrintfW).
    Hier scheint noch etwas mit dem SDK auch in der Release Version nicht zu passen. Auf connect.microsoft.com fand ich einen entsprechenden Eintrag um diesen Fehler zu umgehen. Scheinbar ist das neue “korrigierte” SDK, dass in der Lösung versprochen wird im RC noch nicht enthalten.
  • Vieles in der UI hat sich geändert. So werden zum Beispiel die Breakpoint mit einem eigenen Kontexttoolbar angezeigt und benutzt man diesen dann werden die Einstellungen nicht in einem Dialog angepasst, sondern innerhalb des Sourcecode Fensters wird am unteren Rand ein Box für die Eigenschaften geöffnet. Das ist definitiv gewöhnungsbedürftig. Und nur mit der Maus zu bedienen.
  • Im MFC Sourcecode findet sich nur eine neue Header-Datei afxlayout.h. In dieser Headerdatei findet sich die Deklaration für die Klasse CMFCDynamicLayout. Diese Klasse wird direkt in CWnd als Zeiger verwendet und erlaubt die Neupositionierung von Kindfenstern damit für alle Fenstertypen. D.h. nicht nur Dialoge. D.h. man kann in jedem MFC-Fenster EnableDynamicLayout ausführen und entsprechend die Kindfenster neu anordnen lasen wie man es selber definiert.
    Die Implementierung schließt scheinbar die Nutzung des Ressourceneditors ein, denn die Einstellungen können aus dem Ressourcentyp RT_DIALOG_LAYOUT ausgelesen werden. In den Fenstereigenschaften eines Controls findet sich nun der Abschnitt Dynamic Layout in dem man Position und Größe in Prozent zur Gesamtänderung angeben kann.
  • Wer die Header genauer untersucht findet klitze kleine Änderungen Hier und Da wie z.B. die Unterstützung von runden Ecken bei Tooltipps.
  • In der ATL konnte ich bisher keine Erweiterungen und gravierende Änderungen finden.
  • Die meisten Änderungen im ATL und MFC sind Änderungen im Trace Code. Statt “%s” wird nun konsequent “%Ts” als Formatierungszeichen verwendet. Angekündigt war eine grundsätzliche Änderung bzgl. “Wide String Format Specifiers” allerdings wurde diese bereits im April zurückgezogen (siehe hier).
  • Vermisst habe ich einige CRT Source Dateien, die normalerweise im VC\CRT\SRC Order liegen. Der Ordner war in meiner Installation leer und enthielt nur weitere Ordner.
    Mir war es auch nicht möglich beim Testen in den CRT Code zu steppen. Zumindest bei mir wurden keine passenden Source Dateien gefunden.
  • Mit den CRT-DLLs werde ich mich ab morgen mal befassen. Auch hier hat Michael Külshammer gerade eben einen Beitrag in meinem Blog geschrieben.

Summa summarum nur minimale Anpassungen in meinen Projekten für den Umstieg von VS-2013 auf VS-2015, darüber hinaus so gut wie keine (erkennbaren) Änderungen in der CRT/ALT und MFC. Was es an neuen Compiler Features gibt findet man in den Blogs ausführlicher beschrieben als ich das kann. Zudem halte ich mich nicht für den großen C++ Sprachen-und-Standard-Guru.

 


Copyright © 2010 Martin Richter
Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.
(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)

Martin Richter: Der Eisenbahnerstreik trifft auch mich…

Ich habe mich entscheiden aufgrund des Eisenbahnerstreiks nicht nach Erding auf die ADC++ zu fahren. :(

Auto kam nicht in Frage und eine so ungewisse Rückfahrt am Mittwoch Abend wollte ich mir nicht antun.

Nachtrag:
Ich kann mir nicht verkneifen noch meine Meinung abzugeben. Streikrecht finde ich gut, aber wenn es hauptsächlich nur noch darum geht wer unter den Gewerkschaften das Sagen hat und sich zwei Gewerkschaften mit unterschiedlichen Zeilen in einem Betrieb streiten hört der Spaß auf.
Und wie ich die letzten Berichte verstanden habe, kriegt die GDL einfach nicht den Hals voll und will immer alles alleine bestimmen. Und dass die Bahn eben nur einen Tarif möchte mit zwei Gewerkschaften ist nur zu verständlich.
Ich mag falsch liegen, bin aber sauer, da bei jedem 2 von 3 Streiks bisher eines unserer Familienmitglieder massiv durch die Streiks betroffen wurde und ich den Sinn bei der GDL nicht mehr verstehen kann… Mir kommt es vor wie bei einem kleinen Kind im Sandkasten: “Der Bagger ist aber mir alleine…”


Copyright © 2010 Martin Richter
Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.
(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)

Holger Schwichtenberg: Ignite: Nächstes Microsoft-Großereignis startet heute um 15.30 Uhr

Die Microsoft Ignite findet erstmalig statt. Sie ersetzt frühere Exchange-, SharePoint-, Lync-, Project-, Microsoft-Management- und TechEd-Konferenzen.

Karsten Kempe: Visual Studio Code – der neue Editor der Visual Studio Familie

VSCode-VersionsMicrosoft hatte auf der //build/ Konferenz eine Überraschung parat. Visual Studio Code ist ein code-optimierter Editor für Windows, Linux und Mac und bereichert nun die Visual Studio Familie. Damit stellt Microsoft zum ersten Mal ein cross-plattform Entwicklungswerkzeug bereit. Erich Gamma, einer der legendären „Gang of Four“ Autoren, war an der Entwicklung maßgeblich beteiligt und hat auf der Konferenz erste Einblicke in den neuen Editor gewährt.

„Visual Studio Code a new choice of tool that combines the simplicity of a code editor with what developers need for their code-edit-debug cycle.” Erich Gamma

VSCode Editor oder IDE

Laut Gamma gibt es prinzipiell nur zwei unterschiedliche Werkzeug-Typen, um Source Code zu bearbeiten. Einmal durch Editoren, die in der Regel leichtgewichtig und schnell, für viele Sprachen und Workflows verwendbar und keyboardzentriert sind. Und dann durch umfangreiche Entwicklungswerkzeuge (IDEs), die das krasse Gegenteil zu einem Editor darstellen. Diese IDEs, wie z.B. Visual Studio, Eclipse, xCode, sind meist projektorientiert und verstehen den Code, der geschrieben wird und unterstützen z.B. durch Intellisense oder Syntaxinterpreter. Außerdem unterstützen IDEs den Entwickler durch eingebaute Build- und Debugging-Mechanismen und manchmal auch durch integrierte Applikation LifeCycle Management Funktionen.

Visual Studio Code ist laut Gamma ein Editor mit IDE-Features, da Visual Studio Code Syntax-Highlighting und Intellisense für einige Sprachen (C#, TypeScript, JavaScript/node, JSON, etc.) ermöglicht – weitere Sprachen werden noch Folgen. Super ist außerdem die vorhandene Git-Unterstützung, mit der jedes beliebige Git-Repository verwaltet werden kann. Dazu kommt noch eine gute Diff-Funktion und ein Debugger für ASP.NET 5 und Nodejs Apps.

Die ersten Bits von Visual Studio Code haben wir bereits in Visual Studio Online und im Debugger-Fenster des IE11 gesehen. Die Code Editoren dort haben nämlich dieselbe Code-Base wie Visual Studio Code. Demnach hat Microsoft also schon einiges an Feedback über das Produkt einsammeln können und Verbesserungen in das Release einfließen lassen.

Visual Studio Code Sample

Wie auf dem Screenshot zu sehen ist, erkennt der Editor unnötige Usings (grün unterringelt) und hilft beim Schreiben des Codes durch Intellisense. Unten links in der blauen Leiste wird angezeigt, dass sich das editierte File in einem Master Respository befindet und eine Änderung im Repository durchgeführt worden ist. Gleich daneben befinden sich Build- und Projekt-Informationen (zwei Fehler und 15 Warnings).

Holt Euch Visual Studio Code unter code.visualstudio.com und holt Euch erste Hand-Informationen z.B. von John Papa, der den Editor schon auf Herz und Nieren geprüft hat.

[1] code.visualstudio.com

[2] johnpapa.net

[3] http://blogs.msdn.com/b/somasegar/archive/2015/04/29/introducing-visual-studio-code-visual-studio-2015-rc-application-insights-public-preview-and-net-core-for-linux-and-mac.aspx

Norbert Eder: #fotomontag #18

Jeden Montag ein Foto. Der #fotomontag.

Dieses Bild entstand eher zufällig beim Spaziergang durch die Stadt zusammen mit meiner Familien. Ich kannte den Spiegel noch nicht (der wurde wohl offensichtlich neu montiert?), aber ich wusste ich musste ein Foto schießen. Auch wenn es nicht perfekt ist und so seine Schwächen hat, mich hat es doch zum Nachdenken angeregt.

Spieglein an der Wand

Spieglein an der Wand

Bildinformationen:
16mm
ISO 100
f/5.6
1/10

Hast du eine Meinung zum Foto? Ja? Dann lass sie mich doch bitte wissen und bewerte es in den Kommentaren.

The post #fotomontag #18 appeared first on Norbert Eder.

Marco Scheel: Links for 2015-05-03 [del.icio.us]

Marco Scheel: Links for 2015-05-02 [del.icio.us]

Holger Schwichtenberg: Rückblick auf Tag 2 der Build 2015

Am zweiten Tag von Microsofts Konferenz gab es keine großen Neuigkeiten mehr, sondern im Wesentlichen noch Details zu den Ankündigungen den ersten Tages.

Holger Sirtl: Azure News on Friday (KW19/15)

Auch diese Woche gab’s wieder viele Nachrichten zur Data Factory, SQL Database, Azure Storage, Service Fabric, Application Insights, Blob Storage, DocumentDB und viele weitere Azure Services. Hier sind nähere Infos dazu…

Datum Nachricht
30.04. Azure Friday: Azure Blob Storage 101
In dieser neuen Folge von Azure Friday dreht sich alles um Azure Blob Storage. Gezeigt wird eine einfache App, die auf Blob Storage zugreift, und mit Fiddler werden die REST-Aufrufe dahinter gezeigt.
30.04. Application Insights unterstützt jetzt auch ASP.NET v5 Anwendungen
Dieser Blogpost beschreibt, wie’s geht.
30.04. Unterstützung von Partitionierungen in DocumentDB
Dieser Artikel zeigt, wie mit dem .NET SDK Partitionen bei der Nutzung von DocumentDB eingesetzt werden können.
29.04. BUILD2015-Konferenz mit zahlreichen Ankündigungen zu Azure
29.04. Azure SDK 2.6 verfügbar
Downloads für VS2012, VS2013, VS2015 RC
28.04. Verbesserungen im Azure Preview Portal (April 2015)
Dieser Artikel beschreibt, welche Verbesserungen es im neuen Azure Portal im letzten Monat gegeben hat.
28.04. MVA-Kurs: Exploring Microservice Architecture
Am 5. Mai gibt es einen kostenlosen Online-MVA-Kurs zum Thema “Exploring Microservices in Docker and Microsoft Azure”.
27.04. Policy Expressions in Azure API Management
Via API Management lassen sich bestehende APIs vermarkten, betreiben, Aufrufe überwachen, steuern, abrechnen etc. Bevor API Management Aufrufe an die API bzw Rückgaben an den Aufrufer weiterreicht, können diese über Policys gesteuert (gefiltert, konvertiert, etc) werden. Dieser Blog-Artikel geht speziell auf diesen Aspekt von API Management ein.
24.04. Beispielszenarien für Data Factory Deployments
In der Data Factory können neuen Konfigurationen jetzt auf Basis bestehender Beispiel-Deployments erstellt werden.

Karsten Kempe: //build 2015 – Tag 2

build15_logoDer zweite Tag der //build/ Konferenz war spannend, aber weit weniger aufregend. Durch die Keynote des Tages habe Steve Guggenheimer und John Shewchuk geführt und haben den Entwicklern das enorme Potential Ihres heutigen Eco-Systems aufgezeigt. David Treadwell hat die Universal Windows Platform detailliert vorgestellt und Joseph Shirosh hat über die Macht von Informationen philosophiert.

Die heutige Keynote bestand aus sehr vielen Code Beispielen zur Universal Windows Platform und sollte verdeutlichen wie einfach es ist, mit einer einzigen Code-Basis verschiedene Device Größen anzuprogrammieren. Microsoft hat laut Steve “Guggs” Guggenheimer inzwischen verstanden, dass es wichtig ist, die Entwicklungsplattform über Szenarien zu erklären.

Developer Ecosystem

Er sagt, es gäbe unendlich viele Möglichkeiten für jeden Einzelnen, es gehe nur noch darum die Möglichkeiten der Plattform zu nutzen.

build15_devConv

Als Beispiel möchte ich ein Projekt aus der “Media and entertainment” conversation erwähnen, weil ich das ziemlich cool finde. Das Projekt Propellerhead ist ein Kollaborationsportal für Künstler weltweit, um miteinander Musik zu machen. Die App nutzt die neuen APIs der Plattform und die Power der Microsoft Cloud, um die einzelnen Artefakte der Künstler zu verbinden und zusammenzufügen.

David Treadwell, Cooperate Vice President bei Microsoft, demonstrierte außerdem die Möglichkeiten der Universal Windows Plattform. Eine Universal Windows App soll mit einer Code-Basis auf allen erdenklichen Geräte-Klassen (IoT-Devices, Desktop, Mobile, XBox, etc.) ausführbar sein.

build15_UWP

Angefangen bei kleinen Displays von Smartphones bis hin zu großen Displaytypen wie beim Surface Hub, es soll immer eine einheitliche User Experience ermöglicht werden. Und um das alles möglichst einfach für die Entwickler zu halten, verspricht Microsoft folgendes:

  • eine einheitliche Design-Sprache und ein einheitliches Control-Set
  • eine API und ein App-Package
  • einfaches Entwickeln und Debuggen in Visual Studio
  • einen Distributionspfad für alle Geräteklassen

Microsoft hat ein ehrgeiziges Ziel: in weniger als zwei Jahren eine Milliarde Windows 10 Devices auf dem Markt zu haben. Und das wird nur gelingen, wenn Entwickler hochwertige und innovative Anwendungen schreiben, die dem Benutzer zum Umstieg auf das neue Windows 10 Eco-System bewegen. Ich finde die Idee genial, auf allen meinen Windows Geräten die gleiche App bedienen und mich überall gleich gut zurechtfinden zu können. Hoffentlich klappt es auch – wir werden sehen.

[1] http://channel9.msdn.com/events/build/2015?Media=true&wt.mc_id=build_hp

Holger Schwichtenberg: Neue Preview-Version für Windows PowerShell 5.0

In dem aktuellen Windows-10-Preview (Build-Nummer 10074) ist auch eine neue Vorabversion der PowerShell 5.0 enthalten.

codefest.at [MS]: Die Keynote der //build 2015, und was nicht erzählt wurde

Mit Kino Events in Wien, Linz und Graz (Schnell und einfach zum Microsoft //build Keynote-Streaming!) haben wir gestern gemeinsam mit vielen von Euch einen super spannenden und auch für uns überraschenden Abend verbracht.

WP_20150429_17_10_44_Pro

Unser "The Future isn´t written yet" Roll-Up hat noch nie so gut zu einer Veranstaltung gepasst wie gestern:

Gestern wurde eine wahre Lawine an Neuerungen losgetreten die ich hier gar nicht alle aufzählen kann. in einem Wort zusammengefasst: Legendär!!

Wer nicht dabei war, sollte sich unbedingt eine der folgenden Ressourcen ansehen:

Wir hatten in der Pause nach der Keynote noch einige angeregte Gespräche mit begeisterten Teilnehmern, und auch unser Surface 3 Stand war stets umlagert und wurde regelrecht gestürmt.

WP_20150429_20_39_01_Pro

Alles in allen ein Super Cooler Event, und vielen Dank an alle Beteiligten!!

Ah, ja. Da war doch noch was. Was auf der Keynote nicht erzählt wurde und dennoch super spannend ist: Gestern wurde auch die “Windows 10 IoT Core Insider Preview” zum Download freigegeben. Alle die im Besitz eines Raspberry Pi 2 sind können diesen jetzt auch mit Windows 10 betreiben. mehr zu diesem Thema dann noch später. Nur eines noch. Ihr könnt noch immer einen Raspberry Pi 2 Model B geschenkt bekommen!!

PS: Auch bei der Ignite Keynote am Montag könnte noch einiges kommen. Wer also am Montag noch dabei sein möchte: Microsoft Ignite Live-Streaming: Zeit Feuer zu fangen!

Holger Schwichtenberg: Rückblick auf Tag 1 der Build 2015

Am ersten Tag von MIcrosofts Konferenz gab es Neuigkeiten zu Apps, Windows, Visual Studio auf anderen Plattformen, Azure und Hololens. Eine Zusammenfassung der Highlights.

Holger Sirtl: Azure-Neuigkeiten von der BUILD 2015

Gestern gab es auf der BUILD 2015 ein Feuerwerk an Announcements zu allen Bereichen der Microsoft Plattform. Satya Nadella gruppierte in seiner Keynote die Ankündigungen in drei Kategorien: Azure, Office und Windows. Die Nachrichten zu Azure möchte ich hier kurz zusammenfassen:

  • Neuerungen in Azure SQL Database (inkl. Elastic Pool)
  • Azure Data Lake
  • Azure SQL Data Warehouse
  • Azure Service Fabric
  • Azure Resource Manager
  • Neuerungen in Azure Storage
  • Azure SDK 2.6 verfügbar

Neuerungen in Azure SQL Database

SQL Database Elastic Pool

Elastic Pool richtet sich primär an SaaS-Anbieter, die eine größere Zahl an Datenbanken (z.B. eine DB pro Kunde) betreiben. Bislang muss für jede einzelne Datenbank individuell festgelegt werden, welche Speichergrößen- und Performanz-Ziele sie maximal benötigt. Daraus ergibt sich dann die Leistungsstufe (B, S0, S1, S2,…). Dies hat zur Folge, dass die einzelnen Datenbanken für „Peak-Szenarien“ ausgelegt und damit über einen längeren Zeitraum betrachtet tendenziell überprovisioniert werden, da diese Peaks ja nicht immer bestehen und die Datenbanken auslasten.

Mit Elastic Pools besteht nun die Möglichkeit, Datenbank-Pools zu definieren und für diese gemeinsame Speichergrößen- und Performanz-Ziele festzulegen. Diesen Pools können dann Datenbanken (auch während des laufenden Betriebs) hinzugefügt und auch wieder herausgelöst werden. Datenbanken eines Pools teilen sich dann die definierten Kapazitäten, wobei für einzelne Datenbanken auch maximale Kapazitätsnutzungen definiert werden können, womit vermieden wird, dass eine Datenbank wegen eines Peaks alle anderen Datenbanken des Pools komplett lahm legt.

Eine Beispielrechnung: Gegeben sei ein Pool, für den festgelegt wird, dass allen zugehörigen Datenbanken 200 Gigabyte Speicher und 200 eDTUs (elastic database throughput units = Performanzmetrik für SQL Datenbanken) zur Verfügung stehen. Diesem könnte man beispielsweise 10 Datenbanken zuweisen und festlegen, dass jede Datenbank maximal 50 eDTUs nutzt (was auf DTUs bezogen einer S2 Datenbank entspricht). Damit könnte jede Datenbank im Schnitt 20 Gigabyte Größe haben und 20 DTUs nutzen (entspricht auf DTU bezogen einer S1 Datenbank), bei Bedarf aber auch mehr bekommen. Preislich sähe dies wie folgt aus (Preise aus dem Pay-as-you-go-Modell!):

  • Kosten nach neuem Modell: 200 eDTU x 0,0023 €/eDTU/h + 10 Datenbanken x 0,0013 €/DB/h * 744h = 351,91 €
  • Kosten nach altem Modell: 5 Datenbanken (S1) + 5 Datenbanken (S2) = 391,34 €

Transparend Data Encryption

SQL Database erhält damit die Funktion des SQL Servers, mit dem Kundendaten in SQL Database bei der Speicherung verschlüsselt werden können.

Fulltext-Search verfügbar in SQL Database

Ab sofort ist (auch in bestehenden) Datenbanken die Volltext-Suche in text-basierten Datenfeldern möglich.

Weitere Informationen unter:

Azure Data Lake

Data Lake ist ein Repository in dem beliebige Arten von Daten zentral gespeichert, verwaltet und Analysewerkzeugen zur Verfügung gestellt werden können. Dabei können quasi beliebige Datenmengen verarbeitet werden. Data Lake hat folgende Eigenschaften:

  • Hadoop File System kompatibel zu HDFS, womit Data Lake als Datenquelle in HDInsight, Hadoop etc. genutzt werden kann.
  • Größte Datenvolumen (im Petabyte-Bereich) und hoher Durchsatz
  • Integrierbar mit bestehenden Daten-Lösungen im Unternehmen und weiteren Azure Services wie Active Directory, HDInsight, Data Factory etc.

Weitere Informationen unter:

Azure SQL Data Warehouse

Azure SQL Data Warehouse ist ein elastischer Data-Warehouse-as-a-Service Dienst, mit dessen Hilfe sehr schnell massiv parallele Data-Warehouse-Infrastrukturen aufgebaut und skaliert werden können. Die Daten können verschiedenen weitere Azure Services wie HDInsight, Azure Machine Learning, Azure Data Factory und PowerBI zur Verfügung gestellt werden.

Azure Service Fabric

Ab sofort steht eine Developer Preview der Azure Service Fabric zur Verfügung. Mit der Service Fabric lassen sich Microservice-basierte Anwendungen flexibel auf einen Pool von Compute-Ressourcen verteilen und automatisch managen. Die eingesetzten Ressourcen können zustandsbehaftet oder zustandslos sein. Service Fabric überwacht den Ressourcen Pool, übernimmt die Verteilung der Services-Instanzen auf die Ressourcen, verwaltet Failover-Szenarien (bei Ausfall einer Ressource werden die betroffenen Instanzen neu auf die verbleibenden Ressourcen verteilt und die ausgefallene Ressource ersetzt).

Weitere Informationen:

Azure Resource Manager

Ab sofort ist es im Rahmen einer Public Preview möglich, Azure Compute, Networking und Storage Ressourcen über den Azure Resource Manager bereitzustellen. Mit Hilfe des Ressource Managers können VMs, Virtual Networks, Storage Accounts, NICs, Loadbalanver und andere PaaS Services wie App Service (mit Web Apps, API Apps, Logic Apps, Mobile Apps) und SQL Databases über ein einheitliches Anwendungs- und Beschreibungsmodell provisioniert werden.

Der Resource Manager unterstützt darüber hinaus folgende Funktionen:

  • Tags zum Identifizieren von Ressourcen (um bspw. Kosten für Ressourcen eines Tags zu bestimmen)
  • Rollenbasierte Zugriffskontrolle auf Ressourcen
  • Eine JSON-basierte Beschreibungssyntax für Ressourcen
  • Parametrisierung von Ressourcen, so dass diese zum Deployment-Zeitpunkt konfiguriert werden können.

Weitere Informationen:

Neuerungen Azure Storage

Premium Storage allgemein verfügbar (GA)

Azure Premium Storage ist jetzt allgemein verfügbar. Damit steht ein hoch-performanter Storage (SSDs als Speichermedium, bis zu 32 TB, bis zu 64.000 IOPS pro VM) zur produktiven Nutzung bereit.

Storage Client Library für C++ (v1.0.0)

Auch für C++-Programmierer gibt es jetzt eine API, um mit Azure Storage zu arbeiten. Hierüber können alle wichtigen Funktionen (Anlegen, Lesen, Löschen etc.) in den relevanten Storage-Bereichen (Queues, Blobs, Tables etc.) genutzt werden.

Technischer Support für Azure Files

Für Kunden mit entsprechenden Support-Verträgen besteht jetzt die Möglichkeit, Support für Fragen rund um Azure Files in Anspruch zu nehmen.

Client-seitige Verschlüsselung (Preview)

Die Azure Storage Client Library für .NET unterstützt jetzt (endlich) auch client-seitige Verschlüsselung von Inhalten, die im Azure Storage abgelegt werden sollen. Dies geschieht mit nur wenigen Zeilen Code im Client.

Xamarin Client Library (Preview)

Für Xamarin gibt es nun auch eine Azure Storage Client Library. Damit wird es möglich, Azure Storage aus einer gemeinsamen C#-basierten Codebase für iOS-, Android- und Windows-Store-Apps heraus zu nutzen.

Informationen zur Roadmap

  • Append Blob wird in Zukunft Page- und Block-Blobs ergänzen. Dieser ist auf schnelle Append-Operationen hin optimiert.
  • Zeitnah wird eine iOS Client Library als Preview verfügbar sein.
  • Shared-Access-Signatures werden um die Funktionen “Storage Account SAS”, “Protocol SAS” und “IP Restricted SAS” erweitert.
  • Azure Import/Export wird ab Sommer 2015 auch in Japan und Australien verfügbar sein.

Weitere Informationen:

Azure SDK 2.6 verfügbar

Azure SDK 2.6 steht ab sofort zum Download bereit. Dieses enthält unter anderem folgende Funktionen/Erweiterungen:

  • Tools für Azure Resource Manager
  • Verbesserte Diagnosefunktionen für Cloud Services
  • Werkzeuge für App Service

Weitere Informationen

Karsten Kempe: //build 2015 – Tag 1

BUILD 2015 KeynoteDie Microsoft //Build/ Konferenz ist gestartet und ich habe das Glück live vor Ort zu sein. In den kommenden Tage möchte ich Euch meine Eindrücke zu den jeweiligen Konferenztagen mitteilen und über einige der Neuigkeiten berichten. Die Konferenz wurde heute von Satya Nadella eröffnet und die Keynote war aus meiner Sicht ein absoluter Hammer und hat mich am Ende sogar sprachlos gemacht. Aber alles der Reihe nach…

Satya Nadella hat alle Teilnehmer herzlich begrüßt und mit Ihnen einen kurzen Rückblick auf die vergangenen 40 Jahre von Microsoft unternommen. Damals wie auch heute ist Microsofts Vision “Empower every person and every organization on the planet to achieve more”. Der grundlegendste Unterschied zu damals ist wohl, dass Microsoft offener geworden ist und sogar Brücken zu anderen Plattformen und Technologien baut. Laut Nadella bietet Microsoft die perfekte Umgebung, um diese Vision zu erreichen.

build15_platformOpportunity

Die Microsoft Cloud soll als Klebstoff zwischen den Welt agieren – “no matter what kind of developer you are” (S. Nadella), Office 365 soll neue Wege für Produktivität und Geschäftsprozesse ermöglichen und Windows 10 soll eine neue Ära für ganzheitliches Betriebssystem einläuten.

Mit Microsoft Azure bietet Microsoft eine Plattform, um moderne Applikationen zu erstellen wie es vom heutigen Markt erfordert wird. Die hauseigenen Technologien stehen dabei zwar immer noch an erster Stelle, aber “fremde” Plattformen wie Linux oder Mac werden nicht mehr länger ignoriert, sondern zunehmend eingebunden.

build15_azure

Visual Studio Code

Um diese neue Offenheit zu unterstreichen, hat Microsoft heute einen neuen Editor veröffentlicht. Visual Studio Code steht ab sofort zum Download bereit und bereichert die Visual Studio Familie.

build15_vscode

Visual Studio Code ist ein cross-platform Editor, der auf Windows, Linux und Mac läuft und zahlreiche Sprachen unterstützt. Scott Hanselmann hat live on stage eine .NET Applikation auf einem Ubuntu System in VS Code editiert und ge-debugged. Damit wird die Visual Studio Plattform zu einem Entwicklungswerkzeug für jeden Entwickler “Best-in-class tools for every developer”.

Universal Windows Platform Apps

Und als ob das noch nicht schon genug Offenheit wäre, hat Microsoft noch einen oben drauf gesetzt. Mit der Universal Windows Platform ist es möglich Android und iOS Apps in und für Windows zu entwickeln, in dem der geschriebene Java/C++ oder Objective C Code in Windows Universal Apps portiert und unter Windows 10 zur Ausführung gebracht werden kann. Ob das allerdings wirklich so einfach funktioniert, muss erst noch bewiesen werden.

build15_uwpa

Microsoft Holographic Platform

Ein weiteres Highlight der Keynote war definitiv die Ankündigung der Microsoft Holographic Platform und die anschließende Demonstration von Microsoft Hololens. Die Microsoft Hololens ist ein Gerät mit der Hologramme in den Alltag projiziert werden können und somit eine “mixed reality” erschaffen. Das Gerät soll dabei wie jedes andere Windows 10 Device Universal Windows Apps ausführen können. Ob das wirklich stimmt beschreibt mein MVP-Kollege Marco Richardson auf seinem Blog – er durfte das nämlich heute schon ausprobieren.

Was in der Keynote präsentiert wurde war auf jeden Fall atemberaubend. Anwendungen die frei im Raum zur Ausführung gebracht werden können, Roboter die holographisch erweitert und per Gesten- und Sprachsteuerung angepasst und gesteuert werden können, haben mich sprachlos gemacht. Anfangs hielt ich alles noch für einen Fake, aber ich wurde eines besseren belehrt.

build15_hololense

Als einer von wenigen Besuchern durfte ich an einer limitierten Hands-on Demonstration teilnehmen und die Hololens-Brille ausprobieren. In einem Hotelzimmer habe ich eine private Einweisung für Hololens bekommen und zusammen mit einem “Trainer” einige Szenarien durchführen können. Das ist echt der Hammer! Virtuelle Gegenstände irgendwo im Raum platzieren und einmal drum herum laufen und das Objekt in 3D vor sich sehen. Oder Gegenstände in einem größeren Szenario per Sprache und Geste verändern, klonen und verschieben. Man stelle sich vor, ein Architekt könnte so zukünftig ein Haus oder ein Ingenieur sich einen 3D-Bauplan einer Maschine erschaffen.

Weitere Announcements

Wie bereits gesagt kann ich nicht alle Announcements des Tages zusammenschreiben, es sind einfach zu viele. Allerdings möchte ich auf diese hier noch aufmerksam machen:

  • Visual Studio 2015 RC und Team Foundation Server 2015 RC sind verfügbar
  • Visual Studio & Team Foundation Server 2013 Update 5 RC
  • TFS Build v.Next
  • Release Management v.Next Features für TFS 2015 Update 1
  • Visual Studio Online Extensions Team Calendar

Fazit

Es war ein wirklich ereignisreicher Tag auf der //Build mit unglaublich vielen Eindrücken. Fühlt Euch frei mir einen Kommentar zu hinterlassen, wenn Ihr etwas genauere Infos haben wollt. Verfolgt Channel 9, dort werden alle Sessions aufgezeichnet. Meine Favorites für heute sind die Keynote und die Release Management Session von Donovan Brown.

[1] http://channel9.msdn.com/events/build/2015?Media=true&wt.mc_id=build_hp

[2] https://code.visualstudio.com/

[3] http://www.microsoft.com/microsoft-hololens/en-us

[4] http://blogs.msdn.com/b/bharry/archive/2015/04/29/visual-studio-and-team-foundation-server-at-build-2015.aspx

Sascha Dittmann: Azure Service Fabric: PaaS auf Microservice-Basis

Azure Service Fabric (Preview)Nachdem Mark Russinovich bereits vor einigen Tagen die neuen Azure Service Fabric Preview angekündigt hatte, war es heute soweit. Im Rahmen der //build/ Konferenz wurde dieser Preview-Dienst für die Öffentlichkeit freigegeben. Diese neue PaaS soll Entwicklern dabei helfen, schneller und unkomplizierter Anwendungen für die Cloud zu konstruieren.

Ist Azure Service Fabric komplett neu?

Die Service Fabric-Plattform wird bereits seit über 5 Jahren bei Microsoft intern eingesetzt und stellt dabei die Basis für einige Microsoft Produkte, wie beispielsweise Azure SQL Database, Azure DocumentDB, Azure Networking, Event Hubs, Intune, Skype for Business (ehemals Lync) und Bing Cortana.

Ein Blick in die Vergangenheit

Bislang hatte man 3 Optionen, als Basis für Anwendungen in Microsoft Azure:

  • Azure App Services (Web Apps, Logic Apps, Mobile Apps und API Apps)
  • Cloud Services
  • Virtual Machines

Somit schwankte man in der Regel zwischen einem automatisierten Model zum Ausrollen und Betreiben von Applikationen, wie man es mit den Azure App Services hat, oder der vollen Kontrolle wie man es bei den Virtual Machines vorfindet.

Meiner Meinung nach, wird immer noch zu häufig zu den Virtual Machines (IaaS) gegriffen, da man es in der Vergangenheit so gewohnt war.
Für die eigenen Anwendungen, ist ein so hohes Maß an Kontrolle meist gar nicht nötig, und man macht sich mit dem dadurch entstehenden Manuellen Aufwand nur unnötig das Leben schwer.

Bei den Cloud Services, hatte man eine gute Kombination aus beiden Welten.
Man hatte ein einfaches Programmiermodell, und die Azure-Plattform nahm einem Vieles ab, und trotzdem konnte man durch ein hohes Maß an Kontrolle die VMs nach seinen Wünschen anpassen.

Das Ganze hatte natürlich auch einige Nachteile…

Cloud Service ArchitekturSchnell war man bei einem Cloud Services bei einer recht komplexen Architektur angelangt.
Diese bestand meist aus Web- und Worker Roles, Queues für die asynchrone Kommunikation zwischen den Rollen, sowie Speicherdiensten, wie  beispielsweise Azure SQL Database oder Azure Storage, da die erzeugten VMs keine eigenen dauerhaften Speichermöglichkeiten boten.
Schnell kam auch ein In-Memory-Cache für die Datenbanken hinzu.

Hinzu kam noch, dass das Ausrollen und Testen eines Cloud Services immer ein wenig Zeit in Anspruch nahm, da aus den Rollen auch erst mal VMs erzeugt werden mussten.

Applikationen auf Microservice-Basis

Bei der Azure Service Fabric muss eine komplexe Applikationen in kleine, eigenständige Module aufgeteilt werden, sogenannte Microservices.

Diese, sowie einige Konfigurationsinformationen, werden dann in einem Applikationspaket verpackt und in der Azure Service Fabric ausgerollt.
Dabei kann so ein Microservice verschiedene Technologieren verwenden, wie z.B. ASP.NET 5, Node.js, JVM oder auch eine einfache EXE-Datei.

Azure Service Fabric ClusterDie Azure Service Fabric nutzt dann ein oder mehrere vom Benutzer erstelle Cluster aus VMs, um diese Microservices zu betreiben.

Dabei können die Cluster sowohl in der Public Cloud oder auch im eigenen Rechenzentrum betreiben werden (Dieser Dienst soll auch Teil des nächsten Windows Server werden).

Auch beim Betriebssystem will Microsoft flexibel sein. Momentan wird zwar nur Windows angeboten. Zukünftig soll es aber auch möglich sein Linux-Cluster zu erstellen.

Die Service Fabric Container, bieten außerdem die Möglichkeit einen lokalen Speichermechanismus zu verwenden, um so die Daten nahe am Dienst und damit im schnellen Zugriff zu haben.
Somit lassen sich auch Stateful-Microservices erstellen.

Eine Architektur einer solchen Anwendung könnte dann wie folgt aussehen:

Azure Service Fabric - Anwendungsarchitektur

Azure Service Fabric - ReplikationssetZu Ausfallsicherheit können im Cluster mehrere Instanzen des Microservices gestartet werden, wobei immer nur eine aktiv ist (Primary).
Die Sekundärinstanzen sind dann Teil eines Replikationssets und erhalten alle Daten der Primärinstanz. Es wird dabei durch Transaktionen sichergestellt, dass mindestens eine Sekundärinstanz den aktuellen Stand der Daten enthält.
Wenn dann die Primärinstanz ausfallen sollte, wird umgehend eine Sekundärinstanz zum neuen Primary erhoben.

Entwicklungsumgebung für die Service Fabric

Wer mit der Azure Service Fabric Preview gleich loslegen möchte, benötigt dazu den Visual Studio 2015 RC, sowie das Service Fabric SDK, was über den Web Platform Installer installiert werden kann.

Da das Service Fabric SDK PowerShell-Skripte für das Testen der Anwendung im Lokalen Cluster ausführen will, muss vorher folgender PowerShell-Befehl im entsprechenden Benutzerkontext ausgeführt werden:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force -Scope CurrentUser

Anschließend kann man sich ein lokales Cluster erstellen:

  1. Ein PowerShell Fenster mit Administrator-Rechten öffnen
  2. In das %programfiles%\Microsoft SDKs\Service Fabric\ClusterSetup Verzeichnis wechseln
  3. Das PowerShell-Skript ./DevClusterSetup.ps1 ausführen

 



Der Beitrag Azure Service Fabric: PaaS auf Microservice-Basis erschien zuerst auf Sascha Dittmann.

Sven Hubert: Ein Turbo für die Testausführung

Mit Hilfe von Unit-, Integrations- und Systemtests lässt sich die Funktionalität von einzelnen Methoden, Modulen oder der gesamten Anwendung automatisiert und kontinuierlich überprüfen. Mit zunehmender Komplexität einer Anwendung steigt die Anzahl der Tests sehr stark. Obwohl einzelne Tests zumeist sehr schnell ausgeführt werden, führt die schiere Masse häufig zu einer hohen Gesamtlaufzeit. In der Folge werden Tests lokal oft überhaupt nicht mehr und im Continuous Integration Build oft nur noch eine Teilmenge ausgeführt. Mögliche Fehler werden dann erst stark verzögert im Nightly-Build entdeckt. Gibt’s denn da keine Möglichkeit die Ausführung zu beschleunigen?

Das Visual Studio und der Team Foundation Server ermöglichen es die Ausführung von Tests an einen Test Controller zu delegieren. Dieser wiederum leitet die Anfragen an Test Agents weiter. Abhängig von deren Anzahl allerdings nur eine Teilmenge. Hierdurch kommt es zu einer Parallelisierung der Testausführung und damit zu einer stark verkürzten Gesamtlaufzeit.

Test Infrastruktur

Dabei gilt es zu berücksichtigen das die Test Assemblies sowie die zu testenden Bestandteile zunächst auf alle Agents verteilt und ggf. eingerichtet werden. Dies führt zu einem gewissen Overhead, so dass sich dieses Vorgehen erst ab einer gewissen Menge an Tests lohnt.

Die Umgebung in der die Tests ausgeführt werden wird über eine Test Settings Datei festgelegt. In dieser werden die Variante „Remote execution“ sowie der Test Controller ausgewählt.

Konfiguration der Test Settings

Welche Test Settings Datei wiederum zur Anwendung kommt wird bei einer Ausführung aus dem Visual Studio im Menü unter Test -> Test Settings konfiguriert. Achtung: Dies unterscheidet sich von der Auswahl der Test Settings für Lasttests. Diese werden über das Kontextmenü der Settings Datei ausgewählt.

Auswahl der Test Settings im Visual Studio

Für den Buildprozess wir die Einstellung in der Builddefinition konfiguriert.

Auswahl der Test Settings im Buildprozess

Durch eine Erhöhung der Test Agent Anzahl kann die Ausführungsgeschwindigkeit deutlich gesteigert werden. Dies setzt eine entsprechende Infrastruktur voraus. Wer diese in seiner lokalen Umgebung nicht zur Verfügung stellen möchte kann auf die Cloud ausweichen. Hier lässt sich sehr schnell eine große Anzahl an Test Agents einrichten. Wie eine solche Infrastruktur aufgebaut wird und was dabei zu beachten ist wird in einem der nachfolgenden Blogbeiträge näher beleuchtet.

Ein Turbo für die Testausführung is a post from: AIT Blog

Holger Schwichtenberg: BUILD-Konferenz startet heute um 17 Uhr

Auf der größten Microsoft-Veranstaltung des Jahres wird es Neuigkeiten zu Windows, Windows Phone, Hololens und den Entwicklerprodukten geben.

Maik Hanns: Workspace Location per TFS API auslesen

In den TFS Schulungen kam häufiger die Frage wie man ermitteln kann welche User einen Local oder Server Workspace verwenden. Seit TFS 2012 kann man pro Team Project Collection bestimmen ob die Benutzer standardmäßig einen Server oder Local Workspace anlegen. (Siehe https://msdn.microsoft.com/en-us/library/bb892960.aspx) Dies hindert jedoch niemanden selbst zu entscheiden welchen Workspace Typ man nutzen will. Jeder kann per Option in Visual Studio über “Manage Workspaces”->”Edit”->”Advanced” selbst entscheiden welche Variante er bevorzugt.

Möchte man herausfinden welche Benutzer welchen Typ verwenden hilft ein wenig .NET Code:

  1. class Program
  2. {
  3.     static void Main(string[] args)
  4.     {
  5.         var teamProjectPicker = new TeamProjectPicker(TeamProjectPickerMode.NoProject, false);
  6.         teamProjectPicker.ShowDialog();
  7.         var teamProjectCollection = teamProjectPicker.SelectedTeamProjectCollection;
  8.         var versionControlService = teamProjectCollection.GetService<VersionControlServer>();
  9.         var workspaces = versionControlService.QueryWorkspaces(null, null, null);
  10.         foreach (var workspace in workspaces)
  11.             Console.WriteLine(“Workspace: {0}nComputer: {1}nOwner: {2}nLocation: {3}nn”,
  12.                 workspace.Name, workspace.Computer, workspace.OwnerDisplayName, workspace.Location);
  13.         Console.ReadKey();
  14.     }
  15. }

Nach der Verbindung zu einer Team Project Collection, werden von dieser alle Workspaces geholt. Danach erfolgt lediglich die Ausgabe von Workspace Name, Computer Name, Benutzer und eben der Location (Server / Local) auf der Console.

Das Beispiel gibt es auch hier zum Download.

Maik Hanns: TF900548: An error occurred publishing the Visual Studio test results. Details: ‘Object reference not set to an instance of an object.’

Fehler TF900548

In meiner TFS Schulungsumgebung hatte ich schon paar Mal den Fehler das der Build Prozess anscheinend die Testresults nicht veröffentlichen konnte. Bisher war es an der Stelle ausreichend den Cache Folder auf dem Build Server zu löschen:

Beispiel:
C:\Users\TFSBuild\AppData\Local\Microsoft\Team Foundation\5.0

Wenn der Ordner noch im Zugriff ist kann man kurz den Build Service in der Administration Console stoppen und anschließend wieder starten. Ich gehe davon aus das die Ursache war das ich den TFS auf einen Snapshot zurück gesetzt habe, den Build Server jedoch nicht. Somit waren hier noch alte Daten im Cache.

Holger Schwichtenberg: dpunkt.verlag übernimmt O'Reilly Deutschland

Die Konsolidierung in der IT-Verlagswelt geht weiter: Ab 1. Juli 2015 übernimmt der Heidelberger dpunkt.verlag die deutschen Titel von O'Reilly und Microsoft Press.

Jürgen Gutsch: Usefull NuGet Package: Units.Net

Neulich bin ich bei meinen Spielereien mit dem Raspberry PI auf ein nützliches kleines NuGet Package gestoßen, mit dem sich diverse Einheiten relativ einfach berechnen lassen.

Units.Net

https://github.com/InitialForce/UnitsNet
https://www.nuget.org/packages/UnitsNet/

Units.Net liefert weitere Typen für diverse Maßeinheiten und entsprechende Umrechnungen an. Zum Beispiel der Typ Length für Entfernungen aller Art:

var distance = Length.FromCentimeters(120);

Erzeugt mit Zentimetern, liefert das Objekt Eigenschaften um die Distanz in Inches, Feet, Miles, Kilometern und auch Micrometern zu erhalten.

Analog unter anderem der Typ Temperature, mit dem man die Temperatur unter anderem in Einheiten wie Fahrenheit oder Kelvin erhalten kann:

var temperature = Temperature.FromDegreesCelsius(45);

Oder die Geschwindigkeit:

var speed = Speed.FromKilometersPerHour(25);
var knots = speed.Knots;

Insgesamt sind es sicher über 20 Typen auch zu elektrischen Einheiten, Vektoren oder z. b. Kräften. Wer also hierfür spezialisierte Typen haben möchte ist mit dieser Library gut bedient.

Für mich speziell interessant um auf dem RaspberryPI Bewegungs- und Entfernungs-Sensoren auszulesen und deren Werte zu verarbeiten.

Norbert Eder: #fotomontag #17

Jeden Montag ein Foto. Der #fotomontag.

Mir gefallen Oldtimer und an diesem bin ich sicherlich schon 20 Mal vorbei gelaufen, hatte aber nie meine Kamera dabei. Vor einigen Tagen war es dann aber soweit und dieses Foto entstand dabei:

Oldtimer

Oldtimer

Bildinformationen:
35mm
ISO 100
f/2.5
1/60

Hast du eine Meinung zum Foto? Ja? Dann lass sie mich doch bitte wissen und bewerte es in den Kommentaren.

The post #fotomontag #17 appeared first on Norbert Eder.

Jürgen Gutsch: Working with Git – Part 3: Custom Merge Tool

Standardmäßig kommt Git ohne ein wirklich geeignetes Merge-Tool. Man könnte zusätzlich TortoiseGit installieren und erhält etwas mehr Unterstützung. Auch das Visual Studio bietet einen nutzbaren Editor um Merge-Konflikte zu beheben.

Da ich mich mit Git aber eher in der Konsole bewege, genauer im Cmder, benötige ich ein Merge-Tool das bequem über die Kommandozeile aufrufbar ist. Zusätzlich habe ich mich an die dreigeteilte Merge-Ansicht gewöhnt, das mir zusätzlich zu meinem und dem Stand des zu mergenden Codes auch noch den ursprünglichen Zustand anzeigt.

Hier hat sich KDiff3 als sehr gutes Werkzeug erwiesen.

Installation

Um KDiff nach der Installation mit Git nutzen können muss es in der globalen Git Konfig registriert werden. Das kann man direkt in der globalen Konfig-Datei machen oder über die Git Config API

Die globale Git Konfig-Datei befindet sich im aktuellen User-Verzeichnis und hat den Namen .gitconfig (mit dem führenden Punkt) Diese Datei ist nun um zwei Einträge zu ergänzen:

[merge]
    tool = kdiff3
   
[mergetool "kdiff3"]
    cmd = \"C:\\\\Program Files\\\\KDiff3\\\\kdiff3\" $BASE $LOCAL $REMOTE -o $MERGED

Der erste Eintrag legt das zu nutzende Tool fest und der zweite den Pfad zur kdiff3.exe, sowie die zu übergebenden Parameter.

Über die Kommandozeilen API ist das etwas einfacher zu machen.

> git config --global --add merge.tool kdiff3
> git config --global --add mergetool.kdiff3.cmd "C:\\Program Files\\KDiff3\\kdiff3" $BASE $LOCAL $REMOTE -o $MERGED

Zur Kontrolle sollte noch git config --global --list aufgerufen werden, um zu sehen ob alle Einträge korrekt gesetzt worden sind.

Ein letzter Test ist der Aufruf von git mergetool:

01_GitMergetool

Benutzung

Die Benutzung ist dann relativ einfach: Sollte es trotz Feature Branches doch mal zu einem Konflikt kommen wird das in der Konsole angezeigt.

01_GitMergeConflict

Der Merge wird nicht committet und die Dateien mit Konflikten werden aufgelistet. Nun muss nur der Befehl “git mergetool” eingegeben werden und die KDiff3 GUI öffnet sich nachdem man die zu mergende Datei in der Konsole ausgewählt hat:

02_GitMergetool

03_s_Mergetool

Für diejenigen die ausschließlich mit SVN oder TFS arbeiten, ist das dreigeteilte Merge-Fenster möglicherweise ungewohnt. Mir allerdings hilft das beim vergleichen der verschiedenen Stände enorm.

Nun kann hier der Konflikt gelöst werden. Nach dem Klick auf Speichern kann das Fenster geschlossen werden. Sollten noch weitere Konflikte aufgetreten sein, kann nun die nächste Konflikt gelöst werden. Sind alle Konflikte gelöst, müssen die Änderungen nun committet werden. In Git wird dieser Commit – auch wenn er manuell vorgenommen wurde – als Merge-Commit gelistet. Dadurch wird er z. B. auf BitBucket leicht ausgegraut dargestellt.

Marco Scheel: Links for 2015-04-24 [del.icio.us]

Martin Richter: Das ewige Leid mit ausländischen Bestellungen und Rechnungen…

Es war mal wieder soweit und ich musste bei Adobe (eigentlich keine kleine Firma) ein Update bestellen.
Dank Firmenkreditkarte war das kein Problem. Und so fing das Leid an:

20.03.2015 –
Ich bestelle ein Update eines typischen Adobe-Tools. Ich gehe den Bestellvorgang durch und schwupps ist der Kauf getätigt.
Alles super. Aber ach… :( ein paar Stunden später kommt die Rechnung und die stimmt nicht. Ich denke ich kaufe bei Adobe-Deutschland, aber dem war nicht so. Ich bekomme das Produkt aus Irland und scheinbar war in meinem Adobe Konto keine Umsatzsteuer ID enthalten. 😳 Mea culpa, mea maxima culpa…
Ich geistere durch mein Konto bei Adobe, kann aber die verfluchte Stelle nicht finden wo die Umsatzsteuer ID einzutragen ist.
Ein Anruf bei der Hotline ergab, dass ich am Besten die Bestellung storniere. Bei der Gelegenheit hat der gute Mann an der Hotline auch die gültige Umsatzsteuer Id eingetragen.

23.03.2015-
Ich habe nun Aufgrund der Empfehlung der Hotline die Bestellung storniert. Natürlich ist die Kreditkarte schon belastet. Nochmal bei der Hotline angerufen und wirklich geklärt, dass eine Umsatzsteuer ID eingetragen ist.
Jetzt wurde eine neue Bestellung aufgegeben. Betrag stimmt schon mal in der Anzeige, aber das hatten wir schon.
Ein paar Stunden später die Überraschung. 😯 Die Rechnung weist die Mehrwertsteuer schon wieder aus, unsere Umsatzsteuer ID steht nicht auf der Rechnung. Wie kann das sein? Und noch besser: Eigentlich ist die Umsatzsteuer in Irland 21%. Die Rechnung zeigt aber 19% Mehrwertsteuer… jetzt ist es aber ganz wild.
Anruf bei der Hotline. Der kann sich das nicht erklären. Die Bestellung ist richtig. Die Umsatzsteuer ID ist eingetragen! Und noch besser: die Kreditkarte wurde nur mit dem Betrag ohne Mehrwertsteuer belastet. Gibt es so was?
Die Fakten in kürze: Rechnung falsch mit deutscher Mehrwertsteuer, Rechnung kommt aus Irland und trotz angegebener Umsatzsteuer ID steht da eine MwSt. Aber bezahlt habe ich die nicht… Ich werde vertröstet. Der Vorgang liegt nun bei der Fachabteilung.

27.03.2015 –
Die Stornierung der ersten Bestellung wurde akzeptiert. Wenigstens schon mal was 😉

29.03.2015 –
Wow. Nach 9 Tagen habe ich wenigstens das Geld für die erste Bestellung zurück.

05.04.2015 –
Meine Buchhaltung wird sauer und möchte eine Rechnung haben. Ich gebe den Vorgang soweit ich ihn habe inkl. falscher Rechnungen weiter.

18.04.2015 –
JAAAA! Eine Reaktion. Ich bekomme eine Email. Betreff meine Bestellung. Anhang: Eine PDF mit mir bereits bekannten FALSCHEN Rechnung. Auch hier 19% Steuer (statt irländischer 21%), die aber wegen Angabe der Umsatzsteuer ID nicht da stehen dürfte… 😡
Kein Text, keine Signatur nichts! Eigentlich eine Frechheit.
Kommt jetzt auch noch eine Kartennachberechnung… oder was? :(

23.04.2015 –
Die Buchhaltung setzt sich mit Adobe wieder in Verbindung. Der Man von der Hotline ist wieder nett und sieht den ganzen Vorgang. Er kann aber nichts machen.
Kurze Zeit später erhalte ich wieder eine Bestätigung, dass mein Vorgang an die entsprechende Fachabteilung weitergereicht wurde. Hatten wir das nicht schon vor 1 Monat.

Mittlerweile Frage ich mich, an wen man sich eigentlich wenden kann, wenn eine Firma eine definitiv falsche Rechnung ausstellt. Laut Auskunft meiner Buchhaltung müsste man ja diesen Betrag verbuchen, denn die Rechnung weißt diesen ja aus. Aber abgebucht wurde ein anderer Betrag. Also haben wir nun Schwarzgeld in der Kasse? :) OK ich bin kein Buchhalter und das ist gut so…

Mein Urteil über Adobe? Am Besten fragt mich keiner…

To be continued…


Copyright © 2010 Martin Richter
Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.
(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)

Holger Sirtl: Azure News on Friday (KW18/15)

Auch diese Woche gab’s wieder viele Nachrichten zu HDInsight, Azure Machine Learning, DocumentDB, Service Fabric, Media Services und vieles weitere.

Datum Nachricht
23.04. Azure Friday Video: Azure PowerShell 101
Guang Yang zeigt in diesem 13-minütigen Video die Grundlagen zu PowerShell und deren Möglichkeiten, Azure zu administrieren.
23.04. Azure Friday Video: Azure Resource Manager 101 mit PowerShell
In diesem 10-minütigen Video zeigt Guang Yang die Konzepte, die hinter Azure Resource Manager stecken, mit denen via PowerShell unter anderem automatisiert neue Umgebungen aufgesetzt werden können.
22.04. Auswertung von SharePoint Nutzungsdaten mit Application Insight
Dieser Azure Blog Artikel beschreibt, wie mit Hilfe von Application Insights das Nutzungs- und Performanzverhalten von SharePoint Sites ausgewertet werden kann.
22.04. Azure AD Application Proxy unterstützt jetzt eigene Domain-Namen
In diesem Active Directory Blog-Artikel werden diese Neuerungen genauer beschrieben.
21.04. Azure Architecture Guidance auf GitHub
Dieser Leitfaden der Patterns & Practices Group geht auf verschiedene Aspekte des Entwurfs Azure-basierter Anwendungssysteme ein. Der Leitfaden steht auf GitHub zum Download zur Verfügung
20.04. Administrations-Client für Azure Media Services
William Zhang stellt ein Werkzeug vor, mit dessen Hilfe Media Services administriert, und überwacht werden können. Es deckt Funktionalitäten wie Live- und On-demand-Streaming, Absicherung von Medieninhalten, Verschlüsselung etc. ab. Das Tool steht auf GitHub zum Download zur Verfügung.
20.04. Ankündigung: Azure Service Fabric – Verteilung und Management von Microservices auf einer bestehenden Cloud-Infrastruktur
Mark Russinovich stellt mit der Azure Service Fabric einen neuen Dienst vor, mit dessen Hilfe Microservices intelligent auf eine bestehende Infrastruktur verteilt, dort ausgeführt, skaliert und verwaltet werden können.
20.04. Ausführen von R-Skripten auf Azure Batch
Karan Batta, Program Manager Azure, zeigt in diesem Blogpost, wie sich R-Skripte skalierbar auf einer Azure-Batch-Clusterumgebung ausführen lassen.
17.04. Cloud Cover Show (174): Big Data with Lara Rubbelke and James Baker
In dieser Episode stellen Chris Risner, Haishi Bai, Lara Bubbelke und James Baker ein konkretes Azure-Projekt vor, bei dem Kafka, Storm, DocumentDB, HBase, Azure Machine Learning, Storage, HDInsight und Power BI zum Einsatz kamen.

Weitere Informationen

Norbert Eder: Von Lightroom nach 500px veröffentlichen

Wer seine Fotos mit Adobe Lightroom verwaltet und entwickelt, der möchte einige davon vermutlich auch publizieren. Hierzu sind ja bereits einige Dienste wie Flickr bereits angebunden. Ich verwende aber unter anderen auch 500px. Ein entsprechendes Add-On ist im offiziellen Add-On-Katalog jedoch nicht vorhanden. Glücklicherweise stellt 500px ein Publish-Add-On zur Verfügung.

Nach dem Download muss das Add-On auf die Festplatte entpackt werden. Der Ort ist beliebig, ich empfehle hier jedoch einen eigenen Ordner innerhalb des Dokumente-Ordners. Viele legen die Add-Ons in einen Unterordnung der LR-Installation ab. Dies ist gerade hinsichtlich Backup, Neuinstallation, Upgrade etc. problematisch.

Nun in Lightroom den Zusatzmodul-Manager öffnen:

Lightroom Zusatzmodul-Manager

Lightroom Zusatzmodul-Manager

Dort nun via Hinzufügen den Ordner auswählen, in welches das Add-On entpackt wurde. Nach der Auswahl sollte das Add-On installiert werden und die Add-On-Informationen angezeigt werden:

Lightroom 500px Add-On

Lightroom 500px Add-On

Bitte beachten: Die Versionsnummer kann sich natürlich unterscheiden. Wichtig ist, dass das Add-On aktiviert wurde. Damit sollte der Vorgang erfolgreich abgeschlossen worden sein.

Wenn alles funktioniert hat, sollte 500px in der Liste der Veröffentlichungsdienste aufscheinen:

Lightroom Veröffentlichungsdienste 500px

Lightroom Veröffentlichungsdienste 500px

Muss muss der Dienst noch eingerichtet werden, dies funktioniert jedoch analog zu allen anderen Diensten.

Noch zu erwähnen ist die Möglichkeit die Bilder aus dem 500px-Profil synchronisieren zu können. Dabei werden alle Sets heruntergeladen und können vollständig aus LR heraus gepflegt werden.

The post Von Lightroom nach 500px veröffentlichen appeared first on Norbert Eder.

Johannes Renatus: Blokierende Parallele AJAX Requests und ASP.NET

Bis gestern dachte ich eigentlich das ich mich in ASP.NET ganz gut auskenne, aber da wollte es mir ASP.NET mal wieder richtig zeigen, das man auch hier nie auslernt. Denn wenn man mehrere AJAX Requests parallel startet um die Daten für einen View asynchron zu laden und in einem der Requests in die Session schreibt, […]

codefest.at [MS]: Schnell und einfach zum Microsoft //build Keynote-Streaming!

Schnell und einfach zum Microsoft //build Keynote-Streaming

Vom 29. April bis zum 1. Mai findet auch heuer wieder die //build statt. Für alle Entwickler ist die //build ein "Must Event". Das zeigt sich auch Jahr für Jahr daran, dass diese Veranstaltung regelmäßig ausverkauft ist. So auch heuer wieder.

Wie schon in den Blogposts “Live dabei sein mit dem Microsoft //build Keynote-Streaming!” und “Was Spannendes, was zum Rumspielen und was zum Naschen!! …” beschrieben laden wir Euch ein mit uns gemeinsam die Keynote in Kinos in Wien, Linz und Graz zu erleben!

Wo & Wann: 29. April 2015 um 17:15 Uhr im

Alles was Ihr dazu braucht ist einfach nur einen der folgenden Online-Kurse in der Microsoft Virtual Academy (MVA) abzuschließen. Die kostenlosen Online-Trainings der Microsoft Virtual Academy (MVA) unterstützen Euch dabei, Euer Know-How zu aktuellen Technologien zu erweitern.

Ein paar von Euch haben gemeint ob sie auch alternativ einen anderen Kurs machen könnten. Klar doch, machen wir gerne für Euch. Wie wäre es denn mit den folgenden:

Und wenn es wirklich schnell gehen soll:

Als Nachweis bitte einfach Eure absolvierten Kurse im Profil veröffentlichen. Dazu:

  1. auf https://www.microsoftvirtualacademy.com/MyMVA/MyProfile.aspx im Abschnitt Persönliche Daten “Meine Profildaten für alle Nutzer freigeben“ und
  2. in Mein Status in der MVA die „Tracks“ aktivieren.

Bei der Anmeldung gebt bitte als Einladungscode die Nummer Eures MVA-Profils an. Diese findet Ihr z.B. wenn Ihr Zum öffentlichen Profil navigiert Also z.B. “123456” wenn das Euer Profillink ist: http://www.microsoftvirtualacademy.com/Profile.aspx?alias=123456

Und BITTE: gebt EURE eigene  MVA ID ein. Ja, wir schauen uns Eure Einreichungen echt an. Smile

Bei Fragen, Wünschen und Komplikationen aller Art erreicht Ihr mich wie gewohnt unter meiner E-Mail Adresse.

Wir sehen uns im Kino!

Gerhard Göschl, Marketing Leiter - IT-Spezialisten und Software Entwickler

Microsoft Österreich GmbH
Gerhard.Goeschl@Microsoft.com

PS: Ihr möchtet die Entwicklungsprodukte von Microsoft vorab schon einmal ausprobieren? Im MSDN Evaluierungscenter finden Ihr kostenlose Testversionen aller wichtigen Produkte für Entwickler. Probiert doch auch den kostenfreien Testzugang zu Microsoft Azure

Holger Schwichtenberg: PowerShell 5.0 mit Unit Testing und für Windows 7 und Server 2008 R2

Im Rahmen der PowerShell-Community-Konferenz in Essen verkündete Microsoft Neuigkeiten zur nächsten PowerShell-Version.

Christian Binder [MS]: Microsoft Speaker auf der ADC C++ 2015

Die ADC C++ findet am 5 und 6.Mai statt. Von dem Microsoft C++  Team werden mit dabei sein:

Steve Carroll Visual C++ Team | Principal Group Software Engineering Manager
James McNellis Visual C++ Team | Senior Software Development Engineer

mit folgenden Sessions:

- Keynote: Microsoft Visual C++ Strategy
- What is new in Visual Studio 2015 
- Modernizing Legacy C++ Code
- Cross-platform development with C++ and Visual Studio 2015
- Graphics debugging in Visual Studio 2015

PS: Ich werde mit Gunter Logemann auch vor Ort sein. Gunter ist unser IoT und Windows (10) Spezialist und mein Thema ist ja ALM (TFS, VS, Git, TVCS usw.)  Ihr könnt uns am Microsoft Stand treffen und Eure Fragen mitbringen Smile

Chris

Uli Armbruster: Product Owner optimiert eure Engpässe

Das ist Teil 2 meiner Serie: 3 einfache Tricks für Product Owner mit großer Wirkung.

flask-304943_1280Wenn wir Software entwickeln, dann erstellen wir – wenn auch virtuell – ein Produkt. Produktentwicklung respektive der dafür eingesetzte Prozess wird immer einen oder mehrere Engpässe haben. Besonders Lean Management bzw. das darauf basierende Kanban zielen auf die Optimierung solcher Durchsatzprobleme ab (vgl. Theory of Constraints).

An allen Softwareprodukten, an denen ich mitentwickelt habe, war ein Engpass im Bereich der Entwicklung. Ideen und Wünsche haben die Kunden, Projektmanager und Product Owner viele. Natürlich können sie diese schneller formulieren als die Entwickler sie implementieren können.

Deshalb ist es wichtig genau diesen Abschnitt des Entwicklungsprozesses optimal auszulasten. Alternativ könnte der Engpass durch massive Aufstockung der Mitarbeiter vollständig aufgelöst werden, aber das ist allein aus Kostengründen unrealistisch.

 

Vorbereitung ist alles

Deshalb gilt: Je besser die Vorarbeitet ist, d.h. Wunsch-Features durchdacht, formuliert und präpariert werden, desto weniger Zeit muss der Entwickler dafür aufwenden. Unternehmen sprechen typischerweise auch vom Anforderungsmanagement. In einem späteren Beitrag werde ich die Einzelschritte und die Rollen in einem Softwareentwicklungsprozess beleuchten. Es gilt das Gleiche wie beim Essen: Je besser die Nahrung im Mund vorgekaut wird, desto einfach kann der Magen sie verdauen. Das heißt nicht, dass nicht weiter der Entwickler einbezogen werden soll oder dass weniger miteinander geredet werden soll, aber meiner Erfahrung nach werden immer wieder wenig durchdachte Anwendungsszenarien den Entwicklern über den Zaun geworfen. Im Sinne von “die werden dann schon mal machen”. Wird dann seitens der Entwickler nachgefragt, wundert sich der fachliche Verantwortliche gerne mal “was denn daran nicht klar sei”. In dem Zuge sei auf die Wichtigkeit einer gemeinsamen Sprache hingewiesen. Wie gesagt ist die Kommunikation wichtig und die Fachexperten können nicht an alles denken. Manches wissen sie auch nicht. Viele Probleme können aber im Vorfeld durchaus vermieden werden. Statt nach Lösungen zu suchen, kann es oft sinnvoller sein die tatsächliche Ursache des Problems zu untersuchen. Wo genau funktioniert der Geschäftsprozess nicht?

 

Evolvierbarkeit

Darüber hinaus muss jedem Produktverantwortlichen klar sein, dass eine Änderung nachweislich teurer wird, je später selbige erfolgt. Das betrifft die sogenannte Evolvierbarkeit. Obwohl Software nicht wie ein Auto verschleißt oder für Änderungen physikalisch auseinander gebaut werden muss, kosten späte Korrekturen mehr als frühe.

 

Schnelles Feedback

Bei Scrum und Kanban macht es sich ebenfalls bemerkbar, wie schnell erledigte User Stories vom Product Owner abgenommen werden. Ich habe für die Projekte, in denen ich Scrum Master bin, mit dem PO vereinbart, dass spätestens am Vormittag des Folgetages das Feedback kommen muss, ob die User Story korrekt umgesetzt wurde. Mir ist unter anderem von Microsoft bekannt, die nach einer Einführung einer 4-Stunden-Abnahmefrist der Durchsatz der tatsächlich abgeschlossenen Aufgaben signifikant gesteigert wurde.

 

Leerlauf vermeiden

Zu guter Letzt gibt es noch den Fall, dass die Arbeit so gut läuft, dass neue Wünsche schneller umgesetzt werden können als erwartet. Dann sollten die nächsten ToDos vorbereitet sein, damit die Software Ingenieure nicht Leerlauf haben.

 

Fazit

Der Entwicklungsprozess sollte auf die Engpässe zugeschnitten sein. Häufig ist das die Entwicklung. Diesem Engpass muss sich der Rest des Prozesses unterordnen. Das Prinzip ist seit langem bekannt, wissenschaftlich belegt und kann eine erhebliche Beschleunigung der Produktentwicklung bewirken.


Einsortiert unter:CIO Topics, German Tagged: Agile Development, Prozessmanagement, Scrum

Manfred Steyer: Folien und Beispiel zur Session 'Moderne Weblösungen für alle Plattformen mit AngularJS' auf der JAX 2015 in Mainz

Nachfolgend der Link zu den Folien und dem Beispiel meines Vortrages, den ich gestern auf der JAX 2015 in Mainz zum Thema AngularJS gehalten habe.


Manfred Steyer: AngularJS mit EcmaScript 6 & Starter-Kit

Mein Kollege Vildan Softic, mit dem ich gemeinsam an unserem AngularJS-Buch gearbeitet habe, hat vor einiger Zeit in unserer Kolumne bei Heise Online über das Zusammenspiel von AngularJS und EcmaScript 6 geschrieben. Dabei zeigt er, wie man mit dem Transpiler Babel und einem Gulp-Task EcmaScript 6 nach EcmaScript 5, das heute schon in jedem Browser läuft, transpilieren kann.

Als Ergänzung dazu zeige ich hier anhand einer Schritt-für-Schritt-Anleitung, wie man solch ein Projekt einrichtet.

Starter-Kit

Wer die hier beschriebene Schritt-für-Schritt-Anleitung nicht durchmachen, sondern gleich AngularJS und EcmaScript nutzen möchte, findet das Ergebnis dieser Anleitung in Form eines Starter-Kits hier. Die nötigen Informationen zur Nutzung dieses Starter-Kits finden sich in der darin enthaltenen Datei readme.md.

Vorbereitung

Zunächst benötigt man den Package-Manager jspm. Im Gegensatz zu bower hat diese Implementierung die nette Eigenschaft, auch den Modul-Loader System.js zu konfigurieren, sodass er die heruntergeladenen Bibliotheken laden kann. Die Installation erfolgt über npm:

npm install jspm

Anschließend benötigt man noch die Konfigurationsdatei Package.json. Die wird wie folgt erstellt. Die dabei gestellten Fragen kann man mit Enter bestätigen. Um das von uns verwendete Starter-Paket zu bekommen, sollte man lediglich bei der Frage bezüglich des zu nutzenden Transpilers die Option Babel wählen.

npm init
jspm init
[…]
Which ES6 transpiler would you like to use, Traceur or Babel? [traceur]:Babel
[…]

Danach können die benötigten Bibliotheken mit jspm bezogen werden:

jspm install angular --save
jspm install bootstrap --save

Projekt

Um das Ganze zu testen, benötigt man eine einfache AngularJS-Anwendung, die sich auf EcmaScript 6 stützt. Die einzelnen JavaScript-Dateien sind im Ordner src abzulegen. Die Datei index.html sollte im Root der Anwendung platziert werden:

//demo-vm.js
export class DemoVM {
    info;
    constructor($log) {
        $log.log("DemoCtrl has been created ...");
        this.info = "Hallo Welt!";
    }
}

Die Datei app.js importiert AngularJS sowie das View-Model und definiert das Angular-Moduls samt Controller. Darüber hinaus kümmert sie sich um das Bootstrapping von AngularJS mittels angular.bootstrap. Letzteres ist notwendig, da hier AngularJS nicht mit der üblichen Direktive ng-app gestartet werden kann. Der Grund dafür ist, dass der Module-Loader zunächst das Modul der betrachteten Datei app.js laden muss und erst darauf hin AngularJS über import einbindet.

// app.js
import angular from 'angular';
import {DemoVM} from 'demo-vm';

var app = angular.module('angular-es6', []);

app.controller('demoVM', DemoVM);

angular.element(document).ready(function() {
  angular.bootstrap(document, ['angular-es6']);
});

Die Datei index.html bindet System.js sowie die Konfigurationsdatei config.js ein und lädt anschließend das Modul in der Datei app.js mit System.import.

<!--index.html -->
<!doctype html>
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="jspm_packages/github/twbs/bootstrap@3.3.4/css/bootstrap.min.css">
  </head>
  <body>
    <div class="container" ng-controller="demoVM as vm">
        <h1>Angular-ES6-Demo</h1>

        <p>{{vm.info}}</p>

        <script src="jspm_packages/system.js"></script>
        <script src="config.js"></script>
        <script>
            System.import('app').catch(function(err) { console.error(err); });
        </script>
  </body>
</html>

Laufzeit-Transpilierung

Für eine Transpilierung zur Laufzeit ist die Datei config.js anzupassen, sodass sie die nachfolgenden Einträge wiederspiegelt. Wichtig dabei ist die Abbildung von * auf src/*.js. Hieraus geht hervor, dass der Module-Loader sämtliche JavaScript-Dateien im Ordner src findet, sofern kein anderes Mapping angegeben wurde.

System.config({
  "baseURL": "/",
  "transpiler": "babel",
  "babelOptions": {
    "optional": [
      "runtime",
      "es7.decorators"
    ]
  },
  "paths": {
    "*": "src/*.js",
    "github:*": "jspm_packages/github/*.js",
    "npm:*": "jspm_packages/npm/*.js"
  }
});
[...]

Danach kann man die Anwendung starten und index.html aufrufen.

Kompilierung vor Ausführung

Für die Transpilierung vor der Ausführung nutzt das hier gezeigte Beispiel das gulp. Dieses Build-Tool kann samt der benötigten Anweisungen via npm bezogen werden. Die Anweisung gulp-babel delegiert an den Transpiler Babel, gulp-plumber verhindert, dass im Fehlerfall ein Gulp-Task abbricht und gulp-sourcemaps ist für das Erstellen der Source-Maps, dank derer EcmaScript 6 Code in Browsern, wie Chrome oder Internet Explorer debugget werden kann, verantwortlich.

npm install gulp --save
npm install gulp-babel --save
npm install gulp-plumber --save
npm install gulp-sourcemaps --save

npm install lru-cache --save
npm install sigmund --save
npm install core-util-is --save

Den Gulp-Task findet man nachfolgend.

// gulpfile.js
var gulp = require('gulp');
var babel = require('gulp-babel');
var sourcemaps = require('gulp-sourcemaps');
var plumber = require('gulp-plumber');

var babelOptions = {
  modules: 'system',
  moduleIds: true,
  stage: 2,
  optional: [
    "es7.decorators",
    "asyncToGenerator"
  ]
};

var source = "src/**/*.js";
var html = "src/**/*.html";
var css = "src/**/*.css";
var resources = [html, css];
var destination = "app";

gulp.task('default', function () {
  gulp.src(source)
    .pipe(plumber())
    .pipe(sourcemaps.init())
    .pipe(babel(babelOptions))
    .pipe(sourcemaps.write('.'))
    .pipe(gulp.dest(destination));

  gulp.src(resources)
    .pipe(gulp.dest(destination));

});

gulp.task('watch', ['default'], function() {
  var watcher = gulp.watch([source, html, css], ['default']);
  watcher.on('change', function(event) {
    console.log('\n\nFile ' + event.path + ' was ' + event.type + ', running tasks...');
  });
});

Da der Gulp-Task das Ergebnis der Kompilierung im Ordner app ablegt, ist nun noch die Datei config.js anzupassen:

System.config({
  "baseURL": "/",
  "paths": {
    "*": "app/*.js",
    "github:*": "jspm_packages/github/*.js",
    "npm:*": "jspm_packages/npm/*.js"
  }
});
[...]

Danach kann die Kompilierung durch Aufruf von gulp erfolgen. Mit gulp watch kann man hingegen angeben, dass der Ordner src zu überwachen ist. In diesem Fall führt eine Änderung einer Datei in diesem Ordner zu einem erneuten Kompilieren. Zum Testen ruft man die index.html auf.

Manfred Steyer: Folien und Beispiele zu meiner Session 'Fünf Dinge, die Sie beim Erstellen moderner Browseranwendungen wissen sollten'

Nachfolgend der Link zu den Folien und den Beispielen meines Vortrages, den ich heute auf der JAX 2015 in Mainz zum Thema 'Fünf Dinge, die Sie beim Erstellen moderner Browseranwendungen wissen sollten' gehalten habe.

Christian Binder [MS]: C++ and Windows Kernel Internals, Filter Driver and Debugging

My friend T.Roy from CodeMachine, USA (http://codemachine.com), will be visiting Munich to present at the ADC++ conference in May 2015. He will be available during 6 - 8, May, to meet up and discuss the Windows training courses offered by CodeMachine as well as present an hour long brownbag seminar on cool debugging tips and tricks. You can reach him at contact@codemachine.com to schedule a meeting and presentation. Please note that the presentation will be in English.

If you are interested in such deep Dives I highly recommend to contact T.Roy Smile

Chris

Johnny Graber: Mein Technologieradar für 2015

Seit der Veröffentlichung meines ersten Technologieradars ist schon mehr als ein Jahr vergangen. Somit ist es höchste Zeit für einen Rückblick, ein Fazit und die Erstellung der nächsten Version.

 

Was brachte mir der Technologieradar?

Der grösste Pluspunkt für mich war die erzwungene Fokussierung. Ein bewusstes Einteilen von verschiedenen Technologien in die einzelnen Ringe hat mir sehr geholfen. Ganz wesentlich war der Ring Hold, in den alles hinein geht mit dem ich mich nicht beschäftigen wollte. Dadurch konnte ich mich auf die Technologien fokussieren, die ich als wichtig erachte und hatte dennoch genügend Zeit um auch auf Neues reagieren zu können.

Ein einmal erstellter Technologieradar ist kein starres Konstrukt. Wie ein richtiges Radar soll dieser vielmehr auf die Umgebung reagieren und wichtiges hervorheben.
Strukturierte Logmeldungen sind so ein neues Thema, das aus der vagen Idee von “Log as Data” und “Business Event Tracking” entstanden ist und zu einigen Blog Posts führte.

 

Mein neuer Technologieradar

Wie im letzten Jahr habe ich wiederum das Projekt Techradar von Brett Dargan verwendet. Die Ringe sind ebenfalls unverändert und folgen der Idee von ThoughtWorks:

  • Hold (abwarten): Keine neuen Projekte mit diesen Technologien starten.
  • Assess (einschätzen): Genauer hinschauen ob sich daraus etwas entwickelt.
  • Trial (ausprobieren): In kleineren und weniger wichtigen Projekten Erfahrungen sammeln.
  • Adopt (umsetzen): Bereit um in kritischen Anwendungen verwendet zu werden.

Mit der 2. Ausgabe macht es nun auch Sinn zwischen bestehenden und sich bewegenden Themen zu unterscheiden. Die Kreise stehen dabei für unveränderte Technologien, während die Dreiecke Neuigkeiten oder grosse Veränderungen markieren.

Techradar_2015

 

Techniken, Verfahren & Methoden

Techradar_2015_Techniques
In diesem Quadranten gibt es wenige Veränderungen. Das neue Thema der strukturierten Logmeldungen sowie Exploratory Testing sind aus meiner Sicht bereit für den produktiven Einsatz und können bei der Fehlervermeidung und Eingrenzung sehr hilfreich sein. Für die konkrete Umsetzung der strukturierten Logmeldungen in .Net hat sich Serilog als äusserst hilfreich erwiesen, während BugMagnet einem beim Exploratory Testing viel Arbeit abnimmt.

Die Visualisierung von Metriken ist ein Thema zu dem ich noch zahlreiche Abklärungen machen muss. Die Ideen dahinter sind sehr spannend, allerdings führen falsch verwendete Metriken zu grossen Problemen. Daher ist hier besondere Vorsicht geboten.

 

Infrastruktur, Plattformen & Services

Techradar_2015_Infrastructure
Beim letzten Radar zögerte ich noch mit der Empfehlung von RavenDB. Mit Version 3 sind diese Bedenken nun ausgeräumt. Fall ein Projekt eine NoSQL-Datenbank benötigt und darauf mittels C# oder einer REST-API zugreifen will, ist RavenDB meine favorisierte Lösung.

Docker ist ein spannender Ansatz um ganze Systemumgebungen auf Anwendungsebene zu virtualisieren. Diese unabhängigen Container vereinfachen nicht nur den Betrieb, sondern auch die Entwicklung. Mit den Ankündigungen von Microsoft für eine Implementierung auf Basis von Windows dürfte Docker auch bald in der .Net Welt eine grosse Rolle spielen. Somit ist es Zeit für einen genaueren Blick auf Docker.

Konkretes zu SharePoint 2016 wird Anfangs Mai zu erfahren sein. Je nach neuen Funktionen und Verbesserungen könnte SharePoint 2016 ein interessantes Thema werden. Mehr dazu wird man allerdings erst nach der Ignite-Konferenz wissen.

 

Sprachen und Frameworks

Techradar_2015_Languages
Eine sehr grosse Änderung kommt mittels ASP.Net 5 (ehemals ASP.Net vNext) auf die .Net Webentwickler zu. Grundlegende Änderungen in der Projektstruktur, eine komplett auf Mono lauffähige Umgebung und ein eine neue Verteilung der Aufgaben zwischen MVC und WebAPI führen zu einem grossen Lernbedarf. Ob sich dieser lohnt wird nicht zuletzt beim Migrationspfad entschieden. Je aufwändiger es ist eine Anwendung zu migrieren, desto länger werden die alten Versionen verwendet.

AngularJS ist ein Framework mit vielen offenen Fragen. Die inkompatible Version 2 setzt auf TypeScript, den JavaScript-Aufsatz den ich immer noch sehr skeptisch betrachte. Falls AngularJS so gut wird wie manche erhoffen, muss ich meine Position zu TypeScript überdenken. Allerdings könnte AngularJS genauso gut aus meinem Technologiestack fallen…

Bezüglich neuer Programmiersprachen sehen Swift und Go sehr interessant aus, allerdings hat auch C# 6 einige Neuerungen die man nicht verpassen sollte. Daher kann ich derzeit noch nicht abschätzen mit was ich mich am Ende mehr beschäftigen werde.

 

Tools

Techradar_2015_Tools
Balsamiq Mockups und Octopus Deploy sind 2 grandiose Werkzeuge, die einem viel Arbeit abseits der Entwicklung abnehmen. Mit den Mockups in Balsamiq lassen sich Anforderungen und Ideen einfach sammeln, während Octopus das Deployment auf wenige Klicks reduziert.

Entity Framework 7 wird Microsofts nächster Anlauf für einen OR-Mapper. Da erneut grundlegende Funktionen (wie Lazy-Loading) fehlen erinnert einem dies sehr stark an die Einführung von EF 4. Ob der Ansatz eines OR-Mapperers sowohl für relationale wie auch NoSQL-Datenbanken die fehlende Abwärtskompatibilität aufwiegt? Auch hier muss sich erst noch zeigen wie gut die veröffentlichte Version wirklich ist.

Microsoft hat in diesem Bereich in den letzten Jahren sehr viel begonnen und kaum etwas langfristig unterstützt. Durch diese fehlende Kontinuität sind Micro ORMs wie Dapper für mich sehr interessant. Diese kommen ohne grosses Framework aus und liefern einen einfachen Zugang zu relationalen Datenbanken.

 

Fazit

Mit all den Neuerungen in der .Net und Microsoft Welt (Angefangen bei Windows 10 über EF 7 bis hin zu ASP.Net vNext) ist ein eigener Technologieradar aus meiner Sicht unverzichtbar.
Trotz der vielen Unsicherheiten kann man sich so auf einige Neuigkeiten fokussieren und verliert sich nicht in zu vielen Details. Daher kann ich jedem empfehlen sich selber einen Technologieradar zu erstellen. Die dafür investierte Zeit lohnt sich.


Einsortiert unter:.Net, dnugBern, webDotNet Tagged: .Net, C#, Lernen, Persistenz, Tools

Uli Armbruster: Product Owner lasst eure Entwickler den Tunnel

Das ist Teil 1 meiner Serie: 3 einfache Tricks für Product Owner mit großer Wirkung.

 

Ideal zeigt der Firm ‘The Social Network’ welche Umgebung Entwickler benötigen: Den sogenannten “Tunnel”.

 

Gemeint ist damit die Möglichkeit konzentriert ohne Unterbrechung an dem (Software-)Produkt arbeiten zu können. Wenngleich agile Methoden wie Scrum und Kanban sehr stark Interaktion und Kommunikation (vgl. Agiles Manifest) fördern, fällt mir immer wieder auf, dass zwar nicht insgesamt zu viel, dafür aber zu häufig miteinander gesprochen wird. Statt dedizierte Gesprächstermine zu nutzen, ruft der Product Owner teilweise mehrfach am Tag den Entwicklern an, um sich z.B. Feedback zu Ideen oder neuen User Stories zu holen.

Das wirkt dann natürlich sehr flexibel im Sinne von frei von Bürokratie und klingt auf Anhieb sehr “kommunikativ”, jedoch sehe ich auch die Nachteile, die nach meiner Ansicht stark überwiegen: Der Entwickler wird kontinuierlich aus dem Tunnel gerissen. Gerade in kleinen und mittelständischen Unternehmen (KMUs) ist die Begründung die, dass genau die statischen Reglements von Konzernen vermieden werden wollen oder aber dass ohnehin nur wenige Entwickler zur Verfügung stehen, um den PO gedanklich zu unterstützen. Das sind alles nachvollziehbare Gründe, jedoch spricht aus meiner Sicht nichts dagegen zu sagen: Wir reservieren täglich von 16.30-17 Uhr dediziert Zeit für den Product Owner und seine Fragen weg. In Scrum gibt es sogar ein dediziertes Meeting während der Iteration dafür: Das Backlog Grooming. Dieses kann im Übrigen auch mehrfach während eines Sprints angesetzt werden.

Wie viel Zeit kleine Ablenkungen kosten, belegen neben Studien (von denen ich an dieser Stelle keine heraussuchen will) auch die eigenen Erfahrungen. E-Mail Eingang, Messenger Nachricht oder nur schnell im Internet was nachgeschaut und schon ist man aus dem Fokus und dem Gedankengang draußen. Das ist unabhängig vom Entwicklerberuf, das ist einfach menschlich. Je nachdem welche Studie gerade wieder veröffentlicht wird, lese ich Zeitangaben zw. 10 und 30 Minuten, die benötigt werden, um wieder an der gleichen Stelle mit der gleichen Konzentration weiterzuarbeiten.

Der geneigte Product Owner kann das einfach nachvollziehen, indem er sich an seine Schulzeit erinnert. Wenn er als Schüler eine mathematische Aufgabe rechnen muss, deren Lösung durch verschiedene Rechenschritte und Umformungen sich auf über 2 DIN A4 Seiten erstreckt und er Mitten drin von einem Mitschüler 5 Minuten mit einem völlig anderen Thema abgelenkt wird, dann muss er nach dem Gespräch erst nochmal seinen Gedankengang verfolgen, um die Rechnung weiterführen zu können.


Einsortiert unter:CIO Topics, German Tagged: Agile / Lean, Agile Development, Prozessmanagement, Scrum

Holger Sirtl: Azure Architecture Guidance auf GitHub

Das Patterns & Practices Team arbeiten schon eine ganze Zeit daran, Empfehlungen für bestimmte Architektur-Fragestellungen, mit Microsoft Azure zu erstellen. Auf GitHub st nun eine erste Version der Azure Architecture Guidance verfügbar. Dieser Leitfaden geht auf verschiedene Aspekte des Entwurfs Azure-basierter Anwendungssysteme ein. Im Einzelnen enthält er folgende Abschnitte:

Weitere Informationen

André Krämer: IT-Visions Infotag: Was bringen .NET 2015, Visual Studio 2015 und Windows 10 am 11. Mai 2015 in München

Was sollte ich als Softwareentwickler in 2015 wissen? Diese Frage beantworte ich am 11. Mai 2015 gemeinsam mit meinen IT-Visions Kollegen Dr. Holger Schwichtenberg und FH-Prof. Manfred Steyer. Wir werden einen Überblick über .NET 4.6, .NET Core 5.0, Visual Studio 2015, Windows 10, AngularJS, Xamarin, Appache Cordova, ASP.NET MVC 6 und das Entity Framework 7 geben. 

Am 23. März haben wir die gleiche Veranstaltung bereits in Essen durchgeführt und durften dort über 130 Teilnehmer begrüßen. Anbei ein paar Impressionen:

 

Manfred Steyer über AngularJS
André Krämer zeigt Windows 10
hs

Wer übrigens gerne selbst mehr über Windows 10, AnuglarJS, Xamarin, ASP.NET MVC 6, .NET Core 5.0 und das Entity Framework 7 erfahren möchte, der kann sich unter http://www.it-visions.de/produkte/vortragsdetails.aspx?v=8035 einen der noch Verfügbaren Plätze für den Infotag in München sichern

Holger Schwichtenberg: Kostenfreie Vorstellung von .NET 2015 und Visual Studio 2015 am 6. Mai in Dortmund

Der Dotnet-Doktor präsentiert alle Neuerungen in .NET und Visual Studio bei der .NET User Group am 6. Mai von 18 bis 21 Uhr.

Norbert Eder: #fotomontag #16

Jeden Montag ein Foto. Der #fotomontag.

Mindestens einmal besucht man mit seiner Kamera auch den Bahnhof. So auch ich und nachfolgend das Ergebnis:

Hauptbahnhof Graz

Hauptbahnhof Graz

Bildinformationen:
35mm
ISO 100
f/7.1
1/100.

Hast du eine Meinung zum Foto? Ja? Dann lass sie mich doch bitte wissen und bewerte es in den Kommentaren.

The post #fotomontag #16 appeared first on Norbert Eder.

Fabian Deitelhoff: Gelesen: Als auf der Welt das Licht ausging

Im Urlaub konnte ich endlich das Buch Als auf der Welt das Licht ausging von Tom DeMarco lesen, das schon lange auf meinem Schreibtisch lag. Aufgrund des hitzigen Jahresbeginns, inklusive ausgedehnter Prüfungsphase, kam ich aber erst im Urlaub im März dazu, das Buch wirklich in Ruhe lesen zu können. Nun folgt auch meine Rezension und etwas später die Verlosung zum Buch.

Das Buch im Überblick

Als auf der Welt das Licht ausging – Ein Wissenschafts-Thriller

Hanser Fachbuch, 11/2014, 652 Seiten, Deutsch
ISBN: 978-3-446-43960-3, 19,99 Euro

Sprache: Deutsch – Übersetzt aus dem Englischen von Andreas Brandhorst
Ausstattung: Fester Einband
E-Book: Auch als E-Book verfügbar für 15,99 Euro
Probekapitel: Leseprobe downloaden
Gesamtnote: befriedigend – 3,5 von 5 Sternen
Leseempfehlung: Ja

Als auf der Welt das Licht ausging - Ein Wissenschafts-Thriller

Die Story

Im Grunde ist die Story schnell zusammengefasst: die Welt entwickelt sich, aufgrund von anhaltenden Konflikten, nicht gut. Ganz vorne mit dabei sind die USA, die einem langjährigen Gegner endlich einen Schlag versetzen möchten. Obwohl durch Simulationen vorausberechnet werden konnte, dass dieses Vorhaben komplett schief gehen kann, hört keiner der Verantwortlichen auf die Gruppe von Wissenschaftlern, die an den Simulationen gearbeitet hat. Das Resultat ist ein nahender Atomkrieg, der aber von der gleichen Gruppe Wissenschaftlern verhindern werden kann.

Als Resultat auf dieses vereitelte Worst-Case-Szenario des 21. Jahrhunderts wird aber der sogenannte Layton-Effekt aktiv, woraufhin das Licht auf der Welt ausgeht. Warum das passiert, also was der Effekt genau bewirkt beziehungsweise verhindert, möchte ich an dieser Stelle nicht verraten. Denn das gehört zu einem wesentlichen Teil der Geschichte. Nur so viel sei gesagt: bestehende Technologie wird nutzlos, was einerseits eine Katastrophe ist, andererseits aber Möglichkeiten für neue Entdeckungen bereithält.

Was hat mir gefallen

Sehr gefallen hat mir, gerade am Anfang der Geschichte, die ausführliche Charakterentwicklung. Insbesondere die Gruppe von Wissenschaftlern wird sehr gut aufgebaut. Auch die Erklärungen rund um den wissenschaftlichen Aspekt der Geschichte, das Buch trägt immerhin den Untertitel Ein Wissenschafts-Thriller, sind äußerst gut gelungen und gehören für mich zum Kernaspekt des Buchs. Mir haben gerade diese Passagen beim Lesen sehr viel Spaß bereitet.

Ebenfalls gelungen sind meiner Meinung nach die Anknüpfungspunkte an aktuelle Geschehnisse der realen Welt. Nichts von alledem ist ferne Zukunftsmusik, sondern kann grundsätzlich schon morgen passieren. Auch die Art und Weise, wie die Charaktere im Buch beschrieben sind und agieren, ist an vielen Stellen deutlich realer als einem das lieb ist. Das betrifft auch die ganzen Planspiele des Buchs, also die zahlreichen was wäre, wenn-Szenarien, die ebenfalls hervorragend auf die reale Welt passen. Alleine aus dem geschichtlichen Teil mit den Simulationen hätte ein eigenständiges Buch werden können, so viel Potential steckt darin.

Was hat mir nicht gefallen

Allerdings gibt es auch einige Dinge, die mir nicht gefallen haben. So gut eine ausführliche Charakterentwicklung bei den Hauptcharakteren auch ist, so störend ist sie bei den vielen Nebenschauplätzen. Und davon gibt reichlich. Langatmig und teilweise in epischer Breite werden Charaktere eingeführt, Nebenschauplätze aufgebaut und im Grunde für die Geschichte völlig irrelevante Handlungsstränge erzählt. Am Anfang dachte ich noch, dass sich das am Ende alles zusammenfügen wird, was allerdings nicht passiert ist. Ich schätze, dass mindestens 250 Seiten für die Geschichte nicht relevant sind. Die hätten auch ruhig fehlen können. Denn sie hinterlassen leider einen faden Beigeschmack. Was absolut schade ist, denn der wissenschaftlich Teil und die Geschichte drumherum sind wirklich sehr gelungen.

Fazit  & Bewertung

Im Endeffekt haben für mich die Stellen, die ich nicht so gelungen fand, einen etwas höheren Einfluss auf die Geschichte und das Buch als Gesamtwerk. Deshalb gebe ich dem Buch nur 3,5 von 5 Sternen beziehungsweise ein befriedigend. Eine Leseempfehlung spreche ich trotzdem aus, da ich vieles an dem Buch wirklich gut finde. Mit ein wenig mehr Fokus auf die eigentliche Geschichte des Buchs und etwas mehr Spannung, denn es soll immerhin ein Thriller sein, hätte das Buch von Tom DeMarco deutlich mehr Einschlagskraft gehabt.

Marco Scheel: Links for 2015-04-19 [del.icio.us]

Jürgen Gutsch: Working with Git – Part 2: Feature Branches

Im letzten Teil habe ich meine Motivation beschrieben mit Git zu arbeiten. In diesem Teil Beschreibe ich wie man Effektiv und Sicher mit Git Arbeiten kann. “Sicher” heißt in diesem Fall sauber, agil und mit sehr wenigen Konflikten. Sicher heißt in diesem Fall auch annähernd fehlerfrei. In diesem Teil geht es darum isoliert in Feature-Branches zu arbeiten.

Wer täglich mit Git arbeitet und dabei bereits Freature-Branches anwendet, wird in diesem Blog-Artikel nichts neues erfahren. Ich schreibe das hier hauptsächlich für Leute die keine oder wenig Erfahrung mit Git haben und für Leute die Git wie SVN oder TFS verwenden, also historisch bedingt mit Commits und Branches eher sparsam umgehen.

Branchen geht schnell

Herkömmliche zentralisierte SCM haben alle den Nachteil, dass Branching relativ schwer oder aufwendig ist. In SVN und TFS wird für jeden Branch zumindest ein eigener Ordner angelegt, was ich für recht umständlich halte, zumindest beim häufigen Wechseln der Branches.

Diese Umstände führen dazu, das in zentralisierten SCM unvollständiger Code, unvollständige Features committet wird oder eben nur ein einziges Mal, wenn das Feature fertiggestellt ist. Allerdings sollte man so häufig wie möglich committen, um eine detaillierte Historie zu erhalten und um seine Arbeitsschritte besser nachvollziehen zu können. Ein weiterer Grund für häufiges committen ist die Größe des Change Sets. Je kleiner dieser ist, desto einfacher fällt das Mergen.

In Git und Mercurial ist das nicht der Fall. Der Wechsel der Branches findet immer im gleichen Ordern – dem sogenannten Workspace – statt. Aus .NET Sicht heißt das, ich kann die Branches innerhalb der gleichen Visual Studio Instanz wechseln. Der Wechsel der Branches passiert also sehr schnell und ich muss meine IDE, meinen Workspace nicht verlassen. Der Wille einen Branch zu erstellen ist größer.

Dieser Vorteil kann genutzt werden um mit Feature Branches zu arbeiten. Das heißt es wird für jedes Feature, das zu entwickeln ist ein eigener Branch angelegt und man kann nun isoliert in diesem Branch arbeiten und beliebig oft committen. Ich kann jederzeit in einen früheren Stand wechseln und von dort aus wieder einen eigenen Branch erstellen, wenn es sein muss. Ich kann einen Branch erstellen nur um etwas schnell zu testen und dann wieder zu verwerfen. Der Vorgang des Branchens selbst bei sehr großen Projekten dauert nur einen Bruchteil einer Sekunde.

Für jede Anforderung einen eigenen Branch zu erstellen, erscheint auf dem ersten Blick sicherlich etwas Übertrieben. Allerdings hilft das enorm den Code lauffähig zu halten. Feature Branches sind auch eine Voraussetzung für Pull Requests die ich in einem dritten Teil kurz vorstellen möchte.

Praxis

Hier möchte ich die Arbeit mit einem Pull Request kurz in einem gespielten Szenario anreißen:

Wir wechseln also als erstes in unseren Workspace.

01_OpenTheRepo

In diesem Workspace gibt es zwei Branches. Der eine ist der “master” der den fertigen, getesteten und abgenommenen Code enthält, der andere ist “dev” welcher der Entwicklungszweig ist. Hier kann unter umständen Code landen der fehlerhaft ist. Auf diesem Branch lauscht ein Build Server mit einem schnellen Continuous Integration Prozess, es wird also gebaut und die Unit Tests werden ausgeführt.

02_ListBranches

Aktuell befinden wir uns im master-Branch, wechseln wir also in den dev Branch, in dem sich aktuell eine HalloWelt.txt befindet. Das ist nun unser Source Code ;)

03_ChangeToDev

Wir haben nun die Anforderung einen neuen Abschnitt mit Infos über Feature Branches anzufügen. Die Anforderungen kommt in Form eines Tickets aus einem Tool wie TFS, Jira, Redmine, etc. Wenn ich einen Feature Branch erstelle habe ich mir angewöhnt meinen Username und einen Ticket Identifier als Branch-Name zu nutzen. In meinem Fall sieht das z. B. so aus: 
juergengutsch/HalloGit-1
<Username>/<Ticket Id>

Die Initialen vorne dran, helfen beim erkennen des Branch Erstellers in einer großen Liste von Feature Braches. Der Slash erzeugt z. B. im SourceTree eine Ordnerstruktur mit den Entwicklerkürzeln als Ordner und darin dann die Liste mit Branch-Namen, bestehend aus dem was nach dem Slash folgt. Diese Schreibweise sorgt also für mehr Übersicht.

Wir erstellen also unseren Branch und wechseln in diesen:

04_FirstFeatureBranch

Nun können wir die Datei öffnen und die Anforderung implementieren und abspeichern. Der Cmder zeigt nicht nur den aktuellen Branch an, in den wir uns befinden, sondern zeigt auch noch dessen Zustand. Rot bedeutet der Branch ist unsauber. Wir haben also Änderungen:

05_ChangedFile

Wir fügen die Änderung nun in unser Change Set ein und committen. Der Workspace ist nun wieder sauber:

06_ComitChanges

Wir möchten unsere Änderungen nun in den dev-Branch mergen. Was wir nun aber machen müssen um Merge-Fehler im dev zu vermeiden, ist diesen zuerst in unserem Feature Branch zu mergen.

Wir wechseln also in den dev-Branch und holen uns die aktuellen Änderungen vom entfernten Repository, schließlich könnte ein anderer Entwickler ebenfalls am Code gearbeitet haben:

07_PullDev

Wie wir nun sehen, gab es tatsächlich Änderungen. In der Historie können wir sehen was gemacht wurde. Nun wechseln wir wieder zurück in unseren Feature Branch und mergen die letzten Änderungen in den aktuellen Workspace. Sollte die Implementation des Features länger gehen, sollten wir immer wieder mal den letzten Stand aus dem dev-Branch in den Feature Branch holen.

08_MergeDev

An dieser Stelle müsste jetzt noch ein Review erfolgen. Das passiert bei uns in Form eines Pull Requests auf den ich im nächsten Teil eingehen möchte. Für den Pull Request müsste der aktuelle Feature Branch in das Remote Repository gepusht werden.

Wer der Merge erfolgreich, baut der Code lokal und laufen alle Tests lokal durch, können wir diesen Feature Branch nun nach dev mergen. Vorausgesetzt unser Feature ist fertig:

10_MergeToDev

Anschließend pushen wir diesen Stand in das Remote Repository:

11_PushToRemote

Wir können uns nun dem nächsten Feature widmen :)

Fazit

Was ich hier mit relativ viel Text und Bilder beschrieben habe ist im Alltag viel weniger Aufwand und ist in einigen Sekunden getan. Lediglich Merge-Konflikte – die Dank der Feature-Branches nur noch selten vorkommen – benötigen etwas mehr Aufmerksamkeit.

Für diesen Zweck ist die Konsole auch absolut ausreichend, da die paar Befehle die man hierbei anwendet schnell gelernt sind. Für alles weitere, was eher selten benötigt wird, kann man schnell das Netz konsultieren. Der Cmder ist für Git eine sehr gute Unterstützung.

Uli Armbruster: WhatsApp auf Android automatisch in die Cloud sichern

Ist dir das auch schon passiert,

  • dass dein Handy geklaut wurde oder kaputt ging und deine ganzen WhatsApp Nachrichten, Bilder und Videos weg waren?
  • dass dein Handyspeicher ständig voll ist, weil die Multimedia-Daten von WhatsApp einfach zu groß sind?
  • dass du auf ein neues Handy gerne deine gesamte WhatsApp Kommunikation übertragen hättest

Wenngleich es sehr viele Lösungen im Netz gibt, sind nur wenige davon für den weniger geübten Anwender geeignet. Die Firma MetaCtrl bietet für Android entsprechende Apps an, womit sich Verzeichnisse auf dem Smartphone automatisiert in den eigenen Cloudspeicher synchronisieren lassen. Nutzt du also Dropbox, OneDrive, Google Drive oder Box ohnehin schon, so ist das eine einfache Lösung. Exemplarisch möchte ich das für Dropbox zeigen:

Die zugehörige App heißt Dropsync (für andere Cloud Dienste findest du die zugehörigen Apps hier). Die App einfach installieren und starten. Dann musst du der App Zugriff auf Dropbox gewähren. Dazu einfach das vorausgewählte Dropbox Konto anklicken und zulassen.

2015-04-18 12.09.38

Als nächstes kannst du dann ein Verzeichnis zur Synchronisation auswählen. Angefangen beim lokalen Verzeichnis, was logischerweise ‘WhatsApp’ heißt. Danach musst du das Verzeichnis in der Dropbox auswählen, wohin die Daten gespeichert werden sollen. Am besten kurz ein neues Verzeichnis anlegen, das du auch WhatsApp nennen kannst. Nun muss nur noch die Synchronisationsmethode ausgewählt würden. Ich würde “nur Uploads” vorschlagen. Was das genau bedeutet, könnt ihr in der App nachlesen.

2015-04-18 12.10.16

Der Vorteil ist, dass damit jederzeit lokal Bilder und Videos gelöscht werden können, diese aber weiterhin in der Cloud bleiben. Außerdem ist im lokalen WhatsApp Verzeichnis auch die benötige Datei, welche für eine Wiederherstellung auf einem anderen Handy benötigt wird.

Das Wiederherstellen ist im Übrigens sehr einfach. Auf dem neuen Handy ebenfalls die App installieren, das WhatsApp Verzeichnis in der Dropbox als Quelle auswählen und lokal ein WhatsApp Verzeichnis erstellen. Als Methode wählst du dann “nur Downloads”. Nachdem das Verzeichnis vollständig synchronisiert wurde, kannst du WhatsApp auf dem Smartphone installieren. Beim ersten Starten wird dein Konto erkannt und eingelesen. Voila, alle Daten wieder da. Jetzt solltest du aber nicht vergessen die Synchronisationsmethode wieder auf “nur Uploads” zu stellen.

 

Am Ende habe ich noch mehrere wichtige Hinweise:

  • Denkt gut darüber nach, ob ihr eure Konversationen und Daten in einem Cloud Speicher sichern wollt. Wer allerdings schon WhatsApp nutzt, nimmt es mit dem Datenschutz ohnehin nicht genau.
  • Die kostenlose Variante von Dropsync ist beschränkt. Es können Dateien von max. 8 MB hochgeladen werden, was bedeutet, dass v.a. größere Videos nicht gesichert werden. Bilder und kleine Videos sind in der Regel davon nicht betroffen. Für 6€ gibt es die Variante ohne Einschränkungen.
  • Stellt in den Einstellungen ein, dass nur bei aktivierter W-LAN Verbindung Daten synchronisiert werden sollen.
  • Generell muss natürlich in der Dropbox genügend freier Speicher zur Verfügung stehen. Kleiner Tipp: OneDrive bietet mehr freien Speicher und ist als Sicherungsplatz für Handydaten völlig ausreichend

2015-04-18 12.09.452015-04-18 12.09.53


Einsortiert unter:German, Misc Tagged: Off-Topic

friends header

bloggers headline

links header

 
Don't contact us via this (fleischfalle@alphasierrapapa.com) email address.