Visual Basic lebt und ist Teil von .NET Core 2.0

Visual Basic ist ein Phänomen als Programmiersprache. Oft geschmäht, oft tot gesagt, selten gelobt, ist sie immer seit nunmehr über 25 Jahren immer noch da und hat, wie könnte es auch anders sein, eine Zukunft. Bei .NET Core 2.0, der Open Source-Version des .NET Framework-Kerns (vereinfached umschrieben) das Ende September offizell freigegeben werden soll (aktuell gibt es nur eine Preview) wird VB erstmals offiziell dabei sein. Für Visual Studio 2017 muss das aktuelle Update 3 (Release 3) über das Installationsprogramm installiert werden. Falls nach Auswahl von „Visual Basic“ kein „.NET Core“ als Unterkategorie angeboten wird, verwendest Du noch eine ältere Version von Visual Studio 2017.

Visual Studio 2017 bietet neuerdings Vorlagen für VB und .NET Core

Damit läuft Visual Basic 2017 auch unter Linux, mac OS und wo immer .NET Core 2.0 läuft. Das ist zwar grundsätzlich nichts Neues (bereits für die ersten Mono-Versionen vor vielen, vielen Jahren gab es einen VB-Compiler, wenngleich noch auf einer alten Version basierend), doch es ist ein wichtiges Signal, dass die .NET Core-Verantwortlichen VB nicht vergessen haben.

Ich war bekanntlich immer ein großer Fan von VB, auch wenn ich den letzten Jahren fast nur noch in C# programmiert habe. Von daher waren die paar Zeilen VB-Code, die ich am Wochenende mit .NET Core 2.0 ausprobiert habe, schon etwas ungewohnt (wie hieß noch einmal das Pendant zum using-Befehl und wird eine for-Schleife nicht mit Next beendet?).

In Visual Studio 2017 ist die Umsetzung einfach wie immer. IDE starten, Vorlage auswählen, Code eintippen und auf F5 drücken. Es gibt natürlich auch einen Debugger.

VB-Programme können unter .NET Core natürlich auch debuggt werden

Wie beim .NET Framework stehen auch bei .NET Core inzwischen mehrere Versionen zur Auswahl: 1.0, 1.1 und 2.0. Die Version wird in den Projekteigenschaften ausgewählt. Auch wenn es naheliegend ist, immer die aktuellste Version zu verwenden, der „Trade off“ besteht darin, dass dadurch auch die Liste der Zielframeworks eingeschränkt wird, da .NET Core 2.0 und die .NET Standard 2.0 Bibliothek nicht für alle Frameworks (etwa Xamarin.iOS) zur Verfügung stehen.

Auch für .NET Core stehen inzwischen mehrere Versionen zur Auswahl

Auch mit VS Code kommt man zum Ziel, wenngleich es keine so schönen Eingabehilfen und vor allem (noch?) keinen Debugger gibt (sollte es so bleiben, wäre das natürlich ein K.O-Kriterium).

Die folgende Schrittfolge (.NET Core 2.0 SDK und VS Code vorausgesetzt) führen hoffentlich zu einem Erfolgserlebnis:

1) Anlegen eines leeren Verzeichnisses und wechseln in das Verzeichznis

2) Eingabe von „dotnet new console“

3) Umbenennen von Program.cs in Program.vb

4) Die CsProj-Datei erhält die Erweiterung .vbprof (naheliegenderweise;)

5) Eingabe des Quelltextes:

6) Kompilieren und ausführen über „dotnet run“.

Mit Visual Studio 2017 geht alles natürlich sehr viel komfortabler, aber warum einfach, wenn es auch umständlich geht;) Ein Punkt, der für VS Code spricht ist natürlich, dass es auch unter Linux & Co läuft, was bei Visual Studio nicht der Fall ist und auch nie der Fall sein wird.

Auf alle Fälle hat es Spaß gemacht nach so vielen Jahren der Abstinzen ein paar Zeilen VB-Code in der Konsole einzutippen, die sich theoretisch 1:1 auf alle möglichen Plattformen übertragen lassen.

Visual Basic ist natürlich nicht nur bei .NET Core dabei, sondern unter dem aktuellen Namen Visual Basic 2017 auch beim großen .NET und hat in den letzten Versionen ein paar interessante Neuerungen erhalten.

Einen sehr guten Überblick über die Neuerungen von VB 2017 gibt ein Blog-Eintrag des Visual Basic-Teams bei Microsoft geschrieben von VB-Experte Klaus Löffelmann:

https://blogs.msdn.microsoft.com/vbteam/2017/03/30/whats-new-in-visual-basic-2017/

Tipp: Visual Studio das Speichern von Textdateien im UTF-8-Format abgewöhnen

Visual Studio hat auch in der 2015-Version die Angewohnheit Textdateien im UTF-8-Format zu speichern und den aus drei Bytes EF, BB und BF bestehenden BOM (Byte Ordering Mark) voranzustellen. Während sich bei Quelltextdateien über Datei -> Speichern untern auch die Codierung einstellen lässt, habe ich diese Option für Textdateien, die Teil eines Projekts sind, nicht gefunden.

Eine genial einfache Lösung ist ein kleines Add-In, das automatisch vor dem Speichern einer Textdatei aktiv wird und dafür sorgt, dass die BOM-Bytes nicht geschrieben werden. Das Add-In gibt es unter der folgenden Adresse:

https://vlasovstudio.com/fix-file-encoding/

Nach der Installation der Erweiterung muss über Extras -> Optionen -> Fix File Encoding eingestellt werden, für welche Erweiterungen die Anpassung vorgenommen werden soll. Voreingestellt sind die Erweiterung Html und Htm. Sollen z.B. auch CSV-Dateien berücksichtigt werden, muss der kleine Regex lediglich um ein | erweitert werden, wobei für die Erweiterung steht.

Fix File Encofing-Add In kümmert sich darum, dass bei Textdateien kein BOM-Header vorangestellt wird

Pdf-Dateien in Bitmaps zerlegen mit freier Software

In diesem Beitrag geht es um eine grundsätzlich einfache Anforderung: Ein Pdf-Dokument soll als Teil einer WPF-Anwendung seitenweise als Bitmap-Datei gespeichert werden, so dass sich z.B. eine einfache Seitenvorschau umsetzen lässt.

Natürlich gibt es jede Menge kommerzieller Komponenten, die alle sehr gut sind (ich verwende für ein Projekt z.B. Apose.Pdf for .Net, die ich empfehlen kann, auch wenn sie nicht ganz preiswert ist), und mit deren Hilfe sich die Anforderung in ein paar Zeilen Code umsetzen ließe. Für einen MVVM-Lehrgang ging es mir darum, keine kommerzielle Komponente verwenden zu müssen. Die Suche erwies sich als schwieriger als gedacht, denn die Anzahl freier Pdf-Tools ist mehr als überschaubar. Geht es um das Erstellen von Pdf-Dokumenten sind PdfSharp bzw. Migradoc eine sehr gute Wahl, allerdings bieten sie keine Renedering-Funktionalität.

Die offenbar einzige (!) freie Software, die Pdf-Dateien darstellen kann, ist muPdf von den Ghostscript-Entwicklern Artifex (https://mupdf.com). Der Sourcecode liegt in C vor, die Make-Datei erzeugt offenbar eine Exe-Datei, so dass das Einbinden in eine .NET-Assembly und Aufrufe per p/Invoke keine Option sind.

Zum Glück gibt es immer fleißige Entwickler, die solche Herausforderungen annehmen und anderen das Ergebnis ihrer Arbeit zur Verfügung stellen. Auf Codeproject gibt es zwei Projekte, die eine gute Grundlage für eigene Projekte sind:

1) https://www.codeproject.com/articles/498317/rendering-pdf-documents-with-mupdf-and-p-invoke-in

2) https://www.codeproject.com/Articles/579878/MoonPdfPanel-A-WPF-based-PDF-Viewer-Control

Im ersten Artikel beschreibt der Autor ausführlich, wie er in die von den Entwicklern von SumatraPdf, einem kleinen und feinen Open Source-Pdf-Betrachter, zur Verfügung gestellte muPdf-Bibliothek per p/Invoke einbindet.

Der zweite Artikel verwendet ebenfalls muPdf und macht daraus gleich ein Wpf-Control, das die Seiten eines Pdf-Dokuments anzeigen kann. Einfacher geht es fast nicht mehr.

Ich habe für mein Projekt eine andere Alternative verwendet in Gestalt des enorm vielseitigen Tools ImageMagick (z.B. http://imagemagick.sourceforge.net/http/www/windows.html).

Dieses Tool basiert auf Ghostscript, das daher zuvor installiert werden muss, und liegt als Exe-Datei vor. Es wandelt die Seiten einer Pdf-Datei in Bitmaps in einem beliebigen Format um. Auch wenn es grundsätzlich kein Problem mehr, die Exe-Datei als externen Prozess zu starten, etwas eleganter geht es mit Hilfe von Magick.Net, eine Assembly, die ImageMagick kapselt: https://magick.codeplex.com. Die Assembly kann auch per NuGet hinzugefügt werden. Auch hier muss Ghostscript zuvor installiert werden.

Das Abspeichern der Seiten einer Pdf-Datei als Bitmaps wird damit sehr einfach:

Ob sich diese Lösung auch für „echte“ Projekte eignet, bei denen sehr große Pdf-Dokumente geladen werden sollen, kann ich aktuell nicht beurteilen. Auf der seinen Seite wirkte mein Beispielprogramm etwas langsam und brach einem Versuch eine Pdf-Datei mit 420 Seiten zu laden mit einer OutOfMemoryExcception ab (allerdings hatte ich den Dpi-Wert auch auf 300 eingestellt, so dass jede einzelne Bitmap über 1 MB groß war). Kleinere Dateien mit ca. 40 Seiten werden schnell geladen. Auf der anderen Seite dürften die Entwickler von SumatraPdf dafür sorgen, dass die muPdf-Bibliothek performant genug ist, um auch mit großen Pdf-Dateien klarzukommen (das Laden der 420-Seiten-Datei in Sumatra Pdf ist kein Problem, sie wird praktisch verzögerungsfrei geladen).

Das Hauptausschlußkriterium für die Verwendung von muPdf und Ghostscript in einem Kundenprojekt dürfte das Lizenzmodell sein. Artifex beschreibt es ausführlich unter der folgenden Adresse: http://artifex.com/licensing/. Da es auf AGPL basiert (GNU Affero General Public License), müssste der Sourcecode der eigenen Anwendung veröffentlicht werden, was in der Regel nicht in Frage kommt. In den Lizenzbedingungen wird aber auch darauf hingewiesen, dass unter bestimmten Bedingungen auch eine Exe-Datei ausgeliefert werden darf. Wichtig ist, dass der Anwender erkennt, dass er oder sie muPdf und Ghostscript separat installieren.

Da ich alles andere als ein Experte für Lizenzierungsdetails bin und bei meinem Beispielen ohnehin immer der Quellcode dabei ist, ist dieser Aspekt für mich kein Thema. Für die meisten Entwickler dürfte das Lizenzmodell aber zu restriktiv bzw. „undurchsichtig“ sein (man kann natürlich bei Artifex nachfragen), so dass es am Ende wieder auf eine kommerzielle Komponente hinausläuft. Schade, dass Microsoft dieses Thema komplett ignoriert hat. Ein Pdf-Viewer als Teil des .NET Framework wäre eine natürlich sehr praktisch. Doch aller Voraussicht nach wird es dazu nie kommen.

Meine ersten Gehversuche mit AutoFac – Teil 1

In diesem Beitrag beschreibe ich meine ersten Gehversuche mit AutoFac, einem vielversprechenden DI-Container (DI = Dependency Injection).

Ich hatte in den vergangangen Jahren den sehr einfachen SimpleIOC-Contailer von Laurent Bugnion verwendet, der Teil von MVVM Light ist. Doch da ich MVVM Light seit einigen Jahren nicht mehr verwende und stattdessen die aus meiner Erfahrung sehr gute MVVM-Assembly von DevExpress (deren Kern nicht nur kostenlos, sondern auch quelloffen ist), habe ich auch SimpleIOC aus den Augen verloren.

Die wichtigste Frage natürlich vorweg: Wozu braucht man einen DI-Container?

Diese Frage ist gar nicht so einfach zu beantworten und sie ähnhelt der Frage, die Anfang der 90er Jahre of gestellt wurde. Wozu brauche ich diese Vererbung?

Schon damals hatte ich keine guten Antworten parat, außer dem üblichen „Sie führt einfach zu besser strukturiertem Code“. Aha. Bei DI ist es ähnlich. Wer DI konsequent einsetzt, kommt tatsächlich zu deutlich besser strukturiertem Quellcode. Der Weg dahin ist allerdings lang und beschwerlich. Und das nicht, weil DI eine komplizierte Technik ist. Das ist nicht der Fall. Der Grund ist, dass man ein Prinzip verstanden haben, muss, dass sich grundlegend auf den Programmaufbau auswirken kann (aber nicht unbedigt muss). Man muss ein wenig daran glauben.

Zum Glück gibt es auch ein wenig DI, genauso wie es auch ein wenig OOP damals gab. Auch wenn viele Puristen davon nicht viel halten, ich kann diesen Ansatz vertreten,dd aman damit in das Thema hineinwachsen kann.

Warum AutoFac? Gegenfrage: Warum nicht? Es gibt über ein Dutzend DI-Container, AutoFac ist einer der Namen, die immer wieder genannt werden. Die Webseite macht einen guten Eindruck, das Projekt wird laufend weiterentwickelt was sehr wichtig ist, es gibt viele Beispiele (u.a. im Rahmen von WCF), viele Fragen mit Antworten auf StackOverflow usw. für einen DI-Container muss man sich entscheiden (mir sagt Unity vom Pattern&Practices Team bei Microsoft nicht ganz so zu, was aber eher eine Frage der persönlichen Präferenzen ist und die sind bekanntlich breit gestreut). Und da in einem Projekt, mit dem ich beruflich zu tun hatte, AutoFac verwendet wurde, war dies der Anlass mich selber etwas mit AutoFac zu beschäftigen.

Die sehr gut gemachte Projektwebseite ist http://autofac.readthedocs.io/en/latest/index.html

Schritt 1: AutoFac hinzufügen

Das geht dank Package Manager-Konsole sehr einfach:

Install-Package AutoFac

Schritt 2: Typen registrieren

Ausgangspunkt ist ein sehr kleines Konsolenprogramm, das ein Interface und ein paar Klassen verwendet:

>IDocumentService.cs
>DocumentFileService.cs
>DocumentViewModel.cs
>MainViewModel.cs

Das Ziel soll es sein, eine Instanz der MainViewModel-Klasse zu erhalten, deren Documents-Eigenschaft eine Reihe von DocumentViewModel-Instanzen liefert, die zuvor per DocumentFileService, die IDocumentService mit ihrer GetDocuments-Methode implementiert, aus einer Xml-Datei eingelesen wurden.

Der Beitrag ist aktuell nur provisorisch, ich werde ihn in den nächsten Tagen noch einmal überarbeiten. Grundsätzlich hat es aber funktioniert:)

Mein Besuch beim „Microsoft Cloud Summit 2017“

Vom 9. bis 10. Februar 2017 fand in Frankfurt am Main der Microsoft Cloud Summit 2017 statt. Anders als im letzten Jahr allerdings nicht in der schönen Frankfurter Messe mit ihrer großzügigen und weitläufigen Architektur, angeschmiegt an die Festhalle (in der ich in den letzten 35 Jahren zahlreiche Konzerte erlebt habe [1]), sondern in dem Kongresszentrum des Sheraton Airport-Hotels an Flughafen. Gut zu erreichen (vom ICE-Gleis bis zum Konferenzcenter sind es nur ein paar Minuten), aber leider mit einer etwas verwirrenden Topologie, viel zu engen Räumen mit nur einer einzigen (!) Tür und dem konsequenten Weglassen von Beschriftungen. Aber man kann sich ja durchfragen, um irgendwo hinzu gelangen. Frankfurt a.M. war auch nur ein Stopp von vielen auf einer ausgedehnten Welttournee. Der Eintritt war kostenlos.

Die Themen der Konferenz waren Office 365 in allen Variationen, verschiedene Azure-Angebote (u.a. Cloud Backup mit einem „Schutz“ vor Ransomware, die darin besteht, dass ein mutwillig gelöschtes Backup noch 14 Tage lang wiederhergestellt werden kann – bei Amazon Cloud Drive gibt es das natürlich auch) und Entwicklerthemen. Allerdings durchweg auf 100er-Niveau. Wer auf dem Technical Summit in Damrstadt im Dezember letzten Jahres war und/oder die Entwicklung bei den Microsoft-Themen ein wenig verfolgt hat, wird auf dieser Veranstaltung nicht allzu viel Neues erfahren haben. Die „Hallo, Cloud Summit“-Demo, die aus welchen Gründen auch immer, unbedingt in einem Docker-Container ausgeführt werden muss, gehört einfach dazu.

Interessant war der Vortrag zu .NET Core – anders als beim großen .NET Framework, das nicht mehr weiterentwickelt wird, gibt es hier eine Roadmap. Demnach ist die Version 2.0 für die zweite Hälfte 2017 geplant . Passend dazu gibt es die Standard Library. Eine Klassenbibliothek, die das Attribut portabel verdient, denn sie kann sowohl unter .NET Core als auch unter dem .NET Framework verwendet werden.

Das Beste an solchen Vorträgen sind immer die Fragen und die Antworten des Microsoft-Sprechers. Sie sind auch eine kleine Belohnung dafür, es bis zum Ende ausgehalten zu haben. Die erste von beiden Fragen hatte etwas mit dem Umstand zu tun, dass .NET Core für Linux bislang in erster Linie nur für Ubuntu angeboten wird, nicht aber für andere Linux-Distributionen – vor allem Debian. Die Antwort in Kurzform: Wir arbeiten dran, wir sprechen mit dem Maintainer und versuchen nett zu sein, wir sind zwar Microsoft, können aber niemand zwingen .NET Core in eine Distribution aufzunehmen. Irgendjemand im Saal, er unbedingt .NET Core unter Debian ausführen muss? Kann ich mir im Moment nicht vorstellen, aber ich lasse mich gerne eines Besseren belehren.

Nett sind immer jene Momente, in denen der Sprecher solche Fragen ans Publikum richtet und die Anzahl der Handzeichen < 3 ist. Aber wir Deutschen sind bekanntlich etwas zurückhaltender (vermutlich aus Datenschutzgründen;) und ich saß im Saal ganz vorne links und konnte daher den Saal nur eingeschränkt überblicken. Aber es dürften nur sehr wenige Entwickler geben, die sich für ein .NET Core unter Debian interessieren. Die zweite Frage war interessanter, vor allem die Antwort. Frage: Gibt es irgendwelche Pläne für ein GUI-Paket für .NET Core? Antwort: Eine sehr gute Frage, das hören wir öfter, aber nein, es gibt aktuell keine solchen Pläne. Das einzige Projekt von dem ich (der Sprecher) etwas weiß ist Electron (ein JavaScript-Framework für Desktop-Anwendungen). Mit anderen Worten: Dass es einmal so etwas wie WinForms oder WPF für .NET Core geben wird ist im Moment ähnlich unwahrscheinlich wie Warum? Ganz einfach weil es Microsoft nicht interessiert, sie darin keine Notwendigkeit, keinen strategischen Nutzen sehen. Docker für irgendwelche JavaScript-Anwendungen ja, richtige Anwendungen mit einer GUI leider nein. Liebe Desktop-Entwickler: Ihr wart einmal gern gesehene Kunden, aber das war noch das alte Microsoft. Sorry, aber seht es endlich ein. Desktop-Anwendungen interessieren uns nicht mehr, mobile Anwendungen und Web-Anwendungen interessieren vor allem solange sie Azure verwenden.

Die Zukuft der Anwendungsentwicklung unter Windows beschränkt sich für Microsoft zur Zeit offenbar auf die „Universal Windows Platform“ (UWP), bei der die Benutzeroberfläche in XAML definiert wird. Als Programmiersprache kommen neben C# auch VB, C++ und JavaScript in Frage. Richtige Anwendungen entstehen dabei nicht, sondern lediglich Apps mit begrenzten Möglichkeiten. Man kann solche Apps auch gleich für Android oder iOs schreiben und Microsoft sorgt dafür, dass sie auch unter Windows 10 läuft.

Mit Visual Studio, das in Gestalt der Community Edition inzwischen ja kostenlos ist, erhält man zwar sehr viele Optionen. Was die Entwicklung klassischer Desktop-Anwendungen angeht ist die Unterstützung durch Microsoft aber praktisch eingestellt worden.

Ein paar interessante Links:

>https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/
>https://github.com/dotnet/core/blob/master/roadmap.md

[1] falls es jemanden interessieren sollte oder jemand tatsächlich noch bis hier gelesen hat: Die Festhalle ist für mich nach wie vor die schönste Konzerthalle in Deutschland, auch wenn die Akustik nicht ganz so überragend ist und der letzte Konzertbesuch schon wieder ein paar Jahre zurückliegt. Ich habe hier u.a. Hall and Oates, die Stones (1982), Jethro Tull, Neil Young, Eric Clapton, einige Male Peter Gabriel und natürlich den Boss (leider nicht bei seiner ersten Deutschland-Tournee 1981) live erlebt. Alles Besondere Konzerte verbunden mit schönen Erinnerungen.

Mein Besuch auf dem Technical Summit 2016

Vom 12. bis 13. Dezember fand in Darmstadt der Microsoft Technical Summity 2016 statt. Wie im letzten Jahr wurde als Veranstaltungsort das Darmstadtium gewählt, das für die Durchführung einer solchen Konferenz beinahe perfekt geeignet ist, lediglich einige Räume könnten etwas größer sein. Anders als als im letzten Jahr fand der Summit zwei Wochen später im Jahr statt, so dass auch ein Besuch des Darmstädter-Weihnachtsmarktes möglich war. Da die meisten Teilnehmer natürlich weniger an Glühwein und heißen Maronen interessiert waren (wenngleich es beides auch am Abendbuffet gab), hatte sich der Veranstalter (wie immer die bewährte e-Team< GmbH aus Kiel) einiges für das „Brain“ einfallen lassen.

Der Sprecher für die Keynote am ersten der beiden Konferenztage, die bereits um 8 Uhr 30 begann, war kein geringerer als der Vice President der Cloud Division bei Microsoft Scott Guthrie. Er war schon oft zu Vorträgen in Deutschland, so dass er für die meisten Zuhörer ein vetrautges Gesicht gewesen sein dürfte. Natürlich stand er im vertrauten roten Poloshirt auf der Bühne, aber auch wenig unter dem Einfluss des Jetlag (als der Vortrag begann war es in Redmond bereits 1 Uhr Nachts). Das machte sich auch bei einer Demo zum Thema Azure Machine Learning bemerkbar. Die vorgeführte App war mit Hilfe einer WebCam in der Lage, das Alter von Personen zu schätzen, deren Gesicht von der Kamera erfasst wurde – er wurde offenbar ein paar Jahre älter geschätzt als er tatsächlich ist. Das Faszinierende an der App war aber weniger die Altersschätzung (das gibt es bereits seit ein paar Jahren unter https://how-old.net), oder der Umstand, dass das erfasste Bild anschließend für eine Internetsuche verwendet wurde. In Echtzeit, so dass sein wahrer Name fast verzögerungsfrei angezeigt wurde. Das Faszinierende (und für mich persönlich auch etwas Beängstigende) war, dass die Anwendung anhand der Gesichtsmikik die emotionale Verfassung aller (!) auf dem Bild erkannten Personen anhand ihrer Mimik einordnen konnte – in Echtzeit!

Damit liefert die kurze Demo unter dem Stichwort „Crowd Emotions“ einen Vorgeschmack davon, was in einigen Jahren an „neuralgischen Sicherheitspunkten“ zum Standard gehören könnte: Eine kontinuierliche Gesichtserkennung mit Personenprofilierung in Echtzeit und eine Einschätzung des „Gefahrenpotentials“ anhand der Mimik eines Gesichts. „Emotional Profiling“ als Ergänzung zum „Racial Profiling“. Im Rahmen des Vortrags wurde das natürlich nicht thematisiert bzw. die kleine Demo sollte lediglich andeuten was mit Azure Machine Learning bereits alles möglich ist.

Sehr lehrreich und gleichzeitig unterhaltsam war der Vortrag von Seth Suarez (der „Typ“ von Channel 9) am Ende des zweiten Konferenztages mit dem vielversprechenden Titel „Machine Learning for Developers“. Sein Vortrag wurde auf Channel 9 live übetragen und jeder Zuschauer konnte weltweit Fragen stellen. Seth, der nach eigener Aussage früher Lehrer war, gab in knapp 40 Minuten eine Einführung in das faszinierende Thema, an der das kleine 1×1 in Gestalt der grundlegenden Algorithmen an selbst entwickelten Beispielen erklärte – u.a. wie ein Algorithumus eine Gruppe von Werten auf einer Ebene in zwei Gruppen einteilt. Am Ende wurde es zwangsläufig etwas speziell, aber für den ersten Einstieg war sein Vortrag ideal geeignet.

Am zweiten Tag wurde die Keynote von Entwicklerlegende Erich Gamma gehalten, der einen Überblick über das VsCode-Projekt gab, das unter seiner Leitung in Zürich betrieben wird. Sein Vortrag war sehr gut trotz des etwas übertriebenen plakativen Titel „Microsoft loves Open Source“.

Dazu eine persönliche Anmerkung: Ich sehe die ganze Entwicklung „Microsoft goes Open Source“ nach wie vor mit gemischten Gefühlen und verstehe die Motivation nicht ganz. Auf der einen Seite ist Open Source natürlich positiv. Wir allen profitieren davon, wenn die Komponenten eines Technologie-Stacks quelloffen zur Verfügung stehen und der Quellcode von wichtigen Tools verfügbar ist.

Auf der anderen Seite haben die meisten Entwickler, die im Microsoft-Umfeld arbeiten, überhaupt nichts davon. Am Ende des Tages müssen wir Anwendungen entwickeln, möchten dafür angemessen entlohnt werden und benötigen dafür Tools wie Visual Studio und eine API, die nahe am Betriebssystem ist. Und das ist nun einmal Windows und wird es auch auf absehbare Zeit bleiben. Ob die Tools Open Source sind (was weder Visual Studio noch Windows vermutlich jemmals sein werden) spielt dafür keine allzu große Rolle.

In den von Microsoft orcherstrierten Jubelchor „Wir finden Open Source ganz toll“ kann ich daher nur bedingt einstimmen. Ein Visual Studio Code als Alround-Editor ist nett, aber ich werde es für meine Projekte, von PowerShell-Skripten einmal abgesehen, nicht verwenden. Es ist mir daher auch relativ egal, ob es unter Mac OSX oder anderen Plattformen läuft. Das gleiche gilt für Cross Plattform, was für 90% aller Desktop-Anwendungen, die für Windows in den letzten 20 Jahren entwickelt wurden, absolut keinen Mehrwert bietet und daher auch die Entwickler nicht interessiert.

Man nimmt es auf Konferenzen wie dem Technical Summit zur Kenntnis, aber mehr nicht. Ich denke, ich spreche für die Mehrheit der Entwickler im Microsoft-Umfeld, dass es um einiges wichtiger wäre Microsoft würde WPF weiterentwickeln oder einen Migrationspfad zu den neueren Techniken schaffen, als bei jeder Gelegenheit ausführlichst Werbung für Themen zu machen (Open Source, läuft auch auf einem Mac, irgendeine JavaScript-Erweiterung, Container sind die Zukunft usw.), die nur einen Bruchteil der Entwickler interessieren.

Natürlich haben alle diese „Pseudothemen“ einen Hintergrund – Werbung für die Azure-Plattformen zu machen, in die Microsoft in den letzten Jahren viele Milliarden U$S investiert hat, und die in Zukunft ein Vielfaches an Gewinn abwerfen soll bzw. muss. Schade nur, dass die Haupt-Klientel von Microsoft, die seit Jahrzehnten bereits mit Visual Studio, unter Windows und für Windows entwickeln, dafür nahezu komplett ignoriert wird. WPF war auf dem Technical Summit natürlich kein Thema. Und da wir gerade dabei sind: Es nervt mich inzwischen auch regelrecht, wenn bei einem Microsoft-Vortrag auf einer Entwickler-Konferenz (!) mit großem Brimborium auf der Bühne ein JavaScript-Programm (basierend auf Node) auf dem Niveau eines „Hello, World“-Progrämchens zum Laufen gebracht wird und als Beweis für die neue Coolness und Offenheit herhalten soll – ich weiß nicht, ob es nur mir so geht. Viele sind nicht so kritisch gemessen an dem Applaus, den solche Vorführungen am Ende erhalten.

Auf dem Technical Summit 2015 wurde von Microsoft die German Cloud angekündigt mit Rechenzentren in Frankfurt a.M. und Magdeburg, bei der T-Systems die Rolle des Datentreuhänders spielt. Wenn also die NSA sagt, wir wollen Daten, sagt jemand bei T-System „sorry, geht nicht“. Inzwischen ist sie im Betrieb und kann genutzt werden. Dass es zwischen der allgemeinen Microsoft-Cloud und der „German Cloud“ oder auch der „China Cloud“ tatsächlich keinen Durchgang gibt macht der Umstand deutlich, dass man seine Zugänge neu anlegen muss und in der allgemeinen Cloud angelegte Ressourcen nicht in die German Cloud verschoben werden könnte.

Natürlich gab es auf dem Technical Summit, der sich ja nicht nur an Entwickler, sondern allgemein an die „IT-Pros“ richtet, viele gute und auch ein paar sehr gute Vorträge (empfehlenswert ist z. B. der Deep Dive zum Thema „Events Tracing for Windows“ von Alois Kraus und Wolfgang Kroender am ersten Tag). Im Grunde gab es keinen einzigen schlechten Vortrag, sondern höchstens Vorträge, die mich weniger interessiert hatten. Außerdem wird die Mehrheit der Teilnehmer Jahr für Jahr jünger, so dass zielgruppengerechte Vorträge wie HoloLens und Apps einfach dazu gehören muss.

Positiv ist die bunte Themenvielfalt, durch die alle Teilnehmer in zwei Tagen auf den aktuellen Stand gebracht werden was Microsoft-Themen angeht. Und das an einem angenehmen Ort, der leicht erreichbar ist, am Ende des Jahres, was will man mehr?

Einen Überblick über die Vorträge des Technical Summit 2016 gibt es unter https://www.microsoft.com/germany/technical-summit/nachlese-2016.aspx. Dort gibt es auch Links auf die Videos zu den Vorträgen, sofern sie zur Verfügung stehen.

Ein paar persönliche Fotos von mir gibt es hier.

Wissen ohne Ende – ein Angebot, dass ich nicht ablehnen konnte

Fortbildung steht hoch im Kurs, das weiß ich sowohl als Trainer für .NET und PowerShell, aber auch als jemand, der selber permanent Wissen aufnimmt und versucht sich neue Techniken beizubringen (aktuell z.B. Authentifizierung von Web-Anwendungen im Zusammenhang mit Azure AD). Natürlich findet man sehr viel Know-how im Web, vor allem als Videos, ber ob man sich stundenlang durch Blog-Einträge, Tutorials, die oft nicht mehr auf dem aktuellen Stand sind, und mehr oder weniger gut gemacht und verständliche Videos zu klicken, oder man einem jemand ein Themengebiet systematisch erklärt, ist ein großer Unterschied.

Es gibt schon seit Jahren teilweise kostenlose, teilweise kostenpflichtige Weiterbildungsportale. Eines davon ist die Microsoft Virtual Academy, ein anderes die Plattform Udemy (https://www.udemy.com/), ein Drittes das im deutschprachigen Raum beliebte Video2Brain, das, über mehrere Stationen, inzwischen an Microsoft angedockt wurde.

Und da gibt es noch den großen Know-how-Verlag O’Reilly, der schon seit vielen, vielen Jahren für Bücher und Videos mit einem hohen Qualitätsanspruch steht, der so gut wie immer auch eingehalten wird. Vorbildlich.

Von O’Reilly, jetzt komme ich zum Thema dieses Blog-Eintrags, erhielt ich vor kurzem ein Angebot, das ich nicht ablehnen konnte – für 199 US$ (172€) pro Jahr erhält man einen unbegrenzten Zugang zum Safari-Portal, auf dem laut Verlag über 40.000 Bücher und Videos zu allen denkbaren IT-Themen zur Auswahl stehen. Regulär kostet das Abo 399 U$S pro Jahr. Das Abo ist jederzeit kündbar, der Preis, so verspricht es der Verlag, bleibt für immer konstant. Normalerweise bin ich bei solchen Angeboten skeptisch, da ich erfahrungsgemäß aus den unterschiedlichen Gründen nur einen Bruchteil des Angebots nutze, so dass der Erwerb der einzelnen Bücher in jedem Fall um einiges günstiger wäre (der Klassiker sind die Visitenkarten, die einem mit dem Argument verkauft werden, dass 300 Stück statt 50 Stück doch deutlich günstiger sind – bezogen auf den Stückpreis – das Ergebnis ist, das noch ca. 280 Stück in dem kleinen Pappkarton liegen, in dem sie geliefert wurden). Bei dem Angebot habe ich das Gefühl, dass es sich lohnen – alleine die freie Auswahl bei den Trainingsvideos zu haben ist für jemanden, der selber Schulungen durchgeführt, das Geld wert.

PS: Das Angebot gilt noch bis zum 4. August 2016 – wer diesen Blogpost zufällig heute (4.8) lesen sollte, kann sich das Angebot noch einmal durch den Kopf gehen lassen. Weitere Infos gibt es unter https://www.safaribooksonline.com

Enorme Projektvielfalt bei Visual Studio 2015

Microsoft wird gerne für dies und jenes kritisiert. Windows 10 ist schlecht weil es sich bei jeder sich bietenden Gelegenheit persönliche Daten abgreift, Apps und andere Funktionalitäten sind nur nach Anmeldung mit einem Microsoft-Konto, ein weiterer potentieller Datensammler, nutzbar, das Startmenü sieht immer noch wirklich nicht gut aus und, da wir gerade dabei sind, Silverlight wurde eingestellt (was ich auch bedauere), wer redet noch von Lightswitch, das ebenfalls sang und klanglos beerdigt wurde, die Entwicklung von Desktop-Anwendungen wurde, wenn man nicht C++ verwendet (das dafür, ganz nebenbei, immer schon die beste Wahl war seit dem es Windows gibt), auf ein Abstellgleis geschoben, auch WPF scheint eines langsamen Todes zu sterben usw. usw.

Es gibt aber auch Bereiche, bei denen man als Entwickler richtig zufrieden, vielleicht sogar regelrecht glücklich sein muss. Dazu gehört sicherlich die Entwicklung im Bereich JavaScript, TypeScript, Angular und Node, mit der ich aber persönlich relativ wenig am Hut habe. Dazu gehört auf alle Fälle die Entwicklung von Visual Studio, das mit VS 2012 aus meiner Sicht mit jeder Version einfach nur besser wird. Vor allem die Umstellung auf Roslyn, offiziell die .NET Compiler Platform, scheint unserer Lieblings-IDE richtig gut getan zu haben – das absolut empfehlenswerte Add-On Supercharger stelle ich in einem weiteren Blog-Eintrag vor.

Als ich vor einiger Zeit endlich Visual Studio 2015 installiert habe, war ich nach dem es endlich vollständig installiert war, überaus beeindruckt von der Projektvielfalt, die Entwicklern heutzutage zur Auswahl steht. Dank Xamarin lassen sich Android und iOS-Apps in Visual Studio und in C# programmieren (die VB-Unterstützung wird mit Sicherheit nicht lange auf sich warten lassen;). Wer hätte sich das noch vor ein paar Jahren vorstellen können. Ein großes Kompliment an die Verantwortlichen bei Microsoft. Hier hatte jemand eine klare Vision für ein universelles Entwicklungswerkzeug, die über die letzten Jahre konsequent umgesetzt wurde.

Erfreuliche Projektvielfalt bei Visual Studio 2015 (zumindest für C#-Entwickler)

Erfreuliche Projektvielfalt bei Visual Studio 2015 (zumindest für C#-Entwickler)

25 Jahre Visual Basic und ein Blick in die Zukunft

Vor 25 Jahren, am 21. Mai 1991, wurde, damals noch von Bill Gates höchstpersönlich, Visual Basic 1.0 vorgestellt (unter dem Codenamen Thunder war es schon seit über einem Jahr für „Beta-Tester“ erhältlich – ich erinnere mich noch gut an meine erste Vorführung durch den damaligen Produktmanager in den Räumen der Microsoft GmbH in Unterschleißheim).

Die damalige Ankündigung von Bill Gates gibt es bei YouTube: https://www.youtube.com/watch?v=bMz2Mgs7UU0&feature=related

In dem Video geht es in erster Linie um Neuerungen von Windows 3.1 – am Anfang stellt Bill Gates „Object Linking and Embedding“ vor – im Rückblick eine der zahlreichen Techniken, die man heute als „epic fail“ bezeichnen würde. Visual Basic gehört zum Glück nicht dazu. Die Faszination von Visual Basic und die Aubruchstimmung, die es bei vielen Entwickler und solchen, die es gerne werden wollten, erzeugt hat, wird durch das kleine Programm, das Bill vorführt (er gibt offen zu, dass er die Befehle nicht selber eintippt, sondern lediglich ein Makro verwendet;), sehr schön deutlich. Kurios ist auch wie Bill Gates am Ende noch einmal das Thema Handschrifterkennung anpreist – ein Thema, das mit dem aktuellen Windows 10 Update („Windows ink“) wieder einmal aufgegriffen wurde.

Seit der Ankündigung der Version 1.0 damals im Mai 1991 ist viel passiert – Visual Basic hat die Welt der Windows-Programmierung so stark verändert wie keine andere Programmiersprache, auch wenn die großen Windows-Anwendungen damals wie heute in C++ programmiert werden. Genauso hat Visual Basic die Entwickler weltweit polarisiert – die einigen lieben die Sprachen und wollen sie gegen keine andere Sprache tauschen, die anderen lassen keine Gelegenheit aus sich nicht gerade positiv über „Vaubeh“ zu äußern. Die größten „Kritiker“ sind oft jene Entwickler, die die Sprache nur vom Hörensagen kennen. Dieses Element dürfte auch bei der aktuellen StackOverflow Survey eine Rolle gespielt haben, bei der VB mit großer Mehrheit zur unbeliebtesten Programmiersprache gekürt wurde (http://stackoverflow.com/research/developer-survey-2016).

Den „Todestoß“ hat dem ursprünglichen Visual Basic aber nicht die Abneigung anderer Entwickler versetzt, sondern leider Microsoft selber, in dem im Jahr 2000 ohne Not die Weiterenntwicklung von Visual Basic mit der Version 6.0 beendet wurde. Auch wenn der Nachfolger VB.NET intern die Versionsnummer 7.0 trug, war das nicht mehr das Visual Basic, das einst soviele Menschen begeistert hatte. Mit VB.NET war nichts mehr so wie es einmal war, sieht man von dem halbherzigen Versuch ab die Sprachsyntax zu erhalten. Im Laufe der Versionen, vor allem mit Visual Studio 2005, wurde es zwar dank My-Objekt, Edit and Continue und einer gut durchdachten Datenbindung bei Windows Forms etwas besser, die ursprüngliche Leichtigkeit bei der Programmierung kehrte nicht mehr zurück.

Eine sehr schöne Zusammenfassung der unterschiedlichen Ansichten zu Visual Basic als Programmiersprache und „Lebensgefühl“ fassen die Kommentare zu einem Blog-Eintrag im Microsoft Dotnet-Blog zusammen:

https://blogs.msdn.microsoft.com/dotnet/2016/05/20/happy-25th-birthday-vb/

Eine „Liebesklärung“ an VB an mir besonders gut gefallen:

Happy birthday VB,
You’re the best at productivity.
We’ll use you forever,
And love you unconditionall

Ich denke, dass es vor allem die Loyalität vieler solcher Entwickler war, die den zahlreichen Versuchen Visual Basic auf ein Abstellgleis zu schieben getrotzt hat. Ungeachtet aller „Kritik“, Visual Basic lebt, die Sprache wird nach wie vor eingesetzt und vor allem aktiv weiterentwickelt.

Einen kurzen Ausblick auf die Neuerungen der nächsten Visual Basic-Version, die Teil von VS 2015 ist, gibt ein relativ kurzes Video auf Channel 9, das während der letzten Ignite-Konferenz entstanden ist:

https://channel9.msdn.com/Events/Ignite/2015/C9-26?ocid=player

Die wichtigste Neuerung ist natürlich, dass win Refactoring endlich auch bei Visual Basic zur Verfügung steht. Der kurze Überblick endet mit einem vielversprechenden Satz „VB in Visual Studio 2015 is super cool“. Na, also,.

Ein exklusiver Blick in mein Buchregal und dem Originalhandbuch zu Visual Basic 1.0

Ein exklusiver Blick in mein Buchregal und dem Originalhandbuch zu Visual Basic 1.0

Damals eine absolute Rarität (heute auch noch) - eine VB 3.0-CD (leider nur auf Englisch)

Damals eine absolute Rarität (heute auch noch) – eine VB 3.0-CD (leider nur auf Englisch)

Die Zukunft von C# – und ein Seitenhieb auf Visual Basic

Ein Highlight einer jeden PDC und inzwischen der Build-Konferenz war die „Future of C#“-Session, in der es, der Titel legt es nahe, um die Zukunft von C# ging. Früher noch von dem Erfinder der Sprache, Anders Hejlsberg, durchgeführt, inzwischen beschäftigt sich Anders lieber mit TypeScript, so dass Mads Togersen diese Rolle übernommen hat. Auf der letzten Build 2016 gab es natürlich wieder einen „Future of C#“-Talk, in dem es bereits um das kommende C# 7.0 ging:

https://channel9.msdn.com/events/build/2016/b889

Bemewerkenswert, wenn auch nicht unbedingt im positiven Sinne, fand ich eine humorvoll gemeinte Einlage der beiden Sprecher, in der sie die jährlich auf Stackoverlow durchgeführte „Developer Survey“ zitierten, in der u.a. nach den beliebsten, aber auch nach den „most dreadful languages“ gefragt wurde. Zur Belustigung aller Anwesenden war ausgerechnet Visual Basic mit knapp 80% klarer Spitzenreiter in der zweiten Kategorie. Die sehr interessante Umfrage gibt es hier:

http://stackoverflow.com/research/developer-survey-2016

Tja, der typische Visual Basic-Entwickler nutzt halt kein StackOverflow, sondern kommt selber auf eine Lösung;)

Interessant fand ich auch, dass erst ab der Gruppe der 50 jährigen StarTrek beliebter als StarWars ist. Damit kann ich wiederum zu 100% identifizieren.