To develop the above posts a bit, vectors can be used for positions, differences between positions, directions, and normals/tangents/bi-normals/bi-tangents.

* A position vector denotes, well, a point in space.

* A difference vector has no beginning and no end in the sense of positions, it has just a direction and a length. This may be confusing, but look at it so: It is easy to find two different pairs of positions where the difference vectors are identical; you cannot tell which one resulted from which pair of positions by looking at the vectors components.

* A direction vector is a vector with its length set to 1 (unit length), so that the vector still has a direction but no distinguishable length. A difference vector can be made to a direction vector by "normalization".

* A normal/... vector is a direction vector with the constraint to have a specific angle to a line, surface, and/or other vectors.

In a homogeneous co-ordinate system a position vector has the homogeneous co-ordinate, say w, set to a value unequal to zero, where w==1 denotes the normalized case (all cases can simply be converted to the normalized case by dividing by w). All other vector kinds have a w==0. In an affine co-ordinate system the w is implicit (you as the programmer have to remember and think of which kind of vector you're dealing with). In a homogeneous coordinate system you have w as a helper, but still need to remember and think of the special constraints on normals/tangents/... as mentioned by Álvaro.

I'm sure (not to say I'm hoping) that the examples you found on the internet do consider this in the one or other way.