Datei mit dem Ergebnis? Ich habs unter 3.3.8.1 getestet, sollte aber auch unter den neuen Stables funktionieren.
Beiträge von minx
-
-
[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

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
.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

[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 -
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"'
[/autoit][autoit][/autoit][autoit]
; -> 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 sentenceConsoleWrite("-> " & _StringMatch($sQuery, $sInput) & @LF)
[/autoit][autoit][/autoit][autoit]; #FUNCTION# ====================================================================================================================
[/autoit][autoit][/autoit][autoit]
; 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")
EndIfIf StringInStr($sSearch, "OR", 0, 1, 1) <> 0 Then
[/autoit][autoit][/autoit][autoit]
$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")
EndIfIf StringInStr($sSearch, "XOR", 0, 1, 1) <> 0 Then
[/autoit][autoit][/autoit][autoit]
$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")
EndIfIf StringInStr($sSearch, "AND", 0, 1, 1) <> "0" Then
[/autoit][autoit][/autoit][autoit]
$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")
EndIfIf StringInStr($sSearch, " ", 0, 1, 1) Then
[/autoit][autoit][/autoit][autoit]
$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
EndFuncFunc _StringInStrRev($sString, $sSearch)
[/autoit]
$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 -
Warum so kompliziert per Position regeln und nicht einfach per Child-GUI
, dort werden die Koordinaten automatisch dem Parent angepasst. -
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] -
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

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

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

-
Der Fix kommt in der nächsten Version.
-
Andy Die Beaterkennung sogar mit Grafik ist als Beispiel bei der BASS UDF dabei.
-
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) -
Zitat
Alle 3 Themen sind für ein autoit Forum eigentlich ungeeignet.
Aha.
-
Batch ist viel angenehmer wenn es um Console und so geht!
Ja, warum nicht gleich Brainfuck
. Schonmal in den Sinn gekommen, dass das Skript etwas komplexere Aufgaben erledigen könnte als Batch?ZitatAber 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.
-
-
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
Alles anzeigenOverview: [ 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 terminatesPS: Es gibt übrigens eine Demoparty in Berlin dieses Jahr: http://demoparty.berlin/
-
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).
-
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
. Mal schauen, vielleicht lässt sich dann ja auch ein Tutorial zusammen erarbeiten 
-
Ich wünsche mir dass es in meiner Beziehung besser laufen würde.

Wird es, aber deine Freundin stirbt.
[Blockierte Grafik: http://s07.imgup.net/76fa29133ab175.jpg] -
2. Wird man zu einer sauberen Struktur "gezwungen"/überredet? Ja! "So muß Programmieren"!
Ooooooh nein
. -
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
). 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

-
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
. Perseus wird über das DirectByte Framework direkt in Bytecode übersetzt, ohne Assembler.//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.