17 comments

[ 103 ms ] story [ 243 ms ] thread
Took me less than 5 minutes: http://play.golang.org/p/RnrpAs-iH5

I really like the outcome with multiplication: http://play.golang.org/p/vF9aq6xF10

You get some interesting box patterns if you use bitwise operators.
Oh wow the multiplication one is cool
That is nice! I couldn't resist the curiosity about the other operators, so I extended your code to include them all on one page for easy comparison;

http://play.golang.org/p/O0F1FiAl6C

mod looks super interesting too.

try y^2 + x^2 and y^2*x^2
Wonder why this was hard to imagine. x+y is constant along diagonal lines, and any given bit flip will happen every 2^b pixels. Multiplication may be a little harder but still it's a quick way to paint contour lines.
> I’m kind of amazed at how fast Javascript executes

I'm a little surprised by the author's surprise. I am on an old 1GHz laptop right now, and on both firefox and chrome it runs so fast there is no noticeable delay between clicking and seeing a result.

Which seems reasonable because it's doing a pretty small computational loop that browsers are quite good at optimizing these days. Browsers have been competing on exactly these things for years.

Nice!

There is a bug though that confused me a bit. The input has the value 1, but the hardcoded call of the draw function uses 7 on page load. I.e. line 66

  draw(7);
Oops, sorry about that! Fixed now.
That's nothing. I was _blown away_, absolutely blown away, when I saw a Sierpinsky triangle emerge out of bitwise AND:

http://play.golang.org/p/VQ-gEFB271

(Sorry for the ugly code, I just copy/pasted and changed the example from mseepgood here, and I'm not a Go coder.)

> I’m kind of amazed at how fast Javascript executes, at least in Chrome. I’m iterating over 16,384 pixels every time you hit the button, and there’s no perceptable delay at all, at least on my Macbook.

You have a computer that can execute 3 billion synchronous instructions per second* . Suppose that javascript was extremely inefficient (it's not), and required 10,000 machine instructions to iterate through the loop and set a pixel. The time to execute 10,000 machine instructions is about 50 milliseconds. I found that I didn't notice a delay until about 200 milliseconds (modifying the code with a setTimeout function). Such excessive waste would not be noticeable to a casual observer (you can run randomized A/B tests on yourself to investigate this :) ).

The work that has gone into v8 is very impressive. Arguably, however, the sheer brute force power of modern CPU's is more so. Don't underestimate it. :)

* Give or take. Setting pixels is an offscreen operation and should incur minimal I/O and scheduling overhead.