JavaRush /Java-Blog /Random-DE /Wie aus einem Interviewtest eine Open-Source-Bibliothek w...

Wie aus einem Interviewtest eine Open-Source-Bibliothek wurde

Veröffentlicht in der Gruppe Random-DE
Hallo zusammen, JavaRush-Community! Ein wenig zu meiner Person: Seit Frühjahr 2016 arbeite ich als Java Software Engineer. Ich liebe es, hierher zu kommen und Probleme zu lösen, die ich während meines Studiums nicht gelöst habe. Heute erzähle ich Ihnen etwas über die Bibliothek – Bildvergleich . Dies ist eine Open-Source-Bibliothek, die auf GitHub öffentlich verfügbar ist . Wie aus einer Interviewtestaufgabe eine Open-Source-Bibliothek wurde – 1Der Zweck dieses Artikels besteht darin, zu vermitteln, dass die Erstellung eines Open-Source-Produkts nicht nur Zeitverschwendung ist, nein! Dies ist eine reichhaltige Erfahrung, die von verschiedenen Seiten genutzt wird, wenn Sie die Kontrolle über den gesamten Entwicklungsprozess haben und sich mit jedem Detail befassen müssen. Open Source ist die Welt um Sie herum. Ich mache keine Witze, während der Existenz dieser Bibliothek habe ich mit Menschen aus verschiedenen Ländern kommuniziert, wie den USA, Indien, China, Ägypten, Russland, Deutschland, der Ukraine, Schweden, Neuseeland und Norwegen. Das heißt, es handelt sich um echte Erfahrung in der gemeinsamen Entwicklung, beim Finden von Kompromissen, beim Überprüfen von Code usw. Das war die Einleitung, jetzt fangen wir in der Reihenfolge an:

Prüfen. Anfang August 2017

Alles begann damit, dass ich ein Vorstellungsgespräch bei einem der Unternehmen hatte, bei dem der erste Schritt darin bestand, eine Testaufgabe zu schreiben. Die Aufgabe bestand darin, einen Code zu schreiben, der zwei Bilder gleicher Größe vergleicht, die Unterschiede zwischen ihnen findet, sie gruppiert und ein Rechteck um sie zeichnet. Da ist das erste Bild:
Wie aus einer Interviewtestaufgabe eine Open-Source-Bibliothek wurde – 2
Es gibt noch ein zweites Bild:
Wie aus einer Interviewtestaufgabe eine Open-Source-Bibliothek wurde – 3
Es war notwendig, die Unterschiede zu finden und sie wie unten gezeigt einzukreisen:
Wie aus einer Interviewtestaufgabe eine Open-Source-Bibliothek wurde – 4
Wie Sie sehen können, gibt es einen Unterschied im Feld „Benutzername“ , das mit einem roten Dreieck umkreist ist. Genauere Beschreibung der Aufgabe . Ich beschloss, dass ich es nicht nur funktional richtig, sondern auch schön machen wollte, damit es nicht peinlich wird. Zu diesem Zweck habe ich beschlossen, dies als Projekt auf GitHub zu veröffentlichen . Ich wollte schon lange GitHub studieren und Erfahrungen im Umgang damit sammeln. Nach einem kurzen Blick stellte ich fest, dass es gut wäre, Dienste von Drittanbietern hinzuzufügen, um die Codequalität zu analysieren, Codeabdeckung mit Tests zu generieren usw. Folgende Tools hinzugefügt:
  • Codacy – Codequalität. Es lohnt sich wirklich, darauf zu achten.

  • Travis CI ist ein CI-Tool (Continuous Integration), das ein Projekt erstellt, Tests durchführt und meldet, ob das Projekt erfolgreich erstellt wurde. Wenn beispielsweise einer der Tests aufgrund der neuen Änderungen nicht bestanden wurde, wird die Meldung angezeigt, dass die Projekterstellung nicht erfolgreich war, und die Meldung wird rot angezeigt.

  • Coveralls ist ein Tool, das anzeigt, wie viel Prozent Ihres Codes von Tests abgedeckt werden.

  • BetterCode Hub ist ein weiteres Tool zur Analyse der Codequalität. Eine sehr nützliche Sache, die Ihnen nicht nur sagt, was schlecht ist, sondern auch beschreibt, warum und einen Link zu einem Buch bereitstellt, in dem Sie mehr darüber erfahren können.

Jeder dieser Dienste verfügt über ein eigenes Abzeichen mit Datenergebnissen, beispielsweise einem Code-Coverage-Projekt. Und dieses Abzeichen kann in die Hauptbeschreibung des Projekts – README-Datei – eingefügt werden. Die Aufgabe war fertig – ich habe sie zur Überprüfung gesendet. Nach der Überprüfung habe ich sofort, aus frischer Erinnerung, für jeden Kommentar ein Github-Issue erstellt , das mir dann helfen würde, dieses Projekt zu verbessern. Es gab keine Verbesserungsaufgabe seitens des Arbeitgebers, daher habe ich das Projekt für eine Weile vergessen ...

Bibliothekspfad. Juli 2018

Logo

Irgendwann habe ich festgestellt, dass mein Projekt oft von Menschen besucht wird, und das passiert jeden Tag. Ich war darüber erstaunt und noch mehr erstaunt über die Tatsache, dass sie etwa ein Jahr später eine AUSGABE erstellten, in der stand, dass ein bestimmter Grafikdesigner mir anbot, ein Logo für mein Projekt zu erstellen. Sie sagen, dass er dies gerne für OpenSource-Produkte macht und es absolut kostenlos machen wird. Wir begannen mit der Zusammenarbeit. Es wurden mehrere Optionen vorgeschlagen, aber letztendlich haben wir uns für diese entschieden:
Wie aus einer Interviewtestaufgabe eine Open-Source-Bibliothek wurde – 5
Ich war damals noch jung und mit der Open-Source-Community nicht vertraut, und allein die Tatsache eines solchen Angebots war für mich wild und ich fragte: Warum macht er das? Darauf antwortete er: „Lolz, oh, einfach weil ich es liebe, zu Open-Source-Projekten beizutragen. Irgendwie eine Sache mit Lebenszielen …“ ( Das Problem selbst ist hier ). Da habe ich zum ersten Mal gespürt, wie toll es ist, wenn verschiedene Leute über Open-Source-Projekte auf einen stoßen und so interessante Dinge anbieten!

Erster Seitenfehler

Mir ist aufgefallen, dass ein bestimmter Entwickler aus China ein Problem für mich erstellt hat , in dem er beschrieb, dass er einen Fehler in der Arbeit der Bibliothek festgestellt hat, dass bei der Verwendung großer Bilder ein StackOverflowError angezeigt wird . Der Mann beschloss, einen Vorteil auszunutzen und entdeckte einen Fehler. Und ich habe es nicht einfach gefunden. und schrieb auch über sie. Dies ist ein neuer Schritt in der Entwicklung der Bibliothek. Außerdem hatte ich keine wirkliche Lösung. Irgendwann schlug einer der Tester aus Russland eine Lösung vor. Aber es war roh und nicht richtig zubereitet und ich habe es nicht akzeptiert. Und als es an der Zeit war, die Bibliothek in Maven Central zu veröffentlichen, musste etwas mit diesem Fehler behoben werden; ich wollte sie nicht zusammen mit ihr veröffentlichen. Darüber hinaus gab es noch einen weiteren Defekt, den ich nie behoben habe und der ebenfalls viele Unannehmlichkeiten mit sich brachte.

Verwendung der Befehlszeile. Herbst 2018

Der nächste Entwicklungsschritt war die Kommunikation mit einem Schweden (Renato Athaydes), der die Bibliothek über die Kommandozeile nutzen wollte und hierfür einige Änderungen und Ergänzungen notwendig war. Auch hierüber war ich erstaunt und überrascht. Nachdem mir der Grafikdesigner geschrieben hatte, war meine Überraschung etwas geringer, aber immer noch sehr groß. Der Gedanke, dass jemand meinen Code wirklich brauchte, erfüllte mich mit unglaublichen Gefühlen. Er nahm die notwendigen Änderungen vor und bereitete den Code vor. Ich habe eine Codeüberprüfung durchgeführt, das heißt, ich habe mir die Änderungen angesehen, es gab Kommentare, die geändert wurden, und die Änderungen waren bereits in der Bibliothek. Ich habe diese Änderungen als Version v2.0 bezeichnet. Der nächste Schritt bestand darin, die Bibliothek zu Maven Central hinzuzufügen – einem zentralen Repository, von dem aus Sie sie für jedes Projekt herunterladen und als Abhängigkeit verwenden können. Zu diesem Zeitpunkt hatte ich keine Ahnung, wie ich das bewerkstelligen sollte, nicht einmal aus der Ferne, also sagte ich, ich sei beschäftigt und bat ihn, alle Schritte durchzuführen, die für die Einrichtung des Projekts notwendig waren. Dies reichte jedoch überhaupt nicht aus und das Interessanteste war, eine Verbindung mit Maven Central herzustellen. Das ist ein großer Aufwand, den ich beim ersten Mal nicht konnte, und erst am 15. April konnte ich das Projekt auf Maven Central veröffentlichen. Es war nicht einfach, aber wie andere gerne sagen: „Jeder, der seinen Java-Code veröffentlichen möchte, muss das durchmachen.“ Bevor ich die Bibliothek veröffentlichte, fand ich endlich heraus, was und wie ich mit den seit langem bestehenden Fehlern umgehen sollte, und veröffentlichte eine neue Version v2.0.2 , in der ich mich bei allen bedankte, die mir geholfen haben, und beschrieb, was und wie ich gemacht habe .

Veröffentlichung in Maven Central. Frühling 2019

Um eine Bibliothek korrekt zu veröffentlichen, müssen Sie über ein gutes Verständnis der Versionierung und des korrekten Festlegens von Versionen verfügen. Ich bleibe bei diesem Schema:
  • XX.YY.BBBB , wobei XX ein Hauptversionsupdate ist, das Änderungen mit sich bringt, die mit dem vorherigen nicht kompatibel sind (z. B. die Änderung des zurückgegebenen Ergebnisses in Methoden);
  • YY ist ein kleines Update – eine interne Änderung oder Erweiterung, die nichts an BBBB ändert – das sind Fehler, die behoben wurden.
  • Version 2.0.2 bedeutet beispielsweise, dass die Hauptversion 2 ist, es keine kleineren Updates gab und es zwei Updates für Mängel gibt.
Als Nächstes war es wichtig herauszufinden, wie man „groupId“ und „artifactId“ richtig einstellt . Sie mussten einmal ausgewählt und weiter verwendet werden. Und sie bilden das Paket, in dem der Code gespeichert ist. War: ua.comparison.image Jetzt: com.github.romankh3.image.comparison Und das ist eindeutig besser, da jeder weiß, dass dies ein Projekt von GitHub ist und von einer Person mit dem Spitznamen romankh3 gefunden werden kann. Als ich das alles erledigt hatte, veröffentlichte ich eine neue Version v2.1.0 .

Kommunikation mit den Schweden. Mai 2019

Nachdem ich die Bibliothek veröffentlicht hatte, schickte mir ein anderer Schwede (Mika Kytöläinen) eine E-Mail und bat seinen Freund, Änderungen an meiner Bibliothek vorzunehmen. Er sagt, dass er das wirklich braucht und er wird sich sehr freuen, wenn wir es tun, und zwar schnell. Natürlich war ich nicht gegen die notwendigen Änderungen. Er schlug vor, eine Liniendickenkonfiguration hinzuzufügen, die ein Rechteck zeichnet. Für diejenigen, die schlecht sehen, wird dies beispielsweise eine nützliche Änderung sein. Habe den Code vorbereitet . Nachdem ich noch ein paar Änderungen vorgenommen hatte, habe ich Version v2.2.0 veröffentlicht

Kommunikation mit einem Deutschen. Mai 2019

Danach hat ein Deutscher ein Problem erstellt , in dem er sagt, dass er es zum Testen verwenden möchte, es aber an Funktionalität mangelt. Er machte viele Vorschläge, die sehr interessant waren. Er schlug vor, statt nur das resultierende Bild mit dem Ergebnis des Vergleichs zurückzugeben, einen Satz von Daten zurückzugeben: was verglichen wurde, das Ergebnis (falls erforderlich) und den Zustand, in dem es sich befand wird MATCH, MISMATCH, SIZE_MISMATCH sein. Habe sogar die Änderungen vorgenommen. Sie berücksichtigten jedoch überhaupt nicht den vorherigen Code und wurden in aller Eile erstellt. Ich lehnte sie ab und bot an, sie so auszuführen, wie ich es für richtig hielt. Trotzdem reagierte er mehr und ich beschloss, es selbst zu tun und eine neue Version zu veröffentlichen. Gleichzeitig schlug Mika Kytöläinen eine weitere interessante Funktionalität vor – das Hinzufügen von Bereichen, die nicht in den Vergleich einbezogen würden. Das ist ein echter Fall. Und das alles wurde in v3.0.0 veröffentlicht

Verwendung in einem realen Projekt

Ende Mai schrieb mir ein Automatisierungstester aus Kiew, der sich für die Bibliothek interessierte und sie in einem echten Projekt einsetzen möchte, das Geld einbringt. Es war ein Durchbruch! Es irgendwo in einem Lieblingsprojekt zu verwenden ist eine Sache, aber es in einem echten Projekt zu verwenden, ist eine ganz andere Sache. Wir haben besprochen, was und wie es funktioniert. Der Antrag ist sehr interessant: In seinem Antrag werden Schecks gedruckt, und es musste überprüft werden, ob die Schecks nach einer bestimmten Vorlage erstellt werden und sich nicht ändern. Allerdings gab es das Problem, dass sich Abschnitte wie Datum und Uhrzeit immer änderten und ignoriert werden mussten. Wir hatten bereits Funktionen hinzugefügt, um einige Bereiche zu ignorieren, aber es stellte sich heraus, dass sie für den tatsächlichen Einsatz noch sehr ungeeignet waren, und wir haben trotzdem mehrere Wochen lang fruchtbar daran gearbeitet. Das Ergebnis war die Veröffentlichung der Version v3.1.1

Eine Nische finden

Danach wurde mir klar, dass die eigentliche Nische für meine Bibliothek darin bestand, sie in Tests zu verwenden. Zu diesem Zweck habe ich beschlossen, eine Art Forum für Tester zu finden und ihnen darüber zu schreiben, um Feedback zu erhalten und den Bekanntheitsgrad zu steigern. Ich habe ein russischsprachiges Forum gefunden und dort einen Artikel veröffentlicht: Organisation des Testens von Bildern – Vergleich zweier ähnlicher Bilder . Darin erhielt ich echtes Feedback zum Code und zur Funktionalität, das ich anwendete und eine neue Version v3.2.0 und dann v.3.3.0 veröffentlichte .

Jetzt

Die Bibliothek hat derzeit 60 Sterne auf Github und verfügt über 33 Forks. Ich finde das sehr cool, wenn man bedenkt, dass ich es in keiner Weise beworben habe, außer durch einen Artikel im Forum für Automatoren. Vielen Dank an alle, die bis zum Ende gelesen haben. Es stellte sich tatsächlich heraus, dass der Artikel viel länger war, als ich erwartet hatte. Ein Artikel darüber, wie man eine Bibliothek in Maven Central veröffentlicht. Wenn Sie etwas hinzuzufügen haben, schreiben Sie! Wenn Sie Vorschläge zur Verbesserung der Bibliothek haben, schreiben Sie! Ich werde alles lesen und mir die nötige Zeit nehmen. Wer den Artikel mochte und ihn nützlich fand – bewertet ihn und schreibt in die Kommentare. Abonnieren Sie außerdem mein Github-Konto romankh3. Siehe auch meine anderen Artikel:
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION