Beiträge von Survari

    Habe grad das gesehen:

    Code
    public void onRegisterCommands() {
        getCommand("troll").setExecutor(new Command_Teleport());
        getCommand("troll").setExecutor(new Command_Spam());
        getCommand("troll").setExecutor(new Command_AnAus());
    }

    Du registrierst mehrere Klassen in einem Command?

    Dementsprechend, kann das auch meines Wissens nicht gehen da als letztes deine "Command_AnAus()" registriert wird und nur die ausgeführt wird.

    Ich würde gerne kurz unterbrechen und mich weiterbilden ^^


    Geht eigentlich sowas hier?

    Code
    getCommand("troll subcommand1").setExecutor(new Command_SubCommand());
    getCommand("troll spam").setExecutor(new Command_Spam());

    Würde mich über eine kurze Fortbildung freuen :)

    • eine umfassende Chatapplikation
    • einen Noteneditor (Musiknoten)
    • einen Websitebaukasten
    • einen mathematischen Taschenrechner (der höher als 64bit Integer kommt usw.)
    • ein online Kartenspiel (da würde ich auch mitmachen, hätte da schon was :D)
    • ein kleines RPG

    Ach irgendwas :D

    (Ob es sein könnte, dass ich das Unterforum zum Verbreiten meiner Projekte ausnutze? Zu 100%!)


    1. Was ist AML?


    Der AML-Compiler kompiliert vom AML-Syntax zu HTML.

    Es soll somit eine einfache HTML-Alternative sein.


    2. Wie sieht der Syntax denn aus?


    Hier ein kleines Beispiel:

    Das sagt eigentlich so gut wie alles über die Sprache aus. Man muss Text in Tags, der auf der Website stehen soll, in Anführungszeichen angeben.
    Hier würde ich aber noch eine besonderheit anmerken:


    Code
    html {
        body {
            "Hallo Welt!"
            br();
            "d"
        }
    }

    Wenn ihr einen Tag habt, den ihr ohne Inhalt oder Parameter und ohne Inhalt angeben wollt, reicht einfach ein `tag();`. Besonders ist hier sonst nur das Semikolon, dass dafür da ist, dass der Compiler den Tag von "normalen" unterscheiden kann.
    Eine ziemlich nützliche Funktion hab ich auch noch eingebaut: inc. Es ist ein Präprozessorbefehl (ein Befehl, der vor dem Kompilieren ausgeführt und ausgewertet wird).


    Mit inc könnt ihr AML, aber auch JavaScript (in script-Tags), CSS (in CSS-Tags) und PHP (in PHP-"Tags") aus anderen Dateien in eine andere einfügen:


    main.aml

    Code
    html {
        #!(inc: "body.aml")
    }


    body.aml

    Code
    body {
        "Hallo Welt!"
    }


    Präprozessorbefehle brauchen kein Semikolon am Ende. Bevor die Datei kompiliert wird, sieht sie dann, durch den Präprozessor so aus:

    Code
    html {
        body {
            "Hallo Welt!"
        }
    }


    Dann wird sie kompiliert.


    3. AML installieren


    AML zu installieren ist recht einfach. Jedoch gibt es für Linux und Windows jeweils zwei unterschiedliche Wege:


    3.1 Linux


    So, jeder der jetzt Linux nutzt, darf sich entspannt

    zurücklegen. Das einzige was ihr machen müsst, ist ein bisschen

    Vorarbeit leisten, wenn ihr SecundoPM noch nicht installiert

    habt. Schaut in das Projekt von https://github.com/triploit/secundo-pm dafür.


    Danach:

    Code
    sudo secpm install aml


    Fertig! Danach kann von dem Terminal aus mit

    aml <Datei> kompiliert werden.


    3.1 Windows


    Linux Nutzer haben einfach einen Vorteil :P

    Alle Windows Nutzer müssen nämlich einiges machen:


    1. Als aller erstes Makefile installieren (zum Kompilieren des Java-Projektes): http://gnuwin32.sourceforge.net/packages/make.htm

    2. Danach die Repo herunterladen (Link am Ende des Beitrages).

    3. Nun eine CMD in dem Projektordner öffnen und folgendes eingeben:

    make all zum Kompilieren des Projektes.

    4. Dann muss die aml.jar aus dem Verzeichnis odin C:\Windows\System32 verschieben.
    5. Auch die aml.bat muss in das Windows-Verzeichnis. Danach könnt ihr AML von der CMD aus ausführen.


    4. Kompilieren


    Code
    aml index.aml test.aml

    Das generiert aus den Dateien test.aml und index.aml

    die HTML-Dateien test.html und index.html.


    5. Einen AML-Server aufsetzen


    In Java habe ich einen kleinen AML-Server geschrieben.

    Installiert werden, kann er auf Linux mit:

    Code
    sudo secpm install triploit:aml-server


    Auf Windows geht es wieder mit einer Makefile. Die Ordnerstruktur sieht auch gleich aus. Jedoch liegt die Ausgabe jetzt im Wurzelverzeichnis des Projektes.


    Mit dem Server, kann man seine eigene AML-Website hosten, ohne die Dateien vorher in HTML konvertieren zu müssen. Das macht der Server alles für dich :D Um diesen dann zu starten, musst du deine komplette Website in einen Ordner legen (nehmen wir mal an es wäre "/home/user/website") und dir einen Port aussuchen (um den Port 80 zu verwenden, brauchst du Adminstrator-rechte, zumindest auf Linux).
    Dann legst du dies in einer JSON-Datei (sagen wir mal, sie hieße `settings.json`) fest:


    Code
    {
        "port": "1234",
        "source_dir": "/home/user/website"
    }


    und gibst sie beim Start an:


    Code
    aml_server settings.json

    Dann kannst du das überprüfen und gibst in der oberen Browser-Zeile localhost:1234 ein. Wenn du keine index.aml festelegt

    hast (welche standartmäßig aufgerufen wird), musst du die Datei angeben, wie: localhost:1234/test.aml.


    GitHub


    Link zum Projekt: https://github.com/triploit/aml

    Link zum AML-Server: https://github.com/triploit/aml-server


    Super zusammengefasst! Es ist genau so. Wenn man etwas zu meckern hat, dann soll man es schreiben und darauf aufmerksam machen, was einem nicht gefällt.

    Stimme dem Mann im Mond zu. Wenn jemandem ein Beitrag nicht gefällt, soll er dies sachlich ausdiskutieren, vielleicht kann er da ja sogar noch überzeugt werden. Von daher, find ich das ganz gut, auch ohne Dislikes.

    SecundoPM - Einfaches installieren und entfernen von GitHub Paketen


    Disclaimer: Ich übernehme keine Haftung für Beschädigung von Daten oder deren Verlust. Außerdem distanziere ich mich von allen Projekten,

    die SecundoPM als Paketmanager benutzen und nicht in den GitHub-Accounts von https://github.com/triploit/ oder https://github.com/survari/

    enthalten sind. Jeder, der diesen Paketmanager benutzt, tut dies mit eigener Verantwortung.


    Ihr habt ein super tolles Tool entwickelt, das Usern helfen soll, aber keine Ahnung wie ihr es ihnen bereit stellt?

    Hier ist die Lösung! Um aufwendiges Kompilieren und verschieben von Dateien nicht dem User zu überlassen, habe ich einen einfachen

    Paketmanager gebaut.


    Lasst uns ihn folgendermaßen auf Linux installieren:

    Code
    git clone https://github.com/triploit/secundo-pm
    cd secundo-pm
    make
    ./secpm install secpm
    cd ..
    rm -rf secundo-pm


    Offiziell gibt es keinen Windows-Support.

    Zwar stehen alle Funktionen dazu bereit, doch habe ich zu wenige Kenntnisse um in meine Projekte und SecPM ordentliche Build-Dateien

    für Windows einzubauen.


    Wie man ein Paket erstellt


    Und hier wird man auch gleich sehen, warum der Disclaimer oben existiert.


    Möchte man nun sein GitHub-Projekt in ein SecundoPM Paket umwandeln, muss ein Ordner mit dem Namen "pkg" im Wurzelverzeichnis des

    Projektes angelegt werden. In diesem Ordner wird nun eine Datei angelegt, mit dem Namen "ins.sc".

    Das muss dann so aussehen:

    Code
    meinprojekt
    ├── main.cpp
    ├── main.hpp
    └── pkg
        └── ins.sc

    In diese Datei kommen nun das Installer-Skript rein.

    Schreiben wir mal folgendes:



    So, was wir hier sehen ist also eine einfache Form des Skriptes. Wir haben verschiedene Funktionen definiert.

    Funktionen in SC (SeCundo Script, ja eigentlich SCS, aber jetzt egal ^^ ) können keine Argumente oder Parameter

    entgegennehmen. Weiterhin ist es möglich Funktionen aufzurufen, indem man in einer leeren Zeile `&funktionsname`

    schreibt.


    Funktionen, die als Standard erwartet werden, sind (auf Linux):

    • install: Zum Installieren von Paketen; hier alle Befehle zum Installieren des Paketes
    • update: Zum Aktualisieren von Paketen; hier alle Befehle zum Aktualisieren des Paketes
    • remove: Zum Löschen von Paketen; hier alle Befehle zum Löschen des Paketes


    Auf Windows heißen die Funktionen ähnlich: Sie haben nur ein _win am Ende dran (auch im Beispiel).


    Wenn wir uns das Skript nun weiter anschauen, fällt folgendes auf: Shellbefehle.

    In den Funktionen stehen Shellbefehle. In _win Funktionen müssen also CMD-Befehle stehen

    und in Linux-Funktionen Bash-/Shellbefehle. Und daher auch der Disclaimer. SecPM fragt zwar vor

    dem installieren, ob man die Skript-Datei vorher sehen will, jedoch installiert man immer auf eigene



    Gefahr.


    Wichtig ist hier noch zu sagen: Die Funktionen sind kein Shellscript. Sie werden

    zeilenweise unabhängig voneinander ausgeführt.


    Wenn ihr Variablen und ein eigenes Shellscript nutzen wollt, geht das folgendermaßen:


    Code
    func install {
        <[
            echo "Dies ist ein vollwertiges Shellscript!";
            i="Hallo Welt!";
            echo $i;
        ]>
    }


    Alles was in <[ ... ]> steht, wird als eine komplette Datei ausgeführt.

    Verkürzt geht das natürlich auch so:


    Code
    func install {<[
        echo "Dies ist ein vollwertiges Shellscript!";
        i="Hallo Welt!";
        echo $i;
    ]>}


    Pakete installieren, entfernen, ...


    Installation

    Code
    sudo secpm install triploit:aml

    Das Paket https://gitub.com/triploit/aml wird installiert.

    Code
    sudo secpm ins triploit:aml ins triploit:tsmi

    Abkürzung für "install" ist "ins". Die Pakete

    https://github.com/triploit/aml und https://github.com/triploit/tsmi

    werden installiert.

    Code
    sudo secpm install mustermax:projekt

    Das Paket https://github.com/mustermax/projekt wird installiert.



    Entfernen

    Code
    sudo secpm remove triploit:aml


    Das Paket https://gitub.com/triploit/aml wird entfernt.


    Code
    sudo secpm rem triploit:aml rem triploit:tsmi


    Abkürzung für "remove" ist "rem". Die Pakete

    https://github.com/triploit/aml und https://github.com/triploit/tsmi

    werden entfernt.


    Installieren von lokalen Paketen (als Ordner)

    Code
    sudo secpm local /pfad/zum/projekt/

    Der Ordner /pfad/zum/projekt/ wird installiert. Das Skript /pfad/zum/projekt/pkg/ins.sc wird ausgeführt.


    Pakete aktualisieren

    Pakete zu aktualisieren, funktioniert wie alles andere auch:

    Code
    sudo secpm update triploit:aml

    oder verkürzt mit mehreren:

    Code
    sudo secpm up triploit:aml up triploit:tsmi


    Es gibt auch die Möglichkeit, alle Pakete zu aktualisieren, die mit SecundoPM Version 1.4 oder höher installiert wurden:

    Code
    sudo secpm update all


    Keine Ausgaben

    Ausgaben kann man verhindern, indem man das Argument quiet als erstes angibt:

    Code
    sudo secpm quiet update all

    Alle Pakete werden aktualisiert, ohne die Installationsskripte die Möglichkeit haben, Ausgaben zu tätigen.


    GitHub


    Das Projekt findet ihr hier: GitHub


    Ja... auf GitHub ist es jetzt (https://github.com/triploit/ttag) jedoch leider wirklich gar nicht gut dokumentiert. Da muss ich mich wohl nochmal hinsetzen :)

    Kennt so was noch jemand? Text Adventures? Zork I bis III? Spiele, die sich dadurch auszeichnen, nur aus Text und Rätseln zu bestehen?

    Wem da jetzt die Nostalgie oder unheimliche Neugier packt, der ist hier genau richtig. Ich habe mich mal vor einiger Zeit an die Grundpfeiler eines

    Textadventure-Generator gesetzt. Man kann bisher tatsächlich schon kleine Geschichten schreiben, jedoch fehlt mir noch ein bisschen der

    Umfang an Befehlen und die Zeit und Lust das Programm weiter zu entwickeln.


    Im YAML-Format (ich hatte wirklich keine Lust dafür noch eine eigene Programmiersprache zu schreiben ^^) kann man sich eine eigene Welt erstellen. Hier mal ein Beispiel (meine Testwelt um zu probieren, ob ich alle Features

    richtig verbaut habe):

    Wie man merk, bin ich übrigens sehr kreativ bei Namensgebung von Objekten im Spiel und dessen Beschreibungen :P.


    Man sieht, sie ist schon ganz schön lang, dabei hat man hier nur 3 Räume und 2 Items. Ich habe jedoch jede Option der Items/Räume versucht zu belegen.

    Wenn jedoch Optionen nicht belegt sind, gibt der Interpreter später Warnungen aus, das bestimmte Dinge nicht vollständig sind. Das kann man mit "warnings: false" (Zeile 2 ändern) jedoch ausschalten.


    Im Anhang findet ihr den Interpreter. Ich weiß nicht was ich noch sagen soll, außer: Probiert's gern mal aus :) (Bitte mit "warning: false" in Zeile 2)


    Speichert den Beispielcode im gleichen Ordner, in dem ihr auch die TTAG.jar hab, und nennt die Datei "test.yml".

    Dann startet ihr die CMD/Bash/zSH in dem Ordner und gebt den folgenden Befehl ein: java -jar TTAG.jar test.yml


    Das Spiel sollte mit dir meckern, weil du keine Speicherdatei angegeben hast. Lies dir alles durch und verneine, dass du eine Speicherdatei hast. Es wird dann für dich ein neues Spiel erstellt.

    Gib dann im Spiel "help" ein. Das sollte helfen, sonst vertraue einfach auf deine Intuition oder auf den deutschen IMPERATIV!


    GitHub: https://github.com/triploit/ttag/

    Dateien

    • TTAG.jar

      (170,91 kB, 227 Mal heruntergeladen, zuletzt: )

    Stimmt schon, ohne die klassische Physik (das meine ich mit "normaler Physik", hatte es etwas ungünstig formuliert) wären wir ja nie auf die Quantenphysik gekommen. Trotz dem (ich schreibe das hier mal bewusst auseinander), gibt es immer noch viele Dinge, die man in der Quantenphysik nicht nachvollziehen kann. Man erklärt dann sozusagen Dinge, die man nicht versteht :P

    Die Quantenphysik hat mein Leben entscheidend geprägt. In nur einer Stunde wurde mein ganzes Weltbild, das ich mir im Laufe der Schulzeit (bis jetzt) angesammelt hatte, durcheinander gewirbelt. Das war echt schön, seine eigene Existenz mal genauer unter die Lupe zu nehmen.


    Wenn das so einfach wäre :D Ich habe ehrlich gesagt, dieses Wort noch nicht in diesem Zusammenhang gehört, aber nu.


    Ich habe mich mit den Begriff "Superposition" auf einem Video von 100SekundenPhysik (https://youtube.com/watch?v=bitYXYlmT2Y).


    Meinst du den Minkowski-Raum?


    [...]


    Entweder ich bin auch schon durch, oder du hast die 7 und 8 vergessen, da der Hyperwürfel 8 Seiten hat.

    Ob ich den Minkowski-Raum meine weiß ich leider selber nicht. Da er aber als vierdimensionaler Raum beschrieben wird, könnte es sein, dass ich ihn meine. Direkt aber nicht, denn bis eben gerade war er mir noch unbekannt :D.

    Weiterhin meine ich keinen Hyperwürfel, ich hab mich falsch ausgedrückt. Da ich mir hier die vierte Dimension so (!) vorstelle (!), wie beschrieben (in meinem Beitrag³), nehme ich an, dass wenn ein mit einem Würfel gewürfelt wird, dass, wenn wir uns das Ergebnis aus der vierten Dimension betrachten, alle Seiten gleichzeitig erscheinen, da alle Positionen gleichzeitig eintreffen. Nehmen wir an wir würfeln auf einem Tisch, ist der Tisch aus der vierten Dimension betrachtet mit Würfeln bedeckt (und wahrscheinlich nicht nur der Tisch), da ja alle Möglichkeiten gleichzeitig eintreffen. Die vierte Dimension lässt es uns sehen. In der dritten Dimension ist natürlich nur eine Möglichkeit eingetroffen.


    Ansonsten ein schönes Gedankenexperiment, was auch mal nicht-wissenschaftlich war (also ich meine mit Werkzeugen der Mathematik), aber vielleicht hätte Schrödingers Katze schon gereicht, um das gleiche Phänomen zu erzeugen. Aber für ein Achtklässler-Niveau nicht schlecht, aber sehr salop. ;)


    Danke dir! :)

    Erstmal Danke/Bitte (für das Lob/für den Beitrag). Stimmt, ich habe keine konkret wissenschaftliche Belege angegeben, sondern nur eine These argumentativ belegt (mit eben Zitaten oder meiner Meinung, die auf Zitaten beruht). Aber so sollte das ja auch sein ;)

    Und vielleicht hast du recht, vielleicht hätte Schrödingers Katze gereicht, aber hätte das dann den gleichen Effekt erzielt? Ich denke nicht, deswegen habe ich es "ein bisschen" ausführlicher gestaltet :D.


    MfG ;)

    Ja, ja wird wohl so sein. Aber ist nicht genau das das Problem? Schau dir an: Du hast einen tollen Server. Auf deinem tollen Server wurde von einem Spieler gegrieft. Den Spieler bannst du. Soweit so gut, der Spieler ist jetzt endlich weg. Da er jedoch seinen "Job" nicht beendet hat und noch mehr unheil machen will, versucht er sich pro Tag ein paar mal einzuloggen und schaut ob er nicht doch wieder entbannt wurde. Jetzt startest du deinen Server mal neu und der Spieler kann wieder rauf. Toll oder :/ ?


    Soweit ich jetzt dein Plugin verstanden habe, ist es sehr wahrscheinlich das der Fall mal auftreten wird und auch sehr wahrscheinlich wird dann sein, dass du es dann bereuen wirst.

    Mach dir Gedanken :-)


    PS: Hör auf von args[0] zu reden. Das ist ziemlich Konfus und außerdem nicht immer korrekt (Beispiel beim Befehl: /system ban Spieler1; ist dann nicht args[0] sondern args[1]). Red einfach von "dem Spieler". ;-)

    Hmmm...

    ist nicht eigentlich die Idee das die "Brainfuck" language von einem Maximal "kleinem" Interpreter executed wird?

    Und mir schaut dein code net so aus als währe das Maximal klein :) (Selbst net in java :))

    Aber ansonnsten good job :)

    Zur Verteidigung des Codes: Also es gibt schon so viele kleine Interpreter, da kann man doch mal einen größeren erstellen, oder nicht ;)?

    Daher mein Vorschlag: Lies das Programm in einer Vorverarbeitung Zeichen für Zeichen und nutze einen Stack – der ist die perfekte Datenstruktur für solche Zwecke! Wenn du eine öffnende Klammer liest, schreib den Index auf den Stack. Wenn du eine schließende Klammer liest, nimm den obersten Eintrag vom Stack ("pop") und ordne ihn der Klammer zu. Wenn du das Programm dann interpretierst, kannst du bei einer geschlossenen Klammer bequem den Index (= Rücksprungadresse) der zugehörigen öffnenden Klammer auslesen und in konstanter Zeit zurückspringen.


    Viel Spaß mit dem Projekt!


    Stimmt und da ich grad so voller Tatendrang bin, hab ich das gleich mal erledigt: