Subscribe: DotNetGerman Bloggers
http://blogs.dotnetgerman.com/mainfeed.aspx
Added By: Feedage Forager Feedage Grade B rated
Language: German
Tags:
angular  auf  code  core  das  die  ein  eine  für  ich  ist  mit  net core  net  powershell  und  von  werden 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: DotNetGerman Bloggers

DotNetGerman Bloggers



Alle Blogs von DotNetGerman.com



Updated: 2018-01-19T04:41:49Z

 



Fehler: Xamarin.Forms legt in Visual Studio 2017 Update 5 leere Projektmappe an

2018-01-19T04:41:49Z

Kürzlich stieß ich auf einen sehr unschönen Fehler in Visual Studio 2017 Update 5. Beim Testen der neuen Xamarin.Forms Projektvorlage, die nun auch .NET Standard für das Teilen des Codes unterstützt, erhielt ich als Ergebnis in Visual Studio eine leere Projektmappe. Sowohl das geteilte Projekt, als auch die plattformspezifischen Projekte fehlten. Ein Blick in den Dateiexplorer zeigte, dass es sich nicht um einen Anzeigefehler in Visual Studio handelte, sondern dass tatsächlich auch im Dateisystem keine Dateien angelegt wurden.(image)



Book Review: ASP.​NET Core 2 and Angular 5

2018-01-15T00:00:00Z

Last fall, I did my first technical review of a book written by Valerio De Sanctis, called ASP.NET Core 2 and Angular 5. This book is about to use Visual Studio 2017 to create a Single Page Application using ASP.NET Core and Angular. About this book The full title is "ASP.NET Core 2 and Angular 5: Full-Stack Web Development with .NET Core and Angular" and was published by PacktPub and also available on Amazon. It is available as a printed version and via various e-book formats. This book doesn't cover both technologies in deep, but gives you a good introduction on how both technologies are working together. It leads you step by step from the initial setup to the finished application. Don't expect a book for expert developers. But this book is great for ASP.NET Developers who want to start with ASP.NET Core and Angular. This book is a step by step tutorial to create all parts of an Application that manages tests, its questions, answers and results. It describes the database as well as the Web APIs, the Angular parts and the HTML, the authentication and finally the deployment to a web server. Valerio uses the Angular based SPA project , which is available in Visual Studio 2017 and the .NET Core 2.0 SDK. This project template is not the best solution for bigger projects, but but it fits good for small size projects as described in this book. About the technical review It was my first technical review of an entire book. It was kinda fun to do this. I'm pretty sure it was a pretty hard job for Valerio, because the technologies changed while he was working on the chapters. ASP.NET Core 2.0 was released after he finished four or five chapter and he needed to rewrite those chapters. He changed the whole Angular integration into the ASP.NET Project, because of the new Angular SPA project template. Also Angular 5 came out during writing. Fortunately there wasn't so much relevant changes between, version 4 and version 5. In know this issues, about writing good contents, while technology changes. I did a article series for a developer magazine about ASP.NET Core and Angular 2 and both ASP.NET Core and Angular changes many times. And changes again right after I finished the articles. I rewrote that stuff a lot and worked almost six months on only three articles. Even my Angular posts in this blog are pretty much outdated and don't work anymore with the latest versions. Kudos to Valerio, he really did a great job. I got one chapter by another to review. My job wasn't just to read the chapters, but also to find logical errors, mistakes that will possibly confuse the readers and also to find not working code parts. I followed the chapters as written by Valerio to build this sample application. I followed all instructions and samples to find errors. I reported a lot of errors, I think. And I'm sure that all of them where removed. After I finished the review of the last chapter, I also finished the coding and got a running application deployed on a webserver. Readers reviews on Amazon and PacktPub I just had a look into the readers reviews on Amazon and PacktPub. There are not so much reviews done currently, but unfortunately there are (currently) 4 out of 9 reviews talking about errors in the code samples. Mostly about errors in the client side Angular code. This is a lot IMHO. This turns me sadly. And I really apologize that. I was pretty sure I found almost all mistakes, maybe at least those errors that prevents a running application. Because I got it running at the end. Additionally I wasn't the only technical review. There was Ramchandra Vellanki who also did a great job, for sure. What happened that some readers found errors? Two reasons I thought about first: The readers didn't follow the instructions really carefully. Especially experienced developers really know how it works or how it should work in their perspective. They don't read exactly, because they seem to know where the way goes. I did so as well during the first three or four chapters and I needed to start again from the beginning.[...]



Microservice Clients with Web Components using Angular Elements: Dreams of the (near) future?

2018-01-19T04:41:49Z

p a { text-decoration: underline } table { border-collapse: collapse; } table > thead > tr > th { text-align: left; border-bottom: 1px solid; } table > thead > tr > th, table > thead > tr > td, table > tbody > tr > th, table > tbody > tr > td { padding: 5px 10px; } table > tbody > tr + tr > td { border-top: 1px solid; } blockquote { margin: 0 7px 0 5px; padding: 0 16px 0 10px; border-left: 5px solid; } In one of my last blog posts I've compared several approaches for using Single Page Applications, esp. Angular-based ones, in a microservice-based environment. Some people are calling such SPAs micro frontends; other call them micro aps. As you can read in the mentioned post, there is not the one and only perfect approach but several feasible concepts with different advantages and disadvantages. In this post I'm looking at one of those approaches in more detail: Using Web Components. For this, I'm leveraging the new Angular Elements library (@angular/elements) the Core Team is currently working on. Please note that it's still an Angular Labs Project which means that it's experimental and that there can be breaking changes anytime. Angular Elements To get started with @angular/elements you should have a look at Vincent Ogloblinsky's blog post. It really explains the ideas behind it very well. If you prefer a video, have a look to Rob Wormald's presentation from Angular Connect 2017. Also, my buddy Pascal Precht gave a great talk about this topic at ng-be 2017. As those resources are really awesome, I won't repeat the information they provide here. Instead, I'm showing how to leverage this know-how to implement microservice clients. Case Study The case study presented here is as simple as possible. It contains a shell app that activates microservice clients as well as routes within those microservice clients. They are just called Client A and Client B. In addition, Client B also contains a widget from Client A. The whole source code can be found in my GitHub repo. Routing within Microservice Clients One thing that is rather unusual here, is that whole clients are implemented as Web Components and therefore they are using routing: @NgModule({ imports: [ ReactiveFormsModule, BrowserModule, RouterModule.forRoot([ { path: 'client-a/page1', component: Page1Component }, { path: 'client-a/page2', component: Page2Component }, { path: '**', component: Page1Component} ], { useHash: true }) ], declarations: [ ClientAComponent, Page1Component, Page2Component, [...] ], entryComponents: [ ClientAComponent, [...] ] }) export class AppModule { ngDoBootstrap() { } } When bootstrapping such components as Web Components we have to initialize the router manually: @Component([...]) export class ClientAComponent { constructor(private router: Router) { router.initialNavigation(); // Manually triggering initial navigation for @angular/elements ? } } Excluding zone Normally, Angular leverages zone for change detection. It provides a lot of convenience by informing Angular about all browser events. To be capable of this, it's monkey-patching all browser objects. Especially, when we want to use several microservice clients within a single page it can be desirable to avoid such a behavior. This would also lead to smaller bundle sizes. Beginning with Angular 5 we can exclude zone by setting the property ngZone to noop during bootstrapping: registerAsCustomElements([ClientAComponent, ClientAWidgetComponent], () => platformBrowserDynamic().bootstrapModule(AppModule, { ngZone: 'noop' }) ); After this, we have to trigger change detection manually. But this is cumbersome and error-prone. There are some ideas to deal with this. A prototypical (!) one comes from Fabian Wiles who is an active community member. It uses a custom push pipe that triggers change detection when an observable yields a new value. It works similar to the async pipe but other than it push also works without zone: @Component({ [...]



.NET Core und Integrationstests

2018-01-19T04:41:49Z

Im Gegensatz zu Unit Tests werden mit Integrationstests komplette Funktionalitäten getestet. Verwendete Systeme (Datenbanken etc.) müssen für Tests entsprechend konfiguriert sein und zur Verfügung stehen. Nehmen wir als Beispiel eine Web API. Diese gibt definierte Endpunkte nach außen. Ein Client (Browser, Mobilgerät etc.) kann diese Endpunkte bedienen und darüber Informationen abfragen oder übermitteln. Integrationstests fungieren […] The post .NET Core und Integrationstests appeared first on Norbert Eder. Im Gegensatz zu Unit Tests werden mit Integrationstests komplette Funktionalitäten getestet. Verwendete Systeme (Datenbanken etc.) müssen für Tests entsprechend konfiguriert sein und zur Verfügung stehen. Nehmen wir als Beispiel eine Web API. Diese gibt definierte Endpunkte nach außen. Ein Client (Browser, Mobilgerät etc.) kann diese Endpunkte bedienen und darüber Informationen abfragen oder übermitteln. Integrationstests fungieren als Client. Der Unterschied ist, dass Ergebnisse zu erwartenden Ergebnissen gegenübergestellt werden. So kann entschieden werden, ob alle APIs korrekt funktionieren. Wie auch bei Unit Tests sind nicht nur Schönwetter-Fälle zu testen. Es ist mit Fehleingaben zu rechnen, wie geht das System damit um? Stürzt es ab, oder liefert es dem Client eine Information darüber, warum eine Anfrage nicht angenommen wurde oder kein Ergebnis geliefert hat? Testprojekt erstellen Welche Schritte sind nun notwendig, um Integrationstests unter .NET Core ausführen zu können? Im ersten Schritt wird ein neues Testprojekt erstellt: Visual Studio .NET Core xUnit Testprojekt erstellen Zur Auswahl steht die Möglichkeit einer MSTest-Umgebung oder der Verwendung von xUnit. In diesem Fall wurde das xUnit-Projekt gewählt. Nach der Erstellung des Projektes muss ein Rebuild vorgenommen werden, damit alle notwendigen Abhängigkeiten bezogen werden. Dies kann via nuget restore auch ohne Rebuild durchgeführt werden. Im nächsten Schritt ist das NuGet-Package Microsoft.AspNetCore.TestHost dem Projekt hinzuzufügen. Hiermit wird unter anderem die Klasse TestServer zur Verfügung gestellt. Damit kann eine komplette Server-Instanz hochgezogen werden (ohne IIS etc.): public class EndpointTest { private readonly TestServer server; private readonly HttpClient client; public EndpointTest() { var webHostBuilder = new WebHostBuilder() .UseEnvironment("Test") // Startup-Klasse des eigentlichen Projektes .UseStartup(); this.server = new TestServer(webHostBuilder); this.client = server.CreateClient(); } [Fact] public async void ConnectToEndpoint_ShouldBeOk() { string result = await client.GetStringAsync("/api/endpoint"); Assert.Equal("[RESPONSE]", result); } } In diesem Beispiel wird im Konstruktor der Testserver mit der Startup-Klasse des Projektes hochgezogen. Damit werden alle im Startup angegebenen Konfigurationen verwendet. In den Testmethoden werden nun auf die einzelnen Endpunkte Abfragen abgesetzt und das Ergebnis geprüft. Ausführen der Integrationstests Die Tests können über Visual Studio ausgeführt werden. Alternativ dazu ist auch die Ausführung in der Konsole möglich: dotnet test Weiterführende Informationen können in der Dokumentation zu dotnet test gefunden werden. Bei Unit Tests ist es wichtig, dass jeder Test unabhängig der anderen Tests ausgeführt werden kann (und auch funktioniert). Integrationstests müssen hingegen oft in einer definierten Reihenfolge ausgeführt werden. So ist es in der Regel erst möglich Daten abzufragen, nachdem eine Anmeldung am System erfolgte. Zur Veranschaulichung möchte ich ein kleines Beispiel aufzeigen: Anmelden am System Anlage eines Kunden Anlage eines Kundenprojektes Aktualisieren eines Kundenprojektes Aktualisieren des Kunden Löschversuch des Kunden Löschen eines Kundenprojektes Löschen des Kundens[...]



Tupel in Tupeln in C# 7.x

2018-01-11T15:22:26+01:00

Tupel dienen dazu, strukturierte und typisierte Einzelinformationen aneinander zu binden, ohne dafür eine Klasse oder Struktur zu deklarieren. Man kann sie ineinander verschachteln.



User-Group-Vortrag zu .NET 4.7 und Visual Studio 2017 am 10. Januar in Dortmund

2018-01-05T08:11:13+01:00

Der Dotnet-Doktor zeigt an diesem Abend die neusten Features in .NET, C# und Visual Studio.



Ist meine .NET Core/Standard Anwendung plattformunabhängig?

2018-01-19T04:41:49Z

Wer wünscht sich nicht bereits bei der Entwicklung auf Inkompatibilitäten der Plattformen hingewiesen zu werden. Der API Analyzer hilft dabei. The post Ist meine .NET Core/Standard Anwendung plattformunabhängig? appeared first on Norbert Eder. .NET Core/Standard kommt häufig zum Einsatz, wenn die Software nicht nur unter Windows, sondern auch unter Linux oder macOS laufen soll. Bei der Entwicklung auf einem Windows-Gerät fällt die Verwendung einer problematischen API jedoch nicht auf. Eine Library hilft uns Entwickler dabei. Der Platform Compatibility Analyzer lässt sich einfach als NuGet-Paket einbinden und nimmt sofort seine Arbeit auf. Sämtliche gefunden Probleme werden entweder über das Glühbirnen-Symbol dargestellt, oder erscheinen in der Fehlerliste (die Einstufung ob Warning, Error etc. kann in den Einstellungen angepasst werden). Welche Prüfungen finden statt? Folgende Plattform-Prüfungen werden aktuell abgedeckt: Prüfung 1: Die verwendete .NET Core oder .NET Standard API wirft eine PlatformNotSupportedException. Dabei wird ersichtlich, auf welcher Plattform dieser API nicht verfügbar ist. Prüfung 2: Laut NuGet implementiert .NET Framework 4.6.1 den .NET Standard 2.0. Dies ist allerdings nicht korrekt. Bei dieser Meldung wird eine API verwendet, die im .NET Framework 4.6.1 nicht unterstützt wird. Prüfung 3: Verwendung einer nicht unterstützten nativen API in einer .NET Standard/UWP-Anwendung. Zusätzlich wird auf Verwendung von obsoleten API-Aufrufen untersucht. Zum aktuellen Zeitpunkt werden die nachfolgenden Verwendungen markiert: SecureString Code Access Security WebRequest WebClient SmtpClient Sollte ich diesen Analyzer verwenden? Besteht die Chance, dass die Software auf einer anderen Plattform eingesetzt wird, empfehle ich den Einsatz des API Analyzer unbedingt. So werden bereits zur Entwicklung Problemstellen identifiziert und können sofort behoben werden. Etwaige Inkompatibilitäten erst bei Testläufen zu finden, kann große Umstellungen und somit hohe Kosten bedeuten. Wer die Plattformprüfung auf spezifische Plattformen einschränken möchte, kann auszulassende Plattformen im Projektfile konfigurieren: Linux;MacOSX Happy Coding! The post Ist meine .NET Core/Standard Anwendung plattformunabhängig? appeared first on Norbert Eder. [...]



Generating custom Angular Code with the CLI and Schematics, Part III: Extending existing Code with the TypeScript Compiler API

2018-01-19T04:41:49Z

/* Tomorrow Theme */ /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ /* Original theme - https://github.com/chriskempson/tomorrow-theme */ /* Tomorrow Comment */ .hljs-comment, .hljs-quote { color: #8e908c; } /* Tomorrow Red */ .hljs-variable, .hljs-template-variable, .hljs-tag, .hljs-name, .hljs-selector-id, .hljs-selector-class, .hljs-regexp, .hljs-deletion { color: #c82829; } /* Tomorrow Orange */ .hljs-number, .hljs-built_in, .hljs-builtin-name, .hljs-literal, .hljs-type, .hljs-params, .hljs-meta, .hljs-link { color: #f5871f; } /* Tomorrow Yellow */ .hljs-attribute { color: #eab700; } /* Tomorrow Green */ .hljs-string, .hljs-symbol, .hljs-bullet, .hljs-addition { color: #718c00; } /* Tomorrow Blue */ .hljs-title, .hljs-section { color: #4271ae; } /* Tomorrow Purple */ .hljs-keyword, .hljs-selector-tag { color: #8959a8; } .hljs { display: block; overflow-x: auto; color: #4d4d4c; padding: 0.5em; } .hljs-emphasis { font-style: italic; } .hljs-strong { font-weight: bold; } p a { text-decoration: underline; } Table of Contents This blog post is part of an article series. Part I: Generating Custom Code With The Angular CLI And Schematics Part II: Automatically Updating Angular Modules With Schematics And The CLI Part III: Extending Existing Code With The TypeScript Compiler API In my two previous blog posts, I've shown how to leverage Schematics to generate custom code with the Angular CLI as well as to update an existing NgModules with declarations for generated components. The latter one was not that difficult because this is a task the CLI performs too and hence there are already helper functions we can use. But, as one can imagine, we are not always that lucky and find existing helper functions. In these cases we need to do the heavy lifting by ourselves and this is what this post is about: Showing how to directly modify existing source code in a safe way. When we look into the helper functions used in the previous article, we see that they are using the TypeScript Compiler API which e. g. gives us a syntax tree for TypeScript files. By traversing this tree and looking at its nodes we can analyse existing code and find out where a modification is needed. Using this approach, this post extends the schematic from the last article so that the generated Service is injected into the AppComponent where it can be configured: [...] import { SideMenuService } from './core/side-menu/side-menu.service'; @Component({ [...] }) export class AppComponent { constructor( private sideMenuService: SideMenuService) { // sideMenuService.show = true; } } I think, providing boilerplate for configuring a library that way can lower the barrier for getting started with it. However, please note that this simple example represents a lot of situations where modifying existing code provides more convenience. The source code for the examples used for this can be found here in my GitHub repository. Schematics is currently an Angular Labs project. Its public API is experimental and can change in future. Walking a Syntax Tree with the TypeScript Compiler API To get familiar with the TypeScript Compiler API, let's start with a simple NodeJS example that demonstrates its fundamental usage. All we need for this is TypeScript itself. As I'm going to use it within an simple NodeJS application, let's also install the typings for it. For this, we can use the following commands in a new folder: npm init npm install typescript --save npm install @types/node --save-dev In addition to that, we need a tsconfig.json with respective compiler settings: { "compilerOptions": { "target": "es6", "module": "commonjs", "lib": ["dom", "es2017"], "moduleResolution": "node" } } Now we have everything in place for our first experiment with the Compiler CLI. Let's create a new file index.ts: import * as ts from 'ty[...]



Ziele 2018

2018-01-19T04:41:49Z

Ziele 2018 Mittlerweile ist es schon Tradition, dass ich hier auf meinem Blog meine Ziele für das Neue Jahr veröffentliche (zumindest die, die für die Öffentlichkeit bestimmt sind). Diese Tradition möchte ich natürlich auch heuer fortsetzen. Softwareentwicklung Im kommenden Jahr wird sich viel um .NET Core, AngularJS, Azure IoT und Docker drehen. Da ist nun […]

The post Ziele 2018 appeared first on Norbert Eder.

Ziele 2018

Mittlerweile ist es schon Tradition, dass ich hier auf meinem Blog meine Ziele für das Neue Jahr veröffentliche (zumindest die, die für die Öffentlichkeit bestimmt sind). Diese Tradition möchte ich natürlich auch heuer fortsetzen.

Softwareentwicklung

Im kommenden Jahr wird sich viel um .NET Core, AngularJS, Azure IoT und Docker drehen. Da ist nun wenig Neues dabei, aber ich plane natürlich mein Wissen hier am Blog und auf anderen Kanälen zu teilen (Genaueres weiter unten). Im Bereich der Softwarearchitekturen möchte ich mich weiterentwicklen und daher auch entsprechende Informationen (Artikel und Bücher) konsumieren.

Fotografie

Auch in diesem Jahr möchte ich den #fotomontag weiter betreiben, d.h. es wird weiterhin jeden Montag ein neues Foto von mir geben. Zusätzlich möchte ich zahlreiche Tipps & Tricks zum Thema Fotografie drüben auf meinem fachspezifischen Blog unter https://norberteder.photography veröffentlichen und so Mehrwert für fotobegeisterte Leser schaffen. Zumindest ein Beitrag pro Woche soll es sein.

Blog

Inhaltlich stehen dem Blog einige Änderungen ins Haus. Ich möchte es wieder verstärkt in Richtung Softwareentwicklung spezialisieren. Dies bedeutet, dass einige Inhalte, wie z.B. Unterwegs, auf https://norberteder.photography übersiedeln werden. Ein- bis zweimal pro Woche möchte ich einen Beitrag veröffentlichen.

Zahlreiche ältere Blog-Beiträge werden ein Update erfahren. Hoffnungslos veraltete Artikel (z.B. zu Silverlight) werden überhaupt verschwinden.

Lesen

Weiterbildung ist so unheimlich wichtig. Deshalb werde ich auch dieses Jahr wieder zahlreiche Fachbücher konsumieren. Im Gegensatz zu den beiden vergangenen Jahren möchte ich TV-Serien reduzieren und stattdessen auch wieder bei Perry Rhodan Neo weiterlesen, oder anderes, was mich interessiert. Insgesamt setze ich mir 15 Bücher zum Ziel.

Verfolgen kannst du das unter Goodreads 2018 Reading Challenge.

Hilfsbereitschaft

Ich bin in der glücklichen Lage, gesund und in einer guten Situation zu sein. Das ist nicht bei allen Mitmenschen so. Deshalb möchte ich 2018 vermehrt Mitmenschen unterstützen und Gutes tun, wenn ich die Möglichkeit dazu sehe.

Schlussendlich möchte ich dir, lieber Leser, für deine Treue danken und wünsche dir ein wunderbares 2018.

The post Ziele 2018 appeared first on Norbert Eder.




First steps to enable login with Microsoft or Azure AD account for your application

2018-01-19T04:41:49Z

It is quite common these days to “Login with Facebook/Google/Twitter”. Of course Microsoft has something similar. If I remember it correctly the first version was called “Live SDK” with the possibility to login with your personal Microsoft Account.

With Office 365 and the introduction of Azure AD we were able to build an application to sign-in with a personal account via the “Live SDK” and organizational account via “Azure AD”.

However: The developer and end user UX was far way from perfect, because the implementation for each account type was different and for the user it was not clear which one to choose.

Microsoft Graph & Azure AD 2.0

Fast forward to the right way: Use the Azure AD 2.0 endpoint.

Step 1: Register your own application

You just need to register your own application in the Application Registration Portal. The registration itself is a typical OAuth-application registration and you get a ClientId and Secret for your application.

Warning: If you have “older” LiveSDK application registered under your account you need to choose Converged Applications. LiveSDK applications are more or less legacy and I wouldn’t use them anymore.

Step 2: Choose a platform

Now you need to choose your application platform. If you want to enable the sign-in stuff for your web application you need to choose “Web” and insert the redirect URL. After the sign-in process the token will be send to this URL.

(image)

Step 3: Choose Microsoft Graph Permissions (Scopes)

In the last step you need to select what permissions your applications need. A first-time user needs to accept your permission requests. The “Microsoft Graph” is a collection of APIs that works for personal Microsoft accounts and Office 365/Azure AD account.

(image)

The “User.Read” permission is the most basic permission that would allow to sign-in, but if you want to access other APIs as well you just need to add those permissions to your application:

(image)

Finish

After the application registration and the selection of the needed permissions you are ready to go. You can even generate a sample application on the portal. For a quick start check this page

Microsoft Graph Explorer

(image)

As I already said: The Graph is the center of Microsofts Cloud Data and the easiest way to play around with the different scopes and possibilities is with the Microsoft Graph Explorer.

Hope this helps.

(image)



Rückblick 2017

2018-01-19T04:41:49Z

Rückblick 2017 Unglaublich. Schon wieder sitze ich hier, sinniere über das vergangene Jahr und schreibe an meinem persönlichen Rückblick. 2017 war ein sehr schwieriges Jahr, in dem ich allerdings auch sehr viel gelernt habe. Aber alles der Reihe nach. Natürlich hatte ich mir Ziele für 2017 vorgenommen. Diese sind für mich immer ein grober Rahmen […] The post Rückblick 2017 appeared first on Norbert Eder. Rückblick 2017 Unglaublich. Schon wieder sitze ich hier, sinniere über das vergangene Jahr und schreibe an meinem persönlichen Rückblick. 2017 war ein sehr schwieriges Jahr, in dem ich allerdings auch sehr viel gelernt habe. Aber alles der Reihe nach. Natürlich hatte ich mir Ziele für 2017 vorgenommen. Diese sind für mich immer ein grober Rahmen für meine weitere Entwicklung. Mal sehen wie es mir ergangen ist. Einige Ziele finden sich ja nicht auf der öffentlichen Liste, werden von mir aber genauso getracked. Vermutlich sogar strenger. Softwareentwicklung Tja, also Fachartikel habe ich 2017 keinen geschrieben, ich habe auch nicht wirklich mehr darüber gebloggt, als im Jahr zuvor. Aber: Nachdem ich 2016 doch weniger in die Tasten gegriffen habe, hat sich das 2017 wieder massiv verstärkt. Hauptsächlich kamen .NET Core, C# sowie TypeScript, AngularJS und Node zum Einsatz. Zusätzlich konnte ich Docker in mein Repertoire aufnehmen. Warum habe ich meine Ziele in diesem Bereich nicht erreicht? Es hat sich in diesem Jahr einfach soviel verändert, dass ich keine Zeit fand, entsprechende Ideen für Beiträge (sowohl für Fachzeitschriften, als auch meinem Blog) zu entwickeln. Gab es die Zeit, war Erholung und Ablenkung angesagt. Fotografie Gleich zu Beginn startete das Jahr mit einer Reise nach Kroatien. Auf der Insel Krk wurde das Hotel Haludovo besichtigt. Im April ging es nach Amsterdam, eine wirklich beeindruckende Stadt. Ende Juni ging es nach Tschechien, ins wunderschöne Brünn. Die Fotoreisen wurden im Oktober mit Laibach abgeschlossen. Durch die vielen Reisen konnte ich gerade im Bereich Architektur und Landschaft viel lernen. In der Nachbearbeitung setzte ich neben Lightroom verstärkt auch Photoshop ein. Zusätzlich gab es einschlägige Photoshop-Projekte (siehe Levitation), die meine Fähigkeiten verbessern sollten. Neben all dieser Themen kamen die Portrait-Shootings etwas zu kurz, das eine oder andere Shooting konnte aber absolviert werden. Website Es gab zwar viele kleine Änderungen an der Seite, das Grundkonzept blieb 2017 allerdings unverändert. Aus gutem Grund: Metrik Veränderung Aufrufe +10% Besucher +20% Beiträge -15% Interessant hierbei ist, dass mit doch erheblich weniger Beitragen, die Website häufiger aufgerufen wurde. Geschuldet ist das einigen Beiträgen, die zur richtigen Zeit geschrieben wurden. Top 5 neue Beiträge 2017 Visual Studio 2017: Sprache ändern C# 7: Tuples Visual Studio 2017: Git failed with a fatal error C# 7: Local Functions Sony Alpha 6500 Firmware Update 1.02 Top 5 Beiträge 2017 Visual Studio 2017: Sprache ändern MVVM: Das ViewModel Das Repository Pattern anhand eines Beispiels Node, TypeScript und Visual Studio Code Sony Alpha 6000/7 Firmware 3.10 Bücher Seit jeher sind Bücher für mich absolut wichtig. Auch 2017 habe ich wieder einige interessante gelesen: Langlebige Software-Architekturen: Technische Schulden analysieren, begrenzen und abbauen Das Industrie 4.0 Arbeitsbuch: Sind Digitalisierung, Industrie 4.0 und Disruption unterschiedliche Dinge?! Total Recall: Die wahre Geschichte meines Lebens Konsequenz!: Management ohne Kompromisse – Führen mit Klarheit und Aufrichtigkeit Tools der Titanen: Die Taktiken, Routinen und Gewohnheiten der Weltklasse-Performer, Ikonen und Milliardäre Leading Meine Leseliste ist online zu finden. Das Leben 2017 hat es v[...]



Unit Tests gegen automatisch bereit gestellte SQL-Datenbanken

2018-01-19T04:41:49Z

Automatische Verteilung von ge-seedeten Datenbanken bei Ausführung von Unit-Tests.



A software architect's approach towards using Angular (and SPAs in general) for microservices aka microfrontends

2018-01-19T04:41:49Z

p a { text-decoration: underline } table { border-collapse: collapse; } table > thead > tr > th { text-align: left; border-bottom: 1px solid; } table > thead > tr > th, table > thead > tr > td, table > tbody > tr > th, table > tbody > tr > td { padding: 5px 10px; } table > tbody > tr + tr > td { border-top: 1px solid; } blockquote { margin: 0 7px 0 5px; padding: 0 16px 0 10px; border-left: 5px solid; } People ask me on regular basis how to use SPAs and/or Angular in an microservice-based environment. The need for such microfrontends is no surprise, as microservices are quite popular nowadays. The underlying idea of microservices is quite simple: Create several tiny applications -- so called microservices -- instead of one big monolytic applications. This leads for instance (but not only) to smaller teams (per microservice) that can make decisions faster and chose for the "best" technology that suites their needs. But when we want to use several microservices that form a bigger software system in the browser, we need a way to load them side by side and to isolate them from each other so that they cannot interact in an unplanned manner. The fact that each team can use different frameworks in different versions brings additional complexity into play. Fortunately, there are several approaches for this. Unfortunately, no approach is perfect -- each of them has it's own pros and cons. To decide for one, a software architect would evaluate those so called architectural candidates against the architectural goals given for the software system in question. Typical (but not the only) goals for SPAs in microservice-based environments are shown in the next section. Architectural Goals Architectural Goal Description a) Isolation Can the clients influence each other in an unplanned way? b) Separate Deployment Can the microservices be deployed separately without the need to coordinate with other teams responsible for other microservices? c) Single Page Shell Is the shell, composing the loaded microfrontends a SPA -- or does it at least feel like one for the user (no postbacks, deep linking, holding state) d) Different SPA-Frameworks Can we use different SPA frameworks (or libraries) in different versions e) Tree Shaking Can we make use of tree shaking? f) Vendor Bundles Can we reuse already loaded vendor bundles or do we need to load the same framework several times, if it's used by several microfrontends g) Several microfrontends at the same time Can we display several microfrontends at the same time, e. g. a product list and a shopping basket h) Prevents version conflicts Does the approach prevent version conflicts between used libraries? i) Separate development Can separate teams develop their microfrontends independently of other ones Evaluation The following table evaluates some architectural candidates for microfrontends against the discussed goals (a - g). Architectural Candidate a b c d e f g h i I) Just using Hyperlinks x x x x x x II) Using iframes x x x x x x x x III) Loading different SPAs into the same page x x x x x x IV) Plugins x x x V) Packages (npm, etc.) x x x x VI) Monorepo Approach x x x x x VII) Web Components x x x x x x If you are interested into some of those candidates, the next table provides some additional thoughts on them: Nr Remarks I) Just using Hyperlinks We could save the state before navigating to another microfrontend. Using something like Redux (@ngrx/store) could come in handy b/c it manages the state centrally) II) Using iframes We need something like a meta router that synchronizes the url with the iframes ones III) Loading different SPAs into the same page A popular framewor[...]



Weihnachstgrüße von Codefest.AT und der PowerShell UserGroup Austria

2018-01-19T04:41:49Z

Hallo PowerShell Gemeinde! Auch im letzten Monat war einiges los bei uns Künftige Veranstaltungen Experts Live Café Event Linz, 31. Jänner 2018 (http://www.expertslive.at/linz.html) Experts Live Café Event Wien, 21. März 2018 (http://www.expertslive.at/wien.html) Experts Live Country Event, 13.11.2018 (http://www.expertslive.at/konferenz.html) Newsletter - die "Schnipseljagd":  Unsere wöchentlichen PowerShell Newsletter kamen regelmäßig raus und beinhalteten folgende Themen: https://www.powershell.co.at/powershell-schnipseljagd-4517/ Webhook...Hallo PowerShell Gemeinde! Auch im letzten Monat war einiges los bei uns Künftige Veranstaltungen Experts Live Café Event Linz, 31. Jänner 2018 (http://www.expertslive.at/linz.html) Experts Live Café Event Wien, 21. März 2018 (http://www.expertslive.at/wien.html) Experts Live Country Event, 13.11.2018 (http://www.expertslive.at/konferenz.html) Newsletter - die "Schnipseljagd":  Unsere wöchentlichen PowerShell Newsletter kamen regelmäßig raus und beinhalteten folgende Themen: https://www.powershell.co.at/powershell-schnipseljagd-4517/ Webhook anstossen Keine Passwörter im Code – The Azure-way! Try/catch/error blocks in PowerShell – Error Handling wie die Profis Service Accounts: Passwort automatisch verändern GPO – Konflikte erkennen https://www.powershell.co.at/powershell-schnipseljagd-46-17/ FTP Mehrere CSV bearbeiten PowerShell Gallery Informationen auslesen – mit PowerShell Bilder sind auch für Kommandozeilen Enthusiasten wichtig Mehrere PowerShell Fenster anordnen Welche Infos gibt es über mich? https://www.powershell.co.at/powershell-schnipseljagd-47-17/ Neuigkeiten/Unterschiede in PowerShell 6.0 Schneller mit Vorlagen Anzahl der Elemente eines Office365 Ordners auslesen Eigene Eigenschaften hinzufügen Sharepoint Recovery https://www.powershell.co.at/powershell-schnipseljagd-48-17/ PowerShell & Azure Colour your Console Sieger des PowerShell Contests Adventkalender Learn to build tools not to code Multi-Valued Eigenschaften in ein CSV exportierren Deep Learning https://www.powershell.co.at/powershell-schnipseljagd-49-17/ PowerShell Countdown Timer Wie man ein Script auf die PowerShell Gallery postet Den Manager eines Benutzers aus dem AD auslesen Rechnen mit PowerShell https://www.powershell.co.at/powershell-schnipseljagd-50-17/ PowerShell in der Wolke (Microsoft Flow) Betriebssysteminformationen auslesen PowerShell Module Microsoft MVP Wo kann man mein Netzwerk verletzen? Pester und Schleifen Adventkalender Wir hoffen es  war auch für Dich etwas dabei! Wir wünschen ein Frohes Fest und einen Guten Rutsch ins Jahr 2018! CodeFest.AT und die PowerShell UserGroup Austria - www.powershell.co.at [...]



SQL Saturday Vienna (2018)

2018-01-19T04:41:49Z

Am Freitag, den 19. Jänner 2018 dreht sich wieder einmal alles um die Microsoft Data Platform. Der SQL Saturday Vienna (2018) startet in die nunmehr fünfte Auflage mit noch mehr Sessions, noch mehr Speaker und vielen interessierten Teilnehmern! Der SQL Saturday ist eine Ganztagesveranstaltung welche von der Community (SQL Pass Austria) für die Community veranstaltet...Am Freitag, den 19. Jänner 2018 dreht sich wieder einmal alles um die Microsoft Data Platform. Der SQL Saturday Vienna (2018) startet in die nunmehr fünfte Auflage mit noch mehr Sessions, noch mehr Speaker und vielen interessierten Teilnehmern! Der SQL Saturday ist eine Ganztagesveranstaltung welche von der Community (SQL Pass Austria) für die Community veranstaltet wird. Am Freitag (Hauptkonferenz) steht unter anderem eine Keynote von Lindsey Allen (MS Corp Redmond) auf dem Program: Spannende Neuheiten aus dem Data Platform Universum inkludiert. Danach stehen 30 Sessions auf dem Programm – für DBAs, Entwickler, BI und Azure Themen ist gesorgt. Mehr Informationen zum Schedule: www.sqlsaturday.com/679/Sessions/Schedule.aspx. Am Vortag der Konferenz besteht die Möglichkeit, an einer der drei angebotenen Pre-Cons (Ganztagesworkshops) teilzunehmen. Die geplanten Themen sind: Analyze your SQL Server like a BOSS (Uwe Ricken, MVP) – https://tinyurl.com/sqlsatvienna18PreconSQL Advanced Analytics with Power BI and R (Leila Etaati, MVP) – https://tinyurl.com/sqlsatvienna18PreconAnalytics Cloud Migration Workshop: How to move your SQL Servers to Azure (William Durkin, MVP und Andre Kamman, MVP) – https://tinyurl.com/sqlsatvienna18PreconCloud Die Plätze füllen sich langsam aber stetig – Eine Registrierung ist für beide Tage zwingend notwendig! Die Eckdaten: Donnerstag, 18. Jänner 2018: Pre Cons (Ganztagsworkshop) Freitag, 19. Jänner 2018: SQL Saturday Vienna 2018 Ort:  Jufa Wien, Mautner-Markhof-Gasse 50, 1110 Wien Veranstalter: SQL Pass Austria (http://austria.sqlpass.org,  @sqlsatvienna) Wir freuen uns auf spannende Tage voll mit Data Platform Neuigkeiten! SQL Pass Austria, das #SQLSatVienna Orga Team http://www.sqlsaturday.com/679 [...]



Wenn Entity Framework Core Migrations die Kontextklasse nicht finden können

2017-12-20T12:41:24+01:00

Eine Abweichung der Versionsnummer an der dritten Stelle kann dazu führen, dass die Schemamigrationen nicht mehr funktionieren.



Software Quality Days 2018

2018-01-19T04:41:49Z

Auch 2018 wird Microsoft wieder auf den Software Quality Days in Wien vertreten sein. Software Quality Days 2018 (SWQD 18) 17. bis 18. Jänner 2018 Austria Trend Hotel Savoyen Konferenzprogramm Die Software Quality Days sind eine Fachkonferenz zum Thema Softwarequalität und Cloud. Möchten Sie an der Konferenz teilnehmen ? Wir können Ihnen exklusiv einen 20%...

Auch 2018 wird Microsoft wieder auf den Software Quality Days in Wien vertreten sein.

Software Quality Days 2018 (SWQD 18)
17. bis 18. Jänner 2018
Austria Trend Hotel Savoyen

Konferenzprogramm

Die Software Quality Days sind eine Fachkonferenz zum Thema Softwarequalität und Cloud.

Möchten Sie an der Konferenz teilnehmen ? Wir können Ihnen exklusiv einen 20% Rabattcode oder Ermäßigung für Ihre Ticketbuchung anbieten.

Wir würden uns freuen wenn Sie ein Ticket mit dieser Möglichkeit erwerben und wir Sie bei uns am Stand oder der Tool Challenge begrüßen dürfen.

 




Azure Red Shirt Dev Tour mit Scott Guthrie – jetzt anmelden

2018-01-19T04:41:49Z

  Mitte Jänner startet die Azure Red Shirt Dev Tour Germany 2018 mit Stopps in Berlin, am 17. Jänner 2018 und München, am 18. Jänner 2018. Microsoft´s Cloud Ober-Guru Scott Guthrie führt die Tour an und verrät Tipps und Tricks für das Entwickeln, Inbetriebnehmen und Verwalten von Cloud Anwendungen. Die Anmeldung für beide Termine ist...

 

Mitte Jänner startet die Azure Red Shirt Dev Tour Germany 2018 mit Stopps in Berlin, am 17. Jänner 2018 und München, am 18. Jänner 2018. Microsoft´s Cloud Ober-Guru Scott Guthrie führt die Tour an und verrät Tipps und Tricks für das Entwickeln, Inbetriebnehmen und Verwalten von Cloud Anwendungen.

Die Anmeldung für beide Termine ist bereits möglich, Registrationlink, Agenda und weitere Infos gibt es auf der Red Shirt Dev Tour Website

 

 

(image) (image)




Einführung in React, Folge 5: Der unidirektionale Datenfluss

2017-12-13T10:22:50+01:00

Mit React entwickelte Anwendungen verwenden einen unidirektionalen Datenfluss. Das bedeutet, dass Daten stets nur in einer Richtung weitergegeben und verarbeitet werden. Das wirft einige Fragen auf, beispielsweise wie mit Zustand umzugehen ist. Worauf gilt es zu achten?



A lightweight and solid approach towards micro frontends (micro service clients) with Angular and/or other frameworks

2018-01-19T04:41:49Z

p a {text-decoration: underline} Even though the word iframe causes bad feelings for most web devs, it turns out that using them for building SPAs for micro services -- aka micro frontends -- is a good choice. For instance, they allow for a perfect isolation between clients and for a separate deployment. Because of the isolation they also allow using different SPA frameworks. Besides iframes, there are other approaches to use SPAs in micro service architectures -- of course, each of them has their own pros and cons. A good overview can be found here. Another great resource comparing the options available is Brecht Billiet's presentation about this topic.In addition to this, I've written another blog post comparing several approaches by evaluating them against some selected architectural goals. As Asim Hussain shows in this blog article, using iframes can also be a nice solution for migrating an existing AngularJS application to Angular. For the approach described here, I've written a "meta router" to load different spa clients for micro services in iframes. It takes care about the iframe's creation and about synchronizing their routes with the shell's url. It also resizes the iframe dynamically to prevent a scrolling bar within it. The library is written in a framework agnostic way. The router can be installed via npm: npm install meta-spa-router --save The source code and an example can be found in my GitHub account. In the example I'm using VanillaJS for the shell application and Angular for the routed child apps. This is how to set up the shell with VanillaJS: var MetaRouter = require('meta-spa-router').MetaRouter; var config = [ { path: 'a', app: '/app-a/dist' }, { path: 'b', app: '/app-b/dist' } ]; window.addEventListener('load', function() { var router = new MetaRouter(); router.config(config); router.init(); router.preload(); document.getElementById('link-a') .addEventListener('click', function() { router.go('a') }); document.getElementById('link-b') .addEventListener('click', function() { router.go('b') }); document.getElementById('link-aa') .addEventListener('click', function() { router.go('a', 'a') }); document.getElementById('link-ab') .addEventListener('click', function() { router.go('a', 'b') }); }); And here is the HTML for the shell:
The router creates the iframes as children of the element with the id outlet and allows switching between them using the method go. As you see in the example, it also allows to jump to a subroute within an application. The routed applications use the RoutedApp class to establish a connection with the shell. This is necessary to sync the client app's router with the shell's one. As I'm using Angular in my example, I'm registering it as a service. Instead of this, one could also directly instantiate it when going with other frameworks. To register this service that comes without Angular Metadata for AOT because its framework agnostic, I'm creating a token in a new file app.tokens.ts: import { RoutedApp } from 'meta-spa-router'; import { InjectionToken } from '@angular/core'; export const ROUTED_APP = new InjectionToken&l[...]



Trying BitBucket Pipelines with ASP.NET Core

2017-12-08T00:00:00Z

BitBucket provides a continuous integration tool called Pipelines. This is based on Docker containers which are running on a Linux based Docker machine. Within this post I wanna try to use BitBucket Pipelines with an ASP.NET Core application. In the past I preferred BitBucket over GitHub, because I used Mercurial more than Git. But that changed five years ago. Since than I use GitHub for almost every new personal project that doesn't need to be a private project. But at the YooApps we use the entire Atlassian ALM Stack including Jira, Confluence and BitBucket. (We don't use Bamboo yet, because we also use Azure a lot and we didn't get Bamboo running on Azure). BitBucket is a good choice, if you anyway use the other Atlassian tools, because the integration to Jira and Confluence is awesome. Since a while, Atlassian provides Pipelines as a simple continuous integration tool directly on BitBucket. You don't need to setup Bamboo to build and test just a simple application. At the YooApps we actually use Pipelines in various projects which are not using .NET. For .NET Projects we are currently using CAKE or FAKE on Jenkins, hosted on an Azure VM. Pipelines can also used to build and test branches and pull request, which is awesome. So why shouldn't we use Pipelines for .NET Core based projects? BitBucket actually provides an already prepared Pipelines configuration for .NET Core related projects, using the microsoft/dotnet Docker image. So let's try pipelines. The project to build As usual, I just setup a simple ASP.NET Core project and add a XUnit test project to it. In this case I use the same project as shown in the Unit testing ASP.NET Core post. I imported that project from GitHub to BitBucket. if you also wanna try Pipelines, feel free to use the same way or just download my solution and commit it into your repository on BitBucket. Once the sources are in the repository, you can start to setup Pipelines. GitHub https://github.com/JuergenGutsch/unittesting-aspnetcore/ BitBucket: https://bitbucket.org/JuergenGutsch/unittesting-aspnetcore/ Setup Pipelines Setting up Pipelines actually is pretty easy. In your repository on BitBucket.com is a menu item called Pipelines. After pressing it you'll see the setup page, where you are able to select a technology specific configuration. .NET Core is not the first choice for BitBucket, because the .NET Core configuration is placed under "More". It is available anyway, which is really nice. After selecting the configuration type, you'll see the configuration in an editor inside the browser. It is actually a YAML configuration, called bitbucket-pipelines.yml, which is pretty easy to read. This configuration is prepared to use the microsoft/dotnet:onbuild Docker image and it already has the most common .NET CLI commands prepared, that will be used with that ASP.NET Core projects. You just need to configure the projects names for the build and test commands. The completed configuration for my current project looks like this: # This is a sample build configuration for .NET Core. # Check our guides at https://confluence.atlassian.com/x/5Q4SMw for more examples. # Only use spaces to indent your .yml configuration. # ----- # You can specify a custom docker image from Docker Hub as your build environment. image: microsoft/dotnet:onbuild pipelines: default: - step: caches: - dotnetcore script: # Modify the commands below to build your repository. - export PROJECT_NAME=WebApiDemo - export TEST[...]



DDC 2017 - Inhalte meiner Keynote, DevSession und Workshops

2018-01-19T04:41:49Z

Wie in jedem Jahr so fand auch in diesem wieder die Dotnet Developer Conference im Pullman Hotel in Köln statt. Zum ersten Mal an vier Tagen, genauer gesagt vom 27.11.2017 bis 30.11.2017, wurden neben DevSessions und dem eigentlichen Koferenztag auch zwei Workshoptage angeboten. An dieser Stelle möchte ich nun allen Teilnehmern die Materialien meiner einzelnen Beiträge zur Verfügung stellen.Keynote "C# - vNow & vNext" src="//www.slideshare.net/slideshow/embed_code/key/G1lSDLIrmOvA8X" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" allowfullscreen="" style="border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); margin-bottom: 5px; max-width: 100%;"> C# 8.0, vNow and vNext von David Tielke Eröffnet wurde die Konferenz am Mittwoch mit meiner Keynote zum aktuellen und zukünftigen Stand von Microsofts Entwicklungssprache C#. In 55 Minuten zeigte ich den Zuhörern zunächst die Geschichte und den Werdegang der Sprache, die aktuell hinzugekommenen Features (C# 6.0 & C#7.0), die kürzlichen Updates 7.1 und 7.2 sowie die anstehende Sprachversion 8.0. Anschließend wurde argumentiert, warum meiner Meinung nach C# eine der besten und sichersten Plattformen für die Zukunft ist.FolienDevSession "Mehr Softwarequalität durch Tests"Einen Tag vor der eigentlichen Konferenz, konnten die Teilnehmer zwischen vier parallelen DevSessions wählen, welche eine Dauer von vier Stunden hatten. Mein Beitrag zum Thema "Mehr Softwarequalität durch Tests" stellte das Thema der Tests auf eine etwas andere Art und Weise vor: Nach einer grundlegenden Betrachtung des Themas "Softwarequalität" zeigt ich den Teilnehmern, was in der Softwareentwicklung so alles getestet werden kann. Neben dem Testen von Architekturen, Teams, Funktionalitäten, Code wurde besonders dem Thema "Prozesse" viel Aufmerksamkeit gewidmet.NotizenWorkshop "Scrum mit dem Team Foundation Server 2018"Am Montag wurde die Konferenz mit dem ersten Workshoptag eröffnet. Dabei stellte ich das agile Projektmanagementframework "Scrum" in Verbindung mit dem Team Foundation Server 2018 vor. Dazu wurde zu Beginn der Fokus zunächst auf Prozesse im allgemeinen und später dann auf die praktische Implementierung eines solchen anhand von Scrum, gelegt. Neben den Grundlagen wurde besonders die Einführung von Scrum anhand von zahlreichen Praxisbeispielen gezeigt und dabei auf Risiken und mögliche Probleme hingewiesen. Anschließend wurde am Beispiel des Team Foundation Servers gezeigt, wie eine toolgestützte Umsetzung einer agilen Planung aussehen kann.Folien & NotizenWorkshop "Composite Component Architecture 2.0"Am letzten Konferenztag stellte ich den Teilnehmern die neuste Version meiner "Composite Component Architecture" vor. Nach einem kurzen Überflug über die Grundlagen wurden die neuen Aspekte im Bereich Logging, Konfiguration, EventBroker, Bootstrapping sowie das verfügbare Tooling behandelt. Final dann durften die Teilnehmer einen exklusiven Blick auf eine frühe Alpha von "CoCo.Core" werfen, dem lange geplanten Framework für eine einfachere und flexiblere Implementierung der CoCo-Architektur.Da das Framework im Workshop alles andere als stabil lief, werde ich das Release noch einmal separat in diesem Blog ankündigen, sobald eine stabile erste Alpha verfügbar ist.NotizenIch möchte an dieser Stelle noch einmal allen Teilnehmern für ihr Feedback danken, egal ob persönlich oder per Twitter, Email oder auf sonst irgend einem Wege. D[...]



Automatically Updating Angular Modules with Schematics and the CLI

2018-01-19T04:41:49Z

p a { text-decoration: underline; } table th { font-weight: bold; } table th, table td { border: 1px solid #ccc; padding: 6px 13px; } table tr { border-top: 1px solid #ccc; background-color: #fff; } table tr:nth-child(2n) { background-color: #f8f8f8; } Table of Contents This blog post is part of an article series. Part I: Generating Custom Code With The Angular CLI And Schematics Part II: Automatically Updating Angular Modules With Schematics And The CLI Part III: Extending Existing Code With The TypeScript Compiler API Thanks to Hans Larsen from the Angular CLI Team for providing valuable feedback In my last blog article, I've shown how to leverage Schematics, the Angular CLI's code generator, to scaffold custom components. This article goes one step further and shows how to register generated building blocks like Components, Directives, Pipes, or Services with an existing NgModule. For this I'll extend the example from the last article that generates a SideMenuComponent. The source code shown here can also be found in my GitHub repository. Schematics is currently experimental and can change in future. Goal To register the generated SideMenuComponent we need to perform several tasks. For instance, we have to lookup the file with respective NgModule. After this, we have to insert several lines into this file: import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; // Add this line to reference component import { SideMenuComponent } from './side-menu/side-menu.component'; @NgModule({ imports: [ CommonModule ], // Add this Line declarations: [SideMenuComponent], // Add this Line if we want to export the component too exports: [SideMenuComponent] }) export class CoreModule { } As you've seen in the last listing, we have to create an import statement at the beginning of the file. And then we have to add the imported component to the declarations array and - if the caller requests it - to the exports array too. If those arrays don't exist, we have to create them too. The good message is, that the Angular CLI contains existing code for such tasks. Hence, we don't have to build everything from scratch. The next section shows some of those existing utility functions. Utility Functions provided by the Angular CLI The Schematics Collection @schematics/angular used by the Angular CLI for generating stuff like components or services turns out to be a real gold mine for modifying existing NgModules. For instance, you find some function to look up modules within @schematics/angular/utility/find-module. The following table shows two of them which I will use in the course of this article: Function Description findModuleFromOptions Looks up the current module file. For this, it starts in a given folder and looks for a file with the suffix .module.ts while the suffix .routing.module.ts is not accepted. If nothing has been found in the current folder, its parent folders are searched. buildRelativePath Builds a relative path that points from one file to another one. This function comes in handy for generating the import statement pointing from the module file to the file with the component to register. Another file containing useful utility functions is @schematics/angular/utility/ast-utils. It helps with modifying existing TypeScript files by leveraging services provided by the TypeScript compiler. The next table shows some of its functions used here: [...]



Signing with SignTool.exe - don't forget the timestamp!

2018-01-19T04:41:49Z

If you currently not touching signtool.exe at all or have nothing to do with “signing” you can just pass this blogpost, because this is more or less a stupid “Today I learned I did a mistake”-blogpost.

Signing?

We use authenticode code signing for our software just to prove that the installer is from us and “safe to use”, otherwise you might see a big warning from Windows that the application is from an “unknown publisher”:

(image)

To avoid this, you need a code signing certificate and need to sign your program (e.g. the installer and the .exe)

The problem…

We are doing this code signing since the first version of our application. Last year we needed to buy a new certificate because the first code signing certificate was getting stale. Sadly, after the first certificate was expired we got a call from a customer who recently tried to install our software and the installer was signed with the “old” certificate. The result was the big “Warning”-screen from above.

I checked the file and compared it to other installers (with expired certificates) and noticed that our signature didn’t had a timestamp:

(image)

The solution

I stumbled upon this great blogpost about authenticode code signing and the timestamp was indeed important:

When signing your code, you have the opportunity to timestamp your code; you should definitely do this. Time-stamping adds a cryptographically-verifiable timestamp to your signature, proving when the code was signed. If you do not timestamp your code, the signature will be treated as invalid upon the expiration of your digital certificate. Since it would probably be cumbersome to re-sign every package you’ve shipped when your certificate expires, you should take advantage of time-stamping. A signed, time-stamped package remains valid indefinitely, so long as the timestamp marks the package as having been signed during the validity period of the certificate.

Time-stamping itself is pretty easy and only one parameter was missing all the time… now we invoke Signtool.exe like this and we have a digitial signature with a timestamp:

signtool.exe sign /tr http://timestamp.digicert.com /sm /n "Subject..." /d "Description..." file.msi

Remarks:

  • Our code signing cert is from Digicert and they provide the timestamp URL.
  • SignTool.exe is part of the Windows SDK and currently is in the ClickOnce folder (e.g. C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool)

Hope this helps.

(image)



.NET Core Anwendung in einem Docker Container laufen lassen

2018-01-19T04:41:49Z

Um eine .NET Core Anwendung in Docker zu hosten, bedarf es natürlich eines installierten .NET Core, einer App (im Falle dieses Beitrags existiert eine Web API auf Basis .NET Core) und natürlich Docker. Für Tests am Desktop empfiehlt sich, die Docker Community Edition zu installieren. Im nächsten Schritt muss dem .NET Core Projekt ein Dockerfile […] The post .NET Core Anwendung in einem Docker Container laufen lassen appeared first on Norbert Eder. Um eine .NET Core Anwendung in Docker zu hosten, bedarf es natürlich eines installierten .NET Core, einer App (im Falle dieses Beitrags existiert eine Web API auf Basis .NET Core) und natürlich Docker. Für Tests am Desktop empfiehlt sich, die Docker Community Edition zu installieren. Im nächsten Schritt muss dem .NET Core Projekt ein Dockerfile hinzugefügt werden. Dabei handelt es sich eine Datei mit Instruktionen, welches Basis-Image herangezogen werden soll, welche Dateien auf das neu zu erstellende Image gepackt werden sollen und einigen Informationen mehr. Hier ein Beispiel für ein Dockerfile: # Stage 1 FROM microsoft/aspnetcore-build AS builder WORKDIR /source # Copy csproj and restore as distinct layers COPY *.csproj ./ RUN dotnet restore # Copy everything else and build COPY . . RUN dotnet publish --output /app/ --configuration Release # Build runtime image FROM microsoft/aspnetcore WORKDIR /app COPY --from=builder /app . EXPOSE 5000 ENTRYPOINT ["dotnet", "MeinDotnetCoreProjekt.dll"] Im Docker-Hub stehen relevante Images von Microsoft bereit: microsoft/dotnet microsoft/aspnetcore Von den Images gibt es unterschiedliche Ausprägungen mit unterschiedlichem Tooling. Darauf ist zu achten. Program.cs anpassen Standardmäßig läuft ASP.NET Core unter http://localhost:5000. Das ist für Tests am eigenn Rechner in Ordnung. In einem Docker-Container würde dies jedoch bedeuten, dass nicht am öffentlichen Port gelauscht wird, Anfragen also nicht angenommen werden. Deswegen ist sicherzustellen, dass auf allen Interfaces gelauscht wird: public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup() .UseUrls("http://*:5000") .Build(); Das wäre nun alles. Docker Container erstellen Zuerst müssen wir ein eigenes Image erstellen: docker build -t UnsereDemoApp . Der Aufruf sollte aus dem Verzeichnis vorgenommen werden, in dem auch das Dockerfile liegt. Dieses wird eingelesen, validiert und bei Erfolg das neue Image restellt. Dieses muss mit unserem definierten Tag UnsereDemoApp in der Liste der Images aufgeführt werden. Diese können mittels docker images abgerufen werden. Aus diesem Image kann nun ein neuer Container erstellt werden. Ein Container besitzt einen eindeutigen Namen. Bei keiner Angabe erstellt Docker einen Namen für uns. docker run -d -p 5000:5000 UsereDemoApp Zu beachten ist, dass mit der Option -d der Container in einem Detached Modus läuft, d.h. wir erhalten keine Meldungen/Ausgabe. Durch -p 5000:5000 wird der lokale Port 5000 auf den Port 5000 des Containers gemappt. Deswegen kann am Host-Computer per http://localhost:5000 auf das Service im Container zugegriffen werden. Ein entsprechender Zugriff auf einen vorhandenen Endpunkt sollte das gewünschte Ergebnis bringen. Hilfreiche Befehle Ausgabe der laufenden Container: docker container Einen Container stoppen docker container stop [name] EInen Container entfe[...]



NuGet, Cache and some more problems

2017-11-27T00:00:00Z

Recently I had some problems using NuGet, two of them were huge, which took me a while to solve them. But all of them are easy to fix, if you know how to do it. NuGet Cache The fist and more critical problem was related to the NuGet Cache in .NET Core projects. It seems the underlying problem was a broken package in the cache. I didn't find out the real reason. Anyway, every time I tried to restore or add packages, I got an error message, that told me about an error at the first character in the project.assets.json. Yes, there is still a kind of a project.json even in .NET Core 2.0 projects. This file is in the "obj" folder of a .NET Core project and stores all information about the NuGet packages. This error looked like a typical encoding error. This happens often if you try to read a ANSI encoded file, from a UTF-8 encoded file, or vice versa. But the project.assets.json was absolutely fine. It seemed to be a problem with one of the packages. It worked with the predefined .NET Core or ASP.NET Core packages, but it doesn't with any other. I wasn't able anymore to work on any .NET Core projects that targets .NET Core, but it worked with projects that are targeting the full .NET Framework. I couldn't solve the real problem and I didn't really want to go threw all of the packages to find the broken one. The .NET CLI provides a nice tool to manage the NuGet Cache. It provides a more detailed CLI to NuGet. dotnet nuget --help This shows you tree different commands to work with NuGet. delete and push are working on the remote server to delete a package from a server or to push a new package to the server using the NuGet API. The third one is a command to work with local resources: dotnet nuget locals --help This command shows you the help about the locals command. Try the next one to get a list of local NuGet resources: dotnet nuget locals all --list You can now use the clear option to clear all caches: dotnet nuget locals all --clear Or a specific one by naming it: dotnet nuget locals http-cache --clear This is much more easier than searching for all the different cache locations and to delete them manually. This solved my problem. The broken package was gone from all the caches and I was able to load the new, clean and healthy ones from NuGet. Versions numbers in packages folders The second huge problem is not related to .NET Core, but to classic .NET Framework projects using NuGet. If you also use Git-Flow to manage your source code, you'll have at least to different main branches: Master and Develop. Both branches contain different versions. Master contains the current version code and Develop contains the next version code. It is also possible that both versions use different versions of dependent NuGet packages. And here is the Problem: Master used e. g. AwesomePackage 1.2.0 and Develop uses AwesomePackage 1.3.0-beta-build54321 Both versions of the code are referencing to the AwesomeLib.dll but in different locations: Master: /packages/awesomepackage 1.2.0/lib/net4.6/AwesomeLib.dll Develop: /packages/awesomepackage 1.3.0-beta-build54321/lib/net4.6/AwesomeLib.dll If you now release the Develop to Master, you'll definitely forget to go to all the projects to change the reference paths, don't you? The build of master will fail, because this specific beta folder wont exist on the server, or even more bad: The build will not fail because[...]



Bootstrap 4: Ersatz für die Glyphicons

2018-01-19T04:41:49Z

Mit Version 4 wurde in Bootstrap ordentlich aufgeräumt. Unter anderem werden die Glyphicons nicht mehr mitgeliefert. Diese müssen nun ab sofort manuell eingebunden werden. Als Alternative bieten sich auch andere Icon Fonts an. Weit verbreitet und auch von mir immer wieder gerne benutzt ist Font Awesome. Sehr cool an Font Awesome ist: Font Awesome is […]

The post Bootstrap 4: Ersatz für die Glyphicons appeared first on Norbert Eder.

Mit Version 4 wurde in Bootstrap ordentlich aufgeräumt. Unter anderem werden die Glyphicons nicht mehr mitgeliefert. Diese müssen nun ab sofort manuell eingebunden werden. Als Alternative bieten sich auch andere Icon Fonts an.

Weit verbreitet und auch von mir immer wieder gerne benutzt ist Font Awesome. Sehr cool an Font Awesome ist:

Font Awesome is fully open source and is GPL friendly. You can use it for commercial projects, open source projects, or really just about whatever you want.

Auch eine Nennung ist nicht notwendig – ist aber nur fair.

Ich verwende Bootstrap nun zusammen mit Angular. Damit Font Awesome genutzt werden kann, sind diese zwei Abhängigkeiten im package.json einzutragen:

"font-awesome": "^4.7.0",
"angular-font-awesome": "^3.0.3"

Nach der Installation der der Pakete via npm install muss das Angular-Modul bekannt gemacht werden. Für die nachfolgende Variante muss Angular-CLI verwendet werden.

import { AngularFontAwesomeModule } from 'angular-font-awesome';

@NgModule({
  ...
  imports: [
    ...
    AngularFontAwesomeModule,
    ...
  ]
})

In der Datei angular-cli.json ist nun noch das Style-Sheet einzutragen:

"styles": [
  ...
  "../node_modules/font-awesome/css/font-awesome.min.css"
]

Nun noch ng serve neu starten und schon kann Font-Awesome verwendet werden.

Wer Bootstrap auf Version 4 migrieren möchte, bekommt hier ausführliche Informationen. Für ausführliche Informationen zu angular-font-awesome empfehle ich einen Blick ins README.

Happy Coding!

The post Bootstrap 4: Ersatz für die Glyphicons appeared first on Norbert Eder.




Einführung in React, Folge 4: Der Komponenten-Lebenszyklus

2017-11-20T11:22:05+01:00

Komponenten in React durchlaufen einen komplexen Lebenszyklus, der es ermöglicht, das Verhalten einer Komponente zu verschiedenen Zeitpunkten detailliert zu steuern. Wie funktioniert das, und worauf gilt es dabei zu achten?



News von der österreichischen PowerShell Community

2018-01-19T04:41:49Z

Auch wenn der Experts Live Country Event mit über 100 Besuchern den Großteil der Zeit in Anspruch nahm, so war doch auch am Powershell Blog einiges los:Auch wenn der Experts Live Country Event mit über 100 Besuchern den Großteil der Zeit in Anspruch nahm, so war doch auch am Powershell Blog einiges los: Unterschied Foreach und Foreach-Object:  http://www.powershell.co.at/powershell-foreach-vs-foreach-object/ Schnipseljagd 41/17 mit den Themen: String mittels SHA Key verschlüsseln Bericht über die Client DNS Einstellungen von mehreren Maschinen World War Z ? – besser nur „Z Windows EventLogs auf einen SQL Server schreiben PowerShell Remoting scheitert an „Public“ Netzwerken PowerShell lernen mit dem PowerShell History Viewer in ADAC Schnipseljagd 42/17 mit den Themen: Azure Resource Manager Azure als Verzeichnis Programme die ein PFE nutzt PowerShell und Arrays Tipps und Tricks mit Visual Studio Code Scripte digital signieren Schnipseljagd 43/17 mit den Themen: Netzwerk Verbindungsprofil ändern Bist Du mein Typ ? – PowerShell Typen sollte man wirklich im Griff haben! Bildschirmauflösung auslesen Interessante News auf dem PowerShell Engineering Blog ! Schnipseljagd 44/17 mit den Themen: Digitales Signieren von PowerShell Scripten Bypass Application Whitelistening Die Verwendung von Objekten Suchen in Base-64 Strings Vermeidung von unabsichtlichem F5 Daten verschlüsseln Euer Team der PS Usergroup Austria [...]



Docker Roadshow in Frankfurt & München

2018-01-19T04:41:49Z

Einladung zur Docker MTA Roadshow Warum Sie traditionelle Applikationen modernisieren sollten. IT-Organisationen geben weiterhin 80% ihres Budgets aus um ihre bestehenden Applikationen Aufrecht zu erhalten und nur 20% des Budgets für neue Innovationen. Gemeinsam zeigen Docker und HPE wie sie mit dem Programm „Modernisierung von traditionellen Applikationen“ dazu beitragen können, diese 80% zu eliminieren und... Einladung zur Docker MTA Roadshow Warum Sie traditionelle Applikationen modernisieren sollten. IT-Organisationen geben weiterhin 80% ihres Budgets aus um ihre bestehenden Applikationen Aufrecht zu erhalten und nur 20% des Budgets für neue Innovationen. Gemeinsam zeigen Docker und HPE wie sie mit dem Programm „Modernisierung von traditionellen Applikationen“ dazu beitragen können, diese 80% zu eliminieren und Ihnen somit ermöglicht wird mehr auf Innovationen setzen zu können. Dieses schlüsselfertige Programm garantiert mehr als 50% Einsparungen bei den gesamten IT-Kosten und bietet gleichzeitig moderne Sicherheits-, Portabilitätseigenschaften und einen Weg zu Hybrid IT & DevOps. Was können Sie erwarten? ·         Informative Sessions, Demos, praktische Tips und nützliche Tools - von den vertrauenswürdigsten Namen im Geschäft. ·         Gewinnen Sie Einblick in das MTA-Programm und wie Sie loslegen können. ·         Eauchen Sie in die ROI-Analyse ein und wie man einen Business Case macht. Wer sollte teilnehmen? IT-Operations - und IT-Infrastruktur-Manager, IT-Direktoren, CIOs und CTOs, die daran interessiert sind, zu verstehen, wie Docker dazu beitragen kann, ältere Anwendungen zu verwandeln und bestehende Anwendungen zu modernisieren. Agenda Vormittag ·         08:00 - 09:00 Breakfast & Networking ·         09:00 - 09:05 Welcome & Opening ·         09:05 - 09:35 What is Docker & Why MTA ·         09:35 - 09:50 Q&A ·         09:50 - 10:00 Break ·         10:00 - 12:00 Hands-On Demo - Specific MTA Use Case ·         12:00 - 13:00 Lunch & Networking Nachmittag ·         13:00 - 13:30 Partner presentation ·         13:30 - 13:45 Partner presentation Q&A ·         13:45 - 14:15 How to measure and track progress during MTA ·         14:15 - 14:30 Break ·         14:30 - 16:00 Hands-On Demo - Expand & Growth ·         16:00 - 16:15 Day review ·         16:15 - 17:00 Q&A & Mingle Docker Roadshow Frankfurt Hier registrieren » Datum: 28. November 2017 08:00 - 17:00 Tagungsort: Radisson Blu Hotel Franklinstraße 65, 60486 Frankfurt am Main   Docker Roadshow Munich Hier registrieren » Datum: 30. November 2017 08:00 - 17:00 Tagungsort: Le Méridien Bayerstraße 41, 80335 München [...]



IEC 61131-3: Unit-Tests

2018-01-19T04:41:49Z

Unit-Tests sind ein unentbehrliches Hilfsmittel für jeden Programmierer, um die Funktionsfähigkeit seiner Software sicherzustellen. Programmfehler kosten Zeit und Geld, daher benötigt man eine automatisierte Lösung, um diesen Fehlern auf die Spur zu kommen – und zwar möglichst bevor die Software zum Einsatz kommt. Unit-Tests sollten überall dort eingesetzt werden, wo professionell Software entwickelt wird. Dieser […]Unit-Tests sind ein unentbehrliches Hilfsmittel für jeden Programmierer, um die Funktionsfähigkeit seiner Software sicherzustellen. Programmfehler kosten Zeit und Geld, daher benötigt man eine automatisierte Lösung, um diesen Fehlern auf die Spur zu kommen – und zwar möglichst bevor die Software zum Einsatz kommt. Unit-Tests sollten überall dort eingesetzt werden, wo professionell Software entwickelt wird. Dieser Artikel soll einen schnellen Einstieg und ein Verständnis für den Nutzen der Unit-Tests ermöglichen. Motivation Häufig werden für das Testen von Funktionsblöcken separate Testprogramme geschrieben. In solch einem Testprogramm wird eine Instanz des gewünschten Funktionsblock angelegt und aufgerufen. Dabei werden die Ausgangsvariablen beobachtet und manuell auf Korrektheit geprüft. Stimmen diese nicht mit den erwarteten Werte überein, so wird der Funktionsblock solange angepasst, bis der Funktionsblock das gewünschte Verhalten aufweist. Doch mit dem einmaligen Testen von Software ist es nicht getan. So führen Änderungen oder Erweiterungen an einem Programm immer wieder dazu, dass Funktionen oder Funktionsblöcke, die zuvor ausgetestet wurden und fehlerfrei funktionierten, plötzlich nicht mehr korrekt arbeiten. Auch kommt es vor, dass sich die Behebung von Programmfehlern auch auf andere Programmteile auswirkt und somit an anderen Stellen im Code zu Fehlfunktionen führen kann. Die zuvor ausgeführten und abgeschlossenen Tests müssen somit manuell wiederholt werden. Ein mögliche Herangehensweise für eine Verbesserung dieser Arbeitsweise besteht darin, die Tests zu automatisieren. Dazu wird ein Test-Programm entwickelt, welches die Funktionalität des zu testenden Programms aufruft und die Rückgabewerte überprüft. Ein einmal geschriebenes Testprogramm bietet eine Reihe von Vorteilen: – Die Tests sind automatisiert und mit gleichen Rahmenbedingung (Timings, ..)  somit jederzeit wiederholbar. – Einmal geschriebene Tests bleiben auch für andere Mitglieder des Teams erhalten. Unit-Tests Ein Unit-Test prüft einen sehr kleinen und autarken Teil (Unit) einer Software. In der IEC 61131-3 ist dieses ein einzelner Funktionsblock oder eine Funktion. Bei jedem Test wird die zu testende Einheit (Funktionsblock, Methode oder Funktion) mit Testdaten (Parametern) aufgerufen und deren Reaktion auf diese Testdaten geprüft. Stimmt das gelieferte Ergebnis mit dem erwarteten Ergebnis überein, so gilt der Test als bestanden. Ein Test besteht im Allgemeinen aus einer ganzen Reihe von Testfällen, die nicht nur ein Soll-Ist-Paar prüft, sondern gleich mehrere. Welche Test-Szenarien der Entwickler implementiert, bleibt ihm überlassen. Sinnvoll ist es aber mit Werten zu testen, die typischerweise auch bei deren Aufruf in der Praxis auftreten. Auch die Betrach[...]



.NET 4.7.1 erkennen

2017-11-19T15:40:45+01:00

Mit dem Erscheinen von .NET Framework 4.7.1 am 19. Oktober 2017 ist eine neue .NET-Version hinzugekommen.



Einladung: Mobile Industry Solutions

2018-01-19T04:41:49Z

­ ­ ­ ­ MOBILE INDUSTRY SOLUTIONS 23. November 2017 | Microsoft Österreich, Wien ­ ­ ­ ­ ­ In letzter Zeit werden wir immer wieder gefragt: Wohin geht die Reise in der mobilen Welt? Welche Entwicklungsplattformen und Technologien sollen genutzt werden? Ein Framework – Das kostet doch nur Performance? Wie verwalten wir die mobilen Endgeräte?... ­ ­ ­ ­ MOBILE INDUSTRY SOLUTIONS 23. November 2017 | Microsoft Österreich, Wien ­ ­ ­ ­ ­ In letzter Zeit werden wir immer wieder gefragt: Wohin geht die Reise in der mobilen Welt? Welche Entwicklungsplattformen und Technologien sollen genutzt werden? Ein Framework – Das kostet doch nur Performance? Wie verwalten wir die mobilen Endgeräte? Welche mobilen Endgeräte sind mit welchem Betriebssystem verfügbar? Auf diese und weitere Fragen werden OPAL und Microsoft am 23. November 2017 Antworten geben. 23. November 2017, 9.00 bis 15.30 Uhr Microsoft Österreich Am Euro Platz 3 1120 Wien ­ ­ ­ ­ ­ ­ ­ ­ AGENDA 09.00 Uhr Begrüßung und kurze Vorstellung der OPAL (Johannes M. Driessen) 09.15 Uhr Microsoft: „Mobile Development mit Microsoft" (Gerwald Oberleitner) 10.00 Uhr Pause 10.20 Uhr OPAL: „OPAL Mobile Solutions – Erfahrungsbericht aus einem Projekt – wie wir heute mobile Anwendungen entwickeln" (Rony Sieber) 11.15 Uhr SOTI: „Soti One – Neue Funktionen mit MobiControl 14" (Friedel Siever) 12.00 Uhr Pause 12.20 Uhr Zebra: „Mind the gap: Rugged devices and Enterprise Android" (Pietro F. Maggi) 13.00 Uhr Honeywell: „Für die Zukunft bestens aufgestellt – Mit der skalierbaren Honeywell Mobility Edge-Plattform Hardware und Software einfach und kostengünstig implementieren" (Ralph Theile) 13.45 Uhr Mittagessen & Networking ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ Wir gehen auf die Entwicklung von Applikationen, Security-Themen, Softwareverteilung und Mobile Device Management ein. Sie sehen aktuelle Projektlösungen, Do’s and Dont’s sowie best practice Ansätze. Zudem bieten wir Ihnen die Möglichkeit, sich ein Bild von den neuesten technischen Endgeräten zu machen. Unsere Partner Honeywell, SOTI und Zebra sind ebenfalls vor Ort, um über ihre Lösungsansätze zu berichten. Hier können Sie sich für „Mobile Industry Solutions“ anmelden*. Es sind nur noch wenige Plätze verfügbar. Da die Plätze begrenzt sind, können wir eine Teilnahme an diesem Event nicht garantieren. Sie erhalten nach Ihrer Anmeldung gesondert eine Zusage per Mail. ­ ­ ­ ­ ­ ­ ­ ­ ­ *die Teilnahme ist für Sie kostenlos. Bei Nichterscheinen wird ein Betrag von 149.- Euro fällig, sofern Sie sich nicht bis zum 13.11.2017 schriftlich abgemeldet haben. ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­   ­ ­ ­ ­ [...]



Neues Buch zu Windows PowerShell 5.1 und PowerShell Core 6.0

2017-11-08T11:02:28+01:00

Die Neuauflage von Holger Schwichtenbergs Fachbuch zur PowerShell behandelt nun neben der Windows PowerShell auch die plattformunabhängige PowerShell Core.



Einführung in React, Folge 3: Eingaben verarbeiten

2017-11-02T10:52:07+01:00

Mit React Eingaben zu verarbeiten ist auf den ersten Blick gar nicht so einfach, denn React kennt zwei Arten von Komponenten, deren Zustandsverwaltung voneinander abweicht. Außerdem gilt es zu steuern, wie Events verteilt werden. Wie funktioniert das?



Herbst Update der österreichischen PowerShell Community

2018-01-19T04:41:49Z

Hallo PowerShell Gemeinde! Auch im letzten Monat war einiges los bei uns Künftige Veranstaltungen Experts Live Country Event, 7.11.2017, Microsoft Österreich, http://www.expertslive.at/konferenz.html Experts Live Café Event Linz, 31. Jänner 2018 Experts Live Café Event Wien, 21. März 2018 Vergangene Veranstaltungen Wir hatten 2 sehr spannende und gut besuchte Veranstaltungen. Eine in Wien bei ETC und...Hallo PowerShell Gemeinde! Auch im letzten Monat war einiges los bei uns Künftige Veranstaltungen Experts Live Country Event, 7.11.2017, Microsoft Österreich, http://www.expertslive.at/konferenz.html Experts Live Café Event Linz, 31. Jänner 2018 Experts Live Café Event Wien, 21. März 2018 Vergangene Veranstaltungen Wir hatten 2 sehr spannende und gut besuchte Veranstaltungen. Eine in Wien bei ETC und eine in Linz/Leondig bei Cubido. · Experts Live Café Wien September · Experts Live Café Linz Oktober Newsletter - die "Schnipseljagd" Unsere wöchentlichen PowerShell Newsletter kamen regelmäßig raus und beinhalteten folgende Themen: http://www.powershell.co.at/powershell-schnipseljagd-4217/ ARM – Azure Ressource Manager Azure als Verzeichnis? – Natürlich mit PowerShell Programme die ein Microsoft Premier Field Engineer nutzt PowerShell und Arrays Tipps und Tricks für Visual Studio Code http://www.powershell.co.at/powershell-schnipseljagd-4117/ String mittels SHA Key verschlüsseln Bericht über die Client DNS Einstellungen von mehreren Maschinen World War Z ? – besser nur „Z Windows EventLogs auf einen SQL Server schreiben http://www.powershell.co.at/schnipseljagd-4017/ PowerShell Klass: Ein paar Gedanken und Infos zu PowerShell Klassen Eine Klasse erstellen Aufzählungen Klassen und Methoden Klassen und Konstruktoren – Teil 4 Klassen vs PS Object Azure PowerShell PowerShell Desired State Configuration (DSC) mit Composite Ressources PowerShell Cmdlets mit C# schreiben Ransomware Encrypting Data mit PowerShell Cmdlets http://www.powershell.co.at/powershell-schnipseljagd-3917/ Entfernen von inaktiven Benutzern aus AD-Gruppen WMI – etwas im Ozean von Namespaces finden Wie ipconfig sein sollte Was sind die größten Dateien auf meiner Festplatte ? Status von SMB v1 Software installieren und entfernen mit dem PowerShell Package Manager www.powershell.co.at/powershell-schnipseljagd-3817/ Und wieder Deepl VS Code Das liebe Updaten Managing Azure AD mit PowerShell – Step by step Produktiver mit Tomaten DevOps Change und Release Management Schreib’ Module! Hoffe es  war für dich etwas dabei!Die PowerShell UserGroup Austriawww.powershell.co.at [...]



Introducing Electron.NET - building Electron Desktop Apps with ASP.NET Core

2018-01-19T04:41:49Z

The last couple of weeks I worked with my buddy Gregor Biswanger on a new project called “Electron.NET“. As you might already guess: It is some sort of bridge between the well known Electron and .NET. If you don’t know what Electron is: It helps to build desktop apps written in HTML/CSS/Javascript The idea Gregor asked me a while ago if it is possible to build desktop apps with ASP.NET Core (or .NET Core in general) and - indeed - there are some ideas how to make it, but unfortunatly there is no “official” UI stack available for .NET Core. After a little chat we agreed that the best bet would be to use Electron as is and somehow “embed” ASP.NET Core in it. I went to bed, but Gregor was keen on to build a prototyp and he did it: He was able to launch the ASP.NET Core application inside the electron app and invoke some Electron APIs from the .NET World. First steps done, yeah! In the following weeks Gregor was able to “bridge” most Electron APIs and I could help him with the tooling via our dotnet-extension. Overview The basic functionality is not too complex: We ship a “standard” (more or less blank) Electron app Inside the Electron part two free ports are searched: The first free port is used inside the Electron app itself The second free port is used for the ASP.NET Core process The app launches the .NET Core process with ASP.NET Core port (e.g. localhost:8002) and injects the first port as parameter Now we have a Socket.IO based linked between the launched ASP.NET Core app and the Electron app itself - this is our communication bridge! At this point you can write your Standard ASP.NET Core Code and can communicate via our Electron.API wrapper to the Electron app. Gregor did a fabulous blogpost with a great example. Interested? This way! If you are interested, maybe take a look at the ElectronNET-Org on GitHub. The complete code is OSS and there are two demo repositories. No way - this is a stupid idea! The last days were quite intersting. We got some nice comments about the project and (of course) there were some critics. As far as I know the current “this is bad, because… “-list is like this: We still need node and Electron.NET is just a wrapper around Electron: Yes, it is. Perf will suck: Well… to be honest - the current startup time does really suck, because we not only launch the Electron stuff, but we also need to start the .NET Core based WebHost - maybe we will find a solution Starting a web server inside the app is bad on multiple levels because of security and perf: I agree, there are some ideas how to fix it, but this might take some time. There are lots of issues open and the project is pretty young, maybe we will find a solution for the above problems, maybe not. Final thoughts The interesting point for me is, that we seem to hit a nerf with this project: There is demand to write X-Plat desktop applications. We are looking for feedback - please share your opinion on the ElectronNET-GitHub-Repo or try it out :) Desktop is dead, long live the deskt[...]



Zeichen in Microsoft SQL Server ersetzen

2017-10-31T11:02:51+01:00

Während man für mehrere Zeichenersetzungen bisher mehrere verschachtelte Aufrufe der Replace()-Funktion brauchte, geht es seit Microsoft SQL Server 2017 effizienter mit der neuen Translate()-Funktion.



Generating Custom Code with the Angular CLI and Schematics

2018-01-19T04:41:49Z

p a { text-decoration: underline } Table of Contents This blog post is part of an article series. Part I: Generating Custom Code With The Angular CLI And Schematics Part II: Automatically Updating Angular Modules With Schematics And The CLI Part III: Extending Existing Code With The TypeScript Compiler API Since some versions, the Angular CLI uses a library called Schematics to scaffold building blocks like components or services. One of the best things about this is that Schematics allows to create own code generators too. Using this extension mechanism, we can modify the way the CLI generates code. But we can also provide custom collections with code generators and publish them as npm packages. A good example for this is Nrwl's Nx which allows to generated boilerplate code for Ngrx or upgrading an existing application from AngularJS 1.x to Angular. These code generators are called Schematics and can not only create new files but also modify existing ones. For instance, the CLI uses the latter to register generated components with existing modules. In this post, I'm showing how to create a collection with a custom Schematic from scratch and how to use it with an Angular project. The sources can be found here. In addition to this, you'll find a nice video with Mike Brocchi from the CLI-Team explaining the basics and ideas behind Schematics here. The public API of Schematics is currently experimental and can change in future. Goal To demonstrate how to write a simple Schematic from scratch, I will build a code generator for a Bootstrap based side menu. With an respective template like the free ones at Creative Tim the result could look like this: Before creating a generator it is a good idea to have an existing solution that contains the code you want to generate in all variations. In our case, the component is quite simple: import { Component, OnInit } from '@angular/core'; @Component({ selector: 'menu', templateUrl: 'menu.component.html' }) export class MenuComponent { } In addition to that, the template for this component is just a bunch of html tags with the right Bootstrap based classes -- something I cannot learn by heart what's the reason a generator seems to be a good idea: In addition to the code shown before, I want also have the possibility to create a more dynamic version of this side menu. This version uses an interface MenuItem to represent the items to display: export interface MenuItem { title: string; iconClass: string; } A MenuService is providing instances of MenuItem: import { MenuItem } from './menu-item';[...]



GraphiQL for ASP.​NET Core

2017-10-26T00:00:00Z

One nice thing about blogging is the feedback from the readers. I got some nice kudos, but also great new ideas. One idea was born out of a question about a "graphi" UI for the GraphQL Middleware I wrote some months ago. I never heard about "graphi", which actually is "GraphiQL", a generic HTML UI over a GraphQL endpoint. It seemed to be something like a Swagger UI, but just for GraphQL. That sounds nice and I did some research about that. What is GraphiQL? Actually it is absolutely not the same as Swagger and not as detailed as Swagger, but it provides a simple and easy to use UI to play around with your GraphQL end-point. So you cannot really compare it. GraphiQL is a React component provided by the GraphQL creators, that can be used in your project. It basically provides an input area to write some GraphQL queries and a button to sent that query to your GrapgQL end-point. You'll than see the result or the error on the right side of the UI. Additionally it provides some more nice features: A history of sent queries, which appears on the left side, if you press the history-button. To reuse previously used queries. It rewrites the URL to support linking to a specific query. It stores the query and the variables in the URL, to sent it to someone else, or to bookmark the query to test. It actually creates a documentation out of the GraphQL end-point. By clicking at the "Docks" link it opens a documentation about the types used in this API. This is really magic, because it shows the documentation of a type I never requested: Implementing GraphiQL The first idea was to write something like this by my own. But it should be the same as the existing GraphiQL UI. Why not using the existing implementation? Thanks to Steve Sanderson, we have the Node Services for ASP.NET Core. Why not running the existing GraphiQL implementation in a Middleware using the NodeServices? I tried it with the "apollo-server-module-graphiql" package. I called this small JavaScript to render the graphiql UI and return it back to C# via the NodeSerices: var graphiql = require('apollo-server-module-graphiql'); module.exports = function (callback, options) { var data = { endpointURL: options.graphQlEndpoint }; var result = graphiql.renderGraphiQL(data); callback(null, result); }; The usage of that script inside the Middleware looks like this: var file = _env.WebRootFileProvider.GetFileInfo("graphiql"); var result = await _nodeServices.InvokeAsync(file.PhysicalPath, _options); await httpCont That works great, but has one problem. It wraps the GraphQL query in a JSON-Object that was posted to the GraphQL end-point. I would need to change the GraphQlMiddleware implementation, because of that. The current implementation expects the plain GraphQL query in the POST body. What is the most useful approach? Wrapping the GraphQL query in a JSON object or sending the plain query? Any Ideas? What do you use? Please tell[...]



Deploy a hybrid Kubernetes Cluster to Azure Container Service

2018-01-19T04:41:49Z

Lately, I have been working a lot with Kubernetes as one (of many) solutions to run Docker containers in the cloud. Microsoft therefore offers Azure Container Service (ACS), a service to create and (partly) manage a Kubernetes cluster on Azure. You normally would deploy such a cluster via the Azure Portal or e.g. via the ...Lately, I have been working a lot with Kubernetes as one (of many) solutions to run Docker containers in the cloud. Microsoft therefore offers Azure Container Service (ACS), a service to create and (partly) manage a Kubernetes cluster on Azure. You normally would deploy such a cluster via the Azure Portal or e.g. via the Azure Command Line Interface. Here is a sample command: az acs create --orchestrator-type kubernetes --resource-group k8s-rg --name myk8scluster --generate-ssh-keys Unfortunately, you cannot customize all the properties of the Kubernetes deployment with this approach, e.g. if you want to place the cluster in an existing Azure Virtual Network (VNET) or if you want to run multiple node types within the cluster to be able to run Linux and Windows based images/pods in parallel. To achieve this, you must use the ACS engine which is a kind of “translator” between cluster configurations (which are provided in JSON format) and Azure Resource Manager templates. ACS Engine The ACS engine provides a convenient way to generate an ARM template that creates a Kubernetes cluster for you in Azure. The nice thing about it is, that you can influence a lot more properties of the cluster than you can do via the portal or CLI. But more on this later… If you execute the ACS engine, the resulting template created consists of all the resources, you need to run a cluster in Azure, e.g.: Availability Sets for Master and Agent nodes VMs / VM extensions NICs / VNET configurations Load Balancer etc. You can deploy the ARM template as you would deploy any other template to Azure by running a Powershell or CLI command, even via the portal. But let’s get to our sample, creating a hybrid Windows/Linux cluster… Hybrid Cluster With ACS Engine We will start by creating a cluster definition file… What it will create: 3 pods on Linux nodes, based on the current nginx image 3 pods on Windows nodes, based on the Windows Server Core / IIS image An external service for the nginx pods An external service for the IIS pods The important part of the deployment file is the node selection for the pods/containers. In lines 25/26, the template defines to select Linux-based nodes to deploy the nginx containers: nodeSelector:         beta.kubernetes.io/os: linux The same is done for the IIS deployment (lines 52/53): nodeSelector:      beta.kubernetes.io/os: windows These properties tell the Kubernetes cluster to create the nginx pods only on Linux and the IIS pods on Windows nodes, magic! After some time (give it a few “seconds”, the image of the IIS pods is about 5 GB!), you will be able to qu[...]



Buch "Moderne Datenzugriffslösungen mit Entity Framework Core 2.0: Datenbankprogrammierung mit .NET/.NET Core und C#"

2017-10-25T11:01:37+02:00

Das Buch behandelt auf rund 460 Seiten alle wichtigen Szenarien des Datenbankzugriffs mit Entity Framework Core 2.0 sowie zahlreiche Praxislösungen und Tipps.



Laden von 64Bit DLLs in 32Bit Anwendung mit Reflection

2018-01-19T04:41:49Z

Da könnte man sich fragen wozu man sowas braucht. Aber es gibt immer einen guten Grund und in meinem Fall ging es darum, das ich in einem T4 Template 64Bit DLLs laden musste und diese nach Benutzerdefinierten Attributen zu durchsuchen um dann eine passende Ausgabe zu erstellen. Leider gibt es die Konsolenanwendung mit der VisualStudio […]



.NET Core 2.0 and ASP.NET 2.0 Core are here and ready to use

2017-10-24T00:00:00Z

Recently I did a overview talk about .NET Core, .NET Standard and ASP.NET Core at the Azure Meetup Freiburg. I told them about .NET Core 2.0, showed the dotnet CLI and the integration in Visual Studio. Explained the sense of .NET Standard and why developers should take care about it. I also showed them ASP.NET Core, how it works, how to host and explained the main differences to the ASP.NET 4.x versions. BTW: This Meetup was really great. Well organized on a pretty nice and modern location. It was really fun to talk there. Thanks to Christian, Patrick and Nadine to organize this event :-) After that talk they asked me some pretty interesting and important questions: Question 1: "Should we start using ASP.NET Core and .NET Core?" My answer is a pretty clear YES. Use .NET Standard for your libraries, if you don't have dependencies to platform specific APIs (eg. Registry, drivers, etc.) even if you don't need to be x-plat. Why? Because it just works and you'll keep a door open to share your library to other platforms later on. Since .NET Standard 2.0 you are not really limited, you are able to do almost all with C# you can do with the full .NET Framework Use ASP.NET Core for new web projects, if you don't need to do Web Forms. Because it is fast, lightweight and x-plat. Thanks to .NET standard you are able to reuse your older .NET Framework libraries, if you need to. Use ASP.NET Core to use the new modern MVC framework with the tag helpers or the new lightweight razor pages Use ASP.NET Core to host your application on various cloud providers. Not only on Azure, but also on Amazon and Google: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/dotnet-core-tutorial.html https://aws.amazon.com/blogs/developer/running-serverless-asp-net-core-web-apis-with-amazon-lambda/ https://codelabs.developers.google.com/codelabs/cloud-app-engine-aspnetcore/#0 https://codelabs.developers.google.com/codelabs/cloud-aspnetcore-cloudshell/#0 Use ASP.NET Core to write lightweight and fast Web API services running either self hosted, in Docker or on Linux, Mac or Windows Use ASP.NET Core to create lightweight back-ends for Angular or React based SPA applications. Use .NET Core to write tools for different platforms As an library developer, there is almost no reason to not use the .NET Standard. Since .NET Standard 2.0 the full API of the .NET Framework is available and can be used to write libraries for .NET Core, Xamarin, UWP and the full .NET Framework. It also supports to reference full .NET Framework assemblies. The .NET Standard is an API specification that need to be implemented by the platform specific Frameworks. The .NET Framework 4.6.2, .NET Core 2.0 and Xamarin are implementing the .NET Standard 2.0, which means they all uses the same API (namespaces names, class names, method names). Writing libraries against the .NET Standard 2.0 API will run on .NET Framework[...]



Was tun, wenn die Xamarin App während der iOS Store Prüfung wegen einer Exception abgelehnt wird?

2018-01-19T04:41:49Z

Vermutlich jeder, der bereits eine App geschrieben hat, kennt dieses Gefühl der Ungeduld wenn man die letzten Features der App entwickelt. Man möchte einfach nur noch so schnell wie möglich fertig sein, um sein Werk endlich in den App-Store schieben zu können und es somit der Welt zu präsentieren. Während der letzte Schritt, nämlich das Deployment in den Store, unter Android relativ einfach ist, stellt es unter iOS eine echte Herausforderung dar.(image)



Hilfe! Xamarin iOS Simulator startet nicht und stürzt mit Fehler: 'A fatal error occured when trying to start the server' ab

2018-01-19T04:41:49Z

Ein schönes Feature der Enterprise Edition von Visual Studio ist die Darstellung des iOS Simulators unter Windows. Während man zum Debugging einer Xamarin iOS App den Simulator normalerweise auf dem Mac bedienen muss, auch wenn man das Debugging unter Windows gestartet hat, erlaubt die Enterprise Edition von Visual Studio die Bedienung des Simulators direkt unter Windows. Hat man sich einmal an diese Arbeitsweise gewöhnt, möchte man sie eigentlich nicht mehr missen.(image)



Überflüssige Leerzeichen in Microsoft SQL Server abschneiden

2017-10-20T11:01:40+02:00

Mit SQL Server 2017 führt Microsoft endlich die Trim()-Funktion ein, mit der man Leerzeichen am Beginn und am Ende einer Zeichenkette entfernen kann.



10 Jahre Open Space – meine Retrospektive

2018-01-19T04:41:49Z

Workshop-Tag: Seit ein paar Jahren gibt es die Möglichkeit, den Open Space um ein Tag Workshop zu erweitern – wenn einem die zwei Tage Nerdtalk nicht reichen  😉 Ich habe mich diesmal für Tensorflow: Programming Neural Networks mit Sören Stelzer entschieden – und es war großartig. Obwohl ein sehr schwieriges Thema (das Wort Voodoo ist öfter gefallen), ich … Continue reading 10 Jahre Open Space – meine RetrospektiveWorkshop-Tag: Seit ein paar Jahren gibt es die Möglichkeit, den Open Space um ein Tag Workshop zu erweitern – wenn einem die zwei Tage Nerdtalk nicht reichen  Ich habe mich diesmal für Tensorflow: Programming Neural Networks mit Sören Stelzer entschieden – und es war großartig. Obwohl ein sehr schwieriges Thema (das Wort Voodoo ist öfter gefallen), ich weiß jetzt genug über Machine Learning und Neuronale Netze, um mit dem Thema gut starten zu können. Ich formuliere es mal so: ich weiß jetzt, was ich weiß und vor allem, was ich nicht weiß und wie wir weiter machen müssen. Und mehr kann man von einem Workshop nicht erwarten. Zusätzlich finde ich, dass Sören eine sehr große Bereicherung für unsere Community ist, die sich genauso weiterentwickeln muss, wie die IT-Welt da draußen. Vielen Dank für dein Engagement! Eigentlich ein fetten Dank an alle Trainer, die sich bei Community-Events engagieren!! Erkenntnisse der nächsten 48 Stunden – geclustert: Agile datengetriebene Entwicklung – war meine eigene Session (das heißt, ich habe das Thema vorgeschlagen, war Themen-Owner aber das war’s dann auch mit den Pflichten). Ich wollte Tipps und Ideen dazu hören, wie man seine Arbeit nach scrum organisieren kann wenn man Themen beackert, wie Reporting, wo die Features auf große Menge Daten basieren. Es ist eine Sache, ein Testsetup für 2 möglichen Situationen zu schreiben und es ist eine ganz andere, die vielfalt der Situationen in Reporting zu beschreiben. Take-aways: wir werden damit leben müssen, dass unsere Features, Tests, Erwartungen eventual consistent sind  Wichtig ist, dass wir Annahmen treffen, die wir für den Anfang als “die Wahrheit” betrachten. User labs beauftragen. Measurements weit vor ihre Auswertung einzubauen ist ok, bricht nicht mit dem Konzept “Jedes Feature muss Business Value haben” – auch wenn der echte Business Value erst in 2 Jahren auswertbar ist. Aha-Effekt: In der Welt von Business Teams gibt es keine Fachabteilung. Ich bin in dem Reporting-Team ergo ich bin die Fachabteilung. (finde ich gut, häßliches Wort  ) Stolperfallen mit React – unser Internationalisierungskonzept ist richtig (Texte aufteilen nach Modulen/Bereiche/o.ä., ein common Bereich, alles via API in den State laden) Package-Empfehlung:[...]



Workshop: Conquer your Codebase – Bewährter Clean Code aus der Praxis (Materialien)

2018-01-19T04:41:49Z

Einen herzlichen Dank an alle Teilnehmer des Workshops am vergangenen Freitag beim Developer Open Space 2017. Trotz des völlig unterschiedlichen Backgrounds – von Ruby, über PHP, zu Java oder gar nicht objektorientierte Sprachen wie JavaScript – war ebenso alles vertreten wie vom Azubi bis hin zum Entwickler mit 20-jähriger Berufserfahrung. Den Code zur Super Mario …Einen herzlichen Dank an alle Teilnehmer des Workshops am vergangenen Freitag beim Developer Open Space 2017. Trotz des völlig unterschiedlichen Backgrounds – von Ruby, über PHP, zu Java oder gar nicht objektorientierte Sprachen wie JavaScript – war ebenso alles vertreten wie vom Azubi bis hin zum Entwickler mit 20-jähriger Berufserfahrung. Einer von vielen mutigen Freiwilligen Den Code zur Super Mario Kata gibt es hier. Beachtet die neuen Anforderungen (9-12), die ich auf dem Heimweg im Zug noch hinzugefügt habe. Damit einhergehend habe ich noch ein Refactoring des Konzepts ‚Leben‘ durchgeführt, sodass keine Actions bzw. Funcs mehr an die Methoden übergeben werden müssen. Gleichfalls fällt das Branching-Statement raus und es ergibt sich eine nahezu völlig flexible Möglichkeit zur Erstellung von Spielmodi. Die Tests sind nun ebenfalls alle umgesetzt, was wir gegen Ende hin aufgrund von Zeitmangel ausgelassen haben. Eine Testmethode hat in der Regel eine Zeile und wie schon im Workshop erwähnt: Was gut zu testen ist, ist in der Regel auch eine saubere Lösung. 20 Teilnehmer mit unterschiedlichen Backgrounds Derjenige, der noch eine Lösung mit dem Command-Pattern umsetzt und dadurch das Anpassen bestehender Klassen völlständig vermeidet, erhält von mir einen Gutschein für unsere Trainings. Damit kann er kostenlos an jedem beliebigen 3-tägigen Workshop in unseren Karlsruher Büros teilnehmen (Fahrt- und Übernachtungskosten sind ausgeschlossen). Alle, die über den Workshop bloggen oder twittern, erhalten darüber hinaus noch einen 30% Rabattcode. Einfach Link schicken, dann kriegt er diesen per Mail. Ein Teilnehmer versucht sich in einer Lösung mit Java statt C# Weiterführende Links Das erwähnte Video zu Enumeration mit Verhalten könnt ihr hier anschauen. Danke an Tim für den Link zum Case Converter für Visual Studio. Außerdem lege ich euch die Reactive Extensions ans Herz, die es für unterschiedliche, gängige Programmiersprachen gibt. Git Snippet Wer noch ein wenig üben möchte, kann dies mit der erweiterten FizzBuzz Kata tun. Blog Post über die Migration von NHibernate zu EntityFramework in 3 Tagen.   Demnächst geht ein Video mit dem theoretischen Teil (Why-How-What) online, in dem ich nochmal die Zusammenhänge zw. „schlechtem Code“ und den Gründen dafür erläutere. Wer automatis[...]



DDD und wolkenkit - live!

2017-10-16T11:31:39+02:00

In dieser Woche finden verschiedene Veranstaltungen wie Meetups und Konferenzen statt, auf denen es um Domain-Driven Design und das wolkenkit geht. Im Folgenden ein kurzer Überblick für alle Interessierten.