Hehe, genau DAS ist ja das schöne daran
So kann man die "automatische" Typumwandlung beeinflussen, in anderen Programmiersprachen mit "festen" Typen geht das natürlich auch. ![]()
Schlusswort:
It´s not a bug, it´s a feature...
Hehe, genau DAS ist ja das schöne daran
So kann man die "automatische" Typumwandlung beeinflussen, in anderen Programmiersprachen mit "festen" Typen geht das natürlich auch. ![]()
Schlusswort:
It´s not a bug, it´s a feature...
Hi,
ZitatTheoretisch kannst du einen globalen Zähler verwenden, der bei jedem Aufruf der Funktion erhöht wird, und du als Abbruchbedingung eine Grenze dieses Wertes nimmst.
was die Rekursion völlig ad absurdum führt....nicht die globale Variable ist das Abbruchkriterium, sondern die an die Funktion (und dann darin ausgewertete) übergebene Variable! Ansonsten wäre z.B. eine FOR/TO-Schleife wesentlich Speichersparender.
Bei der Rekursion werden sämtliche in der Funktion verwendeten Variablen gespeichert, PRO Rekursionsschritt!
Daher ist es auch nicht vorhersehbar, wann der Speicherüberlauf stattfindet. Kommt immer auch den aktuellen Speicherverbrauch des Inhalts der Funktion an.
Einzig die maximale Rekursionstiefe ist festgelegt. Lt. Hilfe mit 389 Schritten, aber ich bekommen beim Testen mehr...
$a=0
_test($a)
func _test($a)
$a+=1
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
_test($a)
endfunc
Ja, das ist klar, aber trotzdem MUSS es eine Priorisierung im Fall der Typen geben.
In dieser Kaskade werden demnach Bool (TRUE/FALSE) eindeutig vor anderen Variablentypen behandelt bzw. ausgewertet.
Die AutoIt-interne Typumwandlung bzw. Zuordnung (im C++-Code) erfolgt ja auch durch etliche Abfragen. Und die Reihenfolge dieser Abfragen bestimmt somit das Ergebnis bzw. den Datentyp.
msgbox(0,0,7*True);hier wird True als 1 interpretiert, und nicht als Ergebnis TRUE ausgegeben...
[/autoit]/Edit/ das ist eher Philosophisch^^
Ist Sieben mal Wahr gleich Sieben oder ist es Wahr?? ![]()
/EDIT2/
[autoit]msgbox(0,0,True+true);Fehlermeldung
msgbox(0,0,(True)+(true));hier wird True als 1 interpretiert
msgbox(0,0,(True)&(true));hier wird True als True interpretiert
Hi,
die Frage ist, was du bzw. das Programm welches den "Ram-Verbrauch" anzeigt, da alles mit einrechnest....
Einer der immens grossen Vorteile der neueren BS ist, dass die Reservierung von Speicher grundsätzlich dynamisch erfolgt, wenn nicht explizit anders vom Programmierer festgelegt!
Da nicht nur deins, sondern auch alle anderen Programme gleichzeitig auf Speicher (Cache nicht vergessen !!! ) zugreifen, und auch die Abfrage dieses Zugriffs natürlich mit etlichen anderen Abfragen kollidiert, ist die Anzeige (aktueller) "RAM-Verbrauch" nichts weiter als eine Momentaufnahme zu einem bestimmten Zeitpunkt. Eine Millisekunde später kann das alles schon wieder anders aussehen, wenn Windows z.B. Speicher auf Platte auslagert (dort werden natürlich ganze Blöcke benutzt, Fragmentierung nicht vergessen uswusf.)
Btw. habe ich bei den meisten meiner Scripte immer die gleiche Anzeige bzgl. Speicherauslastung (Task-Manager XP32)
Hi,
es hängt an der Zuordnung (bool) dass true=1 und false=0 ist, bzw programmintern genau so abgearbeitet wird, und zwar während der Interpretation/Compilation. Bei AutoIt wird augenscheinlich auf BOOL eher geprüft als auf 0 oder 1.
[autoit]$a=false ;entspricht FALSE
msgbox(0,"$a="&$a,isbool($a))
if $a="abc" then msgbox(0,"$a="&$a,$a="abc"); if TRUE then
$a=0 ;entspricht NUMBER(0), und das ist immer 1 => TRUE
msgbox(0,"$a="&$a,isbool($a))
if $a="abc" then msgbox(0,"$a="&$a,$a="abc"); if TRUE then
Wenn man also per IF auf TRUE/FALSE (nicht 0 oder 1 !! ) prüft, dann sollte man die passenden Variablen verwenden.
[autoit]if 0 then msgbox(0,0,0);0 => false s.o
if 1 then msgbox(0,true,1);number(xx) oder string(xx) => true s.o
Das führt also dazu, dass ein IF (fürs debugging
)so eingesetzt werden sollte:
$a=0
$ausdruck = ($a="abc");umwandlung in bool TRUE/FALSE
msgbox(0,"Ausdruck",$ausdruck)
;abfrage
if $ausdruck=TRUE then msgbox(0,"Ausdruck ist",TRUE)
Zitat- AutoIt hat nicht einen Wert wie z.B. 'nil' in LUA, also das definierte 'Nichts'
NIL könnte man also imho in AutoIt mit FALSE ersetzen.
Kommt darauf an, WIE bzw. durch was externe Compiler/Interpreter dieses NIL intern ersetzen, bzw. wie weit "oben" dieser Ausdruck in der Prioritätenliste ist.
Man müsste mal dll´s verschiedener Programmiersprachen erstellen, welche dieses "NIL" auswerten, und könnte dann in AutoIt eine Zuordnung treffen.
Hi,
Zitatisher konnte ich leider keine OO-UDF finden, bzw. nicht die Funktion, die ich benötige.
was daran liegt, dass du nicht in der Lage bist, Foren-Suchfunktionen oder eine beliebige Suchmaschine zu benutzen...
Wenn man nicht weiss, WIE man suchen muss ist es besser zu fragen, als davon auszugehen, dass einem der "Arm aus der Sonne gelegt wird!"
Hier gibts bspw. OO-Calc-Funktionen incl. einer Demo....
Glücklichen Herzwunsch und alles. alles Gute!!!
ZitatIch denke dass ich auch mit Linux und einer Windows-VM noch eine möglichst lange Weile hier bleibe
Solange du nicht die AutoIt-Portierung nach Linux anbietest, wirst du um die VM nicht herumkommen
Aber lass dir ruhig Zeit, je länger haben wir noch was von dir ![]()
Hi,
habe mal einige Zeilen aus DeskStream kopiert, dort machen wir das so:
Client:
$sresv = TCPRecv($iConnect, 1) ;ein zeichen aus dem puffer holen
If @error Then ;verbindung zum server verloren
MsgBox(16, "DeskStream 2 Client", "Verbindung unterbrochen.")
ExitLoop
EndIf
Server:
Ineinandergeschachtelte Loops, der "äußere" arbeitet die etablierten Verbindungen ab, falls einer der Clients die Verbindung beendet, wird das durch einen @ERROR bei TCPRecv() erkannt und der Socket geschlossen, der Server wartet dann auf weitere Verbindungen.
While 1 ;äusserer loop
While Sleep(10) ;warten auf Client
If $iConnection = -1 Then $iConnection = TCPAccept($iSock); client hat sich verbunden
If $iConnection <> -1 Then ExitLoop
WEnd
;hauptschleife
While 1 ;Sleep(10)
;blabla
TCPSend($iConnection, Hex($zoom_w) & Hex($zoom_h))
While Sleep(10) ;Verbindung zu client besteht
$sResv = TCPRecv($iConnection, 2) ;Daten empfangen
;blabla
WEnd
;blabla
;blabla
Do ;warten auf client
$a = TCPRecv($iConnection, 1, 1); BinärDaten holen
If @error Then ExitLoop 2 ;springt zu XXXXX
If $a <> "" Then $recv &= Hex($a, 2)
Until StringLen($recv) = (2 * $structsize) ;es wurde etwas gesendet
;blabla
WEnd
;XXXXX
;blabla
TCPCloseSocket($iConnection)
$iConnection = -1
WEnd
//EDIT// ist nicht von der Multiclient-Variante, aber wenn man überhaupt verstanden hat, was man tut (bzw. tun muss) ist der Rest ja einfach...
Hi!
Zitatgelöst: selbst ist die frau, danke jungs
bitte bitte, gern geschehen
Fein wäre trotzdem, dein Script zu posten, es sind nämlich einige Opera-User hier im Forum aktiv!
Glücklichen Herzwunsch und alles Gute zum Geburtstag!
Hau rein und lass es richtig krachen!
Hi,
ZitatUnd eigentlich ging es mir hauptsächlich um den Mittelpunkt! (Mit dem Mittelpunkt kann ich ein Quadrat um den 'Kreis' zeichnen/ihn um den Mittelpunkt drehen und so die 'abgeschnittene' Seite finden, etc)
imho der völlig falsche Ansatz! Du suchst einen (teilweisen) Kreis, um dann durch weiteres Suchen die "abgeschnittene" Seite (Sekante) zu finden...wieso suchst du nicht die Linie=Sekante direkt?
Ich hatte die "Kreissuche" in einem meiner Scripte verwendet, um Augen auf Bildern von Gesichtern zu detektieren.
Dazu habe ich zunächst per Sobel-Operator die Kanten im Bild gesucht und dann mittels eines "handgeschnitzen" kurzen, aber dafür langsamen AutoIt-Algorithmus (in Assembler gings dann schneller^^) die "Kreise" im (Schwarzweiss-) Bild gesucht.
Der Algorithmus war sehr einfach (Bruteforce FTW
)
Nimm ein Pixel M einer Bitmap und schlage einen Kreis mit Radius r und Linienbreite b.
Prüfe nacheinander die Pixel auf dem Kreis auf "weiß", wenn weiß, dann x=x+1
Durch den Radius r und die Linienbreite b ist die maximale Anzahl y der möglichen weißen Pixel auf dem Kreis bekannt.
Wenn x~y, dann ist fast jedes Pixel auf dem Kreis weiß, ergo ist M der Mittelpunkt eines Kreises auf der Bitmap^^
Aber auch wenn die Anzahl der "gesetzten" Pixel auf dem Kreis nur 70-80% betragen, lohnt sich eine nähere Betrachtung...
Kreise suchen ist SEHR aufwendig, Linien suchen SEHR schnell und einfach (y=mx+b)
Also such doch die Linie im Bild, eine senkrechte auf der Mitte dieser Sekante geht durch den Mittelpunkt des Kreises und gibt dir im Verlauf beim Farbwechsel (weiss/schwarz) den 3. Punkt auf deinem Kreisbogen.
//Edit//
[autoit]Func atan2($y, $x)
Return (2 * ATan($y / ($x + Sqrt($x * $x + $y * $y))))
EndFunc ;==>atan2
ZitatNennt sich Bullshit-Bingo.
....welch ein schönes deutsches Wort.
ZitatAls ich in der 9. Klasse (Gymnasium) war konnten auch nur die Wenigsten gut lesen. In der 10. Klasse war das, wenn ich mich recht erinnere, (leider) auch nicht besser.
Bestätigt meine Erfahrung aus den letzten 30 Jahren!
Wenn "Schule" funktionieren würde, dann hätten wir nicht knapp 10% Analphabeten unter den Erwachsenen!
Aber andererseits, wozu muss ein (junger) Mensch heutzutage "richtig" lesen können? Für SMS, Twitter, Facebook und Co? ![]()
![]()
Gebrauchsanweisung oder Tutorial? "Dafür gibts doch "Tut´s bei YouTube!"
Beim Essen gehen die Speisekarte? "Brauch ich nicht, ich nehm Schnitzel mit Pommes!"
In der Straßenbahn den Hinweis, das Schwarzfahren teuer kommt? "Drei Mal erwischt werden ist billiger wie die Wochenkarte!"
Tageszeitung, FAZ usw.? ![]()
![]()
(Ausnahme: Bild bildet^^)
Bücher? "Alda, isch kenn ein, der hat echt son Buch, vollkrass!" ![]()
Früher verstand ich sehr viel mit Hilfe des Paretoprinzips, unter anderem, dass man 80% der Leute aus diversen Gründen in der Pfeife rauchen kann.
Heute bin ich schlauer, Pareto hat ausgedient, denn man kann 95% in der Pfeife rauchen....von daher tangiert mich deren Leben nur peripher.
Wichtig ist, den eigenen Kindern klarzumachen wie der Hase läuft!
@m-obi
hast du OpenGl installiert? IdR ist OpenGl mit dem BS mitinstalliert, allerdings brauchst du Treiber für deine Hardware!
minx,
viel zu wenige Bälle. kein drehen und wirbeln, wie soll einem denn da schlecht werden...
(Ironiemodus OFF)
klasse Script
, leider bekomme ich nach ca. 30 sec Zusehen schon Ausfalllerscheinungen....also eher was für den "Demo"-Bereich!
Bei soetwas überlegt man nicht, man rechnet
2 Gleichungen mit 2 Unbekannten:
(1) Kosten= Wein + Flasche = 11 €
(2) Der Wein (ohne der Flasche) kostet 10€ mehr als die Flasche
Wein = 10€ + Flasche
=> Flasche = Wein - 10€
(2) in (1)
Wein + Flasche = 11€
Wein +(Wein -10) = 11€
2x Wein =21€
Wein = 10.5€
in (1)
Flasche = Wein -10€
Flasche = 10.5€ - 10€
Flasche = 0.5€
wzbw.
Sehr fein gemacht.... ![]()
Ich spiele gegen mich selbst, meine linke Hand verliert^^
Hi,
habe mit AntMe! viel Spass in der Schule meiner Tochter gehabt. Eine Lehrerin hatte mich gefragt, wie man Grundschulkindern "programmieren" näherbringen könnte, und da hab ich mich einige Stunden geopfert^^
Die Kinder fanden es total klasse, "ihren" Ameisen Leben einzuhauchen und mit ihren Völkern (Programmen) gegeneinander anzutreten...
Da es in AntMe! schon eine TOP-Entwicklungsumgebung gibt, und "nur" noch die Regeln zu definieren sind, würde ich mir ehrlich gesagt die Mühe in AutoIt nicht machen ![]()
@progandy,
beim Daumenkino entsteht die "Bewegung" dadurch, dass einzelne Bilder nacheinander dargestellt werden. Genau so funktioniert ja das "Streifenfolienkino" auch, nur dass ALLE Seiten gleichzeitig auf einem Blatt Papier dargestellt sind. Die Streifen in der Folie verdecken nur immer die restlichen Bilder und zeigen nur eine einzelne "Seite" des Daumenkinos.
Also gewissermassen 3D-Daumenkino auf 2D komprimiert ![]()
Das bringt mich auf eine Idee.
Man könnte das Bild auf eine Walze aufziehen und diese (endlos) vor einer fix stehenden Lochmaske bewegen...
Irgendwer hat so ein Ding bestimmt schon vor 100 Jahren gebaut....
Wer schreibt ein Script, dass ein "Daumenkino" auf einer Seite darstellt mit der dazugehörenden Streifenfolie zum ausdrucken?
@progandy
hehe, bin beim Suchen (nach irgendeinem "großen" RegEx) natürlich auch über dein "Kunstwerk" gestolpert, aber zwei Seiten war mir dann doch für ein Beispiel zu viel.
Aber ich wurde auch bestätigt ;).
Du und geschätzte 10-20 Forumianer hier, sagen wir mal grob 50 bis 100 insgesamt zusammen mit dem Ami-Forum, sind in der Lage, diesen "Code" zu lesen und auch z.B. Operatoren sinnvoll zu nutzen....wieviele sind das im Vergleich zu den zehntausenden, die AutoIt "native" nutzen?
Mir ist schon klar, dass die Entwicklung an einem Punkt angelangt ist, bei dem man selbst mit viel Einsatz von Manpower und Knowhow nur noch relativ kleine Fortschritte machen kann. Das ist bei jeder Produkt(weiter)entwicklung so, also auch bei AutoIt.
Für gefühlte 99% der Anwender ist in den letzten 2-3 Jahren nicht sonderlich viel verbessert worden! Von den integrierten UDF´s mal abgesehen. Also bleibt OO (mit allen Vorteilen) und nun halt u.a. ternäre Operatoren ![]()
Wenn mich mal ab und zu jemand anruft bei dem ein Script "plötzlich" nicht mehr funktioniert, dann frag ich schon garnicht mehr nach dem BS (meist wurde auf 64Bit umgestiegen) sondern kompiliere mit dem expliziten 32-Bit-Schalter und damit hat es sich....der "Vorteil" 64 Bit ist auch so eine Luftnummer...(für den Großteil der Anwender und deren Software würde es 8 Bit tun 8o) aber schön, wenn man es hat ![]()