See, I knew I wasn’t cut out for blogging. I keep forgetting to post code
updates, when that’s precisely the reason I set this thing up. Anyway.
Flagger is now at version 0.9.4. Most of the changes are bug fixes. 0.9.4
closes a bug where the wrong callbacks got called in some situations. Since
0.9.1 there’s also been a functional change, in that after_mark_as_*
methods
are only called if their corresponding attribute is changed by a mark_as_*
call.
In other news, I’m working on a JavaScript library. Not a Prototype/jQuery competitor, oh my no. I saw this the other day and decided I’d have a go at writing something similar, as an exercise in not completely forgetting how to do maths. I’ve noticed that much JavaScript that attempts to to anything geometrical does so by throwing piles of arrays around rather than having any real classes doing the work. That is to say, they favour things like
var c = vector_add([0,3,7], [5,2,8]);
whereas I’d rather write
var a = Vector.create([0,3,7]);
var b = Vector.create([5,2,8]);
var c = a.add(b);
Obviously, for this trivial example that’s a lot more work. The point of what
I’m working on is that a
and b
are fully-fledged Vector objects with loads
of useful methods attached to them for letting them interact with other vectors,
matrices, lines, planes, etc. Also, a more object-oriented approach leads to
better code legibility and lets you write code that’s closer to the maths it
represents. As a quick sneak-preview, here’s the method for finding the
intersection of two lines in 3D space:
this.intersectionWith = function(obj) {
if (!this.intersects(obj)) { return null; }
var P = this.anchor, X = this.direction,
Q = obj.anchor, Y = obj.direction;
var a = (X.dot(Q.subtract(P)) * Y.dot(Y) / X.dot(X)) +
(X.dot(Y) * Y.dot(P.subtract(Q)));
var s = a / (Y.dot(Y) - (X.dot(Y) * X.dot(Y)));
return P.add(X.x(s));
};
I guarantee that would be a lot harder to follow if we were passing around lots
of arrays and for
loops. You might not understand what lines 5 and 6 do, but
the point is that it reads almost exactly like the maths would on paper. More
news on a release date soon (hopefully).