Subscribe: DotNetGerman Bloggers
http://blogs.dotnetgerman.com/mainfeed.aspx
Added By: Feedage Forager Feedage Grade B rated
Language: German
Tags:
angular  app  auf  build  code  core  das  die  eine  für  microsoft  mit  net core  net  nuget  project  und  von 
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



Copyright: Copyright 2004-2014 DotNetGerman.com
 



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

Wed, 13 Dec 2017 10:17:00 +0100

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

Tue, 12 Dec 2017 00:00:00 Z

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. 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('ROUTED_APP'); Then I'm using it to create a service provider for the RoutedApp class: import { RoutedApp } from 'meta-spa-router'; [...] @NgModule({ [...], providers: [{ provide: ROUTED_APP, useFactory: () => new RoutedApp() }], bootstrap: [AppComponent] }) export class AppModule { } In the AppComponent I'm getting hold of a RoutedApp instance by using dependency injection: // app.component.ts in routed app import { Router, NavigationEnd } from '@angular/router'; import { Component } from '@angular/core'; import { filter } from 'rxjs/operators'; import { RoutedApp } from 'meta-spa-router'; @Com[...]



Trying BitBucket Pipelines with ASP.NET Core

Fri, 08 Dec 2017 00:00:00 Z

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_NAME=WebApiDemo.Tests - dotnet restore - dotnet build $PROJECT_NAME - dotnet test $TEST_NAME If you don't have tests yet, comment the last line out by adding a #-sign in front of that line. After pressing "Commit file", this configuration file gets stored in the root of your repository, which makes it available for all the developers of that project. Let's try it After that config was saved, the build started immediately... and failed! Why? Beca[...]



DDC 2017 - Inhalte meiner Keynote, DevSession und Workshops

Sun, 03 Dec 2017 17:19:00 Z

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. Die Konferenz hat mal wieder unheimlich viel Spaß gemacht! Weiter geht ein riesig großer Dank an das Team von Developer Media, die mal wieder eine grandiose Konferenz auf die Beine gestellt haben.Bis zur DDC 2018 :) [...]



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

Fri, 01 Dec 2017 23:15:00 Z

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)



Automatically Updating Angular Modules with Schematics and the CLI

Fri, 01 Dec 2017 00:00:00 Z

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; } 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: Function Description addDeclarationToModule Adds a component, directive or pipe to the declarations array of an NgModule. If necessary, this array is created addExportToModule Adds an export to the NgModule There are also other methods that add entries to the other sections of an NgModule (addImportToModule, addProviderToModule, addBootstrapToModule). Please note, that those files are currently not part of the package's public API. Therefore, they can change in future. To be on the safe side, Hans Larsen from the Angular CLI Team suggested to fork it. My fork of the DevKit Repository containing those functions can be found here. After forking, I've copied the contents of the folder packages\schematics\angular\utility contai[...]



.NET Core Anwendung in einem Docker Container laufen lassen

Tue, 28 Nov 2017 21:06:51 Z

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.




NuGet, Cache and some more problems

Mon, 27 Nov 2017 00:00:00 Z

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 the folder of the old package still exists on the build server, because you didn't clear the build work space. This will result in runtime errors. This problem will probably happen more likely, if you provide your own packages using your own NuGet Server. I solved this by using a different NuGet client than NuGet. I use Paket, because it doesn't store the binaries in version specific folder and the reference path will be the same as long as the package name doesn't change. Using Paket [...]



Bootstrap 4: Ersatz für die Glyphicons

Thu, 23 Nov 2017 19:52:38 Z

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.




Letzter Beitrag im alten Gewand

Tue, 21 Nov 2017 16:19:03 Z

Liebe Leserschaft, im Rahmen der Erneuerung unserer Firmenwebseite www.aitgmbh.de wurde unser Blog www.tfsblog.de in die neue Webseite integriert: Dies hat zur Folge, dass der bestehende RSS Feed nicht mehr weitergepflegt wird. Im neuen Blog gibt es jedoch wieder die Möglichkeit verschiedenen Themenschwerpunkte zu abonnieren: RSS-Feed “Entwicklung” RSS-Feed “News” RSS-Feed “TFS / DevOps” RSS-Feed “VR / AR […]



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

Mon, 20 Nov 2017 11:14:00 +0100

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

Thu, 16 Nov 2017 06:30:00 Z

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:



Docker Roadshow in Frankfurt & München

Wed, 15 Nov 2017 11:14:17 Z

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...



IEC 61131-3: Unit-Tests

Tue, 14 Nov 2017 22:25:00 Z

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 […](image)



.NET 4.7.1 erkennen

Mon, 13 Nov 2017 11:00:00 +0100

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



Einladung: Mobile Industry Solutions

Fri, 10 Nov 2017 13:01:23 Z

­ ­ ­ ­ 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?...



Neu in TFS 2018: Neues für Build und Release Extensions

Fri, 10 Nov 2017 05:00:47 Z

Extensions bieten die Möglichkeiten den TFS um weitere Funktionalität an vordefinierten Stellen, sogenannten Extension Points, zu erweitern. Im Build- und Releasemanagement gibt es hierfür einige Anwendungsfälle: zusätzliche Menüeinträge an Build- und Release Definitionen, eigene Tasks, zusätzliche Informationen in Build- und Release Zusammenfassungen (Build- und Release Summary), u.v.m. In vorhergehenden Beiträgen unserer Blogserie “Neu in TFS […]



Neues Buch zu Windows PowerShell 5.1 und PowerShell Core 6.0

Wed, 08 Nov 2017 11:00:00 +0100

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

Thu, 02 Nov 2017 10:41:00 +0100

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

Thu, 02 Nov 2017 08:01:58 Z

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...



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

Tue, 31 Oct 2017 23:15:00 Z

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 desktop![...]



Zeichen in Microsoft SQL Server ersetzen

Tue, 31 Oct 2017 11:00:00 +0100

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

Sun, 29 Oct 2017 00:00:00 Z

p a { text-decoration: underline } 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'; export class MenuService { public items: MenuItem[] = [ { title: 'Home', iconClass: 'ti-home' }, { title: 'Other Menu Item', iconClass: 'ti-arrow-top-right' }, { title: 'Further Menu Item', iconClass: 'ti-shopping-cart'}, { title: 'Yet another one', iconClass: 'ti-close'} ]; } The component gets an instance of the service by the means of dependency injection: import { Component, OnInit } from '@angular/core'; import { menuItem } from './menu-item'; import { menuService } from './menu.service'; @Component({ selector: 'menu', templateUrl: './menu.component.html', providers:[MenuService] }) export class MenuComponent { items: MenuItem[]; constru[...]



Neu in TFS 2018: Erweiterungen der Pull Requests

Fri, 27 Oct 2017 04:00:29 Z

Damit der Code einer Software eine hohe Qualität aufweist sind regelmäßige Reviews Pflicht. Pull Requests (PR) bieten für Reviews eine tolle Plattform. Sie stellen eine Art Benachrichtigung dar, in der ein Verantwortlicher Anton eine andere Entwicklerin Berta darum bittet den neuen Code in den bestehenden zu integrieren. Entwicklerin Berta kann nun Feedback liefern und eine […]



Neu in TFS 2018: Jetzt auch mit Git-Forks

Thu, 26 Oct 2017 04:00:32 Z

Mit dem neuen Update halten Git-Forks im TFS 2018 Einzug. Egal ob es der Student oder der Kollege aus einer anderen Abteilung ist, welcher eine neue Funktion implementieren möchte und deshalb Zugriff auf mein Repository benötigt. Mögliche Anwendungsfälle für Git-Forks innerhalb von der TFS-Umgebung gibt es reichlich. Ich, als Besitzer eines Repository möchte nicht, dass […]



GraphiQL for ASP.​NET Core

Thu, 26 Oct 2017 00:00:00 Z

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 me by dropping a comment. With this approach I'm pretty much dependent to the Apollo developers and need to change my implementation, whenever they change their implementations. This is why I decided to use the same concept of generating the UI as the "apollo-server-module-graphiql" package but implemented in C#. This unfortunately doesn't need the NodeServices anymor[...]



Deploy a hybrid Kubernetes Cluster to Azure Container Service

Wed, 25 Oct 2017 13:59:39 Z

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 ...(image)



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

Wed, 25 Oct 2017 11:00:00 +0200

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

Tue, 24 Oct 2017 18:32:09 Z

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 […](image)



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

Tue, 24 Oct 2017 00:00:00 Z

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 2.0, on .NET Core 2.0, as well as on Xamarin and on every other platform specific Framework that supports that API. Question 2: Do we need to migrate our existing web applications to ASP.NET Core? My answer is: NO. You don't need to and I would propose to not do it if there's no good reason to do it. There are a lot blog posts out there about migrating web applications to ASP.NE[...]



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

Mon, 23 Oct 2017 06:28:37 +0200

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

Fri, 20 Oct 2017 16:28:37 +0200

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

Fri, 20 Oct 2017 11:00:00 +0200

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

Thu, 19 Oct 2017 09:46:43 Z

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 Retrospektive



WiX Heat XSL Transformation

Wed, 18 Oct 2017 04:00:43 Z

Mit Hilfe von Heat lässt sich die Fragmenterzeugung, welche ein Hauptbestandteil eines WiX Installers ist, automatisieren. Dies wurde bereits im Beitrag Automatische Fragmenterzeugung mit Heat gezeigt. Was aber, wenn die ein oder andere Datei im Installationsvorgang nicht kopiert werden soll oder der Component bzw. dem File noch Attribute hinzugefügt werden müssen? Das erzeugte Fragment manuell […]



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

Tue, 17 Oct 2017 18:57:46 Z

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 …(image)



DDD und wolkenkit - live!

Mon, 16 Oct 2017 11:26:00 +0200

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.



Neu in TFS 2018: Variable Groups für das Release Management

Mon, 16 Oct 2017 04:00:00 Z

Wer für große Umgebungen im Release Management bereits Variablen verwalten musste, weiß wie umfangreich diese werden können. Auch kann es vorkommen, dass Variablen über verschiedene Release Definitionen wiederverwendet werden. Dafür gibt es jetzt mit TFS 2018 Abhilfe in Form von Variable Groups. Eine Variable Group enthält dabei verschiedene Variablen. Diese können entweder im Klartext oder […]



Video zur PowerShell Core 6.0 auf Windows, Linux und Mac

Sun, 15 Oct 2017 19:04:00 +0200

Die Aufzeichnung eines Dotnet-Doktor-Vortrags von der CIM Lingen 2017 gibt es bei YouTube zu sehen.



Microsoft Teams Envisioning Workshop mit dem Produktteam

Fri, 13 Oct 2017 05:30:00 Z

Gemeinsam mit dem Produktteam aus den USA bieten wir Kunden und Partnern die Möglichkeit die Produktgruppe von Microsoft Teams persönlich in Wien kennenzulernen. Am Montag den 30. Oktober findet bei uns im Büro ein Microsoft Teams Envisioning Workshop statt wo sich interessierte Kunden und Partner über die Roadmap von Microsoft Teams erkundigen können. Diese Ganztagsveranstaltung ist eine tolle Gelegenheit sich mit technischen Experten aus der Microsoft Teams Produktgruppe persönlich zu vernetzen, die Erweiterbarkeit von Microsoft Teams kennenzulernen und sich über Ressourcen zu bzw. die Roadmap von Microsoft Teams zu informieren.



Sicherheitsupdates von Microsoft führen zu Problemen mit dem ODBC Export nach Excel

Thu, 12 Oct 2017 10:40:21 Z

Eigentlich habe ich nichts gegen Sicherheitsupdates. Genaugenommen bin ich ein Verfechter, dass Sicherheitsupdates sofort und umgehend installiert werden sollen. Eigentlich ging das die letzten Jahre bei unserer Software ziemlich gut. Aber heute hat es uns voll erwischt. Dazu auf allen Plattformen von Windows 7, Windows 8.1 bis Windows 10. Es kommt jetzt beim Anlegen einer […]



Connect(); 2017

Thu, 12 Oct 2017 08:35:17 Z

Neben der BUILD Konferenz ist die Connect(); die zweite wichtige Konferenz für Cloud & Software Entwicklungsthemen bei Microsoft. Die Connect(); 2017 wird von 15. bis 17 November stattfinden - nehmen Sie online Teil und erfahren Sie direkt vom Microsoft Azure und Visual Studio Produktteam die neuesten Entwicklungen und Industrietrends. "Save the Date" für Ihren Kalender.



Neu in TFS 2018: Secure Files Library

Thu, 12 Oct 2017 04:00:40 Z

In unserer Blog-Serie Neu in TFS 2018 wurden bereits Änderungen und auch Neuerungen präsentiert. In die Kategorie neuer Features reiht sich die Secure Files Library ein. Secure Files Library Bisher ließen sich im Build-Prozess ausschließlich die hinterlegten Variablen wie z.B. Passwörter verschlüsselt ablegen und waren ausschließlich im Build- und Release-Prozess verfügbar. Mit der Einführung vom TFS […]



Speicherplatz auf dem Mac optimieren für Xamarin Entwickler

Wed, 11 Oct 2017 19:18:17 +0200

Wer eine Weile auf dem Mac mit Xamarin gearbeitet hat, wird irgendwann feststellen, dass der Festplattenplatz knapp wird. Dann heißt es natürlich Aufräumen. Die Frage ist nur: Was kann weg? Bei mir war es gestern mal wieder so weit. Um herauszufinden, welche Dateien und Verzeichnisse besonders viel Platz benötigen, habe ich Daisy Disk genutzt. Das kleine Tool, das aktuell ca. 11 € kostet, zeigt übersichtlich an, welche Ordner und Dateien besonders speicherhungrig sind.(image)



DDD & Co., Teil 10: Hallo wolkenkit

Wed, 11 Oct 2017 10:46:00 +0200

Seit der vergangenen Folge ist der fachliche Code für TodoMVC vollständig. Allerdings fehlt der gesamte technische Rahmen, der die Funktionalität über eine REST- und WebSocket-API anbietet, die fachlichen Ereignisse persistiert und die Anwendung bei Bedarf skaliert. Das Open-Source-Framework wolkenkit schafft Abhilfe.



Meine Unterlagen von den Angular Days in Berlin, Oktober 2016

Wed, 11 Oct 2017 00:00:00 Z

Diese Woche habe ich drei Workshops auf den Angular Days in Berlin gemacht. Nachfolgend finden sich die Unterlagen dazu:




Neu in TFS 2018: Task Groups für Build und Release

Tue, 10 Oct 2017 04:00:52 Z

Mit TFS 2015 wurde ein komplett neues Build- und Releasemanagement-System eingeführt. Über einen Teil der enthaltenen Neuerungen, wie z.B. das Importieren und Exportieren von Builddefinitionen konnten Sie bereits in vorhergehenden Beiträgen unserer Blogserie lesen. In diesem Blogpost möchten wir Ihnen nun einen weiteren großen Schritt vorstellen, den Microsoft im Ausbau des neuen Systems geht: Task […]



Einführung in React, Folge 2: Ein tieferer Einblick

Mon, 09 Oct 2017 11:12:00 +0200

React basiert auf vielen Konzepten der funktionalen Programmierung. Besonders wichtig ist die Unveränderlichkeit von Datentypen, die in React die Grundlage für das effiziente Rendern der Anzeige bildet. Wie funktioniert das für eigenen Code, und worauf gilt es in JSX außerdem zu achten?



Berechtigungen für Fortgeschrittene – Berechtigungen in der Quellcode- verwaltung für Admins einschränken

Mon, 09 Oct 2017 04:00:51 Z

Bei Entwicklungsteams, welche im stark regulierten Umfeld tätig sind, entstehen an das Berechtigungskonzept für die Quellcodeverwaltung aus diversen Gründen spezielle Anforderungen. Eine Anforderung aus diesen Umfeld lautet beispielsweise: Ist es möglich einem Teil der TFS-Administratoren des Leserecht auf den Quellcode in einem besonders zu schützenden Bereich der Quellcodeverwaltung zu entziehen? Die Kurzfassung der Antwort lautet: […]



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

Sat, 07 Oct 2017 20:15:56 Z

Am Developer Open Space 2017 halt ich einen 1-tägigen Workshop zu obigem Thema. In reduzierter, kompakter Form werde ich dazu bewährte Inhalte aus meinem 3-tägigen Seminar nehmen und die Ursachen für folgende Probleme adressieren: Unverständlicher bzw. schlecht wartbarer Code Bugs Skalierungsprobleme Go Live Probleme Verpasste Deadlines und lange Entwicklungszeiten   Wir werden uns anschauen wie …(image)