[Squeak-ev] EToys: 2 Bugs in "Expression-Builder"; und "falscher" Wertebereich bei Schieber; und Problem mit Malen+Lager

Harald Mueller harald_m_mueller at gmx.de
Son Sep 19 09:10:40 UTC 2004


Hallo -

folgendes Szenario: Lukas wollte auch die Geschwindigkeit seines LKW
steuern, und zwar auch mit Rückwärtsfahrt. Schon vorher sind wir über den
"Schieber" gestolpert. Er wollte, dass Stillstand ca. bei Reglerstand beim
unteren Drittel eintritt; nach unten dann Rückwärtsfahren (braucht nicht so
schnell zu sein), nach ober vorwärts.

1. Problem: Man kann den Schieber auch beim Malen einfügen; Lukas hat einen
roten Strich daneben an die Nullposition gemalt. Nach "Keep" sind die zwei
Dinge aber *nicht* verbunden ("grouped"), sondern bleiben einzeln und fallen
beim Herumschieben wieder auseinander - sehr unerwartet.
Wir haben dann kurz herumgeschaut nach einer zusätzlichen "Gruppierung",
aber im EToys-Kontext ist uns nicht eingefallen, wo das sein könnte ... geht
halt nicht.

2. Befragt nach dem Wertebereich des Schiebers, war Lukas' sofortige Antwort
"0 ganz unten und 100 ganz oben". Das ist nun vielleicht ein "kulturelles"
Vorurteil (auch von einigen Computerspielen, die Lukas kann), aber auch die
anderen Zahlenwerte, die bisher aufgetaucht sind (Winkel, Geschwindigkeiten,
x- und y-Position) sind immer ganze Zahlen (im Gegensatz zur Realität - aber
didaktisch doch ok) - daher ist 0.00 bis 1.00 schon sehr unerwartet und
unserer Meinung nach "falsch".

3. Jetzt kommt aber das richtige Problem: Wir haben uns - mit Hilfe einer
Tabelle auf Papier - Funktionen überlegt, um aus dem Schieber 0.00...1.00
die Geschwindigkeit -2...+8 zu machen. Die erste Funktion war
    (Schiebers Reglerwert - 0.2) * 10
Wir haben also 
a. ein Skript für "LKW fährt vorwärts um" herausgezogen
b. den "Schiebers Reglerwert" auf das "5" gezogen
c. "mit Bauchweh" (wegen der Klammern) dann "- 0.2" angehängt
d. und dann "* 10"
Leider wird das "- 0.2" ohne irgendeine Meldung akzeptiert - aber intern
dann gleich auf 0 gerundet (oder abgeschnitten). Das ist nicht ok.

[Wieso ich das (c) zugelassen habe? Erstens machen wir "exploratives Lernen"
- hätt ja gehen können :-) Zweitens weiß ich, dass dahinter Smalltalk steht
- und dort gilt ja immer "links vor rechts", also hätte es ja - zwar
didaktisch riskant/falsch, weil *gegen* "Punkt- vor Strichrechnung" - doch
auch gehen können]


Ich habe nun aber lange genug mit Programmen zu tun - also haben wir nach
ausprobieren und Nix-mit-Rückwärts die Zahlen angeschaut, und da war statt
0.2 eben 0 ... also neue Funktion ...

4. ... natürlich (für mich - Lukas war schon etwas verdattert, weil unsere
schön erarbeitete erste Funktion nicht "wollte") jetzt
    Schiebers Reglerwert * 10 - 2
... geht aber auch nicht.
Big bug: Das Ergebnis im Skript (habe ich heute erst mit Lukas nachgeschaut)
ist  
    get___Value * (10 - 2)
!!!!???????????????? (und für die erste Funktion mit dem abgeschnitteten 0.2
->0 war das Ergebnis
    get___Value - (0 * 10)
). Ich erwarte mir auf jeden Fall strenge "Punkt- vor Strichrechnung" -
alles andere ist falsch.
(Und dann muss man natürlich für max: und min: auch die Prio definieren -2
"vernünftige" Möglichkeiten wären m.E.
   "Strichrechung" = +, -
   "Punktrechnung" = alles andere
oder
   "Vergleichsrechnung" = min:, max:
   "Strichrechung" = +, -
   "Punktrechnung" = alles andere

Gleichrangige Operatoren natürlich wie üblich von links nach rechts.

Beispiel eines EToys-Ausdrucks:
    Wert1 - 3 max: 4 - Wert2 * 5
Im ersten Fall wäre die Klammerung
    (Wert1 - (3 max: 4)) - (Wert2 * 5)
im zweiten Fall :
    ((Wert1 - 3) max: (4 - (Wert2 * 5))
Das zweite ist "für mich" viel "richtiger" - wohl, weil ich max: irgendwie
mit <= in einen Topf werfe ...

Regards
Harald

-- 
NEU: GMX ProMail mit bestem Virenschutz http://www.gmx.net/de/go/mail
+++ Empfehlung der Redaktion +++ Internet Professionell 10/04 +++