https://entwickler.de/feed/rss2

Eine Frage des Zustands: Lösungen für das React State Management im Vergleich (24.02.2021 12:00:17)

Sollte ich meinen State mit dem Context API und State Hooks oder Redux managen? Diese Frage stellen sich viele Entwickler, die mit React arbeiten Die richtige Antwort hängt stark von der jeweiligen Anwendung ab: Manchmal reicht das Context API nicht, während Redux für andere Fälle zu komplex ist Woher weiß man aber, was wozu passt?

Der Beitrag Eine Frage des Zustands: Lösungen für das React State Management im Vergleich ist auf entwicklerde erschienen


Women in Tech: ?Es gibt so viele Barrieren für Frauen? (24.02.2021 10:20:25)

In unserer Artikelserie ?Women in Tech? stellen wir inspirierende Frauen vor, die erfolgreich in der IT-Branche Fuß gefasst haben Heute im Fokus: Jessica Jordan, Senior Frontend Engineer und Community Evangelist bei Honeypot

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: Jessica Jordan

Jessica ist Senior Frontend Engineer und Community Evangelist bei Honeypot SIe ist Quereinsteigerin und kommt ursprünglich aus dem Fachbereich Biologie, in dem sie 2013 ihren Master an der Universität Bielefeld machte Schon während ihres Studiums wuchs ihr Interesse an der IT und verdiente ihren Unterhalt als Technikern an ihrer Universität Nach ihrem Abschluss fand Jessica ihren Weg ins Webcontent Management bei der Bosch Group Währenddessen absolvierte sie ein Praktikum als Emberjs-Entwicklerin und wechselte wenig später als Software-Developer zum Earlham Institute in Norwich Von dort verlief ihr Weg vom Frontend-Development und Softwareberatung bis zu ihrer jetzigen Stelle bei Honeypot Nebenbei engagiert sie sich als Developer- & Community-Support beim Ember Learning Core Team

Seit wann besteht dein Interesse für die Tech-Branche?

Mein Interesse für Technologie habe ich ziemlich spät entdeckt Bei uns zu Hause hatte ich erst als Jugendliche Zugang zu einem eigenen Rechner und tatsächlich erst in meiner Studienzeit Zugang zum Internet von zu Hause aus Meine ältere Schwester hatte schon seit jeher einen guten Draht zur Technik: Sie interessierte sich schon in ihrer frühen Jugend für Computer und Videospiele, gehörte damals in den frühen 90ern zu den ersten Internet-Usern und hat sich damals ihr eigenes Heimnetzwerk eingerichtet, ihre PCs selbst zusammengeschraubt und geupgradet Über sie kam ich dann auch schon in meiner Kindheit mit Technologie in Berührung, wenn wir gemeinsam Videospiele gespielt haben oder ich sie beim Basteln an Computern erlebt habe Auch wenn sich zu diesem Zeitpunkt noch kein starkes Eigeninteresse für Technik bei mir entwickelt hatte, waren diese ersten Erfahrungen prägend für mich, um eine generelle Wertschätzung für Technisches zu entwickeln

Die Überlegung, der Technologie einen größeren Raum in meinem Leben und in meiner beruflichen Entwicklung einzuräumen, kam dann tatsächlich erst in meinem Hochschulstudium, als ich nach einem bioinformatischen Praktikum erste Einblicke ins Programmieren bekommen habe Es folgten technische Nebenjobs an meiner Uni, bei denen ich mich zum ersten Mal ernsthaft in der Webentwicklung und der Systemadministration versuchen konnte Außerdem konnte ich bis zu meinem Studium ein wenig als Webentwicklerin beim Editieren meiner MySpace-Profilseite auf MySpace mit HTML / CSS versuchen wer weiss, ob sich die Leserinnen noch an diese wilden Zeiten des Internets erinnern können :-

Wie verlief dein Weg bis zum jetzigen Job?

Ich hatte im Laufe meines Lebens viele, verschiedene Vorstellungen davon, was ich später einmal gerne berufsmäßig machen will, aber kurz vor meinem Studium lagen meine größten Interessen in der Kunst, der klassischen Philologie oder Biologie ?  diese Richtungen kamen für mich also als Studienfach in die engere Auswahl

Erste Berührungspunkte mit dem Programmieren kamen dann im Masterstudium der Systembiologie In verschiedenen Nebenjobs an meiner Uni habe ich – ausgehend von diesen ersten Kenntnissen – weitere Erfahrungen im Bereich Webentwicklung und Systemadministration gesammelt Erst aus diesen Studien- und Arbeitserfahrungen heraus hatte ich zum ersten Mal die fixe Idee, dass ein Job in der IT-Industrie etwas für mich sein könnte Also habe ich mich nach Abschluss meines Studiums parallel für Stellen im biologischen und im informatischen Fachbereich beworben

Mein erster Job nach der Uni war dann schließlich auch eine technische Rolle mit einem Fokus auf Frontend-Entwicklung und User-Testing Darauffolgend habe ich mich in verschiedenen anderen Firmen und Forschungseinrichtungen in Europa und den USA technisch weiterentwickeln können und Erfahrungen im public speaking auf mehreren Dutzend IT-Konferenzen gesammelt bspw Bei der International JavaScript Conference Im Sommer dieses Jahres ? nach mehreren Jahren im IT-Consulting ? bin ich dann im Team bei Honeypot gelandet, um die digitalen Produkte des Unternehmens weiterzuentwickeln und andere Entwicklerinnen in meinem Team bei der technischen Umsetzung zu unterstützen

Gibt es Personen, die dich unterstützt haben?

Die Anzahl der Personen, die mich auf meinem bisherigen beruflichen Werdegang unterstützt haben, ist immens: Ich bin besonders dankbar für die Unterstützung, die ich von vielen, tollen Menschen in der Open-Source-Community und insbesondere in der Ember-Community erhalten habe Der langjährige Support durch die OSS-Community-Koryphäen Leah Silber, Melanie Sumner und Jen Weber, sowie Amy Lam, Jamie White, Dominik Schmidt, Hugh Francis und Marco Otte-Witte hat mich in meinem Werdegang unglaublich vorangebracht Was Mentorship angeht, bin ich unendlich dankbar für die Menschen, die mich gerade am Anfang meiner Karriere durch die Organisation OpenTechSchool ? eine internationale Organisation, die kostenlose Lerngruppen und Workshops für Menschen, die mehr über Technologie lernen möchten, anbietet ? unterstützt haben, und dabei insbesondere für die Unterstützung von Martin Stadler Außerdem ist und war die Förderung durch andere Communityführerinnen, insbesondere Kave Bulambo, die Gründerin von „Black in Tech“ Berlin und meiner Mentorin Samanta de Barros unschätzbar Ich bin überaus dankbar für meine ehemaligen Vorgesetzten, Prof Dr Elisabetta Chicca, Tabea Müller und Emma Tracey, die als Frauen in Führungspositionen und anerkannte Expertinnen in ihrem Fachbereich für mich auch eine entscheidende Rolle als Vorbild gespielt haben

Ein Tag in Jessicas Leben? 

Derzeit arbeite ich als Senior Frontend Engineer und Community Evangelist bei Honeypot ? Europas größter Jobplattform und Community speziell für Tech-Talente Honeypot hat sich zum Ziel gesetzt, Entwicklerinnen dabei zu unterstützen, ihren Traumjob zu finden Honeypot unterstützt dabei lokale Talente in Deutschland, Österreich und den Niederlanden, genauso wie internationale Talente

Bei uns bin ich vor allem für die Planung und Umsetzung der technischen Entwicklung unserer Jobplattform zuständig und präsentiere uns in Interviews, Podcasts und auf Konferenzen Die meiste Zeit verbringe ich aber tatsächlich damit, zu programmieren oder technische Umsetzungen mit anderen Entwicklerinnen und anderen Teams, wie Marketing oder dem Produktteam, zu koordinieren Ich gebe ausserdem regelmässig technische Workshops in unserem Entwicklerinnen-Team, um den Wissensaustausch zu Frontend-Themen zu fördern

Hast du selbst etwas entwickelt?

Ich habe in verschiedenen Unternehmen und in meiner Zeit als IT-Consultant in verschiedenen Projekten mitentwickelt oder die Entwicklung als Beraterin unterstützt Dazu zählen Webapplikationen und -seiten von Trainline, Bosch und anderen Unternehmen Neben der Entwicklung im Berufsleben, habe ich auch lange Zeit in der EmberJS-Community und in anderen Open-Source-Projekten mitgewirkt Ein bedeutsames Projekt ist da beispielsweise die Ember Times ? ein wöchentlicher Community-Newsletter, der Leserinnen über Neuigkeiten im EmberJS-Projekt auf dem Laufenden hält und dessen Entwicklung im Editorial als auch der technischen Arbeit veröffentlicht

Welche Hürden müssen Frauen in der Tech-Branche heute immer noch überwinden?

Es gibt so viele Barrieren? Alle systemischen Hürden, die weiterhin für Frauen in der Tech-Branche bestehen, kann man gar nicht im Rahmen dieses Interviews ausreichend differenziert kommunizieren Wer sich aber für das Thema und eine hinreichende Antwort auf diese Frage interessiert, demder empfehle ich die Bücher ?Invisible Women: Exposing Data Bias in a World Designed for Men? von Caroline Criado Perez und ?Crushing the IT Gender Bias: Thriving as a Woman in Technology? von Kellyn Pot?Vin-Gorman

Darin erklären die Autorinnen die Probleme, denen Frauen in ihrer Karriereentwicklung und vor allem in Fachbereichen, wie der IT begegnen, viel strukturierter, differenzierter und in einem durch Daten und Forschungsergebnisse gestützten Rahmen, als ich das als hauptberufliche Entwicklerin, deren Beschäftigung nicht in den Sozialwissenschaften liegt, hier in der Beantwortung einer kurzen Interviewfrage könnte

Welche Klischees sind dir in Bezug auf ?Women in Tech? schon begegnet?

Viele haben intuitiv keine Frau im Sinn, wenn sie an das Thema Software-Entwicklung denken

Wenn ich anderen Menschen auf Techkonferenzen und Meetups selbst auf denen, die ich selbst organisiert habe oder auf denen ich als Sprecherin eingeladen bin begegne, halten mich manche automatisch für eine Catering-Mitarbeiterin oder einer Designerin, die sich irgendwie auf eine technisch-orientierte Veranstaltung verirrt hat Ich habe den Eindruck, viele von uns – bewusst oder unbewusst – verknüpfen immer noch in Anlehnung an verbreitete Stereotypen, das Gender einer Person mit bestimmten Stärken, Schwächen und entsprechenden Berufsbildern

In einem ähnlichen Maße, wie es uns schwer fällt, einen Mann in der Rolle als Kindergärtner oder Zahnarzthelfer zu sehen, haben Viele intuitiv keine Frau im Sinn, wenn sie an das Thema Software-Entwicklung denken Diese teils rigiden Rollenbilder können beispielsweise dann vorteilhaft für uns sein, wenn wir eine „genderkonforme“ Profession verfolgen; und dieselben Rollenbilder können uns andererseits Steine in den Weg legen, wenn wir versuchen, einen für unsere soziale Gruppe unüblichen Beruf auszuüben Dann stellen wir fest, dass wir oft nicht ganz ernst genommen werden in unserem Beruf, dass wir uns häufig stärker beweisen müssen, um uns unseren Respekt zu erkämpfen und dass wir unsere bloße Existenz in einer Branche, in der wir bspw aufgrund unseres Genders unterrepräsentiert sind, vor Anderen rechtfertigen müssen

Ich persönlich habe regelmäßig erlebt, dass Vorgesetzte, Kolleginnen und Hiring-Managerinnen meine technischen Fähigkeiten tendenziell erst einmal unterschätzen und dass meine Arbeit in Open-Source-Communities und das Sprechen auf Konferenzen ein notwendiger Beitrag zu meiner professionellen Selbstentwicklung ist, um mich als ?echte? Entwicklerin zu behaupten

Und warum sollten mehr Frauen in der Tech-Branche arbeiten?  

Solange wir keinen echten Wandel in der IT-Industrie sehen, werden wir die Diversity-Debatte auch nicht im positiven Sinne hinter uns lassen können

Ja definitiv Wenn mehr Frauen in der Tech-Branche arbeiten würden, wäre es auch für Unternehmen sehr viel einfacher, kompetente und diverse Teams zusammenzustellen Studien zeigen, dass diverse Teams ? und vor allem diejenigen, die eine diverse Fuehrungsriege haben ? produktiver sind und dass Unternehmen mit diversen Teams höhere Umsätze erzielen s auch https://wwwbcgcom/en-us/publications/2018/how-diverse-leadership-teams-boost-innovation

Außerdem denke ich, dass wir in einer Zukunft, in der mehr Frauen am Puls der Innovation arbeiten, besser durchdachte Lösungen für Probleme unserer Zeit finden, weil uns ein diverserer Blick auf die Dinge ermöglicht, Lösungsansätze zu finden, die für Menschen verschiedener Gender funktionieren Das schließt meiner Meinung nach übrigens nicht nur die Einbeziehung von Cis-Frauen mit ein, sondern ganz besonders auch die von Trans-Frauen und Personen, die ihr Gender nicht-binär definieren Erst durch die Einbeziehung einer Vielfalt von Menschen ist es in meinen Augen möglich, Probleme in der echten Welt zu lösen, die eben nicht nur ausschließlich Männer betreffen

Wie sieht die Zukunft aus ? wird die Diversity-Debatte bald Geschichte sein?

Ich hoffe, dass sich mehr Räume für diese Diskussion auftun, damit diese Debatte nicht nur ein Theoretikum bleibt, sondern auch zu echten Ergebnissen führt Es ist für mich unklar, inwieweit und wie schnell Unternehmen und die Politik Maßnahmen ergreifen werden, um bedeutsame Änderungen in der Industrie umzusetzen

Das Einzige was für mich feststeht: Solange wir keinen echten Wandel in der IT-Industrie sehen, werden wir die Diversity-Debatte auch nicht im positiven Sinne hinter uns lassen können

Hast du Tipps für Frauen, die in die Tech-Branche einsteigen möchten?

Der Quereinstieg in die IT-Branche ist möglich[…]

Ich denke, dass es für Mädchen und Frauen jeden Alters wichtig ist, zu verinnerlichen, dass für sie eine Karriere im IT-Bereich eine echte Möglichkeit ist: trotz des bisher geringen Anteils an Frauen in der Industrie und ganz unabhängig davon, wie stark ihr bisheriger, persönlicher Bezug zur Technik ist Technische Kompetenzen sind nicht ?angeboren?, können zu jedem Zeitpunkt in der eigenen Karriere aber entwickelt werden Der Quereinstieg in die IT-Branche ist möglich und sehr üblich! und sogenannte ?Soft? Skills sind mindestens genauso wichtig für eine erfolgreiche Laufbahn in der Tech-Industrie, wie sogenannte ?Hard? Skills

Meiner Meinung nach ist es auch wichtig, seine eigene Gemeinschaft von Gleichgesinnten in der Branche zu finden Möglicherweise findet sich ein lokales Meetup zum Thema Women in IT, eine diverse und inklusive Open-Source Community online oder eine Lerngruppe für Frauen, die sich mit denselben technischen Themen auseinandersetzt, an denen man selbst Interesse hat Die Teilnahme an Communities, in denen man sich willkommen und repräsentiert fühlt, war für mich persönlich eine unschätzbare Bereicherung für meine professionelle Entwicklung und ich bin überzeugt, dass dies auch ein entscheidendes Hilfsmittel für diejenigen ist, die heute in die Tech-Branche einsteigen möchten

Schließlich möchte ich Frauen, die den Einstieg in die Tech-Branche suchen, raten, sich nicht von negativen Botschaften Anderer beirren zu lassen und stets in die eigenen Fähigkeiten zu vertrauen Wenn man sich von Kolleginnen nicht ernstgenommen fühlt oder eine Arbeitsumgebung nicht den Raum schafft, sich beruflich weiterzuentwickeln, ist das allzu häufig ein Spiegel der ?Biases? Anderer und nicht der eigenen Fähigkeiten als Entwicklerin Habt Mut, zu kündigen, wenn ihr Sexismus oder Transphobie am Arbeitsplatz begegnet, und wechselt Jobs so oft wie nötig, bis ihr eine Position gefunden habt, in der ihr euch ernsthaft professionell weiterentwickeln könnt Findet den Mut und sammelt die Ressourcen, um euer eigenes Unternehmen gründen zu können, um so die Konditionen eurer Arbeit noch besser selbst bestimmen zu können

Der Beitrag Women in Tech: „Es gibt so viele Barrieren für Frauen“ ist auf entwicklerde erschienen


Das PHP der Dinge: Peripheriegeräte und PHPoC ? Eine IoT-Lösung für PHP-Entwickler (Teil 2) (23.02.2021 12:00:54)

PHPoC PHP on Chip ist der Name einer IoT-Hardwareplattform für PHP-Entwickler aus dem Hause Sollae Systems Wir unterziehen die Lösung einem Praxischeck und betrachten in Teil 2 der Serie die Möglichkeiten zur hardwarebeschleunigten Interaktion mit Peripheriegeräten Da diese im Hintergrund auf einem klassischen STM32-Controller basieren, dürfen wir hohe Qualität erwarten Zeit, dem Tier auf die Zähne zu blicken

Der Beitrag Das PHP der Dinge: Peripheriegeräte und PHPoC – Eine IoT-Lösung für PHP-Entwickler Teil 2 ist auf entwicklerde erschienen


Tipps und Tricks rund um .NET und Visual Studio (23.02.2021 09:49:32)

Die Designer der NET-Plattform legen einen großen Fokus darauf, einfache Dinge einfach zu machen und erleichtern damit den Einstieg für NET-Anfängerinnen und -Anfänger Ich möchte diese Kolumne der Frage widmen, warum das für eine Programmiersprache heutzutage besonders wichtig ist

Diese Kolumne ist zwar dem Thema SaaS gewidmet, diesmal lege ich jedoch den Schwerpunkt auf C# und NET Das hat mehrere Gründe: Erstens ist kürzlich die neue NET-Version 5 erschienen und sie soll wichtige Maßnahmen enthalten, NET im Kontext von Cloud-Computing noch besser zu machen Zweitens entwickle ich viele meiner Cloud-Services mit C# und NET Der dritte und wichtigste Grund ist, dass ich finde, dass die Designer der Plattform in Sachen Sprach- und Framework-Design im Moment vieles richtig machen: Sie legen einen großen Fokus darauf, einfache Dinge einfach zu machen und erleichtern damit den Einstieg für NET-Anfängerinnen und -Anfänger Ich möchte diese Kolumne der Frage widmen, warum das für eine Programmiersprache heutzutage besonders wichtig ist

Der erste Eindruck

Ich halte die Art und Weise, wie die Umsetzung einfacher Anwendungsbeispiele von ?Hello World? in einer Programmiersprache aussieht, für wesentlich Profis mögen kein großes Interesse an solchen Codebeispielen haben, da sie ihr Geld mit dem Lösen komplexer Herausforderungen verdienen Ganz anders verhält es sich aber bei Personen, die ein- oder umsteigen Versetzen Sie sich in die Lage von Studentinnen und Studenten, die für ihre ersten Web-API-Übungen eine Plattform auswählen müssen Vergleichen Sie einmal die Beispiele zu ?Hello World? von Expressjs JavaScript oder TypeScript [1], Go [2] und ASPNET [3] Sie werden feststellen, dass die ersten beiden sehr einfach sind, während bei ASPNET schon im ersten Tutorial Dinge wie Dependency Injection, Entity Framework oder Authentifizierung angesprochen werden Generiert man mit dem NET CLI sein erstes Web-API für ASPNET dotnet new webapi, erhält man vier C#-Dateien, deren Zusammenspiel man erst erkunden muss, bevor man loslegen kann Macht man das Gleiche mit Nodejs oder Go, ist alles in einer übersichtlichen Datei beisammen Dort braucht man keinen Namespace und keine Klasse mit Main-Methode Dadurch wirkt C# auf den ersten Blick kompliziert

Alle Entwicklerinnen und Entwickler mit viel Erfahrung wissen, dass der Schein trügt Komplexe Web-APIs sehen nicht aus wie ein Beispiel von ?Hello World?, aber: Der erste Eindruck ist wichtig! Wenn C# hier den Nachwuchs abschreckt und er deshalb andere, scheinbar elegantere, schlankere Plattformen auswählen, hat das auf lange Sicht katastrophale Auswirkungen auf C# und NET Die Plattform würde verwaisen, sie würde irgendwann als Legacy abgestempelt und als nicht mehr tauglich für die moderne Welt von Cloud-Computing, Microservices, SaaS und Co angesehen werden

Beispiele

Ich finde es beruhigend, dass Mitglieder des NET-Teams öffentlich darüber nachdenken, wie sich die Entwicklung einfacher, auf NET 5 aufbauender Web-APIs anfühlen könnte Ein Beispiel dafür ist das Feather-HTTP-Projekt [4] Es ist nur ein Experiment und weit davon entfernt, für Produktionszwecke einsatzfähig zu sein Trotzdem zeigt es exemplarisch, wie in Zukunft der erste Eindruck von C# und NET in Sachen Web-APIs für Anfängerinnen und Anfänger aussehen könnte Ich habe für diese Kolumne in Listing 1 ein Beispiel erstellt, das auf Feather HTTP aufbaut Dieser Code ist komplett Es braucht nur diese paar Zeilen C# in einer einzigen Datei, mehr nicht

using SystemCollectionsConcurrent;using SystemLinq;using SystemThreadingTasks;using MicrosoftAspNetCoreBuilder;using MicrosoftAspNetCoreHttp;ConcurrentBag heroes = new{  new1, "Homelander", "DC", true,  new2, "Groot", "Marvel", false,};var app = WebApplicationCreateargs;appMapGet"/heroes", GetAllHeroes;appMapPost"/heroes", AddHero;appMapGet"/heroes/{id}", GetHero;await appRunAsync;async Task GetAllHeroesHttpContext ctx =>;  await ctxResponseWriteAsJsonAsyncheroes;async Task GetHeroHttpContext ctx =>;  await ctxResponseWriteAsJsonAsync    heroesFirsth => hid == intParsectxRequestRouteValues["id"]ToString;async Task AddHeroHttpContext ctx{  heroesAddawait ctxRequestReadFromJsonAsync;  ctxResponseStatusCode = StatusCodesStatus201Created;}record HeroDtoint id, string name, string universe, bool canFly;

Dort wird eine C#-9-Funktion genutzt, die ein weiteres gutes Beispiel für Vereinfachung ist: Top-Level-Statements Das Entfernen von Main ist für die meisten C#-Profis keine große Sache Es scheint lächerlich, die paar Zeilen Code in Programcs einsparen zu wollen Das ist es aber nicht So ziemlich alle modernen und ?hippen? Sprachen brauchen kein Main

Mein drittes Beispiel ist die gRPC-Umsetzung in NET 5 und C# 9 Ich finde, dass sowohl die Einbindung von ProtoBuf-Dateien proto in das Visual Studio Tooling als auch das Programmiermodell hervorragend gelungen sind Der Einstieg in gRPC und auch in gRPC-Web ist für Personen, die die ersten Schritte in ASPNET geschafft haben, sehr einfach

Einstieg ohne Geschichtslektionen

Das regelmäßige Hinterfragen von historisch gewachsenem Ballast ist wesentlich Ich kenne ich die Historie der Plattform und weiß, was hinter NET Framework, NET Standard, Portable Class Libraries, Mono, NET Core etc steckt und wodurch sich diese Dinge entwickelt haben Wem es so wie mir geht, dem empfehle ich einmal, NET und C# absoluten Anfängerinnen und Anfängern zu erklären Schon auf der zweiten Seite des Wizards zum Anlegen eines NET-Projekts in Visual Studio muss man Geschichtslektionen erteilen, um zu rechtfertigen, warum es NET Framework, NET Core und NET Standard gibt und wo der Unterschied zu dem Zeug ist, das einfach nur ?NET? heißt Das sollte nicht notwendig sein

Ich finde es gut, dass Microsoft mit NET 5 Zusätze wie Core und Standard wieder streicht Das macht es leichter, Neulingen NET näherzubringen Man kann den Rest vor NET 5 augenzwinkernd als ?your grandfather?s NET? abhaken und hat damit eine große Einstiegshürde vom Tisch Wer sich professionell mit NET und C# auseinandersetzt, wird sich schnell genug mit der Historie der Plattform auseinandersetzen müssen ? spätestens wenn die ersten, alten Komponenten Wartung brauchen

Wermutstropfen sind in dieser Hinsicht noch die Inkonsistenzen bei ASPNET Core und Entity Framework Core Warum ist hier noch das ?Core? im Namen? Alten NET-Hasen ist das klar, Neulinge verwirrt es

Begrenzte Auswahl ist eine Stärke

Aus Sicht von Anfängerinnen und Anfängern hat das C#-Ökosystem eine große Stärke: Bei vielen Themen bietet das Framework eine so gute Option, dass man sich selten im Open-Source-Dschungel umsehen und sich zwischen unzähligen Alternativen entscheiden muss Beispiele dafür sind ASPNET Dependency Injection, Object Relational Mapping mit Entity Framework Core oder Routing in ASPNET Das macht den Einstieg in die Welt von NET viel einfacher als bei Plattformen wie Node, Go oder Rust

Geht man über ?Hello World? hinaus und will sein erstes, richtiges Web-API entwickeln, muss man unzählige Entscheidungen treffen und bereut diese womöglich nachträglich In ASPNET wird man hier wesentlich stärker geführt Das ist, wie gesagt, ein großer Vorteil beim Einstieg und steigert die Produktivität bei den ersten Schritten enorm Es ist aber auch ein Risiko Damit NET relevant bleibt, muss Microsoft die Plattform aktuell und konkurrenzfähig halten Meiner Ansicht nach macht Microsoft diesbezüglich momentan einen sehr guten Job NET 5 und C# 9 zeigen das in beeindruckender Weise

Verschiedene Sichtweisen sind wichtig

Wahrscheinlich geht es vielen Leserinnen und Lesern ähnlich wie mir: Ich habe in der Vergangenheit schon oft den Kopf geschüttelt, wenn bei Events Mitglieder des NET-Teams API-Beispiele zu ?Hello World? gezeigt haben und stolz darauf waren, dass in einer neuen NET-Version ein paar Zeilen Code weniger notwendig sind

Meine Arbeit als Lehrer an einer HTL Höhere Technische Lehranstalt für Informatik und als Mentor im CoderDojo Programmierclub für Kinder haben mir aber gezeigt, dass es für den langfristigen Erfolg von Programmiersprachen und Plattformen wichtig ist, einen guten ersten Eindruck zu vermitteln und einfache Dinge einfach zu halten Komplexe Szenarien müssen möglich sein Sie sind aber nicht das einzige, was die Qualität einer Plattform ausmacht NET und C# müssen dem Nachwuchs etwas bieten, damit diese Plattform relevant bleibt und damit auch unsere Investitionen in C#-Code langfristig gesichert sind

Der Beitrag Tipps und Tricks rund um NET und Visual Studio ist auf entwicklerde erschienen


Künstliche Intelligenz: Automatische Auswertung von Kundenanfragen (23.02.2021 09:45:42)

Die Kommunikation mit Kunden besteht bei vielen Unternehmen nach wie vor zum Großteil aus manueller Arbeit Und das, obwohl die Kommunikationskanäle mittlerweile zunehmend digital werden Wie kann Künstliche Intelligenz hier helfen?

In der heutigen Zeit haben Kunden immer mehr Möglichkeiten, mit Fragen oder Wünschen an ein Unternehmen heranzutreten Neben klassischen Hotlines stehen ihnen dabei meistens vor allem Mails und Kontaktformulare zu Verfügung Das macht den Kunden die Anfrage zwar insofern einfach, dass sie zu jeder Zeit ihre Frage platzieren können ? allerdings erhalten sie meist erst nach ein paar Tagen ihre Antwort Bei einem Anruf erhalten sie zwar mitunter schneller Feedback zu einer Problemstellung, hier sind sie jedoch in der Regel an Servicezeiten gebunden und müssen Warteschlangen in Kauf nehmen So oder so: Der Kunde hat den Aufwand und den möchte er sich lieber sparen

Herausforderungen bei der Automatisierung von Kundenanfragen

Mir als Unternehmer sollte in der Regel natürlich die Zufriedenheit meiner Kunden am Herzen liegen Aufwand auf Seiten des Kunden, wie oben beschrieben, wäre also im besten Fall zu beseitigen Das geht jedoch mit erhöhtem internen Aufwand einher, da ich hier bisher nur mit mehr eigener Manpower zur Bearbeitung der Anfragen aufwarten kann Doch wieso ist das so? Der Grund ist, dass Nachrichten und Anfragen von Kunden in der Regel in Form von unstrukturiertem Text eintreffen, dem ich nicht ohne Weiteres exakt strukturierte Informationen entnehmen kann Aus diesem Grund lässt sich auch die Weiterverarbeitung oder gar die automatische Beantwortung solcher Nachrichten nicht ohne Weiteres realisieren

Neue Möglichkeiten

Mittlerweile gibt es neue Möglichkeiten, die sich gerade im Bearbeiten und Auswerten von unstrukturiertem Text bewährt haben Dabei kommen in der Regel KI-gestützte Modelle zum Einsatz Diese sind in der Lage, die wichtigen Schlagworte und die allgemeine Absicht einer Anfrage zu erkennen und zurückzugeben Darüber hinaus können auch besondere Informationen wie Personennamen, Adressen, Nummern u v m automatisch ausgelesen werden Doch nicht nur das: KI-gestützte Services bieten weitere Möglichkeiten, wie bspw die Stimmung der schreibenden Person zu ermitteln Mit all diesen Informationen lassen sich einige wichtige Erkenntnisse automatisch aus einem Text herauslesen und in ein Format überführen, das eine automatische Weiterverarbeitung ermöglicht Im Folgenden finden Sie fünf konkrete Anwendungsbeispiele für KI in der Kundenbetreuung

Efficient Transformers

Christoph Henkelmann, DIVISIO

Enhancing Page Visits by Topic Prediction

Dieter Jordens, Continuum Consulting NV

Machine Learning on Edge using TensorFlow

Håkan Silfvernagel, Miles AS

5 KI-gestützte Verfahren im Customer Service

1 Realtime Next Best Action

KI kann vorausschauende Analysen und maschinelles Lernen nutzen, um automatisch die optimalen nächsten Schritte für den Kunden vorzuschlagen Dazu wertet sie historische Daten aus früheren Gesprächen aus und überträgt sie auf die aktuelle Situation wie lange wartet der Kunde bereits auf ein Gespräch, welchen Grund hat er für seinen Anruf?

2 Chatbots

In Chats oder E-Mails können KI-gestützte Text-Analytics Kundenanfragen intelligent und automatisch beantworten Diese sogenannten Chatbots können eine große Zahl an Kundenanfragen automatisch beantworten und sind oft effektiver als Kundenservice-Mitarbeiter Dabei sollten Chatbots allerdings klar definierte Aufgabenfelder haben, auf die sie spezialisiert sind So könnten Chatbots in einem Online-Shop z B auf Fragen bzgl Retouren oder Versanddetails spezialisiert sein Bei Kundenanfragen, die darüber hinausgehen, springt ein Service-Mitarbeiter ein

3 Sentiment-Analyse

KI kann nicht nur helfen, auf verbal formulierte Anfragen von Kunden zu reagieren, sondern auch dessen Gemütszustand einzuschätzen: Ist der Kunde verärgert oder gut drauf und in Kauflaune? In Verbindung mit Chatbots kann die Sentiment-Analyse z B einschätzen, wann ein Kunde Schwierigkeiten bei der Interaktion mit dem Chatbot hat und rechtzeitig einen Service-Mitarbeiter einschalten

4 Predictive Customer Service

KI ist sogar in der Lage, Probleme von Kunden zu erkennen, noch bevor diese mit dem Kundenservice in Kontakt treten Hat ein DSL-Kunde beispielsweise seit Stunden Probleme mit dem Internet, ist die Wahrscheinlichkeit hoch, dass er sich in naher Zukunft mit dem Kundenservice in Verbindung setzt Servicemitarbeiter können dem Kunden dann sogar zuvorkommen und sein Problem lösen, bevor er zum Telefon greift

5 Intelligent Routing

Zuletzt kann KI den Customer Service dabei unterstützen, Kundenanfragen optimal auf zur Verfügung stehende Kundendienstmitarbeiter zu verteilen Dazu klassifiziert die KI Anliegen der Kunden und identifiziert Sachbearbeiter, die am besten für das Problem geeignet sind

Die Lösung: KI-gestützte automatisierte Bearbeitung von Kundenanfragen

Die eben beschriebenen Services ermöglichen es also, Schlüsseldaten wie die Kernthemen einer Nachricht automatisiert auszulesen und weiterzuverarbeiten Dies wiederum erlaubt es Unternehmen, aufwendige manuelle Voranalysen zu beseitigen und die jeweiligen Nachrichten direkt an die passende Bearbeitungsstelle weiterzugeben

Zusätzlich kann diese Erkenntnisse direkt weiterverwendet werden, um beispielsweise auch Anfragen direkt ohne den Einsatz eines einzigen Handgriffs zu beantworten In der Regel besitzen Unternehmen bereits eine Liste von FAQs, also häufig gestellten Fragen Diese können, zusammen mit der passenden Antwort, einem KI-Modell übergeben werden Das Modell entscheidet dann, ob die analysierte Frage zu einer solchen FAQ passt und sendet in dem Fall automatisch die passende Antwort an den Kunden Mit Hilfe dieser Services kann gleich doppelt profitiert werden: Nicht nur kann viel Zeit und damit Geld gespart werden, es erhöht sich auch nachhaltig die Kundenzufriedenheit durch niedrigere Antwortzeiten

Fazit

Mittlerweile ist auch die Kommunikation mit den eigenen Kunden ein Thema, in dem viel Potenzial durch Optimierung besteht Mit Hilfe von KI-gestützten Services können hier bereits heute Kosten gespart und gleichzeitig die Kundenzufriedenheit erhöht werden Weitere Möglichkeiten bei der automatischen Auswertung von Kundenanfragen durch KI erfahren erfahren Sie hier

Der Beitrag Künstliche Intelligenz: Automatische Auswertung von Kundenanfragen ist auf entwicklerde erschienen


Machine Learning: ?Der geschulte Umgang mit künstlicher Intelligenz wird immer wichtiger? (22.02.2021 15:09:24)

Künstliche Intelligenz und Machine Learning sind nicht nur in den USA und der internationalen Tech-Szene gerade wichtige Themen: Auch in Deutschland und Europa sind Anwendungen, die auf maschinellem Lernen beruhen, gefragter denn je Um gemeinsam an Projekten aus diesem Bereich zu arbeiten, haben Olly Salzmann und Rupprecht Rittweger das Netzwerk KI Park Deutschland gegründet Wir sprachen mit den beiden über ihr Netzwerk, die richtigen Werkzeuge für maschinelles Lernen und Anwendungen, bei denen KI eine gewichtige Rolle spielt

JAXenter: Hallo Olly, hallo Rupprecht, zunächst einmal vielen Dank, dass ihr euch die Zeit für dieses Interview genommen habt Ihr habt auf der Konferenz Rise of AI ein neues Projekt angekündigt, den KI Park Deutschland Was hat es damit auf sich?

Olly Salzmann: Wir wollen mit dem KI Park Deutschland Kompetenzen bündeln, daraus erfolgreiche Geschäftsmodelle und moderne KI-Anwendungen „Made in Germany“ entwickeln Auf diese Art erschaffen wir die Grundlage für ein offenes Ökosystem, das kontinuierlich wächst Ein Ökosystem aus Start-ups, Unternehmen und Wissenschaft, Politik, NGOs und Think Tanks Gemeinsam vereint sie der Wunsch, künstliche Intelligenz in Deutschland, die sich an europäischen Werten orientiert, voranzubringen Auf diesen Gedanken sind Rupprecht und ich gekommen, als wir feststellten, dass es aktuell leider noch ein Nebeneinander unterschiedlicher KI-Initiativen und Aktivitäten hierzulande gibt Das Miteinander in wichtigen anwendungsbezogenen Projekten wollen wir mit dem KI Park Deutschland ändern

Rupprecht Rittweger: Wir haben eine Innovationsplattform für künstliche Intelligenz ins Leben gerufen Darüber vernetzen wir KI-Start-ups und Scale-ups mit etablierten Unternehmen und dem öffentlichen Sektor Aktuell erreicht unser Netzwerk über 12000 KI-Start-ups und 40000 KI-Experten weltweit ? zahlreiche davon in Europa

JAXenter: Das klingt spannend, das Netzwerk hat eine beeindruckende Größe Wie kann ich als Unternehmen oder Start-up nun dort Hilfe für meine Probleme finden?

Olly Salzmann: Der einfachste Weg ist, über die digitale Plattform zu gehen Ein potenzieller Auftraggeber aus einem etablierten Unternehmen oder dem öffentlichen Sektor möchte zum Beispiel eine KI-Anwendung im Bereich autonomes Fahren entwickeln lassen Über die Plattform nimmt er Kontakt mit uns auf Wir klären gemeinsam seine Anforderungen ab und erstellen auf dieser Basis die Challenge Nach der Freigabe durch den Auftraggeber geht die Challenge auf der Plattform live und KI Start-ups können sich bewerben Mit seinem Account kann der Auftraggeber in Echtzeit verfolgen, welche Vorschläge eingereicht werden Eine vom Auftraggeber festgelegte Jury bewertet die Start-ups mit Kriterien, die speziell für ihn entwickelt wurden Die Start-ups mit den besten Ideen präsentieren in einem Pitch ihre Lösung Letztlich entscheidet der Auftraggeber, wer gewinnt und mit wem er zusammenarbeiten möchte Eine erste Challenge zur Anwendung künstlicher Intelligenz im Personalwesen wurde bereits von der Firma Linde in München durchgeführt

Start-ups, die KI-Lösungen entwickelt haben, können sich ebenfalls auf unserer Plattform vernetzen, um ihre Ideen mit etablierten Unternehmen und dem öffentlichen Sektor zu realisieren Dafür erstellen sie ein individuelles Unternehmensprofil und erhalten von unseren KI-Experten ein direktes Feedback auf ihr Geschäftsmodell und das Produkt Das schafft Vertrauen beim Kundenangang und schafft neue Zugänge für Start-ups zu potentiellen Kunden und neuen Projekten

JAXenter: Ist dieser Service kostenlos, oder fallen Vermittlungs- oder Teilnahmegebühren an?

Rupprecht Rittweger: Der Service ist für Mitglieder kostenlos: wir wollen gemeinsam mit den Partnern ein offenes, nicht exklusives Ökosystem schaffen, das der Kristallisationspunkt für KI ? Made in Germany werden soll Uns geht es um die Förderung der digitalen Souveränität und der angewandten KI auf Grundlage europäischer Werte Es geht nicht ums Experimentieren, sondern darum das Potential künstlicher Intelligenz unter marktwirtschaftlichen Bedingungen nutzbar zu machen Dafür braucht es die unbürokratische Förderung von KI-Projekten zwischen KI-Start-ups/Scale-ups und etablierten Unternehmen und Organisationen

JAXenter: Die künstliche Intelligenz, Machine Learning und Deep Learning sind Fokusgebiete der IT, die gerade in den letzten Monaten und Jahren rasant an Bedeutung gewinnen Es gibt viele Anwendungsbereiche, die offensichtlich sind, etwa bei personalisierten Angeboten im e-Commerce-Bereich Gibt es auch Anwendungen, bei denen KI zum Einsatz kommt, wo man es vielleicht nicht erwarten würde???

Olly Salzmann: Künstliche Intelligenz drängt zunehmend in unser privates Leben, Lernende und vernetzte KI-Modelle spielen eine immer größere Rolle Die bekanntesten Beispiele nutzen wir vermutlich alle täglich: im e-Commerce-Bereich die Empfehlung ähnlicher Waren, die Priorisierung und das Ranking von Social Media Posts auf Basis des individuellen Nutzerverhaltens, virtuelle Sprachassistenten, automatische Übersetzungen in Untertiteln unserer Lieblingsserien, oder die smarte Vernetzung von elektronischen Geräten zu Hause Aber auch in Unternehmen gewinnt die Anwendung von künstlicher Intelligenz, Machine Learning und Deep Learning rasant an Bedeutung Für eine Übersicht der KI-Anwendungsfälle und KI-Lösungen haben wir eine KI-Landkarte erstellt, die sie auf unserer Internetseite finden

JAXenter: Die Zukunft gehört dem Machine Learning, so viel ist sicher Was würdet ihr Entwicklern raten, die sich in diese Richtung weiterbilden wollen? Welche Tools und Sprachen lohnen einen Blick, um für die Welt der künstlichen Intelligenz gewappnet zu sein?

Olly Salzmann: Grundsätzlich wird der geschulte Umgang mit künstlicher Intelligenz immer wichtiger Wir brauchen eine flächendeckende Aus- und Weiterbildung von MitarbeiterInnen in der Industrie, dem Mittelstand und dem öffentlichen Sektor, um die Potentiale von Künstlicher Intelligenz nutzbar zu machen Python ist zweifelsohne die tonangebende Programmiersprache geworden, weil sie eine gute Auswahl von etablierten Bibliotheken und Frameworks bietet, die anderen Sprachen weit voraus sind Allerdings ist die Wahl immer auch eine Frage des spezifischen Anwendungsfalls, auch C++, Java, Swift oder R sollte man daher nicht aus den Augen verlieren

Olly Salzmann ist Mitgründer der Initiative KI Park Deutschland und Geschäftsführer der Deloitte KI GmbH
 
 

 

Rupprecht Rittweger ist geschäftsführender Gesellschafter der Investa Holding GmbH und Chairman der NTT Global Data Centers EMEA GmbH sowie Mitgründer des KI Park Deutschland

Der Beitrag Machine Learning: „Der geschulte Umgang mit künstlicher Intelligenz wird immer wichtiger“ ist auf entwicklerde erschienen


ScrumBut ? ist das die Lösung? Agile Produktentwicklung von Theorie bis Praxis ? Teil 3 (22.02.2021 12:21:40)

Scrum als Rahmenwerk, gepaart mit agiler Entwicklung, ist gerade State of the Art, wenn man von der erfolgreichen Umsetzung von Softwareprojekten spricht Hört man sich um, könnte man sich fast ins Teenageralter und die Gespräche auf den Schulhöfen über ?das erste Mal? zurückversetzt fühlen Der Vergleich mit agiler Entwicklung mittels Scrum scheint da nicht so weit hergeholt Jeder will es tun, jeder sagt, er tut es, jeder scheint es besser zu machen als man selbst ? und dennoch machen es wohl nur 10 Prozent Und die, die es wirklich tun, na ja, ob die es dann ?richtig? machen?

Der Beitrag ScrumBut ? ist das die Lösung? Agile Produktentwicklung von Theorie bis Praxis ? Teil 3 ist auf entwicklerde erschienen


Controlling, Vite 2.0 und Entwicklungsprozesse ? Unsere Highlights der Woche (22.02.2021 10:42:32)

In der letzten Woche drehte sich vieles um agile Prozesse: Wie wichtig ist Controlling oder wie kann man Prozesse beim Entwickeln vereinfachen Aber auch Updates aus der IT-Welt sind mit Vite 20 wieder enthalten

In der vergangenen Woche startete unsere Konferenzsaison des Jahres 2021 mit der Basta! Spring Es gab frische und moderne Talks und Sessions für unser Publikum Wer das Event verpasst hat, darf sich auf die vielen weiteren Konferenzen in diesem Jahr freuen Wer sich nicht so lange gedulden möchte, kann sich so bis dahin die Zeit mit unseren meistgelesenen Artikeln vertreiben Wir wünschen viel Spaß beim Lesen!

Noch mehr Controlling? Unbedingt, aber besser!

Es ist ein immer wiederkehrender Zwiespalt: Ohne steuerndes Controlling laufen Kosten und Budgets von Entwicklungsprojekten häufig aus dem Ruder Mit zu starrem Controlling werden Projekte aber schnell unflexibel, Planung und Aussteuerung kosten zusätzlich Zeit und es fehlt der Freiraum, kreativ und innovativ an einzelne Tasks heranzugehen Wie kann ein erfolgreicher Kompromiss aussehen und wie lässt er sich umsetzen?

Vite 20: Evan You stellt Build-Tool für das JavaScript-Ökosystem vor

Vite ist da Das neue Build-Tool von Evan You ist mehr als nur ein neues Werkzeug für Vuejs Vite kann unabhängig vom gewählten Framework verwendet werden Ungewöhnlich ist, dass v2 nun das erste stabile Release markiert Lohnt sich ein Blick auf das Tool?

Entwickeln, aber simpler: 2021 steht im Zeichen vereinfachter Entwicklungsprozesse

Damit wieder Spaß und Produktivität in die Entwicklung Einzug halten, ist ein Software-Development-Lebenszyklus erforderlich, in dem die Software im Mittelpunkt steht und die Infrastruktur nicht zur Hauptbeschäftigung wird Markus Eisele, Developer Adoption Program Lead EMEA bei Red Hat, sieht deshalb in der Vereinfachung von Entwicklungsprozessen einen zentralen IT-Trend für 2021

Der Beitrag Controlling, Vite 20 und Entwicklungsprozesse – Unsere Highlights der Woche ist auf entwicklerde erschienen


MoneyPHP: Internationale Transaktionen leicht gemacht (22.02.2021 10:06:46)

Ein Softwarefehler bei der Risikoberechnung verursachte 217 Millionen Dollar an Investorenverlusten [1] Es handelte sich um einen Fehler in grundlegenden Dezimaloperationen, die von einem Softwareentwickler programmiert wurden Das zeigt uns, wie wichtig und verantwortungsvoll die Arbeit eines Entwicklers ist Sind Sie sicher, dass Sie wissen, wie Sie solche Fehler in Ihren eigenen PHP-Anwendungen vermeiden können?

Ich arbeite bereits seit 12 Jahren in der Softwareentwicklungsbranche und bei jedem Projekt, in das ich involviert war, ging es um die Verarbeitung von Finanztransaktionen Ob es sich um einen Webshop, ein Nachrichtenportal, eine Affiliate-Marketing-Plattform oder ein internationales Zahlungsportal gehandelt hat ? jedes Projekt hat einige monetäre Berechnungen durchgeführt Es ist offensichtlich eine verantwortungsvolle Arbeit, und doch kommt es immer wieder vor, dass das Rad auf falsche Weise neu erfunden werden soll Ist die richtige Verarbeitung von Finanztransaktionen so schwierig? Gibt es zuverlässige und verifizierte Lösungen, die wir wählen können? Wir werden uns weiter in dieses Thema vertiefen, indem wir einen sehr grundlegenden Schritt ausführen ? die Erstellung einer Quittung für einen Kunden

Geld in aller Welt

Bei über 200 Währungen auf der Welt gibt es viele Stolpersteine, die bei der Entwicklung einer Finanz-App beachtet werden müssen Selbst wenn nur eine Währung verwendet werden soll, steckt der Teufel oftmals im Detail Besonders schwierig wird es, wenn man sich an internationale Märkte heranwagen will Fangen wir von vorne an Wie schreibt und liest man Geldbeträge? Die meisten Währungen haben Untereinheiten, z B entspricht 1 Euro 100 Cent, daher ist es praktisch, Dezimalbrüche zu verwenden Das Beispiel von 1 Euro und 23 Cent kann so etwa mit 1,23 EUR oder 1,23 ? ausgedrückt werden

Ein Cent lässt sich nicht halbieren, sodass von Zeit zu Zeit Rundungen vorgenommen werden müssen Sollen zu 1,23 ? 19 Prozent Steuern hinzugerechnet werden, ist das Ergebnis zunächst 1,4637 ? nun muss entschieden werden, wie damit weiter verfahren werden soll Auf- oder abrunden? Je nach örtlichem Gesetz könnten Sie am Ende entweder 1,46 oder 1,47 erhalten Diese Unklarheit ist das Erste, was mit Product Ownern, Branchenexperten oder Anwälten geklärt werden muss Diese Gespräche sollten niemals allein geführt werden ? Ihre Aufgabe ist es, geschäftliche Anforderungen umzusetzen, nicht sie zu erraten!

Interessant wird es, wenn man verschiedene Währungen verarbeiten muss Dann muss nicht nur Euro von Dollar unterschieden werden ? es geht auch um die korrekte Umrechnung Genauso wie Kilogramm und Pfund nicht direkt addieren werden können, können Euro und Dollar nicht zusammengezählt werden, ohne den Wechselkurs zwischen diesen beiden Währungen zu kennen Die Kurse sind sicherlich jederzeit irgendwo im Internet zu finden, sie müssen jedoch von einer vertrauenswürdigen Quelle stammen, um die richtigen Berechnungen anstellen zu können

Wie können die angesprochenen Probleme nun möglichst elegant gelöst werden, ohne dafür jedes Mal das Rad neu erfinden zu müssen? Wenn Millionen von Entwicklern auf der ganzen Welt mit ähnlichen Problemen zu kämpfen haben, kann davon ausgegangen werden, dass es einige gebrauchsfertige Lösungen gibt

Warum Sie nicht alles selbst entwickeln sollten

Auf den ersten Blick sieht die Berechnung einer Quittung einfach aus: Man muss nur ein paar Zahlen addieren, richtig? Aber wie kann garantiert werden, dass die Berechnungen korrekt sind? Leider machen es uns die Computer nicht so einfach Die CPUs wissen nicht, was eine Dezimalzahl ist Wenn Sie einer Variablen eine Zahl wie 1,23 zuweisen, gibt es keine Garantie, dass eine CPU genau diesen Wert beibehält Das liegt daran, dass CPUs und Programmiersprachen den IEEE-754-Standard verwenden, um Zahlen als Brüche zu speichern Es sind reelle Zahlen, und der Datentyp heißt Floating Point [2] oder kurz Float Als der IEEE-Standard in den 1980er Jahren geschaffen wurde, verfügten Computer nur über sehr begrenzte Rechenleistung und Speicher Die Ingenieure wollten einen möglichst großen Bereich von reellen Zahlen in nur 32 Bit unterbringen Aus diesem Grund entschieden sie sich dafür, einen binären Typ statt eines Dezimaltyps zu verwenden Jede Float Number wird als 2 ^ Exponent x Mantisse dargestellt Wird dieser Wert in eine Dezimalzahl umgewandelt, ergibt sich sehr wahrscheinlich ein Präzisionsfehler

Solche kleinen Fehler sind für wissenschaftliche Berechnungen in Ordnung, aber für die Finanzwelt völlig inakzeptabel Leider ist die einzige Möglichkeit, mit PHP präzise Dezimalrechnungen durchzuführen, die Verwendung einer Bibliothek wie BC Math oder PHP Decimal Sie ist nicht in die Sprache selbst integriert Ein weiteres Problem, insbesondere für internationale Webanwendungen, ist die Unterscheidung von Währungen Wenn eine Reihe von Zahlen verwechselt wird, ohne eine Idee von deren Währungen zu haben, werden die Berechnungen grundlegend falsch sein Wenn die Prinzipien der objektorientierten Programmierung angewendet werden, sollte es ziemlich einfach sein, eine dedizierte Datenstruktur für Währungen und Finanzen zu erstellen

Das Money-Pattern

In seinem Buch von 2002 schlug Martin Fowler eine Money-Struktur [3] vor, um einen Geldbetrag mit einer Währung zu kombinieren Mit OOP können Sie diesen Wert in einem Objekt zusammenfassen und so sicherstellen, dass die Berechnungen durch die Klasse Money geschützt sind Das Money-Pattern wurde für mehrere Sprachen wie PHP, Java und JavaScript implementiert Es liegt nahe, dass die PHP-Implementierung MoneyPHP [4] heißt Es handelt sich um eine ausgereifte Library, die es seit bereits seit fast zehn Jahren gibt Listing 1 enthält ein Beispiel für die Verwendung

use Money\Money;// create an object of 1,23 EUR$net = new Money123, new Currency'EUR';// add 19% of tax, round up$gross = $net->multiply'119', Money::ROUND_UP;// output is 147, which means 1,47 EURecho $gross->getAmount;

Mit MoneyPHP können wir uns bei drei Dingen sicher sein: korrekte Dezimalberechnungen, Vermeidung von Fehlern bei der Verwendung mehrerer Währungen und Vermeidung versehentlicher Wertüberschreibungen, da Money ist ein unveränderliches Objekt ist Jedes Mal, wenn eine Addition, Subtraktion oder eine andere Operation durchgeführt wird, erhalten wir eine neue Instanz der Money-Klasse Dadurch werden Bugs vermieden, insbesondere wenn Ihre Money-Objekte zwischen mehreren Klassen wechseln, die die komplexe Geschäftslogik Ihrer Anwendung implementieren

Intern speichert ein Money-Objekt den Betrag immer als String, d h in der kleinsten Untereinheit einer Währung Für Euro ist das der Betrag in Cent, im obigen Beispiel entsprechen 1,23 ? 123 Cent Wenn also ein Eurobetrag vom Benutzer eingegeben wird, muss dieser nur mit 100 multipliziert oder das Dezimaltrennzeichen entfernt werden, um das Money-Objekt zu erstellen Bei Währungen wie dem japanischen Yen oder dem ungarischen Forint ist es jedoch komplizierter Der Yen hat aktuell keine Untereinheiten sehr wohl aber in der Vergangenheit, daher erwartet MoneyPHP den Betrag in Yen In Forint sind keine Münzen kleiner als 5 Ft im Umlauf, aber die 1/100-Untereinheit wird immer noch für Berechnungen verwendet Wer Forint verwendet, muss sie für MoneyPHP immer noch mit 100 multiplizieren Für die Verwendung von verschiedenen Währungen muss daher immer auch auf Details wie die eben erwähnten geachtet werden Hilfestellung kann die ISO-4217-Liste der Währungen geben [5]

Die Währung richtig formatieren

Wenn wir dem Benutzer einen Geldbetrag darstellen, müssen wir die Sprache und Region berücksichtigen, die der Benutzer bevorzugt Es reicht nicht aus, ein einfaches echo wie im ersten Listing zu verwenden Verschiedene Regionen haben unterschiedliche Formatierungsstandards für Zahlen und Währungen Einige Leute verwenden einen Punkt anstelle eines Kommas, um den Bruchteil zu trennen Andere setzen die Währung vor den Betrag Tabelle 1 zeigt einige Beispiele dafür

Sprache und RegionBeispiel eines Betrags
Deutsch Deutschland12345,67 ?
Niederländisch Niederlande? 12345,67
Polnisch Polen12 345,67 ?

Tabelle 1: Beispiele für Währungsformate in verschiedenen Sprachen und Regionen

Die meisten Money-Bibliotheken wie MoneyPHP bieten eine an den lokalen Gegebenheiten orientierte Formatierung der Geldbeträge an Sie kombinieren Zahlen- und Währungsformatierungsregeln, die für ein Land und eine Sprache spezifisch sind Listing 2

use Money\Money;use Money\Currencies\ISOCurrencies;use Money\Currency;use Money\Formatter\IntlMoneyFormatter;use Money\Money;// we need a repository of ISO standard currencies$currencies = new ISOCurrencies;// create an object of 1,23 EUR$money = new Money123, new Currency'EUR';// use a PHP "intl" number formatter for Germany$numberFormatter = new \NumberFormatter'de_DE', \NumberFormatter::CURRENCY;// together with MoneyPHP formatter$moneyFormatter = new IntlMoneyFormatter$numberFormatter, $currencies;// output: 1,23 ?echo $moneyFormatter->format$money;

Im Beispiel in Listing 2 führt MoneyPHP ein Konzept von Währungsrepositorys ein Bisher hatten wir nur einen Währungscode verwendet, aber jetzt muss der Formatter genau wissen, wie viele Stellen nach dem Dezimalzeichen für eine bestimmte Währung erwartet werden Die Entwickler von MoneyPHP wollten sich nicht nur auf die Standard-ISO-Währungen beschränken Wir werden vorerst das ISO-Repository verwenden, könnten allerdings auch ein eigenes implementieren, zum Beispiel für Kryptowährungen

Ein weiterer Anwendungsfall eines Formatters für Money ist, Daten an ein API zu senden, das als Eingabe eine Dezimalzahl erwartet Einige APIs könnten dem Schemaorg-Standard PriceSpecification [6] folgen, der eine Dezimalzahl mit einem Punkt erwartet Statt sich nun selbst eine Formatierung auszudenken, können Sie die Klasse DecimalMoneyFormatter verwenden, die in Listing 3 zu sehen ist

use Money\Currency;use Money\Formatter\DecimalMoneyFormatter;use Money\Money;// create an object of 1,23 EUR$money = new Money123, new Currency'EUR';// use a decimal number formatter$decimalFormatter = new DecimalMoneyFormatter$currencies;// output: 123echo $decimalFormatter->format$money;

Integration von Backend- und Frontend-Layern

Bis jetzt haben wir eine gute Lösung gefunden, um Währungen in PHP zu speichern und sie an einen Benutzer auszugeben Die meisten Webanwendungen verwenden jedoch mehrere Systeme Ein Benutzer beginnt seine Reise mit dem Frontend-Layer, der dann eine Verbindung zum Backend herstellt, außerdem gibt es dann normalerweise eine Datenbank, zum Beispiel MySQL Die Daten wandern hin und her ? und auf jeder Ebene besteht die Gefahr, dass ein Teil der monetären Daten verloren geht Aus diesem Grund müssen diese Daten mit besonderer Vorsicht verwaltet werden, angefangen bei dem Zeitpunkt, zu dem die Benutzereingaben erhalten wurden

Nehmen wir an, es gibt einen Administrator, der einem Webshop Produkte hinzufügt und deren Preise definiert Das einfachste Szenario wäre es, wenn ein HTML-Formular direkt per POST-Methode an das PHP-Skript gesendet wird In diesem Fall erhalten wir den Preis in der Regel als lokalisierte Zahl, z B 1,23 Um ein Money-Objekt zu erstellen, muss es korrekt geparst werden

Ein schwerwiegender Fehler, den ich an dieser Stelle mal gesehen habe, bestand darin, diesen Wert in ein Float umzuwandeln, dann mit 100 zu multiplizieren und schließlich das Ergebnis in ein Int zu konvertieren Da der Float-Typ nicht präzise war und Int immer abgerundet wurde, ist ein Preis nicht auf 4,10 ? festlegbar ? er wird immer auf 4,09 ? geändert Um solche Fehler zu vermeiden, werden wir einen speziellen Money-Parser verwenden Listing 4

use Money\Currency;use Money\Currencies\ISOCurrencies;use Money\Parser\IntlLocalizedDecimalParser;// we need a repository of ISO standard currencies$currencies = new ISOCurrencies;// use a PHP "intl" number formatter for Germany$numberFormatter = new \NumberFormatter'de_DE', \NumberFormatter::DECIMAL;// together with MoneyPHP parser$moneyParser = new IntlLocalizedDecimalParser$numberFormatter, $currencies;// parse user input as euro$money = $moneyParser->parse'1234,56', new Currency'EUR';// output: 123456echo $money->getAmount;

Natürlich kann der Frontend-Layer viel komplizierter sein als das; auf dieser Ebene können ja auch Client-seitige Validierungen oder sogar Berechnungen in JavaScript durchgeführt werden Wie bereits erwähnt, gibt es bereits Implementierungen des Money-Patterns für JavaScript Hier kann zwischen verschiedenen Bibliotheken wie currencyjs, Dinerojs oder Moneyjs gewählt werden, das ist jedoch nicht Gegenstand dieses Artikels

Im umgekehrten Fall müssen Sie aber möglicherweise ein Money-Objekt an JSON serialisieren und diese Daten an den Frontend-Layer senden Die Money-Klasse implementiert das JsonSerializable-Interface, Sie müssen also nur die Funktion json_encode verwenden, um die JSON-Datei zu empfangen, wie in Listing 5 gezeigt

use Money\Money;// create an object of 1,23 EUR$net = new Money123, new Currency'EUR';// output: {"amount":"123","currency":"EUR"}echo json_encode$net;

Wenn Sie monetäre Daten zwischen Systemen austauschen, ist es immer entscheidend, zu wissen, ob beide Systeme die gleiche Einheit verwenden Manchmal kann ein API den Betrag in Euro und ein anderes in Cent erwarten Diese Diskrepanzen können zu Verwirrung und schwerwiegenden Fehlern führen Es ist besser, aussagekräftigere Feldnamen wie amountDecimal oder amountInteger anstelle eines einfachen amount zu verwenden

Geldbeträge in einer SQL-Datenbank verwalten

Für die SQL-Datenbanken ist die Lösung schwieriger, weil tatsächlich keine von ihnen das Money-Pattern implementiert Einige Datenbanksysteme haben monetäre Datentypen, die eine global festgelegte Währung verwenden, aber das ist nicht das, was wir anstreben Wir wollen beliebige Währungen im System speichern, ohne sie durcheinander zu bringen Selbst wenn unsere Anwendung nur eine Währung verwendet, besteht die Chance, dass eines Tages eine neue Währung in unserem Land eingeführt wird Wir müssen aussagekräftige Werte in der Datenbank speichern, um Probleme bei der Migration oder anderen Operationen, die eine Währungsumrechnung beinhalten, zu vermeiden

Eine Lösung wäre, den Betrag in einer Spalte zu speichern, normalerweise vom Typ DECIMAL oder BIGINT auf keinen Fall FLOAT oder DOUBLE!, und dann eine CHAR3-Spalte zu verwenden, um den ISO-Währungscode zu speichern Das erlaubt es, einige Berechnungen direkt in der Datenbank durchzuführen, aber gleichzeitig ist es einfacher, die Währungen zu verwechseln Eine andere Lösung besteht also darin, eine einzige VARCHAR-Spalte zu verwenden, um einen kodierten Wert wie EUR 123 zu speichern Dann muss man den String in PHP dekodieren So oder so müssen Sie darauf achten, entweder Euro oder Cent konsequent zu verwenden Kasten: ?Systeme ohne Fehler integrieren?

Es ist nicht leicht zu entscheiden, wie groß der Datentyp für die Speicherung der Währung sein soll Ein unsignierter 32-Bit INT-Typ würde Beträge über 4 Milliarden Euro ermöglichen, was mehr als genug erscheint Allerdings haben Währungen in der Welt einen unterschiedlichen Wert, und sie können einer Hyperinflation unterliegen [7] Im Jahr 2009 kostete in Simbabwe ein US-Dollar 1025 einer lokalen Währung Ja, das ist die Zahl 1 mit 25 Nullen Solche Extremfälle können schnell zu einem Integer Overflow führen Sie sollten regelmäßig überprüfen, ob Ihre Systeme die aktuellen Geldbeträge noch verarbeiten können

Ein Rechnungsmodell erstellen

Es spielt keine Rolle, ob Sie es eine Quittung, eine Rechnung oder einen Beleg nennen ? der Punkt ist derselbe Wir möchten ein juristisches Dokument erstellen, um den Kauf eines Kunden zu bestätigen Die Struktur dieses Dokuments wird normalerweise durch das Gesetz festgelegt Einige Felder, wie die Namen von Käufer und Verkäufer und eine Gesamtsumme, sind obligatorisch Einige zusätzliche Felder können optional sein, aber sie können dennoch wertvolle Daten enthalten Um anzufangen, greifen Sie sich einfach eine zufällig auf Ihrem Schreibtisch oder in Ihrer Brieftasche liegende Quittung und beginnen Sie mit der Untersuchung ihres Inhalts

Dieselbe Quittung wird höchstwahrscheinlich in mehreren Formen vorliegen Ein Kunde wird sie auf einer Webseite direkt nach einem Kauf und später in einem Abschnitt wie „“>Meine Bestellungen“ sehen Vielleicht wird er oder sie eine E-Mail-Bestätigung mit einem PDF-Anhang erhalten Wir haben mindestens vier Stellen, an denen ähnliche Daten präsentiert werden

Es ist praktisch, eine Abstraktion des Dokuments zu erstellen Lassen Sie uns eine Klasse namens Receipt entwickeln Listing 6, die alle vom Gesetz, von Ihrer Firma und den Kunden geforderten Informationen enthält An diesem Punkt werden wir uns nicht um SQL, JSON, HTML oder das PDF kümmern Es geht nur um eine reine Datenstruktur mit einigen implementierten grundlegenden Verhaltensweisen, also ein abstraktes Modell

use Money\Currency;use Money\Money;final class Contractor{  private string $name;  private string $address;  // constructor and getters below}final class ReceiptItem{  private Money $unitPrice;  private int $quantity;  private int $tax;  public function __constructMoney $unitPrice, int $quantity, int $tax  {    // verify data correctness    if $quantity < 0 || $tax < 0 {      throw new \Exception'Quantity and tax cannot be negative';    }    $this->unitPrice = $unitPrice;    $this->quantity = $quantity;    $this->tax = $tax;  }  // calculate total value of an item/row  public function getTotalPrice: Money  {    return $this->unitPrice      ->multiply$this->quantity      ->multiply'1'  $this->tax, Money::ROUND_UP;  }}final class Receipt{  private Currency $currency;  private Contractor $seller;  private Contractor $buyer;  private \DateTimeImmutable $issueDate;  private \DateTimeImmutable $dueDate;  / @var array|ReceiptItem[] /  private array $items = [];  public function __constructCurrency $currency  {    $this->currency = $currency;  }  public function addItemMoney $unitPrice, int $quantity, int $tax  {    // check if the currencies match    if !$this->currency->equals$unitPrice->getCurrency {      throw new \Exception'Currencies must match';    }    $this->items[] = new ReceiptItem$unitPrice, $quantity, $tax;  }  public function getTotalAmount: Money  {    $sum = new Money0, $this->currency;    foreach $this->items as $item {      $sum = $sum->add$item->getTotalPrice;    }    return $sum;  }  // other getters and setters below}

Im Beispiel in Listing 6 haben wir nun eine einfache Receipt-Klasse erstellt, die grundlegende Verkäufer- und Käuferdaten, das Ausstellungsdatum des Dokuments, das Fälligkeitsdatum der Zahlung und eine Liste von Artikeln Zeilen enthält Der Beleg wird auf einer einzigen Währung basieren, daher haben wir eine zusätzliche Prüfung hinzugefügt, um sicherzustellen, dass alle Artikel dieselbe Währung haben Es gibt eine Methode, mit der der zu zahlende Gesamtbetrag berechnet wird Es ist sehr einfach, Tests für eine so einfache Klasse zu schreiben, die keine Verbindungen zu externen Systemen hat Wir verwenden dafür PHPUnit [8] Listing 7

use Money\Currency;use Money\Money;use PHPUnit\Framework\TestCase;final class ReceiptTest extends TestCase{  public function testTotalAmount: void  {    // given    $euro = new Currency'EUR';    $receipt = new Receipt$euro;    $receipt->addItemnew Money123, $euro, 10, 19;    // when    $total = $receipt->getTotalAmount;    // then    self::assertEquals'1464', $total->getAmount;    self::assertTrue$euro->equals$total->getCurrency;  }}

Der Test ist sehr einfach Er legt ein Receipt-Objekt mit Euro als Währung an und fügt dann einen Artikel mit einem Stückpreis von 1,23 ? mal 10 Stück hinzu Der Steuersatz für diesen Artikel beträgt 19 Prozent, also berechnet der Test den Gesamtbetrag, der 14,64 ? betragen sollte

Jetzt können wir jede noch verbleibende Logik zur Berechnung von Steuern, Zwischensummen und allen anderen Beträgen, die wir auf der Rechnung vorlegen müssen, testen und umsetzen Im Allgemeinen wollen wir all diese Finanzlogik in unserer Receipt-Klasse einkapseln Aus diesem Grund akzeptieren wir die berechneten Werte nicht als Benutzereingabe Wir möchten sicherstellen, dass unsere Receipt-Objekte immer einen gültigen Zustand enthalten

Um Ihr Receipt-Objekt mit anderen Systemen austauschbar zu machen, müssen Sie eine zusätzliche Infrastrukturschicht implementieren Um das Objekt als JSON zu kodieren oder aus einem JSON-String zu dekodieren, erstellen wir nun unsere eigenen Serialisierer und Deserialisierer Die Kodierungsarbeit kann jedoch auch durch die Implementierung der JsonSerializable-Schnittstelle in der Receipt-Klasse erfolgen Die resultierenden Daten sollten zum Senden an den Frontend-Layer bereit sein Listing 8

final class Receipt implements JsonSerializable{  // prepare an array that will be encoded to JSON  public function jsonSerialize: array  {    return [      'currency' => $this->currency->getCode,      'totalAmountInteger' => $this->getTotalAmount->getAmount,      // more fields here];  }}

Eine andere Klasse, die als repository bezeichnet wird, wäre dann dafür zuständig, die Quittung in einer SQL-Datenbank zu speichern und sie wieder abzurufen Sie können entweder auf bestehende ORM-Implementierungen wie Doctrine oder Eloquent zurückgreifen oder die Datenbanklogik selbst implementieren Es hängt davon ab, wie sauber die Receipt-Klasse sein soll Mit Doctrine würden Sie nur einige Anmerkungen zu dieser Klasse hinzufügen und ein separates Repository implementieren Bei Eloquent müsste die Receipt-Klasse das Active-Record-Muster implementieren und damit eine Menge ändern Das würde unsere Grundvoraussetzung nicht mehr erfüllen, dass die Receipt-Klasse nicht zu sehr an die Datenbank gebunden werden soll

Zwischen Währungen umrechnen

Wenn Ihre Anwendung für internationale Märkte funktionieren soll, müssen Sie möglicherweise zwischen verschiedenen Währungen umrechnen Selbst in der Europäischen Union hat nicht jedes Land den Euro Einige Kunden ziehen es vielleicht vor, eine Rechnung in ihrer Landeswährung zu erhalten und oft ist es erforderlich, den umgerechneten Betrag irgendwo auf Papier zu deklarieren Möglicherweise müssen Sie Ihrer Receipt-Klasse weitere Felder hinzufügen Zuerst müssen Sie die aktuellen Wechselkurse von einem externen API abrufen Es gibt eine Vielzahl von Diensten, aus denen Sie wählen können, darunter kostenlose und kostenpflichtige Angebote zum Beispiel Fixer, die Europäische Zentralbank oder Open Exchange Rates Da die Währungsumrechnung eher ein Backend-Job sein sollte, werden wir den MoneyPHP Converter verwenden Mit etwas Hilfe der Swap-Bibliothek werden wir die Wechselkurse von dem von Ihnen gewählten API abrufen und den Converter in Listing 9 mit Daten füttern Weitere Tipps zum Umgang mit verschiedenen Währungen erhalten Sie im Kasten ?Wie geht man mit Wechselkursen um??

use Money\Converter;use Money\Currencies\ISOCurrencies;use Money\Currency;use Money\Exchange\SwapExchange;use Money\Money;use Swap\Builder;// prepare the API client with your credentials$swap = new Builder-> add'some-api', ['access_key' =>  'your-key']-> build;// build a currency exchange object$exchange = new SwapExchange$swap;// build a converter working on ISO currencies$converter = new Converternew ISOCurrencies, $exchange;// convert euros to dollars$eur = new Money123, new Currency'EUR';$usd = $converter-> convert$eur, new Currency'USD';

Normalerweise ist es ausreichend, die komplette Wechselkurstabelle einmal pro Minute oder sogar einmal pro Stunde abzurufen und in Ihrer eigenen Datenbank zu speichern, damit Sie das API nicht überlasten Besprechen Sie das Intervall für das Abrufen der Wechselkurse mit Ihren Domänenexperten Speichern Sie immer das genaue Datum und die genaue Uhrzeit, die von dem von Ihnen verwendeten API angegeben werden Außerdem sollten Sie bei jeder Währungsumrechnung in der Lage sein, nachzuweisen, welcher Kurs verwendet wurde und von welchem Zeitpunkt dieser stammt Denken Sie daran, Datentypen zu verwenden, die groß genug sind, um jede beliebige Währung zu speichern, die Sie benötigen, und die präzise genug sind, die Wechselkurse zu speichern Sie benötigen in der Regel vier Stellen nach dem Dezimalpunkt Verwenden Sie zuverlässige Dezimaltypen und weder Float noch Double

HTML- und PDF-Rechnungen rendern

Nach dem Kauf von Waren in Ihrem Webshop erwarten die meisten Kunden eine Bestätigung, eine Quittung oder eine Rechnung Diese kann direkt nach dem Kauf, in einer E-Mail oder einer angehängten PDF-Datei angezeigt werden Ähnliche Daten werden an mehreren Stellen dupliziert Vielleicht können Sie einige HTML-Fragmente wiederverwenden, um Codeduplikation zu vermeiden Zum Beispiel werden die Kundendaten oder die Produktliste höchstwahrscheinlich überall gleich sein

Ihre Anwendung verwendet wahrscheinlich bereits eine Template-Engine wie Twig oder Blade, sodass wir hier nicht auf die Generierung des HTML-Codes eingehen werden Wenn Sie einige praktische Methoden in Ihrer Receipt-Klasse vorbereitet haben, sollte es jetzt einfach sein, alle relevanten Daten an den richtigen Stellen der HTML-Vorlage einzubetten

In diesem Stadium sollten Sie keine Berechnungen oder Entscheidungen innerhalb von HTML durchführen ? das liegt in der Verantwortung der Receipt-Klasse! Wenn einige Teile des Dokuments an Bedingungen gebunden sind, implementieren Sie diese Logik in Ihrem Modell Das Template darf nur einfache Fragen an das Modell stellen, z B: ?Soll ich diesen Abschnitt anzeigen oder nicht??

Sobald Sie ein HTML-Dokument vorbereitet haben, sollte es einfach sein, daraus eine PDF-Quittung zu erstellen Es gibt viele Lösungen, um HTML direkt in ein PDF zu konvertieren Quittungen haben normalerweise einfache Layouts, so dass zum Beispiel die dompdf-Bibliothek [9] ausreicht Sie verfügt über eine eigene Rendering-Engine, die den größten Teil der Syntax von HTML5 und CSS 21 versteht Listing 10

$dompdf = new Dompdf\Dompdf;// load the HTML document and set paper size$dompdf->loadHtml$html;$dompdf->setPaper'A4', 'portrait';// render the document and get the PDF contents$dompdf->render;$pdf = $dompdf->output;

Das erstellte PDF testen

Auch wenn wir für unsere Receipt-Klasse Unit-Tests implementiert haben, sollten wir noch sicherstellen, dass unsere HTML-Vorlagen korrekt sind Wenn Sie mit mehreren Geldbeträgen und mehreren Begriffen wie ?Summe?, ?Zwischensumme? und so weiter arbeiten, könnten sich Fehler einschleichen, die vor dem Finanzamt schwer zu erklären sind Das Testen von Dokumenten ist viel schwieriger als das Schreiben von Unit-Tests für Klassen Eine Abschlussquittung kombiniert Geschäftsdaten mit HTML-Markup und vielleicht sogar einigen CSS-Tricks Wenn Sie über eine saubere Struktur für das HTML-Template nachdenken, haben Sie deshalb den Vorteil, dass das Testen einfacher ist

Der beste Weg, ein HTML-Template mit PHP zu testen, ist die Verwendung der gebündelten DOM-Erweiterung DOM steht für Document Object Model und ist ein Standardmechanismus zur Darstellung einer HTML-Dokumentstruktur im Speicher Nach dem Rendern einer Vorlage erstellen Sie also ein DOMDocument-Objekt und verwenden dann XPath-Abfragen, um alle Elemente nachzuschlagen, die wichtige Daten enthalten Listing 11 zeigt das Vorgehen

use PHPUnit\Framework\TestCase;final class TemplateTest extends TestCase{  public function testTemplateRendersProperly: void  {    // given    $html = '<html><body><address class="seller">Foobar GmbH</address></body></html>';    $document = new \DOMDocument;    $document->loadHTML$html;    $xpath = new \DOMXPath$document;    // when    $element = $xpath->query'//address[@class="seller"]'->item0;    // then    self::assertEquals'Foobar GmbH', $element->textContent;  }}

Um sicherzustellen, dass das Layout Ihrer endgültigen Quittung korrekt ist, kann ein weiterer Test entweder einen Screenshot des fertigen PDFs erfassen und ihn mit dem erwarteten Bild vergleichen oder Text aus einem rechteckigen Bereich extrahieren, um zu sehen, ob ein erwarteter Datenblock richtig positioniert wurde Auf diese Weise können Sie sicherstellen, dass sich die Kundendaten irgendwo in der rechten oberen Ecke befinden, die Produktliste irgendwo in der Mitte und so weiter

Es ist nicht einfach, Text aus einer PDF-Datei zu extrahieren, da die physische Reihenfolge der Elemente in einer PDF-Datei oft von der im HTML abweicht Eine PDF-Datei hat keinen Textfluss; sie arbeitet mit festen Inhaltsblöcken Sie können dafür mit dem Werkzeug pdftotext aus dem Paket poppler-utils [10] oder mit Sébastien Malots PdfParser [11] experimentieren Der Kasten ?Sollte man Drittanbietertools vertrauen?? gibt einige Infos zur Verwendung solcher Tools

Nun könnte noch die Frage aufkommen, warum man die fertigen PDF-Dateien testen sollten, wenn man eine beliebte Bibliothek verwendet, um sie aus HTML zu generieren Die Frage ist: Wie sehr vertrauen Sie den Lösungen, die von anderen Leuten vorbereitet wurden? Haben Sie überprüft, wie gut die Bibliothek getestet wird? Sind Sie sicher, dass ein Upgrade der PDF-Bibliothek Ihr Layout nicht beeinträchtigt? Das ist mir nach einem kleineren Upgrade eines anderen PDF-Tools passiert
Denken Sie daran, dass diese Programme von Leuten gemacht werden, die Fehler machen wie alle anderen auch Ihre Kunden werden allerdings Ihnen die Schuld an den Fehlern anderer geben Sie sind für die Werkzeuge, die Sie in Ihren Projekten verwenden, verantwortlich

Fazit

Die Entwicklung von E-Commerce- und Finanzanwendungen ist eine verantwortungsvolle Aufgabe Sie wollen sich oder Ihre Kunden nicht dem Risiko aussetzen, Geld und Ansehen zu verlieren Sie können die Zuverlässigkeit Ihres Codes erheblich verbessern, indem Sie einige Grundregeln bei der Geldverarbeitung anwenden Es gibt viele einsatzbereite Lösungen, die Ihnen die Arbeit erleichtern, sodass es nicht sinnvoll ist, das Rad neu zu erfinden

Links & Literatur

[1] https://wwwtheregistercom/2011/09/22/software_bug_fine/

[2] https://floating-point-guide

[3] Fowler, Martin: ?Patterns of Enterprise Application Architecture?, Addison-Wesley, 2002

[4] https://moneyphporg

[5] https://wwwisoorg/iso-4217-currency-codeshtml

[6] https://schemaorg/PriceSpecification

[7] https://dewikipediaorg/wiki/Hyperinflation

[8] https://phpunitde

[9] https://githubcom/dompdf/dompdf

[10] https://popplerfreedesktoporg

[11] https://wwwpdfparserorg

Der Beitrag MoneyPHP: Internationale Transaktionen leicht gemacht ist auf entwicklerde erschienen


Per Microframeworks durch die Galaxis: Der schnellste Weg zu modernen Java-Microservices (19.02.2021 12:00:31)

In der Softwareentwicklung ist nichts so beständig wie der Wandel: Die letzten Jahre waren geprägt vom Microservices-Trend und der damit verbundenen Abkehr von schwergewichtigen, monolithischen Anwendungen hin zu kleineren, Cloud-basierten Services und zuletzt zu Serverless Computing

Der Beitrag Per Microframeworks durch die Galaxis: Der schnellste Weg zu modernen Java-Microservices ist auf entwicklerde erschienen


Entwickeln, aber simpler: 2021 steht im Zeichen vereinfachter Entwicklungsprozesse (18.02.2021 16:02:03)

Damit wieder Spaß und Produktivität in die Entwicklung Einzug halten, ist ein Software-Development-Lebenszyklus erforderlich, in dem die Software im Mittelpunkt steht und die Infrastruktur nicht zur Hauptbeschäftigung wird Markus Eisele, Developer Adoption Program Lead EMEA bei Red Hat, sieht deshalb in der Vereinfachung von Entwicklungsprozessen einen zentralen IT-Trend für 2021

2020 war in vielerlei Hinsicht ein besonderes Jahr Zum einen war es gekennzeichnet von neuen Arbeitsmodellen und verteilten Teams Zum anderen haben viele Unternehmen bedingt durch die äußeren Umstände Konsolidierungs- und Modernisierungsprojekte schneller als in der Vergangenheit vorangetrieben Im Bereich der Entwicklung sind hierbei noch einmal sehr deutlich die Herausforderungen von Kubernetes-basierten Umgebungen aufgetreten Projektteams mussten viel Zeit damit verbringen, die für ihre Zwecke geeigneten Plattformen zu evaluieren und in vorhandene Software-Entwicklungsprozesse einzubinden Laut der CNCF Cloud Native Computing Foundation gibt es immer noch mehr als 90 zertifizierte Kubernetes-Angebote

Weiterentwicklungen beim Operators Framework

Eines ist bei der Kubernetes-nativen Entwicklung bereits 2020 eklatant zutage getreten: Es ist nicht ausreichend, sich nur auf die Orchestrierung zu fokussieren Vielmehr benötigt die Entwicklung von Container-basierten, verteilten Systemen einen umfassenden Ansatz, der nicht die Komplexität und Konfigurationsanforderungen erhöht, sondern Vereinfachungen für die Entwickler mit sich bringt Und solche Ansätze sind klar auf dem Vormarsch Dafür sprechen etwa die Weiterentwicklungen beim Operators Framework Außerdem stehen den Entwicklern mit dem Kubernetes-Paketmanager Helm 3 und Ansible Werkzeuge zur Verfügung, mit denen sie auch komplexe Anwendungen und Infrastrukturen zuverlässig und qualitativ hochwertig zur Verfügung stellen können

Die Vereinfachung von Entwicklungsprozessen wird auch 2021 ein beherrschendes Thema bleiben Das Verbesserungspotenzial ist dabei noch immens So werden Operators sich weiter auch anderen Programmiersprachen öffnen und Teil der Anwendungen werden Und Entwicklungsumgebungen sind auf dem Weg, nicht nur als Source-Code-Helfer, sondern vielmehr als umfassende Arbeitsplätze zu fungieren Damit erlauben sie einen nahtlosen Wechsel von Workspaces und bieten auch alle notwendigen Informationen über Infrastruktur-Komponenten wie Datenbanken und Message Broker hinweg Besonders hervorzuheben ist in diesem Zusammenhang das Eclipse-CHE-Projekt Die Kubernetes-native IDE ist in voll integrierter Version unter dem Namen Code Ready Workspaces auch in OpenShift enthalten

The Conference for Continuous Delivery, Microservices, Containers, Cloud & Lean Business

Gamification: A Strategy for Enterprises to enable Product Practices

with Garima Bajpai | capital carbon consulting

Cluster-API: One Kubernetes to rule them all +ArgoCD

with Erkan Yanar | linsenraumde

Traditionelle Anwendungsserver und virtuelle Maschinen auf Kubernetes

Darüber hinaus ist ein weiterer Trend erkennbar, der sich ebenfalls bereits 2020 abgezeichnet hat: Nicht nur neue Cloud-native Anwendungen werden künftig auf Kubernetes-basierten Umgebungen bereitgestellt, sondern auch statusbehaftete, traditionelle Anwendungsserver oder sogar virtuelle Maschinen Eine wichtige Grundvoraussetzung dafür ist eine belastbare Storage-Integration in Container Erste CNCF-Projekte wie Rookio sind diesbezüglich bereits entstanden Außerdem steht etwa mit OpenShift Container Storage ein umfangreiches Angebot an Block- und Object-Storage für OpenShift Container zur Verfügung

Natürlich bleiben virtuelle Maschinen eine besondere Herausforderung für statuslose Umgebungen Mit dem Open-Source-Projekt KubeVirt wurde es aber schon 2020 möglich, bestehende Anwendungen, die nicht auf einfache Art und Weise migriert werden können, als Umsystem auf Kubernetes zu betreiben Auch mit der Funktion OpenShift-Virtualisierung in Red Hat OpenShift ist es möglich, Anwendungen, die aus virtuellen Maschinen, Containern und Serverless-Komponenten bestehen, auf einer integrierten Plattform bereitzustellen und zu verwalten

Je weiter sich die Möglichkeiten von Container-Plattformen entwickeln, auch virtualisierte Instanzen und Altanwendungen zu betreiben, desto stärker wird auch die generelle Harmonisierung von Infrastrukturen und Applikationslandschaften voranschreiten ? und damit eine Reduzierung von zeit- und kostenintensiven Workflow- und Entwicklungssilos ermöglichen

Nutzung vollständig integrierter Plattformen

Generell darf ein Aspekt auch im Bereich der Kubernetes-nativen Entwicklung nicht außer Acht gelassen werden: Neue Prozesse bringen nicht immer nur Vorteile mit sich Sie können im Gegenteil sogar zusätzliche Herausforderungen verursachen, etwa wenn Entwickler mehr Zeit für die Konfiguration und Administration der Infrastruktur und Plattformumgebung aufwenden müssen als für die tatsächliche Softwareentwicklung 2021 muss deshalb im Zeichen einer weiteren Vereinfachung von Entwicklungsprozessen stehen, und zwar mit einer deutlichen Verringerung der Komplexität im Aufbau und Betrieb von Container-Plattformen Viele Projekte und Lösungen wie etwa CodeReady Workspaces gehen bereits in diese Richtung Die Zukunft im Software Development heißt eindeutig: Nutzung von vollständig integrierten Plattformen und Lösungspaketen, die die erforderlichen Entwicklungsumgebungen schnell und effektiv bereitstellen

Der Beitrag Entwickeln, aber simpler: 2021 steht im Zeichen vereinfachter Entwicklungsprozesse ist auf entwicklerde erschienen


Das ist doch nicht normal! Anomalieerkennung as a Service mit dem Metrics Advisor (18.02.2021 12:00:38)

Wir Menschen sind üblicherweise gut im Erkennen von Anomalien: Oft reicht ein schneller Blick auf Monitoringcharts, um ein Performanceproblem zu erkennen oder im besten Fall vorherzusagen Eine Kurve steigt unnatürlich rasch an, ein Wert fällt unter ein gewünschtes Minimum oder es gibt Schwankungen, die rational nicht erklärbar sind Manches davon würde sich technisch durch ein simples if automatisiert erkennen lassen, aber mehr Spaß macht es mit dem neuen Metrics Advisor der Azure Cognitive Services

Der Beitrag Das ist doch nicht normal! Anomalieerkennung as a Service mit dem Metrics Advisor ist auf entwicklerde erschienen


Diese Seite wurde in 0.158808 Sekunden geladen