Archiv für den Monat: Oktober 2017

Mit Visual Basic und .NET Core 2.0 zu neuen Ufern aufbrechen – leider nur begrenzt

Mit .NET Core, der Open Source-Implementierung des .NET Framework, ist ab der aktuellen Version 2.0 auch Visual Basic dabei. Damit laufen VB-Programme unter allen Plattformen, auf denen .NET Core 2.0 installiert werden kann. Neben den wichtigsten Linux-Distributionen ist dies Mac OS. Auch ein Raspian Pi-Kleincomputer mit Raspian Linux als Betriebssystem gehört inzwischen dazu: https://blogs.msdn.microsoft.com/david/2017/07/20/setting_up_raspian_and_dotnet_core_2_0_on_a_raspberry_pi/.

Leider wird die theoretisch grenzenlose Freiheit für VB durch die Entwickler bei Microsoft künstlich eingeschränkt, denn es stehen nur Vorlangen für Konsolenprogramme und Klassenbibliotheken zur Verfügung. Die strategische Überlegung dahinter ist, dass damit das Auslagern von VB-Code aus einer WinForms- oder WPF-Anwendung in eine .NET-Standard-Klassenbibliothek ermöglicht wird. Die Klassenbibliotheken können dann z.B. in eine Universal Windows Platform-Appp eingebaut werden, so dass die die „Geschäftslogik“ einer VB-Anwendung ohne sie in C# neu schreiben zu müssen übernommen werden kann.

Theoretisch lassen sich auch ASP.NET-Core-Anwendungen in VB programmieren, doch ohne Vorlagen und „Tooling“ in Visual Studio 2017 wird das Ganze unnötig mühsam.

Schade, ich finde ein Open Source-Projekt wie .NET Core sollte nicht zu stark durch strategische Überlegungen eines Herstellers eingeschränkt werden (auch wenn dieser das Projekt komplett finanziert). Allerdings gibt es offenbar auch sehr wenige Aktivitäten in der VB-Community. Anders als bei F#.

Dennoch gibt es auch für VB-Entwickler einen direkten Draht zu Microsoft in Gestalt des UserVoice-Forums zu Visual Studio:

https://visualstudio.uservoice.com/forums/121579-visual-studio-ide

Hier wird u.a. bereits gefordert, VB.NET in V# umzubenennen oder den Quellcode von VB6 Open Source zu machen. Jeder kann Vorschläge einreichen und über vorhandene Vorschläge abstimmen.

Mein Besuch auf der Basta! 2017 Viele, viele Schlagworte, enorme Themenvielfalt

Vom 25.9 bis zum 29.9.2017 fand die alljährliche Basta!-Konferenz wie üblich im schönen Mainz statt. Nach ein paar Jahren „Abstinenz“ war ich wieder einmal dabei und mit einem Vortrag mit dem Thema „Moderne VB-Programmierung“ vertreten. Es ist klar, dass Visual Basic nicht mehr das ganz große Thema ist (um es nett zu umschreiben), aber da die Basta! einst als „BASIC-Tage“ begann und dieses Jahr bereits das 20-jährige Jubiläum gefeiert wurde, für die Branche eine Ewigkeit, durfte auch ein Vortrag zu Visual Basic nicht fehlen. Fand ich und der Veranstalter sah es zum Glück auch so, so dass ich am Dienstag um 14 Uhr 30 im Watford A Saal auch tatsächlich einige VB-Entwickler begrüßen konnte.

Insgesamt fiel mir auf, dass die Basta! längst keine reine .NET-Konferenz mehr ist. Es wird ein vielseitiger Themenmix angeboten, der auch reine Webthemen umfasst, die nichts mit .NET zu tunhaben. Viele Schlagworte gab es vor 5 Jahren schlicht nicht, einige sagen mir auch heute noch nichts. Von Ionic hatte ich zum ersten Mal gehört als ich den jungen Mann, der auf der Fahrt zur „VIP-Reception“ am Montagabend im Bus neben mir saß fragte, welche Themen er denn vortragen würde.

Hier ist eine „kleine“ Kostprobe aus dem reichhaltigen Repertoire an Schlagworten und Abkürzungen aus der Konferenzagenda: Microservices, TypeScript, Angular, Angular Router, Docker, Universal Windows Apps, Flexbox CSS, Ionic, Iot-Services, npm, Yarn5, Hadoop, DevOps, Hololens, Hateoas, CQRS, Xamarin, Webpack, RxJS, Alexa, Git, Seneca, Electron, Kubernetes, Cognitives Services, Jekyll, Bitcoin usw. usw.

Keine Frage, die IT-Branche ist in den letzten Jahren enorm gewachsen (und für alle diese Themen werden offenbar Spezialisten gesucht was ja grundsätzlich positiv ist). Eine Konferenz wie die Basta! bildet alle diese Themen ab. Schön, dass es noch Vorträge mit für mich auf Anhieb verständlichen Titeln wie „Neues bei C# 7.0“ gab. Stark vertreten sind nach wie vor Vorträge zum Thema Projektmagenment. Ein sehr guter Vortrag, den ich eher zufällig besucht hatte, war „Auf zum Mond! Agilität und DevOps vor fünfzig Jahren – und heute?“ von Thomas Buch, in dem dieser die Lehren, die in Bezug aus dem großen Projekten der Weltraumbehörde NASA in den 70er Jahren gezogen werden können, auf Software-Entwicklungteams übertrag.

Dienstag-Abend wurde die Rheingold-Halle zum Oktoberfest-Festzelt umkonfiguriert – es gab natürlich Bier (allerdings nicht aus Bayern, der Gerstensaft stammte vielmehr aus dem ca. 160 Km entfernten Bitburg), die obligatorischen Haxen, jede Menge Brezeln und andere Zutaten, die in jedes Festzelt passen. Der Höhepunkt des Abends war die Verlosung eines nagelneuen Strandkorbs. Auch das hat Basta!-Tradition, Teilnehmer der Anfangsjahre werden sich erinnern. Die Finalisten auf der Bühne mussten anhand von vorgespielten Modemtonfolgen erkennen, ob es sich um ein 14.4, 33.6 oder 56 K-Modem handelt. Die Älteren werden sich erinnern. Eigentlich eine schwer bis unlösbare Aufgabe, da sich für mich alle Tonfolgen gleich anhörten (dabei war ich bereits 1981 stolzer Besitzer eines 300 Baud-Modems) dennoch gab es einen Gewinner: Ein Entwickler aus Aurich und damit aus einer Gegend, in der Strandkörbe aufgrund der Nähe zu verschiedenen Nordseestränden ein vertrauter Anblick sind, war der glückliche Gewinner. Nach eigener Aussage hatte er sich schon immer ein solches Möbelstück für den Garten gewünscht – von daher hätte es nicht besser passen können.

Das Programm der Basta! 2017 in Mainz findet ihr hier: https://basta.net/programm/

Die nächste Basta! findet vom 19. bis 23.2.2018 in Frankfurt statt (übrigens zeitgleich zum Microsoft Technical Summit, der am 21. und 22.2.2018 ebenfalls in Frankfurt stattfinden wird).

Abschließend noch ein paar von mir geschossene Schnappschüsse von der Basta! 2017.

Moderne VB-Programmierung – Teil 2 (Tuples)

In diesem Teil meiner kleinen Einführungsserie zum Thema „Moderne VB-Programmierung“ geht es um die mit der Version 15.0 (VB 2017) eingeführten Tuples.

Tuples werden im neuen Microsoft-Dokumentationsportal docs.microsoft.com hier ausführlich vorgestellt:

https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/tuples

Eigentlich könnte ich mir weitere Erläuterungen sparen, da der Hilfetext alles sehr schön beschreibt. Die folgende Erklärungen sind daher eher für jene Entwickler, die aus Prinzip keine Dokumentation lesen;)

Es gibt Doubles, Triples und Quadruples und es gibt Tuples, die eine beliebige Anzahl an Elementen in einer Menge zusammenfassen. In der Programmierung ist ein Tuple eine bequeme Alternative zu einer Liste, die das Zusammenfassen mehrerer Werte sehr einfach macht.

Die Ausgangssituation für das folgende Beispiel ist eine Liste mit Documents-Objekten:

Bislang alles ganz einfach und überschaubar. Jetzt wird eine Function gesucht, die ein Document-Objekt anhand seiner Id zurückgibt:

Auch das ist alles nichts Neues. Übersehen wir außerdem für einen Moment, dass es kein guter Stil ist, aus einer Function auf eine Variable zuzugreifen, die auf Modul- bzw. Klassenebene definiert ist (und natürlich, dass die Function selber komplett überflüssig ist, da es dafür LINQ gibt).

Jetzt kommt der Entwickler auf die Idee, neben dem Document-Objekt einen Boolean-Wert mitzuliefern, der True ist, wenn ein Document-Objekt gefunden wurde, ansonsten False. Früher hätte der Entwickler dazu per Structure-Befehl einen neuen Typ anlegen und diesen zurückgegeben müssen. Etwa so:

Keine Frage, nicht besonders elegant. Dank den neuen Tuples sparen wir uns die Structure:

Ein Tuple wird nicht deklariert, sondern einfach als Klammerausdruck hingeschrieben. Die einzelnen Elemente werden über die Standardnamen Item1, Item2 usw. angesprochen. Da das natürlich nicht ganz optimal ist, gibt es die Möglichkeit, jedem Tuple-Element einen Namen zu geben. Dieser wird bei einer Function beim Rückgabewert angegeben – beim zurückgegebenen Wert ändert sich nichts.

Fazit: Tuples sind eine praktische Erweiterung, die sich in vielen Situationen einsetzen lässt. Sie sind immer dann praktisch, wenn mehrere Werte zusammengefasst und als „namensloses“ Ganzes weitergegeben werden sollen.

Moderne VB-Programmierung – Teil 1 (Überblick)

Mit diesem Blog-Eintrag starte ich eine kleine Serie von Artikeln, in denen ich die Neuerungen vorstelle, die bei der Programmiersprache Visual Basic mit den letzten beiden Versionen 14.0 (VS 2015) und 15.0 (VS 2017) eingeführt wurden. Den Anfang machen die Tuples.

Alle Beispiele könnt ihr mit Visual Studio oder Visual Code sowohl unter Windows als auch Linux, Mac OS usw. umsetzen. Die Umsetzung unter einem anderen Betriebssystem außer Windows geht nur mit Visual Studio Code, da Visual Studio nach wie vor nur Windows läuft. Daran wird sich auch trotz aller Open Source-Euphorie bei Microsoft nichts ändern.

Eine gute Übersicht über alle Neuerungen der Versionen 14.0 und 15.0 geben drei Artikel von Anthony D. Green und Lucian Wischik (beide VB-Team bei Microsoft) und Klaus Löffelmann (MVP zu VB):

New Language Features in Visual Basic 14

https://msdn.microsoft.com/en-us/magazine/dn890368.aspx

What’s New in Visual Basic 2017

Auch die neue Microsoft-Dokumentation docs.microsoft.com stellt die wichtigsten Neuerungen der einzelnen VB.NET-Versionen übersichtlich zusammen:

Da viele Übersichten für meinen Geschmack etwas zu ausführlich sind, habe ich im Folgenden die wichtigsten Neuerungen der Versionen 14.0 und 15.0 in einer kompakten Übersicht zusammengestellt. Im Moment erhebt die Übersicht noch keinen Anspruch auf Vollständigkeit. Auch stimmt die Zuordnung zu den einzelnen Versionen noch nicht.

NeuerungVersionWas steckt dahinter?
Tuples15.0Zusammen mehrerer Werte, z.B. als Rückgabewert einer Function
String-Interpolation14.0Einsetzen eines Ausdrucks in eine Zeichenkette ohne String.Format()
Null-Abfrageoperator .?14.0Ein Operator übernimmt die Abfrage einer Variablen auf Nothing (Null) zur Vermeidung einer NullReferenceException-
Mehrzeilige LINQ-Abfragen mit Kommentaren14.0In einer mehrzeiligen LINQ-Abfrage kann jeder Zeile mit einem Kommentar ausgestattet werden
Datums-Literale15.0Ein Datums-Zeit-Wert kann direkt durch Voranstellen von # angegeben werden.
NameOf-Operator14.0Über NameOf lässt sich der Name eines Bezeichners als String einsetzen.
Binärzahlen angeben14.0Neben Oktal- und Hex-Zahlen können damit auch Binärzahlen direkt im Quellcode angegeben werden.