Today after I wrote my yesterdays report I continued programming and I created View class which constructor opens glfw window and I tried to pass the three templates I created yesterday as parameters in to the View class, but I found it pretty hard, because I had to reinterpret_cast the template class pointers to some valid pointer type. Well I almost got killed at stackoverflow for asking help solving problem I had before i realized I can just cast them to another type.
After I got it working I went for a cigarette and realized that I had taken control of the main loop which was something I did not want to do, but cowboy programming on the fly is somewhat dangerous. So I removed all of the code. Wrote new template structure vertex with the coordinates as members and two vertex structure pointers as members.
Then I wrote template class to manage this Screw::Vertex structure and called the class Screw::Vertices. Now I can push as many vertices to the class as I want and my computer can handle. I can also get the vertices back as array for GL_ARRAY_BUFFERS.
I copied the Vertices\Vertex templates to another file used search and replace and I had Colors template class and Color template structure.
So I started writing the View class again, but this time I left the main loop to main(). Somehow I started writing c++ wrapper for the OpenGL functions I used. You can see me drawing triangle on the image and that is as far as I currently am. C++ code lines currently at 475 if you are interested how it took me more than a 15 minutes to draw that damn triangle.
Second day and two problems.
I got a problem passing template class as regular class method parameter and using the template class as vector type. I went into stackoverflow and ask help, but their solutions were not what I wanted, but I realized myself what I wanted and posted it as solution to my post. Soon I got almost killed for casting class pointer to char pointer. Well after I redid basically everything I had problems getting openGL to actually draw on the window I created. I had every damn function call correctly, but I was not drawing on the visible screen, which took some time to notice.
Tomorrow I am going to create Github repository for ScrewGui and start writing some 2D element classes which use the Vertices and Colors templates.
I am going to start writing daily reports about what I do with ScrewGUI my new C++ project. I forgot yesterday to write the first report, but I will write it now before continuing programming. You will get today's report later today.
What I programmed yesterday?
I Wrote three templates which were Screw::Vertex, Screw::Line and Screw::Triangle.
First I wrote Screw::Vertex templates constructor to take 4 parameters x,y,z,w which are the 3 dimensional coordinates for vertex. Then I wrote constructor which does not take the parameters, but sets the coordinates to zero.
I also wrote functions to get and set the vertex data called:
T * GetVertexData()
void SetVertexData(T x, T y, T z, T w)
The GetVertexData function returns array which contains the four coordinates and the SetVertexData takes them as parameters and sets the values to the templates private members.
Then I programmed the Screw::Line template constructor which took two Screw::Vertex objects as parameter and another constructor which did not take these Screw::Vertex objects as parameter, but created two new empty Screw::Vertex objects. I wrote the destructor to delete the created Screw::Vertex objects, but not the ones which were passed to the Screw::Line object.
I also wrote the get and set public member functions:
T * GetVertexData()
void SetVertexData(T xOne, T yOne, T zOne, T wOne, T xTwo, T yTwo, T zTwo, T wTwo)
The inner functionality was little bit different from Screw::Vertex implementation, because I did not use private coordinate members in Screw::Line, but used two Screw::Vertex objects as the private members. So I wrote the implementation so that Screw::Line get and set called Screw::Vertex Get and Set functions.
Screw::Triangle was pretty much the same as Screw::Line, but as Triangle has three points I needed three Screw::Vertex objects. I programmed the constructor which took three Screw::Vertex objects as parameter and one which created three new empty Screw::Vertex objects and the destructor which deleted these created objects.
As with the previous templates I wrote the get and set functions:
T * GetVertexData()
void SetVertexData(T VertexID, T x, T y, T z, T w)
I opted to use T VertexID because having twelve parameters was kind of long and I did not want to pass array into the function, because that would require the library user to create the array when using Screw::Triangle template.
What problems I ran into.
When I was programming Screw::Triangles Set function I realized that twelve parameters was bit too much and opted to use VertexID and force the user of the library to call the SetVertexData function three times to set every vertex coordinates. Now I am thinking if I should apply the same functionality in Screw::Line and most likely I will.
What I am going to do today.
I am going to write template View which will construct glfw window and draw the given objects on screen.
Forces developer to work under pressure as fast as they can.
The word basically means death of the project if the project is not finished when the deadline time is passed.
It is used as a way to see if workers actually do their work with sub deadlines.
Basically I think that forcing someone to work under pressure as fast as they can hurts the project and when the time estimate is not enough. When deadlines are missed even some good developers are fired if they seem to be the cause of the missing deadline and managers can easily push the fault to the developers instead of himself. When developer works as fast as they can they might miss key things and cause bugs in the project which will lead to more delays. Some people just can no work under pressure which will make them uncomfortable and they most likely will resign from the work and find easier work like teaching.
Deadline means basically death of the project if the deadline is passed without completing the project but usually the deadline does not kill the project because more time is assigned to the project if there is money to keep paying the employees.
Something I hate is that if employee who is actually good fails to meet the deadline and as meeting the deadline is basically used as proof of working instead of scratching ass. The employee might get fired even though he might have been working as fast as he could, because some manager decided to give short deadline or some unexpected problem arrived.
Deadlines should be gone at least from the world of programming, because estimating the time required for completing software project is hard, because software projects are complex. Software will be finished anyway at some stage if the developers are given enough time and to create this time money is required for paying employees.
If you run out of money you have either employed too many people or you under estimated the size of the project. So if you do not want to let the project die because you ran out of money you need to find it from somewhere else to continue the project or kill the project and become a failure, the employees most likely will be able to find new jobs anyway.
If you do realize that you are running out of cash, you should start dropping features to make size of the project smaller or find existing solutions to the features to implement them faster instead of making your employees work faster.
God did not create the world in 6 days because he set a deadline for himself. He did it because he is god, but he could also have taken 12 weeks.