svn: r157

This commit is contained in:
Jono Spiro 2004-08-07 00:16:05 +00:00
parent 9d54a4f78c
commit fb7e8319bf
11 changed files with 119 additions and 40170 deletions

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

View File

@ -1,36 +0,0 @@
(require (lib "graphics.ss" "graphics")
(lifted mzscheme
make-hash-table
hash-table-put!
hash-table-get))
(open-graphics)
(define window (open-viewport "Debugger" 600 500))
((draw-viewport window) (make-rgb 0.95 0.95 0.95))
(define-mztake-process p ("random-Xs-v3.ss" [x-trace 6 26 bind 'num]))
(define largest-bin 0)
(define valcount (make-hash-table))
(hold (x-trace . -=> .(printf-b "largest count: ~a" largest-bin)))
(map-e (lambda (x)
(let* ([new-cnt (add1 (hash-table-get valcount x (lambda () 0)))]
[color (/ new-cnt (add1 largest-bin))])
(when (> new-cnt largest-bin) (set! largest-bin new-cnt))
(hash-table-put! valcount x new-cnt)
((draw-solid-rectangle window) (make-posn x (- 500 (* 4 new-cnt)))
1 4 ;; width height
(make-rgb 0 (* 0.75 color) color))))
x-trace)
(printf-b "count: ~a" (count-b x-trace))
(start/resume p)

View File

@ -16,19 +16,14 @@
change in each bin. change in each bin.
Try looking for small groupings of bins where all are light, or all Try looking for small groupings of bins where all are light, or all
are dark -- these represent trends in the numbers. are dark -- these represent small trends in the numbers.
Look for tortoises that stay low and black, and hares which are very Look for tortoises that stay low and black, and hares which are very
active and bright. active and bright.
Notice how the bottom tends to be rather patchy with lots of color
variation (the "start-up" phase of the random number generator),
and then towards the middle of the screen, most of the blues have
settled down and evened out.
The bars drag a bit when moving upwards (the height goes up by 2, but The bars drag a bit when moving upwards (the height goes up by 2, but
the redrawing of the latest color goes down 10 pixels) so that you can the redrawing of the latest color goes down 10 pixels) so that you can
spot vertical and horizontal trends more easily. |# spot vertical trends more easily. |#
(require (lib "graphics.ss" "graphics") (require (lib "graphics.ss" "graphics")
@ -56,7 +51,7 @@
(define-mztake-process p ("random-Xs.ss" [x-trace 4 6 bind 'x])) (define-mztake-process p ("random-xs.ss" [x-trace 4 6 bind 'x]))
#| * Create a process to debug random-xs.ss #| * Create a process to debug random-xs.ss
* Add a tracepoint at line 4, column 6; in the program, * Add a tracepoint at line 4, column 6; in the program,

View File

@ -1,7 +0,0 @@
(module |random-Xs-v3| mzscheme
(define seed-list (call-with-input-file "rand.txt"
(lambda (file)
(let loop ([num (read file)])
(if (eof-object? num) '()
(loop (read file))))))))

View File

@ -1,5 +1,5 @@
(module |random-Xs| mzscheme (module random-xs mzscheme
(define (run) (define (run)
(let loop ([x (random 100)]) (let loop ([x (random 100)])
(loop (random 100)))) (loop (random 100))))
(run)) (run))

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

View File

@ -1,115 +1,107 @@
#| The program being debugged (a module in the file "random-xs.ss") runs an infinite loop, #| The program being debugged (a module in the file "random-xs.ss") runs an infinite loop,
binding "x" to a random number between [0,100) each iteration. binding "x" to a random number between [0,100) each iteration.
This MzTake script draws a histogram of the values of x seen over time, This MzTake script draws a histogram of the values of x seen over time,
in sync with the execution of "random-xs.ss". This will run until one in sync with the execution of "random-xs.ss". This will run until one
bar reaches the top of the screen. bar reaches the top of the screen.
This histogram provides three pieces of information: This histogram provides three pieces of information:
* Each bar represents a bin, the height represents how many times * Each bar represents a bin, the height represents how many times
that "random" number was generated. that "random" number was generated.
* The brighter the blue, the faster that bin is growing compared * The brighter the blue, the faster that bin is growing compared
to the others. The darker, the slower. to the others. The darker, the slower.
* You can see a history of speeds over time based on how the colors * You can see a history of speeds over time based on how the colors
change in each bin. change in each bin.
Try looking for small groupings of bins where all are light, or all Try looking for small groupings of bins where all are light, or all
are dark -- these represent trends in the numbers. are dark -- these represent small trends in the numbers.
Look for tortoises that stay low and black, and hares which are very Look for tortoises that stay low and black, and hares which are very
active and bright. active and bright.
Notice how the bottom tends to be rather patchy with lots of color The bars drag a bit when moving upwards (the height goes up by 2, but
variation (the "start-up" phase of the random number generator), the redrawing of the latest color goes down 10 pixels) so that you can
and then towards the middle of the screen, most of the blues have spot vertical trends more easily. |#
settled down and evened out.
The bars drag a bit when moving upwards (the height goes up by 2, but (require (lib "graphics.ss" "graphics")
the redrawing of the latest color goes down 10 pixels) so that you can #| Needed for open-graphics, open-viewport, and draw-solid-ellipse |#
spot vertical and horizontal trends more easily. |#
(lifted mzscheme
make-hash-table
(require (lib "graphics.ss" "graphics") hash-table-put!
#| Needed for open-graphics, open-viewport, and draw-solid-ellipse |# hash-table-get))
#| "Lifted" is explained in FrTime's own documentation (plt/collects/frtime/doc.txt)
(lifted mzscheme Quickly put, lifting extends the functions listed above so they can take FrTime time-varying
hash-table-for-each values (such as MzTake traces) as arguments. |#
make-hash-table
hash-table-put!
hash-table-get))
#| "Lifted" is explained in FrTime's own documentation (plt/collects/frtime/doc.txt) (open-graphics)
Quickly put, lifting extends the functions listed above so they can take FrTime time-varying (define window (open-viewport "Debugger" 600 500))
values (such as MzTake traces) as arguments. |# ((draw-viewport window) (make-rgb 0.95 0.95 0.95))
#| This file doesn't animate a list of objects since the number of
objects quickly reaches the thousands (slowing drawing time severly),
and they are stationary -- so we just keep drawing the circles at
(open-graphics) their new heights based on the value in the hashtable.
(define window (open-viewport "Debugger" 600 500))
((draw-viewport window) (make-rgb 0.95 0.95 0.95)) See the doc for more information on this kind of drawing. |#
#| This file doesn't animate a list of objects since the number of
objects quickly reaches the thousands (slowing drawing time severly),
and they are stationary -- so we just keep drawing the circles at
their new heights based on the value in the hashtable. (define-mztake-process p ("random-xs.ss" [x-trace 4 6 bind 'x]))
#| * Create a process to debug random-xs.ss
See the doc for more information on this kind of drawing. |#
* Add a tracepoint at line 4, column 6; in the program,
this is right before the next iteration of the loop is called,
->(loop (random 200))
(define-mztake-process p ("random-Xs.ss" [x-trace 4 6 bind 'x]))
#| * Create a process to debug random-xs.ss * At this tracepoint, define "x-trace" to a FrTime eventstream that
recieves events containing the latest value of "x" seen,
* Add a tracepoint at line 4, column 6; in the program, every time the code at line 4, column 6, is reached. |#
this is right before the next iteration of the loop is called,
->(loop (random 200)) (define largest-bin 0)
(define valcount (make-hash-table))
* At this tracepoint, define "x-trace" to a FrTime eventstream that #| this will hold the counts for the histogram
recieves events containing the latest value of "x" seen, x is the key, and the number of times x shows up is the value |#
every time the code at line 4, column 6, is reached. |#
(define largest-bin 0) (hold (x-trace . -=> .(printf-b "largest count: ~a" largest-bin)))
(define valcount (make-hash-table)) #| Prints out the largest count every time we get a new x-trace event |#
#| this will hold the counts for the histogram
x is the key, and the number of times x shows up is the value |#
(map-e (lambda (x)
(define total-count (count-b x-trace)) (let* ([new-cnt (add1 (hash-table-get valcount x (lambda () 0)))]
[color (/ new-cnt (add1 largest-bin))])
(printf-b "count: ~a" total-count)
#| prints the count of how many events x-trace got, (when (= largest-bin 250)
aka how many values are in the histogram and on the screen. |# (kill p))
; when one of the bars reaches the top of the screen, kill the program.
(hold (x-trace . -=> .(printf-b "highest bin count: ~a" largest-bin))) (when (> new-cnt largest-bin) (set! largest-bin new-cnt))
#| Prints out the largest count every time we get a new x-trace event |# ; keep track of the largest count
(hash-table-put! valcount x new-cnt)
(map-e (lambda (x) ;; increment the value in the hashtable, starting from 0 if none exists.
(let ([new-cnt (add1 (hash-table-get valcount x (lambda () 0)))])
((draw-solid-rectangle window) (make-posn (* x 6) (- 500 (* 2 new-cnt)))
(when (zero? (modulo (value-now total-count) 1000)) 6 10 ;; width height
(hash-table-for-each (make-rgb 0 (* 0.75 color) color))))
valcount x-trace)
(lambda (x v) #| Every time x-trace gets a new value, take this latest value and pass it to a function
(let ([color (min 1 (* 50 (/ v 1000)))]) which increments the count in the hashtable, and draws a circle in the window at
((draw-solid-rectangle window) (make-posn (* x 6) (* x 6) pixels from the left, and the height is (2 * the latest count in the hashtable for that x),
(- 500 (* 10 (/ (value-now total-count) 1000)))) making a color (MAKE-RGB) that is lighter based on how fast it is growing.
6 10 ;; width height |#
(make-rgb 0 (* 0.75 color) color)))))
(set! valcount (make-hash-table))
(set! largest-bin 0)) (printf-b "count: ~a" (count-b x-trace))
#| prints the count of how many events x-trace got,
(when (> new-cnt largest-bin) (set! largest-bin new-cnt)) aka how many values are in the histogram and on the screen.
; keep track of the largest count |#
(hash-table-put! valcount x new-cnt)))
;; increment the value in the hashtable, starting from 0 if none exists. (start/resume p)
;; Start the process for random-xs.ss
x-trace)
#| Every time x-trace gets a new value, take this latest value and pass it to a function
which increments the count in the hashtable, and draws a circle in the window at
(* x 6) pixels from the left, and the height is (2 * the latest count in the hashtable for that x),
making a color (MAKE-RGB) that is lighter based on how fast it is growing. |#
(start/resume p) ;; Start the process for random-xs.ss

View File

@ -0,0 +1,5 @@
(module random-xs mzscheme
(define (run)
(let loop ([x (random 100)])
(loop (random 100))))
(run))

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 40 KiB