Seite 1 von 1

CFW: Vorschlag für "Programmier-Apps"

Verfasst: 25 Mai 2017, 17:18
von richard.kunze
Hallo zusammen,

mit Brickly, StartIDE und BOA haben wir inzwischen ja schon drei Apps, deren Zweck es ist Programme zu erstellen. Und Ideen für andere gibts auch schon einige (Basic, irgendwas RoboPRO-kompatibles, ...).

Und - wie jetzt schon bei Brickly - wird es bei den anderen solchen "Programmier-Apps" früher oder später (eher früher) den Wunsch geben, mehr als ein Programm speichern zu können.

Um das hinzubekommen, haben wir im Prinzip mehrere Möglichkeiten:
  • Wir geben jeder "Programmier-App" eigene Funktionen für die Verwaltung von Programmen mit (so wie jetzt schon in Brickly).
  • Wir betten die ganzen "Programmier-Apps" in einen passenden Rahmen ein, der diese Verwaltungsfunktionen mitbringt.
Die erste Möglichkeit ist ziemlich hässlich: Wir duplizieren damit einen Haufen eigentlich identische Funktionalität in jeder "Programmier-App", und wir machen uns das - eigentlich ganz sinnvolle - Konzept "Ein Programm, eine App" kaputt.

Die naheliegende Umsetzung der zweiten Möglichkeit - eine große "CFW-IDE", in der die ganzen "Programmier-Apps" als Plugins eingebaut werden - ist aus anderen Gründen nicht so toll: Erstens ist das ein Riesenaufwand, und zweitens haben wir wenn das mal fertig ist mit ziemlicher Sicherheit einen Bruch zwischen den Programmen, die auf Basis der "Programmier-Apps" erstellt wurden, und den neuen "IDE-Programmen".

Ich möchte stattdessen hier eine andere Idee für die Umsetzung eines allgemeinen Rahmens für "Programmier-Apps" vorstellen: App-Templates.

Ein App-Template ist im Prinzip eine ganz normale CFW-App, mit zwei neuen Einträgen im Manifest:
  • Einem Flag, das die App als "App-Template" kennzeichnet und
  • Einer Liste der Dateien/Verzeichnisse, die in einer von diesem Template abgeleiteten App durch den Benutzer modifiziert werden können (Bei Brickly wäre das z.B. das "user"-Verzeichnis, wo der durch den Benutzer erstellte Programmcode landet).
Eine "normale" App kann dann aus einem App-Template wie folgt erstellt werden:
  • Auswürfeln einer neuen UUID und Erstellung des App-Verzeichnisses
  • Erstellen eines Manifests mit der neuen UUID, einem Hinweis darauf, von welchem Template (uuid und Versionsnummer) die App abgeleitet wurde und den sonstigen Daten aus dem Manifest des App-Templates (gegebenenfalls durch den Benutzer modifiziert, z.B. für Name/Beschreibung/Icon)
  • Einer Kopie der im App-Template als "modifizierbar" gekennzeichneten Datein/Verzeichnisse
  • Symlinks für alle anderen Dateien/Verzeichnisse im App-Template
Die abgeleitet App sieht für den Launcher und die Web-UI aus wie jede andere App auch, und allgemeine Funktionen zur Manipulation von Apps (Icon austauschen, umbenennen, löschen, ...) funktionieren ebenfalls identisch für alle App-Sorten ("normale" Apps, App-Templates udn von Templates abgeleitete Apps). Und natürlich funktionieren die Apps selber ebenfalls weiter wie gehabt (eine z.B. von einem "Brickly-Template" abgeleitet App kann das enthaltene Brickly-Programm natürlich verändern, starten, stoppen usw.). Aber durch die Symlinks haben wir eine Möglichkeit, die es bei einer simplen Kopie der App nicht gäbe: Solange die "Schnittstelle" des Templates (das sind alle Dateien, die in die abgeleitete App verlinkt werden) nicht inkompatibel verändert wird, kann man durch eine Aktualisierung des App-Templates (z.B. über den Shop, oder für eventuelle fest eingebaute App-Templates mit einer neuen Version der CFW) alle darauf basierenden Apps ebenfalls aktualisieren.

Für einen ersten Prototyp würde ich die Web-UI um eine "Neue App erstellen"-Funktion erweitern, die wie oben skizziert neue Apps auf Basis eines App-Templates erstellt, und Brickly zu einem App-Template ausbauen (dafür reichen im ersten Schritt die neuen Manifest-Einträge, d.h. das ist auch rückwärtskompatibel) - dann kann man das auch mal in der Praxis ausprobieren.

In einer späteren Ausbaustufe kann man dann den Shop erweitern, damit der auch templatebasierte Apps verwalten kann (das wäre dann im wesentlichen nur das Manifest und der "modifizierbare" Teil der App, die Symlinks zum Template werden dann bei der Installation erstellt), passende Warnungen einbauen wenn ein aktuell verwendetes Template einen inkompatiblen Versionssprung macht, den Launcher anpassen um "pure" Templates (d.h. App.Templates, die ohne zusätzliche Programmierung keine Funktion hätten) auszublenden, die Web-UI um generische App-Verwaltungsfunktionen (Umbenennen, Beschreibung editieren, Icon austauschen, ...) ergänzen und obsolete eigene Programmverwaltungen aus den Programmier-Apps entfernen.

Was haltet Ihr davon?

Re: CFW: Vorschlag für "Programmier-Apps"

Verfasst: 26 Mai 2017, 10:25
von MasterOfGizmo
So ganz verstehe ich es nicht. Jedes in einer der IDEs gebaute Porgramm wird dann zu einer echten App inkl Icon im Launcher etc?

Re: CFW: Vorschlag für "Programmier-Apps"

Verfasst: 26 Mai 2017, 13:02
von PHabermehl
Gestern dachte ich, es liegt am Feiertag und daran, dass ich das Grillgut nicht ganz trocken runtergewürgt hab, aber auch heute geht's mir noch ähnlich wie Till, ich versteh's nicht...

Re: CFW: Vorschlag für "Programmier-Apps"

Verfasst: 26 Mai 2017, 13:02
von richard.kunze
MasterOfGizmo hat geschrieben:So ganz verstehe ich es nicht. Jedes in einer der IDEs gebaute Porgramm wird dann zu einer echten App inkl Icon im Launcher etc?
Ja, genau.

Und die ganzen generische Programmverwaltungs-Funktionen (neues Programm erstellen, Programm umbenennen, Beschreibung editieren, Icon austauschen, Programm löschen, ...) kommt in die Web-UI (teilweise ist das ja auch schon da - "App löschen" z.B.).

Die einzelnen IDEs können sich dann darauf konzentrieren ein Programm zu verwalten, und müssen keine eigene "Projektverwaltung" mitbringen.

Re: CFW: Vorschlag für "Programmier-Apps"

Verfasst: 26 Mai 2017, 13:12
von richard.kunze
PHabermehl hat geschrieben:Gestern dachte ich, es liegt am Feiertag und daran, dass ich das Grillgut nicht ganz trocken runtergewürgt hab, aber auch heute geht's mir noch ähnlich wie Till, ich versteh's nicht...
Hmm. Vielleicht sollte ich das einfach mal als Prototyp umsetzen damit man sich das anschauen kann...