Thursday, May 29, 2008


I have a German keyboard and I like it a lot (though it'd be better if it was a clicky Type-M "buckling spring" board). I have a Type-M but it's US-American and is missing the key between the left shift and the Y (that's a Z to you QWERTY people). Ever since I first sat in front of a German keyboard all those years ago, I have preferred the layout for everything except when I need curly braces and square brackets. Thankfully I code very little. I've also since added many more characters with the Keyboard Layout Creator.

That key down on the left is a "less-than" in its normal state, a "greater-than" when shifted, and a "pipe" when combined with the AltGr (right-alt). It's great for HTML, but occasionally it's possible to enter the angle bracket in the wrong direction. This isn't usually a problem. Not usually.
We had recently a "nice" issue on live environnement : instead of purging old orders, they have purged all orders after 1st january 2008... (ok you can laugh, but was not me...)

Instead of recovering from the database backup the customer decided to reimport them from SAP using the usual $BatchLoader. So all orders were recreated with a different $InternalKey.

Now, there are orders in $YourBigAppand and Orders in $OtherBigApp, they are the same but the $KeyNum referenced in $OtherBigApp is no longer the one of $YourBigApp. This is not yet an issue as there is no control on this field. However, there will be in the future a control on this field.

So the question is : can the $KeyNum that have been deleted be reused in the futur for a different record ? We want to be 100% sure that the deleted $KeyNum will never be reused by the system. (I know putting the right $KeyNum in $OtherBigApp would be eayser...already explained this to the customer)

The ticket's from France. I know that France, like Belgium, uses the completely wacked-out AZERTY layout. I have tried to use these keyboards before and found it quite painful. The key just to the right of the left shift is the same, though, and I knew immediately what had happened:

Some genius decided to drop to a command line, connect directly to the DB, and do a massive global drop without first SELECTing the full dataset just in case someone might notice the DBA-typing-master-supergenius showing some sort of weakness in the form of self-doubt. So instead of issuing a command something along the lines of:
SELECT * WHERE Master.Table.Data = (SELECT * FROM Master.Table.Data WHERE DATE > 20080101)

He let rip with:
DROP * WHERE Master.Table.Data = (SELECT * FROM Master.Table.Data WHERE DATE > 20080101)

And he didn't notice that his finger had also contacted the shift key as he pressed the greater-than, slightly changing the intended query and command. Fuckwit.

I have to say that you have a very... unique... definition of "nice". Rest assured I'm not laughing; just as on your AZERTY keyboard, it's quite easy to accidentally type a ">" instead of a "<" on my German QWERTZ keybaord. Our $KeyNums are NEVER reused. In fact, a great deal are never used at all due to certain internal generation methods. For more detailed information, see my document, "Healthy Respect for Healthy $KeyNums Gives You Healthy Data". Inserting the new $KeyNum into the $OtherBigApp record is indeed the best solution and fully supported. You should be able to batch the job but mind the shift key. Regards, REC

And that should've been it. And lo and behold, it was... almost.
Thanks a lot for confirming !!! I just told it 3 times to the customers but they did not beleave in it. I think it is the biggest bullet I saw in my career.

I would never understand how they could realize it only one day later...

Thanks for giving my the reference. I searched for it but was not able to find it. I really dislike this new µù%$£! support web site (µù%$£! stands for some word that a polite woman is not suppose to use!)

kind regards


A fucking human! I was actually, truly, unmistakably communicating with a human being! A competent and friendly one, at that! That's my 2008 quota used up.

Root Cause: 6-Customer Error. If it'd been the fucking bozo who actually did the drop then yes, there'd be five internal notes appended demanding my Root Cause: 17.

Labels: , ,

1 non-"17"s have already commented. Click here and be the next.

Monday, May 26, 2008

Closing Time

Goddamn I hate when the phone ring. It was Meathead, my new manager after his recent promotion and the latest management shuffle. Having himself spent so much time kill floor he's much more tolerable and understanding of our problems than any of my previous headaches.

"Hey, Dog. I need to see you in my office." Fuck. What did I do now?
"Gimme five to write up this ticket solution and I'll be there."

"'Sup, Meathead?"
"It's coming up on the end of the fiscal quarter. We have to close tickets."
"I'm still trying to answer all the ones I've got! By the way, what can you tell me about a corrupt RAID-5 superblock when an fsk returns 'bad inode number 0 to ginode'?"
"Oh, hey... fuck, man! Ask TT if he can help you with that. I have an emergency conf call in 15 minutes with the other $MyLevelManagers and our boss. Stop what you're doing and close all the tickets you have which are customer-close-initiate or have expired response dates."
"Sorry. Can't do it.
"You have to!"
"Nope. I'd like to help you out but I can't."
"Look, you have to close these tickets!"
"I don't have time. There's no way I can do it and follow the brand-new ISO9K process. To complete the mindless masturbatory exercise in uselessness and fill in all that shit takes more than an hour per for any open ticket."

They sprung this one on us a couple weeks ago in a useless meeting (redundant, I know), in which a PowerPoint presentation was sadistically read at us and repeated. Lies were told about how this has been mandated for ISO9K compliance -- ISO9K makes no such requirements, only that a process exists and is fully carried out. Among the required entries in each ticket are a rephrasing of the question, a research item even if the question is "Does your software run on an Atari 800?", an initial suggestion, an internal entry justifying that suggestion, and so on.

I've been having some fun with justifying my fucking suggestions, among them:
  • Space færies from the planet Scripplick came to me in a daydream, interrupting my Tower Defense game.
  • Thanks to a very large meal the previous evening, the suggestion was one of many items which exited my gastro-intestinal system minutes prior to responding to the ticket.
  • Because I said so
  • I first tried to extract an answer by pulling every nth word from MacBeth using the Fibonacci series. This failed so I tried again with the original Pulp Fiction script. While this latter result was infinitely more amusing it still left much to be desired so I went over to ITToolbox and yanked the answer written by one of our former colleagues.

"Fuck the process, Dog!"


"We have to close the fucking tickets! Fuck the process. Close your tickets!"
"Can I have that in writing please?"
"I just told you to do it."
"Yeah, and in a few months when I'm reviewed I don't want this showing up. As soon as you send me the fucking mail I'll close 'em. You'll be amazed."
"I don't have time," he answered.
"You take one minute to mail me that ISO9K requirements are suspended for end-of-quarter closing tickets and I'll move from the top of your list of expired open issues to the bottom."

Two minutes later he was on the phone again. He'd fired off the mail but wasn't about to wait for our shitty server to take its sweet time in delivering. He promised I could look in his Sent Mail folder. I set to work.

Twelve minutes later I'd closed out 32 mooks and there are another dozen or so I can knock out this week.

I think I'm finally getting a little better at this game.

Labels: , ,

1 non-"17"s have already commented. Click here and be the next.

Friday, May 23, 2008

Make room! Make Room!

In comparison with the cost of our software licensing and support contracts, the cost of a the hardware is negligible, even with the most expensive OS running on it. In fact we could probably give away racks of 2U dual-Xeons with 16GB RAM and dual 300GB hot-swappable SCSI drives in order to push our applications. We could even throw in copies of Windows Enterprise Datacenter edition for those companies too cheap to outsource their operations where competent UNIX/Linux admins can be found.

Over the expected life of the hardware, the cost of the equipment is statistically 0 at a confidence level over 95% as compared to the costs of the software and people to make it work. Few idiots realise this -- not even our own. So perhaps I shouldn't have been as surprised to receive the following question:
File System 80GB not enough.

Please can you advise the $Megacorp recommended stategy for low cost solution with regard to Files Attach Archiving. We currently have a single FServ of size 40GB which is bound to grow by 25% every year. Thanks,

WTF? A dozen 2Us, half a dozen 4Us, a bodacious cluster all worth around a quarter-mill, and you not only want more disk space but you want it to be low-cost?!

Monkey: All you have to do is stop the App service, change $Value to $NewValue in the config file, and restart the service.
$CommonNon-WesternName: How do you stop service?
$CommonNon-WesternName: I turn off Name Resolution Server and now system not working!
$CommonNon-WesternName: Config file $YourBigApp.cfg does not execute! How to start server??
No, I don't think we'll be able to walk him through something as complicated as the four clicks it takes in Win2K3 to span volumes.
Software Support is prohibited from making hardware recommendations. This is a matter to discuss with your TAR or Sales Rep.

That said, you have almost 2TB available on your cluster. Please see our Cluster Admin documents and move the file storage system to the cluster machine as we recommend.

Easy. Free. Effective. Fully documented with explanations any techno-tard can follow. And that should've been the end of it. But it never is...
Hi there,
Thanks for your update. We are not for use the cluster for file savings. Please provide a working solution as we have only 80GB for the file storage.
WTF? The only thing running on a big honking $80K cluster doesn't eat as many resources as FreeCell or Notepad and you won't move the file storage to it? OK, maybe the solution is another box. And it has to be inexpensive. Let's try this...
If you are unwilling to move the files to the cluster you could build a white box file server with the OS on two small drives in a RAID-1 configuration and six 500GB drives for storage in a RAID-5 configuration for under €1500. Most PC motherboards include hardware RAID support. Our file storage system is an independent subsystem which is handled by the machine's operating system. Files are only stored and read; no special handling or communication exists.
Simple. Get a white box which costs less than a single 300G hot-swappable SCSI drive for the rackmounts.
Hi there,
Thanks again for your update. The amount of book keeping involved in removing, updating and adding files, attachments, etc. is huge no wonder we have third party products like File System Archiving Product "Livelink ECM - File System Archiving' from OpenText Corporation".
Bookkeeping? Huh? You're not supposed to touch those goddamned files, you ninny! No wonder you filed those other two tickets about missing and b0rked files.
There should be no "bookkeeping" involved in the file storage system. This is a function which is handled by $OurBigApp. If you are unable to store your attachments on your available 80 GB drive then you need to provide more storage space. I have already explained how you can move the files to space you already have available as well as how to build a 2.5TB storage machine in an inexpensive, safe and supported way. If you cannot or will not build such an external file storage server then you need to contact your TAR or Service Representative.

TAR Handoff. Force-close with prejudice. Root Cause: 17-Fuckwit.

Labels: , ,

0 non-"17"s have already commented. Click here and be the next.

Tuesday, May 20, 2008

And Yet I am Surprised

I have to leave this job. I must. I've reached a point I didn't think possible and having seen it, I know this can't go on.

Another high-prio Class 1 ticket came in which wasn't really Class-1 because the system wasn't down.


Our server is very close to running out of hard drive space due to the fact that our file storage is located on this server. We do not have any RAID slots available to add new hard drive space so we are looking to move the file storage to a new server. I want to make sure that I am doing this correctly with you all.

Do these steps sounds correct, or is there something I can follow for this?

[complicated 9-step process redacted]

Are there any other steps necessary for this?


So I wrote back a simple answer within an hour:


The Admin Docs explains how to move the file storage system to a new physical location in Chapter 3, "Administering the File Storage System" under the heading "Moving the the File Storage System".

However, you can simply copy the entire parent directory and structure over from the old system to the new. There's nothing else to do other than provide the new path in place of the old in the two config files and File Storage Administration records. This easier method requires a server restart.



And that should've been the end of it. I got an update two days later and I was gobsmacked. I read it and sat there with my mouth wide open in shock.

Thank you. This worked perfectly. Have a great weekend.


I was in shock because a customer did what I told him to do and then he actually thanked me! Compare and contrast this with Mook-Man, to whom I'd sent exactly the same response seven weeks earlier (I'd cut and pasted the answer I sent to Doug from Mook-Man's ticket).

It would take me too long to detail the plethora of activities but in Mook-Man's case there were 17 attempts to call me, two escalation demands, 14 follow-up questions (each one ignoring everything previously stated), 14 follow-up answers, 11 demands for Web conferencing (always around midnight my time, natch), and because this still wasn't enough, that attention whore brought in his Technical Account Representative whom he demanded work on-site. The TAR of course didn't; he used teleconferencing. The actual "problem", of course, being that Mook-Man never even looked at what I'd written much less actually try and follow the simple instructions.

This I'm used to. I've become as inured to such fuckwits as Rob the Bouncer has to Guidos. You see a problem, you sigh, you do your best to avoid escalation, you sort out any resulting mess, you collect your money and go home. So far, so good. But when I'm literally shocked because someone did the right thing and then thanked me for helping him, and then went so far as to wish me a nice weekend, there's a problem which needs to be dealt with.

And I'm now doing just that.

0 non-"17"s have already commented. Click here and be the next.

Monday, May 12, 2008

Solving a Difficult Sudoku: The "Group Cut" Method

It's been a year since I posted a new method for solving sudoku puzzles. Maybe it's just me but the hardest puzzles seem to have gotten a lot harder over the past year or two and some friends have agreed. Over the past six months I've come up with another method to retaliate: the "Group Cut". Being able to solve the hardest sudoku inside 10 minutes, I decided to make things more difficult and stopped writing helper numbers in unknown squares. That led to my discovery of this method which I use on around a quarter of all sudokus I solve these days.

Thanks to a three-day weekend (today's Pfingsten, dontchaknow) and having gotten many other things out of the way I was able to put in the necessary time to make the graphics and write this up, ensuring the method was necessary for solving the puzzle rather than just useful due to oversight.

This method is a more holistic approach but it has nothing to do with newage stupidities like crystals, perfumes and furniture arrangement. Rather, I'm using the word "holistic" in its dictionary sense: approaching the puzzle as a whole rather than as a series of discrete digits. Read on and see what I mean. I promise that there's nothing about "chakras", "chi", "energies" or any such similar nonsense.

As in previous explanations, I order each block of nine squares with a letter and each individual sqaure in the block with a number:

You can play along by grabbing yourself a copy of this puzzle from, a site I'm happy to plug because they allow unlimited free access and keep things simple. This time we're going to use Evil Puzzle 9,725,408,088:

The first thing we do is run through the rows & columns to pick off the easy prey:

That's seven boxes out of the way. A second round of row & column scanning from 1-9 places a 1 in H2 (G5 & B6 block the other possibilities) as well as in A9. The 1 at G5 and the blocked right column of block D mean that the 1 must be in the right column of A1, This then places the 1 in C1.

It's time to do a little deduction. We still have no 2s but the 3s in G8 and H5 force a 3 in J1 or J3. Now using the Double Pairs technique we see in block C there are also only possibilities in the outer columns so a 3 must appear in the middle column of block F. Due to D6 it can only be in F8.

That, in turn, places a 3 in E2.

The 6s in B1 and C5 along with the 1 in A9 force A7 to be a 6 and that's where everything comes to a grinding halt.

You have two choices: 1) Fill in every box with a load of candidates and try to fish out some pairs and triplets...

OR, 2) employ "Group Cut".

In this case the 4-6-9 in the sixth row and fourth column combine to leave only thee possible spaces in block E. These can then only be 4, 6 and 9.

The remaining numbers are 1, 2, 5, 7 and 8, and only the 7 isn't cancelled out in 6th column.

A look at the remaining two squares in this column show that the top can only be 4 or 9, tripling with the 4-6-8 we already have in E3 & E6, so H3 must be a 5 which means H5 is a 6.

Once this 6 is in place G7 has to be a 6.

From here on out it's a simple matter of elimination. Check the row, column and box of the number you just filled in and unless another group cut is necessary (possible), everything should fall into place relatively quickly.

We just added a 6 in box G and only 2, 5 and 9 are available. A 5 in H3 covers the top row of box G so G6 has to be a 5, putting a 2 in A6 and completing that column.

With the 2 filled in A6, only A2 and 5 are unfilled and the 5 in C3 determines which is which.

That leaves 2 & 4 in the top row in B2 & 3. B3 has to be the 4 and so B2 is 2.

The 4 in the sixth column determines the 4-6-9 in block E.

And so on. The puzzle is effectively done.

Here's another example if this first one wasn't clear enough, this time with evil-level puzzle 8601687531.

This time, Group Cut can be employed even before the first rounds of row and column scanning.

There are only five open squares in block D and the 2, 5 and 4 in the left column of block A cancel out two of them, leaving three. These must then be 2, 5 and 4.

The only possible numbers left for block D are 1 and 8 which already have complements in block F.

With the 1 and 8 in place, Column 1 is complete in blocks A and D, leaving only a 3, 6 and 7 available for the left column of block G. Since there are 3s in both blocks H and J, G4 must be a 3.

There are also 4s in blocks H and J which force a 4 into square G5.

So without having even scanned the rows and columns for single digits 1-9 we already have some numbers filled in.

And we can use Group Cut again because the right-most row of block J does the same thing as before to block F, placing the 3, 7 and 4.

And that's about it. If this is still unclear, add a comment.


1 non-"17"s have already commented. Click here and be the next.

Thursday, May 08, 2008


I'm in the wrong business.

In order to ingratiate myself to management and colleagues alike, right after our local data center was moved to the UK for "consolidation" I built a local file server. This held various software builds available via resumable FTP. Since Windows Exploder has never been able to move 12GB of data across even a 10 fibre channel connection, this pleased everyone.

That wasn't enough. I also made directories full of general tools and easy HTTP download menus for my fellow monkeys as well as setting up shares for management applications and data. Once I got my hands on a couple external drives I was able to then offer each monkey 20GB of personal temporary space and set the server up to auto-delete after 14 days. Considering our laptops only had 20-40GB drives, this was seen as a godsend. I was a hero and thanks to automating everything, didn't have to do much except occasionally manually check builds and add some new tools.

But as always happens, the regular availability of such a service was slowly taken for granted. Until, of course, there was no availability. One of the external hard drives with 250GB of builds died and within a week, the video on the machine's motherboard died and wouldn't accept an ISA card as a substitute. Compaq sucks.

Luckily we had one more of this exact model which was working. I was able to swap out the drives and spared myself a full install of Win2K3 and other software. Within four hours I had the system up and running and was once again the office golden boy, if only for a day. The external drive with the builds was another matter.

Both the disk and the housing are shot. We need a new one. Here at $MegaCorp we have to go through a procuremnet process. My latest manager (I'm no longer under Vera!) ess-plained what we had to do. Knowing how important it is to have builds locally available, he told me to go to the procurement site and he'd approve immediately.

No problem. Once I fought my way in through seven -- count 'em, seven log-ins -- I was on my way to getting a brand-new, shiny external drive. Except that I couldn't find it. Back to $Manager who explained that it's hidden and gave me some keywords to try. Success!

It was shaping up to be a four-banananana day. I got to the page and with only 71 clicks (yes, I counted) managed to order the thing and send off the Procurement Approval Request. A 500GB drive would come in as a cost of almost €300! I can get the same damned thing for about €99 in a local store but we're stuck with this procurement crap.

I figured it was just a matter of that being some sort of internal accounting number, that we'd only actually pay the €82 wholesale but that the €275 was a cost basis to include accounting, shipping, and all the other departmental disbursements.

$Manager asked me to come to his office. No prob. I'm a hero today. I didn't tell any customer to fuck off. My queue is clear. I can do no wrong.

"Did you SEE how much they fucking want for this drive?"

Uh... yeah. But we need the drive and we're not allowed to go out and buy it on our own.

$manager happens to have some private distributor accounts for his own sideline business and did a quick look-up.

"We can't afford this in the budget. Here's what you need to do: Go back, go to custom orders, I'll send you this distributor information and attach it to the Procurement Request. In the notes tell them that we have to go to an outside supplier because this is only 40% of what the standard supply costs are."

No problem. "I'll also add something about the standard supplied model being an unreliable drive and give 'em a link to something too technical to bother reading."

"Good idea."

So the procurement request has gone through and we're waiting for an approval from the HQ Asset Procurement division, undoubtedly something which will require approval from no fewer than five levels of hierarchy. If I get the drive before the end of the year I'll be surprised.

But something wasn't sitting right. How the hell can we be cost-basing a hundred-euro drive at almost three times its value? I asked my buddy in the equipment holding pen in the basement. The guy's a serious troll-under-the-bridge but I've helped him out a couple times so I get what I want and I don't have to appear between 14:00 and 15:15 to get it. I'm welcome down in his cage any time.

"Asset Procurement has contracts with suppliers for stable prices."
"Yeah. We get guarantees for a stable price for 12-24 months on every item. We lock in at the current price and they have to sell us whatever it is at that price for the next year or two."
"Uhh... WHAT?!"
"You're telling me that we're paying 2006 prices for a 500GB drive in 2008?"
"Same for the 2006 model laptops?"
"Yup," he said through his teeth as his lips held onto the cigar stub.
"Where do I sign up to be a supplier?"

Wotta deal. It takes a village to raise a village idiot and that's probably where we found the guy who negotiated that contract. Fuckwit.

Labels: ,

0 non-"17"s have already commented. Click here and be the next.

In compliance with $MegaCorp's general policies as well as my desire to
continue living under a roof and not the sky or a bus shelter, I add this:

The views expressed on this blog are my own and
do not necessarily reflect the views of $MegaCorp, even if every
single one of my cow-orkers who has discovered this blog agrees with me
and would also like to see the implementation of Root Cause: 17-Fuckwit.