
In diesem Artikel werde ich Ihnen erzählen, wie ich versucht habe, an der Entwicklung eines großen Open-Source-Projekts teilzunehmen. Ich habe mich selbst gehasst, dann die Routine automatisiert und gelernt, das Leben zu genießen. Details - unter dem Schnitt.
Warum ist das überhaupt notwendig?
In der Regel möchten Entwickler aus mehreren Gründen an der Open Source-Community teilnehmen. Hier sind einige (und wahrscheinlich nicht alle) von ihnen:
- aus Dankbarkeit für die Möglichkeit, dieses und andere Programme kostenlos zu nutzen
- neue Erfahrungen sammeln
- um Ihren Lebenslauf zu pumpen
Ich war immer in erster Linie von der Möglichkeit angezogen, etwas Neues zu lernen, die Best Practices in der Softwareentwicklung aufzunehmen, aber alles andere ist in diesem Prozess nicht weniger angenehm.
OK, ich bin im Geschäft, wo fange ich an?
Das erste, was Sie tun müssen, ist, eine Aufgabe zu finden, an der Sie arbeiten können. Sie haben großes Glück, wenn Sie eine Bibliothek für Ihre Arbeitsanforderungen ändern mussten - starten Sie eine Aufgabe, besprechen Sie sie mit den Eigentümern und beginnen Sie mit der Implementierung! Andernfalls können Sie auf die Liste der offenen Aufgaben auf der Projektseite zugreifen und etwas für sich selbst auswählen. Das richtige zu finden ist nicht weniger wichtig als seine Implementierung, und hier ist es nicht so einfach. Selbst wenn Sie ein erfahrener Ingenieur sind, kann es hilfreich sein, mit einfacheren Aufgaben zu beginnen, sich mit der Codebasis und den akzeptierten Entwicklungsprozessen vertraut zu machen und erst dann eine größere Funktion zu übernehmen.
Wie finde ich Aufgaben für Anfänger?
Vor einiger Zeit begann Github, geeignete Aufgaben für Anfänger zu zeigen.
Sie können sie sehen, indem Sie von der Ankündigung in der Kopfzeile der Problemseite gehen Und hier ist unsere geschätzte Seite Nachdem ich mich für diese "Tools" entschieden hatte, sah mein üblicher Tag folgendermaßen aus: Ich öffnete die Liste der Projekte, an denen ich arbeiten wollte (um sie griffbereit zu halten, markierte ich sie alle mit kleinen Sternen), ging zum obigen Abschnitt oder durchsuchte die benötigten Such-Tags und suchte gleichzeitig diejenigen, die in diesem speziellen Projekt verwendet werden. Unnötig zu erwähnen, dass das Durchsuchen von 40-60 Repositories einen riesigen Haufen Kraft gekostet hat und mich schnell gelangweilt hat. Dabei wurde ich gereizt, verlor die Geduld und gab dieses Ding auf. An einem dieser Tage wurde mir klar, dass ich den Suchprozess automatisieren konnte, und ich begann mit der Kompilierung eines TOR.
Anforderungen
- Aufgabe muss offen sein
- Die Aufgabe ist niemandem zugeordnet
- Die Aufgabe sollte mit Einfachheit und Offenheit für die Gemeinschaft gekennzeichnet sein.
- Aufgabe sollte nicht zu alt sein
Danach begann ich verschiedene Repositories für die verwendeten Labels zu analysieren. Es stellte sich heraus, dass es eine Vielzahl verschiedener Labels gibt, von denen einige nur für bestimmte Repositories / Organisationen gelten. Bei Groß- und Kleinschreibung habe ich eine Liste mit ~ 60 Tags zusammengestellt
Lösungsentwicklung
Als Tool entschied ich mich für Kotlin, das mir bereits bekannt war, und implementierte den folgenden Algorithmus: Durchsuchen Sie alle mit einem Sternchen gekennzeichneten Repositorys, rufen Sie alle Aufgaben ab, die den Anforderungen entsprechen, sortieren Sie nach dem Änderungsdatum, verwerfen Sie zu alte und zeigen Sie sie an. Die resultierende Liste ist durch Zeitstempel unterteilt - für heute, für gestern, für die vergangene Woche, für den Monat und alles andere - dank dessen ist es viel bequemer geworden, das Programm regelmäßig zu verwenden. Ich habe beschlossen, dass die Anwendung in der ersten Phase ein Konsolendienstprogramm sein wird, sodass die Ausgabe nur an stdout geht.
Ich habe das Ergebnis in ein Docker-Image verpackt und erwartet, dass bei einer Person Docker mit größerer Wahrscheinlichkeit installiert ist als bei JRE. Das Dienstprogramm speichert keinen Status, sodass bei jedem Start der gesamte Algorithmus ausgeführt wird und der verbrauchte Container sicher aus dem System entfernt werden kann.
So funktioniert das Programm:

Anforderungslimit
Ein Aufruf einer Drittanbieter-API ist ein klassisches Beispiel für eine io-intensive Aufgabe. Daher wurde natürlich beschlossen, Daten in mehrere Streams zu laden. Durch Versuch und Irrtum habe ich die Einschränkungen der Github-API erfüllt. Erstens wurde bei einer großen Anzahl von Threads die Anti-Missbrauchsprüfung auf der Github-Seite ausgelöst, und ich musste standardmäßig bei 10 Threads anhalten, mit der Möglichkeit der Konfiguration über Eingabeargumente.
Zweitens ist die Anzahl der Anfragen begrenzt - sie können nicht mehr als 5000 pro Stunde gestellt werden. Mit dieser Einschränkung ist alles viel komplizierter, da Github beim Übergeben mehrerer Tags an eine Suchabfrage ein logisches 'Und' zwischen diese setzt und angesichts der Anzahl der Tags in der Liste mit fast 100% iger Wahrscheinlichkeit nichts findet. Angesichts einer großen Verschwendung von Aufrufen der API begann ich, eine zusätzliche Anfrage für alle Tags im Projekt zu stellen, den Schnittpunkt mit meiner Liste zu übernehmen und Stück für Stück nur für diese Tags Aufgaben anzufordern. Durch Hinzufügen von 1 Anforderung zu jedem Repository wurden 50-55 zusätzliche Anforderungen (je mehr Tags das Programm unterstützt, desto mehr zusätzliche Anforderungen) für Aufgaben an Tags entfernt, die für das Repository nicht vorhanden sind.
Für einige Benutzer reicht diese Optimierung jedoch möglicherweise nicht aus. Laut einer oberflächlichen Einschätzung können Sie mit der aktuellen Lösung 1000 Repositorys umgehen (es gibt auch eine strenge Einschränkung im Code), wobei erwartet wird, dass durchschnittlich 4 einfache Beschriftungen in jedem Repository vorhanden sind. Bisher ist noch niemand auf eine solche Einschränkung gestoßen, aber die Idee einer Lösung steckt im Rückstand. Hier ist alles einfach - Speichern des Status, Zwischenspeichern von Antworten, in besonders schwierigen Fällen, langsam im Hintergrund umgehen.
Wie finde ich Repositories?
Wenn Sie noch kein so aktiver Github-Benutzer sind oder die Stars-Funktion nicht verwenden, finden Sie hier einige Tipps zum Finden der richtigen Repositorys:
- Gehen Sie die Technologien durch, die Sie für Ihre Projekte verwenden. Einige davon werden möglicherweise auf Github vorgestellt
- Verwenden Sie den Abschnitt mit den beliebten Trends
- Verwenden Sie das Repository für fantastische Listen für Themen, die Sie interessieren.
Starten Sie
Zu Beginn benötigen Sie:
Weitere Einstellungen (Filter nach Sprache, Parallelitätsgrad, Blacklist der Repositorys) finden Sie auf der Projektseite. Link zum Projekt .
Wenn Sie einige Tags im Projekt vermissen - erstellen Sie eine PR oder schreiben Sie mir eine persönliche, werde ich hinzufügen.