RSS-Feed anzeigen

Aus dem Leben eines Web-Entwicklers

Projekt-Vorstellung: Die ManiaScript Collection

Bewerten
In den letzten Tagen habe ich ein kleines Projekt gestartet und umgesetzt, was ich euch an dieser Stelle -- auch wenn es noch nicht ganz fertig ist -- kurz vorstellen möchte.

Die Idee

Die Grundidee stammt dabei von zocka, welche er in seinem Beitrag zu mQuery am Rande erwähnte. Mit den Verbesserungen meines ManiaScript Builders sprach er mich nochmals auf diese Idee an, und ich habe mir ein paar Gedanken dazu gemacht -- Denn mich selbst hat das Umkopieren externer ManiaScripte schon leicht genervt ^^

Die Idee ist schnell erklärt: Zentrale Sammelstelle für einbindbare ManiaScripte.

Was ist ein "einbindbares ManiaScript"? Damit meine ich jene ManiaScripte, die letztendlich nur Funktionen beinhalten, und die man in sein eigenes ManiaScript einbinden kann, um die Features nutzen zu können. Bestes Beispiel sind die [LibManialink-Scripte von Nadeo selbst, welche Animationen, Tooltips oder ein Drag-Verhalten für Elemente in die eigenen Scripte bringen.

Doch wenn man diese ManiaScripte einbinden will, so muss man diese zwangsläufig in das eigene Projekt reinkopieren, denn ein direktes Einbinden offenbart zwei signifikante Probleme:
  1. Fehlender Script-Tag. Die Scripte von Nadeo sind reine ManiaScripte, ohne <script>-Tag. Und somit zum Einbinden in den ManiaLink als externe Quelle ungeeignet.
  2. Direktiven. Selbst wenn das Einbinden bspw. serverseitig umgesetzt wird und man es selbst in einen <script>-Tag bastelt, so wird der ManiaScript-Compiler die Direktiven (#Include etc.) ankreiden. Denn jedes der Nadeo-Skripte bringt die eigenen Direktiven mit, und doppelte Direktiven oder jene in Mitten des restlichen ManiaScriptes mag der Compiler absolut nicht.



Die ManiaScript Collection

Das Projekt, was ich naheliegenderweise "ManiaScript Collection" getauft habe, soll nun genau diese zentrale Sammelstelle werden, und liegt als OpenSource ebenfalls auf Github. Wie bereits erwähnt, ist es noch nicht vollständig, aber bereits soweit fortgeschritten, dass es die Scripte ausliefern kann Aufrufbar ist es über die Adresse http://maniascript-collection.mania-community.de/, liegt also mit auf unserem Server hier.



Die Scripte werden nun, ähnlich zu Composer über "<Author>/<ScriptName>" angesprochen, für Nadeo's Animations-Script wäre das also "nadeo/animation". Die einzubindenden Scripte werden einfach Komma-separiert als GET-Parameter an die Adresse angehangen:



Features:

  • Auflösen von Abhängigkeiten
    Es ist bereits vorgesehen, dass Scripte auch Abhängigkeiten zu anderen Scripten haben können. Diese werden von der ManiaScript Collection automatisch aufgelöst, wobei Scripte natürlich nur maximal einmal eingebunden werden, sollten diese mehrfach als Abhängigkeit auftauchen. Ebenfalls vorgesehen, aber noch nicht implementiert, sind Konflikte: Zwei Scripte, die zusammen nicht funktionieren werden, da sie gleiche Funktionalitäten hinzufügen, die sich gegenseitig stören, oder gar gleichnamige Funktionen verwenden.
  • Automatische Kompression
    Die Scripte werden standardmäßig durch den ManiaScript Compressor komprimiert, um Bandbreite zu sparen, da die Scripte doch gerne mal unzählige Dokumentations-Kommentare beinhalten, die im Produktivbetrieb nicht benötigt werden. Während der Entwicklung kann man die Kompression mittels &compress=0 abschalten:


  • Zusammenfassen der Direktiven
    Die Direktiven (#Include etc.) der Scripte werden von der Collection extrahiert, und zusammengefasst am Anfang der Ausgabe aufgelistet. Dies ermöglicht, mehrere Scripte einzubinden, ohne dass die Direktiven den Compiler stören. Beispielsweise nutzen die Nadeo-Scripte alle die Bibliotheken TextLib als "TL" und MathLib als "ML". Somit wird das oben genannte zweite Problem direkt mit umgeangen
  • Lokales Cachen der Scripte
    Die ManiaScript Collection fragt die Scripte direkt von der Quelle an (im Falle von Nadeo die Github-Seite), und speichert diese lokal zwischen, sodass die Ladezeit minimiert werden kann. Die Quell-Adresse ist dabei für jedes Script in einer Konfigurations-Datei hinterlegt.
  • Logger und Debug-Informationen
    Die ManiaScript Collection kann natürlich Fehlermeldungen nicht einfach nach außen werfen, da dies in Maniaplanet zu Fehlern führen würde. Stattdessen werden Nachrichten des Loggers am Anfang des Scriptes als Kommentar ausgegeben, sind im Spiel also via Strg+G (2x) einsehbar. Mit log=<level> kann der Log-Level gesteuert werden:
    • critical (Standard): Eines der angeforderten Scripte konnte nicht ausgeliefert werden, oder Abhängigkeiten konnten nicht aufgelöst werden. Da somit mind. ein Script fehlt, wird der ManiaLink höchstwahrscheinlich nicht funktionieren.
    • warning: Während der Verarbeitung der Scripte ist es zu einem Fehler gekommen, es konnten trotzdem alle Scripte ausgeliefert werden (zB. zu alten Cache-Eintrag genutzt, weil das Script nicht neu angefragt werden konnte). Bei Warnungen sollte der ManiaLink weiterhin funktionieren.
    • info: Debug-Nachrichten zur reinen Information, zB. zusätzliche Scripte durch Abhängigkeiten, ob die Scripte aus dem Cache oder von extern kamen etc.

    Mit dem Info_Level konnte ich bspw. direkt feststellen, dass der Cache auf dem MC-Server wegen fehlenden Schreibrechten nicht funktioniert hat


  • Frontend mit Übersicht über verfügbare Scripte
    Ruft man die Basis-Adresse ohne Liste an Scripten auf, landet man auf einer kleinen Seite, die alle verfügbaren Scripte listet, und wo man sich den <include>-Tag zusammenbauen lassen kann. Sobald Scripte zum Einbinden angegeben werden 8erster Parameter), oder der Zugriff aus ManiaPlanet heraus passiert, wird entsprechend der <script>-Tag ausgeliefert.



Weitere Pläne

Die ManiaScript Collection beinhaltet momentan nur die drei Scripte von Nadeo, natürlich sollen weitere Scripte mit aufgenommen werden. Hier muss ich mir noch zu Ende überlegen, welche Kriterien die Scripte erfüllen müssen, damit sie aufgenommen werden, um einen gewissen Qualitätsanspruch zu erfüllen. Grob skizziert kommt mir da bisher folgendes in den Sinn:
  • Das Script muss logischerweise alle #Include ausweisen, auf die zugegriffen werden. Sonst kann die Collection diese unmöglich erkennen ^^
  • Funktionen sollten alle mit einem Präfix versehen werden. Nadeo nutzt bspw. "LibManialink_" als Präfix. Dies soll helfen, Konflikte zwischen den Scripten (verschiedener Autoren) zu vermeiden, wenn bspw. allgemeine Funktionen mehrfach definiert werden.
  • Dokumentation zur Verwendung sollte vorhanden sein.
  • Eventuell gar den Style-Guide befolgen lassen? Aber wohl eher nicht, den befolge ich nichtmal selbst



Aber bevor ich weiter mache, will ich gerne euer Feedback einholen: Was haltet ihr von dem Projekt? Kritik oder VErbesserungsvorschläge? Würdet ihr es verwenden, wenn euer benötigtes Script darin auftauchen würde? Habt ihr vielleicht schon ein paar Scripte, die ihr teilen wollt? Kanntet ihr die Nadeo-Scripte überhaupt schon? Warum ist heute erst Mittwoch und nicht schon Freitag?

"Projekt-Vorstellung: Die ManiaScript Collection" bei Facebook speichern "Projekt-Vorstellung: Die ManiaScript Collection" bei Twitter speichern "Projekt-Vorstellung: Die ManiaScript Collection" bei Mister Wong speichern "Projekt-Vorstellung: Die ManiaScript Collection" bei Google speichern "Projekt-Vorstellung: Die ManiaScript Collection" bei del.icio.us speichern "Projekt-Vorstellung: Die ManiaScript Collection" bei Webnews speichern

Aktualisiert: 13.11.2014 um 17:47 von Marcel

Kategorien
ManiaScript

Kommentare

  1. Avatar von kastun
    Die Idee find ich gut, auch wenn ich bisher in Manialinks praktisch noch nie Fremdscripte benutzt habe.
    Ich hab aber auch Animationen oder ähnliches vermieden, eben weil ich keine Lust hatte Fremdscript mit einzubauen und aktuell zu halten, das stellt mit der ManiaScript-Collection ja kein Problem dar.
  2. Avatar von Jojo_44
    Sehr gute Idee, auch die Lösung über die URL finde ich gut. Was mir auf den ersten Blick fehlt, ist die Möglichkeit eine bestimmte Version auszuwählen. Momentan ist das ja nur der master Branch oder? Für die Zukunft könntest du auch eine github Authentifizierung einbauen, damit jeder selber seine Scripte verlinken kann. Webhooks wären dann natürlich noch der absolute Hammer

    mfg Jojo
  3. Avatar von Askuri
    Finde die Idee auch sehr gut, auch wenn ich selber nicht viel mit ManiaScript am Hut hab
  4. Avatar von Marcel
    Ich habe gerade ein kleines Update hochgeladen:
    • Die Such-Eingaben werden jetzt in die Adresse geschrieben, sodass man direkt zu einer gefilterten Liste verlinken kann, falls man beispielsweise jemanden ein bestimmtes Script zeigen will. (Beispiel: m4rcel/snowstorm)
    • Mit Shift-Klick klappt man jetzt immer das angeklickte Script ein oder aus. Meine Trefferquote für das i-Icon ist einfach zu niedrig


    Außerdem hat zocka ein paar Scripte hinzugefügt ^^

    @ Jojo:
    Die Idee mit den selbst-hinzufügen der Scripte ist gut. Nur würde ich das weniger über git machen, sondern dann eher die Scripte bspw. in einer DB speichern und per ManiaConnect Zugriffe auf die (eigenen) Scripte ermöglichen. Doch dazu wollte ich erstmal schauen, wie groß das Projekt wird, bevor ich das mit einer DB erschlage
    (Sorry für die späte Antwort ^^)
  5. Avatar von zocka
    Ich arbeite hart daran, Leute mit sinnvollen™ Scripten zu beglücken

    Aber ganz im Ernst: Dieses include & forget ist schon wunderbar komfortabel
    (Deshalb hab ich auch schon Sachen eingereicht, mit denen ich als Dependency weiterarbeite[n wollte])

    Das mit den Pull-Requests und vor allem den einzelnen XML Dateien skaliert denk ich tatsächlich etwas schlecht