Wie organisiert ihr eure AutoIt-Projektverzeichnisse?

  • Mit diesem Thread würde ich gerne eine Diskussion / einen Ideenaustausch anstoßen und würde von jedem Programmierer (egal ob gut oder schlecht) hören, wie er seine Projektverzeichnisse organisiert.

    Hintergrund:

    Ich arbeite gerade an einem etwas größeren Projekt und habe nach exzessiven Codeabenden (wo einem die Ideen nur so aus einem raussprudeln) mein Projekt praktisch überhaupt nicht organisiert.

    Meine Hauptscriptdatei ist bisher 70 KB groß mit etwa 1600 Zeilen (keine Binärressourcen enthalten) und bis ich SciTE Jump entdeckt habe verbrachte ich rund 20% der Zeit nur mit Scrollen.

    Ich habe lediglich 4 eigene Includes eingebunden (6, 2, 1, 5 KB) die ich in einem Verzeichnis halte, dass includes heißt.

    Jetzt würde ich gerne demnächst mal alles ein bisschen auseinanderziehen um das Script ein wenig übersichtlicher zu machen.

    Beispielsweise sind 9 WM_*-Funktionen enthalten die ich beispielsweise super in eine eigene Datei namens (WM.au3) outsourcen könnte.

    Jetzt würde ich gerne ein paar Ideen sammeln um dann nachher eine Entscheidung zu fällen.

    Also, dann lasst mal von euch hören wie ihr eure Projektverzeichnisse organisiert.

    Teilt ihr Ressourcen in unterschiedliche Ordner auf, verwendet ihr Include-Helper-Includes, packt ihr alles in ein Verzeichnis, verwendet ihr eine IDE?

    Hoffentlich gibts was, was der eine oder andere noch nicht weiß und so dazulernt :)

  • Mein aktuelles Projekt hat bis dato 307 KB in 3893 Zeilen und ist zu 95% fertig.

    SciTE Jump kenne ich schon sehr lange, nutze es aber nicht, weil es nicht mit mehreren SciTE-Instanzen und auch nicht mit mehreren Monitoren klar kommt. Das müsste dringend mal angepasst werden. Um zu einer Funktion zu scrollen, drücke ich Ctrl + j. Dazu muss das Caret vor/über/hinter einem Funktionsnamen stehen. Bei den Includes geht dies übrigens mit Alt + i. Desweitern setze ich auch gerne Lesezeichen (Strg + F2), um wichtige Stellen im Script zu markieren, die dann mit F2/Shift + F2 angesprungen werden können.

    Das Hauptscript in mehrere Module aufzuteilen macht Sinn, wenn man eine IDE benutzt. Mit SciTE bringt es mehr Nachteile als Vorteile, weil SciTE keine Projekte verwalten kann.

    Ich habe zwar ISN AutoIT Studio :thumbup: installiert und "spiele" auch ab und an gerne damit, hantiere wegen den von mir integrierten Lua-Scripts aber dennoch lieber mit SciTE.

    Ich benutze je nach Situation OrganizeIncludes oder IncludesHelper, doch keines der beiden Tools ist wirklich befriedigend, da keines der beiden alle benötigten Includes immer korrekt erkennt! ManageIncludes.lua ( BugFix ) bekomme ich leider nicht zum Laufen.

    In meinem aktuellen Projekt habe ich folgende Unterordner:

  • Guten Morgen zusammen,

    Vielleicht ist eine Vorgehensweise nicht perfekt aber komme im Moment sehr gut damit zurecht.

    Also:

    ich habe im Moment ein Script mit knapp 6000 Zeilen, welches aber zu 100% fertig ist. Es dient zur Organisation / Ablage von speziellen Plan-Dateien und dazu, dass Fertigungspakete die wir in die Werkstatt geben, immer gleich aussehen. Dort ist auch für jeden Vorgang das Errorhandling. Das macht viel vom Code aus.

    Ich habe mir das Programm "Modular" aufgebaut. Also ich meine Abschnitte und Teilabschnitte, die ich in einem Kommentarblock am Anfang der Datei deklariert und genau beschrieben habe. Also z.B. Abschnitt A3: .....

    Außerdem sind dort die wichtigen Zeilen eingetragen. Das ist natürlich ein Aufwand, der sich aber lohnt wenn man mal ein paar Wochen lang nichts getan hat. Aber es gibt ja mehrere Möglichkeiten. Man kann ja auch statt einem Kommentarblock auch eine Exceltabelle oder ein Worddokument nehmen, und dort alles vernünftig reinschreiben.

    Zum include:

    Aktuell habe ich ein Skript welches ich am aufbauen bin. Es dient für statische Berechnungen. Ich habe sämtliche Statischen Profilwerte in eine seperate Datei geschrieben. Diese habe ich einfach mal data.au3 genannt. Die data liegt bei mir im selben Verzeichnis wie die main-Datei. Es gibt desweiteren Bilder / Skizzen die ich einbinden muss, damit man weiß welche Maße man wo eingeben muss. Also so eine Art Hilfe-Skizze. Diese Skizzen die in das Skript eingebunden werden,

    lege ich in einem Unterverzeichnis pic ab. --> \Entwicklung\Testprojekt\2018-03-05\pic\.

    Ich bin am überlegen, ob ich die ganzen Berechnungen auch in eine andere Datei schreibe, und später einbinde. Aber das ist noch Zukunftsmusik.

    Zur Sicherung:

    Mein Verzeichnis ist folgendermaßen aufgebaut (Beispielhaft für das Programm der statischen Berechnung):

    \Entwicklung\Testprojekt\2018-03-05\

    \Entwicklung\Testprojekt\2018-03-05\pic\

    \Entwicklung\Testprojekt\2018-03-05\main.au3

    \Entwicklung\Testprojekt\2018-03-05\data.au3

    Wenn ich morgen dran weiterarbeite gibt es dann den Ordner: \Entwicklung\Testprojekt\2018-03-06\

    Das heißt, ich habe im Laufe der Zeit eine ganze Reihe von Projektordnern, sortiert nach Datum. Sollte irgendwann mal was sein, kann ich immer auf die alten Daten zurückgreifen.

    Und diesen Projektordner sichere ich zusätzlich noch mal auf meiner Externen Festplatte und in der Dropbox. Dafür habe ich mir ein kleines Script geschrieben, welches mir immer das aktuelle Verzeichnis zippt, mit aktuellem Datum formatiert (2018-03-05) und auf meine externe Festplatte und in die Dropbox kopiert, und die alte Datei vorher löscht. Macht ja Sinn, da ich in den Ordnern ja immer alle alten Stände habe.

    Ich hoffe ich konnte dir ein bisschen helfen / oder für Anregung sorgen ;)

    Mit freundlichen Grüßen

    Mikki

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

  • Hi,

    unabhängig von der verwendeten Programmiersprache empfinde ich das "Chaos" innerhalb des Entwicklungsprozesses als sehr produktiv.

    Jedwege Einschränkung durch meist "von außen" auferlegte Beschränkung bzw. "Vorgaben" (...man MUSS(!)... ) tötet imho. jede Inspiration bzw. Intuition. Wieso ich das so empfinde? Hab´s mehrfach ausprobiert und dokumentiert. Man konzentriert sich schon am Anfang mehr auf die "Organisation" (?!) als auf den Code.

    Auch bei Projekten professioneller Programmierer erkennt man deutlich die Reihenfolge dieser Vorgaben. Der Code ist TOP organisiert, aber unfertig (schlimmere Bezeichnungen spare ich mir jetzt). Auf Nachfrage folgt dann zu 90% die Antwort:"...aus Zeitgründen am Ende der Entwicklung nur noch die Baustellen gefixt...".

    Dazu muss man allerdings sagen, dass der Prozess "Programmieren" individuell zu sehen ist. Ein auf Organisation Wert legender "Buchhaltertyp" oder "Erbsenzähler" hat andere Prioritäten wie ein innovativer und kreativer "Chaotiker". Nichtsdestrotrotz haben beide im Team ihre Existenzberechtigung.

    Was ich auch oft mache, ist nachzufragen. Sich selbst und andere permanent nachzufragen und ehrlich(!) zu reflektieren ist die einzige Möglichkeit, besser (!) zu organisieren und vor allem zu optimieren.

    Fortschritt entsteht nicht durch festlegen auf Arbeitsabläufe. Fortschritt entsteht durch permanente Weiterentwicklung! Und da haben Einschränkungen NICHTS zu suchen. Jedenfalls nicht bei "kreativer" Arbeit.

    Programmierarbeit nimmt ca. 5-10% meiner Arbeitszeit ein, die Umsetzung von Verbesserungen ist meine Hauptaufgabe.

    Dazu gehört auch die Organisation der Mitarbeiter. Der "Erbsenzähler" gehört auf "seinen" Arbeitsplatz. Und der " Chaotiker" auf seinen. Die Arbeit muss sich an den Menschen anpassen damit dieser effizient und produktiv ist, und nicht umgekehrt! Ein motivierter und zufriedener Mitarbeiter liefert messbar immer eine höhere Leistung ab als ein unmotivierter und unzufriedener!

    Was immer hilft, ist diese Mitarbeiter auszutauschen, damit sie auch mal "die andere Seite" sehen! DAS macht wach und regt auch die geistige Auseinandersetzung an!

    Jetzt würde ich gerne ein paar Ideen sammeln um dann nachher eine Entscheidung zu fällen.

    Das ist immer eine gute Idee. Über den Horizont schauen und die Betriebsblindheit so lange wie möglich abzuwehren zu versuchen. :P Denn DAS ist die einzige Konstante im Spiel, die einschränkende und lähmende "Betriebsblindheit".

    Ich habe viele Betriebe angeschaut, viele Bücher über Organisation und (Projekt-) Management gelesen, mir dort gute Ideen geholt und auch viele Experimente gemacht. Letztendlich scheitert eine Umsetzung IMMER an den beteiligten Mitarbeitern. Eine erfolgreiche Umsetzung hängt IMMER an den beteiligten Mitarbeitern.

    Es gibt also keinen generell "richtigen" Weg! Sondern nur den individuell "richtigen". Und den gilt es zu finden...

    • Offizieller Beitrag

    Ich, als Hobbyprogrammierer, muss (zum Glück) keine Rücksicht auf andere Mitprogrammierer (gibt es nicht) Rücksicht nehmen.

    Dementsprechend sehen meine Projekte bei Beginn immer ziemlich chaotisch aus. Ich lege zwar einen eigenen Ordner für jedes Projekt an, aber da landet dann erstmal alles unsortiert drin.

    Im fortgeschrittenen Stadium lege ich meist aber noch Unterverzeichnisse an ("gfx", "snd", "includes", "dlls", je nach Projekt).

    Ich habe mir aber angewöhnt, den Code als solches von Anfang an etwas "aufgeräumter" zu gestalten. Das nutzen von Regionen (#Region...#EndRegion in AutoIt) beispielsweise erleichtert das wiederfinden von Codeabschnitten. Sie lassen sich dann auch schnell ein-/ausblenden.

    Funktionen, die komplett unabhängig vom Projekt funktionieren, werden in externe Dateien (UDFs in "includes") ausgelagert oder auch Ressourcen (Icons, MP3s, Fonts, etc.), die ich in letzter Zeit öfter (mit dem "File to Base64 String Code Generator" von UEZ) direkt aus dem Speicher nutze, lagere ich in extra Dateien aus.

    Bei wichtigen Entscheidungen/Weichenstellungen innerhalb des Codes lege ich auch schonmal extra Backups an, damit ich zur Urfassung zurückkehren kann, wenn sich der eingeschlagene Weg als Sackgasse erweist.

    Manche Probleme, die sich im Laufe der Programmierung ergeben, versuche ich oft erstmal "im kleinen" zu lösen, bevor sie tatsächlich ins Projekt einfliessen. Dementsprechend gibt es in meinen Projektverzeichnissen oft diverse "test.au3". :)

  • Also, wenn ich mir die Antworten von Oscar und Mikki durchlese... Alte Entwicklungsstände einfach als Kopie aufzubewahren _funktioniert_ natürlich auch. Aber deutlich einfacher und schöner geht das mit einem VCS, persönliche Empfehlung: git. Mittlerweile nutze ich das auch bei Projekten, an denen ich alleine arbeite. Wenn man sich mal daran gewöhnt hat, ist es echt super simpel. Und man kann auch ziemlich einfach mit anderen an einem Projekt arbeiten. Obwohl man sich zugegeben bei den ersten paar Anwendungen ziemlich dazu zwingen muss. Dafür erstellen sich nachher Changelog usw. wie von selber.

    Zur Struktur selber... Ich habe schon einiges ausprobiert. Meistens landet bei mir erst alles in einer Datei, bis sich ab einer gewissen Größe Chaos ergibt. Dann nehme ich mir eine Stunde Zeit, alles zu sortieren und zu ordnen. Dann gibt es themenbezogene Include-Dateien, in denen Funktionen und Konstanten zu gewissen Themenfelder gesammelt werden (bspw. WM-Funktionen). Auch sämtliche GUIs wandert in diesem Prozess in eine eigene Datei. Dazu noch eine "Haupt"-Include-Datei, in der alle Includes gesammelt werden. So einen Mechanismus wie einen AutoLoader in PHP gibt es ja leider nicht. Alle nicht-atomaren Operationen (also auch die eigentliche Logik und Struktur) bleiben in der Haupt-Datei. Auch bei großen Programmen bleibt die dann noch übersichtlich. Wenn man konsequent ohne globale Variablen programmiert, funktioniert das alles recht gut. Wenn nicht, schmeißt SciTE einen natürlich mit Fehlern zu, die man dann manuell mit #forcedef (?) abfangen kann/muss.

  • Ich bin ja nur Gelegenheitsschreiber, und verwende in meinen Scripten häufig externe Programme, benötige Temporär Verzeichnisse usw.

    Klar kann man auf die Windows Temp Verzeichnisse zurückgreifen - passt mir aber nicht. So habe ich mir einige Structuren angewöhnt.

    autoit.exe und ini's im Projektverzeichnis nennen wirs mal Projekt_Flasche, darin ein Verzeichnis Res (als Abkürzung für Recourcen) und dann gehts los: Temp Verzeichnisse Programmordner benötigter Zusatzprogramme - werfe ich alles darein. Keine Sonderzeichen in den Ordnernamen, keine Leerzeichen (manches Hilfsprogram hört auf den Namen DOS.... Fertig.

    Alles was mit dem Projekt zu tun hat bleibt im Projektordner_Flasche alle test.au3 (was Oscar schreibt - itrifft auch auf mich zu) und jeder Codeschnippsel alles ins Projekt_flasche Verzeichnis. Wenn ich dann fertig bin, verschiebe ich diesen "Erstellungskram" in ein Verzeichnis "Quelle" unterhalb von Projekt_Flasche. Dieses Quelverzeichniss habe ich aber nur in Programmversion 1.0 in allen Versionen darüber gibts das nicht mehr!

    Ja ein wenig Chaos mus sein (sagt Andy zurecht). Vor größere Source Änderungen führe ich im Code mit, kommentiere diese einfach aus. und in der ersten 1er Version fliegen die Fehlwege - raus.

    Ab und an - besonders wenn ich etwas suche benutze ich Notpad ++ um Code zu verändern. Sonst mit dem standard Editor.

    Manches braucht viel Disziplin - besonders ständiges Erläutern des Codes - dazu zwinge ich mich für andere Zwänge reicht der Zwang oft nicht. :)

    Gruß

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Ehrlich?
    Bei jeder neue verwendeten Version mache ich einen Ordner auf und fülle es mit allem was zu der Version gehört. Egal was. Includes kommen in einen Ordner, Scripte in einen anderen. Und ich bin sonst so, ich suche. ;) Ordnung ist bei AutoIt und bei mir so eine Sache. ;)

    Oder habe ich das Anliegen falsch verstanden?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr