ESPuino: Wie geht's weiter?

Spoiler: Nein, keine Angst - das wird hier kein Abgesang :slight_smile:

In letzter Zeit sind vermehrt Leute an mich rangetreten, die mich gefragt haben, wie ich mir die Weiterentwicklung von ESPuino so vorstelle. Dazu möchte ich nun mal was schreiben, im Endeffekt jedoch auch zu einer Diskussion einladen.

Für meinen Teil sieht es so aus, dass ich viel in Bereitstellung und auch Support von Hardware eingebunden bin. Das läuft natürlich hinter den Kulissen ab, so dass das nicht für jedermann transparent ist. Zusätzlich kommen noch Neuentwicklungen dazu - das bringt auch immer viel Arbeit zum Recherchieren mit sich. Und dann muss das Ganze auch designed und bestellt werden. Letztlich kommt noch mehr oder weniger viel Löten drauf und halt Testen. Mit allem zusammen verbringe ich nicht selten komplette Abende. Alles in allem kann ich sagen, dass es nahezu keinen Tag im Jahr gibt, wo ich nicht irgendeinen Support für ESPuino gebe - und sei es nur per PN.

Daran habe ich durchaus Spaß - klar - weil sonst würde ich das auch nicht machen. Aber letztlich bedeutet das natürlich, dass meine Zeit für Softwareentwicklung ziemlich begrenzt ist. Und wenn nicht, dann gibt es auch einfach Tage, wo ich mal einfach nix mache. Im Gegenzug gibt es jedoch, und darüber freue ich mich auch, Entwickler, die an ESPuino weiterentwickeln. Sie stellen den Code dann freundlicherweise als Pull Request zur Verfügung und es ist an mir, diesen Code dann zu testen.

Probleme:
a) Ich habe zum Testen nicht immer Zeit/Lust.
b) Durch die vielen Features, die ESPuino inzwischen besitzt, sind komplette Tests gar nicht mehr möglich. Also ob sich das kompilieren lässt ist eine Sache - aber ich meine ob das jetzt fachlich alles passt. Da muss ich ganz klar sagen: Ich habe weder Zeit noch Lust, da immer alles durchzuprobieren. Speziell das Feature PAUSE_WHEN_RFID_REMOVED kommt mir hier mit DONT_ACCEPT_SAME_RFID_TWICE in den Sinn.
c) Zu manchen Sachen habe ich gar nicht die Hardware und da es abseits dessen ist, wofür ich ESPuino so nutze (das Projekt ist für mich natürlich auch gutes Stück weit Selbstnutzen), winke ich das durch, wenn es formellen Ansprüchen genügt und kompilierbar ist. Also letztlich sind da immer mal wieder Features dabei, die für mich selbst keinen Nutzen haben. Was an sich ja erstmal nicht schlimm ist, aber grundsätzlich ist es nicht gut, wenn es zunehmend Code gibt, für den sich niemand verantwortlich fühlt. Letztlich komme ich damit wieder auf Punkt a zurück, weil wenn ich für ein Feature selbst so gar keine Verwendung habe, dann habe ich so gewisse Motivationsprobleme, dafür Zeit aufzuwenden :slight_smile:.

Alles in allem kann ich sagen, dass mir das im „Forum nebenan“ immer so ein bisschen missfallen hat, dass es so viele Forks gibt, weil letztlich macht’s das Ganze undurchsichtig. Ich war daher bisher bestrebt, die ganze Funktionalität aufzunehmen - da wollte ich auch niemand, der sich Arbeit gemacht hat, vor den Kopf stoßen. Auch irgendwie in der Hoffnung, dass wir damit mittelfristig mal „durch“ sind damit und dann erstmal eine Phase der „Stabilisierung“ einkehrt. Aber da weiterhin neue Features bereitgestellt werden (was ja auch schön ist, da es zeigt, dass das Projekt lebt!), muss das aus meiner Sicht ein Stück weit reglementiert werden.

Drei Vorschläge, die mir gut gefallen haben, möchte ich an dieser Stelle aufgreifen:
a) Entwickler, die beabsichtigen, ein neues Feature bereitzustellen, kündigen hier im Forum das zunächst an. Dann kann man drüber diskutieren, ob das einen gewissen Konsens hat. Weil wenn es nur 2-3 Leuten dient, dann muss das aus meiner Sicht nicht in den Hauptzweig rein. Heißt: Gibt es keine Diskussion und ich erachte es als nicht wichtig, dann wird es künftig nicht mehr aufgenommen.
b) Es sollte einen neuen Branch „dev“ geben, in den neue Features erstmal aufgenommen werden. Dort können sie erstmal besser getestet werden, ehe man das auf die Allgemeinheit loslässt.
c) Features/Baustellen auflisten, bei denen ich persönlich Arbeit sehe und die sich ein Entwickler schnappen könnte. Da würde mir bestimmt bissl was einfallen :slight_smile:

Es wurde auch vorgeschlagen, dass es vielleicht einen Zweig gibt, auf den auch andere Personen Schreibrecht haben sollen. Da muss ich zugeben, dass ich mich damit nicht so ganz anfreunden kann, da ich gerne den Überblick behalten möchte. Denn diesen würde ich damit auf jeden Fall verlieren.

An dieser Stelle auch nochmal Dinge, die mir nicht gefallen:
a) (Komplexe) PRs, zu denen es keine Beschreibung gibt. Beschreibung speziell im Sinne, welcher konkrete Nutzen zu erwarten ist. Da rede ich insbesondere nicht von neuen Funktionen, sondern von Dingen, die den Bestandscode ändern.
b) PRs, wegen denen ich gefühlt 15-20 Mails pro Tag kriege. @Entwickler: Lasst euch Zeit, ich sitze hier nicht auf glühenden Kohlen.
c) Wenn ich hier zu Diskussionen aufrufe und es entsteht keine. Oder zumindest mal nur eine, an der sich nur ganz wenig Leute beteiligen - üblicherweise der „harte Kern“ hier. Weil letztlich will ich damit auch anderen Leuten die Möglichkeit geben, hier mitzubestimmen. Merke: Ich will hier gar nicht alles bestimmen oder einen auf „König“ machen. Mir geht es mehr darum, einen Konsens zu erzielen, an dem möglichst viele Leute Spaß haben.

Insgesamt wird das vermutlich dazu führen, dass es vermehrt Forks geben wird. Das muss dann aber vielleicht einfach auch so sein. Letztlich möchte das aber auch gar nicht alles alleine entscheiden. Insofern erscheint mir der Punkt, dass man das hier im Forum diskutiert, als ein guter Zwischenweg. Das setzt allerdings voraus, dass hier auch eine Diskussion stattfindet.

Audrücklich NICHTS dagegen habe ich, wenn ein Entwickler ein Feature zeigt/beschreibt und dabei auf das eigene Repository verweist. Auch sowas hatten wir schon und über PRs oder Cherry-Picking meinerseits, hat es dann, nachdem Interesse bekundet wurde, seinen Weg in meinen Hauptzweig gefunden.

Gut. Dann hoffe ich mal, dass ich niemand vergraule mit meinen Aussagen.
Dann diskutiert mal :slight_smile:.

19 „Gefällt mir“

Hy Torsten,
Vielen Dank für deinen intensiven Einsatz und der ausführlichen Darstellung deiner Position.

Ich hatte in der Tat schon ein mulmiges Gefühl bei der Überschrift :slightly_smiling_face:

Okay, ich beteilige mich gern an Diskussionen, jedoch kann ich als Spaghetticodeingenieur teilweise nix beitragen bzw. die Auswirkungen nicht abschätzen und dann enthalte ich mich lieber.

Sehr gut finde ich dein Bestreben nicht alles in Forks zu schieben. Eine Fork ist aus meiner Sicht Fluch und Segen in einem. Zumal ich nicht weiß ob ich es auf die Reihe bekommen würde meine Wünsche aus 10 Forks zusammenzusammeln und am Schluss zum Laufen zu bekommen.

Für mich klingt der Vorschlag mit dem Dev gut. Da könnte man in bestimmten Abständen eine Version abziehen und diese gemeinsam testen.
Jetzt lehne ich mich aus dem Fenster (ich habe da wirklich keine Ahnung): gibt es nicht die Möglichkeit Github automatische builds und Tests durchführen zu lassen. Könnte das uns beim Testen unterstützen?

Bei der Hilfe bei Features oder Bugs ziehe ich mich wieder raus, wegen meiner miesen Codequalität, zumal ich teilweise gar nicht Blicke, was der Code da macht.

Vielleicht ist es ja eine gute Idee Problemstellungen als Issue im Github oder hier im Forum abzulegen (obwohl irgendwas testen kein Issue im eigentlichen Sinn ist)

Abschließend bin ich wirklich verblüfft, wie viel du hier auf die Beine gestellt hat. Irgendwie muss mein Zeitmanagement sehr ineffizient sein. Wenn die Kids im Bett liegen tendiert meine Motivation für produktive Sachen oft gegen Null.

4 „Gefällt mir“

Das geht und wird auch schon gemacht. Hat mich schon diverse Male auf Fehler hingewiesen.
Könnte man aber grundsätzlich ausweiten das Ganze.

1 „Gefällt mir“

Hi Torsten,

auch ich möchte dir danken für deine Klarstellung und deine Vorschläge, wie das alles sozusagen unter einen Hut zu bringen wäre.

Ich bin mittlerweile zwiegespalten:
Aber aufgrund meiner Erfahrungen die ich bisher hier machen durfte, sehe ich das
einerseits so wie du, d.h. wenn hier kein Interesse bekundet wird in Form von entsprechenden Posts hier im Forum, dann muss man auch nicht die Zeit vergeuden, um das sauber für die Einbindung in den master branch aufzubereiten und zu integrieren. Dann kann man das auch in einem Fork oder sonst wie oder garnicht zur Verfügung stellen.
Andererseits wäre es Schade, wenn gute Ideen damit verloren gingen. Diese sollten jedenfalls in irgend einer Form weiterhin im Zugriff bleiben.
Was mich sehr stark verwundert hat, ist die mangelnde Bereitschaft der Forumuser Feedback zu geben.
Die fehlende Zeit kann es ja nicht sein, es genügt ja ein einfacher Klick auf das Herz um zu signalisieren „das gefällt mir“
Hab mich selber schon dabei ertappt, etwas gelesen zu haben und dann nicht bei „gefällt“ diesen Klick zu machen. Hab das aber nun stärker in meinem Bewusstsein.
Sollten sich noch ein paar Worte ausgehen, dann wäre das ganz toll. Es geht hier nicht um Lobheischerei, sondern um reines Feedback: Ist das von Interesse oder nicht.
Dann gibt es auch z.B. die Situation, wo ein gewohntes Feature plötzlich einem anderen zum Opfer fällt und das im Forum aufgezeigt wird. Wenn dann ein Lösungsvorschlag kommt, egal ob gut oder schlecht, wie man dieses wieder zum Laufen bringen kann, dann wundert es mich schon, dass hier absolut keine Reaktion darauf kommt.
Sieht so aus, als interessiert das niemanden. Was ist die Folge: Man wird sich den Aufwand das umfangreich dokumentiert ins Forum zu stellen einfach sparen was natürlich auch nicht im Sinne der Sache sein kann. Ich fände es schön, wenn hier die Kommunikation besser werden würde.
Dann ist noch ein Aspekt zu bedenken: Dieses Projekt hat das Potential für vielschichtigere Einsatzmöglichkeiten als nur eine ganz tolle Sache für unsere Kleinen.
Das ist dann aber sicherlich etwas für das Thema Fork.
Also etwas zusammengefasst:
Alles was für den ESPuino für den Nachwuchs interessant sein könnte und natürlich dafür auch Interesse dokumentiert wird, sollte nach Möglichkeit in den master übernommen werden, um Updates möglichst ohne großen Aufwand und großem Mergen zu ermöglichen.
Ich habe mir z.B. beim Thema DualHockeyTags bewusst die Mühe gemacht, das möglichst gekapselt und mit möglichst wenigen Zeilen im master einbindbar zu machen und bei Nichtaktivierung den Master nicht zu beeinflussen. Damit reduziert sich der Testaufwand für Torsten. Das eingebrachte Feature wird größtenteils in separaten sourcefiles mitgeliefert die auch vom Autor entsprechend gewartet werden, falls was nicht so läuft, wie angedacht.
Das waren jetzt einmal meine schnellen Gedanken dazu.
GN8

4 „Gefällt mir“

Hi Torsten, auch von meiner Seite vielen vielen Dank, auch ich bin beeindruckt vom ESPuino und wie du das alles unter einen Hut bringst. Generell finde ich die Struktur von Refine, Request, Develop und Test sehr gut. Das klingt so ein wenig aus den 3 Punkten durch die du nennst. Vielleicht könnte man so eine Struktur irgenwie im Forum verankern.
In der Refine-Phase werden Ideen eingebracht besprochen und weiterentwickelt, ohne sich dabei konkret mit technischen Problemen zu befassen, bis die Idee ausgereift ist. Dann wird eine Zusammenfassung im Request-Forum veröffentlicht und es geht darum, wie die Idee technisch umgesetzt werden kann. Hier können versierte Techniker diskutieren und potenzielle Umsetzer gefunden werden. Vielleicht war die Idee unrealistisch und wird fallen gelassen, vielleicht geht sie in die Entwicklungsphase und wird dann für die allgemeine Testphase im dev veröffentlicht. Wenn diese Tests erfolgreich sind, wird die Idee schließlich in den Main-Fork übernommen. Ich denke, dass auf diese Weise das größtmögliche Potenzial aus Ideen gezogen werden kann, da sowohl weniger technisch versierte Personen als auch Experten Input geben können und eine größere Arbeitsteilung erreicht wird ohne den Überblick abzugeben.

4 „Gefällt mir“

Hallo Torsten
Ich bin extrem dankbar den Einsatz und Support den du (und natürlich viele andere) hier leistest.
Meine letzten grösseren Programmierarbeiten liegen rund 30 Jahre zurück (damals hauptsächlich Turbo Pascal). Ich bin immer noch daran, den Code verstehen zu versuchen. Mein Ziel ist es, euch irgendwann auch einmal einen Bug zu fixen oder einige Zeilen bei zu tragen.
Bis dann bin ich aber einfach nur dankbar.
Grüsse aus der Schweiz
Reto

1 „Gefällt mir“

Hi Torsten,
Von meiner Seite auch sehr vielen Dank, es ist verdammt beeindruckend, was ESPuino kann. Eine sehr beeindruckende Software und Hut ab, dass du die HW- und SW-Entwicklung mit unter einem Hut bringen kannst.

Wegen den PRs mit den Mails (ich nehme an automatische Mails von GitHub, dass sich was geändert hat), ja da fühle ich mich angesprochen (und schuldig :slight_smile: ). Da muss ich mich an der Nase nehmen und die PR’s erst öffnen, wenn sie schon fertig sind. Und mehr zu kommentieren und vorher mehr testet, viel mehr…

Die Idee mit der Dev-Branch finde ich sehr gut. Ich bin grundsätzlich auch ein Fan von Feature-Branches, in welcher Funktionen entwickelt und getestet werden können, die dann entweder ihren Weg in die Dev- oder Main-Branch finden, oder parallel weiter leben (zB für Funktionen oder Treiber von RFID Karten). Das passt finde ich auch gut mit deiner Idee der Diskussion im Forum zusammen.

Was das Testen betrifft, kann ich gerne anbieten dich zu unterstützen. Mein Entwicklungsumgebung ist aktuell die folgende:

  • ESP32 WROOM (alternativ ESP32 WROVER)
  • LED-Ring mit 12 WS2812 LEDs
  • RC522
  • MAX98357A (kann auch einen PCM5102 / PCM5122 verdrahten)

(Eine Idee, wäre Unit-Tests zu schreiben, die dann auf dem ESP direkt laufen und den normalen Code gegen diese testen. Ist aber sicherlich keine Kleine Sache und ich bin auch nicht sicher ob das überhaupt beim ESPuino funktionieren könnte.)

Zu Feedback, da bin ich leider auch einer, der etwas liest und dann (meist) nicht antwortet. Da werde ich auch mal schauen, dass ich mich bessere und at least Likes verteile zu Themen, denen ich zustimme.
Gruß,
Laszlo

1 „Gefällt mir“

Erstmal finde ich es super was du, Torsten, auf die Beine gestellt hast. Und auch dass du hier so offen kommunizierst, Probleme ansprichst und zur Diskussion einlädst finde ich sehr gut.

Ich gebe auch mal noch meinen Senf dazu:

  1. Es ist für mich ganz klar, dass du nicht alle SW-Änderungen testen kannst und willst. Auf der anderen Seite wollen wir den Funktionsumfang und die Weiterentwicklung auch nicht zu stark begrenzen.

  2. Code für den sich niemand verantwortlich fühlt ist tatsächlich nicht gut und sollte vermieden werden. Aber letztendlich muss sich nicht unbedingt eine Person alleine für den ganzen Code verantwortlich fühlen.

  3. Ob ein Feature aufgenommen werden sollte oder nicht ist nicht immer leicht zu entscheiden. Die Stärke eines Community-Projekts wie diesem liegt sicher auch darin, dass alle mehr oder weniger den gleichen Code verwenden und ihre Anpassungen sofern sinnvoll möglich wieder zurück spielen. Aber natürlich gibt es da auch Grenzen.

Mit den bereits genannten Lösungsvorschlägen und Ideen würden sich für mich folgende Maßnahmen ergeben:

  1. Dev-Branch anlegen in den neue Features via Feature-Branches und PRs gemerged werden.
  2. Eine Checkliste und ggf. entsprechende CI-Skripte erstellen, die festlegen was bei einem Release (also wenn der Stand aus dem Dev-Branch in master landet) passieren muss (welche Tests müssen durchgeführt werden, Tag anlegen, Release-Notes erstellen, etc.)
  3. „Contribution Guidelines“ mit folgenden Punkten erstellen:
    • Features müssen im Forum angekündigt werden
    • PRs müssen gewissen Standards entsprechen, damit sie überhaupt angeschaut werden
      • Beschreibung mit Zweck, Begründung und Erklärung der Funktionsweise
      • Saubere Git History (Ein Commit pro logischer Änderung, saubere Commit Messages, etc.)
      • PR erst anlegen, wenn der Code auch reif genug zum Mergen ist, oder ggf. den PR-Status auf „Draft“ stellen, damit Torsten den solange er noch nicht fertig ist ignorieren kann.

Außerdem noch folgende Anmerkungen:

  • Ich denke es gibt noch sehr viel Potential (und teilweise auch die Notwendigkeit) den aktuellen Code stabiler und besser lesbar zu machen. Das hilft ungemein dabei Fehler zu finden oder diese gar nicht erst entstehen zu lassen. Dazu gehören verschiedene Maßnahmen, aber Unit-Tests könnten da durchaus auch helfen.
  • Ich finde es in Ordnung wenn Torsten die Schreibrechte in GitHub für sich behalten möchte. Wenn er diese auf andere Personen ausweitet, sollte er diesen Personen auch entsprechend vertrauen können und sicher sein, dass sie im Sinne des Projekts handeln. Langfristig wären mehrere offizielle und „gleichberechtigte“ Maintainer aber sicher eine Überlegung wert.
  • So oder so muss ja Torsten die PRs nicht unbedingt alleine anschauen und prüfen. Ein Review oder zumindest einen Test auf seinem Gerät kann prinzipiell jeder machen.
3 „Gefällt mir“

Wie das im Zweifelsfalle in der Praxis läuft, wenn ich für meinen Teile sage: „Das sollen die machen, die den Code geschrieben haben.“ sieht man jetzt schön hier: Bug in Verbindung mit dem LED Ring und Multibutton. Frage ist seit knapp zwei Tagen offen. Passiert nix. Das läuft keineswegs immer so, aber hin und wieder dann doch schon.

Das sehe ich anders. Dieses Problem kann ganz einfach vermieden werden, indem es einen Dev-Branch gibt, den nur Leute verwenden, die sich der Konsequenzen bewusst sind. Bis zum nächsten Release ist dann genug Zeit zum Fixen von Regressions.

Mit besser lesbarem und stabilerem Code und höheren Anforderungen an die Qualität der PRs wird sich die Wahrscheinlichkeit für Regressions auch insgesamt verringern.

Außerdem machen die Leute das „nebenher“. Da finde ich eine Reaktionszeit von mehreren Tagen vollkommen in Ordnung. Die Erwartung das jemand innerhalb weniger Stunden reagiert halte ich für viel zu hoch gegriffen. Ich weiß, dass du selbst da die Messlatte hoch anlegst, aber es ist mir ehrlich gesagt ein Rätsel wie du das in deiner Freizeit hinbekommst so schnell zu reagieren und Probleme zu beheben. :wink:

3 „Gefällt mir“

zudem hat das auch den Vorteil, wenn Bugs vom Autor nicht behoben werden, wird dieses Feature auch nicht in den Master übertragen. Damit bereinigt sich diese Problematik von selbst.

1 „Gefällt mir“

Auch dazu möchte ich mich gerne kurz einmischen (nachdem die letzten Wochen beruflich wirklich extrem anstrengend waren und ich erst jetzt wieder dazu komme hier reinschauen).

Ich habe das ganze Thema ja überhaupt erst angesprochen da ich für mich gemerkt habe, dass es keinerlei Motivation mehr verspüre das Projekt voranzubringen, wenn es so bleibt wie bisher.
Ich wäre absolut bereit den Code der Led.cpp noch weiter zu verbessern und auf eine deutlich bessere Strukur zu bringen (die bisherigen Umbaueten habe ich nur als absolutes minimum angesehen und ich hatte ja auch einen Vorschlag für die Weiterentwicklung gemacht), dazu braucht es aber entsprechend das committment auch besser werden zu wollen und Konzepte wie ein dev-branch oder Release-Management, um sowohl die motivierten Nutzer und Entwicklich als auch die „ich möchte es nur aufspielen und Vergessen“ gleichzeitig zufrieden zu stellen.
Sonst kommt es zu einer Spirale an Unmut:

  • Die Entwickler sind demotiviert weil nichts passiert und schauen nicht mehr hier rein
  • Torsten fühlt sich alleinig verantwortlich (was in dem Fall ja dann auch so ist weil sich wenig andere dann dazu stellen) und will deshalb nichts mehr ändern
  • neue Entwickler finden zu starre Strukturen vor und fangen gar nicht erst an sich hier einzubringen
  • alles bleibt wie es ist oder wird auf vielen verschiedenen fremden Forks weiterentwickelt, was wirklich schade wäre.

Update: gerade gesehn, dass der Dev-Branch bereits existiert :slight_smile: .
Danke für den Start und die Bereitschaft das auszuprobieren @biologist !!!

5 „Gefällt mir“