To make the lines representing relationships in Dubbiya, I needed to find where a line intersects a rectangle. I was pretty sure I once knew how to do this. But the knowledge was lurking in an inaccessible part of my mind. So I needed to do some relearning.
I enjoy these parts of projects like Dubbiya. It is many times more enjoyable than the forms-and-reports programming than most of us software developers have to do in their professional life.
Along the way, I learnt that you can't have two functions in JavaScript with the same name, even if the number of arguments differ.
function doSomething(x) {
...
}
clashes with
function doSomething(x, y) {
...
}
A good IDE alerts you to this before it bites you:

I also learnt a relatively nice way to emulate namespaces in JavaScript. At the top of each JavaScript file I can have something like this:
if (typeof dubbiya === 'undefined') {
dubbiya = {};
}
if (typeof dubbiya.geometry === 'undefined') {
dubbiya.geometry = {};
}
Then each function definition is added as such:
dubbiya.geometry.intersectionPointLineLine = function (line1, line2) {
...
};
Now I can call the function as follows:
var pt1 = dubbiya.geometry.intersectionPointLineLine(line1, line2);
It's a bit silly that one needs to artificially create namespaces. Luckily a good IDE makes this style of code readable:
