Skip to content

Road to the Cloud am 12. Februar in Wien

Am 12. Februar gibt es bei Microsoft Österreich Windows Azure aus der Business-Perspektive!

Donnerstag, 12. Februar 2015, 13:00-18:00 Uhr

Microsoft Österreich, Am Euro Platz 3, 1120 Wien

Anmeldung

Agenda:

Von Applikationen zu Apps: Wandel im Softwaremarkt (Christian Nagel)

13:00 – 14:00 Uhr
Hardware und Software entwicklen sich in einer “Mobile first, Cloud first”-Welt rasant weiter, was für Entwickler und ISVs einige Veränderungen zur Folge hat. In einem solch dynamischen Umfeld Erfolg zu haben bedeutet, alte Gewohnheiten abzulegen und sich sich auf eine neue Weise mit Kunden und der Branche auseinander zu setzen. In dieser Session blicken wir auf Markttrends und erörtern Ansätze, wie Sie Ihre Software in der neuen Welt erfolgreich entwicklen und vermarkten können.

Cloud-Modelle: Private, Public und Hybrid (Rainer Stropek)

14:15 – 15:15 Uhr
Analysten prognostizieren, dass SaaS-Applikationen den traditionellen Softwarevertrieb in naher Zukunft ablösen werden. Diese Cloud-Landschaft verlangt von Softwareentwicklern strategische Entscheide zu Application Lifecycle Management und Hostingmodellen. Lernen Sie in dieser Session, wie diese Ansätze aussehen und welche Plattformen Ihre Cloud-Modelle am besten unterstützen.

Das Geschäft mit der Cloud und Kostenmodelle (Thomas Mutzl)

15:30 – 16:30 Uhr
Die Cloud ist weniger eine technische, sondern vielmehr eine Business-Revolution. In dieser Session sehen wir uns die Trends an, die die Cloud vorantreiben, mit besonderem Fokus auf die Erfolgschancen, die sich daraus ergeben. Wir zeigen, wie die Cloud Geschäftsmodelle auf radikale Weise verändert und diskutieren konkrete Lösungsansätze für eine neue Software-Welt.

Erfolgsgeschichten (Christian Nagel/Rainer Stropek/Thomas Mutzl)

16:30 – 17:00 Uhr
Lernen Sie wie österreichische Firmen die Cloud heute einsetzen, wie Cloud Technologien auf Basis von Microsoft Azure erfolgreich eingesetzt werden.

Ich freue mich auf viele Teilnehmer!

Christian

CN innovation

Offene Kurse – ASP.NET MVC im Februar

Ein Kurs der im Februar schon sicher stattfindet ist ASP.NET MVC 5 – 16.-20. Februar 2015!

2015_FebTraining

Neben Models, Views, Controllers, HTML Helpers und Authentication gibt es enen Einstieg in JavaScript mit jQuery, CSS3, und eine Einführung zu ASP.NET Web API. Natürlich mache ich auch noch einen Ausblick auf ASP.NET MVC 6 – das läuft dann nicht nur unter Windows sondern auch auf Mac und Linux.

Zusätzlich kann ich zur Web Entwicklung auch diese Trainings empfehlen:

Anmeldung zu all diesen Kursen ist direkt über meine Website möglich!

Christian

CN innovation

C# 6 Auto Property Initializers und Getter-only Auto Properties

C# 6 bringt zahlreiche neue Features in der Sprache. Dieser Artikel beschreibt neue Features bei den Auto Property Intializers und Getter-only Auto Properties.

Sharp right
© Liquidphoto | Dreamstime.comSharp Right Turn Sign Photo

C# ist eine Programmiersprache die laufend Änderungen unterworfen ist. C# ist dabei keine pure Objekt-orientierte Programmiersprache, und auch keine Funtionsorientiertte Sprache. Diese Sprache wird aber von all diesen Programmier-Paradigmen beeinflusst. Das was praktisch ist kommt auch in diese Sprache hinein.

Wenn wir da in die Vergangenheit blicken: mit C# 2 sind generics neu gekommen, C# 3 brachte zahlreiche Syntaxerweiterungen für Language Integrated Query (LINQ) und hat fast jede (oder jede) Applikation beeinflusst. Die Neuigkeiten bei C# 4 waren dann bei einigen Szenarien wie der Integration von Scripting oder auch COM praktisch. Mit Version 5 gab es dann zwar nur zwei neue Keywords, die waren aber so wichtig und haben die asynchrone Programmierung vereinfacht dass sie wieder praktisch jedes Programm beeinflussten.

Version 6 bringt jetzt keine so wichtige Features wie wir das bei den Neuerungen der Vorgängerversion erleben durften. Aber dafür gibt es viele praktische Dinge. Da legen wir gleich mit den neuen Auto Property Initializers los.

Bei C# 5 konnten Auto properties nur im Constructor initialisiert werden:

public class Sample1
{
  public Sample1()
  {
    IsTrue = true;
  }
  public bool IsTrue { get; set; }
}

Mit C# 6 können Auto properties direkt mit der Property initalisiert werden:

public class Sample1
{
  public bool IsTrue { get; set; } = true;
}

Wie sinnvoll ist das wirklich? Ein Problem dabei ist dass direkt bei der Property nur Konstante für die Initialiserung verwendet werden können. Damit reduziert sich der praktische Anwendungsfall doch. Während der Entwicklungsphase von C# 6 gab es auch noch Primary Constructors die sich als wirklich praktisch für die Initialiserung dieser Properties herausgestellt hatten. Die haben es aber nicht zum Release geschafft, werden aber sicher in anderer Form in einer zukünftigen C# Version kommen. Damit ist dieses Feature zur Initialisierung nur ein Kleines.

Was aber mit automatic properties auch jetzt schon sehr praktisch ist, sind read-only properties bei automatic properties. Bei C# 5 war der lange Property Syntax notwendig um read-only properties zu definieren:

public class Gadget
{
  public Gadget(int i, string name)
  {
    _i = i;
    _name = name;
  }

  private readonly int _i;
  public int I
  {
    get { return _i; }
  }

  private readonly string _name;
  public string Name
  {
    get { return _name; }
  }
}

Dafür war es schon notwendig eine Menge Code zu schreiben. Stattdessen wurden oft automatic properties mit einem private set Accessor eingesetzt:

public class Gadget
{
  public Gadget(int i, string name)
  {
    I = i;
    Name = name;
  }

  public string I { get; private set; }
  public string Name { get; private set; }
}

Das ist zwar viel kürzer. Der Nachteil ist aber das es sich nicht um eine readonly Property handelt. Diese Property kann jederzeit – wenn auch nur innerhalb der Klasse – geändert werden.

Mit C# 6 können jetzt automatic properties auch mit nur einem get Accessor deklariert werden. Dabei wird vom Compiler ein readonly field erzeugt. Die Initialisierung der Property ist dabei auch gleich viel praktischer. Und wenn für die Initialiserung keine Konstante möglich ist, ist die Initialiserung auch im Constructor möglich.

public string Name { get; } = "Sample";

Auto Property Initializers und Getter-only Auto properties sind nur zwei der zahlreichen Features von C# 6. Zum Beispiel über Null Propagation habe ich bereits geschrieben. Neben Blog Artikeln gibt es diese Features auch in meinen Workshops (Firmenkurse als auch offene Kurse)
Programmieren mit C# (23. März 2014 in Wien)

Take off to .NET 2015 (9. Februar 2014 in Wien),

und natürlich auch im Buch Professional C# 6 an dem ich gerade arbeite.

Christian

CN innovation

Offene Trainings – Windows Store Apps im Jänner 2015

2015_Training

Seit heuer gibt es auf meiner Website neben Firmentrainings auch die Möglichkeit offene Trainings zu buchen.

Direkt auf der Homepage stehen da gleich die nächsten Termine in Wien. Das startet gleich ganz spannend, der besten Vorbereitung auf Windows 10: Windows Store Apps.

Am 19.1. Windows Store Apps mit XAML und C#. C# Kenntnisse werden dabei vorausgesetzt. XAML Wissen hilft ist aber nicht Voraussetzung. XAML wird zwar auch (abhängig der Teilnehmervorkenntnisse) erklärt, es geht aber vor allem um Windows Store App Spezifika, wie z.B. die Windows Runtime und den App-LifeCycle. Spezifische Windows Store App Controls wie die AppBar, modernes Design, Tiles and Toasts und natürlich contracts wie sharing sind wichtige Themen.

In der Woche darauf ab 26.1. geht es mit Advanced Themen weiter – Advanced Windows Store Apps. Wenn Sie bis jetzt keine Windows Store Apps programmiert haben, würde ich den erstgenannten Kurs empfehlen. Im Advanced Kurs geht es dann nur um Spezialthemen wie z.B. Animationen, Globalisierung, Storage Optionen, Printing, Play To, Windows Push Notifications, Background Tasks, Sensoren, Camera… Und das mit C# und XAML oder JavaScript und HTML.

Bei Sonderwünschen gibt es natürlich auch im Kurs Flexibilität :-)

Es würde mich freuen Sie/Dich bei einem dieser Kurse zu sehen :-)

Christian

http://www.cninnovation.com

An Awesome Year 2015

???????????????????????????????????????????????????????????????????????????

Das wird ein “awesome” Jahr 2015 :-)

???????????????????????????????????????????????????????????????????????????

Warum “awesome”?

Windows 10

Am 21. Januar sehen wir ein “awesome” Windows 10. Zumindest heißt der Build so: FBL_AWESOME, aber ich denke es ist wirklich “awesome”.

Das nächste Kapitel zu Windows 10 bringt neue Consumer-Features! Ich bin schon gespannt :-)

Professional C# 6

Ich arbeite an der 10. Edition von Professional C#. Ja, bereits die 10. Edition! Die erste Ausgabe gab es im Jahr 2002 mit der Beta 2 von .NET 1.0. Seitdem hat sich in .NET viel getan. Besonders viele Änderungen kommen jetzt aber mit .NET 2015.

Die neue Ausgabe wird ein größeres Update dieses Buches mit weniger Seiten. Die aktuelle Auflage kommt mit 1560 Seiten aus. Für .NET 2015 gäbe es die Möglichkeit das auf 2500 Seiten auszudehnen. Ich entschied mich aber stattdessen die viele alte Technologien loszuwerden und die Seitenanzahl zu reduzieren. In der neuen Edition gibt es dann nur neue Technologien wie z.B. ASP.NET 5 aber nicht die alte Version von ASP.NET MVC Web API…

Bitte Professional C# 5 für alle alten Technologien zu Rate ziehen! Windows Forms ist aber auch da nicht mehr drinnen. In welcher Edition gab es das zuletzt?

Die Neuauflage des Buches umfasst die neuen Sprachfeatures von C#, die neue .NET Core Runtime, ASP.NET 5, Windows Universal Runtime Apps (oder was dann auch immer der Name sein wird) für Windows 10…

Viele Beispiele des Buches werden nicht nur unter Windows sondern auch unter Linux und Mac laufen (natürlich nicht die Kapitel zu Windows Universal Apps).

Windows Azure

Woche um Woche gibt es bei Windows Azure neue Features.

Alle meine Webseiten laufen mit Windows Azure Websites. Für den Storage verwende ich SQL Database und Blob Storage. Meine Apps verwenden Windows Azure Mobile Services sowie die Bing Search API aus dem Azure Marketplace.

Für meinen Sourcecode nutze ich Visual Studio Online (mit Git), meine Office Suite kommt über Office 365.

Aktualisierte Versionen meiner Apps (werden bald released, aber Datum verspreche ich keines) nutzen DocumentDB und Azure Search.

Einige wichtige Termine zu Windows Azure:

Bitte dieses Datum für Windows Azure in Wien freihalten: 12-Februar! Weitere Informationen folgen in Kürze!

Bei der BASTA! in Darmstadt (24 – Februar) habe ich eine Session über Storage Optionen mit Windows Azure. Das sollte eineige Unklarheiten beseitigen und bei Entscheidungen helfen.

Apps

Eine neue Version von Picture Search ist in Arbeit. Die neue Version kommt nicht nur für Windows, sondern auch für Windows Phone, iPhone und Android! Außerdem werde ich die kostenlosen Limits erhöhen. Für all diese Plattformen setze ich Xamarin ein.

 Menu Card und Kantine sind weitere Apps, die für mehrere Plattformen kommen. Menu Card bekommt ein komplettes Rewrite am Server und viele neue Features am Client.

Kurse, Workshops

Wie in den Vorjahren mache ich auch weiterhin Programmierkurse und Workshops. Neue Technologien wie C# 6, .NET Core, ASP.NET 5 und Windows 10 Apps sind da natürlich ein heißes Thema. Bei Xamarin.Forms erhoffe ich auch viele Teilnehmer.

Auf meiner Website ist neu dass da nicht nur Firmen-Workshops zu finden sind. Jetzt kann man sich auch direkt zu offenen Kursen registrieren. Im Jänner startet das mit Windows Store Apps mit XAML und C# und Advanced Windows Store Apps mit C# und JavaScript.

Ich hoffe viele von euch dieses Jahr zu sehen!

Ein glückliches und gesundes Neues Jahr allen meinen Lesern!

Christian

CN innovation

Bild © Ivelinr |  Dreamstime.comAwesome Evaluation Form Photo 

XAML Workshop in Wien

Kurzfristig noch an einem XAML Workshop mit WPF und Windows Store Apps Interesse? 1. bis 5. Dezember in Wien. Wir behandeln da das wichtigste sowohl zu WPF als auch zu Windows Store Apps – mit C# und XAML. Programmierkenntnisse mit C# und .NET sollten vorhanden sein. Themen werden wie bei meinen Workshops üblich noch im Kurs an die Teilnehmerwünsche angepasst.

Das sind die Inhalte:

  • Einführung in XAML
  • Unterschiede zwischen Desktop Apps und Windows Store Apps
  • Universal Apps
  • Design Guidelines
  • Controls
  • Layout Controls
  • Commands
  • Styles, Templates, Resources
  • Data Binding
  • Navigation
  • Printing
  • Documents
  • MVVM Pattern
  • Windows Runtime
  • Application LifeCycle mit Windows Store Apps
  • Contracts
  • Tiles und Toasts
  • Sharing Code zwischen WPF und Windows Store Apps

Bei Interesse und auch Fragen zu den Inhalten bitte ein Email: office@cninnovation.com.

Natürlich ist ein Firmenkurs auch zu anderen Terminen möglich.

Preis für den 1. Dezember Termin: € 2.125,- (zzgl. Mwst) , Anmeldung

Mit dem Winter-Special auch noch ein Surface Pro 3 zum Kurs.

Christian

http://www.cninnovation.com

C# vNext – Null Propagation

Im letzten Blog Post habe ich Primary Constructors und Property Initializers gezeigt. Primary Constructors werden jetzt doch nicht in C# 6 kommen – aber dafür ist es möglich Property Initializers vom Constructor Body zu initialisieren. Mehr dazu aber in einem späteren Blog Post wenn dieses Feature auch im Visual Studio zur Verfügung steht.

In diesem Blog Post möchte ich ein besonders cooles Feature von C# 6 zeigen: Null Propagation. Programmcode besteht aus vielen Zeilen null checks – genau dieser Code kann damit vereinfacht werden.

Sharp right

© Liquidphoto | Dreamstime.comSharp Right Turn Sign Photo

Falls bei einem Aufruf von obj.Foo() die Variable obj auf null zeigt, gibt es eine NullReferenceException. Deshalb sollte die Variable vorher auf null überprüft werden. Bestehender Code

if (obj != null)
{
  obj.Foo();
}

Kann einfach mit Hilfe des ?. Operators vereinfacht werden:

obj?.Foo();

Wenn obj null ist ist das Ergebnis der Expression null, ansonsten wird die Foo Methode aufgerufen. Eine simple Vereinfachung vom Code.

Doch wo und wie ist das wirklich im Einsatz? Anhand von Template-generierten C# Code in einer Windows Store App möchte ich hier ein paar Beispiele zeigen.

In der Methode GoBack der Klasse NavigationHelper findet sich dieser Syntax. Erst nach der Überprüfung von this.Frame kann auf die Property CanGoBack zugegriffen werden. Wenn diese Property true zurückliefert kann die GoBack Methode vom Frame aufgerufen werden.

    public virtual void GoBack()
    {
      if (this.Frame != null && this.Frame.CanGoBack) this.Frame.GoBack();
    }

Mit dem neuen Syntax sieht das wie folgend aus. Statt dem Extra Vergleich auf nicht null genügt ein ?. und dann ein Vergleich mit true. Das Ergebnis der Expression this.Frame?.CanGoBack kann natürlich auch null zurückliefern, deshalb ist der Vergleich mit true erforderlich.

   public virtual void GoBack()
    {
      if (this.Frame?.CanGoBack == true) this.Frame.GoBack();
    }

In der Klasse NavigationHelper findet sich auch dieser Code für die GoBackCommand Property:

public RelayCommand GoBackCommand
{
  get
  {
    if (_goBackCommand == null)
    {
      _goBackCommand = new RelayCommand(
        () => this.GoBack(),
        () => this.CanGoBack());
    }
    return _goBackCommand;
  }
  set
  {
    _goBackCommand = value;
  }
}

Auch das lässt sich vereinfachen – allerdings mit dem coalescing Operator, und das ist jetzt schon mit C# möglich. Wenn _goBackCommand nicht null ist, wird der Wert dieser Variable zurückgeliefert. Ansonsten wird ein neuer RelayCommand instanziert, und die neu gesetzte Variable _goBackCommand ist das Ergebnis des get Accessors.

public RelayCommand GoBackCommand
{
  get
  {
    return _goBackCommand ??
      (_goBackCommand = new RelayCommand(
        () => this.GoBack(),
        () => this.CanGoBack()));
  }
  set
  {
    _goBackCommand = value;
  }
}

Ganz ähnlich wie die GoBack Methode ist die CanGoBack Methode implementiert. Zuerst die Überprüfung ob Frame nicht null ist bevor das Ergebnis von CanGoBack zurückgeliefert wird.

    public virtual bool CanGoBack()
    {
      return this.Frame != null && this.Frame.CanGoBack;
    }

Der coalescing Operator ist auch im Zusammenspiel mit null propagation sehr praktisch. Wenn das Ergebnis der vorherigen Expression null ist, wird in diesem Fall false zurückgeliefert. True gibt es nur wenn Frame nicht null ist, und CanGoBack auch true zurück liefert. Mit Hilfe von Expression Bodied Members => kann diese Methode ohne geschwungene Klammern implementiert werden, mit Syntax wie wir ihn von Lambda Expressions kennen.

    public virtual bool CanGoBack() => 
      this.Frame?.CanGoBack ?? false;

Ein weiteres praktisches Beispiel findet sich in der RelayCommand Klasse. In einer thread-safe Variante zum Feuern eines Events kommt der Delegate in eine Zwischenvariable (handler), bevor der Event über den Delegate gefeuert werden kann.

public void RaiseCanExecuteChanged()
{
  var handler = CanExecuteChanged;
  if (handler != null)
  {
    handler(this, EventArgs.Empty);
  }
}

Mit null Propagation wird dieser Code sehr viel einfacher. Der direkte Aufruf der Methode nach einem ? mit ?() ist nicht möglich. Aber die Invoke Methode des Delegates bringt Abhilfe. Invoke wird nur aufgerufen wenn die linke Expression nicht null ist. Das ist auch gleich thread-safe und erspart doch einige Codezeilen.

public void RaiseCanExecuteChanged() =>
  CanExecuteChanged?.Invoke(this, EventArgs.Empty);

C# 6 hat keine so großen Features wie die async und await Keywords von C# 5 oder LINQ von C# 3. Aber es gibt viele kleine praktische Erweiterungen. Null Propagation gehört auf jeden Fall dazu.

Christian

CN innovation

Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.