entwickler.de https://entwickler.de PHP, JavaScript, Windows Development Thu, 16 Jan 2020 09:01:49 +0000 de-DE hourly 1 https://wordpress.org/?v=4.8.3 Auf dem Weg zu Angular 9: rc.9 mit Features und Bugfixes veröffentlicht https://entwickler.de/online/javascript/angular-9-news-579895784.html https://entwickler.de/online/javascript/angular-9-news-579895784.html#comments Thu, 16 Jan 2020 09:01:16 +0000 https://entwickler.de/?p=579895784 Das wichtigste zuerst: Angular 9 ist immer noch nicht da. Stattdessen ist mit v9.0.0-rc.9 ein weiterer Release Candidate veröffentlicht worden, der erneut Bugfixes und neue Features mitbringt.

Der Beitrag Auf dem Weg zu Angular 9: rc.9 mit Features und Bugfixes veröffentlicht ist auf entwickler.de erschienen.

]]>
Das wichtigste zuerst: Angular 9 ist immer noch nicht da. Stattdessen ist mit v9.0.0-rc.9 ein weiterer Release Candidate veröffentlicht worden, der erneut Bugfixes und neue Features mitbringt.

Angular 8 hat mit höflicher Verspätung im Juni das Licht der Welt erblickt. Doch nach dem Release ist vor dem Release und bereits im Herbst dieses Jahres sollte eigentlich Angular 9 auf dem Plan stehen, genauer: im Oktober oder November sollte es soweit sein. Schon zu Beginn des Jahres sah dies ambitioniert aus, das der neue Ivy Compiler dringend Teil des Releases werden sollte. Nun steht fest: Angular 9 verspätet sich drastischer, als zunächst angenommen.

Angular 9 … verspätet sich

Letzte Woche erschien mit Angular 9.0.0-rc.6 der siebte Release Candidate. Noch dazu ist es die Jahreszeit, in der wir auf Geschenke gefasst sind, kein Wunder also, dass man mit der Auslieferung eines Angular-förmigen Päckchens bereits fest gerechnet hat. Doch das Team von Angular besteht ebenfalls aus Menschen, die gerne bei ihren Familien und ihren Liebsten sein möchten. Verständlich, hat dieses Release doch bereits sehr viel an Kreativität, Kraft und Energie gekostet.

Deswegen hat Jules Kremer, Google Engineering Manager, gestern via Twitter angekündigt, das finale Release von Angular 9 auf das kommende Jahr zu verschieben. So wird nicht nur sichergestellt, dass das Release makellos ist, sondern auch, dass die Verantwortlichen im nächsten Jahr Kraft für das Jubiläums-Release Angular 10 haben werden.

Alle, die brennend auf die neue Angular-Version mit Ivy gewartet haben, werden jetzt wohl enttäuscht sein. Aber wenigstens können wir dann einem ereignisreichen und actiongeladenen Januar entgegenblicken – und so ein Kickstart ins nächste Jahrzehnt ist ja auch nicht das Verkehrteste. In der Zwischenzeit kann man sich über die Feiertage mit Manfred Steyers fantastischer Session von der International JavaScript Conference zum Thema „The Future of Angular and your Architectures with Ivy“ befassen:


Angular 9: Die Release Candidates

Angular 9.0.0-rc.9

Update vom 16. Januar 2020

Es geht weiter mit Release Candidates: Mit v9.0.0-rc.9 hat das Angular-Team erneut Bugfixes und Neuerungen an Features für das anstehende Major Release veröffentlicht. Die Zahl der behobenen Fehler ist erneut hoch, die Bugs befanden sich in unterschiedlichen Teilen des Frameworks. Ivy gehört natürlich dazu und hat neben Bugfixes un einer Feature-Änderung auch einige Performance-Verbesserungen erhalten. Zu den weiteren neuen Features am Release gehört, dass Währungscodes nun in den Locale-Daten gespeichert werden. Auch für den Language-Service gab es drei Neuerungen auf Feature-Ebene für diesen Release Candidate: Template-Referenz-Variablen können jetzt automatisch vervollständigt werden, gleiches gilt für die $event-Variable. Für Structural Directives steht jetzt außerdem eine Hoover-Definition zur Verfügung.

Weitere Informationen können wie immer dem Changelog auf GitHub entnommen werden.


Angular 9.0.0-rc.8

Update vom 9. Januar 2020

Angular 9 ist noch immer nicht da. Stattdessen wurde nun erneut ein Release Candidate für das anstehende Major Release veröffentlicht: Mit Angular 9.0.0-rc.8 wurden Bugs behoben, Features implementiert und eine Verbesserung an der Performance vorgenommen. Letzteres fand natürlich wieder im Bereich von Ivy statt. Der Template Type Checker des neuen Compilers kann nun mit einfachen Generic Type Constraints in lokalen Type Constructors umgehen. Auch Bugfixes gab es für Ivy, beispielsweise für TestBed und i18nExp. Zu den neuen Features im Release Candidate gehört, dass der Language Service nun in VS Code Definitionen über den Hoover-Effekt anzeigt, wenn dieser auf einem Property oder Selector liegt.

Weitere Informationen zum neuen Release Candidate können wie immer dem Changelog auf GitHub entnommen werden.


Angular 9.0.0-rc.7

Update vom 19. Dezember 2019

Auch wenn Angular 9 auf nächstes Jahr verschoben wurde, beginnt die Urlaubssaison für das Team noch nicht ganz: Auch in der Woche vor Weihnachten wird noch fleißig an der Performance des Frameworks und am Bugfixing gearbeitet. Doch auch ein paar kleinere neue Features wurden implementiert. Unter anderem wird nun ein Fehler in Ivy ausgegeben, wenn ein ctor von einer undekorierten Basis geerbt wird. Und Ivy wirft auch einen Compilation Error, wenn undekorierte Klassen bereitgestellt werden.

In Sachen Performance ging es natürlich ebenfalls um Ivy und den Standard-Compiler. Der Compiler verarbeitet nun schneller i18n-Berechnungen, Ivy auf der anderen Seite kann nun unter anderem Analysen, die während inkrementellen Builds erstellt wurden, wiederverwenden.


Angular 9.0.0-rc.6

Update vom 12. Dezember 2019

Die Zahl der Release Candidates für Angular 9 steigt. Nach RC.5 ist nun auch RC.6 erschienen. Behoben wurden erneut einige Bugs, außerdem hat der neuste Release Candidate zwei Performance-Verbesserungen an Ivy im Gepäck. Gearbeitet wurde für die Performance am Umgang mit Listener- und Styling-Instructions. Diese werden nun jeweils verknüpft, wenn mehrere davon vorhanden sind, damit weniger Code generiert werden muss. Bugfixes gab es außerdem nicht nur für Ivy, sondern auch für weitere Bereiche des Frameworks, wie den Kompatibilitäts-Compiler ngcc. Dort wurde unter anderem ein Fehler an der Bestimmung des Package Path behoben, sodass nun immer das Bundle rootDir verwendet wird.

Auch im vorherigen Release, Angular 9.0.0-rc.5, zeigte sich schon ein ähnliches Bild. Bugfixes und Performance standen im Fokus, nicht die Feature-Entwicklung. Angular 9 war für Ende 2019 angekündigt worden, ein finaler Release-Termin ist jedoch nicht bekannt.


Angular 9.0.0-rc.4

Update vom 21. November 2019

Ein weiterer Release Candidate von Angular 9 ist verfügbar. Mit Angular 9.0.0-rc.4 wurden erneut zahlreiche Fehler behoben, darunter viele an Ivy. Beispielsweise findet in AOT-kompilierten Komponenten nun kein Check auf unbekannte Komponenten zur Runtime mehr statt, da dies in manchen Fällen fehlschlug, obwohl die Überprüfung während des Kompilierens erfolgreich durchgeführt wurde. Aber auch andere Teile von Angular wurden verbessert, so beispielsweise der Kompatibilitäts-Compiler ngcc, an dem ebenfalls einige Fehler behoben wurden. ngcc stürzt nun beispielsweise nicht mehr ab, wenn Types als Array spezifiziert werden.

Der neuste Release Candidate von Angular 9 bringt außerdem zwei Feature-Neuerungen am Language-Service mit. Dort stehen nun Vervollständigungen für indexierte Types und Tuple Arrays zur Verfügung. Für die Performance gibt es ebenfalls News: drei Neuerungen an Ivy sollen Angular 9 schneller machen.

Weitere Informationen zum neuen Release Candidate können dem Changelog auf GitHub entnommen werden.


Angular 9.0.0-rc.3

Update vom 21. November 2019

Angular 9 hat einen weiteren Release Candidate erhalten. Die neuste Version, Angular 9.0.0-rc.3, bringt vornehmlich eine lange Reihe von Bugfixes mit. Aber auch zwei Feature-Updates und vier Performance-Verbesserungen für Ivy sind mit dabei. Zu letzteren gehört beispielsweise, dass Public Input Names nun nicht mehr an zwei Orten gespeichert werden und ein Micro-Benchmark für Directive Input Updates hinzugefügt wurde.

Ivy sticht auch unter den Bugfixes hervor: Insgesamt 17 Fehler am neuen Compiler wurden zu diesem Release Candidate behoben. Darunter sind zwei Neuerungen für den i18n-Bereich, wo nun das Zeichen : in $localize-Messages korrekt escaped wird. Dadurch wird es richtig als Marker für Metadaten interpretiert. Außerdem werden die Sequenzen "", "`" und "${" nun in $localize-Messages unterstützt.

Die neuen Features betreffen dieses Mal jedoch nicht den Compiler, sondern Bazel und den Core. Für Bazel wurde ein Upgrade auf v1.1.0 vorgenommen. Am Core wurde an der Missing-Injectable Migration gearbeitet, die nun auch leere Object Literal Providers migriert.

Weitere Informationen zum neusten Release Candidate von Angular 9 können wie immer dem Changelog auf GitHub entnommen werden.


Angular 9.0.0-rc.2

Update vom 14. November 2019

Der neuste Release Candidate zu Angular 9 arbeitet weiter an der Performance. Dieses Mal findet sich die entsprechende Änderung jedoch im Core wieder und betrifft nicht Ivy. Factories in providerToRecord werden nur noch erzeugt, wenn es wirklich notwendig ist. Im Bereich von Ivy wurden hingegen einige Neuerungen ausprobiert und gleich wieder zurückgezogen. Drei Reverts finden sich im Release, die zu Problemen geführt hatten. Darüber hinaus bringt Angular 9.0.0-rc.2, also der dritte Release Candidat, nur eine Reihe von Bugfixes mit, die wie immer im Changelog auf GitHub nachgelesen werden können.


Angular 9.0.0-rc.1

Update vom 7. November 2019

Der zweite Release Candidate für Angular 9 bringt einige Neuerungen mit. Anders als das erste RC-Release zeigt sich hier wieder, dass doch noch einiges an der neuen Major-Version des Frameworks in Arbeit ist. Natürlich wurden zahlreiche Bugs behoben, darunter beispielsweise einer im Bereich des i18n-Supports in Ivy. Hier wurde an den Fehlermeldungen an sich gearbeitet, die nun aussagekräftiger sein sollen. Für Ivy gab es aber auch wieder neue Features. Der Compiler erkennt nun unbekannte Elemente während des Renderings auch dann, wenn der Just-in-Time-Modus genutzt wird. Bisher war diese Funktion in Ivy nur im Ahead-of-Time-Rendering verfügbar. Auch für den statischen Interpreter gab es eine Neuerung zum Umgang mit unbekannten oder ungültigen Ausdrücken. Was sich daran geändert hat, kann im entsprechenden Pull Request nachgelesen werden.

Auch die Performance spielt noch immer eine Rolle in der Entwicklung der neuen Version von Angular. Hierfür wurden sechs Änderungen an Ivy im zweiten Release Candidate ausgeliefert. Einen Überblick über alle Änderungen an der Version gibt das Changelog auf GitHub.


Angular 9.0.0-rc.0

Update vom 4. November 2019

Der erste Release Candidate für Angular 9 ist da. Damit macht das Angular-Team einen großen Schritt in Richtung des nächsten Major Release. Die RC-Phasen der vorherigen Releases waren vergleichsweise kurz: Für Angular 8 gab es sechs RC-Versionen, Angular 7 kam sogar mit nur einer aus, sodass das finale Release im vergangenen Jahr direkt auf RC.0 folgte.

Wie viele Release Candidates Angular 9 bekommen wird, ist unbekannt. Die Arbeit an größeren Neuerungen und Breaking Changes scheint jedoch schon weitgehend abgeschlossen zu sein. Der erste Release Candidate bringt laut Changelog keine Änderungen mit, verweist dafür aber bereits auf den offiziellen Update-Guide zur neuen Version. Dort werden alle wichtigen Neuerungen an v9 zusammengefasst. So bringt die Version drei Breaking Changes mit, die nun in der Überblicksdarstellung abgelesen werden können. Dazu gehört, dass Ivy bekanntlich zum Standard-Compiler gemacht wird und Angular 9 TypeScript 3.6 voraussetzt. Außerdem zählt die Veränderung bei tslib weiterhin als Breaking Change, da es ja als Peer Dependency eingebunden wurde.


Angular 9: Die Next-Versionen

Angular 9.0.0-next.15

Update vom 31. Oktober 2019

Angular 9.0.0-next.15 legt den Schwerpunkt auf der Behebung von Fehlern. Nachdem zuletzt Ivy im Zentrum der Feature-Entwicklung stand, zeigen die Release Notes zur neusten Next-Version, dass natürlich weiterhin auch an anderen Teilen des Frameworks gearbeitet wird. So gehören zwar erneut die meisten der behobenen Fehler im Release in den Bereich des neuen Compilers, unter den Features finden sich aber neben einer Neuerung für Ivy auch zwei für Bazel und eine für den Language-Service. Bei Bazel wurde eine Aktualisierung des Schematics auf die kürzlich veröffentlichte Version 1.0.0 vorgenommen. Außerdem arbeitet das Bazel Schematics jetzt mit Ivy und dem neuen Rollup_Bundle, das die Legacy-Version ersetzt. Im Feature-Bereich wurde bei Ivy selbst weiter am i18n-Support gearbeitet. Für den Language-Service ist ein Feature implementiert worden, das die Ersetzung getippter Texte durch Vorschläge erlaubt. Auch eine Änderung zur Performance-Verbesserung durch Ivy ist wieder dabei, dieses Mal für Directives ohne Selector.

Weiter Informationen zur neuen Version und allen Änderungen darin sind wie immer auf GitHub nachlesbar.


Angular 9.0.0-next.14

Update vom 28. Oktober 2019
Noch ist Angular 9 nicht fertig. Auf dem Weg zum in Kürze erwarteten Major Release steht nun erneut ein Next-Build zur Verfügung, der eine ganze Reihe von Neuerungen mitbringt. Wieder dreht sich das Release vor allem um Ivy. So gibt es in dieser Version gleich drei Performance-Verbesserungen für den neuen Compiler, sowie zahlreiche Features. Dazu zählt beispielsweise, dass die Landesangabe für die Internationalisierung nun über ein globales Property erfolgen kann, das zur Runtime ausgelesen wird. Daneben wurden dem Angular Compatibility Compiler (ngcc) einige Migrations hinzugefügt. Weitere Informationen zur neuen Version können wie immer dem Changelog auf GitHub entnommen werden.


Angular 9.0.0-next.13

Update vom 25. Oktober 2019

Angular 9.0.0-next.13 bringt neue Features und Bugfixes mit. Auch ein Breaking Change ist mit an Bord, der Bazel betrifft: Der Workspace @angular/bazel ng_setup_workspace() wird nicht länger benötigt und wurde daher entfernt. Stattdessen wird davon ausgegangen, dass rules_nodejs in der Workspace-Datei bezogen wird und keine weiteren Abhängigkeiten verbleiben. Daher soll es genügen, alle Aufrufe für diese Funktion sowie das entsprechende Load Statement zu entfernen.

Als neues Feature für den Core wurde ein generischer Typ für ModuleWithProviders hinzugefügt, der den Modultyp definiert. Er soll für alle Nutzer in Angular 10 benötigt werden, in Angular 9 dagegen nur für Ivy-Nutzer. Ivy erhält für Shim Generation eigene Compiler-Optionen und auch bei NgModules gibt es Neuerungen. Auf ein Request hin sind in Angular 9.0.0-next.13 zudem private NgModules-Re-Exporte in ngcc möglich. Alle Neuerungen in der aktuellen Next-Version sind im Changelog auf GitHub nachzulesen.


Angular 9.0.0-next.12

Update vom 21. Oktober 2019

Mit dem Release von Angular 9.0.0-next.12 unterstützt das Framework nur noch TypeScript 3.6, nicht mehr die Vorgänger-Versionen 3.4 und 3.5. Damit bringt auch dieses Next-Release wieder einen Breaking Change mit. Das ist allerdings der einzige. Weitere Neuerungen betreffen erneut die Performance mit Ivy. Hier wurde unter anderem an der Initialisierung von statischen Attributen in Templates gearbeitet, die jetzt nur noch im ersten Durchgang stattfindet.

Zu den Feature-Neuerungen an Angular 9.0.0-next.12 gehört, dass nun Typechecking für Event Bindings mit Ivy zur Verfügung steht. Ebenfalls in den Bereich von Ivy fällt das vereinfachten Debugging für Styles und Classes. Einige Neuerungen, darunter ein Flag, das BootstrapOptions hinzugefügt wurde, mussten allerdings bereits zurückgezogen werden. Genauere Informationen dazu können wie immer über das Changelog auf GitHub gefunden werden.


Angular 9.0.0-next.11

Update vom 16. Oktober 2019

Die TypeScript-Runtime-Bibliothek tslib ist keine direkte Dependency von Angular mehr. Mit der Veröffentlichung von Angular 9.0.0-next.11 ist tslib in den Status einer Peer-Dependency übergegangen. Für Nutzer, die das Angular-CLI nicht verwenden, stellt das einen Breaking Change dar, da sie tslib nun manuell installieren müssen. Auch für Angular Forms bringt v9.0.0-next.11 einen Breaking Change mit: <ngForm></ngForm> ist entfernt worden und kann nicht mehr als Selector verwendet werden. Stattdessen muss nun mit <ng-form></ng-form> gearbeitet werden. Zu den Breaking Changes in diesem Kontext gehört auch, dass die entsprechende Warnung entfernt wurde. Der dritte Breaking Change an den Forms besteht in der Entfernung von FormsModule.withConfig. Stattdessen kann FormsModule direkt verwendet werden.

Neben diesen Breaking Changes bringt die neue Next-Version von Angular 9 natürlich auch einige Feature-Änderungen sowie Performance-Verbesserungen und Bugfixes mit. Wie schon zuvor in den Next-Releases für Angular 9 zu sehen war, zeigt sich auch hier wieder, dass das Angular-Team an der Fertigstellung des neuen Compilers, Ivy, arbeitet. Hier bringt Version Next.11 verschiedene Neuerungen mit: Für den i18n-Support in Angular 9 wird mit Ivy ein neues Format eingeführt; wird noch das alte verwendet, musste dies bislang manuell markiert werden. Um das Upgrade zu erleichtern, ist enableI18nLegacyMessageFormat nun aber standardmäßig auf true gesetzt worden. Zu den weiteren Neuerungen für Ivy gehört, dass nun genauere Fehlermeldungen für unbekannte Komponenten ausgegeben werden, die Informationen dazu enthalten, wie das Problem gelöst werden kann.

Das sind natürlich noch nicht alle Neuerungen, die in den Bereich des neuen Compilers fallen. Auch die Verbesserungen an der Performance in diesem Release gehören zu Ivy. Darunter fällt beispielsweise, dass in setInputsFromAttrs nun striktere Null-Checks ausgeführt werden.

Weitere Informationen zu diesen und allen weiteren Neuerungen können wie immer dem Changelog auf GitHub entnommen werden.


Angular 9.0.0-next.10

Update vom 10. Oktober 2019

Angular 9.0.0-next.10 steht zum Test bereit: Die Arbeit an Angular 9 geht weiter, noch ist die neue Major-Version des Frameworks nicht da. Erst einmal wurde nun in der Code-Basis aufgeräumt. Renderer, bekannt aus Version 4, ist schon lange deprecated und wurde nun ganz entfernt, inklusive der zugehörigen Symbole. Stattdessen muss nun Renderer2 verwendet werden. Auch neue Features haben es aber in das Release geschafft. Für Ivy sind zwei Neuerungen mit Bezug auf die Internationalisierungs-Funktionen (i18n) dabei, wie im Changelog nachgelesen werden kann:

  • ivy: i18n – implement compile-time inlining (#32881) (2cdb3a0)
  • ivy: i18n – render legacy message ids in $localize if requested (#32937) (bcbf3e4)

Außerdem gibt es Feature-News für den Core, wo Queries nun standardmäßig dynamisch verarbeitet werden. Das static-Flag für ViewChild und ContentChild steht darum nun standardmäßig auf false. Dazu wurde das Flag außerdem als optional markiert. Weitere neue Features betreffen die Forms, den Language-Service und ngcc.

Für die Performance bringt das Update erneut Änderungen an Ivy mit. Informationen zu diesen und allen weiteren Änderungen können dem Changelog entnommen werden.


Angular 9.0.0-next.9

Update vom 4. Oktober 2019

Mit Angular 9.0.0-next.9 haben es vier neue Features in die kommende Major-Version geschafft, einer davon gilt als Breaking Change. Dieses Mal handelt es sich dabei jedoch nicht um eine Neuerung an Ivy oder Bazel, sondern um eine Deprecation im Service Worker, die nun entfernt wurde. So steht versionedFiles in der Service Worker Asset Group Configuration in ngsw-config.json nicht mehr zur Verfügung.

Unter den drei weiteren Feature-Änderungen, die dieses Release mitbringt, findet sich dann aber doch auch der neue Compiler wieder: Mit Ivy kann das Package @angular/localize nun per ng add hinzugefügt werden. Ebenfalls zu Ivy gehört die Performance-Verbesserung im Release: Der globale State wird nicht mehr wiederholt aus den i18n Instructions aufgerufen, wenn die Informationen bereits verfügbar sind.

Darüber hinaus aktualisiert Angular 9.0.0-next.9 die notwendige Version der RxJS Dependency auf v6.5.3. Auch für den Language Service gibt es eine Neuerung, die das Laden von NgModules betrifft. Wenn NgModules aus dem Language Service geladen werden, wird nun geprüft, ob eine aktualisierte Version im Cache vorliegt. Ist das der Fall, kann diese genutzt werden.

Darüber hinaus wurde eine Reihe von Bugfixes in Angular 9.0.0-next.9 implementiert. Einen Überblick über alle Neuerungen gibt das Changelog auf GitHub.


Angular 9.0.0-next.8

Update vom 26. September 2019

Das neunte Next-Release von Angular 9, v9.0.0-next.8, bringt nur vier Neuerungen mit, zwei davon sind Bugfixes für Ivy. Behoben wurde ein Fehler der im Kontext des Debuggings von Component Elements auftrat. Hier werden mit window.ng.getDebugNode nun die nötigen Debug-Infos ausgegeben. Der zweite behobene Bug in Ivy bezieht sich auf Map-basierte Bindings, die unter bestimmten Umständen zwischenliegende Werte übersprangen.

Im Release ist auch ein neues Feature enthalten, das im Language Service eingefügt wurde. Dieser kann jetzt feststellen, zu welchem NgModule ein Directive gehört. Die Performance-Verbesserung findet sich hingegen wieder in Ivy: Der extra SafeStyle Detection Code wurde entfernt.

Weitere Informationen zum Release können wie immer dem Changelog auf GitHub entnommen werden.


Angular 9.0.0-next.7

Update vom 19. September 2019

Angular 9.0.0-next.7 ist da! Erneut bringt die Version eine ganze Reihe neue Features mit, darunter einige Neuerungen für Ivy. Auch an der Performance des neuen Compilers wurde gearbeitet. Das Release bringt aber auch Breaking Changes mit.

Für Ivy wurden mit Version Next.7 von Angular 9 unterschiedliche Neuerungen ausgeliefert. Darunter sind sowohl Bugfixes als auch neue Features und Performance-Verbesserungen. Auch die beiden Breaking Changes im Release hängen mit Ivy zusammen. Eine davon betrifft Übersetzungen, die mit der Funktion loadTranslations() geladen werden. Hier muss nun MessageId für den Key verwendet werden, nicht mehr der String SourceMessage. Für die $localize-Funktion haben sich die Imports verändert. Der globale Scope wird nun aus @angular/localize/init importiert, während loadTranslations() und clearTranslations() aus @angular/localize geladen wird. Auch dabei handelt es sich um Breaking Changes. Zu den Performance Improvements für Ivy gehört, dass Lview in Pipe Instructions und Property Instructions nicht mehr wiederholt gelesen wird. Für das DOM wurden unnötige Lesezugriffe in Styling Instructions vermieden. Außerdem sind einige weitere Performance-Verbesserungen, Features für den Internationalisierungs-Support in Ivy und Bugfixes für Ivy im Release enthalten.

Neben den Neuerungen an Ivy gab es im Release natürlich auch Updates für andere Bereiche von Angular. So sind erneut drei Features für den Language-Service enthalten. Dazu gehört, dass einige Logging-Methoden für den TypeScript-Host hinzugefügt wurden, mit denen Logfiles erzeugt werden können.

Mehr Informationen zu diesen und allen weiteren Neuerungen an Angular 9.0.0-next.7 können dem Changelog auf GitHub entnommen werden.


Angular 9.0.0-next.6

Update vom 12. September 2019

Mit Angular 9.0.0-next.6 wurden wieder zahlreiche Neuerungen am Framework veröffentlicht. Darunter ist eine ganze Reihe von Bugfixes, aber auch einige Performance-Verbesserungen, Features sowie ein Code-Refactoring, das einen Breaking Change verursacht, haben es in das Release geschafft. Deutlich zu sehen ist am Changelog, dass weiterhin an Ivy gearbeitet wird. So stehen vier von fünf Performance-Verbesserungen im Zusammenhang mit Ivy; auch unter den Bugfixes finden sich vor allem behobene Fehler am neuen Compiler. Darunter ist beispielsweise ein Bug, der durch die in der vorherigen Next-Version vorgenommene Integration von $localize in Ivy entstand. Hier wurde zum neusten Release festgelegt, dass keine jsdoc-Kommentare für $localize erzeugt werden sollen. Diese glichen denen für goog.getMsg(), sodass eine Fehlermeldung ausgegeben worden war.

Die neuen Features im Release fallen dieses Mal jedoch nicht in den Bereich von Ivy. Neuerung gab es aber am Language Service. Hier wurde Support für styleUrl-Definitionen hinzugefügt, der analog zu den Definitionen von templateUrl funktioniert und das Vorgehen vereinheitlichen soll. Für die Language Service Integration Tests wurde ein Script hinzugefügt, das die Angular-Distribution bei jedem Build neu installiert. Mit dem neuen Script kann die Installation außerhalb des Root-Verzeichnisses erfolgen. Außerdem wurden einige Änderungen am Service Worker vorgenommen, die sich auf den EXISTING_CLIENTS_ONLY-Modus beziehen. Darunter ist ein neues Feature, das die Rückkehr aus diesem Modus ermöglicht, wenn ein entsprechendes Update verfügbar ist.

Ein Refactoring wurde in Angular 9.0.0-next.6 an der Protractor-Integration für Bazel vorgenommen. Bislang war die Regel protractor_web_test_suite rule im npm-Package @angular/bazel zu finden, wurde nun aber daraus entfernt. Stattdessen findet sie sich nun im Package @bazel/protractor. Wer mit dieser Regel arbeitet, muss sein Projekt entsprechend anpassen, da es sich dabei um einen Breaking Change handelt.

Weitere Informationen zur neusten Next-Version von Angular 9 können wie immer dem Changelog entnommen werden.


Angular 9.0.0-next.5

Update vom 5. September 2019

Achtung! Nachdem die next.3-Version von Angular 9 den letzten Breaking Change beinhaltete und Ivy zum Standard-Compiler kürte, gibt es im aktuellen Release auch wieder zwei Breaking Changes. Der erste betrifft den öffentlichen Export von hasBeenProcessed(), der nicht mehr stattfinden wird. Der Grund für das Entfernen ist einfach: Die Funktion wurde nie genutzt. Da eine Änderung an der Funktion ein Breaking Change ist, wurde sie komplett entfernt. Der zweite Breaking Change betrifft die Methode Injector.get, die nun abstrakten Klassen erlaubt, typsichere Werte auszugeben.

Doch Angular 9.0.0-next.5 hat mehr im Gepäck als Breaking Changes: Auch neue Features gibt es wieder, fünf an der Zahl. Da gerade vom Ivy Compiler die Rede war beginnen wir dort. Für den Compiler wurde die globale Funktion $localize() implementiert. Im Bereich Bazel wurde auf die neueste Version von [@microsoft](https://github.com/microsoft)/api-extractor aktualisiert. Die Methode TestBed.inject wurde unterdessen in den Kern von Angular eingebaut, um TestBed.get zu ersetzen. Zudem wurde der Decorator providedIn erweitert, sodass nun 'platform' und 'any' genutzt werden können.

Auch die Performance des Ivy Compilers stand wieder im Fokus, ganze neun Verbesserungen wurden hierfür durchgeführt. Unter anderem wurden Mikro-Benchmarks für normale und Map-basierte Style- und Klassen-Bindings eingeführt. Ein Benchmark für das Erstellen von Elementen und Text wurde ebenfalls hinzugefügt. Entfernt wurden hingegen Calls zu renderStringify beim Erstellen von Text-Nodes und der sich wiederholende read/write-Prozess in addComponentLogic. Außerdem ist die Klasse PlatformLocation nun „tree-shakable“.

Alle Änderungen, Bugfixes, Performance-Verbesserungen und natürlich die Breaking Changes, sind in vollem Umfang auf GitHub zu finden.


Angular 9.0.0-next.4

Update vom 28. August 2019

Seit der vorigen Vorabversion von Angular 9, ist Ivy als Standard-Compiler und -Renderer festgelegt. Kein Wunder also, dass sich die meisten Änderungen des aktuellsten Releases auf Ivy bezieht. Unter anderem wurden einige Bugs gefixt, darunter auch der ärgerliche Fehler, der verhinderte, dass der Index für Bindings vor der Ausführung eines Templates während des Aufrufens von refreshView zurückgesetzt wird.

Ein neues Feature für Ivy stellt die Nutzung der DomElementSchemaRegistry für die Prüfung von Bindings zum DOM durch ngtsc dar. So sollen zukünftig Fehler in Apps vermieden werden, die durch das TypeScript-Schema lib.dom.d.ts bzw. dessen nicht reibungslose Nutzung in Verbindung mit der DomElementSchemaRegistry entstehen.

Für eine etwa 6 Prozent niedrige Verarbeitungszeit im Produktionsmodus soll das ausschließliche Speichern von Binding-Metadaten im ngDevMode sorgen. Auf eine etwa 12 Prozent gesteigerte Performance können sich Nutzer ebenfalls freuen: Durch ein Refactoring des Umgangs mit lView[BINDING_INDEX] (keine doppelten Einträge an dieser Stelle mehr), soll Angular schneller werden.

Weitere Informationen zur aktuellen Next-Version können wie immer dem Changelog auf GitHub entnommen werden.


Angular 9.0.0-next.3

Update vom 22. August 2019

Ivy ist als Standard-Compiler und -Renderer in Angular 9.0.0-next.3 angekommen. In Angular 8.x und den bisherigen Releases für die Angular-9-Entwicklung ist Ivy noch als Opt-In-Feature verfügbar. Der Wechsel zum Standard war für Angular 9 bereits angekündigt worden; dies soll eine der zentralen Neuerungen für das kommende Major Release sein. Nun ist es so weit: Wer die Next-Versionen von Angular 9 testet, bekommt ab sofort als Standard-Pipeline für Rendering und Compiling ausgeliefert.

Im Zuge dieser Umstellung wurden natürlich einige Neuerungen an Ivy in das Release integriert. So wurden alle ngtsc-Diagnostics für Ivy zu ts.Diagnostics konvertiert. Außerdem können mit Ivy nun selektor-lose Directives als Base-Klassen genutzt werden. Auch ein Breaking Change für Ivy ist im Release enthalten. So ist Hammer.js in Zukunft Tree-Shakeble, sodass Hammer-Providers nicht mehr mit ausgeliefert werden, wenn HammerModule nicht in das Root-Module importiert wird. Für die Performance führt das Changelog zur neuen Next-Version gleich zehn Neuerungen auf, die im Zusammenhang mit Ivy stehen; einige Bugfixes für Ivy sind im Next-Release ebenfalls enthalten. Außerdem bringt Angular 9.0.0-next.3 eine Reihe weiterer Änderungen mit, die andere Bereiche des Frameworks betreffen, wie den Core und den Language-Service. Weitere Informationen dazu können wie immer dem Changelog auf GitHub entnommen werden.


Angular 9.0.0-next.2

Update vom 13. August 2019

Mit Angular 9.0.0-next.2 steht nun schon das dritte Next-Release für die kommende Major-Version bereit. Dieses Mal sind gleich zwei Neuerungen für Ivy mit dabei, den neuen Renderer, der zu Angular 9 fertig gestellt werden soll. Der Bugfix für Ivy betrifft das Verhalten bei inkrementellen Änderungen an Komponenten. Wenn diese Teil eines NgModules sind, trat bisher ein Fehler auf, weil die Information über den Compilation Scope aus dem NgModule verloren gingen und nicht neu erzeugt wurden. Nun wird diese Information über das Interface ComponentScopeRegistry registriert, sodass sie für inkrementelle Kompilierungen verfügbar ist. Für die Performance von Ivy wurde ein Refactoring vorgenommen, durch das der Global State im Kontext interpolierter Werte nicht mehr ausgelesen wird, solange es nicht nötig ist.

Die weiteren zwei Bugfixes im Release betreffen Bazel und den Compiler. Für Bazel wurde das Treeshaking bei der Erzeugung von FESM- und UMD-Bundles deaktiviert. Der Bugfix am Compiler betrifft das Entfernen von Whitespace im Wrapping von i18n-Expansions. Weitere Informationen zu Angular 9.0.0-next.2 können dem Changelog auf GitHub entnommen werden.


Angular 9.0.0-next.1

Update vom 9. August 2019

Drei Bugfixes haben es in Angular 9.0.0-next.1 geschafft. Davon betreffen zwei den Language-Service, einer den Upgrade-Bereich. Für den Language-Service wurde getSourceFile() so konfiguriert, dass es nur für TypeScript-Dateien aufgerufen wird. Dem entsprechenden Pull Request ist zu entnehmen, dass es sich dabei um eine Vorbereitung auf die Integration externer Template-Dateien handelt, die künftig vom Angular Language Service Plug-in verarbeitet werden sollen. HTML-Dateien müssen davon jedoch ausgeschlossen werden. Die zweite Neuerung am Language Service steht in Zusammenhang damit, dass Angulars eigenes LanguageService Interface durch das von TypeScript ersetzt werden soll. Diese Änderung an sich ist noch nicht vollzogen worden; auf dem Weg dahin hat man mit dem Release von Angular 9.0.0-next.1 aber die Definition und QuickInfo kompatibel damit gemacht. Details können auch hier im Pull Request gefunden werden.

Im Upgrade-Bereich wurde ein Fehler behoben, der bei der Kompilierung von downgegradeden Komponenten auftrat. Da AngularJS synchron kompiliert, sollen Komponenten nach dem Downgrade ebenfalls so behandelt werden. Das war nicht mehr der Fall und wurde nun über die statische Methode SyncPromise.all() wieder implementiert.

Weitere Informationen zu den Neuerungen an Angular 9.0.0-next.1 können wie immer im Changelog auf GitHub gefunden werden.


Angular 9.0.0-next.0

Update vom 1. August 2019

Beta-Versionen heißen jetzt „next“: Angular hat nach dem Release von v8.0 das Schema bei der Benennung ihrer Versionen verändert. Wo zuvor von Beta-Relaeses gesprochen wurde, steht jetzt „next“ im Versionsnamen. So auch beim ersten Release mit der Nummer 9 im Titel: v9.0.0-next.0 wurde veröffentlicht und zeigt, dass Ivy ein großes Thema für die kommende Major-Version ist. Viel mehr verraten die Release Notes auf GitHub aber nicht. Das erste 9er-Test-Release bringe Verbesserungen und Fixes mit Bezug zu Ivy mit, so ist dort zu lesen. Weitere Informationen folgen wohl erst mit der nachfolgenden Version.


Angular 8.x: Die Minor-Releases

Angular 8.2.0

Update vom 1. August 2019

Angular 8.2.0 ist fertig. Nach einem Release Candidate steht nun das finale Release der Minor Version von Angular zum Download bereit, das alle Neuerungen der Testphase zusammenbringt und einige kleinere Änderungen selbst hinzufügt. So bringt v8.2.0 beispielsweise Support für TypeScript 3.5 mit und umfasst insgesamt 14 Bugfixes, die jedoch weitgehend aus den Betas bekannt sind. Genau so verhält es sich mit den insgesamt sechs neuen Features im Release, zu denen unter anderem die automatische Migration von Renderer zu Renderer2 gehört. Dieses Feature konnte seit Angular 8.2.0-next.1 getestet werden.

Einen Überblick über Angular 8.2.0 gibt das Changelog auf GitHub.


Angular 8.2.0-rc.0

Update vom 30. Juli 2019

Angular 8.2.0-rc.0 bringt eine Neuerung mit, die sich positiv auf die Performance auswirken soll. Dazu wurde am Verhalten des Compilers gearbeitet, der nun nicht mehr vom Prototype zu den eigenen Properties kopiert, wenn ein Objekt geklont wird. Bis zur Verwendung von Node 12 sei das kein Problem gewesen, da Node in vorherigen Versionen selbst eine Optimierung dafür mitbrachte. Das wurde jedoch zugunsten anderer Optimierungen in Node 12 verworfen, sodass nun eine Lösung in Angular implementiert wurde.

International JavaScript Conference

Effective Microservices Architecture In Node.js

by Tamar Stern (Palto Alto Networks)

React Components And How To Style Them

by Jemima Abu (Telesoftas)

JavaScript Days 2020

Wie ich eine React-Web-App baue

mit Elmar Burke (Blendle) und Hans-Christian Otto (Suora)

Architektur mit JavaScript

mit Golo Roden (the native web)

Zu den neuen Features im Release gehört, dass $element nun für Upgrades verfügbar ist und in Template Functions von Komponenten eingefügt wird, die geupgraded wurden. Das zweite Feature ist eine Neuerung, die Bazel und Ivy zusammen bringt. Dazu wurde das Compile Target für Angular in Bazel so verändert, dass nun Ivy verwendet wird. Damit soll ein Problem gelöst werden, das mit transitiven Dependencies auftrat, die bisher nicht erzeugt werden konnten, da sie über einen alten Compiler geladen wurde. Weitere Informationen dazu können dem entsprechenden Pull Request auf GitHub entnommen werden. Eine weitere Änderung für Bazel wird als Bugfix geführt: Die maximale Heap-Größe für node/ngc in Bazel ist von 2GB auf 4GB erhöht worden. Damit habe man diesen Wert an den des TypeScript-Compilers angepasst.

Weitere Informationen zu diesen Änderungen sowie den drei weiteren Bugfixes am ersten Release Candidate zu Angular 8.2.0 sind im Changelog auf GitHub zu finden.


Angular 8.2.0-next.2

Update vom 18. Juli 2019

Mit Angular 8.2.0-next.2 hat die kommende Minor-Version von Angular 8 vier weitere Bugfixes erhalten. Kontinuierlich gearbeitet wird noch immer an Bazel. Mit diesem Release wurde eine erst kürzlich vorgenommene Änderung zurück genommen, die den Umgang mit Custom Bazel Compiler Hosts betrifft. Die Neuerung „feat(bazel): allow passing and rewriting an old bazel host“ sei nicht mehr nötig, da der Angular Indexer stabil sei, wie im entsprechenden Pull Request erklärt wird.

Die drei weiteren Bugfixes im Release betreffen den Language-Service, das Compiler-CLI und erneut das WTF-Array. Details dazu können dem Changelog auf GitHub entnommen werden.


Angular 8.2.0-next.1 veröffentlicht

Update vom 11. Juli 2019

Das zweite Beta-Release für Angular 8.2 ist da: 8.2.0-next.1. Auch dieses Update fällt eher klein aus und bringt nur drei Neuerungen mit. Darunter ist ein neues Feature für den Core, das die Migration von Renderer auf Renderer2 automatisiert. Zu den Änderungen, die dadurch automatisch vorgenommen werden, gehört die automatische Umbenennung der Methoden aus dem alten Renderer. Wo dies nicht möglich ist, weil sich die Methoden nicht direkt entsprechen, werden nun automatisch Helper-Funktionen eingefügt, die sicherstellen, dass dennoch valider Code erzeugt wird. Weitere Informationen zu den automatisierten Migrationsschritten für Renderer2 können dem entsprechenden Pull Request entnommen werden.

Die anderen beiden Neuerungen am Release sind Bugfixes. Eins davon betrifft Bazel. Hier wurde eine Änderung am Übersetzungssystem rückgängig gemacht, da das System an sich nicht mehr den vollen Dateipfad des Outputs benötigt. Der zweite Bugfix betrifft den Compiler, wo nun alle Informationen aus ASTWithSource separat von AST an sich aufgerufen werden können.

Weitere Informationen zum Release können wie immer über das Changelog aufgerufen werden.


Angular 8.1.0 & 8.2.0-next.0 veröffentlicht

Update vom 8. Juli 2019

Angular 8.1.0 ist in der vergangenen Woche final veröffentlicht worden. Das erste Minor-Release für Angular 8 hat noch einmal drei Fehler behoben, zwei davon im Bereich des Service-Worker, einen am Core. Das Changelog listet diesbezüglich folgende Änderungen auf:

  • core: handle undefined meta in injectArgs (#31333) (80ccd6c), closes CLI #14888
  • service-worker: cache opaque responses in data groups with freshness strategy (#30977) (b0c3453), closes #30968
  • service-worker: cache opaque responses when requests exceeds timeout threshold (#30977) (a9038ef)

Angular 8.2.0-next.0 folgte umgehend auf dieses Release. Hier finden sich die gleichen Bugfixes wie in der Minor-Version, darüber hinaus gab es aber auch Neues für Bazel. Zwei neue Features sind dabei. So kann mit Bazel nun ein individuell festgelegter CompilerHost genutzt und an ngc Compile weitergegeben werden. Nötig sei das beispielsweise für Nutzer, die den Compiler Host von TypeScript überschreiben müssen. Das zweite Feature hängt mit dieser Änderung unmittelbar zusammen. Um sicherzustellen, dass der Angular Indexer bei Google korrekt mit neu gesetzten Bazel Hosts umgehen kann, wurde eine Option eingefügt, mit der alte Bazel Hosts weitergegeben und überschrieben werden können.

Weitere Informationen zu beiden Versionen können dem Changelog auf GitHub entnommen werden.

Angular 8.1.0-rc.0

Update vom 27. Juni 2019

Mit Version 8.1.0-rc.0 steht der erste Release Candidate für Angular 8.1 bereit. Ein neues Feature ist in der Version enthalten: Für AngularJS und Angular sind nun zwei neue Test Helper in der Upgrade/Static-Library verfügbar. Diese helfen bei der Verbindung der Injectors der Versionen, ohne dazu vollständig hybride Apps erstellen zu müssen. Weitere Details zum neuen Feature können im entsprechenden Pull Request nachgelesen werden.

Für Bazel bringt das Release drei Bugfixes mit. Darunter ist eine Aktualisierung von ng new schema, mit der es dem gegenwärtigen Status des Angular Schematics angepasst wurde. Außerdem sind nun keine nicht unterstützten CSS-Pre-Processors mehr darin enthalten. Das dritte Bugfix für Bazel bezieht sich auf Metadata-Builds, die nun keine Schematics-Ordner mehr umfassen.

Außerdem bringt das Release auch Bugfixes für den Compiler und Service-Worker mit. Weitere Informationen können wie immer dem Changelog auf GitHub entnommen werden.


Angular 8.1.0-next.3

Update vom 21. Juni 2019

Mit Angular 8.1.0-next.3 steht ein weiteres Preview-Release für Angular 8.1 zum Download bereit. Die Anzahl der Neuerungen in der Version fällt klein aus, nur drei Bugfixes sind enthalten. Einer davon betrifft Bazel, dessen Builder Workspace jetzt mit Node 10.16 arbeitet. Der zweite Bugfix des Release findet sich in getQuickInfoAtPosition, wo any entfernt wurde. Außerdem wurde das @deprecated JSDoc-Tag vorläufig aus TestBedStatic.get entfernt, da eine Änderung an der Signatur von TestBed.get zu einer deutlich höheren Zahl an Deprecation-Warnungen in einigen TypeScript-Projekten geführt hatte. Bis dafür eine andere Lösung implementiert wurde, hat man die durch @deprecated erstellten Annotations darum durch reine Textwarnungen ersetzt, wie dem entsprechenden Pull Request zu entnehmen ist.

Weitere Informationen zu Angular 8.1.0-next.3 können wie immer dem Changelog auf GitHub entnommen werden.


Angular 8.1.0-next.2

Update vom 14. Juni 2019

Angular verfolgt offenbar eine neue Strategie bei der Benennung der Versionen. Auf das erste Beta-Release von Angular 8.1 folgten Version 8.1.0-next.1, sowie inzwischen 8.1.0-next.2. Während in Next.1 nur ein Bugfix am Core vorgenommen wurde, bringt Next.2 nun gleich fünf Änderungen mit. Drei der Bugfixes betreffen Bazel. Das globale Stylesheet wird bei Verwendung von Bazel nun sowohl im Entwicklungsmodus als auch in der Produktion per <link>-Tag in index.html referenziert. Außerdem verwendet Bazel nun die Components Schematics nicht mehr im Build und es wird keine Änderung an tsconfig.json mehr durch Bazel vorgenommen.

Die anderen beiden Bugfixes in Angular 8.1.0-next.2 betreffen das HttpUploadProgressEvent-Interface, das nun als öffentliches API freigegeben wurde, sowie den Service-Worker. Wenn hier navigator.serviceWorker.register('/ngsw-worker.js') scheitert, wird keine nicht gefangene Fehlermeldung mehr ausgegeben.

Weitere Informationen zu Angular 8.1.0-next.2 können dem Changelog auf GitHub entnommen werden.


Angular 8.1.0-beta.0: Bugfixes und Features geplant

Update vom 4. Juni 2019

Am 30. Mai, zwei Tage nach Veröffentlichung von Angular 8, wurde der erste Schritt in Richtung Angular 9 vollzogen. Gemeint ist, dass die erste Beta-Version von Angular 8.1 veröffentlicht wurde, die bereits jetzt ein relativ großes Release vermuten lässt: Passend zum Datum wurden 30 Bugs gefixt. Damit aber nicht genug, denn auch neue Features wird das erste Minor Release des aktuellen Veröffentlichungszyklus‘ enthalten – immerhin 6 an der Zahl.

Features

Eine der neuen Funktionen spricht vor allem jene Entwickler an, die sich um die Verwaltung kümmern und dafür sorgen müssen, dass alles aktuell ist und bleibt: Es wird wohl zukünftig nicht mehr nötig sein, Flags zu aktualisieren, die mit der Datei .bazelrc oder der Toolchain zusammenhängen. Auch Plattform-Flags für RBE-Builds und -Tests müssen ab Angular 8.1 wohl nicht mehr extra aktualisiert werden. Eine Ausnahme gilt allerdings, wenn es Braking Changes in Bazel gibt, der diese Flags beeinflusst. Stattdessen muss lediglich der Pin des @bazel-toolchains Repositorys in der Datei packages/bazel/package.bzl regelmäßig auf Stand gebracht werden. Sicherheit geht übrigens vor: Sollte die Rule rbe_autoconfig() im Repository @bazel_toolchains keine passende Toolchain-Konfiguration für die Bazel-Version finden, die gerade vom jeweiligen Projekt genutzt wird, zieht sie automatisch den entsprechenden Container und generiert die Konfigs beim Beginn des Builds bzw. Tests.

Wer transform-Methoden der SlicePipe nutzt, kann sich über die neuen Overloads freuen, die Angular 8.1 im Gepäck haben wird. Dies soll vor allem zur Verwendung von klareren Typen als immer nur any führen. Allerdings geht dies mit einem Breaking Change einher, SlicePipe kann ab dem Update lediglich mit einer Anzahl an Werten, einem String, null oder undefined genutzt werden.

Bugfixes

In Sachen Bugfixes gab es nach dem Update offenbar einiges nachzubessern. Genau 30 Fixes wurden in der ersten Beta-Version von Angular 8.1 vorgenommen. Im Fokus stand unter anderem Bazel, in dessen Zusammenhang nun korrekte Paramter an den http_server unter Windows weitergegeben werden. Aber auch am Kern hat man geschraubt. Der CSS-Sanitizer erlaubt ab sofort die Nutzung von Klammern in Dateinamen, das war bislang offenbar nicht möglich. Außerdem wurde ein unangenehmer Bug gefixt, der dafür sorgte, dass bei einer Migration nicht alle Dateien mitgenommen wurden. Gleich sieben Bugs wurden bei der Migration statischer Querys behoben, unter anderem schlug sie mit voreingestellten Standardwerten von Parametern fehl und gab Fehler nicht korrekt aus.

  • bazel: allow ts_library interop with list-typed inputs (#30600) (3125376)
  • bazel: Bump ibazel to 0.10.1 for windows fixes (#30196) (1353bf0)
  • bazel: Directly spawn native Bazel binary (#30306) (2a0f497)
  • bazel: Disable sandbox on Mac OS (#30460) (b6b1aec)
  • bazel: Exclude common/upgrade* in metadata.tsconfig.json (#30133) (1f4c380)
  • bazel: ng test should run specific ts_web_test_suite (#30526) (e688e02)
  • bazel: pass correct arguments to http_server in Windows (#30346) (3aff79c), closes #29785
  • bazel: update peerDep ranges (#30155) (4ae0ee8)
  • bazel: Use existing npm/yarn lock files (#30438) (ff29ccc)
  • compiler-cli: log ngcc skipping messages as debug instead of info (#30232) (60a8888)
  • core: consistently use ng:/// for sourcemap URLs (#29826) (392473e)
  • core: CSS sanitizer now allows parens in file names (#30322) (728db88)
  • core: fix interpolate identifier in AOT (#30243) (30d1f29)
  • core: migrations not always migrating all files (#30269) (349935a)
  • core: remove deprecated TestBed.deprecatedOverrideProvider API (#30576) (a96976e)
  • core: require ’static‘ flag on queries in typings (#30639) (84dd267)
  • core: static-query migration errors not printed properly (#30458) (6ceb903)
  • core: static-query migration fails with default parameter values (#30269) (6357d4a)
  • core: static-query migration should gracefully exit if AOT compiler throws (#30269) (509352f)
  • core: static-query migration should handle queries on accessors (#30327) (0ffdb48)
  • core: static-query migration should not fallback to test strategy (#30458) (0cdf598)
  • core: static-query migration should not prompt if no queries are used (#30254) (4c12d74)
  • core: static-query usage migration strategy should detect ambiguous query usage (#30215) (8d3365e)
  • core: temporarily remove @deprecated jsdoc tag for a TextBed.get overload (#30514) (f6bf892), closes #29290 #29905
  • language-service: Remove tsserverlibrary from rollup globals (#30123) (124e497)
  • router: ensure history.state is set in eager update mode (#30154) (b40f6f3)
  • router: ensure navigations start with the current URL value incase redirect is skipped (#30344) (0fd9d08), closes #30340 #30160
  • router: fix a problem with router not responding to back button (#30160) (3327bd8)
  • router: IE 11 bug can break URL unification when comparing objects (#30393) (197584d)
  • router: type cast correctly for IE 11 bug breaking URL Unification when comparing objects (#30464) (53f3564)

Alle weiteren Informationen zur aktuellen Beta-Version von Angular 8.1 können dem Changelog auf GitHub entnommen werden. Dort gibt es auch Details zu den neuen Features und sämtlichen Bugfixes

Der Beitrag Auf dem Weg zu Angular 9: rc.9 mit Features und Bugfixes veröffentlicht ist auf entwickler.de erschienen.

]]>
https://entwickler.de/online/javascript/angular-9-news-579895784.html/feed 2
JavaScript für Umsteiger: Die Besonderheiten von JavaScript im Überblick https://kiosk.entwickler.de/entwickler-magazin/entwickler-magazin-1-2020-2/javascript-fuer-umsteiger/ https://kiosk.entwickler.de/entwickler-magazin/entwickler-magazin-1-2020-2/javascript-fuer-umsteiger/#respond Wed, 15 Jan 2020 11:00:52 +0000 https://entwickler.de/?p=579922094 An JavaScript als Programmiersprache gibt es mittlerweile kaum einen Weg vorbei. Es ergibt für viele Programmierer also durchaus Sinn, wenn sie sich zumindest mit den Grundlagen beschäftigen. Umsteiger sollten sich ebenfalls zuerst mit den Grundlagen und Besonderheiten befassen.

Der Beitrag JavaScript für Umsteiger: Die Besonderheiten von JavaScript im Überblick ist auf entwickler.de erschienen.

]]>
An JavaScript als Programmiersprache gibt es mittlerweile kaum einen Weg vorbei. Es ergibt für viele Programmierer also durchaus Sinn, wenn sie sich zumindest mit den Grundlagen beschäftigen. Umsteiger sollten sich ebenfalls zuerst mit den Grundlagen und Besonderheiten befassen.

Der Beitrag JavaScript für Umsteiger: Die Besonderheiten von JavaScript im Überblick ist auf entwickler.de erschienen.

]]>
https://kiosk.entwickler.de/entwickler-magazin/entwickler-magazin-1-2020-2/javascript-fuer-umsteiger/feed 0
Release der finalen Version des neuen Edge-Browsers mit Chromium-Engine https://entwickler.de/online/windowsdeveloper/release-edge-chromium-579922149.html https://entwickler.de/online/windowsdeveloper/release-edge-chromium-579922149.html#respond Wed, 15 Jan 2020 09:11:56 +0000 https://entwickler.de/?p=579922149 Am 15. Januar 2020 wird die erste Version des neuen Edge-Browsers auf Chromium-Basis für den Alltagseinsatz veröffentlicht.

Der Beitrag Release der finalen Version des neuen Edge-Browsers mit Chromium-Engine ist auf entwickler.de erschienen.

]]>
Am 15. Januar 2020 wird die erste Version des neuen Edge-Browsers auf Chromium-Basis für den Alltagseinsatz veröffentlicht.

Am 15. Januar ist es soweit: Microsoft veröffentlicht seinen neuen Edge-Browser auf Chromium-Basis in der allgemein verfügbaren Version für den Alltagseinsatz. Ausgeliefert wird der neue Edge automatisch per Update für alle Windows-Nutzer ab Version 1803 bei der nächsten Aktualisierung des Betriebssystems. Der neue Browser wird für die Betriebssysteme Windows (10, 7, 8) und macOS sowie iOS und Android verfügbar sein. Eine für Linux-Betriebssysteme adaptierte Version soll zu einem späteren Zeitpunkt ausgeliefert werden.

Automatische Installation oder Parallelbetrieb des alten und neuen Browsers

Ab dem 15. Januar 2020 soll der neue Edge-Browser Bestandteil des Betriebssystems Windows 10 sein, er ersetzt in allen Windows-10-Versionen seinen Vorgänger. Wer den Browser lieber von Hand installieren möchte, kann die automatische Installation durch ein Blocker-Toolkit verhindern. Diese Option ist seitens Microsoft für Unternehmenskunden gedacht. Beim automatischen Installieren wird der alte Edge standardmäßig ersetzt. Es ist aber auch möglich, beide Browser parallel zu verwenden.

Es könnte durchaus interessant sein, den alten Edge-Browser vorerst parallel beizubehalten, da der neue Edge auf Chromium-Basis zum Release-Termin einige Schlüsselfunktionen des alten Edge möglicherweise noch nicht besitzt: Bis zuletzt war offen, ob der neue Browser die Synchronisierung des Verlaufs und installierte Erweiterungen übernimmt. Die angekündigte Unterstützung für ARM64-Geräte wie das Surface Pro X, die Augmented-Reality-Brille HoloLens, die Xbox One und Linux steht noch aus und wird erst zu einem späteren Termin verfügbar sein.

Besonders für Unternehmenskunden dürfte der neue Edge-Browser mit Chromium-Unterbau interessant sein: sie sollen nun einfacher das Firmen-Intranet durchsuchen können.

Ein offenkundiger Vorteil ist, dass Nutzern des neuen Edge auf Chromium für Erweiterungen nun auch der Chrome Web Store offen steht. Um dieses Angebot zu nutzen, genügt es, die Funktion „Erweiterungen aus anderen Stores zulassen“ zu aktivieren. Edge (Chromium) unterstützt über 100 Anzeigesprachen, darunter auch Deutsch.

Intelligenter Trackingschutz

Beim Tracking bietet der neue Edge drei Modi: streng, ausgeglichen und einfach. Wer keine Daten mit anderen teilen und Tracking weitestgehend verhindern möchte, kann die Option „streng“ auswählen. Cookies und automatisches Einloggen durch gespeicherte Passwörter entfallen dann auch. Im Modus „ausgeglichen“ können Nutzer das Tracken auf bereits besuchte Webseiten beschränken. Im Modus „einfach“ ist das Tracking nicht weiter eingeschränkt.

Unternehmenskunden können mit dem Blocker-Toolkit die automatische Auslieferung des neuen Edge unterbinden. Für Erweiterungen stehen der Chrome Web App Store sowie der Edge Add-on Store (noch Beta) zur Verfügung. Alle weiteren Details zur Sicherheit, Konfiguration und dem Deployment des neuen Edge auf Chromium-Basis stehen in der Microsoft-Edge-Dokumentation.

Der Beitrag Release der finalen Version des neuen Edge-Browsers mit Chromium-Engine ist auf entwickler.de erschienen.

]]>
https://entwickler.de/online/windowsdeveloper/release-edge-chromium-579922149.html/feed 0
Git 2.25 ist da: Sparse Checkouts und teilweises Klonen https://entwickler.de/online/development/git-2-25-sparse-checkouts-579922492.html https://entwickler.de/online/development/git-2-25-sparse-checkouts-579922492.html#respond Wed, 15 Jan 2020 08:51:40 +0000 https://entwickler.de/?p=579922492 Das Versionskontrollsystem Git hat sein erstes Update im neuen Jahr erhalten und ordentlich an der Version 2.25 geschraubt. Das neue Release hat insgesamt 500 Commits von 84 Leuten vorzuweisen, wobei das Hauptaugenmerk auf der Vereinfachung des Sparse Checkouts liegt.

Der Beitrag Git 2.25 ist da: Sparse Checkouts und teilweises Klonen ist auf entwickler.de erschienen.

]]>
Das Versionskontrollsystem Git hat sein erstes Update im neuen Jahr erhalten und ordentlich an der Version 2.25 geschraubt. Das neue Release hat insgesamt 500 Commits von 84 Leuten vorzuweisen, wobei das Hauptaugenmerk auf der Vereinfachung des Sparse Checkouts liegt.

Die wohl größte Neuerung sind die sogenannten Sparse Checkouts. Bei diesem „dünnen Auschecken“ handelt es sich um den Prozess, eine Liste von Dateipfadmustern in die eigene Arbeitskopie einzufügen, sollte man den Inhalt des Repositorys auschecken. Im Grunde genommen funktioniert es wie .gitignore, außer dass es sich auf den Inhalt der Arbeitskopie und nicht auf den Index bezieht. Ein Nachteil war hier bislang, dass es sich meist um große Dateien handelte, weshalb das Auschecken ziemlich schwer zu spezifizieren war.

Sparse Checkouts vereinfacht

In Git 2.25 wurde nun der Befehl git sparse-checkout eingeführt, der durch das Definieren von Mustern das Sparse-Checkout-Management insgesamt vereinfachen soll.

Mit dem neuen Befehl stehen zudem vier Unterbefehle zur Verfügung set, list,init und disable. Durch sie lässt sich die Liste der Pfade zum Checkout festlegen, die aktuelle Liste drucken und das Sparse Checkouts aktivieren bzw. deaktivieren.

Teilweises Klonen und der Cone-Modus

Eine weitere Neuerung, die zur Vereinfachung beitragen soll, sind die sogenannten Partial Clones. Bislang hat der Klon eines Git-Repositorys all seine Daten kopiert, selbst wenn nur ein Teil der Daten für den Entwickler relevant war. Vor allem bei sehr großen Repositorys stellte sich das, bezogen auf die Kosten für die Netzwerkübertragung und den lokalen Speicher, als hinderlich dar. Mit Git 2.25 besteht nun die Möglichkeit, einen „teilweisen“ Klon auszuführen bzw. nur einen Teil der Repositorys zu klonen und mit ihnen zu arbeiten, ohne deren gesamten Inhalt zu besitzen.

Natürlich muss Git mitgeteilt werden, welche Objekte beim Auschecken des Repositorys übersprungen werden können, um tatsächlich auschecken zu können. Um dies zu ermöglichen, kommen wiederum die Sparse Checkouts ins Spiel.

Ein weiteres Feature, das sich auf die Sparse Checkout bezieht, ist der Cone-Modus. Zwar lassen sich mithilfe des neuen Befehls (Sparse Checkouts) beliebig komplexe Muster erstellen, allerdings kann sich die Auswertung negativ auf die Performance auswirken. Deshalb ist in Git 2.25 ebenfalls der neu eingeführt Cone-Modus aktiviert – git config core.sparseCheckoutCone. Dieser schränkt die möglichen Regeln zugunsten der Performance ein. Anstelle von beliebigen .gitignore-Mustern kann so festgelegt werden, ob alle Pfade oder alle Dateien (innerhalb eines gegebenen Unterverzeichnisses) ausgecheckt werden sollen. Standardmäßig bezieht die Versionsverwaltung alle Dateien im Stammverzeichnis des Repository ein.

Git 2.25: Sämtliche Änderungen im Überblick

Ebenfalls mit an Bord ist ein verbesserter Debugging-Support beim Lazy Cloning und die git-Multipack-Index-Funktionalität verfügt über Fortschrittsanzeigen.

Weitere Informationen zu sämtlichen neuen Features und den Bugfixes gibt es auf dem Blog von GitHub und natürlich in den offiziellen Release Notes.

Der Beitrag Git 2.25 ist da: Sparse Checkouts und teilweises Klonen ist auf entwickler.de erschienen.

]]>
https://entwickler.de/online/development/git-2-25-sparse-checkouts-579922492.html/feed 0
Python-Bibliothek pandas auf dem Weg zu v1.0.0: Erster Release Candidate erschienen https://entwickler.de/online/python/python-pandas-1-0-0-release-candidate-erschienen-579922293.html https://entwickler.de/online/python/python-pandas-1-0-0-release-candidate-erschienen-579922293.html#respond Wed, 15 Jan 2020 08:50:02 +0000 https://entwickler.de/?p=579922293 Die beliebte Data-Science-Bibliothek pandas hat gerade erst ihren zwölften Geburtstag gefeiert, und nun steht Version 1.0.0 in den Startlöchern. Der erste Release Candidate gibt Einblicke in einen neuen Skalar für fehlende Werte, einen neuen Umgang mit veralteten Funktionen gemäß semantischer Versionierung, eine Überarbeitung der Webseite und mehr.

Der Beitrag Python-Bibliothek pandas auf dem Weg zu v1.0.0: Erster Release Candidate erschienen ist auf entwickler.de erschienen.

]]>
Die beliebte Data-Science-Bibliothek pandas hat gerade erst ihren zwölften Geburtstag gefeiert, und nun steht Version 1.0.0 in den Startlöchern. Der erste Release Candidate gibt Einblicke in einen neuen Skalar für fehlende Werte, einen neuen Umgang mit veralteten Funktionen gemäß semantischer Versionierung, eine Überarbeitung der Webseite und mehr.

Der erste Release Candidate für pandas 1.0.0 ist erschienen. Die anstehende Major-Version mit geplantem Release-Datum in zwei Wochen wird neue Features und eine Änderung im Umgang mit Updates enthalten.

Beginnend mit v1.0.0 wird die Python-Bibliothek einer Variante der semantischen Versionierung folgen (Major.Minor.Patch). Das bedeutet, dass Deprecations und Breaking Changes für APIs nur in Major-Versionen umgesetzt werden, mit Ausnahme experimenteller API-Änderungen. Der Support für spezifische Python-Versionen wird ebenfalls nur in Major-Versionen auslaufen.

pandas, abgeleitet von „panel data“, ist eine Open-Source-Bibliothek für Python. Sie dient der Datenanalyse und -Manipulation und wird vorrangig für Machine Learning eingesetzt. Die initiale Veröffentlichung fand am 11. Januar 2008 statt. Aktuell befindet sich pandas in der stabilen Version 0.25.3.

Die Features in pandas 1.0.0 rc0

Der erste RC für Version 1.0.0 bringt einen experimentellen Skalar für fehlende Werte mit: Der neue pd.NA-Wert soll über die verschiedenen Datentypen hinweg verwendet werden können.

Bisher repräsentierte zum Beispiel np.nan fehlende Float-Werte, während np.nan oder None fehlende object-dtype-Werte bezeichneten. Weitere fehlende Werte erhielten unter anderem die Zuweisung pd.NaT. Das neue Feature ist noch als experimentell gekennzeichnet, weshalb pd.NA unvorhergesehenes Verhalten an den Tag legen kann.

Ein weiteres experimentelles Feature ist StringDtype. Dieser Extension-Typ für String-Daten soll einige Schwierigkeiten mit object-dtype-NumPy-Arrays beheben. Unter anderem soll dadurch das versehentliche Speichern einer Mischung aus Strings und Nicht-Strings verhindert werden.

Zu den weiteren angekündigten Neuerungen zählen eine Überarbeitung der Webseite und des Documentation Themes.

Installation des Release Candidate

Da viele ältere Deprecations entfernt wurden, empfehlen die pandas-Entwickler, zunächst auf pandas 0.25 zu aktualisieren, um Kompatibilitätsschwierigkeiten auszuschließen. Zudem wurde für pandas 1.0.0 die Mindestanforderung der Sprachversion auf Python 3.6.1 erhöht.

pandas 1.0.0rc0 kann via PyPI python -m pip install --upgrade --pre pandas==1.0.0rc0 oder conda-forge conda install -c conda-forge/label/rc pandas==1.0.0rc0 installiert werden.

Weitere Informationen bieten die offizielle Webseite sowie das GitHub Repository.

Der Beitrag Python-Bibliothek pandas auf dem Weg zu v1.0.0: Erster Release Candidate erschienen ist auf entwickler.de erschienen.

]]>
https://entwickler.de/online/python/python-pandas-1-0-0-release-candidate-erschienen-579922293.html/feed 0
25 Jahre PHP, Cloud & vom Zend Framework zu Laminas – Neu im Kiosk: PHP Magazin 2.20 https://entwickler.de/online/php/25-jahre-php-neu-im-kiosk-php-magazin-2-20-579921378.html https://entwickler.de/online/php/25-jahre-php-neu-im-kiosk-php-magazin-2-20-579921378.html#respond Wed, 15 Jan 2020 06:37:58 +0000 https://entwickler.de/?p=579921378 Das neue PHP Magazin ist ab sofort im Kiosk erhältlich! Anlässlich des 25. Geburtstags der Programmiersprache haben wir unsere Experten gefragt, wie sie über die Zukunft von PHP denken und was sie sich für PHP 8 wünschen. Außerdem gibt das Magazin einen spannenden Überblick über die Geschichte vom Zend Framework zu Laminas und überführt bestehende Applikationen und die Cloud.

Der Beitrag 25 Jahre PHP, Cloud & vom Zend Framework zu Laminas – Neu im Kiosk: PHP Magazin 2.20 ist auf entwickler.de erschienen.

]]>
Das neue PHP Magazin ist ab sofort im Kiosk erhältlich! Anlässlich des 25. Geburtstags der Programmiersprache haben wir unsere Experten gefragt, wie sie über die Zukunft von PHP denken und was sie sich für PHP 8 wünschen. Außerdem gibt das Magazin einen spannenden Überblick über die Geschichte vom Zend Framework zu Laminas und überführt bestehende Applikationen und die Cloud.

25 Jahre PHP – das Ende naht … nicht!

Liebe Leserinnen, liebe Leser,

man mag es kaum glauben: Die Programmiersprache PHP gibt es nun schon seit einem Vierteljahrhundert. Fast genauso lange wird für PHP schon das Ende vorausgesagt. Aktuell spuckt Google ungefähr 240 000 000 Ergebnisse aus, wenn man „PHP ist tot“ in die Suchmaschine eingibt. PHP wird schon zu Lebzeiten für tot erklärt – mehr Berühmtheit kann man zumindest zu Lebzeiten kaum erlangen.

Wir alle wissen jedoch, dass PHP noch quicklebendig ist und nach wie vor als eine unverzichtbare Zutat das Web zusammenhält. Ehrlich gesagt, ich kann die skurrilen Todesnachrichten zu PHP nur noch als Running Gag auffassen. PHP ist aus der Entwicklerwelt nicht mehr wegzudenken, und das ist auch gut so. So ist es kein Zufall, dass wir dieses erfolgreiche Jubiläum feiern. Offensichtlich ist hier etwas Sinnvolles geschaffen worden, das den Leuten bei der Webentwicklung besonders hilft. Nicht zuletzt ist es aber die breite Entwicklerbasis, die den großen Erfolg der Programmiersprache ausmacht.

Was sind eure Erlebnisse mit PHP, was eure Wünsche für die Zukunft? Genau diese Fragen haben wir ausgewiesenen PHP-Experten gestellt, die schon seit vielen Jahren durch unzählige Projekte, Vorträge und Workshops untrennbar mit der Sprache verbunden sind. Auch wir als Verlag und Konferenzveranstalter sind ein stolzer Teil dieser wahnsinnig großen und lebendigen PHP-Community. An dieser Stelle möchten wir allen Leserinnen und Lesern des PHP Magazins und den Besucherinnen und Besuchern unserer International PHP Conference für ihr langjähriges Vertrauen danken. Wir werden unser Bestes tun, um auch in Zukunft ein informatives Sprachrohr für alle PHP-Entwickler zu sein, das stets ein offenes Ohr für die Community und ein Auge auf die neuesten Entwicklungen rund um PHP hat.

In dieser Ausgabe des PHP Magazins machen wir wie immer auch einen Ausflug in die sich ständig wandelnde Technologiewelt und schauen, was die Entwicklercommunity neben PHP noch so bewegt. So zeigen wir z. B. die Überführung von bestehenden Applikationen in die Cloud. Die Verschmelzung der lokalen Entwicklung in der Cloud ist seit einiger Zeit ein wichtiger Bestandteil in der täglichen Entwicklerarbeit. Ein weiteres in der Praxis erprobtes Thema ist die komponentenbasierte Architektur mit Web Components. Was man mit diesen Bausteinen fürs Web alles machen, ist mehr als bemerkenswert. Darüber hinaus findet ihr im neuen PHP Magazin spannende Artikel über die Vielfalt bei der Datenspeicherung, zum langen Weg vom Zend Framework zu Laminas und noch vieles, vieles mehr.

Viel Spaß beim Lesen wünscht euch

Thomas Petzinna
Redakteur

Die Highlights im PHP Magazin 2.20

25 Jahre PHP
Das Jubiläum im Expertencheck

Schicht für Schicht zurück zum Erfolg
Die Entwicklung vom Zend Framework zu Laminas

Bausteine für das Web 
Komponentenbasierte Architektur mit Web Components

Bereit für die Cloud?
Überführung von bestehenden Applikationen in die Cloud

Jetzt im Kiosk: PHP Magazin 2.20 – 25 Jahre PHP

Der Beitrag 25 Jahre PHP, Cloud & vom Zend Framework zu Laminas – Neu im Kiosk: PHP Magazin 2.20 ist auf entwickler.de erschienen.

]]>
https://entwickler.de/online/php/25-jahre-php-neu-im-kiosk-php-magazin-2-20-579921378.html/feed 0
Women in Tech: „Wir Frauen sind weder besser noch schlechter, und müssen erst recht nicht genauso sein wie Männer“ https://entwickler.de/online/karriere/women-in-tech-henny-selig-579922244.html https://entwickler.de/online/karriere/women-in-tech-henny-selig-579922244.html#respond Wed, 15 Jan 2020 06:34:52 +0000 https://entwickler.de/?p=579922244 In unserer Artikelserie „Women in Tech“ stellen wir inspirierende Frauen vor, die erfolgreich in der IT-Branche Fuß gefasst haben. Heute im Fokus: Henny Selig, Solution Owner bei Signavio.

Der Beitrag Women in Tech: „Wir Frauen sind weder besser noch schlechter, und müssen erst recht nicht genauso sein wie Männer“ ist auf entwickler.de erschienen.

]]>
In unserer Artikelserie „Women in Tech“ stellen wir inspirierende Frauen vor, die erfolgreich in der IT-Branche Fuß gefasst haben. Heute im Fokus: Henny Selig, Solution Owner bei Signavio.

Die Tech-Industrie wird von Männern dominiert – so weit, so schlecht. Doch langsam, aber sicher bekommt der sogenannte Boys Club Gesellschaft von begabten Frauen: Immer mehr Frauen fassen in der Branche Fuß.

Aus diesem Grund wollen wir hier spannenden und inspirierenden Frauen die Möglichkeit geben, sich vorzustellen und zu erzählen, wie und weshalb sie den Weg in die Tech-Branche gewählt haben. Aber auch Themen wie Geschlechtervorurteile, Herausforderungen oder Förderungsmöglichkeiten kommen zur Sprache.

Unsere Woman in Tech: Henny Selig

Henny Selig

Henny Selig ist Solution Owner bei Signavio. Sie sorgt dafür, dass Kunden die Softwareprodukte von Signavio möglichst nahtlos bei sich im Unternehmen einführen können. Dafür erstellt sie zusammen mit ihrem Team vorgefertigte Software-Inhalte und Partnerintegrationen. Es handelt sich dabei um einen neuen und stark wachsenden Bereich bei Signavio, den Henny derzeit aufbaut. Zuvor war sie als Technische Beraterin bei Signavio und SAP tätig. Sie hat einen Abschluss als M.Sc. Data Science von den Universitäten KTH in Stockholm, Schweden und UNS in Nizza, Frankreich.

Was hat dein Interesse für die Tech-Branche geweckt?

Bereits in der Schule habe ich gemerkt, dass mir MINT-Fächer gut liegen. Ich hatte das Glück, dass ich in ein Programm der Femtec aufgenommen wurde, das junge Frauen für Technik begeistern möchte. Das half mir, meine eigenen Vorurteile gegenüber MINT-Studiengängen zu überwinden. Dass ich mich für die Informatik entschieden habe, kam erst im letzten Schuljahr. Mit der Erkenntnis, dass unsere Welt zunehmend aus Software besteht, stieg das Interesse immens. Ich habe entdeckt, wie vielfältig und spannend der Bereich ist.

Ich habe zunächst einen dualen Bachelor in Wirtschaftsinformatik bei SAP gemacht. Das gab mir die Gelegenheit, in verschiedenen Bereichen eines Softwarekonzerns zu arbeiten. Dort habe ich gelernt, dass zu einer erfolgreichen Software deutlich mehr als nur Programmieren gehört. Nach einigen Jahren als SAP-Beraterin beschloss ich mit Mitte 20, mich mit einem Master in Data Science im Europäischen Ausland weiterzubilden. Dieser Weg hat mich zu meinem jetzigen Arbeitgeber Signavio geführt. Nach zwei Jahren im Technical Consulting, mit sehr viel Kundenkontakt und Reisezeit, kann ich nun meine Erfahrungen im Engineering bei Signavio einbringen. Wir bauen gerade einen neuen Bereich auf, der die Engineering- und die Kundensicht näher zusammenbringt. Damit bewege ich mich genau in meiner Welt: Kundenperspektive und technisches Fachwissen.

Vorbilder und Unterstützer

In Berlin gibt es eine Initiative, die erfolgreiche Frauen aus Tech, Start-ups und anderen Bereichen regelmäßig zu Gesprächen einlädt, um für andere Frauen Vorbilder zu schaffen.

Feedback ist für mich eine der wertvollsten Formen der Unterstützung.

Besonders inspiriert hat mich in diesem Rahmen das Gespräch mit Obi Felten, der Chefstrategin von Google X. Aber auch aus alltäglichen Begegnungen lerne ich gerne. Es gibt Kollegen, von denen ich mir Kommunikationsmethoden, Workshop-Skills oder ihre Art der Problemanalyse abschaue. Zudem hatte ich das Glück, immer hervorragende Kollegen und Vorgesetzte zu haben. Feedback ist für mich eine der wertvollsten Formen der Unterstützung.

Ein Tag in Hennys Leben

Ich bin Solution Owner bei Signavio, das heißt, ich sorge dafür, dass unsere Kunden möglichst große Erfolge mit der Software von Signavio erzielen. Den Bereich Solution Engineering haben wir Anfang des Jahres 2019 auf meinen Vorschlag hin eingeführt. Signavio bietet Unternehmenssoftware an, die Kunden individuell zur Optimierung ihrer eigenen Abläufe nutzen können. Als Beraterin habe ich mit unseren Produkten bei verschiedenen Kunden oft ähnliche Probleme gelöst. Diese Überschneidungen nutzen wir, um Lösungen zu entwickeln, die den Kunden eine deutlich schnellere Einführung unserer Software ermöglichen.

Mein Arbeitsalltag ist sehr vielfältig.

Mein Arbeitsalltag ist sehr vielfältig. Ich programmiere selbst kaum noch, sondern organisiere mittlerweile ein Team und ihre Projekte. Dazu gehört die Priorisierung von Themen, die Definition von internen Abläufen, das Management von Erwartungen und Verantwortlichkeiten, darüber hinaus auch der Aufbau des Teams und die Kommunikation mit Kunden und Partnern.

In den genannten Unternehmen war ich stets eine der ersten, die mit neuer Technologie im Kundenumfeld gearbeitet hat. Parallel zu meinem Masterstudium gründete ich ein kleines Start-up. Der Grundgedanke war, dass sichere und nicht-nachvollziehbare Kommunikation im Internet einiges an Fachwissen benötigt, das nicht alle besitzen. Gerade Journalisten, Aktivisten oder Anwälte müssen eine vertrauensvolle Kommunikation mit ihren Klienten führen und Informanten sicherstellen, obwohl sie selten IT-Experten sind. Gemeinsam mit einem Kommilitonen haben wir ein Gerät entwickelt, das die Verschlüsselung von Daten und Kommunikation übernimmt, ohne dass weitere Kenntnisse nötig sind. Damit waren wir die Gewinner einer Start-up-Förderung an der TU Berlin. Nach einigen Monaten und einem funktionierendem Prototyp haben wir uns aus persönlichen Gründen zwar entschieden, das Projekt vorerst aufzugeben. Diese Erfahrung möchte ich aber nicht missen, denn daraus habe ich sehr viel gelernt.

Wieso gibt es nicht mehr Frauen in der Tech-Branche?

Den Grund dafür habe ich leider auch noch nicht gefunden – mehr Vorbilder und Mentorinnen würden aber sicherlich helfen. Ich bin überzeugt, dass jeder etwas tun kann, Männer genauso wie Frauen, um es Frauen in der Tech-Branche einfacher zu machen. Dabei denke ich beispielsweise an offensichtliche Respektlosigkeit gegenüber weiblichen Führungskräften, Ingenieurinnen oder sonstigen “Women in Tech”. Aus Gesprächen mit Kollegen weiß ich, dass sich auch viele Männer unwohl fühlen, wenn sie Zeuge von sexistischen Kommentaren werden, aber oft meinen, sie dürften sich nicht einmischen. Möglichst konkrete Handlungsempfehlungen helfen den unbeholfenen Zeugen in diesen Situationen, wie beispielsweise eine einfache Rückfrage. Jeder sollte sich hier in der Pflicht sehen zu reagieren, unabhängig vom Geschlecht.

Frauen in MINT-Fächern

Technische Innovationen wie das Internet und Künstliche Intelligenz betreffen schon heute jeden von uns, mehr als wir bemerken. Diese Technologien können zu einer nie dagewesenen Gerechtigkeit in der Welt führen, wenn wir sie richtig einsetzen. Sie bergen aber auch große Risiken, wenn etwa Datenschutz untergraben wird oder KI verzerrte Ergebnisse liefert.

Diversifizierte Teams kommen zu besseren Ergebnissen.

Es gibt viele Negativ-Beispiele, die zeigen, dass homogene Tech-Teams in ihren entwickelten Produkten nicht die Gesamtheit der Menschen repräsentieren. Ich denke beispielsweise an die Entwicklung von Sicherheitsfunktionen in Autos, die auf den Europäischen Durchschnittsmann ausgelegt waren, oder Google Photos, das ursprünglich Probleme hatte, Menschen mit dunkler Hautfarbe richtig zu erkennen. Diversifizierte Teams kommen zu besseren Ergebnissen, zudem ist der Erfolg oft nachhaltiger (wirtschaftlich und ökologisch).

Selbst wenn wir mehr Frauen dazu bewegen können, in Tech zu arbeiten, bleibt die Herausforderung bestehen, diese Frauen dort auch zu halten. Die meisten Frauen in meinem Umfeld, die zu Beginn ihrer Karriere sehr technische Berufe hatten, sind in weniger als zehn Jahren (wie ich auch) in Schnittstellenbereiche gewechselt, etwa Produktmanagement oder Projektleitung. Diese Bereiche sind wichtig und die Positionen anspruchsvoll, es bedeutet aber, dass gut ausgebildete Experten an anderer Stelle fehlen.

Ich wünsche mir, dass die Diversity-Debatte bald Geschichte sein wird! Während wir bei der Zahl von MINT-Studentinnen und auch in vielen anderen Bereichen Fortschritte machen, gibt es immer wieder Nachrichten, die mich traurig stimmen. Diese reichen von der geringen Frauenquote in Start-ups bis hin zu den Berichten der letzten Jahre über frauen-unfreundliche Unternehmenskulturen im Silicon-Valley.
Aber ich bleibe optimistisch. Beispiele wie Sheryl Sandberg oder Marissa Mayer inspirieren viele junge Frauen und Männer. Kulturelle Vielfalt sehe ich inzwischen überall: In den meisten Softwarefirmen arbeiten Menschen aus aller Welt zusammen. Hoffen wir, dass sich diese Entwicklung vermehrt auf andere Diversity-Bereiche, wie Geschlecht und Hautfarbe, ausweitet.

Hindernisse

Es gibt keinen Weg ohne Steine – und das wäre ja auch langweilig. Da ich einen sehr hohen Qualitätsanspruch an meine Arbeit habe, stehe ich mir oft selbst im Weg. Der Tag hat allerdings nur 24 Stunden, deswegen muss man lernen zu entscheiden, welchen Steinen man aus dem Weg geht und aus welchen man etwas Neues baut.

Die Vorurteile gegenüber Frauen im IT-Umfeld sind nach wie vor präsent.

Die Vorurteile gegenüber Frauen im IT-Umfeld sind nach wie vor präsent. Das fängt bei der Reaktion auf die Studienwahl an (“Warum Informatik? Da sind doch nur Nerds.”), betrifft Professoren an den Universitäten (“Bitte keine Frauenteams, damit habe ich schlechte Erfahrungen gemacht”), und setzt sich im Berufsalltag fort (“Ach, Sie sind nicht die Assistentin?”).

Mich hat das angespornt, stets zu beweisen, dass ich fachlich gut bin. Durch diesen Antrieb war ich oft besser als andere. Ich kann mir vorstellen, dass es vielen Frauen in der Tech-Branche ähnlich geht. Es hat ein paar Jahre gedauert, bis ich verstanden habe, dass wir Frauen weder besser, noch schlechter, und erst recht nicht genauso sein müssen wie Männer. Wir sollten lernen, stolz darauf sein, wer wir sind und was wir leisten.

Tipps & Tricks

Ich kenne viele tolle Menschen in Tech, zudem viele Organisationen und Freiwillige, die Frauen den Einstieg erleichtern möchten. Ich kann nur allen Frauen raten, diese Untersützung anzunehmen und sie nach dem erfolgreichen Einstieg an die nächste Generation weiterzugeben.

Der Beitrag Women in Tech: „Wir Frauen sind weder besser noch schlechter, und müssen erst recht nicht genauso sein wie Männer“ ist auf entwickler.de erschienen.

]]>
https://entwickler.de/online/karriere/women-in-tech-henny-selig-579922244.html/feed 0
styled-components: Version 5.0 der JavaScript Library erschienen https://entwickler.de/online/javascript/styled-components-version-5-579922257.html https://entwickler.de/online/javascript/styled-components-version-5-579922257.html#respond Tue, 14 Jan 2020 14:40:36 +0000 https://entwickler.de/?p=579922257 styled-components v5.0 wurde veröffentlicht. Die React-Library kann dank des Updates bei einer kleineren Bundle-Größe schnelleres Server-side Rendering und Client-Side-Mounting aufweisen. Breaking Changes wurden hingegen nicht vorgenommen.

Der Beitrag styled-components: Version 5.0 der JavaScript Library erschienen ist auf entwickler.de erschienen.

]]>
styled-components v5.0 wurde veröffentlicht. Die React-Library kann dank des Updates bei einer kleineren Bundle-Größe schnelleres Server-side Rendering und Client-Side-Mounting aufweisen. Breaking Changes wurden hingegen nicht vorgenommen.

styled-components v5.0 ist da. Die Library für CSS-Stile in JavaScript für React wird mit dem neuen Major Releases laut den Entwicklern schneller und soll dank Hooks ein weniger umfangreicheren Code in den React DevTools erzeugen. Gegeben ist außerdem eine Abwährtskompatibilität, da auf Breaking Changes verzichtet wurde.

styled-components v5.0: Das ist neu

Im Kern der v5.0 steht die Performance-Verbesserung. Laut Entwickler Evan Jacobs konnte die Bundle-Größe um 19% reduziert werden, während das Client-Side-Mounting um 18% schneller arbeiten soll. Eine Geschwindigkeitsverbesserung von sogar 45% wird für das Server-Side-Rendering angegeben, das Aktualisieren der Dynamic Styles soll um rund 17% effektiver geworden sein. Möglich wurden diese Leistungssteigerungen durch die vollständig neu aufgebaute Core Stylesheet Engine.

Auf Seiten der React DevTools ist aufgrund von verwendeten Hooks weniger Component Nesting nötig, was den Code in den DevTools übersichtlicher zeigt, wenn styled-components verwendet wird. Im Blog-Artikel zum neuen Major Release findet sich dafür folgendes Beispiel von Entwickler Jacobs:

Beispiel einer bisherigen TagLine -Komponente in den React DevTools:

 
<TagLine>
  <StyledComponent forwardedRef={null}>
    <Context.Consumer>
      <Context.Consumer>
        <h2 className=”H2-sc-1izft7s-7”>Hello world</h2>
      </Context.Consumer>
    </Context.Consumer>
  </StyledComponent>
</TagLine>

Die gleiche Komponente, unter der Verwendung von styled-components v5.0, sieht mit dem Einsatz von Hooks wie folgt aus:

 
<TagLine>
<h2 className=”H2-sc-1izft7s-7”>Hello world</h2>
</TagLine>

Eine weitere Neuerung hat der <StyleSheetManager /> erhalten, sodass der CSS Parser nun durch Plug-ins erweiterbar ist. Dieses neues Feature ermöglichte es den Entwicklern auch, einen Register Transfer Level Support zu implementieren, der wie folgt angewendet werden kann:

 
import { StyleSheetManager } from 'styled-components';
import stylisRTLPlugin from 'stylis-plugin-rtl';

<StyleSheetManager stylisPlugins={[stylisRTLPlugin]}>
  <App />
</StyleSheetManager>

Die Version 5.0 enthält keine Breaking Changes, lediglich die aktuellste Version von React wird benötigt, um die Library zu verwenden. Installiert werden kann styled-components mittels:

 
npm install styled-components@^5.0.0

Alle Informationen zur neuen Version von styled-components finden sich auf GitHub und im offiziellen Blog-Artikel.

Der Beitrag styled-components: Version 5.0 der JavaScript Library erschienen ist auf entwickler.de erschienen.

]]>
https://entwickler.de/online/javascript/styled-components-version-5-579922257.html/feed 0
Test mit Jest: Das JavaScript-Test-Framework auf dem Prüfstand https://kiosk.entwickler.de/php-magazin/php-magazin-1-2020-2/test-mit-jest/ https://kiosk.entwickler.de/php-magazin/php-magazin-1-2020-2/test-mit-jest/#respond Tue, 14 Jan 2020 11:00:04 +0000 https://entwickler.de/?p=579922078 Wer JavaScript nicht automatisiert testet, handelt sich schon wegen des vergleichsweise offenen Sprachstandards über kurz oder lang gravierende Probleme ein. Mit Jest gibt es nun ein neues JavaScript-Test-Framework, das aus den Fehlern der alten zu lernen sucht.

Der Beitrag Test mit Jest: Das JavaScript-Test-Framework auf dem Prüfstand ist auf entwickler.de erschienen.

]]>
Wer JavaScript nicht automatisiert testet, handelt sich schon wegen des vergleichsweise offenen Sprachstandards über kurz oder lang gravierende Probleme ein. Mit Jest gibt es nun ein neues JavaScript-Test-Framework, das aus den Fehlern der alten zu lernen sucht.

Der Beitrag Test mit Jest: Das JavaScript-Test-Framework auf dem Prüfstand ist auf entwickler.de erschienen.

]]>
https://kiosk.entwickler.de/php-magazin/php-magazin-1-2020-2/test-mit-jest/feed 0
Angular: Performanceoptimierung mit „OnPush“ https://entwickler.de/online/windowsdeveloper/angular-performance-onpush-579921383.html https://entwickler.de/online/windowsdeveloper/angular-performance-onpush-579921383.html#respond Tue, 14 Jan 2020 09:30:34 +0000 https://entwickler.de/?p=579921383 Die Geschwindigkeit von Datenbindungen ist in Angular hoch. Angular verfügt mit OnPush über einen höchst performanten Modus, um Datenbindungen zielgerichtet zu aktualisieren. Der Einsatz von Immutables und Observables macht dies möglich.

Der Beitrag Angular: Performanceoptimierung mit „OnPush“ ist auf entwickler.de erschienen.

]]>
Die Geschwindigkeit von Datenbindungen ist in Angular hoch. Angular verfügt mit OnPush über einen höchst performanten Modus, um Datenbindungen zielgerichtet zu aktualisieren. Der Einsatz von Immutables und Observables macht dies möglich.

Mit der Strategie <em>OnPush</em> kann Angular zielgerichtet herausfinden, welche Datenbindungen zu aktualisieren sind. Damit dieser äußerst performante Modus funktioniert, muss die Anwendung Immutables und Observables einsetzen. Die Datenbindung in Angular ist sehr schnell. Der Angular-Compiler erzeugt beispielsweise für Datenbindungen Code, der sich von der für JavaScript verantwortlichen VM im Browser besonders gut optimieren lässt. Solche sogenannten monomorphen Codestrecken erreichen ungefähr die Geschwindigkeit von nativem C-Code.

Damit sich alle JavaScript-Objekte ohne weiteres binden lassen, nutzt Angular jedoch standardmäßig Dirty Checking. Das bedeutet, dass jeweils nach dem Ausführen von Event Handlern alle Datenbindungen auf Änderungen geprüft werden. Genau hier setzt die Datenbindungsstrategie OnPush an. In diesem Modus findet Angular zielgerichtet heraus, welche Bindungen zu aktualisieren sind. Damit diese Strategie funktioniert, muss die Anwendung besondere Datenstrukturen verwenden, nämlich Immutables und Observables. In diesem Artikel gehe ich auf OnPush ein und zeige, wie sich Immutables und Observables einsetzen lassen.

Immutables

Der Name lässt es schon vermuten: Immutables sind Datenstrukturen, die nicht veränderbar sind. Ändern sich die damit beschriebenen Objekte, ersetzt die Anwendung das gesamte Immutable durch ein neues. Das bedeutet im Umkehrschluss aber auch, dass Angular nur noch Objektreferenzen und nicht alle einzelnen Properties auf Änderungen prüfen muss.

Die Methode delay in Listing 1 veranschaulicht den Umgang mit Immutables. Ihre Aufgabe ist es, für den ersten Flug eines Arrays eine Verspätung von 15 Minuten zu vermerken. Zuerst definiert das Beispiel Variablen, die auf das gesamte Array, auf den betroffenen Flug sowie auf dessen Datum verweisen. Sie nennen sich oldFlights, oldFlight und oldFlightDate.

Die danach eingerichteten Variablen repräsentieren den neuen Zustand. Das Objekt newFlightDate verweist auf das geänderte Datum. Dieses Datum übernimmt newFlight gemeinsam mit den restlichen Werten von oldFlight. Zusätzlich verweist newFlights auf ein neues Array, das sich aus dem neuen Flug und den restlichen nicht geänderten Flügen zusammensetzt.

C# 8.0 Spickzettel

Kostenlos: C# 8.0 – neue Sprachfeatures auf einen Blick

Der C#-8.0-Spickzettel fasst die neuen Features der Sprache zusammen mit Blick auf das aktuelle .NET Core 3.0 bzw. .NET Standard 2.1. Jetzt herunterladen und schneller & effektiver programmieren!

Um an diese Flüge zu kommen, nutzt delay die Arraymethode slice. Da slice ein Array mit den ausgewählten Einträgen zurückliefert, nutzt das Beispiel an dieser Stelle den aus drei Punkten bestehende Spread-Operator von ECMAScript 2015. Er fügt an dieser Stelle die Einträge aus dem von slice gelieferten Array direkt in das übergeordnete Array ein und vermeidet somit ein Array im Array. Diese Vorgehensweise veranschaulicht auch, dass Routinen nicht geänderte Teilbäume aus alten Immutables unverändert übernehmen können.

Danach verstauen wir das neue Array in der Ausgangsvariable this.flights und ändern somit seine Objektreferenz. Die Debug-Ausgaben am Ende veranschaulichen, dass eine Anwendung nun Änderungen am Array oder an den einzelnen Flügen sehr einfach entdecken kann, ein einziger Vergleich reicht hierzu.

delay() {

  const ONE_MINUTE = 1000 * 60;

  let oldFlights = this.flights;
  let oldFlight = oldFlights[0];
  let oldFlightDate = new Date(oldFlight.date);

  let newFlightDate = new Date(oldFlightDate.getTime() + ONE_MINUTE * 15);

  let newFlight =  {
    id: oldFlight.id,
    from: oldFlight.from,
    to: oldFlight.to,
    date: newFlightDate.toISOString()
  };

  let newFlights = [
    newFlight,
    ...oldFlights.slice(1, this.fluege.length-1)
  ];

  this.flights = newFlights;

  console.debug("Array: " + (oldFlights == newFlights)); // false
  console.debug("#0: " + (oldFlights[0] == newFlights[0])); // false
  console.debug("#1: " + (oldFlights[1] == newFlights[1])); // true

}

Immutables und TypeScript

Als Ergänzung zum Spread-Operator für Arrays, den wir im letzten Abschnitt betrachtet haben, hat TypeScript im Laufe der Zeit weitere Spracherweiterungen bekommen, die die Arbeit mit Immutables vereinfachen. Bei der einen handelt es sich um den Access Modifier readonly:

export class Flight {
  readonly id: number;
  readonly from: string;
  readonly to: string;
  readonly date: string;
}

Die damit markierten Eigenschaften lassen sich nur im Konstruktor sowie beim Erzeugen eines Objekts über ein Objekt-Literal setzen:

let flight: Flight = { id: 7, from: 'Graz', to: 'Hamburg', date: '2018-12-24T17:00:00.000+01:00' };
// flight.id = 8; // Fehler, weil readonly

Bei einem späteren Aktualisieren solcher Eigenschaften meldet der Compiler einen Fehler.

Ein weiteres Sprachmerkmal, das beim Einsatz von Immutables hilfreich ist, ist der Spread-Operator für Objekte. Statt

  let newFlight =  {
    id: oldFlight.id,
    from: oldFlight.from,
    to: oldFlight.to,
    date: newFlightDate.toISOString()
  };

können Sie damit

let newFlight =  {
    ...oldFlight,
    date: newFlightDate.toISOString()
  };

schreiben, um zum einen alle Eigenschaften aus oldFlight zu übernehmen und zum anderen ein neues Datum zu vergeben.

Immutables und Datenbindung

Wie eingangs erwähnt, traversiert Angular standardmäßig nach dem Ausführen der Event Handler den gesamten Komponentenbaum. Dabei aktualisiert das Framework alle geänderten Property Bindings. Kommen Immutables zum Einsatz, kann Angular jedoch die vielen Teilbäume erkennen, die nicht von Änderungen betroffen sind, und sie zur Steigerung der Leistung außen vor lassen.

Abbildung 1 veranschaulicht das. Dabei wird davon ausgegangen, dass die Methode in Listing 1 das Array flights sowie einen Flug darin aktualisiert hat. Dank Immutables kann Angular ohne Aufwand prüfen, ob die über Property Bindings weitergereichten Daten geändert wurden. Wie oben beschrieben ist hierzu pro Objekt lediglich ein einziger Vergleich notwendig. Im betrachteten Fall erkennt Angular, dass sich lediglich einer der weitergereichten Flüge geändert hat, und betrachtet nur den davon betroffenen Teilbaum. Alle anderen Teilbäume ignoriert es. Da das SPA-Framework bei diesem Vorgehen im besten Fall lediglich einem einzigen Pfad durch den Baum folgenden muss, birgt das bei größeren Komponentenbäumen ein enormes Potenzial in sich.

Abb. 1: Immutables in Angular

Abb. 1: Immutables in Angular

Damit eine Komponente in den Genuss dieses Verfahrens kommt, ist die changeDetection-Eigenschaft im Component-Dekorator auf OnPush zu setzen (Listing 2).

import { Flug } from '../entities/flug';
import { Input, Component, ChangeDetectionStrategy } from '@angular/core';

@Component({
  selector: 'flug-card',
  template: require('./flug-card.component.html'),
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class FlugCard {
  @Input() item: Flug;
}

Das führt dazu, dass Angular davon ausgeht, dass hinter allen eingehenden Property Bindings Immutables stehen. Stellt Angular durch Vergleich der Objektreferenzen beim Property Binding fest, dass die zuletzt ausgeführten Event Handler diese Objekte nicht verändert haben, schließt es den gesamten Teilbaum von der weiteren Betrachtung aus.

Observables

Neben Immutables unterstützt Angular auch Observables zur Optimierung der Performance. Diese Objekte benachrichtigen Angular, wenn es eine neue Version eines gebundenen Objekts gibt. Komponenten können somit von der Änderungsverfolgung ausgeschlossen werden, bis sie eine solche Nachricht erhalten.

Abbildung 2 veranschaulicht dieses Vorgehen. Hier sind die einzelnen Flüge durch Observables repräsentiert. Um diesen Umstand hervorzuheben, hat sich die Nutzung eines Dollarzeichens als Suffix eingebürgert. Die beiden Card-Komponenten nutzen nach wie vor die Strategie OnPush. Da sich die Referenz auf die übergebenen Observables nicht ändert, schließt Angular sie von der Änderungsverfolgung aus. Allerdings kann die Anwendung Angular anweisen, beim Empfang einer neuen Version des Fluges die Datenbindung zu aktualisieren. Ähnlich wie beim Einsatz von Immutables prüft Angular in diesem Fall auch sämtliche übergeordnete Komponenten auf Änderungen, zumal die Daten ja per Definition von oben nach unten fließen und somit auch schon weiter oben zum Einsatz kommen können.

Abb. 2: Gebundene Observables in Angular

Abb. 2: Gebundene Observables in Angular

Ein ähnliches Gedankenexperiment hierzu veranschaulicht Abbildung 3. Dort wird jedoch das Array mit den Flügen durch ein Observable repräsentiert. Nutzt nun zusätzlich die FlightSearch-Komponente die Strategie OnPush, schließt Angular auch sie zunächst von der Änderungsverfolgung aus. Meldet das Observable eine neue Version des Arrays, gleicht Angular den Zustand von FlightSearch mit dem UI ab. Dasselbe gilt auch hier für sämtliche übergeordnete Komponenten, die in der Abbildung nicht ersichtlich sind. Wie mit den untergeordneten Card-Komponenten zu verfahren ist, hängt von ihrer Change-Detection-Strategie ab. Kommen hier Immutables mit OnPush zum Einsatz, betrachtet Angular – wie oben beschrieben – nur den Teilbaum mit Änderungen. Ansonsten iteriert es sämtliche untergeordnete Teilbäume.

Abb. 3: Zusammenspiel von Immutables und Observables

Abb. 3: Zusammenspiel von Immutables und Observables

Datenbindung mit Observables

Um das zuletzt beschriebene Vorgehen zu veranschaulichen, verwaltet das hier beschriebene Beispiel die abgerufenen Flüge mit einem BehaviorSubject:

import { ReplaySubject } from 'rxjs/ReplaySubject'
[...]
private flightsSubject = new BehaviorSubject<Flight[]>([]);
public flights$ = flightsSubject.asObservable();

Dabei handelt es sich um ein Observable, das die zu versendenden Daten direkt über Methoden entgegennimmt und an einen oder mehrere Interessenten weiterleitet. Darüber hinaus merkt sich das BehaviorSubject den zuletzt versendeten Wert, sodass ein neuer Interessent diesen sofort empfangen kann. Den Initialwert nimmt es über den Konstruktor entgegen.

Damit nicht jeder Konsument selbst Daten über das Subject versenden kann, ist es privat. Lediglich ein davon abgeleitetes Observable flights$, das nur lesenden Zugriff gewährt, wird als öffentliche Eigenschaft bereitgestellt.

Neue Versionen des Flugarrays versendet das Beispiel mit der Methode next:

this.flightsSubject.next(newFlights);

Mit der async Pipe lässt sich das Observable in Datenbindungsausdrücken nutzen. Dazu trägt sie sich als Interessent beim Observable ein und kümmert sich beim Eintreffen neuer Daten um die Aktualisierung der GUI:

<div *ngFor="let flight of flights$ | async">
  <flight-card [item]="flight" […]></flight-card>
</div>    

Fazit

Dank OnPush muss Angular nicht mehr sämtliche Komponenten auf Änderungen prüfen, sondern im besten Fall nur einen einzigen Pfad von der Wurzel bis zur betroffenen Stelle im Komponentenbaum näher betrachten. Das erhöht die Datenbindungsperformance drastisch.

Damit OnPush möglich ist, muss die Anwendung jedoch auf Immutables und Observables setzen. Während schon eine dieser Datenstrukturen reicht, um OnPush prinzipiell aktivieren zu können, ergänzen sich diese beiden Konzepte prima: Observables weisen auf jene Komponente hin, in der die erste Änderung entdeckt wurde, und mit Immutables kann sich Angular am Komponentenbaum entlang weiter nach unten hangeln und dabei erkennen, welche Kindkomponenten ebenfalls zu aktualisieren sind.

Etwas mühsam gestaltet sich anfangs die Arbeit mit Immutables: Anstatt Eigenschaften zu ändern muss man sich einen neuen Programmierstil antrainieren, der den Austausch aller geänderten Objekte zur Folge hat.

Wer sich unsicher ist, ob dieser Mehraufwand gerechtfertigt ist, kann OnPush auch nur für ausgewählte Komponenten aktivieren, die es wert sind, optimiert zu werden. In einem solchen Fall sind auch nur dort die genannten Datenstrukturen nötig. Wer hingegen immer die bestmögliche Performance erreichen will, nutzt OnPush durchgängig. Bibliotheken wie NgRx, die zum einen beim Einsatz von Observables unterstützen und zum anderen von vornherein die Nutzung von Immutables erzwingen, können dabei helfen.

Windows Developer

Windows DeveloperDieser Artikel ist im Windows Developer erschienen. Windows Developer informiert umfassend und herstellerneutral über neue Trends und Möglichkeiten der Software- und Systementwicklung rund um Microsoft-Technologien.

Natürlich können Sie den Windows Developer über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. Außerdem ist der Windows Developer weiterhin als Print-Magazin im Abonnement erhältlich.

Der Beitrag Angular: Performanceoptimierung mit „OnPush“ ist auf entwickler.de erschienen.

]]>
https://entwickler.de/online/windowsdeveloper/angular-performance-onpush-579921383.html/feed 0
Cloud Computing und Geopolitik – Bedenkliche Vorgänge rund um eine Gaspipeline https://entwickler.de/online/windowsdeveloper/cloud-computing-gaspipeline-geopolitik-579922024.html https://entwickler.de/online/windowsdeveloper/cloud-computing-gaspipeline-geopolitik-579922024.html#comments Tue, 14 Jan 2020 09:30:21 +0000 https://entwickler.de/?p=579922024 Es war eine der Top-Schlagzeilen Ende letzten Jahres: Die USA haben ein „Gesetz zum Schutz von Europas Energiesicherheit“ erlassen, das auf Betreiberfirmen spezialisierter Schiffe zum unterseeischen Verlegen von Rohren für die Nord-Stream-2-Gaspipeline abzielt. Angedroht werden unter anderem Einreiseverbote und das Einfrieren von Vermögen von Personen, die mit solchen Betreiberfirmen in Verbindung gebracht werden.

Der Beitrag Cloud Computing und Geopolitik – Bedenkliche Vorgänge rund um eine Gaspipeline ist auf entwickler.de erschienen.

]]>
Es war eine der Top-Schlagzeilen Ende letzten Jahres: Die USA haben ein „Gesetz zum Schutz von Europas Energiesicherheit“ erlassen, das auf Betreiberfirmen spezialisierter Schiffe zum unterseeischen Verlegen von Rohren für die Nord-Stream-2-Gaspipeline abzielt. Angedroht werden unter anderem Einreiseverbote und das Einfrieren von Vermögen von Personen, die mit solchen Betreiberfirmen in Verbindung gebracht werden.

Im Visier der amerikanischen Behörden befindet sich insbesondere die Schweizer Firma Allseas, die federführend für das Verlegen der Rohre im Nord-Stream-2-Projekt verantwortlich ist. Nach dem Erlass des oben erwähnten Gesetzes hat Allseas die Arbeit an der Pipeline erst ausgesetzt, dann komplett eingestellt. Da die notwendigen Spezialschiffe rar sind, verzögert diese Entwicklung die Fertigstellung der Gaspipeline signifikant. Möglicherweise ist das Projekt als Ganzes gefährdet, da auf politischer Ebene manche Interessengruppen die Entwicklungen zum Anlass nehmen, Nord Stream 2 generell zu hinterfragen.

Was hat das mit Cloud-Computing zu tun?

Ich möchte in dieser Kolumne nicht die Sinnhaftigkeit des Projekts Nord Stream 2 kommentieren. Ich möchte diese Einmischung der USA in europäische Entscheidungen auch nicht als positiv oder negativ bewerten. Manche empfinden es als Zumutung. Es gibt aber durchaus Stimmen in Europa, die Nord Stream 2 kritisch gegenüberstehen und einige US-Politiker behaupten, dankbare Rückmeldungen aus Europa zum vorliegenden Gesetz erhalten zu haben.

Auf jeden Fall kam ich ins Grübeln, als ich die Berichterstattung über das US-Gesetz verfolgt habe. Der Grund dafür sind die vielen Gespräche, die ich in den letzten Jahren mit Kunden zum Thema Cloud-Computing geführt habe. Die großen Cloudanbieter wie Microsoft, Amazon und Google konnten zwar mittlerweile fast alle Zweifler davon überzeugen, dass ihre Rechenzentren in Sachen IT-Sicherheit ein ausgesprochen hohes Niveau bieten. Mögliche Einflussnahmen der US-Regierung sorgen aber bei vielen Kunden, mit denen ich zu tun habe, immer noch für ein gehöriges Maß an Cloudskepsis.

C# 8.0 Spickzettel

Kostenlos: C# 8.0 – neue Sprachfeatures auf einen Blick

Der C#-8.0-Spickzettel fasst die neuen Features der Sprache zusammen mit Blick auf das aktuelle .NET Core 3.0 bzw. .NET Standard 2.1. Jetzt herunterladen und schneller & effektiver programmieren!

Es wird argumentiert, dass Microsoft und Co. als US-Unternehmen US-amerikanischen Gesetzen unterliegen. Das Bedenken ist, dass die USA Druck auf sie ausüben könnten, um an wertvolle Daten zu kommen, unliebsamen Ländern Clouddienste zu verweigern oder wirtschaftliche Interessen durchzusetzen. Die erlassenen Gesetze rund um Nord Stream 2 haben gezeigt, dass diese Möglichkeit nicht rein theoretisch ist, sondern in der Praxis wirksam werden kann.

Nicht nur US-Clouds betroffen

Der Fall Allseas zeigt, dass die Frage des Unternehmenssitzes kein bestimmender Faktor ist, wenn es darum geht, ob ein Staat in der Praxis Einfluss nehmen kann. Auch wenn das Unternehmen den Hauptsitz außerhalb der USA hat, können die USA durch ihre wirtschaftliche Stärke genug Druck aufbauen, um ein Einlenken zu erzwingen.

Diese Tatsache ist für Cloud-Computing ein Problem. Es ist schwierig genug, eine in Europa in der Praxis nutzbare Cloudumgebung von Weltklasse von einem Hersteller außerhalb der USA zu finden. Im Gartner Magic Quadrant für Cloud-IaaS sind im Leaders Quadrant beispielsweise nur Microsoft, Amazon und Google zu finden. Ein führender Anbieter, der so weit von den USA entkoppelt ist, dass ihn kein massiver, wirtschaftlicher Druck zum Einlenken zwingen könnte, ist weit und breit nicht in Sicht.

Nur nicht die Nerven verlieren

Was also tun? Investitionen in Cloud-Computing sofort stoppen und wieder Server in den Keller stellen? Das ist meiner Ansicht nach keine gute Lösung. Politische Konflikte wie der Streit um russische Energielieferungen über eine neue Pipeline in der Ostsee sind zum Glück außergewöhnliche und seltene Ereignisse. Der Alltag ist viel „langweiliger“. Im Normalzustand bieten Cloud-Computing-Umgebungen im Vergleich zu dem, was die meisten Organisationen selbst betreiben können, viel höhere Sicherheit. Sich panisch aus der Cloud zu verabschieden wäre vielleicht gut gemeint, ganzheitlich betrachtet aber kontraproduktiv.

Was können wir also tun?

Mein erster und wichtigster Rat an alle, die Cloud-Computing mit US-Bezug nutzen oder es planen, ist, ruhig Blut zu bewahren. Die politischen Beziehungen zwischen den USA und Europa sind vielleicht nicht so harmonisch wie sie sein könnten, katastrophal sind sie jedoch auch nicht. Wir sind aber auch nicht zur Untätigkeit verdammt. Hier einige Beispiele von Maßnahmen, die fallspezifisch in Betracht gezogen werden könnten:

    • Die Verschlüsselung von Daten ist ein wirksamer Schutz vor Spionage. Die Bandbreite der Möglichkeiten reicht von den in Azure von Haus aus vorgesehenen Sicherheitsmechanismen (z. B. Verschlüsselung von Daten mit Azure Key Vault, Azure SQL Transparent Data Encryption, Azure SQL Always Encrypted) bis hin zu End-to-end Encryption auf Anwendungsebene. Welche Verschlüsselungsmaßnahmen die richtigen sind, muss individuell entschieden werden. Auf jeden Fall sollten Organisationen in den Aufbau von Wissen investieren, damit Entscheidungen über Verschlüsselung fundiert getroffen und richtig umgesetzt werden können.
    • Der Lock-in-Effekt, also die Abhängigkeit vom jeweiligen Cloudanbieter, sollte kritisch hinterfragt werden. Eine umfangreiche SaaS-Lösung komplett cloudunabhängig zu entwickeln, ist eine teure Angelegenheit. Durch das Setzen auf Standards (z. B. standardisierte Kommunikationsprotokolle, standardisierte APIs wie Dapr), den Einsatz von Containertechnologie und das Nutzen von Produkten, die auch außerhalb der gewählten Cloudumgebung verfügbar sind, kann der Lock-in-Effekt zumindest reduziert werden. Ein Ausziehen aus der Cloud oder Umziehen in eine andere Cloud sind dann zwar nicht auf Knopfdruck möglich, lassen sich aber im Extremfall machen.
    • Mit der Anwendung eine Cloud verlassen zu können ist nichts wert, wenn man plötzlich keinen Zugang zu seinen Daten oder seinem Quellcode mehr hat. Insofern kann es für manche Organisationen wichtig sein, zumindest Sicherungen der wichtigsten Datenbestände im physischen Zugriff zu haben. Aber Achtung: Back-ups außerhalb der Cloud müssen entsprechend abgesichert sein (z. B. Verschlüsselung, physischer Zugriffsschutz), sonst öffnet man Angreifern Tür und Tor. Wer sich den professionellen Schutz seiner Back-ups on Premises nicht leisten kann oder will, ist vielleicht trotz aller Nachteile mit einer reinen Cloudlösung besser bedient.
    • Betreibt man Softwarelösungen für kritische Infrastruktur, bei der ein Ausfall von Stunden oder Tagen hohe Schäden nach sich zieht, ist das Aufrechterhalten einer gewissen IT-Infrastruktur, die man auch physisch unter Kontrolle hat, unverzichtbar. Da das eine teure Option ist, empfehle ich, eine Bewertung der Systeme durchzuführen. Kostenvorteile durch die Nutzung von Cloud-Computing für weniger kritische Systeme können Budget und Zeit freimachen für professionelle, lokale Infrastruktur für jene Systemteile, die rasch übersiedelt oder generell lokal betrieben werden müssen.

Vorsicht vor Scheinlösungen

Sicherheit kostet Geld. Die großen Cloudanbieter können hohe Sicherheit umsetzbar machen, indem sie standardisierte Lösungen unter Nutzung von Skalierungseffekten für jede einzelne Kundenorganisation leistbar machen. Es geht dabei nicht nur um Produkt- oder Abonnementpreise. Einfachheit der Nutzung, Dokumentation, kostengünstiger Einstieg durch Selfservice und Freemium-Angebote, Zugang zu günstigen Trainings und Verfügbarkeit von Spezialistinnen und Spezialisten auf dem Arbeitsmarkt sind Faktoren, die oft schwerer wiegen. Wer meint, dass Sicherheitslösungen auf Augenhöhe mit den großen Cloudanbietern im Eigenbau mit wenig Aufwand machbar sind, irrt. Wenn man Abkürzungen nimmt, endet man meistens mit einem System, in dem man vielleicht einen Sicherheitsaspekt verbessert, gleichzeitig aber viele andere Sicherheitslücken – bewusst oder unbewusst – übersehen hat.

Ein typisches, fast schon banales Beispiel, das ich in meiner täglichen Beratungspraxis immer wieder sehe, ist der lose Umgang mit Zertifikaten, Verschlüsselungsschlüsseln oder Secrets (z. B. DB Connection Strings, API Keys). In den wenigsten Fällen wird on Premises sorgsam damit umgegangen. Jede Praktikantin und jeder Praktikant bekommt Zugang, obwohl Secrets praktisch nie geändert werden. In der Azure-Cloud sorgen Secure Defaults, Managed Identities und Key Vault dafür, dass solche Anfängerfehler nicht gemacht werden können.

Ähnliches gilt beim Vermeiden von Lock-in-Effekten. Wer dieses Thema ernst nimmt und tatsächlich rasch von der Cloud ins eigene Rechenzentrum wechseln können will, muss dieses Szenario testen. Wenn man sich auch noch so sehr bemüht, man übersieht in großen SaaS-Lösungen immer Details, die einen an die jeweilige Umgebung binden und die nur durch langwierige Arbeit zu entfernen sind. Erst durch das Ausprobieren des Auszugs aus der Cloud wird man sich der kritischen Faktoren bewusst und kann sie beheben oder zumindest einschätzen.

Gaspipeline & Co.: Politische Lösungen sind gefragt

Als Technikerinnen und Techniker können wir politische Probleme nicht lösen. Auch das Einschätzen von Risiken, die sich aus geopolitischen Konflikten wie der Nord-Stream-2-Pipeline ergeben, ist (wenn überhaupt) nur Personen möglich, die sich darauf spezialisieren. Unsere Aufgabe ist es, bei der objektiven Beurteilung der technischen und organisatorischen Maßnahmen zur Erhöhung von Datenschutz und Datensicherheit zu helfen. Microsoft stellt dafür beispielsweise im Service Trust Portal nützliche Informationen und Checklisten bereit.

Wenn das Ergebnis einer Untersuchung ist, dass in gewissen Bereichen die Cloud nicht einsetzbar ist oder begleitende Maßnahmen wie die Einführung hybrider Systeme notwendig sind, ist es unsere Aufgabe, die Gesamtsicht nicht aus den Augen zu verlieren. Nur weil die Server im eigenen Rechnerraum stehen, sind sie noch nicht sicher.

Schließlich können wir uns auch gesellschaftspolitisch engagieren und versuchen, im Rahmen unserer Möglichkeiten Lösungen zu finden, die eine Zusammenarbeit über geografische oder gesellschaftliche Grenzen hinweg ermöglicht. Das muss nicht zwangsläufig die Mitarbeit in einer politischen Partei bedeuten. Wir können auch in unserem Fachbereich aktiv werden und beispielsweise etwas zur freien Verfügbarkeit von Verschlüsselungs- und Softwareplattformen durch Unterstützung von Open-Source-Projekten beitragen.

Der Beitrag Cloud Computing und Geopolitik – Bedenkliche Vorgänge rund um eine Gaspipeline ist auf entwickler.de erschienen.

]]>
https://entwickler.de/online/windowsdeveloper/cloud-computing-gaspipeline-geopolitik-579922024.html/feed 1
Speed, Speed, Speed: JavaScript vs C++ vs WebAssembly https://entwickler.de/online/javascript/javascript-vs-c-vs-webassembly-579917264.html https://entwickler.de/online/javascript/javascript-vs-c-vs-webassembly-579917264.html#respond Tue, 14 Jan 2020 08:45:21 +0000 https://entwickler.de/?p=579917264 C++, JavaScript oder WebAssembly: Welche Sprache ist für Node-Anwendungen die richtige, wenn die Performance im Mittelpunkt steht? Franziska Hinkelmann gibt in dieser Keynote von der International JavaScript Conference München 2019 einen Überblick über die verschiedenen Optionen.

Der Beitrag Speed, Speed, Speed: JavaScript vs C++ vs WebAssembly ist auf entwickler.de erschienen.

]]>
C++, JavaScript oder WebAssembly: Welche Sprache ist für Node-Anwendungen die richtige, wenn die Performance im Mittelpunkt steht? Franziska Hinkelmann gibt in dieser Keynote von der International JavaScript Conference München 2019 einen Überblick über die verschiedenen Optionen.

In Node.js können wir WebAssembly-Module und native C++-Addons verwenden. Wenn die Performance der kritische Faktor für einen bestimmten Teil der Anwendung ist, kann man sich somit durchaus fragen, was eigentlich die bessere Wahl ist: Sollte man bei JavaScript bleiben? Oder ein natives C++-Addon schreiben? Oder WebAssembly verwenden? Franziska Hinkelmann vergleicht in dieser Keynote von der iJS München 2019, wie diese Optionen hinsichtlich der Performance abschneiden und was für welche Art von verschiedenen Workloads am besten geeignet ist.

International JavaScript Conference

Effective Microservices Architecture In Node.js

by Tamar Stern (Palto Alto Networks)

React Components And How To Style Them

by Jemima Abu (Telesoftas)

JavaScript Days 2020

Wie ich eine React-Web-App baue

mit Elmar Burke (Blendle) und Hans-Christian Otto (Suora)

Architektur mit JavaScript

mit Golo Roden (the native web)

Die Speakerin: Franziska Hinkelmann
Franziska Hinkelmann is a member of the Node.js Technical Steering Committee and an expert on ES6 performance. She has a Ph.D. in mathematics and is a software engineer at Google on the Cloud Platform team in New York City. Previously, she was on the Chrome V8 team. When she’s not working hard on making Node.js better on the Cloud Platform, she’s probably out riding horses.

Der Beitrag Speed, Speed, Speed: JavaScript vs C++ vs WebAssembly ist auf entwickler.de erschienen.

]]>
https://entwickler.de/online/javascript/javascript-vs-c-vs-webassembly-579917264.html/feed 0