Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03206.jsonl.gz/1140

Auf Wunsch eines Benutzers habe ich mein WordPress Plugin „List Last Changes“ erweitert.
Mittels Custom Fields können nun Seiten von der Auflistung im Widget ausgeschlossen werden.
Ein Shariff-Button stellt den direkten Kontakt zwischen Social Network und Besucher erst dann her, wenn letzterer aktiv auf den Share-Button klickt. Dadurch werden die Daten von Besuchern, welche den Blog oder die Webseite besuchen, nicht automatisch an die Social Networks übermittelt, wie dies bei den Standard-Buttons der bekannten Social-Media Plattformen geschieht.
Bei einem anderen Test stellte sich heraus, dass der Algorithmus mit den Performance-Verbesserungen „richtiger“ rechnete als die vorherige Implementation. Der Fehler hatte zwar keine Auswirkungen, da die Geräte den Wert nicht auswerten sollten, könnte aber bei einem Fehler auf der Geräteseite zu unerwartetem Verhalten führen.
Die Klasse sieht etwa wie folgt aus:
Um in die neue Struktur hinzugefügt zu werden muss der
container gesetzt werden. Die anderen Werte können gesetzt werden, ansonsten wird der Default-Wert übernommen.
Für das Erstellen der Kopie gab es am Anfang folgenden Code, der im Client angesiedelt war:
Dieser Code beinhaltet folgende Probleme:
Auf der Suche nach einer Lösung haben wir verschiedene Ansätze diskutiert.
Der Copy Constructor ist besonders aus der C++-Welt bekannt. Dort ist immer mindestens ein (impliziter) Copy Constructor vorhanden.
Für das oben gezeigte Beispiel würde der Copy Constructor etwa wie folgend aussehen:
Der Client-Code würde dann so aussehen:
Im C#-Umfeld ist die Clone-Funktion verbreiteter als der Kopierkonstruktor, besonders durch das Interface IClonable des .NET-Frameworks. Da wir aber keine 1:1-Kopie der Objekt-Instanz erstellen wollen können wir das Interface hier nicht einsetzen.
Die Implementation unserer Clone-Funktion könnte etwa so aussehen:
Mit der Clone()-Funktion würde sich dann der Client-Code wie folgt präsentieren:
Die dritte Variante besteht aus einer Factory, die sich um die Erzeugung der MyClass-Instanzen kümmert. Der Konstruktor der Klasse MyClass sollte dann auf
internal gesetzt werden um die Erzeugung über die Factory zu erzwingen.
Für den Einsatz der Factory wäre folgender Client-Code nötig:
Der Kopierkonstruktor und die Clone-Funktion haben beide den Nachteil, dass der Benutzer der Klasse die Varianten schnell übersehen kann. Dadurch würde trotzdem Code wie im anfänglichen Client-Code-Beispiel geschrieben. Durch das Verschieben der Erzeugungs-Funktionen in eine Factory sind die Varianten der Erzeugung schnell ersichtlich und der Benutzer kann so die passende Variante wählen.
Aus diesem Grund haben wir dann auch die Variante mit der Factory gewählt.
Wir werden nun die Verbesserungen nun in sauberen Code umsetzen und mitsamt den zusätzlichen neuen Features eines Zwischen-Release erzeugen. Dies wird dann eine intensive Testphase zur Folge haben um den Release plangemäss ausliefern zu können.
Währenddessen konnte ich einige kleine Tasks, die ‚vor sich hin dümpelten‘, in dieser Woche abschliessen, so dass ich nächste Woche bei der Performance-Optimierung mithelfen kann.
Das Review wurde auf zwei Teile mit unterschiedlichen Themen aufgeteilt. Die Stakeholder wurden entsprechend eingeladen und, wie in der Retrospektive der Woche 42 beschrieben, über die zu erwartenden Ergebnisse vorab informiert. Dadurch konnten die Diskussionen in der nötigen Tiefe abgehalten werden ohne dass die Hälfte der Stakeholder nicht an dem Thema interessiert gewesen wäre.
Im Rahmen des einen Review kam zum Vorschein, dass nicht nur die Dokumentation angepasst werden sollte sondern auch die daraus folgenden nötigen Anpassungen kommuniziert werden sollten. Es stellt sich hier die Frage, ob es sich dabei um eine Hol- oder eine Bring-Schuld handelt. Aus meiner Sicht sollten, wenn bekannt ist dass das andere Team die Funktionalität zur Zeit implementiert, Änderungen dem anderen Team auch mitgeteilt werden und nicht darauf gehofft werden, dass schon nachgefragt wird.
Diese Woche schwebte eine „Altlast“ des vorherigen Releases wie ein Damoklesschwert über dem Team: Die Performance-Probleme bei grossen Mengengerüsten waren bekannt und wurden auch immer offen kommuniziert. Da nun aber ein Auftrag mit einem grossen Mengengerüst ansteht wurde das Management nervös und dieses Problem muss nun sofort angegangen werden. Zwei bis drei Team-Mitglieder werden sich nun diesem Problem widmen während der Rest am neuen Release weiterarbeitet.
Während des „normalen“ Tagesgeschäftes zeigte sich wieder einmal, dass der Wert einer Dokumentation sinkt, wenn sie nicht aktuell gehalten wird. Besonders wenn es sich um die Definition eines Protokolls handelt, da normalerweise für die Kommunikation zwei Parteien nötig sind. Wenn nun Fehler oder Unklarheiten in der Dokumentation beim Implementieren auftauchen, diese aber nicht korrigiert werden, muss auf der Gegenseite dieselbe Lernkurve nochmals durchlaufen werden.
Diese Woche waren zuerst Ergänzungsarbeiten für den vorherigen Release zu leisten. Da sich die Komponenten der vorgegebenen und erwarteten Architektur entsprachen und auch beim anzusprechenden Gerät keine Überraschungen auftraten konnte ich diese Arbeiten schneller als geplant erledigen.
Dadurch konnte ich früher als erwartet wieder an den neuen Funktionalitäten arbeiten. Bei der Umsetzung machten wir auch wieder eine eintägige intensive und fruchtbare Pair-Programming-Session.
Kommunikation zwischen Projekt-Teams
Als ein Problempunkt hat sich die Kommunikation zwischen den zwei Projekt-Teams herausgestellt. Ein Grund für die schwierige Kommunikation dürfte beim Auslassen des Kickoff-Meetings liegen. Dies wird nun so bald als möglich nachgeholt.
Planung des Reviews
Beim Review des zu Ende gegangenen Sprints konnten keine Änderungen an der Software gezeigt werden, da hauptsächlich technische Aspekte behandelt wurden. Dadurch war es für nicht-technische Stakeholder schwierig, Feedback geben zu können.
Beim Planning des neuen Sprints wurde diese Problematik berücksichtigt und die Stakeholder in der Einladung zum Review bereits über die geplanten Resultate vor-informiert.