First of all, I wrote a contract for one of my earlier clients. Some 2 years ago I started working with a client who had a CAD software for industrial facilities. The software is able to calculate i.e. pressurized tank material stresses or how the metal sheets have to be cut to create specific parts. Using ASME, Din and EN standards, it is able to calculate if the thickness of a wall resists to certain circumstances while using a specific material (or chemical combination). That software has about 1.5 million lines of code. And I am the only one maintaining that code base.
Ok... I got that contract by a headhunter located in Germany, so I had the problem that my contract forbid me to directly handle the client. Every payment had to go via the headhunter (so he can take his share of the part). This was ok for me. Unfortunately, in the end of last year, the client didn't want to work anymore with the headhunter. So he let slip the contract and didn't assign any further work.
Some weeks ago, the client contacted me directly in order to work with me. My contracts with the headhunter were still valid, so I first had to talk with him. Fortunately, the headhunter acknowledged that the customer didn't want to work with him anymore, so he signed a relief for the customer protection part of our contract for that customer.
Contracts went out this week to the customer and I have to wait for him to sign them. Happy ending on that part :)
Second thing that happened: I've been called by the customer for whom I went to Paris a couple of weeks ago. This time he wanted me to help him write a migration specification. What's that? Well, whenever a customer wants to switch software and/or hardware versions you need to have a clear idea of what is included in all this migration. The migration specification indicates what is happening, how it is happening, what has to be done, which steps have to be taken, etc. All in all, parts of it are a detailed approach of the problem.
I actually did 2 parts in the specification: The first part was the description of a software that will replace another, older one. This included the description of the different screen masks, the functionality and the transition and actions between the different screens of the application. This also included an analysis of the network messages and traffic between a client of this application and the application server.
The second part was the description of the database migration from an earlier Oracle version to the most recent one. Some table descriptions, migration steps, advices etc.
Happy ending here, too.
Another thing that happened: This week I was at a customers office because we encountered a strange behavior within the software I wrote for him. It's a long time project, so parts of the code are old... like "very old"... like 6 years old.
The problem description: In this software a client connects to a server. This server communicated with a database and another server (via Telnet). One user of the client software could not log in when using my software, but was able to log into the application when he directly uses the Telnet connection. The problem only occurred with one user and no other (of the ~200 users). AND... the problem followed the user from one machine to another. He could switch the machine and the problem followed him to the new machine.
We were able to eliminate the problem by restarting the server software...
After 2h searching for a solution, the only possible point in the software was the connection dispatching. In fact, the server holds a session for every user who logs into the system. Using the user credentials, it logs into a Telnet session with the second server and translates the incoming screens into commands for the client software. Looking at my log files, I saw that the user with the login problems actually connected to the server, started a telnet session but that telnet session froze. A reconnect would try to pick up an older session, restarting a new one, if the old one could not be used.
Now this part of the software hasn't been touched since 6 (!) years. It has been the same since the beginning of the project and never has failed. The only thing that has happened recently (and the problem showed up 2 weeks later) was a hardware migration the customer did (yes... another migration... beat me to it). Unfortunately, the customer didn't inform me about the migration so I could not take a look at the specs (specially the Java runtime used).
All in all, I could not solve the problem by debugging, because I could not reproduce the problem. I finally put in some more detailed logging information within the connect/reconnect/disconnect part of the server software, in the hope that I get further information next time the problem occurs.
On another note: After I had finished my daughters room, I started working on my new office. The roofing has been insulated, so I'll move into a ~70 square meter area which will be cut in two. The roofing has 3 windows in it to give enough light to the room. So, when working on my office ceiling, I started putting the plasterboards around the window. Suddenly a water drop fell on my head. I investigated and found that the insulation around the window a) hadn't been properly placed and b) the foam they used to close air tight the area around the window actually lifted the outer part of the roof so that water accumulated when it rains (sounds weird but that is what I saw). So currently I'm in discussions who will have to solve the problem because the insulation guys say it's not them (the foam would not cause any problem if the roof had be done properly), and I say that it's not the roofing guys because I actually checked the roofing by climbing onto the roof and using a water hose to "simulate strong raining" and nothing happened.
Now the water drops appear at the foam...
Insane Robots: Due to the above mentioned work, I had little time working on my game. Nevertheless, I now have a version where I can create movable platforms and add waypoints to them.
The story of the game is all set. BUT (there's always a but)... Although I wanted my game to be violentless, I wonder if this is the way to go for this game. Without giving too much information, the first part of the game mainly consists of avoiding other robots, play some minigames and collect stuff. The second part resembles but is targeting to repair things (use items on robots and computer consoles). While this "avoid and collect things" stuff is in the spirit of "Impossible Mission" (yes, I am THAT old), I wonder if this is enough fun today...
What is your opinion on this?