1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. minx

Beiträge von minx

  • StringAPL - die wohl mächtigste Funktion, nicht nur für Strings

    • minx
    • 30. August 2014 um 21:34

    Datei mit dem Ergebnis? Ich habs unter 3.3.8.1 getestet, sollte aber auch unter den neuen Stables funktionieren.

  • StringAPL - die wohl mächtigste Funktion, nicht nur für Strings

    • minx
    • 30. August 2014 um 16:35

    [Blockierte Grafik: http://q52.imgup.net/apltestb773.png]

    Was wäre wenn[1] man sowohl HTML parsen, Finanzen berechnen, Fraktale zeichnen oder Primzahlen analysieren könnte, und zwar ein einer Zeile Code? Wenn das Ganze dann noch aussieht wie ein abstraktes Kunstwerk, ist garantiert APL[2] im Spiel :D

    Was ist APL?

    APL ist zunächst eine Programmiersprache[2], die ursprünglich als interaktive Interpreter-Sprache gedacht war. Die größte Besonderheit von APL ist der extrem komprimierte Code. Dieser kommt durch die Tatsache zustande, dass jeder Befehl von einem absonderlichen Zeichen dargestellt wird. APL unterstützt mehrere Datentypen, Schleifen, Funktionen aber vor allem extreme mathematische Möglichkeiten zur Array, Matrizen und Vektor-Verarbeitung. Der einzige Nachteil ist die wirklich kryptographische Syntax.

    Wie sieht das ganze aus?

    Nehmen wir mal an, wir wollen ein Mandelbrot berechnen. Dann ist das hiermit schon getan:
    [Blockierte Grafik: http://q52.imgup.net/apltestb773.png]
    (bitte vorerst den zweiten Parameter komplett ignorieren, dieses Feature ist momentan noch experimentell)

    Wunderschön, nicht :D .

    Was muss ich tun um APL zu nutzen?

    Zunächst mal die APL Schriftart[3] installieren. Das ist die EINZIGE Schriftart, welche den APL Zeichensatz darstellen kann. Dazu muss jedes Skript, in welchem die StringAPL Funktion verwendet wird, als UTF8-BOM geöffnet werden (die APL Schriftart lässt sich in SciTe mittel STRG-1, Monospace Font->APL Unicode festlegen und sieht garnichtmal so schlecht aus ^^ ).

    Dann einfach das Beispiel ausprobieren.

    Wie funktioniert die UDF?

    Die UDF basiert auf ngns APL Interpreter in JavaScript. Das ist der einzige benutzbare (offline-) Interpreter, der alle Funktionen von APL beherrscht. Ausgeführt wird das Skript über den IE. Warum nicht in AutoIt? Nun, zunächst ist JS wesentlich schneller und zudem sind es über 7500 Zeilen Code, die sich ziemlich schwer übersetzen lassen ^^ .

    Was kann man damit tun?

    Man kann es sich als eine Art RegEx auf Steroiden vorstellen, das gleichzeitig noch normale Funktionen bietet. Es ist ALLES möglich. Man könnte sogar einen AutoIt-Interpreter in APL schreiben, aber das wäre glaube ich Selbstmord :D

    [Blockierte Grafik: http://p04.imgup.net/examplese923.png]

    ______________________________________________________________________________________

    [1] - Wer versteht die Anspielung ;)
    [2] - http://de.wikipedia.org/wiki/APL_(Programmiersprache) bzw. http://en.wikipedia.org/wiki/APL_(programming_language)
    [3] - http://sites.google.com/site/baavector/fonts

    Dateien

    StringAPL.au3 776,89 kB – 418 Downloads Example.au3 3,06 kB – 466 Downloads
  • _StringMatch - Strings logisch durchsuchen

    • minx
    • 30. August 2014 um 06:22

    Mit dieser Funktions lassen sich Patterns in String suchen, die boolsche Operatoren enthalten können. Die Funktion gibt zurück, ob der Input zum Pattern passt oder nicht. Ein Beispiel ist dabei:

    [autoit]

    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    $sInput = 'Ashley R., Harris and Maxwell are going to the lake.'

    [/autoit][autoit][/autoit][autoit]

    $sQuery = '((Ashley and R.) and (lake and not mountain)) and Harris and "and Maxwell"'
    ; -> There is a Person named Ashley
    ; -> Ashleys surname is R.
    ; -> There is a lake, but no mountain
    ; -> There is a Person named Harris
    ; -> Maxwell should be the last person mentioned in this sentence

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite("-> " & _StringMatch($sQuery, $sInput) & @LF)

    [/autoit][autoit][/autoit][autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _StringMatch
    ; Description ...: Returns wether the search pattern matches the given string.
    ; Boolean Operators, Brackets and Quotes can be used:
    ; Available OPs: and or not xor
    ; Brackets and even nested Brackets can be used (causes recursion).
    ; Use quotes to search for strings containing spaces
    ; Syntax ........: _StringMatch($sSearch, $sString)
    ; Parameters ....: $sSearch - The search pattern.
    ; $sString - A string value.
    ; Return values .: true or false
    ; Author ........: minx
    ; Example .......: s. above
    ; ===============================================================================================================================
    Func _StringMatch($sSearch, $sString)
    If $sSearch = "" Then Return SetError(1)
    Local $j[1], $b = 1
    $s = _StringInStrRev($sSearch, "(")
    While 1
    If $s > 0 Then
    $f = StringInStr($sSearch, ")", 0, 1, $s)
    If $f > 0 Then $sSearch = StringMid($sSearch, 1, $s - 1) & _StringMatch(StringMid($sSearch, $s + 1, $f - $s - 1), $sString) & StringMid($sSearch, $f + 1)
    EndIf
    $s = _StringInStrRev($sSearch, "(")
    If Not ($s > 0 And $f > 0) Then ExitLoop
    WEnd
    $i = StringSplit($sSearch, " ", 3)
    If StringInStr($sSearch, """", 0, 1, 1) Then
    For $a = UBound($i)-1 To 0 Step -1
    If StringRight($i[$a], 1) = """" And StringLeft($i[$a], 1) <> """" Then
    $i[$a - 1] &= " " & $i[$a]
    $i[$a] = ""
    EndIf
    If StringRight($i[$a], 1) = """" And StringLeft($i[$a], 1) = """" And StringLen($i[$a]) > 1 Then $i[$a] = "!" & StringMid($i[$a], 2, StringLen($i[$a]) - 2)
    Next
    For $a = 0 To UBound($i)-1
    If $i[$a] <> "" Then
    ReDim $j[$b]
    $j[$b - 1] = $i[$a]
    $b += 1
    EndIf
    Next
    $i = $j
    EndIf
    For $a = 0 To UBound($i)-1
    Switch StringUpper($i[$a])
    Case "AND"
    $i[$a] = "AND"
    Case "OR"
    $i[$a] = "OR"
    Case "NOT"
    $i[$a] = "NOT"
    Case "XOR"
    $i[$a] = "XOR"
    Case "TRUE"
    $i[$a] = "true"
    Case "FALSE"
    $i[$a] = "false"
    Case Else
    If StringLeft($i[$a], 1) = "!" Then $i[$a] = StringMid($i[$a], 2)
    $i[$a] = StringLower(StringInStr($sString, $i[$a], 0, 1, 1) <> 0)
    EndSwitch
    Next
    $sSearch = _ArrayToString($i, " ")
    While 1
    If StringInStr($sSearch, "NOT", 0, 1, 1) <> 0 Then
    $sSearch = StringReplace($sSearch, "NOT false", "true")
    $sSearch = StringReplace($sSearch, "NOT true", "false")
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If StringInStr($sSearch, "OR", 0, 1, 1) <> 0 Then
    $sSearch = StringReplace($sSearch, "false OR false", "false")
    $sSearch = StringReplace($sSearch, "true OR false", "true")
    $sSearch = StringReplace($sSearch, "false OR true", "true")
    $sSearch = StringReplace($sSearch, "true OR true", "true")
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If StringInStr($sSearch, "XOR", 0, 1, 1) <> 0 Then
    $sSearch = StringReplace($sSearch, "false XOR false", "false")
    $sSearch = StringReplace($sSearch, "true XOR false", "true")
    $sSearch = StringReplace($sSearch, "false XOR true", "true")
    $sSearch = StringReplace($sSearch, "true XOR true", "false")
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If StringInStr($sSearch, "AND", 0, 1, 1) <> "0" Then
    $sSearch = StringReplace($sSearch, "false AND false", "false")
    $sSearch = StringReplace($sSearch, "true AND false", "false")
    $sSearch = StringReplace($sSearch, "false AND true", "false")
    $sSearch = StringReplace($sSearch, "true AND true", "true")
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If StringInStr($sSearch, " ", 0, 1, 1) Then
    $sSearch = StringReplace($sSearch, "true true", "true")
    $sSearch = StringReplace($sSearch, "false true", "true")
    $sSearch = StringReplace($sSearch, "true false", "true")
    $sSearch = StringReplace($sSearch, "false false", "false")
    If StringInStr($sSearch, " ", 0, 1, 1) Then
    $sSearch &= " false"
    ContinueLoop
    EndIf
    EndIf
    ExitLoop
    WEnd
    Return $sSearch
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _StringInStrRev($sString, $sSearch)
    $iPtr = StringLen($sSearch)
    For $nPos = StringLen($sString) - $iPtr To 1 Step -1
    If StringMid($sString, $nPos, $iPtr) = $sSearch Then Return $nPos
    Next
    Return 0
    EndFunc

    [/autoit]
  • GUI2 zu GUI1

    • minx
    • 29. August 2014 um 23:02

    Warum so kompliziert per Position regeln und nicht einfach per Child-GUI :huh: , dort werden die Koordinaten automatisch dem Parent angepasst.

  • String nach 30 Zeichen splitten?

    • minx
    • 27. August 2014 um 06:01

    Nächtliche, Koffeingetriebene Lösung :)

    [autoit]

    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    local $string = "Hallo Autoit.de, das ist ein Beispielstring der aufgeteilt gehört, aber erst nach z.B: 30 Zeichen, hier wird er leider nach allen 9 geteilt.", $result

    [/autoit][autoit][/autoit][autoit]

    $result = StringTrimRight(StringRegExpReplace($string, ".{1,30}", "\0-"),1)

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite("-> " & $result & @LF)

    [/autoit]
  • neues PC Gehäuse gesucht

    • minx
    • 24. August 2014 um 02:37

    Auf was legst du wert: Design + Qualität / Design + Günstig / Hässlig + Qualität + Günstig / Günstig ... ?
    Was für ein Kühler? Da du "am Gehäuse" festschrauben willst, gehe ich mal von einem (dual-) 120mm All-In-One Wasser-Kühler aus?
    Was für ein Motherboard hast du: ATX, mATX, ITX, SATX ... ?
    Wie viele Bays brauchst du?
    Willst du später noch mehr GraKas / Rads oder HDDs einbauen?
    Soll das Case einen integrierten Fan-Controller haben?
    Soll es in einer bestimmten Farbe verfügbar sein?
    Soll es ein Fenster haben (groß, klein, Glas oder Plexi)?
    Beleuchtung inklusive?
    Single- oder Dual-Chamber Design?
    Mit oder ohne Front-I/O (TIO, BIO ...)?
    3,5" Laufwerke?
    Mit Tragegriffen?
    Cable-Management Möglichkeiten viel / egal bzw. im Case oder auf Rückseite?
    Inklusive Thumb-Screws etc.?
    Ordentlich oder schlampig gefärbte Kabel?
    Mit Luftfiltern?
    Inklusive Stock-Fans?

    Eine sehr gute Übersicht von Cases (englisch) findest du hier: https://www.youtube.com/watch?v=NTJ0osmQyzU&list=PL8mG-RkN2uTyCzihhSq-kQZCRggWoWQZ5 . Da wird auf alles eingegangen ;)

  • Tipprunde & Talk: Bundesliga 14/15

    • minx
    • 24. August 2014 um 02:33

    [Blockierte Grafik: http://www.the-webrunner.de/IMAGE/bayernklatsch.gif][Blockierte Grafik: http://forum.hsv.de/wcf/images/smilies/smiley-channel.de_schilder145.gif]:D

    Ich tippe aber nicht mit, da macht mich Cheater Dieter wiede platt ;)

  • DLLs in Perseus schreiben und in AutoIt nutzen

    • minx
    • 22. August 2014 um 19:16

    Der Fix kommt in der nächsten Version.

  • Tap - BPM Counter

    • minx
    • 22. August 2014 um 09:53

    Andy Die Beaterkennung sogar mit Grafik ist als Beispiel bei der BASS UDF dabei.

  • Nächstes Tutorial Thema?

    • minx
    • 16. August 2014 um 23:39
    Zitat von PuReIroNie

    Und wenn ich es nicht falsch verstanden habe ist Perseus eine Autoit ähnliche Sprache (von minx) die somit hier gut rein passt.

    Sie ist nicht AutoIt-ähnlich. Mich verwundert, dass er überhaupt diese Threads verlinkt hat. Hier geht es um AutoIt Tutorials. Da wären die besseren Beispiele prozedurale Grafiken, die ich in AutoIt released habe:

    Animierte prozedurale Landschaft aus impliziten Gleichungen
    bzw hier (Post 28 bis 38 :( Revision Demoparty 2014 Streams'n'Tools (und allgemeine Demoparty Diskussion)

  • Nächstes Tutorial Thema?

    • minx
    • 16. August 2014 um 03:57
    Zitat

    Alle 3 Themen sind für ein autoit Forum eigentlich ungeeignet.

    Aha.

  • Compiled.exe beendet sich sofort wieder, läuft aber im Hintergrund weiter

    • minx
    • 16. August 2014 um 00:12
    Zitat von Phil-IT

    Batch ist viel angenehmer wenn es um Console und so geht!

    Ja, warum nicht gleich Brainfuck :rolleyes: . Schonmal in den Sinn gekommen, dass das Skript etwas komplexere Aufgaben erledigen könnte als Batch?

    Zitat

    Aber wie kann ich den Schalter im SciTE setzten?

    Im SciTe4AutoIt3 gibt es bei Compile eine sehr nützliche Oberfläche. Was du dort anwählst wird automatisch in den Code eingefügt.

  • Revision Demoparty 2014 Streams'n'Tools (und allgemeine Demoparty Diskussion)

    • minx
    • 14. August 2014 um 17:14
    Zitat von YaeroxXO

    Ich brauch ganz dringend zeit, um mich in die ganze Grafik-Geschichte mal einzulesen Du redest darüber und ich denke mir nur so ???

    Ich habe überhaupt nicht über Grafik geredet, jedenfalls nicht direkt. Es ging um die Erstellung einer 64k Demo ohne C++, Crinkler oder 4klang ^^

  • Revision Demoparty 2014 Streams'n'Tools (und allgemeine Demoparty Diskussion)

    • minx
    • 14. August 2014 um 00:26

    Wäre doch mal cool eine Demo in Perseus zu erstellen. Man nehme eine Barebonde Demo (Also Packer + Synth + Musik) und siehe da: Es ist Platz für fast 100KB an Perseus Code (bzw. kompilierten Perseus Code). Das sollte doch zu machen sein. Fehlen nur ein paar geile Shader und ein wenig Timing:

    Code
    Overview:
    
    
        [ PART       ] [ RAW    ] [ PAQD   ] [ RAT      ]
        [ CMF.Player ] [ 10.752 ] [  8.993 ] [  83.64 % ]
        [ CMF.Music  ] [ 15.229 ] [  7.452 ] [  48.93 % ]
        [ PAQ + CFG  ] [      - ] [ 16.403 ] [ 100.00 % ]
        [ main       ] [ 16.896 ] [  3.719 ] [  22.01 % ]
    
    
        Total:         [ 59.280 ] [ 36.567 ] [  61.68 % ]
        Total Linked:  [ ------ ] [ 43.987 ] [ -------- ]
        Compo:         [                  64k (-21.549) ]
    
    
        > Space for approx. 110.000 RAW Bytes of code :-)
    
    
    Running:
    
    
        1. UPX unpacks UniLink Dropper
        2. UniLink drops compressed files + unpacker
        3. Unpacker unpacks all files
           (Start loading screen)
        4. main (/loading screen) starts and commands CMF to play music
        5. main proceeds to demo
    
    
    Terminating:
    
    
        1. main deletes all files
        2. main terminates
    Alles anzeigen

    PS: Es gibt übrigens eine Demoparty in Berlin dieses Jahr: http://demoparty.berlin/

  • Vereinsgründung

    • minx
    • 14. August 2014 um 00:20

    Mit einem Referenzprojekt an mindestens einer Schule / Uni lässt sich auch ein Verein / eine gGmbh gründen. Beispiel: Formel 1 in der Schule gGmbH oder AfB gGmbH (Europas gemeinnütziges IT-Systemhaus).

  • Nächstes Tutorial Thema?

    • minx
    • 13. August 2014 um 19:31
    Zitat von James

    würde Thema 2 gewinnen

    Es ist knapp. Thema 2 ist für mich deutlich weniger Aufwand als Thema 1 und noch deutlich weniger als 3 :D . Mal schauen, vielleicht lässt sich dann ja auch ein Tutorial zusammen erarbeiten ;)

  • [spiel] Wünsch dir was !

    • minx
    • 13. August 2014 um 00:55
    Zitat von Make-Grafik

    Ich wünsche mir dass es in meiner Beziehung besser laufen würde. :/

    Zitat von Kanashius

    Wird es, aber deine Freundin stirbt.


    [Blockierte Grafik: http://s07.imgup.net/76fa29133ab175.jpg]

  • cdm, ein "Oldy" ist nun auch dabei!

    • minx
    • 12. August 2014 um 15:01
    Zitat von cdm

    2. Wird man zu einer sauberen Struktur "gezwungen"/überredet? Ja! "So muß Programmieren"!

    Ooooooh nein :D .

  • [Demotool] kode kompressor - Extremer EXE Packer

    • minx
    • 11. August 2014 um 05:16

    454 Tage und 183 Downloads seit dem letzten Release. Es hat sich einiges getan. Statt einfach nur ein plumper Packer-Wrapper zu sein, ist kodek 2 (wird bald released) tatsächlich zu gebrauchen.

    Mein großes Ziel ist es, spätestens nächstes Jahr eine Demo in Perseus zu schreiben und auch (wenigstens) einzureichen. Damit das überhaupt möglich ist, musste kodek noch mehr können.

    Schritt 1: Die Demo

    Die Demo (oder die Test-Demo) besteht aus 3 Teilen: Der Perseus Main Executable, einem Mini (70k raw) Musikplayer für das extra für dieses Demotool kreierte Codec CMF (Compact Music Format) und die Musikdatei als CMF (~17k raw, 2 Minuten Techno/HandsUp).

    Schritt 2: Der erste Waschgang

    CMF enthält einen Packer nach PAQ6 Algo. Also ziemlich krasse Kompression. Bis jetzt wurde noch nichts gepackt, aber jetzt wird alles gepackt. Am Ende dieses Schrittes haben wir vier Dateien: Den Unpacker (~14,5k, bereits per MEW 11 SE komprimiert), die Perseus Main Executable (3,52k comp/MEW UND comp/CMF), den Player (13,3k comp/MEW UND comp/CMF) und zu guter Letzt die Musik selbst (7,27k comp/CMF). Wenn man mal die Größen mit Schritt 1 vergleicht, hat das Paket schon mächtig abgespeckt.

    Schritt 3: Linken

    Hier kommt ein neues Feature ins Spiel, das früher als Standard-Feature für Perseus gedacht war: UniLink. Damit kann man alles gegen alles linken. Am Ende dieses Schrittes steht eine einzelne Executable, die alle Teile hält. Beim Ausführen werden die Teile automatisch entpackt, entpackt und ausgeführt und am Ende wieder gelöscht :) . Die gelinkte Executable ist jetzt ca. 50k groß (d.h. der UniLink stub ist ca 11k groß - daran wird gearbeitet).

    Schritt 4: Finales Packen

    UPX ist toll und vor allem tolerant. Es kommt mit den merkwürdigsten Executables zurecht (siehe AutoIt :D ). Deswegen wird die gelinkte Executable mit UPX gepackt. Und fertig. Die finale Größe beträgt 43k.

    Fazit

    Durch geschicktes Programmieren in Perseus (für den Test habe ich einfach das heillos unoptimierte 2048-Spiel aus den Examples genommen) lässt sich die Größe der Main Executable mindestens vierteln. Aber selbst jetzt sind zur 64k Grenze noch >20k Platz. Das ist eine Menge, wenn man weiß wie man sie nutzen kann ;) .

    kodek 2 gibt es, sobald die erste Demo fertig ist und sich das Dings somit im Einsatz bewährt hat :thumbup:

  • DLLs in Perseus schreiben und in AutoIt nutzen

    • minx
    • 10. August 2014 um 19:50
    Zitat von Andy

    Da du auch FASM benutzt, habe ich mal eine Minimal-DLL per FASM erstellt, die funzt einwandfrei, ich lasse aber auch GetModuleHandleA (probier mal GetModuleHandleW) immer weg. Bei der Gelegenheit habe ich auch gesehen, dass du die Sections kleiner machst.
    Zeig doch mal den Code, welchen du dem FASM vorwirfst.

    Ich benutze nicht FASM :huh: . Perseus wird über das DirectByte Framework direkt in Bytecode übersetzt, ohne Assembler.

    Zitat von Andy

    //EDIT Schon im DllEntryPoint() zeigt IDA einen Stackpointer-Fehler beim DllEntryPoint endp! Da stimmt was nicht

    Da schaue ich nochmal nach. Ich mach mal ein Bug Ticket im Tracker dafür.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™