Bizarro Night
Started: Tuesday, July 5, 2005 23:46
Finished: Wednesday, July 6, 2005 01:56
Doesn't it just figure that the night I would agree to take someone else's shift and close the station, everything would go crazy? Alright, I admit that maybe that's overstating it just a little, but this was certainly the nuttiest time I've had so far there.
First off, since I had taken the closing shift, the manager had attempted to get somebody else to take my normal Tuesday shift (16:00-20:00), but that fell through, so he ended up staying later than normal doing my job (while I did the job of the vacationing individual, so to speak).
He had wanted to try and get out by 19:15 so he could addend a softball game (his kid's, I think), but due to a random smattering of odd occurrances, he didn't end up leaving until almost 19:45. After making sure that everything was set for smooth sailing for me to close (I assured him that, "Yes, I'll be fine."), he left a half hour later than he had planned.
For a while, nothing out of the ordinary happened. A kid wandered in and asked for a pack of cigarettes. Of course, I asked to see his id, and he was like, "You carding me again? I've come in here and bought cigarettes from you several times before."
"I card everybody who even looks like they might be under 21 every time."
(Not quite 100% true. There are a few customers that come in multiple times a day every day that we recognize and let pass. But usually, I don't recognize people even if I've seen them several times. When someone is at the counter, I generally don't spend much time studying their face. I endeavor to ring their order up as efficiently as possible, which means my eyes are on the product or the register almost the whole time; in keeping with customer service etiquette, I do look them in the face briefly when they enter and leave, but that's about it.)
(And yes, since neither I nor any of the other employees take the time to compare the picture in the id with the person, it would probably be pretty easy for a minor to slip by with a fake or even use somebody else's. But that's not the point. The point is to make sure that when an undercover cop comes in, we have (1) asked for an id and (2) validated the DateOfBirth field. That's it.)
So I finish ringing up this guy's order, while he tells me this story about how he's a full 23 years old. Like I care.
Business goes on.
A few minutes later, the same guy comes back in, and tells me I didn't give him his Marlboro Lights. He shows me his receipt, which verifies that he paid for the pack, but he says they're not in his pocket, and he can't find them anywhere in his car, so I must not have given them to him, or they must still be in the store somewhere.
I considered this for a moment, and replied that I am certain that I put the cigarettes on the counter in front of him. What happened with them after that, I couldn't say. He seemed quite frustrated with this, but I had a high enough degree of certainty about this that I wasn't going to give him another pack. Another customer was waiting behind him, so I told him I needed to help the next person. He left in a state of high annoyance.
Thus marked my first confrontation with a disgruntled customer at this job. I believed I had handled it correctly. I thought back through the process through in my mind. It's something I do a hundred times a day. Customer asks for cigarettes, I reach behind the counter and grab the pack, scan it, ask for id (or don't if it's obvious they're of age), key in birthdate, place cigarettes on counter. Aside from occassionally grabbing the wrong box, which results in an exchange for a different brand/flavor, there's not many ways one can screw this up.
The guy went back out to his car, and started pulling all sorts of junk out of his car seats and stuffing it into the trash. No wonder he lost them, with such a mess in there. A few minutes later, I saw him walking back toward the store. Uh oh.
He came in the door, and began to apologize profusely. He had found the pack of cigarettes under his seat. He said he knew what it was like to be in my position, and understood my dilemma, and was sorry to have hassled me.
I said, "No hard feelings. I know what it's like to not be able to find something."
So that, at least, had a happy ending.
Later...
A guy who tried to pay at the pump comes in and tells me that it wouldn't let him get more than $50 of gas, so he hung the pump up and did another transaction. (This is a known limitation of the system. Apparently, the designers thought nobody would ever want to buy more than $50 of gas at a time. Like Bill Gates with his 640k-will-always-be-enough philosophy.) But for some reason, the pump hadn't printed the receipt for his first $50. (He speculated that it was a quirk resulting from his hitting the limit. I'm not jumping to any conclusions for the reason on that.)
Now normally, printing a duplicate receipt for somebody who has paid at the pump is a simple matter. But since an additional transaction had been made since then, getting it to spit out a receipt for a previous sale wasn't quite so obvious. I knew there had to be a way, and I poked and prodded at it for a while, but the machine was not complying with my wishes.
Finally, ready to admit defeat, I reluctantly picked up the phone to call the boss. (He said I should call him if anything came up.) As I did this, the customer said, "Don't worry about it. I can just write the amount on my other receipt."
It wasn't like he was leaving mad about it, he just didn't want to cause a hassle.
I asked if he was sure, because I could get somebody on the phone who would be able to get it cleared up. He said he was, and went out the door.
Well, that downgraded the urgency of the matter, so I put the phone down. It was time for me to be mopping the floor, but this thing was bugging me. So I kept poking at the register. I knew there had to be a way.
As I tried different things, I noticed an interesting error message would sometimes appear. "Invalid receipt number."
My curiosity trigged, I wondered if it would be possible to bring up any arbitrary receipt by keying in its unique id. (Even if it did, it still wouldn't have helped me with this matter, because I wouldn't have known the unique id of the receipt.)
But this was too interesting to let go of. Out of curiosity, I tried grabbing another receipt, keyed in the big long serial number (Was this the "invalid receipt number" the error had referring to?), and tried hitting "Ticket Print." Nothing came out but another error message about an invalid number.
Hmmm... Maybe I entered it wrong. I keyed it in again, more slowly.
I wasn't prepared for what was to come next. The register froze. Completely. Nothing I could press would bring it out of its daze.
A customer entered got a six pack of beer, and walked up to the counter. This is not happening.
"Also, $20 on pump 7."
I couldn't ring up anything. I said, "Um, it will be just a second."
After 10 seconds of more futile button pressing, the display powered down. Oh no.
After remaning off just long enough to put me into full freakout mode, it came back on again, displaying what appeared to be some sort of boot screen which I have never seen before. Then some freakish error message about not being able to dial a modem.
Then the receipt paper began to spew out like crazy. At the top, it said, "A FATAL ERROR HAS OCCURRED. PLEASE CALL SUPPORT IMMEDIATELY." Followed by a date/time stamp, and then a stack trace.
The receipt printer continued madly spewing... filenames, checksums, more directory listings...
More customers were lining up.
Ok, time to pick up the phone and bother the boss. If ever was a time when that call would need to be made, this was it.
I tried the cell, which got no answer. Then went for the home phone, which also got no answer.
I apologized to the customer, and said I had never seen anything like this happen with this machine before. She actually appeared mildly amused at the whole thing.
As a fallback, I located the number of the other person who often acts as a fallback resource, and attempted to call it. No answer.
I was at my wits end. Stay calm. It's not the end of the world.
In a desperation move, I tried calling the boss's home number again. This time, I got an answer, from what sounded like a child.
"Hi, is C. there?"
(A pause, during what sounded like a conversation between the kid and its mother, who wondered who might be calling, and then saw the caller id.)
The reply came that he wasn't there right now, but would be back home in about 10 minutes.
Doh. I said I'd call back, and asked them to tell him I had called.
Well, what could I do? I made the decision to try opening up the secondary register. Though they're networked in some way, it did still appear to be at least somewhat functional, although its console did contain an "fuel comm error" message.
Opening up the second register -- which had been closed for the day -- in the middle of the evening would undoubtedly do strange things to our accounting, but it was worth a shot, and I didn't see any other way to ring up the waiting customers.
I took one of the spare cash drawers out of the office, came back to the counter, and prepared to open the second register.
The customer pointed out that the printing had stopped, and the display appeared to contain something that almost resembling a normal cashier login. Except it said, "Sales Initialized", instead of the usual root menu.
Well, it did look promising. I pressed Enter, a cashier login appeared, I typed in the appropriate numbers, and we were back to a normal transaction screen!
I scanned the customer's product, and rang up the gas (which again appeared as normal). It all worked fine again. Whew!
I quickly worked through the line of customers, took a couple moments to cool off, and decided that since everything seemed to be working again, it would be sufficient to leave a note with the manager explaining what had happened (with the attached paper dump as proof), and not bother him at home.
Part way through my note writing process, the phone rang. It was him. I explained what had happened from the beginning. (And he was indeed able to tell me how to print receipts for past pay-at-the-pump transactions; I felt silly for not having figured it out. Seems obvious now.)
I went on to tell him that I had somehow managed to completely hose the machine for a several minutes, and at his request, I read the header for the printed error message over the phone, although I still wasn't sure exactly how I had made it happen.
He seemed impressed, and said he hadn't seen anything like that happen in his 10 years on the job, but if I would leave it on his desk, he would show it to the vendor.
With all this insanity, I had to double my pace to get stuff done in time, as I was now running behind schedule. I'm sure it wasn't the most thorough mopping, but I got it done.
While I worked, I thought back over the chain of events. I theorized that in my attempt to key in big long numbers for the receipt print when I didn't really know what I was doing, I probably triggered a buffer overflow of some sort. Maybe it wasn't meant to take a big number there, but a smaller sequence that would fit within the range of, say, a 16-bit integer? (Clearly, the big serial would have exceeded 16 bits. It might have even been longer than 32 bits, although I'd have to look again to be sure.)
Well, I suppose this qualifies as some sort of dubious honor -- breaking the machine in bold new ways nobody imagined possible.
Though I didn't have much time to study it with the increased hurry of being behind schedule, the big long printed dump was quite fascinating. All the filenames appeared to have the traditional DOS 8.3 naming convention, although the directory separator was a forward slash ('/'), suggesting a UNIX-ish convention.
I imagine that's probably as close as I'll get to seeing the software guts of that system. I suppose hacking on it and attempting to find/fix the bug I triggered would be out of the question in my current role. *sigh*
After that, it went back to being a mostly ordinary (if rushed) evening. A couple of rude and obnoxious teenagers wandered in toward the end of the night. When one of them asked for cigarettes, I carded him in the standard manner. Thus, I was somewhat dismayed to see him present a military-issued id. As far as I could tell, it was valid, and he was indeed (barely) of age. [/me shakes head]
Also, when I closed, my drawer was $1.01 short. How annoying. Not catastrophic (unless it happens on a recurring basis), but it does make one wonder, Did I somehow hand out an extra dollar when I was giving somebody their change? I like to think of myself as meticulous in the extreme when it comes to cash handling, so such a moment is slightly humbling.
At least now I have a couple days off. Tomorrow, I think I'll go for a nice long bike ride.
by bouncing (2005-07-06 12:51)
I used the handhold computers with bar code readers a few times at Wal-mart and was somewhat amused to see a DOS boot process when you turned them on and off. After some poking around, it wasn't hard to find a shell and look around the filesystem. The whole thing appeared to be made by IBM, judging by the boot messages and about screens of the inventory management software it was running.
Once this guy had a massive order of paint -- like 60 gallons. I filled what I could, told him I was out of the requisite base, and phoned a nearby store to have them start mixing the remainder of the order while he drove over. That guy was so appreciative, he offered to buy me (18 years old) beer. I declined.
Crazy old ladies were always the worst customers. They were the ones who were totally unconcerned with monopolizing your time while other customers waited, insisted that you mixed the paint wrong (because it looks different wet and dry), and would ask a lot of unanswerable questions like, "Is this paint as good as paint-store paint?"