Creating a projection matrix

I’m trying to create a projection matrix to use in my shaders. I’ve tried to use the algorithm from here(http://openglbook.com/the-book/chapter-4-entering-the-third-dimension/) to create the matrix, but when I multiply it with the model and view matrices that I’ve created nothing displays on the screen.
This is my translation of the C code.
Sorry if there are syntax errors. I wrote this in Scala and translated it to Java.


public static Matrix4f projection(fov: Float, aspectRatio: Float, near: Float, far: Float) {
Matrix4f out = new Matrix4f();
float yScale = 1.0f / scala.math.tan((fov / 2.0f).toRadians).toFloat;
float xScale = yScale / aspectRatio;
float frustumLength = far - near;
			
float[] tempArray = new float[16];
tempArray[0] = xScale;
tempArray[5] = yScale;
tempArray[10] = -((far + near) / frustumLength);
tempArray[11] = -1;
tempArray[14] = -((2 * near * far) / frustumLength);
			
FloatBuffer buf = BufferUtils.createFloatBuffer(16);
buf.put(tempArray);
buf.flip();
out.load(buf);
return out;
}

//This is the method call
Matrix.projection(60.0f, 800.0f / 600.0f, 1.0f, 100.0f);

//and when I print the matrix that is returned I get this
1.2990382 0.0 0.0 0.0
0.0 1.7320509 0.0 0.0
0.0 0.0 -1.020202 -2.020202
0.0 0.0 -1.0 0.0

That xScale doesn’t look right. The article says f/aspect…you’ve interpreted ‘f’ to be the yScale, but how do you know?

I got yScale for f from the code sample at the top.


Matrix CreateProjectionMatrix(
	float fovy,
	float aspect_ratio,
	float near_plane,
	float far_plane
)
{
	Matrix out = { { 0 } };

	const float
		y_scale = Cotangent(DegreesToRadians(fovy / 2)),
		x_scale = y_scale / aspect_ratio,
		frustum_length = far_plane - near_plane;

	out.m[0] = x_scale;
	out.m[5] = y_scale;
	out.m[10] = -((far_plane + near_plane) / frustum_length);
	out.m[11] = -1;
	out.m[14] = -((2 * near_plane * far_plane) / frustum_length);
	
	return out;
}

I found the problem. I multiplied the matrices in the wrong order.
I used


gl_Position = model * view * perspective * in_Position

when its should be


gl_Position = perspective * model * view * in_Position