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

Beiträge von James

  • komplexe Zahlen (UDF)

    • James
    • 7. Dezember 2013 um 19:01

    Inspiriert von der "Geburtstagsansprache" von Oscar poste ich jetzt einfach mal meine UDF für komplexe Zahlen, an der ich in den letzten Wochen gearbeitet habe, vielleicht findet ja jemand Verwendung dafür. :D

    Verwendung:
    Momentan stehen neben den Grundrechenarten +, -, *, / und ^ die Funktionen Sqrt, Exp, Log, Sin, Cos, Tan, Cot, Sec, Csc zur Verfügung. Um diese von den "normalen" Funktionen unterscheiden zu können beginnen sie mit einem c, aus Sqrt(-1) wird also cSqrt(-1). Die Parameter der Funktionen sind eigentlich mit c(Realteil, Imaginärteil) erstellte komplexe Zahlen (Arrays), man kann aber auch problemlos reelle Zahlen als Parameter übergeben (wie in dem Beispiel im vorherigen Satz).

    UDF
    [autoit]

    #include-once

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

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;; Complex Numbers UDF by James (autoit.de) ;;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

    Func c($a=0, $b=1)
    Local $c[2] = [$a, $b]
    Return $c
    EndFunc
    Func cTest(ByRef $cmplx)
    If (Not IsArray($cmplx)) Then $cmplx = c(Number($cmplx, 3), 0)
    EndFunc

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

    Func cToString($c)
    cTest($c)
    If ($c[1] = 0) Then Return $c[0]
    If ($c[0] = 0) Then
    If ($c[1] = 1) Then Return "i"
    If ($c[1] = -1) Then Return "-i"
    Return $c[1] & "*i"
    EndIf
    If ($c[1] < 0) Then
    If ($c[1] = -1) Then Return $c[0] & " - i"
    Return $c[0] & " - " & Abs($c[1]) & "*i"
    EndIf
    If ($c[1] = 1) Then Return $c[0] & " + i"
    If ($c[1] = -1) Then Return $c[0] & " - i"
    Return $c[0] & " + " & $c[1] & "*i"
    EndFunc

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

    Func cArg($c)
    cTest($c)
    Local Static $pi = ATan(1)*4
    If ($c[0] > 0) Then Return ATan($c[1]/$c[0])
    If ($c[0] < 0) And ($c[1] >= 0) Then Return ATan($c[1]/$c[0])+$pi
    If ($c[0] < 0) And ($c[1] < 0) Then Return ATan($c[1]/$c[0])-$pi
    If ($c[0] = 0) And ($c[1] > 0) Then Return $pi/2
    If ($c[0] = 0) And ($c[1] < 0) Then Return -$pi/2
    Return SetError(1, 0, "-1.#IND")
    EndFunc

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

    Func cAbs($c)
    cTest($c)
    Return Sqrt($c[0]^2 + $c[1]^2)
    EndFunc

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

    Func cAdd($a, $b)
    cTest($a)
    cTest($b)
    Local $c[2] = [ $a[0]+$b[0] , $a[1]+$b[1] ]
    Return $c
    EndFunc

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

    Func cSub($a, $b)
    cTest($a)
    cTest($b)
    Local $c[2] = [ $a[0]-$b[0] , $a[1]-$b[1] ]
    Return $c
    EndFunc

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

    Func cMul($a, $b)
    cTest($a)
    cTest($b)
    Local $c[2] = [ $a[0]*$b[0]-$a[1]*$b[1] , $a[1]*$b[0]+$a[0]*$b[1] ]
    Return $c
    EndFunc

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

    Func cDiv($a, $b)
    cTest($a)
    cTest($b)
    Local $c[2] = [ ($a[0]*$b[0]+$a[1]*$b[1])/($b[0]^2+$b[1]^2) , ($a[1]*$b[0]-$a[0]*$b[1])/($b[0]^2+$b[1]^2) ]
    Return $c
    EndFunc

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

    Func cSqrt($c)
    cTest($c)
    Local $sqrt[2]
    If ($c[1] = 0) Then
    If ($c[0] >= 0) Then
    $sqrt[0] = Sqrt($c[0])
    $sqrt[1] = 0
    Else
    $sqrt[0] = 0
    $sqrt[1] = Sqrt(Abs($c[0]))
    EndIf
    Else
    $sqrt[0] = Sqrt(($c[0]+cAbs($c))/2)
    $sqrt[1] = _sgn($c[1])*Sqrt((-$c[0]+cAbs($c))/2)
    EndIf
    Return $sqrt
    EndFunc

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

    Func _sgn($x)
    Return ($x > 0) - ($x < 0)
    EndFunc

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

    Func cExp($_)
    cTest($_)
    Return cMul(c(Exp($_[0]), 0), c(Round(Cos($_[1]), 15), Round(Sin($_[1]), 15)))
    EndFunc

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

    Func cLog($_)
    cTest($_)
    Return c(Log(cAbs($_)), cArg($_))
    EndFunc

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

    Func cPow($a, $b)
    cTest($a)
    cTest($b)
    Return cExp(cMul($b, cLog($a)))
    EndFunc

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

    Func cSin($_)
    cTest($_)
    Return c(Sin($_[0])*_cosh($_[1]), Cos($_[0])*_sinh($_[1]))
    EndFunc

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

    Func cCos($_)
    cTest($_)
    Return c(Cos($_[0])*_cosh($_[1]), -Sin($_[0])*_sinh($_[1]))
    EndFunc

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

    Func cTan($c)
    cTest($c)
    Return cDiv(cSin($c), cCos($c))
    EndFunc

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

    Func cCot($c)
    cTest($c)
    Return cDiv(cCos($c), cSin($c))
    EndFunc

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

    Func cSec($c)
    cTest($c)
    Return cDiv(1, cCos($c))
    EndFunc

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

    Func cCsc($c)
    cTest($c)
    Return cDiv(1, cSin($c))
    EndFunc

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

    Func _sinh($x)
    Return (Exp($x)-Exp(-$x))/2
    EndFunc

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

    Func _cosh($x)
    Return (Exp($x)+Exp(-$x))/2
    EndFunc

    [/autoit]
  • Remote Filemanager

    • James
    • 7. Dezember 2013 um 15:41

    Dafür müsstest du dir eben ein geeignetes Protokoll ausdenken, mit dem du alle Informationen gut verwalten kannst. Für die Darstellung findest du vielleicht Beispiele in der Hilfe oder im Forum.

    Du könntest natürlich auch gleich einen FTP Server programmieren. Dann hättest du schon ein relativ einfaches Protokoll und müsstest den Client nicht selbst machen, da der Windows Explorer auf FTP Server zugreifen kann.

  • Remote Filemanager

    • James
    • 6. Dezember 2013 um 16:05

    Dafür sollten eigentlich die folgenden Funktionen reichen:

    [autoit]

    DriveGetDrive
    FileFindFirstFile
    FileFindNextFile
    FileRead
    FileMove
    FileDelete

    [/autoit]
  • FASM UDF (X86 u X64)

    • James
    • 6. Dezember 2013 um 13:55
    Zitat von Mars

    Das klingt jetzt eventuell abwägig (weil ich es schonmal in AutoIt probiert habe, wo es nicht anständig funktioniert hat), aber villeicht kann man tatsächlich effektives Multithreading (nur für ASM natürlich) einbauen.

    So nach dem Motto: _ASM_Call(vOP, iThreads, vStruct_Thread1, ... , vStruct-ThreadN)
    In Basic ist es nun einfach z.B. 2 Threads zu erstellen die mit Struct1 und Struct2 gefüttert werden. Anschließend wird wie üblich auf die Terminierung gewartet. (Das warten hat in AutoIt so viel Leistung gefressen, dass es kaum etwas gebracht hat)

    Der Hit wäre natürlich ein optionaler instant return, sodass das Skript praktisch ohne Zeitverlust weiterläuft. (bringt nur etwas bei Abläufen die sich nicht gegenseitig beißen). Wie man soetwas einbaut weiß ich allerdings nicht :D


    Sollte das nicht auch in AutoIt gehen? Ich hätte das so versucht (wobei CreateThread natürlich ein Wrapper für die entsprechende Funktion aus kernel32.dll ist):

    [autoit]

    Func _ASM_Call($ptrASM, $iThreads, $aptrStructs)
    For $i = 1 To $iThreads
    CreateThread($ptrASM, $aptrStructs[$i-1])
    Next
    EndFunc

    [/autoit]
  • Happy Birthday Pee und funkey

    • James
    • 4. Dezember 2013 um 15:46

    Alles Gute zum Geburtstag! :party:

  • .exe Datei vor unbefugter Verbreitung schützen / FTP-Verbindung sicher aufbauen

    • James
    • 1. Dezember 2013 um 12:59
    Zitat von RR04

    Hallo,
    etwas in Deine Richtung geht der Ansatz von Bugfix:
    Fremddateien "includen" (ohne FileInstall)
    ;)

    Wenn man weiß, dass die Datei irgendwo im Arbeitsspeicher liegt, dann kann man sie auch ganz einfach extrahieren.

    Dann wären wir wieder beim Thema Sicherheit im Bezug auf das Programm selbst, das hatten wir hier ja schon zu genüge.
    Hier mal der Link zu einer der Diskussionen.

  • .exe Datei vor unbefugter Verbreitung schützen / FTP-Verbindung sicher aufbauen

    • James
    • 30. November 2013 um 15:16
    Zitat von chrisbyRRC

    Nun gehts wieder los => um eine FTP-Verbindung aufbauen zu können muss ich ja die Zugangsdaten zum Server ins Script schreiben.


    Du könntest ein Web-Interface nutzen.

  • .exe Datei vor unbefugter Verbreitung schützen / FTP-Verbindung sicher aufbauen

    • James
    • 30. November 2013 um 14:17

    Nein, denn selbst, wenn du das irgendwie schaffen würdest, müsste man "nur" das AutoIt-Programm wieder in seine Einzelteile zerlegen um die Datei kopieren zu können.
    Ist das Programm selbst geschrieben? Wenn ja könntest du ja versuchen dort einige Sicherheitsmaßnahmen einzubauen. Es wird dadurch zwar nie 100% sicher, aber zumindest sicherer (und sicher genug für manche Anwender).

  • Datenrettung programmierung

    • James
    • 29. November 2013 um 17:51
    Zitat von TheShadowAE

    Du musst irgendwie direkten Zugriff (per eigener Treiber zb) auf die Festplatte haben und nach "deaktivierten" Dateien suchen.


    Nicht nötig, FileOpen("\\.\C:") reicht dazu auch (wenn das Programm in AutoIt geschrieben werden soll).

  • Zeichenfolge aus beliebigen Zeichen erzeugen

    • James
    • 29. November 2013 um 14:55

    Schau dir mal die Funktion Chr() an.

  • Happy Burtstag Der_Doc und BugFix

    • James
    • 28. November 2013 um 13:48

    Alles Gute zum Geburtstag! :party:

  • Happy Birthday Raupi

    • James
    • 26. November 2013 um 13:37

    Alles Gute zum Geburtstag! :party:

  • PrimzahlenTest

    • James
    • 25. November 2013 um 14:14
    Zitat von Make-Grafik

    Kannst du mir das bitte näher erläutern?


    Ok, nehmen wir als Beispiel 40. Die Grenze wäre in diesem Fall 7.
    40 / 8 = 5 R 0 ; brauchst du aber nicht überprüfen, da du die 5 schon überprüft hast
    40 / 10 = 4 R 0 ; brauchst du auch nicht überprüfen, da du die 4 schon überprüft hast
    40 / 20 = 2 R 0 ; brauchst du auch nicht überprüfen, da du die 2 schon überprüft hast
    ...

    Man könnte also sagen, dass sich die Überprüfungen an der Grenze spiegeln. Ist nicht gerade gut erklärt aber ich hoffe du verstehst was ich meine.

  • PrimzahlenTest

    • James
    • 25. November 2013 um 13:44
    Zitat von Make-Grafik

    Jede Zahl von 2 bis x einfach mit der Funktion prüfen und schon hat man seine Primzahl. Dauert aber demnach auch länger... ^^


    Von 2 bis Ceiling(Sqrt(x)) würde auch reichen.

  • Kleinster HD-Kurzfilm

    • James
    • 24. November 2013 um 20:21
    Zitat von Xorianator

    aber angenommen man macht (um mal auf das Topic zurück zu kommen) so einen Film, wären dann nicht 300 Bytes für so eine Grafik schon viel zu viel wenn man dann 5 Minuten ausfüttern muss?


    Es gibt ja auch noch fraktale Landschaften und andere nette Tricks. So eine Hügellandschaft wie in elevated lässt sich wahrscheinlich in (weniger als) 1000 Bytes erstellen, reicht dann aber auch für 5 oder 10 Minuten Kameraflug.

  • Teile des Scripts auslagern auf Webserver

    • James
    • 18. November 2013 um 19:13

    Ist möglich, eine erweitere Version von Execute() wäre dazu wahrscheinlich der Schlüssel.

    Allerdings solltest du vielleicht lieber auf eine andere Sprache umsteigen, wenn du Sicherheit haben willst. Die wirst du zwar sowieso nie zu 100% erreichen, aber immerhin besser als mit AutoIt. Was nützt es dir, wenn Teile deines Codes im Internet "versteckt" sind, wenn jeder diese einfach downloaden und so das Skript selbst zusammensetzen kann?

  • AutoIt Buch - Wikibooks

    • James
    • 15. November 2013 um 13:43
    Zitat von chip

    Ist das nicht etwas überflüssig geworden durch das Buch von pee bzw. wohl auch deswegen nicht daran weiter gemacht worden?


    Also solange ich kein Version verpasst habe, habe ich das Buch von pee als sehr "leer" in Erinnerung. Ich glaube mich auch daran erinnern zu können, dass er es, falls er es jemals weiter schreibt, alleine vervollständigen will. Gegen etwas Konkurrenz spricht doch eigentlich nichts, und ich nehme an, dass dieses Buch sehr viel vollständiger werden soll.

  • Web-Security für Privatleute lernbar?

    • James
    • 7. November 2013 um 13:59
    Zitat von TheShadowAE

    Und zweitens ein Programm, das eine virtuelle Testumgebung für sehr viele bekannte Lücken gibt. Ich hab leider den Namen vergessen. Das bedeutet dann aber alles selber "by doing" lernen und das ist halt langwierig etc. (aber dafür natürlich besser)


    Damn Vulnerable Web Application?

  • Nach dem compilen, Fehlermeldungen verallgemeinern oder entfernen?

    • James
    • 7. November 2013 um 13:39

    Ich würde die Meldungen an deiner Stelle im Skript lassen, dann aber auch mit aussagekräftigen Texten.
    Das Skript könnte zum Beispiel einige Daten über die letzten Aktionen des Benutzers sowie eine eindeutige Fehlernummer ausgeben und den Benutzer bitten, den Programmierer zu kontaktieren. So weißt du wo ein Fehler auftritt und kannst gegebenenfalls ein Update veröffentlichen.

  • TCP Chat Extras

    • James
    • 6. November 2013 um 14:51
    Zitat von jjj

    Kann man dafür, um die dateien prarllel hoch- bzw. runterzuladen die Funktion mit AdlibRegister aufrufen und zu Beginn AdlibUnRegister in die Funktion schreiben?

    Können tut man das schon, nur entweder verstehe ich dich falsch oder ich sehe darin keinen Sinn.

    Da dein Chat momentan noch recht simpel gehalten ist müsstest du bei der Lösung mit dem Senden von allem über eine Verbindung zwar hier und da einiges umbauen, das wirst du für deine anderen Features aber wahrscheinlich sowieso müssen. Das (aus meiner Sicht) Einfachste wäre es doch an die normalen Nachrichten vorne noch einen Erkennungsstring anzuhängen, sodass du weißt, dass es sich um Text handelt (einfachstes Beispiel: "MESSAGE|"). Bei Dateien machst du das Selbe, nur fügst du da eben noch irgendwo den Dateinamen ein. Wenn der Benutzer jetzt eine Datei senden will wird die geöffnet, und dann werden alle x Millisekunden 4096 Bytes aus der Datei ausgelesen und gesendet. Wenn der Server Nachrichten empfängt leitet er sie weiter, wenn er Teile von Dateien empfängt speichert er diese ab. Aus Sicht der Performance sollte das kein Problem sein, zur Not könntest du auch einfach x erhöhen, eben je nach deinen Prioritäten (ob Nachrichten oder Dateien wichtiger sind).

    So kompliziert ist das gar nicht, oder?

    PS:

    Zitat von SgtIgram

    einen webserver könnte er sich ja bei z.b. funpic kostenlos holen... es gäbe zwar ein paar beschränkungen aber für den anfang eig. ganz okay...

    Das heißt du würdest jedem Client die Möglichkeit geben auf diesen Webspace unbeschränkt Dateien zu laden?

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™