Um es mit Daniel zu sagen. Gestern abend hat sich mein Rechner entschieden den Dienst zu quittieren. Er ist quasi beinahe wörtlich “abgeraucht”. Ich stelle später noch das Bild von den hübschen Ablagerungen auf den Widerständen ins Netz. Laut Rolland’s Bruder besteht bei solchen Ablagerungen die Gefahr, dass die Widerstände platzen und der Rechner anschliessend abbrennt. Und bevor er aufgehört hat, war es schon richtig heiss. Aber dann hat er sich ja abgeschaltet. Und ist nicht mehr angegangen. Das saugt mir nicht nur Geld sondern auch Zeit aus der Tasche und mit beidem bin ich im Moment nicht so reichlich gesegnet. Ich wiederhole also: das saugt!
Gehe ich mir also ein neues Mutterbrett kaufen oder gleich noch mehr? Ich habe ja Hoffnung, dass der Rest der Hardware noch lebt. Gerade hab ich mir neuen Speicher gekauft. Ich denke ich lass es wohl bei dem Mutterbrett. Dabei wollte ich doch viel lieber auf andere Rechnerteile sparen. Und wenn ich mir jetzt das billigere (nicht mehr erweiterbare) Mutterbrett kaufe, dann brauche ich mit Sicherheit sobald die ersten Demos für WoW (World of Warcraft) raus sind mehr Rechnerkraft.
So jetzt schmoll ich noch ein bisschen rum.
Muffins are really easy to make. I know that. So why did I fail miserably making muffins on 3 of 6 occasions? It’s not quick bread, it’s quick break. Even better since they were supposed to be for the party tonight.
Today is the day I finally encountered the “Master Bug” and it was so tiny … just one little keyword …. just a little bit too distinct.
The database admin called me and said to take a look at the statistics, I was producing an enormous amount of IO activity at certain times. We tested a few queries – nada. Then I thought to look into the logfile and there I found it at 2:44a.m. this morning, in the logfile the master bug had risen to unknown proportions, I scrolled for half a dozen or more pages until it reached the end. How many rows must a bug go down before you can call him a bug? This one sure went down a few.
What happened? Well the bug was a feature first. No really it was a bug produced by me trying to make the queries faster – what irony. Actually though the masterbug is the lovechild of a bug and a feature … the feature came, saw and mated with the bug to give birth to the master bug.
The feature of course had to do with the user input what else is able to produce problems of such a scale so consistently? The feature was to accept “null” as input for certain fields which then yield huge amounts of results when the database is queried, this was supposed to be stopped by counting the number of rows before fetching them … but if you count with distinct and then fetch rows without it under many circumstances something unexpected happens and therefore the master bug was able to fetch around 100k of rows from the table – repeatedly …. it came up to about 93MB IO per second for about 15 minutes.
So here I present the Master Bug, alas his young life as to be taken, quickly before he can make plans for further world domination. That’s what you get when you cross distinct and null at the same time ….
Well sure incarnate something just not money 😉 Rather chaos. Now that I have my tungs(ten) I was going to be organized and remember everything …. Since I have been wanting to apply for a credit card for some time I made an appointment with myself at the bank (!) and even managed to keep my appointment.
“Can I apply for a credit card here?”
“Yes, sure, we just fill out this form ….”
“Oops I forgot to bring a photo, can I hand that in later?”
“No, but you can take the form, add the picture and return it later.”
So that’s what I did.
5 minutes later, at work.
Watch how I pull a small envelope out of my pocket, wondering what’s in it? Well I knew I would forget the photo, therefore I put it into my pocket days ago.
Oh well now I’ll have to crumple the form a bit taking it home and returning it (if I am lucky and remember) to the bank tomorrow. This could have been easier.
Addendum, 09:17 a.m. and the story goes on. I need to fax something so I ask my boss: “Where’s the next fax?” He tells me that I need to go to the other side of the building which I do, there I find somebody to help me with the fax and of course on my way back I see a fax standing just around the corner from my office.
Before paying money I’ll do it. I’ll install windows again. I think winex sucks. Well probably not when you give those transgaming guys the bit of money. But on the other hand I am hoping to get into a cool beta test for a new mmorpg which would need windows anyhow. So what, it’ll probably crash my linux installation or something. I’ll kill if my data is lost! Just so you know.
Backup – I know.
Oh and let me repeat: winex sucks. I got it to install with that faq I mentionned. Wasn’t even too hard. But none of the games I tried would install. They all need one feature or another that isn’t explained anywhere. Diablo, Warcraft, not even Carcassonne. One time an installshield problem the other time some missing folders in the fake windows directories.
See that is what I meant by the last entry. I sat on the stupid machine all night and now I am ‘rolling back’ to a working state. Total waste of time. Total. Waste. Of. MY. time. All right I know I’ll be trying a few more games before I give up on this completely. I just want to get 1(!!!) of my favorite games running on linux to see what it is like before I go back to windows. Just 1 game and I own a lot of games. But so far I am NOT succeeding.
I have already spent about 2 evenings on this and again I am going to bed later than I planned. I didn’t even get the stupid Neverwinter Nights to work. Neither from my windows installation nor with the installer someone wrote for it. It keeps crashing on entering the actual game engine. No error message. Nothing. Nothing in the logfiles. I looked through every logfile. It doesn’t even seem to be an X problem … I am probably missing one or another stupid library and the game is not telling me.
And I thought I had deleted the complete tool.
This is a small tool which has been prone to errors from the start. It was not in the specification, so I had to program it in a hurry without a lot of thinking. First it was a buggy perl script than I converted it to java. The java program is much more structured but I have had a bunch of problems with the system calls to ‘scp’.
I thought it was all fixed and then yesterday the nightly report was missing. Again.
This morning it was missing. Again.
There was an error mail from cron: Class not found.
My first thought: oops I remember cleaning up the projects directory. I deleted some stuff. Oh no. I never added this perl script to cvs. What happened. Oh no no no.
I came to work, looked for the classes they were not there. Then it hit me: I had integrated the tool into my big project. Lucky for me.
And the winner is: ant clean-all and forgot to recompile the sub-projects.
*hits her head against the wall repeatedly*
Yet another error I will not repeat.
- first: I left in the testing configuration, for some reason I had written “null” instead of the parameter value for the identity-file to be used by my call to secure copy.
- second: this null value caused the secure copy to fail but only when run as cronjob because cron doesn’t access the identity saved in the ssh-agent!
- third: because the secure copy class is a util in a different jar I needed to recompile with ant to build the jar which eclipse doesn’t do automatically when saving the file (only creates class files), I forgot and was wondering why my changes weren’t having any effect!!!
This time it cost me just one hour. I hope my learning curve gets better any time soon.
The other night I was half-sleeping and all I could think of was
“——- You are receiving this mail because: ——-
You are the assignee for the bug, or are watching the assignee.
You reported the bug, or are watching the reporter.”
I have dreamed about computer games and all that weird stuff before. But I have never dreamed about bugzilla mails ….
Well I was hunting them with the vacuum cleaner, because they are too quick for me to kill. I was hunting them everywhere. I left the vacuum cleaner in our bedroom to be able to hunt them as they appeared. Don’t do that. I am now sure that they got back out of the thing and in the night we had about half a dozen or more of the little beasts thirsting for our blood ‘ssssssss’-ing around us.
I got no sleep.
And now I feel like it. Which really improves the quality of my work.
The most evil place to get mosquito bites is finger joints I believe. It hurts a lot and makes typing hard.
On the other hand something positive: I have already fixed two minor problems in my project, well one of them wasn’t so minor. Anyhow I’ll call them ‘Improvements’ since they are not bugfixes 🙂
But now I am stuck and I feel kind of ‘dilberty‘: It’s been a software engineering stereotype – just good for me I never said I was an expert: I am programming some framework and then different countries are implemented. So now there’s a special case where they want to do something just different for this one country. Guess when I found out:
“Ahm it’s not working!”
“So tell me what kind of error occurs …”
“Don’t know, it keeps saying I am missing this field, but I don’t want this field, I am using this one instead!”
“Wait a minute, so why did nobody tell ME?”
“We just assumed <insert whatever> …”
Nice one eh? Yeah I love it. Of course this couldn’t be done just so easily as I am just noticing now. I love last-minute-requirements.
“It makes it a lot more complicated and error prone on the technical side because this is inherent to the problem!”
“But everyone is doing it that way.”
“I CAN implement A solution if it is absolutely necessary.” (1)
“Ok good the users wouldn’t be able to handle another interface than the one they know!”
(1) Did I mention to never mention that you CAN do something if it is ‘absolutely necessary’? No one is interested what kind of solution it is so long as there is one.
My personal TOP10 of software development errors, ordered by how often these errors occur or how much time I have to spend to fix such a problem on average. Maybe I’ll be able to avoid some of these in the future. The evil thing is: I know how to fix these errors and even how to avoid them but still they keep costing me time and lots of it.
10. Making something static that should not or other way round: Don’t try this at home
9. Missing dependencies Jumpin’ Javac
8. XML parser errors: wrong format of xml file (hard to find if the XML is just an unexpected format)
7. “Method not found”-Exception Changed an interface -> doesn’t simply recompile
6. SQL Exceptions: Database user has no select rights or wrong password
5. AxisErrors and SoapExceptions: WSDL Errors?, Axis Deployment, Axis Deployment Part II, Axis of Evil Rant Part III
4. Using wrong version of jar-file (weird programm behavior mostly old bugs recurring, ‘ant clean’ helps)
3. Forgot to adapt properties (Nullpointer and other exceptions occur alternatively same behaviour
2. String manipulation errors (unexpected input or length of string causes weird results)
Surely this is a common favorite everywhere:
1. Nullpointers or ArrayIndexOutOfBounds Exception (forgot to test for unexpected user behaviour) Not my day
The most common is the basic Nullpointer which is easy to fix half the time and might still take an hour or two in the worst case. String manipulation can also be hard to find because it is most often something really unexpected that happens. The one that takes longest to fix on average is anything to do with Apache Axis (I’ll refrain from another hate rant here).
Of course this is not based on any statistics it’s just a list of stupid things that keep happening. Maybe I will update this list again in the future with more interesting errors.