2+2 = 5 (For extemely large values of two)
Da, i ja sam mislio da je ovo mnogo dobra fora, ali jučerašnje iskustvo debugovanja u Macromedia Directoru nateralo me je da totalno promenim mišljenje …
Kao što već znate, početkom ove godine sam okačio svoje LAMP (Linux Apache PHP MySQL) kopačke o klin (nadam se samo privremeno) i zbog prirode svog novog posla počeo da se bakćem sa Macromedia Directorom. Za one koji ne znaju Macromedia Director je fin alatić sličan Flashu, sa kojim možete praviti multimedijalne prezentacije, shockwave fajlove, pa čak i igrice.
Da bi bilo šta ozbiljnije mogli da radite u Directoru, neophodno je dobro poznavanje Lingo Scripta, script jezika koji ide uz Director o čijoj sam sintaksi već pisao na ovom blogu. Naravno, za svaki programski jezik poznavanje sintakse samo po sebi nije dovoljno, treba ući u srž tehnologije, što se postiže dugotrajnim radom i sticanjem iskustava. Moje jučerašnje iskustvo sa debuggerom mogu da svrstam u grupu negativnih. Da li ste ikada imali “sleepless night” zbog takozvanog “reference crap” problema u PHP-u koji sve svoje objekte prosleđuje po vrednosti a ne po referenci ? Ja jesam i slobodno mogu da kažem da je PHP malo dete u poređenju sa ovim. No idemo redom.
Nedavno sam počeo da radim na projektu u kome između ostalog treba isčupati vrednosti variabli iz excel fajla radi dinamičkog prikaza nekih grafova i merenja uticaja tih variabli. Naravno, kao i uvek “deadline is a bitch”, tako da sam bio prinuđen da koristim neke gotove biblioteke za iscrtavanje grafova umesto da sve to lepo napravim sam što bi mi oduzelo mnogo više vremena. Prilikom iscrtavanja jednog od grafika, posumnjao sam da vrednosti nisu dobro prikazane. U potrazi za bugom startovao sam debugger.
Debugger je jasno prikazivao da se prilikom iscrtavanja jednog od grafova vrednosti globalnog niza sa gomilom nekih vrednosti između 0 i 1 odjednom setuje na 0. Variabla koja nema nikakve veze sa graficima.
— gloabalArray sa vrednostima [0.250, 0.460, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050] odjednom dobija sve same nulte vrednosti ??? Čudno. Ali grafici su ipak izledali manje više kako treba. Uzeo sam kalkulator i proverio vrednosti. Sve se poklapalo. A u directoru ? Message Window kađe sledeće:
-- Welcome to Director -- put globalArray[#property] -- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] put globalArray[#property][1] -- 0 x = globalArray[1] * 100 put x -- 25
Dakle 0 * 100 = 25 ???
Posle par sati čupanja kose, rešio sam da barem otkrijem mesto gde se te vrednosti setuju na 0. Gledanjem u kod behavior scripta koji iscrtava graf, otkrio sam mesto gde on setuje precission za graf. Nešto tipa:
the floatprecision = inputPrecission
a promenljiva inputPrecission je 0
U tom trenutku vrednosti pomenutom array-u setovale su se na 0. U helpu sam otkrio da je floatprecision property globalnog movie objekta koji setuje preciznost float vrednosti. U mom slučaju na 0, tako da su brojevi iza decimale bili još uvek tu, ali nisu bili prikazivani čak ni u debuggeru!!!.
Message Window directora rekao je sledeće:
-- Welcome to Director -- put globalArray[#property] -- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] the floatprecision = 3 put globalArray[#property] -- [0.250, 0.460, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050]
I tako shvatih da su gore pomenute nule ipak bile “ektremno velike”. To nas na PMF-u nisu učili. A možda i jesu, ko će ga znati davno je to bilo. 🙂
Neka je epsilon manje od nule…